network-ai 4.13.0 → 4.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,630 @@
1
+ "use strict";
2
+ /**
3
+ * Agent Runtime — Sandboxed execution environment for AI agents
4
+ *
5
+ * Provides controlled access to shell commands, file system, and system
6
+ * resources with policy enforcement, approval gates, and audit logging.
7
+ *
8
+ * Components:
9
+ * - SandboxPolicy — defines what agents are allowed to do
10
+ * - ShellExecutor — spawns child processes within policy constraints
11
+ * - FileAccessor — scoped file read/write with traversal protection
12
+ * - ApprovalGate — human-in-the-loop approval for sensitive operations
13
+ * - AgentRuntime — unified facade combining all components
14
+ *
15
+ * @module AgentRuntime
16
+ * @version 1.0.0
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.RuntimeExecutionError = exports.RuntimeApprovalError = exports.RuntimePolicyError = exports.AgentRuntime = exports.ApprovalGate = exports.FileAccessor = exports.ShellExecutor = exports.SandboxPolicy = void 0;
20
+ const child_process_1 = require("child_process");
21
+ const promises_1 = require("fs/promises");
22
+ const path_1 = require("path");
23
+ const events_1 = require("events");
24
+ // ============================================================================
25
+ // SANDBOX POLICY
26
+ // ============================================================================
27
+ const DEFAULT_POLICY = {
28
+ allowedCommands: [],
29
+ blockedCommands: [
30
+ 'rm -rf /',
31
+ 'rm -rf /*',
32
+ 'rmdir /s /q C:\\',
33
+ 'format *',
34
+ 'mkfs*',
35
+ 'dd if=*',
36
+ ':(){:|:&};:', // fork bomb
37
+ 'shutdown*',
38
+ 'reboot*',
39
+ 'halt*',
40
+ 'init 0',
41
+ 'init 6',
42
+ 'del /f /s /q C:\\*',
43
+ 'reg delete*',
44
+ 'net user*',
45
+ 'net localgroup*',
46
+ ],
47
+ allowedPaths: ['.'],
48
+ blockedPaths: [],
49
+ maxConcurrentProcesses: 5,
50
+ defaultTimeoutMs: 30_000,
51
+ defaultMaxOutputBytes: 1_048_576,
52
+ approvalRequired: [
53
+ 'rm *',
54
+ 'del *',
55
+ 'rmdir *',
56
+ 'git push*',
57
+ 'git reset --hard*',
58
+ 'npm publish*',
59
+ 'docker *',
60
+ 'kubectl *',
61
+ ],
62
+ autoApproveReads: true,
63
+ };
64
+ /**
65
+ * Sandbox policy engine — determines what agents are allowed to do.
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * const policy = new SandboxPolicy({
70
+ * basePath: '/project',
71
+ * allowedCommands: ['npm *', 'node *', 'git status'],
72
+ * });
73
+ * policy.isCommandAllowed('npm test'); // true
74
+ * policy.isCommandAllowed('rm -rf /'); // false
75
+ * ```
76
+ */
77
+ class SandboxPolicy {
78
+ config;
79
+ constructor(config) {
80
+ this.config = { ...DEFAULT_POLICY, ...config };
81
+ this.config.basePath = (0, path_1.resolve)(this.config.basePath);
82
+ }
83
+ /** Check if a command matches the policy's allowed list and isn't blocked */
84
+ isCommandAllowed(command) {
85
+ const trimmed = command.trim();
86
+ if (!trimmed)
87
+ return false;
88
+ // Check blocked first (always wins)
89
+ if (this.matchesAny(trimmed, this.config.blockedCommands))
90
+ return false;
91
+ // If no allowedCommands, deny all
92
+ if (this.config.allowedCommands.length === 0)
93
+ return false;
94
+ // Check allowed
95
+ return this.matchesAny(trimmed, this.config.allowedCommands);
96
+ }
97
+ /** Check if a command requires human approval */
98
+ requiresApproval(command) {
99
+ return this.matchesAny(command.trim(), this.config.approvalRequired);
100
+ }
101
+ /** Assess risk level of a command */
102
+ assessRisk(command) {
103
+ const trimmed = command.trim().toLowerCase();
104
+ const highRisk = ['rm ', 'del ', 'format', 'drop ', 'delete ', 'truncate ', 'git push', 'git reset', 'docker', 'kubectl'];
105
+ const medRisk = ['git ', 'npm ', 'pip ', 'mv ', 'move ', 'cp ', 'copy ', 'chmod ', 'chown '];
106
+ if (highRisk.some(p => trimmed.startsWith(p) || trimmed.includes(' ' + p)))
107
+ return 'high';
108
+ if (medRisk.some(p => trimmed.startsWith(p) || trimmed.includes(' ' + p)))
109
+ return 'medium';
110
+ return 'low';
111
+ }
112
+ /** Validate that a file path is within allowed scope */
113
+ isPathAllowed(filePath) {
114
+ const normalized = this.resolvePath(filePath);
115
+ if (!normalized)
116
+ return false;
117
+ // Check blocked paths
118
+ for (const blocked of this.config.blockedPaths) {
119
+ const blockedAbs = (0, path_1.resolve)(this.config.basePath, blocked);
120
+ if (normalized.startsWith(blockedAbs))
121
+ return false;
122
+ }
123
+ // Check allowed paths
124
+ for (const allowed of this.config.allowedPaths) {
125
+ const allowedAbs = (0, path_1.resolve)(this.config.basePath, allowed);
126
+ if (normalized.startsWith(allowedAbs))
127
+ return true;
128
+ }
129
+ return false;
130
+ }
131
+ /** Resolve and validate a path against basePath (returns null if traversal detected) */
132
+ resolvePath(filePath) {
133
+ const normalized = (0, path_1.normalize)(filePath);
134
+ const absolute = (0, path_1.isAbsolute)(normalized)
135
+ ? normalized
136
+ : (0, path_1.join)(this.config.basePath, normalized);
137
+ const resolved = (0, path_1.resolve)(absolute);
138
+ // Traversal check
139
+ if (!resolved.startsWith(this.config.basePath))
140
+ return null;
141
+ return resolved;
142
+ }
143
+ /** Get a copy of the current policy config */
144
+ getConfig() {
145
+ return { ...this.config };
146
+ }
147
+ /** Update allowed commands */
148
+ allowCommand(pattern) {
149
+ if (!this.config.allowedCommands.includes(pattern)) {
150
+ this.config.allowedCommands.push(pattern);
151
+ }
152
+ }
153
+ /** Remove an allowed command pattern */
154
+ disallowCommand(pattern) {
155
+ this.config.allowedCommands = this.config.allowedCommands.filter(c => c !== pattern);
156
+ }
157
+ /** Update allowed paths */
158
+ allowPath(path) {
159
+ if (!this.config.allowedPaths.includes(path)) {
160
+ this.config.allowedPaths.push(path);
161
+ }
162
+ }
163
+ /** Block a path */
164
+ blockPath(path) {
165
+ if (!this.config.blockedPaths.includes(path)) {
166
+ this.config.blockedPaths.push(path);
167
+ }
168
+ }
169
+ get basePath() { return this.config.basePath; }
170
+ get maxConcurrentProcesses() { return this.config.maxConcurrentProcesses; }
171
+ get defaultTimeoutMs() { return this.config.defaultTimeoutMs; }
172
+ get defaultMaxOutputBytes() { return this.config.defaultMaxOutputBytes; }
173
+ get autoApproveReads() { return this.config.autoApproveReads; }
174
+ /** Simple glob matching: supports * as wildcard */
175
+ matchesAny(value, patterns) {
176
+ return patterns.some(pattern => this.globMatch(pattern, value));
177
+ }
178
+ /** Match a simple glob pattern against a string */
179
+ globMatch(pattern, value) {
180
+ // Escape regex special chars except *
181
+ const regexStr = pattern
182
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
183
+ .replace(/\*/g, '.*');
184
+ return new RegExp(`^${regexStr}$`, 'i').test(value);
185
+ }
186
+ }
187
+ exports.SandboxPolicy = SandboxPolicy;
188
+ // ============================================================================
189
+ // SHELL EXECUTOR
190
+ // ============================================================================
191
+ /**
192
+ * Sandboxed shell command executor with timeout, output limits, and
193
+ * concurrent process tracking.
194
+ *
195
+ * @example
196
+ * ```typescript
197
+ * const executor = new ShellExecutor(policy);
198
+ * const result = await executor.execute('npm test', { agentId: 'tester' });
199
+ * console.log(result.exitCode, result.stdout);
200
+ * ```
201
+ */
202
+ class ShellExecutor {
203
+ policy;
204
+ activeProcesses = 0;
205
+ constructor(policy) {
206
+ this.policy = policy;
207
+ }
208
+ /** Execute a shell command within policy constraints */
209
+ async execute(command, opts = {}) {
210
+ // Policy check
211
+ if (!this.policy.isCommandAllowed(command)) {
212
+ throw new RuntimePolicyError(`Command blocked by policy: ${command}`);
213
+ }
214
+ // Concurrency check
215
+ if (this.activeProcesses >= this.policy.maxConcurrentProcesses) {
216
+ throw new RuntimePolicyError(`Concurrency limit reached (${this.policy.maxConcurrentProcesses} max)`);
217
+ }
218
+ const cwd = opts.cwd
219
+ ? (this.policy.resolvePath(opts.cwd) ?? this.policy.basePath)
220
+ : this.policy.basePath;
221
+ const timeoutMs = opts.timeoutMs ?? this.policy.defaultTimeoutMs;
222
+ const maxBytes = opts.maxOutputBytes ?? this.policy.defaultMaxOutputBytes;
223
+ this.activeProcesses++;
224
+ const startTime = Date.now();
225
+ try {
226
+ return await this.spawnCommand(command, cwd, timeoutMs, maxBytes, opts.env);
227
+ }
228
+ finally {
229
+ this.activeProcesses--;
230
+ }
231
+ }
232
+ /** Get the number of currently running processes */
233
+ get running() { return this.activeProcesses; }
234
+ spawnCommand(command, cwd, timeoutMs, maxBytes, env) {
235
+ return new Promise((resolvePromise, reject) => {
236
+ const isWindows = process.platform === 'win32';
237
+ const shell = isWindows ? 'cmd.exe' : '/bin/sh';
238
+ const shellArgs = isWindows ? ['/c', command] : ['-c', command];
239
+ const child = (0, child_process_1.spawn)(shell, shellArgs, {
240
+ cwd,
241
+ env: env ? { ...process.env, ...env } : process.env,
242
+ stdio: ['ignore', 'pipe', 'pipe'],
243
+ windowsHide: true,
244
+ });
245
+ let stdout = '';
246
+ let stderr = '';
247
+ let totalBytes = 0;
248
+ let timedOut = false;
249
+ let truncated = false;
250
+ const timer = setTimeout(() => {
251
+ timedOut = true;
252
+ child.kill('SIGTERM');
253
+ setTimeout(() => { if (!child.killed)
254
+ child.kill('SIGKILL'); }, 2000);
255
+ }, timeoutMs);
256
+ child.stdout?.on('data', (chunk) => {
257
+ totalBytes += chunk.length;
258
+ if (totalBytes <= maxBytes) {
259
+ stdout += chunk.toString();
260
+ }
261
+ else if (!truncated) {
262
+ truncated = true;
263
+ stdout += '\n[OUTPUT TRUNCATED — exceeded limit]';
264
+ child.kill('SIGTERM');
265
+ }
266
+ });
267
+ child.stderr?.on('data', (chunk) => {
268
+ totalBytes += chunk.length;
269
+ if (totalBytes <= maxBytes) {
270
+ stderr += chunk.toString();
271
+ }
272
+ });
273
+ child.on('close', (code) => {
274
+ clearTimeout(timer);
275
+ resolvePromise({
276
+ exitCode: code ?? (timedOut ? 124 : 1),
277
+ stdout,
278
+ stderr,
279
+ durationMs: Date.now() - startTime,
280
+ timedOut,
281
+ truncated,
282
+ });
283
+ });
284
+ child.on('error', (err) => {
285
+ clearTimeout(timer);
286
+ reject(new RuntimeExecutionError(`Failed to spawn: ${err.message}`));
287
+ });
288
+ const startTime = Date.now();
289
+ });
290
+ }
291
+ }
292
+ exports.ShellExecutor = ShellExecutor;
293
+ // ============================================================================
294
+ // FILE ACCESSOR
295
+ // ============================================================================
296
+ /**
297
+ * Policy-scoped file system accessor. All paths are validated against
298
+ * the sandbox policy before any I/O.
299
+ *
300
+ * @example
301
+ * ```typescript
302
+ * const files = new FileAccessor(policy);
303
+ * const result = await files.read('src/index.ts', 'reader-agent');
304
+ * ```
305
+ */
306
+ class FileAccessor {
307
+ policy;
308
+ constructor(policy) {
309
+ this.policy = policy;
310
+ }
311
+ /** Read a file within the sandbox scope */
312
+ async read(filePath, agentId) {
313
+ const start = Date.now();
314
+ const resolved = this.policy.resolvePath(filePath);
315
+ if (!resolved) {
316
+ return { success: false, path: filePath, error: 'Path traversal blocked', durationMs: Date.now() - start };
317
+ }
318
+ if (!this.policy.isPathAllowed(filePath)) {
319
+ return { success: false, path: filePath, error: 'Path not in allowed scope', durationMs: Date.now() - start };
320
+ }
321
+ try {
322
+ const content = await (0, promises_1.readFile)(resolved, 'utf-8');
323
+ return { success: true, path: resolved, content, durationMs: Date.now() - start };
324
+ }
325
+ catch (err) {
326
+ const msg = err instanceof Error ? err.message : String(err);
327
+ return { success: false, path: resolved, error: msg, durationMs: Date.now() - start };
328
+ }
329
+ }
330
+ /** Write a file within the sandbox scope */
331
+ async write(filePath, content, agentId) {
332
+ const start = Date.now();
333
+ const resolved = this.policy.resolvePath(filePath);
334
+ if (!resolved) {
335
+ return { success: false, path: filePath, error: 'Path traversal blocked', durationMs: Date.now() - start };
336
+ }
337
+ if (!this.policy.isPathAllowed(filePath)) {
338
+ return { success: false, path: filePath, error: 'Path not in allowed scope', durationMs: Date.now() - start };
339
+ }
340
+ try {
341
+ await (0, promises_1.mkdir)((0, path_1.dirname)(resolved), { recursive: true });
342
+ await (0, promises_1.writeFile)(resolved, content, 'utf-8');
343
+ return { success: true, path: resolved, durationMs: Date.now() - start };
344
+ }
345
+ catch (err) {
346
+ const msg = err instanceof Error ? err.message : String(err);
347
+ return { success: false, path: resolved, error: msg, durationMs: Date.now() - start };
348
+ }
349
+ }
350
+ /** List directory contents within the sandbox scope */
351
+ async list(dirPath, agentId) {
352
+ const start = Date.now();
353
+ const resolved = this.policy.resolvePath(dirPath);
354
+ if (!resolved) {
355
+ return { success: false, path: dirPath, error: 'Path traversal blocked', durationMs: Date.now() - start };
356
+ }
357
+ if (!this.policy.isPathAllowed(dirPath)) {
358
+ return { success: false, path: dirPath, error: 'Path not in allowed scope', durationMs: Date.now() - start };
359
+ }
360
+ try {
361
+ const items = await (0, promises_1.readdir)(resolved);
362
+ const entries = [];
363
+ for (const item of items) {
364
+ const itemPath = (0, path_1.join)(resolved, item);
365
+ const info = await (0, promises_1.stat)(itemPath);
366
+ entries.push(info.isDirectory() ? `${item}/` : item);
367
+ }
368
+ return { success: true, path: resolved, entries, durationMs: Date.now() - start };
369
+ }
370
+ catch (err) {
371
+ const msg = err instanceof Error ? err.message : String(err);
372
+ return { success: false, path: resolved, error: msg, durationMs: Date.now() - start };
373
+ }
374
+ }
375
+ }
376
+ exports.FileAccessor = FileAccessor;
377
+ // ============================================================================
378
+ // APPROVAL GATE
379
+ // ============================================================================
380
+ /**
381
+ * Human-in-the-loop approval gate. Queues requests and waits for
382
+ * a decision from the configured callback.
383
+ *
384
+ * @example
385
+ * ```typescript
386
+ * const gate = new ApprovalGate(async (req) => {
387
+ * return { approved: true, approvedBy: 'operator' };
388
+ * });
389
+ * const decision = await gate.request({ type: 'shell', target: 'npm publish', ... });
390
+ * ```
391
+ */
392
+ class ApprovalGate extends events_1.EventEmitter {
393
+ callback;
394
+ autoApproveAll;
395
+ history = [];
396
+ constructor(callback, autoApproveAll = false) {
397
+ super();
398
+ this.callback = callback ?? null;
399
+ this.autoApproveAll = autoApproveAll;
400
+ }
401
+ /** Request approval for an operation */
402
+ async request(req) {
403
+ this.emit('requested', req);
404
+ if (this.autoApproveAll) {
405
+ const decision = { approved: true, approvedBy: 'auto-approve-all' };
406
+ this.history.push({ request: req, decision });
407
+ this.emit('decided', req, decision);
408
+ return decision;
409
+ }
410
+ if (!this.callback) {
411
+ const decision = { approved: false, reason: 'No approval callback configured' };
412
+ this.history.push({ request: req, decision });
413
+ this.emit('decided', req, decision);
414
+ return decision;
415
+ }
416
+ const decision = await this.callback(req);
417
+ this.history.push({ request: req, decision });
418
+ this.emit('decided', req, decision);
419
+ return decision;
420
+ }
421
+ /** Get approval history */
422
+ getHistory() {
423
+ return this.history;
424
+ }
425
+ /** Get count of approvals/denials */
426
+ getStats() {
427
+ const approved = this.history.filter(h => h.decision.approved).length;
428
+ return { total: this.history.length, approved, denied: this.history.length - approved };
429
+ }
430
+ }
431
+ exports.ApprovalGate = ApprovalGate;
432
+ // ============================================================================
433
+ // AGENT RUNTIME (Facade)
434
+ // ============================================================================
435
+ /**
436
+ * Unified agent execution runtime. Combines policy, shell, file access,
437
+ * and approval into a single interface for agent consumption.
438
+ *
439
+ * @example
440
+ * ```typescript
441
+ * const runtime = new AgentRuntime({
442
+ * policy: {
443
+ * basePath: '/project',
444
+ * allowedCommands: ['npm *', 'node *', 'git status', 'git diff'],
445
+ * },
446
+ * onApproval: async (req) => {
447
+ * console.log(`Approve? ${req.type}: ${req.target}`);
448
+ * return { approved: true, approvedBy: 'operator' };
449
+ * },
450
+ * });
451
+ *
452
+ * const result = await runtime.exec('npm test', 'tester-agent');
453
+ * ```
454
+ */
455
+ class AgentRuntime extends events_1.EventEmitter {
456
+ policy;
457
+ shell;
458
+ files;
459
+ gate;
460
+ auditLog = [];
461
+ constructor(opts) {
462
+ super();
463
+ this.policy = new SandboxPolicy(opts.policy);
464
+ this.shell = new ShellExecutor(this.policy);
465
+ this.files = new FileAccessor(this.policy);
466
+ this.gate = new ApprovalGate(opts.onApproval, opts.autoApproveAll);
467
+ // Wire approval events
468
+ this.gate.on('requested', (req) => {
469
+ this.emit('approval:requested', req);
470
+ this.audit({ action: 'approval_requested', agentId: req.agentId, target: req.target, result: 'success' });
471
+ });
472
+ this.gate.on('decided', (req, dec) => {
473
+ this.emit('approval:decided', req, dec);
474
+ this.audit({
475
+ action: dec.approved ? 'approval_granted' : 'approval_denied',
476
+ agentId: req.agentId,
477
+ target: req.target,
478
+ result: dec.approved ? 'success' : 'denied',
479
+ details: { approvedBy: dec.approvedBy, reason: dec.reason },
480
+ });
481
+ });
482
+ }
483
+ /**
484
+ * Execute a shell command with policy + approval checks.
485
+ * Returns ShellResult on success, throws on policy violation.
486
+ */
487
+ async exec(command, agentId, opts = {}) {
488
+ // Policy check
489
+ if (!this.policy.isCommandAllowed(command)) {
490
+ this.emit('policy:violation', agentId, command, 'Command not allowed by policy');
491
+ this.audit({ action: 'shell_execute', agentId, target: command, result: 'blocked' });
492
+ throw new RuntimePolicyError(`Command blocked by policy: ${command}`);
493
+ }
494
+ // Approval check
495
+ const needsApproval = opts.requiresApproval ?? this.policy.requiresApproval(command);
496
+ if (needsApproval) {
497
+ const decision = await this.gate.request({
498
+ type: 'shell',
499
+ target: command,
500
+ agentId,
501
+ risk: this.policy.assessRisk(command),
502
+ timestamp: Date.now(),
503
+ });
504
+ if (!decision.approved) {
505
+ this.audit({ action: 'shell_execute', agentId, target: command, result: 'denied', details: { reason: decision.reason } });
506
+ throw new RuntimeApprovalError(`Command denied: ${decision.reason ?? 'no reason given'}`);
507
+ }
508
+ }
509
+ // Execute
510
+ this.emit('command:start', agentId, command);
511
+ const result = await this.shell.execute(command, { ...opts, agentId });
512
+ this.emit('command:complete', agentId, command, result);
513
+ this.audit({
514
+ action: 'shell_execute',
515
+ agentId,
516
+ target: command,
517
+ result: result.exitCode === 0 ? 'success' : (result.timedOut ? 'timeout' : 'error'),
518
+ durationMs: result.durationMs,
519
+ details: { exitCode: result.exitCode, timedOut: result.timedOut },
520
+ });
521
+ return result;
522
+ }
523
+ /** Read a file with policy + optional approval */
524
+ async readFile(filePath, agentId) {
525
+ if (!this.policy.isPathAllowed(filePath)) {
526
+ this.emit('policy:violation', agentId, filePath, 'Path not allowed');
527
+ this.audit({ action: 'file_read', agentId, target: filePath, result: 'blocked' });
528
+ return { success: false, path: filePath, error: 'Path not allowed by policy', durationMs: 0 };
529
+ }
530
+ // Reads can auto-approve
531
+ if (!this.policy.autoApproveReads) {
532
+ const decision = await this.gate.request({
533
+ type: 'file_read', target: filePath, agentId, risk: 'low', timestamp: Date.now(),
534
+ });
535
+ if (!decision.approved) {
536
+ this.audit({ action: 'file_read', agentId, target: filePath, result: 'denied' });
537
+ return { success: false, path: filePath, error: 'Read denied', durationMs: 0 };
538
+ }
539
+ }
540
+ this.emit('file:access', agentId, filePath, 'read');
541
+ const result = await this.files.read(filePath, agentId);
542
+ this.audit({
543
+ action: 'file_read', agentId, target: filePath,
544
+ result: result.success ? 'success' : 'error', durationMs: result.durationMs,
545
+ });
546
+ return result;
547
+ }
548
+ /** Write a file with policy + approval */
549
+ async writeFile(filePath, content, agentId) {
550
+ if (!this.policy.isPathAllowed(filePath)) {
551
+ this.emit('policy:violation', agentId, filePath, 'Path not allowed');
552
+ this.audit({ action: 'file_write', agentId, target: filePath, result: 'blocked' });
553
+ return { success: false, path: filePath, error: 'Path not allowed by policy', durationMs: 0 };
554
+ }
555
+ const decision = await this.gate.request({
556
+ type: 'file_write', target: filePath, agentId, risk: 'medium', timestamp: Date.now(),
557
+ });
558
+ if (!decision.approved) {
559
+ this.audit({ action: 'file_write', agentId, target: filePath, result: 'denied' });
560
+ return { success: false, path: filePath, error: `Write denied: ${decision.reason ?? 'no reason'}`, durationMs: 0 };
561
+ }
562
+ this.emit('file:access', agentId, filePath, 'write');
563
+ const result = await this.files.write(filePath, content, agentId);
564
+ this.audit({
565
+ action: 'file_write', agentId, target: filePath,
566
+ result: result.success ? 'success' : 'error', durationMs: result.durationMs,
567
+ });
568
+ return result;
569
+ }
570
+ /** List a directory with policy check */
571
+ async listDir(dirPath, agentId) {
572
+ if (!this.policy.isPathAllowed(dirPath)) {
573
+ this.emit('policy:violation', agentId, dirPath, 'Path not allowed');
574
+ this.audit({ action: 'file_list', agentId, target: dirPath, result: 'blocked' });
575
+ return { success: false, path: dirPath, error: 'Path not allowed by policy', durationMs: 0 };
576
+ }
577
+ this.emit('file:access', agentId, dirPath, 'list');
578
+ const result = await this.files.list(dirPath, agentId);
579
+ this.audit({
580
+ action: 'file_list', agentId, target: dirPath,
581
+ result: result.success ? 'success' : 'error', durationMs: result.durationMs,
582
+ });
583
+ return result;
584
+ }
585
+ /** Get the internal audit log */
586
+ getAuditLog() {
587
+ return this.auditLog;
588
+ }
589
+ /** Clear the internal audit log */
590
+ clearAuditLog() {
591
+ this.auditLog = [];
592
+ }
593
+ audit(entry) {
594
+ const full = { ...entry, timestamp: new Date().toISOString() };
595
+ this.auditLog.push(full);
596
+ this.emit('audit', full);
597
+ }
598
+ }
599
+ exports.AgentRuntime = AgentRuntime;
600
+ // ============================================================================
601
+ // ERROR TYPES
602
+ // ============================================================================
603
+ /** Thrown when an operation violates the sandbox policy */
604
+ class RuntimePolicyError extends Error {
605
+ code = 'POLICY_VIOLATION';
606
+ constructor(message) {
607
+ super(message);
608
+ this.name = 'RuntimePolicyError';
609
+ }
610
+ }
611
+ exports.RuntimePolicyError = RuntimePolicyError;
612
+ /** Thrown when an operation is denied by the approval gate */
613
+ class RuntimeApprovalError extends Error {
614
+ code = 'APPROVAL_DENIED';
615
+ constructor(message) {
616
+ super(message);
617
+ this.name = 'RuntimeApprovalError';
618
+ }
619
+ }
620
+ exports.RuntimeApprovalError = RuntimeApprovalError;
621
+ /** Thrown when a command fails to spawn */
622
+ class RuntimeExecutionError extends Error {
623
+ code = 'EXECUTION_ERROR';
624
+ constructor(message) {
625
+ super(message);
626
+ this.name = 'RuntimeExecutionError';
627
+ }
628
+ }
629
+ exports.RuntimeExecutionError = RuntimeExecutionError;
630
+ //# sourceMappingURL=agent-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runtime.js","sourceRoot":"","sources":["../../lib/agent-runtime.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,iDAAsC;AACtC,0CAAwE;AACxE,+BAAqE;AACrE,mCAAsC;AA+HtC,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,MAAM,cAAc,GAA0C;IAC5D,eAAe,EAAE,EAAE;IACnB,eAAe,EAAE;QACf,UAAU;QACV,WAAW;QACX,kBAAkB;QAClB,UAAU;QACV,OAAO;QACP,SAAS;QACT,aAAa,EAAS,YAAY;QAClC,WAAW;QACX,SAAS;QACT,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,oBAAoB;QACpB,aAAa;QACb,WAAW;QACX,iBAAiB;KAClB;IACD,YAAY,EAAE,CAAC,GAAG,CAAC;IACnB,YAAY,EAAE,EAAE;IAChB,sBAAsB,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM;IACxB,qBAAqB,EAAE,SAAS;IAChC,gBAAgB,EAAE;QAChB,MAAM;QACN,OAAO;QACP,SAAS;QACT,WAAW;QACX,mBAAmB;QACnB,cAAc;QACd,UAAU;QACV,WAAW;KACZ;IACD,gBAAgB,EAAE,IAAI;CACvB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAa,aAAa;IACP,MAAM,CAAsB;IAE7C,YAAY,MAA2D;QACrE,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;IAED,6EAA6E;IAC7E,gBAAgB,CAAC,OAAe;QAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAE3B,oCAAoC;QACpC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YAAE,OAAO,KAAK,CAAC;QAExE,kCAAkC;QAClC,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAE3D,gBAAgB;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAC/D,CAAC;IAED,iDAAiD;IACjD,gBAAgB,CAAC,OAAe;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACvE,CAAC;IAED,qCAAqC;IACrC,UAAU,CAAC,OAAe;QACxB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1H,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE7F,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC;QAC1F,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAAE,OAAO,QAAQ,CAAC;QAC3F,OAAO,KAAK,CAAC;IACf,CAAC;IAED,wDAAwD;IACxD,aAAa,CAAC,QAAgB;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QAE9B,sBAAsB;QACtB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC/C,MAAM,UAAU,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC1D,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;gBAAE,OAAO,KAAK,CAAC;QACtD,CAAC;QAED,sBAAsB;QACtB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC/C,MAAM,UAAU,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC1D,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;gBAAE,OAAO,IAAI,CAAC;QACrD,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,wFAAwF;IACxF,WAAW,CAAC,QAAgB;QAC1B,MAAM,UAAU,GAAG,IAAA,gBAAS,EAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAA,iBAAU,EAAC,UAAU,CAAC;YACrC,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,IAAA,WAAI,EAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAA,cAAO,EAAC,QAAQ,CAAC,CAAC;QAEnC,kBAAkB;QAClB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,8CAA8C;IAC9C,SAAS;QACP,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,8BAA8B;IAC9B,YAAY,CAAC,OAAe;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,eAAe,CAAC,OAAe;QAC7B,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;IACvF,CAAC;IAED,2BAA2B;IAC3B,SAAS,CAAC,IAAY;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,SAAS,CAAC,IAAY;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvD,IAAI,sBAAsB,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACnF,IAAI,gBAAgB,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACvE,IAAI,qBAAqB,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACjF,IAAI,gBAAgB,KAAc,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAExE,mDAAmD;IAC3C,UAAU,CAAC,KAAa,EAAE,QAAkB;QAClD,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,mDAAmD;IAC3C,SAAS,CAAC,OAAe,EAAE,KAAa;QAC9C,sCAAsC;QACtC,MAAM,QAAQ,GAAG,OAAO;aACrB,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;aACpC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACxB,OAAO,IAAI,MAAM,CAAC,IAAI,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;CACF;AA1HD,sCA0HC;AAED,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;;;;;;;;;GAUG;AACH,MAAa,aAAa;IACP,MAAM,CAAgB;IAC/B,eAAe,GAAG,CAAC,CAAC;IAE5B,YAAY,MAAqB;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,wDAAwD;IACxD,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,OAAqB,EAAE;QACpD,eAAe;QACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,kBAAkB,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,oBAAoB;QACpB,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;YAC/D,MAAM,IAAI,kBAAkB,CAC1B,8BAA8B,IAAI,CAAC,MAAM,CAAC,sBAAsB,OAAO,CACxE,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;YAClB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC7D,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QAEzB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC;QAE1E,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9E,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED,oDAAoD;IACpD,IAAI,OAAO,KAAa,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IAE9C,YAAY,CAClB,OAAe,EACf,GAAW,EACX,SAAiB,EACjB,QAAgB,EAChB,GAA4B;QAE5B,OAAO,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE;YAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;YAC/C,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YAChD,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEhE,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,KAAK,EAAE,SAAS,EAAE;gBACpC,GAAG;gBACH,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG;gBACnD,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;gBACjC,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;YAEH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,IAAI,SAAS,GAAG,KAAK,CAAC;YAEtB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,QAAQ,GAAG,IAAI,CAAC;gBAChB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtB,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;oBAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACxE,CAAC,EAAE,SAAS,CAAC,CAAC;YAEd,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACzC,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC;gBAC3B,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC7B,CAAC;qBAAM,IAAI,CAAC,SAAS,EAAE,CAAC;oBACtB,SAAS,GAAG,IAAI,CAAC;oBACjB,MAAM,IAAI,uCAAuC,CAAC;oBAClD,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACzC,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC;gBAC3B,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC7B,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,cAAc,CAAC;oBACb,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtC,MAAM;oBACN,MAAM;oBACN,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBAClC,QAAQ;oBACR,SAAS;iBACV,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,CAAC,IAAI,qBAAqB,CAAC,oBAAoB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AA/GD,sCA+GC;AAED,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E;;;;;;;;;GASG;AACH,MAAa,YAAY;IACN,MAAM,CAAgB;IAEvC,YAAY,MAAqB;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,2CAA2C;IAC3C,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,OAAe;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEnD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,wBAAwB,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QAC7G,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,2BAA2B,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QAChH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QACpF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QACxF,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,KAAK,CAAC,KAAK,CAAC,QAAgB,EAAE,OAAe,EAAE,OAAe;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEnD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,wBAAwB,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QAC7G,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,2BAA2B,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QAChH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAA,gBAAK,EAAC,IAAA,cAAO,EAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,MAAM,IAAA,oBAAS,EAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QAC3E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QACxF,CAAC;IACH,CAAC;IAED,uDAAuD;IACvD,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,OAAe;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAElD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QAC5G,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,2BAA2B,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QAC/G,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAA,kBAAO,EAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACtC,MAAM,IAAI,GAAG,MAAM,IAAA,eAAI,EAAC,QAAQ,CAAC,CAAC;gBAClC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvD,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QACpF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QACxF,CAAC;IACH,CAAC;CACF;AA5ED,oCA4EC;AAED,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E;;;;;;;;;;;GAWG;AACH,MAAa,YAAa,SAAQ,qBAAY;IAC3B,QAAQ,CAA0B;IAClC,cAAc,CAAU;IACxB,OAAO,GAAoE,EAAE,CAAC;IAE/F,YAAY,QAA2B,EAAE,cAAc,GAAG,KAAK;QAC7D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,wCAAwC;IACxC,KAAK,CAAC,OAAO,CAAC,GAAoB;QAChC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAE5B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;YACtF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YACpC,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAqB,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC;YAClG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YACpC,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QACpC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,2BAA2B;IAC3B,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,qCAAqC;IACrC,QAAQ;QACN,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;QACtE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;IAC1F,CAAC;CACF;AA7CD,oCA6CC;AAED,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAa,YAAa,SAAQ,qBAAY;IACnC,MAAM,CAAgB;IACtB,KAAK,CAAgB;IACrB,KAAK,CAAe;IACpB,IAAI,CAAe;IACpB,QAAQ,GAAwB,EAAE,CAAC;IAE3C,YAAY,IAAyB;QACnC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAEnE,uBAAuB;QACvB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAoB,EAAE,EAAE;YACjD,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5G,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAoB,EAAE,GAAqB,EAAE,EAAE;YACtE,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK,CAAC;gBACT,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB;gBAC7D,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;gBAC3C,OAAO,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;aAC5D,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,OAAe,EAAE,OAAqB,EAAE;QAClE,eAAe;QACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE,+BAA+B,CAAC,CAAC;YACjF,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YACrF,MAAM,IAAI,kBAAkB,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,iBAAiB;QACjB,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACrF,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;gBACvC,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,OAAO;gBACf,OAAO;gBACP,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;gBACrC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACvB,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC1H,MAAM,IAAI,oBAAoB,CAAC,mBAAmB,QAAQ,CAAC,MAAM,IAAI,iBAAiB,EAAE,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;QAED,UAAU;QACV,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK,CAAC;YACT,MAAM,EAAE,eAAe;YACvB,OAAO;YACP,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;YACnF,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;SAClE,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,OAAe;QAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;YACrE,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YAClF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,4BAA4B,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QAChG,CAAC;QAED,yBAAyB;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;gBACvC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACjF,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACvB,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACjF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;YACjF,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK,CAAC;YACT,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ;YAC9C,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU;SAC5E,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,0CAA0C;IAC1C,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,OAAe,EAAE,OAAe;QAChE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;YACrE,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YACnF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,4BAA4B,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QAChG,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YACvC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACrF,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAClF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,QAAQ,CAAC,MAAM,IAAI,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QACrH,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK,CAAC;YACT,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ;YAC/C,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU;SAC5E,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,OAAe;QAC5C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC;YACpE,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YACjF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,4BAA4B,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QAC/F,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC;YACT,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO;YAC7C,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU;SAC5E,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,iCAAiC;IACjC,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,mCAAmC;IACnC,aAAa;QACX,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,KAA2C;QACvD,MAAM,IAAI,GAAsB,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QAClF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;CACF;AA/JD,oCA+JC;AAED,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,2DAA2D;AAC3D,MAAa,kBAAmB,SAAQ,KAAK;IAClC,IAAI,GAAG,kBAAkB,CAAC;IACnC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAND,gDAMC;AAED,8DAA8D;AAC9D,MAAa,oBAAqB,SAAQ,KAAK;IACpC,IAAI,GAAG,iBAAiB,CAAC;IAClC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAND,oDAMC;AAED,2CAA2C;AAC3C,MAAa,qBAAsB,SAAQ,KAAK;IACrC,IAAI,GAAG,iBAAiB,CAAC;IAClC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAND,sDAMC"}