verso-db 0.2.0 → 0.3.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.
@@ -2,6 +2,7 @@
2
2
  * Search worker entry point for parallel query processing.
3
3
  * Each worker maintains independent search state (visited array, heaps)
4
4
  * and operates on shared read-only vector data (SharedArrayBuffer when available).
5
+ * Graph structure is shared via SAB when available, eliminating per-worker duplication.
5
6
  */
6
7
  import { dotProductFast, l2SquaredFast, normalizeInPlace } from './backends/JsDistanceBackend.js';
7
8
  import { BinaryHeap } from './BinaryHeap.js';
@@ -34,15 +35,40 @@ if (typeof self !== 'undefined' && typeof self.postMessage === 'function') {
34
35
  self.postMessage({ type: 'error', queryId: msg.queryId, error: err instanceof Error ? err.message : String(err) });
35
36
  }
36
37
  }
38
+ else if (msg.type === 'searchBatch') {
39
+ if (!state) {
40
+ self.postMessage({ type: 'error', queryId: msg.queryId, error: 'Worker not initialized' });
41
+ return;
42
+ }
43
+ try {
44
+ const { queryBuffer, queryCount, k, efSearch, quantized, candidateMultiplier } = msg;
45
+ const dim = state.getDimension();
46
+ const results = new Array(queryCount);
47
+ for (let i = 0; i < queryCount; i++) {
48
+ const query = queryBuffer.subarray(i * dim, (i + 1) * dim);
49
+ if (quantized) {
50
+ results[i] = state.searchKNNQuantized(query, k, candidateMultiplier || 3, efSearch);
51
+ }
52
+ else {
53
+ results[i] = state.searchKNN(query, k, efSearch);
54
+ }
55
+ }
56
+ self.postMessage({ type: 'batchResult', queryId: msg.queryId, results });
57
+ }
58
+ catch (err) {
59
+ self.postMessage({ type: 'error', queryId: msg.queryId, error: err instanceof Error ? err.message : String(err) });
60
+ }
61
+ }
37
62
  else if (msg.type === 'graphUpdate') {
38
63
  // Incremental graph update: add new nodes' neighbor lists
64
+ // No-op when using shared graph SABs (data is already visible)
39
65
  if (state) {
40
66
  state.applyGraphUpdate(msg.newNodes);
41
67
  }
42
68
  }
43
69
  else if (msg.type === 'updateEntryPoint') {
44
70
  if (state) {
45
- state.updateEntryPoint(msg.entryPointId, msg.maxLevel);
71
+ state.updateEntryPoint(msg.entryPointId, msg.maxLevel, msg.nodeCount);
46
72
  }
47
73
  }
48
74
  };
