linearly 0.2.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +16 -0
  2. package/lib/{common.d.ts → cjs/common.d.ts} +1 -0
  3. package/lib/cjs/common.d.ts.map +1 -0
  4. package/lib/cjs/common.js +20 -0
  5. package/lib/{index.d.ts → cjs/index.d.ts} +1 -0
  6. package/lib/cjs/index.d.ts.map +1 -0
  7. package/lib/cjs/index.js +35 -0
  8. package/lib/{mat2.d.ts → cjs/mat2.d.ts} +12 -0
  9. package/lib/cjs/mat2.d.ts.map +1 -0
  10. package/lib/cjs/mat2.js +224 -0
  11. package/lib/{mat2d.d.ts → cjs/mat2d.d.ts} +13 -1
  12. package/lib/cjs/mat2d.d.ts.map +1 -0
  13. package/lib/cjs/mat2d.js +291 -0
  14. package/lib/{mat3.d.ts → cjs/mat3.d.ts} +2 -0
  15. package/lib/cjs/mat3.d.ts.map +1 -0
  16. package/lib/cjs/mat3.js +450 -0
  17. package/lib/{mat4.d.ts → cjs/mat4.d.ts} +5 -3
  18. package/lib/cjs/mat4.d.ts.map +1 -0
  19. package/lib/cjs/mat4.js +1250 -0
  20. package/lib/{quat.d.ts → cjs/quat.d.ts} +3 -1
  21. package/lib/cjs/quat.d.ts.map +1 -0
  22. package/lib/cjs/quat.js +504 -0
  23. package/lib/{vec2.d.ts → cjs/vec2.d.ts} +2 -0
  24. package/lib/cjs/vec2.d.ts.map +1 -0
  25. package/lib/cjs/vec2.js +205 -0
  26. package/lib/{vec3.d.ts → cjs/vec3.d.ts} +3 -1
  27. package/lib/cjs/vec3.d.ts.map +1 -0
  28. package/lib/cjs/vec3.js +409 -0
  29. package/lib/{vec4.d.ts → cjs/vec4.d.ts} +2 -0
  30. package/lib/cjs/vec4.d.ts.map +1 -0
  31. package/lib/cjs/vec4.js +319 -0
  32. package/lib/esm/common.d.ts +12 -0
  33. package/lib/esm/common.d.ts.map +1 -0
  34. package/lib/esm/common.js +16 -0
  35. package/lib/esm/index.d.ts +17 -0
  36. package/lib/esm/index.d.ts.map +1 -0
  37. package/lib/esm/index.js +9 -0
  38. package/lib/esm/mat2.d.ts +91 -0
  39. package/lib/esm/mat2.d.ts.map +1 -0
  40. package/lib/esm/mat2.js +179 -0
  41. package/lib/esm/mat2d.d.ts +102 -0
  42. package/lib/esm/mat2d.d.ts.map +1 -0
  43. package/lib/esm/mat2d.js +246 -0
  44. package/lib/esm/mat3.d.ts +120 -0
  45. package/lib/esm/mat3.d.ts.map +1 -0
  46. package/lib/esm/mat3.js +400 -0
  47. package/lib/esm/mat4.d.ts +313 -0
  48. package/lib/esm/mat4.d.ts.map +1 -0
  49. package/lib/esm/mat4.js +1183 -0
  50. package/lib/esm/quat.d.ts +220 -0
  51. package/lib/esm/quat.d.ts.map +1 -0
  52. package/lib/esm/quat.js +458 -0
  53. package/lib/esm/vec2.d.ts +66 -0
  54. package/lib/esm/vec2.d.ts.map +1 -0
  55. package/lib/esm/vec2.js +149 -0
  56. package/lib/esm/vec3.d.ts +167 -0
  57. package/lib/esm/vec3.d.ts.map +1 -0
  58. package/lib/esm/vec3.js +348 -0
  59. package/lib/esm/vec4.d.ts +116 -0
  60. package/lib/esm/vec4.d.ts.map +1 -0
  61. package/lib/esm/vec4.js +266 -0
  62. package/package.json +6 -4
  63. package/lib/common.js +0 -30
  64. package/lib/index.js +0 -45
  65. package/lib/mat2.js +0 -208
  66. package/lib/mat2d.js +0 -291
  67. package/lib/mat2d.test.d.ts +0 -1
  68. package/lib/mat2d.test.js +0 -123
  69. package/lib/mat3.js +0 -450
  70. package/lib/mat4.js +0 -1252
  71. package/lib/quat.js +0 -514
  72. package/lib/vec2.js +0 -211
  73. package/lib/vec2.test.d.ts +0 -1
  74. package/lib/vec2.test.js +0 -143
  75. package/lib/vec3.js +0 -408
  76. package/lib/vec3.test.d.ts +0 -1
  77. package/lib/vec3.test.js +0 -143
  78. package/lib/vec4.js +0 -316
