@gizmodata/gizmosql-mcp 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/server.js CHANGED
@@ -4,16 +4,25 @@ import { z } from "zod";
4
4
  import { GizmoConnection, QueryTimeoutError, redactedUri } from "./connection.js";
5
5
  import { cellToJson, cellToText, escapeMarkdownCell, formatTable, resultFooter, toMarkdownTable, truncateText, } from "./format.js";
6
6
  import { convertParams, paramsSchema, PARAMS_DESCRIPTION, ParameterError } from "./params.js";
7
+ import { ConnectionRegistry, UnknownConnectionError } from "./registry.js";
7
8
  import { runSsoLogin } from "./sso.js";
8
9
  import { guardStatement, normalizeStatement, SqlGuardError, WRAPPER_ALIAS, wrapWithLimit, } from "./sql-guard.js";
9
10
  import { PACKAGE_NAME, PACKAGE_VERSION } from "./version.js";
10
- const SERVER_INSTRUCTIONS = "GizmoSQL is an Arrow Flight SQL server built on DuckDB, so DuckDB SQL syntax and functions apply. " +
11
- "Start with list_catalogs / list_schemas / list_tables / describe_table to discover the schema, then " +
12
- "use run_query for SELECT queries. Results are capped at a configurable number of rows; use LIMIT, " +
13
- "aggregation, or WHERE filters to keep results small. Bind user-supplied literals with ? placeholders " +
14
- "and the params argument instead of interpolating them into SQL. Unless GIZMOSQL_ALLOW_WRITES is " +
15
- "enabled the server is read-only. Unqualified table names resolve against the session's current " +
16
- "catalog and schema (see server_info); use use_schema or fully qualified names to work elsewhere.";
11
+ function instructions(registry) {
12
+ const multi = registry.names().length > 1;
13
+ return ("GizmoSQL is an Arrow Flight SQL server built on DuckDB, so DuckDB SQL syntax and functions apply. " +
14
+ "Start with list_catalogs / list_schemas / list_tables / describe_table to discover the schema, then " +
15
+ "use run_query for SELECT queries. Results are capped at a configurable number of rows; use LIMIT, " +
16
+ "aggregation, or WHERE filters to keep results small. Bind user-supplied literals with ? placeholders " +
17
+ "and the params argument instead of interpolating them into SQL. Unless GIZMOSQL_ALLOW_WRITES is " +
18
+ "enabled the server is read-only. Unqualified table names resolve against the session's current " +
19
+ "catalog and schema (see server_info); use use_schema or fully qualified names to work elsewhere." +
20
+ (multi
21
+ ? ` Several GizmoSQL servers are configured (${registry.names().join(", ")}; current: ${registry.current()}). ` +
22
+ "Every tool accepts an optional connection argument, or call use_connection to switch the default; " +
23
+ "list_connections shows them."
24
+ : ""));
25
+ }
17
26
  function text(body, structured) {
18
27
  const result = { content: [{ type: "text", text: body }] };
19
28
  if (structured)
@@ -24,17 +33,24 @@ function errorResult(message) {
24
33
  return { isError: true, content: [{ type: "text", text: `Error: ${message}` }] };
25
34
  }
26
35
  /** Converts a thrown error into a redacted, user-facing message. */
27
- export function describeError(err, connection) {
28
- if (err instanceof SqlGuardError || err instanceof ParameterError || err instanceof QueryTimeoutError) {
29
- return connection.redact(err.message);
36
+ export function describeError(err, redact) {
37
+ if (err instanceof SqlGuardError ||
38
+ err instanceof ParameterError ||
39
+ err instanceof QueryTimeoutError ||
40
+ err instanceof UnknownConnectionError) {
41
+ return redact(err.message);
30
42
  }
31
43
  const raw = err instanceof Error ? err.message : String(err);
32
44
  // Surface the server's message verbatim (minus credentials); strip the
33
45
  // client's generic prefix so the DuckDB error is front and center.
34
46
  const cleaned = raw.replace(/^Failed to execute (?:query|update): /u, "");
35
- return connection.redact(cleaned);
47
+ return redact(cleaned);
36
48
  }
37
49
  const sqlArg = z.string().min(1).describe("A single SQL statement (DuckDB dialect).");
50
+ const connectionArg = z
51
+ .string()
52
+ .optional()
53
+ .describe("Name of the configured connection to use (see list_connections); defaults to the current one.");
38
54
  /** Identifier quoting for generated SQL (used only for DDL synthesis). */
39
55
  function quoteIdent(name) {
40
56
  return `"${name.replace(/"/g, '""')}"`;
@@ -68,8 +84,9 @@ async function fetchDdl(connection, ref) {
68
84
  }
69
85
  /** Builds the McpServer with every tool/resource registered against `ctx`. */
70
86
  export function createServer(ctx) {
71
- const { connection, config } = ctx;
72
- const server = new McpServer({ name: PACKAGE_NAME, version: PACKAGE_VERSION }, { instructions: SERVER_INSTRUCTIONS });
87
+ const { registry, config } = ctx;
88
+ const redact = (t) => registry.redact(t);
89
+ const server = new McpServer({ name: PACKAGE_NAME, version: PACKAGE_VERSION }, { instructions: instructions(registry) });
73
90
  /** Wraps a tool body so every failure becomes a redacted isError result. */
74
91
  const tool = (fn) => {
75
92
  return async (args) => {
@@ -77,17 +94,54 @@ export function createServer(ctx) {
77
94
  return await fn(args);
78
95
  }
79
96
  catch (err) {
80
- return errorResult(describeError(err, connection));
97
+ return errorResult(describeError(err, redact));
81
98
  }
82
99
  };
83
100
  };
101
+ /** Resolves the connection for a tool call (throws UnknownConnectionError). */
102
+ const conn = (name) => registry.get(name);
103
+ server.registerTool("list_connections", {
104
+ title: "List connections",
105
+ description: "Lists the configured GizmoSQL connections (name, host, auth method, default catalog/schema) and " +
106
+ "which one is current. Credentials are never returned.",
107
+ inputSchema: {},
108
+ annotations: { readOnlyHint: true, idempotentHint: true },
109
+ }, tool(async () => {
110
+ const rows = registry.summaries();
111
+ const md = toMarkdownTable(["name", "host", "port", "tls", "auth", "default catalog", "default schema", "current"], rows.map((r) => [
112
+ escapeMarkdownCell(r.name),
113
+ escapeMarkdownCell(r.host),
114
+ String(r.port),
115
+ r.tls ? "yes" : "no",
116
+ escapeMarkdownCell(r.auth),
117
+ escapeMarkdownCell(r.default_catalog ?? ""),
118
+ escapeMarkdownCell(r.default_schema ?? ""),
119
+ r.current ? "✓" : "",
120
+ ]));
121
+ return text(md, { connections: rows, current: registry.current() });
122
+ }));
123
+ server.registerTool("use_connection", {
124
+ title: "Switch connection",
125
+ description: "Makes the named connection the default for subsequent tool calls (see list_connections). " +
126
+ "Tools also accept a per-call connection argument.",
127
+ inputSchema: { name: z.string().min(1).describe("Connection name.") },
128
+ annotations: { readOnlyHint: true, idempotentHint: true },
129
+ }, tool(async ({ name }) => {
130
+ const canonical = registry.use(name);
131
+ const c = registry.configFor(canonical);
132
+ return text(`Current connection is now "${canonical}" (${c.host}:${c.port}).`, {
133
+ current: canonical,
134
+ host: c.host,
135
+ port: c.port,
136
+ });
137
+ }));
84
138
  server.registerTool("list_catalogs", {
85
139
  title: "List catalogs",
86
140
  description: "Lists the catalogs (attached databases) visible to the connected GizmoSQL user.",
87
- inputSchema: {},
141
+ inputSchema: { connection: connectionArg },
88
142
  annotations: { readOnlyHint: true, idempotentHint: true },
89
- }, tool(async () => {
90
- const catalogs = await connection.run((c) => c.getCatalogs());
143
+ }, tool(async ({ connection }) => {
144
+ const catalogs = await conn(connection).run((c) => c.getCatalogs());
91
145
  const body = catalogs.length
92
146
  ? catalogs.map((c) => `- ${c}`).join("\n")
93
147
  : "(no catalogs visible)";
@@ -98,10 +152,11 @@ export function createServer(ctx) {
98
152
  description: "Lists schemas, optionally filtered to one catalog.",
99
153
  inputSchema: {
100
154
  catalog: z.string().optional().describe("Catalog name to filter by (exact match)."),
155
+ connection: connectionArg,
101
156
  },
102
157
  annotations: { readOnlyHint: true, idempotentHint: true },
103
- }, tool(async ({ catalog }) => {
104
- const schemas = await connection.run((c) => c.getSchemas(catalog));
158
+ }, tool(async ({ catalog, connection }) => {
159
+ const schemas = await conn(connection).run((c) => c.getSchemas(catalog));
105
160
  const rows = schemas.map((s) => [escapeMarkdownCell(s.catalog), escapeMarkdownCell(s.schema)]);
106
161
  const body = rows.length ? toMarkdownTable(["catalog", "schema"], rows) : "(no schemas found)";
107
162
  return text(body, { schemas });
@@ -114,10 +169,11 @@ export function createServer(ctx) {
114
169
  catalog: z.string().optional().describe("Catalog name (exact match)."),
115
170
  schema: z.string().optional().describe("Schema name (SQL LIKE pattern, e.g. 'main')."),
116
171
  like: z.string().optional().describe("Table-name LIKE pattern, e.g. 'cust%'."),
172
+ connection: connectionArg,
117
173
  },
118
174
  annotations: { readOnlyHint: true, idempotentHint: true },
119
- }, tool(async ({ catalog, schema, like }) => {
120
- const tables = await connection.run((c) => c.getTables(catalog, schema, like));
175
+ }, tool(async ({ catalog, schema, like, connection }) => {
176
+ const tables = await conn(connection).run((c) => c.getTables(catalog, schema, like));
121
177
  const rows = tables.map((t) => [
122
178
  escapeMarkdownCell(t.catalog),
123
179
  escapeMarkdownCell(t.schema),
@@ -138,9 +194,11 @@ export function createServer(ctx) {
138
194
  table: z.string().min(1).describe("Table or view name (exact match)."),
139
195
  schema: z.string().optional().describe("Schema name (exact match)."),
140
196
  catalog: z.string().optional().describe("Catalog name (exact match)."),
197
+ connection: connectionArg,
141
198
  },
142
199
  annotations: { readOnlyHint: true, idempotentHint: true },
143
- }, tool(async ({ table, schema, catalog }) => {
200
+ }, tool(async ({ table, schema, catalog, connection: connectionName }) => {
201
+ const connection = conn(connectionName);
144
202
  const filters = ["table_name = ?"];
145
203
  const params = [table];
146
204
  if (schema !== undefined) {
@@ -216,6 +274,7 @@ export function createServer(ctx) {
216
274
  if (constraintLines.length)
217
275
  parts.push("", "Constraints:", ...constraintLines);
218
276
  return text(parts.join("\n"), {
277
+ connection: connection.config.name,
219
278
  catalog: ref.catalog,
220
279
  schema: ref.schema,
221
280
  table: ref.table,
@@ -232,11 +291,13 @@ export function createServer(ctx) {
232
291
  inputSchema: {
233
292
  catalog: z.string().optional().describe("Catalog (database) name."),
234
293
  schema: z.string().optional().describe("Schema name within the catalog."),
294
+ connection: connectionArg,
235
295
  },
236
296
  annotations: { readOnlyHint: true, idempotentHint: true },
237
- }, tool(async ({ catalog, schema }) => {
297
+ }, tool(async ({ catalog, schema, connection: connectionName }) => {
238
298
  if (!catalog && !schema)
239
299
  return errorResult("Provide a catalog and/or a schema.");
300
+ const connection = conn(connectionName);
240
301
  await connection.useSchema({ catalog, schema });
241
302
  const t = await connection.query("SELECT current_catalog() AS c, current_schema() AS s");
242
303
  const current = { catalog: String(t.getChildAt(0)?.get(0)), schema: String(t.getChildAt(1)?.get(0)) };
@@ -249,7 +310,7 @@ export function createServer(ctx) {
249
310
  `${config.maxRows}); long cells are truncated to ${config.maxCellChars} characters with …. ` +
250
311
  (config.allowWrites
251
312
  ? "Writes are enabled on this server; prefer execute_statement for DML/DDL."
252
- : "This server is read-only: only SELECT/WITH/SHOW/DESCRIBE/SUMMARIZE/EXPLAIN/PRAGMA(read) statements are accepted."),
313
+ : "This server is read-only: only SELECT/WITH/SHOW/DESCRIBE/SUMMARIZE/EXPLAIN/PRAGMA(read)/USE statements are accepted."),
253
314
  inputSchema: {
254
315
  sql: sqlArg,
255
316
  params: paramsSchema.optional().describe(PARAMS_DESCRIPTION),
@@ -259,6 +320,7 @@ export function createServer(ctx) {
259
320
  .min(1)
260
321
  .optional()
261
322
  .describe(`Row cap for this call (1..${config.maxRows}; default ${config.maxRows}).`),
323
+ connection: connectionArg,
262
324
  },
263
325
  outputSchema: {
264
326
  columns: z.array(z.object({ name: z.string(), type: z.string() })),
@@ -266,9 +328,11 @@ export function createServer(ctx) {
266
328
  row_count: z.number(),
267
329
  truncated: z.boolean(),
268
330
  elapsed_ms: z.number(),
331
+ connection: z.string(),
269
332
  },
270
333
  annotations: { readOnlyHint: !config.allowWrites, idempotentHint: !config.allowWrites },
271
- }, tool(async ({ sql, params, max_rows }) => {
334
+ }, tool(async ({ sql, params, max_rows, connection: connectionName }) => {
335
+ const connection = conn(connectionName);
272
336
  const guarded = guardStatement(sql, config.allowWrites);
273
337
  const maxRows = Math.min(max_rows ?? config.maxRows, config.maxRows);
274
338
  const bound = convertParams(params);
@@ -282,7 +346,7 @@ export function createServer(ctx) {
282
346
  }
283
347
  catch (err) {
284
348
  if (guarded.classification.wrappable && !(err instanceof QueryTimeoutError)) {
285
- throw new Error(`${describeError(err, connection)}\n(Note: to enforce max_rows the query was executed as ` +
349
+ throw new Error(`${describeError(err, redact)}\n(Note: to enforce max_rows the query was executed as ` +
286
350
  `SELECT * FROM (<your query>) AS ${WRAPPER_ALIAS} LIMIT ${maxRows + 1}, so line numbers in the ` +
287
351
  "server's message are offset by one.)");
288
352
  }
@@ -304,14 +368,16 @@ export function createServer(ctx) {
304
368
  row_count: formatted.rowCount,
305
369
  truncated,
306
370
  elapsed_ms: elapsedMs,
371
+ connection: connection.config.name,
307
372
  });
308
373
  }));
309
374
  server.registerTool("explain_query", {
310
375
  title: "Explain query",
311
376
  description: "Returns DuckDB's EXPLAIN output (the physical plan) for a SQL statement without executing it.",
312
- inputSchema: { sql: sqlArg },
377
+ inputSchema: { sql: sqlArg, connection: connectionArg },
313
378
  annotations: { readOnlyHint: true, idempotentHint: true },
314
- }, tool(async ({ sql }) => {
379
+ }, tool(async ({ sql, connection: connectionName }) => {
380
+ const connection = conn(connectionName);
315
381
  const guarded = guardStatement(sql, config.allowWrites);
316
382
  const normalized = normalizeStatement(guarded.sql);
317
383
  const explainSql = /^\s*EXPLAIN\b/iu.test(normalized) ? normalized : `EXPLAIN ${normalized}`;
@@ -336,9 +402,11 @@ export function createServer(ctx) {
336
402
  inputSchema: {
337
403
  sql: sqlArg,
338
404
  params: paramsSchema.optional().describe(PARAMS_DESCRIPTION),
405
+ connection: connectionArg,
339
406
  },
340
407
  annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false },
341
- }, tool(async ({ sql, params }) => {
408
+ }, tool(async ({ sql, params, connection: connectionName }) => {
409
+ const connection = conn(connectionName);
342
410
  const guarded = guardStatement(sql, true);
343
411
  const bound = convertParams(params);
344
412
  const started = Date.now();
@@ -348,16 +416,19 @@ export function createServer(ctx) {
348
416
  return text(`Statement executed. Affected rows: ${count} · ${elapsedMs} ms`, {
349
417
  affected_rows: affected,
350
418
  elapsed_ms: elapsedMs,
419
+ connection: connection.config.name,
351
420
  });
352
421
  }));
353
422
  }
354
423
  server.registerTool("server_info", {
355
424
  title: "Server info",
356
- description: "Reports the GizmoSQL and DuckDB versions, the connection (credentials redacted), the " +
357
- "effective limits, and this MCP server's version.",
358
- inputSchema: {},
425
+ description: "Reports the GizmoSQL and DuckDB versions of a connection, its connection URI (credentials " +
426
+ "redacted), the effective limits, every configured connection, and this MCP server's version.",
427
+ inputSchema: { connection: connectionArg },
359
428
  annotations: { readOnlyHint: true, idempotentHint: true },
360
- }, tool(async () => {
429
+ }, tool(async ({ connection: connectionName }) => {
430
+ const connection = conn(connectionName);
431
+ const cfg = connection.config;
361
432
  let gizmosqlVersion = "unknown";
362
433
  let duckdbVersion = "unknown";
363
434
  let user = "unknown";
@@ -384,13 +455,15 @@ export function createServer(ctx) {
384
455
  }
385
456
  const auth = connection.effectiveAuth();
386
457
  const info = {
458
+ connection: cfg.name,
459
+ current_connection: registry.current(),
387
460
  gizmosql_version: gizmosqlVersion,
388
461
  duckdb_version: duckdbVersion,
389
- connection_uri: redactedUri(config, auth.user),
462
+ connection_uri: redactedUri(cfg, auth.user),
390
463
  auth_method: auth.method,
391
464
  user,
392
- tls: !config.plaintext,
393
- tls_skip_verify: config.tlsSkipVerify,
465
+ tls: !cfg.plaintext,
466
+ tls_skip_verify: cfg.tlsSkipVerify,
394
467
  current_catalog: currentCatalog,
395
468
  current_schema: currentSchema,
396
469
  allow_writes: config.allowWrites,
@@ -402,8 +475,15 @@ export function createServer(ctx) {
402
475
  transport: ctx.transport,
403
476
  mcp_server: `${PACKAGE_NAME} ${PACKAGE_VERSION}`,
404
477
  session_warnings: connection.sessionWarnings(),
478
+ connections: registry.summaries(),
405
479
  };
406
- const lines = Object.entries(info).map(([k, v]) => `- ${k}: ${Array.isArray(v) ? (v.length ? v.join("; ") : "none") : v === null ? "(not set)" : String(v)}`);
480
+ const lines = Object.entries(info)
481
+ .filter(([k]) => k !== "connections")
482
+ .map(([k, v]) => `- ${k}: ${Array.isArray(v) ? (v.length ? v.join("; ") : "none") : v === null ? "(not set)" : String(v)}`);
483
+ if (info.connections.length > 1) {
484
+ lines.push("- connections: " +
485
+ info.connections.map((c) => `${c.name} (${c.host}:${c.port})${c.current ? " [current]" : ""}`).join("; "));
486
+ }
407
487
  return text(lines.join("\n"), info);
408
488
  }));
409
489
  if (config.enableSso) {
@@ -420,31 +500,48 @@ export function createServer(ctx) {
420
500
  .max(600)
421
501
  .optional()
422
502
  .describe("How long to wait for the browser login before returning (default 90)."),
503
+ connection: connectionArg,
423
504
  },
424
505
  annotations: { readOnlyHint: false, idempotentHint: true, openWorldHint: true },
425
- }, tool(async ({ wait_seconds }) => {
426
- const outcome = await runSsoLogin(connection, { waitSeconds: wait_seconds ?? 90 });
506
+ }, tool(async ({ wait_seconds, connection: connectionName }) => {
507
+ const outcome = await runSsoLogin(conn(connectionName), { waitSeconds: wait_seconds ?? 90 });
427
508
  return text(outcome.message, { status: outcome.status, auth_url: outcome.authUrl ?? null });
428
509
  }));
429
510
  }
430
- server.registerResource("table_schema", new ResourceTemplate("gizmosql://schema/{catalog}/{schema}/{table}", {
511
+ const multi = registry.names().length > 1;
512
+ server.registerResource("table_schema", new ResourceTemplate("gizmosql://{connection}/schema/{catalog}/{schema}/{table}", {
431
513
  list: async () => {
432
- const tables = await connection.run((c) => c.getTables());
433
- return {
434
- resources: tables.slice(0, 500).map((t) => ({
435
- uri: `gizmosql://schema/${encodeURIComponent(t.catalog)}/${encodeURIComponent(t.schema)}/${encodeURIComponent(t.tableName)}`,
436
- name: `${t.catalog}.${t.schema}.${t.tableName}`,
437
- // Clients (e.g. Claude Desktop's resource picker) display `title`;
438
- // without it they fall back to the template's title for every entry.
439
- title: `${t.catalog}.${t.schema}.${t.tableName}`,
440
- description: `DDL of ${t.tableType.toLowerCase()} ${t.catalog}.${t.schema}.${t.tableName}`,
441
- mimeType: "text/plain",
442
- })),
443
- };
514
+ const resources = [];
515
+ for (const connection of registry.all()) {
516
+ if (resources.length >= 500)
517
+ break;
518
+ let tables;
519
+ try {
520
+ tables = await connection.run((c) => c.getTables());
521
+ }
522
+ catch {
523
+ continue; // an unreachable server must not hide the others
524
+ }
525
+ for (const t of tables) {
526
+ if (resources.length >= 500)
527
+ break;
528
+ const qualified = `${t.catalog}.${t.schema}.${t.tableName}`;
529
+ const label = multi ? `${connection.config.name}: ${qualified}` : qualified;
530
+ resources.push({
531
+ uri: `gizmosql://${encodeURIComponent(connection.config.name)}/schema/${encodeURIComponent(t.catalog)}/${encodeURIComponent(t.schema)}/${encodeURIComponent(t.tableName)}`,
532
+ name: label,
533
+ // Clients (e.g. Claude Desktop's resource picker) display `title`.
534
+ title: label,
535
+ description: `DDL of ${t.tableType.toLowerCase()} ${qualified} on connection ${connection.config.name}`,
536
+ mimeType: "text/plain",
537
+ });
538
+ }
539
+ }
540
+ return { resources };
444
541
  },
445
542
  }), {
446
543
  title: "Table DDL",
447
- description: "CREATE statement (DDL) for a table or view: gizmosql://schema/{catalog}/{schema}/{table}",
544
+ description: "CREATE statement (DDL) for a table or view: gizmosql://{connection}/schema/{catalog}/{schema}/{table}",
448
545
  mimeType: "text/plain",
449
546
  }, async (uri, variables) => {
450
547
  const pick = (v) => decodeURIComponent(Array.isArray(v) ? v[0] : (v ?? ""));
@@ -454,13 +551,14 @@ export function createServer(ctx) {
454
551
  table: pick(variables.table),
455
552
  };
456
553
  try {
554
+ const connection = registry.get(pick(variables.connection));
457
555
  const ddl = await fetchDdl(connection, ref);
458
556
  const body = ddl ?? `-- ${ref.catalog}.${ref.schema}.${ref.table} not found`;
459
557
  return { contents: [{ uri: uri.href, mimeType: "text/plain", text: truncateText(body, 100000) }] };
460
558
  }
461
559
  catch (err) {
462
560
  return {
463
- contents: [{ uri: uri.href, mimeType: "text/plain", text: `-- error: ${describeError(err, connection)}` }],
561
+ contents: [{ uri: uri.href, mimeType: "text/plain", text: `-- error: ${describeError(err, redact)}` }],
464
562
  };
465
563
  }
466
564
  });
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAEtF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAkB,MAAM,iBAAiB,CAAC;AAClG,OAAO,EACL,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,eAAe,EACf,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9F,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAQ7D,MAAM,mBAAmB,GACvB,oGAAoG;IACpG,sGAAsG;IACtG,oGAAoG;IACpG,uGAAuG;IACvG,kGAAkG;IAClG,iGAAiG;IACjG,kGAAkG,CAAC;AAErG,SAAS,IAAI,CAAC,IAAY,EAAE,UAAoC;IAC9D,MAAM,MAAM,GAAmB,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAC3E,IAAI,UAAU;QAAE,MAAM,CAAC,iBAAiB,GAAG,UAAU,CAAC;IACtD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;AACnF,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,aAAa,CAAC,GAAY,EAAE,UAA2B;IACrE,IAAI,GAAG,YAAY,aAAa,IAAI,GAAG,YAAY,cAAc,IAAI,GAAG,YAAY,iBAAiB,EAAE,CAAC;QACtG,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7D,uEAAuE;IACvE,mEAAmE;IACnE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,wCAAwC,EAAE,EAAE,CAAC,CAAC;IAC1E,OAAO,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC,CAAC;AAEtF,0EAA0E;AAC1E,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AACzC,CAAC;AAQD,8FAA8F;AAC9F,KAAK,UAAU,QAAQ,CAAC,UAA2B,EAAE,GAAa;IAChE,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,KAAK,CACvC,gGAAgG,EAChG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CACrC,CAAC;IACF,IAAI,UAAU,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE;YAAE,OAAO,GAAG,CAAC;IACxD,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,KAAK,CACtC,8FAA8F,EAC9F,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CACrC,CAAC;IACF,IAAI,SAAS,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE;YAAE,OAAO,GAAG,CAAC;IACxD,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,CACjC,6EAA6E;QAC3E,2FAA2F,EAC7F,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CACrC,CAAC;IACF,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,gBAAgB,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAClI,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,GAAkB;IAC7C,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,EAChD,EAAE,YAAY,EAAE,mBAAmB,EAAE,CACtC,CAAC;IAEF,4EAA4E;IAC5E,MAAM,IAAI,GAAG,CAAI,EAAwC,EAAE,EAAE;QAC3D,OAAO,KAAK,EAAE,IAAO,EAA2B,EAAE;YAChD,IAAI,CAAC;gBACH,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,WAAW,CAAC,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;YACrD,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,iFAAiF;QAC9F,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM;YAC1B,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1C,CAAC,CAAC,uBAAuB,CAAC;QAC5B,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,oDAAoD;QACjE,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;SACpF;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACzB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/F,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;QAC/F,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACjC,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,6FAA6F;YAC7F,qCAAqC;QACvC,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YACtE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;YACtF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;SAC/E;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;QACvC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAC/E,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC7B,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7B,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC;YAC5B,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/B,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC;SAChC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM;YACtB,CAAC,CAAC,eAAe,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;YAC/D,CAAC,CAAC,qBAAqB,CAAC;QAC1B,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,qFAAqF;YACrF,wFAAwF;YACxF,oBAAoB;QACtB,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YACtE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YACpE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;SACvE;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QACxC,MAAM,OAAO,GAAa,CAAC,gBAAgB,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAkB,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CACpC,sGAAsG;YACpG,yCAAyC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,yDAAyD,EACzH,MAAM,CACP,CAAC;QACF,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,WAAW,CAChB,UAAU,KAAK,cAAc,MAAM,CAAC,CAAC,CAAC,eAAe,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,cAAc,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI;gBAChH,yCAAyC,CAC5C,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,WAAW,CAChB,UAAU,KAAK,mCAAmC,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;gBAC7E,4CAA4C,CAC/C,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAa;YACpB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9C,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7C,KAAK;SACN,CAAC;QAEF,MAAM,OAAO,GAAe,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAmC,EAAE,CAAC;QACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC;YACjE,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC;gBACX,kBAAkB,CAAC,IAAI,CAAC;gBACxB,kBAAkB,CAAC,IAAI,CAAC;gBACxB,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;gBACvB,kBAAkB,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aACzE,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,CACjC,mEAAmE;YACjE,iEAAiE;YACjE,oDAAoD;YACpD,+DAA+D,EACjE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CACzE,CAAC;QACF,IAAI,IAAI,GAAG,OAAO,CAAC;QACnB,IAAI,aAAa,GAAkB,IAAI,CAAC;QACxC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACrB,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;gBAAE,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,KAAK,CACxC,6FAA6F;YAC3F,iEAAiE;YACjE,2EAA2E;YAC3E,2BAA2B,EAC7B,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CACrC,CAAC;QACF,MAAM,cAAc,GAA4D,EAAE,CAAC;QACnF,MAAM,eAAe,GAAa,EAAE,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC9F,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9D,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1D,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,OAAO,IAAI,GAAG;YACtE,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,sBAAsB,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxE,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAChG,IAAI,eAAe,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,EAAE,GAAG,eAAe,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,IAAI;YACJ,cAAc,EAAE,aAAa;YAC7B,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,cAAc;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,4BAA4B;QACnC,WAAW,EACT,2FAA2F;YAC3F,0EAA0E;QAC5E,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YACnE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;SAC1E;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QACjC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM;YAAE,OAAO,WAAW,CAAC,oCAAoC,CAAC,CAAC;QAClF,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACzF,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtG,OAAO,IAAI,CAAC,kBAAkB,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAChG,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EACT,8FAA8F;YAC9F,iEAAiE,MAAM,CAAC,OAAO,iBAAiB;YAChG,GAAG,MAAM,CAAC,OAAO,kCAAkC,MAAM,CAAC,YAAY,sBAAsB;YAC5F,CAAC,MAAM,CAAC,WAAW;gBACjB,CAAC,CAAC,0EAA0E;gBAC5E,CAAC,CAAC,kHAAkH,CAAC;QACzH,WAAW,EAAE;YACX,GAAG,EAAE,MAAM;YACX,MAAM,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAC5D,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,EAAE;iBACV,QAAQ,CAAC,6BAA6B,MAAM,CAAC,OAAO,aAAa,MAAM,CAAC,OAAO,IAAI,CAAC;SACxF;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAClE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACnC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACrB,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;YACtB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;SACvB;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE;KACxF,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QACvC,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,SAAS;YACnD,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,CAAC,CAAC;YACzC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,OAAO,CAAC,cAAc,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,YAAY,iBAAiB,CAAC,EAAE,CAAC;gBAC5E,MAAM,IAAI,KAAK,CACb,GAAG,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,yDAAyD;oBACxF,mCAAmC,aAAa,UAAU,OAAO,GAAG,CAAC,2BAA2B;oBAChG,sCAAsC,CACzC,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;QACvC,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAC5F,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC;QAC1D,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,SAAS;YACT,OAAO;YACP,SAAS;SACV,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,gBAAgB,MAAM,EAAE,CAAC;QACtG,OAAO,IAAI,CAAC,IAAI,EAAE;YAChB,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,SAAS,EAAE,SAAS,CAAC,QAAQ;YAC7B,SAAS;YACT,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,+FAA+F;QACjG,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;QAC5B,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,UAAU,EAAE,CAAC;QAC7F,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC;QAChF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACpF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC;gBACvB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAChD,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrF,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,aAAa,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,oBAAoB,CAAC,CAAC;IAC7D,CAAC,CAAC,CACH,CAAC;IAEF,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;YACE,KAAK,EAAE,mBAAmB;YAC1B,WAAW,EACT,gGAAgG;gBAChG,8EAA8E;YAChF,WAAW,EAAE;gBACX,GAAG,EAAE,MAAM;gBACX,MAAM,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;aAC7D;YACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE;SACnF,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;YAC7B,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;YACvC,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC,sCAAsC,KAAK,MAAM,SAAS,KAAK,EAAE;gBAC3E,aAAa,EAAE,QAAQ;gBACvB,UAAU,EAAE,SAAS;aACtB,CAAC,CAAC;QACL,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,uFAAuF;YACvF,kDAAkD;QACpD,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,IAAI,eAAe,GAAG,SAAS,CAAC;QAChC,IAAI,aAAa,GAAG,SAAS,CAAC;QAC9B,IAAI,IAAI,GAAG,SAAS,CAAC;QACrB,IAAI,cAAc,GAAG,SAAS,CAAC;QAC/B,IAAI,aAAa,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,UAAU,CAAC,KAAK,CAC9B,uHAAuH,CACxH,CAAC;YACF,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,0EAA0E;YAC1E,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/D,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;gBACjD,eAAe,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,UAAU,yBAAyB,CAAC;YAC1E,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG;YACX,gBAAgB,EAAE,eAAe;YACjC,cAAc,EAAE,aAAa;YAC7B,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;YAC9C,WAAW,EAAE,IAAI,CAAC,MAAM;YACxB,IAAI;YACJ,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS;YACtB,eAAe,EAAE,MAAM,CAAC,aAAa;YACrC,eAAe,EAAE,cAAc;YAC/B,cAAc,EAAE,aAAa;YAC7B,YAAY,EAAE,MAAM,CAAC,WAAW;YAChC,QAAQ,EAAE,MAAM,CAAC,OAAO;YACxB,cAAc,EAAE,MAAM,CAAC,YAAY;YACnC,qBAAqB,EAAE,MAAM,CAAC,mBAAmB;YACjD,eAAe,EAAE,UAAU,CAAC,iBAAiB,EAAE,CAAC,OAAO,IAAI,IAAI;YAC/D,cAAc,EAAE,UAAU,CAAC,iBAAiB,EAAE,CAAC,MAAM,IAAI,IAAI;YAC7D,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,UAAU,EAAE,GAAG,YAAY,IAAI,eAAe,EAAE;YAChD,gBAAgB,EAAE,UAAU,CAAC,eAAe,EAAE;SAC/C,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CACpC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACtH,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CACH,CAAC;IAEF,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;YACE,KAAK,EAAE,kBAAkB;YACzB,WAAW,EACT,2FAA2F;gBAC3F,yFAAyF;gBACzF,2FAA2F;YAC7F,WAAW,EAAE;gBACX,YAAY,EAAE,CAAC;qBACZ,MAAM,EAAE;qBACR,GAAG,EAAE;qBACL,GAAG,CAAC,CAAC,CAAC;qBACN,GAAG,CAAC,GAAG,CAAC;qBACR,QAAQ,EAAE;qBACV,QAAQ,CAAC,uEAAuE,CAAC;aACrF;YACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;SAChF,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;YAC9B,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,YAAY,IAAI,EAAE,EAAE,CAAC,CAAC;YACnF,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9F,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,gBAAgB,CACrB,cAAc,EACd,IAAI,gBAAgB,CAAC,8CAA8C,EAAE;QACnE,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YAC1D,OAAO;gBACL,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC1C,GAAG,EAAE,qBAAqB,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;oBAC5H,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,EAAE;oBAC/C,mEAAmE;oBACnE,qEAAqE;oBACrE,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,EAAE;oBAChD,WAAW,EAAE,UAAU,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,EAAE;oBAC1F,QAAQ,EAAE,YAAY;iBACvB,CAAC,CAAC;aACJ,CAAC;QACJ,CAAC;KACF,CAAC,EACF;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,0FAA0F;QACvG,QAAQ,EAAE,YAAY;KACvB,EACD,KAAK,EAAE,GAAG,EAAE,SAAS,EAA+B,EAAE;QACpD,MAAM,IAAI,GAAG,CAAC,CAAgC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3G,MAAM,GAAG,GAAa;YACpB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAChC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAC9B,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;SAC7B,CAAC;QACF,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,GAAG,IAAI,MAAM,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,YAAY,CAAC;YAC7E,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;QACrG,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC;aAC3G,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAEtF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAkB,MAAM,iBAAiB,CAAC;AAClG,OAAO,EACL,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,eAAe,EACf,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAQ7D,SAAS,YAAY,CAAC,QAA4B;IAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1C,OAAO,CACL,oGAAoG;QACpG,sGAAsG;QACtG,oGAAoG;QACpG,uGAAuG;QACvG,kGAAkG;QAClG,iGAAiG;QACjG,kGAAkG;QAClG,CAAC,KAAK;YACJ,CAAC,CAAC,6CAA6C,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,OAAO,EAAE,KAAK;gBAC7G,oGAAoG;gBACpG,8BAA8B;YAChC,CAAC,CAAC,EAAE,CAAC,CACR,CAAC;AACJ,CAAC;AAED,SAAS,IAAI,CAAC,IAAY,EAAE,UAAoC;IAC9D,MAAM,MAAM,GAAmB,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAC3E,IAAI,UAAU;QAAE,MAAM,CAAC,iBAAiB,GAAG,UAAU,CAAC;IACtD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;AACnF,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,aAAa,CAAC,GAAY,EAAE,MAAgC;IAC1E,IACE,GAAG,YAAY,aAAa;QAC5B,GAAG,YAAY,cAAc;QAC7B,GAAG,YAAY,iBAAiB;QAChC,GAAG,YAAY,sBAAsB,EACrC,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7D,uEAAuE;IACvE,mEAAmE;IACnE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,wCAAwC,EAAE,EAAE,CAAC,CAAC;IAC1E,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC,CAAC;AACtF,MAAM,aAAa,GAAG,CAAC;KACpB,MAAM,EAAE;KACR,QAAQ,EAAE;KACV,QAAQ,CAAC,+FAA+F,CAAC,CAAC;AAE7G,0EAA0E;AAC1E,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AACzC,CAAC;AAQD,8FAA8F;AAC9F,KAAK,UAAU,QAAQ,CAAC,UAA2B,EAAE,GAAa;IAChE,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,KAAK,CACvC,gGAAgG,EAChG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CACrC,CAAC;IACF,IAAI,UAAU,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE;YAAE,OAAO,GAAG,CAAC;IACxD,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,KAAK,CACtC,8FAA8F,EAC9F,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CACrC,CAAC;IACF,IAAI,SAAS,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE;YAAE,OAAO,GAAG,CAAC;IACxD,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,CACjC,6EAA6E;QAC3E,2FAA2F,EAC7F,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CACrC,CAAC;IACF,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,gBAAgB,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAClI,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,GAAkB;IAC7C,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IACjC,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,EAChD,EAAE,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,CACzC,CAAC;IAEF,4EAA4E;IAC5E,MAAM,IAAI,GAAG,CAAI,EAAwC,EAAE,EAAE;QAC3D,OAAO,KAAK,EAAE,IAAO,EAA2B,EAAE;YAChD,IAAI,CAAC;gBACH,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,WAAW,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;YACjD,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,+EAA+E;IAC/E,MAAM,IAAI,GAAG,CAAC,IAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAEnD,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,kGAAkG;YAClG,uDAAuD;QACzD,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;QAClC,MAAM,EAAE,GAAG,eAAe,CACxB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,SAAS,CAAC,EACvF,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACd,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1B,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1B,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YACd,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;YACpB,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1B,kBAAkB,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC;YAC3C,kBAAkB,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC;YAC1C,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;SACrB,CAAC,CACH,CAAC;QACF,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,2FAA2F;YAC3F,mDAAmD;QACrD,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;QACrE,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACtB,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,8BAA8B,SAAS,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE;YAC7E,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,iFAAiF;QAC9F,WAAW,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE;QAC1C,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QAC5B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM;YAC1B,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1C,CAAC,CAAC,uBAAuB,CAAC;QAC5B,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,oDAAoD;QACjE,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YACnF,UAAU,EAAE,aAAa;SAC1B;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QACzE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/F,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;QAC/F,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACjC,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,6FAA6F;YAC7F,qCAAqC;QACvC,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YACtE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;YACtF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;YAC9E,UAAU,EAAE,aAAa;SAC1B;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;QACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QACrF,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC7B,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7B,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC;YAC5B,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/B,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC;SAChC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM;YACtB,CAAC,CAAC,eAAe,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;YAC/D,CAAC,CAAC,qBAAqB,CAAC;QAC1B,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,qFAAqF;YACrF,wFAAwF;YACxF,oBAAoB;QACtB,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YACtE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YACpE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YACtE,UAAU,EAAE,aAAa;SAC1B;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE;QACpE,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;QACxC,MAAM,OAAO,GAAa,CAAC,gBAAgB,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAkB,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CACpC,sGAAsG;YACpG,yCAAyC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,yDAAyD,EACzH,MAAM,CACP,CAAC;QACF,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,WAAW,CAChB,UAAU,KAAK,cAAc,MAAM,CAAC,CAAC,CAAC,eAAe,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,cAAc,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI;gBAChH,yCAAyC,CAC5C,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,WAAW,CAChB,UAAU,KAAK,mCAAmC,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;gBAC7E,4CAA4C,CAC/C,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAa;YACpB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9C,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7C,KAAK;SACN,CAAC;QAEF,MAAM,OAAO,GAAe,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAmC,EAAE,CAAC;QACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC;YACjE,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC;gBACX,kBAAkB,CAAC,IAAI,CAAC;gBACxB,kBAAkB,CAAC,IAAI,CAAC;gBACxB,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;gBACvB,kBAAkB,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aACzE,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,CACjC,mEAAmE;YACjE,iEAAiE;YACjE,oDAAoD;YACpD,+DAA+D,EACjE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CACzE,CAAC;QACF,IAAI,IAAI,GAAG,OAAO,CAAC;QACnB,IAAI,aAAa,GAAkB,IAAI,CAAC;QACxC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACrB,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;gBAAE,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,KAAK,CACxC,6FAA6F;YAC3F,iEAAiE;YACjE,2EAA2E;YAC3E,2BAA2B,EAC7B,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CACrC,CAAC;QACF,MAAM,cAAc,GAA4D,EAAE,CAAC;QACnF,MAAM,eAAe,GAAa,EAAE,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC9F,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9D,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1D,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,OAAO,IAAI,GAAG;YACtE,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,sBAAsB,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxE,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAChG,IAAI,eAAe,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,EAAE,GAAG,eAAe,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC5B,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;YAClC,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,IAAI;YACJ,cAAc,EAAE,aAAa;YAC7B,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,cAAc;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,4BAA4B;QACnC,WAAW,EACT,2FAA2F;YAC3F,0EAA0E;QAC5E,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YACnE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YACzE,UAAU,EAAE,aAAa;SAC1B;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE;QAC7D,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM;YAAE,OAAO,WAAW,CAAC,oCAAoC,CAAC,CAAC;QAClF,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;QACxC,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACzF,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtG,OAAO,IAAI,CAAC,kBAAkB,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAChG,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EACT,8FAA8F;YAC9F,iEAAiE,MAAM,CAAC,OAAO,iBAAiB;YAChG,GAAG,MAAM,CAAC,OAAO,kCAAkC,MAAM,CAAC,YAAY,sBAAsB;YAC5F,CAAC,MAAM,CAAC,WAAW;gBACjB,CAAC,CAAC,0EAA0E;gBAC5E,CAAC,CAAC,sHAAsH,CAAC;QAC7H,WAAW,EAAE;YACX,GAAG,EAAE,MAAM;YACX,MAAM,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAC5D,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,EAAE;iBACV,QAAQ,CAAC,6BAA6B,MAAM,CAAC,OAAO,aAAa,MAAM,CAAC,OAAO,IAAI,CAAC;YACvF,UAAU,EAAE,aAAa;SAC1B;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAClE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACnC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACrB,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;YACtB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;YACtB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;SACvB;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE;KACxF,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE;QACnE,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,SAAS;YACnD,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,CAAC,CAAC;YACzC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,OAAO,CAAC,cAAc,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,YAAY,iBAAiB,CAAC,EAAE,CAAC;gBAC5E,MAAM,IAAI,KAAK,CACb,GAAG,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,yDAAyD;oBACpF,mCAAmC,aAAa,UAAU,OAAO,GAAG,CAAC,2BAA2B;oBAChG,sCAAsC,CACzC,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;QACvC,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAC5F,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC;QAC1D,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,SAAS;YACT,OAAO;YACP,SAAS;SACV,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,gBAAgB,MAAM,EAAE,CAAC;QACtG,OAAO,IAAI,CAAC,IAAI,EAAE;YAChB,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,SAAS,EAAE,SAAS,CAAC,QAAQ;YAC7B,SAAS;YACT,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;SACnC,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,+FAA+F;QACjG,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE;QACvD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,UAAU,EAAE,CAAC;QAC7F,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC;QAChF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACpF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC;gBACvB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAChD,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrF,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,aAAa,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,oBAAoB,CAAC,CAAC;IAC7D,CAAC,CAAC,CACH,CAAC;IAEF,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;YACE,KAAK,EAAE,mBAAmB;YAC1B,WAAW,EACT,gGAAgG;gBAChG,8EAA8E;YAChF,WAAW,EAAE;gBACX,GAAG,EAAE,MAAM;gBACX,MAAM,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;gBAC5D,UAAU,EAAE,aAAa;aAC1B;YACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE;SACnF,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE;YACzD,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;YACvC,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC,sCAAsC,KAAK,MAAM,SAAS,KAAK,EAAE;gBAC3E,aAAa,EAAE,QAAQ;gBACvB,UAAU,EAAE,SAAS;gBACrB,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;aACnC,CAAC,CAAC;QACL,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,4FAA4F;YAC5F,8FAA8F;QAChG,WAAW,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE;QAC1C,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;KAC1D,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC;QAC9B,IAAI,eAAe,GAAG,SAAS,CAAC;QAChC,IAAI,aAAa,GAAG,SAAS,CAAC;QAC9B,IAAI,IAAI,GAAG,SAAS,CAAC;QACrB,IAAI,cAAc,GAAG,SAAS,CAAC;QAC/B,IAAI,aAAa,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,UAAU,CAAC,KAAK,CAC9B,uHAAuH,CACxH,CAAC;YACF,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,0EAA0E;YAC1E,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/D,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;gBACjD,eAAe,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,UAAU,yBAAyB,CAAC;YAC1E,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG;YACX,UAAU,EAAE,GAAG,CAAC,IAAI;YACpB,kBAAkB,EAAE,QAAQ,CAAC,OAAO,EAAE;YACtC,gBAAgB,EAAE,eAAe;YACjC,cAAc,EAAE,aAAa;YAC7B,cAAc,EAAE,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;YAC3C,WAAW,EAAE,IAAI,CAAC,MAAM;YACxB,IAAI;YACJ,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS;YACnB,eAAe,EAAE,GAAG,CAAC,aAAa;YAClC,eAAe,EAAE,cAAc;YAC/B,cAAc,EAAE,aAAa;YAC7B,YAAY,EAAE,MAAM,CAAC,WAAW;YAChC,QAAQ,EAAE,MAAM,CAAC,OAAO;YACxB,cAAc,EAAE,MAAM,CAAC,YAAY;YACnC,qBAAqB,EAAE,MAAM,CAAC,mBAAmB;YACjD,eAAe,EAAE,UAAU,CAAC,iBAAiB,EAAE,CAAC,OAAO,IAAI,IAAI;YAC/D,cAAc,EAAE,UAAU,CAAC,iBAAiB,EAAE,CAAC,MAAM,IAAI,IAAI;YAC7D,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,UAAU,EAAE,GAAG,YAAY,IAAI,eAAe,EAAE;YAChD,gBAAgB,EAAE,UAAU,CAAC,eAAe,EAAE;YAC9C,WAAW,EAAE,QAAQ,CAAC,SAAS,EAAE;SAClC,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;aAC/B,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,aAAa,CAAC;aACpC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9H,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CACR,iBAAiB;gBACf,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC5G,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CACH,CAAC;IAEF,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;YACE,KAAK,EAAE,kBAAkB;YACzB,WAAW,EACT,2FAA2F;gBAC3F,yFAAyF;gBACzF,2FAA2F;YAC7F,WAAW,EAAE;gBACX,YAAY,EAAE,CAAC;qBACZ,MAAM,EAAE;qBACR,GAAG,EAAE;qBACL,GAAG,CAAC,CAAC,CAAC;qBACN,GAAG,CAAC,GAAG,CAAC;qBACR,QAAQ,EAAE;qBACV,QAAQ,CAAC,uEAAuE,CAAC;gBACpF,UAAU,EAAE,aAAa;aAC1B;YACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;SAChF,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE;YAC1D,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,WAAW,EAAE,YAAY,IAAI,EAAE,EAAE,CAAC,CAAC;YAC7F,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9F,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1C,MAAM,CAAC,gBAAgB,CACrB,cAAc,EACd,IAAI,gBAAgB,CAAC,2DAA2D,EAAE;QAChF,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,SAAS,GAA+F,EAAE,CAAC;YACjH,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC;gBACxC,IAAI,SAAS,CAAC,MAAM,IAAI,GAAG;oBAAE,MAAM;gBACnC,IAAI,MAAM,CAAC;gBACX,IAAI,CAAC;oBACH,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;gBACtD,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS,CAAC,iDAAiD;gBAC7D,CAAC;gBACD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;oBACvB,IAAI,SAAS,CAAC,MAAM,IAAI,GAAG;wBAAE,MAAM;oBACnC,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;oBAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;oBAC5E,SAAS,CAAC,IAAI,CAAC;wBACb,GAAG,EAAE,cAAc,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;wBAC1K,IAAI,EAAE,KAAK;wBACX,mEAAmE;wBACnE,KAAK,EAAE,KAAK;wBACZ,WAAW,EAAE,UAAU,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,SAAS,kBAAkB,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE;wBACvG,QAAQ,EAAE,YAAY;qBACvB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,CAAC;KACF,CAAC,EACF;QACE,KAAK,EAAE,WAAW;QAClB,WAAW,EACT,uGAAuG;QACzG,QAAQ,EAAE,YAAY;KACvB,EACD,KAAK,EAAE,GAAG,EAAE,SAAS,EAA+B,EAAE;QACpD,MAAM,IAAI,GAAG,CAAC,CAAgC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3G,MAAM,GAAG,GAAa;YACpB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAChC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAC9B,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;SAC7B,CAAC;QACF,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;YAC5D,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,GAAG,IAAI,MAAM,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,YAAY,CAAC;YAC7E,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;QACrG,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;aACvG,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import * as http from "node:http";
2
- import { type McpConfig } from "./connection.js";
2
+ import type { McpConfig } from "./connection.js";
3
3
  /** Runs the server on stdio (Claude Desktop / `claude mcp add`). */
4
4
  export declare function startStdio(config: McpConfig): Promise<void>;
5
5
  export interface HttpOptions {
@@ -3,11 +3,19 @@ import { timingSafeEqual } from "node:crypto";
3
3
  import * as http from "node:http";
4
4
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
5
  import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
6
- import { GizmoConnection } from "./connection.js";
6
+ import { ConnectionRegistry } from "./registry.js";
7
7
  import { createServer } from "./server.js";
8
8
  import { PACKAGE_NAME, PACKAGE_VERSION } from "./version.js";
9
9
  const log = (message) => console.error(message);
10
- function installShutdown(connection, extra) {
10
+ /** "host:port" for one connection, or "name=host:port, ..." for several. */
11
+ function describeTargets(config) {
12
+ if (config.connections.length === 1) {
13
+ const c = config.connections[0];
14
+ return `${c.host}:${c.port}`;
15
+ }
16
+ return config.connections.map((c) => `${c.name}=${c.host}:${c.port}`).join(", ");
17
+ }
18
+ function installShutdown(registry, extra) {
11
19
  let closing = false;
12
20
  const shutdown = async () => {
13
21
  if (closing)
@@ -15,7 +23,7 @@ function installShutdown(connection, extra) {
15
23
  closing = true;
16
24
  try {
17
25
  await extra?.();
18
- await connection.close();
26
+ await registry.close();
19
27
  }
20
28
  finally {
21
29
  process.exit(0);
@@ -26,16 +34,16 @@ function installShutdown(connection, extra) {
26
34
  }
27
35
  /** Runs the server on stdio (Claude Desktop / `claude mcp add`). */
28
36
  export async function startStdio(config) {
29
- const connection = new GizmoConnection(config, log);
30
- const server = createServer({ connection, config, transport: "stdio" });
37
+ const registry = new ConnectionRegistry(config, log);
38
+ const server = createServer({ registry, config, transport: "stdio" });
31
39
  const transport = new StdioServerTransport();
32
- installShutdown(connection, () => server.close());
40
+ installShutdown(registry, () => server.close());
33
41
  // When the client closes stdin the transport closes; exit cleanly.
34
42
  transport.onclose = () => {
35
- void connection.close().finally(() => process.exit(0));
43
+ void registry.close().finally(() => process.exit(0));
36
44
  };
37
45
  await server.connect(transport);
38
- log(`[gizmosql-mcp] ${PACKAGE_NAME} ${PACKAGE_VERSION} ready on stdio (${config.host}:${config.port}, writes ${config.allowWrites ? "enabled" : "disabled"})`);
46
+ log(`[gizmosql-mcp] ${PACKAGE_NAME} ${PACKAGE_VERSION} ready on stdio (${describeTargets(config)}, writes ${config.allowWrites ? "enabled" : "disabled"})`);
39
47
  }
40
48
  function bearerMatches(header, expected) {
41
49
  if (!header)
@@ -57,7 +65,7 @@ function bearerMatches(header, expected) {
57
65
  * replace `authorize()` with an OAuth token verifier.
58
66
  */
59
67
  export async function startHttp(config, options) {
60
- const connection = new GizmoConnection(config, log);
68
+ const registry = new ConnectionRegistry(config, log);
61
69
  const bearer = config.mcpBearerToken;
62
70
  const authorize = (req) => {
63
71
  if (!bearer)
@@ -86,7 +94,7 @@ export async function startHttp(config, options) {
86
94
  res.end();
87
95
  return;
88
96
  }
89
- const server = createServer({ connection, config, transport: "http" });
97
+ const server = createServer({ registry, config, transport: "http" });
90
98
  const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined });
91
99
  res.on("close", () => {
92
100
  void transport.close();
@@ -97,14 +105,14 @@ export async function startHttp(config, options) {
97
105
  await transport.handleRequest(req, res);
98
106
  }
99
107
  catch (err) {
100
- log(`[gizmosql-mcp] request error: ${connection.redact(err instanceof Error ? err.message : String(err))}`);
108
+ log(`[gizmosql-mcp] request error: ${registry.redact(err instanceof Error ? err.message : String(err))}`);
101
109
  if (!res.headersSent) {
102
110
  res.writeHead(500, { "content-type": "application/json" });
103
111
  res.end(JSON.stringify({ error: "internal error" }));
104
112
  }
105
113
  }
106
114
  });
107
- installShutdown(connection, () => new Promise((resolve) => httpServer.close(() => resolve())));
115
+ installShutdown(registry, () => new Promise((resolve) => httpServer.close(() => resolve())));
108
116
  await new Promise((resolve, reject) => {
109
117
  httpServer.once("error", reject);
110
118
  httpServer.listen(options.port, options.host, () => resolve());
@@ -112,7 +120,7 @@ export async function startHttp(config, options) {
112
120
  const addr = httpServer.address();
113
121
  const shown = typeof addr === "object" && addr ? `${addr.address}:${addr.port}` : `${options.host}:${options.port}`;
114
122
  log(`[gizmosql-mcp] ${PACKAGE_NAME} ${PACKAGE_VERSION} listening on http://${shown}/mcp ` +
115
- `(${config.host}:${config.port}, writes ${config.allowWrites ? "enabled" : "disabled"}, ` +
123
+ `(${describeTargets(config)}, writes ${config.allowWrites ? "enabled" : "disabled"}, ` +
116
124
  `auth ${bearer ? "bearer" : "none"})`);
117
125
  return httpServer;
118
126
  }