@@ -51,6 +77,10 @@ if (typeof self !== 'undefined' && typeof self.postMessage === 'function') {
51
77
  * Independent search state for a single worker.
52
78
  * Mirrors the essential search logic from HNSWIndex without mutation.
53
79
  * Uses batch distance calculation for improved cache locality.
80
+ *
81
+ * Graph structure is stored in flat typed arrays (graphIndex + graphNeighborData)
82
+ * for fast indexed access. When backed by SharedArrayBuffer, all workers share
83
+ * the same graph memory with zero copying (~40MB savings per worker for 100K vectors).
54
84
  */
55
85
  export class WorkerSearchState {
56
86
  flatVectors;
@@ -60,8 +90,12 @@ export class WorkerSearchState {
60
90
  metric;
61
91
  entryPointId;
62
92
  maxLevel;
63
- // Deserialized neighbor lists: neighbors[nodeId][layer] = number[]
64
- neighbors;
93
+ // Flat graph representation: always used, either SAB-shared or locally allocated
94
+ graphNeighborData;
95
+ graphIndex;
96
+ maxLayerSlots;
97
+ // Optional shared metadata (SAB, updated by main thread during parallel build)
98
+ sharedMetadata = null;
65
99
  // Independent search state
66
100
  visitedArray;
67
101
  visitedGeneration = 1;
@@ -69,9 +103,9 @@ export class WorkerSearchState {
69
103
  resultsHeap;
70
104
  queryNormBuffer;
71
105
  vectorsAreNormalized;
72
- // Batch distance calculation buffers
73
- batchNeighborIds = [];
74
- batchDistances = [];
106
+ // Pre-allocated typed batch buffers for distance calculation (Improvement 5)
107
+ batchNeighborIds;
108
+ batchDistances;
75
109
  // Quantization state
76
110
  quantizationEnabled;
77
111
  quantizationScale = null;
@@ -93,14 +127,37 @@ export class WorkerSearchState {
93
127
  this.quantizationOffset = init.quantizationParams.offset;
94
128
  this.queryInt8Buffer = new Int8Array(init.dimension);
95
129
  }
96
- // Deserialize graph structure
97
- this.neighbors = this.deserializeGraph(init.graphData);
130
+ // Initialize graph: prefer shared SAB format, fallback to legacy deserialization
131
+ if (init.graphNeighborData && init.graphIndex && init.maxLayerSlots !== undefined) {
132
+ // Shared graph via SAB — zero-copy, no per-worker duplication
133
+ this.graphNeighborData = init.graphNeighborData;
134
+ this.graphIndex = init.graphIndex;
135
+ this.maxLayerSlots = init.maxLayerSlots;
136
+ this.sharedMetadata = init.sharedMetadata ?? null;
137
+ }
138
+ else if (init.graphData) {
139
+ // Legacy: deserialize into flat typed arrays (same layout, just locally allocated)
140
+ const { graphNeighborData, graphIndex, maxLayerSlots } = this.deserializeGraphToFlat(init.graphData, init.nodeCount, init.maxLevel);
141
+ this.graphNeighborData = graphNeighborData;
142
+ this.graphIndex = graphIndex;
143
+ this.maxLayerSlots = maxLayerSlots;
144
+ }
145
+ else {
146
+ // Empty graph
147
+ this.maxLayerSlots = Math.max(init.maxLevel + 1, 1);
148
+ this.graphNeighborData = new Uint32Array(0);
149
+ this.graphIndex = new Uint32Array(0);
150
+ }
98
151
  // Initialize search state
99
152
  this.visitedArray = new Uint16Array(init.nodeCount + 1000);
100
153
  const heapCap = Math.max(512, 500);
101
154
  this.candidatesHeap = new BinaryHeap(heapCap);
102
155
  this.resultsHeap = new MaxBinaryHeap(heapCap);
103
156
  this.queryNormBuffer = new Float32Array(init.dimension);
157
+ // Pre-allocate typed batch buffers (sized for max neighbors at layer 0)
158
+ const maxBatchSize = init.M0 + 1;
159
+ this.batchNeighborIds = new Uint32Array(maxBatchSize);
160
+ this.batchDistances = new Float64Array(maxBatchSize);
104
161
  // Set up distance function
105
162
  if (init.metric === 'cosine') {
106
163
  this.distanceFn = (a, b) => {
@@ -116,26 +173,50 @@ export class WorkerSearchState {
116
173
  this.distanceFn = (a, b) => -dotProductFast(a, b);
117
174
  }
118
175
  }
119
- deserializeGraph(buffer) {
176
+ getDimension() {
177
+ return this.dimension;
178
+ }
179
+ /**
180
+ * Deserialize legacy graph ArrayBuffer into flat typed arrays.
181
+ * Produces the same layout as the shared SAB graph format.
182
+ */
183
+ deserializeGraphToFlat(buffer, nodeCount, maxLevel) {
120
184
  const view = new DataView(buffer);
121
- const neighbors = new Array(this.nodeCount);
185
+ const maxLayerSlots = Math.max(maxLevel + 1, 1);
186
+ // First pass: count total neighbors
187
+ let totalNeighbors = 0;
122
188
  let offset = 0;
123
- for (let nodeId = 0; nodeId < this.nodeCount; nodeId++) {
189
+ for (let nodeId = 0; nodeId < nodeCount; nodeId++) {
124
190
  const numLayers = view.getUint8(offset++);
125
- const layers = new Array(numLayers);
126
191
  for (let l = 0; l < numLayers; l++) {
127
192
  const numNeighbors = view.getUint16(offset, true);
128
193
  offset += 2;
129
- const neighborList = new Array(numNeighbors);
194
+ totalNeighbors += numNeighbors;
195
+ offset += numNeighbors * 4;
196
+ }
197
+ }
198
+ // Allocate flat arrays
199
+ const graphIndex = new Uint32Array(nodeCount * maxLayerSlots * 2);
200
+ const graphNeighborData = new Uint32Array(totalNeighbors);
201
+ // Second pass: fill data
202
+ offset = 0;
203
+ let writeOffset = 0;
204
+ for (let nodeId = 0; nodeId < nodeCount; nodeId++) {
205
+ const numLayers = view.getUint8(offset++);
206
+ for (let l = 0; l < numLayers; l++) {
207
+ const numNeighbors = view.getUint16(offset, true);
208
+ offset += 2;
209
+ const base = (nodeId * maxLayerSlots + l) * 2;
210
+ graphIndex[base] = writeOffset;
211
+ graphIndex[base + 1] = numNeighbors;
130
212
  for (let n = 0; n < numNeighbors; n++) {
131
- neighborList[n] = view.getUint32(offset, true);
213
+ graphNeighborData[writeOffset + n] = view.getUint32(offset, true);
132
214
  offset += 4;
133
215
  }
134
- layers[l] = neighborList;
216
+ writeOffset += numNeighbors;
135
217
  }
136
- neighbors[nodeId] = layers;
137
218
  }
138
- return neighbors;
219
+ return { graphNeighborData, graphIndex, maxLayerSlots };
139
220
  }
140
221
  getVector(nodeId) {
141
222
  const offset = nodeId * this.dimension;
@@ -159,9 +240,25 @@ export class WorkerSearchState {
159
240
  }
160
241
  this.visitedArray[id] = this.visitedGeneration;
161
242
  }
243
+ /**
244
+ * Get neighbor count for a node at a given layer.
245
+ * Uses flat graphIndex for O(1) lookup.
246
+ */
247
+ getNeighborCount(nodeId, layer) {
248
+ const idx = (nodeId * this.maxLayerSlots + layer) * 2 + 1;
249
+ if (idx >= this.graphIndex.length)
250
+ return 0;
251
+ return this.graphIndex[idx];
252
+ }
253
+ /**
254
+ * Get neighbor data offset for a node at a given layer.
255
+ */
256
+ getNeighborOffset(nodeId, layer) {
257
+ return this.graphIndex[(nodeId * this.maxLayerSlots + layer) * 2];
258
+ }
162
259
  /**
163
260
  * Batch distance calculation with inlined 8-wide unrolled loop.
164
- * Mirrors HNSWIndex.calculateDistancesBatch for identical performance.
261
+ * Uses pre-allocated Uint32Array/Float64Array buffers.
165
262
  */
166
263
  calculateDistancesBatch(query, neighborIds, outDistances, count) {
167
264
  const dim = this.dimension;
@@ -296,7 +393,11 @@ export class WorkerSearchState {
296
393
  return buf;
297
394
  }
298
395
  searchKNN(query, k, efSearch) {
299
- if (this.entryPointId === -1 || this.nodeCount === 0)
396
+ // Read current state (may be updated via sharedMetadata during parallel build)
397
+ const entryPointId = this.sharedMetadata ? this.sharedMetadata[1] : this.entryPointId;
398
+ const maxLevel = this.sharedMetadata ? this.sharedMetadata[2] : this.maxLevel;
399
+ const nodeCount = this.sharedMetadata ? this.sharedMetadata[0] : this.nodeCount;
400
+ if (entryPointId === -1 || nodeCount === 0)
300
401
  return [];
301
402
  const effectiveEf = efSearch || Math.max(k * 2, 50);
302
403
  let normalizedQuery = query;
@@ -306,16 +407,18 @@ export class WorkerSearchState {
306
407
  normalizedQuery = this.queryNormBuffer;
307
408
  }
308
409
  // Greedy descent from top to layer 1
309
- let currentBestId = this.entryPointId;
310
- let currentBestDist = this.distanceFn(normalizedQuery, this.getVector(this.entryPointId));
311
- for (let l = this.maxLevel; l > 0; l--) {
410
+ let currentBestId = entryPointId;
411
+ let currentBestDist = this.distanceFn(normalizedQuery, this.getVector(entryPointId));
412
+ for (let l = maxLevel; l > 0; l--) {
312
413
  this.clearVisited();
313
414
  this.markVisited(currentBestId);
314
415
  let improved = true;
315
416
  while (improved) {
316
417
  improved = false;
317
- const nodeNeighbors = this.neighbors[currentBestId]?.[l] || [];
318
- for (const nid of nodeNeighbors) {
418
+ const nOffset = this.getNeighborOffset(currentBestId, l);
419
+ const nCount = this.getNeighborCount(currentBestId, l);
420
+ for (let n = 0; n < nCount; n++) {
421
+ const nid = this.graphNeighborData[nOffset + n];
319
422
  if (this.isVisited(nid))
320
423
  continue;
321
424
  this.markVisited(nid);
@@ -332,13 +435,16 @@ export class WorkerSearchState {
332
435
  return this.searchLayer0(normalizedQuery, currentBestId, currentBestDist, effectiveEf, k);
333
436
  }
334
437
  /**
335
- * Quantized search: int8 candidate scan float32 rescore.
438
+ * Quantized search: int8 candidate scan -> float32 rescore.
336
439
  */
337
440
  searchKNNQuantized(query, k, candidateMultiplier = 3, efSearch) {
338
441
  if (!this.quantizationEnabled || !this.flatInt8Vectors || !this.queryInt8Buffer) {
339
442
  return this.searchKNN(query, k, efSearch || Math.max(k * 2, 50));
340
443
  }
341
- if (this.entryPointId === -1 || this.nodeCount === 0)
444
+ const entryPointId = this.sharedMetadata ? this.sharedMetadata[1] : this.entryPointId;
445
+ const maxLevel = this.sharedMetadata ? this.sharedMetadata[2] : this.maxLevel;
446
+ const nodeCount = this.sharedMetadata ? this.sharedMetadata[0] : this.nodeCount;
447
+ if (entryPointId === -1 || nodeCount === 0)
342
448
  return [];
343
449
  let normalizedQuery = query;
344
450
  if (this.vectorsAreNormalized) {
@@ -349,16 +455,18 @@ export class WorkerSearchState {
349
455
  const numCandidates = k * candidateMultiplier;
350
456
  const effectiveEf = efSearch || Math.max(numCandidates * 2, 50);
351
457
  // Phase 1: Float32 greedy descent (upper layers)
352
- let currentBestId = this.entryPointId;
353
- let currentBestDist = this.distanceFn(normalizedQuery, this.getVector(this.entryPointId));
354
- for (let l = this.maxLevel; l > 0; l--) {
458
+ let currentBestId = entryPointId;
459
+ let currentBestDist = this.distanceFn(normalizedQuery, this.getVector(entryPointId));
460
+ for (let l = maxLevel; l > 0; l--) {
355
461
  this.clearVisited();
356
462
  this.markVisited(currentBestId);
357
463
  let improved = true;
358
464
  while (improved) {
359
465
  improved = false;
360
- const nodeNeighbors = this.neighbors[currentBestId]?.[l] || [];
361
- for (const nid of nodeNeighbors) {
466
+ const nOffset = this.getNeighborOffset(currentBestId, l);
467
+ const nCount = this.getNeighborCount(currentBestId, l);
468
+ for (let n = 0; n < nCount; n++) {
469
+ const nid = this.graphNeighborData[nOffset + n];
362
470
  if (this.isVisited(nid))
363
471
  continue;
364
472
  this.markVisited(nid);
@@ -407,6 +515,7 @@ export class WorkerSearchState {
407
515
  }
408
516
  /**
409
517
  * Layer 0 float32 search with batch distance calculation.
518
+ * Uses flat graphIndex for O(1) neighbor lookup (no JS object dereference chain).
410
519
  */
411
520
  searchLayer0(query, entryId, entryDist, ef, k) {
412
521
  this.clearVisited();
@@ -423,11 +532,13 @@ export class WorkerSearchState {
423
532
  if (candDist > furthestResultDist && this.resultsHeap.size() >= ef)
424
533
  break;
425
534
  const candId = this.candidatesHeap.pop();
426
- const nodeNeighbors = this.neighbors[candId]?.[0] || [];
535
+ // Flat graph lookup: O(1) indexed access
536
+ const nOffset = this.getNeighborOffset(candId, 0);
537
+ const nCount = this.getNeighborCount(candId, 0);
427
538
  // Collect unvisited neighbors for batch distance
428
539
  let batchCount = 0;
429
- for (let i = 0; i < nodeNeighbors.length; i++) {
430
- const neighborId = nodeNeighbors[i];
540
+ for (let i = 0; i < nCount; i++) {
541
+ const neighborId = this.graphNeighborData[nOffset + i];
431
542
  if (!this.isVisited(neighborId)) {
432
543
  this.markVisited(neighborId);
433
544
  batchIds[batchCount] = neighborId;
@@ -435,9 +546,6 @@ export class WorkerSearchState {
435
546
  }
436
547
  }
437
548
  if (batchCount > 0) {
438
- if (batchDists.length < batchCount) {
439
- this.batchDistances.length = batchCount;
440
- }
441
549
  this.calculateDistancesBatch(query, batchIds, batchDists, batchCount);
442
550
  for (let i = 0; i < batchCount; i++) {
443
551
  const distance = batchDists[i];
@@ -502,10 +610,12 @@ export class WorkerSearchState {
502
610
  if (candDist > furthestResultDist && this.resultsHeap.size() >= ef)
503
611
  break;
504
612
  const candId = this.candidatesHeap.pop();
505
- const nodeNeighbors = this.neighbors[candId]?.[0] || [];
613
+ // Flat graph lookup
614
+ const nOffset = this.getNeighborOffset(candId, 0);
615
+ const nCount = this.getNeighborCount(candId, 0);
506
616
  let batchCount = 0;
507
- for (let i = 0; i < nodeNeighbors.length; i++) {
508
- const neighborId = nodeNeighbors[i];
617
+ for (let i = 0; i < nCount; i++) {
618
+ const neighborId = this.graphNeighborData[nOffset + i];
509
619
  if (!this.isVisited(neighborId)) {
510
620
  this.markVisited(neighborId);
511
621
  batchIds[batchCount] = neighborId;
@@ -513,9 +623,6 @@ export class WorkerSearchState {
513
623
  }
514
624
  }
515
625
  if (batchCount > 0) {
516
- if (batchDists.length < batchCount) {
517
- this.batchDistances.length = batchCount;
518
- }
519
626
  this.calculateDistancesBatchInt8(int8Query, batchIds, batchDists, batchCount);
520
627
  for (let i = 0; i < batchCount; i++) {
521
628
  const distance = batchDists[i];
@@ -543,15 +650,54 @@ export class WorkerSearchState {
543
650
  }
544
651
  /**
545
652
  * Apply incremental graph updates from the main thread.
546
- * Adds new nodes' neighbor lists without full re-deserialization.
653
+ * When using shared graph SABs, this is a no-op since workers
654
+ * read neighbor data directly from shared memory.
547
655
  */
548
656
  applyGraphUpdate(newNodes) {
657
+ // If using shared graph, data is already visible via SAB — no-op
658
+ if (this.sharedMetadata)
659
+ return;
660
+ // Legacy mode: write updates into the flat graph arrays
549
661
  for (const node of newNodes) {
550
- // Grow neighbors array if needed
551
- while (this.neighbors.length <= node.id) {
552
- this.neighbors.push([]);
662
+ // Ensure graphIndex is large enough
663
+ const requiredIndexSize = (node.id + 1) * this.maxLayerSlots * 2;
664
+ if (requiredIndexSize > this.graphIndex.length) {
665
+ const newSize = Math.max(this.graphIndex.length * 2, requiredIndexSize);
666
+ const newIndex = new Uint32Array(newSize);
667
+ newIndex.set(this.graphIndex);
668
+ this.graphIndex = newIndex;
669
+ }
670
+ // Calculate space needed for this node's neighbors
671
+ let totalNeighbors = 0;
672
+ for (const neighbors of node.neighbors) {
673
+ totalNeighbors += neighbors?.length ?? 0;
674
+ }
675
+ // Ensure graphNeighborData has space (append at end)
676
+ let writeOffset = 0;
677
+ // Find current end of neighbor data
678
+ for (let i = 0; i < this.graphIndex.length; i += 2) {
679
+ const off = this.graphIndex[i];
680
+ const cnt = this.graphIndex[i + 1];
681
+ if (off + cnt > writeOffset)
682
+ writeOffset = off + cnt;
683
+ }
684
+ if (writeOffset + totalNeighbors > this.graphNeighborData.length) {
685
+ const newSize = Math.max(this.graphNeighborData.length * 2, writeOffset + totalNeighbors + 1000);
686
+ const newData = new Uint32Array(newSize);
687
+ newData.set(this.graphNeighborData);
688
+ this.graphNeighborData = newData;
689
+ }
690
+ // Write neighbor data
691
+ for (let l = 0; l < node.neighbors.length && l < this.maxLayerSlots; l++) {
692
+ const neighbors = node.neighbors[l] ?? [];
693
+ const base = (node.id * this.maxLayerSlots + l) * 2;
694
+ this.graphIndex[base] = writeOffset;
695
+ this.graphIndex[base + 1] = neighbors.length;
696
+ for (let n = 0; n < neighbors.length; n++) {
697
+ this.graphNeighborData[writeOffset + n] = neighbors[n];
698
+ }
699
+ writeOffset += neighbors.length;
553
700
  }
554
- this.neighbors[node.id] = node.neighbors;
555
701
  // Grow visited array if needed
556
702
  if (node.id >= this.visitedArray.length) {
557
703
  const newArr = new Uint16Array(Math.max(this.visitedArray.length * 2, node.id + 1000));
@@ -560,14 +706,24 @@ export class WorkerSearchState {
560
706
  }
561
707
  }
562
708
  // Update nodeCount
563
- this.nodeCount = this.neighbors.length;
709
+ for (const node of newNodes) {
710
+ if (node.id >= this.nodeCount) {
711
+ this.nodeCount = node.id + 1;
712
+ }
713
+ }
564
714
  }
565
715
  /**
566
- * Update entry point and max level (called after graph update).
716
+ * Update entry point, max level, and optionally node count.
567
717
  */
568
- updateEntryPoint(entryPointId, maxLevel) {
718
+ updateEntryPoint(entryPointId, maxLevel, nodeCount) {
719
+ // If using shared metadata, these are read from SAB — no-op
720
+ if (this.sharedMetadata)
721
+ return;
569
722
  this.entryPointId = entryPointId;
570
723
  this.maxLevel = maxLevel;
724
+ if (nodeCount !== undefined) {
725
+ this.nodeCount = nodeCount;
726
+ }
571
727
  }
572
728
  }
573
729
  //# sourceMappingURL=SearchWorker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SearchWorker.js","sourceRoot":"","sources":["../src/SearchWorker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAyBhD,iDAAiD;AACjD,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,OAAQ,IAAY,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;IACnF,IAAI,KAAK,GAA6B,IAAI,CAAC;IAE3C,IAAI,CAAC,SAAS,GAAG,CAAC,KAAmB,EAAE,EAAE;QACvC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC;QAEvB,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACxB,KAAK,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAClC,IAAY,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACV,IAAY,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,CAAC;gBACpG,OAAO;YACT,CAAC;YACD,IAAI,CAAC;gBACH,IAAI,OAAgD,CAAC;gBACrD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;oBAClB,OAAO,GAAG,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,mBAAmB,IAAI,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACnG,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC5D,CAAC;gBACA,IAAY,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAwB,CAAC,CAAC;YACrG,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACZ,IAAY,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9H,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACtC,0DAA0D;YAC1D,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YAC3C,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IACpB,WAAW,CAAe;IAC1B,eAAe,CAAmB;IAClC,SAAS,CAAS;IAClB,SAAS,CAAS;IAClB,MAAM,CAAyC;IAC/C,YAAY,CAAS;IACrB,QAAQ,CAAS;IACzB,mEAAmE;IAC3D,SAAS,CAAe;IAEhC,2BAA2B;IACnB,YAAY,CAAc;IAC1B,iBAAiB,GAAW,CAAC,CAAC;IAC9B,cAAc,CAAa;IAC3B,WAAW,CAAgB;IAC3B,eAAe,CAAe;IAC9B,oBAAoB,CAAU;IAEtC,qCAAqC;IAC7B,gBAAgB,GAAa,EAAE,CAAC;IAChC,cAAc,GAAa,EAAE,CAAC;IAEtC,qBAAqB;IACb,mBAAmB,CAAU;IAC7B,iBAAiB,GAAwB,IAAI,CAAC;IAC9C,kBAAkB,GAAwB,IAAI,CAAC;IAC/C,eAAe,GAAqB,IAAI,CAAC;IAEzC,UAAU,CAA+C;IAEjE,YAAY,IAAoB;QAC9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC;QACrD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC;QAErF,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;YACvD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;YACzD,IAAI,CAAC,eAAe,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvD,CAAC;QAED,8BAA8B;QAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvD,0BAA0B;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,WAAW,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,eAAe,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAExD,2BAA2B;QAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACzB,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gBAClB,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACvC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,MAAmB;QAC1C,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,SAAS,GAAiB,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1D,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;YACvD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAe,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;YAEhD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAClD,MAAM,IAAI,CAAC,CAAC;gBACZ,MAAM,YAAY,GAAa,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;gBAEvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;oBAC/C,MAAM,IAAI,CAAC,CAAC;gBACd,CAAC;gBACD,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;YAC3B,CAAC;YACD,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;QAC7B,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,SAAS,CAAC,MAAc;QAC9B,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QACvC,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IACpE,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,iBAAiB,GAAG,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAEO,SAAS,CAAC,EAAU;QAC1B,OAAO,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAAC;IAC3F,CAAC;IAEO,WAAW,CAAC,EAAU;QAC5B,IAAI,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;YAClF,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC9B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC;IACjD,CAAC;IAED;;;OAGG;IACK,uBAAuB,CAC7B,KAAmB,EACnB,WAAqB,EACrB,YAAsB,EACtB,KAAa;QAEb,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAEpC,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC7B,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;gBAC3C,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;gBAC3C,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;gBACvB,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1B,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC3C,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnD,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnD,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnD,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnD,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnD,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnD,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrD,CAAC;gBACD,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBACpB,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC7C,CAAC;gBACD,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;gBAClE,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;gBACrB,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5C,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBACvC,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;gBAC3C,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;gBAC3C,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;gBACvB,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1B,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC9C,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACtD,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACtD,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACtD,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACtD,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACtD,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACtD,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACtD,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;oBAAC,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;oBAAC,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;oBAAC,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;oBACnE,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;oBAAC,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;oBAAC,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;oBAAC,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;gBACrE,CAAC;gBACD,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBACpB,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAChD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;gBACtB,CAAC;gBACD,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;YACrF,CAAC;iBAAM,CAAC;gBACN,oBAAoB;gBACpB,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;gBAC3C,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;gBAC3C,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;gBACvB,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1B,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC3C,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnD,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnD,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnD,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnD,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnD,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnD,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrD,CAAC;gBACD,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBACpB,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC7C,CAAC;gBACD,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,2BAA2B,CACjC,SAAoB,EACpB,WAAqB,EACrB,YAAsB,EACtB,KAAa;QAEb,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAgB,CAAC;QAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAEpC,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAChC,IAAI,GAAG,GAAG,CAAC,CAAC;gBACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACjD,GAAG,IAAI,IAAI,GAAG,IAAI,CAAC;gBACrB,CAAC;gBACD,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,kCAAkC;gBAClC,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;gBAC3C,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;gBAC3C,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;gBACvB,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1B,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC5C,IAAI,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBACpD,IAAI,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBACpD,IAAI,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBACpD,IAAI,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBACpD,IAAI,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBACpD,IAAI,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBACpD,IAAI,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtD,CAAC;gBACD,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBACpB,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC9C,CAAC;gBACD,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,KAAmB;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,eAAgB,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAkB,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAmB,CAAC;QAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAC3D,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,SAAS,CAAC,KAAmB,EAAE,CAAS,EAAE,QAAgB;QACxD,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEhE,MAAM,WAAW,GAAG,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAEpD,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAChC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACvC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QACzC,CAAC;QAED,qCAAqC;QACrC,IAAI,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QAE1F,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YAChC,IAAI,QAAQ,GAAG,IAAI,CAAC;YACpB,OAAO,QAAQ,EAAE,CAAC;gBAChB,QAAQ,GAAG,KAAK,CAAC;gBACjB,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC/D,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;oBAChC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;wBAAE,SAAS;oBAClC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;oBACtB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnE,IAAI,IAAI,GAAG,eAAe,EAAE,CAAC;wBAC3B,eAAe,GAAG,IAAI,CAAC;wBACvB,aAAa,GAAG,GAAG,CAAC;wBACpB,QAAQ,GAAG,IAAI,CAAC;oBAClB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,iDAAiD;QACjD,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED;;OAEG;IACH,kBAAkB,CAChB,KAAmB,EACnB,CAAS,EACT,sBAA8B,CAAC,EAC/B,QAAiB;QAEjB,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAChF,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEhE,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAChC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACvC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QACzC,CAAC;QAED,MAAM,aAAa,GAAG,CAAC,GAAG,mBAAmB,CAAC;QAC9C,MAAM,WAAW,GAAG,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAEhE,iDAAiD;QACjD,IAAI,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QAE1F,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YAChC,IAAI,QAAQ,GAAG,IAAI,CAAC;YACpB,OAAO,QAAQ,EAAE,CAAC;gBAChB,QAAQ,GAAG,KAAK,CAAC;gBACjB,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC/D,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;oBAChC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;wBAAE,SAAS;oBAClC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;oBACtB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnE,IAAI,IAAI,GAAG,eAAe,EAAE,CAAC;wBAC3B,eAAe,GAAG,IAAI,CAAC;wBACvB,aAAa,GAAG,GAAG,CAAC;wBACpB,QAAQ,GAAG,IAAI,CAAC;oBAClB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,+BAA+B;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;QAEhF,6CAA6C;QAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAEhE,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAmC,YAAY,CAAC,CAAC;YAC3E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBACxB,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC/F,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YAChE,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACpE,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACxB,CAAC;iBAAM,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;gBACnC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACX,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,KAAK,CAAmC,QAAQ,CAAC,CAAC;QACrE,KAAK,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YAC5D,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,YAAY,CAClB,KAAmB,EACnB,OAAe,EACf,SAAiB,EACjB,EAAU,EACV,CAAS;QAET,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAEzB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE1B,IAAI,kBAAkB,GAAG,SAAS,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC;QAEvC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;YACjD,IAAI,QAAQ,GAAG,kBAAkB,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE;gBAAE,MAAM;YAE1E,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC;YACzC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAExD,iDAAiD;YACjD,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9C,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;oBAChC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;oBAC7B,QAAQ,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;oBAClC,UAAU,EAAE,CAAC;gBACf,CAAC;YACH,CAAC;YAED,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,UAAU,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;oBACnC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,UAAU,CAAC;gBAC1C,CAAC;gBACD,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;gBAEtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;oBACpC,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;oBAC/B,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,QAAQ,GAAG,kBAAkB,EAAE,CAAC;wBAClE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;wBAChD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;wBAC7C,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;4BACjC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;wBACzB,CAAC;wBACD,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;oBACpD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAC5C,MAAM,OAAO,GAA4C,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;QAChF,IAAI,GAAG,GAAG,WAAW,GAAG,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;YAC1C,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC1C,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,gBAAgB,CACtB,SAAoB,EACpB,OAAe,EACf,EAAU;QAEV,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAEzB,mCAAmC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAgB,CAAC;QACvC,MAAM,WAAW,GAAG,OAAO,GAAG,GAAG,CAAC;QAClC,IAAI,SAAiB,CAAC;QACtB,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAChC,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;gBACtD,GAAG,IAAI,IAAI,GAAG,IAAI,CAAC;YACrB,CAAC;YACD,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;YAClD,CAAC;YACD,SAAS,GAAG,CAAC,GAAG,CAAC;QACnB,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE1B,IAAI,kBAAkB,GAAG,SAAS,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC;QAEvC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;YACjD,IAAI,QAAQ,GAAG,kBAAkB,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE;gBAAE,MAAM;YAE1E,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC;YACzC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAExD,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9C,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;oBAChC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;oBAC7B,QAAQ,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;oBAClC,UAAU,EAAE,CAAC;gBACf,CAAC;YACH,CAAC;YAED,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,UAAU,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;oBACnC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,UAAU,CAAC;gBAC1C,CAAC;gBACD,IAAI,CAAC,2BAA2B,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;gBAE9E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;oBACpC,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;oBAC/B,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,QAAQ,GAAG,kBAAkB,EAAE,CAAC;wBAClE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;wBAChD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;wBAC7C,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;4BACjC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;wBACzB,CAAC;wBACD,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;oBACpD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAC5C,MAAM,OAAO,GAA4C,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;QAChF,IAAI,GAAG,GAAG,WAAW,GAAG,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;YAC1C,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC1C,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,QAAsD;QACrE,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,iCAAiC;YACjC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACxC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YAEzC,+BAA+B;YAC/B,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;gBACxC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;gBACvF,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC9B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,mBAAmB;QACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,YAAoB,EAAE,QAAgB;QACrD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF"}
1
+ {"version":3,"file":"SearchWorker.js","sourceRoot":"","sources":["../src/SearchWorker.ts"],"names":[],"mappings":"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"}