@graphty/layout 1.2.0 → 1.2.1

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 (86) hide show
  1. package/.github/workflows/ci.yml +3 -7
  2. package/CHANGELOG.md +7 -0
  3. package/README.md +1 -1
  4. package/dist/vitest.config.js +2 -2
  5. package/dist/vitest.config.js.map +1 -1
  6. package/examples/3d-kamada-kawai.html +4 -19
  7. package/examples/bfs-layout.html +26 -32
  8. package/examples/bipartite-layout.html +3 -3
  9. package/examples/forceatlas2-layout.html +106 -151
  10. package/{dist → examples}/layout-helpers.js +58 -30
  11. package/examples/multipartite-layout.html +32 -14
  12. package/examples/shell-layout.html +4 -2
  13. package/examples/spring-layout.html +1 -11
  14. package/package.json +3 -3
  15. package/src/algorithms/index.ts +6 -0
  16. package/src/algorithms/optimization/index.ts +12 -0
  17. package/src/algorithms/optimization/kamada-kawai-solver.ts +231 -0
  18. package/src/algorithms/optimization/lbfgs.ts +68 -0
  19. package/src/algorithms/optimization/line-search.ts +50 -0
  20. package/src/algorithms/optimization/types.ts +8 -0
  21. package/src/algorithms/planarity/check.ts +38 -0
  22. package/src/algorithms/planarity/embedding.ts +216 -0
  23. package/src/algorithms/planarity/index.ts +12 -0
  24. package/src/algorithms/planarity/lr-test.ts +70 -0
  25. package/src/algorithms/planarity/special-graphs.ts +126 -0
  26. package/src/generators/basic.ts +93 -0
  27. package/src/generators/bipartite.ts +45 -0
  28. package/src/generators/grid.ts +42 -0
  29. package/src/generators/index.ts +15 -0
  30. package/src/generators/random.ts +39 -0
  31. package/src/generators/scale-free.ts +72 -0
  32. package/src/index.ts +18 -0
  33. package/src/layouts/basic/index.ts +5 -0
  34. package/src/layouts/basic/random.ts +32 -0
  35. package/src/layouts/force-directed/arf.ts +130 -0
  36. package/src/layouts/force-directed/forceatlas2.ts +407 -0
  37. package/src/layouts/force-directed/fruchterman-reingold.ts +164 -0
  38. package/src/layouts/force-directed/index.ts +9 -0
  39. package/src/layouts/force-directed/kamada-kawai.ts +112 -0
  40. package/src/layouts/force-directed/spring.ts +35 -0
  41. package/src/layouts/geometric/circular.ts +77 -0
  42. package/src/layouts/geometric/index.ts +7 -0
  43. package/src/layouts/geometric/shell.ts +80 -0
  44. package/src/layouts/geometric/spiral.ts +93 -0
  45. package/src/layouts/hierarchical/bfs.ts +81 -0
  46. package/src/layouts/hierarchical/bipartite.ts +94 -0
  47. package/src/layouts/hierarchical/index.ts +7 -0
  48. package/src/layouts/hierarchical/multipartite.ts +88 -0
  49. package/src/layouts/index.ts +9 -0
  50. package/src/layouts/specialized/index.ts +6 -0
  51. package/src/layouts/specialized/planar.ts +65 -0
  52. package/src/layouts/specialized/spectral.ts +128 -0
  53. package/src/types/embedding.ts +11 -0
  54. package/src/types/graph.ts +13 -0
  55. package/src/types/index.ts +7 -0
  56. package/src/types/layout.ts +9 -0
  57. package/src/utils/graph.ts +77 -0
  58. package/src/utils/index.ts +9 -0
  59. package/src/utils/numpy.ts +108 -0
  60. package/src/utils/params.ts +26 -0
  61. package/src/utils/random.ts +53 -0
  62. package/src/utils/rescale.ts +137 -0
  63. package/test/arf-layout.test.ts +1 -1
  64. package/test/bfs-layout.test.ts +1 -1
  65. package/test/bipartite-layout.test.ts +1 -1
  66. package/test/circular-layout.test.ts +1 -1
  67. package/test/forceatlas2-layout.test.ts +1 -1
  68. package/test/fruchterman-reingold-layout.test.ts +1 -1
  69. package/test/graph-generators.test.ts +1 -1
  70. package/test/kamada-kawai-layout.test.ts +1 -1
  71. package/test/multipartite-layout.test.ts +1 -1
  72. package/test/planar-layout.test.ts +1 -1
  73. package/test/random-layout.test.ts +1 -1
  74. package/test/rescale-layout.test.ts +1 -1
  75. package/test/shell-layout.test.ts +1 -1
  76. package/test/spectral-layout.test.ts +1 -1
  77. package/test/spiral-layout.test.ts +1 -1
  78. package/test/spring-layout.test.ts +1 -1
  79. package/vitest.config.ts +2 -2
  80. package/dist/layout-helpers.d.ts +0 -123
  81. package/dist/layout-helpers.js.map +0 -1
  82. package/dist/layout.d.ts +0 -275
  83. package/dist/layout.js +0 -2304
  84. package/dist/layout.js.map +0 -1
  85. package/layout-helpers.ts +0 -560
  86. package/layout.ts +0 -2893
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Random number generator for seed-based randomization
3
+ * Maintains exact same functionality as original implementation
4
+ */
5
+
6
+ export class RandomNumberGenerator {
7
+ private seed: number;
8
+ private m: number;
9
+ private a: number;
10
+ private c: number;
11
+ private _state: number;
12
+
13
+ constructor(seed?: number) {
14
+ this.seed = seed || Math.floor(Math.random() * 1000000);
15
+ this.m = 2 ** 35 - 31;
16
+ this.a = 185852;
17
+ this.c = 1;
18
+ this._state = this.seed % this.m;
19
+ }
20
+
21
+ _next(): number {
22
+ this._state = (this.a * this._state + this.c) % this.m;
23
+ return this._state / this.m;
24
+ }
25
+
26
+ rand(shape: number | number[] | null = null): number | number[] | number[][] {
27
+ if (shape === null) {
28
+ return this._next();
29
+ }
30
+
31
+ if (typeof shape === 'number') {
32
+ const result: number[] = [];
33
+ for (let i = 0; i < shape; i++) {
34
+ result.push(this._next());
35
+ }
36
+ return result;
37
+ }
38
+
39
+ if (shape.length === 1) {
40
+ const result: number[] = [];
41
+ for (let i = 0; i < shape[0]; i++) {
42
+ result.push(this._next());
43
+ }
44
+ return result;
45
+ }
46
+
47
+ const result: any[] = [];
48
+ for (let i = 0; i < shape[0]; i++) {
49
+ result.push(this.rand(shape.slice(1)));
50
+ }
51
+ return result;
52
+ }
53
+ }
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Layout rescaling utilities
3
+ */
4
+
5
+ import { PositionMap } from '../types';
6
+
7
+ /**
8
+ * Returns scaled position array/dict to (-scale, scale) in all axes.
9
+ *
10
+ * @param pos - Position dictionary or array
11
+ * @param scale - Scale factor for positions
12
+ * @param center - Coordinate pair around which to center the layout
13
+ * @returns Rescaled positions dictionary
14
+ */
15
+ export function rescaleLayout(
16
+ pos: PositionMap | number[][],
17
+ scale: number = 1,
18
+ center: number[] = [0, 0]
19
+ ): PositionMap | number[][] {
20
+ // Check if pos is empty
21
+ if (Array.isArray(pos)) {
22
+ if (pos.length === 0) return [];
23
+ } else {
24
+ if (Object.keys(pos).length === 0) return {};
25
+ }
26
+
27
+ // Extract position values
28
+ const posValues: number[][] = Array.isArray(pos) ? pos : Object.values(pos);
29
+ const dim = posValues[0].length;
30
+
31
+ // Calculate center of positions
32
+ const posCenter = Array(dim).fill(0);
33
+ for (const p of posValues) {
34
+ for (let i = 0; i < dim; i++) {
35
+ posCenter[i] += p[i] / posValues.length;
36
+ }
37
+ }
38
+
39
+ // Center positions
40
+ let centeredPos: PositionMap | number[][] = {};
41
+ if (Array.isArray(pos)) {
42
+ centeredPos = pos.map(p => p.map((val, i) => val - posCenter[i]));
43
+ } else {
44
+ for (const [node, p] of Object.entries(pos)) {
45
+ (centeredPos as PositionMap)[node] = p.map((val, i) => val - posCenter[i]);
46
+ }
47
+ }
48
+
49
+ // Find maximum distance from center
50
+ let maxDistance = 0;
51
+ const centeredValues = Array.isArray(centeredPos) ? centeredPos : Object.values(centeredPos);
52
+ for (const p of centeredValues) {
53
+ const distance = Math.sqrt(p.reduce((sum, val) => sum + val * val, 0));
54
+ maxDistance = Math.max(maxDistance, distance);
55
+ }
56
+
57
+ // Rescale
58
+ let scaledPos: PositionMap | number[][] = Array.isArray(pos) ? [] : {};
59
+
60
+ if (maxDistance > 0) {
61
+ const scaleFactor = scale / maxDistance;
62
+
63
+ if (Array.isArray(pos)) {
64
+ (scaledPos as number[][]) = (centeredPos as number[][]).map(p =>
65
+ p.map((val, i) => val * scaleFactor + center[i])
66
+ );
67
+ } else {
68
+ for (const [node, p] of Object.entries(centeredPos as PositionMap)) {
69
+ (scaledPos as PositionMap)[node] = p.map((val, i) => val * scaleFactor + center[i]);
70
+ }
71
+ }
72
+ } else {
73
+ // All nodes at the same position
74
+ if (Array.isArray(pos)) {
75
+ (scaledPos as number[][]) = Array(pos.length).fill(0).map(() => [...center]);
76
+ } else {
77
+ for (const node of Object.keys(pos)) {
78
+ (scaledPos as PositionMap)[node] = [...center];
79
+ }
80
+ }
81
+ }
82
+
83
+ return scaledPos;
84
+ }
85
+
86
+ /**
87
+ * Return a dictionary of scaled positions centered at (0, 0).
88
+ *
89
+ * @param pos - Dictionary of positions
90
+ * @param scale - Scale factor for positions
91
+ * @returns Dictionary of scaled positions
92
+ */
93
+ export function rescaleLayoutDict(
94
+ pos: PositionMap,
95
+ scale: number = 1
96
+ ): PositionMap {
97
+ if (Object.keys(pos).length === 0) {
98
+ return {};
99
+ }
100
+
101
+ // Extract positions as array
102
+ const posArray = Object.values(pos);
103
+
104
+ // Find center of positions
105
+ const center: number[] = [];
106
+ for (let d = 0; d < posArray[0].length; d++) {
107
+ center[d] = posArray.reduce((sum, p) => sum + p[d], 0) / posArray.length;
108
+ }
109
+
110
+ // Center positions
111
+ const centeredPos: PositionMap = {};
112
+ for (const [node, p] of Object.entries(pos)) {
113
+ centeredPos[node] = p.map((val, d) => val - center[d]);
114
+ }
115
+
116
+ // Find maximum distance from center
117
+ let maxDist = 0;
118
+ for (const p of Object.values(centeredPos)) {
119
+ const dist = Math.sqrt(p.reduce((sum, val) => sum + val * val, 0));
120
+ maxDist = Math.max(maxDist, dist);
121
+ }
122
+
123
+ // Scale positions
124
+ const scaledPos: PositionMap = {};
125
+ if (maxDist > 0) {
126
+ for (const [node, p] of Object.entries(centeredPos)) {
127
+ scaledPos[node] = p.map(val => val * scale / maxDist);
128
+ }
129
+ } else {
130
+ // All points at the center
131
+ for (const node of Object.keys(centeredPos)) {
132
+ scaledPos[node] = Array(centeredPos[node].length).fill(0);
133
+ }
134
+ }
135
+
136
+ return scaledPos;
137
+ }
@@ -6,7 +6,7 @@ import {
6
6
  starGraph,
7
7
  gridGraph,
8
8
  randomGraph
9
- } from '../layout.ts';
9
+ } from '../src';
10
10
 
