bimatter-viewer-react 0.4.1 → 0.5.0
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 +65 -34
- package/lib/Loaders/BmtLoader.d.ts +20 -2
- package/lib/Loaders/IFCLoader/IFCLoader.d.ts +34 -5
- package/lib/api/loader.d.ts +16 -0
- package/lib/assets/BMTWorker-yhSXOg2i.js +1 -0
- package/lib/assets/IFCWorker-B_lqybSb.js +6 -0
- package/lib/index.d.ts +5 -3
- package/lib/index.js +816 -436
- package/lib/workers/BMTWorker.d.ts +53 -0
- package/lib/workers/BMTWorkerClient.d.ts +14 -0
- package/lib/workers/IFCWorker.d.ts +62 -0
- package/lib/workers/IFCWorkerClient.d.ts +14 -0
- package/lib/workers/ProgressUtils.d.ts +27 -0
- package/lib/workers/index.d.ts +7 -0
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -152,6 +152,37 @@ await loader.loadModel(["/models/model.bmt", "/models/model.ifc"]);
|
|
|
152
152
|
await loader.loadModel(files);
|
|
153
153
|
```
|
|
154
154
|
|
|
155
|
+
Use `useWorker` to parse BMT and IFC models outside the main thread:
|
|
156
|
+
|
|
157
|
+
```ts
|
|
158
|
+
const models = await loader.loadModel(["/models/model.ifc"], {
|
|
159
|
+
chunk: 200,
|
|
160
|
+
useIfcSpace: true,
|
|
161
|
+
useWorker: true,
|
|
162
|
+
onProgress: (event) => {
|
|
163
|
+
console.log(event.phase, Math.round(event.progress * 100));
|
|
164
|
+
},
|
|
165
|
+
onChunk: (chunk) => {
|
|
166
|
+
// Optional: add chunk.geometry to your viewer state for progressive render.
|
|
167
|
+
console.log(chunk.modelID, chunk.geometryID);
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
For IFC, `chunk` controls how many geometries are packed before a streamed mesh is emitted. For BMT, chunks are read as they are already stored in the file.
|
|
173
|
+
|
|
174
|
+
When you render chunks yourself in `onChunk`, set `collectWorkerChunks: false` to avoid keeping the same streamed geometry in the loader helper until the final result:
|
|
175
|
+
|
|
176
|
+
```ts
|
|
177
|
+
await loader.loadModel(["/models/model.bmt"], {
|
|
178
|
+
collectWorkerChunks: false,
|
|
179
|
+
useWorker: true,
|
|
180
|
+
onChunk: (chunk) => {
|
|
181
|
+
// Store chunk.geometry in your own model state.
|
|
182
|
+
},
|
|
183
|
+
});
|
|
184
|
+
```
|
|
185
|
+
|
|
155
186
|
## File Upload Example
|
|
156
187
|
|
|
157
188
|
```tsx
|
|
@@ -180,40 +211,6 @@ function App() {
|
|
|
180
211
|
}
|
|
181
212
|
```
|
|
182
213
|
|
|
183
|
-
## HotKeys
|
|
184
|
-
|
|
185
|
-
### Selection
|
|
186
|
-
|
|
187
|
-
`Left Click` - Select element
|
|
188
|
-
|
|
189
|
-
`Shift + Left Click` - Multi-select element
|
|
190
|
-
|
|
191
|
-
`Ctrl + Left Click` - Toggle element selection
|
|
192
|
-
|
|
193
|
-
`Shift + Drag Right` - Select elements fully inside rectangle
|
|
194
|
-
|
|
195
|
-
`Shift + Drag Left` - Select elements intersected by rectangle
|
|
196
|
-
|
|
197
|
-
`Ctrl + Drag Right` - Unselect elements fully inside rectangle
|
|
198
|
-
|
|
199
|
-
`Ctrl + Drag Left` - Unselect elements intersected by rectangle
|
|
200
|
-
|
|
201
|
-
### Visibility
|
|
202
|
-
|
|
203
|
-
`C` - Clear hidden / isolated elements
|
|
204
|
-
|
|
205
|
-
`H` - Hide selected elements
|
|
206
|
-
|
|
207
|
-
`I` - Isolate selected elements
|
|
208
|
-
|
|
209
|
-
### Clipping
|
|
210
|
-
|
|
211
|
-
`P` - Create clipping plane by model intersection
|
|
212
|
-
|
|
213
|
-
### Dimensions
|
|
214
|
-
|
|
215
|
-
`M` - Toggle dimension drawing mode
|
|
216
|
-
|
|
217
214
|
## Viewer API
|
|
218
215
|
|
|
219
216
|
```ts
|
|
@@ -574,3 +571,37 @@ viewerRef.current?.utils.setGridAxesVisibility({
|
|
|
574
571
|
top: false,
|
|
575
572
|
});
|
|
576
573
|
```
|
|
574
|
+
|
|
575
|
+
## HotKeys
|
|
576
|
+
|
|
577
|
+
### Selection
|
|
578
|
+
|
|
579
|
+
`Left Click` - Select element
|
|
580
|
+
|
|
581
|
+
`Shift + Left Click` - Multi-select element
|
|
582
|
+
|
|
583
|
+
`Ctrl + Left Click` - Toggle element selection
|
|
584
|
+
|
|
585
|
+
`Shift + Drag Right` - Select elements fully inside rectangle
|
|
586
|
+
|
|
587
|
+
`Shift + Drag Left` - Select elements intersected by rectangle
|
|
588
|
+
|
|
589
|
+
`Ctrl + Drag Right` - Unselect elements fully inside rectangle
|
|
590
|
+
|
|
591
|
+
`Ctrl + Drag Left` - Unselect elements intersected by rectangle
|
|
592
|
+
|
|
593
|
+
### Visibility
|
|
594
|
+
|
|
595
|
+
`C` - Clear hidden / isolated elements
|
|
596
|
+
|
|
597
|
+
`H` - Hide selected elements
|
|
598
|
+
|
|
599
|
+
`I` - Isolate selected elements
|
|
600
|
+
|
|
601
|
+
### Clipping
|
|
602
|
+
|
|
603
|
+
`P` - Create clipping plane by model intersection
|
|
604
|
+
|
|
605
|
+
### Dimensions
|
|
606
|
+
|
|
607
|
+
`M` - Toggle dimension drawing mode
|
|
@@ -59,6 +59,24 @@ export interface BmtModelData {
|
|
|
59
59
|
props: BmtModelProps;
|
|
60
60
|
structure: BmtModelStructure;
|
|
61
61
|
}
|
|
62
|
+
export type BmtGeometryChunkData = {
|
|
63
|
+
chunkIndex: number;
|
|
64
|
+
geometry: BmtGeomData;
|
|
65
|
+
geometryID: number;
|
|
66
|
+
isIfcSpace: boolean;
|
|
67
|
+
loadedBytes: number;
|
|
68
|
+
totalBytes: number;
|
|
69
|
+
};
|
|
70
|
+
export type BmtParseProgressData = {
|
|
71
|
+
emittedChunks: number;
|
|
72
|
+
loadedBytes: number;
|
|
73
|
+
totalBytes: number;
|
|
74
|
+
};
|
|
75
|
+
export type BmtParseCallbacks = {
|
|
76
|
+
onGeometryChunk?: (chunk: BmtGeometryChunkData) => void;
|
|
77
|
+
onProgress?: (progress: BmtParseProgressData) => void;
|
|
78
|
+
streamGeometryChunks?: boolean;
|
|
79
|
+
};
|
|
62
80
|
type BmtMeshData = {
|
|
63
81
|
colorId: BmtMaterialData;
|
|
64
82
|
ids: Uint8Array;
|
|
@@ -93,7 +111,7 @@ export declare class BMTLoader {
|
|
|
93
111
|
private getExternalMetadataPath;
|
|
94
112
|
private loadExternalMetadata;
|
|
95
113
|
private getModelNameFromPath;
|
|
96
|
-
loadModel(path: string): Promise<BmtModelData>;
|
|
97
|
-
parseBinaryFile(data: ArrayBuffer): BmtModelData;
|
|
114
|
+
loadModel(path: string, callbacks?: BmtParseCallbacks): Promise<BmtModelData>;
|
|
115
|
+
parseBinaryFile(data: ArrayBuffer, callbacks?: BmtParseCallbacks): BmtModelData;
|
|
98
116
|
}
|
|
99
117
|
export {};
|
|
@@ -2,7 +2,7 @@ import { type IfcElementsAssembly } from "./PropertySerializer";
|
|
|
2
2
|
import { Matrix4 } from "three";
|
|
3
3
|
import { IfcAPI, type LocateFileHandlerFn } from "web-ifc";
|
|
4
4
|
import { type GridData } from "./IfcGrid";
|
|
5
|
-
import type { BmtModelData, BmtModelProps, BmtModelStructure } from "../BmtLoader";
|
|
5
|
+
import type { BmtGeomData, BmtModelData, BmtModelProps, BmtModelStructure } from "../BmtLoader";
|
|
6
6
|
type IfcParserOptions = {
|
|
7
7
|
geometryTransformation?: number[];
|
|
8
8
|
maxGeometriesPerMesh: number;
|
|
@@ -18,6 +18,25 @@ type IfcModelDataResult = {
|
|
|
18
18
|
export type IfcModelSource = string | File;
|
|
19
19
|
export type IfcLoadedModels = Record<number, BmtModelData>;
|
|
20
20
|
export type IfcCoordinationMatrixSource = Matrix4 | number[] | string | null | undefined;
|
|
21
|
+
export type IfcGeometryChunkData = {
|
|
22
|
+
chunkIndex: number;
|
|
23
|
+
geometry: BmtGeomData;
|
|
24
|
+
geometryID: number;
|
|
25
|
+
isIfcSpace: boolean;
|
|
26
|
+
totalChunks: number;
|
|
27
|
+
};
|
|
28
|
+
export type IfcGeometryProgressData = {
|
|
29
|
+
emittedChunks: number;
|
|
30
|
+
processed: number;
|
|
31
|
+
total: number;
|
|
32
|
+
};
|
|
33
|
+
export type IfcParsePhase = "opening" | "opened" | "streaming" | "properties" | "metadata";
|
|
34
|
+
export type IfcParseCallbacks = {
|
|
35
|
+
onGeometryChunk?: (chunk: IfcGeometryChunkData) => void;
|
|
36
|
+
onGeometryProgress?: (progress: IfcGeometryProgressData) => void;
|
|
37
|
+
onPhase?: (phase: IfcParsePhase) => void;
|
|
38
|
+
streamGeometryChunks?: boolean;
|
|
39
|
+
};
|
|
21
40
|
export declare class IFCLoader {
|
|
22
41
|
useIfcElemetAssembly: boolean;
|
|
23
42
|
useIfcColors: boolean;
|
|
@@ -31,20 +50,20 @@ export declare class IFCLoader {
|
|
|
31
50
|
chunk: number;
|
|
32
51
|
maxMeshBytes: number;
|
|
33
52
|
constructor();
|
|
34
|
-
getPath
|
|
53
|
+
getPath: LocateFileHandlerFn;
|
|
35
54
|
initParser(func?: LocateFileHandlerFn): Promise<void>;
|
|
36
55
|
set wasmPath(path: string);
|
|
37
56
|
get _parser(): IfcAPI;
|
|
38
57
|
set _parser(parser: IfcAPI);
|
|
39
58
|
loadModel(sources: IfcModelSource | IfcModelSource[], coordinationMatrix?: IfcCoordinationMatrixSource): Promise<IfcLoadedModels>;
|
|
40
|
-
parseBinaryFile(file: ArrayBuffer, coordinationMatrix?: IfcCoordinationMatrixSource): Promise<BmtModelData>;
|
|
59
|
+
parseBinaryFile(file: ArrayBuffer, coordinationMatrix?: IfcCoordinationMatrixSource, callbacks?: IfcParseCallbacks): Promise<BmtModelData>;
|
|
41
60
|
private loadSingleModel;
|
|
42
61
|
private parseInitializedBuffer;
|
|
43
62
|
getModelData(path: string): Promise<IfcModelDataResult>;
|
|
44
63
|
setCoordinationMatrix(matrix: IfcCoordinationMatrixSource): void;
|
|
45
64
|
resetCoordinationMatrix(): void;
|
|
46
65
|
get coordinationMatrixData(): string | undefined;
|
|
47
|
-
getModelDataFromBuffer(file: ArrayBuffer, coordinationMatrix?: IfcCoordinationMatrixSource): Promise<IfcModelDataResult | false>;
|
|
66
|
+
getModelDataFromBuffer(file: ArrayBuffer, coordinationMatrix?: IfcCoordinationMatrixSource, callbacks?: IfcParseCallbacks): Promise<IfcModelDataResult | false>;
|
|
48
67
|
private createCoordinationMatrix;
|
|
49
68
|
private getOptionalGridCoordinate;
|
|
50
69
|
private transformGridPoint;
|
|
@@ -59,7 +78,14 @@ export declare class IfcParser {
|
|
|
59
78
|
private readonly meshMatrix;
|
|
60
79
|
private readonly normalMatrix;
|
|
61
80
|
constructor(parser: IfcAPI, ifcModelID: number, options: IfcParserOptions);
|
|
62
|
-
|
|
81
|
+
getGeometryProgressTotal(): number;
|
|
82
|
+
parseData(allIds: Set<number>, elementsAssembly: IfcElementsAssembly | null, includeSpaces?: boolean, callbacks?: IfcParseCallbacks): BmtModelData;
|
|
83
|
+
private parseDataStreaming;
|
|
84
|
+
private streamDynamicGeometryChunks;
|
|
85
|
+
private getDynamicChunkBuilder;
|
|
86
|
+
private writeGeometryPayloadToDynamicBuilder;
|
|
87
|
+
private flushDynamicGeometryChunks;
|
|
88
|
+
private emitDynamicGeometryChunk;
|
|
63
89
|
private streamGeometryChunks;
|
|
64
90
|
private applyGeometryTransformation;
|
|
65
91
|
private planGeometryChunks;
|
|
@@ -75,6 +101,9 @@ export declare class IfcParser {
|
|
|
75
101
|
private getGeometryByteSize;
|
|
76
102
|
private writeGeometryPayload;
|
|
77
103
|
private createModelDataFromChunks;
|
|
104
|
+
private getTotalChunkCount;
|
|
105
|
+
private emitCompletedGeometryChunk;
|
|
106
|
+
private createGeometryDataFromBuilder;
|
|
78
107
|
private getElementId;
|
|
79
108
|
private getFiniteNumber;
|
|
80
109
|
private getDisplayColor;
|
package/lib/api/loader.d.ts
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
import { type BmtModelData } from "../Loaders/BmtLoader";
|
|
2
|
+
import { type BmtWorkerGeometryChunk, type IfcWorkerGeometryChunk, type WorkerProgressEvent } from "../workers";
|
|
2
3
|
export type ViewerModelSource = string | File;
|
|
3
4
|
export type ViewerLoadedModels = Record<number, BmtModelData>;
|
|
5
|
+
export type ViewerLoaderWorkerChunk = (BmtWorkerGeometryChunk | IfcWorkerGeometryChunk) & {
|
|
6
|
+
modelID: number;
|
|
7
|
+
};
|
|
4
8
|
export type ViewerLoadModelOptions = {
|
|
9
|
+
chunk?: number;
|
|
10
|
+
collectWorkerChunks?: boolean;
|
|
11
|
+
maxMeshBytes?: number;
|
|
12
|
+
onChunk?: (chunk: ViewerLoaderWorkerChunk) => void;
|
|
13
|
+
onProgress?: (progress: WorkerProgressEvent) => void;
|
|
14
|
+
streamGeometryChunks?: boolean;
|
|
5
15
|
useIfcSpace?: boolean;
|
|
16
|
+
useWorker?: boolean;
|
|
17
|
+
wasmPath?: string;
|
|
6
18
|
};
|
|
7
19
|
declare class ViewerLoaderApi {
|
|
8
20
|
coordinationMatrix: string | undefined;
|
|
@@ -17,6 +29,10 @@ declare class ViewerLoaderApi {
|
|
|
17
29
|
private getFileSourceMap;
|
|
18
30
|
private applyBmtMetadata;
|
|
19
31
|
private loadBmtModel;
|
|
32
|
+
private createWorkerProgressHandler;
|
|
33
|
+
private createWorkerChunkHandler;
|
|
34
|
+
private loadIfcModelInWorker;
|
|
35
|
+
private loadBmtModelInWorker;
|
|
20
36
|
private resetCoordinationMatrixState;
|
|
21
37
|
resetCoordinationMatrix(): void;
|
|
22
38
|
loadModel(sources: ViewerModelSource | ViewerModelSource[], options?: ViewerLoadModelOptions): Promise<ViewerLoadedModels>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(function(){function e(e){let t=e.length;for(;--t>=0;)e[t]=0}let t=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),n=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),r=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),i=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=Array(288*2);e(a);let o=Array(60);e(o);let s=Array(512);e(s);let c=Array(256);e(c);let l=Array(29);e(l);let u=Array(30);e(u);function d(e,t,n,r,i){this.static_tree=e,this.extra_bits=t,this.extra_base=n,this.elems=r,this.max_length=i,this.has_stree=e&&e.length}let f,p,m;function h(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}let g=e=>e<256?s[e]:s[256+(e>>>7)],_=(e,t)=>{e.pending_buf[e.pending++]=t&255,e.pending_buf[e.pending++]=t>>>8&255},v=(e,t,n)=>{e.bi_valid>16-n?(e.bi_buf|=t<<e.bi_valid&65535,_(e,e.bi_buf),e.bi_buf=t>>16-e.bi_valid,e.bi_valid+=n-16):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=n)},y=(e,t,n)=>{v(e,n[t*2],n[t*2+1])},b=(e,t)=>{let n=0;do n|=e&1,e>>>=1,n<<=1;while(--t>0);return n>>>1},x=e=>{e.bi_valid===16?(_(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=e.bi_buf&255,e.bi_buf>>=8,e.bi_valid-=8)},S=(e,t)=>{let n=t.dyn_tree,r=t.max_code,i=t.stat_desc.static_tree,a=t.stat_desc.has_stree,o=t.stat_desc.extra_bits,s=t.stat_desc.extra_base,c=t.stat_desc.max_length,l,u,d,f,p,m,h=0;for(f=0;f<=15;f++)e.bl_count[f]=0;for(n[e.heap[e.heap_max]*2+1]=0,l=e.heap_max+1;l<573;l++)u=e.heap[l],f=n[n[u*2+1]*2+1]+1,f>c&&(f=c,h++),n[u*2+1]=f,!(u>r)&&(e.bl_count[f]++,p=0,u>=s&&(p=o[u-s]),m=n[u*2],e.opt_len+=m*(f+p),a&&(e.static_len+=m*(i[u*2+1]+p)));if(h!==0){do{for(f=c-1;e.bl_count[f]===0;)f--;e.bl_count[f]--,e.bl_count[f+1]+=2,e.bl_count[c]--,h-=2}while(h>0);for(f=c;f!==0;f--)for(u=e.bl_count[f];u!==0;)d=e.heap[--l],!(d>r)&&(n[d*2+1]!==f&&(e.opt_len+=(f-n[d*2+1])*n[d*2],n[d*2+1]=f),u--)}},C=(e,t,n)=>{let r=Array(16),i=0,a,o;for(a=1;a<=15;a++)i=i+n[a-1]<<1,r[a]=i;for(o=0;o<=t;o++){let t=e[o*2+1];t!==0&&(e[o*2]=b(r[t]++,t))}},w=()=>{let e,i,h,g,_,v=Array(16);for(h=0,g=0;g<28;g++)for(l[g]=h,e=0;e<1<<t[g];e++)c[h++]=g;for(c[h-1]=g,_=0,g=0;g<16;g++)for(u[g]=_,e=0;e<1<<n[g];e++)s[_++]=g;for(_>>=7;g<30;g++)for(u[g]=_<<7,e=0;e<1<<n[g]-7;e++)s[256+ _++]=g;for(i=0;i<=15;i++)v[i]=0;for(e=0;e<=143;)a[e*2+1]=8,e++,v[8]++;for(;e<=255;)a[e*2+1]=9,e++,v[9]++;for(;e<=279;)a[e*2+1]=7,e++,v[7]++;for(;e<=287;)a[e*2+1]=8,e++,v[8]++;for(C(a,287,v),e=0;e<30;e++)o[e*2+1]=5,o[e*2]=b(e,5);f=new d(a,t,257,286,15),p=new d(o,n,0,30,15),m=new d([],r,0,19,7)},T=e=>{let t;for(t=0;t<286;t++)e.dyn_ltree[t*2]=0;for(t=0;t<30;t++)e.dyn_dtree[t*2]=0;for(t=0;t<19;t++)e.bl_tree[t*2]=0;e.dyn_ltree[256*2]=1,e.opt_len=e.static_len=0,e.sym_next=e.matches=0},E=e=>{e.bi_valid>8?_(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0},D=(e,t,n,r)=>{let i=t*2,a=n*2;return e[i]<e[a]||e[i]===e[a]&&r[t]<=r[n]},O=(e,t,n)=>{let r=e.heap[n],i=n<<1;for(;i<=e.heap_len&&(i<e.heap_len&&D(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!D(t,r,e.heap[i],e.depth));)e.heap[n]=e.heap[i],n=i,i<<=1;e.heap[n]=r},ee=(e,r,i)=>{let a,o,s=0,d,f;if(e.sym_next!==0)do a=e.pending_buf[e.sym_buf+ s++]&255,a+=(e.pending_buf[e.sym_buf+ s++]&255)<<8,o=e.pending_buf[e.sym_buf+ s++],a===0?y(e,o,r):(d=c[o],y(e,d+256+1,r),f=t[d],f!==0&&(o-=l[d],v(e,o,f)),a--,d=g(a),y(e,d,i),f=n[d],f!==0&&(a-=u[d],v(e,a,f)));while(s<e.sym_next);y(e,256,r)},k=(e,t)=>{let n=t.dyn_tree,r=t.stat_desc.static_tree,i=t.stat_desc.has_stree,a=t.stat_desc.elems,o,s,c=-1,l;for(e.heap_len=0,e.heap_max=573,o=0;o<a;o++)n[o*2]===0?n[o*2+1]=0:(e.heap[++e.heap_len]=c=o,e.depth[o]=0);for(;e.heap_len<2;)l=e.heap[++e.heap_len]=c<2?++c:0,n[l*2]=1,e.depth[l]=0,e.opt_len--,i&&(e.static_len-=r[l*2+1]);for(t.max_code=c,o=e.heap_len>>1;o>=1;o--)O(e,n,o);l=a;do o=e.heap[1],e.heap[1]=e.heap[e.heap_len--],O(e,n,1),s=e.heap[1],e.heap[--e.heap_max]=o,e.heap[--e.heap_max]=s,n[l*2]=n[o*2]+n[s*2],e.depth[l]=(e.depth[o]>=e.depth[s]?e.depth[o]:e.depth[s])+1,n[o*2+1]=n[s*2+1]=l,e.heap[1]=l++,O(e,n,1);while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],S(e,t),C(n,c,e.bl_count)},A=(e,t,n)=>{let r,i=-1,a,o=t[1],s=0,c=7,l=4;for(o===0&&(c=138,l=3),t[(n+1)*2+1]=65535,r=0;r<=n;r++)a=o,o=t[(r+1)*2+1],!(++s<c&&a===o)&&(s<l?e.bl_tree[a*2]+=s:a===0?s<=10?e.bl_tree[34]++:e.bl_tree[36]++:(a!==i&&e.bl_tree[a*2]++,e.bl_tree[32]++),s=0,i=a,o===0?(c=138,l=3):a===o?(c=6,l=3):(c=7,l=4))},te=(e,t,n)=>{let r,i=-1,a,o=t[1],s=0,c=7,l=4;for(o===0&&(c=138,l=3),r=0;r<=n;r++)if(a=o,o=t[(r+1)*2+1],!(++s<c&&a===o)){if(s<l)do y(e,a,e.bl_tree);while(--s!==0);else a===0?s<=10?(y(e,17,e.bl_tree),v(e,s-3,3)):(y(e,18,e.bl_tree),v(e,s-11,7)):(a!==i&&(y(e,a,e.bl_tree),s--),y(e,16,e.bl_tree),v(e,s-3,2));s=0,i=a,o===0?(c=138,l=3):a===o?(c=6,l=3):(c=7,l=4)}},ne=e=>{let t;for(A(e,e.dyn_ltree,e.l_desc.max_code),A(e,e.dyn_dtree,e.d_desc.max_code),k(e,e.bl_desc),t=18;t>=3&&e.bl_tree[i[t]*2+1]===0;t--);return e.opt_len+=3*(t+1)+5+5+4,t},re=(e,t,n,r)=>{let a;for(v(e,t-257,5),v(e,n-1,5),v(e,r-4,4),a=0;a<r;a++)v(e,e.bl_tree[i[a]*2+1],3);te(e,e.dyn_ltree,t-1),te(e,e.dyn_dtree,n-1)},ie=e=>{let t=4093624447,n;for(n=0;n<=31;n++,t>>>=1)if(t&1&&e.dyn_ltree[n*2]!==0)return 0;if(e.dyn_ltree[18]!==0||e.dyn_ltree[20]!==0||e.dyn_ltree[26]!==0)return 1;for(n=32;n<256;n++)if(e.dyn_ltree[n*2]!==0)return 1;return 0},ae=!1,oe=e=>{ae||=(w(),!0),e.l_desc=new h(e.dyn_ltree,f),e.d_desc=new h(e.dyn_dtree,p),e.bl_desc=new h(e.bl_tree,m),e.bi_buf=0,e.bi_valid=0,T(e)},se=(e,t,n,r)=>{v(e,0+ +!!r,3),E(e),_(e,n),_(e,~n),n&&e.pending_buf.set(e.window.subarray(t,t+n),e.pending),e.pending+=n};var ce={_tr_init:oe,_tr_stored_block:se,_tr_flush_block:(e,t,n,r)=>{let i,s,c=0;e.level>0?(e.strm.data_type===2&&(e.strm.data_type=ie(e)),k(e,e.l_desc),k(e,e.d_desc),c=ne(e),i=e.opt_len+3+7>>>3,s=e.static_len+3+7>>>3,s<=i&&(i=s)):i=s=n+5,n+4<=i&&t!==-1?se(e,t,n,r):e.strategy===4||s===i?(v(e,2+ +!!r,3),ee(e,a,o)):(v(e,4+ +!!r,3),re(e,e.l_desc.max_code+1,e.d_desc.max_code+1,c+1),ee(e,e.dyn_ltree,e.dyn_dtree)),T(e),r&&E(e)},_tr_tally:(e,t,n)=>(e.pending_buf[e.sym_buf+ e.sym_next++]=t,e.pending_buf[e.sym_buf+ e.sym_next++]=t>>8,e.pending_buf[e.sym_buf+ e.sym_next++]=n,t===0?e.dyn_ltree[n*2]++:(e.matches++,t--,e.dyn_ltree[(c[n]+256+1)*2]++,e.dyn_dtree[g(t)*2]++),e.sym_next===e.sym_end),_tr_align:e=>{v(e,2,3),y(e,256,a),x(e)}},le=(e,t,n,r)=>{let i=e&65535|0,a=e>>>16&65535|0,o=0;for(;n!==0;){o=n>2e3?2e3:n,n-=o;do i=i+t[r++]|0,a=a+i|0;while(--o);i%=65521,a%=65521}return i|a<<16|0};let ue=new Uint32Array((()=>{let e,t=[];for(var n=0;n<256;n++){e=n;for(var r=0;r<8;r++)e=e&1?3988292384^e>>>1:e>>>1;t[n]=e}return t})());var j=(e,t,n,r)=>{let i=ue,a=r+n;e^=-1;for(let n=r;n<a;n++)e=e>>>8^i[(e^t[n])&255];return e^-1},M={2:`need dictionary`,1:`stream end`,0:``,"-1":`file error`,"-2":`stream error`,"-3":`data error`,"-4":`insufficient memory`,"-5":`buffer error`,"-6":`incompatible version`},N={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};let{_tr_init:de,_tr_stored_block:fe,_tr_flush_block:pe,_tr_tally:P,_tr_align:me}=ce,{Z_NO_FLUSH:F,Z_PARTIAL_FLUSH:he,Z_FULL_FLUSH:ge,Z_FINISH:I,Z_BLOCK:_e,Z_OK:L,Z_STREAM_END:ve,Z_STREAM_ERROR:R,Z_DATA_ERROR:ye,Z_BUF_ERROR:be,Z_DEFAULT_COMPRESSION:xe,Z_FILTERED:Se,Z_HUFFMAN_ONLY:Ce,Z_RLE:we,Z_FIXED:Te,Z_DEFAULT_STRATEGY:Ee,Z_UNKNOWN:De,Z_DEFLATED:Oe}=N,z=(e,t)=>(e.msg=M[t],t),ke=e=>e*2-(e>4?9:0),B=e=>{let t=e.length;for(;--t>=0;)e[t]=0},Ae=e=>{let t,n,r,i=e.w_size;t=e.hash_size,r=t;do n=e.head[--r],e.head[r]=n>=i?n-i:0;while(--t);t=i,r=t;do n=e.prev[--r],e.prev[r]=n>=i?n-i:0;while(--t)},V=(e,t,n)=>(t<<e.hash_shift^n)&e.hash_mask,H=e=>{let t=e.state,n=t.pending;n>e.avail_out&&(n=e.avail_out),n!==0&&(e.output.set(t.pending_buf.subarray(t.pending_out,t.pending_out+n),e.next_out),e.next_out+=n,t.pending_out+=n,e.total_out+=n,e.avail_out-=n,t.pending-=n,t.pending===0&&(t.pending_out=0))},U=(e,t)=>{pe(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,H(e.strm)},W=(e,t)=>{e.pending_buf[e.pending++]=t},je=(e,t)=>{e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=t&255},Me=(e,t,n,r)=>{let i=e.avail_in;return i>r&&(i=r),i===0?0:(e.avail_in-=i,t.set(e.input.subarray(e.next_in,e.next_in+i),n),e.state.wrap===1?e.adler=le(e.adler,t,i,n):e.state.wrap===2&&(e.adler=j(e.adler,t,i,n)),e.next_in+=i,e.total_in+=i,i)},Ne=(e,t)=>{let n=e.max_chain_length,r=e.strstart,i,a,o=e.prev_length,s=e.nice_match,c=e.strstart>e.w_size-262?e.strstart-(e.w_size-262):0,l=e.window,u=e.w_mask,d=e.prev,f=e.strstart+258,p=l[r+o-1],m=l[r+o];e.prev_length>=e.good_match&&(n>>=2),s>e.lookahead&&(s=e.lookahead);do{if(i=t,l[i+o]!==m||l[i+o-1]!==p||l[i]!==l[r]||l[++i]!==l[r+1])continue;r+=2,i++;do;while(l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&r<f);if(a=258-(f-r),r=f-258,a>o){if(e.match_start=t,o=a,a>=s)break;p=l[r+o-1],m=l[r+o]}}while((t=d[t&u])>c&&--n!==0);return o<=e.lookahead?o:e.lookahead},G=e=>{let t=e.w_size,n,r,i;do{if(r=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-262)&&(e.window.set(e.window.subarray(t,t+t-r),0),e.match_start-=t,e.strstart-=t,e.block_start-=t,e.insert>e.strstart&&(e.insert=e.strstart),Ae(e),r+=t),e.strm.avail_in===0)break;if(n=Me(e.strm,e.window,e.strstart+e.lookahead,r),e.lookahead+=n,e.lookahead+e.insert>=3)for(i=e.strstart-e.insert,e.ins_h=e.window[i],e.ins_h=V(e,e.ins_h,e.window[i+1]);e.insert&&(e.ins_h=V(e,e.ins_h,e.window[i+3-1]),e.prev[i&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=i,i++,e.insert--,!(e.lookahead+e.insert<3)););}while(e.lookahead<262&&e.strm.avail_in!==0)},Pe=(e,t)=>{let n=e.pending_buf_size-5>e.w_size?e.w_size:e.pending_buf_size-5,r,i,a,o=0,s=e.strm.avail_in;do{if(r=65535,a=e.bi_valid+42>>3,e.strm.avail_out<a||(a=e.strm.avail_out-a,i=e.strstart-e.block_start,r>i+e.strm.avail_in&&(r=i+e.strm.avail_in),r>a&&(r=a),r<n&&(r===0&&t!==I||t===F||r!==i+e.strm.avail_in)))break;o=+(t===I&&r===i+e.strm.avail_in),fe(e,0,0,o),e.pending_buf[e.pending-4]=r,e.pending_buf[e.pending-3]=r>>8,e.pending_buf[e.pending-2]=~r,e.pending_buf[e.pending-1]=~r>>8,H(e.strm),i&&(i>r&&(i=r),e.strm.output.set(e.window.subarray(e.block_start,e.block_start+i),e.strm.next_out),e.strm.next_out+=i,e.strm.avail_out-=i,e.strm.total_out+=i,e.block_start+=i,r-=i),r&&(Me(e.strm,e.strm.output,e.strm.next_out,r),e.strm.next_out+=r,e.strm.avail_out-=r,e.strm.total_out+=r)}while(o===0);return s-=e.strm.avail_in,s&&(s>=e.w_size?(e.matches=2,e.window.set(e.strm.input.subarray(e.strm.next_in-e.w_size,e.strm.next_in),0),e.strstart=e.w_size,e.insert=e.strstart):(e.window_size-e.strstart<=s&&(e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,e.insert>e.strstart&&(e.insert=e.strstart)),e.window.set(e.strm.input.subarray(e.strm.next_in-s,e.strm.next_in),e.strstart),e.strstart+=s,e.insert+=s>e.w_size-e.insert?e.w_size-e.insert:s),e.block_start=e.strstart),e.high_water<e.strstart&&(e.high_water=e.strstart),o?4:t!==F&&t!==I&&e.strm.avail_in===0&&e.strstart===e.block_start?2:(a=e.window_size-e.strstart,e.strm.avail_in>a&&e.block_start>=e.w_size&&(e.block_start-=e.w_size,e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,a+=e.w_size,e.insert>e.strstart&&(e.insert=e.strstart)),a>e.strm.avail_in&&(a=e.strm.avail_in),a&&(Me(e.strm,e.window,e.strstart,a),e.strstart+=a,e.insert+=a>e.w_size-e.insert?e.w_size-e.insert:a),e.high_water<e.strstart&&(e.high_water=e.strstart),a=e.bi_valid+42>>3,a=e.pending_buf_size-a>65535?65535:e.pending_buf_size-a,n=a>e.w_size?e.w_size:a,i=e.strstart-e.block_start,(i>=n||(i||t===I)&&t!==F&&e.strm.avail_in===0&&i<=a)&&(r=i>a?a:i,o=+(t===I&&e.strm.avail_in===0&&r===i),fe(e,e.block_start,r,o),e.block_start+=r,H(e.strm)),o?3:1)},Fe=(e,t)=>{let n,r;for(;;){if(e.lookahead<262){if(G(e),e.lookahead<262&&t===F)return 1;if(e.lookahead===0)break}if(n=0,e.lookahead>=3&&(e.ins_h=V(e,e.ins_h,e.window[e.strstart+3-1]),n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),n!==0&&e.strstart-n<=e.w_size-262&&(e.match_length=Ne(e,n)),e.match_length>=3)if(r=P(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do e.strstart++,e.ins_h=V(e,e.ins_h,e.window[e.strstart+3-1]),n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart;while(--e.match_length!==0);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=V(e,e.ins_h,e.window[e.strstart+1]);else r=P(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(r&&(U(e,!1),e.strm.avail_out===0))return 1}return e.insert=e.strstart<2?e.strstart:2,t===I?(U(e,!0),e.strm.avail_out===0?3:4):e.sym_next&&(U(e,!1),e.strm.avail_out===0)?1:2},K=(e,t)=>{let n,r,i;for(;;){if(e.lookahead<262){if(G(e),e.lookahead<262&&t===F)return 1;if(e.lookahead===0)break}if(n=0,e.lookahead>=3&&(e.ins_h=V(e,e.ins_h,e.window[e.strstart+3-1]),n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=2,n!==0&&e.prev_length<e.max_lazy_match&&e.strstart-n<=e.w_size-262&&(e.match_length=Ne(e,n),e.match_length<=5&&(e.strategy===Se||e.match_length===3&&e.strstart-e.match_start>4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-3,r=P(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do++e.strstart<=i&&(e.ins_h=V(e,e.ins_h,e.window[e.strstart+3-1]),n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart);while(--e.prev_length!==0);if(e.match_available=0,e.match_length=2,e.strstart++,r&&(U(e,!1),e.strm.avail_out===0))return 1}else if(e.match_available){if(r=P(e,0,e.window[e.strstart-1]),r&&U(e,!1),e.strstart++,e.lookahead--,e.strm.avail_out===0)return 1}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&=(r=P(e,0,e.window[e.strstart-1]),0),e.insert=e.strstart<2?e.strstart:2,t===I?(U(e,!0),e.strm.avail_out===0?3:4):e.sym_next&&(U(e,!1),e.strm.avail_out===0)?1:2},Ie=(e,t)=>{let n,r,i,a,o=e.window;for(;;){if(e.lookahead<=258){if(G(e),e.lookahead<=258&&t===F)return 1;if(e.lookahead===0)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(i=e.strstart-1,r=o[i],r===o[++i]&&r===o[++i]&&r===o[++i])){a=e.strstart+258;do;while(r===o[++i]&&r===o[++i]&&r===o[++i]&&r===o[++i]&&r===o[++i]&&r===o[++i]&&r===o[++i]&&r===o[++i]&&i<a);e.match_length=258-(a-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(n=P(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(n=P(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),n&&(U(e,!1),e.strm.avail_out===0))return 1}return e.insert=0,t===I?(U(e,!0),e.strm.avail_out===0?3:4):e.sym_next&&(U(e,!1),e.strm.avail_out===0)?1:2},Le=(e,t)=>{let n;for(;;){if(e.lookahead===0&&(G(e),e.lookahead===0)){if(t===F)return 1;break}if(e.match_length=0,n=P(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,n&&(U(e,!1),e.strm.avail_out===0))return 1}return e.insert=0,t===I?(U(e,!0),e.strm.avail_out===0?3:4):e.sym_next&&(U(e,!1),e.strm.avail_out===0)?1:2};function q(e,t,n,r,i){this.good_length=e,this.max_lazy=t,this.nice_length=n,this.max_chain=r,this.func=i}let Re=[new q(0,0,0,0,Pe),new q(4,4,8,4,Fe),new q(4,5,16,8,Fe),new q(4,6,32,32,Fe),new q(4,4,16,16,K),new q(8,16,32,32,K),new q(8,16,128,128,K),new q(8,32,128,256,K),new q(32,128,258,1024,K),new q(32,258,258,4096,K)],ze=e=>{e.window_size=2*e.w_size,B(e.head),e.max_lazy_match=Re[e.level].max_lazy,e.good_match=Re[e.level].good_length,e.nice_match=Re[e.level].nice_length,e.max_chain_length=Re[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=2,e.match_available=0,e.ins_h=0};function Be(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Oe,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(573*2),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),B(this.dyn_ltree),B(this.dyn_dtree),B(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),B(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),B(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}let Ve=e=>{if(!e)return 1;let t=e.state;return+(!t||t.strm!==e||t.status!==42&&t.status!==57&&t.status!==69&&t.status!==73&&t.status!==91&&t.status!==103&&t.status!==113&&t.status!==666)},He=e=>{if(Ve(e))return z(e,R);e.total_in=e.total_out=0,e.data_type=De;let t=e.state;return t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap===2?57:t.wrap?42:113,e.adler=t.wrap===2?0:1,t.last_flush=-2,de(t),L},Ue=e=>{let t=He(e);return t===L&&ze(e.state),t},We=(e,t)=>Ve(e)||e.state.wrap!==2?R:(e.state.gzhead=t,L),Ge=(e,t,n,r,i,a)=>{if(!e)return R;let o=1;if(t===xe&&(t=6),r<0?(o=0,r=-r):r>15&&(o=2,r-=16),i<1||i>9||n!==Oe||r<8||r>15||t<0||t>9||a<0||a>Te||r===8&&o!==1)return z(e,R);r===8&&(r=9);let s=new Be;return e.state=s,s.strm=e,s.status=42,s.wrap=o,s.gzhead=null,s.w_bits=r,s.w_size=1<<s.w_bits,s.w_mask=s.w_size-1,s.hash_bits=i+7,s.hash_size=1<<s.hash_bits,s.hash_mask=s.hash_size-1,s.hash_shift=~~((s.hash_bits+3-1)/3),s.window=new Uint8Array(s.w_size*2),s.head=new Uint16Array(s.hash_size),s.prev=new Uint16Array(s.w_size),s.lit_bufsize=1<<i+6,s.pending_buf_size=s.lit_bufsize*4,s.pending_buf=new Uint8Array(s.pending_buf_size),s.sym_buf=s.lit_bufsize,s.sym_end=(s.lit_bufsize-1)*3,s.level=t,s.strategy=a,s.method=n,Ue(e)};var Ke={deflateInit:(e,t)=>Ge(e,t,Oe,15,8,Ee),deflateInit2:Ge,deflateReset:Ue,deflateResetKeep:He,deflateSetHeader:We,deflate:(e,t)=>{if(Ve(e)||t>_e||t<0)return e?z(e,R):R;let n=e.state;if(!e.output||e.avail_in!==0&&!e.input||n.status===666&&t!==I)return z(e,e.avail_out===0?be:R);let r=n.last_flush;if(n.last_flush=t,n.pending!==0){if(H(e),e.avail_out===0)return n.last_flush=-1,L}else if(e.avail_in===0&&ke(t)<=ke(r)&&t!==I)return z(e,be);if(n.status===666&&e.avail_in!==0)return z(e,be);if(n.status===42&&n.wrap===0&&(n.status=113),n.status===42){let t=Oe+(n.w_bits-8<<4)<<8,r=-1;if(r=n.strategy>=Ce||n.level<2?0:n.level<6?1:n.level===6?2:3,t|=r<<6,n.strstart!==0&&(t|=32),t+=31-t%31,je(n,t),n.strstart!==0&&(je(n,e.adler>>>16),je(n,e.adler&65535)),e.adler=1,n.status=113,H(e),n.pending!==0)return n.last_flush=-1,L}if(n.status===57){if(e.adler=0,W(n,31),W(n,139),W(n,8),n.gzhead)W(n,+!!n.gzhead.text+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),W(n,n.gzhead.time&255),W(n,n.gzhead.time>>8&255),W(n,n.gzhead.time>>16&255),W(n,n.gzhead.time>>24&255),W(n,n.level===9?2:n.strategy>=Ce||n.level<2?4:0),W(n,n.gzhead.os&255),n.gzhead.extra&&n.gzhead.extra.length&&(W(n,n.gzhead.extra.length&255),W(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=j(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69;else if(W(n,0),W(n,0),W(n,0),W(n,0),W(n,0),W(n,n.level===9?2:n.strategy>=Ce||n.level<2?4:0),W(n,3),n.status=113,H(e),n.pending!==0)return n.last_flush=-1,L}if(n.status===69){if(n.gzhead.extra){let t=n.pending,r=(n.gzhead.extra.length&65535)-n.gzindex;for(;n.pending+r>n.pending_buf_size;){let i=n.pending_buf_size-n.pending;if(n.pending_buf.set(n.gzhead.extra.subarray(n.gzindex,n.gzindex+i),n.pending),n.pending=n.pending_buf_size,n.gzhead.hcrc&&n.pending>t&&(e.adler=j(e.adler,n.pending_buf,n.pending-t,t)),n.gzindex+=i,H(e),n.pending!==0)return n.last_flush=-1,L;t=0,r-=i}let i=new Uint8Array(n.gzhead.extra);n.pending_buf.set(i.subarray(n.gzindex,n.gzindex+r),n.pending),n.pending+=r,n.gzhead.hcrc&&n.pending>t&&(e.adler=j(e.adler,n.pending_buf,n.pending-t,t)),n.gzindex=0}n.status=73}if(n.status===73){if(n.gzhead.name){let t=n.pending,r;do{if(n.pending===n.pending_buf_size){if(n.gzhead.hcrc&&n.pending>t&&(e.adler=j(e.adler,n.pending_buf,n.pending-t,t)),H(e),n.pending!==0)return n.last_flush=-1,L;t=0}r=n.gzindex<n.gzhead.name.length?n.gzhead.name.charCodeAt(n.gzindex++)&255:0,W(n,r)}while(r!==0);n.gzhead.hcrc&&n.pending>t&&(e.adler=j(e.adler,n.pending_buf,n.pending-t,t)),n.gzindex=0}n.status=91}if(n.status===91){if(n.gzhead.comment){let t=n.pending,r;do{if(n.pending===n.pending_buf_size){if(n.gzhead.hcrc&&n.pending>t&&(e.adler=j(e.adler,n.pending_buf,n.pending-t,t)),H(e),n.pending!==0)return n.last_flush=-1,L;t=0}r=n.gzindex<n.gzhead.comment.length?n.gzhead.comment.charCodeAt(n.gzindex++)&255:0,W(n,r)}while(r!==0);n.gzhead.hcrc&&n.pending>t&&(e.adler=j(e.adler,n.pending_buf,n.pending-t,t))}n.status=103}if(n.status===103){if(n.gzhead.hcrc){if(n.pending+2>n.pending_buf_size&&(H(e),n.pending!==0))return n.last_flush=-1,L;W(n,e.adler&255),W(n,e.adler>>8&255),e.adler=0}if(n.status=113,H(e),n.pending!==0)return n.last_flush=-1,L}if(e.avail_in!==0||n.lookahead!==0||t!==F&&n.status!==666){let r=n.level===0?Pe(n,t):n.strategy===Ce?Le(n,t):n.strategy===we?Ie(n,t):Re[n.level].func(n,t);if((r===3||r===4)&&(n.status=666),r===1||r===3)return e.avail_out===0&&(n.last_flush=-1),L;if(r===2&&(t===he?me(n):t!==_e&&(fe(n,0,0,!1),t===ge&&(B(n.head),n.lookahead===0&&(n.strstart=0,n.block_start=0,n.insert=0))),H(e),e.avail_out===0))return n.last_flush=-1,L}return t===I?n.wrap<=0?ve:(n.wrap===2?(W(n,e.adler&255),W(n,e.adler>>8&255),W(n,e.adler>>16&255),W(n,e.adler>>24&255),W(n,e.total_in&255),W(n,e.total_in>>8&255),W(n,e.total_in>>16&255),W(n,e.total_in>>24&255)):(je(n,e.adler>>>16),je(n,e.adler&65535)),H(e),n.wrap>0&&(n.wrap=-n.wrap),n.pending===0?ve:L):L},deflateEnd:e=>{if(Ve(e))return R;let t=e.state.status;return e.state=null,t===113?z(e,ye):L},deflateSetDictionary:(e,t)=>{let n=t.length;if(Ve(e))return R;let r=e.state,i=r.wrap;if(i===2||i===1&&r.status!==42||r.lookahead)return R;if(i===1&&(e.adler=le(e.adler,t,n,0)),r.wrap=0,n>=r.w_size){i===0&&(B(r.head),r.strstart=0,r.block_start=0,r.insert=0);let e=new Uint8Array(r.w_size);e.set(t.subarray(n-r.w_size,n),0),t=e,n=r.w_size}let a=e.avail_in,o=e.next_in,s=e.input;for(e.avail_in=n,e.next_in=0,e.input=t,G(r);r.lookahead>=3;){let e=r.strstart,t=r.lookahead-2;do r.ins_h=V(r,r.ins_h,r.window[e+3-1]),r.prev[e&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=e,e++;while(--t);r.strstart=e,r.lookahead=2,G(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=2,r.match_available=0,e.next_in=o,e.input=s,e.avail_in=a,r.wrap=i,L},deflateInfo:`pako deflate (from Nodeca project)`};let qe=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var Je={assign:function(e){let t=Array.prototype.slice.call(arguments,1);for(;t.length;){let n=t.shift();if(n){if(typeof n!=`object`)throw TypeError(n+`must be non-object`);for(let t in n)qe(n,t)&&(e[t]=n[t])}}return e},flattenChunks:e=>{let t=0;for(let n=0,r=e.length;n<r;n++)t+=e[n].length;let n=new Uint8Array(t);for(let t=0,r=0,i=e.length;t<i;t++){let i=e[t];n.set(i,r),r+=i.length}return n}};let Ye=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{Ye=!1}let Xe=new Uint8Array(256);for(let e=0;e<256;e++)Xe[e]=e>=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;Xe[254]=Xe[254]=1;var Ze=e=>{if(typeof TextEncoder==`function`&&TextEncoder.prototype.encode)return new TextEncoder().encode(e);let t,n,r,i,a,o=e.length,s=0;for(i=0;i<o;i++)n=e.charCodeAt(i),(n&64512)==55296&&i+1<o&&(r=e.charCodeAt(i+1),(r&64512)==56320&&(n=65536+(n-55296<<10)+(r-56320),i++)),s+=n<128?1:n<2048?2:n<65536?3:4;for(t=new Uint8Array(s),a=0,i=0;a<s;i++)n=e.charCodeAt(i),(n&64512)==55296&&i+1<o&&(r=e.charCodeAt(i+1),(r&64512)==56320&&(n=65536+(n-55296<<10)+(r-56320),i++)),n<128?t[a++]=n:n<2048?(t[a++]=192|n>>>6,t[a++]=128|n&63):n<65536?(t[a++]=224|n>>>12,t[a++]=128|n>>>6&63,t[a++]=128|n&63):(t[a++]=240|n>>>18,t[a++]=128|n>>>12&63,t[a++]=128|n>>>6&63,t[a++]=128|n&63);return t};let Qe=(e,t)=>{if(t<65534&&e.subarray&&Ye)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let n=``;for(let r=0;r<t;r++)n+=String.fromCharCode(e[r]);return n};var $e={string2buf:Ze,buf2string:(e,t)=>{let n=t||e.length;if(typeof TextDecoder==`function`&&TextDecoder.prototype.decode)return new TextDecoder().decode(e.subarray(0,t));let r,i,a=Array(n*2);for(i=0,r=0;r<n;){let t=e[r++];if(t<128){a[i++]=t;continue}let o=Xe[t];if(o>4){a[i++]=65533,r+=o-1;continue}for(t&=o===2?31:o===3?15:7;o>1&&r<n;)t=t<<6|e[r++]&63,o--;if(o>1){a[i++]=65533;continue}t<65536?a[i++]=t:(t-=65536,a[i++]=55296|t>>10&1023,a[i++]=56320|t&1023)}return Qe(a,i)},utf8border:(e,t)=>{t||=e.length,t>e.length&&(t=e.length);let n=t-1;for(;n>=0&&(e[n]&192)==128;)n--;return n<0||n===0?t:n+Xe[e[n]]>t?n:t}};function et(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=``,this.state=null,this.data_type=2,this.adler=0}var tt=et;let nt=Object.prototype.toString,{Z_NO_FLUSH:rt,Z_SYNC_FLUSH:it,Z_FULL_FLUSH:at,Z_FINISH:ot,Z_OK:st,Z_STREAM_END:ct,Z_DEFAULT_COMPRESSION:lt,Z_DEFAULT_STRATEGY:ut,Z_DEFLATED:dt}=N;function ft(e){this.options=Je.assign({level:lt,method:dt,chunkSize:16384,windowBits:15,memLevel:8,strategy:ut},e||{});let t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=``,this.ended=!1,this.chunks=[],this.strm=new tt,this.strm.avail_out=0;let n=Ke.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(n!==st)throw Error(M[n]);if(t.header&&Ke.deflateSetHeader(this.strm,t.header),t.dictionary){let e;if(e=typeof t.dictionary==`string`?$e.string2buf(t.dictionary):nt.call(t.dictionary)===`[object ArrayBuffer]`?new Uint8Array(t.dictionary):t.dictionary,n=Ke.deflateSetDictionary(this.strm,e),n!==st)throw Error(M[n]);this._dict_set=!0}}ft.prototype.push=function(e,t){let n=this.strm,r=this.options.chunkSize,i,a;if(this.ended)return!1;for(a=t===~~t?t:t===!0?ot:rt,typeof e==`string`?n.input=$e.string2buf(e):nt.call(e)===`[object ArrayBuffer]`?n.input=new Uint8Array(e):n.input=e,n.next_in=0,n.avail_in=n.input.length;;){if(n.avail_out===0&&(n.output=new Uint8Array(r),n.next_out=0,n.avail_out=r),(a===it||a===at)&&n.avail_out<=6){this.onData(n.output.subarray(0,n.next_out)),n.avail_out=0;continue}if(i=Ke.deflate(n,a),i===ct)return n.next_out>0&&this.onData(n.output.subarray(0,n.next_out)),i=Ke.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===st;if(n.avail_out===0){this.onData(n.output);continue}if(a>0&&n.next_out>0){this.onData(n.output.subarray(0,n.next_out)),n.avail_out=0;continue}if(n.avail_in===0)break}return!0},ft.prototype.onData=function(e){this.chunks.push(e)},ft.prototype.onEnd=function(e){e===st&&(this.result=Je.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function pt(e,t){let n=new ft(t);if(n.push(e,!0),n.err)throw n.msg||M[n.err];return n.result}function mt(e,t){return t||={},t.raw=!0,pt(e,t)}function ht(e,t){return t||={},t.gzip=!0,pt(e,t)}var gt={Deflate:ft,deflate:pt,deflateRaw:mt,gzip:ht,constants:N};let _t=16209;var vt=function(e,t){let n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,S,C,w,T,E=e.state;n=e.next_in,w=e.input,r=n+(e.avail_in-5),i=e.next_out,T=e.output,a=i-(t-e.avail_out),o=i+(e.avail_out-257),s=E.dmax,c=E.wsize,l=E.whave,u=E.wnext,d=E.window,f=E.hold,p=E.bits,m=E.lencode,h=E.distcode,g=(1<<E.lenbits)-1,_=(1<<E.distbits)-1;top:do{p<15&&(f+=w[n++]<<p,p+=8,f+=w[n++]<<p,p+=8),v=m[f&g];dolen:for(;;){if(y=v>>>24,f>>>=y,p-=y,y=v>>>16&255,y===0)T[i++]=v&65535;else if(y&16){b=v&65535,y&=15,y&&(p<y&&(f+=w[n++]<<p,p+=8),b+=f&(1<<y)-1,f>>>=y,p-=y),p<15&&(f+=w[n++]<<p,p+=8,f+=w[n++]<<p,p+=8),v=h[f&_];dodist:for(;;){if(y=v>>>24,f>>>=y,p-=y,y=v>>>16&255,y&16){if(x=v&65535,y&=15,p<y&&(f+=w[n++]<<p,p+=8,p<y&&(f+=w[n++]<<p,p+=8)),x+=f&(1<<y)-1,x>s){e.msg=`invalid distance too far back`,E.mode=_t;break top}if(f>>>=y,p-=y,y=i-a,x>y){if(y=x-y,y>l&&E.sane){e.msg=`invalid distance too far back`,E.mode=_t;break top}if(S=0,C=d,u===0){if(S+=c-y,y<b){b-=y;do T[i++]=d[S++];while(--y);S=i-x,C=T}}else if(u<y){if(S+=c+u-y,y-=u,y<b){b-=y;do T[i++]=d[S++];while(--y);if(S=0,u<b){y=u,b-=y;do T[i++]=d[S++];while(--y);S=i-x,C=T}}}else if(S+=u-y,y<b){b-=y;do T[i++]=d[S++];while(--y);S=i-x,C=T}for(;b>2;)T[i++]=C[S++],T[i++]=C[S++],T[i++]=C[S++],b-=3;b&&(T[i++]=C[S++],b>1&&(T[i++]=C[S++]))}else{S=i-x;do T[i++]=T[S++],T[i++]=T[S++],T[i++]=T[S++],b-=3;while(b>2);b&&(T[i++]=T[S++],b>1&&(T[i++]=T[S++]))}}else if(y&64){e.msg=`invalid distance code`,E.mode=_t;break top}else{v=h[(v&65535)+(f&(1<<y)-1)];continue dodist}break}}else if(!(y&64)){v=m[(v&65535)+(f&(1<<y)-1)];continue dolen}else if(y&32){E.mode=16191;break top}else{e.msg=`invalid literal/length code`,E.mode=_t;break top}break}}while(n<r&&i<o);b=p>>3,n-=b,p-=b<<3,f&=(1<<p)-1,e.next_in=n,e.next_out=i,e.avail_in=n<r?5+(r-n):5-(n-r),e.avail_out=i<o?257+(o-i):257-(i-o),E.hold=f,E.bits=p};let yt=new Uint16Array([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0]),bt=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),xt=new Uint16Array([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0]),St=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]);var Ct=(e,t,n,r,i,a,o,s)=>{let c=s.bits,l=0,u=0,d=0,f=0,p=0,m=0,h=0,g=0,_=0,v=0,y,b,x,S,C,w=null,T,E=new Uint16Array(16),D=new Uint16Array(16),O=null,ee,k,A;for(l=0;l<=15;l++)E[l]=0;for(u=0;u<r;u++)E[t[n+u]]++;for(p=c,f=15;f>=1&&E[f]===0;f--);if(p>f&&(p=f),f===0)return i[a++]=20971520,i[a++]=20971520,s.bits=1,0;for(d=1;d<f&&E[d]===0;d++);for(p<d&&(p=d),g=1,l=1;l<=15;l++)if(g<<=1,g-=E[l],g<0)return-1;if(g>0&&(e===0||f!==1))return-1;for(D[1]=0,l=1;l<15;l++)D[l+1]=D[l]+E[l];for(u=0;u<r;u++)t[n+u]!==0&&(o[D[t[n+u]]++]=u);if(e===0?(w=O=o,T=20):e===1?(w=yt,O=bt,T=257):(w=xt,O=St,T=0),v=0,u=0,l=d,C=a,m=p,h=0,x=-1,_=1<<p,S=_-1,e===1&&_>852||e===2&&_>592)return 1;for(;;){ee=l-h,o[u]+1<T?(k=0,A=o[u]):o[u]>=T?(k=O[o[u]-T],A=w[o[u]-T]):(k=96,A=0),y=1<<l-h,b=1<<m,d=b;do b-=y,i[C+(v>>h)+b]=ee<<24|k<<16|A|0;while(b!==0);for(y=1<<l-1;v&y;)y>>=1;if(y===0?v=0:(v&=y-1,v+=y),u++,--E[l]===0){if(l===f)break;l=t[n+o[u]]}if(l>p&&(v&S)!==x){for(h===0&&(h=p),C+=d,m=l-h,g=1<<m;m+h<f&&(g-=E[m+h],!(g<=0));)m++,g<<=1;if(_+=1<<m,e===1&&_>852||e===2&&_>592)return 1;x=v&S,i[x]=p<<24|m<<16|C-a|0}}return v!==0&&(i[C+v]=l-h<<24|4194304),s.bits=p,0};let{Z_FINISH:wt,Z_BLOCK:Tt,Z_TREES:Et,Z_OK:J,Z_STREAM_END:Dt,Z_NEED_DICT:Ot,Z_STREAM_ERROR:Y,Z_DATA_ERROR:kt,Z_MEM_ERROR:At,Z_BUF_ERROR:jt,Z_DEFLATED:Mt}=N,Nt=16180,Pt=16181,Ft=16182,It=16183,Lt=16184,Rt=16185,zt=16186,Bt=16187,Vt=16188,Ht=16189,Ut=16190,X=16191,Wt=16192,Gt=16193,Kt=16194,qt=16195,Jt=16196,Yt=16197,Xt=16198,Zt=16199,Qt=16200,$t=16201,en=16202,tn=16203,nn=16204,rn=16205,an=16206,on=16207,sn=16208,Z=16209,cn=16210,ln=16211,un=e=>(e>>>24&255)+(e>>>8&65280)+((e&65280)<<8)+((e&255)<<24);function dn(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}let Q=e=>{if(!e)return 1;let t=e.state;return+(!t||t.strm!==e||t.mode<Nt||t.mode>ln)},fn=e=>{if(Q(e))return Y;let t=e.state;return e.total_in=e.total_out=t.total=0,e.msg=``,t.wrap&&(e.adler=t.wrap&1),t.mode=Nt,t.last=0,t.havedict=0,t.flags=-1,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,J},pn=e=>{if(Q(e))return Y;let t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,fn(e)},mn=(e,t)=>{let n;if(Q(e))return Y;let r=e.state;return t<0?(n=0,t=-t):(n=(t>>4)+5,t<48&&(t&=15)),t&&(t<8||t>15)?Y:(r.window!==null&&r.wbits!==t&&(r.window=null),r.wrap=n,r.wbits=t,pn(e))},hn=(e,t)=>{if(!e)return Y;let n=new dn;e.state=n,n.strm=e,n.window=null,n.mode=Nt;let r=mn(e,t);return r!==J&&(e.state=null),r},gn=e=>hn(e,15),_n=!0,vn,yn,bn=e=>{if(_n){vn=new Int32Array(512),yn=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(Ct(1,e.lens,0,288,vn,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;Ct(2,e.lens,0,32,yn,0,e.work,{bits:5}),_n=!1}e.lencode=vn,e.lenbits=9,e.distcode=yn,e.distbits=5},xn=(e,t,n,r)=>{let i,a=e.state;return a.window===null&&(a.wsize=1<<a.wbits,a.wnext=0,a.whave=0,a.window=new Uint8Array(a.wsize)),r>=a.wsize?(a.window.set(t.subarray(n-a.wsize,n),0),a.wnext=0,a.whave=a.wsize):(i=a.wsize-a.wnext,i>r&&(i=r),a.window.set(t.subarray(n-r,n-r+i),a.wnext),r-=i,r?(a.window.set(t.subarray(n-r,n),0),a.wnext=r,a.whave=a.wsize):(a.wnext+=i,a.wnext===a.wsize&&(a.wnext=0),a.whave<a.wsize&&(a.whave+=i))),0};var $={inflateReset:pn,inflateReset2:mn,inflateResetKeep:fn,inflateInit:gn,inflateInit2:hn,inflate:(e,t)=>{let n,r,i,a,o,s,c,l,u,d,f,p,m,h,g=0,_,v,y,b,x,S,C,w,T=new Uint8Array(4),E,D,O=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(Q(e)||!e.output||!e.input&&e.avail_in!==0)return Y;n=e.state,n.mode===X&&(n.mode=Wt),o=e.next_out,i=e.output,c=e.avail_out,a=e.next_in,r=e.input,s=e.avail_in,l=n.hold,u=n.bits,d=s,f=c,w=J;inf_leave:for(;;)switch(n.mode){case Nt:if(n.wrap===0){n.mode=Wt;break}for(;u<16;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}if(n.wrap&2&&l===35615){n.wbits===0&&(n.wbits=15),n.check=0,T[0]=l&255,T[1]=l>>>8&255,n.check=j(n.check,T,2,0),l=0,u=0,n.mode=Pt;break}if(n.head&&(n.head.done=!1),!(n.wrap&1)||(((l&255)<<8)+(l>>8))%31){e.msg=`incorrect header check`,n.mode=Z;break}if((l&15)!==Mt){e.msg=`unknown compression method`,n.mode=Z;break}if(l>>>=4,u-=4,C=(l&15)+8,n.wbits===0&&(n.wbits=C),C>15||C>n.wbits){e.msg=`invalid window size`,n.mode=Z;break}n.dmax=1<<n.wbits,n.flags=0,e.adler=n.check=1,n.mode=l&512?Ht:X,l=0,u=0;break;case Pt:for(;u<16;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}if(n.flags=l,(n.flags&255)!==Mt){e.msg=`unknown compression method`,n.mode=Z;break}if(n.flags&57344){e.msg=`unknown header flags set`,n.mode=Z;break}n.head&&(n.head.text=l>>8&1),n.flags&512&&n.wrap&4&&(T[0]=l&255,T[1]=l>>>8&255,n.check=j(n.check,T,2,0)),l=0,u=0,n.mode=Ft;case Ft:for(;u<32;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}n.head&&(n.head.time=l),n.flags&512&&n.wrap&4&&(T[0]=l&255,T[1]=l>>>8&255,T[2]=l>>>16&255,T[3]=l>>>24&255,n.check=j(n.check,T,4,0)),l=0,u=0,n.mode=It;case It:for(;u<16;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}n.head&&(n.head.xflags=l&255,n.head.os=l>>8),n.flags&512&&n.wrap&4&&(T[0]=l&255,T[1]=l>>>8&255,n.check=j(n.check,T,2,0)),l=0,u=0,n.mode=Lt;case Lt:if(n.flags&1024){for(;u<16;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}n.length=l,n.head&&(n.head.extra_len=l),n.flags&512&&n.wrap&4&&(T[0]=l&255,T[1]=l>>>8&255,n.check=j(n.check,T,2,0)),l=0,u=0}else n.head&&(n.head.extra=null);n.mode=Rt;case Rt:if(n.flags&1024&&(p=n.length,p>s&&(p=s),p&&(n.head&&(C=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Uint8Array(n.head.extra_len)),n.head.extra.set(r.subarray(a,a+p),C)),n.flags&512&&n.wrap&4&&(n.check=j(n.check,r,p,a)),s-=p,a+=p,n.length-=p),n.length))break inf_leave;n.length=0,n.mode=zt;case zt:if(n.flags&2048){if(s===0)break inf_leave;p=0;do C=r[a+ p++],n.head&&C&&n.length<65536&&(n.head.name+=String.fromCharCode(C));while(C&&p<s);if(n.flags&512&&n.wrap&4&&(n.check=j(n.check,r,p,a)),s-=p,a+=p,C)break inf_leave}else n.head&&(n.head.name=null);n.length=0,n.mode=Bt;case Bt:if(n.flags&4096){if(s===0)break inf_leave;p=0;do C=r[a+ p++],n.head&&C&&n.length<65536&&(n.head.comment+=String.fromCharCode(C));while(C&&p<s);if(n.flags&512&&n.wrap&4&&(n.check=j(n.check,r,p,a)),s-=p,a+=p,C)break inf_leave}else n.head&&(n.head.comment=null);n.mode=Vt;case Vt:if(n.flags&512){for(;u<16;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}if(n.wrap&4&&l!==(n.check&65535)){e.msg=`header crc mismatch`,n.mode=Z;break}l=0,u=0}n.head&&(n.head.hcrc=n.flags>>9&1,n.head.done=!0),e.adler=n.check=0,n.mode=X;break;case Ht:for(;u<32;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}e.adler=n.check=un(l),l=0,u=0,n.mode=Ut;case Ut:if(n.havedict===0)return e.next_out=o,e.avail_out=c,e.next_in=a,e.avail_in=s,n.hold=l,n.bits=u,Ot;e.adler=n.check=1,n.mode=X;case X:if(t===Tt||t===Et)break inf_leave;case Wt:if(n.last){l>>>=u&7,u-=u&7,n.mode=an;break}for(;u<3;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}switch(n.last=l&1,l>>>=1,--u,l&3){case 0:n.mode=Gt;break;case 1:if(bn(n),n.mode=Zt,t===Et){l>>>=2,u-=2;break inf_leave}break;case 2:n.mode=Jt;break;case 3:e.msg=`invalid block type`,n.mode=Z}l>>>=2,u-=2;break;case Gt:for(l>>>=u&7,u-=u&7;u<32;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}if((l&65535)!=(l>>>16^65535)){e.msg=`invalid stored block lengths`,n.mode=Z;break}if(n.length=l&65535,l=0,u=0,n.mode=Kt,t===Et)break inf_leave;case Kt:n.mode=qt;case qt:if(p=n.length,p){if(p>s&&(p=s),p>c&&(p=c),p===0)break inf_leave;i.set(r.subarray(a,a+p),o),s-=p,a+=p,c-=p,o+=p,n.length-=p;break}n.mode=X;break;case Jt:for(;u<14;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}if(n.nlen=(l&31)+257,l>>>=5,u-=5,n.ndist=(l&31)+1,l>>>=5,u-=5,n.ncode=(l&15)+4,l>>>=4,u-=4,n.nlen>286||n.ndist>30){e.msg=`too many length or distance symbols`,n.mode=Z;break}n.have=0,n.mode=Yt;case Yt:for(;n.have<n.ncode;){for(;u<3;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}n.lens[O[n.have++]]=l&7,l>>>=3,u-=3}for(;n.have<19;)n.lens[O[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,E={bits:n.lenbits},w=Ct(0,n.lens,0,19,n.lencode,0,n.work,E),n.lenbits=E.bits,w){e.msg=`invalid code lengths set`,n.mode=Z;break}n.have=0,n.mode=Xt;case Xt:for(;n.have<n.nlen+n.ndist;){for(;g=n.lencode[l&(1<<n.lenbits)-1],_=g>>>24,v=g>>>16&255,y=g&65535,!(_<=u);){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}if(y<16)l>>>=_,u-=_,n.lens[n.have++]=y;else{if(y===16){for(D=_+2;u<D;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}if(l>>>=_,u-=_,n.have===0){e.msg=`invalid bit length repeat`,n.mode=Z;break}C=n.lens[n.have-1],p=3+(l&3),l>>>=2,u-=2}else if(y===17){for(D=_+3;u<D;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}l>>>=_,u-=_,C=0,p=3+(l&7),l>>>=3,u-=3}else{for(D=_+7;u<D;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}l>>>=_,u-=_,C=0,p=11+(l&127),l>>>=7,u-=7}if(n.have+p>n.nlen+n.ndist){e.msg=`invalid bit length repeat`,n.mode=Z;break}for(;p--;)n.lens[n.have++]=C}}if(n.mode===Z)break;if(n.lens[256]===0){e.msg=`invalid code -- missing end-of-block`,n.mode=Z;break}if(n.lenbits=9,E={bits:n.lenbits},w=Ct(1,n.lens,0,n.nlen,n.lencode,0,n.work,E),n.lenbits=E.bits,w){e.msg=`invalid literal/lengths set`,n.mode=Z;break}if(n.distbits=6,n.distcode=n.distdyn,E={bits:n.distbits},w=Ct(2,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,E),n.distbits=E.bits,w){e.msg=`invalid distances set`,n.mode=Z;break}if(n.mode=Zt,t===Et)break inf_leave;case Zt:n.mode=Qt;case Qt:if(s>=6&&c>=258){e.next_out=o,e.avail_out=c,e.next_in=a,e.avail_in=s,n.hold=l,n.bits=u,vt(e,f),o=e.next_out,i=e.output,c=e.avail_out,a=e.next_in,r=e.input,s=e.avail_in,l=n.hold,u=n.bits,n.mode===X&&(n.back=-1);break}for(n.back=0;g=n.lencode[l&(1<<n.lenbits)-1],_=g>>>24,v=g>>>16&255,y=g&65535,!(_<=u);){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}if(v&&!(v&240)){for(b=_,x=v,S=y;g=n.lencode[S+((l&(1<<b+x)-1)>>b)],_=g>>>24,v=g>>>16&255,y=g&65535,!(b+_<=u);){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}l>>>=b,u-=b,n.back+=b}if(l>>>=_,u-=_,n.back+=_,n.length=y,v===0){n.mode=rn;break}if(v&32){n.back=-1,n.mode=X;break}if(v&64){e.msg=`invalid literal/length code`,n.mode=Z;break}n.extra=v&15,n.mode=$t;case $t:if(n.extra){for(D=n.extra;u<D;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}n.length+=l&(1<<n.extra)-1,l>>>=n.extra,u-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=en;case en:for(;g=n.distcode[l&(1<<n.distbits)-1],_=g>>>24,v=g>>>16&255,y=g&65535,!(_<=u);){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}if(!(v&240)){for(b=_,x=v,S=y;g=n.distcode[S+((l&(1<<b+x)-1)>>b)],_=g>>>24,v=g>>>16&255,y=g&65535,!(b+_<=u);){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}l>>>=b,u-=b,n.back+=b}if(l>>>=_,u-=_,n.back+=_,v&64){e.msg=`invalid distance code`,n.mode=Z;break}n.offset=y,n.extra=v&15,n.mode=tn;case tn:if(n.extra){for(D=n.extra;u<D;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}n.offset+=l&(1<<n.extra)-1,l>>>=n.extra,u-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){e.msg=`invalid distance too far back`,n.mode=Z;break}n.mode=nn;case nn:if(c===0)break inf_leave;if(p=f-c,n.offset>p){if(p=n.offset-p,p>n.whave&&n.sane){e.msg=`invalid distance too far back`,n.mode=Z;break}p>n.wnext?(p-=n.wnext,m=n.wsize-p):m=n.wnext-p,p>n.length&&(p=n.length),h=n.window}else h=i,m=o-n.offset,p=n.length;p>c&&(p=c),c-=p,n.length-=p;do i[o++]=h[m++];while(--p);n.length===0&&(n.mode=Qt);break;case rn:if(c===0)break inf_leave;i[o++]=n.length,c--,n.mode=Qt;break;case an:if(n.wrap){for(;u<32;){if(s===0)break inf_leave;s--,l|=r[a++]<<u,u+=8}if(f-=c,e.total_out+=f,n.total+=f,n.wrap&4&&f&&(e.adler=n.check=n.flags?j(n.check,i,f,o-f):le(n.check,i,f,o-f)),f=c,n.wrap&4&&(n.flags?l:un(l))!==n.check){e.msg=`incorrect data check`,n.mode=Z;break}l=0,u=0}n.mode=on;case on:if(n.wrap&&n.flags){for(;u<32;){if(s===0)break inf_leave;s--,l+=r[a++]<<u,u+=8}if(n.wrap&4&&l!==(n.total&4294967295)){e.msg=`incorrect length check`,n.mode=Z;break}l=0,u=0}n.mode=sn;case sn:w=Dt;break inf_leave;case Z:w=kt;break inf_leave;case cn:return At;case ln:default:return Y}return e.next_out=o,e.avail_out=c,e.next_in=a,e.avail_in=s,n.hold=l,n.bits=u,(n.wsize||f!==e.avail_out&&n.mode<Z&&(n.mode<an||t!==wt))&&xn(e,e.output,e.next_out,f-e.avail_out),d-=e.avail_in,f-=e.avail_out,e.total_in+=d,e.total_out+=f,n.total+=f,n.wrap&4&&f&&(e.adler=n.check=n.flags?j(n.check,i,f,e.next_out-f):le(n.check,i,f,e.next_out-f)),e.data_type=n.bits+(n.last?64:0)+(n.mode===X?128:0)+(n.mode===Zt||n.mode===Kt?256:0),(d===0&&f===0||t===wt)&&w===J&&(w=jt),w},inflateEnd:e=>{if(Q(e))return Y;let t=e.state;return t.window&&=null,e.state=null,J},inflateGetHeader:(e,t)=>{if(Q(e))return Y;let n=e.state;return n.wrap&2?(n.head=t,t.done=!1,J):Y},inflateSetDictionary:(e,t)=>{let n=t.length,r,i,a;return Q(e)||(r=e.state,r.wrap!==0&&r.mode!==Ut)?Y:r.mode===Ut&&(i=1,i=le(i,t,n,0),i!==r.check)?kt:(a=xn(e,t,n,n),a?(r.mode=cn,At):(r.havedict=1,J))},inflateInfo:`pako inflate (from Nodeca project)`};function Sn(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=``,this.comment=``,this.hcrc=0,this.done=!1}var Cn=Sn;let wn=Object.prototype.toString,{Z_NO_FLUSH:Tn,Z_FINISH:En,Z_OK:Dn,Z_STREAM_END:On,Z_NEED_DICT:kn,Z_STREAM_ERROR:An,Z_DATA_ERROR:jn,Z_MEM_ERROR:Mn}=N;function Nn(e){this.options=Je.assign({chunkSize:1024*64,windowBits:15,to:``},e||{});let t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,t.windowBits===0&&(t.windowBits=-15)),t.windowBits>=0&&t.windowBits<16&&!(e&&e.windowBits)&&(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(t.windowBits&15||(t.windowBits|=15)),this.err=0,this.msg=``,this.ended=!1,this.chunks=[],this.strm=new tt,this.strm.avail_out=0;let n=$.inflateInit2(this.strm,t.windowBits);if(n!==Dn||(this.header=new Cn,$.inflateGetHeader(this.strm,this.header),t.dictionary&&(typeof t.dictionary==`string`?t.dictionary=$e.string2buf(t.dictionary):wn.call(t.dictionary)===`[object ArrayBuffer]`&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(n=$.inflateSetDictionary(this.strm,t.dictionary),n!==Dn))))throw Error(M[n])}Nn.prototype.push=function(e,t){let n=this.strm,r=this.options.chunkSize,i=this.options.dictionary,a,o,s;if(this.ended)return!1;for(o=t===~~t?t:t===!0?En:Tn,wn.call(e)===`[object ArrayBuffer]`?n.input=new Uint8Array(e):n.input=e,n.next_in=0,n.avail_in=n.input.length;;){for(n.avail_out===0&&(n.output=new Uint8Array(r),n.next_out=0,n.avail_out=r),a=$.inflate(n,o),a===kn&&i&&(a=$.inflateSetDictionary(n,i),a===Dn?a=$.inflate(n,o):a===jn&&(a=kn));n.avail_in>0&&a===On&&n.state.wrap>0&&e[n.next_in]!==0;)$.inflateReset(n),a=$.inflate(n,o);switch(a){case An:case jn:case kn:case Mn:return this.onEnd(a),this.ended=!0,!1}if(s=n.avail_out,n.next_out&&(n.avail_out===0||a===On))if(this.options.to===`string`){let e=$e.utf8border(n.output,n.next_out),t=n.next_out-e,i=$e.buf2string(n.output,e);n.next_out=t,n.avail_out=r-t,t&&n.output.set(n.output.subarray(e,e+t),0),this.onData(i)}else this.onData(n.output.length===n.next_out?n.output:n.output.subarray(0,n.next_out));if(!(a===Dn&&s===0)){if(a===On)return a=$.inflateEnd(this.strm),this.onEnd(a),this.ended=!0,!0;if(n.avail_in===0)break}}return!0},Nn.prototype.onData=function(e){this.chunks.push(e)},Nn.prototype.onEnd=function(e){e===Dn&&(this.options.to===`string`?this.result=this.chunks.join(``):this.result=Je.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function Pn(e,t){let n=new Nn(t);if(n.push(e),n.err)throw n.msg||M[n.err];return n.result}function Fn(e,t){return t||={},t.raw=!0,Pn(e,t)}var In={Inflate:Nn,inflate:Pn,inflateRaw:Fn,ungzip:Pn,constants:N};let{Deflate:Ln,deflate:Rn,deflateRaw:zn,gzip:Bn}=gt,{Inflate:Vn,inflate:Hn,inflateRaw:Un,ungzip:Wn}=In;var Gn={Deflate:Ln,deflate:Rn,deflateRaw:zn,gzip:Bn,Inflate:Vn,inflate:Hn,inflateRaw:Un,ungzip:Wn,constants:N},Kn=class{view;offset=0;constructor(e){this.view=new DataView(e)}readUint8(){return this.view.getUint8(this.offset++)}readUint32(){let e=this.view.getUint32(this.offset,!0);return this.offset+=4,e}readBytes(e){let t=new Uint8Array(this.view.buffer,this.offset,e);return this.offset+=e,t}eof(){return this.offset>=this.view.byteLength}},qn=class{decodeBuffer(e){return this.textDecoder.decode(Gn.inflate(e))}decoder=Gn;textDecoder=new TextDecoder(`utf-8`);ChunkType={PROP:1,MESH:2,STRUCTURE:3,GRIDS:4,MATRIX:5,MESHSPACE:6};parseMesh(e){let t=new DataView(e.buffer,e.byteOffset),n=0,r=()=>{let r=t.getUint32(n,!0);n+=4;let i=new Uint8Array(e.buffer,e.byteOffset+n,r);return n+=r,i};return{pos:r(),ids:r(),ind:(()=>{let r=t.getUint32(n,!0);n+=4;let i=t.getUint32(n,!0);n+=4;let a=new Uint8Array(e.buffer,e.byteOffset+n,r);return n+=r,{data:a,type:i}})(),colorId:(()=>{let e=t.getUint8(n++)/255,r=t.getUint8(n++)/255,i=t.getUint8(n++)/255,a=t.getUint8(n++)/255,o=t.getUint32(n,!0);return n+=4,{r:e,g:r,b:i,opacity:a,name:o}})()}}getExternalMetadataPath(e){let t=e.match(/[?#].*$/)?.[0]??``,n=t?e.slice(0,-t.length):e;return/\.min\.bmt$/i.test(n)?n.replace(/\.min\.bmt$/i,`_props.json`)+t:null}async loadExternalMetadata(e){let t=this.getExternalMetadataPath(e);if(!t)return null;try{let e=await fetch(t);return e.ok?await e.json():null}catch(e){return console.warn(`BMT metadata loading error: ${t}`,e),null}}getModelNameFromPath(e){return(e.split(/[?#]/)[0].split(/[\\/]/).pop()||`model`).replace(/\.min\.bmt$/i,``).replace(/\.[^.]+$/i,``).trim()||`model`}async loadModel(e,t){let n=await fetch(e);console.log(`Parsing BMT model`);let r=await n.arrayBuffer(),i=this.parseBinaryFile(r,t);i.name??=this.getModelNameFromPath(e);let a=await this.loadExternalMetadata(e);return a?.props&&(i.props=a.props),a?.grids&&(i.grids=a.grids),a?.coordinationMatrix&&(i.coordinationMatrix=a.coordinationMatrix),a?.structure!==void 0&&(i.structure=a.structure),i}parseBinaryFile(e,t={}){let n=new Kn(e);if(new TextDecoder().decode(n.readBytes(3))!==`BMT`)throw Error(`Invalid file`);let r=n.readUint8();console.log(`model version: ${r}`);let i={},a={},o,s={},c=e=>this.decoder.inflate(e),l=``,u,d=0,f=n.view.byteLength;for(;!n.eof();){let e=n.readUint8(),r=n.readUint32(),p=n.readBytes(r);switch(e){case this.ChunkType.MESH:case this.ChunkType.MESHSPACE:{let r=this.parseMesh(p),a=c(r.pos),o=c(r.ids),s=c(r.ind.data),u=r.colorId,m=new Float32Array(a.buffer),h=new Uint32Array(o.buffer),g;if(s&&s.length)g=r.ind.type===0?new Uint16Array(s.buffer,s.byteOffset,s.byteLength/2):new Uint32Array(s.buffer,s.byteOffset,s.byteLength/4);else{g=new Uint32Array(a.length);for(let e=0;e<a.length;e++)g[e]=e}let _={pos:m,ids:h,ind:g,isIfcSpace:e===this.ChunkType.MESHSPACE,mat:u,matrix:l};t.streamGeometryChunks?(t.onGeometryChunk?.({chunkIndex:d,geometry:_,geometryID:u.name,isIfcSpace:e===this.ChunkType.MESHSPACE,loadedBytes:n.offset,totalBytes:f}),d++):i[u.name]=_;break}case this.ChunkType.PROP:{let e=JSON.parse(this.decodeBuffer(p));e?.id===void 0?e&&typeof e==`object`&&Object.assign(a,e):a[e.id]=e}break;case this.ChunkType.STRUCTURE:s=JSON.parse(this.decodeBuffer(p));break;case this.ChunkType.GRIDS:o=JSON.parse(this.decodeBuffer(p));break;case this.ChunkType.MATRIX:r&&(l=this.decodeBuffer(p),u??=l);break;default:break}t.onProgress?.({emittedChunks:d,loadedBytes:n.offset,totalBytes:f})}return{coordinationMatrix:u,data:i,grids:o,props:a,structure:s}}},Jn=class{emit;taskId;totalModels;constructor(e){this.emit=e.emit,this.taskId=e.taskId,this.totalModels=Math.max(e.totalModels,1)}emitModelProgress(e,t,n,r,i={}){let a=this.clampProgress(r),o=this.clampProgress((e+a)/this.totalModels);this.emit({...i,modelIndex:e,modelName:t,phase:n,progress:o,taskId:this.taskId,totalModels:this.totalModels})}emitError(e){this.emit({message:e,modelIndex:-1,phase:`error`,progress:1,taskId:this.taskId,totalModels:this.totalModels})}clampProgress(e){return Number.isFinite(e)?Math.max(0,Math.min(1,e)):0}};let Yn=globalThis;function Xn(e){return e.name?e.name:e.kind===`url`?Zn(e.url):e.kind===`file`?e.file.name:`model.bmt`}function Zn(e){return e.split(/[?#]/)[0].split(/[\\/]/).pop()||`model.bmt`}function Qn(e){return Xn(e).replace(/\.min\.bmt$/i,``).replace(/\.[^.]+$/i,``).trim()}function $n(e){return e instanceof Error?{message:e.message,stack:e.stack}:{message:String(e)}}function er(e,t){let n=new Uint8Array(t),r=0;return e.forEach(e=>{n.set(e,r),r+=e.byteLength}),n.buffer}async function tr(e,t,n,r){let i=e.size,a=e.stream().getReader(),o=[],s=0;for(;;){let{done:e,value:c}=await a.read();if(e)break;o.push(c),s+=c.byteLength,t.emitModelProgress(n,r,`reading`,i>0?s/i*.35:.1,{loaded:s,total:i})}return er(o,s)}async function nr(e,t,n,r){let i=await fetch(e);if(!i.ok)throw Error(`BMT fetch error: ${i.status} ${e}`);let a=i.headers.get(`content-length`),o=a?Number(a):0,s=i.body?.getReader();if(!s){let e=await i.arrayBuffer();return t.emitModelProgress(n,r,`fetching`,.35,{loaded:e.byteLength,total:e.byteLength}),e}let c=[],l=0;for(;;){let{done:e,value:i}=await s.read();if(e)break;c.push(i),l+=i.byteLength,t.emitModelProgress(n,r,`fetching`,o>0?l/o*.35:.1,{loaded:l,total:o||void 0})}return er(c,l)}async function rr(e,t,n){let r=Xn(e);return e.kind===`buffer`?(t.emitModelProgress(n,r,`reading`,.35,{loaded:e.buffer.byteLength,total:e.buffer.byteLength}),e.buffer):e.kind===`file`?tr(e.file,t,n,r):nr(e.url,t,n,r)}function ir(e){let t=e.split(/[?#]/)[0];return/\.min\.bmt$/i.test(t)?new URL(t.replace(/\.min\.bmt$/i,`_props.json`),e).href:null}async function ar(e,t){if(t.kind!==`url`)return e;let n=ir(t.url);if(!n)return e;try{let t=await fetch(n);if(!t.ok)return e;let r=await t.json();r.props&&(e.props=r.props),r.grids&&(e.grids=r.grids),r.coordinationMatrix&&(e.coordinationMatrix=r.coordinationMatrix),r.structure!==void 0&&(e.structure=r.structure)}catch(e){console.warn(`BMT metadata loading error: ${n}`,e)}return e}function or(e){let t=new Set;return[e.pos,e.norm,e.ind,e.ids].forEach(e=>{let n=e?.buffer;n instanceof ArrayBuffer&&t.add(n)}),Array.from(t)}function sr(e){let t=new Set;return Object.values(e).forEach(e=>{Object.values(e.data).forEach(e=>{or(e).forEach(e=>t.add(e))})}),Array.from(t)}async function cr(e){let t=e.options??{},n=new qn,r=new Jn({emit:t=>{Yn.postMessage({progress:t,taskId:e.taskId,type:`progress`})},taskId:e.taskId,totalModels:e.sources.length}),i={};r.emitModelProgress(0,void 0,`queued`,0);for(let a=0;a<e.sources.length;a++){let o=e.sources[a],s=Xn(o),c=await rr(o,r,a),l=!!t.streamGeometryChunks;r.emitModelProgress(a,s,`parsing`,.35);let u=n.parseBinaryFile(c,{onGeometryChunk:l?t=>{let n={chunkIndex:t.chunkIndex,geometry:t.geometry,geometryID:t.geometryID,isIfcSpace:t.isIfcSpace,modelIndex:a,modelName:s};Yn.postMessage({chunk:n,taskId:e.taskId,type:`chunk`},or(t.geometry))}:void 0,onProgress:e=>{r.emitModelProgress(a,s,`parsing`,.35+e.loadedBytes/e.totalBytes*.6,{loaded:e.loadedBytes,total:e.totalBytes})},streamGeometryChunks:l});u.name??=Qn(o),await ar(u,o),i[a]=u,r.emitModelProgress(a,s,`complete`,1)}return i}Yn.onmessage=e=>{let t=e.data;t.type===`load-bmt-model`&&cr(t).then(e=>{Yn.postMessage({models:e,taskId:t.taskId,type:`complete`},sr(e))}).catch(e=>{Yn.postMessage({error:$n(e),taskId:t.taskId,type:`error`})})}})();
|