abstract-3d 4.0.0-beta.2 → 4.0.0-beta.4
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/README.md +2 -2
- package/lib/renderers/three/quality/quality.d.ts +3 -2
- package/lib/renderers/three/quality/quality.d.ts.map +1 -1
- package/lib/renderers/three/quality/quality.js +4 -3
- package/lib/renderers/three/quality/quality.js.map +1 -1
- package/lib/renderers/three/shadow/shadow.d.ts.map +1 -1
- package/lib/renderers/three/shadow/shadow.js +6 -10
- package/lib/renderers/three/shadow/shadow.js.map +1 -1
- package/lib/renderers/three/viewer/options.d.ts +2 -2
- package/lib/renderers/three/viewer/options.d.ts.map +1 -1
- package/lib/renderers/three/viewer/viewer.js +10 -6
- package/lib/renderers/three/viewer/viewer.js.map +1 -1
- package/package.json +1 -1
- package/src/renderers/ifc/ifc.test.ts +7 -5
- package/src/renderers/three/appearance/appearance.test.ts +9 -4
- package/src/renderers/three/build/build.test.ts +18 -10
- package/src/renderers/three/compile/compile.test.ts +32 -19
- package/src/renderers/three/quality/quality.test.ts +2 -2
- package/src/renderers/three/quality/quality.ts +4 -3
- package/src/renderers/three/shadow/shadow.ts +5 -10
- package/src/renderers/three/viewer/options.ts +2 -2
- package/src/renderers/three/viewer/viewer.ts +10 -6
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ Abstract 3d with renderers for three.js (`abstract-3d/three`, with a React compo
|
|
|
8
8
|
|
|
9
9
|
## Viewer
|
|
10
10
|
|
|
11
|
-
`abstract-3d/three` is an interactive three.js viewer that works without React. It draws a scene in a few draw calls whatever its size, and renders only when something changes, so it runs smoothly on weak graphics cards.
|
|
11
|
+
`abstract-3d/three` is an interactive three.js viewer that works without React. It draws a scene in a few draw calls whatever its size, and renders only when something changes, so it runs smoothly on weak graphics cards. `quality: "auto"` lowers the resolution if moving gets slow.
|
|
12
12
|
|
|
13
13
|
```ts
|
|
14
14
|
import { createViewer, disposeViewer, updateViewer } from "abstract-3d/three";
|
|
@@ -24,4 +24,4 @@ disposeViewer(viewer);
|
|
|
24
24
|
|
|
25
25
|
`abstract-3d/react` wraps it as the `Viewer` component, with the same props as the 3.x `render` component except for the breaking changes listed in the CHANGELOG. `three` is a peer dependency, and `react` and `react-dom` are optional peer dependencies.
|
|
26
26
|
|
|
27
|
-
Development: `pnpm test:abstract-3d`, `pnpm bench:abstract-3d` (compile, build, hover and picking in Node) and `pnpm bench:abstract-3d:browser [bench] [screenshots]` (frame times
|
|
27
|
+
Development: `pnpm test:abstract-3d`, `pnpm bench:abstract-3d` (compile, build, hover and picking in Node) and `pnpm bench:abstract-3d:browser [bench] [memory] [screenshots]` (frame times and draw calls; frames rendered while idle and GPU resources and heap over 150 scene swaps; screenshots written to `bench/out`; in headless Chromium).
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Quality tiers by resolution, the cheapest lever on a weak GPU: low renders a pixel per CSS pixel, medium up to 1.5 and high
|
|
3
|
-
*
|
|
2
|
+
* Quality tiers by resolution, the cheapest lever on a weak GPU: low renders a pixel per CSS pixel, medium up to 1.5, and high, the default, the
|
|
3
|
+
* screen's own pixel ratio as the r3f renderer. `auto` starts high and drops to low for good once moving frames are slow, as model viewers lower
|
|
4
|
+
* their resolution under load
|
|
4
5
|
*/
|
|
5
6
|
export type Tier = "low" | "medium" | "high";
|
|
6
7
|
export type Quality = Tier | "auto";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quality.d.ts","sourceRoot":"","sources":["../../../../src/renderers/three/quality/quality.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"quality.d.ts","sourceRoot":"","sources":["../../../../src/renderers/three/quality/quality.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,IAAI,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAC7C,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC;AAEpC,4GAA4G;AAC5G,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAQjG,kGAAkG;AAClG,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAY/E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAE1E"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Quality tiers by resolution, the cheapest lever on a weak GPU: low renders a pixel per CSS pixel, medium up to 1.5 and high
|
|
3
|
-
*
|
|
2
|
+
* Quality tiers by resolution, the cheapest lever on a weak GPU: low renders a pixel per CSS pixel, medium up to 1.5, and high, the default, the
|
|
3
|
+
* screen's own pixel ratio as the r3f renderer. `auto` starts high and drops to low for good once moving frames are slow, as model viewers lower
|
|
4
|
+
* their resolution under load
|
|
4
5
|
*/
|
|
5
|
-
const pixelRatioCaps = { low: 1, medium: 1.5, high:
|
|
6
|
+
const pixelRatioCaps = { low: 1, medium: 1.5, high: Infinity };
|
|
6
7
|
const windowSize = 30;
|
|
7
8
|
const slowFrameMs = 25;
|
|
8
9
|
/** Longer intervals are pauses between moves, not slow frames */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quality.js","sourceRoot":"","sources":["../../../../src/renderers/three/quality/quality.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"quality.js","sourceRoot":"","sources":["../../../../src/renderers/three/quality/quality.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,MAAM,cAAc,GAAyB,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACrF,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,iEAAiE;AACjE,MAAM,OAAO,GAAG,GAAG,CAAC;AAEpB,kGAAkG;AAClG,MAAM,UAAU,WAAW,CAAC,QAAsB,EAAE,UAAkB;IACpE,IAAI,QAAQ,CAAC,OAAO,KAAK,MAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,IAAI,UAAU,GAAG,OAAO,EAAE,CAAC;QACnF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,QAAQ,CAAC,GAAG,IAAI,UAAU,CAAC;IAC3B,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;IACpB,IAAI,QAAQ,CAAC,KAAK,GAAG,UAAU,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,KAAK,GAAG,WAAW,CAAC;IACzD,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAU,EAAE,gBAAwB;IAChE,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadow.d.ts","sourceRoot":"","sources":["../../../../src/renderers/three/shadow/shadow.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,KAAK,
|
|
1
|
+
{"version":3,"file":"shadow.d.ts","sourceRoot":"","sources":["../../../../src/renderers/three/shadow/shadow.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,KAAK,EACV,IAAI,EACJ,iBAAiB,EAGjB,aAAa,EAIb,KAAK,aAAa,EAClB,iBAAiB,EAClB,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;GAIG;AAEH,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAUzH,4GAA4G;AAC5G,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,GAAG,YAAY,GAAG,SAAS,CAmErH;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAK9D"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Box3,
|
|
1
|
+
import { Box3, Mesh, MeshBasicMaterial, MeshDepthMaterial, OrthographicCamera, PlaneGeometry, ShaderMaterial, UniformsUtils, Vector3, WebGLRenderTarget, } from "three";
|
|
2
2
|
import { FullScreenQuad } from "three/addons/postprocessing/Pass.js";
|
|
3
3
|
import { HorizontalBlurShader } from "three/addons/shaders/HorizontalBlurShader.js";
|
|
4
4
|
import { VerticalBlurShader } from "three/addons/shaders/VerticalBlurShader.js";
|
|
@@ -6,8 +6,6 @@ import { VerticalBlurShader } from "three/addons/shaders/VerticalBlurShader.js";
|
|
|
6
6
|
const shadowLayer = 1;
|
|
7
7
|
/** Of the texture's longer side */
|
|
8
8
|
const resolution = 512;
|
|
9
|
-
/** How far behind (-z) a part's shadow falls per unit of its height, as from a light in front and above */
|
|
10
|
-
const lean = 0.5;
|
|
11
9
|
/** The blur's reach, of the solids' height */
|
|
12
10
|
const softness = 0.15;
|
|
13
11
|
const opacity = 0.8;
|
|
@@ -24,20 +22,18 @@ export function createGroundShadow(renderer, scene, built) {
|
|
|
24
22
|
return undefined;
|
|
25
23
|
}
|
|
26
24
|
const size = bounds.getSize(new Vector3());
|
|
27
|
-
// The plane reaches past the solids by twice the blur's reach
|
|
28
|
-
const
|
|
29
|
-
const [width, depth] = [size.x + reach * 4, size.z + reach * 4
|
|
30
|
-
const center = new Vector3((bounds.min.x + bounds.max.x) / 2, bounds.min.y, (bounds.min.z + bounds.max.z
|
|
25
|
+
// The plane reaches past the solids by twice the blur's reach on every side
|
|
26
|
+
const reach = softness * size.y;
|
|
27
|
+
const [width, depth] = [size.x + reach * 4, size.z + reach * 4];
|
|
28
|
+
const center = new Vector3((bounds.min.x + bounds.max.x) / 2, bounds.min.y, (bounds.min.z + bounds.max.z) / 2);
|
|
31
29
|
const [texelsX, texelsZ] = width > depth ? [resolution, Math.ceil((resolution * depth) / width)] : [Math.ceil((resolution * width) / depth), resolution];
|
|
32
30
|
const [target, blurred] = [new WebGLRenderTarget(texelsX, texelsZ), new WebGLRenderTarget(texelsX, texelsZ)];
|
|
33
|
-
// Looks up from the ground, seeing as far as the solids are high
|
|
34
|
-
// a height h is -h in its view space
|
|
31
|
+
// Looks up from the ground, seeing as far as the solids are high
|
|
35
32
|
const camera = new OrthographicCamera(-width / 2, width / 2, depth / 2, -depth / 2, 0, size.y);
|
|
36
33
|
camera.position.copy(center);
|
|
37
34
|
camera.rotation.x = Math.PI / 2;
|
|
38
35
|
camera.layers.set(shadowLayer);
|
|
39
36
|
camera.updateMatrixWorld();
|
|
40
|
-
camera.projectionMatrix.multiply(new Matrix4().set(1, 0, 0, 0, 0, 1, lean, 0, 0, 0, 1, 0, 0, 0, 0, 1));
|
|
41
37
|
// Depth tested, so at each point the surface closest to the ground darkens it, not the last one drawn
|
|
42
38
|
const darkness = new MeshDepthMaterial();
|
|
43
39
|
darkness.onBeforeCompile = (shader) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shadow.js","sourceRoot":"","sources":["../../../../src/renderers/three/shadow/shadow.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EAEJ,
|
|
1
|
+
{"version":3,"file":"shadow.js","sourceRoot":"","sources":["../../../../src/renderers/three/shadow/shadow.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,7 +33,7 @@ export type ViewerOptions<Content> = {
|
|
|
33
33
|
*/
|
|
34
34
|
readonly activeRelations?: ReadonlyArray<string>;
|
|
35
35
|
readonly showDimensions?: boolean;
|
|
36
|
-
/** View, buffer zones and padding are read when the scene is fitted: first, and for a new camera or canvas
|
|
36
|
+
/** View, buffer zones and padding are read when the scene is fitted: first, and for a new camera or canvas aspect */
|
|
37
37
|
readonly camera?: CameraOptions;
|
|
38
38
|
readonly view?: View;
|
|
39
39
|
readonly bufferZones?: BufferZones;
|
|
@@ -47,7 +47,7 @@ export type ViewerOptions<Content> = {
|
|
|
47
47
|
readonly environmentIntensity?: number;
|
|
48
48
|
/** A soft shadow on the ground under the scene, rendered once per build; on by default */
|
|
49
49
|
readonly groundShadow?: boolean;
|
|
50
|
-
/** The resolution: `low` 1
|
|
50
|
+
/** The resolution: `low` 1 and `medium` up to 1.5 pixels per CSS pixel, `high`, the default, the screen's; `auto` high until moving gets slow */
|
|
51
51
|
readonly quality?: Quality;
|
|
52
52
|
readonly useAlphaTest?: boolean;
|
|
53
53
|
readonly materialStateImages?: Record<string, string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../../src/renderers/three/viewer/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,yJAAyJ;AAEzJ,MAAM,MAAM,OAAO,CAAC,OAAO,IAAI;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtG,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;IACjC,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;CACtB,CAAC;AAEF,kFAAkF;AAClF,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;AAE/C,MAAM,MAAM,aAAa,CAAC,OAAO,IAAI;IACnC,mCAAmC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACvB,uIAAuI;IACvI,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,MAAM,CAAC;IAC9C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1D;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../../src/renderers/three/viewer/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -120,13 +120,13 @@ function apply(v, changes) {
|
|
|
120
120
|
if (changes.has("camera")) {
|
|
121
121
|
const { near = 0.1, far = 2000, ...rest } = options.camera ?? { type: "Perspective" };
|
|
122
122
|
v.camera = v.cameras[rest.type];
|
|
123
|
-
Object.assign(v.camera, { near, far, ...(
|
|
123
|
+
Object.assign(v.camera, { near, far, ...(rest.type === "Perspective" ? { fov: rest.fov ?? 45 } : {}) });
|
|
124
124
|
v.controls.orbit.object = v.camera;
|
|
125
125
|
}
|
|
126
126
|
if (changes.has("controls")) {
|
|
127
127
|
configureControls(v.controls, options.controls ?? {});
|
|
128
128
|
}
|
|
129
|
-
// As the r3f renderer, the scene is fitted at first, and for a new camera or canvas
|
|
129
|
+
// As the r3f renderer, the scene is fitted at first, and for a new camera or canvas aspect
|
|
130
130
|
if ((changes.has("build") && !v.fitted) || changes.has("camera")) {
|
|
131
131
|
fitPose(v);
|
|
132
132
|
}
|
|
@@ -137,7 +137,7 @@ function apply(v, changes) {
|
|
|
137
137
|
updateLights(v);
|
|
138
138
|
}
|
|
139
139
|
if (changes.has("quality")) {
|
|
140
|
-
const quality = options.quality ?? "
|
|
140
|
+
const quality = options.quality ?? "high";
|
|
141
141
|
v.governor = { quality, tier: quality === "auto" ? "high" : quality, sum: 0, count: 0 };
|
|
142
142
|
v.renderer.setPixelRatio(getPixelRatio(v.governor.tier, window.devicePixelRatio));
|
|
143
143
|
}
|
|
@@ -230,20 +230,24 @@ function renderFrame(v, now) {
|
|
|
230
230
|
loop.last = 0;
|
|
231
231
|
}
|
|
232
232
|
}
|
|
233
|
+
/** As the r3f renderer, a resize refits only when the canvas' aspect changes */
|
|
233
234
|
function onResize(v, rect) {
|
|
235
|
+
const aspectChanged = rect.width / rect.height !== v.size.width / v.size.height;
|
|
234
236
|
Object.assign(v.size, { width: rect.width, height: rect.height });
|
|
235
237
|
v.renderer.setSize(rect.width, rect.height, false);
|
|
236
238
|
v.overlays.renderer.setSize(rect.width, rect.height);
|
|
237
239
|
v.gizmo?.update();
|
|
238
|
-
|
|
240
|
+
if (aspectChanged) {
|
|
241
|
+
fitPose(v);
|
|
242
|
+
}
|
|
239
243
|
invalidate(v);
|
|
240
244
|
}
|
|
241
|
-
/** Fits the projection to the scene, and moves the camera to look
|
|
245
|
+
/** Fits the projection to the scene, and moves the camera to look from the view; as the r3f renderer, the target stays where it was panned to */
|
|
242
246
|
function fitPose(v) {
|
|
243
247
|
const placement = fitScene(v);
|
|
244
248
|
if (placement) {
|
|
245
249
|
const { x, y, z } = placement.direction;
|
|
246
|
-
setPose(v.controls, new Vector3(x, y, z).multiplyScalar(placement.distance),
|
|
250
|
+
setPose(v.controls, new Vector3(x, y, z).multiplyScalar(placement.distance), v.controls.orbit.target);
|
|
247
251
|
v.fitted = true;
|
|
248
252
|
}
|
|
249
253
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../../../src/renderers/three/viewer/viewer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../../../src/renderers/three/viewer/viewer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAEZ,aAAa,EACb,gBAAgB,EAChB,gCAAgC,EAChC,KAAK,EACL,kBAAkB,EAElB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,KAAK,IAAI,UAAU,EACnB,cAAc,EAEd,OAAO,EACP,OAAO,EACP,aAAa,GACd,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAG/E,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/H,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AA+ChE,0FAA0F;AAC1F,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB,MAAM,UAAU,YAAY,CAAU,SAAsB,EAAE,OAA+B;IAC3F,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACtD,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IACxC,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,uFAAuF;IACvF,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,kFAAkF,CAAC;IAC1G,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1B,kGAAkG;IAClG,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7E,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC7D,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACpC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IAChC,MAAM,OAAO,GAAG,EAAE,WAAW,EAAE,IAAI,iBAAiB,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,kBAAkB,EAAE,EAAE,CAAC;IACnG,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,IAAI,aAAa,CAAC,CAAC;IAC9D,MAAM,CAAC,GAAoB;QACzB,OAAO;QACP,SAAS;QACT,MAAM;QACN,QAAQ;QACR,KAAK,EAAE,IAAI,UAAU,EAAE;QACvB,MAAM,EAAE,IAAI,KAAK,EAAE;QACnB,OAAO;QACP,MAAM;QACN,QAAQ,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACrF,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,KAAK,EAAE,gBAAgB,EAAE;QACzB,QAAQ,EAAE,IAAI,GAAG,EAAE;QACnB,QAAQ,EAAE,kBAAkB,CAAC,SAAS,CAAC;QACvC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;QAC7B,SAAS,EAAE,IAAI,eAAe,EAAE;QAChC,cAAc,EAAE,IAAI,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QACxF,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QACrB,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE;QACzD,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QAC/G,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;QACrE,SAAS,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE;QACjH,YAAY,EAAE,EAAE;QAChB,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,KAAK;KAChB,CAAC;IACF,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACtB,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;IAC9C,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC3E,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACpF,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IACzG,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/D,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,8HAA8H;AAC9H,MAAM,UAAU,YAAY,CAAU,CAAkB,EAAE,OAAwC;IAChG,CAAC,CAAC,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IACzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAmC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/H,UAAU,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,UAAU,CAAU,CAAkB;IACpD,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1E,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAU,CAAkB;IACvD,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;IAClB,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;IAC9B,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;IACnB,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACZ,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QACb,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1B,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC5B,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;IACxC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AACpB,CAAC;AAED,wDAAwD;AACxD,SAAS,KAAK,CAAU,CAAkB,EAAE,OAA4B;IACtE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACtB,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QACjF,CAAC,CAAC,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAChC,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,CAAC,CAAC,SAAS,GAAG,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACrH,OAAO,CAAC,CAAC,CAAC,CAAC;IACb,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACb,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QACD,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtH,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;QACtF,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACxG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,iBAAiB,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,2FAA2F;IAC3F,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjE,OAAO,CAAC,CAAC,CAAC,CAAC;IACb,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClD,WAAW,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,YAAY,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC;QAC1C,CAAC,CAAC,QAAQ,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACxF,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAChC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE;YAClB,GAAG,CAAC,CAAC,SAAS;YACd,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,UAAU,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;YACvC,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM;YACxC,mBAAmB,EAAE,OAAO,CAAC,YAAY,KAAK,SAAS;SACxD,CAAC,CAAC;QACH,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;IAC9C,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACzC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC;IAC9D,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,cAAc,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAU,CAAkB;IAC1C,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACZ,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC,CAAC,KAAK;QACL,QAAQ;YACR,UAAU,CAAC,QAAQ,EAAE;gBACnB,GAAG,OAAO;gBACV,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,eAAe,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;aACrC,CAAC,CAAC;IACL,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACZ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC;QAC5D,gFAAgF;QAChF,CAAC,CAAC,QAAQ;aACP,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;aAC/B,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aACvB,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAU,CAAkB;IAC3C,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChB,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACrB,UAAU,CAAC,CAAC,CAAC,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAU,CAAkB,EAAE,GAAW;IAC3D,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACf,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAChB,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACtB,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC;IAC7F,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;QAChF,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;IACxB,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3D,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/C,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,CAAC,iBAAiB,EAAE,CAAC;IAC3B,IAAI,KAAK,EAAE,CAAC;QACV,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QACb,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IACD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAClI,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;QACvB,UAAU,CAAC,CAAC,CAAC,CAAC;IAChB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IAChB,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,SAAS,QAAQ,CAAU,CAAkB,EAAE,IAAqB;IAClE,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAChF,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,CAAC,CAAC,CAAC;IACb,CAAC;IACD,UAAU,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC;AAED,iJAAiJ;AACjJ,SAAS,OAAO,CAAU,CAAkB;IAC1C,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC;QACxC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACtG,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAU,CAAkB;IAC3C,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,OAAO,EAAE,WAAW,GAAG,EAAE,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC;IAC9E,OAAO,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;AACtH,CAAC;AAED,SAAS,WAAW,CAAU,CAAkB;IAC9C,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;IACnB,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC;IAC5B,CAAC,CAAC,KAAK,GAAG,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1G,CAAC,CAAC,KAAK,EAAE,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,KAAK,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAU,CAAkB;IAC/C,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC;IAC5B,MAAM,KAAK,GAAG,KAAK,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,EAAE,aAAa,EAAE,sBAAsB,CAAC;IACtI,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,IAAI,SAAS,EAAE,CAAC;QACd,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAM,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAU,CAAkB,EAAE,KAAmB;IACrE,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC;IACvB,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,qBAAqB,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,kIAAkI;AAClI,SAAS,cAAc,CAAU,CAAkB;IACjD,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;IACpB,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7C,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAU,CAAkB,EAAE,KAAiB;IAC7D,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC;IAC3B,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC;IACvG,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjD,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,QAAS,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzC,IAAI,GAAG,IAAI,MAAM,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QACvC,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IACzF,CAAC;SAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9E,CAAC;SAAM,IAAI,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAU,CAAkB,EAAE,KAAiB;IACnE,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IACtG,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAU,CAAkB,EAAE,GAAoB,EAAE,KAAmB;IACxF,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACnC,CAAC,CAAC,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC;IACxB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,IAAI,GAAG,EAAE,MAAM,KAAK,QAAQ,EAAE,MAAM,EAAE,CAAC;QACrC,OAAO;IACT,CAAC;IACD,IAAI,QAAQ,IAAI,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC1C,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3G,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACvC,UAAU,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC;AAED,sIAAsI;AACtI,SAAS,IAAI,CAAU,CAAkB,EAAE,KAAiB;IAC1D,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACpB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;IAC9C,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACpJ,MAAM,IAAI,GAAG,SAAS,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,MAAM,CAAC;QACnF,MAAM,IAAI,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAE,CAAC;QAChF,MAAM,WAAW,GACf,IAAI,EAAE,IAAI,KAAK,OAAO;YACpB,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAO,CAAE,CAAC,QAAQ;YAC1D,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,WAAW;gBAC1B,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS;gBAC1G,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;QAC3B,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,EAAE,IAAI,EAAE,IAAK,EAAE,MAAM,EAAE,MAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QACpE,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,iGAAiG;AACjG,SAAS,YAAY,CACnB,CAAkB,EAClB,GAAQ;IAER,MAAM,MAAM,GAAG,CAAC,CAAC,QAAS,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;IAChD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,OAAO;YACV,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,CAAC;QACzE,KAAK,WAAW;YACd,OAAO,CAAC,MAAM,CAAC,EAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC5C;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAU,CAAkB;IAC/C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,GAAG,QAAQ,EAAE,oBAAoB,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC;IACtF,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,MAAM,OAAO,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,YAAY,EAAE,CAAC,CAAC;IACzG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,iBAAiB,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,oBAAoB,EAAE,CAAC,CAAC;AAC7I,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY;IACnB,MAAM,WAAW,GAAG;QAClB,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACf,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC;QACjB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;KACR,CAAC;IACX,OAAO;QACL,IAAI,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC;QAC/B,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;YAClC,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAChD,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;KACH,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,IAAuB,EAAE,QAAuB;IACzE,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,eAAe,EAAE,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC;QACrE,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7F,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACpC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACvC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACvC,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACpC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACtE,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;IAC1B;QACE,CAAC,EAAE,EAAE,GAAG,CAAC;QACT,CAAC,GAAG,EAAE,EAAE,CAAC;QACT,CAAC,GAAG,EAAE,GAAG,CAAC;KACX,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAE,EAAE,GAAG,EAAE,KAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7D,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,gCAAgC,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC;AAC7H,CAAC;AAED,SAAS,cAAc,CAAU,CAAkB;IACjD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChF,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,OAAO,CAAC,QAAQ,EAAE,OAAO,CACvB,CAAC,CAAC,EAAE,EAAE,CACJ,QAAQ;QACR,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAChJ,CAAC;IACF,IAAI,MAAM,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QAC7B,OAAO,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7C,QAAQ,CAAC,IAAI,CAAC;YACZ,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,EAAE;YACtB,QAAQ,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAE,CAAC;YAC5F,OAAO,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC,CACH,CAAC;IACJ,CAAC;IACD,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;AAClC,MAAM,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -8,21 +8,23 @@ import { render } from "./ifc.js";
|
|
|
8
8
|
const red = { normal: "rgb(255, 0, 0)", opacity: 0.5 };
|
|
9
9
|
const scene = (groups: Scene["groups"], relations?: Scene["relations"]): Scene => ({ size_deprecated: vec3Zero, groups, relations });
|
|
10
10
|
const count = (ifc: string, entity: string): number => ifc.split(`=${entity}(`).length - 1;
|
|
11
|
-
const ids = (s: string): ReadonlyArray<string> => Array.from(s.matchAll(/#(\d+)/g), (match) => match
|
|
11
|
+
const ids = (s: string): ReadonlyArray<string> => Array.from(s.matchAll(/#(\d+)/g), (match) => match.at(1) ?? "");
|
|
12
12
|
/** Random GlobalIds replaced, to compare files */
|
|
13
13
|
const normalize = (ifc: string): string => ifc.replaceAll(/'[0-9A-Za-z_$]{22}'/g, "'guid'");
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
/** By id; looked up by ids destructured from a list, so by possibly undefined ones */
|
|
16
|
+
const entities = (ifc: string): ReadonlyMap<string | undefined, string> =>
|
|
17
|
+
new Map(Array.from(ifc.matchAll(/^#(\d+)=(.*);$/gm), (match) => [match.at(1), match.at(2) ?? ""]));
|
|
16
18
|
|
|
17
19
|
/** The #id of the element or port named `name` */
|
|
18
|
-
const named = (ifc: string, name: string): string => new RegExp(`^#(\\d+)=IFC\\w+\\('[^']{22}',#\\d+,'${name}',`, "m").exec(ifc)
|
|
20
|
+
const named = (ifc: string, name: string): string => new RegExp(`^#(\\d+)=IFC\\w+\\('[^']{22}',#\\d+,'${name}',`, "m").exec(ifc)?.at(1) ?? "";
|
|
19
21
|
|
|
20
22
|
/** The layer of every face set and polyline of the element named `name`, in order */
|
|
21
23
|
function elementLayers(ifc: string, name: string): ReadonlyArray<string | undefined> {
|
|
22
24
|
const byId = entities(ifc);
|
|
23
25
|
const layers = new Map(
|
|
24
|
-
Array.from(ifc.matchAll(/[=]IFCPRESENTATIONLAYERASSIGNMENT\('([^']*)',\$,\(([^)]*)\),\$\);/g)).flatMap((
|
|
25
|
-
ids(
|
|
26
|
+
Array.from(ifc.matchAll(/[=]IFCPRESENTATIONLAYERASSIGNMENT\('([^']*)',\$,\(([^)]*)\),\$\);/g)).flatMap((match) =>
|
|
27
|
+
ids(match.at(2) ?? "").map((item) => [item, match.at(1)] as const)
|
|
26
28
|
)
|
|
27
29
|
);
|
|
28
30
|
// The element's owner history, placement and shape, the shape's representations and their context and items
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Color, Vector4 } from "three";
|
|
2
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { assert, describe, expect, it } from "vitest";
|
|
3
3
|
import type { Material, Mesh } from "../../../abstract-3d.js";
|
|
4
4
|
import { box, line, text, vec3, vec3Zero } from "../../../abstract-3d.js";
|
|
5
5
|
import { shade } from "../../../utils.js";
|
|
@@ -24,11 +24,16 @@ const relation: Target = { kind: "relation", relation: { id: "r", pos: vec3Zero
|
|
|
24
24
|
const idle: PaintState = { relationsActive: false, dimensionsClickable: true };
|
|
25
25
|
const round = (v: number): number => Math.round(v * 1e4) / 1e4;
|
|
26
26
|
const rgba = (color: string, alpha = 1): ReadonlyArray<number> => [...new Color(color).toArray(), alpha].map(round);
|
|
27
|
-
const classify = (i: Item, target: Target, state: Partial<PaintState> = {}): MaterialClass =>
|
|
28
|
-
|
|
27
|
+
const classify = (i: Item, target: Target, state: Partial<PaintState> = {}): MaterialClass => {
|
|
28
|
+
const [targetState] = getTargetStates([target], { ...idle, ...state });
|
|
29
|
+
assert(targetState);
|
|
30
|
+
return getMaterialClass(i, targetState);
|
|
31
|
+
};
|
|
29
32
|
const paint = (i: Item, target: Target, partial: Partial<PaintState> = {}): ReadonlyArray<number> => {
|
|
30
33
|
const state = { ...idle, ...partial };
|
|
31
|
-
|
|
34
|
+
const [targetState] = getTargetStates([target], state);
|
|
35
|
+
assert(targetState);
|
|
36
|
+
return getItemColor(i, targetState, getHighlight(target, 0, state), new Vector4())
|
|
32
37
|
.toArray()
|
|
33
38
|
.map(round);
|
|
34
39
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BatchedMesh, InstancedMesh, Matrix4, PerspectiveCamera, Raycaster, Vector2, Vector3, Vector4 } from "three";
|
|
2
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { assert, describe, expect, it } from "vitest";
|
|
3
3
|
import type { Group, Scene } from "../../../abstract-3d.js";
|
|
4
4
|
import { alignedDimension, box, culledLine, group, sphere, text, vec3, vec3Zero } from "../../../abstract-3d.js";
|
|
5
5
|
import type { PaintState, StructureState } from "../appearance/appearance.js";
|
|
@@ -28,11 +28,18 @@ const rasterize = (): GlyphBitmap => {
|
|
|
28
28
|
const idle: StructureState = { relationsActive: false };
|
|
29
29
|
const scene = (groups: ReadonlyArray<Group>, rest: Partial<Scene> = {}): Scene => ({ size_deprecated: vec3(1, 1, 1), groups, ...rest });
|
|
30
30
|
const part = (id: string, x: number, material = red): Group => group([box(vec3(10, 10, 10), material)], vec3(x, 0, 0), vec3Zero, [], { id });
|
|
31
|
+
// Destructured, as the build's and lint's compiler options disagree on reading an index signature by dot or bracket
|
|
32
|
+
const groupId = (g: Group): string => {
|
|
33
|
+
const { id = "" }: Record<string, string | undefined> = g.data ?? {};
|
|
34
|
+
return id;
|
|
35
|
+
};
|
|
31
36
|
const build = (s: Scene, structure = idle, activeRelations?: ReadonlyArray<string>): BuiltScene =>
|
|
32
|
-
buildScene(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
);
|
|
37
|
+
buildScene(compileScene(s, groupId), { structure, activeRelations, geometries: new Map(), atlas: createGlyphAtlas(rasterize, 256) });
|
|
38
|
+
const firstBatch = (built: BuiltScene): BatchedMesh => {
|
|
39
|
+
const [batch] = batches(built);
|
|
40
|
+
assert(batch);
|
|
41
|
+
return batch;
|
|
42
|
+
};
|
|
36
43
|
const relation = (id: string): NonNullable<Scene["relations"]>[number] => ({ id, pos: vec3Zero, groups: [group([box(vec3(1, 1, 1), red)])] });
|
|
37
44
|
const batches = (built: BuiltScene): ReadonlyArray<BatchedMesh> => built.root.children.filter((o): o is BatchedMesh => o instanceof BatchedMesh);
|
|
38
45
|
|
|
@@ -45,9 +52,10 @@ function pickId(built: BuiltScene, x: number): string | undefined {
|
|
|
45
52
|
const raycaster = new Raycaster();
|
|
46
53
|
raycaster.setFromCamera(new Vector2(0, 0), camera);
|
|
47
54
|
const hits = raycaster.intersectObjects(getPickables(built), false);
|
|
48
|
-
const
|
|
55
|
+
const hit = hits.at(0);
|
|
56
|
+
const item = hit && getPickedItem(built, hit);
|
|
49
57
|
const { compiled }: { readonly compiled: CompiledScene } = built;
|
|
50
|
-
const target = item === undefined ? undefined : compiled.targets[compiled.items
|
|
58
|
+
const target = item === undefined ? undefined : compiled.targets[compiled.items.at(item)?.target ?? -1];
|
|
51
59
|
return target?.kind === "group" || target?.kind === "dimension" ? target.id : undefined;
|
|
52
60
|
}
|
|
53
61
|
|
|
@@ -71,7 +79,7 @@ describe("buildScene", () => {
|
|
|
71
79
|
|
|
72
80
|
it("repaints the hovered and selected targets", () => {
|
|
73
81
|
const built = build(scene([part("a", 0), part("b", 20)]));
|
|
74
|
-
const
|
|
82
|
+
const batch = firstBatch(built);
|
|
75
83
|
const color = (instance: number): ReadonlyArray<number> =>
|
|
76
84
|
batch
|
|
77
85
|
.getColorAt(instance, new Vector4())
|
|
@@ -117,7 +125,7 @@ describe("buildScene", () => {
|
|
|
117
125
|
const built = build(scene([group([box(vec3(1, 1, 1), red)], vec3(5, 0, 0), vec3Zero, [], {}, spin)]));
|
|
118
126
|
expect(built.animatedItems).toHaveLength(1);
|
|
119
127
|
animateScene(built, 0.5);
|
|
120
|
-
const position = new Vector3(1, 0, 0).applyMatrix4(
|
|
128
|
+
const position = new Vector3(1, 0, 0).applyMatrix4(firstBatch(built).getMatrixAt(0, new Matrix4()));
|
|
121
129
|
expect(position.toArray().map((v) => Math.round(v * 1000) / 1000 + 0)).toEqual([5, 1, 0]);
|
|
122
130
|
});
|
|
123
131
|
|
|
@@ -134,7 +142,7 @@ describe("buildScene", () => {
|
|
|
134
142
|
it("disposes its batches and materials", () => {
|
|
135
143
|
const built = build(scene([part("a", 0)]));
|
|
136
144
|
const disposed: Array<string> = [];
|
|
137
|
-
|
|
145
|
+
firstBatch(built).material.addEventListener("dispose", () => disposed.push("material"));
|
|
138
146
|
disposeScene(built);
|
|
139
147
|
expect(disposed).toEqual(["material"]);
|
|
140
148
|
});
|
|
@@ -1,43 +1,56 @@
|
|
|
1
1
|
import { Matrix4, Vector3 } from "three";
|
|
2
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { assert, describe, expect, it } from "vitest";
|
|
3
3
|
import type { Group, Scene } from "../../../abstract-3d.js";
|
|
4
4
|
import { alignedDimension, box, group, line, sphere, text, vec3, vec3Zero } from "../../../abstract-3d.js";
|
|
5
|
+
import type { CompiledScene, Item } from "./compile.js";
|
|
5
6
|
import { compileScene, getItemMatrix } from "./compile.js";
|
|
6
7
|
|
|
7
8
|
const red = { normal: "rgb(255, 0, 0)" };
|
|
8
9
|
const scene = (groups: ReadonlyArray<Group>, rest: Partial<Scene> = {}): Scene => ({ size_deprecated: vec3(1, 1, 1), groups, ...rest });
|
|
9
|
-
const apply = (m: Matrix4, x: number, y: number, z: number): ReadonlyArray<number> =>
|
|
10
|
-
|
|
10
|
+
const apply = (m: Matrix4 | undefined, x: number, y: number, z: number): ReadonlyArray<number> => {
|
|
11
|
+
assert(m);
|
|
12
|
+
return new Vector3(x, y, z)
|
|
11
13
|
.applyMatrix4(m)
|
|
12
14
|
.toArray()
|
|
13
15
|
.map((v) => Math.round(v * 1000) / 1000 + 0);
|
|
16
|
+
};
|
|
17
|
+
const getItem = (compiled: CompiledScene, index: number): Item => {
|
|
18
|
+
const item = compiled.items.at(index);
|
|
19
|
+
assert(item);
|
|
20
|
+
return item;
|
|
21
|
+
};
|
|
22
|
+
// Destructured, as the build's and lint's compiler options disagree on reading an index signature by dot or bracket
|
|
23
|
+
const groupId = (g: Group): string => {
|
|
24
|
+
const { id = "" }: Record<string, string | undefined> = g.data ?? {};
|
|
25
|
+
return id;
|
|
26
|
+
};
|
|
14
27
|
|
|
15
28
|
describe("compileScene", () => {
|
|
16
29
|
it("flattens nested groups into items with world matrices", () => {
|
|
17
30
|
const inner = group([sphere(1, red)], vec3(0, 10, 0));
|
|
18
31
|
const compiled = compileScene(scene([group([box(vec3(1, 1, 1), red)], vec3(100, 0, 0), vec3Zero, [inner])]));
|
|
19
32
|
expect(compiled.items.map((i) => i.role)).toEqual(["solid", "solid"]);
|
|
20
|
-
expect(apply(compiled.items
|
|
21
|
-
expect(apply(compiled.items
|
|
33
|
+
expect(apply(compiled.items.at(0)?.matrix, 0, 0, 0)).toEqual([100, 0, 0]);
|
|
34
|
+
expect(apply(compiled.items.at(1)?.matrix, 0, 0, 0)).toEqual([100, 10, 0]);
|
|
22
35
|
});
|
|
23
36
|
|
|
24
37
|
it("applies group rotation before the group's position", () => {
|
|
25
38
|
const compiled = compileScene(scene([group([box(vec3(1, 1, 1), red)], vec3(5, 0, 0), vec3(0, 0, Math.PI / 2))]));
|
|
26
|
-
expect(apply(compiled.items
|
|
39
|
+
expect(apply(compiled.items.at(0)?.matrix, 1, 0, 0)).toEqual([5, 1, 0]);
|
|
27
40
|
});
|
|
28
41
|
|
|
29
42
|
it("rotates the scene by its deprecated rotation, then moves it by minus its deprecated center", () => {
|
|
30
43
|
const g = group([box(vec3(1, 1, 1), red)], vec3(10, 0, 0));
|
|
31
44
|
const centered = compileScene(scene([g], { center_deprecated: vec3(10, 0, 0) }));
|
|
32
|
-
expect(apply(centered.items
|
|
45
|
+
expect(apply(centered.items.at(0)?.matrix, 0, 0, 0)).toEqual([0, 0, 0]);
|
|
33
46
|
const rotated = compileScene(scene([g], { center_deprecated: vec3(-10, 0, 0), rotation_deprecated: vec3(0, Math.PI, 0) }));
|
|
34
|
-
expect(apply(rotated.items
|
|
47
|
+
expect(apply(rotated.items.at(0)?.matrix, 1, 0, 0)).toEqual([-1, 0, 0]);
|
|
35
48
|
});
|
|
36
49
|
|
|
37
50
|
it("gives every item of a top-level group that group's target, and the data of the group it's in", () => {
|
|
38
51
|
const inner = group([sphere(1, red)], vec3Zero, vec3Zero, [], { part: "motor" });
|
|
39
52
|
const fan = group([box(vec3(1, 1, 1), red)], vec3Zero, vec3Zero, [inner], { id: "fan" });
|
|
40
|
-
const compiled = compileScene(scene([fan, group([box(vec3(1, 1, 1), red)], vec3Zero, vec3Zero, [], { id: "coil" })]),
|
|
53
|
+
const compiled = compileScene(scene([fan, group([box(vec3(1, 1, 1), red)], vec3Zero, vec3Zero, [], { id: "coil" })]), groupId);
|
|
41
54
|
expect(compiled.targets).toEqual([
|
|
42
55
|
{ kind: "group", id: "fan", root: 0, rootData: { id: "fan" } },
|
|
43
56
|
{ kind: "group", id: "coil", root: 1, rootData: { id: "coil" } },
|
|
@@ -70,9 +83,9 @@ describe("compileScene", () => {
|
|
|
70
83
|
);
|
|
71
84
|
const compiled = compileScene(scene([group([], vec3(10, 0, 0), vec3Zero, [fan])]));
|
|
72
85
|
expect(compiled.animations).toHaveLength(1);
|
|
73
|
-
expect(compiled.animations
|
|
74
|
-
expect(compiled.items
|
|
75
|
-
const world = (seconds: number): ReadonlyArray<number> => apply(getItemMatrix(compiled, compiled
|
|
86
|
+
expect(compiled.animations.at(0)?.speed).toEqual(vec3(0, 0, Math.PI));
|
|
87
|
+
expect(compiled.items.at(0)?.animation).toBe(0);
|
|
88
|
+
const world = (seconds: number): ReadonlyArray<number> => apply(getItemMatrix(compiled, getItem(compiled, 0), seconds, new Matrix4()), 1, 0, 0);
|
|
76
89
|
expect(world(0)).toEqual([11, 5, 0]);
|
|
77
90
|
expect(world(0.5)).toEqual([10, 6, 0]);
|
|
78
91
|
});
|
|
@@ -82,8 +95,8 @@ describe("compileScene", () => {
|
|
|
82
95
|
const inner = group([box(vec3(1, 1, 1), red)], vec3(1, 0, 0), vec3Zero, [], {}, spin);
|
|
83
96
|
const compiled = compileScene(scene([group([], vec3Zero, vec3Zero, [inner], {}, spin)]));
|
|
84
97
|
expect(compiled.animations.map((a) => a.parent)).toEqual([undefined, 0]);
|
|
85
|
-
expect(apply(getItemMatrix(compiled, compiled
|
|
86
|
-
expect(apply(getItemMatrix(compiled, compiled
|
|
98
|
+
expect(apply(getItemMatrix(compiled, getItem(compiled, 0), 0.5, new Matrix4()), 0, 0, 0)).toEqual([0, 1, 0]);
|
|
99
|
+
expect(apply(getItemMatrix(compiled, getItem(compiled, 0), 0.5, new Matrix4()), 1, 0, 0)).toEqual([-1, 1, 0]);
|
|
87
100
|
});
|
|
88
101
|
|
|
89
102
|
it("converts aligned dimensions to dimension items with a target per dimension", () => {
|
|
@@ -92,22 +105,22 @@ describe("compileScene", () => {
|
|
|
92
105
|
const items = compiled.items.filter((i) => i.style === "dimension");
|
|
93
106
|
expect(items.length).toBeGreaterThan(0);
|
|
94
107
|
expect(new Set(items.map((i) => i.role))).toEqual(new Set(["line", "text", "solid"]));
|
|
95
|
-
expect(compiled.targets[items
|
|
108
|
+
expect(compiled.targets[items.at(0)?.target ?? -1]).toEqual({ kind: "dimension", id: "fan" });
|
|
96
109
|
});
|
|
97
110
|
|
|
98
111
|
it("adds relation shapes, with an outline around their boxes", () => {
|
|
99
112
|
const relation = { id: "r1", pos: vec3Zero, groups: [group([box(vec3(10, 10, 10), red), sphere(1, red)], vec3(5, 0, 0))] };
|
|
100
113
|
const compiled = compileScene(scene([], { relations: [relation] }));
|
|
101
114
|
expect(compiled.items.map((i) => i.style)).toEqual(["relation", "outline", "relation"]);
|
|
102
|
-
expect(compiled.targets[compiled
|
|
103
|
-
const outline = compiled
|
|
115
|
+
expect(compiled.targets[getItem(compiled, 0).target]).toEqual({ kind: "relation", relation });
|
|
116
|
+
const outline = getItem(compiled, 1).mesh.geometry;
|
|
104
117
|
expect(outline.type === "Box" && outline.size).toEqual(vec3(10.125, 10.125, 10.125));
|
|
105
|
-
expect(apply(compiled.items
|
|
118
|
+
expect(apply(compiled.items.at(0)?.matrix, 0, 0, 0)).toEqual([5, 0, 0]);
|
|
106
119
|
});
|
|
107
120
|
|
|
108
121
|
it("keeps the world matrix of each top-level group for its tooltips", () => {
|
|
109
122
|
const compiled = compileScene(scene([group([], vec3(3, 0, 0))], { center_deprecated: vec3(1, 0, 0) }));
|
|
110
|
-
expect(apply(compiled.roots
|
|
123
|
+
expect(apply(compiled.roots.at(0), 0, 0, 0)).toEqual([2, 0, 0]);
|
|
111
124
|
expect(apply(compiled.matrix, 0, 0, 0)).toEqual([-1, 0, 0]);
|
|
112
125
|
});
|
|
113
126
|
});
|
|
@@ -30,8 +30,8 @@ describe("recordFrame", () => {
|
|
|
30
30
|
});
|
|
31
31
|
|
|
32
32
|
describe("getPixelRatio", () => {
|
|
33
|
-
it("caps the screen's pixel ratio by the tier", () => {
|
|
34
|
-
expect([getPixelRatio("low", 3), getPixelRatio("medium", 3), getPixelRatio("high", 3)]).toEqual([1, 1.5,
|
|
33
|
+
it("caps the screen's pixel ratio by the tier, and high is the screen's own, as the r3f renderer's", () => {
|
|
34
|
+
expect([getPixelRatio("low", 3), getPixelRatio("medium", 3), getPixelRatio("high", 3)]).toEqual([1, 1.5, 3]);
|
|
35
35
|
expect(getPixelRatio("high", 1)).toBe(1);
|
|
36
36
|
});
|
|
37
37
|
});
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Quality tiers by resolution, the cheapest lever on a weak GPU: low renders a pixel per CSS pixel, medium up to 1.5 and high
|
|
3
|
-
*
|
|
2
|
+
* Quality tiers by resolution, the cheapest lever on a weak GPU: low renders a pixel per CSS pixel, medium up to 1.5, and high, the default, the
|
|
3
|
+
* screen's own pixel ratio as the r3f renderer. `auto` starts high and drops to low for good once moving frames are slow, as model viewers lower
|
|
4
|
+
* their resolution under load
|
|
4
5
|
*/
|
|
5
6
|
|
|
6
7
|
export type Tier = "low" | "medium" | "high";
|
|
@@ -9,7 +10,7 @@ export type Quality = Tier | "auto";
|
|
|
9
10
|
/** `auto` starts at high, and drops to low for good once moving frames average slower than 40 per second */
|
|
10
11
|
export type TierGovernor = { readonly quality: Quality; tier: Tier; sum: number; count: number };
|
|
11
12
|
|
|
12
|
-
const pixelRatioCaps: Record<Tier, number> = { low: 1, medium: 1.5, high:
|
|
13
|
+
const pixelRatioCaps: Record<Tier, number> = { low: 1, medium: 1.5, high: Infinity };
|
|
13
14
|
const windowSize = 30;
|
|
14
15
|
const slowFrameMs = 25;
|
|
15
16
|
/** Longer intervals are pauses between moves, not slow frames */
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Box3,
|
|
3
3
|
type Scene,
|
|
4
|
-
Matrix4,
|
|
5
4
|
Mesh,
|
|
6
5
|
MeshBasicMaterial,
|
|
7
6
|
MeshDepthMaterial,
|
|
@@ -30,8 +29,6 @@ export type GroundShadow = { readonly mesh: Mesh<PlaneGeometry, MeshBasicMateria
|
|
|
30
29
|
const shadowLayer = 1;
|
|
31
30
|
/** Of the texture's longer side */
|
|
32
31
|
const resolution = 512;
|
|
33
|
-
/** How far behind (-z) a part's shadow falls per unit of its height, as from a light in front and above */
|
|
34
|
-
const lean = 0.5;
|
|
35
32
|
/** The blur's reach, of the solids' height */
|
|
36
33
|
const softness = 0.15;
|
|
37
34
|
const opacity = 0.8;
|
|
@@ -49,22 +46,20 @@ export function createGroundShadow(renderer: WebGLRenderer, scene: Scene, built:
|
|
|
49
46
|
return undefined;
|
|
50
47
|
}
|
|
51
48
|
const size = bounds.getSize(new Vector3());
|
|
52
|
-
// The plane reaches past the solids by twice the blur's reach
|
|
53
|
-
const
|
|
54
|
-
const [width, depth] = [size.x + reach * 4, size.z + reach * 4
|
|
55
|
-
const center = new Vector3((bounds.min.x + bounds.max.x) / 2, bounds.min.y, (bounds.min.z + bounds.max.z
|
|
49
|
+
// The plane reaches past the solids by twice the blur's reach on every side
|
|
50
|
+
const reach = softness * size.y;
|
|
51
|
+
const [width, depth] = [size.x + reach * 4, size.z + reach * 4];
|
|
52
|
+
const center = new Vector3((bounds.min.x + bounds.max.x) / 2, bounds.min.y, (bounds.min.z + bounds.max.z) / 2);
|
|
56
53
|
const [texelsX, texelsZ] =
|
|
57
54
|
width > depth ? [resolution, Math.ceil((resolution * depth) / width)] : [Math.ceil((resolution * width) / depth), resolution];
|
|
58
55
|
const [target, blurred] = [new WebGLRenderTarget(texelsX, texelsZ), new WebGLRenderTarget(texelsX, texelsZ)];
|
|
59
56
|
|
|
60
|
-
// Looks up from the ground, seeing as far as the solids are high
|
|
61
|
-
// a height h is -h in its view space
|
|
57
|
+
// Looks up from the ground, seeing as far as the solids are high
|
|
62
58
|
const camera = new OrthographicCamera(-width / 2, width / 2, depth / 2, -depth / 2, 0, size.y);
|
|
63
59
|
camera.position.copy(center);
|
|
64
60
|
camera.rotation.x = Math.PI / 2;
|
|
65
61
|
camera.layers.set(shadowLayer);
|
|
66
62
|
camera.updateMatrixWorld();
|
|
67
|
-
camera.projectionMatrix.multiply(new Matrix4().set(1, 0, 0, 0, 0, 1, lean, 0, 0, 0, 1, 0, 0, 0, 0, 1));
|
|
68
63
|
// Depth tested, so at each point the surface closest to the ground darkens it, not the last one drawn
|
|
69
64
|
const darkness = new MeshDepthMaterial();
|
|
70
65
|
darkness.onBeforeCompile = (shader) => {
|
|
@@ -34,7 +34,7 @@ export type ViewerOptions<Content> = {
|
|
|
34
34
|
*/
|
|
35
35
|
readonly activeRelations?: ReadonlyArray<string>;
|
|
36
36
|
readonly showDimensions?: boolean;
|
|
37
|
-
/** View, buffer zones and padding are read when the scene is fitted: first, and for a new camera or canvas
|
|
37
|
+
/** View, buffer zones and padding are read when the scene is fitted: first, and for a new camera or canvas aspect */
|
|
38
38
|
readonly camera?: CameraOptions;
|
|
39
39
|
readonly view?: View;
|
|
40
40
|
readonly bufferZones?: BufferZones;
|
|
@@ -48,7 +48,7 @@ export type ViewerOptions<Content> = {
|
|
|
48
48
|
readonly environmentIntensity?: number;
|
|
49
49
|
/** A soft shadow on the ground under the scene, rendered once per build; on by default */
|
|
50
50
|
readonly groundShadow?: boolean;
|
|
51
|
-
/** The resolution: `low` 1
|
|
51
|
+
/** The resolution: `low` 1 and `medium` up to 1.5 pixels per CSS pixel, `high`, the default, the screen's; `auto` high until moving gets slow */
|
|
52
52
|
readonly quality?: Quality;
|
|
53
53
|
readonly useAlphaTest?: boolean;
|
|
54
54
|
readonly materialStateImages?: Record<string, string>;
|
|
@@ -202,13 +202,13 @@ function apply<Content>(v: Viewer<Content>, changes: ReadonlySet<Change>): void
|
|
|
202
202
|
if (changes.has("camera")) {
|
|
203
203
|
const { near = 0.1, far = 2000, ...rest } = options.camera ?? { type: "Perspective" };
|
|
204
204
|
v.camera = v.cameras[rest.type];
|
|
205
|
-
Object.assign(v.camera, { near, far, ...(
|
|
205
|
+
Object.assign(v.camera, { near, far, ...(rest.type === "Perspective" ? { fov: rest.fov ?? 45 } : {}) });
|
|
206
206
|
v.controls.orbit.object = v.camera;
|
|
207
207
|
}
|
|
208
208
|
if (changes.has("controls")) {
|
|
209
209
|
configureControls(v.controls, options.controls ?? {});
|
|
210
210
|
}
|
|
211
|
-
// As the r3f renderer, the scene is fitted at first, and for a new camera or canvas
|
|
211
|
+
// As the r3f renderer, the scene is fitted at first, and for a new camera or canvas aspect
|
|
212
212
|
if ((changes.has("build") && !v.fitted) || changes.has("camera")) {
|
|
213
213
|
fitPose(v);
|
|
214
214
|
}
|
|
@@ -219,7 +219,7 @@ function apply<Content>(v: Viewer<Content>, changes: ReadonlySet<Change>): void
|
|
|
219
219
|
updateLights(v);
|
|
220
220
|
}
|
|
221
221
|
if (changes.has("quality")) {
|
|
222
|
-
const quality = options.quality ?? "
|
|
222
|
+
const quality = options.quality ?? "high";
|
|
223
223
|
v.governor = { quality, tier: quality === "auto" ? "high" : quality, sum: 0, count: 0 };
|
|
224
224
|
v.renderer.setPixelRatio(getPixelRatio(v.governor.tier, window.devicePixelRatio));
|
|
225
225
|
}
|
|
@@ -315,21 +315,25 @@ function renderFrame<Content>(v: Viewer<Content>, now: number): void {
|
|
|
315
315
|
}
|
|
316
316
|
}
|
|
317
317
|
|
|
318
|
+
/** As the r3f renderer, a resize refits only when the canvas' aspect changes */
|
|
318
319
|
function onResize<Content>(v: Viewer<Content>, rect: DOMRectReadOnly): void {
|
|
320
|
+
const aspectChanged = rect.width / rect.height !== v.size.width / v.size.height;
|
|
319
321
|
Object.assign(v.size, { width: rect.width, height: rect.height });
|
|
320
322
|
v.renderer.setSize(rect.width, rect.height, false);
|
|
321
323
|
v.overlays.renderer.setSize(rect.width, rect.height);
|
|
322
324
|
v.gizmo?.update();
|
|
323
|
-
|
|
325
|
+
if (aspectChanged) {
|
|
326
|
+
fitPose(v);
|
|
327
|
+
}
|
|
324
328
|
invalidate(v);
|
|
325
329
|
}
|
|
326
330
|
|
|
327
|
-
/** Fits the projection to the scene, and moves the camera to look
|
|
331
|
+
/** Fits the projection to the scene, and moves the camera to look from the view; as the r3f renderer, the target stays where it was panned to */
|
|
328
332
|
function fitPose<Content>(v: Viewer<Content>): void {
|
|
329
333
|
const placement = fitScene(v);
|
|
330
334
|
if (placement) {
|
|
331
335
|
const { x, y, z } = placement.direction;
|
|
332
|
-
setPose(v.controls, new Vector3(x, y, z).multiplyScalar(placement.distance),
|
|
336
|
+
setPose(v.controls, new Vector3(x, y, z).multiplyScalar(placement.distance), v.controls.orbit.target);
|
|
333
337
|
v.fitted = true;
|
|
334
338
|
}
|
|
335
339
|
}
|