zelari-code 0.2.2 → 0.4.3

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 (101) hide show
  1. package/README.md +55 -2
  2. package/dist/agents/councilApi.js +7 -7
  3. package/dist/agents/councilApi.js.map +1 -1
  4. package/dist/agents/councilDirectives.js +3 -3
  5. package/dist/agents/promoteMember.js +2 -2
  6. package/dist/agents/roles.js +32 -32
  7. package/dist/agents/roles.js.map +1 -1
  8. package/dist/agents/skills/builtin/debugging.js +4 -4
  9. package/dist/agents/skills/builtin/debugging.js.map +1 -1
  10. package/dist/agents/skills/builtin/docs.js +13 -23
  11. package/dist/agents/skills/builtin/docs.js.map +1 -1
  12. package/dist/agents/skills/builtin/git-ops.js +3 -3
  13. package/dist/agents/skills/builtin/git-ops.js.map +1 -1
  14. package/dist/agents/skills/builtin/planning.js +4 -4
  15. package/dist/agents/skills/builtin/planning.js.map +1 -1
  16. package/dist/agents/skills/builtin/refactoring.js +3 -3
  17. package/dist/agents/skills/builtin/refactoring.js.map +1 -1
  18. package/dist/agents/skills/builtin/review.js +9 -9
  19. package/dist/agents/skills/builtin/review.js.map +1 -1
  20. package/dist/agents/skills/builtin/testing.js +3 -3
  21. package/dist/agents/skills/builtin/testing.js.map +1 -1
  22. package/dist/agents/tools.js +9 -2
  23. package/dist/agents/tools.js.map +1 -1
  24. package/dist/cli/app.js +78 -1850
  25. package/dist/cli/app.js.map +1 -1
  26. package/dist/cli/components/ChatStream.js +25 -5
  27. package/dist/cli/components/ChatStream.js.map +1 -1
  28. package/dist/cli/components/CollapsibleToolOutput.js +21 -3
  29. package/dist/cli/components/CollapsibleToolOutput.js.map +1 -1
  30. package/dist/cli/components/Header.js +20 -1
  31. package/dist/cli/components/Header.js.map +1 -1
  32. package/dist/cli/components/InputBar.js +34 -2
  33. package/dist/cli/components/InputBar.js.map +1 -1
  34. package/dist/cli/components/Sidebar.js +30 -10
  35. package/dist/cli/components/Sidebar.js.map +1 -1
  36. package/dist/cli/councilDispatcher.js +9 -1
  37. package/dist/cli/councilDispatcher.js.map +1 -1
  38. package/dist/cli/hooks/chatStats.js +28 -0
  39. package/dist/cli/hooks/chatStats.js.map +1 -0
  40. package/dist/cli/hooks/eventsToMessages.js +80 -0
  41. package/dist/cli/hooks/eventsToMessages.js.map +1 -0
  42. package/dist/cli/hooks/messageHelpers.js +75 -0
  43. package/dist/cli/hooks/messageHelpers.js.map +1 -0
  44. package/dist/cli/hooks/skillCompare.js +69 -0
  45. package/dist/cli/hooks/skillCompare.js.map +1 -0
  46. package/dist/cli/hooks/steer.js +28 -0
  47. package/dist/cli/hooks/steer.js.map +1 -0
  48. package/dist/cli/hooks/useChatTurn.js +307 -0
  49. package/dist/cli/hooks/useChatTurn.js.map +1 -0
  50. package/dist/cli/hooks/useSession.js +107 -0
  51. package/dist/cli/hooks/useSession.js.map +1 -0
  52. package/dist/cli/hooks/useSlashDispatch.js +300 -0
  53. package/dist/cli/hooks/useSlashDispatch.js.map +1 -0
  54. package/dist/cli/hooks/useTerminalSize.js +60 -0
  55. package/dist/cli/hooks/useTerminalSize.js.map +1 -0
  56. package/dist/cli/main.bundled.js +24214 -21747
  57. package/dist/cli/main.bundled.js.map +4 -4
  58. package/dist/cli/main.js +1 -1
  59. package/dist/cli/sessionManager.js +46 -0
  60. package/dist/cli/sessionManager.js.map +1 -1
  61. package/dist/cli/slashCommands.js +72 -3
  62. package/dist/cli/slashCommands.js.map +1 -1
  63. package/dist/cli/slashHandlers/branch.js +48 -0
  64. package/dist/cli/slashHandlers/branch.js.map +1 -0
  65. package/dist/cli/slashHandlers/git.js +115 -0
  66. package/dist/cli/slashHandlers/git.js.map +1 -0
  67. package/dist/cli/slashHandlers/provider.js +199 -0
  68. package/dist/cli/slashHandlers/provider.js.map +1 -0
  69. package/dist/cli/slashHandlers/skills.js +82 -0
  70. package/dist/cli/slashHandlers/skills.js.map +1 -0
  71. package/dist/cli/slashHandlers/workspace.js +118 -0
  72. package/dist/cli/slashHandlers/workspace.js.map +1 -0
  73. package/dist/cli/toolRegistry.js +12 -3
  74. package/dist/cli/toolRegistry.js.map +1 -1
  75. package/dist/cli/utils/duration.js +34 -0
  76. package/dist/cli/utils/duration.js.map +1 -0
  77. package/dist/cli/workspace/agentsMd.js +314 -0
  78. package/dist/cli/workspace/agentsMd.js.map +1 -0
  79. package/dist/cli/workspace/index.js +24 -0
  80. package/dist/cli/workspace/index.js.map +1 -0
  81. package/dist/cli/workspace/paths.js +88 -0
  82. package/dist/cli/workspace/paths.js.map +1 -0
  83. package/dist/cli/workspace/postCouncilHook.js +38 -0
  84. package/dist/cli/workspace/postCouncilHook.js.map +1 -0
  85. package/dist/cli/workspace/storage.js +392 -0
  86. package/dist/cli/workspace/storage.js.map +1 -0
  87. package/dist/cli/workspace/stubs.js +528 -0
  88. package/dist/cli/workspace/stubs.js.map +1 -0
  89. package/dist/cli/workspace/toolRegistry.js +61 -0
  90. package/dist/cli/workspace/toolRegistry.js.map +1 -0
  91. package/dist/cli/workspace/types.js +10 -0
  92. package/dist/cli/workspace/types.js.map +1 -0
  93. package/dist/main/core/tools/builtin/_walk.js +129 -0
  94. package/dist/main/core/tools/builtin/_walk.js.map +1 -0
  95. package/dist/main/core/tools/builtin/diff.js +477 -0
  96. package/dist/main/core/tools/builtin/diff.js.map +1 -0
  97. package/dist/main/core/tools/builtin/listFiles.js +5 -43
  98. package/dist/main/core/tools/builtin/listFiles.js.map +1 -1
  99. package/dist/main/core/tools/builtin/search.js +120 -28
  100. package/dist/main/core/tools/builtin/search.js.map +1 -1
  101. package/package.json +5 -2
