s3m-three 0.3.6 → 0.3.8
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/dist/anim/Animator.d.ts +111 -0
- package/dist/anim/Animator.d.ts.map +1 -0
- package/dist/anim/Animator.js +382 -0
- package/dist/anim/Animator.js.map +1 -0
- package/dist/anim/Path.d.ts +30 -0
- package/dist/anim/Path.d.ts.map +1 -0
- package/dist/anim/Path.js +100 -0
- package/dist/anim/Path.js.map +1 -0
- package/dist/anim/easing.d.ts +70 -0
- package/dist/anim/easing.d.ts.map +1 -0
- package/dist/anim/easing.js +170 -0
- package/dist/anim/easing.js.map +1 -0
- package/dist/anim/index.d.ts +6 -0
- package/dist/anim/index.d.ts.map +1 -0
- package/dist/anim/index.js +4 -0
- package/dist/anim/index.js.map +1 -0
- package/dist/browser/assets/{s3mWorker-hZY5KqWF.js → s3mWorker-D7AV6O30.js} +1 -1
- package/dist/browser/s3m-three.iife.ext-three.js +60 -22
- package/dist/browser/s3m-three.iife.js +60 -22
- package/dist/core/TextureDecode.d.ts +22 -1
- package/dist/core/TextureDecode.d.ts.map +1 -1
- package/dist/core/TextureDecode.js +47 -3
- package/dist/core/TextureDecode.js.map +1 -1
- package/dist/core/TileGeometry.d.ts +92 -0
- package/dist/core/TileGeometry.d.ts.map +1 -0
- package/dist/core/TileGeometry.js +607 -0
- package/dist/core/TileGeometry.js.map +1 -0
- package/dist/core/types.d.ts +16 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/render/EdgeLines.d.ts +62 -14
- package/dist/render/EdgeLines.d.ts.map +1 -1
- package/dist/render/EdgeLines.js +97 -8
- package/dist/render/EdgeLines.js.map +1 -1
- package/dist/render/FeatureStyleManager.d.ts +17 -1
- package/dist/render/FeatureStyleManager.d.ts.map +1 -1
- package/dist/render/FeatureStyleManager.js +14 -4
- package/dist/render/FeatureStyleManager.js.map +1 -1
- package/dist/render/GeometryBuilder.d.ts +8 -10
- package/dist/render/GeometryBuilder.d.ts.map +1 -1
- package/dist/render/GeometryBuilder.js +77 -555
- package/dist/render/GeometryBuilder.js.map +1 -1
- package/dist/render/MergeVertices.d.ts +7 -0
- package/dist/render/MergeVertices.d.ts.map +1 -1
- package/dist/render/MergeVertices.js +10 -1
- package/dist/render/MergeVertices.js.map +1 -1
- package/dist/render/S3MViewer.d.ts +218 -9
- package/dist/render/S3MViewer.d.ts.map +1 -1
- package/dist/render/S3MViewer.js +772 -68
- package/dist/render/S3MViewer.js.map +1 -1
- package/dist/render/StyleMaterial.d.ts +19 -0
- package/dist/render/StyleMaterial.d.ts.map +1 -1
- package/dist/render/StyleMaterial.js +37 -0
- package/dist/render/StyleMaterial.js.map +1 -1
- package/dist/render/TextureFactory.d.ts +2 -1
- package/dist/render/TextureFactory.d.ts.map +1 -1
- package/dist/render/TextureFactory.js +30 -6
- package/dist/render/TextureFactory.js.map +1 -1
- package/dist/tileset/S3MTileset.d.ts +6 -2
- package/dist/tileset/S3MTileset.d.ts.map +1 -1
- package/dist/tileset/S3MTileset.js +17 -7
- package/dist/tileset/S3MTileset.js.map +1 -1
- package/dist/worker/S3MWorkerClient.d.ts +12 -4
- package/dist/worker/S3MWorkerClient.d.ts.map +1 -1
- package/dist/worker/S3MWorkerClient.js +12 -8
- package/dist/worker/S3MWorkerClient.js.map +1 -1
- package/dist/worker/s3mWorker.js +11 -3
- package/dist/worker/s3mWorker.js.map +1 -1
- package/docs/ANIMATION.md +534 -0
- package/docs/API.md +4 -0
- package/package.json +1 -1
- package/src/anim/Animator.ts +460 -0
- package/src/anim/Path.ts +107 -0
- package/src/anim/easing.ts +195 -0
- package/src/anim/index.ts +10 -0
- package/src/core/TextureDecode.ts +69 -3
- package/src/core/TileGeometry.ts +745 -0
- package/src/core/types.ts +8 -0
- package/src/index.ts +10 -0
- package/src/render/EdgeLines.ts +131 -15
- package/src/render/FeatureStyleManager.ts +12 -4
- package/src/render/GeometryBuilder.ts +91 -617
- package/src/render/MergeVertices.ts +11 -1
- package/src/render/S3MViewer.ts +866 -67
- package/src/render/StyleMaterial.ts +54 -1
- package/src/render/TextureFactory.ts +42 -8
- package/src/tileset/S3MTileset.ts +25 -9
- package/src/worker/S3MWorkerClient.ts +18 -9
- package/src/worker/s3mWorker.ts +24 -6
|
@@ -10,9 +10,30 @@ export interface DecodedTextureData {
|
|
|
10
10
|
/** WEBP 路径的解码结果(ImageBitmap 可 transfer,主线程直接 new THREE.Texture 包) */
|
|
11
11
|
bitmap: ImageBitmap | null;
|
|
12
12
|
hasAlpha: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* 压缩直传模式(decodeTextureData 的 compressed 选项):不解码,原样返回 DXT 块,
|
|
15
|
+
* 主线程用 CompressedTexture 硬件解压上传。与 rgba 互斥。
|
|
16
|
+
*/
|
|
17
|
+
blocks?: Uint8Array;
|
|
18
|
+
blockFormat?: 'dxt1' | 'dxt5';
|
|
13
19
|
/** CRN 转码失败时的原始错误(渲染层负责打 warn) */
|
|
14
20
|
error?: string;
|
|
15
21
|
}
|
|
22
|
+
export interface DecodeOptions {
|
|
23
|
+
/**
|
|
24
|
+
* 压缩直传:dxt1/dxt5(含 CRN 转码产物)不解码,原样返回 DXT 块。
|
|
25
|
+
* 仅在宿主支持 WEBGL_compressed_texture_s3tc(+srgb) 时开启;
|
|
26
|
+
* flipY 纹理走不了压缩上传(WebGL 对压缩纹理忽略 UNPACK_FLIP_Y),自动回退解码。
|
|
27
|
+
*/
|
|
28
|
+
compressed?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* DXT 块数据的期望字节数:4×4 对齐块 × 每块字节(DXT1=8,DXT5=16)。
|
|
32
|
+
* S3M 纹理宽高不总是 4 的倍数,驱动按声明尺寸算期望大小——对不上就是
|
|
33
|
+
* GL_INVALID_VALUE: glCompressedTexSubImage2D: The <imageSize> does not match。
|
|
34
|
+
* 压缩直传前必须用这个函数把关,不匹配就回退 RGBA 解码。
|
|
35
|
+
*/
|
|
36
|
+
export declare function expectedDxtByteLength(width: number, height: number, format: 'dxt1' | 'dxt5'): number;
|
|
16
37
|
/** 主线程 / Worker 共用的解码入口。不抛错:失败与不支持都体现在返回值里 */
|
|
17
|
-
export declare function decodeTextureData(tex: S3MTexture): Promise<DecodedTextureData>;
|
|
38
|
+
export declare function decodeTextureData(tex: S3MTexture, options?: DecodeOptions): Promise<DecodedTextureData>;
|
|
18
39
|
//# sourceMappingURL=TextureDecode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextureDecode.d.ts","sourceRoot":"","sources":["../../src/core/TextureDecode.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,oDAAoD;AACpD,MAAM,WAAW,kBAAkB;IACjC,2FAA2F;IAC3F,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACxB,qEAAqE;IACrE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAgED,8CAA8C;AAC9C,wBAAsB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"TextureDecode.d.ts","sourceRoot":"","sources":["../../src/core/TextureDecode.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,oDAAoD;AACpD,MAAM,WAAW,kBAAkB;IACjC,2FAA2F;IAC3F,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACxB,qEAAqE;IACrE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAgED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAIpG;AAED,8CAA8C;AAC9C,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,UAAU,EACf,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,kBAAkB,CAAC,CAkG7B"}
|
|
@@ -67,8 +67,19 @@ function rawRGBA(tex) {
|
|
|
67
67
|
flipRows(out, width, height);
|
|
68
68
|
return { rgba: out, hasAlpha: hasAlphaChannel(pixelFormat) };
|
|
69
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* DXT 块数据的期望字节数:4×4 对齐块 × 每块字节(DXT1=8,DXT5=16)。
|
|
72
|
+
* S3M 纹理宽高不总是 4 的倍数,驱动按声明尺寸算期望大小——对不上就是
|
|
73
|
+
* GL_INVALID_VALUE: glCompressedTexSubImage2D: The <imageSize> does not match。
|
|
74
|
+
* 压缩直传前必须用这个函数把关,不匹配就回退 RGBA 解码。
|
|
75
|
+
*/
|
|
76
|
+
export function expectedDxtByteLength(width, height, format) {
|
|
77
|
+
const bw = (width + 3) >> 2;
|
|
78
|
+
const bh = (height + 3) >> 2;
|
|
79
|
+
return bw * bh * (format === 'dxt1' ? 8 : 16);
|
|
80
|
+
}
|
|
70
81
|
/** 主线程 / Worker 共用的解码入口。不抛错:失败与不支持都体现在返回值里 */
|
|
71
|
-
export async function decodeTextureData(tex) {
|
|
82
|
+
export async function decodeTextureData(tex, options = {}) {
|
|
72
83
|
const empty = {
|
|
73
84
|
kind: 'unsupported(0/0)',
|
|
74
85
|
width: 0,
|
|
@@ -80,13 +91,32 @@ export async function decodeTextureData(tex) {
|
|
|
80
91
|
if (!tex || !tex.width || !tex.height)
|
|
81
92
|
return empty;
|
|
82
93
|
const kind = resolveTextureKind(tex.compressType ?? 0, tex.pixelFormat);
|
|
94
|
+
// 压缩直传的公共前提:不是 GL 翻行图集(压缩上传无法 flipY)
|
|
95
|
+
const canCompress = options.compressed === true && !tex.flipY;
|
|
96
|
+
/** 块数据字节数与 4×4 对齐公式一致才允许直传,否则回退解码 */
|
|
97
|
+
const compressible = (data, w, h, format) => data.byteLength === expectedDxtByteLength(w, h, format);
|
|
83
98
|
if (kind === 'crn') {
|
|
84
99
|
try {
|
|
85
100
|
const crn = await transcodeCRN(tex.data);
|
|
101
|
+
const pf = crn.dxtFormat === 1 ? PixelFormat.DXT1 : PixelFormat.DXT5;
|
|
102
|
+
const fmt = crn.dxtFormat === 1 ? 'dxt1' : 'dxt5';
|
|
103
|
+
if (canCompress && compressible(crn.data, crn.width, crn.height, fmt)) {
|
|
104
|
+
// CRN→DXT 的转码免不了(wasm),但后续的 DXT→RGBA 解块省掉,块数据直传 GPU
|
|
105
|
+
return {
|
|
106
|
+
kind: `crn->dxt${crn.dxtFormat}(c)`,
|
|
107
|
+
width: crn.width,
|
|
108
|
+
height: crn.height,
|
|
109
|
+
rgba: null,
|
|
110
|
+
bitmap: null,
|
|
111
|
+
hasAlpha: pf === PixelFormat.DXT5,
|
|
112
|
+
blocks: crn.data,
|
|
113
|
+
blockFormat: fmt,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
86
116
|
const decoded = decodeDXT({
|
|
87
117
|
width: crn.width,
|
|
88
118
|
height: crn.height,
|
|
89
|
-
pixelFormat:
|
|
119
|
+
pixelFormat: pf,
|
|
90
120
|
data: crn.data,
|
|
91
121
|
});
|
|
92
122
|
return {
|
|
@@ -112,7 +142,21 @@ export async function decodeTextureData(tex) {
|
|
|
112
142
|
}
|
|
113
143
|
}
|
|
114
144
|
if (kind === 'dxt1' || kind === 'dxt3' || kind === 'dxt4' || kind === 'dxt5') {
|
|
115
|
-
const
|
|
145
|
+
const pf = dxtPixelFormatOf(kind);
|
|
146
|
+
// dxt3/dxt4 少见,不进直传白名单;块长与 4×4 对齐公式不符的也回退解码
|
|
147
|
+
if (canCompress && (kind === 'dxt1' || kind === 'dxt5') && compressible(tex.data, tex.width, tex.height, kind)) {
|
|
148
|
+
return {
|
|
149
|
+
kind: `${kind}(c)`,
|
|
150
|
+
width: tex.width,
|
|
151
|
+
height: tex.height,
|
|
152
|
+
rgba: null,
|
|
153
|
+
bitmap: null,
|
|
154
|
+
hasAlpha: kind === 'dxt5',
|
|
155
|
+
blocks: tex.data,
|
|
156
|
+
blockFormat: kind,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
const decoded = decodeDXT({ ...tex, pixelFormat: pf });
|
|
116
160
|
return { kind, width: tex.width, height: tex.height, rgba: decoded.rgba, bitmap: null, hasAlpha: decoded.hasAlpha };
|
|
117
161
|
}
|
|
118
162
|
if (kind === 'webp') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextureDecode.js","sourceRoot":"","sources":["../../src/core/TextureDecode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"TextureDecode.js","sourceRoot":"","sources":["../../src/core/TextureDecode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S3M 解析结果 → 纯数据几何组装(three 无关,主线程 / Worker 共用)
|
|
3
|
+
*
|
|
4
|
+
* 从 GeometryBuilder 拆出来的 CPU 密集段:顶点流解交错、法线计算、
|
|
5
|
+
* 同材质合批合并(含 geode 矩阵变换)。产出是「PrimitiveData 列表」——
|
|
6
|
+
* 每个 primitive 就是一份能直接包成 BufferGeometry 的 attribute 字典 + 索引,
|
|
7
|
+
* three 对象(Mesh / 材质 / InstancedMesh)仍由渲染层的 GeometryBuilder 包装。
|
|
8
|
+
*
|
|
9
|
+
* 语义必须与原实现逐位一致(下游拾取 / 单体化 / 图集都依赖):
|
|
10
|
+
* - attribute 省缺补默认:aColor 补白、aBatchId 补 -1、无 index 走 drawRange;
|
|
11
|
+
* - 点云骨架(无索引包)补一个 primitiveType=1 的伪包;
|
|
12
|
+
* - 合批只在 primitiveType=4 且 batching 开启时做,棱线包与实例化网格单独摆放;
|
|
13
|
+
* - 合并时矩阵变换用列主序 mat4(S3M 与 three elements 布局一致),
|
|
14
|
+
* 法线用上 3x3 的逆转置并归一化。
|
|
15
|
+
*/
|
|
16
|
+
import type { ParsedTile, VertexAttribute } from './types.js';
|
|
17
|
+
/**
|
|
18
|
+
* S3M 规范里 `DrawPrimitiveType` 的两个特殊值(原住 GeometryBuilder,随组装层
|
|
19
|
+
* 下沉到 core —— 渲染层从这里 re-export,对外 API 不变):
|
|
20
|
+
* 13 = 数据自带的「棱线包」—— 索引是线段对,不是三角形(把 13 当三角形画,
|
|
21
|
+
* 每条棱线都会被连成一根几十上百米的尖刺);
|
|
22
|
+
* 1 = 点云包。索引是点序号,画成三角面就是满屏彩色尖刺。
|
|
23
|
+
*/
|
|
24
|
+
export declare const LINE_PRIMITIVE = 13;
|
|
25
|
+
export declare const POINT_PRIMITIVE = 1;
|
|
26
|
+
/** 解交错后的属性流:数组 + 分量数 + 是否归一化(对应 THREE.BufferAttribute 三参) */
|
|
27
|
+
export interface PlainAttribute {
|
|
28
|
+
array: Float32Array | Uint8Array | Uint16Array | Uint32Array;
|
|
29
|
+
components: number;
|
|
30
|
+
normalized: boolean;
|
|
31
|
+
}
|
|
32
|
+
/** 非交错整段铺开 / 交错逐元素抽取(原 toBufferAttribute 的数据部分) */
|
|
33
|
+
export declare function deinterleave(attr: VertexAttribute): PlainAttribute;
|
|
34
|
+
export interface BoundsData {
|
|
35
|
+
boxMin: [number, number, number];
|
|
36
|
+
boxMax: [number, number, number];
|
|
37
|
+
sphereCenter: [number, number, number];
|
|
38
|
+
sphereRadius: number;
|
|
39
|
+
}
|
|
40
|
+
/** 等价 BufferGeometry.computeBoundingBox / computeBoundingSphere 的数学部分 */
|
|
41
|
+
export declare function computeBounds(position: ArrayLike<number>, vertexCount: number): BoundsData;
|
|
42
|
+
/** 一个 primitive 的属性字典:键即 geometry attribute 名,数组/分量/归一化齐备 */
|
|
43
|
+
export interface PrimitiveAttributes {
|
|
44
|
+
position: PlainAttribute;
|
|
45
|
+
normal?: PlainAttribute;
|
|
46
|
+
uv?: PlainAttribute;
|
|
47
|
+
uv1?: PlainAttribute;
|
|
48
|
+
aColor: PlainAttribute;
|
|
49
|
+
aBatchId: PlainAttribute;
|
|
50
|
+
aAtlasRect?: PlainAttribute;
|
|
51
|
+
aAtlasRect1?: PlainAttribute;
|
|
52
|
+
aSecUv?: PlainAttribute;
|
|
53
|
+
}
|
|
54
|
+
export interface PrimitiveData {
|
|
55
|
+
/** 首个候选骨架名(userData.skeletonName) */
|
|
56
|
+
skeletonName: string;
|
|
57
|
+
/** 参与合并的 geoPackage 键(主线程重建 geoRef / geoByBatchId) */
|
|
58
|
+
geoNames: string[];
|
|
59
|
+
primitiveType: number;
|
|
60
|
+
passNames: string[];
|
|
61
|
+
/** geode 矩阵(列主序 16 个数)或 null */
|
|
62
|
+
matrix: number[] | null;
|
|
63
|
+
vertexCount: number;
|
|
64
|
+
indexCount: number;
|
|
65
|
+
attributes: PrimitiveAttributes;
|
|
66
|
+
index: Uint16Array | Uint32Array | null;
|
|
67
|
+
bounds: BoundsData;
|
|
68
|
+
/** 合批前候选数(>1 表示是合并产物) */
|
|
69
|
+
batchedFrom?: number;
|
|
70
|
+
}
|
|
71
|
+
export interface TileGeometryStats {
|
|
72
|
+
vertices: number;
|
|
73
|
+
instanced: number;
|
|
74
|
+
edgeLines: number;
|
|
75
|
+
/** 合批前独立网格数(batching 生效时 > meshes) */
|
|
76
|
+
originalMeshes?: number;
|
|
77
|
+
skipped: string[];
|
|
78
|
+
}
|
|
79
|
+
export interface TileGeometryData {
|
|
80
|
+
primitives: PrimitiveData[];
|
|
81
|
+
stats: TileGeometryStats;
|
|
82
|
+
}
|
|
83
|
+
export interface AssembleOptions {
|
|
84
|
+
/** 是否对 primitiveType=4 的三角面做瓦片内同材质合批(默认 true) */
|
|
85
|
+
batching?: boolean;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 瓦片几何组装入口。与 GeometryBuilder 的摆放/分组逻辑逐位对齐,
|
|
89
|
+
* 但只产出纯数据 —— three 包装在渲染层。
|
|
90
|
+
*/
|
|
91
|
+
export declare function assembleTileGeometry(tile: ParsedTile, options?: AssembleOptions): TileGeometryData;
|
|
92
|
+
//# sourceMappingURL=TileGeometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TileGeometry.d.ts","sourceRoot":"","sources":["../../src/core/TileGeometry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAIV,UAAU,EACV,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,eAAe,IAAI,CAAC;AAQjC,6DAA6D;AAC7D,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AA4BD,mDAAmD;AACnD,wBAAgB,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,CAgClE;AAkFD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,UAAU,CAwB1F;AAID,6DAA6D;AAC7D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gCAAgC;IAChC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,mBAAmB,CAAC;IAChC,KAAK,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC;IACxC,MAAM,EAAE,UAAU,CAAC;IACnB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAmWD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,GAAE,eAAoB,GAAG,gBAAgB,CAkHtG"}
|