@hy-sde-org/dsh-code-runtime-kernels 0.1.0-rc.8

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.
@@ -0,0 +1,565 @@
1
+ /**
2
+ * Host-side driver for ONE persistent kernel subprocess, shared by the Python
3
+ * and JavaScript/SDK runners (a `KernelRuntimeProfile` describes how to spawn
4
+ * each). Owns the NDJSON wire: spawn + handshake, serialized outbound writes,
5
+ * hostile-peer inbound parsing, binding-call dispatch, SIGINT interrupt with
6
+ * SIGTERM/SIGKILL escalation, and shutdown-to-exit. This is process
7
+ * confinement, not a security boundary: model code has bash-equivalent trust,
8
+ * so the driver's job is robustness (a forged frame never crashes the host, an
9
+ * unresponsive kernel is graded up to termination) rather than isolation.
10
+ * @module @hy-sde-org/dsh-code-runtime-kernels/src/core/kernel
11
+ */
12
+ import { spawn } from 'node:child_process';
13
+ import { mkdirSync, rmSync, writeFileSync } from 'node:fs';
14
+ import { tmpdir } from 'node:os';
15
+ import { join } from 'node:path';
16
+ import { fileURLToPath } from 'node:url';
17
+ import { snapshotJsonValue } from '@deepseek-ai/dsh-session';
18
+ /** The Node.js runner shipped as a package file (raw source in development, compiled ESM in the output). */
19
+ const RUNNER_PATH = fileURLToPath(new URL(new URL(import.meta.url).pathname.endsWith('.ts') ? '../nodejs/runner.ts' : '../nodejs/runner.js', import.meta.url));
20
+ /** Profile for the JavaScript kernel; `command` is the resolved node executable. */
21
+ export function nodejsKernelProfile(command) {
22
+ return {
23
+ key: 'typescript',
24
+ command,
25
+ argvPrefix: ['--no-warnings'],
26
+ runnerPath: RUNNER_PATH,
27
+ prefix: 'dsh-code-runtime-nodejs',
28
+ idPrefix: 'js-',
29
+ label: 'nodejs kernel',
30
+ };
31
+ }
32
+ /** Shared scratch root for staged runner scripts (inside the OS temp dir). */
33
+ const runnerDir = join(tmpdir(), 'dsh-kernels');
34
+ /** Render an unknown thrown value as a string, Error or not. */
35
+ function messageOf(error) {
36
+ return error instanceof Error ? error.message : String(error);
37
+ }
38
+ function tryMessageOf(error) {
39
+ if (typeof error === 'object' && error !== null && 'message' in error) {
40
+ return String(error.message);
41
+ }
42
+ return String(error);
43
+ }
44
+ /**
45
+ * Distill a `done` frame into the failure taxonomy. A clean completion yields
46
+ * `ok`; an invalid completion (not lossless JSON) yields `'invalid-output'`;
47
+ * anything else is a program exception.
48
+ */
49
+ export function doneFailure(frame) {
50
+ if (frame.status === 'ok')
51
+ return { ok: true };
52
+ if (frame.invalidOutput === true) {
53
+ return {
54
+ ok: false,
55
+ error: {
56
+ kind: 'invalid-output',
57
+ message: frame.message ?? 'program completion must be lossless JSON',
58
+ },
59
+ };
60
+ }
61
+ return { ok: false, error: { kind: 'exception', message: frame.message ?? 'program failed' } };
62
+ }
63
+ /**
64
+ * Parse one kernel frame. The peer runs MODEL CODE and can emit anything, so
65
+ * everything is re-validated and rebuilt field by field; junk returns
66
+ * `undefined` and is dropped (a throw here would crash the host).
67
+ */
68
+ export function parseKernelFrame(raw) {
69
+ if (typeof raw !== 'object' || raw === null)
70
+ return undefined;
71
+ const message = raw;
72
+ switch (message.type) {
73
+ case 'ready': {
74
+ if (typeof message.pid !== 'number')
75
+ return undefined;
76
+ return { type: 'ready', pid: message.pid };
77
+ }
78
+ case 'started': {
79
+ if (typeof message.id !== 'string')
80
+ return undefined;
81
+ return { type: 'started', id: message.id };
82
+ }
83
+ case 'log': {
84
+ if (typeof message.id !== 'string' || typeof message.text !== 'string')
85
+ return undefined;
86
+ return { type: 'log', id: message.id, text: message.text, stream: typeof message.stream === 'string' ? message.stream : 'stdout' };
87
+ }
88
+ case 'call': {
89
+ if (typeof message.id !== 'string' || typeof message.seq !== 'number'
90
+ || typeof message.global !== 'string' || typeof message.name !== 'string')
91
+ return undefined;
92
+ return {
93
+ type: 'call', id: message.id, seq: message.seq, global: message.global, name: message.name,
94
+ args: message.args,
95
+ };
96
+ }
97
+ case 'error': {
98
+ if (typeof message.id !== 'string' || typeof message.ename !== 'string' || typeof message.evalue !== 'string')
99
+ return undefined;
100
+ const traceback = Array.isArray(message.traceback)
101
+ ? message.traceback.filter((entry) => typeof entry === 'string')
102
+ : [];
103
+ return { type: 'error', id: message.id, ename: message.ename, evalue: message.evalue, traceback };
104
+ }
105
+ case 'done': {
106
+ if (typeof message.id !== 'string')
107
+ return undefined;
108
+ const frame = { type: 'done', id: message.id, status: message.status === 'ok' ? 'ok' : 'error' };
109
+ if (message.status === 'ok' && message.value !== undefined)
110
+ frame.value = message.value;
111
+ if (typeof message.executionCount === 'number')
112
+ frame.executionCount = message.executionCount;
113
+ if (message.cancelled === true)
114
+ frame.cancelled = true;
115
+ if (message.invalidOutput === true)
116
+ frame.invalidOutput = true;
117
+ if (typeof message.message === 'string')
118
+ frame.message = message.message;
119
+ return frame;
120
+ }
121
+ default: return undefined;
122
+ }
123
+ }
124
+ /** One kernel subprocess, session-agnostic (the registry adds sessions). */
125
+ export class KernelHost {
126
+ id;
127
+ pid;
128
+ profile;
129
+ #proc;
130
+ #stagedPath;
131
+ #writeChain = Promise.resolve();
132
+ #readBuffer = '';
133
+ #runs = new Map();
134
+ #ready;
135
+ #settleReady;
136
+ #exited;
137
+ #alive = true;
138
+ #disposed = false;
139
+ #interruptEscalationMs;
140
+ #shutdownGraceMs;
141
+ /**
142
+ * Spawn a kernel per the profile and wait for the bootstrap handshake.
143
+ * Rejects on spawn failure, startup timeout, or an early process exit
144
+ * (grading the fresh subprocess up to termination behind us).
145
+ */
146
+ static async start(profile, config) {
147
+ const argv = [...profile.argvPrefix];
148
+ // A runner may be a shipped file, or embedded source staged to a scratch
149
+ // file per spawn (tempdirs are shared host state; the embedded code may
150
+ // change between versions). Only the staged variant touches the disk.
151
+ let stagedPath;
152
+ if (profile.stagedSource !== undefined) {
153
+ mkdirSync(runnerDir, { recursive: true });
154
+ stagedPath = join(runnerDir, `runner-${process.pid}-${Math.random().toString(36).slice(2, 10)}${profile.stagedSuffix ?? ''}`);
155
+ try {
156
+ writeFileSync(stagedPath, profile.stagedSource, 'utf8');
157
+ }
158
+ catch (error) {
159
+ throw new Error(`${profile.prefix}: could not stage runner script: ${tryMessageOf(error)}`);
160
+ }
161
+ }
162
+ const runnerArg = stagedPath ?? profile.runnerPath;
163
+ if (runnerArg !== undefined)
164
+ argv.push(runnerArg);
165
+ // --no-warnings for the Node runner is statically safe: a development
166
+ // spawn of the .ts kernel would otherwise leak the type-stripping
167
+ // ExperimentalWarning into the captured stderr. Python gets unfiltered
168
+ // stdout via -u plus PYTHONUNBUFFERED/PYTHONIOENCODING.
169
+ const proc = spawn(profile.command, argv, {
170
+ cwd: config.cwd,
171
+ env: { ...(config.env ?? process.env), ...profile.env },
172
+ stdio: ['pipe', 'pipe', 'pipe'],
173
+ windowsHide: true,
174
+ });
175
+ if (proc.pid === undefined)
176
+ proc.unref();
177
+ const kernel = new KernelHost(profile, stagedPath, proc, config);
178
+ kernel.id = `${profile.idPrefix}${Math.random().toString(36).slice(2, 10)}`;
179
+ kernel.pid = proc.pid;
180
+ try {
181
+ await Promise.race([
182
+ kernel.#ready,
183
+ new Promise((_resolve, reject) => {
184
+ const timer = setTimeout(() => {
185
+ reject(new Error(`${profile.prefix}: kernel did not become ready within ${config.startupTimeoutMs}ms`));
186
+ }, config.startupTimeoutMs);
187
+ timer.unref();
188
+ }),
189
+ ]);
190
+ return kernel;
191
+ }
192
+ catch (error) {
193
+ // An early exit already settled every in-flight run (none); a start
194
+ // timeout must grade the half-booted subprocess up to termination.
195
+ await kernel.killForFailedStart(typeof error === 'object' && error !== null
196
+ ? tryMessageOf(error)
197
+ : `${profile.label} startup failed`);
198
+ throw error;
199
+ }
200
+ }
201
+ constructor(profile, stagedPath, proc, config) {
202
+ this.profile = profile;
203
+ this.id = '';
204
+ this.#proc = proc;
205
+ this.#stagedPath = stagedPath;
206
+ this.#interruptEscalationMs = config.interruptEscalationMs;
207
+ this.#shutdownGraceMs = config.shutdownGraceMs;
208
+ proc.stdout?.setEncoding('utf8');
209
+ proc.stderr?.setEncoding('utf8');
210
+ proc.stdout?.on('data', (chunk) => { this.#ingest(chunk); });
211
+ proc.stderr?.on('data', (chunk) => { this.#ingestStray(chunk); });
212
+ this.#exited = new Promise((resolve) => { proc.once('exit', (code) => { resolve(code ?? 0); }); });
213
+ void this.#exited.then((code) => { this.#onProcessExit(code); });
214
+ this.#ready = new Promise((resolve) => { this.#settleReady = resolve; });
215
+ }
216
+ /** The process is healthy and accepting runs. */
217
+ isAlive() {
218
+ return this.#alive && !this.#disposed;
219
+ }
220
+ /**
221
+ * Execute one program against the given namespaces. Kernel state persists
222
+ * across calls, and only ONE exec may be in flight per kernel at a time —
223
+ * the session registry serializes; callers must not overlap. Must be called
224
+ * while {@link isAlive}. Resolves with a {@link KernelExecResult} whose
225
+ * flags the provider maps onto the failure kinds.
226
+ */
227
+ async execute(id, code, namespaces, options = {}) {
228
+ if (!this.isAlive()) {
229
+ return {
230
+ status: 'error', logs: [], cancelled: false, invalidOutput: false,
231
+ message: `${this.profile.label} is not running`, killed: true,
232
+ };
233
+ }
234
+ const namespacesById = new Map();
235
+ for (const namespace of namespaces)
236
+ namespacesById.set(namespace.global, namespace);
237
+ const run = {
238
+ id,
239
+ namespaces: namespacesById,
240
+ logs: [],
241
+ status: 'ok',
242
+ cancelled: false,
243
+ invalidOutput: false,
244
+ message: '',
245
+ killed: false,
246
+ done: Promise.resolve(),
247
+ finalize: () => { },
248
+ };
249
+ run.done = new Promise((resolve) => { run.finalize = () => { resolve(); }; });
250
+ this.#runs.set(id, run);
251
+ const onAbort = () => { void this.#interrupt(run); };
252
+ if (options.signal?.aborted)
253
+ onAbort();
254
+ else
255
+ options.signal?.addEventListener('abort', onAbort, { once: true });
256
+ try {
257
+ const frame = {
258
+ type: 'exec',
259
+ id,
260
+ code,
261
+ namespaces: namespaces.map(namespace => ({
262
+ global: namespace.global,
263
+ names: Object.keys(namespace.functions),
264
+ ...namespace.errorClass ? { errorClass: namespace.errorClass } : {},
265
+ })),
266
+ ...options.cwd !== undefined ? { cwd: options.cwd } : {},
267
+ ...options.env !== undefined ? { env: options.env } : {},
268
+ };
269
+ await this.#write(frame);
270
+ await run.done;
271
+ }
272
+ finally {
273
+ options.signal?.removeEventListener('abort', onAbort);
274
+ this.#runs.delete(id);
275
+ }
276
+ return {
277
+ ...this.#collect(run),
278
+ ...run.value !== undefined ? { value: run.value } : {},
279
+ ...run.executionCount !== undefined ? { executionCount: run.executionCount } : {},
280
+ };
281
+ }
282
+ #collect(run) {
283
+ return {
284
+ status: run.status,
285
+ logs: run.logs,
286
+ cancelled: run.cancelled,
287
+ invalidOutput: run.invalidOutput,
288
+ message: run.message,
289
+ killed: run.killed,
290
+ };
291
+ }
292
+ /** Request cancellation of the in-flight run via SIGINT, escalating to termination. */
293
+ async interrupt() {
294
+ for (const run of [...this.#runs.values()])
295
+ await this.#interrupt(run);
296
+ }
297
+ #interrupt(run) {
298
+ if (this.#disposed || !this.#alive) {
299
+ run.cancelled = true;
300
+ run.message = 'kernel unavailable';
301
+ run.killed = true;
302
+ run.finalize();
303
+ return run.done;
304
+ }
305
+ run.cancelled = true;
306
+ try {
307
+ this.#proc.kill('SIGINT');
308
+ }
309
+ catch {
310
+ /* process may already be gone */
311
+ }
312
+ // Escalate: the kernel may be stuck in code that ignores signals.
313
+ const termTimer = setTimeout(() => {
314
+ if (run.killed || !this.#alive)
315
+ return;
316
+ try {
317
+ this.#proc.kill('SIGTERM');
318
+ }
319
+ catch { /* gone */ }
320
+ const killTimer = setTimeout(() => {
321
+ if (!run.killed)
322
+ run.killed = true;
323
+ try {
324
+ this.#proc.kill('SIGKILL');
325
+ }
326
+ catch { /* gone */ }
327
+ }, this.#interruptEscalationMs);
328
+ killTimer.unref();
329
+ void run.done.then(() => { clearTimeout(killTimer); });
330
+ }, this.#interruptEscalationMs);
331
+ termTimer.unref();
332
+ void run.done.then(() => { clearTimeout(termTimer); });
333
+ return run.done;
334
+ }
335
+ /** Gracefully shut down: `exit` frame, then SIGTERM, then SIGKILL; waits for exit. */
336
+ async shutdown() {
337
+ if (this.#disposed) {
338
+ await this.#whenExited();
339
+ return { confirmed: true };
340
+ }
341
+ this.#alive = false;
342
+ this.#disposed = true;
343
+ for (const run of [...this.#runs.values()]) {
344
+ run.cancelled = true;
345
+ run.killed = true;
346
+ run.message = 'kernel shutting down';
347
+ run.finalize();
348
+ }
349
+ const exited = this.#exited;
350
+ await this.#write({ type: 'exit' }).catch(() => { });
351
+ const grace = () => new Promise((resolve) => {
352
+ const timer = setTimeout(() => { resolve('timeout'); }, this.#shutdownGraceMs);
353
+ timer.unref();
354
+ });
355
+ if (await Promise.race([exited.then(() => 'exited'), grace()]) === 'exited')
356
+ return { confirmed: true };
357
+ try {
358
+ this.#proc.kill('SIGTERM');
359
+ }
360
+ catch { /* gone */ }
361
+ if (await Promise.race([exited.then(() => 'exited'), grace()]) === 'exited')
362
+ return { confirmed: true };
363
+ try {
364
+ this.#proc.kill('SIGKILL');
365
+ }
366
+ catch { /* gone */ }
367
+ await exited.catch(() => { });
368
+ return { confirmed: false };
369
+ }
370
+ /** Termination path for a startup that never completed. */
371
+ async killForFailedStart(_reason) {
372
+ this.#alive = false;
373
+ this.#disposed = true;
374
+ try {
375
+ this.#proc.kill('SIGTERM');
376
+ }
377
+ catch { /* gone */ }
378
+ const timer = setTimeout(() => { try {
379
+ this.#proc.kill('SIGKILL');
380
+ }
381
+ catch { /* gone */ } }, this.#shutdownGraceMs);
382
+ timer.unref();
383
+ await this.#exited.catch(() => { });
384
+ clearTimeout(timer);
385
+ }
386
+ #onProcessExit(code) {
387
+ this.#alive = false;
388
+ // Finalize every still-registered run: an interrupt that had to escalate
389
+ // to SIGKILL lands here, exactly like a spontaneous death. finalize is
390
+ // idempotent, so a race with a `done` frame is harmless (the matching run
391
+ // is removed from the map by execute()'s finally once its promise
392
+ // resolves).
393
+ for (const run of [...this.#runs.values()]) {
394
+ run.status = 'error';
395
+ run.message = `${this.profile.label} exited with code ${code} before completing`;
396
+ run.killed = true;
397
+ run.finalize();
398
+ }
399
+ // The staged scratch script has served its purpose; remove it once the
400
+ // process is gone so the shared tempdir does not accumulate.
401
+ if (this.#stagedPath !== undefined) {
402
+ try {
403
+ rmSync(this.#stagedPath);
404
+ }
405
+ catch { /* best effort */ }
406
+ this.#stagedPath = undefined;
407
+ }
408
+ }
409
+ async #whenExited() {
410
+ await this.#exited.catch(() => { });
411
+ }
412
+ #ingestStray(text) {
413
+ if (text.length === 0)
414
+ return;
415
+ for (const run of [...this.#runs.values()]) {
416
+ if (!run.killed)
417
+ run.logs.push({ text, stream: 'stderr' });
418
+ }
419
+ }
420
+ #ingest(chunk) {
421
+ this.#readBuffer += chunk;
422
+ for (;;) {
423
+ const nl = this.#readBuffer.indexOf('\n');
424
+ if (nl < 0)
425
+ break;
426
+ const line = this.#readBuffer.slice(0, nl);
427
+ this.#readBuffer = this.#readBuffer.slice(nl + 1);
428
+ if (!line.trim())
429
+ continue;
430
+ let raw;
431
+ try {
432
+ raw = JSON.parse(line);
433
+ }
434
+ catch {
435
+ continue;
436
+ }
437
+ const frame = parseKernelFrame(raw);
438
+ if (frame === undefined)
439
+ continue;
440
+ this.#handleFrame(frame);
441
+ }
442
+ }
443
+ #handleFrame(frame) {
444
+ switch (frame.type) {
445
+ case 'ready':
446
+ this.#settleReady();
447
+ return;
448
+ case 'started':
449
+ return;
450
+ case 'log': {
451
+ const run = this.#runs.get(frame.id);
452
+ if (run !== undefined)
453
+ run.logs.push({ text: frame.text, stream: frame.stream ?? 'stdout' });
454
+ return;
455
+ }
456
+ case 'call': {
457
+ this.#dispatchCall(frame);
458
+ return;
459
+ }
460
+ case 'error': {
461
+ const run = this.#runs.get(frame.id);
462
+ if (run !== undefined)
463
+ run.message = `${frame.ename}: ${frame.evalue}`;
464
+ return;
465
+ }
466
+ case 'done': {
467
+ const run = this.#runs.get(frame.id);
468
+ if (run === undefined)
469
+ return;
470
+ run.status = frame.status;
471
+ if (frame.value !== undefined)
472
+ run.value = frame.value;
473
+ if (frame.executionCount !== undefined)
474
+ run.executionCount = frame.executionCount;
475
+ if (frame.cancelled === true)
476
+ run.cancelled = true;
477
+ if (frame.invalidOutput === true)
478
+ run.invalidOutput = true;
479
+ if (frame.message !== undefined)
480
+ run.message = frame.message;
481
+ run.finalize();
482
+ return;
483
+ }
484
+ }
485
+ }
486
+ #dispatchCall(frame) {
487
+ const run = this.#runs.get(frame.id);
488
+ if (run === undefined) {
489
+ void this.#writeReply(frame.id, frame.seq, {
490
+ ok: false,
491
+ message: `no active run for id ${frame.id}`,
492
+ name: frame.name,
493
+ });
494
+ return;
495
+ }
496
+ // Own-property lookup only: a forged name like 'constructor' must not walk
497
+ // the record's prototype chain and reach a callable the consumer never
498
+ // declared. The provider validated namespaces, and the exec request names
499
+ // them, so an unexpected member is a hostile-peer frame, answered, not a crash.
500
+ const record = run.namespaces.get(frame.global)?.functions;
501
+ const fn = record !== undefined && Object.hasOwn(record, frame.name) ? record[frame.name] : undefined;
502
+ if (typeof fn !== 'function') {
503
+ void this.#writeReply(frame.id, frame.seq, {
504
+ ok: false,
505
+ message: `unknown binding ${JSON.stringify(`${frame.global}.${frame.name}`)}`,
506
+ name: frame.name,
507
+ });
508
+ return;
509
+ }
510
+ void (async () => {
511
+ try {
512
+ const resolved = await fn(frame.args);
513
+ let value;
514
+ try {
515
+ value = snapshotJsonValue(resolved);
516
+ }
517
+ catch {
518
+ value = undefined;
519
+ }
520
+ if (value === undefined) {
521
+ await this.#writeReply(frame.id, frame.seq, {
522
+ ok: false,
523
+ message: 'binding resolution must be lossless JSON',
524
+ name: frame.name,
525
+ });
526
+ return;
527
+ }
528
+ await this.#writeReply(frame.id, frame.seq, { ok: true, value, name: frame.name });
529
+ }
530
+ catch (error) {
531
+ await this.#writeReply(frame.id, frame.seq, {
532
+ ok: false,
533
+ message: messageOf(error),
534
+ name: frame.name,
535
+ });
536
+ }
537
+ })();
538
+ }
539
+ #writeReply(id, seq, payload) {
540
+ const message = payload.ok
541
+ ? { type: 'reply', id, seq, ok: true, value: payload.value, name: payload.name }
542
+ : { type: 'reply', id, seq, ok: false, message: payload.message, name: payload.name };
543
+ return this.#write(message);
544
+ }
545
+ /** Serialized outbound write: lines never interleave even across await points. */
546
+ #write(message) {
547
+ const next = this.#writeChain.then(() => new Promise((resolve, reject) => {
548
+ if (this.#proc.stdin === null || this.#proc.stdin.destroyed) {
549
+ reject(new Error(`${this.profile.prefix}: kernel stdin closed`));
550
+ return;
551
+ }
552
+ this.#proc.stdin.write(`${JSON.stringify(message)}\n`, (error) => {
553
+ if (error)
554
+ reject(error);
555
+ else
556
+ resolve();
557
+ });
558
+ }));
559
+ // Keep the chain from stalling forever on a single rejected write.
560
+ this.#writeChain = next.catch(() => { });
561
+ return next;
562
+ }
563
+ }
564
+ export { RUNNER_PATH };
565
+ //# sourceMappingURL=kernel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel.js","sourceRoot":"","sources":["../../src/core/kernel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AA6E5D,4GAA4G;AAC5G,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,GAAG,CACvC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,qBAAqB,EACjG,MAAM,CAAC,IAAI,CAAC,GAAG,CAChB,CAAC,CAAA;AAEF,oFAAoF;AACpF,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO;QACL,GAAG,EAAE,YAAY;QACjB,OAAO;QACP,UAAU,EAAE,CAAC,eAAe,CAAC;QAC7B,UAAU,EAAE,WAAW;QACvB,MAAM,EAAE,yBAAyB;QACjC,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,eAAe;KACvB,CAAA;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAA;AAE/C,gEAAgE;AAChE,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC/D,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QACtE,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC9B,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACtB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,KAAgB;IAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;IAC9C,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;QACjC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE;gBACL,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,0CAA0C;aACrE;SACF,CAAA;IACH,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,gBAAgB,EAAE,EAAE,CAAA;AAChG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,SAAS,CAAA;IAC7D,MAAM,OAAO,GAAG,GAA8B,CAAA;IAC9C,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAA;YACrD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAA;QAC5C,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAA;YACpD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAA;QAC5C,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAA;YACxF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QACpI,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ;mBAChE,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAA;YAC7F,OAAO;gBACL,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI;gBAC1F,IAAI,EAAE,OAAO,CAAC,IAAqB;aACpC,CAAA;QACH,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAA;YAC/H,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;gBAChD,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;gBACjF,CAAC,CAAC,EAAE,CAAA;YACN,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,CAAA;QACnG,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAA;YACpD,MAAM,KAAK,GAAc,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;YAC3G,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;gBAAE,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,KAAsB,CAAA;YACxG,IAAI,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ;gBAAE,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAA;YAC7F,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI;gBAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAA;YACtD,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI;gBAAE,KAAK,CAAC,aAAa,GAAG,IAAI,CAAA;YAC9D,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;gBAAE,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;YACxE,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,CAAC,CAAC,OAAO,SAAS,CAAA;IAC3B,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,MAAM,OAAO,UAAU;IACrB,EAAE,CAAQ;IACV,GAAG,CAAoB;IACd,OAAO,CAAsB;IACtC,KAAK,CAAc;IACnB,WAAW,CAAoB;IAC/B,WAAW,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAA;IAC9C,WAAW,GAAG,EAAE,CAAA;IAChB,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAA;IACrC,MAAM,CAAgB;IACtB,YAAY,CAAa;IACzB,OAAO,CAAiB;IACxB,MAAM,GAAG,IAAI,CAAA;IACb,SAAS,GAAG,KAAK,CAAA;IACjB,sBAAsB,CAAQ;IAC9B,gBAAgB,CAAQ;IAExB;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAA6B,EAAE,MAAyB;QACzE,MAAM,IAAI,GAAa,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;QAE9C,yEAAyE;QACzE,wEAAwE;QACxE,sEAAsE;QACtE,IAAI,UAA8B,CAAA;QAClC,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACvC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YACzC,UAAU,GAAG,IAAI,CACf,SAAS,EACT,UAAU,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE,EAAE,CAChG,CAAA;YACD,IAAI,CAAC;gBACH,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;YACzD,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,oCAAoC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YAC7F,CAAC;QACH,CAAC;QACD,MAAM,SAAS,GAAG,UAAU,IAAI,OAAO,CAAC,UAAU,CAAA;QAClD,IAAI,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAEjD,sEAAsE;QACtE,kEAAkE;QAClE,uEAAuE;QACvE,wDAAwD;QACxD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE;YACxC,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,GAAG,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;YACvD,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,WAAW,EAAE,IAAI;SAClB,CAAC,CAAA;QACF,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,EAAE,CAAA;QACxC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;QAChE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAA;QAC3E,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;QACrB,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,MAAM,CAAC,MAAM;gBACb,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;oBACtC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;wBAAG,MAAM,CAAC,IAAI,KAAK,CAC/C,GAAG,OAAO,CAAC,MAAM,wCAAwC,MAAM,CAAC,gBAAgB,IAAI,CACrF,CAAC,CAAA;oBAAC,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAA;oBAC9B,KAAK,CAAC,KAAK,EAAE,CAAA;gBACf,CAAC,CAAC;aACH,CAAC,CAAA;YACF,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,oEAAoE;YACpE,mEAAmE;YACnE,MAAM,MAAM,CAAC,kBAAkB,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;gBACzE,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;gBACrB,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,iBAAiB,CAAC,CAAA;YACtC,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAED,YACE,OAA6B,EAC7B,UAA8B,EAC9B,IAAkB,EAClB,MAAyB;QAEzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACjB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAA;QAC7B,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,qBAAqB,CAAA;QAC1D,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAA;QAC9C,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;QAChC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;QAChC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QACnE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QACxE,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QACxG,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QAC/D,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,GAAG,OAAO,CAAA,CAAC,CAAC,CAAC,CAAA;IAC/E,CAAC;IAED,iDAAiD;IACjD,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAA;IACvC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,CACX,EAAU,EACV,IAAY,EACZ,UAAkC,EAClC,UAAgF,EAAE;QAElF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACpB,OAAO;gBACL,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK;gBACjE,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,iBAAiB,EAAE,MAAM,EAAE,IAAI;aAC9D,CAAA;QACH,CAAC;QACD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAgC,CAAA;QAC9D,KAAK,MAAM,SAAS,IAAI,UAAU;YAAE,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;QACnF,MAAM,GAAG,GAAe;YACtB,EAAE;YACF,UAAU,EAAE,cAAc;YAC1B,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,KAAK;YAChB,aAAa,EAAE,KAAK;YACpB,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE;YACvB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;SACnB,CAAA;QACD,GAAG,CAAC,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,EAAE,GAAG,OAAO,EAAE,CAAA,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QACjF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QACvB,MAAM,OAAO,GAAG,GAAS,EAAE,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC,CAAA;QACzD,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;YAAE,OAAO,EAAE,CAAA;;YACjC,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAEvE,IAAI,CAAC;YACH,MAAM,KAAK,GAAG;gBACZ,IAAI,EAAE,MAAe;gBACrB,EAAE;gBACF,IAAI;gBACJ,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;oBACvC,MAAM,EAAE,SAAS,CAAC,MAAM;oBACxB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;oBACvC,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE;iBACpE,CAAC,CAAC;gBACH,GAAG,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE;gBACxD,GAAG,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE;aACzD,CAAA;YACD,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACxB,MAAM,GAAG,CAAC,IAAI,CAAA;QAChB,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YACrD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACvB,CAAC;QACD,OAAO;YACL,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YACrB,GAAG,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;YACtD,GAAG,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE;SAClF,CAAA;IACH,CAAC;IAED,QAAQ,CAAC,GAAe;QACtB,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAA;IACH,CAAC;IAED,uFAAuF;IACvF,KAAK,CAAC,SAAS;QACb,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAAE,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IACxE,CAAC;IAED,UAAU,CAAC,GAAe;QACxB,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACnC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAA;YACpB,GAAG,CAAC,OAAO,GAAG,oBAAoB,CAAA;YAClC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAA;YACjB,GAAG,CAAC,QAAQ,EAAE,CAAA;YACd,OAAO,GAAG,CAAC,IAAI,CAAA;QACjB,CAAC;QACD,GAAG,CAAC,SAAS,GAAG,IAAI,CAAA;QACpB,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;QACD,kEAAkE;QAClE,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAM;YACtC,IAAI,CAAC;gBAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;YACvD,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,IAAI,CAAC,GAAG,CAAC,MAAM;oBAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAA;gBAClC,IAAI,CAAC;oBAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;YACzD,CAAC,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAA;YAC/B,SAAS,CAAC,KAAK,EAAE,CAAA;YACjB,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QACvD,CAAC,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAA;QAC/B,SAAS,CAAC,KAAK,EAAE,CAAA;QACjB,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QACrD,OAAO,GAAG,CAAC,IAAI,CAAA;IACjB,CAAC;IAED,sFAAsF;IACtF,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAE;YAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;QAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACrB,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YAC3C,GAAG,CAAC,SAAS,GAAG,IAAI,CAAA;YACpB,GAAG,CAAC,MAAM,GAAG,IAAI,CAAA;YACjB,GAAG,CAAC,OAAO,GAAG,sBAAsB,CAAA;YACpC,GAAG,CAAC,QAAQ,EAAE,CAAA;QAChB,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAA;QAC3B,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACnD,MAAM,KAAK,GAAG,GAAuB,EAAE,CAAC,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,EAAE;YACzE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;YAC7E,KAAK,CAAC,KAAK,EAAE,CAAA;QACf,CAAC,CAAC,CAAA;QACF,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,QAAQ;YAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;QAChH,IAAI,CAAC;YAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,QAAQ;YAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;QAChH,IAAI,CAAC;YAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAC5B,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;IAC7B,CAAC;IAED,2DAA2D;IACnD,KAAK,CAAC,kBAAkB,CAAC,OAAe;QAC9C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACrB,IAAI,CAAC;YAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAClH,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAClC,YAAY,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;IAED,cAAc,CAAC,IAAY;QACzB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,yEAAyE;QACzE,uEAAuE;QACvE,0EAA0E;QAC1E,kEAAkE;QAClE,aAAa;QACb,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YAC3C,GAAG,CAAC,MAAM,GAAG,OAAO,CAAA;YACpB,GAAG,CAAC,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,qBAAqB,IAAI,oBAAoB,CAAA;YAChF,GAAG,CAAC,MAAM,GAAG,IAAI,CAAA;YACjB,GAAG,CAAC,QAAQ,EAAE,CAAA;QAChB,CAAC;QACD,uEAAuE;QACvE,6DAA6D;QAC7D,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC;gBAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;YAC5D,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;QAC9B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IACpC,CAAC;IAED,YAAY,CAAC,IAAY;QACvB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAC7B,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,GAAG,CAAC,MAAM;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,IAAI,CAAC,WAAW,IAAI,KAAK,CAAA;QACzB,SAAS,CAAC;YACR,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACzC,IAAI,EAAE,GAAG,CAAC;gBAAE,MAAK;YACjB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;YAC1C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;YACjD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,SAAQ;YAC1B,IAAI,GAAY,CAAA;YAChB,IAAI,CAAC;gBACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAA;YACnC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAQ;YACV,CAAC;YACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;YACnC,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAQ;YACjC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC;IAED,YAAY,CAAC,KAAkB;QAC7B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,OAAO;gBACV,IAAI,CAAC,YAAY,EAAE,CAAA;gBACnB,OAAM;YACR,KAAK,SAAS;gBACZ,OAAM;YACR,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;gBACpC,IAAI,GAAG,KAAK,SAAS;oBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC,CAAA;gBAC5F,OAAM;YACR,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;gBACzB,OAAM;YACR,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;gBACpC,IAAI,GAAG,KAAK,SAAS;oBAAE,GAAG,CAAC,OAAO,GAAG,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,EAAE,CAAA;gBACtE,OAAM;YACR,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;gBACpC,IAAI,GAAG,KAAK,SAAS;oBAAE,OAAM;gBAC7B,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;gBACzB,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;oBAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;gBACtD,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS;oBAAE,GAAG,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAA;gBACjF,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI;oBAAE,GAAG,CAAC,SAAS,GAAG,IAAI,CAAA;gBAClD,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI;oBAAE,GAAG,CAAC,aAAa,GAAG,IAAI,CAAA;gBAC1D,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;oBAAE,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;gBAC5D,GAAG,CAAC,QAAQ,EAAE,CAAA;gBACd,OAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,aAAa,CAAC,KAA6C;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACpC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE;gBACzC,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,wBAAwB,KAAK,CAAC,EAAE,EAAE;gBAC3C,IAAI,EAAE,KAAK,CAAC,IAAI;aACjB,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QACD,2EAA2E;QAC3E,uEAAuE;QACvE,0EAA0E;QAC1E,gFAAgF;QAChF,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;QAC1D,MAAM,EAAE,GAAG,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACrG,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE,CAAC;YAC7B,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE;gBACzC,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,mBAAmB,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE;gBAC7E,IAAI,EAAE,KAAK,CAAC,IAAI;aACjB,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QACD,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACrC,IAAI,KAAgC,CAAA;gBACpC,IAAI,CAAC;oBACH,KAAK,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;gBACrC,CAAC;gBAAC,MAAM,CAAC;oBACP,KAAK,GAAG,SAAS,CAAA;gBACnB,CAAC;gBACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE;wBAC1C,EAAE,EAAE,KAAK;wBACT,OAAO,EAAE,0CAA0C;wBACnD,IAAI,EAAE,KAAK,CAAC,IAAI;qBACjB,CAAC,CAAA;oBACF,OAAM;gBACR,CAAC;gBACD,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;YACpF,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE;oBAC1C,EAAE,EAAE,KAAK;oBACT,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC;oBACzB,IAAI,EAAE,KAAK,CAAC,IAAI;iBACjB,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAC,EAAE,CAAA;IACN,CAAC;IAED,WAAW,CACT,EAAU,EACV,GAAW,EACX,OAAwG;QAExG,MAAM,OAAO,GAAsB,OAAO,CAAC,EAAE;YAC3C,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE;YAChF,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAA;QACvF,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;IAED,kFAAkF;IAClF,MAAM,CAAC,OAA0B;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7E,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;gBAC5D,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,uBAAuB,CAAC,CAAC,CAAA;gBAChE,OAAM;YACR,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAoB,EAAE,EAAE;gBAC9E,IAAI,KAAK;oBAAE,MAAM,CAAC,KAAK,CAAC,CAAA;;oBACnB,OAAO,EAAE,CAAA;YAChB,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAC,CAAA;QACH,mEAAmE;QACnE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACvC,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}