package/lib/mat4.js DELETED
@@ -1,1252 +0,0 @@
1
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
2
- if (k2 === undefined) k2 = k;
3
- var desc = Object.getOwnPropertyDescriptor(m, k);
4
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
5
- desc = { enumerable: true, get: function() { return m[k]; } };
6
- }
7
- Object.defineProperty(o, k2, desc);
8
- }) : (function(o, m, k, k2) {
9
- if (k2 === undefined) k2 = k;
10
- o[k2] = m[k];
11
- }));
12
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
13
- Object.defineProperty(o, "default", { enumerable: true, value: v });
14
- }) : function(o, v) {
15
- o["default"] = v;
16
- });
17
- var __importStar = (this && this.__importStar) || function (mod) {
18
- if (mod && mod.__esModule) return mod;
19
- var result = {};
20
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
21
- __setModuleDefault(result, mod);
22
- return result;
23
- };
24
- (function (factory) {
25
- if (typeof module === "object" && typeof module.exports === "object") {
26
- var v = factory(require, exports);
27
- if (v !== undefined) module.exports = v;
28
- }
29
- else if (typeof define === "function" && define.amd) {
30
- define(["require", "exports", "./common"], factory);
31
- }
32
- })(function (require, exports) {
33
- "use strict";
34
- Object.defineProperty(exports, "__esModule", { value: true });
35
- exports.equals = exports.exactEquals = exports.multiplyScalarAndAdd = exports.multiplyScalar = exports.subtract = exports.add = exports.frob = exports.targetTo = exports.lookAt = exports.orthoZO = exports.ortho = exports.orthoNO = exports.perspectiveFromFieldOfView = exports.perspectiveZO = exports.perspective = exports.perspectiveNO = exports.frustum = exports.fromQuat = exports.fromRotationTranslationScaleOrigin = exports.fromRotationTranslationScale = exports.decompose = exports.getRotation = exports.getScaling = exports.getTranslation = exports.fromRotationTranslation = exports.fromZRotation = exports.fromYRotation = exports.fromXRotation = exports.fromRotation = exports.fromScaling = exports.fromTranslation = exports.rotateZ = exports.rotateY = exports.rotateX = exports.rotate = exports.scale = exports.translate = exports.multiply = exports.determinant = exports.adjoint = exports.invert = exports.transpose = exports.zero = exports.identity = void 0;
36
- const Common = __importStar(require("./common"));
37
- /**
38
- * 4x4 Matrix<br>Format: column-major, when typed out it looks like row-major<br>The matrices are being post multiplied.
39
- */
40
- /**
41
- * The identity matrix of mat4
42
- */
43
- // prettier-ignore
44
- exports.identity = Object.freeze([
45
- 1, 0, 0, 0,
46
- 0, 1, 0, 0,
47
- 0, 0, 1, 0,
48
- 0, 0, 0, 1,
49
- ]);
50
- exports.zero = Object.freeze([
51
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
52
- ]);
53
- /**
54
- * Transpose the values of a mat4
55
- */
56
- function transpose(a) {
57
- // prettier-ignore
58
- return [
59
- a[0], a[4], a[8], a[12],
60
- a[1], a[5], a[9], a[13],
61
- a[2], a[6], a[10], a[14],
62
- a[3], a[7], a[11], a[15],
63
- ];
64
- }
65
- exports.transpose = transpose;
66
- /**
67
- * Inverts a mat4
68
- */
69
- function invert(a) {
70
- // prettier-ignore
71
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
72
- const b00 = a00 * a11 - a01 * a10;
73
- const b01 = a00 * a12 - a02 * a10;
74
- const b02 = a00 * a13 - a03 * a10;
75
- const b03 = a01 * a12 - a02 * a11;
76
- const b04 = a01 * a13 - a03 * a11;
77
- const b05 = a02 * a13 - a03 * a12;
78
- const b06 = a20 * a31 - a21 * a30;
79
- const b07 = a20 * a32 - a22 * a30;
80
- const b08 = a20 * a33 - a23 * a30;
81
- const b09 = a21 * a32 - a22 * a31;
82
- const b10 = a21 * a33 - a23 * a31;
83
- const b11 = a22 * a33 - a23 * a32;
84
- // Calculate the determinant
85
- const det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
86
- if (!det) {
87
- return null;
88
- }
89
- const detinv = 1 / det;
90
- return [
91
- (a11 * b11 - a12 * b10 + a13 * b09) * detinv,
92
- (a02 * b10 - a01 * b11 - a03 * b09) * detinv,
93
- (a31 * b05 - a32 * b04 + a33 * b03) * detinv,
94
- (a22 * b04 - a21 * b05 - a23 * b03) * detinv,
95
- (a12 * b08 - a10 * b11 - a13 * b07) * detinv,
96
- (a00 * b11 - a02 * b08 + a03 * b07) * detinv,
97
- (a32 * b02 - a30 * b05 - a33 * b01) * detinv,
98
- (a20 * b05 - a22 * b02 + a23 * b01) * detinv,
99
- (a10 * b10 - a11 * b08 + a13 * b06) * detinv,
100
- (a01 * b08 - a00 * b10 - a03 * b06) * detinv,
101
- (a30 * b04 - a31 * b02 + a33 * b00) * detinv,
102
- (a21 * b02 - a20 * b04 - a23 * b00) * detinv,
103
- (a11 * b07 - a10 * b09 - a12 * b06) * detinv,
104
- (a00 * b09 - a01 * b07 + a02 * b06) * detinv,
105
- (a31 * b01 - a30 * b03 - a32 * b00) * detinv,
106
- (a20 * b03 - a21 * b01 + a22 * b00) * detinv,
107
- ];
108
- }
109
- exports.invert = invert;
110
- /**
111
- * Calculates the adjugate of a mat4
112
- */
113
- function adjoint(a) {
114
- // prettier-ignore
115
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
116
- const b00 = a00 * a11 - a01 * a10;
117
- const b01 = a00 * a12 - a02 * a10;
118
- const b02 = a00 * a13 - a03 * a10;
119
- const b03 = a01 * a12 - a02 * a11;
120
- const b04 = a01 * a13 - a03 * a11;
121
- const b05 = a02 * a13 - a03 * a12;
122
- const b06 = a20 * a31 - a21 * a30;
123
- const b07 = a20 * a32 - a22 * a30;
124
- const b08 = a20 * a33 - a23 * a30;
125
- const b09 = a21 * a32 - a22 * a31;
126
- const b10 = a21 * a33 - a23 * a31;
127
- const b11 = a22 * a33 - a23 * a32;
128
- return [
129
- a11 * b11 - a12 * b10 + a13 * b09,
130
- a02 * b10 - a01 * b11 - a03 * b09,
131
- a31 * b05 - a32 * b04 + a33 * b03,
132
- a22 * b04 - a21 * b05 - a23 * b03,
133
- a12 * b08 - a10 * b11 - a13 * b07,
134
- a00 * b11 - a02 * b08 + a03 * b07,
135
- a32 * b02 - a30 * b05 - a33 * b01,
136
- a20 * b05 - a22 * b02 + a23 * b01,
137
- a10 * b10 - a11 * b08 + a13 * b06,
138
- a01 * b08 - a00 * b10 - a03 * b06,
139
- a30 * b04 - a31 * b02 + a33 * b00,
140
- a21 * b02 - a20 * b04 - a23 * b00,
141
- a11 * b07 - a10 * b09 - a12 * b06,
142
- a00 * b09 - a01 * b07 + a02 * b06,
143
- a31 * b01 - a30 * b03 - a32 * b00,
144
- a20 * b03 - a21 * b01 + a22 * b00,
145
- ];
146
- }
147
- exports.adjoint = adjoint;
148
- /**
149
- * Calculates the determinant of a mat4
150
- */
151
- function determinant(a) {
152
- // prettier-ignore
153
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
154
- const b0 = a00 * a11 - a01 * a10;
155
- const b1 = a00 * a12 - a02 * a10;
156
- const b2 = a01 * a12 - a02 * a11;
157
- const b3 = a20 * a31 - a21 * a30;
158
- const b4 = a20 * a32 - a22 * a30;
159
- const b5 = a21 * a32 - a22 * a31;
160
- const b6 = a00 * b5 - a01 * b4 + a02 * b3;
161
- const b7 = a10 * b5 - a11 * b4 + a12 * b3;
162
- const b8 = a20 * b2 - a21 * b1 + a22 * b0;
163
- const b9 = a30 * b2 - a31 * b1 + a32 * b0;
164
- // Calculate the determinant
165
- return a13 * b6 - a03 * b7 + a33 * b8 - a23 * b9;
166
- }
167
- exports.determinant = determinant;
168
- /**
169
- * Multiplies two mat4's
170
- */
171
- function multiply(a, b) {
172
- // prettier-ignore
173
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
174
- const out = Array(16);
175
- // Cache only the current line of the second matrix
176
- let [b0, b1, b2, b3] = b;
177
- out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
178
- out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
179
- out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
180
- out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
181
- b0 = b[4];
182
- b1 = b[5];
183
- b2 = b[6];
184
- b3 = b[7];
185
- out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
186
- out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
187
- out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
188
- out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
189
- b0 = b[8];
190
- b1 = b[9];
191
- b2 = b[10];
192
- b3 = b[11];
193
- out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
194
- out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
195
- out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
196
- out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
197
- b0 = b[12];
198
- b1 = b[13];
199
- b2 = b[14];
200
- b3 = b[15];
201
- out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
202
- out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
203
- out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
204
- out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
205
- return out;
206
- }
207
- exports.multiply = multiply;
208
- /**
209
- * Translate a mat4 by the given vector
210
- *
211
- * @param a the matrix to translate
212
- * @param v vector to translate by
213
- */
214
- function translate(a, v) {
215
- const [x, y, z] = v;
216
- // prettier-ignore
217
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23] = a;
218
- // prettier-ignore
219
- return [
220
- a00, a01, a02, a03,
221
- a10, a11, a12, a13,
222
- a20, a21, a22, a23,
223
- a00 * x + a10 * y + a20 * z + a[12],
224
- a01 * x + a11 * y + a21 * z + a[13],
225
- a02 * x + a12 * y + a22 * z + a[14],
226
- a03 * x + a13 * y + a23 * z + a[15],
227
- ];
228
- }
229
- exports.translate = translate;
230
- /**
231
- * Scales the mat4 by the dimensions in the given vec3 not using vectorization
232
- **/
233
- function scale(a, v) {
234
- const [x, y, z] = v;
235
- // prettier-ignore
236
- return [
237
- a[0] * x, a[1] * x, a[2] * x, a[3] * x,
238
- a[4] * y, a[5] * y, a[6] * y, a[7] * y,
239
- a[8] * z, a[9] * z, a[10] * z, a[11] * z,
240
- a[12], a[13], a[14], a[15],
241
- ];
242
- }
243
- exports.scale = scale;
244
- /**
245
- * Rotates a mat4 by the given angle around the given axis
246
- */
247
- function rotate(a, rad, axis) {
248
- let [x, y, z] = axis;
249
- const len = Math.sqrt(x * x + y * y + z * z);
250
- if (len < Common.EPSILON) {
251
- return null;
252
- }
253
- x /= len;
254
- y /= len;
255
- z /= len;
256
- const s = Math.sin(rad);
257
- const c = Math.cos(rad);
258
- const t = 1 - c;
259
- // prettier-ignore
260
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23] = a;
261
- // Construct the elements of the rotation matrix
262
- const b00 = x * x * t + c;
263
- const b01 = y * x * t + z * s;
264
- const b02 = z * x * t - y * s;
265
- const b10 = x * y * t - z * s;
266
- const b11 = y * y * t + c;
267
- const b12 = z * y * t + x * s;
268
- const b20 = x * z * t + y * s;
269
- const b21 = y * z * t - x * s;
270
- const b22 = z * z * t + c;
271
- // prettier-ignore
272
- return [
273
- a00 * b00 + a10 * b01 + a20 * b02,
274
- a01 * b00 + a11 * b01 + a21 * b02,
275
- a02 * b00 + a12 * b01 + a22 * b02,
276
- a03 * b00 + a13 * b01 + a23 * b02,
277
- a00 * b10 + a10 * b11 + a20 * b12,
278
- a01 * b10 + a11 * b11 + a21 * b12,
279
- a02 * b10 + a12 * b11 + a22 * b12,
280
- a03 * b10 + a13 * b11 + a23 * b12,
281
- a00 * b20 + a10 * b21 + a20 * b22,
282
- a01 * b20 + a11 * b21 + a21 * b22,
283
- a02 * b20 + a12 * b21 + a22 * b22,
284
- a03 * b20 + a13 * b21 + a23 * b22,
285
- a[12], a[13], a[14], a[15],
286
- ];
287
- }
288
- exports.rotate = rotate;
289
- /**
290
- * Rotates a matrix by the given angle around the X axis
291
- */
292
- function rotateX(a, rad) {
293
- const s = Math.sin(rad);
294
- const c = Math.cos(rad);
295
- const a10 = a[4];
296
- const a11 = a[5];
297
- const a12 = a[6];
298
- const a13 = a[7];
299
- const a20 = a[8];
300
- const a21 = a[9];
301
- const a22 = a[10];
302
- const a23 = a[11];
303
- // prettier-ignore
304
- return [
305
- a[0], a[1], a[2], a[3],
306
- a10 * c + a20 * s, a11 * c + a21 * s, a12 * c + a22 * s, a13 * c + a23 * s,
307
- a20 * c - a10 * s, a21 * c - a11 * s, a22 * c - a12 * s, a23 * c - a13 * s,
308
- a[12], a[13], a[14], a[15],
309
- ];
310
- }
311
- exports.rotateX = rotateX;
312
- /**
313
- * Rotates a matrix by the given angle around the Y axis
314
- */
315
- function rotateY(a, rad) {
316
- const s = Math.sin(rad);
317
- const c = Math.cos(rad);
318
- const a00 = a[0];
319
- const a01 = a[1];
320
- const a02 = a[2];
321
- const a03 = a[3];
322
- const a20 = a[8];
323
- const a21 = a[9];
324
- const a22 = a[10];
325
- const a23 = a[11];
326
- // prettier-ignore
327
- return [
328
- a00 * c - a20 * s,
329
- a01 * c - a21 * s,
330
- a02 * c - a22 * s,
331
- a03 * c - a23 * s,
332
- a[4], a[5], a[6], a[7],
333
- a00 * s + a20 * c,
334
- a01 * s + a21 * c,
335
- a02 * s + a22 * c,
336
- a03 * s + a23 * c,
337
- a[12], a[13], a[14], a[15],
338
- ];
339
- }
340
- exports.rotateY = rotateY;
341
- /**
342
- * Rotates a matrix by the given angle around the Z axis
343
- */
344
- function rotateZ(a, rad) {
345
- const s = Math.sin(rad);
346
- const c = Math.cos(rad);
347
- const a00 = a[0];
348
- const a01 = a[1];
349
- const a02 = a[2];
350
- const a03 = a[3];
351
- const a10 = a[4];
352
- const a11 = a[5];
353
- const a12 = a[6];
354
- const a13 = a[7];
355
- // prettier-ignore
356
- return [
357
- a00 * c + a10 * s,
358
- a01 * c + a11 * s,
359
- a02 * c + a12 * s,
360
- a03 * c + a13 * s,
361
- a10 * c - a00 * s,
362
- a11 * c - a01 * s,
363
- a12 * c - a02 * s,
364
- a13 * c - a03 * s,
365
- a[8], a[9], a[10], a[11],
366
- a[12], a[13], a[14], a[15],
367
- ];
368
- }
369
- exports.rotateZ = rotateZ;
370
- /**
371
- * Creates a matrix from a vector translation
372
- */
373
- function fromTranslation(v) {
374
- const [x, y, z] = v;
375
- // prettier-ignore
376
- return [
377
- 1, 0, 0, 0,
378
- 0, 1, 0, 0,
379
- 0, 0, 1, 0,
380
- x, y, z, 1,
381
- ];
382
- }
383
- exports.fromTranslation = fromTranslation;
384
- /**
385
- * Creates a matrix from a vector scaling
386
- */
387
- function fromScaling(v) {
388
- const [x, y, z] = v;
389
- // prettier-ignore
390
- return [
391
- x, 0, 0, 0,
392
- 0, y, 0, 0,
393
- 0, 0, z, 0,
394
- 0, 0, 0, 1
395
- ];
396
- }
397
- exports.fromScaling = fromScaling;
398
- /**
399
- * Creates a matrix from a given angle around a given axis
400
- */
401
- function fromRotation(rad, axis) {
402
- let [x, y, z] = axis;
403
- const len = Math.sqrt(x * x + y * y + z * z);
404
- if (len < Common.EPSILON) {
405
- return null;
406
- }
407
- x /= len;
408
- y /= len;
409
- z /= len;
410
- const s = Math.sin(rad);
411
- const c = Math.cos(rad);
412
- const t = 1 - c;
413
- // prettier-ignore
414
- return [
415
- x * x * t + c,
416
- y * x * t + z * s,
417
- z * x * t - y * s,
418
- 0,
419
- x * y * t - z * s,
420
- y * y * t + c,
421
- z * y * t + x * s,
422
- 0,
423
- x * z * t + y * s,
424
- y * z * t - x * s,
425
- z * z * t + c,
426
- 0,
427
- 0, 0, 0, 1,
428
- ];
429
- }
430
- exports.fromRotation = fromRotation;
431
- /**
432
- * Creates a matrix from the given angle around the X axis
433
- */
434
- function fromXRotation(rad) {
435
- const s = Math.sin(rad);
436
- const c = Math.cos(rad);
437
- // prettier-ignore
438
- return [
439
- 1, 0, 0, 0,
440
- 0, c, s, 0,
441
- 0, -s, c, 0,
442
- 0, 0, 0, 1
443
- ];
444
- }
445
- exports.fromXRotation = fromXRotation;
446
- /**
447
- * Creates a matrix from the given angle around the Y axis
448
- */
449
- function fromYRotation(rad) {
450
- const s = Math.sin(rad);
451
- const c = Math.cos(rad);
452
- // prettier-ignore
453
- return [
454
- c, 0, -s, 0,
455
- 0, 1, 0, 0,
456
- s, 0, c, 0,
457
- 0, 0, 0, 1
458
- ];
459
- }
460
- exports.fromYRotation = fromYRotation;
461
- /**
462
- * Creates a matrix from the given angle around the Z axis
463
- */
464
- function fromZRotation(rad) {
465
- const s = Math.sin(rad);
466
- const c = Math.cos(rad);
467
- // prettier-ignore
468
- return [
469
- c, s, 0, 0,
470
- -s, c, 0, 0,
471
- 0, 0, 1, 0,
472
- 0, 0, 0, 1
473
- ];
474
- }
475
- exports.fromZRotation = fromZRotation;
476
- /**
477
- * Creates a matrix from a quaternion rotation and vector translation
478
- */
479
- function fromRotationTranslation(q, v) {
480
- // Quaternion math
481
- const [x, y, z, w] = q;
482
- const x2 = x + x;
483
- const y2 = y + y;
484
- const z2 = z + z;
485
- const xx = x * x2;
486
- const xy = x * y2;
487
- const xz = x * z2;
488
- const yy = y * y2;
489
- const yz = y * z2;
490
- const zz = z * z2;
491
- const wx = w * x2;
492
- const wy = w * y2;
493
- const wz = w * z2;
494
- return [
495
- 1 - (yy + zz),
496
- xy + wz,
497
- xz - wy,
498
- 0,
499
- xy - wz,
500
- 1 - (xx + zz),
501
- yz + wx,
502
- 0,
503
- xz + wy,
504
- yz - wx,
505
- 1 - (xx + yy),
506
- 0,
507
- v[0],
508
- v[1],
509
- v[2],
510
- 1,
511
- ];
512
- }
513
- exports.fromRotationTranslation = fromRotationTranslation;
514
- /**
515
- * Returns the translation vector component of a transformation
516
- * matrix. If a matrix is built with fromRotationTranslation,
517
- * the returned vector will be the same as the translation vector
518
- * originally supplied.
519
- */
520
- function getTranslation(mat) {
521
- return [mat[12], mat[13], mat[14]];
522
- }
523
- exports.getTranslation = getTranslation;
524
- /**
525
- * Returns the scaling factor component of a transformation
526
- * matrix. If a matrix is built with fromRotationTranslationScale
527
- * with a normalized Quaternion paramter, the returned vector will be
528
- * the same as the scaling vector
529
- * originally supplied.
530
- */
531
- function getScaling(mat) {
532
- // prettier-ignore
533
- const [m11, m12, m13, , m21, m22, m23, , m31, m32, m33,] = mat;
534
- return [
535
- Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13),
536
- Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23),
537
- Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33),
538
- ];
539
- }
540
- exports.getScaling = getScaling;
541
- /**
542
- * Returns a quaternion representing the rotational component
543
- * of a transformation matrix. If a matrix is built with
544
- * fromRotationTranslation, the returned quaternion will be the
545
- * same as the quaternion originally supplied.
546
- */
547
- function getRotation(mat) {
548
- const scaling = getScaling(mat);
549
- const is1 = 1 / scaling[0];
550
- const is2 = 1 / scaling[1];
551
- const is3 = 1 / scaling[2];
552
- const sm11 = mat[0] * is1;
553
- const sm12 = mat[1] * is2;
554
- const sm13 = mat[2] * is3;
555
- const sm21 = mat[4] * is1;
556
- const sm22 = mat[5] * is2;
557
- const sm23 = mat[6] * is3;
558
- const sm31 = mat[8] * is1;
559
- const sm32 = mat[9] * is2;
560
- const sm33 = mat[10] * is3;
561
- const trace = sm11 + sm22 + sm33;
562
- if (trace > 0) {
563
- const S = Math.sqrt(trace + 1) * 2;
564
- return [(sm23 - sm32) / S, (sm31 - sm13) / S, (sm12 - sm21) / S, 0.25 * S];
565
- }
566
- else if (sm11 > sm22 && sm11 > sm33) {
567
- const S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
568
- return [0.25 * S, (sm12 + sm21) / S, (sm31 + sm13) / S, (sm23 - sm32) / S];
569
- }
570
- else if (sm22 > sm33) {
571
- const S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
572
- return [(sm12 + sm21) / S, 0.25 * S, (sm23 + sm32) / S, (sm31 - sm13) / S];
573
- }
574
- else {
575
- const S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
576
- return [(sm31 + sm13) / S, (sm23 + sm32) / S, 0.25 * S, (sm12 - sm21) / S];
577
- }
578
- }
579
- exports.getRotation = getRotation;
580
- /**
581
- * Decomposes a transformation matrix into its rotation, translation
582
- * and scale components. Returns only the rotation component
583
- *
584
- * @param mat Matrix to be decomposed (input)
585
- */
586
- function decompose(mat) {
587
- const trans = [mat[12], mat[13], mat[14]];
588
- // prettier-ignore
589
- const [m11, m12, m13, , m21, m22, m23, , m31, m32, m33,] = mat;
590
- const scale = [
591
- Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13),
592
- Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23),
593
- Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33),
594
- ];
595
- const is1 = 1 / scale[0];
596
- const is2 = 1 / scale[1];
597
- const is3 = 1 / scale[2];
598
- const sm11 = m11 * is1;
599
- const sm12 = m12 * is2;
600
- const sm13 = m13 * is3;
601
- const sm21 = m21 * is1;
602
- const sm22 = m22 * is2;
603
- const sm23 = m23 * is3;
604
- const sm31 = m31 * is1;
605
- const sm32 = m32 * is2;
606
- const sm33 = m33 * is3;
607
- const trace = sm11 + sm22 + sm33;
608
- let rot;
609
- if (trace > 0) {
610
- const S = Math.sqrt(trace + 1) * 2;
611
- rot = [(sm23 - sm32) / S, (sm31 - sm13) / S, (sm12 - sm21) / S, 0.25 * S];
612
- }
613
- else if (sm11 > sm22 && sm11 > sm33) {
614
- const S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
615
- rot = [0.25 * S, (sm12 + sm21) / S, (sm31 + sm13) / S, (sm23 - sm32) / S];
616
- }
617
- else if (sm22 > sm33) {
618
- const S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
619
- rot = [(sm12 + sm21) / S, 0.25 * S, (sm23 + sm32) / S, (sm31 - sm13) / S];
620
- }
621
- else {
622
- const S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
623
- rot = [(sm31 + sm13) / S, (sm23 + sm32) / S, 0.25 * S, (sm12 - sm21) / S];
624
- }
625
- return {
626
- trans,
627
- rot,
628
- scale,
629
- };
630
- }
631
- exports.decompose = decompose;
632
- /**
633
- * Creates a matrix from a quaternion rotation, vector translation and vector scale
634
- * This is equivalent to (but much faster than):
635
- *
636
- * mat4.identity(dest);
637
- * mat4.translate(dest, vec);
638
- * const quatMat = mat4.create();
639
- * quat4.toMat4(quat, quatMat);
640
- * mat4.multiply(dest, quatMat);
641
- * mat4.scale(dest, scale)
642
- *
643
- * @param rot Rotation quaternion
644
- * @param trans Translation vector
645
- * @param scale Scaling vector
646
- */
647
- function fromRotationTranslationScale(rot, trans, scale) {
648
- // Quaternion math
649
- const [x, y, z, w] = rot;
650
- const x2 = x + x;
651
- const y2 = y + y;
652
- const z2 = z + z;
653
- const xx = x * x2;
654
- const xy = x * y2;
655
- const xz = x * z2;
656
- const yy = y * y2;
657
- const yz = y * z2;
658
- const zz = z * z2;
659
- const wx = w * x2;
660
- const wy = w * y2;
661
- const wz = w * z2;
662
- const sx = scale[0];
663
- const sy = scale[1];
664
- const sz = scale[2];
665
- return [
666
- (1 - (yy + zz)) * sx,
667
- (xy + wz) * sx,
668
- (xz - wy) * sx,
669
- 0,
670
- (xy - wz) * sy,
671
- (1 - (xx + zz)) * sy,
672
- (yz + wx) * sy,
673
- 0,
674
- (xz + wy) * sz,
675
- (yz - wx) * sz,
676
- (1 - (xx + yy)) * sz,
677
- 0,
678
- trans[0],
679
- trans[1],
680
- trans[2],
681
- 1,
682
- ];
683
- }
684
- exports.fromRotationTranslationScale = fromRotationTranslationScale;
685
- /**
686
- * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin
687
- * This is equivalent to (but much faster than):
688
- *
689
- * mat4.identity(dest);
690
- * mat4.translate(dest, vec);
691
- * mat4.translate(dest, origin);
692
- * const quatMat = mat4.create();
693
- * quat4.toMat4(quat, quatMat);
694
- * mat4.multiply(dest, quatMat);
695
- * mat4.scale(dest, scale)
696
- * mat4.translate(dest, negativeOrigin);
697
- *
698
- * @param rot Rotation quaternion
699
- * @param trans Translation vector
700
- * @param scale Scaling vector
701
- * @param origin The origin vector around which to scale and rotate
702
- */
703
- function fromRotationTranslationScaleOrigin(rot, trans, scale, origin) {
704
- // Quaternion math
705
- const [x, y, z, w] = rot;
706
- const x2 = x + x;
707
- const y2 = y + y;
708
- const z2 = z + z;
709
- const xx = x * x2;
710
- const xy = x * y2;
711
- const xz = x * z2;
712
- const yy = y * y2;
713
- const yz = y * z2;
714
- const zz = z * z2;
715
- const wx = w * x2;
716
- const wy = w * y2;
717
- const wz = w * z2;
718
- const sx = scale[0];
719
- const sy = scale[1];
720
- const sz = scale[2];
721
- const ox = origin[0];
722
- const oy = origin[1];
723
- const oz = origin[2];
724
- const out0 = (1 - (yy + zz)) * sx;
725
- const out1 = (xy + wz) * sx;
726
- const out2 = (xz - wy) * sx;
727
- const out4 = (xy - wz) * sy;
728
- const out5 = (1 - (xx + zz)) * sy;
729
- const out6 = (yz + wx) * sy;
730
- const out8 = (xz + wy) * sz;
731
- const out9 = (yz - wx) * sz;
732
- const out10 = (1 - (xx + yy)) * sz;
733
- // prettier-ignore
734
- return [
735
- out0, out1, out2, 0,
736
- out4, out5, out6, 0,
737
- out8, out9, out10, 0,
738
- trans[0] + ox - (out0 * ox + out4 * oy + out8 * oz),
739
- trans[1] + oy - (out1 * ox + out5 * oy + out9 * oz),
740
- trans[2] + oz - (out2 * ox + out6 * oy + out10 * oz),
741
- 1,
742
- ];
743
- }
744
- exports.fromRotationTranslationScaleOrigin = fromRotationTranslationScaleOrigin;
745
- /**
746
- * Calculates a 4x4 matrix from the given quaternion
747
- *
748
- * @param q Quaternion to create matrix from
749
- */
750
- function fromQuat(q) {
751
- const [x, y, z, w] = q;
752
- const x2 = x + x;
753
- const y2 = y + y;
754
- const z2 = z + z;
755
- const xx = x * x2;
756
- const yx = y * x2;
757
- const yy = y * y2;
758
- const zx = z * x2;
759
- const zy = z * y2;
760
- const zz = z * z2;
761
- const wx = w * x2;
762
- const wy = w * y2;
763
- const wz = w * z2;
764
- // prettier-ignore
765
- return [
766
- 1 - yy - zz,
767
- yx + wz,
768
- zx - wy,
769
- 0,
770
- yx - wz,
771
- 1 - xx - zz,
772
- zy + wx,
773
- 0,
774
- zx + wy,
775
- zy - wx,
776
- 1 - xx - yy,
777
- 0,
778
- 0, 0, 0, 1,
779
- ];
780
- }
781
- exports.fromQuat = fromQuat;
782
- /**
783
- * Generates a frustum matrix with the given bounds
784
- *
785
- * @param left Left bound of the frustum
786
- * @param right Right bound of the frustum
787
- * @param bottom Bottom bound of the frustum
788
- * @param top Top bound of the frustum
789
- * @param near Near bound of the frustum
790
- * @param far Far bound of the frustum
791
- */
792
- function frustum(left, right, bottom, top, near, far) {
793
- const rl = 1 / (right - left);
794
- const tb = 1 / (top - bottom);
795
- const nf = 1 / (near - far);
796
- // prettier-ignore
797
- return [
798
- near * 2 * rl, 0, 0, 0,
799
- 0, near * 2 * tb, 0, 0,
800
- (right + left) * rl, (top + bottom) * tb, (far + near) * nf, -1,
801
- 0, 0, far * near * 2 * nf, 0,
802
- ];
803
- }
804
- exports.frustum = frustum;
805
- /**
806
- * Generates a perspective projection matrix with the given bounds.
807
- * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],
808
- * which matches WebGL/OpenGL's clip volume.
809
- * Passing null/undefined/no value for far will generate infinite projection matrix.
810
- *
811
- * @param fovy Vertical field of view in radians
812
- * @param aspect Aspect ratio. typically viewport width/height
813
- * @param near Near bound of the frustum
814
- * @param far Far bound of the frustum, can be null or Infinity
815
- */
816
- function perspectiveNO(fovy, aspect, near, far) {
817
- const f = 1 / Math.tan(fovy / 2);
818
- let out10, out14;
819
- if (far !== null && far !== Infinity) {
820
- const nf = 1 / (near - far);
821
- out10 = (far + near) * nf;
822
- out14 = 2 * far * near * nf;
823
- }
824
- else {
825
- out10 = -1;
826
- out14 = -2 * near;
827
- }
828
- // prettier-ignore
829
- return [
830
- f / aspect, 0, 0, 0,
831
- 0, f, 0, 0,
832
- 0, 0, out10, -1,
833
- 0, 0, out14, 0,
834
- ];
835
- }
836
- exports.perspectiveNO = perspectiveNO;
837
- /**
838
- * Alias for {@link mat4.perspectiveNO}
839
- * @function
840
- */
841
- exports.perspective = perspectiveNO;
842
- /**
843
- * Generates a perspective projection matrix suitable for WebGPU with the given bounds.
844
- * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],
845
- * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.
846
- * Passing null/undefined/no value for far will generate infinite projection matrix.
847
- *
848
- * @param fovy Vertical field of view in radians
849
- * @param aspect Aspect ratio. typically viewport width/height
850
- * @param near Near bound of the frustum
851
- * @param far Far bound of the frustum, can be null or Infinity
852
- */
853
- function perspectiveZO(fovy, aspect, near, far) {
854
- const f = 1 / Math.tan(fovy / 2);
855
- let out10, out14;
856
- if (far !== null && far !== Infinity) {
857
- const nf = 1 / (near - far);
858
- out10 = far * nf;
859
- out14 = far * near * nf;
860
- }
861
- else {
862
- out10 = -1;
863
- out14 = -near;
864
- }
865
- return [f / aspect, 0, 0, 0, 0, f, 0, 0, 0, 0, out10, -1, 0, 0, out14, 0];
866
- }
867
- exports.perspectiveZO = perspectiveZO;
868
- /**
869
- * Generates a perspective projection matrix with the given field of view.
870
- * This is primarily useful for generating projection matrices to be used
871
- * with the still experiemental WebVR API.
872
- *
873
- * @param fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees
874
- * @param near Near bound of the frustum
875
- * @param far Far bound of the frustum
876
- */
877
- function perspectiveFromFieldOfView(fov, near, far) {
878
- const upTan = Math.tan((fov.upDegrees * Math.PI) / 180);
879
- const downTan = Math.tan((fov.downDegrees * Math.PI) / 180);
880
- const leftTan = Math.tan((fov.leftDegrees * Math.PI) / 180);
881
- const rightTan = Math.tan((fov.rightDegrees * Math.PI) / 180);
882
- const xScale = 2 / (leftTan + rightTan);
883
- const yScale = 2 / (upTan + downTan);
884
- // prettier-ignore
885
- return [
886
- xScale, 0, 0, 0,
887
- 0, yScale, 0, 0,
888
- -((leftTan - rightTan) * xScale * 0.5),
889
- (upTan - downTan) * yScale * 0.5,
890
- far / (near - far),
891
- -1,
892
- 0,
893
- 0,
894
- (far * near) / (near - far),
895
- 0,
896
- ];
897
- }
898
- exports.perspectiveFromFieldOfView = perspectiveFromFieldOfView;
899
- /**
900
- * Generates a orthogonal projection matrix with the given bounds.
901
- * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],
902
- * which matches WebGL/OpenGL's clip volume.
903
- *
904
- * @param left Left bound of the frustum
905
- * @param right Right bound of the frustum
906
- * @param bottom Bottom bound of the frustum
907
- * @param top Top bound of the frustum
908
- * @param near Near bound of the frustum
909
- * @param far Far bound of the frustum
910
- */
911
- function orthoNO(left, right, bottom, top, near, far) {
912
- const lr = 1 / (left - right);
913
- const bt = 1 / (bottom - top);
914
- const nf = 1 / (near - far);
915
- // prettier-ignore
916
- return [
917
- -2 * lr, 0, 0, 0,
918
- 0, -2 * bt, 0, 0,
919
- 0, 0, 2 * nf, 0,
920
- (left + right) * lr,
921
- (top + bottom) * bt,
922
- (far + near) * nf,
923
- 1,
924
- ];
925
- }
926
- exports.orthoNO = orthoNO;
927
- /**
928
- * Alias for {@link mat4.orthoNO}
929
- * @function
930
- */
931
- exports.ortho = orthoNO;
932
- /**
933
- * Generates a orthogonal projection matrix with the given bounds.
934
- * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],
935
- * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.
936
- *
937
- * @param left Left bound of the frustum
938
- * @param right Right bound of the frustum
939
- * @param bottom Bottom bound of the frustum
940
- * @param top Top bound of the frustum
941
- * @param near Near bound of the frustum
942
- * @param far Far bound of the frustum
943
- */
944
- function orthoZO(left, right, bottom, top, near, far) {
945
- const lr = 1 / (left - right);
946
- const bt = 1 / (bottom - top);
947
- const nf = 1 / (near - far);
948
- // prettier-ignore
949
- return [
950
- -2 * lr, 0, 0, 0,
951
- 0, -2 * bt, 0, 0,
952
- 0, 0, nf, 0,
953
- (left + right) * lr,
954
- (top + bottom) * bt,
955
- near * nf,
956
- 1,
957
- ];
958
- }
959
- exports.orthoZO = orthoZO;
960
- /**
961
- * Generates a look-at matrix with the given eye position, focal point, and up axis.
962
- * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.
963
- *
964
- * @param eye Position of the viewer
965
- * @param center Point the viewer is looking at
966
- * @param up vec3 pointing up
967
- */
968
- function lookAt(eye, center, up) {
969
- let x0, x1, x2, y0, y1, y2, z0, z1, z2, len;
970
- const eyex = eye[0];
971
- const eyey = eye[1];
972
- const eyez = eye[2];
973
- const upx = up[0];
974
- const upy = up[1];
975
- const upz = up[2];
976
- const centerx = center[0];
977
- const centery = center[1];
978
- const centerz = center[2];
979
- if (Math.abs(eyex - centerx) < Common.EPSILON &&
980
- Math.abs(eyey - centery) < Common.EPSILON &&
981
- Math.abs(eyez - centerz) < Common.EPSILON) {
982
- return exports.identity;
983
- }
984
- z0 = eyex - centerx;
985
- z1 = eyey - centery;
986
- z2 = eyez - centerz;
987
- len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);
988
- z0 *= len;
989
- z1 *= len;
990
- z2 *= len;
991
- x0 = upy * z2 - upz * z1;
992
- x1 = upz * z0 - upx * z2;
993
- x2 = upx * z1 - upy * z0;
994
- len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);
995
- if (!len) {
996
- x0 = 0;
997
- x1 = 0;
998
- x2 = 0;
999
- }
1000
- else {
1001
- len = 1 / len;
1002
- x0 *= len;
1003
- x1 *= len;
1004
- x2 *= len;
1005
- }
1006
- y0 = z1 * x2 - z2 * x1;
1007
- y1 = z2 * x0 - z0 * x2;
1008
- y2 = z0 * x1 - z1 * x0;
1009
- len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);
1010
- if (!len) {
1011
- y0 = 0;
1012
- y1 = 0;
1013
- y2 = 0;
1014
- }
1015
- else {
1016
- len = 1 / len;
1017
- y0 *= len;
1018
- y1 *= len;
1019
- y2 *= len;
1020
- }
1021
- // prettier-ignore
1022
- return [
1023
- x0, y0, z0, 0,
1024
- x1, y1, z1, 0,
1025
- x2, y2, z2, 0,
1026
- -(x0 * eyex + x1 * eyey + x2 * eyez),
1027
- -(y0 * eyex + y1 * eyey + y2 * eyez),
1028
- -(z0 * eyex + z1 * eyey + z2 * eyez),
1029
- 1,
1030
- ];
1031
- }
1032
- exports.lookAt = lookAt;
1033
- /**
1034
- * Generates a matrix that makes something look at something else.
1035
- *
1036
- * @param eye Position of the viewer
1037
- * @param center Point the viewer is looking at
1038
- * @param up vec3 pointing up
1039
- */
1040
- function targetTo(eye, target, up) {
1041
- const [eyex, eyey, eyez] = eye;
1042
- const [upx, upy, upz] = up;
1043
- let z0 = eyex - target[0], z1 = eyey - target[1], z2 = eyez - target[2];
1044
- let len = z0 * z0 + z1 * z1 + z2 * z2;
1045
- if (len > 0) {
1046
- len = 1 / Math.sqrt(len);
1047
- z0 *= len;
1048
- z1 *= len;
1049
- z2 *= len;
1050
- }
1051
- let x0 = upy * z2 - upz * z1, x1 = upz * z0 - upx * z2, x2 = upx * z1 - upy * z0;
1052
- len = x0 * x0 + x1 * x1 + x2 * x2;
1053
- if (len > 0) {
1054
- len = 1 / Math.sqrt(len);
1055
- x0 *= len;
1056
- x1 *= len;
1057
- x2 *= len;
1058
- }
1059
- // prettier-ignore
1060
- return [
1061
- x0, x1, x2, 0,
1062
- z1 * x2 - z2 * x1,
1063
- z2 * x0 - z0 * x2,
1064
- z0 * x1 - z1 * x0,
1065
- 0,
1066
- z0, z1, z2, 0,
1067
- eyex, eyey, eyez, 1,
1068
- ];
1069
- }
1070
- exports.targetTo = targetTo;
1071
- /**
1072
- * Returns Frobenius norm of a mat4
1073
- */
1074
- function frob(a) {
1075
- return Math.sqrt(a[0] * a[0] +
1076
- a[1] * a[1] +
1077
- a[2] * a[2] +
1078
- a[3] * a[3] +
1079
- a[4] * a[4] +
1080
- a[5] * a[5] +
1081
- a[6] * a[6] +
1082
- a[7] * a[7] +
1083
- a[8] * a[8] +
1084
- a[9] * a[9] +
1085
- a[10] * a[10] +
1086
- a[11] * a[11] +
1087
- a[12] * a[12] +
1088
- a[13] * a[13] +
1089
- a[14] * a[14] +
1090
- a[15] * a[15]);
1091
- }
1092
- exports.frob = frob;
1093
- /**
1094
- * Adds two mat4's
1095
- */
1096
- function add(a, b) {
1097
- return [
1098
- a[0] + b[0],
1099
- a[1] + b[1],
1100
- a[2] + b[2],
1101
- a[3] + b[3],
1102
- a[4] + b[4],
1103
- a[5] + b[5],
1104
- a[6] + b[6],
1105
- a[7] + b[7],
1106
- a[8] + b[8],
1107
- a[9] + b[9],
1108
- a[10] + b[10],
1109
- a[11] + b[11],
1110
- a[12] + b[12],
1111
- a[13] + b[13],
1112
- a[14] + b[14],
1113
- a[15] + b[15],
1114
- ];
1115
- }
1116
- exports.add = add;
1117
- /**
1118
- * Subtracts matrix b from matrix a
1119
- */
1120
- function subtract(a, b) {
1121
- return [
1122
- a[0] - b[0],
1123
- a[1] - b[1],
1124
- a[2] - b[2],
1125
- a[3] - b[3],
1126
- a[4] - b[4],
1127
- a[5] - b[5],
1128
- a[6] - b[6],
1129
- a[7] - b[7],
1130
- a[8] - b[8],
1131
- a[9] - b[9],
1132
- a[10] - b[10],
1133
- a[11] - b[11],
1134
- a[12] - b[12],
1135
- a[13] - b[13],
1136
- a[14] - b[14],
1137
- a[15] - b[15],
1138
- ];
1139
- }
1140
- exports.subtract = subtract;
1141
- /**
1142
- * Multiply each element of the matrix by a scalar.
1143
- */
1144
- function multiplyScalar(a, s) {
1145
- return [
1146
- a[0] * s,
1147
- a[1] * s,
1148
- a[2] * s,
1149
- a[3] * s,
1150
- a[4] * s,
1151
- a[5] * s,
1152
- a[6] * s,
1153
- a[7] * s,
1154
- a[8] * s,
1155
- a[9] * s,
1156
- a[10] * s,
1157
- a[11] * s,
1158
- a[12] * s,
1159
- a[13] * s,
1160
- a[14] * s,
1161
- a[15] * s,
1162
- ];
1163
- }
1164
- exports.multiplyScalar = multiplyScalar;
1165
- /**
1166
- * Adds two mat4's after multiplying each element of the second operand by a scalar value.
1167
- */
1168
- function multiplyScalarAndAdd(a, b, scale) {
1169
- return [
1170
- a[0] + b[0] * scale,
1171
- a[1] + b[1] * scale,
1172
- a[2] + b[2] * scale,
1173
- a[3] + b[3] * scale,
1174
- a[4] + b[4] * scale,
1175
- a[5] + b[5] * scale,
1176
- a[6] + b[6] * scale,
1177
- a[7] + b[7] * scale,
1178
- a[8] + b[8] * scale,
1179
- a[9] + b[9] * scale,
1180
- a[10] + b[10] * scale,
1181
- a[11] + b[11] * scale,
1182
- a[12] + b[12] * scale,
1183
- a[13] + b[13] * scale,
1184
- a[14] + b[14] * scale,
1185
- a[15] + b[15] * scale,
1186
- ];
1187
- }
1188
- exports.multiplyScalarAndAdd = multiplyScalarAndAdd;
1189
- /**
1190
- * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
1191
- */
1192
- function exactEquals(a, b) {
1193
- return (a[0] === b[0] &&
1194
- a[1] === b[1] &&
1195
- a[2] === b[2] &&
1196
- a[3] === b[3] &&
1197
- a[4] === b[4] &&
1198
- a[5] === b[5] &&
1199
- a[6] === b[6] &&
1200
- a[7] === b[7] &&
1201
- a[8] === b[8] &&
1202
- a[9] === b[9] &&
1203
- a[10] === b[10] &&
1204
- a[11] === b[11] &&
1205
- a[12] === b[12] &&
1206
- a[13] === b[13] &&
1207
- a[14] === b[14] &&
1208
- a[15] === b[15]);
1209
- }
1210
- exports.exactEquals = exactEquals;
1211
- /**
1212
- * Returns whether or not the matrices have approximately the same elements in the same position.
1213
- */
1214
- function equals(a, b) {
1215
- const [a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aA, aB, aC, aD, aE, aF] = a;
1216
- const [b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, bA, bB, bC, bD, bE, bF] = b;
1217
- return (Math.abs(a0 - b0) <=
1218
- Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
1219
- Math.abs(a1 - b1) <=
1220
- Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) &&
1221
- Math.abs(a2 - b2) <=
1222
- Common.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) &&
1223
- Math.abs(a3 - b3) <=
1224
- Common.EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) &&
1225
- Math.abs(a4 - b4) <=
1226
- Common.EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) &&
1227
- Math.abs(a5 - b5) <=
1228
- Common.EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)) &&
1229
- Math.abs(a6 - b6) <=
1230
- Common.EPSILON * Math.max(1, Math.abs(a6), Math.abs(b6)) &&
1231
- Math.abs(a7 - b7) <=
1232
- Common.EPSILON * Math.max(1, Math.abs(a7), Math.abs(b7)) &&
1233
- Math.abs(a8 - b8) <=
1234
- Common.EPSILON * Math.max(1, Math.abs(a8), Math.abs(b8)) &&
1235
- Math.abs(a9 - b9) <=
1236
- Common.EPSILON * Math.max(1, Math.abs(a9), Math.abs(b9)) &&
1237
- Math.abs(aA - bA) <=
1238
- Common.EPSILON * Math.max(1, Math.abs(aA), Math.abs(bA)) &&
1239
- Math.abs(aB - bB) <=
1240
- Common.EPSILON * Math.max(1, Math.abs(aB), Math.abs(bB)) &&
1241
- Math.abs(aC - bC) <=
1242
- Common.EPSILON * Math.max(1, Math.abs(aC), Math.abs(bC)) &&
1243
- Math.abs(aD - bD) <=
1244
- Common.EPSILON * Math.max(1, Math.abs(aD), Math.abs(bD)) &&
1245
- Math.abs(aE - bE) <=
1246
- Common.EPSILON * Math.max(1, Math.abs(aE), Math.abs(bE)) &&
1247
- Math.abs(aF - bF) <=
1248
- Common.EPSILON * Math.max(1, Math.abs(aF), Math.abs(bF)));
1249
- }
1250
- exports.equals = equals;
1251
- });
1252
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0NC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYXQ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsaURBQWtDO0lBWWxDOztPQUVHO0lBRUg7O09BRUc7SUFDSCxrQkFBa0I7SUFDTCxRQUFBLFFBQVEsR0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzNDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDVixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ1YsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNWLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7S0FDVixDQUFDLENBQUE7SUFFVyxRQUFBLElBQUksR0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7S0FDOUMsQ0FBQyxDQUFBO0lBRUY7O09BRUc7SUFDSCxTQUFnQixTQUFTLENBQUMsQ0FBTztRQUNoQyxrQkFBa0I7UUFDbEIsT0FBTztZQUNOLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDeEIsQ0FBQTtJQUNGLENBQUM7SUFSRCw4QkFRQztJQUVEOztPQUVHO0lBQ0gsU0FBZ0IsTUFBTSxDQUFDLENBQU87UUFDN0Isa0JBQWtCO1FBQ2xCLE1BQU0sQ0FDTCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFeEIsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFFakMsNEJBQTRCO1FBQzVCLE1BQU0sR0FBRyxHQUNSLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBRXRFLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVCxPQUFPLElBQUksQ0FBQTtTQUNYO1FBRUQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtRQUV0QixPQUFPO1lBQ04sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07U0FDNUMsQ0FBQTtJQUNGLENBQUM7SUFqREQsd0JBaURDO0lBRUQ7O09BRUc7SUFDSCxTQUFnQixPQUFPLENBQUMsQ0FBTztRQUM5QixrQkFBa0I7UUFDbEIsTUFBTSxDQUNMLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUV4QixNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUVqQyxPQUFPO1lBQ04sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1lBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztZQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7WUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1lBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztZQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7WUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1lBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztZQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7WUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1lBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztZQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7WUFDakMsR0FBRyxH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QUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtRQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtRQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtRQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtRQUVsRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ1QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7UUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7UUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7UUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7UUFFbEQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBQ2xELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBQ25ELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBRW5ELEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDVixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUs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QUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFBO1NBQ3pFO2FBQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUU7WUFDdEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDL0MsR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1NBQ3pFO2FBQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFO1lBQ3ZCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQy9DLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtTQUN6RTthQUFNO1lBQ04sTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDL0MsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFB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QUFDLENBQUMsR0FBRyxLQUFLO1lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztZQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7WUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLO1lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztZQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7WUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLO1lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztZQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7WUFDbkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLO1lBQ3JCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSztZQUNyQixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUs7WUFDckIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLO1lBQ3JCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSztZQUNyQixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUs7U0FDckIsQ0FBQTtJQUNGLENBQUM7SUFuQkQs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Q0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDekQsQ0FBQTtJQUNGLENBQUM7SUF0Q0Qsd0JBc0NDIn0=