@woosh/meep-engine 2.108.0 → 2.108.2
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.
- package/build/meep.cjs +178 -127
- package/build/meep.min.js +1 -1
- package/build/meep.module.js +178 -127
- package/editor/tools/paint/TerrainHeightPaintTool.js +5 -5
- package/package.json +1 -1
- package/src/core/binary/float_to_uint8.d.ts +7 -0
- package/src/core/binary/float_to_uint8.d.ts.map +1 -0
- package/src/core/binary/{float2uint8.js → float_to_uint8.js} +1 -1
- package/src/core/binary/uint8_to_float.d.ts +7 -0
- package/src/core/binary/uint8_to_float.d.ts.map +1 -0
- package/src/core/binary/{uint82float.js → uint8_to_float.js} +1 -1
- package/src/core/binary/uint8_to_float.spec.d.ts +2 -0
- package/src/core/binary/uint8_to_float.spec.d.ts.map +1 -0
- package/src/core/binary/uint8_to_float.spec.js +7 -0
- package/src/core/codegen/codeToBlob.d.ts +8 -0
- package/src/core/codegen/codeToBlob.d.ts.map +1 -0
- package/src/core/codegen/codeToBlob.js +36 -0
- package/src/core/codegen/codeToURL.d.ts +8 -0
- package/src/core/codegen/codeToURL.d.ts.map +1 -0
- package/src/core/codegen/codeToURL.js +22 -0
- package/src/core/collection/array/array_shuffle.d.ts +8 -0
- package/src/core/collection/array/array_shuffle.d.ts.map +1 -0
- package/src/core/collection/array/array_shuffle.js +22 -0
- package/src/core/collection/array/array_shuffle.spec.d.ts +2 -0
- package/src/core/collection/array/array_shuffle.spec.d.ts.map +1 -0
- package/src/core/collection/array/{randomizeArrayElementOrder.spec.js → array_shuffle.spec.js} +4 -4
- package/src/core/collection/array/iterator/ArrayIteratorRandom.js +2 -2
- package/src/core/collection/array/randomMultipleFromArray.js +2 -2
- package/src/core/color/Color.js +9 -9
- package/src/core/color/hsv/hsv2rgb.js +4 -4
- package/src/core/color/rgb2uint24.js +4 -4
- package/src/core/color/sRGB/linear_to_sRGB.d.ts +1 -0
- package/src/core/color/sRGB/linear_to_sRGB.d.ts.map +1 -1
- package/src/core/color/sRGB/linear_to_sRGB.js +4 -4
- package/src/core/geom/3d/aabb/AABB3.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/AABB3.js +4 -1
- package/src/core/geom/3d/aabb/aabb3_intersects_ray.js +3 -3
- package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/UnitSphereShape3D.js +14 -14
- package/src/core/geom/3d/sphere/harmonics/SH3_COEFFICIENTS.d.ts.map +1 -1
- package/src/core/geom/3d/sphere/harmonics/SH3_COEFFICIENTS.js +2 -0
- package/src/core/geom/Vector3.js +3 -3
- package/src/core/geom/random/randomPointInSphere.d.ts +1 -1
- package/src/core/geom/random/randomPointInSphere.js +2 -2
- package/src/core/geom/random/randomPointOnSphere.d.ts +3 -3
- package/src/core/geom/random/randomPointOnSphere.d.ts.map +1 -1
- package/src/core/geom/random/randomPointOnSphere.js +5 -9
- package/src/core/process/task/util/randomCountTask.js +3 -3
- package/src/core/process/worker/WorkerBuilder.d.ts.map +1 -1
- package/src/core/process/worker/WorkerBuilder.js +5 -35
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +7 -1
- package/src/engine/asset/loaders/ArrayBufferLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/ArrayBufferLoader.js +17 -10
- package/src/engine/asset/loaders/material/TextureAttachmensByMaterialType.d.ts.map +1 -1
- package/src/engine/asset/loaders/material/TextureAttachmensByMaterialType.js +3 -0
- package/src/engine/ecs/terrain/overlay/TerrainOverlay.js +4 -4
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +4 -0
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +1 -1
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +7 -7
- package/src/engine/graphics/impostors/octahedral/bake/prepare_bake_material.js +3 -3
- package/src/engine/graphics/sh3/SH3VisualisationMaterial.d.ts.map +1 -1
- package/src/engine/graphics/sh3/SH3VisualisationMaterial.js +9 -6
- package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts.map +1 -1
- package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.js +4 -5
- package/src/engine/graphics/sh3/path_tracer/prototypePathTracer.js +14 -6
- package/src/engine/graphics/sh3/path_tracer/sampling/generate_stratified_samples.d.ts +10 -0
- package/src/engine/graphics/sh3/path_tracer/sampling/generate_stratified_samples.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/sampling/generate_stratified_samples.js +20 -0
- package/src/engine/graphics/sh3/path_tracer/sampling/generate_stratified_samples_2d.d.ts +10 -0
- package/src/engine/graphics/sh3/path_tracer/sampling/generate_stratified_samples_2d.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/sampling/generate_stratified_samples_2d.js +31 -0
- package/src/engine/graphics/sh3/path_tracer/sampling/make_stratified_sample.d.ts +9 -0
- package/src/engine/graphics/sh3/path_tracer/sampling/make_stratified_sample.d.ts.map +1 -0
- package/src/engine/graphics/sh3/path_tracer/sampling/make_stratified_sample.js +21 -0
- package/src/engine/graphics/sh3/path_tracer/texture/sample_material.js +1 -1
- package/src/engine/graphics/sh3/path_tracer/texture/sample_texture.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/texture/sample_texture.js +2 -3
- package/src/engine/graphics/sh3/path_tracer/vec3_uint8_to_float.js +4 -4
- package/src/engine/graphics/sh3/prototypeSH3Probe.js +74 -6
- package/src/engine/graphics/texture/sampler/Sampler2D.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/Sampler2D.js +2 -2
- package/src/engine/network/convertPathToURL.d.ts +3 -1
- package/src/engine/network/convertPathToURL.d.ts.map +1 -1
- package/src/engine/network/convertPathToURL.js +68 -51
- package/src/engine/physics/fluid/SliceVisualiser.d.ts.map +1 -1
- package/src/engine/physics/fluid/SliceVisualiser.js +4 -4
- package/src/generation/filtering/numeric/CellFilterCache.d.ts.map +1 -1
- package/src/generation/filtering/numeric/CellFilterCache.js +1 -0
- package/src/core/binary/float2uint8.d.ts +0 -7
- package/src/core/binary/float2uint8.d.ts.map +0 -1
- package/src/core/binary/uint82float.d.ts +0 -7
- package/src/core/binary/uint82float.d.ts.map +0 -1
- package/src/core/binary/uint82float.spec.d.ts +0 -2
- package/src/core/binary/uint82float.spec.d.ts.map +0 -1
- package/src/core/binary/uint82float.spec.js +0 -7
- package/src/core/collection/array/randomizeArrayElementOrder.d.ts +0 -8
- package/src/core/collection/array/randomizeArrayElementOrder.d.ts.map +0 -1
- package/src/core/collection/array/randomizeArrayElementOrder.js +0 -24
- package/src/core/collection/array/randomizeArrayElementOrder.spec.d.ts +0 -2
- package/src/core/collection/array/randomizeArrayElementOrder.spec.d.ts.map +0 -1
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { assert } from "../assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @param {string} code
|
|
6
|
+
* @param {string} [mime_type]
|
|
7
|
+
* @return {Blob}
|
|
8
|
+
*/
|
|
9
|
+
export function codeToBlob(code, mime_type = 'application/javascript') {
|
|
10
|
+
assert.isString(code, 'code');
|
|
11
|
+
assert.isString(mime_type, 'mime_type');
|
|
12
|
+
|
|
13
|
+
let blob;
|
|
14
|
+
|
|
15
|
+
if (typeof globalThis.Blob !== "undefined") {
|
|
16
|
+
blob = new Blob([code], { type: mime_type });
|
|
17
|
+
} else {
|
|
18
|
+
// Backwards-compatibility
|
|
19
|
+
const BlobBuilder = globalThis.BlobBuilder
|
|
20
|
+
|| globalThis.BlobBuilder
|
|
21
|
+
|| globalThis.WebKitBlobBuilder
|
|
22
|
+
|| globalThis.MozBlobBuilder;
|
|
23
|
+
|
|
24
|
+
if (BlobBuilder !== undefined) {
|
|
25
|
+
blob = new BlobBuilder();
|
|
26
|
+
blob.append(code);
|
|
27
|
+
blob = blob.getBlob();
|
|
28
|
+
} else {
|
|
29
|
+
throw new Error(`No BlobBuilder interface supported in current context`);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
return blob;
|
|
36
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codeToURL.d.ts","sourceRoot":"","sources":["../../../../src/core/codegen/codeToURL.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,gCAJW,MAAM,cACN,MAAM,GACL,MAAM,CAcjB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { assert } from "../assert.js";
|
|
2
|
+
import { codeToBlob } from "./codeToBlob.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
*
|
|
6
|
+
* @param {string} code
|
|
7
|
+
* @param {string} [mime_type]
|
|
8
|
+
* @return {string}
|
|
9
|
+
*/
|
|
10
|
+
export function codeToURL(code, mime_type = 'application/javascript') {
|
|
11
|
+
assert.isString(code, 'code');
|
|
12
|
+
assert.isString(mime_type, 'mime_type');
|
|
13
|
+
|
|
14
|
+
const blob = codeToBlob(code, mime_type);
|
|
15
|
+
|
|
16
|
+
if (blob !== undefined && URL.createObjectURL !== undefined) {
|
|
17
|
+
return URL.createObjectURL(blob);
|
|
18
|
+
} else {
|
|
19
|
+
// build data URL in a slowest way possible
|
|
20
|
+
return `data:${mime_type},${encodeURIComponent(code)}`;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array_shuffle.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/array/array_shuffle.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,qEAYC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { randomIntegerBetween } from "../../math/random/randomIntegerBetween.js";
|
|
2
|
+
import { array_swap_one } from "./array_swap_one.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Randomly re-orders items in-place
|
|
6
|
+
* @template T
|
|
7
|
+
* @param {function} random
|
|
8
|
+
* @param {T[]} array
|
|
9
|
+
*/
|
|
10
|
+
export function array_shuffle(random, array) {
|
|
11
|
+
const n = array.length;
|
|
12
|
+
|
|
13
|
+
for (let source_index = 0; source_index < n; source_index++) {
|
|
14
|
+
const target_index = randomIntegerBetween(random, 0, n - (source_index + 1));
|
|
15
|
+
|
|
16
|
+
if (target_index === source_index) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
array_swap_one(array, source_index, target_index);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array_shuffle.spec.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/array/array_shuffle.spec.js"],"names":[],"mappings":""}
|
package/src/core/collection/array/{randomizeArrayElementOrder.spec.js → array_shuffle.spec.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { array_shuffle } from "./array_shuffle.js";
|
|
2
2
|
|
|
3
3
|
test("sanity", () => {
|
|
4
4
|
|
|
@@ -6,19 +6,19 @@ test("sanity", () => {
|
|
|
6
6
|
|
|
7
7
|
const a = [];
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
array_shuffle(random, a);
|
|
10
10
|
|
|
11
11
|
expect(a).toEqual([]);
|
|
12
12
|
|
|
13
13
|
const b = [1];
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
array_shuffle(random, b);
|
|
16
16
|
|
|
17
17
|
expect(b).toEqual([1]);
|
|
18
18
|
|
|
19
19
|
const c = [1, 2, 3];
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
array_shuffle(random, c);
|
|
22
22
|
|
|
23
23
|
expect(c.length).toBe(3);
|
|
24
24
|
expect(c).toContain(1);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { seededRandom } from "../../../math/random/seededRandom.js";
|
|
2
|
-
import {
|
|
2
|
+
import { array_shuffle } from "../array_shuffle.js";
|
|
3
3
|
import { AbstractArrayIterator } from "./AbstractArrayIterator.js";
|
|
4
4
|
|
|
5
5
|
export class ArrayIteratorRandom extends AbstractArrayIterator {
|
|
@@ -29,7 +29,7 @@ export class ArrayIteratorRandom extends AbstractArrayIterator {
|
|
|
29
29
|
this.__sequence[i] = i;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
array_shuffle(this.__random, this.__sequence);
|
|
33
33
|
|
|
34
34
|
this.__i = 0;
|
|
35
35
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { randomizeArrayElementOrder } from "./randomizeArrayElementOrder.js";
|
|
2
1
|
import { min2 } from "../../math/min2.js";
|
|
2
|
+
import { array_shuffle } from "./array_shuffle.js";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Pick multiple random items from an array
|
|
@@ -20,7 +20,7 @@ export function randomMultipleFromArray(random, source, target, count) {
|
|
|
20
20
|
order[i] = i;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
array_shuffle(random, order);
|
|
24
24
|
|
|
25
25
|
const target_length = min2(source_length, count);
|
|
26
26
|
|
package/src/core/color/Color.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { assert } from "../assert.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { float_to_uint8 } from "../binary/float_to_uint8.js";
|
|
3
|
+
import { uint8_to_float } from "../binary/uint8_to_float.js";
|
|
4
4
|
import Signal from "../events/signal/Signal.js";
|
|
5
5
|
import { clamp01 } from "../math/clamp01.js";
|
|
6
6
|
import { lerp } from "../math/lerp.js";
|
|
@@ -152,9 +152,9 @@ export class Color {
|
|
|
152
152
|
*/
|
|
153
153
|
setRGBUint8(r, g, b) {
|
|
154
154
|
this.setRGB(
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
155
|
+
uint8_to_float(r),
|
|
156
|
+
uint8_to_float(g),
|
|
157
|
+
uint8_to_float(b),
|
|
158
158
|
)
|
|
159
159
|
}
|
|
160
160
|
|
|
@@ -462,9 +462,9 @@ export class Color {
|
|
|
462
462
|
*/
|
|
463
463
|
toHex() {
|
|
464
464
|
return '#' + rgb2hex(
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
465
|
+
float_to_uint8(this.r),
|
|
466
|
+
float_to_uint8(this.g),
|
|
467
|
+
float_to_uint8(this.b)
|
|
468
468
|
);
|
|
469
469
|
}
|
|
470
470
|
|
|
@@ -473,7 +473,7 @@ export class Color {
|
|
|
473
473
|
* @returns {string}
|
|
474
474
|
*/
|
|
475
475
|
toCssRGBAString() {
|
|
476
|
-
return `rgba(${
|
|
476
|
+
return `rgba(${float_to_uint8(this.r)},${float_to_uint8(this.g)},${float_to_uint8(this.b)},${this.a})`;
|
|
477
477
|
}
|
|
478
478
|
|
|
479
479
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { float_to_uint8 } from "../../binary/float_to_uint8.js";
|
|
1
2
|
import { clamp01 } from "../../math/clamp01.js";
|
|
2
|
-
import { float2uint8 } from "../../binary/float2uint8.js";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
*
|
|
@@ -52,9 +52,9 @@ export function hsv2rgb(h, s, v) {
|
|
|
52
52
|
break;
|
|
53
53
|
}
|
|
54
54
|
return {
|
|
55
|
-
r:
|
|
56
|
-
g:
|
|
57
|
-
b:
|
|
55
|
+
r: float_to_uint8(r),
|
|
56
|
+
g: float_to_uint8(g),
|
|
57
|
+
b: float_to_uint8(b)
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
60
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { float_to_uint8 } from "../binary/float_to_uint8.js";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
*
|
|
@@ -8,9 +8,9 @@ import { float2uint8 } from "../binary/float2uint8.js";
|
|
|
8
8
|
* @returns {number}
|
|
9
9
|
*/
|
|
10
10
|
export function rgb2uint24(r, g, b) {
|
|
11
|
-
const _r =
|
|
12
|
-
const _g =
|
|
13
|
-
const _b =
|
|
11
|
+
const _r = float_to_uint8(r);
|
|
12
|
+
const _g = float_to_uint8(g);
|
|
13
|
+
const _b = float_to_uint8(b);
|
|
14
14
|
|
|
15
15
|
return (_b & 0xFF)
|
|
16
16
|
| (_g & 0xFF) << 8
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linear_to_sRGB.d.ts","sourceRoot":"","sources":["../../../../../src/core/color/sRGB/linear_to_sRGB.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"linear_to_sRGB.d.ts","sourceRoot":"","sources":["../../../../../src/core/color/sRGB/linear_to_sRGB.js"],"names":[],"mappings":"AAAA,+DAMC;AAED;;;;;;GAMG;AACH,uCALW,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,iBAC1B,MAAM,SACN,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,gBAC1B,MAAM,QAahB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function
|
|
1
|
+
export function convert_channel_linear_to_sRGB(c) {
|
|
2
2
|
if (c < 0.0031308) {
|
|
3
3
|
return c * 12.92;
|
|
4
4
|
} else {
|
|
@@ -21,7 +21,7 @@ export function linear_to_sRGB(
|
|
|
21
21
|
const g = input[input_offset + 1];
|
|
22
22
|
const b = input[input_offset + 2];
|
|
23
23
|
|
|
24
|
-
output[output_offset] =
|
|
25
|
-
output[output_offset + 1] =
|
|
26
|
-
output[output_offset + 2] =
|
|
24
|
+
output[output_offset] = convert_channel_linear_to_sRGB(r);
|
|
25
|
+
output[output_offset + 1] = convert_channel_linear_to_sRGB(g);
|
|
26
|
+
output[output_offset + 2] = convert_channel_linear_to_sRGB(b);
|
|
27
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AABB3.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/aabb/AABB3.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AABB3.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/aabb/AABB3.js"],"names":[],"mappings":"AAgBA;;;GAGG;AACH;IACI;;;;;;;;;OASG;IACH,iBARW,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,EAYhB;IAyCD,gBAEC;IA7BD,aAEC;IA6BD,gBAEC;IA5BD,aAEC;IA4BD,gBAEC;IA5BD,aAEC;IA4BD,gBAEC;IA3BD,aAEC;IA2BD,gBAEC;IA1BD,aAEC;IA0BD,gBAEC;IA1BD,aAEC;IAGG,QAAW;IAIX,QAAW;IAIX,QAAW;IAIX,QAAW;IAIX,QAAW;IAIX,QAAW;IAGf;;;;;;OAMG;IACH,iBALW,MAAM,KACN,MAAM,KACN,MAAM,GACJ,OAAO,CAInB;IAED;;;;;;;OAOG;IACH,8BANW,MAAM,KACN,MAAM,KACN,MAAM,aACN,MAAM,GACJ,OAAO,CAMnB;IAED,4BAKC;IAED;;;OAGG;IACH,sBAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,kBAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,iBAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,YAFW,KAAK,QAIf;IAED;;;;;;;;OAQG;IACH,wFAsCC;IAED;;;;OAIG;IACH,cAHW,KAAK,GACH,OAAO,CAInB;IAED;;;;;;;;;OASG;IACH,iFAFa,OAAO,CASnB;IAED;;;;;;;;OAQG;IACH,iGA6BC;IAED,oCAEC;IAED,0BAEC;IAED;;;;;OAKG;IACH,cAJW,MAAM,KACN,MAAM,KACN,MAAM,QAOhB;IAED;;;;;;OAMG;IACH,oBALW,MAAM,KACN,MAAM,KACN,MAAM,GACJ,MAAM,CAQlB;IAED;;;;OAIG;IACH,mBAHW,KAAK,GACH,MAAM,CAIlB;IAED;;;;;;;;;;OAUG;IACH,mBARW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,MAAM,CAclB;IAED;;;;OAIG;IACH,wBAHW,KAAK,GACH,MAAM,CAIlB;IAED;;;;;;;;;;OAUG;IACH,sBARW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,MAAM,CAsClB;IAED;;;;;;OAMG;IACH,qBALW,MAAM,KACN,MAAM,KACN,MAAM,GACJ,OAAO,CA6BnB;IAED;;;;OAIG;IACH,iBAHW,KAAK,GACH,OAAO,CAInB;IAED;;;;;;;;;OASG;IACH,iBARW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,OAAO,CA6BnB;IAED;;;;;;;;;OASG;IACH,iBARW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,OAAO,CAInB;IAED;;;;OAIG;IACH,iBAHW,KAAK,GACH,OAAO,CAInB;IAED;;;OAGG;IACH,eAFa,MAAM,CAIlB;IAED,oBAEC;IAED;;;OAGG;IACH,eAFa,MAAM,CAIlB;IAED,qBAEC;IAED;;;OAGG;IACH,eAFa,MAAM,CAIlB;IAED,oBAEC;IAED;;;OAGG;IACH,mBAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,mBAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,mBAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,mBAFW,OAAO,QAQjB;IAED;;;OAGG;IACH,cAFa,MAAM,CAIlB;IAED,sBAEC;IAED;;;OAGG;IACH,cAFa,MAAM,CAIlB;IAED,sBAEC;IAED;;;OAGG;IACH,cAFa,MAAM,CAIlB;IAED,sBAEC;IAED;;;OAGG;IACH,mBAFW,OAAO,WASjB;IAGD;;;;;;;;OAQG;IACH,4EAEC;IAED,kGAEC;IAED;;;;OAIG;IACH,kCAFa,OAAO,CAMnB;IAED;;;;OAIG;IACH,oDAmBC;IAED;;;OAGG;IACH,mBAFW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,QAa5C;IAED;;;;OAIG;IACH,qBAHW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,WAClC,MAAM,QAYhB;IAED;;;;OAIG;IACH,sBAHW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,WAClC,MAAM,QAchB;IAED;;;OAGG;IACH,wBAHW,MAAM,KAAK,OAWrB;IAED;;;;;;;OAOG;IACH,oCANW,MAAM,YACN,MAAM,YACN,MAAM,UACN,MAAM,GACJ,MAAM,CAQlB;IAED;;;;;;;OAOG;IACH,wBANW,MAAM,YACN,MAAM,YACN,MAAM,UACN,MAAM,GACJ,OAAO,CAInB;IAED;;;;OAIG;IACH,4BAFY,OAAO,CAMlB;IAED;;;OAGG;IACH,+BAHW,OAAO,GACL,OAAO,CAanB;IAED;;;;OAIG;IACH,0CAFa,MAAM,CAoBlB;IAED;;;;OAIG;IACH,sCAHW,MAAM,EAAE,GACN,MAAM,CAMlB;IAED;;;;OAIG;IACH;;QAFa,OAAO,CAYnB;IAED;;;;OAIG;IACH,gCAHW,UAAU,MAAM,CAAC,GAAC,MAAM,EAAE,GAAC,YAAY,GACrC,OAAO,CAYnB;IAED;;;OAGG;IACH,qBAFW,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,GAAC,YAAY,QAWjD;IAED;;;OAGG;IACH,YAFW,MAAM,QAUhB;IAED;;;OAGG;IACH,SAFa,KAAK,CAQjB;IAED;;;;;;;aAEC;IAIL;;;OAGG;IACH,kBAFU,OAAO,CAEM;IAEvB;;;;OAIG;IACH,iBAFU,MAAM,CAEM;IA14BlB,mDAUC;CAk3BJ;oBAr6BmB,kBAAkB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { assert } from "../../../assert.js";
|
|
2
|
+
import Vector3 from "../../Vector3.js";
|
|
2
3
|
import computeMortonCode from "../morton/Morton.js";
|
|
3
4
|
import { aabb3_array_intersects_point } from "./aabb3_array_intersects_point.js";
|
|
4
5
|
import { aabb3_build_corners } from "./aabb3_build_corners.js";
|
|
@@ -630,11 +631,13 @@ export class AABB3 {
|
|
|
630
631
|
* Get center position of the box
|
|
631
632
|
* @param {Vector3} target where to write result
|
|
632
633
|
*/
|
|
633
|
-
getCenter(target) {
|
|
634
|
+
getCenter(target = new Vector3()) {
|
|
634
635
|
const x = this.getCenterX();
|
|
635
636
|
const y = this.getCenterY();
|
|
636
637
|
const z = this.getCenterZ();
|
|
637
638
|
target.set(x, y, z);
|
|
639
|
+
|
|
640
|
+
return target;
|
|
638
641
|
}
|
|
639
642
|
|
|
640
643
|
|
|
@@ -35,7 +35,7 @@ export function aabb3_intersects_ray(
|
|
|
35
35
|
const diff_x = origin_x - center_x;
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
if (diff_x * direction_x >= 0
|
|
38
|
+
if (diff_x * direction_x >= 0 && abs(diff_x) > extents_x) {
|
|
39
39
|
return false;
|
|
40
40
|
}
|
|
41
41
|
|
|
@@ -47,7 +47,7 @@ export function aabb3_intersects_ray(
|
|
|
47
47
|
const diff_y = origin_y - center_y;
|
|
48
48
|
|
|
49
49
|
|
|
50
|
-
if (diff_y * direction_y >= 0
|
|
50
|
+
if (diff_y * direction_y >= 0 && abs(diff_y) > extents_y) {
|
|
51
51
|
return false;
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -59,7 +59,7 @@ export function aabb3_intersects_ray(
|
|
|
59
59
|
const diff_z = origin_z - center_z;
|
|
60
60
|
|
|
61
61
|
|
|
62
|
-
if (diff_z * direction_z >= 0
|
|
62
|
+
if (diff_z * direction_z >= 0 && abs(diff_z) > extents_z) {
|
|
63
63
|
return false;
|
|
64
64
|
}
|
|
65
65
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UnitSphereShape3D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/shape/UnitSphereShape3D.js"],"names":[],"mappings":"AAKA;;GAEG;AACH;IACI,qBAEC;IAED,2BAEC;IAED,wCAQC;IAED,4DAYC;IAED,mEAEC;IAED,6CAMC;IAED,oCAMC;IAED,kFAEC;IAED,eAEC;CACJ;;;;
|
|
1
|
+
{"version":3,"file":"UnitSphereShape3D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/shape/UnitSphereShape3D.js"],"names":[],"mappings":"AAKA;;GAEG;AACH;IACI,qBAEC;IAED,2BAEC;IAED,wCAQC;IAED,4DAYC;IAED,mEAEC;IAED,6CAMC;IAED,oCAMC;IAED,kFAEC;IAED,eAEC;CACJ;;;;gCAlE+B,sBAAsB"}
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import { AbstractShape3D } from "./AbstractShape3D.js";
|
|
2
1
|
import { randomPointInSphere } from "../../random/randomPointInSphere.js";
|
|
3
2
|
import { v3_length } from "../../vec3/v3_length.js";
|
|
3
|
+
import { AbstractShape3D } from "./AbstractShape3D.js";
|
|
4
4
|
import { compute_signed_distance_gradient_by_sampling } from "./util/compute_signed_distance_gradient_by_sampling.js";
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* Sphere with diameter of
|
|
7
|
+
* Sphere with diameter of 2 (radius = 1)
|
|
8
8
|
*/
|
|
9
9
|
export class UnitSphereShape3D extends AbstractShape3D {
|
|
10
10
|
get volume() {
|
|
11
|
-
return
|
|
11
|
+
return (4 / 3) * Math.PI;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
get surface_area() {
|
|
15
|
-
return
|
|
15
|
+
return Math.PI * 4;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
compute_bounding_box(result) {
|
|
19
|
-
result[0] = -
|
|
20
|
-
result[1] = -
|
|
21
|
-
result[2] = -
|
|
19
|
+
result[0] = -1;
|
|
20
|
+
result[1] = -1;
|
|
21
|
+
result[2] = -1;
|
|
22
22
|
|
|
23
|
-
result[3] =
|
|
24
|
-
result[4] =
|
|
25
|
-
result[5] =
|
|
23
|
+
result[3] = 1;
|
|
24
|
+
result[4] = 1;
|
|
25
|
+
result[5] = 1;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
nearest_point_on_surface(result, reference) {
|
|
@@ -31,8 +31,8 @@ export class UnitSphereShape3D extends AbstractShape3D {
|
|
|
31
31
|
const r_y = reference[1];
|
|
32
32
|
const r_z = reference[2];
|
|
33
33
|
|
|
34
|
-
// normalize vector to
|
|
35
|
-
const d =
|
|
34
|
+
// normalize vector to 1 radius
|
|
35
|
+
const d = 1 / Math.hypot(r_x, r_y, r_z);
|
|
36
36
|
|
|
37
37
|
result[0] = r_x * d;
|
|
38
38
|
result[1] = r_y * d;
|
|
@@ -48,7 +48,7 @@ export class UnitSphereShape3D extends AbstractShape3D {
|
|
|
48
48
|
point[0],
|
|
49
49
|
point[1],
|
|
50
50
|
point[2]
|
|
51
|
-
) -
|
|
51
|
+
) - 1;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
contains_point(point) {
|
|
@@ -56,7 +56,7 @@ export class UnitSphereShape3D extends AbstractShape3D {
|
|
|
56
56
|
const y = point[1];
|
|
57
57
|
const z = point[2];
|
|
58
58
|
|
|
59
|
-
return (x * x + y * y + z * z) <
|
|
59
|
+
return (x * x + y * y + z * z) < 1;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
sample_random_point_in_volume(result, result_offset, random) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SH3_COEFFICIENTS.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/sphere/harmonics/SH3_COEFFICIENTS.js"],"names":[],"mappings":"AAAA;;;GAGG;AACH,+BAFU,YAAY,
|
|
1
|
+
{"version":3,"file":"SH3_COEFFICIENTS.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/sphere/harmonics/SH3_COEFFICIENTS.js"],"names":[],"mappings":"AAAA;;;GAGG;AACH,+BAFU,YAAY,CAcnB"}
|
|
@@ -4,9 +4,11 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export const SH3_COEFFICIENTS = new Float32Array([
|
|
6
6
|
0.28209479177387814, // 0: 0 0
|
|
7
|
+
|
|
7
8
|
-0.4886025119029199, // 1: 1 -1
|
|
8
9
|
0.4886025119029199, // 2: 1 0
|
|
9
10
|
-0.4886025119029199, // 3: 1 1
|
|
11
|
+
|
|
10
12
|
1.0925484305920792, // 4: 2 -2
|
|
11
13
|
-1.0925484305920792, // 5: 2 -1
|
|
12
14
|
0.31539156525252005, // 6: 2 0
|
package/src/core/geom/Vector3.js
CHANGED
|
@@ -796,10 +796,10 @@ class Vector3 {
|
|
|
796
796
|
}
|
|
797
797
|
|
|
798
798
|
/**
|
|
799
|
-
*
|
|
799
|
+
* Convert spherical coordinates to cartesian
|
|
800
800
|
* @param {number} radius
|
|
801
|
-
* @param {number} phi
|
|
802
|
-
* @param {number} theta
|
|
801
|
+
* @param {number} phi Also known as Azimuth
|
|
802
|
+
* @param {number} theta Also known as Elevation
|
|
803
803
|
*/
|
|
804
804
|
setFromSphericalCoords(radius, phi, theta) {
|
|
805
805
|
assert.isNumber(radius, 'radius');
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { PI2 } from "../../math/PI2.js";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Unit sphere with Radius = 1
|
|
5
5
|
* @see based on python code suggested here: https://stackoverflow.com/questions/5408276/sampling-uniformly-distributed-random-points-inside-a-spherical-volume
|
|
6
6
|
* @param {function} random
|
|
7
7
|
* @param {number[]} result
|
|
@@ -17,7 +17,7 @@ export function randomPointInSphere(random, result, result_offset) {
|
|
|
17
17
|
const theta = Math.acos(cosTheta);
|
|
18
18
|
|
|
19
19
|
// compute radius
|
|
20
|
-
const r = Math.cbrt(u)
|
|
20
|
+
const r = Math.cbrt(u);
|
|
21
21
|
|
|
22
22
|
const sinTheta = Math.sin(theta);
|
|
23
23
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Unit sphere sampling
|
|
3
3
|
* @see based on python code suggested here: https://stackoverflow.com/questions/5408276/sampling-uniformly-distributed-random-points-inside-a-spherical-volume
|
|
4
4
|
* @param {function} random
|
|
5
|
-
* @param {number[]} result
|
|
5
|
+
* @param {number[]|Float32Array} result
|
|
6
6
|
* @param {number} result_offset
|
|
7
7
|
*/
|
|
8
|
-
export function randomPointOnSphere(random: Function, result: number[], result_offset: number): void;
|
|
8
|
+
export function randomPointOnSphere(random: Function, result: number[] | Float32Array, result_offset: number): void;
|
|
9
9
|
//# sourceMappingURL=randomPointOnSphere.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"randomPointOnSphere.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/random/randomPointOnSphere.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,8DAHW,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"randomPointOnSphere.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/random/randomPointOnSphere.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,8DAHW,MAAM,EAAE,GAAC,YAAY,iBACrB,MAAM,QAoBhB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Unit sphere sampling
|
|
3
3
|
* @see based on python code suggested here: https://stackoverflow.com/questions/5408276/sampling-uniformly-distributed-random-points-inside-a-spherical-volume
|
|
4
4
|
* @param {function} random
|
|
5
|
-
* @param {number[]} result
|
|
5
|
+
* @param {number[]|Float32Array} result
|
|
6
6
|
* @param {number} result_offset
|
|
7
7
|
*/
|
|
8
8
|
export function randomPointOnSphere(random, result, result_offset) {
|
|
@@ -14,14 +14,10 @@ export function randomPointOnSphere(random, result, result_offset) {
|
|
|
14
14
|
|
|
15
15
|
const sinTheta = Math.sin(theta);
|
|
16
16
|
|
|
17
|
-
const r = 0.5;
|
|
18
|
-
|
|
19
17
|
//compute coordinates
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
const y = rst * Math.sin(phi);
|
|
24
|
-
const z = r * cosTheta;
|
|
18
|
+
const x = sinTheta * Math.cos(phi);
|
|
19
|
+
const y = sinTheta * Math.sin(phi);
|
|
20
|
+
const z = cosTheta;
|
|
25
21
|
|
|
26
22
|
//write the result
|
|
27
23
|
result[result_offset] = x;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { array_shuffle } from "../../../collection/array/array_shuffle.js";
|
|
1
2
|
import { seededRandom } from "../../../math/random/seededRandom.js";
|
|
2
|
-
import { TaskSignal } from "../TaskSignal.js";
|
|
3
3
|
import Task from "../Task.js";
|
|
4
|
-
import {
|
|
4
|
+
import { TaskSignal } from "../TaskSignal.js";
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
*
|
|
@@ -49,7 +49,7 @@ export function randomCountTask(seed, initial, limit, callback) {
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
//shuffle
|
|
52
|
-
|
|
52
|
+
array_shuffle(random, sequence);
|
|
53
53
|
},
|
|
54
54
|
cycleFunction: cycle,
|
|
55
55
|
computeProgress: function () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkerBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/core/process/worker/WorkerBuilder.js"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"WorkerBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/core/process/worker/WorkerBuilder.js"],"names":[],"mappings":";AAQA;IAEI,eAAa;IACb,YAAa;IACb,iBAAe;IACf,sBAA6B;IAE7B;;;OAGG;IACH,cAFW,MAAM,QAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,UACN,WAAS,MAAM,QAIzB;IAED;;;;;OAKG;IACH,6CAKC;IAED;;;OAGG;IACH,mBAFW,MAAM,QAMhB;IAED;;;OAGG;IACH,SAFa,WAAW,CAyGvB;CACJ;wBAjKuB,8BAA8B;wBAC9B,kBAAkB"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { convertPathToURL } from "../../../engine/network/convertPathToURL.js";
|
|
2
|
+
import { codeToURL } from "../../codegen/codeToURL.js";
|
|
2
3
|
import LineBuilder from "../../codegen/LineBuilder.js";
|
|
3
4
|
import WorkerProxy from "./WorkerProxy.js";
|
|
4
5
|
|
|
5
6
|
const RxMatchFunctionName = /(function\s*)([a-zA-Z0-9_]+)?(\s*\([^\]]*\)\s*\{.*)/g;
|
|
6
7
|
|
|
8
|
+
|
|
7
9
|
class WorkerBuilder {
|
|
8
10
|
|
|
9
11
|
imports = [];
|
|
@@ -46,9 +48,9 @@ class WorkerBuilder {
|
|
|
46
48
|
* @param {string} path
|
|
47
49
|
*/
|
|
48
50
|
importScript(path) {
|
|
49
|
-
|
|
51
|
+
const qualified_path = convertPathToURL(path);
|
|
50
52
|
|
|
51
|
-
this.imports.push(
|
|
53
|
+
this.imports.push(qualified_path);
|
|
52
54
|
}
|
|
53
55
|
|
|
54
56
|
/**
|
|
@@ -58,7 +60,7 @@ class WorkerBuilder {
|
|
|
58
60
|
build() {
|
|
59
61
|
const codeLines = [];
|
|
60
62
|
|
|
61
|
-
codeLines.push('var globalScope =
|
|
63
|
+
codeLines.push('var globalScope = globalThis;');
|
|
62
64
|
|
|
63
65
|
//handle imports
|
|
64
66
|
this.imports.forEach(function (url) {
|
|
@@ -161,36 +163,4 @@ class WorkerBuilder {
|
|
|
161
163
|
}
|
|
162
164
|
};
|
|
163
165
|
|
|
164
|
-
/**
|
|
165
|
-
*
|
|
166
|
-
* @param {string} code
|
|
167
|
-
* @return {string}
|
|
168
|
-
*/
|
|
169
|
-
function codeToURL(code) {
|
|
170
|
-
const js_mime = 'application/javascript';
|
|
171
|
-
|
|
172
|
-
let blob;
|
|
173
|
-
|
|
174
|
-
if (typeof window === 'object') {
|
|
175
|
-
if (typeof window.Blob !== "undefined") {
|
|
176
|
-
blob = new Blob([code], {type: js_mime});
|
|
177
|
-
} else {
|
|
178
|
-
// Backwards-compatibility
|
|
179
|
-
const BlobBuilder = window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;
|
|
180
|
-
if (BlobBuilder !== undefined) {
|
|
181
|
-
blob = new BlobBuilder();
|
|
182
|
-
blob.append(code);
|
|
183
|
-
blob = blob.getBlob();
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
if (blob !== undefined && URL.createObjectURL !== undefined) {
|
|
189
|
-
return URL.createObjectURL(blob);
|
|
190
|
-
} else {
|
|
191
|
-
// build data URL in a slowest way possible
|
|
192
|
-
return `data:${js_mime},${encodeURIComponent(code)}`;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
166
|
export default WorkerBuilder;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EngineHarness.d.ts","sourceRoot":"","sources":["../../../src/engine/EngineHarness.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EngineHarness.d.ts","sourceRoot":"","sources":["../../../src/engine/EngineHarness.js"],"names":[],"mappings":"AA6DA;IAmBI;;;OAGG;IACH,6BAFW,MAAM,QAYhB;IAkED;;;;;;;;;;;;;OAaG;IACH;QAZyB,MAAM,EAApB,MAAM;QACyB,GAAG;QAClB,MAAM,GAAtB,OAAO;QACQ,QAAQ,GAAvB,MAAM;QACS,KAAK,GAApB,MAAM;QACS,GAAG,GAAlB,MAAM;QACU,QAAQ,GAAxB,OAAO;QACQ,WAAW,GAA1B,MAAM;QACS,WAAW,GAA1B,MAAM;QACS,WAAW,GAA1B,MAAM;QACJ,MAAM,CA+DlB;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,oQAnBW,MAAM,iBAmFhB;IAGD;;;;;;;;;;OAUG;IACH;QATyB,MAAM,EAApB,MAAM;QACyB,GAAG;QACnB,mBAAmB,GAAlC,MAAM;QACU,UAAU,GAA1B,OAAO;QACO,GAAG,GAAjB,KAAK;QACU,YAAY,GAA3B,MAAM;QACQ,OAAO,GAArB,KAAK;QACU,gBAAgB,GAA/B,MAAM;sBAqDhB;IAED;;;;;;;OAOG;IACH;QAN0B,YAAY,GAA3B,MAAM;QACQ,MAAM,EAApB,MAAM;QACS,WAAW,GAA1B,MAAM;QACyB,GAAG;QAChC,MAAM,CA2ClB;IAGD;;;;;;;;;;;OAWG;IACH,mGAVW,MAAM,GAQJ,OAAO,CAuDnB;IA3bG;;;OAGG;IACH,QAFU,MAAM,CAEiC;IAMjD;;;OAGG;IACH,YAFU,eAAQ,IAAI,CAET;IAmBjB;;;;OAIG;IACH,8DAJmB,mBAAmB,UAAQ,MAAM,WAEvC,QAAQ,MAAM,CAAC,CA2D3B;CA6VJ;;IAID;;;OAGG;IACH,uCAMC;;mBA1fkB,aAAa;oCACI,0BAA0B;oBAX1C,yBAAyB;mBAK1B,iBAAiB;sBATd,wBAAwB;oBAW1B,8BAA8B"}
|