@pilotdev/pilot-bim-dataprovider 24.22.0 → 24.24.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.
Files changed (42) hide show
  1. package/lib/index.d.ts +3 -1
  2. package/lib/index.js.map +1 -1
  3. package/lib/src/model/BimDataCloudPart.d.ts +17 -0
  4. package/lib/src/model/BimDataCloudPart.js +33 -0
  5. package/lib/src/model/BimDataCloudPart.js.map +1 -0
  6. package/lib/src/model/BimDataModelPart.d.ts +36 -0
  7. package/lib/src/model/BimDataModelPart.js +89 -0
  8. package/lib/src/model/BimDataModelPart.js.map +1 -0
  9. package/lib/src/model/BimDataPart.d.ts +9 -52
  10. package/lib/src/model/BimDataPart.js +11 -110
  11. package/lib/src/model/BimDataPart.js.map +1 -1
  12. package/lib/src/model/BimDataProvider.d.ts +5 -1
  13. package/lib/src/model/BimDataProvider.js +7 -1
  14. package/lib/src/model/BimDataProvider.js.map +1 -1
  15. package/lib/src/model/Consts.d.ts +1 -0
  16. package/lib/src/model/Consts.js +1 -0
  17. package/lib/src/model/Consts.js.map +1 -1
  18. package/lib/src/utils/ViewerTools.d.ts +5 -1
  19. package/lib/src/utils/ViewerTools.js +12 -4
  20. package/lib/src/utils/ViewerTools.js.map +1 -1
  21. package/lib/src/wasm/BimCloudPartAccessor.d.ts +16 -0
  22. package/lib/src/wasm/BimCloudPartAccessor.js +49 -0
  23. package/lib/src/wasm/BimCloudPartAccessor.js.map +1 -0
  24. package/lib/src/wasm/BimDataModelPartAccessor.d.ts +18 -0
  25. package/lib/src/wasm/BimDataModelPartAccessor.js +69 -0
  26. package/lib/src/wasm/BimDataModelPartAccessor.js.map +1 -0
  27. package/lib/src/wasm/BimDataPartAccessor.d.ts +8 -0
  28. package/lib/src/wasm/BimDataPartAccessor.js +19 -0
  29. package/lib/src/wasm/BimDataPartAccessor.js.map +1 -0
  30. package/lib/src/wasm/{wasm.worker.d.ts → WasmWorker.d.ts} +18 -10
  31. package/lib/src/wasm/WasmWorker.js +202 -0
  32. package/lib/src/wasm/WasmWorker.js.map +1 -0
  33. package/lib/src/wasm/WasmWorkerThreadSafeWrapper.d.ts +42 -0
  34. package/lib/src/wasm/WasmWorkerThreadSafeWrapper.js +135 -0
  35. package/lib/src/wasm/WasmWorkerThreadSafeWrapper.js.map +1 -0
  36. package/lib/src/wasm/pilot_bim_dataprovider.d.ts +6 -1
  37. package/lib/src/wasm/pilot_bim_dataprovider.wasm +0 -0
  38. package/lib/src/wasm/wasm.worker-node.cjs +1 -1
  39. package/lib/src/wasm/wasm.worker-web.cjs +1 -1
  40. package/package.json +1 -1
  41. package/lib/src/wasm/wasm.worker.js +0 -324
  42. package/lib/src/wasm/wasm.worker.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pilotdev/pilot-bim-dataprovider",
3
- "version": "24.22.0",
3
+ "version": "24.24.0",
4
4
  "description": "The package for reading data from a information model data container.",
5
5
  "main": "lib/index.js",
6
6
  "type": "module",