@@ -0,0 +1,392 @@
1
+ /**
2
+ * workspace/storage.ts — Frontmatter parse/serialize + safe read/write.
3
+ *
4
+ * Zero new deps. Implements a minimal YAML reader that handles the
5
+ * subset we use: flat key-value pairs, single-line values, simple
6
+ * arrays using `[a, b, c]` or `- a\n- b` notation, nested objects
7
+ * using 2-space indentation, strings (quoted/unquoted), numbers,
8
+ * booleans, null.
9
+ *
10
+ * For our frontmatter (plan items, ADRs, risks, reviews, docs) this
11
+ * is more than enough. Anything more complex would warrant pulling in
12
+ * `gray-matter` + `js-yaml`.
13
+ */
14
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync, renameSync, } from 'node:fs';
15
+ import { dirname, join } from 'node:path';
16
+ // ── Frontmatter parsing ────────────────────────────────────────────────
17
+ const FRONTMATTER_RE = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/;
18
+ /** Parse a Markdown string into meta + body. */
19
+ export function parseFrontmatter(md) {
20
+ const m = FRONTMATTER_RE.exec(md);
21
+ if (!m)
22
+ return { meta: {}, body: md };
23
+ const meta = parseYaml(m[1]);
24
+ const body = m[2];
25
+ return { meta, body };
26
+ }
27
+ /** Serialize meta + body back to a Markdown string. */
28
+ export function serializeFrontmatter(meta, body) {
29
+ const yamlStr = serializeYaml(meta);
30
+ // Always end with exactly one \n before body for consistency
31
+ return `---\n${yamlStr}\n---\n${body}`;
32
+ }
33
+ // ── Minimal YAML parser/serializer ─────────────────────────────────────
34
+ // Subset: scalar values, flow/sequence/block-sequence arrays, flow/block maps.
35
+ const VALID_SCALARS = /^(true|false|null|~)$/i;
36
+ /** Parse a YAML subset string into a JS value. */
37
+ export function parseYaml(input) {
38
+ const lines = input.split(/\r?\n/);
39
+ const ctx = { lines, i: 0 };
40
+ return parseNode(ctx, 0);
41
+ }
42
+ function parseNode(ctx, indent) {
43
+ // Skip blank lines and comments
44
+ while (ctx.i < ctx.lines.length) {
45
+ const line = ctx.lines[ctx.i];
46
+ if (line.trim() === '' || line.trim().startsWith('#')) {
47
+ ctx.i++;
48
+ continue;
49
+ }
50
+ break;
51
+ }
52
+ if (ctx.i >= ctx.lines.length)
53
+ return null;
54
+ const line = ctx.lines[ctx.i];
55
+ const lineIndent = countIndent(line);
56
+ // Block sequence at this indent
57
+ if (/^\s*-\s+/.test(line)) {
58
+ return parseBlockSequence(ctx, indent);
59
+ }
60
+ // Flow sequence on a single line: [...]
61
+ if (/^\s*\[.*\]\s*$/.test(line)) {
62
+ const flow = line.trim().replace(/^\[/, '').replace(/\]$/, '');
63
+ return parseFlowSequence(flow);
64
+ }
65
+ // Flow map on a single line: {key: val, ...}
66
+ if (/^\s*\{.*\}\s*$/.test(line)) {
67
+ const flow = line.trim().replace(/^\{/, '').replace(/\}$/, '');
68
+ return parseFlowMap(flow);
69
+ }
70
+ // Block map (key: value, possibly with nested children)
71
+ return parseBlockMap(ctx, indent);
72
+ }
73
+ function parseBlockMap(ctx, indent) {
74
+ const out = {};
75
+ while (ctx.i < ctx.lines.length) {
76
+ const line = ctx.lines[ctx.i];
77
+ if (line.trim() === '' || line.trim().startsWith('#')) {
78
+ ctx.i++;
79
+ continue;
80
+ }
81
+ const lineIndent = countIndent(line);
82
+ if (lineIndent < indent)
83
+ break;
84
+ if (lineIndent > indent) {
85
+ // Not expected in well-formed YAML — skip
86
+ ctx.i++;
87
+ continue;
88
+ }
89
+ // Key: value
90
+ const m = /^([^:]+):\s*(.*)$/.exec(line);
91
+ if (!m) {
92
+ ctx.i++;
93
+ continue;
94
+ }
95
+ const key = m[1].trim();
96
+ const valuePart = m[2].trim();
97
+ if (valuePart === '' || valuePart === '|' || valuePart === '>') {
98
+ // Multiline value or nested structure
99
+ ctx.i++;
100
+ const nested = parseNode(ctx, indent + 2);
101
+ out[key] = nested;
102
+ }
103
+ else {
104
+ // Flow-style array on the value side: tags: [a, b, c]
105
+ if (valuePart.startsWith('[')) {
106
+ out[key] = parseFlowSequence(stripFlow(valuePart, '[', ']'));
107
+ }
108
+ else if (valuePart.startsWith('{')) {
109
+ // Flow-style map on the value side: meta: {order: 1, color: x}
110
+ out[key] = parseFlowMap(stripFlow(valuePart, '{', '}'));
111
+ }
112
+ else {
113
+ out[key] = parseScalar(valuePart);
114
+ }
115
+ ctx.i++;
116
+ }
117
+ }
118
+ return out;
119
+ }
120
+ function parseBlockSequence(ctx, indent) {
121
+ const out = [];
122
+ while (ctx.i < ctx.lines.length) {
123
+ const line = ctx.lines[ctx.i];
124
+ if (line.trim() === '') {
125
+ ctx.i++;
126
+ continue;
127
+ }
128
+ const lineIndent = countIndent(line);
129
+ if (lineIndent < indent)
130
+ break;
131
+ if (lineIndent > indent)
132
+ break; // shouldn't happen
133
+ const m = /^-\s*(.*)$/.exec(line);
134
+ if (!m)
135
+ break;
136
+ const rest = m[1];
137
+ if (rest === '') {
138
+ // Indented child of this sequence item
139
+ ctx.i++;
140
+ out.push(parseNode(ctx, indent + 2));
141
+ }
142
+ else if (rest.startsWith('[') || rest.startsWith('{')) {
143
+ // Inline flow collection starting the item
144
+ // Parse the whole line as flow
145
+ let buffer = rest;
146
+ // If line doesn't end with closing bracket, slurp next lines until balanced
147
+ let depthSq = (buffer.match(/\[/g) || []).length - (buffer.match(/\]/g) || []).length;
148
+ let depthCu = (buffer.match(/\{/g) || []).length - (buffer.match(/\}/g) || []).length;
149
+ while ((depthSq > 0 || depthCu > 0) && ctx.i + 1 < ctx.lines.length) {
150
+ ctx.i++;
151
+ const next = ctx.lines[ctx.i].trim();
152
+ buffer += ' ' + next;
153
+ depthSq = (buffer.match(/\[/g) || []).length - (buffer.match(/\]/g) || []).length;
154
+ depthCu = (buffer.match(/\{/g) || []).length - (buffer.match(/\}/g) || []).length;
155
+ }
156
+ if (buffer.startsWith('[')) {
157
+ out.push(parseFlowSequence(buffer.slice(1).replace(/\]$/, '')));
158
+ }
159
+ else {
160
+ out.push(parseFlowMap(buffer.slice(1).replace(/\}$/, '')));
161
+ }
162
+ ctx.i++;
163
+ }
164
+ else if (rest.includes(':')) {
165
+ // Map item starting on the dash line: "- key: val"
166
+ // Reconstruct a synthetic line at the right indent to feed parseBlockMap
167
+ ctx.i++;
168
+ const mapCtx = { lines: [' '.repeat(indent + 2) + rest, ...ctx.lines.slice(ctx.i)], i: 0 };
169
+ const val = parseBlockMap(mapCtx, indent + 2);
170
+ // Skip the synthetic line + however many mapCtx consumed from original
171
+ ctx.i += mapCtx.i - 1;
172
+ out.push(val);
173
+ }
174
+ else {
175
+ out.push(parseScalar(rest));
176
+ ctx.i++;
177
+ }
178
+ }
179
+ return out;
180
+ }
181
+ function parseFlowSequence(input) {
182
+ // Split on top-level commas (not inside nested brackets)
183
+ const parts = splitFlow(input);
184
+ return parts.map((p) => {
185
+ const trimmed = p.trim();
186
+ if (trimmed.startsWith('{')) {
187
+ // Inline object inside a flow sequence: [{a: 1, b: 2}]
188
+ return parseFlowMap(stripFlow(trimmed, '{', '}'));
189
+ }
190
+ return parseScalar(trimmed);
191
+ });
192
+ }
193
+ /** Strip surrounding flow brackets and any trailing whitespace. */
194
+ function stripFlow(s, open, close) {
195
+ let out = s.trim();
196
+ if (out.startsWith(open))
197
+ out = out.slice(1);
198
+ if (out.endsWith(close))
199
+ out = out.slice(0, -1);
200
+ return out;
201
+ }
202
+ function parseFlowMap(input) {
203
+ const parts = splitFlow(input);
204
+ const out = {};
205
+ for (const p of parts) {
206
+ const colonIdx = p.indexOf(':');
207
+ if (colonIdx < 0)
208
+ continue;
209
+ const key = p.slice(0, colonIdx).trim();
210
+ const value = p.slice(colonIdx + 1).trim();
211
+ out[key] = parseScalar(value);
212
+ }
213
+ return out;
214
+ }
215
+ function splitFlow(input) {
216
+ const out = [];
217
+ let depthSq = 0, depthCu = 0, depthQu = 0;
218
+ let buffer = '';
219
+ for (let i = 0; i < input.length; i++) {
220
+ const c = input[i];
221
+ if (c === '"' || c === "'") {
222
+ depthQu = depthQu === 0 ? (depthQu + 1) : 0;
223
+ buffer += c;
224
+ }
225
+ else if (depthQu === 0) {
226
+ if (c === '[')
227
+ depthSq++;
228
+ else if (c === ']')
229
+ depthSq--;
230
+ else if (c === '{')
231
+ depthCu++;
232
+ else if (c === '}')
233
+ depthCu--;
234
+ else if (c === ',' && depthSq === 0 && depthCu === 0) {
235
+ out.push(buffer);
236
+ buffer = '';
237
+ continue;
238
+ }
239
+ buffer += c;
240
+ }
241
+ else {
242
+ buffer += c;
243
+ }
244
+ }
245
+ if (buffer.trim())
246
+ out.push(buffer);
247
+ return out;
248
+ }
249
+ function parseScalar(s) {
250
+ if (s === '' || s === 'null' || s === '~')
251
+ return null;
252
+ if (VALID_SCALARS.test(s))
253
+ return s.toLowerCase() === 'true';
254
+ // Number
255
+ if (/^-?\d+(\.\d+)?$/.test(s))
256
+ return Number(s);
257
+ // Quoted string
258
+ if ((s.startsWith('"') && s.endsWith('"')) || (s.startsWith("'") && s.endsWith("'"))) {
259
+ return s.slice(1, -1);
260
+ }
261
+ // Otherwise plain string
262
+ return s;
263
+ }
264
+ // ── Serializer ────────────────────────────────────────────────────────
265
+ /** Serialize a JS value back to our YAML subset. */
266
+ export function serializeYaml(value, indent = 0) {
267
+ if (value === null || value === undefined)
268
+ return '';
269
+ if (typeof value === 'string') {
270
+ // Quote if contains special chars
271
+ if (/[:#\n\[\]\{\},&*!|>'"%@`]/.test(value)) {
272
+ return JSON.stringify(value);
273
+ }
274
+ return value;
275
+ }
276
+ if (typeof value === 'number' || typeof value === 'boolean')
277
+ return String(value);
278
+ if (Array.isArray(value)) {
279
+ // Flow-style for arrays of scalars AND arrays of objects (simpler parser).
280
+ if (value.length === 0)
281
+ return '[]';
282
+ if (value.every((v) => v === null || typeof v !== 'object')) {
283
+ return `[${value.map(serializeScalarInline).join(', ')}]`;
284
+ }
285
+ // Array of objects → flow-style with JSON-like objects inside.
286
+ return `[${value.map((v) => '{' + serializeInlineObject(v) + '}').join(', ')}]`;
287
+ }
288
+ if (typeof value === 'object') {
289
+ const entries = Object.entries(value).filter(([, v]) => v !== undefined);
290
+ return entries
291
+ .map(([k, v]) => {
292
+ if (v === null || v === undefined)
293
+ return `${k}:`;
294
+ // Scalars and arrays (of any kind) — write inline.
295
+ if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {
296
+ return `${k}: ${serializeScalarInline(v)}`;
297
+ }
298
+ if (Array.isArray(v)) {
299
+ // Arrays always inline (flow-style). Empty → [].
300
+ if (v.length === 0)
301
+ return `${k}: []`;
302
+ if (v.every((x) => x === null || typeof x !== 'object')) {
303
+ return `${k}: [${v.map(serializeScalarInline).join(', ')}]`;
304
+ }
305
+ return `${k}: [${v.map((x) => '{' + serializeInlineObject(x) + '}').join(', ')}]`;
306
+ }
307
+ // Nested object → block-style on subsequent indented lines.
308
+ return `${k}:\n${serializeYaml(v, indent + 2)}`;
309
+ })
310
+ .map((line) => `${' '.repeat(indent)}${line}`)
311
+ .join('\n');
312
+ }
313
+ return String(value);
314
+ }
315
+ function serializeScalarInline(v) {
316
+ if (typeof v === 'string' && /[:#\n\[\]\{\},&*!|>'"%@`]/.test(v))
317
+ return JSON.stringify(v);
318
+ return String(v);
319
+ }
320
+ /** Serialize an object inline as `key: val, key2: val2` (no surrounding braces). */
321
+ function serializeInlineObject(v) {
322
+ if (v === null || typeof v !== 'object' || Array.isArray(v)) {
323
+ return serializeScalarInline(v);
324
+ }
325
+ const entries = Object.entries(v).filter(([, val]) => val !== undefined);
326
+ return entries.map(([k, val]) => `${k}: ${serializeYaml(val)}`).join(', ');
327
+ }
328
+ function countIndent(line) {
329
+ let i = 0;
330
+ while (i < line.length && line[i] === ' ')
331
+ i++;
332
+ return i;
333
+ }
334
+ // ── File I/O ──────────────────────────────────────────────────────────
335
+ export class Storage {
336
+ /** Read a Markdown file with frontmatter. Throws if not found. */
337
+ read(path) {
338
+ if (!existsSync(path)) {
339
+ throw new Error(`File not found: ${path}`);
340
+ }
341
+ const md = readFileSync(path, 'utf8');
342
+ return parseFrontmatter(md);
343
+ }
344
+ /** Read a Markdown file; returns null if not found. */
345
+ readIfExists(path) {
346
+ if (!existsSync(path))
347
+ return null;
348
+ return this.read(path);
349
+ }
350
+ /**
351
+ * Write a Markdown file atomically (tmp + rename). Creates parent dirs.
352
+ * The meta object is serialized as YAML frontmatter; body as Markdown.
353
+ */
354
+ write(path, meta, body) {
355
+ mkdirSync(dirname(path), { recursive: true });
356
+ const tmp = path + '.tmp-' + process.pid;
357
+ const md = serializeFrontmatter(meta, body);
358
+ writeFileSync(tmp, md, 'utf8');
359
+ renameSync(tmp, path); // atomic on POSIX
360
+ }
361
+ /** List all .md files in a directory (non-recursive). */
362
+ listMarkdown(dir) {
363
+ if (!existsSync(dir))
364
+ return [];
365
+ return readdirSync(dir)
366
+ .filter((f) => f.endsWith('.md') && !f.startsWith('.'))
367
+ .map((f) => join(dir, f));
368
+ }
369
+ }
370
+ /** Simple per-path mutex for concurrent write serialization. */
371
+ class KeyedMutex {
372
+ chains = new Map();
373
+ async run(key, fn) {
374
+ const prev = this.chains.get(key) ?? Promise.resolve();
375
+ let release = () => { };
376
+ const next = new Promise((resolve) => { release = resolve; });
377
+ this.chains.set(key, prev.then(() => next));
378
+ await prev;
379
+ try {
380
+ return await fn();
381
+ }
382
+ finally {
383
+ release();
384
+ // Cleanup if this was the last in chain
385
+ if (this.chains.get(key) === prev.then(() => next)) {
386
+ this.chains.delete(key);
387
+ }
388
+ }
389
+ }
390
+ }
391
+ export const workspaceMutex = new KeyedMutex();
392
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/cli/workspace/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,YAAY,EACZ,aAAa,EACb,UAAU,EACV,SAAS,EACT,WAAW,EACX,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,0EAA0E;AAE1E,MAAM,cAAc,GAAG,6CAA6C,CAAC;AAQrE,gDAAgD;AAChD,MAAM,UAAU,gBAAgB,CAC9B,EAAU;IAEV,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,EAAW,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAU,CAAC;IACtC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,oBAAoB,CAClC,IAAW,EACX,IAAY;IAEZ,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,6DAA6D;IAC7D,OAAO,QAAQ,OAAO,UAAU,IAAI,EAAE,CAAC;AACzC,CAAC;AAED,0EAA0E;AAC1E,+EAA+E;AAE/E,MAAM,aAAa,GAAG,wBAAwB,CAAC;AAE/C,kDAAkD;AAClD,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,GAAG,GAAa,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACtC,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC3B,CAAC;AAOD,SAAS,SAAS,CAAC,GAAa,EAAE,MAAc;IAC9C,gCAAgC;IAChC,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAC7E,MAAM;IACR,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAE3C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAErC,gCAAgC;IAChC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,wCAAwC;IACxC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/D,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,6CAA6C;IAC7C,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/D,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,wDAAwD;IACxD,OAAO,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,aAAa,CAAC,GAAa,EAAE,MAAc;IAClD,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAC7E,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,UAAU,GAAG,MAAM;YAAE,MAAM;QAC/B,IAAI,UAAU,GAAG,MAAM,EAAE,CAAC;YACxB,0CAA0C;YAC1C,GAAG,CAAC,CAAC,EAAE,CAAC;YACR,SAAS;QACX,CAAC;QACD,aAAa;QACb,MAAM,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,CAAC,EAAE,CAAC;YAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE9B,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YAC/D,sCAAsC;YACtC,GAAG,CAAC,CAAC,EAAE,CAAC;YACR,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;YAC1C,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,sDAAsD;YACtD,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAC/D,CAAC;iBAAM,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrC,+DAA+D;gBAC/D,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;YACD,GAAG,CAAC,CAAC,EAAE,CAAC;QACV,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAa,EAAE,MAAc;IACvD,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,UAAU,GAAG,MAAM;YAAE,MAAM;QAC/B,IAAI,UAAU,GAAG,MAAM;YAAE,MAAM,CAAC,mBAAmB;QACnD,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,CAAC;YAAE,MAAM;QACd,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAChB,uCAAuC;YACvC,GAAG,CAAC,CAAC,EAAE,CAAC;YACR,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,2CAA2C;YAC3C,+BAA+B;YAC/B,IAAI,MAAM,GAAG,IAAI,CAAC;YAClB,4EAA4E;YAC5E,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACtF,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACtF,OAAO,CAAC,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACpE,GAAG,CAAC,CAAC,EAAE,CAAC;gBACR,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACrC,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC;gBACrB,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;gBAClF,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACpF,CAAC;YACD,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7D,CAAC;YACD,GAAG,CAAC,CAAC,EAAE,CAAC;QACV,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,mDAAmD;YACnD,yEAAyE;YACzE,GAAG,CAAC,CAAC,EAAE,CAAC;YACR,MAAM,MAAM,GAAa,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACrG,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;YAC9C,uEAAuE;YACvE,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;YACtB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5B,GAAG,CAAC,CAAC,EAAE,CAAC;QACV,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,yDAAyD;IACzD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,uDAAuD;YACvD,OAAO,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,mEAAmE;AACnE,SAAS,SAAS,CAAC,CAAS,EAAE,IAAY,EAAE,KAAa;IACvD,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,QAAQ,GAAG,CAAC;YAAE,SAAS;QAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC;IAC1C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAC3B,OAAO,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;aAAM,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG;gBAAE,OAAO,EAAE,CAAC;iBACpB,IAAI,CAAC,KAAK,GAAG;gBAAE,OAAO,EAAE,CAAC;iBACzB,IAAI,CAAC,KAAK,GAAG;gBAAE,OAAO,EAAE,CAAC;iBACzB,IAAI,CAAC,KAAK,GAAG;gBAAE,OAAO,EAAE,CAAC;iBACzB,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;gBACrD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjB,MAAM,GAAG,EAAE,CAAC;gBACZ,SAAS;YACX,CAAC;YACD,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,EAAE;QAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;IAC7D,SAAS;IACT,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAChD,gBAAgB;IAChB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACrF,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,yBAAyB;IACzB,OAAO,CAAC,CAAC;AACX,CAAC;AAED,yEAAyE;AAEzE,oDAAoD;AACpD,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,MAAM,GAAG,CAAC;IACtD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,kCAAkC;QAClC,IAAI,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IAClF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,2EAA2E;QAC3E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;YAC5D,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5D,CAAC;QACD,+DAA+D;QAC/D,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAClF,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;QACpG,OAAO,OAAO;aACX,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;YACd,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;gBAAE,OAAO,GAAG,CAAC,GAAG,CAAC;YAClD,mDAAmD;YACnD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC7E,OAAO,GAAG,CAAC,KAAK,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,iDAAiD;gBACjD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,GAAG,CAAC,MAAM,CAAC;gBACtC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;oBACxD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC9D,CAAC;gBACD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YACpF,CAAC;YACD,4DAA4D;YAC5D,OAAO,GAAG,CAAC,MAAM,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QAClD,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;aAC7C,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,qBAAqB,CAAC,CAAU;IACvC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3F,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,oFAAoF;AACpF,SAAS,qBAAqB,CAAC,CAAU;IACvC,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAA4B,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;IACpG,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,CAAC,EAAE,CAAC;IAC/C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,yEAAyE;AAEzE,MAAM,OAAO,OAAO;IAClB,kEAAkE;IAClE,IAAI,CAAkC,IAAY;QAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACtC,OAAO,gBAAgB,CAAQ,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,uDAAuD;IACvD,YAAY,CAAkC,IAAY;QACxD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,IAAI,CAAC,IAAI,CAAQ,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAQ,IAAY,EAAE,IAAW,EAAE,IAAY;QAClD,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;QACzC,MAAM,EAAE,GAAG,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5C,aAAa,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/B,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,kBAAkB;IAC3C,CAAC;IAED,yDAAyD;IACzD,YAAY,CAAC,GAAW;QACtB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QAChC,OAAO,WAAW,CAAC,GAAG,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aACtD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,gEAAgE;AAChE,MAAM,UAAU;IACN,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAClD,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,EAAwB;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACvD,IAAI,OAAO,GAAe,GAAG,EAAE,GAAE,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,MAAM,IAAI,CAAC;QACX,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;gBAAS,CAAC;YACT,OAAO,EAAE,CAAC;YACV,wCAAwC;YACxC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,UAAU,EAAE,CAAC"}