11
11
  describe('ARF Layout', () => {
12
12
  describe('Basic functionality', () => {
@@ -7,7 +7,7 @@ import {
7
7
  wheelGraph,
8
8
  gridGraph,
9
9
  randomGraph
10
- } from '../layout.ts';
10
+ } from '../src';
11
11
 
12
12
  describe('BFS Layout', () => {
13
13
  describe('Basic functionality', () => {
@@ -2,7 +2,7 @@ import { describe, it, assert } from 'vitest';
2
2
  import {
3
3
  bipartiteLayout,
4
4
  bipartiteGraph
5
- } from '../layout.ts';
5
+ } from '../src';
6
6
 
7
7
  describe('Bipartite Layout', () => {
8
8
  describe('Basic functionality', () => {
@@ -7,7 +7,7 @@ import {
7
7
  wheelGraph,
8
8
  gridGraph,
9
9
  randomGraph
10
- } from '../layout.js';
10
+ } from '../src';
11
11
 
12
12
  describe('Circular Layout', () => {
13
13
  describe('Basic functionality', () => {
@@ -7,7 +7,7 @@ import {
7
7
  gridGraph,
8
8
  randomGraph,
9
9
  scaleFreeGraph
10
- } from '../layout.ts';
10
+ } from '../src';
11
11
 
12
12
  describe('ForceAtlas2 Layout', () => {
13
13
  describe('Basic functionality', () => {
@@ -6,7 +6,7 @@ import {
6
6
  starGraph,
7
7
  gridGraph,
8
8
  randomGraph
9
- } from '../layout.ts';
9
+ } from '../src';
10
10
 
11
11
  describe('Fruchterman-Reingold Layout', () => {
12
12
  describe('Basic functionality', () => {
@@ -9,7 +9,7 @@ import {
9
9
  bipartiteGraph,
10
10
  scaleFreeGraph,
11
11
  circularLayout
12
- } from '../layout.ts';
12
+ } from '../src';
13
13
 
14
14
  describe('Graph Generators', () => {
15
15
  describe('completeGraph', () => {
@@ -6,7 +6,7 @@ import {
6
6
  starGraph,
7
7
  gridGraph,
8
8
  randomGraph
9
- } from '../layout.js';
9
+ } from '../src';
10
10
 
11
11
  describe('Kamada-Kawai Layout', () => {
12
12
  describe('Basic functionality', () => {
@@ -4,7 +4,7 @@ import {
4
4
  completeGraph,
5
5
  cycleGraph,
6
6
  randomGraph
7
- } from '../layout.ts';
7
+ } from '../src';
8
8
 
9
9
  describe('Multipartite Layout', () => {
10
10
  describe('Basic functionality', () => {
@@ -6,7 +6,7 @@ import {
6
6
  starGraph,
7
7
  gridGraph,
8
8
  wheelGraph
9
- } from '../layout.ts';
9
+ } from '../src';
10
10
 
11
11
  describe('Planar Layout', () => {
12
12
  describe('Basic functionality', () => {
@@ -5,7 +5,7 @@ import {
5
5
  cycleGraph,
6
6
  starGraph,
7
7
  gridGraph
8
- } from '../layout.ts';
8
+ } from '../src';
9
9
 
10
10
  describe('Random Layout', () => {
11
11
  describe('Basic functionality', () => {
@@ -6,7 +6,7 @@ import {
6
6
  randomLayout,
7
7
  completeGraph,
8
8
  starGraph
9
- } from '../layout.ts';
9
+ } from '../src';
10
10
 
11
11
  describe('Rescale Layout', () => {
12
12
  describe('Dictionary format (rescaleLayout)', () => {
@@ -7,7 +7,7 @@ import {
7
7
  wheelGraph,
8
8
  gridGraph,
9
9
  randomGraph
10
- } from '../layout.ts';
10
+ } from '../src';
11
11
 
12
12
  describe('Shell Layout', () => {
13
13
  describe('Basic functionality', () => {
@@ -6,7 +6,7 @@ import {
6
6
  starGraph,
7
7
  gridGraph,
8
8
  randomGraph
9
- } from '../layout.ts';
9
+ } from '../src';
10
10
 
11
11
  describe('Spectral Layout', () => {
12
12
  describe('Basic functionality', () => {
@@ -6,7 +6,7 @@ import {
6
6
  starGraph,
7
7
  gridGraph,
8
8
  randomGraph
9
- } from '../layout.ts';
9
+ } from '../src';
10
10
 
11
11
  describe('Spiral Layout', () => {
12
12
  describe('Basic functionality', () => {
@@ -5,7 +5,7 @@ import {
5
5
  cycleGraph,
6
6
  starGraph,
7
7
  randomGraph
8
- } from '../layout.ts';
8
+ } from '../src';
9
9
 
10
10
  describe('Spring Layout', () => {
11
11
  describe('Basic functionality', () => {
package/vitest.config.ts CHANGED
@@ -8,8 +8,8 @@ export default defineConfig({
8
8
  testTimeout: 30000,
9
9
  coverage: {
10
10
  provider: 'v8',
11
- reporter: ['text', 'json', 'html'],
12
- include: ['layout.ts'],
11
+ reporter: ['text', 'json', 'html', 'lcov'],
12
+ include: ['src/**/*.ts'],
13
13
  exclude: ['**/*.d.ts', '**/*.test.ts'],
14
14
  all: true,
15
15
  thresholds: {
@@ -1,123 +0,0 @@
1
- /**
2
- * Layout Helper Functions
3
- * =======================
4
- *
5
- * Essential utilities for graph layouts
6
- */
7
- import { Node, Graph } from './layout';
8
- type PositionMap = Record<Node, number[]>;
9
- /**
10
- * Universal Node Grouping
11
- * =======================
12
- * Groups nodes for shell, multipartite, or custom layouts
13
- */
14
- /**
15
- * Group nodes by various centrality measures.
16
- * Works for shell layout, multipartite layout, or any grouping need.
17
- *
18
- * @param graph - Input graph
19
- * @param method - Grouping method
20
- * @param numGroups - Number of groups to create
21
- * @returns Array of node arrays (groups)
22
- *
23
- * @example
24
- * // For shell layout
25
- * const shells = groupNodes(graph, 'degree', 3);
26
- * const positions = shellLayout(graph, shells);
27
- *
28
- * // For multipartite layout
29
- * const layers = groupNodes(graph, 'bfs', 0); // 0 = auto
30
- * const positions = multipartiteLayout(graph, layers);
31
- */
32
- export declare function groupNodes(graph: Graph, method?: 'degree' | 'bfs' | 'k-core' | 'community', numGroups?: number, options?: {
33
- root?: Node;
34
- }): Node[][];
35
- /**
36
- * Bipartite Detection & Handling
37
- * ==============================
38
- */
39
- /**
40
- * Detect if graph is bipartite and find the two sets.
41
- *
42
- * @param graph - Input graph
43
- * @returns Bipartite sets or null if not bipartite
44
- *
45
- * @example
46
- * const result = detectBipartite(graph);
47
- * if (result) {
48
- * const positions = bipartiteLayout(graph, result.setA);
49
- * }
50
- */
51
- export declare function detectBipartite(graph: Graph): {
52
- setA: Node[];
53
- setB: Node[];
54
- } | null;
55
- /**
56
- * Layout Analysis & Optimization
57
- * ==============================
58
- */
59
- /**
60
- * Find the best root node for tree-like layouts (BFS, hierarchical).
61
- *
62
- * @param graph - Input graph
63
- * @returns Best root node
64
- */
65
- export declare function findBestRoot(graph: Graph): Node | null;
66
- /**
67
- * Check if a graph is planar (can be drawn without edge crossings).
68
- *
69
- * @param graph - Input graph
70
- * @returns true if planar
71
- */
72
- export declare function isPlanar(graph: Graph): boolean;
73
- /**
74
- * Auto-configure force-directed layout parameters.
75
- *
76
- * @param graph - Input graph
77
- * @returns Recommended parameters
78
- */
79
- export declare function autoConfigureForce(graph: Graph): {
80
- k: number;
81
- iterations: number;
82
- gravity: number;
83
- scalingRatio: number;
84
- };
85
- /**
86
- * Layout Quality Metrics
87
- * ======================
88
- */
89
- /**
90
- * Calculate simple layout quality metrics.
91
- *
92
- * @param graph - Input graph
93
- * @param positions - Layout positions
94
- * @returns Quality metrics
95
- */
96
- export declare function layoutQuality(graph: Graph, positions: PositionMap): {
97
- avgEdgeLength: number;
98
- edgeLengthStdDev: number;
99
- minNodeDistance: number;
100
- aspectRatio: number;
101
- };
102
- /**
103
- * Layout Utilities
104
- * ================
105
- */
106
- /**
107
- * Combine multiple layouts with weights.
108
- *
109
- * @param layouts - Array of position maps
110
- * @param weights - Weight for each layout (default: equal)
111
- * @returns Combined positions
112
- */
113
- export declare function combineLayouts(layouts: PositionMap[], weights?: number[]): PositionMap;
114
- /**
115
- * Create smooth animation frames between layouts.
116
- *
117
- * @param from - Starting positions
118
- * @param to - Ending positions
119
- * @param steps - Number of frames
120
- * @returns Array of position maps
121
- */
122
- export declare function interpolateLayouts(from: PositionMap, to: PositionMap, steps?: number): PositionMap[];
123
- export {};
@@ -1 +0,0 @@
1
- {"version":3,"file":"layout-helpers.js","sourceRoot":"","sources":["../layout-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;;;GAIG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,UAAU,CACxB,KAAY,EACZ,SAAoD,QAAQ,EAC5D,YAAoB,CAAC,EACrB,UAA2B,EAAE;IAE7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC;IAEpC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAEhD,KAAK,KAAK;YACR,OAAO,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAErD,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAEpC,KAAK,WAAW;YACd,OAAO,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAEnD;YACE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,wBAAwB;IAC5C,CAAC;AACH,CAAC;AAED;;;GAGG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,KAAY;IAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC;IAEpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAEtD,uBAAuB;IACvB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAgB,CAAC;IACpC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACzC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QACvB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAgB,CAAC;IAEvC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS;QAEhC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;QACtB,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAErB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;YAEpC,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAE,EAAE,CAAC;gBACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1B,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;oBACpC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC;qBAAM,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE,CAAC;oBAC9C,OAAO,IAAI,CAAC,CAAC,gBAAgB;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,MAAM,IAAI,GAAW,EAAE,CAAC;IACxB,MAAM,IAAI,GAAW,EAAE,CAAC;IAExB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;YACvC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED;;;GAGG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAY;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC;IAEpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,uBAAuB;IACvB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAmB,CAAC;IACvC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IAChD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QACvB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,wDAAwD;IACxD,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,gBAAgB,GAAG,QAAQ,CAAC;IAEhC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,2BAA2B;QAC3B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAgB,CAAC;QAC1C,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;QACtB,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACxB,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;YAElC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAChC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC7B,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;oBAClC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;oBACtC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,GAAG,gBAAgB,EAAE,CAAC;YAC/B,gBAAgB,GAAG,OAAO,CAAC;YAC3B,QAAQ,GAAG,KAAK,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAY;IACnC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,IAAI,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,IAAI,CAAC,CAAC;IAEvC,+BAA+B;IAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAE1C,qDAAqD;IACrD,iCAAiC;IACjC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAY;IAM7C,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,IAAI,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,IAAI,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpD,OAAO;QACL,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAG,wCAAwC;QAC9D,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QAC9C,OAAO,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QACxD,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;KAClD,CAAC;AACJ,CAAC;AAED;;;GAGG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,KAAY,EAAE,SAAsB;IAMhE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC;IAEpC,eAAe;IACf,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QACvC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,GAAW,EAAE,CAAS,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpG,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC;IACvF,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC;IACjH,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE7C,wBAAwB;IACxB,IAAI,eAAe,GAAG,QAAQ,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,GAAW,EAAE,CAAS,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxG,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,IAAI,IAAI,GAAG,QAAQ,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC;IACtC,IAAI,IAAI,GAAG,QAAQ,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC;IAEtC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACzB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACzB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACzB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;IAChC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAEtE,OAAO;QACL,aAAa;QACb,gBAAgB;QAChB,eAAe,EAAE,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;QACnE,WAAW;KACZ,CAAC;AACJ,CAAC;AAED;;;GAGG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,OAAsB,EAAE,OAAkB;IACvE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,CAAC,GAAG,OAAO,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEtC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5B,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAiB,EACjB,EAAe,EACf,QAAgB,EAAE;IAElB,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACpB,MAAM,KAAK,GAAgB,EAAE,CAAC;QAE9B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACnB,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,CAAS,EAAE,EAAE,CACtD,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAC9B,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AAEH,SAAS,aAAa,CAAC,KAAa,EAAE,KAAa,EAAE,SAAiB;IACpE,oBAAoB;IACpB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgB,CAAC;IACxC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QACvB,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,iBAAiB;IACjB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;IAE/E,yBAAyB;IACzB,MAAM,MAAM,GAAa,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACvE,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAE1D,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;QAC/C,IAAI,QAAQ,GAAG,SAAS,EAAE,CAAC;YACzB,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,eAAe,CAAC,KAAa,EAAE,KAAa,EAAE,IAAW;IAChE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,MAAM,KAAK,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAgB,CAAC;IAEpC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACzC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QACvB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,aAAa;IACb,MAAM,OAAO,GAAG,IAAI,GAAG,EAAQ,CAAC;IAChC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAEnB,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC;QAClC,MAAM,SAAS,GAAW,EAAE,CAAC;QAE7B,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC1B,GAAG,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3B,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACtB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,YAAY,GAAG,SAAS,CAAC;IAC3B,CAAC;IAED,yBAAyB;IACzB,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,KAAa;IAChD,kBAAkB;IAClB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAmB,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAgB,CAAC;IAEvC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QACvB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,uBAAuB;IACvB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAgB,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAEjC,OAAO,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC1B,sBAAsB;QACtB,IAAI,SAAS,GAAG,QAAQ,CAAC;QACzB,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,wCAAwC;QACxC,MAAM,QAAQ,GAAW,EAAE,CAAC;QAC5B,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,IAAI,SAAS,EAAE,CAAC;gBACnC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAG,CAAC;YAC/B,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAChC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAEvB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAChC,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAE,GAAG,CAAC,CAAC,CAAC;oBAChD,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAE,IAAI,SAAS,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACvE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC1B,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,+CAA+C;IAC/C,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;SAChC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa,EAAE,KAAa,EAAE,YAAoB;IAC1E,8CAA8C;IAC9C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAgB,CAAC;IAC5C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAErD,kBAAkB;IAClB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAmB,CAAC;IACvC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IAChD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QACvB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,gCAAgC;IAChC,IAAI,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC;IAClC,OAAO,cAAc,GAAG,YAAY,EAAE,CAAC;QACrC,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;YAC3C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;YAExC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAChC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;YAEH,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;gBACnD,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;oBAC/B,uDAAuD;oBACvD,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;oBAClC,QAAQ,GAAG,IAAI,CAAC;oBAChB,MAAM;gBACR,CAAC;YACH,CAAC;YAED,IAAI,QAAQ;gBAAE,MAAM;QACtB,CAAC;QAED,IAAI,CAAC,QAAQ;YAAE,MAAM;QAErB,oBAAoB;QACpB,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;QACjE,cAAc,GAAG,qBAAqB,CAAC;IACzC,CAAC;IAED,2BAA2B;IAC3B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;QACjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AACrC,CAAC"}