diff options
author | Steve Block <steveblock@google.com> | 2010-02-02 14:57:50 +0000 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2010-02-04 15:06:55 +0000 |
commit | d0825bca7fe65beaee391d30da42e937db621564 (patch) | |
tree | 7461c49eb5844ffd1f35d1ba2c8b7584c1620823 /WebCore/manual-tests/webgl/resources/CanvasMatrix.js | |
parent | 3db770bd97c5a59b6c7574ca80a39e5a51c1defd (diff) | |
download | external_webkit-d0825bca7fe65beaee391d30da42e937db621564.zip external_webkit-d0825bca7fe65beaee391d30da42e937db621564.tar.gz external_webkit-d0825bca7fe65beaee391d30da42e937db621564.tar.bz2 |
Merge webkit.org at r54127 : Initial merge by git
Change-Id: Ib661abb595522f50ea406f72d3a0ce17f7193c82
Diffstat (limited to 'WebCore/manual-tests/webgl/resources/CanvasMatrix.js')
-rw-r--r-- | WebCore/manual-tests/webgl/resources/CanvasMatrix.js | 698 |
1 files changed, 0 insertions, 698 deletions
diff --git a/WebCore/manual-tests/webgl/resources/CanvasMatrix.js b/WebCore/manual-tests/webgl/resources/CanvasMatrix.js deleted file mode 100644 index 90fcb3f..0000000 --- a/WebCore/manual-tests/webgl/resources/CanvasMatrix.js +++ /dev/null @@ -1,698 +0,0 @@ -/* - CanvasMatrix4 class - - This class implements a 4x4 matrix. It has functions which - duplicate the functionality of the OpenGL matrix stack and - glut functions. - - IDL: - - [ - Constructor(in CanvasMatrix4 matrix), // copy passed matrix into new CanvasMatrix4 - Constructor(in sequence<float> array) // create new CanvasMatrix4 with 16 floats (row major) - Constructor() // create new CanvasMatrix4 with identity matrix - ] - interface CanvasMatrix4 { - attribute float m11; - attribute float m12; - attribute float m13; - attribute float m14; - attribute float m21; - attribute float m22; - attribute float m23; - attribute float m24; - attribute float m31; - attribute float m32; - attribute float m33; - attribute float m34; - attribute float m41; - attribute float m42; - attribute float m43; - attribute float m44; - - void load(in CanvasMatrix4 matrix); // copy the values from the passed matrix - void load(in sequence<float> array); // copy 16 floats into the matrix - sequence<float> getAsArray(); // return the matrix as an array of 16 floats - WebGLFloatArray getAsCanvasFloatArray(); // return the matrix as a WebGLFloatArray with 16 values - void makeIdentity(); // replace the matrix with identity - void transpose(); // replace the matrix with its transpose - void invert(); // replace the matrix with its inverse - - void translate(in float x, in float y, in float z); // multiply the matrix by passed translation values on the right - void scale(in float x, in float y, in float z); // multiply the matrix by passed scale values on the right - void rotate(in float angle, // multiply the matrix by passed rotation values on the right - in float x, in float y, in float z); // (angle is in degrees) - void multRight(in CanvasMatrix matrix); // multiply the matrix by the passed matrix on the right - void multLeft(in CanvasMatrix matrix); // multiply the matrix by the passed matrix on the left - void ortho(in float left, in float right, // multiply the matrix by the passed ortho values on the right - in float bottom, in float top, - in float near, in float far); - void frustum(in float left, in float right, // multiply the matrix by the passed frustum values on the right - in float bottom, in float top, - in float near, in float far); - void perspective(in float fovy, in float aspect, // multiply the matrix by the passed perspective values on the right - in float zNear, in float zFar); - void lookat(in float eyex, in float eyey, in float eyez, // multiply the matrix by the passed lookat - in float ctrx, in float ctry, in float ctrz, // values on the right - in float upx, in float upy, in float upz); - } -*/ - -CanvasMatrix4 = function(m) -{ - if (typeof m == 'object') { - if ("length" in m && m.length >= 16) { - this.load(m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7], m[8], m[9], m[10], m[11], m[12], m[13], m[14], m[15]); - return; - } - else if (m instanceof CanvasMatrix4) { - this.load(m); - return; - } - } - this.makeIdentity(); -} - -CanvasMatrix4.prototype.load = function() -{ - if (arguments.length == 1 && typeof arguments[0] == 'object') { - var matrix = arguments[0]; - - if ("length" in matrix && matrix.length == 16) { - this.m11 = matrix[0]; - this.m12 = matrix[1]; - this.m13 = matrix[2]; - this.m14 = matrix[3]; - - this.m21 = matrix[4]; - this.m22 = matrix[5]; - this.m23 = matrix[6]; - this.m24 = matrix[7]; - - this.m31 = matrix[8]; - this.m32 = matrix[9]; - this.m33 = matrix[10]; - this.m34 = matrix[11]; - - this.m41 = matrix[12]; - this.m42 = matrix[13]; - this.m43 = matrix[14]; - this.m44 = matrix[15]; - return; - } - - if (arguments[0] instanceof CanvasMatrix4) { - - this.m11 = matrix.m11; - this.m12 = matrix.m12; - this.m13 = matrix.m13; - this.m14 = matrix.m14; - - this.m21 = matrix.m21; - this.m22 = matrix.m22; - this.m23 = matrix.m23; - this.m24 = matrix.m24; - - this.m31 = matrix.m31; - this.m32 = matrix.m32; - this.m33 = matrix.m33; - this.m34 = matrix.m34; - - this.m41 = matrix.m41; - this.m42 = matrix.m42; - this.m43 = matrix.m43; - this.m44 = matrix.m44; - return; - } - } - - this.makeIdentity(); -} - -CanvasMatrix4.prototype.getAsArray = function() -{ - return [ - this.m11, this.m12, this.m13, this.m14, - this.m21, this.m22, this.m23, this.m24, - this.m31, this.m32, this.m33, this.m34, - this.m41, this.m42, this.m43, this.m44 - ]; -} - -CanvasMatrix4.prototype.getAsCanvasFloatArray = function() -{ - return new WebGLFloatArray(this.getAsArray()); -} - -CanvasMatrix4.prototype.makeIdentity = function() -{ - this.m11 = 1; - this.m12 = 0; - this.m13 = 0; - this.m14 = 0; - - this.m21 = 0; - this.m22 = 1; - this.m23 = 0; - this.m24 = 0; - - this.m31 = 0; - this.m32 = 0; - this.m33 = 1; - this.m34 = 0; - - this.m41 = 0; - this.m42 = 0; - this.m43 = 0; - this.m44 = 1; -} - -CanvasMatrix4.prototype.transpose = function() -{ - var tmp = this.m12; - this.m12 = this.m21; - this.m21 = tmp; - - tmp = this.m13; - this.m13 = this.m31; - this.m31 = tmp; - - tmp = this.m14; - this.m14 = this.m41; - this.m41 = tmp; - - tmp = this.m23; - this.m23 = this.m32; - this.m32 = tmp; - - tmp = this.m24; - this.m24 = this.m42; - this.m42 = tmp; - - tmp = this.m34; - this.m34 = this.m43; - this.m43 = tmp; -} - -CanvasMatrix4.prototype.invert = function() -{ - // Calculate the 4x4 determinant - // If the determinant is zero, - // then the inverse matrix is not unique. - var det = this._determinant4x4(); - - if (Math.abs(det) < 1e-8) - return null; - - this._makeAdjoint(); - - // Scale the adjoint matrix to get the inverse - this.m11 /= det; - this.m12 /= det; - this.m13 /= det; - this.m14 /= det; - - this.m21 /= det; - this.m22 /= det; - this.m23 /= det; - this.m24 /= det; - - this.m31 /= det; - this.m32 /= det; - this.m33 /= det; - this.m34 /= det; - - this.m41 /= det; - this.m42 /= det; - this.m43 /= det; - this.m44 /= det; -} - -CanvasMatrix4.prototype.translate = function(x,y,z) -{ - if (x == undefined) - x = 0; - if (y == undefined) - y = 0; - if (z == undefined) - z = 0; - - var matrix = new CanvasMatrix4(); - matrix.m41 = x; - matrix.m42 = y; - matrix.m43 = z; - - this.multRight(matrix); -} - -CanvasMatrix4.prototype.scale = function(x,y,z) -{ - if (x == undefined) - x = 1; - if (z == undefined) { - if (y == undefined) { - y = x; - z = x; - } - else - z = 1; - } - else if (y == undefined) - y = x; - - var matrix = new CanvasMatrix4(); - matrix.m11 = x; - matrix.m22 = y; - matrix.m33 = z; - - this.multRight(matrix); -} - -CanvasMatrix4.prototype.rotate = function(angle,x,y,z) -{ - // angles are in degrees. Switch to radians - angle = angle / 180 * Math.PI; - - angle /= 2; - var sinA = Math.sin(angle); - var cosA = Math.cos(angle); - var sinA2 = sinA * sinA; - - // normalize - var length = Math.sqrt(x * x + y * y + z * z); - if (length == 0) { - // bad vector, just use something reasonable - x = 0; - y = 0; - z = 1; - } else if (length != 1) { - x /= length; - y /= length; - z /= length; - } - - var mat = new CanvasMatrix4(); - - // optimize case where axis is along major axis - if (x == 1 && y == 0 && z == 0) { - mat.m11 = 1; - mat.m12 = 0; - mat.m13 = 0; - mat.m21 = 0; - mat.m22 = 1 - 2 * sinA2; - mat.m23 = 2 * sinA * cosA; - mat.m31 = 0; - mat.m32 = -2 * sinA * cosA; - mat.m33 = 1 - 2 * sinA2; - mat.m14 = mat.m24 = mat.m34 = 0; - mat.m41 = mat.m42 = mat.m43 = 0; - mat.m44 = 1; - } else if (x == 0 && y == 1 && z == 0) { - mat.m11 = 1 - 2 * sinA2; - mat.m12 = 0; - mat.m13 = -2 * sinA * cosA; - mat.m21 = 0; - mat.m22 = 1; - mat.m23 = 0; - mat.m31 = 2 * sinA * cosA; - mat.m32 = 0; - mat.m33 = 1 - 2 * sinA2; - mat.m14 = mat.m24 = mat.m34 = 0; - mat.m41 = mat.m42 = mat.m43 = 0; - mat.m44 = 1; - } else if (x == 0 && y == 0 && z == 1) { - mat.m11 = 1 - 2 * sinA2; - mat.m12 = 2 * sinA * cosA; - mat.m13 = 0; - mat.m21 = -2 * sinA * cosA; - mat.m22 = 1 - 2 * sinA2; - mat.m23 = 0; - mat.m31 = 0; - mat.m32 = 0; - mat.m33 = 1; - mat.m14 = mat.m24 = mat.m34 = 0; - mat.m41 = mat.m42 = mat.m43 = 0; - mat.m44 = 1; - } else { - var x2 = x*x; - var y2 = y*y; - var z2 = z*z; - - mat.m11 = 1 - 2 * (y2 + z2) * sinA2; - mat.m12 = 2 * (x * y * sinA2 + z * sinA * cosA); - mat.m13 = 2 * (x * z * sinA2 - y * sinA * cosA); - mat.m21 = 2 * (y * x * sinA2 - z * sinA * cosA); - mat.m22 = 1 - 2 * (z2 + x2) * sinA2; - mat.m23 = 2 * (y * z * sinA2 + x * sinA * cosA); - mat.m31 = 2 * (z * x * sinA2 + y * sinA * cosA); - mat.m32 = 2 * (z * y * sinA2 - x * sinA * cosA); - mat.m33 = 1 - 2 * (x2 + y2) * sinA2; - mat.m14 = mat.m24 = mat.m34 = 0; - mat.m41 = mat.m42 = mat.m43 = 0; - mat.m44 = 1; - } - this.multRight(mat); -} - -CanvasMatrix4.prototype.multRight = function(mat) -{ - var m11 = (this.m11 * mat.m11 + this.m12 * mat.m21 - + this.m13 * mat.m31 + this.m14 * mat.m41); - var m12 = (this.m11 * mat.m12 + this.m12 * mat.m22 - + this.m13 * mat.m32 + this.m14 * mat.m42); - var m13 = (this.m11 * mat.m13 + this.m12 * mat.m23 - + this.m13 * mat.m33 + this.m14 * mat.m43); - var m14 = (this.m11 * mat.m14 + this.m12 * mat.m24 - + this.m13 * mat.m34 + this.m14 * mat.m44); - - var m21 = (this.m21 * mat.m11 + this.m22 * mat.m21 - + this.m23 * mat.m31 + this.m24 * mat.m41); - var m22 = (this.m21 * mat.m12 + this.m22 * mat.m22 - + this.m23 * mat.m32 + this.m24 * mat.m42); - var m23 = (this.m21 * mat.m13 + this.m22 * mat.m23 - + this.m23 * mat.m33 + this.m24 * mat.m43); - var m24 = (this.m21 * mat.m14 + this.m22 * mat.m24 - + this.m23 * mat.m34 + this.m24 * mat.m44); - - var m31 = (this.m31 * mat.m11 + this.m32 * mat.m21 - + this.m33 * mat.m31 + this.m34 * mat.m41); - var m32 = (this.m31 * mat.m12 + this.m32 * mat.m22 - + this.m33 * mat.m32 + this.m34 * mat.m42); - var m33 = (this.m31 * mat.m13 + this.m32 * mat.m23 - + this.m33 * mat.m33 + this.m34 * mat.m43); - var m34 = (this.m31 * mat.m14 + this.m32 * mat.m24 - + this.m33 * mat.m34 + this.m34 * mat.m44); - - var m41 = (this.m41 * mat.m11 + this.m42 * mat.m21 - + this.m43 * mat.m31 + this.m44 * mat.m41); - var m42 = (this.m41 * mat.m12 + this.m42 * mat.m22 - + this.m43 * mat.m32 + this.m44 * mat.m42); - var m43 = (this.m41 * mat.m13 + this.m42 * mat.m23 - + this.m43 * mat.m33 + this.m44 * mat.m43); - var m44 = (this.m41 * mat.m14 + this.m42 * mat.m24 - + this.m43 * mat.m34 + this.m44 * mat.m44); - - this.m11 = m11; - this.m12 = m12; - this.m13 = m13; - this.m14 = m14; - - this.m21 = m21; - this.m22 = m22; - this.m23 = m23; - this.m24 = m24; - - this.m31 = m31; - this.m32 = m32; - this.m33 = m33; - this.m34 = m34; - - this.m41 = m41; - this.m42 = m42; - this.m43 = m43; - this.m44 = m44; -} - -CanvasMatrix4.prototype.multLeft = function(mat) -{ - var m11 = (mat.m11 * this.m11 + mat.m12 * this.m21 - + mat.m13 * this.m31 + mat.m14 * this.m41); - var m12 = (mat.m11 * this.m12 + mat.m12 * this.m22 - + mat.m13 * this.m32 + mat.m14 * this.m42); - var m13 = (mat.m11 * this.m13 + mat.m12 * this.m23 - + mat.m13 * this.m33 + mat.m14 * this.m43); - var m14 = (mat.m11 * this.m14 + mat.m12 * this.m24 - + mat.m13 * this.m34 + mat.m14 * this.m44); - - var m21 = (mat.m21 * this.m11 + mat.m22 * this.m21 - + mat.m23 * this.m31 + mat.m24 * this.m41); - var m22 = (mat.m21 * this.m12 + mat.m22 * this.m22 - + mat.m23 * this.m32 + mat.m24 * this.m42); - var m23 = (mat.m21 * this.m13 + mat.m22 * this.m23 - + mat.m23 * this.m33 + mat.m24 * this.m43); - var m24 = (mat.m21 * this.m14 + mat.m22 * this.m24 - + mat.m23 * this.m34 + mat.m24 * this.m44); - - var m31 = (mat.m31 * this.m11 + mat.m32 * this.m21 - + mat.m33 * this.m31 + mat.m34 * this.m41); - var m32 = (mat.m31 * this.m12 + mat.m32 * this.m22 - + mat.m33 * this.m32 + mat.m34 * this.m42); - var m33 = (mat.m31 * this.m13 + mat.m32 * this.m23 - + mat.m33 * this.m33 + mat.m34 * this.m43); - var m34 = (mat.m31 * this.m14 + mat.m32 * this.m24 - + mat.m33 * this.m34 + mat.m34 * this.m44); - - var m41 = (mat.m41 * this.m11 + mat.m42 * this.m21 - + mat.m43 * this.m31 + mat.m44 * this.m41); - var m42 = (mat.m41 * this.m12 + mat.m42 * this.m22 - + mat.m43 * this.m32 + mat.m44 * this.m42); - var m43 = (mat.m41 * this.m13 + mat.m42 * this.m23 - + mat.m43 * this.m33 + mat.m44 * this.m43); - var m44 = (mat.m41 * this.m14 + mat.m42 * this.m24 - + mat.m43 * this.m34 + mat.m44 * this.m44); - - this.m11 = m11; - this.m12 = m12; - this.m13 = m13; - this.m14 = m14; - - this.m21 = m21; - this.m22 = m22; - this.m23 = m23; - this.m24 = m24; - - this.m31 = m31; - this.m32 = m32; - this.m33 = m33; - this.m34 = m34; - - this.m41 = m41; - this.m42 = m42; - this.m43 = m43; - this.m44 = m44; -} - -CanvasMatrix4.prototype.ortho = function(left, right, bottom, top, near, far) -{ - var tx = (left + right) / (left - right); - var ty = (top + bottom) / (top - bottom); - var tz = (far + near) / (far - near); - - var matrix = new CanvasMatrix4(); - matrix.m11 = 2 / (left - right); - matrix.m12 = 0; - matrix.m13 = 0; - matrix.m14 = 0; - matrix.m21 = 0; - matrix.m22 = 2 / (top - bottom); - matrix.m23 = 0; - matrix.m24 = 0; - matrix.m31 = 0; - matrix.m32 = 0; - matrix.m33 = -2 / (far - near); - matrix.m34 = 0; - matrix.m41 = tx; - matrix.m42 = ty; - matrix.m43 = tz; - matrix.m44 = 1; - - this.multRight(matrix); -} - -CanvasMatrix4.prototype.frustum = function(left, right, bottom, top, near, far) -{ - var matrix = new CanvasMatrix4(); - var A = (right + left) / (right - left); - var B = (top + bottom) / (top - bottom); - var C = -(far + near) / (far - near); - var D = -(2 * far * near) / (far - near); - - matrix.m11 = (2 * near) / (right - left); - matrix.m12 = 0; - matrix.m13 = 0; - matrix.m14 = 0; - - matrix.m21 = 0; - matrix.m22 = 2 * near / (top - bottom); - matrix.m23 = 0; - matrix.m24 = 0; - - matrix.m31 = A; - matrix.m32 = B; - matrix.m33 = C; - matrix.m34 = -1; - - matrix.m41 = 0; - matrix.m42 = 0; - matrix.m43 = D; - matrix.m44 = 0; - - this.multRight(matrix); -} - -CanvasMatrix4.prototype.perspective = function(fovy, aspect, zNear, zFar) -{ - var top = Math.tan(fovy * Math.PI / 360) * zNear; - var bottom = -top; - var left = aspect * bottom; - var right = aspect * top; - this.frustum(left, right, bottom, top, zNear, zFar); -} - -CanvasMatrix4.prototype.lookat = function(eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz) -{ - var matrix = new CanvasMatrix4(); - - // Make rotation matrix - - // Z vector - var zx = eyex - centerx; - var zy = eyey - centery; - var zz = eyez - centerz; - var mag = Math.sqrt(zx * zx + zy * zy + zz * zz); - if (mag) { - zx /= mag; - zy /= mag; - zz /= mag; - } - - // Y vector - var yx = upx; - var yy = upy; - var yz = upz; - - // X vector = Y cross Z - xx = yy * zz - yz * zy; - xy = -yx * zz + yz * zx; - xz = yx * zy - yy * zx; - - // Recompute Y = Z cross X - yx = zy * xz - zz * xy; - yy = -zx * xz + zz * xx; - yx = zx * xy - zy * xx; - - // cross product gives area of parallelogram, which is < 1.0 for - // non-perpendicular unit-length vectors; so normalize x, y here - - mag = Math.sqrt(xx * xx + xy * xy + xz * xz); - if (mag) { - xx /= mag; - xy /= mag; - xz /= mag; - } - - mag = Math.sqrt(yx * yx + yy * yy + yz * yz); - if (mag) { - yx /= mag; - yy /= mag; - yz /= mag; - } - - matrix.m11 = xx; - matrix.m12 = xy; - matrix.m13 = xz; - matrix.m14 = 0; - - matrix.m21 = yx; - matrix.m22 = yy; - matrix.m23 = yz; - matrix.m24 = 0; - - matrix.m31 = zx; - matrix.m32 = zy; - matrix.m33 = zz; - matrix.m34 = 0; - - matrix.m41 = 0; - matrix.m42 = 0; - matrix.m43 = 0; - matrix.m44 = 1; - matrix.translate(-eyex, -eyey, -eyez); - - this.multRight(matrix); -} - -// Support functions -CanvasMatrix4.prototype._determinant2x2 = function(a, b, c, d) -{ - return a * d - b * c; -} - -CanvasMatrix4.prototype._determinant3x3 = function(a1, a2, a3, b1, b2, b3, c1, c2, c3) -{ - return a1 * this._determinant2x2(b2, b3, c2, c3) - - b1 * this._determinant2x2(a2, a3, c2, c3) - + c1 * this._determinant2x2(a2, a3, b2, b3); -} - -CanvasMatrix4.prototype._determinant4x4 = function() -{ - var a1 = this.m11; - var b1 = this.m12; - var c1 = this.m13; - var d1 = this.m14; - - var a2 = this.m21; - var b2 = this.m22; - var c2 = this.m23; - var d2 = this.m24; - - var a3 = this.m31; - var b3 = this.m32; - var c3 = this.m33; - var d3 = this.m34; - - var a4 = this.m41; - var b4 = this.m42; - var c4 = this.m43; - var d4 = this.m44; - - return a1 * this._determinant3x3(b2, b3, b4, c2, c3, c4, d2, d3, d4) - - b1 * this._determinant3x3(a2, a3, a4, c2, c3, c4, d2, d3, d4) - + c1 * this._determinant3x3(a2, a3, a4, b2, b3, b4, d2, d3, d4) - - d1 * this._determinant3x3(a2, a3, a4, b2, b3, b4, c2, c3, c4); -} - -CanvasMatrix4.prototype._makeAdjoint = function() -{ - var a1 = this.m11; - var b1 = this.m12; - var c1 = this.m13; - var d1 = this.m14; - - var a2 = this.m21; - var b2 = this.m22; - var c2 = this.m23; - var d2 = this.m24; - - var a3 = this.m31; - var b3 = this.m32; - var c3 = this.m33; - var d3 = this.m34; - - var a4 = this.m41; - var b4 = this.m42; - var c4 = this.m43; - var d4 = this.m44; - - // Row column labeling reversed since we transpose rows & columns - this.m11 = this._determinant3x3(b2, b3, b4, c2, c3, c4, d2, d3, d4); - this.m21 = - this._determinant3x3(a2, a3, a4, c2, c3, c4, d2, d3, d4); - this.m31 = this._determinant3x3(a2, a3, a4, b2, b3, b4, d2, d3, d4); - this.m41 = - this._determinant3x3(a2, a3, a4, b2, b3, b4, c2, c3, c4); - - this.m12 = - this._determinant3x3(b1, b3, b4, c1, c3, c4, d1, d3, d4); - this.m22 = this._determinant3x3(a1, a3, a4, c1, c3, c4, d1, d3, d4); - this.m32 = - this._determinant3x3(a1, a3, a4, b1, b3, b4, d1, d3, d4); - this.m42 = this._determinant3x3(a1, a3, a4, b1, b3, b4, c1, c3, c4); - - this.m13 = this._determinant3x3(b1, b2, b4, c1, c2, c4, d1, d2, d4); - this.m23 = - this._determinant3x3(a1, a2, a4, c1, c2, c4, d1, d2, d4); - this.m33 = this._determinant3x3(a1, a2, a4, b1, b2, b4, d1, d2, d4); - this.m43 = - this._determinant3x3(a1, a2, a4, b1, b2, b4, c1, c2, c4); - - this.m14 = - this._determinant3x3(b1, b2, b3, c1, c2, c3, d1, d2, d3); - this.m24 = this._determinant3x3(a1, a2, a3, c1, c2, c3, d1, d2, d3); - this.m34 = - this._determinant3x3(a1, a2, a3, b1, b2, b3, d1, d2, d3); - this.m44 = this._determinant3x3(a1, a2, a3, b1, b2, b3, c1, c2, c3); -} |