@jpkme/diff-review 0.1.13 → 0.1.14
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/bin/diff-review.mjs +72 -53
- package/lib/prompt.mjs +8 -6
- package/package.json +1 -1
- package/web/build/client/_app/immutable/assets/2.C4whE4xz.css +1 -0
- package/web/build/client/_app/immutable/assets/2.C4whE4xz.css.br +0 -0
- package/web/build/client/_app/immutable/assets/2.C4whE4xz.css.gz +0 -0
- package/web/build/client/_app/immutable/assets/storage.C8XGESwn.css +1 -0
- package/web/build/client/_app/immutable/assets/storage.C8XGESwn.css.br +0 -0
- package/web/build/client/_app/immutable/assets/storage.C8XGESwn.css.gz +0 -0
- package/web/build/client/_app/immutable/chunks/C0hrdiUt.js +2 -0
- package/web/build/client/_app/immutable/chunks/C0hrdiUt.js.br +0 -0
- package/web/build/client/_app/immutable/chunks/C0hrdiUt.js.gz +0 -0
- package/web/build/client/_app/immutable/chunks/{BXUWMim4.js → CpeIO6nz.js} +6 -9
- package/web/build/client/_app/immutable/chunks/CpeIO6nz.js.br +0 -0
- package/web/build/client/_app/immutable/chunks/CpeIO6nz.js.gz +0 -0
- package/web/build/client/_app/immutable/chunks/{Bu1mm6Oz.js → FOc6rgIW.js} +1 -1
- package/web/build/client/_app/immutable/chunks/FOc6rgIW.js.br +2 -0
- package/web/build/client/_app/immutable/chunks/FOc6rgIW.js.gz +0 -0
- package/web/build/client/_app/immutable/entry/{app.CTgiuiU1.js → app.DcAtSJ3n.js} +2 -2
- package/web/build/client/_app/immutable/entry/app.DcAtSJ3n.js.br +0 -0
- package/web/build/client/_app/immutable/entry/app.DcAtSJ3n.js.gz +0 -0
- package/web/build/client/_app/immutable/entry/start.CO5l0Zbx.js +1 -0
- package/web/build/client/_app/immutable/entry/start.CO5l0Zbx.js.br +0 -0
- package/web/build/client/_app/immutable/entry/start.CO5l0Zbx.js.gz +0 -0
- package/web/build/client/_app/immutable/nodes/{1.0PQZpSbJ.js → 1.E-Hs7ura.js} +1 -1
- package/web/build/client/_app/immutable/nodes/1.E-Hs7ura.js.br +4 -0
- package/web/build/client/_app/immutable/nodes/1.E-Hs7ura.js.gz +0 -0
- package/web/build/client/_app/immutable/nodes/2.s1_irV1Q.js +10 -0
- package/web/build/client/_app/immutable/nodes/2.s1_irV1Q.js.br +0 -0
- package/web/build/client/_app/immutable/nodes/2.s1_irV1Q.js.gz +0 -0
- package/web/build/client/_app/immutable/nodes/{3.AciugOtL.js → 3.pgwe-_5b.js} +1 -1
- package/web/build/client/_app/immutable/nodes/3.pgwe-_5b.js.br +0 -0
- package/web/build/client/_app/immutable/nodes/3.pgwe-_5b.js.gz +0 -0
- package/web/build/client/_app/version.json +1 -1
- package/web/build/client/_app/version.json.br +0 -0
- package/web/build/client/_app/version.json.gz +0 -0
- package/web/build/handler.js +3 -3
- package/web/build/index.js +3 -3
- package/web/build/server/chunks/1-BFhhV5JB.js +7 -0
- package/web/build/server/chunks/{1-C2qlInYk.js.map → 1-BFhhV5JB.js.map} +1 -1
- package/web/build/server/chunks/2-BZ_MVqj8.js +7 -0
- package/web/build/server/chunks/2-BZ_MVqj8.js.map +1 -0
- package/web/build/server/chunks/3-BV-TIUp1.js +7 -0
- package/web/build/server/chunks/{3-SO3atuWO.js.map → 3-BV-TIUp1.js.map} +1 -1
- package/web/build/server/chunks/{_server.ts-CRNhzL2a.js → _server.ts-CdFoXw36.js} +4 -4
- package/web/build/server/chunks/{_server.ts-CRNhzL2a.js.map → _server.ts-CdFoXw36.js.map} +1 -1
- package/web/build/server/chunks/{agent-sessions-kcUaLhK5.js → agent-sessions-D0WwtWgR.js} +56 -15
- package/web/build/server/chunks/agent-sessions-D0WwtWgR.js.map +1 -0
- package/web/build/server/chunks/{git-review-CXKcjYgZ.js → git-review-CgcBIbvM.js} +7 -7
- package/web/build/server/chunks/{git-review-CXKcjYgZ.js.map → git-review-CgcBIbvM.js.map} +1 -1
- package/web/build/server/chunks/{handler-_E0NucKN.js → handler-DbxjtK9M.js} +3 -3
- package/web/build/server/chunks/{handler-_E0NucKN.js.map → handler-DbxjtK9M.js.map} +1 -1
- package/web/build/server/chunks/{hooks.server-D7yPODoc.js → hooks.server-Dg6gYUqs.js} +3 -3
- package/web/build/server/chunks/{hooks.server-D7yPODoc.js.map → hooks.server-Dg6gYUqs.js.map} +1 -1
- package/web/build/server/chunks/{index.js-lMtDM8ZQ.js → index.js-NNne-njN.js} +876 -879
- package/web/build/server/chunks/index.js-NNne-njN.js.map +1 -0
- package/web/build/server/chunks/{manifest.js-BIm6jot5.js → manifest.js-V8ViI5bl.js} +8 -8
- package/web/build/server/chunks/{manifest.js-BIm6jot5.js.map → manifest.js-V8ViI5bl.js.map} +1 -1
- package/web/build/server/chunks/{remote-1g4ayag-DmqxwUIz.js → remote-1g4ayag-CCsG2QXw.js} +4 -4
- package/web/build/server/chunks/{remote-1g4ayag-DmqxwUIz.js.map → remote-1g4ayag-CCsG2QXw.js.map} +1 -1
- package/web/build/server/chunks/{remote-wh6t6j-DZk0W9Pp.js → remote-wh6t6j-BCvmX37z.js} +5 -5
- package/web/build/server/chunks/{remote-wh6t6j-DZk0W9Pp.js.map → remote-wh6t6j-BCvmX37z.js.map} +1 -1
- package/web/build/server/chunks/{validate-BsTKyhsq.js → validate-CAQ31C7k.js} +2 -2
- package/web/build/server/chunks/{validate-BsTKyhsq.js.map → validate-CAQ31C7k.js.map} +1 -1
- package/web/build/client/_app/immutable/assets/2.tqrMRTM0.css +0 -1
- package/web/build/client/_app/immutable/assets/2.tqrMRTM0.css.br +0 -0
- package/web/build/client/_app/immutable/assets/2.tqrMRTM0.css.gz +0 -0
- package/web/build/client/_app/immutable/assets/storage.DqYH0w6R.css +0 -1
- package/web/build/client/_app/immutable/assets/storage.DqYH0w6R.css.br +0 -0
- package/web/build/client/_app/immutable/assets/storage.DqYH0w6R.css.gz +0 -0
- package/web/build/client/_app/immutable/chunks/BXUWMim4.js.br +0 -0
- package/web/build/client/_app/immutable/chunks/BXUWMim4.js.gz +0 -0
- package/web/build/client/_app/immutable/chunks/Bu1mm6Oz.js.br +0 -0
- package/web/build/client/_app/immutable/chunks/Bu1mm6Oz.js.gz +0 -0
- package/web/build/client/_app/immutable/chunks/DPfXzQnm.js +0 -2
- package/web/build/client/_app/immutable/chunks/DPfXzQnm.js.br +0 -0
- package/web/build/client/_app/immutable/chunks/DPfXzQnm.js.gz +0 -0
- package/web/build/client/_app/immutable/entry/app.CTgiuiU1.js.br +0 -0
- package/web/build/client/_app/immutable/entry/app.CTgiuiU1.js.gz +0 -0
- package/web/build/client/_app/immutable/entry/start.CFSl0kht.js +0 -1
- package/web/build/client/_app/immutable/entry/start.CFSl0kht.js.br +0 -0
- package/web/build/client/_app/immutable/entry/start.CFSl0kht.js.gz +0 -0
- package/web/build/client/_app/immutable/nodes/1.0PQZpSbJ.js.br +0 -2
- package/web/build/client/_app/immutable/nodes/1.0PQZpSbJ.js.gz +0 -0
- package/web/build/client/_app/immutable/nodes/2.DQaoQoy4.js +0 -10
- package/web/build/client/_app/immutable/nodes/2.DQaoQoy4.js.br +0 -0
- package/web/build/client/_app/immutable/nodes/2.DQaoQoy4.js.gz +0 -0
- package/web/build/client/_app/immutable/nodes/3.AciugOtL.js.br +0 -0
- package/web/build/client/_app/immutable/nodes/3.AciugOtL.js.gz +0 -0
- package/web/build/server/chunks/1-C2qlInYk.js +0 -7
- package/web/build/server/chunks/2-DyE177MK.js +0 -7
- package/web/build/server/chunks/2-DyE177MK.js.map +0 -1
- package/web/build/server/chunks/3-SO3atuWO.js +0 -7
- package/web/build/server/chunks/agent-sessions-kcUaLhK5.js.map +0 -1
- package/web/build/server/chunks/index.js-lMtDM8ZQ.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-sessions-kcUaLhK5.js","sources":["../../../.svelte-kit/output/server/chunks/agent-sessions.js"],"sourcesContent":["import { A as loadReviewConfig, N as makeOutputFilename, O as tryResolveGitRoot, P as outputRelPath, _ as readDiffCache, b as writeDiffText, d as decodePayload, f as extractBranchDiff, h as ensureReviewDir, j as OUTPUT_DIR, k as globMatch, l as reviewIssues, m as companionPaths, o as REVIEW_SCHEMA, p as loadBranchDiff, u as validateAgainst, w as getRemoteUrl, x as writeSessionRef, y as writeDiffCache } from \"./validate.js\";\nimport { accessSync, constants, copyFileSync, existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, rmSync, statSync, writeFileSync } from \"node:fs\";\nimport { spawn } from \"node:child_process\";\nimport { homedir, tmpdir } from \"node:os\";\nimport { basename, delimiter, dirname, isAbsolute, join, normalize, resolve } from \"node:path\";\nimport { Readable, Writable } from \"node:stream\";\nimport * as acp from \"@agentclientprotocol/sdk\";\n//#region ../lib/agents.mjs\n/**\n* Agentes de código que la CLI puede lanzar con el prompt (`--agent`).\n*\n* No hay un registro de agentes en ningún SO: se detectan por nombre en el PATH más algunas rutas fijas\n* conocidas (p. ej. el Claude Code que trae la app de escritorio en Windows). El prompt viaja por stdin, así\n* no se toca el portapapeles ni se choca con el límite de largo de la línea de comandos de los shims `.cmd`.\n*/\n/**\n* @typedef {{ value: string, label: string, hint?: string }} ModelOption\n* @typedef {{ model?: string, outputFilename: string }} RunSpec\n* @typedef {{\n* id: string,\n* label: string,\n* bins: string[],\n* extraPaths?: (ctx: DetectContext) => string[],\n* models: ModelOption[],\n* configuredModel?: (ctx: DetectContext) => { model: string, source: string } | null,\n* args: (spec: RunSpec) => string[],\n* acp?: (ctx: { path: string }) => AcpLaunch,\n* }} AgentDef\n* @typedef {{ file: string, args: string[], env?: Record<string, string>, sessionMeta?: Record<string, unknown> }} AcpLaunch\n* `env` se suma al del proceso; `sessionMeta` va como `_meta` en `session/new` / `session/load`.\n* @typedef {{ env: NodeJS.ProcessEnv, platform: NodeJS.Platform, home: string }} DetectContext\n* @typedef {{ def: AgentDef, path: string }} DetectedAgent\n*/\n/** @param {string} file */\nfunction readJson(file) {\n\ttry {\n\t\treturn JSON.parse(readFileSync(file, \"utf8\"));\n\t} catch {\n\t\treturn null;\n\t}\n}\n/** Primer `model = \"...\"` de nivel raíz de un TOML (antes de cualquier `[sección]`). */\nfunction topLevelTomlModel(text) {\n\tfor (const line of String(text).split(/\\r?\\n/)) {\n\t\tif (/^\\s*\\[/.test(line)) break;\n\t\tconst m = line.match(/^\\s*model\\s*=\\s*[\"']([^\"']+)[\"']/);\n\t\tif (m) return m[1];\n\t}\n\treturn null;\n}\n/** Versiones tipo `2.1.286` de mayor a menor (las que no parsean, al final). */\nfunction byVersionDesc(a, b) {\n\tconst pa = a.split(\".\").map(Number);\n\tconst pb = b.split(\".\").map(Number);\n\tfor (let i = 0; i < Math.max(pa.length, pb.length); i++) {\n\t\tconst d = (pb[i] || 0) - (pa[i] || 0);\n\t\tif (d) return Number.isNaN(d) ? 0 : d;\n\t}\n\treturn 0;\n}\n/** `<root>/<versión>/<hash>/<exe>` → rutas, de la versión más nueva a la más vieja. */\nfunction versionedBinaries(root, exe) {\n\t/** @type {string[]} */\n\tconst out = [];\n\tlet versions;\n\ttry {\n\t\tversions = readdirSync(root).sort(byVersionDesc);\n\t} catch {\n\t\treturn out;\n\t}\n\tfor (const version of versions) {\n\t\tlet entries;\n\t\ttry {\n\t\t\tentries = readdirSync(join(root, version));\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const entry of entries) out.push(join(root, version, entry, exe));\n\t}\n\treturn out;\n}\n/**\n* Carpeta de configuración para Cursor por ACP: la del usuario sin su allowlist. Cursor aprueba solo lo que matchee\n* `permissions.allow` mirando el nombre del comando (`Shell(echo)` deja pasar `echo x > archivo`); vaciándola,\n* cada comando pasa por la política de diff-review. El login no vive ahí, así que se conserva. El modelo elegido\n* por ACP se guarda en esta carpeta y no pisa el default del usuario.\n*/\nfunction cursorAcpConfigDir(ctx) {\n\tconst c = context(ctx);\n\tconst userDir = c.env.CURSOR_CONFIG_DIR?.trim() || (c.env.XDG_CONFIG_HOME?.trim() ? join(c.env.XDG_CONFIG_HOME, \"cursor\") : join(c.home, \".cursor\"));\n\tconst dir = join(tmpdir(), \"diff-review\", \"cursor-config\");\n\tmkdirSync(dir, { recursive: true });\n\tconst config = readJson(join(userDir, \"cli-config.json\")) ?? {};\n\twriteFileSync(join(dir, \"cli-config.json\"), JSON.stringify({\n\t\t...config,\n\t\tpermissions: {\n\t\t\tallow: [],\n\t\t\tdeny: config.permissions?.deny ?? []\n\t\t},\n\t\tapprovalMode: \"allowlist\"\n\t}, null, 2));\n\tconst userAcp = join(userDir, \"acp-config.json\");\n\tif (existsSync(userAcp)) copyFileSync(userAcp, join(dir, \"acp-config.json\"));\n\telse rmSync(join(dir, \"acp-config.json\"), { force: true });\n\treturn dir;\n}\n/** Adaptador ACP de Claude Code (antes `@zed-industries/claude-agent-acp`). */\nvar CLAUDE_ACP_PACKAGE = \"@agentclientprotocol/claude-agent-acp@^0.91.0\";\n/** @type {AgentDef[]} */\nvar AGENTS = [\n\t{\n\t\tid: \"claude\",\n\t\tlabel: \"Claude Code\",\n\t\tbins: [\"claude\"],\n\t\textraPaths: ({ env, platform, home }) => {\n\t\t\tif (platform === \"win32\") return versionedBinaries(join(env.APPDATA || join(home, \"AppData\", \"Roaming\"), \"Claude\", \"claude-code\"), \"claude.exe\");\n\t\t\tconst paths = [join(home, \".local\", \"bin\", \"claude\"), join(home, \".claude\", \"local\", \"claude\")];\n\t\t\tif (platform === \"darwin\") paths.push(...versionedBinaries(join(home, \"Library\", \"Application Support\", \"Claude\", \"claude-code\"), \"claude\"));\n\t\t\treturn paths;\n\t\t},\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tvalue: \"opus\",\n\t\t\t\tlabel: \"opus\",\n\t\t\t\thint: \"el más capaz\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: \"sonnet\",\n\t\t\t\tlabel: \"sonnet\",\n\t\t\t\thint: \"equilibrado\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: \"haiku\",\n\t\t\t\tlabel: \"haiku\",\n\t\t\t\thint: \"el más rápido\"\n\t\t\t}\n\t\t],\n\t\tconfiguredModel: ({ env, home }) => {\n\t\t\tif (env.ANTHROPIC_MODEL) return {\n\t\t\t\tmodel: env.ANTHROPIC_MODEL,\n\t\t\t\tsource: \"ANTHROPIC_MODEL\"\n\t\t\t};\n\t\t\tconst model = readJson(join(home, \".claude\", \"settings.json\"))?.model;\n\t\t\treturn typeof model === \"string\" && model ? {\n\t\t\t\tmodel,\n\t\t\t\tsource: \"~/.claude/settings.json\"\n\t\t\t} : null;\n\t\t},\n\t\targs: ({ model, outputFilename }) => [\n\t\t\t\"-p\",\n\t\t\t...model ? [\"--model\", model] : [],\n\t\t\t\"--allowedTools\",\n\t\t\t\"Read\",\n\t\t\t\"Grep\",\n\t\t\t\"Glob\",\n\t\t\t\"Bash(git:*)\",\n\t\t\t\"Bash(npx --yes @jpkme/diff-review validate:*)\",\n\t\t\t`Edit(./${outputRelPath(outputFilename)})`\n\t\t],\n\t\tacp: () => {\n\t\t\tconst local = findOnPath(\"claude-agent-acp\", context());\n\t\t\treturn {\n\t\t\t\t...local ? {\n\t\t\t\t\tfile: local,\n\t\t\t\t\targs: []\n\t\t\t\t} : {\n\t\t\t\t\tfile: \"npx\",\n\t\t\t\t\targs: [\"--yes\", CLAUDE_ACP_PACKAGE]\n\t\t\t\t},\n\t\t\t\tsessionMeta: { claudeCode: { options: {\n\t\t\t\t\ttools: [\n\t\t\t\t\t\t\"Read\",\n\t\t\t\t\t\t\"Grep\",\n\t\t\t\t\t\t\"Glob\",\n\t\t\t\t\t\t\"Bash\",\n\t\t\t\t\t\t\"Edit\",\n\t\t\t\t\t\t\"Write\"\n\t\t\t\t\t],\n\t\t\t\t\tsettingSources: []\n\t\t\t\t} } }\n\t\t\t};\n\t\t}\n\t},\n\t{\n\t\tid: \"codex\",\n\t\tlabel: \"Codex\",\n\t\tbins: [\"codex\"],\n\t\tmodels: [],\n\t\tconfiguredModel: ({ home }) => {\n\t\t\ttry {\n\t\t\t\tconst model = topLevelTomlModel(readFileSync(join(home, \".codex\", \"config.toml\"), \"utf8\"));\n\t\t\t\treturn model ? {\n\t\t\t\t\tmodel,\n\t\t\t\t\tsource: \"~/.codex/config.toml\"\n\t\t\t\t} : null;\n\t\t\t} catch {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\targs: ({ model }) => [\n\t\t\t\"exec\",\n\t\t\t\"--sandbox\",\n\t\t\t\"workspace-write\",\n\t\t\t...model ? [\"-m\", model] : [],\n\t\t\t\"-\"\n\t\t]\n\t},\n\t{\n\t\tid: \"cursor\",\n\t\tlabel: \"Cursor CLI\",\n\t\tbins: [\"cursor-agent\"],\n\t\textraPaths: ({ env, platform, home }) => platform === \"win32\" ? [join(env.LOCALAPPDATA || join(home, \"AppData\", \"Local\"), \"cursor-agent\", \"cursor-agent.cmd\")] : [join(home, \".local\", \"bin\", \"cursor-agent\")],\n\t\tmodels: [],\n\t\tconfiguredModel: ({ home }) => {\n\t\t\tconst config = readJson(join(home, \".cursor\", \"cli-config.json\"));\n\t\t\tconst id = config?.selectedModel?.modelId ?? config?.model?.modelId;\n\t\t\tif (typeof id !== \"string\" || !id) return null;\n\t\t\treturn {\n\t\t\t\tmodel: id === \"default\" ? \"auto\" : id,\n\t\t\t\tsource: \"~/.cursor/cli-config.json\"\n\t\t\t};\n\t\t},\n\t\targs: ({ model }) => [\n\t\t\t\"-p\",\n\t\t\t\"--output-format\",\n\t\t\t\"text\",\n\t\t\t\"--trust\",\n\t\t\t\"--force\",\n\t\t\t...model ? [\"--model\", model] : []\n\t\t],\n\t\tacp: ({ path }) => ({\n\t\t\tfile: path,\n\t\t\targs: [\"acp\"],\n\t\t\tenv: { CURSOR_CONFIG_DIR: cursorAcpConfigDir() }\n\t\t})\n\t},\n\t{\n\t\tid: \"copilot\",\n\t\tlabel: \"GitHub Copilot CLI\",\n\t\tbins: [\"copilot\"],\n\t\tmodels: [{\n\t\t\tvalue: \"auto\",\n\t\t\tlabel: \"auto\",\n\t\t\thint: \"Copilot elige\"\n\t\t}],\n\t\tconfiguredModel: ({ env, home }) => {\n\t\t\tconst model = readJson(join(env.COPILOT_HOME || join(home, \".copilot\"), \"settings.json\"))?.model;\n\t\t\tconst source = env.COPILOT_HOME ? \"$COPILOT_HOME/settings.json\" : \"~/.copilot/settings.json\";\n\t\t\treturn typeof model === \"string\" && model ? {\n\t\t\t\tmodel,\n\t\t\t\tsource\n\t\t\t} : null;\n\t\t},\n\t\targs: ({ model, outputFilename }) => [\n\t\t\t\"-s\",\n\t\t\t...model ? [\"--model\", model] : [],\n\t\t\t\"--allow-tool\",\n\t\t\t\"shell(git:*)\",\n\t\t\t\"--allow-tool\",\n\t\t\t\"shell(npx:*)\",\n\t\t\t\"--allow-tool\",\n\t\t\t`write(${outputRelPath(outputFilename)})`\n\t\t],\n\t\tacp: ({ path }) => ({\n\t\t\tfile: path,\n\t\t\targs: [\"--acp\"]\n\t\t})\n\t},\n\t{\n\t\tid: \"gemini\",\n\t\tlabel: \"Gemini CLI\",\n\t\tbins: [\"gemini\"],\n\t\tmodels: [],\n\t\tconfiguredModel: ({ home }) => {\n\t\t\tconst model = readJson(join(home, \".gemini\", \"settings.json\"))?.model;\n\t\t\tconst name = typeof model === \"string\" ? model : model?.name;\n\t\t\treturn typeof name === \"string\" && name ? {\n\t\t\t\tmodel: name,\n\t\t\t\tsource: \"~/.gemini/settings.json\"\n\t\t\t} : null;\n\t\t},\n\t\targs: ({ model }) => [...model ? [\"-m\", model] : [], \"--yolo\"]\n\t}\n];\n/** @param {string} file @param {NodeJS.Platform} platform */\nfunction isExecutable(file, platform) {\n\ttry {\n\t\tif (!statSync(file).isFile()) return false;\n\t\tif (platform !== \"win32\") accessSync(file, constants.X_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n/** Busca `name` en el PATH (con las extensiones de PATHEXT en Windows). */\nfunction findOnPath(name, { env, platform }) {\n\tconst dirs = String(env.PATH || env.Path || \"\").split(platform === \"win32\" ? \";\" : delimiter).filter(Boolean);\n\tconst exts = platform === \"win32\" ? String(env.PATHEXT || \".COM;.EXE;.BAT;.CMD\").split(\";\").filter(Boolean) : [\"\"];\n\tfor (const dir of dirs) for (const ext of exts) {\n\t\tconst candidate = join(dir, name + ext.toLowerCase());\n\t\tif (isExecutable(candidate, platform)) return candidate;\n\t}\n\treturn null;\n}\n/** @param {Partial<DetectContext>} [ctx] */\nfunction context(ctx = {}) {\n\treturn {\n\t\tenv: ctx.env ?? process.env,\n\t\tplatform: ctx.platform ?? process.platform,\n\t\thome: ctx.home ?? homedir()\n\t};\n}\n/**\n* Agentes instalados, en el orden de `AGENTS`. Primero el PATH, después las rutas fijas.\n* @param {Partial<DetectContext>} [ctx]\n* @returns {DetectedAgent[]}\n*/\nfunction detectAgents(ctx) {\n\tconst c = context(ctx);\n\t/** @type {DetectedAgent[]} */\n\tconst found = [];\n\tfor (const def of AGENTS) {\n\t\tlet path = null;\n\t\tfor (const bin of def.bins) {\n\t\t\tpath = findOnPath(bin, c);\n\t\t\tif (path) break;\n\t\t}\n\t\tif (!path) path = (def.extraPaths?.(c) ?? []).find((p) => existsSync(p) && isExecutable(p, c.platform)) ?? null;\n\t\tif (path) found.push({\n\t\t\tdef,\n\t\t\tpath\n\t\t});\n\t}\n\treturn found;\n}\n/**\n* Opciones del select de modelo: primero el default del agente (marcado como inicial), después los conocidos.\n* Si el default configurado coincide con uno conocido, no se repite.\n* @param {AgentDef} def\n* @param {Partial<DetectContext>} [ctx]\n* @returns {{ options: ModelOption[], initialValue: string }}\n*/\nfunction modelChoices(def, ctx) {\n\tconst configured = def.configuredModel?.(context(ctx)) ?? null;\n\treturn {\n\t\toptions: [configured ? {\n\t\t\tvalue: \"\",\n\t\t\tlabel: `Por defecto (${configured.model})`,\n\t\t\thint: configured.source\n\t\t} : {\n\t\t\tvalue: \"\",\n\t\t\tlabel: \"Por defecto del agente\",\n\t\t\thint: \"no se pasa --model\"\n\t\t}, ...def.models.filter((m) => m.value !== configured?.model)],\n\t\tinitialValue: \"\"\n\t};\n}\n/** Comillas para cmd.exe (solo hace falta con los shims .cmd/.bat de npm). */\nfunction quoteForCmd(arg) {\n\treturn /^[\\w./:@=-]+$/.test(arg) ? arg : `\"${arg.replace(/\"/g, \"\\\"\\\"\")}\"`;\n}\n/**\n* `spawn` que también lanza los shims `.cmd`/`.bat` de npm en Windows (y `npx` a secas, que es uno de ellos).\n* @param {string} file\n* @param {string[]} args\n* @param {import('node:child_process').SpawnOptions} options\n*/\nfunction spawnCommand(file, args, options) {\n\tconst resolved = process.platform === \"win32\" && !/[\\\\/]/.test(file) ? findOnPath(file, context()) ?? file : file;\n\treturn process.platform === \"win32\" && /\\.(cmd|bat)$/i.test(resolved) ? spawn([resolved, ...args].map(quoteForCmd).join(\" \"), {\n\t\t...options,\n\t\tshell: true\n\t}) : spawn(resolved, args, options);\n}\n//#endregion\n//#region ../lib/acp-shell.mjs\n/**\n* Qué comandos de terminal puede correr el agente por ACP: git de solo lectura, comandos que solo leen (cat, grep,\n* find, sed -n …, y sus equivalentes de PowerShell) y el validate del paquete. Los paths tienen que quedar dentro\n* del repo.\n*\n* El comando se tokeniza respetando comillas (un `grep \"a\\|b\"` no es un pipe). Se aceptan `|`, `&&`, `||`, `;` y\n* descartar salida a /dev/null; cualquier otra redirección, `$(…)`, backticks o `&` lo rechazan.\n*/\n/** @typedef {{ ok: true } | { ok: false, reason: string }} ShellCheck */\n/** Subcomandos de git que solo leen. */\nvar GIT_READ = /* @__PURE__ */ new Set([\n\t\"diff\",\n\t\"log\",\n\t\"show\",\n\t\"status\",\n\t\"merge-base\",\n\t\"rev-parse\",\n\t\"rev-list\",\n\t\"blame\",\n\t\"ls-files\",\n\t\"ls-tree\",\n\t\"cat-file\",\n\t\"describe\",\n\t\"shortlog\",\n\t\"name-rev\",\n\t\"for-each-ref\",\n\t\"grep\",\n\t\"whatchanged\"\n]);\n/** Flags de git que ejecutan algo o escriben archivos, en cualquier subcomando. */\nvar GIT_UNSAFE_FLAG = /^(--output|--ext-diff|-O|--open-files-in-pager)(=|$)/;\nvar BRANCH_LIST_FLAGS = /* @__PURE__ */ new Set([\n\t\"--show-current\",\n\t\"--list\",\n\t\"-a\",\n\t\"--all\",\n\t\"-r\",\n\t\"--remotes\",\n\t\"-v\",\n\t\"-vv\"\n]);\nvar CONFIG_READ_FLAGS = /* @__PURE__ */ new Set([\n\t\"--get\",\n\t\"--get-all\",\n\t\"--get-regexp\",\n\t\"--list\",\n\t\"-l\"\n]);\n/** Comandos que solo leen (o imprimen). Los de PowerShell van en minúscula: no distingue mayúsculas. */\nvar READ_COMMANDS = /* @__PURE__ */ new Set([\n\t\"cat\",\n\t\"head\",\n\t\"tail\",\n\t\"wc\",\n\t\"ls\",\n\t\"nl\",\n\t\"sort\",\n\t\"uniq\",\n\t\"cut\",\n\t\"tr\",\n\t\"grep\",\n\t\"egrep\",\n\t\"fgrep\",\n\t\"rg\",\n\t\"find\",\n\t\"sed\",\n\t\"file\",\n\t\"stat\",\n\t\"du\",\n\t\"diff\",\n\t\"cmp\",\n\t\"jq\",\n\t\"basename\",\n\t\"dirname\",\n\t\"realpath\",\n\t\"tree\",\n\t\"which\",\n\t\"type\",\n\t\"pwd\",\n\t\"echo\",\n\t\"printf\",\n\t\"true\",\n\t\"get-content\",\n\t\"gc\",\n\t\"select-string\",\n\t\"sls\",\n\t\"get-childitem\",\n\t\"gci\",\n\t\"dir\",\n\t\"measure-object\",\n\t\"measure\",\n\t\"select-object\",\n\t\"select\",\n\t\"sort-object\",\n\t\"get-location\",\n\t\"test-path\",\n\t\"resolve-path\",\n\t\"write-output\",\n\t\"out-string\",\n\t\"format-list\",\n\t\"format-table\"\n]);\n/** Comandos cuyos argumentos son texto, no paths. */\nvar TEXT_ARGS = /* @__PURE__ */ new Set([\n\t\"echo\",\n\t\"printf\",\n\t\"tr\",\n\t\"write-output\",\n\t\"which\",\n\t\"type\"\n]);\n/** Destinos de redirección que solo descartan salida. */\nvar DISCARD = /* @__PURE__ */ new Set([\n\t\"/dev/null\",\n\t\"nul\",\n\t\"$null\"\n]);\n/**\n* Paths de shell Unix → forma Windows cuando la política corre en win32:\n* - Git Bash: `/c/Users/...` → `C:/Users/...`\n* - WSL: `/mnt/c/Users/...` → `C:/Users/...`\n*/\nfunction toNativePath(p, platform) {\n\tif (platform === \"win32\") {\n\t\tconst wsl = /^\\/mnt\\/([a-zA-Z])(\\/|$)(.*)$/.exec(p);\n\t\tif (wsl) return `${wsl[1].toUpperCase()}:/${wsl[3]}`;\n\t\tconst msys = /^\\/([a-zA-Z])(\\/|$)(.*)$/.exec(p);\n\t\tif (msys) return `${msys[1].toUpperCase()}:/${msys[3]}`;\n\t}\n\treturn p;\n}\n/**\n* Resuelve symlinks cuando el path (o un ancestro) existe. Sin eso, un link\n* dentro del repo puede apuntar fuera y pasar `isInside` con solo `normalize`.\n* @param {string} path\n*/\nfunction canonicalPath$1(path) {\n\ttry {\n\t\treturn realpathSync(path);\n\t} catch {\n\t\tconst parts = [];\n\t\tlet cur = normalize(path);\n\t\tfor (;;) {\n\t\t\tconst parent = dirname(cur);\n\t\t\tif (!parent || parent === cur) return normalize(path);\n\t\t\tparts.unshift(basename(cur));\n\t\t\ttry {\n\t\t\t\treturn resolve(realpathSync(parent), ...parts);\n\t\t\t} catch {\n\t\t\t\tcur = parent;\n\t\t\t}\n\t\t}\n\t}\n}\nfunction isInside$1(child, root, platform) {\n\tconst c = normalize(canonicalPath$1(child)).replace(/[\\\\/]+$/, \"\");\n\tconst r = normalize(canonicalPath$1(root)).replace(/[\\\\/]+$/, \"\");\n\tconst [cc, rr] = platform === \"win32\" ? [c.toLowerCase(), r.toLowerCase()] : [c, r];\n\treturn cc === rr || cc.startsWith(`${rr}\\\\`) || cc.startsWith(`${rr}/`);\n}\n/** ¿El argumento parece un path que puede salir del repo? (absoluto, `~` o con `..`). */\nfunction escapingPath(arg) {\n\treturn /^([a-zA-Z]:[\\\\/]|[\\\\/]|~)/.test(arg) || /(^|[\\\\/])\\.\\.([\\\\/]|$)/.test(arg);\n}\n/**\n* Parte el comando en cadenas (separadas por `&&`, `||`, `;`, saltos de línea) de pipelines (`|`) de argv.\n* @param {string} command\n* @returns {{ ok: true, pipelines: string[][][] } | { ok: false, reason: string }}\n*/\nfunction tokenizeShell(command) {\n\tconst src = String(command ?? \"\");\n\t/** @type {string[][][]} */\n\tconst pipelines = [];\n\t/** @type {string[][]} */\n\tlet pipeline = [];\n\t/** @type {string[]} */\n\tlet words = [];\n\tlet word = \"\";\n\tlet inWord = false;\n\t/** @type {null | \"'\" | '\"'} */\n\tlet quote = null;\n\tconst endWord = () => {\n\t\tif (inWord) words.push(word);\n\t\tword = \"\";\n\t\tinWord = false;\n\t};\n\tconst endSegment = () => {\n\t\tendWord();\n\t\tif (words.length) pipeline.push(words);\n\t\twords = [];\n\t};\n\tconst endPipeline = () => {\n\t\tendSegment();\n\t\tif (pipeline.length) pipelines.push(pipeline);\n\t\tpipeline = [];\n\t};\n\tconst fail = (reason) => ({\n\t\tok: false,\n\t\treason\n\t});\n\tfor (let i = 0; i < src.length; i++) {\n\t\tconst ch = src[i];\n\t\tconst next = src[i + 1];\n\t\tif (quote === \"'\") {\n\t\t\tif (ch === \"'\") quote = null;\n\t\t\telse word += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote === \"\\\"\") {\n\t\t\tif (ch === \"\\\"\") quote = null;\n\t\t\telse if (ch === \"`\") return fail(\"backticks\");\n\t\t\telse if (ch === \"$\" && next === \"(\") return fail(\"sustitución $(…)\");\n\t\t\telse if (ch === \"\\\\\" && next !== void 0 && \"\\\"\\\\$`\".includes(next)) {\n\t\t\t\tword += next;\n\t\t\t\ti++;\n\t\t\t} else word += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"'\" || ch === \"\\\"\") {\n\t\t\tquote = ch;\n\t\t\tinWord = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"\\\\\" && next !== void 0) {\n\t\t\tword += next;\n\t\t\tinWord = true;\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"`\") return fail(\"backticks\");\n\t\tif (ch === \"$\" && next === \"(\") return fail(\"sustitución $(…)\");\n\t\tif (/\\s/.test(ch) && ch !== \"\\n\" && ch !== \"\\r\") {\n\t\t\tendWord();\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"\\n\" || ch === \"\\r\" || ch === \";\") {\n\t\t\tendPipeline();\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"&\" && next === \"&\" || ch === \"|\" && next === \"|\") {\n\t\t\tendPipeline();\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"|\") {\n\t\t\tendSegment();\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \">\" || ch === \"&\" && next === \">\") {\n\t\t\tif (ch === \"&\") i++;\n\t\t\tconst fd = inWord && /^[12]$/.test(word) ? word : \"\";\n\t\t\tif (inWord && !fd) return fail(\"redirección\");\n\t\t\tword = \"\";\n\t\t\tinWord = false;\n\t\t\tlet j = i + 1;\n\t\t\tif (src[j] === \">\") j++;\n\t\t\tif (src[j] === \"&\" && /[12]/.test(src[j + 1] ?? \"\")) {\n\t\t\t\ti = j + 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\twhile (src[j] === \" \" || src[j] === \"\t\") j++;\n\t\t\tlet target = \"\";\n\t\t\twhile (j < src.length && !/[\\s;|&<>]/.test(src[j])) target += src[j++];\n\t\t\tif (!DISCARD.has(target.toLowerCase())) return fail(`redirección a ${target || \"archivo\"}`);\n\t\t\ti = j - 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"<\") return fail(\"redirección de entrada\");\n\t\tif (ch === \"&\") return fail(\"comando en segundo plano (&)\");\n\t\tword += ch;\n\t\tinWord = true;\n\t}\n\tif (quote) return fail(\"comillas sin cerrar\");\n\tendPipeline();\n\treturn {\n\t\tok: true,\n\t\tpipelines\n\t};\n}\n/**\n* @param {string} arg\n* @param {{ repo: string, platform: NodeJS.Platform }} ctx\n* @returns {ShellCheck}\n*/\nfunction checkPath(arg, { repo, platform }) {\n\tif (DISCARD.has(arg.toLowerCase())) return { ok: true };\n\tconst native = toNativePath(arg.replace(/^~(?=[\\\\/]|$)/, \"/__home__\"), platform);\n\treturn isInside$1(isAbsolute(native) ? native : resolve(repo, native), repo, platform) ? { ok: true } : {\n\t\tok: false,\n\t\treason: `path fuera del repo: ${arg}`\n\t};\n}\n/** Argumentos (y valores de `--opt=valor`) que parecen paths que salen del repo deben quedar adentro. */\nfunction checkArgsInside(args, ctx) {\n\tfor (const arg of args) {\n\t\tconst value = arg.startsWith(\"-\") ? arg.includes(\"=\") ? arg.slice(arg.indexOf(\"=\") + 1) : \"\" : arg;\n\t\tif (value && escapingPath(value)) {\n\t\t\tconst res = checkPath(value, ctx);\n\t\t\tif (!res.ok) return res;\n\t\t}\n\t}\n\treturn { ok: true };\n}\n/** @param {string[]} argv @returns {ShellCheck} */\nfunction checkGit(argv, ctx) {\n\tlet i = 1;\n\twhile (argv[i]?.startsWith(\"-\")) {\n\t\tconst flag = argv[i];\n\t\tif (flag === \"--no-pager\" || flag === \"-P\") i++;\n\t\telse if (flag === \"-C\") {\n\t\t\tconst res = checkPath(argv[i + 1] ?? \"\", ctx);\n\t\t\tif (!res.ok) return res;\n\t\t\ti += 2;\n\t\t} else return {\n\t\t\tok: false,\n\t\t\treason: `opción global de git no permitida: ${flag}`\n\t\t};\n\t}\n\tconst sub = argv[i] ?? \"\";\n\tconst rest = argv.slice(i + 1);\n\tconst unsafe = rest.find((w) => GIT_UNSAFE_FLAG.test(w));\n\tif (unsafe) return {\n\t\tok: false,\n\t\treason: `git ${sub} ${unsafe}`\n\t};\n\tif (GIT_READ.has(sub)) return { ok: true };\n\tif (sub === \"branch\" && rest.every((w) => BRANCH_LIST_FLAGS.has(w))) return { ok: true };\n\tif (sub === \"remote\" && (rest.length === 0 || rest.length === 1 && rest[0] === \"-v\" || rest[0] === \"get-url\")) return { ok: true };\n\tif (sub === \"config\" && rest.some((w) => CONFIG_READ_FLAGS.has(w))) return { ok: true };\n\treturn {\n\t\tok: false,\n\t\treason: `git ${sub || \"(sin subcomando)\"} no es de solo lectura`\n\t};\n}\n/** @param {string[]} argv @returns {ShellCheck} */\nfunction checkReadCommand(name, argv, ctx) {\n\tconst args = argv.slice(1);\n\tif (name === \"sort\" && args.some((a) => /^(-o|--output)/.test(a))) return {\n\t\tok: false,\n\t\treason: \"sort -o escribe un archivo\"\n\t};\n\tif (name === \"uniq\" && args.filter((a) => !a.startsWith(\"-\")).length > 1) return {\n\t\tok: false,\n\t\treason: \"uniq con archivo de salida\"\n\t};\n\tif (name === \"find\" && args.some((a) => /^-(exec|execdir|ok|okdir|delete|fprint|fprint0|fprintf|fls)$/.test(a))) return {\n\t\tok: false,\n\t\treason: \"find que ejecuta o escribe\"\n\t};\n\tif (name === \"rg\" && args.some((a) => /^--pre(-glob)?(=|$)/.test(a))) return {\n\t\tok: false,\n\t\treason: \"rg --pre ejecuta comandos\"\n\t};\n\tif (name === \"sed\") {\n\t\tif (!args.includes(\"-n\") || args.some((a) => /^(-i|--in-place|-e|-f|--expression|--file)/.test(a))) return {\n\t\t\tok: false,\n\t\t\treason: \"sed solo como `sed -n 'N,Mp'`\"\n\t\t};\n\t\tconst script = args.find((a) => !a.startsWith(\"-\"));\n\t\tif (!script || !/^\\s*(\\d+|\\$)(\\s*,\\s*(\\d+|\\$))?\\s*p\\s*$/.test(script)) return {\n\t\t\tok: false,\n\t\t\treason: \"sed solo como `sed -n 'N,Mp'`\"\n\t\t};\n\t\treturn checkArgsInside(args.filter((a) => a !== script), ctx);\n\t}\n\tif (TEXT_ARGS.has(name)) return { ok: true };\n\treturn checkArgsInside(args, ctx);\n}\n/** El validate del paquete (por npx o con el bin instalado), con el archivo como único argumento. */\nfunction isValidate(argv) {\n\tconst line = argv.join(\" \");\n\treturn /^(?:npx\\s+(?:--yes\\s+|-y\\s+)?@jpkme\\/diff-review(?:@[\\w.^~-]+)?|diff-review)\\s+validate\\s+\\S+$/.test(line);\n}\n/**\n* `mkdir` / `md` / `New-Item -ItemType Directory` solo bajo `.diff-review/` del repo.\n* @param {string[]} argv\n* @param {{ repo: string, platform: NodeJS.Platform }} ctx\n* @returns {ShellCheck | null} null = no es este caso\n*/\nfunction checkReviewDirMkdir(argv, ctx) {\n\tconst name = argv[0].toLowerCase();\n\tconst reviewRoot = resolve(ctx.repo, \".diff-review\");\n\t/** @param {string} arg */\n\tconst underReviewDir = (arg) => {\n\t\tconst native = toNativePath(String(arg || \"\").replace(/^~(?=[\\\\/]|$)/, \"/__home__\"), ctx.platform);\n\t\treturn isInside$1(isAbsolute(native) ? native : resolve(ctx.repo, native), reviewRoot, ctx.platform);\n\t};\n\tif (name === \"mkdir\" || name === \"md\") {\n\t\tconst paths = argv.slice(1).filter((a) => !a.startsWith(\"-\"));\n\t\tif (!paths.length || !paths.every(underReviewDir)) return {\n\t\t\tok: false,\n\t\t\treason: \"mkdir solo permitido bajo .diff-review/\"\n\t\t};\n\t\treturn { ok: true };\n\t}\n\tif (name === \"new-item\") {\n\t\tconst joined = argv.join(\" \").toLowerCase();\n\t\tif (!/-itemtype\\s+directory\\b/.test(joined) && !/\\b-type\\s+directory\\b/.test(joined)) return null;\n\t\tconst paths = argv.slice(1).filter((a) => !a.startsWith(\"-\") && !/^(directory|file)$/i.test(a));\n\t\tif (!paths.length || !paths.every(underReviewDir)) return {\n\t\t\tok: false,\n\t\t\treason: \"New-Item Directory solo permitido bajo .diff-review/\"\n\t\t};\n\t\treturn { ok: true };\n\t}\n\treturn null;\n}\n/**\n* @param {string} command\n* @param {{ repo?: string, platform?: NodeJS.Platform }} [opts]\n* @returns {ShellCheck}\n*/\nfunction checkShell(command, { repo, platform = process.platform } = {}) {\n\tconst parsed = tokenizeShell(command);\n\tif (!parsed.ok) return parsed;\n\tif (!parsed.pipelines.length) return {\n\t\tok: false,\n\t\treason: \"comando vacío\"\n\t};\n\tconst ctx = {\n\t\trepo: repo || process.cwd(),\n\t\tplatform\n\t};\n\tfor (const pipeline of parsed.pipelines) for (const argv of pipeline) {\n\t\tconst name = argv[0].toLowerCase();\n\t\tif (argv[0].includes(\"=\")) return {\n\t\t\tok: false,\n\t\t\treason: `variables de entorno en el comando: ${argv[0]}`\n\t\t};\n\t\t/** @type {ShellCheck} */\n\t\tlet res;\n\t\tif (name === \"cd\" || name === \"set-location\") res = repo && argv[1] ? checkPath(argv[1], ctx) : {\n\t\t\tok: false,\n\t\t\treason: \"cd fuera del repo\"\n\t\t};\n\t\telse if (name === \"git\") res = checkGit(argv, ctx);\n\t\telse if (name === \"npx\" || name === \"diff-review\") res = isValidate(argv) ? { ok: true } : {\n\t\t\tok: false,\n\t\t\treason: `${argv.join(\" \")}`\n\t\t};\n\t\telse if (READ_COMMANDS.has(name)) res = checkReadCommand(name, argv, ctx);\n\t\telse res = checkReviewDirMkdir(argv, ctx) ?? {\n\t\t\tok: false,\n\t\t\treason: `${argv[0]} no está permitido`\n\t\t};\n\t\tif (!res.ok) return res;\n\t}\n\treturn { ok: true };\n}\n//#endregion\n//#region ../lib/acp-policy.mjs\n/**\n* Qué puede hacer el agente cuando corre por ACP. Cada `session/request_permission` pasa por acá: no hay nadie\n* mirando la terminal para aprobar, así que la política es una allowlist (leer, comandos de solo lectura y escribir\n* el JSON de salida en `.diff-review/`) y todo lo demás se rechaza.\n*\n* Ojo: el agente solo pide permiso para lo que *su* configuración no aprueba sola (p. ej. Claude Code aplica la\n* allowlist de `~/.claude/settings.json` antes de preguntar). Esto acota lo que pide, no lo que el usuario ya\n* habilitó en su agente.\n*/\n/**\n* @typedef {\"review\" | \"ask\" | \"edit\"} PolicyMode\n* review = generar el JSON; ask = preguntas (no puede escribir nada); edit = modificar el JSON.\n* @typedef {{ repo: string, outputFilename: string, mode: PolicyMode }} PolicyContext\n* @typedef {{\n* kind?: string | null,\n* title?: string | null,\n* rawInput?: unknown,\n* locations?: { path: string }[] | null,\n* content?: { type: string, path?: string }[] | null,\n* }} ToolCallLike\n* @typedef {{ allow: boolean, reason: string }} Decision\n*/\n/** @param {string} a @param {string} b */\nfunction samePath(a, b, platform = process.platform) {\n\tconst na = normalize(a);\n\tconst nb = normalize(b);\n\treturn platform === \"win32\" ? na.toLowerCase() === nb.toLowerCase() : na === nb;\n}\n/**\n* Resuelve symlinks cuando el path (o un ancestro) existe. Sin eso, un link dentro del repo\n* puede apuntar fuera y pasar `isInside` con solo `resolve`.\n* @param {string} path\n*/\nfunction canonicalPath(path) {\n\ttry {\n\t\treturn realpathSync(path);\n\t} catch {\n\t\tconst parts = [];\n\t\tlet cur = normalize(path);\n\t\tfor (;;) {\n\t\t\tconst parent = dirname(cur);\n\t\t\tif (!parent || parent === cur) return normalize(path);\n\t\t\tparts.unshift(basename(cur));\n\t\t\ttry {\n\t\t\t\treturn resolve(realpathSync(parent), ...parts);\n\t\t\t} catch {\n\t\t\t\tcur = parent;\n\t\t\t}\n\t\t}\n\t}\n}\n/** @param {string} child @param {string} root */\nfunction isInside(child, root, platform = process.platform) {\n\tconst c = normalize(canonicalPath(child));\n\tconst r = normalize(canonicalPath(root)).replace(/[\\\\/]+$/, \"\");\n\tconst [cc, rr] = platform === \"win32\" ? [c.toLowerCase(), r.toLowerCase()] : [c, r];\n\treturn cc === rr || cc.startsWith(`${rr}\\\\`) || cc.startsWith(`${rr}/`);\n}\n/** Paths que toca la tool call (`locations`, diffs de `content` y los campos típicos de `rawInput`). */\nfunction toolCallPaths(toolCall, repo) {\n\tconst raw = toolCall.rawInput && typeof toolCall.rawInput === \"object\" ? toolCall.rawInput : {};\n\tconst candidates = [\n\t\t...(toolCall.locations ?? []).map((l) => l?.path),\n\t\t...(toolCall.content ?? []).map((c) => c?.type === \"diff\" ? c.path : void 0),\n\t\traw.file_path,\n\t\traw.path,\n\t\traw.filePath,\n\t\traw.notebook_path\n\t];\n\tconst out = [];\n\tfor (const c of candidates) {\n\t\tif (typeof c !== \"string\" || !c.trim()) continue;\n\t\tconst abs = isAbsolute(c) ? c : resolve(repo, c);\n\t\tif (!out.some((p) => samePath(p, abs))) out.push(abs);\n\t}\n\treturn out;\n}\n/** @param {unknown} rawInput */\nfunction commandOf(rawInput) {\n\tif (!rawInput || typeof rawInput !== \"object\") return \"\";\n\tconst cmd = rawInput.command;\n\tif (Array.isArray(cmd)) return cmd.map(String).join(\" \");\n\treturn typeof cmd === \"string\" ? cmd : \"\";\n}\n/**\n* Comando de shell que la política evalúa (rawInput, backticks o título entero).\n* Cursor a veces envuelve el script con `@…@` en el título.\n* @param {ToolCallLike} toolCall\n*/\nfunction toolCallCommand(toolCall) {\n\tconst fromRaw = commandOf(toolCall.rawInput).trim();\n\tif (fromRaw) return fromRaw;\n\tconst title = String(toolCall.title ?? \"\").trim();\n\tconst tick = /^`([\\s\\S]+)`$/.exec(title);\n\tif (tick) return tick[1].trim();\n\tconst at = /^@\\s*([\\s\\S]*?)\\s*@$/.exec(title);\n\tif (at) return at[1].trim();\n\treturn title;\n}\n/**\n* Etiqueta corta del agente si el título no es el comando mismo.\n* @param {ToolCallLike} toolCall\n* @param {string} [command]\n*/\nfunction toolCallLabel(toolCall, command = toolCallCommand(toolCall)) {\n\tconst title = String(toolCall.title ?? \"\").trim();\n\tif (!title) return \"\";\n\tif (/^`[\\s\\S]+`$/.test(title) || /^@\\s*[\\s\\S]*?\\s*@$/.test(title)) return \"\";\n\tconst norm = (s) => s.replace(/\\s+/g, \" \").trim();\n\tif (command && norm(title) === norm(command)) return \"\";\n\tif (command && command.length >= 24 && title.includes(command.slice(0, 24))) return \"\";\n\treturn title;\n}\n/**\n* Motivo de denegación legible en la UI de permisos.\n* @param {string} reason\n*/\nfunction humanizePolicyReason(reason) {\n\tconst r = String(reason || \"\").trim();\n\tif (!r) return \"La política bloqueó este pedido.\";\n\tlet m;\n\tif (m = /^(.+?) no está permitido$/.exec(r)) return `La política bloqueó «${m[1]}» (no está en la allowlist de comandos).`;\n\tif (m = /^variables de entorno en el comando:\\s*(.*)$/s.exec(r)) return `La política interpretó parte del comando como variable de entorno (${String(m[1] || \"?\").trim().slice(0, 40)}) y lo bloqueó.`;\n\tif (m = /^path fuera del repo:\\s*(.*)$/s.exec(r)) return `El path queda fuera del repo: ${m[1]}`;\n\tif (m = /^lectura fuera del repo:\\s*(.*)$/s.exec(r)) return `Lectura fuera del repo: ${m[1]}`;\n\tif (m = /^opción global de git no permitida:\\s*(.*)$/s.exec(r)) return `Opción de git no permitida: ${m[1]}`;\n\tif (r.startsWith(\"git \")) return `Comando git no permitido por la política: ${r}`;\n\tif (r.startsWith(\"solo se puede escribir\") || r.includes(\"sin path\") || r.startsWith(\"modo pregunta\")) return r;\n\treturn `La política bloqueó el pedido: ${r}`;\n}\n/**\n* @param {ToolCallLike} toolCall\n* @param {PolicyContext} ctx\n* @returns {Decision}\n*/\nfunction decidePermission(toolCall, { repo, outputFilename, mode }) {\n\tconst kind = toolCall.kind ?? \"other\";\n\tconst paths = toolCallPaths(toolCall, repo);\n\tif (kind === \"read\" || kind === \"search\") {\n\t\tif (!paths.length) return {\n\t\t\tallow: false,\n\t\t\treason: `${kind === \"search\" ? \"búsqueda\" : \"lectura\"} sin path`\n\t\t};\n\t\tconst outside = paths.find((p) => !isInside(p, repo));\n\t\treturn outside ? {\n\t\t\tallow: false,\n\t\t\treason: `lectura fuera del repo: ${outside}`\n\t\t} : {\n\t\t\tallow: true,\n\t\t\treason: \"lectura\"\n\t\t};\n\t}\n\tif (kind === \"think\") return {\n\t\tallow: true,\n\t\treason: \"pensar\"\n\t};\n\tif (kind === \"execute\") {\n\t\tconst check = checkShell(toolCallCommand(toolCall), { repo });\n\t\treturn check.ok ? {\n\t\t\tallow: true,\n\t\t\treason: \"comando de solo lectura\"\n\t\t} : {\n\t\t\tallow: false,\n\t\t\treason: check.reason\n\t\t};\n\t}\n\tif (kind === \"edit\" || kind === \"delete\") {\n\t\tif (mode === \"ask\") return {\n\t\t\tallow: false,\n\t\t\treason: \"modo pregunta: no se edita nada\"\n\t\t};\n\t\tif (!paths.length) return {\n\t\t\tallow: false,\n\t\t\treason: `${kind === \"delete\" ? \"borrado\" : \"edición\"} sin path`\n\t\t};\n\t\tconst target = resolve(repo, outputRelPath(outputFilename));\n\t\tconst outside = paths.find((p) => !samePath(canonicalPath(p), canonicalPath(target)));\n\t\treturn outside ? {\n\t\t\tallow: false,\n\t\t\treason: `solo se puede escribir ${outputRelPath(outputFilename)} (no ${outside})`\n\t\t} : {\n\t\t\tallow: true,\n\t\t\treason: `escritura de ${outputRelPath(outputFilename)}`\n\t\t};\n\t}\n\treturn {\n\t\tallow: false,\n\t\treason: `${kind} no permitido: ${toolCall.title ?? \"?\"}`\n\t};\n}\n/**\n* Respuesta ACP para una decisión del usuario / política.\n* - allow + once → `allow_once` (la política se vuelve a evaluar en el próximo pedido).\n* - allow + always → `allow_always` si el agente la ofrece; si no, cae a `allow_once`.\n* @param {{ optionId: string, kind: string }[]} options\n* @param {boolean} allow\n* @param {{ always?: boolean }} [opts]\n*/\nfunction permissionOutcome(options, allow, opts = {}) {\n\tconst always = Boolean(opts.always);\n\tconst option = (allow ? always ? [\"allow_always\", \"allow_once\"] : [\"allow_once\"] : [\"reject_once\", \"reject_always\"]).map((kind) => options.find((o) => o.kind === kind)).find(Boolean);\n\treturn option ? { outcome: {\n\t\toutcome: \"selected\",\n\t\toptionId: option.optionId\n\t} } : { outcome: { outcome: \"cancelled\" } };\n}\n//#endregion\n//#region ../lib/agent-login.mjs\n/**\n* Login de agentes ACP: mensajes claros + abrir una terminal interactiva cuando se pueda.\n*/\n/**\n* @typedef {{ bin: string, args: string[], display: string }} LoginCommand\n*/\n/**\n* Comando de login interactivo por agente (null = no hay CLI de login, p. ej. Cursor app).\n* @param {string} agentId\n* @returns {LoginCommand | null}\n*/\nfunction loginCommand(agentId) {\n\tswitch (agentId) {\n\t\tcase \"claude\": return {\n\t\t\tbin: \"claude\",\n\t\t\targs: [\"/login\"],\n\t\t\tdisplay: \"claude /login\"\n\t\t};\n\t\tcase \"copilot\": return {\n\t\t\tbin: \"gh\",\n\t\t\targs: [\"auth\", \"login\"],\n\t\t\tdisplay: \"gh auth login\"\n\t\t};\n\t\tcase \"codex\": return {\n\t\t\tbin: \"codex\",\n\t\t\targs: [\"login\"],\n\t\t\tdisplay: \"codex login\"\n\t\t};\n\t\tcase \"gemini\": return {\n\t\t\tbin: \"gemini\",\n\t\t\targs: [],\n\t\t\tdisplay: \"gemini\"\n\t\t};\n\t\tdefault: return null;\n\t}\n}\n/** @param {string} text */\nfunction looksLikeAuthFailure(text) {\n\tconst s = String(text || \"\").toLowerCase();\n\treturn /(not\\s+)?auth|login|unauthor|not logged|sign[\\s-]?in|credentials|token.*(invalid|expired|missing)|please\\s+run/.test(s);\n}\n/**\n* Mensaje en español si el agente murió / falló por falta de login.\n* @param {string} agentId\n* @param {string} agentLabel\n* @param {string} detail\n* @returns {string | null}\n*/\nfunction authFailureMessage$1(agentId, agentLabel, detail) {\n\tif (!looksLikeAuthFailure(detail)) return null;\n\tconst cmd = loginCommand(agentId);\n\tif (agentId === \"cursor\") return `${agentLabel} no está autenticado. Iniciá sesión en la app de Cursor y reintentá.`;\n\tif (cmd) return `${agentLabel} no está autenticado. Corré \\`${cmd.display}\\` en una terminal y reintentá.`;\n\treturn `${agentLabel} no está autenticado. Revisá el login del agente y reintentá.`;\n}\n/**\n* Abre una terminal nueva con el login del agente (Windows / macOS / Linux).\n* @param {string} agentId\n* @returns {{ display: string }}\n*/\nfunction openLoginTerminal(agentId) {\n\tconst cmd = loginCommand(agentId);\n\tif (!cmd) throw new Error(agentId === \"cursor\" ? \"Cursor se autentica desde la app de escritorio, no desde una terminal.\" : \"Este agente no tiene un comando de login conocido.\");\n\tconst platform = process.platform;\n\tif (platform === \"win32\") spawn(\"cmd.exe\", [\n\t\t\"/c\",\n\t\t\"start\",\n\t\t`${cmd.bin} login`,\n\t\t\"cmd.exe\",\n\t\t\"/k\",\n\t\tcmd.bin,\n\t\t...cmd.args\n\t], {\n\t\tdetached: true,\n\t\tstdio: \"ignore\",\n\t\twindowsHide: false\n\t}).unref();\n\telse if (platform === \"darwin\") spawn(\"osascript\", [\"-e\", `tell application \"Terminal\" to do script ${JSON.stringify(`${cmd.bin} ${cmd.args.join(\" \")}`.trim())}`], {\n\t\tdetached: true,\n\t\tstdio: \"ignore\"\n\t}).unref();\n\telse {\n\t\tconst line = `${cmd.bin} ${cmd.args.join(\" \")}`.trim();\n\t\tconst tried = [\n\t\t\t[\"x-terminal-emulator\", [\n\t\t\t\t\"-e\",\n\t\t\t\t\"bash\",\n\t\t\t\t\"-lc\",\n\t\t\t\t`${line}; exec bash`\n\t\t\t]],\n\t\t\t[\"gnome-terminal\", [\n\t\t\t\t\"--\",\n\t\t\t\t\"bash\",\n\t\t\t\t\"-lc\",\n\t\t\t\t`${line}; exec bash`\n\t\t\t]],\n\t\t\t[\"konsole\", [\n\t\t\t\t\"-e\",\n\t\t\t\t\"bash\",\n\t\t\t\t\"-lc\",\n\t\t\t\t`${line}; exec bash`\n\t\t\t]],\n\t\t\t[\"xterm\", [\n\t\t\t\t\"-e\",\n\t\t\t\t\"bash\",\n\t\t\t\t\"-lc\",\n\t\t\t\t`${line}; exec bash`\n\t\t\t]]\n\t\t];\n\t\tlet ok = false;\n\t\tfor (const [bin, args] of tried) try {\n\t\t\tspawn(bin, args, {\n\t\t\t\tdetached: true,\n\t\t\t\tstdio: \"ignore\"\n\t\t\t}).unref();\n\t\t\tok = true;\n\t\t\tbreak;\n\t\t} catch {}\n\t\tif (!ok) throw new Error(`No pude abrir una terminal. Corré a mano: ${cmd.display}`);\n\t}\n\treturn { display: cmd.display };\n}\n/** @returns {string} */\nfunction modelsCachePath(home = homedir()) {\n\treturn join(home, \".diff-review\", \"models-cache.json\");\n}\n/**\n* @param {string} agentId\n* @param {{ home?: string, now?: number, ttlMs?: number }} [opts]\n* @returns {{ models: { value: string, name: string }[], currentModel: string, fetchedAt: string } | null}\n*/\nfunction readModelsCache(agentId, opts = {}) {\n\tconst id = String(agentId || \"\").trim();\n\tif (!id) return null;\n\tconst path = modelsCachePath(opts.home);\n\tlet root;\n\ttry {\n\t\troot = JSON.parse(readFileSync(path, \"utf8\"));\n\t} catch {\n\t\treturn null;\n\t}\n\tconst entry = root?.agents?.[id];\n\tif (!entry || !Array.isArray(entry.models)) return null;\n\tconst fetchedAt = Date.parse(String(entry.fetchedAt || \"\"));\n\tif (!Number.isFinite(fetchedAt)) return null;\n\tconst ttl = opts.ttlMs ?? 864e5;\n\tif ((opts.now ?? Date.now()) - fetchedAt > ttl) return null;\n\treturn {\n\t\tmodels: entry.models.filter((m) => m && typeof m.value === \"string\").map((m) => ({\n\t\t\tvalue: m.value,\n\t\t\tname: String(m.name ?? m.value)\n\t\t})),\n\t\tcurrentModel: String(entry.currentModel ?? \"\"),\n\t\tfetchedAt: new Date(fetchedAt).toISOString()\n\t};\n}\n/**\n* @param {string} agentId\n* @param {{ models: { value: string, name: string }[], currentModel?: string }} data\n* @param {{ home?: string, now?: number }} [opts]\n*/\nfunction writeModelsCache(agentId, data, opts = {}) {\n\tconst id = String(agentId || \"\").trim();\n\tif (!id || !Array.isArray(data?.models) || !data.models.length) return;\n\tconst path = modelsCachePath(opts.home);\n\tlet root = {\n\t\tversion: 1,\n\t\tagents: {}\n\t};\n\ttry {\n\t\tif (existsSync(path)) root = {\n\t\t\t...root,\n\t\t\t...JSON.parse(readFileSync(path, \"utf8\"))\n\t\t};\n\t} catch {}\n\tif (!root.agents || typeof root.agents !== \"object\") root.agents = {};\n\troot.agents[id] = {\n\t\tfetchedAt: new Date(opts.now ?? Date.now()).toISOString(),\n\t\tcurrentModel: String(data.currentModel ?? \"\"),\n\t\tmodels: data.models.map((m) => ({\n\t\t\tvalue: String(m.value),\n\t\t\tname: String(m.name ?? m.value)\n\t\t}))\n\t};\n\tmkdirSync(dirname(path), { recursive: true });\n\twriteFileSync(path, `${JSON.stringify(root, null, 2)}\\n`);\n}\n//#endregion\n//#region ../lib/acp.mjs\n/**\n* Sesión con un agente por ACP (Agent Client Protocol): JSON-RPC por stdin/stdout del proceso del agente.\n*\n* A diferencia de `runAgent` (una vuelta headless), el proceso queda vivo: la misma sesión sirve para generar la\n* review y después para las preguntas y los cambios que se le pidan desde la web. Cada pedido de permiso pasa por\n* `decide` (ver `acp-policy.mjs`): no hay nadie mirando una terminal para aprobar.\n*/\n/** El agente tiene un modo ACP declarado (no todos los agentes lo traen). */\nfunction supportsAcp(agent) {\n\treturn typeof agent?.def?.acp === \"function\";\n}\n/**\n* Opción de modelo (`configOptions` con id/categoría \"model\") de la respuesta de `session/new` o `session/load`.\n* @param {{ configOptions?: any[] | null }} response\n*/\nfunction modelConfig(response) {\n\tconst option = (response?.configOptions ?? []).find((o) => o?.category === \"model\" || o?.id === \"model\");\n\tif (!option || option.type !== \"select\") return null;\n\tconst flat = (option.options ?? []).flatMap((o) => Array.isArray(o?.options) ? o.options : [o]);\n\treturn {\n\t\tconfigId: String(option.id),\n\t\tcurrent: String(option.currentValue ?? \"\"),\n\t\toptions: flat.filter((o, i) => o && typeof o.value === \"string\" && flat.findIndex((x) => x?.value === o.value) === i).map((o) => ({\n\t\t\tvalue: o.value,\n\t\t\tname: String(o.name ?? o.value)\n\t\t}))\n\t};\n}\n/** Tiempo máximo para initialize + session/new|load (+ set model). */\nvar ACP_START_TIMEOUT_MS = 9e4;\n/**\n* Lanza el agente en modo ACP, negocia y abre (o retoma) una sesión.\n* @param {DetectedAgent} agent\n* @param {AcpSessionOptions} opts\n* @returns {Promise<AcpSession>}\n*/\nasync function startAcpSession(agent, opts) {\n\tif (!supportsAcp(agent)) throw new Error(`${agent.def.label} no tiene modo ACP.`);\n\tconst { file, args, env, sessionMeta } = agent.def.acp({ path: agent.path });\n\tconst child = spawnCommand(file, args, {\n\t\tcwd: opts.cwd,\n\t\tstdio: [\n\t\t\t\"pipe\",\n\t\t\t\"pipe\",\n\t\t\t\"pipe\"\n\t\t],\n\t\t...env ? { env: {\n\t\t\t...process.env,\n\t\t\t...env\n\t\t} } : {}\n\t});\n\tlet stderr = \"\";\n\tchild.stderr?.on(\"data\", (chunk) => {\n\t\tstderr = (stderr + String(chunk)).slice(-4e3);\n\t});\n\tchild.stdin?.on(\"error\", () => {});\n\tconst conn = acp.client({ name: \"diff-review\" }).onRequest(acp.methods.client.session.requestPermission, async (ctx) => {\n\t\tconst toolCall = ctx.params.toolCall;\n\t\tconst decision = safeDecide(opts.decide, toolCall);\n\t\tif (decision.allow) {\n\t\t\topts.onPermission?.(toolCall, decision);\n\t\t\treturn permissionOutcome(ctx.params.options, true);\n\t\t}\n\t\tlet allow = false;\n\t\tlet always = false;\n\t\tif (opts.onDeniedPermission) try {\n\t\t\tconst answer = await opts.onDeniedPermission(toolCall, decision);\n\t\t\tif (answer && typeof answer === \"object\") {\n\t\t\t\tallow = Boolean(answer.allow);\n\t\t\t\talways = Boolean(answer.always);\n\t\t\t} else allow = Boolean(answer);\n\t\t} catch {\n\t\t\tallow = false;\n\t\t\talways = false;\n\t\t}\n\t\tconst final = {\n\t\t\tallow,\n\t\t\treason: allow ? always ? \"permitido siempre\" : \"permitido por el usuario\" : decision.reason\n\t\t};\n\t\topts.onPermission?.(toolCall, final);\n\t\treturn permissionOutcome(ctx.params.options, allow, { always });\n\t}).onNotification(acp.methods.client.session.update, (ctx) => {\n\t\topts.onUpdate?.(ctx.params.update);\n\t}).connect(acp.ndJsonStream(Writable.toWeb(child.stdin), Readable.toWeb(child.stdout)));\n\tnew Promise((resolve) => {\n\t\tchild.once(\"error\", (err) => {\n\t\t\tstderr += `\\n${err.message}`;\n\t\t\tresolve(null);\n\t\t});\n\t\tchild.once(\"exit\", (code) => resolve(code));\n\t}).then((code) => {\n\t\tconn.close(/* @__PURE__ */ new Error(`${agent.def.label} terminó (código ${code ?? \"?\"}).`));\n\t\topts.onExit?.({\n\t\t\tcode,\n\t\t\tstderr\n\t\t});\n\t});\n\tconst close = () => {\n\t\tconn.close();\n\t\tif (child.exitCode == null) child.kill();\n\t};\n\tconst timeoutMs = Math.max(15e3, Number(opts.timeoutMs) || ACP_START_TIMEOUT_MS);\n\tlet timedOut = false;\n\tconst timer = setTimeout(() => {\n\t\ttimedOut = true;\n\t\tclose();\n\t}, timeoutMs);\n\ttry {\n\t\tconst init = await conn.agent.request(acp.methods.agent.initialize, {\n\t\t\tprotocolVersion: acp.PROTOCOL_VERSION,\n\t\t\tclientCapabilities: {\n\t\t\t\tfs: {\n\t\t\t\t\treadTextFile: false,\n\t\t\t\t\twriteTextFile: false\n\t\t\t\t},\n\t\t\t\tterminal: false\n\t\t\t},\n\t\t\tclientInfo: {\n\t\t\t\tname: \"diff-review\",\n\t\t\t\tversion: \"0\"\n\t\t\t}\n\t\t});\n\t\t/** Métodos donde el agente maneja el login por `authenticate` (no terminal interactiva). */\n\t\tconst agentAuthMethods = (Array.isArray(init.authMethods) ? init.authMethods : []).filter((m) => m && (!m.type || m.type === \"agent\") && m.id);\n\t\t/** Si session/new falla por auth, pedimos `authenticate` una vez y reintentamos. */\n\t\tconst tryAuthenticate = async () => {\n\t\t\tfor (const method of agentAuthMethods) try {\n\t\t\t\tawait conn.agent.request(acp.methods.agent.authenticate, { methodId: method.id });\n\t\t\t\treturn true;\n\t\t\t} catch {}\n\t\t\treturn false;\n\t\t};\n\t\tconst openNewSession = async () => {\n\t\t\ttry {\n\t\t\t\treturn await conn.agent.request(acp.methods.agent.session.new, {\n\t\t\t\t\tcwd: opts.cwd,\n\t\t\t\t\tmcpServers: [],\n\t\t\t\t\t...sessionMeta ? { _meta: sessionMeta } : {}\n\t\t\t\t});\n\t\t\t} catch (err) {\n\t\t\t\tconst msg = err instanceof Error ? err.message : String(err);\n\t\t\t\tif (agentAuthMethods.length && looksLikeAuthFailure(msg) && await tryAuthenticate()) return await conn.agent.request(acp.methods.agent.session.new, {\n\t\t\t\t\tcwd: opts.cwd,\n\t\t\t\t\tmcpServers: [],\n\t\t\t\t\t...sessionMeta ? { _meta: sessionMeta } : {}\n\t\t\t\t});\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t};\n\t\tlet sessionId = \"\";\n\t\tlet response;\n\t\tlet resumed = false;\n\t\tif (opts.resumeSessionId && init.agentCapabilities?.loadSession) try {\n\t\t\tresponse = await conn.agent.request(acp.methods.agent.session.load, {\n\t\t\t\tsessionId: opts.resumeSessionId,\n\t\t\t\tcwd: opts.cwd,\n\t\t\t\tmcpServers: [],\n\t\t\t\t...sessionMeta ? { _meta: sessionMeta } : {}\n\t\t\t});\n\t\t\tsessionId = opts.resumeSessionId;\n\t\t\tresumed = true;\n\t\t} catch {}\n\t\tif (!resumed) {\n\t\t\tresponse = await openNewSession();\n\t\t\tsessionId = response.sessionId;\n\t\t}\n\t\tconst models = modelConfig(response);\n\t\tlet currentModel = models?.current ?? \"\";\n\t\t/**\n\t\t* @param {string} model\n\t\t* @returns {Promise<{ currentModel: string, warning?: string }>}\n\t\t*/\n\t\tconst setModel = async (model) => {\n\t\t\tconst wanted = String(model || \"\").trim();\n\t\t\tif (!wanted || wanted === currentModel) return { currentModel };\n\t\t\tif (!models) return {\n\t\t\t\tcurrentModel,\n\t\t\t\twarning: `El agente no deja elegir el modelo por ACP; usa el suyo.`\n\t\t\t};\n\t\t\tif (!models.options.some((o) => o.value === wanted)) return {\n\t\t\t\tcurrentModel,\n\t\t\t\twarning: `El agente no ofrece el modelo \"${wanted}\"; sigue con \"${currentModel}\".`\n\t\t\t};\n\t\t\tawait conn.agent.request(acp.methods.agent.session.setConfigOption, {\n\t\t\t\tsessionId,\n\t\t\t\tconfigId: models.configId,\n\t\t\t\tvalue: wanted\n\t\t\t});\n\t\t\tcurrentModel = wanted;\n\t\t\treturn { currentModel };\n\t\t};\n\t\tlet modelWarning;\n\t\tconst initialWanted = String(opts.model || \"\").trim();\n\t\tif (initialWanted) {\n\t\t\tconst applied = await setModel(initialWanted);\n\t\t\tif (applied.warning) modelWarning = applied.warning;\n\t\t}\n\t\tclearTimeout(timer);\n\t\treturn {\n\t\t\tsessionId,\n\t\t\tresumed,\n\t\t\tmodels: models?.options ?? [],\n\t\t\tget currentModel() {\n\t\t\t\treturn currentModel;\n\t\t\t},\n\t\t\t...modelWarning ? { modelWarning } : {},\n\t\t\tsetModel,\n\t\t\tprompt: async (text) => {\n\t\t\t\tconst res = await conn.agent.request(acp.methods.agent.session.prompt, {\n\t\t\t\t\tsessionId,\n\t\t\t\t\tprompt: [{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t\treturn { stopReason: String(res.stopReason) };\n\t\t\t},\n\t\t\tcancel: () => conn.agent.notify(acp.methods.agent.session.cancel, { sessionId }),\n\t\t\tclose,\n\t\t\tclosed: conn.closed,\n\t\t\tstderrTail: () => stderr\n\t\t};\n\t} catch (err) {\n\t\tclearTimeout(timer);\n\t\tclose();\n\t\tconst tail = stderr.trim().split(/\\r?\\n/).slice(-8).join(\"\\n\");\n\t\tif (timedOut) {\n\t\t\tconst msg = `Timeout (${Math.round(timeoutMs / 1e3)}s) al lanzar ${agent.def.label}. ¿Está autenticado el CLI?`;\n\t\t\tthrow new Error(tail ? `${msg}\\n${tail}` : msg);\n\t\t}\n\t\tconst reason = err instanceof Error ? err.message : String(err);\n\t\tthrow new Error(tail ? `${reason}\\n${tail}` : reason);\n\t}\n}\n/**\n* Modelos ACP con caché en `~/.diff-review/models-cache.json` (TTL 24h).\n* @param {DetectedAgent} agent\n* @param {{ cwd: string, timeoutMs?: number, force?: boolean }} opts\n* @returns {Promise<{ models: ModelOption[], currentModel: string, fromCache: boolean }>}\n*/\nasync function listAcpModelsCached(agent, opts) {\n\tif (!Boolean(opts?.force)) {\n\t\tconst hit = readModelsCache(agent.def.id);\n\t\tif (hit) return {\n\t\t\tmodels: hit.models,\n\t\t\tcurrentModel: hit.currentModel,\n\t\t\tfromCache: true\n\t\t};\n\t}\n\tconst result = await listAcpModels(agent, opts);\n\tif (result.models.length) writeModelsCache(agent.def.id, result);\n\treturn {\n\t\t...result,\n\t\tfromCache: false\n\t};\n}\n/**\n* Modelos que ofrece el agente por ACP (abre una sesión, lee las opciones y la cierra; no manda ningún prompt).\n* @param {DetectedAgent} agent\n* @param {{ cwd: string, timeoutMs?: number }} opts\n* @returns {Promise<{ models: ModelOption[], currentModel: string }>}\n*/\nasync function listAcpModels(agent, { cwd, timeoutMs = 45e3 }) {\n\tconst ms = Math.max(5e3, Number(timeoutMs) || 45e3);\n\t/** @type {AcpSession | null} */\n\tlet session = null;\n\tconst pending = startAcpSession(agent, {\n\t\tcwd,\n\t\tdecide: () => ({\n\t\t\tallow: false,\n\t\t\treason: \"solo se listan modelos\"\n\t\t})\n\t}).then((s) => {\n\t\tsession = s;\n\t\treturn s;\n\t});\n\tconst timeout = new Promise((_, reject) => {\n\t\tsetTimeout(() => {\n\t\t\treject(/* @__PURE__ */ new Error(`Timeout (${Math.round(ms / 1e3)}s) al consultar modelos de ${agent.def.label}. Reintentá en unos segundos.`));\n\t\t}, ms);\n\t});\n\ttry {\n\t\tconst opened = await Promise.race([pending, timeout]);\n\t\tconst out = {\n\t\t\tmodels: opened.models,\n\t\t\tcurrentModel: opened.currentModel\n\t\t};\n\t\topened.close();\n\t\tsession = null;\n\t\treturn out;\n\t} catch (err) {\n\t\tpending.then((s) => s.close()).catch(() => {});\n\t\ttry {\n\t\t\tsession?.close();\n\t\t} catch {}\n\t\tthrow err;\n\t}\n}\n/** Un error en la política no puede colgar al agente esperando respuesta: se rechaza. */\nfunction safeDecide(decide, toolCall) {\n\ttry {\n\t\treturn decide(toolCall);\n\t} catch (err) {\n\t\treturn {\n\t\t\tallow: false,\n\t\t\treason: `error en la política: ${err instanceof Error ? err.message : err}`\n\t\t};\n\t}\n}\n//#endregion\n//#region ../lib/check-report.mjs\n/**\n* Valida un JSON de review y arma un texto accionable para el agente.\n*/\n/** Raíz del repo a partir del JSON (`.diff-review/foo.json` → parent, o la carpeta del archivo legacy). */\nfunction repoRootFromReviewFile(absJson) {\n\tconst dir = dirname(absJson);\n\treturn basename(dir) === \".diff-review\" ? dirname(dir) : dir;\n}\nvar MISSING_LIMIT = 40;\n/**\n* @param {unknown} payload\n* @param {string[]} [paths] rutas del diff (sin ignorados)\n* @returns {{ ok: boolean, errors: string[], notes: string[] }}\n*/\nfunction checkPayload(payload, paths = []) {\n\tconst errors = [...validateAgainst(REVIEW_SCHEMA, payload), ...reviewIssues(payload)];\n\tconst notes = [];\n\tconst known = (paths || []).map((p) => String(p || \"\").replaceAll(\"\\\\\", \"/\")).filter(Boolean);\n\tif (known.length) {\n\t\tconst blocks = Array.isArray(payload?.blocks) ? payload.blocks : [];\n\t\tconst findings = Array.isArray(payload?.findings) ? payload.findings : [];\n\t\tconst skippedPatterns = (Array.isArray(payload?.skipped) ? payload.skipped : []).map((s) => String(s?.file || \"\")).filter(Boolean);\n\t\tconst covers = (file) => {\n\t\t\tconst norm = String(file || \"\").replaceAll(\"\\\\\", \"/\");\n\t\t\tif (blocks.some((b) => String(b?.file || \"\").replaceAll(\"\\\\\", \"/\") === norm)) return true;\n\t\t\treturn skippedPatterns.some((pattern) => {\n\t\t\t\tconst p = pattern.replaceAll(\"\\\\\", \"/\");\n\t\t\t\treturn p === norm || globMatch(norm, p);\n\t\t\t});\n\t\t};\n\t\tfor (const block of blocks) {\n\t\t\tconst file = String(block?.file || \"\").replaceAll(\"\\\\\", \"/\");\n\t\t\tif (file && !known.includes(file)) errors.push(`el bloque ${block.id || file} apunta a un archivo que no está en el diff: ${file}`);\n\t\t}\n\t\tfor (const finding of findings) {\n\t\t\tconst file = String(finding?.file || \"\").replaceAll(\"\\\\\", \"/\");\n\t\t\tif (file && !known.includes(file)) errors.push(`el hallazgo ${finding.id || finding.what || file} apunta a un archivo fuera del diff: ${file}`);\n\t\t}\n\t\tconst missing = known.filter((file) => !covers(file));\n\t\tif (missing.length) {\n\t\t\tconst shown = missing.slice(0, MISSING_LIMIT);\n\t\t\tconst rest = missing.length - shown.length;\n\t\t\terrors.push(`quedaron ${missing.length} archivo(s) del diff sin bloque ni skipped: ${shown.join(\", \")}${rest > 0 ? ` … y ${rest} más` : \"\"}`);\n\t\t}\n\t} else notes.push(\"No contrasté cobertura contra git (sin lista de paths del diff).\");\n\treturn {\n\t\tok: errors.length === 0,\n\t\terrors,\n\t\tnotes\n\t};\n}\n/**\n* @param {string} filePath\n* @param {{ repo?: string, branch?: string, base?: string, cwd?: string, paths?: string[] }} [opts]\n* `paths`: lista ya conocida (p. ej. de la sesión); si viene, no se lee el `.diff` ni se llama a git.\n*/\nfunction checkReportFile(filePath, opts = {}) {\n\tconst cwd = opts.cwd || process.cwd();\n\tconst abs = isAbsolute(filePath) ? filePath : resolve(cwd, filePath);\n\tif (!existsSync(abs)) return {\n\t\tok: false,\n\t\tfile: abs,\n\t\terrors: [`No existe el archivo: ${abs}`],\n\t\tnotes: [],\n\t\tusage: true\n\t};\n\tlet payload;\n\ttry {\n\t\tpayload = decodePayload(readFileSync(abs, \"utf8\"));\n\t} catch (err) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\tfile: abs,\n\t\t\terrors: [err instanceof Error ? err.message : String(err)],\n\t\t\tnotes: []\n\t\t};\n\t}\n\tconst meta = payload && typeof payload === \"object\" ? payload.meta || {} : {};\n\tconst branch = String(opts.branch || meta.branch || \"\").trim();\n\tconst base = String(opts.base || meta.base || \"develop\").trim();\n\tconst repoHint = String(opts.repo || meta.repo || \"\").trim();\n\tconst repo = (repoHint && !/^(https?:\\/\\/|git@|ssh:\\/\\/)/i.test(repoHint) ? tryResolveGitRoot(repoHint) || (existsSync(repoHint) ? resolve(repoHint) : null) : null) || tryResolveGitRoot(cwd) || repoRootFromReviewFile(abs);\n\t/** @type {string[]} */\n\tlet paths = Array.isArray(opts.paths) ? opts.paths.map(String).filter(Boolean) : [];\n\t/** @type {string[]} */\n\tconst errors = [];\n\tif (paths.length) {} else if (!branch) errors.push(\"Falta meta.branch (o --branch) para contrastar el diff.\");\n\telse if (!repo) errors.push(\"No encontré un repo local (meta.repo, el directorio actual, o la carpeta del JSON). Sin eso no puedo verificar cobertura.\");\n\telse try {\n\t\tpaths = (loadBranchDiff({\n\t\t\trepo,\n\t\t\tbranch,\n\t\t\tbase,\n\t\t\tfilename: basename(abs)\n\t\t}).files || []).map((f) => f.path);\n\t} catch (err) {\n\t\terrors.push(`No pude listar el diff (${err instanceof Error ? err.message : String(err)}). Revisá meta.repo, meta.branch y meta.base, o el companion .diff.`);\n\t}\n\tconst result = checkPayload(payload, paths);\n\tconst allErrors = [...result.errors, ...errors];\n\treturn {\n\t\tok: allErrors.length === 0,\n\t\terrors: allErrors,\n\t\tnotes: result.notes,\n\t\tfile: abs\n\t};\n}\n/**\n* @param {string} file\n* @param {string} command\n* @param {{ ok: boolean, errors: string[], notes: string[] }} result\n*/\nfunction formatCheckReport(file, command, result) {\n\tif (result.ok) return `OK: ${file}${result.notes?.length ? `\\n${result.notes.map((n) => `Note: ${n}`).join(\"\\n\")}` : \"\"}\\nSchema and references passed. You can stop.`;\n\tconst problems = (result.errors || []).map((e) => `- ${e}`).join(\"\\n\");\n\tconst notes = (result.notes || []).map((n) => `Note: ${n}`).join(\"\\n\");\n\tconst lines = [\n\t\t`INVALID: ${file}`,\n\t\t\"\",\n\t\t\"The JSON is not ready. Edit this same file until the command prints OK. Do not create a new filename.\",\n\t\t\"\",\n\t\t\"Problems:\",\n\t\tproblems || \"- (unknown)\"\n\t];\n\tif (notes) lines.push(\"\", notes);\n\tlines.push(\"\", \"How to continue:\", \"- Fix every problem above in place. Keep existing meta/intent/groups/blocks/findings; only change what is wrong or missing.\", \"- Every diff path must appear in \\\"blocks\\\" or \\\"skipped\\\" (a skipped glob counts).\", \"- If a problem lists missing paths: ADD a block or a skipped entry for each exact path. Do not only bump meta.generatedAt, notes, or claim the file is already complete.\", \"- meta.agent and meta.model are required (product name and the exact model id you are running).\", \"- intent ≥40 chars; enums exactly as in the schema.\", \"- Human-readable strings in Spanish.\", `- Re-run exactly: \\`${command}\\``, \"- Stop only when that command prints OK.\");\n\treturn lines.join(\"\\n\");\n}\n//#endregion\n//#region ../lib/review-meta.mjs\n/**\n* Estampa en el JSON quién generó la review. La CLI lo sabe mejor que el modelo.\n*/\n/**\n* `agentSession` = la sesión ACP que generó la review, para seguir conversando con el agente desde la web.\n* @param {string} filePath\n* @param {{ agent?: string, model?: string, agentSession?: { agentId: string, sessionId: string, outputFilename: string } }} provenance\n* @returns {boolean}\n*/\nfunction stampReviewProvenance(filePath, { agent, model, agentSession } = {}) {\n\tconst agentName = String(agent || \"\").trim();\n\tconst modelId = String(model || \"\").trim();\n\tif (!agentName && !modelId && !agentSession) return false;\n\tlet payload;\n\ttry {\n\t\tpayload = decodePayload(readFileSync(filePath, \"utf8\"));\n\t} catch {\n\t\treturn false;\n\t}\n\tif (!payload || typeof payload !== \"object\" || Array.isArray(payload)) return false;\n\tconst current = payload.meta;\n\tconst meta = current && typeof current === \"object\" && !Array.isArray(current) ? { ...current } : {};\n\tif (agentName) meta.agent = agentName;\n\tif (modelId) meta.model = modelId;\n\tif (agentSession) meta.agentSession = { ...agentSession };\n\tpayload.meta = meta;\n\twriteFileSync(filePath, `${JSON.stringify(payload, null, 2)}\\n`, \"utf8\");\n\treturn true;\n}\n//#endregion\n//#region ../lib/prompt.mjs\n/**\n* Prompt de review para el agente (compartido CLI + UI).\n* Mantener alineado con el contrato de schema.json / validate.mjs.\n*/\nvar OUTPUT_SCHEMA_BLOCK = `{\n \"meta\": {\n \"source\": \"local|url\",\n \"repo\": \"<absolute path or git URL>\",\n \"branch\": \"<branch under review>\",\n \"base\": \"develop\",\n \"remoteUrl\": \"<origin URL; optional when source=url>\",\n \"generatedAt\": \"<ISO-8601 datetime; optional>\",\n \"agent\": \"<required: product name you are, e.g. Claude Code>\",\n \"model\": \"<required: exact model id you are running>\"\n },\n \"intent\": \"string\",\n \"groups\": [\n {\n \"id\": \"t1\",\n \"kind\": \"feat|fix|refactor|perf|test|chore|docs|infra\",\n \"title\": \"string, aim for ≤72 chars, imperative, no kind prefix\",\n \"intent\": \"string\"\n }\n ],\n \"blocks\": [\n {\n \"id\": \"b1\",\n \"group\": \"t1\",\n \"file\": \"relative/path.ext\",\n \"lines\": \"L40-58\",\n \"side\": \"new|old\",\n \"start\": 40,\n \"end\": 58,\n \"op\": \"add|mod|del|rename\",\n \"what\": \"string, aim for ≤120 chars: concrete change + effect\",\n \"why\": \"string, aim for ≤120 chars\",\n \"source\": \"code|commit|pr|issue|inferred\"\n }\n ],\n \"findings\": [\n {\n \"id\": \"f1\",\n \"class\": \"risk|quality\",\n \"severity\": \"high|med|low|nit\",\n \"blocking\": false,\n \"kind\": \"bug|race|auth|security|api-break|missing-test|perf|maintainability|docs|other\",\n \"file\": \"relative/path.ext\",\n \"line\": 87,\n \"block\": \"b1\",\n \"what\": \"string, aim for ≤120 chars: concrete cause + observable consequence (what fails / risk / cost)\",\n \"fix\": \"string, aim for ≤120 chars: suggested change + what the reader gains or avoids if applied\"\n }\n ],\n \"skipped\": [\n { \"file\": \"relative/path-or-glob\", \"reason\": \"generated|lockfile|format|vendored|binary|trivial|ignored\" }\n ],\n \"notes\": [\"optional short limitations\"]\n}`;\nvar RULES = `- Ids: themes use \\`t1\\`, \\`t2\\`, …; findings use \\`f1\\`, \\`f2\\`, …; blocks use \\`b1\\`, \\`b2\\`, …. Reference themes from blocks via \\`\"group\": \"t1\"\\`.\n- Coverage (hard): every path in the diff MUST appear in \"blocks\" and/or \"skipped\". Prefer a skipped glob when many files share one reason.\n- Do NOT invent files, hunks, or line ranges that are not in the diff.\n- Line anchors: \"lines\"/\"start\"/\"end\"/\"line\" MUST match the chosen \"side\" (\"new\" = post-image / right side of @@; \"old\" = pre-image, typically deletions). One block per coherent change span, not one per line. Point findings at that block; leave \"block\" empty only if cross-cutting.\n- Do NOT report: pre-existing code outside the diff; linter/formatter noise; naming/style prefs with no real consequence; intentional branch behavior; silenced lint rules; \"missing docs/coverage\" without a concrete broken scenario.\n- Quality findings must name a concrete cost, not a vague feeling.\n- Finding \"what\": state the concrete cause and the observable consequence (what fails, the risk, or the cost) — not only a symptom.\n- Finding \"fix\": state the suggested change and what the reader gains or avoids if they apply it.\n- Signal over volume: prefer fewer high-signal findings. Order findings by severity (high, then nit). Use \"nit\" sparingly.\n- \"blocking\": true ONLY if the branch should not merge as-is. Use only with class \"risk\".\n- When several read-only lookups are independent (files, searches), batch them in the same turn if your tools allow parallel calls.\n- Write human-readable strings (intent, title, what, why, fix, notes) in Spanish. Keep enums/ids/paths/JSON keys exactly as in the schema.\n- Length is a soft target, not a check: aim for title ≤72 characters and what/why/fix ≤120 characters. Prefer clarity over shortening. Longer text is still valid. Do not rewrite the file only to shorten it.`;\n/** @param {{ hasDiff?: boolean }} [ctx] */\nfunction workflowLocal(base, branch, ctx = {}) {\n\tif (ctx.hasDiff) return `Workflow:\n1. Read the three-dot diff from the path given in \"Precomputed git context\" below. Do not re-run \\`git diff\\` unless that file is missing.\n2. Read enough surrounding code (types, callers, tests) to judge behavior, not only the hunk lines.\n3. Emit the JSON file. Do not modify the repo.\n4. Validate it with the command in the output section. If it prints INVALID, follow \"How to continue\" and re-run until it prints OK.`;\n\treturn `Workflow:\n1. Resolve the merge-base of \\`${base}\\` and \\`${branch}\\`.\n2. Run exactly: \\`git diff ${base}...${branch}\\` (three-dot / merge-base diff). Do not use two-dot unless three-dot is impossible.\n3. Read enough surrounding code (types, callers, tests) to judge behavior, not only the hunk lines.\n4. Emit the JSON file. Do not modify the repo.\n5. Validate it with the command in the output section. If it prints INVALID, follow \"How to continue\" and re-run until it prints OK.`;\n}\n/** Comando que el agente debe correr (sobre `.diff-review/<nombre>`); npx por si el bin no está en PATH. */\nfunction validateCliCommand(filename) {\n\treturn `npx --yes @jpkme/diff-review validate ${outputRelPath(String(filename || \"diff-rev_<branchTip>_<baseTip>.json\").trim())}`;\n}\n/** @param {{ hasDiff?: boolean }} [ctx] */\nfunction workflowUrl(base, branch, ctx = {}) {\n\tif (ctx.hasDiff) return `Workflow:\n1. If the repo is not local, clone it (or use whatever access you have). Do not modify it.\n2. Read the three-dot diff from the path given in \"Precomputed git context\" below. Do not re-run \\`git diff\\` unless that file is missing.\n3. Read enough surrounding code (types, callers, tests) to judge behavior, not only the hunk lines.\n4. Emit the JSON file.\n5. Validate it with the command in the output section. If it prints INVALID, follow \"How to continue\" and re-run until it prints OK.`;\n\treturn `Workflow:\n1. If the repo is not local, clone it (or use whatever access you have). Do not modify it.\n2. Resolve the merge-base of \\`${base}\\` and \\`${branch}\\`.\n3. Run exactly: \\`git diff ${base}...${branch}\\` (three-dot / merge-base diff). Do not use two-dot unless three-dot is impossible.\n4. Read enough surrounding code (types, callers, tests) to judge behavior, not only the hunk lines.\n5. Emit the JSON file.\n6. Validate it with the command in the output section. If it prints INVALID, follow \"How to continue\" and re-run until it prints OK.`;\n}\n/** Workflow sin paso de validate por CLI (sesiones ACP: valida el server). */\nfunction workflowLocalAcp(ctx = {}) {\n\tif (ctx.hasDiff) return `Workflow:\n1. Read the three-dot diff from the path given in \"Precomputed git context\" below. Do not re-run \\`git diff\\` unless that file is missing.\n2. Read enough surrounding code (types, callers, tests) to judge behavior, not only the hunk lines.\n3. Write the JSON with your file Write/Edit tool (never shell redirection). Do not modify other repo files. The host validates when your turn ends — do not run the validate CLI.`;\n\treturn `Workflow:\n1. Resolve the merge-base of the base and branch named above, then run the three-dot \\`git diff base...branch\\`.\n2. Read enough surrounding code (types, callers, tests) to judge behavior, not only the hunk lines.\n3. Write the JSON with your file Write/Edit tool (never shell redirection). Do not modify other repo files. The host validates when your turn ends — do not run the validate CLI.`;\n}\nfunction workflowUrlAcp(ctx = {}) {\n\tif (ctx.hasDiff) return `Workflow:\n1. If the repo is not local, clone it (or use whatever access you have). Do not modify it.\n2. Read the three-dot diff from the path given in \"Precomputed git context\" below. Do not re-run \\`git diff\\` unless that file is missing.\n3. Read enough surrounding code (types, callers, tests) to judge behavior, not only the hunk lines.\n4. Write the JSON with your file Write/Edit tool (never shell redirection). The host validates when your turn ends — do not run the validate CLI.`;\n\treturn `Workflow:\n1. If the repo is not local, clone it (or use whatever access you have). Do not modify it.\n2. Resolve the merge-base, then run the three-dot \\`git diff base...branch\\`.\n3. Read enough surrounding code (types, callers, tests) to judge behavior, not only the hunk lines.\n4. Write the JSON with your file Write/Edit tool (never shell redirection). The host validates when your turn ends — do not run the validate CLI.`;\n}\n/**\n* @param {{ source?: string, repo?: string, branch?: string, base?: string, remoteUrl?: string }} meta\n*/\nfunction outputSchemaBlock(meta) {\n\tconst source = meta.source === \"url\" ? \"url\" : \"local\";\n\tconst repo = String(meta.repo || \"\").trim() || (source === \"url\" ? \"<git URL>\" : \"<absolute repo path>\");\n\tconst branch = String(meta.branch || \"\").trim() || \"<branch under review>\";\n\tconst base = String(meta.base || \"\").trim() || \"develop\";\n\tconst remoteUrl = String(meta.remoteUrl || \"\").trim() || (source === \"url\" ? repo : \"\");\n\tconst metaLines = [\n\t\t` \"source\": ${JSON.stringify(source)},`,\n\t\t` \"repo\": ${JSON.stringify(repo)},`,\n\t\t` \"branch\": ${JSON.stringify(branch)},`,\n\t\t` \"base\": ${JSON.stringify(base)},`\n\t];\n\tif (remoteUrl) metaLines.push(` \"remoteUrl\": ${JSON.stringify(remoteUrl)},`);\n\tmetaLines.push(` \"generatedAt\": \"<ISO-8601 datetime>\",`, ` \"agent\": \"<required: product name you are, e.g. Claude Code>\",`, ` \"model\": \"<required: exact model id you are running>\"`);\n\tconst metaBlock = `\"meta\": {\\n${metaLines.join(\"\\n\")}\\n }`;\n\treturn OUTPUT_SCHEMA_BLOCK.replace(/\"meta\": \\{[\\s\\S]*?\\n \\}/, metaBlock);\n}\n/**\n* Bloque de contexto git ya resuelto (diff en disco, tips, lista de archivos, ignores).\n* @param {{\n* diffRelPath?: string | null,\n* mergeBase?: string,\n* branchSha?: string,\n* baseSha?: string,\n* files?: Array<{ path: string, changeType?: string }>,\n* ignored?: string[],\n* ignoreGlobs?: string[],\n* }} ctx\n*/\nfunction formatPrecomputedContext(ctx) {\n\tconst lines = [\"Precomputed git context (do not rediscover):\"];\n\tif (ctx.mergeBase) lines.push(`- Merge-base SHA: \\`${ctx.mergeBase}\\``);\n\tif (ctx.branchSha) lines.push(`- Branch tip SHA: \\`${ctx.branchSha}\\``);\n\tif (ctx.baseSha) lines.push(`- Base tip SHA: \\`${ctx.baseSha}\\``);\n\tif (ctx.diffRelPath) lines.push(`- Diff file (relative to repo root): \\`${ctx.diffRelPath}\\` — read this file; do not re-run \\`git diff\\` unless it is missing.`);\n\tconst files = Array.isArray(ctx.files) ? ctx.files : [];\n\tif (files.length) {\n\t\tlines.push(`- Files in the diff (${files.length}):`);\n\t\tconst limit = 200;\n\t\tfor (const f of files.slice(0, limit)) {\n\t\t\tconst path = String(f?.path || \"\").trim();\n\t\t\tif (!path) continue;\n\t\t\tconst kind = String(f?.changeType || \"\").trim();\n\t\t\tlines.push(kind ? ` - ${kind}: ${path}` : ` - ${path}`);\n\t\t}\n\t\tif (files.length > limit) lines.push(` - … and ${files.length - limit} more`);\n\t}\n\tconst ignored = Array.isArray(ctx.ignored) ? ctx.ignored.filter(Boolean) : [];\n\tif (ignored.length) {\n\t\tlines.push(`- Ignored paths (excluded from the file list; if you mention them use \"skipped\" with reason \"ignored\"):`);\n\t\tfor (const p of ignored.slice(0, 40)) lines.push(` - ${p}`);\n\t\tif (ignored.length > 40) lines.push(` - … and ${ignored.length - 40} more`);\n\t}\n\tconst globs = Array.isArray(ctx.ignoreGlobs) ? ctx.ignoreGlobs.filter(Boolean) : [];\n\tif (globs.length) lines.push(`- Ignore globs (DEFAULT + config): ${globs.map((g) => `\\`${g}\\``).join(\", \")}`);\n\treturn lines.join(\"\\n\");\n}\n/**\n* @param {{ source?: string, repo?: string, branch?: string, base?: string, remoteUrl?: string }} meta\n* @param {{\n* outputFilename?: string,\n* acp?: boolean,\n* diffRelPath?: string | null,\n* mergeBase?: string,\n* branchSha?: string,\n* baseSha?: string,\n* files?: Array<{ path: string, changeType?: string }>,\n* ignored?: string[],\n* ignoreGlobs?: string[],\n* }} [opts]\n*/\nfunction buildPrompt(meta, opts = {}) {\n\tconst outputFilename = opts.outputFilename || makeOutputFilename();\n\tconst outputPath = outputRelPath(outputFilename);\n\tconst repo = String(meta.repo || \"\").trim() || (meta.source === \"url\" ? \"<git URL>\" : \"<absolute repo path>\");\n\tconst branch = String(meta.branch || \"\").trim() || \"<branch under review>\";\n\tconst base = String(meta.base || \"\").trim() || \"develop\";\n\tconst acp = Boolean(opts.acp);\n\tconst hasDiff = Boolean(String(opts.diffRelPath || \"\").trim());\n\tconst workflow = acp ? meta.source === \"url\" ? workflowUrlAcp({ hasDiff }) : workflowLocalAcp({ hasDiff }) : meta.source === \"url\" ? workflowUrl(base, branch, { hasDiff }) : workflowLocal(base, branch, { hasDiff });\n\tconst precomputed = formatPrecomputedContext({\n\t\tdiffRelPath: opts.diffRelPath,\n\t\tmergeBase: opts.mergeBase,\n\t\tbranchSha: opts.branchSha,\n\t\tbaseSha: opts.baseSha,\n\t\tfiles: opts.files,\n\t\tignored: opts.ignored,\n\t\tignoreGlobs: opts.ignoreGlobs\n\t});\n\tconst hasPrecomputed = hasDiff || opts.mergeBase || opts.branchSha || opts.baseSha || opts.files && opts.files.length || opts.ignored && opts.ignored.length || opts.ignoreGlobs && opts.ignoreGlobs.length;\n\tconst validateSection = acp ? `When done writing \\`${outputPath}\\`, stop. The host validates the JSON automatically and will send you any problems — do not run \\`npx … validate\\` yourself.` : `After writing the file, validate it (npx so it works even if \\`diff-review\\` is not on PATH):\n\n\\`${validateCliCommand(outputFilename)}\\`\n\n- Exit 0 and a line starting with \\`OK\\` means the JSON is acceptable. Then tell me that \\`${outputPath}\\` was written.\n- Exit 1 prints \\`INVALID\\`, the problems, and how to continue. Fix the same file and re-run that exact command until it prints OK. Do not stop before OK.`;\n\treturn `You are a senior code reviewer: strict but fair.\n\nRepo: ${repo}\nBranch under review: ${branch}\nBase (merge-base): ${base}\n\n${workflow}\n${hasPrecomputed ? `\\n${precomputed}\\n` : \"\"}\nRules:\n${RULES}\n\nWrite the result to \\`${outputPath}\\` (relative to the repo root; use forward slashes, never \\`\\\\\\`). The \\`${OUTPUT_DIR}/\\` folder is already created by the host — do not \\`mkdir\\` it.\n- If that file already exists: **Read it first**, then Edit/overwrite (or Write after Read). Many agents reject Write with \"File has not been read yet\" unless you Read that exact path first.\n- If it does not exist yet: Write is fine. Do NOT use shell redirection (\\`>\\`, \\`>>\\`, \\`Out-File\\`, \\`tee\\`, etc.) — those are rejected.\n- One JSON object only: first character \\`{\\`, last character \\`}\\`.\n- No prose before/after, no markdown fences.\n- Shape (copy \"meta\" source/repo/branch/base/remoteUrl as given; \"agent\" and \"model\" are required):\n\n${outputSchemaBlock(meta)}\n\nInclude \"meta\" with the source/repo/branch/base above (and origin \"remoteUrl\" when local). \"agent\" and \"model\" are required: set \"agent\" to the product you are (Claude Code, Cursor, Codex, Copilot, Gemini, …) and \"model\" to the exact model id you are running. Do not leave placeholders or omit them; validation fails without both. \"generatedAt\" is optional (ISO-8601 now).\n\nDo NOT include diffs or a \"files\" array. The tool loads the companion \\`.diff\\` (or computes with git if missing) when opening the report. Do not invent hunks or paste patches into the JSON.\n\n${validateSection}`;\n}\n//#endregion\n//#region ../lib/review-prep.mjs\n/**\n* Precomputa contexto git para el prompt de review (diff cache + lista de archivos).\n*/\n/**\n* Cachea el three-dot diff y arma las opciones de `buildPrompt` (tips, files, ignores).\n* @param {{\n* repo: string,\n* branch: string,\n* base?: string,\n* outputFilename: string,\n* acp?: boolean,\n* }} input\n*/\nfunction prepareReviewPromptOpts(input) {\n\tconst repo = String(input.repo || \"\").trim();\n\tconst branch = String(input.branch || \"\").trim();\n\tconst base = String(input.base || \"develop\").trim() || \"develop\";\n\tconst outputFilename = String(input.outputFilename || \"\").trim();\n\tif (!repo || !branch || !outputFilename) throw new Error(\"prepareReviewPromptOpts requiere repo, branch y outputFilename.\");\n\tensureReviewDir(repo);\n\twriteDiffCache(repo, outputFilename, {\n\t\tbranch,\n\t\tbase\n\t});\n\tconst cached = readDiffCache(repo, outputFilename);\n\tlet extracted;\n\ttry {\n\t\textracted = extractBranchDiff({\n\t\t\trepo,\n\t\t\tbranch,\n\t\t\tbase,\n\t\t\t...cached ? { cachedDiff: cached } : {}\n\t\t});\n\t} catch {\n\t\textracted = extractBranchDiff({\n\t\t\trepo,\n\t\t\tbranch,\n\t\t\tbase\n\t\t});\n\t}\n\tconst config = loadReviewConfig(repo);\n\tconst diffRelPath = cached ? outputRelPath(outputFilename).replace(/\\.json$/i, \".diff\") : null;\n\treturn {\n\t\toutputFilename,\n\t\tacp: Boolean(input.acp),\n\t\tdiffRelPath,\n\t\tmergeBase: extracted.mergeBase || void 0,\n\t\tbranchSha: extracted.branchSha || void 0,\n\t\tbaseSha: extracted.baseSha || void 0,\n\t\tfiles: (extracted.files || []).map((f) => ({\n\t\t\tpath: f.path,\n\t\t\tchangeType: f.changeType\n\t\t})),\n\t\tignored: extracted.context?.ignored || [],\n\t\tignoreGlobs: config.ignore\n\t};\n}\n//#endregion\n//#region src/lib/report/agent-events.ts\n/**\n* Aplica un evento a la lista: un `text` con el mismo `seq` que el último es la continuación de ese chunk.\n*/\nfunction applyEvent(events, event) {\n\tconst last = events[events.length - 1];\n\tif (last && last.seq === event.seq && last.type === \"text\" && event.type === \"text\") return [...events.slice(0, -1), {\n\t\t...last,\n\t\ttext: last.text + event.text\n\t}];\n\tif (event.type === \"tool\") {\n\t\tconst i = events.findIndex((e) => e.type === \"tool\" && e.id === event.id);\n\t\tif (i >= 0) {\n\t\t\tconst prev = events[i];\n\t\t\tconst merged = {\n\t\t\t\t...prev,\n\t\t\t\ttitle: event.title || prev.title,\n\t\t\t\tkind: event.kind || prev.kind,\n\t\t\t\tstatus: event.status || prev.status\n\t\t\t};\n\t\t\treturn [\n\t\t\t\t...events.slice(0, i),\n\t\t\t\tmerged,\n\t\t\t\t...events.slice(i + 1)\n\t\t\t];\n\t\t}\n\t}\n\tif (event.type === \"permission\") {\n\t\tconst i = events.findIndex((e) => e.type === \"permission\" && e.requestId === event.requestId);\n\t\tif (i >= 0) return [\n\t\t\t...events.slice(0, i),\n\t\t\tevent,\n\t\t\t...events.slice(i + 1)\n\t\t];\n\t}\n\treturn [...events, event];\n}\n//#endregion\n//#region src/lib/server/agent-sessions.ts\n/**\n* Sesiones con agentes por ACP, del lado del server: el server es dueño del proceso del agente y la web lo sigue\n* por SSE (`/api/agent/[id]/events`). Una sesión genera la review y después queda viva para preguntas y cambios.\n*\n* Los procesos viven en memoria; lo que tiene que sobrevivir va a `.diff-review/` del repo: el JSON, el diff y la\n* sesión del agente (`<nombre>.session.json`). Para chatear sobre un reporte se retoma esa sesión\n* (`session/load`); si no se puede (se borró, otro agente, otra máquina) se abre una nueva y el primer mensaje le\n* pasa el contexto: repo, branch, base y dónde están el diff y el JSON.\n*/\n/** Para que el agente no gaste turnos en comandos que la política va a rechazar. */\nvar TOOL_RULES = \"Tool rules for this session: read files with your file tools (read/search/glob). For the review JSON path: use forward slashes (e.g. .diff-review/foo.json). If that file already exists, Read it first, then Edit/Write — Write fails with \\\"File has not been read yet\\\" unless you Read that exact path. Never shell redirection (>, >>, Out-File, tee). The .diff-review/ folder already exists — do not mkdir it. In the terminal only read-only commands run (git diff/log/show/blame/…, cat, head, tail, grep, rg, find, ls, wc, sed -n). No redirections to files, no command substitution, no installs, no network. Anything else is rejected automatically: do not retry the same rejected command; use the file tool or another read-only way.\";\n/**\n* En estas sesiones valida el server al terminar cada turno (y le devuelve los errores al agente): correr el\n* validate por npx es lento y puede resolver otra versión del paquete.\n*/\nvar SERVER_VALIDATES = \"Note: in this session diff-review validates the JSON automatically when your turn ends and sends you any problems. Do not run the validate command yourself.\";\n/** Sin actividad por este tiempo se cierra el proceso del agente (se retoma con `session/load`). */\nvar IDLE_CLOSE_MS = 1800 * 1e3;\nvar MAX_EVENTS = 4e3;\n/** Si el usuario no responde un permiso pendiente, se rechaza para no colgar el turno. */\nvar PERMISSION_TIMEOUT_MS = 120 * 1e3;\nvar sessions = /* @__PURE__ */ new Map();\nprocess.once(\"exit\", () => {\n\tfor (const entry of sessions.values()) entry.acp?.close();\n});\nfunction listAcpAgents() {\n\treturn detectAgents().filter(supportsAcp).map((a) => ({\n\t\tid: a.def.id,\n\t\tlabel: a.def.label,\n\t\tpath: a.path,\n\t\tmodels: modelChoices(a.def).options\n\t}));\n}\nvar modelsCache = /* @__PURE__ */ new Map();\n/**\n* Modelos que ofrece el agente por ACP (abre una sesión de prueba; tarda unos segundos).\n* Solo cachea listas no vacías. `force` invalida la caché. Vacío o error → se puede reintentar.\n*/\nfunction agentModels(agentId, cwd, opts) {\n\tif (opts?.force) modelsCache.delete(agentId);\n\tlet hit = modelsCache.get(agentId);\n\tif (!hit) {\n\t\tconst agent = findAgent(agentId);\n\t\thit = listAcpModelsCached(agent, {\n\t\t\tcwd,\n\t\t\tforce: Boolean(opts?.force)\n\t\t}).then((result) => {\n\t\t\tif (!result.models.length) modelsCache.delete(agentId);\n\t\t\tconst { fromCache: _fromCache, ...rest } = result;\n\t\t\treturn rest;\n\t\t}).catch((err) => {\n\t\t\tmodelsCache.delete(agentId);\n\t\t\tconst raw = err instanceof Error ? err.message : String(err);\n\t\t\tconst auth = authFailureMessage(agentId, agent.def.label, raw);\n\t\t\tthrow new Error(auth || raw);\n\t\t});\n\t\tmodelsCache.set(agentId, hit);\n\t}\n\treturn hit;\n}\nfunction findAgent(agentId) {\n\tconst agent = detectAgents().find((a) => a.def.id === agentId);\n\tif (!agent) throw new Error(`No encontré el agente \"${agentId}\" instalado.`);\n\tif (!supportsAcp(agent)) throw new Error(`${agent.def.label} no tiene modo ACP.`);\n\treturn agent;\n}\nfunction info(entry) {\n\tconst { id, agentId, agentLabel, model, repo, branch, base, outputFilename, acpSessionId, status, busy, statusMessage, sessionAllowDenied } = entry;\n\treturn {\n\t\tid,\n\t\tagentId,\n\t\tagentLabel,\n\t\tmodel,\n\t\trepo,\n\t\tbranch,\n\t\tbase,\n\t\toutputFilename,\n\t\tacpSessionId,\n\t\tstatus,\n\t\tbusy,\n\t\tsessionTrust: Boolean(sessionAllowDenied),\n\t\t...statusMessage ? { statusMessage } : {}\n\t};\n}\nfunction authFailureMessage(agentId, agentLabel, detail) {\n\treturn authFailureMessage$1(agentId, agentLabel, detail);\n}\n/** Abre una terminal con el login del agente (Claude `/login`, `gh auth login`, …). */\nfunction openAgentLogin(agentId) {\n\treturn openLoginTerminal(String(agentId || \"\"));\n}\n/** Escribe seed (JSON + .diff) en `.diff-review/` para que el agente los lea. */\nfunction materializeSeed(entry) {\n\tconst seed = entry.seed;\n\tif (!seed) return;\n\ttry {\n\t\tensureReviewDir(entry.repo);\n\t\tconst paths = companionPaths(entry.repo, entry.outputFilename);\n\t\tif (seed.payload !== void 0) writeFileSync(paths.json, `${JSON.stringify(seed.payload, null, 2)}\\n`);\n\t\tif (typeof seed.diff === \"string\" && seed.diff.length) writeDiffText(entry.repo, entry.outputFilename, seed.diff);\n\t\telse writeDiffCache(entry.repo, entry.outputFilename, {\n\t\t\tbranch: entry.branch,\n\t\t\tbase: entry.base\n\t\t});\n\t} catch {}\n}\n/** Prefijo del primer mensaje cuando la sesión ACP es nueva. */\nfunction contextPreamble(entry) {\n\tmaterializeSeed(entry);\n\tconst paths = companionPaths(entry.repo, entry.outputFilename);\n\tconst jsonRel = outputRelPath(entry.outputFilename);\n\tconst diffRel = `${outputRelPath(entry.outputFilename).replace(/\\.json$/i, \"\")}.diff`;\n\tconst hasJson = existsSync(paths.json);\n\tconst hasDiff = existsSync(paths.diff);\n\treturn [\n\t\t\"Context for this chat (new agent session — read these files before answering):\",\n\t\t`- Repo: ${entry.repo}`,\n\t\t`- Branch under review: ${entry.branch}`,\n\t\t`- Base: ${entry.base}`,\n\t\thasJson ? `- Review JSON (relative to repo root): \\`${jsonRel}\\` — read this file.` : `- Review JSON: not available on disk (no seed/payload was provided). Say so if you need it.`,\n\t\thasDiff ? `- Diff (relative to repo root): \\`${diffRel}\\` — read this file.` : `- Diff file: not available on disk (no seed/diff and git cache failed). Say so if you need it.`,\n\t\t\"\",\n\t\t\"User message:\"\n\t].join(\"\\n\");\n}\nfunction permissionReasonLabel(allow, scope, deniedReason) {\n\tif (!allow) return deniedReason;\n\tif (scope === \"always\") return \"permitido siempre\";\n\tif (scope === \"session\") return \"permitido en esta sesión\";\n\treturn \"permitido una vez\";\n}\nfunction askUserPermission(entry, toolCall, decision) {\n\tif (entry.sessionAllowDenied) return Promise.resolve({\n\t\tallow: true,\n\t\talways: false\n\t});\n\tconst requestId = crypto.randomUUID();\n\tconst kind = toolCall.kind || \"\";\n\tconst command = toolCallCommand(toolCall);\n\tconst title = toolCallLabel(toolCall, command) || (command ? \"\" : toolCall.title || kind || \"herramienta\");\n\tconst reason = humanizePolicyReason(decision.reason);\n\tconst base = {\n\t\trequestId,\n\t\ttitle,\n\t\tkind,\n\t\treason,\n\t\tcommand: command || void 0\n\t};\n\temit(entry, {\n\t\ttype: \"permission\",\n\t\t...base,\n\t\tallow: false,\n\t\tpending: true\n\t});\n\treturn new Promise((resolve) => {\n\t\tconst timer = setTimeout(() => {\n\t\t\tentry.pendingPermissions.delete(requestId);\n\t\t\temit(entry, {\n\t\t\t\ttype: \"permission\",\n\t\t\t\t...base,\n\t\t\t\treason: \"tiempo agotado\",\n\t\t\t\tallow: false,\n\t\t\t\tpending: false\n\t\t\t});\n\t\t\tresolve({ allow: false });\n\t\t}, PERMISSION_TIMEOUT_MS);\n\t\ttimer.unref?.();\n\t\tentry.pendingPermissions.set(requestId, {\n\t\t\tresolve: (allow, opts) => {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tentry.pendingPermissions.delete(requestId);\n\t\t\t\tconst scope = opts?.scope ?? \"once\";\n\t\t\t\tif (allow && (scope === \"session\" || scope === \"always\")) entry.sessionAllowDenied = true;\n\t\t\t\temit(entry, {\n\t\t\t\t\ttype: \"permission\",\n\t\t\t\t\t...base,\n\t\t\t\t\treason: permissionReasonLabel(allow, scope, reason),\n\t\t\t\t\tallow,\n\t\t\t\t\tpending: false,\n\t\t\t\t\tquiet: opts?.quiet\n\t\t\t\t});\n\t\t\t\tresolve({\n\t\t\t\t\tallow,\n\t\t\t\t\talways: allow && scope === \"always\"\n\t\t\t\t});\n\t\t\t},\n\t\t\ttimer\n\t\t});\n\t});\n}\nfunction sessionInfo(id) {\n\tconst entry = sessions.get(id);\n\treturn entry ? info(entry) : null;\n}\n/**\n* Con la CLI mirando (`DIFF_REVIEW_MIRROR=1`), solo fallos duros a la terminal.\n* El progreso (tools, permisos, mensajes) vive en la web.\n*/\nfunction mirror(_entry, event) {\n\tif (process.env.DIFF_REVIEW_MIRROR !== \"1\") return;\n\tif (event.type === \"status\" && event.status === \"error\") console.log(`✗ ${event.message || \"error del agente\"}`);\n\telse if (event.type === \"review\" && event.ok) console.log(`✓ JSON válido: ${event.filename}`);\n}\nfunction emit(entry, event) {\n\tlet seq;\n\tif (event.type === \"text\" && entry.textSeq?.kind === event.kind) seq = entry.textSeq.seq;\n\telse {\n\t\tseq = ++entry.seq;\n\t\tentry.textSeq = event.type === \"text\" ? {\n\t\t\tkind: event.kind,\n\t\t\tseq\n\t\t} : null;\n\t}\n\tconst full = {\n\t\t...event,\n\t\tseq\n\t};\n\tmirror(entry, event);\n\tentry.events = applyEvent(entry.events, full);\n\tif (entry.events.length > MAX_EVENTS) entry.events = entry.events.slice(-4e3);\n\tfor (const listener of entry.listeners) listener(full);\n}\nfunction setStatus(entry, status, message) {\n\tentry.status = status;\n\tif (status === \"error\") entry.statusMessage = message || entry.statusMessage || \"Error del agente.\";\n\telse if (message !== void 0) delete entry.statusMessage;\n\temit(entry, {\n\t\ttype: \"status\",\n\t\tstatus,\n\t\t...message || status === \"error\" ? { message: message || entry.statusMessage } : {}\n\t});\n}\n/** SessionUpdate de ACP → evento de la web (lo que no se muestra se descarta). */\nfunction toEvent(update) {\n\tswitch (update.sessionUpdate) {\n\t\tcase \"agent_message_chunk\":\n\t\tcase \"agent_thought_chunk\": {\n\t\t\tconst content = update.content;\n\t\t\tif (content.type !== \"text\" || !content.text) return null;\n\t\t\treturn {\n\t\t\t\ttype: \"text\",\n\t\t\t\tkind: update.sessionUpdate === \"agent_message_chunk\" ? \"message\" : \"thought\",\n\t\t\t\ttext: content.text\n\t\t\t};\n\t\t}\n\t\tcase \"tool_call\":\n\t\tcase \"tool_call_update\": return {\n\t\t\ttype: \"tool\",\n\t\t\tid: update.toolCallId,\n\t\t\ttitle: update.title ?? \"\",\n\t\t\tkind: update.kind ?? \"\",\n\t\t\tstatus: update.status ?? \"\"\n\t\t};\n\t\tcase \"plan\": return {\n\t\t\ttype: \"plan\",\n\t\t\tentries: update.entries.map((e) => ({\n\t\t\t\tcontent: e.content,\n\t\t\t\tstatus: e.status\n\t\t\t}))\n\t\t};\n\t\tdefault: return null;\n\t}\n}\nfunction scheduleIdleClose(entry) {\n\tif (entry.idleTimer) clearTimeout(entry.idleTimer);\n\tentry.idleTimer = setTimeout(() => {\n\t\tif (entry.busy || !entry.acp) return;\n\t\tentry.acp.close();\n\t\tentry.acp = null;\n\t}, IDLE_CLOSE_MS);\n\tentry.idleTimer.unref?.();\n}\n/** Aplica el modelo pedido a la sesión ACP viva (o no-op si ya está). */\nasync function applyAcpModel(entry, acp, model) {\n\tconst wanted = String(model || \"\").trim();\n\tif (!wanted) return acp;\n\tconst result = await acp.setModel(wanted);\n\tif (result.currentModel && !result.currentModel.startsWith(\"default\")) entry.model = result.currentModel;\n\tif (result.warning) emit(entry, {\n\t\ttype: \"status\",\n\t\tstatus: entry.status,\n\t\tmessage: result.warning\n\t});\n\treturn acp;\n}\n/** Proceso del agente vivo para esta entrada: lo lanza, o lo relanza retomando la sesión. */\nasync function ensureAcp(entry, model) {\n\tif (entry.acp) return applyAcpModel(entry, entry.acp, model);\n\tif (entry.starting) return applyAcpModel(entry, await entry.starting, model);\n\tentry.starting = startAcpSession(entry.agent, {\n\t\tcwd: entry.repo,\n\t\tmodel,\n\t\tresumeSessionId: entry.acpSessionId || void 0,\n\t\tdecide: (toolCall) => decidePermission(toolCall, {\n\t\t\trepo: entry.repo,\n\t\t\toutputFilename: entry.outputFilename,\n\t\t\tmode: entry.mode\n\t\t}),\n\t\tonUpdate: (update) => {\n\t\t\tif (!entry.acp && entry.acpSessionId) return;\n\t\t\tconst event = toEvent(update);\n\t\t\tif (event) emit(entry, event);\n\t\t},\n\t\tonDeniedPermission: (toolCall, decision) => askUserPermission(entry, toolCall, decision),\n\t\tonPermission: (toolCall, decision) => {\n\t\t\tif (decision.allow) return;\n\t\t\tentry.rejections.push(`${toolCall.title || toolCall.kind || \"herramienta\"} (${decision.reason})`);\n\t\t},\n\t\tonExit: ({ code, stderr }) => {\n\t\t\tconst wasBusy = entry.busy;\n\t\t\tentry.acp = null;\n\t\t\tif (wasBusy) {\n\t\t\t\tentry.busy = false;\n\t\t\t\tconst auth = authFailureMessage(entry.agentId, entry.agentLabel, stderr);\n\t\t\t\tif (auth) {\n\t\t\t\t\tsetStatus(entry, \"error\", auth);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst raw = stderr.trim() || `código ${code ?? \"?\"}`;\n\t\t\t\tconst authFromCode = authFailureMessage(entry.agentId, entry.agentLabel, raw);\n\t\t\t\tif (authFromCode) {\n\t\t\t\t\tsetStatus(entry, \"error\", authFromCode);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst tail = stderr.trim().split(/\\r?\\n/).slice(-3).join(\" · \");\n\t\t\t\tsetStatus(entry, \"error\", `${entry.agentLabel} terminó (código ${code ?? \"?\"}). ${tail}`.trim());\n\t\t\t}\n\t\t}\n\t}).then((acp) => {\n\t\tconst wanted = entry.acpSessionId;\n\t\tentry.acp = acp;\n\t\tentry.acpSessionId = acp.sessionId;\n\t\tif (wanted && !acp.resumed) {\n\t\t\tentry.needsContext = true;\n\t\t\temit(entry, {\n\t\t\t\ttype: \"status\",\n\t\t\t\tstatus: entry.status,\n\t\t\t\tmessage: \"No pude retomar la sesión anterior del agente: abro una nueva y le paso el contexto de la review.\"\n\t\t\t});\n\t\t}\n\t\ttry {\n\t\t\twriteSessionRef(entry.repo, entry.outputFilename, {\n\t\t\t\tagentId: entry.agentId,\n\t\t\t\tsessionId: acp.sessionId,\n\t\t\t\t...entry.model ? { model: entry.model } : {}\n\t\t\t});\n\t\t} catch {}\n\t\tif (acp.currentModel && !acp.currentModel.startsWith(\"default\")) entry.model = acp.currentModel;\n\t\tif (acp.modelWarning) emit(entry, {\n\t\t\ttype: \"status\",\n\t\t\tstatus: entry.status,\n\t\t\tmessage: acp.modelWarning\n\t\t});\n\t\treturn acp;\n\t}).finally(() => {\n\t\tentry.starting = null;\n\t});\n\treturn applyAcpModel(entry, await entry.starting, model);\n}\nfunction mtime(path) {\n\ttry {\n\t\treturn statSync(path).mtimeMs;\n\t} catch {\n\t\treturn 0;\n\t}\n}\n/** Cuántas veces el server le pide solo al agente corregir/escribir el JSON antes de cortar con Reintentar. */\nvar OUTPUT_AUTO_RETRIES = 2;\n/**\n* Después de un turno que podía escribir el JSON: validarlo, estamparle la sesión y, si quedó mal, pedirle al\n* agente que lo corrija (hasta `OUTPUT_AUTO_RETRIES` veces).\n*/\nfunction checkEntryReport(entry) {\n\tconst path = companionPaths(entry.repo, entry.outputFilename).json;\n\tif (!existsSync(path)) return null;\n\treturn {\n\t\tpath,\n\t\tresult: checkReportFile(path, {\n\t\t\trepo: entry.repo,\n\t\t\tbranch: entry.branch,\n\t\t\tbase: entry.base,\n\t\t\t...entry.diffPaths?.length ? { paths: entry.diffPaths } : {}\n\t\t})\n\t};\n}\n/** Prompt cuando el JSON existe pero no pasa validación (auto-fix o Reintentar). */\nfunction invalidJsonFixPrompt(entry, path, result) {\n\treturn `${formatCheckReport(path, validateCliCommand(entry.outputFilename), result)}\n\nCritical: do NOT only bump meta.generatedAt or rewrite notes. Edit \\`${outputRelPath(entry.outputFilename).replace(/\\\\/g, \"/\")}\\` so every problem above is fixed (add blocks or skipped for each missing path). Do not claim success until coverage is complete.\n\n${TOOL_RULES}\n\n${SERVER_VALIDATES}`;\n}\nfunction noWriteFollowUpPrompt(entry) {\n\tconst rel = outputRelPath(entry.outputFilename);\n\tconst rejected = entry.rejections.length ? `These commands were rejected by diff-review's policy and did not run:\\n${entry.rejections.slice(-5).map((r) => `- ${r}`).join(\"\\n\")}\\n\\n` : \"\";\n\tconst posixRel = rel.replace(/\\\\/g, \"/\");\n\tconst existing = checkEntryReport(entry);\n\treturn `${rejected}Your turn ended without writing \\`${posixRel}\\` in this turn (mtime must change now). The user did not stop you.\n${existing && !existing.result.ok ? `\\nThe file on disk is also INVALID — fix these when you Write/Edit (do not only bump generatedAt):\\n${(existing.result.errors || []).map((e) => `- ${e}`).join(\"\\n\")}\\n` : \"\"}\nDo this now:\n1. Read \\`${posixRel}\\` if it exists (required before Write/Edit on an existing file).\n2. Edit or Write the full review JSON to that same path (forward slashes only).\nDo NOT mkdir, and do NOT use shell redirection. Do not claim success just because an older file is present — overwrite it.\n\n${TOOL_RULES}\n\n${SERVER_VALIDATES}`;\n}\nasync function checkOutput(entry, since, retriesLeft) {\n\tconst path = companionPaths(entry.repo, entry.outputFilename).json;\n\tif (!(existsSync(path) && mtime(path) >= since)) {\n\t\tif (retriesLeft > 0) return checkOutput(entry, await followUp(entry, noWriteFollowUpPrompt(entry), entry.rejections.length ? \"Seguí: hubo comandos rechazados; escribí el JSON con la tool de archivos.\" : \"Seguí: el JSON no se escribió en este turno.\"), retriesLeft - 1);\n\t\tif (entry.mode === \"review\") emit(entry, {\n\t\t\ttype: \"review\",\n\t\t\tok: false,\n\t\t\tfilename: entry.outputFilename,\n\t\t\terrors: [`${entry.agentLabel} terminó sin escribir ${entry.outputFilename}.`],\n\t\t\tfinal: true\n\t\t});\n\t\treturn;\n\t}\n\tconst result = checkReportFile(path, {\n\t\trepo: entry.repo,\n\t\tbranch: entry.branch,\n\t\tbase: entry.base,\n\t\t...entry.diffPaths?.length ? { paths: entry.diffPaths } : {}\n\t});\n\tif (result.ok) {\n\t\tstampReviewProvenance(path, {\n\t\t\tagent: entry.agentLabel,\n\t\t\tmodel: entry.model,\n\t\t\tagentSession: {\n\t\t\t\tagentId: entry.agentId,\n\t\t\t\tsessionId: entry.acpSessionId,\n\t\t\t\toutputFilename: entry.outputFilename\n\t\t\t}\n\t\t});\n\t\temit(entry, {\n\t\t\ttype: \"review\",\n\t\t\tok: true,\n\t\t\tfilename: entry.outputFilename,\n\t\t\terrors: [],\n\t\t\tfinal: true\n\t\t});\n\t\treturn;\n\t}\n\tconst canRetry = retriesLeft > 0;\n\temit(entry, {\n\t\ttype: \"review\",\n\t\tok: false,\n\t\tfilename: entry.outputFilename,\n\t\terrors: result.errors,\n\t\tfinal: !canRetry\n\t});\n\tif (!canRetry) return;\n\tawait checkOutput(entry, await followUp(entry, invalidJsonFixPrompt(entry, path, result), \"Corregí los errores de validación del JSON.\"), retriesLeft - 1);\n}\n/** Turno extra que pide el server (corregir el JSON, seguir después de un rechazo). Devuelve cuándo empezó. */\nasync function followUp(entry, prompt, shown) {\n\temit(entry, {\n\t\ttype: \"user\",\n\t\ttext: shown,\n\t\tmode: \"fix\"\n\t});\n\tconst acp = await ensureAcp(entry);\n\tconst started = Date.now();\n\tentry.rejections = [];\n\tconst { stopReason } = await acp.prompt(prompt);\n\temit(entry, {\n\t\ttype: \"turn\",\n\t\tstopReason\n\t});\n\treturn started;\n}\nasync function runTurn(entry, text, mode, opts) {\n\tif (entry.busy) throw new Error(\"El agente todavía está trabajando en el pedido anterior.\");\n\tentry.busy = true;\n\tentry.mode = mode;\n\tif (entry.idleTimer) clearTimeout(entry.idleTimer);\n\temit(entry, {\n\t\ttype: \"user\",\n\t\ttext: opts.shown,\n\t\tmode: mode === \"review\" ? \"review\" : mode\n\t});\n\ttry {\n\t\tif (!entry.acp) setStatus(entry, \"starting\", `Lanzando ${entry.agentLabel}…`);\n\t\tconst acp = await ensureAcp(entry, opts.model);\n\t\tsetStatus(entry, \"working\", \"El agente está revisando…\");\n\t\tconst since = Date.now();\n\t\tentry.rejections = [];\n\t\tconst { stopReason } = await acp.prompt(text);\n\t\temit(entry, {\n\t\t\ttype: \"turn\",\n\t\t\tstopReason\n\t\t});\n\t\tif (mode !== \"ask\" && stopReason !== \"cancelled\") await checkOutput(entry, since, OUTPUT_AUTO_RETRIES);\n\t\tentry.busy = false;\n\t\tsetStatus(entry, \"idle\");\n\t} catch (err) {\n\t\tentry.busy = false;\n\t\tconst raw = err instanceof Error ? err.message : String(err);\n\t\tsetStatus(entry, \"error\", authFailureMessage(entry.agentId, entry.agentLabel, raw) || raw);\n\t} finally {\n\t\tscheduleIdleClose(entry);\n\t}\n}\nfunction newEntry(agent, fields) {\n\tconst acpSessionId = fields.acpSessionId ?? \"\";\n\tconst entry = {\n\t\tid: fields.id || crypto.randomUUID(),\n\t\tagentId: agent.def.id,\n\t\tagentLabel: agent.def.label,\n\t\tmodel: fields.model,\n\t\trepo: fields.repo,\n\t\tbranch: fields.branch,\n\t\tbase: fields.base,\n\t\toutputFilename: fields.outputFilename,\n\t\tacpSessionId,\n\t\tstatus: \"idle\",\n\t\tbusy: false,\n\t\tagent,\n\t\tacp: null,\n\t\tstarting: null,\n\t\tmode: \"ask\",\n\t\tevents: [],\n\t\tseq: 0,\n\t\ttextSeq: null,\n\t\tlisteners: /* @__PURE__ */ new Set(),\n\t\tidleTimer: null,\n\t\trejections: [],\n\t\tneedsContext: false,\n\t\tseed: null,\n\t\tdiffPaths: null,\n\t\tpendingPermissions: /* @__PURE__ */ new Map(),\n\t\tsessionAllowDenied: false,\n\t\tcancelled: false\n\t};\n\tsessions.set(entry.id, entry);\n\treturn entry;\n}\n/** Lanza la review con el agente elegido. Devuelve el id de la sesión enseguida; el resto llega por SSE. */\nfunction startReview(input) {\n\tconst entry = newEntry(findAgent(input.agentId), {\n\t\t...input,\n\t\tmodel: input.model || \"\"\n\t});\n\temit(entry, {\n\t\ttype: \"phase\",\n\t\tphase: \"diff\",\n\t\tdetail: \"Calculando el diff…\"\n\t});\n\tsetStatus(entry, \"starting\", \"Calculando el diff…\");\n\tcontinueReviewAfterDiff(entry, input);\n\treturn info(entry);\n}\nasync function continueReviewAfterDiff(entry, input) {\n\tawait new Promise((resolve) => setImmediate(resolve));\n\tif (!sessions.has(entry.id) || entry.cancelled) return;\n\tlet promptOpts = {\n\t\toutputFilename: input.outputFilename,\n\t\tacp: true,\n\t\tdiffRelPath: null,\n\t\tfiles: [],\n\t\tignored: [],\n\t\tignoreGlobs: []\n\t};\n\ttry {\n\t\tpromptOpts = prepareReviewPromptOpts({\n\t\t\trepo: input.repo,\n\t\t\tbranch: input.branch,\n\t\t\tbase: input.base,\n\t\t\toutputFilename: input.outputFilename,\n\t\t\tacp: true\n\t\t});\n\t\tif (entry.cancelled || !sessions.has(entry.id)) return;\n\t\tentry.diffPaths = (promptOpts.files || []).map((f) => f.path);\n\t\tconst n = entry.diffPaths.length;\n\t\tconst detail = n > 0 ? `Diff listo · ${n} archivo${n === 1 ? \"\" : \"s\"}. Pasando el contexto al agente…` : \"Diff listo. Pasando el contexto al agente…\";\n\t\temit(entry, {\n\t\t\ttype: \"phase\",\n\t\t\tphase: \"diff\",\n\t\t\tdetail\n\t\t});\n\t\tsetStatus(entry, \"starting\", detail);\n\t} catch (err) {\n\t\tif (entry.cancelled || !sessions.has(entry.id)) return;\n\t\tconst msg = `No pude precomputar el diff (${err instanceof Error ? err.message : String(err)}); el agente lo resolverá.`;\n\t\temit(entry, {\n\t\t\ttype: \"phase\",\n\t\t\tphase: \"diff\",\n\t\t\tdetail: msg\n\t\t});\n\t\temit(entry, {\n\t\t\ttype: \"status\",\n\t\t\tstatus: entry.status,\n\t\t\tmessage: msg\n\t\t});\n\t}\n\tif (!sessions.has(entry.id) || entry.cancelled) return;\n\temit(entry, {\n\t\ttype: \"phase\",\n\t\tphase: \"agent\",\n\t\tdetail: \"El agente está revisando el branch…\"\n\t});\n\trunTurn(entry, `${buildPrompt({\n\t\tsource: \"local\",\n\t\trepo: input.repo,\n\t\tbranch: input.branch,\n\t\tbase: input.base,\n\t\tremoteUrl: getRemoteUrl(input.repo) || void 0\n\t}, promptOpts)}\\n\\n${TOOL_RULES}\\n\\n${SERVER_VALIDATES}`, \"review\", {\n\t\tmodel: input.model,\n\t\tshown: `Review de ${input.branch} contra ${input.base}`\n\t});\n}\n/**\n* Sesión para chatear sobre un reporte: la que sigue viva en este server, o una nueva que retoma la del agente.\n* `sessionId` vacío = sesión brand-new (`session/new`) con `needsContext` desde el inicio.\n* Opcional `seed` (JSON + diff del reporte abierto) para materializarlos en `.diff-review/` antes del primer turno.\n*/\nasync function openChat(input) {\n\tconst sessionId = String(input.sessionId || \"\").trim();\n\tif (sessionId) {\n\t\tfor (const entry of sessions.values()) if (entry.acpSessionId === sessionId && entry.repo === input.repo) {\n\t\t\tif (input.seed) entry.seed = input.seed;\n\t\t\treturn info(entry);\n\t\t}\n\t}\n\tconst entry = newEntry(findAgent(input.agentId), {\n\t\t...input,\n\t\tmodel: input.model || \"\",\n\t\tacpSessionId: sessionId\n\t});\n\tif (input.seed) entry.seed = input.seed;\n\tif (!sessionId) entry.needsContext = true;\n\ttry {\n\t\tif (!entry.acp) setStatus(entry, \"starting\", `Lanzando ${entry.agentLabel}…`);\n\t\tawait ensureAcp(entry, input.model);\n\t\tif (entry.status === \"starting\") setStatus(entry, \"idle\");\n\t} catch (err) {\n\t\tconst raw = err instanceof Error ? err.message : String(err);\n\t\tsetStatus(entry, \"error\", authFailureMessage(entry.agentId, entry.agentLabel, raw) || raw);\n\t}\n\treturn info(entry);\n}\nfunction sendMessage(id, text, mode, opts) {\n\tconst entry = sessions.get(id);\n\tif (!entry) throw new Error(\"La sesión del agente ya no existe. Recargá la página.\");\n\tconst body = text.trim();\n\tif (!body) throw new Error(\"El mensaje está vacío.\");\n\tif (entry.busy) throw new Error(\"El agente todavía está trabajando en el pedido anterior.\");\n\tlet agentText = body;\n\tif (entry.needsContext) {\n\t\tagentText = `${contextPreamble(entry)}\\n${body}`;\n\t\tentry.needsContext = false;\n\t\tentry.seed = null;\n\t}\n\trunTurn(entry, mode === \"edit\" ? `${agentText}\\n\\nApply this by editing ${entry.outputFilename} in place (keep everything else as is). Reply briefly in Spanish with what you changed.\\n\\n${SERVER_VALIDATES}` : `${agentText}\\n\\nAnswer in Spanish. This is a question about the review: do not modify any file.`, mode, {\n\t\tshown: body,\n\t\tmodel: String(opts?.model || \"\").trim() || void 0\n\t});\n\treturn info(entry);\n}\n/**\n* Reintento manual tras un turno de review que no dejó el JSON válido (p. ej. redirect bloqueado o JSON viejo).\n* Misma sesión ACP; no recalcula el diff.\n* Si el JSON ya existe e inválido, reenvía los errores concretos (cobertura faltante, etc.) — no un “escribí de nuevo” genérico.\n*/\nfunction retryReview(id) {\n\tconst entry = sessions.get(String(id || \"\"));\n\tif (!entry) throw new Error(\"La sesión del agente ya no existe. Recargá la página.\");\n\tif (entry.busy) throw new Error(\"El agente todavía está trabajando en el pedido anterior.\");\n\tif (entry.status === \"error\") throw new Error(entry.statusMessage || \"La sesión está en error; iniciá una nueva review.\");\n\tconst posixRel = outputRelPath(entry.outputFilename).replace(/\\\\/g, \"/\");\n\tconst existing = checkEntryReport(entry);\n\trunTurn(entry, existing && !existing.result.ok ? invalidJsonFixPrompt(entry, existing.path, existing.result) : `Continue the code review. For \\`${posixRel}\\`: Read it first if it exists, then Edit/Write the full JSON (forward slashes only). Do not mkdir. Never use shell redirection.\n\n${TOOL_RULES}\n\n${SERVER_VALIDATES}`, \"review\", { shown: existing && !existing.result.ok ? \"Reintentar: corregir el JSON inválido\" : \"Reintentar: escribir el JSON de la review\" });\n\treturn info(entry);\n}\n/**\n* Respuesta del usuario a permiso(s) pendiente(s).\n* `scope`: once (default) | session (no volver a preguntar en esta sesión) | always (ACP allow_always).\n* `allowAll` / `requestIds` resuelven en lote (misma scope para todos).\n*/\nfunction respondPermission(input) {\n\tconst entry = sessions.get(String(input.id || \"\"));\n\tif (!entry) throw new Error(\"La sesión del agente ya no existe. Recargá la página.\");\n\tconst allow = Boolean(input.allow);\n\tconst scope = input.scope === \"session\" || input.scope === \"always\" ? input.scope : \"once\";\n\tif (allow && (scope === \"session\" || scope === \"always\")) entry.sessionAllowDenied = true;\n\tlet ids;\n\tif (input.allowAll) ids = [...entry.pendingPermissions.keys()];\n\telse if (Array.isArray(input.requestIds) && input.requestIds.length) ids = input.requestIds.map((id) => String(id || \"\")).filter(Boolean);\n\telse {\n\t\tconst one = String(input.requestId || \"\");\n\t\tids = one ? [one] : [];\n\t}\n\tif (!ids.length) throw new Error(\"No hay pedidos de permiso pendientes.\");\n\tconst batch = ids.length > 1 || Boolean(input.allowAll);\n\tlet resolved = 0;\n\tfor (const requestId of ids) {\n\t\tconst pending = entry.pendingPermissions.get(requestId);\n\t\tif (!pending) {\n\t\t\tif (!batch) throw new Error(\"Ese pedido de permiso ya no está pendiente.\");\n\t\t\tcontinue;\n\t\t}\n\t\tpending.resolve(allow, {\n\t\t\tquiet: batch,\n\t\t\tscope\n\t\t});\n\t\tresolved += 1;\n\t}\n\tif (!resolved) throw new Error(\"Ese pedido de permiso ya no está pendiente.\");\n\tif (batch) emit(entry, {\n\t\ttype: \"permission_summary\",\n\t\tallow,\n\t\tcount: resolved\n\t});\n\treturn info(entry);\n}\n/**\n* Activa/desactiva “confiar en esta sesión” (no pedir confirmación cuando la política niega).\n* Al activar, aprueba los pedidos pendientes actuales.\n*/\nfunction setPermissionTrust(id, enabled) {\n\tconst entry = sessions.get(String(id || \"\"));\n\tif (!entry) throw new Error(\"La sesión del agente ya no existe. Recargá la página.\");\n\tentry.sessionAllowDenied = Boolean(enabled);\n\tif (enabled) {\n\t\tconst ids = [...entry.pendingPermissions.keys()];\n\t\tlet resolved = 0;\n\t\tfor (const requestId of ids) {\n\t\t\tconst pending = entry.pendingPermissions.get(requestId);\n\t\t\tif (!pending) continue;\n\t\t\tpending.resolve(true, {\n\t\t\t\tquiet: ids.length > 1,\n\t\t\t\tscope: \"session\"\n\t\t\t});\n\t\t\tresolved += 1;\n\t\t}\n\t\tif (resolved > 1) emit(entry, {\n\t\t\ttype: \"permission_summary\",\n\t\t\tallow: true,\n\t\t\tcount: resolved\n\t\t});\n\t\temit(entry, {\n\t\t\ttype: \"status\",\n\t\t\tstatus: entry.status,\n\t\t\tmessage: \"Confianza de sesión: no se pedirá confirmación de permisos.\"\n\t\t});\n\t} else emit(entry, {\n\t\ttype: \"status\",\n\t\tstatus: entry.status,\n\t\tmessage: \"Confianza de sesión desactivada: se vuelve a pedir confirmación.\"\n\t});\n\treturn info(entry);\n}\nasync function cancelTurn(id) {\n\tconst entry = sessions.get(id);\n\tif (!entry) return;\n\tentry.cancelled = true;\n\tif (entry.acp && entry.busy) {\n\t\tawait entry.acp.cancel();\n\t\treturn;\n\t}\n\tentry.busy = false;\n\tsetStatus(entry, \"error\", \"Cancelado.\");\n}\nfunction subscribe(id, listener) {\n\tconst entry = sessions.get(id);\n\tif (!entry) return null;\n\tlistener({ type: \"reset\" });\n\tfor (const event of entry.events) listener(event);\n\tentry.listeners.add(listener);\n\treturn () => entry.listeners.delete(listener);\n}\n/**\n* Review que pidió la CLI al lanzar el server (`DIFF_REVIEW_AGENT_RUN`, JSON). Se arranca una sola vez, al iniciar,\n* así corre aunque no se abra el navegador.\n*/\nfunction startPendingAgentRun() {\n\tconst raw = String(process.env.DIFF_REVIEW_AGENT_RUN || \"\").trim();\n\tif (!raw) return;\n\tdelete process.env.DIFF_REVIEW_AGENT_RUN;\n\ttry {\n\t\tstartReview(JSON.parse(raw));\n\t} catch (err) {\n\t\tconsole.error(\"[diff-review agent] no pude lanzar la review pedida por la CLI:\", err instanceof Error ? err.message : err);\n\t}\n}\n//#endregion\nexport { openChat as a, sendMessage as c, startPendingAgentRun as d, startReview as f, loginCommand as g, buildPrompt as h, openAgentLogin as i, sessionInfo as l, applyEvent as m, cancelTurn as n, respondPermission as o, subscribe as p, listAcpAgents as r, retryReview as s, agentModels as t, setPermissionTrust as u };\n"],"names":[],"mappings":";;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,IAAI,EAAE;AACxB,CAAC,IAAI;AACL,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC,MAAM;AACT,EAAE,OAAO,IAAI;AACb,CAAC;AACD;AACA;AACA,SAAS,iBAAiB,CAAC,IAAI,EAAE;AACjC,CAAC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;AACjD,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC3B,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC;AAC1D,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AACD,CAAC,OAAO,IAAI;AACZ;AACA;AACA,SAAS,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE;AAC7B,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AACpC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AACpC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1D,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACvC,EAAE,IAAI,CAAC,EAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;AACvC,CAAC;AACD,CAAC,OAAO,CAAC;AACT;AACA;AACA,SAAS,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE;AACtC;AACA,CAAC,MAAM,GAAG,GAAG,EAAE;AACf,CAAC,IAAI,QAAQ;AACb,CAAC,IAAI;AACL,EAAE,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;AAClD,CAAC,CAAC,CAAC,MAAM;AACT,EAAE,OAAO,GAAG;AACZ,CAAC;AACD,CAAC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AACjC,EAAE,IAAI,OAAO;AACb,EAAE,IAAI;AACN,GAAG,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7C,EAAE,CAAC,CAAC,MAAM;AACV,GAAG;AACH,EAAE;AACF,EAAE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AACxE,CAAC;AACD,CAAC,OAAO,GAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,kBAAkB,CAAC,GAAG,EAAE;AACjC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;AACvB,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACrJ,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,eAAe,CAAC;AAC3D,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACpC,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,IAAI,EAAE;AAChE,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;AAC5D,EAAE,GAAG,MAAM;AACX,EAAE,WAAW,EAAE;AACf,GAAG,KAAK,EAAE,EAAE;AACZ,GAAG,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,IAAI,IAAI;AACrC,GAAG;AACH,EAAE,YAAY,EAAE;AAChB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACb,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC;AACjD,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;AAC7E,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC3D,CAAC,OAAO,GAAG;AACX;AACA;AACA,IAAI,kBAAkB,GAAG,+CAA+C;AACxE;AACA,IAAI,MAAM,GAAG;AACb,CAAC;AACD,EAAE,EAAE,EAAE,QAAQ;AACd,EAAE,KAAK,EAAE,aAAa;AACtB,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC;AAClB,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK;AAC3C,GAAG,IAAI,QAAQ,KAAK,OAAO,EAAE,OAAO,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,YAAY,CAAC;AACnJ,GAAG,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAClG,GAAG,IAAI,QAAQ,KAAK,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC/I,GAAG,OAAO,KAAK;AACf,EAAE,CAAC;AACH,EAAE,MAAM,EAAE;AACV,GAAG;AACH,IAAI,KAAK,EAAE,MAAM;AACjB,IAAI,KAAK,EAAE,MAAM;AACjB,IAAI,IAAI,EAAE;AACV,IAAI;AACJ,GAAG;AACH,IAAI,KAAK,EAAE,QAAQ;AACnB,IAAI,KAAK,EAAE,QAAQ;AACnB,IAAI,IAAI,EAAE;AACV,IAAI;AACJ,GAAG;AACH,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,KAAK,EAAE,OAAO;AAClB,IAAI,IAAI,EAAE;AACV;AACA,GAAG;AACH,EAAE,eAAe,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK;AACtC,GAAG,IAAI,GAAG,CAAC,eAAe,EAAE,OAAO;AACnC,IAAI,KAAK,EAAE,GAAG,CAAC,eAAe;AAC9B,IAAI,MAAM,EAAE;AACZ,IAAI;AACJ,GAAG,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,EAAE,KAAK;AACxE,GAAG,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG;AAC/C,IAAI,KAAK;AACT,IAAI,MAAM,EAAE;AACZ,IAAI,GAAG,IAAI;AACX,EAAE,CAAC;AACH,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK;AACvC,GAAG,IAAI;AACP,GAAG,GAAG,KAAK,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE;AACrC,GAAG,gBAAgB;AACnB,GAAG,MAAM;AACT,GAAG,MAAM;AACT,GAAG,MAAM;AACT,GAAG,aAAa;AAChB,GAAG,+CAA+C;AAClD,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;AAC5C,GAAG;AACH,EAAE,GAAG,EAAE,MAAM;AACb,GAAG,MAAM,KAAK,GAAG,UAAU,CAAC,kBAAkB,EAAE,OAAO,EAAE,CAAC;AAC1D,GAAG,OAAO;AACV,IAAI,GAAG,KAAK,GAAG;AACf,KAAK,IAAI,EAAE,KAAK;AAChB,KAAK,IAAI,EAAE;AACX,KAAK,GAAG;AACR,KAAK,IAAI,EAAE,KAAK;AAChB,KAAK,IAAI,EAAE,CAAC,OAAO,EAAE,kBAAkB;AACvC,KAAK;AACL,IAAI,WAAW,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE;AAC1C,KAAK,KAAK,EAAE;AACZ,MAAM,MAAM;AACZ,MAAM,MAAM;AACZ,MAAM,MAAM;AACZ,MAAM,MAAM;AACZ,MAAM,MAAM;AACZ,MAAM;AACN,MAAM;AACN,KAAK,cAAc,EAAE;AACrB,KAAK,EAAE;AACP,IAAI;AACJ,EAAE;AACF,EAAE;AACF,CAAC;AACD,EAAE,EAAE,EAAE,OAAO;AACb,EAAE,KAAK,EAAE,OAAO;AAChB,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC;AACjB,EAAE,MAAM,EAAE,EAAE;AACZ,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK;AACjC,GAAG,IAAI;AACP,IAAI,MAAM,KAAK,GAAG,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;AAC9F,IAAI,OAAO,KAAK,GAAG;AACnB,KAAK,KAAK;AACV,KAAK,MAAM,EAAE;AACb,KAAK,GAAG,IAAI;AACZ,GAAG,CAAC,CAAC,MAAM;AACX,IAAI,OAAO,IAAI;AACf,GAAG;AACH,EAAE,CAAC;AACH,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK;AACvB,GAAG,MAAM;AACT,GAAG,WAAW;AACd,GAAG,iBAAiB;AACpB,GAAG,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE;AAChC,GAAG;AACH;AACA,EAAE;AACF,CAAC;AACD,EAAE,EAAE,EAAE,QAAQ;AACd,EAAE,KAAK,EAAE,YAAY;AACrB,EAAE,IAAI,EAAE,CAAC,cAAc,CAAC;AACxB,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,QAAQ,KAAK,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;AAChN,EAAE,MAAM,EAAE,EAAE;AACZ,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK;AACjC,GAAG,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;AACpE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,aAAa,EAAE,OAAO,IAAI,MAAM,EAAE,KAAK,EAAE,OAAO;AACtE,GAAG,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,EAAE,OAAO,IAAI;AACjD,GAAG,OAAO;AACV,IAAI,KAAK,EAAE,EAAE,KAAK,SAAS,GAAG,MAAM,GAAG,EAAE;AACzC,IAAI,MAAM,EAAE;AACZ,IAAI;AACJ,EAAE,CAAC;AACH,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK;AACvB,GAAG,IAAI;AACP,GAAG,iBAAiB;AACpB,GAAG,MAAM;AACT,GAAG,SAAS;AACZ,GAAG,SAAS;AACZ,GAAG,GAAG,KAAK,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG;AACnC,GAAG;AACH,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM;AACtB,GAAG,IAAI,EAAE,IAAI;AACb,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC;AAChB,GAAG,GAAG,EAAE,EAAE,iBAAiB,EAAE,kBAAkB,EAAE;AACjD,GAAG;AACH,EAAE;AACF,CAAC;AACD,EAAE,EAAE,EAAE,SAAS;AACf,EAAE,KAAK,EAAE,oBAAoB;AAC7B,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC;AACnB,EAAE,MAAM,EAAE,CAAC;AACX,GAAG,KAAK,EAAE,MAAM;AAChB,GAAG,KAAK,EAAE,MAAM;AAChB,GAAG,IAAI,EAAE;AACT,GAAG,CAAC;AACJ,EAAE,eAAe,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK;AACtC,GAAG,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,KAAK;AACnG,GAAG,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,GAAG,6BAA6B,GAAG,0BAA0B;AAC/F,GAAG,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG;AAC/C,IAAI,KAAK;AACT,IAAI;AACJ,IAAI,GAAG,IAAI;AACX,EAAE,CAAC;AACH,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK;AACvC,GAAG,IAAI;AACP,GAAG,GAAG,KAAK,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE;AACrC,GAAG,cAAc;AACjB,GAAG,cAAc;AACjB,GAAG,cAAc;AACjB,GAAG,cAAc;AACjB,GAAG,cAAc;AACjB,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;AAC3C,GAAG;AACH,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM;AACtB,GAAG,IAAI,EAAE,IAAI;AACb,GAAG,IAAI,EAAE,CAAC,OAAO;AACjB,GAAG;AACH,EAAE;AACF,CAAC;AACD,EAAE,EAAE,EAAE,QAAQ;AACd,EAAE,KAAK,EAAE,YAAY;AACrB,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC;AAClB,EAAE,MAAM,EAAE,EAAE;AACZ,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK;AACjC,GAAG,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,EAAE,KAAK;AACxE,GAAG,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,KAAK,EAAE,IAAI;AAC/D,GAAG,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,GAAG;AAC7C,IAAI,KAAK,EAAE,IAAI;AACf,IAAI,MAAM,EAAE;AACZ,IAAI,GAAG,IAAI;AACX,EAAE,CAAC;AACH,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,QAAQ;AAC/D;AACA,CAAC;AACD;AACA,SAAS,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE;AACtC,CAAC,IAAI;AACL,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,KAAK;AAC5C,EAAE,IAAI,QAAQ,KAAK,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC;AAC5D,EAAE,OAAO,IAAI;AACb,CAAC,CAAC,CAAC,MAAM;AACT,EAAE,OAAO,KAAK;AACd,CAAC;AACD;AACA;AACA,SAAS,UAAU,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;AAC7C,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,GAAG,GAAG,GAAG,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAC9G,CAAC,MAAM,IAAI,GAAG,QAAQ,KAAK,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,qBAAqB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AACnH,CAAC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACjD,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;AACvD,EAAE,IAAI,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,OAAO,SAAS;AACzD,CAAC;AACD,CAAC,OAAO,IAAI;AACZ;AACA;AACA,SAAS,OAAO,CAAC,GAAG,GAAG,EAAE,EAAE;AAC3B,CAAC,OAAO;AACR,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;AAC7B,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ;AAC5C,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,OAAO;AAC3B,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,GAAG,EAAE;AAC3B,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;AACvB;AACA,CAAC,MAAM,KAAK,GAAG,EAAE;AACjB,CAAC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;AAC3B,EAAE,IAAI,IAAI,GAAG,IAAI;AACjB,EAAE,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE;AAC9B,GAAG,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5B,GAAG,IAAI,IAAI,EAAE;AACb,EAAE;AACF,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI;AACjH,EAAE,IAAI,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;AACvB,GAAG,GAAG;AACN,GAAG;AACH,GAAG,CAAC;AACJ,CAAC;AACD,CAAC,OAAO,KAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE;AAChC,CAAC,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI;AAC/D,CAAC,OAAO;AACR,EAAE,OAAO,EAAE,CAAC,UAAU,GAAG;AACzB,GAAG,KAAK,EAAE,EAAE;AACZ,GAAG,KAAK,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7C,GAAG,IAAI,EAAE,UAAU,CAAC;AACpB,GAAG,GAAG;AACN,GAAG,KAAK,EAAE,EAAE;AACZ,GAAG,KAAK,EAAE,wBAAwB;AAClC,GAAG,IAAI,EAAE;AACT,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,UAAU,EAAE,KAAK,CAAC,CAAC;AAChE,EAAE,YAAY,EAAE;AAChB,EAAE;AACF;AACA;AACA,SAAS,WAAW,CAAC,GAAG,EAAE;AAC1B,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;AAC3C,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,IAAI,IAAI,GAAG,IAAI;AAClH,CAAC,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC/H,EAAE,GAAG,OAAO;AACZ,EAAE,KAAK,EAAE;AACT,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ,mBAAmB,IAAI,GAAG,CAAC;AACvC,CAAC,MAAM;AACP,CAAC,KAAK;AACN,CAAC,MAAM;AACP,CAAC,QAAQ;AACT,CAAC,YAAY;AACb,CAAC,WAAW;AACZ,CAAC,UAAU;AACX,CAAC,OAAO;AACR,CAAC,UAAU;AACX,CAAC,SAAS;AACV,CAAC,UAAU;AACX,CAAC,UAAU;AACX,CAAC,UAAU;AACX,CAAC,UAAU;AACX,CAAC,cAAc;AACf,CAAC,MAAM;AACP,CAAC;AACD,CAAC,CAAC;AACF;AACA,IAAI,eAAe,GAAG,sDAAsD;AAC5E,IAAI,iBAAiB,mBAAmB,IAAI,GAAG,CAAC;AAChD,CAAC,gBAAgB;AACjB,CAAC,QAAQ;AACT,CAAC,IAAI;AACL,CAAC,OAAO;AACR,CAAC,IAAI;AACL,CAAC,WAAW;AACZ,CAAC,IAAI;AACL,CAAC;AACD,CAAC,CAAC;AACF,IAAI,iBAAiB,mBAAmB,IAAI,GAAG,CAAC;AAChD,CAAC,OAAO;AACR,CAAC,WAAW;AACZ,CAAC,cAAc;AACf,CAAC,QAAQ;AACT,CAAC;AACD,CAAC,CAAC;AACF;AACA,IAAI,aAAa,mBAAmB,IAAI,GAAG,CAAC;AAC5C,CAAC,KAAK;AACN,CAAC,MAAM;AACP,CAAC,MAAM;AACP,CAAC,IAAI;AACL,CAAC,IAAI;AACL,CAAC,IAAI;AACL,CAAC,MAAM;AACP,CAAC,MAAM;AACP,CAAC,KAAK;AACN,CAAC,IAAI;AACL,CAAC,MAAM;AACP,CAAC,OAAO;AACR,CAAC,OAAO;AACR,CAAC,IAAI;AACL,CAAC,MAAM;AACP,CAAC,KAAK;AACN,CAAC,MAAM;AACP,CAAC,MAAM;AACP,CAAC,IAAI;AACL,CAAC,MAAM;AACP,CAAC,KAAK;AACN,CAAC,IAAI;AACL,CAAC,UAAU;AACX,CAAC,SAAS;AACV,CAAC,UAAU;AACX,CAAC,MAAM;AACP,CAAC,OAAO;AACR,CAAC,MAAM;AACP,CAAC,KAAK;AACN,CAAC,MAAM;AACP,CAAC,QAAQ;AACT,CAAC,MAAM;AACP,CAAC,aAAa;AACd,CAAC,IAAI;AACL,CAAC,eAAe;AAChB,CAAC,KAAK;AACN,CAAC,eAAe;AAChB,CAAC,KAAK;AACN,CAAC,KAAK;AACN,CAAC,gBAAgB;AACjB,CAAC,SAAS;AACV,CAAC,eAAe;AAChB,CAAC,QAAQ;AACT,CAAC,aAAa;AACd,CAAC,cAAc;AACf,CAAC,WAAW;AACZ,CAAC,cAAc;AACf,CAAC,cAAc;AACf,CAAC,YAAY;AACb,CAAC,aAAa;AACd,CAAC;AACD,CAAC,CAAC;AACF;AACA,IAAI,SAAS,mBAAmB,IAAI,GAAG,CAAC;AACxC,CAAC,MAAM;AACP,CAAC,QAAQ;AACT,CAAC,IAAI;AACL,CAAC,cAAc;AACf,CAAC,OAAO;AACR,CAAC;AACD,CAAC,CAAC;AACF;AACA,IAAI,OAAO,mBAAmB,IAAI,GAAG,CAAC;AACtC,CAAC,WAAW;AACZ,CAAC,KAAK;AACN,CAAC;AACD,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE;AACnC,CAAC,IAAI,QAAQ,KAAK,OAAO,EAAE;AAC3B,EAAE,MAAM,GAAG,GAAG,+BAA+B,CAAC,IAAI,CAAC,CAAC,CAAC;AACrD,EAAE,IAAI,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,EAAE,MAAM,IAAI,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC;AACjD,EAAE,IAAI,IAAI,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AACD,CAAC,OAAO,CAAC;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,IAAI,EAAE;AAC/B,CAAC,IAAI;AACL,EAAE,OAAO,YAAY,CAAC,IAAI,CAAC;AAC3B,CAAC,CAAC,CAAC,MAAM;AACT,EAAE,MAAM,KAAK,GAAG,EAAE;AAClB,EAAE,IAAI,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC;AAC3B,EAAE,SAAS;AACX,GAAG,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;AAC9B,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,GAAG,EAAE,OAAO,SAAS,CAAC,IAAI,CAAC;AACxD,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC/B,GAAG,IAAI;AACP,IAAI,OAAO,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC;AAClD,GAAG,CAAC,CAAC,MAAM;AACX,IAAI,GAAG,GAAG,MAAM;AAChB,GAAG;AACH,EAAE;AACF,CAAC;AACD;AACA,SAAS,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC3C,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AACnE,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AAClE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACpF,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACxE;AACA;AACA,SAAS,YAAY,CAAC,GAAG,EAAE;AAC3B,CAAC,OAAO,2BAA2B,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,OAAO,EAAE;AAChC,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;AAClC;AACA,CAAC,MAAM,SAAS,GAAG,EAAE;AACrB;AACA,CAAC,IAAI,QAAQ,GAAG,EAAE;AAClB;AACA,CAAC,IAAI,KAAK,GAAG,EAAE;AACf,CAAC,IAAI,IAAI,GAAG,EAAE;AACd,CAAC,IAAI,MAAM,GAAG,KAAK;AACnB;AACA,CAAC,IAAI,KAAK,GAAG,IAAI;AACjB,CAAC,MAAM,OAAO,GAAG,MAAM;AACvB,EAAE,IAAI,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,EAAE,IAAI,GAAG,EAAE;AACX,EAAE,MAAM,GAAG,KAAK;AAChB,CAAC,CAAC;AACF,CAAC,MAAM,UAAU,GAAG,MAAM;AAC1B,EAAE,OAAO,EAAE;AACX,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACxC,EAAE,KAAK,GAAG,EAAE;AACZ,CAAC,CAAC;AACF,CAAC,MAAM,WAAW,GAAG,MAAM;AAC3B,EAAE,UAAU,EAAE;AACd,EAAE,IAAI,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC/C,EAAE,QAAQ,GAAG,EAAE;AACf,CAAC,CAAC;AACF,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM;AAC3B,EAAE,EAAE,EAAE,KAAK;AACX,EAAE;AACF,EAAE,CAAC;AACH,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AACnB,EAAE,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACzB,EAAE,IAAI,KAAK,KAAK,GAAG,EAAE;AACrB,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,IAAI;AAC/B,QAAQ,IAAI,IAAI,EAAE;AAClB,GAAG;AACH,EAAE;AACF,EAAE,IAAI,KAAK,KAAK,IAAI,EAAE;AACtB,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,KAAK,GAAG,IAAI;AAChC,QAAQ,IAAI,EAAE,KAAK,GAAG,EAAE,OAAO,IAAI,CAAC,WAAW,CAAC;AAChD,QAAQ,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,OAAO,IAAI,CAAC,kBAAkB,CAAC;AACvE,QAAQ,IAAI,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACvE,IAAI,IAAI,IAAI,IAAI;AAChB,IAAI,CAAC,EAAE;AACP,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE;AACpB,GAAG;AACH,EAAE;AACF,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE;AACjC,GAAG,KAAK,GAAG,EAAE;AACb,GAAG,MAAM,GAAG,IAAI;AAChB,GAAG;AACH,EAAE;AACF,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,EAAE;AACtC,GAAG,IAAI,IAAI,IAAI;AACf,GAAG,MAAM,GAAG,IAAI;AAChB,GAAG,CAAC,EAAE;AACN,GAAG;AACH,EAAE;AACF,EAAE,IAAI,EAAE,KAAK,GAAG,EAAE,OAAO,IAAI,CAAC,WAAW,CAAC;AAC1C,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,OAAO,IAAI,CAAC,kBAAkB,CAAC;AACjE,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE;AACnD,GAAG,OAAO,EAAE;AACZ,GAAG;AACH,EAAE;AACF,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,GAAG,EAAE;AAChD,GAAG,WAAW,EAAE;AAChB,GAAG;AACH,EAAE;AACF,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE;AAChE,GAAG,WAAW,EAAE;AAChB,GAAG,CAAC,EAAE;AACN,GAAG;AACH,EAAE;AACF,EAAE,IAAI,EAAE,KAAK,GAAG,EAAE;AAClB,GAAG,UAAU,EAAE;AACf,GAAG;AACH,EAAE;AACF,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE;AAChD,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC,EAAE;AACtB,GAAG,MAAM,EAAE,GAAG,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE;AACvD,GAAG,IAAI,MAAM,IAAI,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,aAAa,CAAC;AAChD,GAAG,IAAI,GAAG,EAAE;AACZ,GAAG,MAAM,GAAG,KAAK;AACjB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAChB,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE;AAC1B,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;AACxD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACb,IAAI;AACJ,GAAG;AACH,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE;AAC/C,GAAG,IAAI,MAAM,GAAG,EAAE;AAClB,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;AACzE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,cAAc,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC;AAC9F,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AACZ,GAAG;AACH,EAAE;AACF,EAAE,IAAI,EAAE,KAAK,GAAG,EAAE,OAAO,IAAI,CAAC,wBAAwB,CAAC;AACvD,EAAE,IAAI,EAAE,KAAK,GAAG,EAAE,OAAO,IAAI,CAAC,8BAA8B,CAAC;AAC7D,EAAE,IAAI,IAAI,EAAE;AACZ,EAAE,MAAM,GAAG,IAAI;AACf,CAAC;AACD,CAAC,IAAI,KAAK,EAAE,OAAO,IAAI,CAAC,qBAAqB,CAAC;AAC9C,CAAC,WAAW,EAAE;AACd,CAAC,OAAO;AACR,EAAE,EAAE,EAAE,IAAI;AACV,EAAE;AACF,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;AAC5C,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE;AACxD,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC;AACjF,CAAC,OAAO,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG;AACzG,EAAE,EAAE,EAAE,KAAK;AACX,EAAE,MAAM,EAAE,CAAC,qBAAqB,EAAE,GAAG,CAAC;AACtC,EAAE;AACF;AACA;AACA,SAAS,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE;AACpC,CAAC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACzB,EAAE,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG;AACpG,EAAE,IAAI,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;AACpC,GAAG,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC;AACpC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG;AAC1B,EAAE;AACF,CAAC;AACD,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE;AACpB;AACA;AACA,SAAS,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE;AAC7B,CAAC,IAAI,CAAC,GAAG,CAAC;AACV,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE;AAClC,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;AACtB,EAAE,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC,EAAE;AACjD,OAAO,IAAI,IAAI,KAAK,IAAI,EAAE;AAC1B,GAAG,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC;AAChD,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG;AAC1B,GAAG,CAAC,IAAI,CAAC;AACT,EAAE,CAAC,MAAM,OAAO;AAChB,GAAG,EAAE,EAAE,KAAK;AACZ,GAAG,MAAM,EAAE,CAAC,mCAAmC,EAAE,IAAI,CAAC;AACtD,GAAG;AACH,CAAC;AACD,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;AAC1B,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC,IAAI,MAAM,EAAE,OAAO;AACpB,EAAE,EAAE,EAAE,KAAK;AACX,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;AAC/B,EAAE;AACF,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE;AAC3C,CAAC,IAAI,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE;AACzF,CAAC,IAAI,GAAG,KAAK,QAAQ,KAAK,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE;AACnI,CAAC,IAAI,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE;AACxF,CAAC,OAAO;AACR,EAAE,EAAE,EAAE,KAAK;AACX,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,kBAAkB,CAAC,sBAAsB;AACjE,EAAE;AACF;AACA;AACA,SAAS,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;AAC3C,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3B,CAAC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO;AAC3E,EAAE,EAAE,EAAE,KAAK;AACX,EAAE,MAAM,EAAE;AACV,EAAE;AACF,CAAC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO;AAClF,EAAE,EAAE,EAAE,KAAK;AACX,EAAE,MAAM,EAAE;AACV,EAAE;AACF,CAAC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,8DAA8D,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO;AACzH,EAAE,EAAE,EAAE,KAAK;AACX,EAAE,MAAM,EAAE;AACV,EAAE;AACF,CAAC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO;AAC9E,EAAE,EAAE,EAAE,KAAK;AACX,EAAE,MAAM,EAAE;AACV,EAAE;AACF,CAAC,IAAI,IAAI,KAAK,KAAK,EAAE;AACrB,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,4CAA4C,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO;AAC7G,GAAG,EAAE,EAAE,KAAK;AACZ,GAAG,MAAM,EAAE;AACX,GAAG;AACH,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACrD,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,wCAAwC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO;AAChF,GAAG,EAAE,EAAE,KAAK;AACZ,GAAG,MAAM,EAAE;AACX,GAAG;AACH,EAAE,OAAO,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC;AAC/D,CAAC;AACD,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE;AAC7C,CAAC,OAAO,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC;AAClC;AACA;AACA,SAAS,UAAU,CAAC,IAAI,EAAE;AAC1B,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5B,CAAC,OAAO,gGAAgG,CAAC,IAAI,CAAC,IAAI,CAAC;AACnH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE;AACxC,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACnC,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC;AACrD;AACA,CAAC,MAAM,cAAc,GAAG,CAAC,GAAG,KAAK;AACjC,EAAE,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,WAAW,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC;AACpG,EAAE,OAAO,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC;AACtG,CAAC,CAAC;AACF,CAAC,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,IAAI,EAAE;AACxC,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC/D,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,OAAO;AAC5D,GAAG,EAAE,EAAE,KAAK;AACZ,GAAG,MAAM,EAAE;AACX,GAAG;AACH,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE;AACrB,CAAC;AACD,CAAC,IAAI,IAAI,KAAK,UAAU,EAAE;AAC1B,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;AAC7C,EAAE,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,IAAI;AACnG,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjG,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,OAAO;AAC5D,GAAG,EAAE,EAAE,KAAK;AACZ,GAAG,MAAM,EAAE;AACX,GAAG;AACH,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE;AACrB,CAAC;AACD,CAAC,OAAO,IAAI;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;AACzE,CAAC,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC;AACtC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,MAAM;AAC9B,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO;AACtC,EAAE,EAAE,EAAE,KAAK;AACX,EAAE,MAAM,EAAE;AACV,EAAE;AACF,CAAC,MAAM,GAAG,GAAG;AACb,EAAE,IAAI,EAAE,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE;AAC7B,EAAE;AACF,EAAE;AACF,CAAC,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;AACvE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACpC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO;AACpC,GAAG,EAAE,EAAE,KAAK;AACZ,GAAG,MAAM,EAAE,CAAC,oCAAoC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1D,GAAG;AACH;AACA,EAAE,IAAI,GAAG;AACT,EAAE,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,cAAc,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG;AAClG,GAAG,EAAE,EAAE,KAAK;AACZ,GAAG,MAAM,EAAE;AACX,GAAG;AACH,OAAO,IAAI,IAAI,KAAK,KAAK,EAAE,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;AACpD,OAAO,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,aAAa,EAAE,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG;AAC7F,GAAG,EAAE,EAAE,KAAK;AACZ,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7B,GAAG;AACH,OAAO,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;AAC3E,OAAO,GAAG,GAAG,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI;AAC/C,GAAG,EAAE,EAAE,KAAK;AACZ,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB;AACxC,GAAG;AACH,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG;AACzB,CAAC;AACD,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE;AACrD,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;AACxB,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;AACxB,CAAC,OAAO,QAAQ,KAAK,OAAO,GAAG,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,IAAI,EAAE;AAC7B,CAAC,IAAI;AACL,EAAE,OAAO,YAAY,CAAC,IAAI,CAAC;AAC3B,CAAC,CAAC,CAAC,MAAM;AACT,EAAE,MAAM,KAAK,GAAG,EAAE;AAClB,EAAE,IAAI,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC;AAC3B,EAAE,SAAS;AACX,GAAG,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;AAC9B,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,GAAG,EAAE,OAAO,SAAS,CAAC,IAAI,CAAC;AACxD,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC/B,GAAG,IAAI;AACP,IAAI,OAAO,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC;AAClD,GAAG,CAAC,CAAC,MAAM;AACX,IAAI,GAAG,GAAG,MAAM;AAChB,GAAG;AACH,EAAE;AACF,CAAC;AACD;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE;AAC5D,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AAChE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACpF,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACxE;AACA;AACA,SAAS,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE;AACvC,CAAC,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,GAAG,QAAQ,CAAC,QAAQ,GAAG,EAAE;AAChG,CAAC,MAAM,UAAU,GAAG;AACpB,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;AACnD,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC;AAC9E,EAAE,GAAG,CAAC,SAAS;AACf,EAAE,GAAG,CAAC,IAAI;AACV,EAAE,GAAG,CAAC,QAAQ;AACd,EAAE,GAAG,CAAC;AACN,EAAE;AACF,CAAC,MAAM,GAAG,GAAG,EAAE;AACf,CAAC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE;AAC7B,EAAE,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE;AAC1C,EAAE,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAClD,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AACvD,CAAC;AACD,CAAC,OAAO,GAAG;AACX;AACA;AACA,SAAS,SAAS,CAAC,QAAQ,EAAE;AAC7B,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,OAAO,EAAE;AACzD,CAAC,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO;AAC7B,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACzD,CAAC,OAAO,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,GAAG,EAAE;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,QAAQ,EAAE;AACnC,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE;AACpD,CAAC,IAAI,OAAO,EAAE,OAAO,OAAO;AAC5B,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AAClD,CAAC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;AACzC,CAAC,IAAI,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAChC,CAAC,MAAM,EAAE,GAAG,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9C,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC5B,CAAC,OAAO,KAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,QAAQ,EAAE,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,EAAE;AACtE,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AAClD,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;AACtB,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE;AAC7E,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE;AAClD,CAAC,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE;AACxD,CAAC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE;AACvF,CAAC,OAAO,KAAK;AACb;AACA;AACA;AACA;AACA;AACA,SAAS,oBAAoB,CAAC,MAAM,EAAE;AACtC,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACtC,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,kCAAkC;AAClD,CAAC,IAAI,CAAC;AACN,CAAC,IAAI,CAAC,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,wCAAwC,CAAC;AAC3H,CAAC,IAAI,CAAC,GAAG,+CAA+C,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,mEAAmE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC;AACvM,CAAC,IAAI,CAAC,GAAG,gCAAgC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjG,CAAC,IAAI,CAAC,GAAG,mCAAmC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9F,CAAC,IAAI,CAAC,GAAG,8CAA8C,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7G,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,0CAA0C,EAAE,CAAC,CAAC,CAAC;AAClF,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;AAChH,CAAC,OAAO,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,gBAAgB,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE;AACpE,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,OAAO;AACtC,CAAC,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC;AAC5C,CAAC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,QAAQ,EAAE;AAC3C,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO;AAC5B,GAAG,KAAK,EAAE,KAAK;AACf,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,KAAK,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC,SAAS;AAClE,GAAG;AACH,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACvD,EAAE,OAAO,OAAO,GAAG;AACnB,GAAG,KAAK,EAAE,KAAK;AACf,GAAG,MAAM,EAAE,CAAC,wBAAwB,EAAE,OAAO,CAAC;AAC9C,GAAG,GAAG;AACN,GAAG,KAAK,EAAE,IAAI;AACd,GAAG,MAAM,EAAE;AACX,GAAG;AACH,CAAC;AACD,CAAC,IAAI,IAAI,KAAK,OAAO,EAAE,OAAO;AAC9B,EAAE,KAAK,EAAE,IAAI;AACb,EAAE,MAAM,EAAE;AACV,EAAE;AACF,CAAC,IAAI,IAAI,KAAK,SAAS,EAAE;AACzB,EAAE,MAAM,KAAK,GAAG,UAAU,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;AAC/D,EAAE,OAAO,KAAK,CAAC,EAAE,GAAG;AACpB,GAAG,KAAK,EAAE,IAAI;AACd,GAAG,MAAM,EAAE;AACX,GAAG,GAAG;AACN,GAAG,KAAK,EAAE,KAAK;AACf,GAAG,MAAM,EAAE,KAAK,CAAC;AACjB,GAAG;AACH,CAAC;AACD,CAAC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,QAAQ,EAAE;AAC3C,EAAE,IAAI,IAAI,KAAK,KAAK,EAAE,OAAO;AAC7B,GAAG,KAAK,EAAE,KAAK;AACf,GAAG,MAAM,EAAE;AACX,GAAG;AACH,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO;AAC5B,GAAG,KAAK,EAAE,KAAK;AACf,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,KAAK,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC,SAAS;AACjE,GAAG;AACH,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;AAC7D,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;AACvF,EAAE,OAAO,OAAO,GAAG;AACnB,GAAG,KAAK,EAAE,KAAK;AACf,GAAG,MAAM,EAAE,CAAC,uBAAuB,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACnF,GAAG,GAAG;AACN,GAAG,KAAK,EAAE,IAAI;AACd,GAAG,MAAM,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;AACzD,GAAG;AACH,CAAC;AACD,CAAC,OAAO;AACR,EAAE,KAAK,EAAE,KAAK;AACd,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,KAAK,IAAI,GAAG,CAAC;AACzD,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE;AACtD,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AACpC,CAAC,MAAM,MAAM,GAAG,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,eAAe,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;AACvL,CAAC,OAAO,MAAM,GAAG,EAAE,OAAO,EAAE;AAC5B,EAAE,OAAO,EAAE,UAAU;AACrB,EAAE,QAAQ,EAAE,MAAM,CAAC;AACnB,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,OAAO,EAAE;AAC/B,CAAC,QAAQ,OAAO;AAChB,EAAE,KAAK,QAAQ,EAAE,OAAO;AACxB,GAAG,GAAG,EAAE,QAAQ;AAChB,GAAG,IAAI,EAAE,CAAC,QAAQ,CAAC;AACnB,GAAG,OAAO,EAAE;AACZ,GAAG;AACH,EAAE,KAAK,SAAS,EAAE,OAAO;AACzB,GAAG,GAAG,EAAE,IAAI;AACZ,GAAG,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;AAC1B,GAAG,OAAO,EAAE;AACZ,GAAG;AACH,EAAE,KAAK,OAAO,EAAE,OAAO;AACvB,GAAG,GAAG,EAAE,OAAO;AACf,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC;AAClB,GAAG,OAAO,EAAE;AACZ,GAAG;AACH,EAAE,KAAK,QAAQ,EAAE,OAAO;AACxB,GAAG,GAAG,EAAE,QAAQ;AAChB,GAAG,IAAI,EAAE,EAAE;AACX,GAAG,OAAO,EAAE;AACZ,GAAG;AACH,EAAE,SAAS,OAAO,IAAI;AACtB;AACA;AACA;AACA,SAAS,oBAAoB,CAAC,IAAI,EAAE;AACpC,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;AAC3C,CAAC,OAAO,gHAAgH,CAAC,IAAI,CAAC,CAAC,CAAC;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oBAAoB,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE;AAC3D,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,OAAO,IAAI;AAC/C,CAAC,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC;AAClC,CAAC,IAAI,OAAO,KAAK,QAAQ,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,oEAAoE,CAAC;AACrH,CAAC,IAAI,GAAG,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,8BAA8B,EAAE,GAAG,CAAC,OAAO,CAAC,+BAA+B,CAAC;AAC3G,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,6DAA6D,CAAC;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,OAAO,EAAE;AACpC,CAAC,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC;AAClC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,GAAG,wEAAwE,GAAG,oDAAoD,CAAC;AAClL,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;AAClC,CAAC,IAAI,QAAQ,KAAK,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE;AAC5C,EAAE,IAAI;AACN,EAAE,OAAO;AACT,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;AACpB,EAAE,SAAS;AACX,EAAE,IAAI;AACN,EAAE,GAAG,CAAC,GAAG;AACT,EAAE,GAAG,GAAG,CAAC;AACT,EAAE,EAAE;AACJ,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,KAAK,EAAE,QAAQ;AACjB,EAAE,WAAW,EAAE;AACf,EAAE,CAAC,CAAC,KAAK,EAAE;AACX,MAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,yCAAyC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;AACrK,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,KAAK,EAAE;AACT,EAAE,CAAC,CAAC,KAAK,EAAE;AACX,MAAM;AACN,EAAE,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACxD,EAAE,MAAM,KAAK,GAAG;AAChB,GAAG,CAAC,qBAAqB,EAAE;AAC3B,IAAI,IAAI;AACR,IAAI,MAAM;AACV,IAAI,KAAK;AACT,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW;AACvB,IAAI,CAAC;AACL,GAAG,CAAC,gBAAgB,EAAE;AACtB,IAAI,IAAI;AACR,IAAI,MAAM;AACV,IAAI,KAAK;AACT,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW;AACvB,IAAI,CAAC;AACL,GAAG,CAAC,SAAS,EAAE;AACf,IAAI,IAAI;AACR,IAAI,MAAM;AACV,IAAI,KAAK;AACT,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW;AACvB,IAAI,CAAC;AACL,GAAG,CAAC,OAAO,EAAE;AACb,IAAI,IAAI;AACR,IAAI,MAAM;AACV,IAAI,KAAK;AACT,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW;AACvB,IAAI;AACJ,GAAG;AACH,EAAE,IAAI,EAAE,GAAG,KAAK;AAChB,EAAE,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,IAAI;AACvC,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;AACpB,IAAI,QAAQ,EAAE,IAAI;AAClB,IAAI,KAAK,EAAE;AACX,IAAI,CAAC,CAAC,KAAK,EAAE;AACb,GAAG,EAAE,GAAG,IAAI;AACZ,GAAG;AACH,EAAE,CAAC,CAAC,MAAM,CAAC;AACX,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,0CAA0C,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AACtF,CAAC;AACD,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;AAChC;AACA;AACA,SAAS,eAAe,CAAC,IAAI,GAAG,OAAO,EAAE,EAAE;AAC3C,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,mBAAmB,CAAC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE;AAC7C,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACxC,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,IAAI;AACrB,CAAC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AACxC,CAAC,IAAI,IAAI;AACT,CAAC,IAAI;AACL,EAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC,MAAM;AACT,EAAE,OAAO,IAAI;AACb,CAAC;AACD,CAAC,MAAM,KAAK,GAAG,IAAI,EAAE,MAAM,GAAG,EAAE,CAAC;AACjC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,IAAI;AACxD,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,IAAI;AAC7C,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK;AAChC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,SAAS,GAAG,GAAG,EAAE,OAAO,IAAI;AAC5D,CAAC,OAAO;AACR,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AACnF,GAAG,KAAK,EAAE,CAAC,CAAC,KAAK;AACjB,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK;AACjC,GAAG,CAAC,CAAC;AACL,EAAE,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;AAChD,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW;AAC5C,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE;AACpD,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACxC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACjE,CAAC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AACxC,CAAC,IAAI,IAAI,GAAG;AACZ,EAAE,OAAO,EAAE,CAAC;AACZ,EAAE,MAAM,EAAE;AACV,EAAE;AACF,CAAC,IAAI;AACL,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG;AAC/B,GAAG,GAAG,IAAI;AACV,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;AAC3C,GAAG;AACH,CAAC,CAAC,CAAC,MAAM,CAAC;AACV,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE;AACtE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG;AACnB,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE;AAC3D,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;AAC/C,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AAClC,GAAG,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AACzB,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK;AACjC,GAAG,CAAC;AACJ,EAAE;AACF,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC9C,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,KAAK,EAAE;AAC5B,CAAC,OAAO,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,UAAU;AAC7C;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,QAAQ,EAAE;AAC/B,CAAC,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,aAAa,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,QAAQ,KAAK,OAAO,IAAI,CAAC,EAAE,EAAE,KAAK,OAAO,CAAC;AACzG,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,OAAO,IAAI;AACrD,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;AAChG,CAAC,OAAO;AACR,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AAC7B,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;AAC5C,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AACpI,GAAG,KAAK,EAAE,CAAC,CAAC,KAAK;AACjB,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK;AACjC,GAAG,CAAC;AACJ,EAAE;AACF;AACA;AACA,IAAI,oBAAoB,GAAG,GAAG;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE;AAC5C,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAClF,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;AAC7E,CAAC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE;AACxC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG;AACf,EAAE,KAAK,EAAE;AACT,GAAG,MAAM;AACT,GAAG,MAAM;AACT,GAAG;AACH,GAAG;AACH,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE;AAClB,GAAG,GAAG,OAAO,CAAC,GAAG;AACjB,GAAG,GAAG;AACN,GAAG,EAAE,GAAG;AACR,EAAE,CAAC;AACH,CAAC,IAAI,MAAM,GAAG,EAAE;AAChB,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,KAAK;AACrC,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC;AAC/C,CAAC,CAAC,CAAC;AACH,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AACnC,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,GAAG,KAAK;AACzH,EAAE,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ;AACtC,EAAE,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;AACpD,EAAE,IAAI,QAAQ,CAAC,KAAK,EAAE;AACtB,GAAG,IAAI,CAAC,YAAY,GAAG,QAAQ,EAAE,QAAQ,CAAC;AAC1C,GAAG,OAAO,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;AACrD,EAAE;AACF,EAAE,IAAI,KAAK,GAAG,KAAK;AACnB,EAAE,IAAI,MAAM,GAAG,KAAK;AACpB,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE,IAAI;AACnC,GAAG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACnE,GAAG,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC7C,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AACjC,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;AACnC,GAAG,CAAC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;AACjC,EAAE,CAAC,CAAC,MAAM;AACV,GAAG,KAAK,GAAG,KAAK;AAChB,GAAG,MAAM,GAAG,KAAK;AACjB,EAAE;AACF,EAAE,MAAM,KAAK,GAAG;AAChB,GAAG,KAAK;AACR,GAAG,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,mBAAmB,GAAG,0BAA0B,GAAG,QAAQ,CAAC;AACxF,GAAG;AACH,EAAE,IAAI,CAAC,YAAY,GAAG,QAAQ,EAAE,KAAK,CAAC;AACtC,EAAE,OAAO,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC;AACjE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK;AAC/D,EAAE,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;AACpC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AACxF,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AAC1B,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK;AAC/B,GAAG,MAAM,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;AAC/B,GAAG,OAAO,CAAC,IAAI,CAAC;AAChB,EAAE,CAAC,CAAC;AACJ,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK;AACnB,EAAE,IAAI,CAAC,KAAK,iBAAiB,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9F,EAAE,IAAI,CAAC,MAAM,GAAG;AAChB,GAAG,IAAI;AACP,GAAG;AACH,GAAG,CAAC;AACJ,CAAC,CAAC,CAAC;AACH,CAAC,MAAM,KAAK,GAAG,MAAM;AACrB,EAAE,IAAI,CAAC,KAAK,EAAE;AACd,EAAE,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;AAC1C,CAAC,CAAC;AACF,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,oBAAoB,CAAC;AACjF,CAAC,IAAI,QAAQ,GAAG,KAAK;AACrB,CAAC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM;AAChC,EAAE,QAAQ,GAAG,IAAI;AACjB,EAAE,KAAK,EAAE;AACT,CAAC,CAAC,EAAE,SAAS,CAAC;AACd,CAAC,IAAI;AACL,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE;AACtE,GAAG,eAAe,EAAE,GAAG,CAAC,gBAAgB;AACxC,GAAG,kBAAkB,EAAE;AACvB,IAAI,EAAE,EAAE;AACR,KAAK,YAAY,EAAE,KAAK;AACxB,KAAK,aAAa,EAAE;AACpB,KAAK;AACL,IAAI,QAAQ,EAAE;AACd,IAAI;AACJ,GAAG,UAAU,EAAE;AACf,IAAI,IAAI,EAAE,aAAa;AACvB,IAAI,OAAO,EAAE;AACb;AACA,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,gBAAgB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;AAChJ;AACA,EAAE,MAAM,eAAe,GAAG,YAAY;AACtC,GAAG,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,IAAI;AAC9C,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;AACrF,IAAI,OAAO,IAAI;AACf,GAAG,CAAC,CAAC,MAAM,CAAC;AACZ,GAAG,OAAO,KAAK;AACf,EAAE,CAAC;AACH,EAAE,MAAM,cAAc,GAAG,YAAY;AACrC,GAAG,IAAI;AACP,IAAI,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;AACnE,KAAK,GAAG,EAAE,IAAI,CAAC,GAAG;AAClB,KAAK,UAAU,EAAE,EAAE;AACnB,KAAK,GAAG,WAAW,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG;AAC/C,KAAK,CAAC;AACN,GAAG,CAAC,CAAC,OAAO,GAAG,EAAE;AACjB,IAAI,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;AAChE,IAAI,IAAI,gBAAgB,CAAC,MAAM,IAAI,oBAAoB,CAAC,GAAG,CAAC,IAAI,MAAM,eAAe,EAAE,EAAE,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;AACxJ,KAAK,GAAG,EAAE,IAAI,CAAC,GAAG;AAClB,KAAK,UAAU,EAAE,EAAE;AACnB,KAAK,GAAG,WAAW,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG;AAC/C,KAAK,CAAC;AACN,IAAI,MAAM,GAAG;AACb,GAAG;AACH,EAAE,CAAC;AACH,EAAE,IAAI,SAAS,GAAG,EAAE;AACpB,EAAE,IAAI,QAAQ;AACd,EAAE,IAAI,OAAO,GAAG,KAAK;AACrB,EAAE,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE,IAAI;AACvE,GAAG,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;AACvE,IAAI,SAAS,EAAE,IAAI,CAAC,eAAe;AACnC,IAAI,GAAG,EAAE,IAAI,CAAC,GAAG;AACjB,IAAI,UAAU,EAAE,EAAE;AAClB,IAAI,GAAG,WAAW,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG;AAC9C,IAAI,CAAC;AACL,GAAG,SAAS,GAAG,IAAI,CAAC,eAAe;AACnC,GAAG,OAAO,GAAG,IAAI;AACjB,EAAE,CAAC,CAAC,MAAM,CAAC;AACX,EAAE,IAAI,CAAC,OAAO,EAAE;AAChB,GAAG,QAAQ,GAAG,MAAM,cAAc,EAAE;AACpC,GAAG,SAAS,GAAG,QAAQ,CAAC,SAAS;AACjC,EAAE;AACF,EAAE,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC;AACtC,EAAE,IAAI,YAAY,GAAG,MAAM,EAAE,OAAO,IAAI,EAAE;AAC1C;AACA;AACA;AACA;AACA,EAAE,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK;AACpC,GAAG,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AAC5C,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE;AAClE,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO;AACvB,IAAI,YAAY;AAChB,IAAI,OAAO,EAAE,CAAC,wDAAwD;AACtE,IAAI;AACJ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,EAAE,OAAO;AAC/D,IAAI,YAAY;AAChB,IAAI,OAAO,EAAE,CAAC,+BAA+B,EAAE,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,EAAE;AACrF,IAAI;AACJ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE;AACvE,IAAI,SAAS;AACb,IAAI,QAAQ,EAAE,MAAM,CAAC,QAAQ;AAC7B,IAAI,KAAK,EAAE;AACX,IAAI,CAAC;AACL,GAAG,YAAY,GAAG,MAAM;AACxB,GAAG,OAAO,EAAE,YAAY,EAAE;AAC1B,EAAE,CAAC;AACH,EAAE,IAAI,YAAY;AAClB,EAAE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACvD,EAAE,IAAI,aAAa,EAAE;AACrB,GAAG,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC;AAChD,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO;AACtD,EAAE;AACF,EAAE,YAAY,CAAC,KAAK,CAAC;AACrB,EAAE,OAAO;AACT,GAAG,SAAS;AACZ,GAAG,OAAO;AACV,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,IAAI,EAAE;AAChC,GAAG,IAAI,YAAY,GAAG;AACtB,IAAI,OAAO,YAAY;AACvB,GAAG,CAAC;AACJ,GAAG,GAAG,YAAY,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE;AAC1C,GAAG,QAAQ;AACX,GAAG,MAAM,EAAE,OAAO,IAAI,KAAK;AAC3B,IAAI,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;AAC3E,KAAK,SAAS;AACd,KAAK,MAAM,EAAE,CAAC;AACd,MAAM,IAAI,EAAE,MAAM;AAClB,MAAM;AACN,MAAM;AACN,KAAK,CAAC;AACN,IAAI,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACjD,GAAG,CAAC;AACJ,GAAG,MAAM,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC;AACnF,GAAG,KAAK;AACR,GAAG,MAAM,EAAE,IAAI,CAAC,MAAM;AACtB,GAAG,UAAU,EAAE,MAAM;AACrB,GAAG;AACH,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE;AACf,EAAE,YAAY,CAAC,KAAK,CAAC;AACrB,EAAE,KAAK,EAAE;AACT,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAChE,EAAE,IAAI,QAAQ,EAAE;AAChB,GAAG,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,2BAA2B,CAAC;AAClH,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;AAClD,EAAE;AACF,EAAE,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;AACjE,EAAE,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;AACvD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE;AAChD,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AAC5B,EAAE,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAC3C,EAAE,IAAI,GAAG,EAAE,OAAO;AAClB,GAAG,MAAM,EAAE,GAAG,CAAC,MAAM;AACrB,GAAG,YAAY,EAAE,GAAG,CAAC,YAAY;AACjC,GAAG,SAAS,EAAE;AACd,GAAG;AACH,CAAC;AACD,CAAC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC;AAChD,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC;AACjE,CAAC,OAAO;AACR,EAAE,GAAG,MAAM;AACX,EAAE,SAAS,EAAE;AACb,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,EAAE,EAAE;AAC/D,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;AACpD;AACA,CAAC,IAAI,OAAO,GAAG,IAAI;AACnB,CAAC,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,EAAE;AACxC,EAAE,GAAG;AACL,EAAE,MAAM,EAAE,OAAO;AACjB,GAAG,KAAK,EAAE,KAAK;AACf,GAAG,MAAM,EAAE;AACX,GAAG;AACH,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;AAChB,EAAE,OAAO,GAAG,CAAC;AACb,EAAE,OAAO,CAAC;AACV,CAAC,CAAC,CAAC;AACH,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK;AAC5C,EAAE,UAAU,CAAC,MAAM;AACnB,GAAG,MAAM,iBAAiB,IAAI,KAAK,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,2BAA2B,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;AAClJ,EAAE,CAAC,EAAE,EAAE,CAAC;AACR,CAAC,CAAC,CAAC;AACH,CAAC,IAAI;AACL,EAAE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACvD,EAAE,MAAM,GAAG,GAAG;AACd,GAAG,MAAM,EAAE,MAAM,CAAC,MAAM;AACxB,GAAG,YAAY,EAAE,MAAM,CAAC;AACxB,GAAG;AACH,EAAE,MAAM,CAAC,KAAK,EAAE;AAChB,EAAE,OAAO,GAAG,IAAI;AAChB,EAAE,OAAO,GAAG;AACZ,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE;AACf,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAChD,EAAE,IAAI;AACN,GAAG,OAAO,EAAE,KAAK,EAAE;AACnB,EAAE,CAAC,CAAC,MAAM,CAAC;AACX,EAAE,MAAM,GAAG;AACX,CAAC;AACD;AACA;AACA,SAAS,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE;AACtC,CAAC,IAAI;AACL,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC;AACzB,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE;AACf,EAAE,OAAO;AACT,GAAG,KAAK,EAAE,KAAK;AACf,GAAG,MAAM,EAAE,CAAC,sBAAsB,EAAE,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC;AAC7E,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,sBAAsB,CAAC,OAAO,EAAE;AACzC,CAAC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;AAC7B,CAAC,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG;AAC7D;AACA,IAAI,aAAa,GAAG,EAAE;AACtB;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,OAAO,EAAE,KAAK,GAAG,EAAE,EAAE;AAC3C,CAAC,MAAM,MAAM,GAAG,CAAC,GAAG,eAAe,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AACtF,CAAC,MAAM,KAAK,GAAG,EAAE;AACjB,CAAC,MAAM,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAC9F,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE;AACnB,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,EAAE;AACrE,EAAE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,GAAG,EAAE;AAC3E,EAAE,MAAM,eAAe,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AACpI,EAAE,MAAM,MAAM,GAAG,CAAC,IAAI,KAAK;AAC3B,GAAG,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;AACxD,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,OAAO,IAAI;AAC5F,GAAG,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK;AAC5C,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;AAC3C,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3C,GAAG,CAAC,CAAC;AACL,EAAE,CAAC;AACH,EAAE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC9B,GAAG,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;AAC/D,GAAG,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,6CAA6C,EAAE,IAAI,CAAC,CAAC,CAAC;AACtI,EAAE;AACF,EAAE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAClC,GAAG,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;AACjE,GAAG,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,qCAAqC,EAAE,IAAI,CAAC,CAAC,CAAC;AAClJ,EAAE;AACF,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvD,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE;AACtB,GAAG,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC;AAChD,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;AAC7C,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,4CAA4C,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAChJ,EAAE;AACF,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC;AACtF,CAAC,OAAO;AACR,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;AACzB,EAAE,MAAM;AACR,EAAE;AACF,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE;AAC9C,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;AACtC,CAAC,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC;AACrE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO;AAC9B,EAAE,EAAE,EAAE,KAAK;AACX,EAAE,IAAI,EAAE,GAAG;AACX,EAAE,MAAM,EAAE,CAAC,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1C,EAAE,KAAK,EAAE,EAAE;AACX,EAAE,KAAK,EAAE;AACT,EAAE;AACF,CAAC,IAAI,OAAO;AACZ,CAAC,IAAI;AACL,EAAE,OAAO,GAAG,aAAa,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE;AACf,EAAE,OAAO;AACT,GAAG,EAAE,EAAE,KAAK;AACZ,GAAG,IAAI,EAAE,GAAG;AACZ,GAAG,MAAM,EAAE,CAAC,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAC7D,GAAG,KAAK,EAAE;AACV,GAAG;AACH,CAAC;AACD,CAAC,MAAM,IAAI,GAAG,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,GAAG,EAAE;AAC9E,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AAC/D,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,IAAI,EAAE;AAChE,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AAC7D,CAAC,MAAM,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,KAAK,UAAU,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,KAAK,iBAAiB,CAAC,GAAG,CAAC,IAAI,sBAAsB,CAAC,GAAG,CAAC;AAC9N;AACA,CAAC,IAAI,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;AACpF;AACA,CAAC,MAAM,MAAM,GAAG,EAAE;AAClB,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAE,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC;AAC9G,MAAM,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,2HAA2H,CAAC;AACzJ,MAAM,IAAI;AACV,EAAE,KAAK,GAAG,CAAC,cAAc,CAAC;AAC1B,GAAG,IAAI;AACP,GAAG,MAAM;AACT,GAAG,IAAI;AACP,GAAG,QAAQ,EAAE,QAAQ,CAAC,GAAG;AACzB,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;AACpC,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE;AACf,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,wBAAwB,EAAE,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,mEAAmE,CAAC,CAAC;AAC/J,CAAC;AACD,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC;AAC5C,CAAC,MAAM,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC;AAChD,CAAC,OAAO;AACR,EAAE,EAAE,EAAE,SAAS,CAAC,MAAM,KAAK,CAAC;AAC5B,EAAE,MAAM,EAAE,SAAS;AACnB,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK;AACrB,EAAE,IAAI,EAAE;AACR,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE;AAClD,CAAC,IAAI,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,6CAA6C,CAAC;AACvK,CAAC,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACvE,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACvE,CAAC,MAAM,KAAK,GAAG;AACf,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACpB,EAAE,EAAE;AACJ,EAAE,uGAAuG;AACzG,EAAE,EAAE;AACJ,EAAE,WAAW;AACb,EAAE,QAAQ,IAAI;AACd,EAAE;AACF,CAAC,IAAI,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC;AACjC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,kBAAkB,EAAE,6HAA6H,EAAE,qFAAqF,EAAE,0KAA0K,EAAE,iGAAiG,EAAE,qDAAqD,EAAE,sCAAsC,EAAE,CAAC,oBAAoB,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,0CAA0C,CAAC;AACvrB,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,qBAAqB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,EAAE;AAC9E,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AAC7C,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AAC3C,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY,EAAE,OAAO,KAAK;AAC1D,CAAC,IAAI,OAAO;AACZ,CAAC,IAAI;AACL,EAAE,OAAO,GAAG,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC,MAAM;AACT,EAAE,OAAO,KAAK;AACd,CAAC;AACD,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK;AACpF,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI;AAC7B,CAAC,MAAM,IAAI,GAAG,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE;AACrG,CAAC,IAAI,SAAS,EAAE,IAAI,CAAC,KAAK,GAAG,SAAS;AACtC,CAAC,IAAI,OAAO,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO;AAClC,CAAC,IAAI,YAAY,EAAE,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,YAAY,EAAE;AAC1D,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI;AACpB,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;AACzE,CAAC,OAAO,IAAI;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,GAAG,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC;AACF,IAAI,KAAK,GAAG,CAAC;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8MAA8M,CAAC;AAC/M;AACA,SAAS,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE,EAAE;AAC/C,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;AAC1B;AACA;AACA;AACA,oIAAoI,CAAC;AACrI,CAAC,OAAO,CAAC;AACT,+BAA+B,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC;AACxD,2BAA2B,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;AAC9C;AACA;AACA,oIAAoI,CAAC;AACrI;AACA;AACA,SAAS,kBAAkB,CAAC,QAAQ,EAAE;AACtC,CAAC,OAAO,CAAC,sCAAsC,EAAE,aAAa,CAAC,MAAM,CAAC,QAAQ,IAAI,qCAAqC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAClI;AAiBA;AACA,SAAS,gBAAgB,CAAC,GAAG,GAAG,EAAE,EAAE;AACpC,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;AAC1B;AACA;AACA,iLAAiL,CAAC;AAClL,CAAC,OAAO,CAAC;AACT;AACA;AACA,iLAAiL,CAAC;AAClL;AAaA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,IAAI,EAAE;AACjC,CAAC,MAAM,MAAM,GAAmC,OAAO;AACvD,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAsC,sBAAsB,CAAC;AACzG,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,uBAAuB;AAC3E,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS;AACzD,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAA+B,EAAE,CAAC;AACxF,CAAC,MAAM,SAAS,GAAG;AACnB,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC5C,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC5C,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACvC,EAAE;AACF,CAAC,IAAI,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,yCAAyC,CAAC,EAAE,CAAC,kEAAkE,CAAC,EAAE,CAAC,yDAAyD,CAAC,CAAC;AAC/L,CAAC,MAAM,SAAS,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;AAC5D,CAAC,OAAO,mBAAmB,CAAC,OAAO,CAAC,0BAA0B,EAAE,SAAS,CAAC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,wBAAwB,CAAC,GAAG,EAAE;AACvC,CAAC,MAAM,KAAK,GAAG,CAAC,8CAA8C,CAAC;AAC/D,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,oBAAoB,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACxE,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,oBAAoB,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACxE,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAClE,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,uCAAuC,EAAE,GAAG,CAAC,WAAW,CAAC,qEAAqE,CAAC,CAAC;AAClK,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,EAAE;AACxD,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE;AACnB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,qBAAqB,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACtD,EAAE,MAAM,KAAK,GAAG,GAAG;AACnB,EAAE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE;AACzC,GAAG,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AAC5C,GAAG,IAAI,CAAC,IAAI,EAAE;AACd,GAAG,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AAClD,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAC5D,EAAE;AACF,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC;AACD,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;AAC9E,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE;AACrB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,uGAAuG,CAAC,CAAC;AACvH,EAAE,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9D,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AACD,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;AACpF,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,mCAAmC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9G,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE;AACtC,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,kBAAkB,EAAE;AACnE,CAAC,MAAM,UAAU,GAAG,aAAa,CAAC,cAAc,CAAC;AACjD,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAA2C,sBAAsB,CAAC;AAC9G,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,uBAAuB;AAC3E,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS;AACzD,CAAC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9B,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/D,CAAC,MAAM,QAAQ,GAAG,GAAG,GAAyD,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC,GAAoE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC;AACvN,CAAC,MAAM,WAAW,GAAG,wBAAwB,CAAC;AAC9C,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW;AAC/B,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS;AAC3B,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS;AAC3B,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO;AACvB,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK;AACnB,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO;AACvB,EAAE,WAAW,EAAE,IAAI,CAAC;AACpB,EAAE,CAAC;AACH,CAAC,MAAM,cAAc,GAAG,OAAO,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM;AAC5M,CAAC,MAAM,eAAe,GAAG,GAAG,GAAG,CAAC,oBAAoB,EAAE,UAAU,CAAC,4HAA4H,CAAC,GAAG,CAAC;;AAElM,EAAE,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC;;AAEvC,2FAA2F,EAAE,UAAU,CAAC;AACxG,0JAA0J,CAAC;AAC3J,CAAC,OAAO,CAAC;;AAET,MAAM,EAAE,IAAI;AACZ,qBAAqB,EAAE,MAAM;AAC7B,mBAAmB,EAAE,IAAI;;AAEzB,EAAE,QAAQ;AACV,EAAE,cAAc,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE;AAC5C;AACA,EAAE,KAAK;;AAEP,sBAAsB,EAAE,UAAU,CAAC,yEAAyE,EAAE,UAAU,CAAC;AACzH;AACA;AACA;AACA;AACA;;AAEA,EAAE,iBAAiB,CAAC,IAAI,CAAC;;AAEzB;;AAEA;;AAEA,EAAE,eAAe,CAAC,CAAC;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uBAAuB,CAAC,KAAK,EAAE;AACxC,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AAC7C,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACjD,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS;AACjE,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACjE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC;AAC5H,CAAC,eAAe,CAAC,IAAI,CAAC;AACtB,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE;AACtC,EAAE,MAAM;AACR,EAAE;AACF,EAAE,CAAC;AACH,CAAC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,cAAc,CAAC;AACnD,CAAC,IAAI,SAAS;AACd,CAAC,IAAI;AACL,EAAE,SAAS,GAAG,iBAAiB,CAAC;AAChC,GAAG,IAAI;AACP,GAAG,MAAM;AACT,GAAG,IAAI;AACP,GAAG,GAAG,MAAM,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG;AACxC,GAAG,CAAC;AACJ,CAAC,CAAC,CAAC,MAAM;AACT,EAAE,SAAS,GAAG,iBAAiB,CAAC;AAChC,GAAG,IAAI;AACP,GAAG,MAAM;AACT,GAAG;AACH,GAAG,CAAC;AACJ,CAAC;AACD,CAAC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC;AACtC,CAAC,MAAM,WAAW,GAAG,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,IAAI;AAC/F,CAAC,OAAO;AACR,EAAE,cAAc;AAChB,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AACzB,EAAE,WAAW;AACb,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,MAAM;AAC1C,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,MAAM;AAC1C,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,MAAM;AACtC,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM;AAC7C,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI;AACf,GAAG,UAAU,EAAE,CAAC,CAAC;AACjB,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE;AAC3C,EAAE,WAAW,EAAE,MAAM,CAAC;AACtB,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE;AACnC,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACvC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AACtH,EAAE,GAAG,IAAI;AACT,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;AAC1B,EAAE,CAAC;AACH,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;AAC5B,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;AAC3E,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;AACd,GAAG,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;AACzB,GAAG,MAAM,MAAM,GAAG;AAClB,IAAI,GAAG,IAAI;AACX,IAAI,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK;AACpC,IAAI,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI;AACjC,IAAI,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC;AACjC,IAAI;AACJ,GAAG,OAAO;AACV,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACzB,IAAI,MAAM;AACV,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;AACzB,IAAI;AACJ,EAAE;AACF,CAAC;AACD,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;AAClC,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC;AAC/F,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO;AACrB,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,GAAG,KAAK;AACR,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;AACxB,GAAG;AACH,CAAC;AACD,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,UAAU,GAAG,2tBAA2tB;AAC5uB;AACA;AACA;AACA;AACA,IAAI,gBAAgB,GAAG,8JAA8J;AACrL;AACA,IAAI,aAAa,GAAG,IAAI,GAAG,GAAG;AAC9B,IAAI,UAAU,GAAG,GAAG;AACpB;AACA,IAAI,qBAAqB,GAAG,GAAG,GAAG,GAAG;AACrC,IAAI,QAAQ,mBAAmB,IAAI,GAAG,EAAE;AACxC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;AAC3B,CAAC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE;AAC1D,CAAC,CAAC;AACF,SAAS,aAAa,GAAG;AACzB,CAAC,OAAO,YAAY,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AACvD,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE;AACd,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK;AACpB,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;AACd,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC9B,EAAE,CAAC,CAAC;AACJ;AACA,IAAI,WAAW,mBAAmB,IAAI,GAAG,EAAE;AAC3C;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE;AACzC,CAAC,IAAI,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;AAC7C,CAAC,IAAI,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;AACnC,CAAC,IAAI,CAAC,GAAG,EAAE;AACX,EAAE,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC;AAClC,EAAE,GAAG,GAAG,mBAAmB,CAAC,KAAK,EAAE;AACnC,GAAG,GAAG;AACN,GAAG,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK;AAC7B,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK;AACtB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;AACzD,GAAG,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM;AACpD,GAAG,OAAO,IAAI;AACd,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK;AACpB,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;AAC9B,GAAG,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;AAC/D,GAAG,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;AACjE,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC;AAC/B,EAAE,CAAC,CAAC;AACJ,EAAE,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC;AAC/B,CAAC;AACD,CAAC,OAAO,GAAG;AACX;AACA,SAAS,SAAS,CAAC,OAAO,EAAE;AAC5B,CAAC,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,OAAO,CAAC;AAC/D,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,uBAAuB,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;AAC7E,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAClF,CAAC,OAAO,KAAK;AACb;AACA,SAAS,IAAI,CAAC,KAAK,EAAE;AACrB,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,kBAAkB,EAAE,GAAG,KAAK;AACpJ,CAAC,OAAO;AACR,EAAE,EAAE;AACJ,EAAE,OAAO;AACT,EAAE,UAAU;AACZ,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,cAAc;AAChB,EAAE,YAAY;AACd,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,YAAY,EAAE,OAAO,CAAC,kBAAkB,CAAC;AAC3C,EAAE,GAAG,aAAa,GAAG,EAAE,aAAa,EAAE,GAAG;AACzC,EAAE;AACF;AACA,SAAS,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE;AACzD,CAAC,OAAO,oBAAoB,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC;AACzD;AACA;AACA,SAAS,cAAc,CAAC,OAAO,EAAE;AACjC,CAAC,OAAO,iBAAiB,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;AAChD;AACA;AACA,SAAS,eAAe,CAAC,KAAK,EAAE;AAChC,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI;AACxB,CAAC,IAAI,CAAC,IAAI,EAAE;AACZ,CAAC,IAAI;AACL,EAAE,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;AAC7B,EAAE,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC;AAChE,EAAE,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACtG,EAAE,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC;AACnH,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,cAAc,EAAE;AACxD,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM;AACvB,GAAG,IAAI,EAAE,KAAK,CAAC;AACf,GAAG,CAAC;AACJ,CAAC,CAAC,CAAC,MAAM,CAAC;AACV;AACA;AACA,SAAS,eAAe,CAAC,KAAK,EAAE;AAChC,CAAC,eAAe,CAAC,KAAK,CAAC;AACvB,CAAC,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC;AAC/D,CAAC,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC;AACpD,CAAC,MAAM,OAAO,GAAG,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC;AACtF,CAAC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;AACvC,CAAC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;AACvC,CAAC,OAAO;AACR,EAAE,gFAAgF;AAClF,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AACzB,EAAE,CAAC,uBAAuB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AAC1C,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AACzB,EAAE,OAAO,GAAG,CAAC,yCAAyC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,2FAA2F,CAAC;AACrL,EAAE,OAAO,GAAG,CAAC,kCAAkC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,8FAA8F,CAAC;AACjL,EAAE,EAAE;AACJ,EAAE;AACF,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;AACb;AACA,SAAS,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE;AAC3D,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,YAAY;AAChC,CAAC,IAAI,KAAK,KAAK,QAAQ,EAAE,OAAO,mBAAmB;AACnD,CAAC,IAAI,KAAK,KAAK,SAAS,EAAE,OAAO,0BAA0B;AAC3D,CAAC,OAAO,mBAAmB;AAC3B;AACA,SAAS,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACtD,CAAC,IAAI,KAAK,CAAC,kBAAkB,EAAE,OAAO,OAAO,CAAC,OAAO,CAAC;AACtD,EAAE,KAAK,EAAE,IAAI;AACb,EAAE,MAAM,EAAE;AACV,EAAE,CAAC;AACH,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE;AACtC,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE;AACjC,CAAC,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC;AAC1C,CAAC,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,OAAO,GAAG,EAAE,GAAG,QAAQ,CAAC,KAAK,IAAI,IAAI,IAAI,aAAa,CAAC;AAC3G,CAAC,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC;AACrD,CAAC,MAAM,IAAI,GAAG;AACd,EAAE,SAAS;AACX,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,OAAO,EAAE,OAAO,IAAI;AACtB,EAAE;AACF,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,EAAE,IAAI,EAAE,YAAY;AACpB,EAAE,GAAG,IAAI;AACT,EAAE,KAAK,EAAE,KAAK;AACd,EAAE,OAAO,EAAE;AACX,EAAE,CAAC;AACH,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AACjC,EAAE,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM;AACjC,GAAG,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC;AAC7C,GAAG,IAAI,CAAC,KAAK,EAAE;AACf,IAAI,IAAI,EAAE,YAAY;AACtB,IAAI,GAAG,IAAI;AACX,IAAI,MAAM,EAAE,gBAAgB;AAC5B,IAAI,KAAK,EAAE,KAAK;AAChB,IAAI,OAAO,EAAE;AACb,IAAI,CAAC;AACL,GAAG,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC5B,EAAE,CAAC,EAAE,qBAAqB,CAAC;AAC3B,EAAE,KAAK,CAAC,KAAK,IAAI;AACjB,EAAE,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE;AAC1C,GAAG,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK;AAC7B,IAAI,YAAY,CAAC,KAAK,CAAC;AACvB,IAAI,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC;AAC9C,IAAI,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,MAAM;AACvC,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,QAAQ,CAAC,EAAE,KAAK,CAAC,kBAAkB,GAAG,IAAI;AAC7F,IAAI,IAAI,CAAC,KAAK,EAAE;AAChB,KAAK,IAAI,EAAE,YAAY;AACvB,KAAK,GAAG,IAAI;AACZ,KAAK,MAAM,EAAE,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;AACxD,KAAK,KAAK;AACV,KAAK,OAAO,EAAE,KAAK;AACnB,KAAK,KAAK,EAAE,IAAI,EAAE;AAClB,KAAK,CAAC;AACN,IAAI,OAAO,CAAC;AACZ,KAAK,KAAK;AACV,KAAK,MAAM,EAAE,KAAK,IAAI,KAAK,KAAK;AAChC,KAAK,CAAC;AACN,GAAG,CAAC;AACJ,GAAG;AACH,GAAG,CAAC;AACJ,CAAC,CAAC,CAAC;AACH;AACA,SAAS,WAAW,CAAC,EAAE,EAAE;AACzB,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/B,CAAC,OAAO,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;AAClC;AACA;AACA;AACA;AACA;AACA,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE;AAC/B,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,EAAE;AAC7C,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,IAAI,kBAAkB,CAAC,CAAC,CAAC;AACjH,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC9F;AACA,SAAS,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE;AAC5B,CAAC,IAAI,GAAG;AACR,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG;AACzF,MAAM;AACN,EAAE,GAAG,GAAG,EAAE,KAAK,CAAC,GAAG;AACnB,EAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM,GAAG;AAC1C,GAAG,IAAI,EAAE,KAAK,CAAC,IAAI;AACnB,GAAG;AACH,GAAG,GAAG,IAAI;AACV,CAAC;AACD,CAAC,MAAM,IAAI,GAAG;AACd,EAAE,GAAG,KAAK;AACV,EAAE;AACF,EAAE;AACF,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;AACrB,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;AAC9C,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,UAAU,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;AAC9E,CAAC,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC;AACvD;AACA,SAAS,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;AAC3C,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;AACtB,CAAC,IAAI,MAAM,KAAK,OAAO,EAAE,KAAK,CAAC,aAAa,GAAG,OAAO,IAAI,KAAK,CAAC,aAAa,IAAI,mBAAmB;AACpG,MAAM,IAAI,OAAO,KAAK,MAAM,EAAE,OAAO,KAAK,CAAC,aAAa;AACxD,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,EAAE,IAAI,EAAE,QAAQ;AAChB,EAAE,MAAM;AACR,EAAE,GAAG,OAAO,IAAI,MAAM,KAAK,OAAO,GAAG,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,aAAa,EAAE,GAAG;AACnF,EAAE,CAAC;AACH;AACA;AACA,SAAS,OAAO,CAAC,MAAM,EAAE;AACzB,CAAC,QAAQ,MAAM,CAAC,aAAa;AAC7B,EAAE,KAAK,qBAAqB;AAC5B,EAAE,KAAK,qBAAqB,EAAE;AAC9B,GAAG,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;AACjC,GAAG,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,IAAI;AAC5D,GAAG,OAAO;AACV,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,IAAI,EAAE,MAAM,CAAC,aAAa,KAAK,qBAAqB,GAAG,SAAS,GAAG,SAAS;AAChF,IAAI,IAAI,EAAE,OAAO,CAAC;AAClB,IAAI;AACJ,EAAE;AACF,EAAE,KAAK,WAAW;AAClB,EAAE,KAAK,kBAAkB,EAAE,OAAO;AAClC,GAAG,IAAI,EAAE,MAAM;AACf,GAAG,EAAE,EAAE,MAAM,CAAC,UAAU;AACxB,GAAG,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;AAC5B,GAAG,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;AAC1B,GAAG,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI;AAC5B,GAAG;AACH,EAAE,KAAK,MAAM,EAAE,OAAO;AACtB,GAAG,IAAI,EAAE,MAAM;AACf,GAAG,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AACvC,IAAI,OAAO,EAAE,CAAC,CAAC,OAAO;AACtB,IAAI,MAAM,EAAE,CAAC,CAAC;AACd,IAAI,CAAC;AACL,GAAG;AACH,EAAE,SAAS,OAAO,IAAI;AACtB;AACA;AACA,SAAS,iBAAiB,CAAC,KAAK,EAAE;AAClC,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC;AACnD,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC,MAAM;AACpC,EAAE,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;AAChC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE;AACnB,EAAE,KAAK,CAAC,GAAG,GAAG,IAAI;AAClB,CAAC,CAAC,EAAE,aAAa,CAAC;AAClB,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI;AAC1B;AACA;AACA,eAAe,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;AAChD,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AAC1C,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG;AACxB,CAAC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC1C,CAAC,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,YAAY;AACzG,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE;AACjC,EAAE,IAAI,EAAE,QAAQ;AAChB,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM;AACtB,EAAE,OAAO,EAAE,MAAM,CAAC;AAClB,EAAE,CAAC;AACH,CAAC,OAAO,GAAG;AACX;AACA;AACA,eAAe,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE;AACvC,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,OAAO,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;AAC7D,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,OAAO,aAAa,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;AAC7E,CAAC,KAAK,CAAC,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE;AAC/C,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI;AACjB,EAAE,KAAK;AACP,EAAE,eAAe,EAAE,KAAK,CAAC,YAAY,IAAI,MAAM;AAC/C,EAAE,MAAM,EAAE,CAAC,QAAQ,KAAK,gBAAgB,CAAC,QAAQ,EAAE;AACnD,GAAG,IAAI,EAAE,KAAK,CAAC,IAAI;AACnB,GAAG,cAAc,EAAE,KAAK,CAAC,cAAc;AACvC,GAAG,IAAI,EAAE,KAAK,CAAC;AACf,GAAG,CAAC;AACJ,EAAE,QAAQ,EAAE,CAAC,MAAM,KAAK;AACxB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,YAAY,EAAE;AACzC,GAAG,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;AAChC,GAAG,IAAI,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;AAChC,EAAE,CAAC;AACH,EAAE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC1F,EAAE,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK;AACxC,GAAG,IAAI,QAAQ,CAAC,KAAK,EAAE;AACvB,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,IAAI,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpG,EAAE,CAAC;AACH,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK;AAChC,GAAG,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI;AAC7B,GAAG,KAAK,CAAC,GAAG,GAAG,IAAI;AACnB,GAAG,IAAI,OAAO,EAAE;AAChB,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK;AACtB,IAAI,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC;AAC5E,IAAI,IAAI,IAAI,EAAE;AACd,KAAK,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC;AACpC,KAAK;AACL,IAAI;AACJ,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,GAAG,CAAC,CAAC;AACxD,IAAI,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC;AACjF,IAAI,IAAI,YAAY,EAAE;AACtB,KAAK,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC;AAC5C,KAAK;AACL,IAAI;AACJ,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;AACnE,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,IAAI,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACpG,GAAG;AACH,EAAE;AACF,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK;AAClB,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY;AACnC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG;AACjB,EAAE,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,SAAS;AACpC,EAAE,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;AAC9B,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI;AAC5B,GAAG,IAAI,CAAC,KAAK,EAAE;AACf,IAAI,IAAI,EAAE,QAAQ;AAClB,IAAI,MAAM,EAAE,KAAK,CAAC,MAAM;AACxB,IAAI,OAAO,EAAE;AACb,IAAI,CAAC;AACL,EAAE;AACF,EAAE,IAAI;AACN,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,cAAc,EAAE;AACrD,IAAI,OAAO,EAAE,KAAK,CAAC,OAAO;AAC1B,IAAI,SAAS,EAAE,GAAG,CAAC,SAAS;AAC5B,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG;AAC9C,IAAI,CAAC;AACL,EAAE,CAAC,CAAC,MAAM,CAAC;AACX,EAAE,IAAI,GAAG,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,YAAY;AACjG,EAAE,IAAI,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE;AACpC,GAAG,IAAI,EAAE,QAAQ;AACjB,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM;AACvB,GAAG,OAAO,EAAE,GAAG,CAAC;AAChB,GAAG,CAAC;AACJ,EAAE,OAAO,GAAG;AACZ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM;AAClB,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI;AACvB,CAAC,CAAC,CAAC;AACH,CAAC,OAAO,aAAa,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;AACzD;AACA,SAAS,KAAK,CAAC,IAAI,EAAE;AACrB,CAAC,IAAI;AACL,EAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO;AAC/B,CAAC,CAAC,CAAC,MAAM;AACT,EAAE,OAAO,CAAC;AACV,CAAC;AACD;AACA;AACA,IAAI,mBAAmB,GAAG,CAAC;AAC3B;AACA;AACA;AACA;AACA,SAAS,gBAAgB,CAAC,KAAK,EAAE;AACjC,CAAC,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI;AACnE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,IAAI;AACnC,CAAC,OAAO;AACR,EAAE,IAAI;AACN,EAAE,MAAM,EAAE,eAAe,CAAC,IAAI,EAAE;AAChC,GAAG,IAAI,EAAE,KAAK,CAAC,IAAI;AACnB,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM;AACvB,GAAG,IAAI,EAAE,KAAK,CAAC,IAAI;AACnB,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,GAAG;AAC7D,GAAG;AACH,EAAE;AACF;AACA;AACA,SAAS,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE;AACnD,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;;AAEpF,qEAAqE,EAAE,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;;AAE/H,EAAE,UAAU;;AAEZ,EAAE,gBAAgB,CAAC,CAAC;AACpB;AACA,SAAS,qBAAqB,CAAC,KAAK,EAAE;AACtC,CAAC,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC;AAChD,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,uEAAuE,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;AAC3L,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AACzC,CAAC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC;AACzC,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,kCAAkC,EAAE,QAAQ,CAAC;AACjE,EAAE,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,oGAAoG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE;AAClN;AACA,UAAU,EAAE,QAAQ,CAAC;AACrB;AACA;;AAEA,EAAE,UAAU;;AAEZ,EAAE,gBAAgB,CAAC,CAAC;AACpB;AACA,eAAe,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE;AACtD,CAAC,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI;AACnE,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE;AAClD,EAAE,IAAI,WAAW,GAAG,CAAC,EAAE,OAAO,WAAW,CAAC,KAAK,EAAE,MAAM,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,2EAA2E,GAAG,8CAA8C,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC;AAC9Q,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE;AAC3C,GAAG,IAAI,EAAE,QAAQ;AACjB,GAAG,EAAE,EAAE,KAAK;AACZ,GAAG,QAAQ,EAAE,KAAK,CAAC,cAAc;AACjC,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,sBAAsB,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAChF,GAAG,KAAK,EAAE;AACV,GAAG,CAAC;AACJ,EAAE;AACF,CAAC;AACD,CAAC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE;AACtC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI;AAClB,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM;AACtB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI;AAClB,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,GAAG;AAC5D,EAAE,CAAC;AACH,CAAC,IAAI,MAAM,CAAC,EAAE,EAAE;AAChB,EAAE,qBAAqB,CAAC,IAAI,EAAE;AAC9B,GAAG,KAAK,EAAE,KAAK,CAAC,UAAU;AAC1B,GAAG,KAAK,EAAE,KAAK,CAAC,KAAK;AACrB,GAAG,YAAY,EAAE;AACjB,IAAI,OAAO,EAAE,KAAK,CAAC,OAAO;AAC1B,IAAI,SAAS,EAAE,KAAK,CAAC,YAAY;AACjC,IAAI,cAAc,EAAE,KAAK,CAAC;AAC1B;AACA,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,KAAK,EAAE;AACd,GAAG,IAAI,EAAE,QAAQ;AACjB,GAAG,EAAE,EAAE,IAAI;AACX,GAAG,QAAQ,EAAE,KAAK,CAAC,cAAc;AACjC,GAAG,MAAM,EAAE,EAAE;AACb,GAAG,KAAK,EAAE;AACV,GAAG,CAAC;AACJ,EAAE;AACF,CAAC;AACD,CAAC,MAAM,QAAQ,GAAG,WAAW,GAAG,CAAC;AACjC,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,EAAE,IAAI,EAAE,QAAQ;AAChB,EAAE,EAAE,EAAE,KAAK;AACX,EAAE,QAAQ,EAAE,KAAK,CAAC,cAAc;AAChC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM;AACvB,EAAE,KAAK,EAAE,CAAC;AACV,EAAE,CAAC;AACH,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,CAAC,MAAM,WAAW,CAAC,KAAK,EAAE,MAAM,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,6CAA6C,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC;AAC3J;AACA;AACA,eAAe,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;AAC9C,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,EAAE,IAAI,EAAE,MAAM;AACd,EAAE,IAAI,EAAE,KAAK;AACb,EAAE,IAAI,EAAE;AACR,EAAE,CAAC;AACH,CAAC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC;AACnC,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;AAC3B,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE;AACtB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;AAChD,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,EAAE,IAAI,EAAE,MAAM;AACd,EAAE;AACF,EAAE,CAAC;AACH,CAAC,OAAO,OAAO;AACf;AACA,eAAe,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAChD,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC;AAC5F,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI;AAClB,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI;AAClB,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC;AACnD,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,EAAE,IAAI,EAAE,MAAM;AACd,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK;AAClB,EAAE,IAAI,EAAE,IAAI,KAAK,QAAQ,GAAG,QAAQ,GAAG;AACvC,EAAE,CAAC;AACH,CAAC,IAAI;AACL,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC/E,EAAE,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;AAChD,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,2BAA2B,CAAC;AAC1D,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE;AAC1B,EAAE,KAAK,CAAC,UAAU,GAAG,EAAE;AACvB,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;AAC/C,EAAE,IAAI,CAAC,KAAK,EAAE;AACd,GAAG,IAAI,EAAE,MAAM;AACf,GAAG;AACH,GAAG,CAAC;AACJ,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,UAAU,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,mBAAmB,CAAC;AACxG,EAAE,KAAK,CAAC,IAAI,GAAG,KAAK;AACpB,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;AAC1B,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE;AACf,EAAE,KAAK,CAAC,IAAI,GAAG,KAAK;AACpB,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;AAC9D,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC;AAC5F,CAAC,CAAC,SAAS;AACX,EAAE,iBAAiB,CAAC,KAAK,CAAC;AAC1B,CAAC;AACD;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE;AACjC,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,EAAE;AAC/C,CAAC,MAAM,KAAK,GAAG;AACf,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE;AACtC,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;AACvB,EAAE,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK;AAC7B,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK;AACrB,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI;AACnB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM;AACvB,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI;AACnB,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc;AACvC,EAAE,YAAY;AACd,EAAE,MAAM,EAAE,MAAM;AAChB,EAAE,IAAI,EAAE,KAAK;AACb,EAAE,KAAK;AACP,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,QAAQ,EAAE,IAAI;AAChB,EAAE,IAAI,EAAE,KAAK;AACb,EAAE,MAAM,EAAE,EAAE;AACZ,EAAE,GAAG,EAAE,CAAC;AACR,EAAE,OAAO,EAAE,IAAI;AACf,EAAE,SAAS,kBAAkB,IAAI,GAAG,EAAE;AACtC,EAAE,SAAS,EAAE,IAAI;AACjB,EAAE,UAAU,EAAE,EAAE;AAChB,EAAE,YAAY,EAAE,KAAK;AACrB,EAAE,IAAI,EAAE,IAAI;AACZ,EAAE,SAAS,EAAE,IAAI;AACjB,EAAE,kBAAkB,kBAAkB,IAAI,GAAG,EAAE;AAC/C,EAAE,kBAAkB,EAAE,KAAK;AAC3B,EAAE,SAAS,EAAE;AACb,EAAE;AACF,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC;AAC9B,CAAC,OAAO,KAAK;AACb;AACA;AACA,SAAS,WAAW,CAAC,KAAK,EAAE;AAC5B,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;AAClD,EAAE,GAAG,KAAK;AACV,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI;AACxB,EAAE,CAAC;AACH,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,EAAE,IAAI,EAAE,OAAO;AACf,EAAE,KAAK,EAAE,MAAM;AACf,EAAE,MAAM,EAAE;AACV,EAAE,CAAC;AACH,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,qBAAqB,CAAC;AACpD,CAAC,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC;AACtC,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC;AACnB;AACA,eAAe,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE;AACrD,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC;AACtD,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE;AACjD,CAAC,IAAI,UAAU,GAAG;AAClB,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc;AACtC,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,WAAW,EAAE,IAAI;AACnB,EAAE,KAAK,EAAE,EAAE;AACX,EAAE,OAAO,EAAE,EAAE;AACb,EAAE,WAAW,EAAE;AACf,EAAE;AACF,CAAC,IAAI;AACL,EAAE,UAAU,GAAG,uBAAuB,CAAC;AACvC,GAAG,IAAI,EAAE,KAAK,CAAC,IAAI;AACnB,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM;AACvB,GAAG,IAAI,EAAE,KAAK,CAAC,IAAI;AACnB,GAAG,cAAc,EAAE,KAAK,CAAC,cAAc;AACvC,GAAG,GAAG,EAAE;AACR,GAAG,CAAC;AACJ,EAAE,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;AAClD,EAAE,KAAK,CAAC,SAAS,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;AAC/D,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM;AAClC,EAAE,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,gCAAgC,CAAC,GAAG,4CAA4C;AACxJ,EAAE,IAAI,CAAC,KAAK,EAAE;AACd,GAAG,IAAI,EAAE,OAAO;AAChB,GAAG,KAAK,EAAE,MAAM;AAChB,GAAG;AACH,GAAG,CAAC;AACJ,EAAE,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC;AACtC,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE;AACf,EAAE,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;AAClD,EAAE,MAAM,GAAG,GAAG,CAAC,6BAA6B,EAAE,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,0BAA0B,CAAC;AAC1H,EAAE,IAAI,CAAC,KAAK,EAAE;AACd,GAAG,IAAI,EAAE,OAAO;AAChB,GAAG,KAAK,EAAE,MAAM;AAChB,GAAG,MAAM,EAAE;AACX,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,KAAK,EAAE;AACd,GAAG,IAAI,EAAE,QAAQ;AACjB,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM;AACvB,GAAG,OAAO,EAAE;AACZ,GAAG,CAAC;AACJ,CAAC;AACD,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE;AACjD,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,EAAE,IAAI,EAAE,OAAO;AACf,EAAE,KAAK,EAAE,OAAO;AAChB,EAAE,MAAM,EAAE;AACV,EAAE,CAAC;AACH,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,WAAW,CAAC;AAC/B,EACE,IAAI,EAAE,KAAK,CAAC,IAAI;AAClB,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM;AACtB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI;AAClB,EAAE,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI;AACzC,EAAE,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE;AACrE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK;AACpB,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC;AACxD,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ,CAAC,KAAK,EAAE;AAC/B,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACvD,CAAC,IAAI,SAAS,EAAE;AAChB,EAAE,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;AAC5G,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;AAC1C,GAAG,OAAO,IAAI,CAAC,KAAK,CAAC;AACrB,EAAE;AACF,CAAC;AACD,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;AAClD,EAAE,GAAG,KAAK;AACV,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;AAC1B,EAAE,YAAY,EAAE;AAChB,EAAE,CAAC;AACH,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;AACxC,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,GAAG,IAAI;AAC1C,CAAC,IAAI;AACL,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC/E,EAAE,MAAM,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;AACrC,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;AAC3D,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE;AACf,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;AAC9D,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC;AAC5F,CAAC;AACD,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC;AACnB;AACA,SAAS,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAC3C,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/B,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC;AACrF,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACzB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;AACrD,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC;AAC5F,CAAC,IAAI,SAAS,GAAG,IAAI;AACrB,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE;AACzB,EAAE,SAAS,GAAG,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAClD,EAAE,KAAK,CAAC,YAAY,GAAG,KAAK;AAC5B,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI;AACnB,CAAC;AACD,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,KAAK,MAAM,GAAG,CAAC,EAAE,SAAS,CAAC,0BAA0B,EAAE,KAAK,CAAC,cAAc,CAAC,2FAA2F,EAAE,gBAAgB,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,mFAAmF,CAAC,EAAE,IAAI,EAAE;AAC3T,EAAE,KAAK,EAAE,IAAI;AACb,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI;AAC7C,EAAE,CAAC;AACH,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,EAAE,EAAE;AACzB,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC;AACrF,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC;AAC5F,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,aAAa,IAAI,mDAAmD,CAAC;AAC1H,CAAC,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AACzE,CAAC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC;AACzC,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,gCAAgC,EAAE,QAAQ,CAAC;;AAE5J,EAAE,UAAU;;AAEZ,EAAE,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,uCAAuC,GAAG,2CAA2C,EAAE,CAAC;AACnK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,KAAK,EAAE;AAClC,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AACnD,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC;AACrF,CAAC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;AACnC,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM;AAC3F,CAAC,IAAI,KAAK,KAAK,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,QAAQ,CAAC,EAAE,KAAK,CAAC,kBAAkB,GAAG,IAAI;AAC1F,CAAC,IAAI,GAAG;AACR,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;AAC/D,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAC1I,MAAM;AACN,EAAE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;AAC3C,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE;AACxB,CAAC;AACD,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;AAC1E,CAAC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;AACxD,CAAC,IAAI,QAAQ,GAAG,CAAC;AACjB,CAAC,KAAK,MAAM,SAAS,IAAI,GAAG,EAAE;AAC9B,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;AACzD,EAAE,IAAI,CAAC,OAAO,EAAE;AAChB,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;AAC7E,GAAG;AACH,EAAE;AACF,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE;AACzB,GAAG,KAAK,EAAE,KAAK;AACf,GAAG;AACH,GAAG,CAAC;AACJ,EAAE,QAAQ,IAAI,CAAC;AACf,CAAC;AACD,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;AAC9E,CAAC,IAAI,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACxB,EAAE,IAAI,EAAE,oBAAoB;AAC5B,EAAE,KAAK;AACP,EAAE,KAAK,EAAE;AACT,EAAE,CAAC;AACH,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC;AACnB;AACA;AACA;AACA;AACA;AACA,SAAS,kBAAkB,CAAC,EAAE,EAAE,OAAO,EAAE;AACzC,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC;AACrF,CAAC,KAAK,CAAC,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;AAC5C,CAAC,IAAI,OAAO,EAAE;AACd,EAAE,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;AAClD,EAAE,IAAI,QAAQ,GAAG,CAAC;AAClB,EAAE,KAAK,MAAM,SAAS,IAAI,GAAG,EAAE;AAC/B,GAAG,MAAM,OAAO,GAAG,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;AAC1D,GAAG,IAAI,CAAC,OAAO,EAAE;AACjB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;AACzB,IAAI,KAAK,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC;AACzB,IAAI,KAAK,EAAE;AACX,IAAI,CAAC;AACL,GAAG,QAAQ,IAAI,CAAC;AAChB,EAAE;AACF,EAAE,IAAI,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE;AAChC,GAAG,IAAI,EAAE,oBAAoB;AAC7B,GAAG,KAAK,EAAE,IAAI;AACd,GAAG,KAAK,EAAE;AACV,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,KAAK,EAAE;AACd,GAAG,IAAI,EAAE,QAAQ;AACjB,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM;AACvB,GAAG,OAAO,EAAE;AACZ,GAAG,CAAC;AACJ,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE;AACpB,EAAE,IAAI,EAAE,QAAQ;AAChB,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM;AACtB,EAAE,OAAO,EAAE;AACX,EAAE,CAAC;AACH,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC;AACnB;AACA,eAAe,UAAU,CAAC,EAAE,EAAE;AAC9B,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/B,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI;AACvB,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE;AAC9B,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE;AAC1B,EAAE;AACF,CAAC;AACD,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK;AACnB,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC;AACxC;AACA,SAAS,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE;AACjC,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/B,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI;AACxB,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC;AAClD,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC9B,CAAC,OAAO,MAAM,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC9C;AACA;AACA;AACA;AACA;AACA,SAAS,oBAAoB,GAAG;AAChC,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACnE,CAAC,IAAI,CAAC,GAAG,EAAE;AACX,CAAC,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB;AACzC,CAAC,IAAI;AACL,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE;AACf,EAAE,OAAO,CAAC,KAAK,CAAC,iEAAiE,EAAE,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC;AAC5H,CAAC;AACD;;"}
|