@@ -1,324 +0,0 @@
1
- import BimDataProviderModule from "./pilot_bim_dataprovider.js";
2
- import { WasmTools } from "../utils/WasmTools.js";
3
- import { BimDataConverter, transmitWasmData } from "../utils/ViewerTools.js";
4
- import { DATA_ROOT_FOLDER } from "../model/Consts.js";
5
- import { AsyncFileSystem, ProxyFileSystem } from "../file-system/IFileSystem.js";
6
- import { expose } from "./worker.js";
7
- const HEAP_SIZE_LIMIT = 1024 * 1024 * 1024;
8
- const isSecureContext = isNode() ? false : self && !!self.isSecureContext;
9
- const isCrossOriginIsolated = isNode() ? false : self && !!self.crossOriginIsolated;
10
- function isNode() {
11
- return typeof process !== 'undefined' &&
12
- !!process.versions &&
13
- !!process.versions.node;
14
- }
15
- const TRANSMIT_STEP = 200;
16
- export class WasmWorker {
17
- constructor() {
18
- this._cachedCloudReaders = new Map();
19
- this._locker = { isLocked: false, lock: Promise.resolve() };
20
- console.log(`BimDataProvider worker: (env: ${isNode() ? 'Node.js' : 'web'}, isSecureContext: ${isSecureContext}, isCrossOriginIsolated: ${isCrossOriginIsolated})`);
21
- this._fs = isSecureContext ? new AsyncFileSystem() : new ProxyFileSystem();
22
- }
23
- async init() {
24
- const moduleOverrides = {
25
- print: (s) => console.log(s),
26
- printErr: (e) => console.error(e)
27
- };
28
- this._module = await BimDataProviderModule(moduleOverrides);
29
- this._module.FS.mkdir(DATA_ROOT_FOLDER);
30
- const moduleFS = this._module.FS;
31
- await this._fs.init();
32
- this._fs.mountTo(moduleFS, DATA_ROOT_FOLDER);
33
- }
34
- async open(id, buffer) {
35
- this._cachedCloudReaders.get(id)?.close();
36
- this._cachedCloudReaders.delete(id);
37
- if (!id)
38
- id = "id_" + (0xffffffff * Math.random() >>> 0);
39
- const data = new Uint8Array(buffer ?? []);
40
- if (!this._fs.isFileExists(id)) {
41
- await this._fs.makeFile(id, data);
42
- }
43
- else if (buffer) {
44
- await this._fs.writeFile(id, data);
45
- }
46
- }
47
- async write(modelPartId, buffer, position) {
48
- const data = new Uint8Array(buffer);
49
- if (this._fs.isFileExists(modelPartId)) {
50
- await this._fs.writeFile(modelPartId, data, position);
51
- }
52
- else {
53
- await this._fs.makeFile(modelPartId, new Uint8Array(position));
54
- await this._fs.writeFile(modelPartId, data, position);
55
- }
56
- }
57
- async close(modelPartId) {
58
- this._cachedCloudReaders.get(modelPartId)?.close();
59
- this._cachedCloudReaders.delete(modelPartId);
60
- }
61
- async remove(modelPartId) {
62
- await this.close(modelPartId);
63
- if (this._fs.isFileExists(modelPartId)) {
64
- await this._fs.remove(modelPartId);
65
- }
66
- }
67
- async dispose() {
68
- for (const [, reader] of this._cachedCloudReaders) {
69
- await reader.close();
70
- }
71
- this._cachedCloudReaders.clear();
72
- await this._fs.dispose();
73
- }
74
- async flushMemory() {
75
- if (!this._module || !isSecureContext)
76
- return;
77
- const cloudParts = Array.from(this._cachedCloudReaders.keys());
78
- for await (const [, reader] of this._cachedCloudReaders) {
79
- await reader.close();
80
- }
81
- this._cachedCloudReaders.clear();
82
- await this.init();
83
- for await (const cloudId of cloudParts) {
84
- await this.cacheCloudPart(cloudId);
85
- }
86
- }
87
- // ModelPart
88
- auditModelPart(modelPartId) {
89
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
90
- return this.runSyncFileOp(modelPartId, () => modelPart.auditModelDatabase());
91
- }
92
- async updateModelPart(modelPartId, buffer) {
93
- const tmpModelPartId = "tmp_" + (0xffffffff * Math.random() >>> 0);
94
- await this.open(tmpModelPartId, buffer);
95
- await this.mergeModelParts(modelPartId, tmpModelPartId);
96
- await this.remove(tmpModelPartId);
97
- }
98
- async mergeModelParts(targetId, sourceId) {
99
- const module = this._module;
100
- const modelPart = new BimDataModelPartAccessor(targetId, module);
101
- const modelPartId = modelPart.path;
102
- const sourcePart = new BimDataModelPartAccessor(sourceId, module);
103
- const sourcePartId = this._fs.isFileExists(sourceId) ? sourcePart.path : sourceId;
104
- if (!WasmTools.isFileExists(sourcePartId, module))
105
- return Promise.reject('Failed to merge model parts: source file does not exist.');
106
- await this.runSyncFileOp([targetId, sourceId], () => modelPart.merge(modelPartId, sourcePartId));
107
- }
108
- getAllTessellations(modelPartId, compressed, transmit) {
109
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
110
- return this.runSyncFileOp(modelPartId, () => modelPart.getAllTessellations(compressed, transmit));
111
- }
112
- getTessellations(modelPartId, versionFrom, versionTo, compressed, transmit) {
113
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
114
- return this.runSyncFileOp(modelPartId, () => modelPart.getTessellations(versionFrom, versionTo, compressed, transmit));
115
- }
116
- getTessellation(modelPartId, tessellationKey, version, compressed) {
117
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
118
- return this.runSyncFileOp(modelPartId, () => modelPart.getTessellation(tessellationKey, version, compressed));
119
- }
120
- getAllElements(modelPartId, transmit) {
121
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
122
- return this.runSyncFileOp(modelPartId, () => modelPart.getAllElements(transmit));
123
- }
124
- getElements(modelPartId, versionFrom, versionTo, transmit) {
125
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
126
- return this.runSyncFileOp(modelPartId, () => modelPart.getElements(versionFrom, versionTo, transmit));
127
- }
128
- getDiffElements(modelPartId, versionFrom, versionTo, transmit) {
129
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
130
- return this.runSyncFileOp(modelPartId, () => modelPart.getDiffElements(versionFrom, versionTo, transmit));
131
- }
132
- getElementProperties(modelPartId, elementId, version) {
133
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
134
- return this.runSyncFileOp(modelPartId, () => modelPart.getElementProperties(elementId, version));
135
- }
136
- getElementTessellations(modelPartId, versionFrom, versionTo, compressed) {
137
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
138
- return this.runSyncFileOp(modelPartId, () => modelPart.getElementTessellations(versionFrom, versionTo, compressed));
139
- }
140
- getAllVersions(modelPartId) {
141
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
142
- return this.runSyncFileOp(modelPartId, () => modelPart.getAllVersions());
143
- }
144
- getLatestVersion(modelPartId) {
145
- const modelPart = new BimDataModelPartAccessor(modelPartId, this._module);
146
- return this.runSyncFileOp(modelPartId, () => modelPart.getLatestVersion());
147
- }
148
- // CloudPart
149
- async cacheCloudPart(modelPartId) {
150
- const reader = new BimCloudPartAccessor(modelPartId, this._module, () => this._fs.openSyncFileAccess(modelPartId), () => Promise.resolve(this._fs.closeSyncFileAccess(modelPartId)));
151
- await this._cachedCloudReaders.get(modelPartId)?.close();
152
- await reader.open();
153
- this._cachedCloudReaders.set(modelPartId, reader);
154
- }
155
- async getCloudPoints(modelPartId, index) {
156
- await this.checkMemory();
157
- const modelPart = this._cachedCloudReaders.get(modelPartId) ?? new BimCloudPartAccessor(modelPartId, this._module);
158
- return this.runSyncFileOp(modelPartId, () => modelPart.getCloudPoints(index));
159
- }
160
- getCloudHierarchy(modelPartId) {
161
- const modelPart = this._cachedCloudReaders.get(modelPartId) ?? new BimCloudPartAccessor(modelPartId, this._module);
162
- return this.runSyncFileOp(modelPartId, () => modelPart.getCloudHierarchy());
163
- }
164
- getCloudParameters(modelPartId) {
165
- const modelPart = this._cachedCloudReaders.get(modelPartId) ?? new BimCloudPartAccessor(modelPartId, this._module);
166
- return this.runSyncFileOp(modelPartId, () => modelPart.getCloudParameters());
167
- }
168
- getCloudMetadata(modelPartId) {
169
- const modelPart = this._cachedCloudReaders.get(modelPartId) ?? new BimCloudPartAccessor(modelPartId, this._module);
170
- return this.runSyncFileOp(modelPartId, () => modelPart.getCloudMetadata());
171
- }
172
- async runSyncFileOp(path, opFunc) {
173
- try {
174
- if (Array.isArray(path)) {
175
- for (const p of path) {
176
- await this._fs.openSyncFileAccess(p);
177
- }
178
- }
179
- else {
180
- await this._fs.openSyncFileAccess(path);
181
- }
182
- const result = await opFunc();
183
- return result;
184
- }
185
- catch (e) {
186
- console.error(e);
187
- throw e;
188
- }
189
- finally {
190
- if (Array.isArray(path)) {
191
- for (const p of path) {
192
- this._fs.closeSyncFileAccess(p);
193
- }
194
- }
195
- else {
196
- this._fs.closeSyncFileAccess(path);
197
- }
198
- }
199
- }
200
- async checkMemory() {
201
- if (this._locker.isLocked)
202
- await this._locker.lock;
203
- const heapSize = this._module?.HEAP8.byteLength;
204
- if (heapSize && heapSize > HEAP_SIZE_LIMIT) {
205
- this._locker.isLocked = true;
206
- this._locker.lock = this.flushMemory();
207
- await this._locker.lock;
208
- this._locker.isLocked = false;
209
- }
210
- }
211
- }
212
- expose(WasmWorker);
213
- class BimDataPartAccessor {
214
- constructor(id, module) {
215
- this.id = id;
216
- this._module = module;
217
- }
218
- get path() {
219
- return '/' + DATA_ROOT_FOLDER + '/' + this.id;
220
- }
221
- }
222
- class BimDataModelPartAccessor extends BimDataPartAccessor {
223
- merge(targetPath, sourcePath) {
224
- const targetVersion = this._module.getDatabaseVersion(targetPath);
225
- const sourceVersion = this._module.getDatabaseVersion(sourcePath);
226
- if (sourceVersion < 2) {
227
- this._module.auditDatabase(sourcePath);
228
- }
229
- if (sourceVersion != targetVersion) {
230
- this._module.manualMergeDatabases(targetPath, sourcePath);
231
- }
232
- else {
233
- this._module.mergeDatabases(targetPath, sourcePath);
234
- }
235
- }
236
- auditModelDatabase() {
237
- const databaseVersion = this._module.getDatabaseVersion(this.path);
238
- if (databaseVersion < 2) {
239
- this._module.auditDatabase(this.path);
240
- }
241
- }
242
- async getAllTessellations(compressed, transmit) {
243
- const result = this._module.getAllTessellations(this.path, compressed);
244
- return transmitWasmData(this._module, result, true, BimDataConverter.toBimDataTessellation, transmit, TRANSMIT_STEP);
245
- }
246
- async getTessellations(versionFrom, versionTo, compressed, transmit) {
247
- const result = this._module.getTessellations(this.path, versionFrom, versionTo, compressed);
248
- return transmitWasmData(this._module, result, true, BimDataConverter.toBimDataTessellation, transmit, TRANSMIT_STEP);
249
- }
250
- getTessellation(tessellationKey, version, compressed) {
251
- const result = this._module.getTessellation(this.path, tessellationKey, version, compressed);
252
- return BimDataConverter.toBimDataTessellation(this._module, result, true);
253
- }
254
- async getAllElements(transmit) {
255
- const result = this._module.getAllNodes(this.path);
256
- return transmitWasmData(this._module, result, true, BimDataConverter.toBimDataElement, transmit, TRANSMIT_STEP);
257
- }
258
- async getElements(versionFrom, versionTo, transmit) {
259
- const result = this._module.getNodes(this.path, versionFrom, versionTo);
260
- return transmitWasmData(this._module, result, true, BimDataConverter.toBimDataElement, transmit, TRANSMIT_STEP);
261
- }
262
- async getDiffElements(versionFrom, versionTo, transmit) {
263
- const result = this._module.getComparedNodes(this.path, versionFrom, versionTo);
264
- return transmitWasmData(this._module, result, true, BimDataConverter.toBimDataElement, transmit, TRANSMIT_STEP);
265
- }
266
- getElementTessellations(versionFrom, versionTo, compressed) {
267
- const vts = this._module.getNodesTessellations(this.path, versionFrom, versionTo, compressed);
268
- return BimDataConverter.toBimDataTessellations(this._module, vts, true);
269
- }
270
- getElementProperties(elementId, version) {
271
- const set = this._module.getProperties(this.path, elementId, version);
272
- return BimDataConverter.toModelElementPropertySet(set, true);
273
- }
274
- getAllVersions() {
275
- const versions = new Array();
276
- const bimVersions = this._module.getAllVersions(this.path);
277
- for (let index = 0; index < bimVersions.size(); index++) {
278
- const version = bimVersions.get(index);
279
- versions.push(version);
280
- }
281
- bimVersions.delete();
282
- return versions;
283
- }
284
- getLatestVersion() {
285
- return this._module.getLatestVersion(this.path);
286
- }
287
- }
288
- class BimCloudPartAccessor extends BimDataPartAccessor {
289
- constructor(id, module, openFileFunc, closeFileFunc) {
290
- super(id, module);
291
- this.openFileFunc = openFileFunc;
292
- this.closeFileFunc = closeFileFunc;
293
- }
294
- async open() {
295
- if (this.openFileFunc)
296
- await this.openFileFunc();
297
- this._cloudReader = this._module.getCloudReader();
298
- this._cloudReader.open(this.path);
299
- }
300
- async close() {
301
- this._cloudReader?.close();
302
- this._cloudReader?.delete();
303
- this._cloudReader = undefined;
304
- if (this.closeFileFunc)
305
- await this.closeFileFunc();
306
- }
307
- getCloudPoints(index) {
308
- const pointsData = this._cloudReader ? this._cloudReader.getCloudPoints(index, true) : this._module.getCloudPoints(this.path, index);
309
- return BimDataConverter.toCloudPoints(this._module, pointsData, true);
310
- }
311
- getCloudHierarchy() {
312
- const result = this._cloudReader ? this._cloudReader.getCloudHierarchy() : this._module.getCloudHierarchy(this.path);
313
- return BimDataConverter.toBimCloudHierarchy(result, true);
314
- }
315
- getCloudParameters() {
316
- const result = this._cloudReader ? this._cloudReader.getCloudParameters() : this._module.getCloudParameters(this.path);
317
- return WasmTools.wasmMapToMap(result, true);
318
- }
319
- getCloudMetadata() {
320
- const result = this._cloudReader ? this._cloudReader.getCloudMetadata() : this._module.getCloudMetadata(this.path);
321
- return BimDataConverter.toCloudMetadata(result, true);
322
- }
323
- }
324
- //# sourceMappingURL=wasm.worker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wasm.worker.js","sourceRoot":"","sources":["../../../src/wasm/wasm.worker.ts"],"names":[],"mappings":"AACA,OAAO,qBAAqB,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAe,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAC9F,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3C,MAAM,eAAe,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;AAC1E,MAAM,qBAAqB,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC;AAEpF,SAAS,MAAM;IACb,OAAO,OAAO,OAAO,KAAK,WAAW;QACnC,CAAC,CAAC,OAAO,CAAC,QAAQ;QAClB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC5B,CAAC;AAED,MAAM,aAAa,GAAG,GAAG,CAAC;AAqC1B,MAAM,OAAO,UAAU;IAMrB;QAJQ,wBAAmB,GAAsC,IAAI,GAAG,EAAE,CAAC;QAEnE,YAAO,GAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QAG1E,OAAO,CAAC,GAAG,CAAC,iCAAiC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,sBAAsB,eAAe,4BAA4B,qBAAqB,GAAG,CAAC,CAAC;QACpK,IAAI,CAAC,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI,eAAe,EAAE,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,eAAe,GAA8B;YACjD,KAAK,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;SAC1C,CAAC;QAEF,IAAI,CAAC,OAAO,GAAG,MAAM,qBAAqB,CAAC,eAAe,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAErC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAU,EAAE,MAAoB;QACzC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;QAC1C,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEpC,IAAI,CAAC,EAAE;YACL,EAAE,GAAG,KAAK,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAElD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE;YAC9B,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;SACnC;aACI,IAAI,MAAM,EAAE;YACf,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;SACpC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,WAAmB,EAAE,MAAmB,EAAE,QAAgB;QACpE,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QAEpC,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE;YACtC,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;SACvD;aACI;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC/D,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;SACvD;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,WAAmB;QAC7B,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC;QACnD,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,WAAmB;QAC9B,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE;YACtC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;SACpC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,KAAK,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE;YACjD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;SACtB;QACD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,eAAe;YACnC,OAAO;QAET,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/D,IAAI,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE;YACvD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;SACtB;QACD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QAEjC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAElB,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,UAAU,EAAE;YACtC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;SACpC;IACH,CAAC;IAED,YAAY;IACZ,cAAc,CAAC,WAAmB;QAChC,MAAM,SAAS,GAAG,IAAI,wBAAwB,CAAC,WAAW,EAAkB,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC/E,CAAC;IACD,KAAK,CAAC,eAAe,CAAC,WAAmB,EAAE,MAAmB;QAC5D,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QACnE,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QACxD,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACpC,CAAC;IACD,KAAK,CAAC,eAAe,CAAC,QAAgB,EAAE,QAAgB;QACtD,MAAM,MAAM,GAAmB,IAAI,CAAC,OAAO,CAAC;QAC5C,MAAM,SAAS,GAAG,IAAI,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjE,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC;QACnC,MAAM,UAAU,GAAG,IAAI,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;QAElF,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC;YAC/C,OAAO,OAAO,CAAC,MAAM,CAAC,0DAA0D,CAAC,CAAC;QAEpF,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IACnG,CAAC;IACD,mBAAmB,CAAC,WAAmB,EAAE,UAAmB,EAAE,QAAuD;QACnH,MAAM,SAAS,GAAG,IAAI,wBAAwB,CAAC,WAAW,EAAkB,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,mBAAmB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpG,CAAC;IACD,gBAAgB,CAAC,WAAmB,EAAE,WAAmB,EAAE,SAAiB,EAAE,UAAmB,EAAE,QAAuD;QACxJ,MAAM,SAAS,GAAG,IAAI,wBAAwB,CAAC,WAAW,EAAkB,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IACzH,CAAC;IACD,eAAe,CAAC,WAAmB,EAAE,eAAuB,EAAE,OAAe,EAAE,UAAmB;QAChG,MAAM,SAAS,GAAG,IAAI,wBAAwB,CAAC,WAAW,EAAkB,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,eAAe,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IAChH,CAAC;IACD,cAAc,CAAC,WAAmB,EAAE,QAAuD;QACzF,MAAM,SAAS,GAAG,IAAI,wBAAwB,CAAC,WAAW,EAAkB,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnF,CAAC;IACD,WAAW,CAAC,WAAmB,EAAE,WAAmB,EAAE,SAAiB,EAAE,QAAuD;QAC9H,MAAM,SAAS,GAAG,IAAI,wBAAwB,CAAC,WAAW,EAAkB,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxG,CAAC;IACD,eAAe,CAAC,WAAmB,EAAE,WAAmB,EAAE,SAAiB,EAAE,QAAuD;QAClI,MAAM,SAAS,GAAG,IAAI,wBAAwB,CAAC,WAAW,EAAkB,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5G,CAAC;IACD,oBAAoB,CAAC,WAAmB,EAAE,SAAiB,EAAE,OAAe;QAC1E,MAAM,SAAS,GAAG,IAAI,wBAAwB,CAAC,WAAW,EAAkB,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,oBAAoB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IACnG,CAAC;IACD,uBAAuB,CAAC,WAAmB,EAAE,WAAmB,EAAE,SAAiB,EAAE,UAAmB;QACtG,MAAM,SAAS,GAAG,IAAI,wBAAwB,CAAC,WAAW,EAAkB,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,uBAAuB,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IACtH,CAAC;IACD,cAAc,CAAC,WAAmB;QAChC,MAAM,SAAS,GAAG,IAAI,wBAAwB,CAAC,WAAW,EAAkB,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,gBAAgB,CAAC,WAAmB;QAClC,MAAM,SAAS,GAAG,IAAI,wBAAwB,CAAC,WAAW,EAAkB,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,YAAY;IACZ,KAAK,CAAC,cAAc,CAAC,WAAmB;QACtC,MAAM,MAAM,GAAG,IAAI,oBAAoB,CAAC,WAAW,EAAkB,IAAI,CAAC,OAAO,EAC/E,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAC9C,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CACjE,CAAC;QAEF,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC;QACzD,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IACD,KAAK,CAAC,cAAc,CAAC,WAAmB,EAAE,KAAa;QACrD,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,oBAAoB,CAAC,WAAW,EAAkB,IAAI,CAAC,OAAO,CAAC,CAAC;QACnI,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAChF,CAAC;IACD,iBAAiB,CAAC,WAAmB;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,oBAAoB,CAAC,WAAW,EAAkB,IAAI,CAAC,OAAO,CAAC,CAAC;QACnI,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,kBAAkB,CAAC,WAAmB;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,oBAAoB,CAAC,WAAW,EAAkB,IAAI,CAAC,OAAO,CAAC,CAAC;QACnI,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC/E,CAAC;IACD,gBAAgB,CAAC,WAAmB;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,oBAAoB,CAAC,WAAW,EAAkB,IAAI,CAAC,OAAO,CAAC,CAAC;QACnI,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC7E,CAAC;IAEO,KAAK,CAAC,aAAa,CAAI,IAAuB,EAAE,MAA4B;QAClF,IAAI;YACF,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACvB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;oBACpB,MAAM,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;iBACtC;aACF;iBAAM;gBACL,MAAM,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;aACzC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,EAAE,CAAC;YAC9B,OAAO,MAAM,CAAC;SACf;QACD,OAAO,CAAC,EAAE;YACR,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjB,MAAM,CAAC,CAAC;SACT;gBACO;YACN,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACvB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;oBACpB,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;iBACjC;aACF;iBACI;gBACH,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;aACpC;SACF;IACH,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ;YACvB,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAE1B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC;QAChD,IAAI,QAAQ,IAAI,QAAQ,GAAG,eAAe,EAAE;YAC1C,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACvC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;SAC/B;IACH,CAAC;CACF;AACD,MAAM,CAAC,UAAU,CAAC,CAAC;AAEnB,MAAe,mBAAmB;IAGhC,YAA4B,EAAU,EAAE,MAAsB;QAAlC,OAAE,GAAF,EAAE,CAAQ;QACpC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,GAAG,GAAG,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;IAChD,CAAC;CACF;AAED,MAAM,wBAAyB,SAAQ,mBAAmB;IAExD,KAAK,CAAC,UAAkB,EAAE,UAAkB;QAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAClE,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAElE,IAAI,aAAa,GAAG,CAAC,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;SACxC;QAED,IAAI,aAAa,IAAI,aAAa,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;SAC3D;aACI;YACH,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;SACrD;IACH,CAAC;IAED,kBAAkB;QAChB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,eAAe,GAAG,CAAC,EAAE;YACvB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACvC;IACH,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,UAAmB,EAAE,QAAuD;QACpG,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACvE,OAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,CAAC,qBAAqB,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IACvH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,WAAmB,EAAE,SAAiB,EAAE,UAAmB,EAAE,QAAuD;QACzI,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAC5F,OAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,CAAC,qBAAqB,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IACvH,CAAC;IAED,eAAe,CAAC,eAAuB,EAAE,OAAe,EAAE,UAAmB;QAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QAC7F,OAAO,gBAAgB,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,QAAuD;QAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAClH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,WAAmB,EAAE,SAAiB,EAAE,QAAuD;QAC/G,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACxE,OAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAClH,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,WAAmB,EAAE,SAAiB,EAAE,QAAuD;QACnH,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QAChF,OAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAClH,CAAC;IAED,uBAAuB,CAAC,WAAmB,EAAE,SAAiB,EAAE,UAAmB;QACjF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAC9F,OAAO,gBAAgB,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,oBAAoB,CAAC,SAAiB,EAAE,OAAe;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACtE,OAAO,gBAAgB,CAAC,yBAAyB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC/D,CAAC;IAED,cAAc;QACZ,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAU,CAAC;QACrC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE;YACvD,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACxB;QACD,WAAW,CAAC,MAAM,EAAE,CAAC;QACrB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;CACF;AAED,MAAM,oBAAqB,SAAQ,mBAAmB;IAGpD,YAAY,EAAU,EAAE,MAAsB,EAAW,YAAkC,EAAW,aAAmC;QACvI,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QADqC,iBAAY,GAAZ,YAAY,CAAsB;QAAW,kBAAa,GAAb,aAAa,CAAsB;IAEzI,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,YAAY;YACnB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAClD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAC9B,IAAI,IAAI,CAAC,aAAa;YACpB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;IAC/B,CAAC;IAED,cAAc,CAAC,KAAa;QAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACrI,OAAO,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC;IAED,iBAAiB;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrH,OAAO,gBAAgB,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,kBAAkB;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvH,OAAO,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,gBAAgB;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnH,OAAO,gBAAgB,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;CACF"}