zidane 5.13.0 → 5.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/README.md +11 -0
  2. package/dist/acp-CEE6C0m_.js +1313 -0
  3. package/dist/acp-CEE6C0m_.js.map +1 -0
  4. package/dist/acp-cli.d.ts +1 -0
  5. package/dist/acp-cli.js +575 -0
  6. package/dist/acp-cli.js.map +1 -0
  7. package/dist/acp.d.ts +616 -0
  8. package/dist/acp.d.ts.map +1 -0
  9. package/dist/acp.js +2 -0
  10. package/dist/{agent-Db4ojCSV.d.ts → agent-D7ZL8B2X.d.ts} +2 -2
  11. package/dist/{agent-Db4ojCSV.d.ts.map → agent-D7ZL8B2X.d.ts.map} +1 -1
  12. package/dist/chat/pure.d.ts +3 -3
  13. package/dist/chat.d.ts +6 -6
  14. package/dist/chat.js +2 -2
  15. package/dist/contexts/daytona.d.ts +3 -3
  16. package/dist/contexts/docker.d.ts +1 -1
  17. package/dist/contexts/docker.d.ts.map +1 -1
  18. package/dist/contexts/docker.js +4 -1
  19. package/dist/contexts/docker.js.map +1 -1
  20. package/dist/contexts/e2b.d.ts +2 -2
  21. package/dist/{contexts-VhV4Af8x.js → contexts-DHi8LPCp.js} +25 -9
  22. package/dist/contexts-DHi8LPCp.js.map +1 -0
  23. package/dist/contexts.d.ts +3 -3
  24. package/dist/contexts.js +1 -1
  25. package/dist/eval.d.ts +1 -1
  26. package/dist/eval.js +2 -2
  27. package/dist/glob-DCWXy_tr.js +128 -0
  28. package/dist/glob-DCWXy_tr.js.map +1 -0
  29. package/dist/{headless-tVN-g6IR.js → headless-Bz1SpTB-.js} +4 -4
  30. package/dist/{headless-tVN-g6IR.js.map → headless-Bz1SpTB-.js.map} +1 -1
  31. package/dist/headless.d.ts +1 -1
  32. package/dist/headless.js +1 -1
  33. package/dist/{index-BEblm0Hu.d.ts → index-BsyPeCSL.d.ts} +3 -3
  34. package/dist/{index-BEblm0Hu.d.ts.map → index-BsyPeCSL.d.ts.map} +1 -1
  35. package/dist/{index-CJ-2g7bY.d.ts → index-CDcQW-2S.d.ts} +3 -3
  36. package/dist/index-CDcQW-2S.d.ts.map +1 -0
  37. package/dist/{index-CrMb8jCE.d.ts → index-CF15aqlk.d.ts} +3 -3
  38. package/dist/{index-CrMb8jCE.d.ts.map → index-CF15aqlk.d.ts.map} +1 -1
  39. package/dist/index.d.ts +7 -7
  40. package/dist/index.js +5 -5
  41. package/dist/lazy-DLOurOC_.js +20 -0
  42. package/dist/lazy-DLOurOC_.js.map +1 -0
  43. package/dist/{logger-Dcrj48qY.d.ts → logger-DItaCwPw.d.ts} +2 -2
  44. package/dist/{logger-Dcrj48qY.d.ts.map → logger-DItaCwPw.d.ts.map} +1 -1
  45. package/dist/mcp.d.ts +1 -1
  46. package/dist/output/stream-json.d.ts +2 -2
  47. package/dist/output/stream-json.js +1 -1
  48. package/dist/output/terminal.d.ts +2 -2
  49. package/dist/{presets-kPEMOCmE.js → presets-5IGiSsxm.js} +2 -2
  50. package/dist/{presets-kPEMOCmE.js.map → presets-5IGiSsxm.js.map} +1 -1
  51. package/dist/presets.d.ts +2 -2
  52. package/dist/presets.js +1 -1
  53. package/dist/{providers-Bo2biCyT.js → providers-DMPAmUuY.js} +6 -12
  54. package/dist/providers-DMPAmUuY.js.map +1 -0
  55. package/dist/providers.d.ts +1 -1
  56. package/dist/providers.js +1 -1
  57. package/dist/restate.d.ts +2 -2
  58. package/dist/session/sqlite.d.ts +1 -1
  59. package/dist/session.d.ts +1 -1
  60. package/dist/skills.d.ts +2 -2
  61. package/dist/{tool-formatters-CkqBgPH4.d.ts → tool-formatters-CNSMadtp.d.ts} +2 -2
  62. package/dist/{tool-formatters-CkqBgPH4.d.ts.map → tool-formatters-CNSMadtp.d.ts.map} +1 -1
  63. package/dist/tools/fetch-url.d.ts +1 -1
  64. package/dist/tools/web-search.d.ts +1 -1
  65. package/dist/{tools-5Bnlq68O.js → tools-CfS7rjuh.js} +38 -55
  66. package/dist/tools-CfS7rjuh.js.map +1 -0
  67. package/dist/tools.d.ts +2 -2
  68. package/dist/tools.js +1 -1
  69. package/dist/{transcript-anchors-D4PwUMyO.js → transcript-anchors-B_a1edre.js} +6 -6
  70. package/dist/{transcript-anchors-D4PwUMyO.js.map → transcript-anchors-B_a1edre.js.map} +1 -1
  71. package/dist/{transcript-anchors-BnLZmASt.d.ts → transcript-anchors-EG-SmZRu.d.ts} +4 -4
  72. package/dist/{transcript-anchors-BnLZmASt.d.ts.map → transcript-anchors-EG-SmZRu.d.ts.map} +1 -1
  73. package/dist/tui.d.ts +3 -3
  74. package/dist/tui.js +4 -4
  75. package/dist/{turn-operations-B6FaQAZN.d.ts → turn-operations-DwtWRYr1.d.ts} +3 -3
  76. package/dist/{turn-operations-B6FaQAZN.d.ts.map → turn-operations-DwtWRYr1.d.ts.map} +1 -1
  77. package/dist/{types-B39tBba1.d.ts → types-Bs2oY7Ux.d.ts} +27 -4
  78. package/dist/types-Bs2oY7Ux.d.ts.map +1 -0
  79. package/dist/types.d.ts +4 -4
  80. package/docs/ACP.md +153 -0
  81. package/package.json +11 -1
  82. package/dist/contexts-VhV4Af8x.js.map +0 -1
  83. package/dist/index-CJ-2g7bY.d.ts.map +0 -1
  84. package/dist/providers-Bo2biCyT.js.map +0 -1
  85. package/dist/tools-5Bnlq68O.js.map +0 -1
  86. package/dist/types-B39tBba1.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acp-CEE6C0m_.js","names":["isObject","lastFinishReason","basic"],"sources":["../src/acp/json-rpc.ts","../src/acp/mapping.ts","../src/acp/client-tools.ts","../src/acp/server.ts","../src/acp/index.ts"],"sourcesContent":["import type { Readable, Writable } from 'node:stream'\nimport type { AcpPeer, JsonRpcFailure, JsonRpcId, JsonRpcMessage, JsonRpcRequest, JsonRpcResponse } from './types'\nimport { Buffer } from 'node:buffer'\nimport { AcpErrorCode } from './types'\n\nexport interface JsonRpcConnectionOptions {\n input: Readable\n output: Writable\n onRequest: (message: JsonRpcRequest) => Promise<JsonRpcResponse | null | undefined> | JsonRpcResponse | null | undefined\n onNotification?: (message: JsonRpcMessage & { method: string, id?: undefined }) => void | Promise<void>\n framing?: 'content-length' | 'newline'\n onError?: (error: Error) => void\n}\n\nexport interface JsonRpcConnection extends AcpPeer {\n start: () => void\n close: () => void\n}\n\ninterface PendingRequest {\n resolve: (value: unknown) => void\n reject: (error: Error) => void\n}\n\nexport function createJsonRpcConnection(options: JsonRpcConnectionOptions): JsonRpcConnection {\n let nextId = 1\n let closed = false\n let buffer: Buffer<ArrayBufferLike> = Buffer.alloc(0)\n const pending = new Map<JsonRpcId, PendingRequest>()\n\n const writeMessage = (message: JsonRpcMessage): void => {\n if (closed)\n return\n const json = JSON.stringify({ ...message, jsonrpc: '2.0' })\n // ACP stdio framing is newline-delimited JSON (NDJSON) and is the default.\n // `JSON.stringify` escapes any embedded newline, so a serialized message is\n // always a single line. LSP-style `Content-Length` framing is opt-in for\n // non-ACP transports only.\n if (options.framing === 'content-length') {\n const bytes = Buffer.byteLength(json)\n options.output.write(`Content-Length: ${bytes}\\r\\n\\r\\n${json}`)\n return\n }\n options.output.write(`${json}\\n`)\n }\n\n const handleParsed = async (message: unknown): Promise<void> => {\n if (!isObject(message)) {\n writeMessage(errorResponse(null, AcpErrorCode.InvalidRequest, 'Invalid JSON-RPC message.'))\n return\n }\n\n const msg = message as unknown as JsonRpcMessage\n if ('id' in msg && ('result' in msg || 'error' in msg)) {\n const request = pending.get(msg.id)\n if (!request)\n return\n pending.delete(msg.id)\n if ('error' in msg && msg.error) {\n request.reject(new JsonRpcRemoteError(msg.error.message, msg.error.code, msg.error.data))\n }\n else {\n request.resolve((msg as { result?: unknown }).result)\n }\n return\n }\n\n if (typeof (msg as { method?: unknown }).method !== 'string') {\n writeMessage(errorResponse(('id' in msg ? msg.id : null) ?? null, AcpErrorCode.InvalidRequest, 'Missing JSON-RPC method.'))\n return\n }\n\n if ('id' in msg) {\n try {\n const response = await options.onRequest(msg as JsonRpcRequest)\n if (response)\n writeMessage(response)\n }\n catch (err) {\n writeMessage(errorResponse(msg.id, AcpErrorCode.InternalError, err instanceof Error ? err.message : String(err)))\n }\n return\n }\n\n try {\n await options.onNotification?.(msg as JsonRpcMessage & { method: string, id?: undefined })\n }\n catch (err) {\n options.onError?.(err instanceof Error ? err : new Error(String(err)))\n }\n }\n\n const onData = (chunk: Buffer | string): void => {\n buffer = Buffer.concat([buffer, typeof chunk === 'string' ? Buffer.from(chunk) : chunk])\n for (;;) {\n let parsed: { message: unknown, rest: Buffer<ArrayBufferLike> } | null\n try {\n parsed = readNextMessage(buffer)\n }\n catch (err) {\n buffer = Buffer.alloc(0)\n writeMessage(errorResponse(null, AcpErrorCode.ParseError, err instanceof Error ? err.message : String(err)))\n break\n }\n if (!parsed)\n break\n buffer = parsed.rest\n void handleParsed(parsed.message)\n }\n }\n\n const onError = (err: Error): void => {\n options.onError?.(err)\n }\n\n return {\n start() {\n options.input.on('data', onData)\n options.input.on('error', onError)\n },\n close() {\n closed = true\n options.input.off('data', onData)\n options.input.off('error', onError)\n for (const request of pending.values())\n request.reject(new Error('JSON-RPC connection closed.'))\n pending.clear()\n },\n sendNotification(method: string, params?: unknown) {\n writeMessage({ jsonrpc: '2.0', method, ...(params !== undefined ? { params } : {}) })\n },\n sendRequest(method: string, params?: unknown) {\n if (closed)\n return Promise.reject(new Error('JSON-RPC connection is closed.'))\n const id = nextId++\n writeMessage({ jsonrpc: '2.0', id, method, ...(params !== undefined ? { params } : {}) })\n return new Promise((resolve, reject) => {\n pending.set(id, { resolve, reject })\n })\n },\n }\n}\n\nexport class JsonRpcRemoteError extends Error {\n constructor(message: string, readonly code: number, readonly data?: unknown) {\n super(message)\n this.name = 'JsonRpcRemoteError'\n }\n}\n\nexport function successResponse(id: JsonRpcId, result: unknown = {}): JsonRpcResponse {\n return { jsonrpc: '2.0', id, result }\n}\n\nexport function errorResponse(id: JsonRpcId, code: number, message: string, data?: unknown): JsonRpcFailure {\n return {\n jsonrpc: '2.0',\n id,\n error: {\n code,\n message,\n ...(data !== undefined ? { data } : {}),\n },\n }\n}\n\nfunction readNextMessage(input: Buffer<ArrayBufferLike>): { message: unknown, rest: Buffer<ArrayBufferLike> } | null {\n if (input.length === 0)\n return null\n\n const headerEnd = input.indexOf('\\r\\n\\r\\n')\n if (headerEnd >= 0) {\n const header = input.subarray(0, headerEnd).toString('utf8')\n const match = /^Content-Length:\\s*(\\d+)/im.exec(header)\n if (!match)\n return readLineMessage(input)\n const length = Number(match[1])\n const bodyStart = headerEnd + 4\n const bodyEnd = bodyStart + length\n if (input.length < bodyEnd)\n return null\n const body = input.subarray(bodyStart, bodyEnd).toString('utf8')\n return { message: JSON.parse(body), rest: input.subarray(bodyEnd) }\n }\n\n if (/^Content-Length:/i.test(input.subarray(0, Math.min(input.length, 32)).toString('utf8')))\n return null\n\n return readLineMessage(input)\n}\n\nfunction readLineMessage(input: Buffer<ArrayBufferLike>): { message: unknown, rest: Buffer<ArrayBufferLike> } | null {\n let rest = input\n // Skip blank lines: NDJSON streams may contain stray newlines (e.g. a keep-\n // alive or a trailing separator). Emitting an error for those would be wrong.\n for (;;) {\n const lineEnd = rest.indexOf('\\n')\n if (lineEnd < 0)\n return null\n const line = rest.subarray(0, lineEnd).toString('utf8').trim()\n rest = rest.subarray(lineEnd + 1)\n if (line.length === 0)\n continue\n return { message: JSON.parse(line), rest }\n }\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n}\n","import type { McpServerConfig, PromptPart, SessionContentBlock, ToolResultContent, TurnFinishReason, TurnUsage } from '../types'\nimport type {\n AcpMcpServer,\n AcpPromptMapping,\n ContentBlock,\n Cost,\n EmbeddedResource,\n EmbeddedResourceResource,\n McpCapabilities,\n NewSessionResponse,\n PromptCapabilities,\n SessionMode,\n SessionModeState,\n StopReason,\n ToolCallContent,\n ToolKind,\n} from './types'\nimport { resolve } from 'node:path'\nimport { toolResultToText } from '../types'\n\nexport function acpMcpServersToZidane(servers: readonly AcpMcpServer[] | undefined): McpServerConfig[] {\n if (!servers)\n return []\n return servers.map((server): McpServerConfig => {\n if (server.type === 'http') {\n return {\n name: server.name,\n transport: 'streamable-http',\n url: server.url,\n headers: headersToRecord(server.headers),\n }\n }\n if (server.type === 'sse') {\n return {\n name: server.name,\n transport: 'sse',\n url: server.url,\n headers: headersToRecord(server.headers),\n }\n }\n const stdio = server as Extract<AcpMcpServer, { command: string }>\n return {\n name: server.name,\n transport: 'stdio',\n command: stdio.command,\n args: stdio.args ?? [],\n env: envToRecord(stdio.env),\n }\n })\n}\n\nexport function promptCapabilitiesForProvider(capabilities: { vision?: boolean, audio?: boolean } | undefined): PromptCapabilities {\n return {\n image: capabilities?.vision === true,\n audio: capabilities?.audio === true,\n embeddedContext: true,\n }\n}\n\nexport function mcpCapabilities(): McpCapabilities {\n return { http: true, sse: true }\n}\n\nexport function defaultModes(modes: readonly SessionMode[] | undefined): SessionMode[] {\n return modes && modes.length > 0\n ? [...modes]\n : [\n { id: 'build', name: 'Build', description: 'Full tool access for implementation work.' },\n { id: 'plan', name: 'Plan', description: 'Planning-oriented mode; hosts may narrow tools separately.' },\n ]\n}\n\nexport function makeModeState(modes: readonly SessionMode[], currentModeId: string): SessionModeState {\n return { currentModeId, availableModes: [...modes] }\n}\n\nexport function newSessionResponse(\n sessionId: string,\n modes: readonly SessionMode[],\n currentModeId: string,\n configOptions?: NewSessionResponse['configOptions'],\n): NewSessionResponse {\n return {\n sessionId,\n modes: makeModeState(modes, currentModeId),\n ...(configOptions && configOptions.length > 0 ? { configOptions } : {}),\n }\n}\n\nexport function acpPromptToPromptParts(prompt: readonly ContentBlock[]): AcpPromptMapping {\n const parts: PromptPart[] = []\n const warnings: string[] = []\n\n for (const block of prompt) {\n switch (block.type) {\n case 'text':\n parts.push({ type: 'text', text: block.text })\n break\n case 'image': {\n if (block.data) {\n parts.push({ type: 'image', mediaType: block.mimeType || 'image/png', data: block.data })\n }\n else {\n warnings.push(`Image resource linked instead of embedded: ${block.uri ?? 'unknown URI'}`)\n parts.push({ type: 'text', text: `[image resource: ${block.uri ?? 'unavailable'}]` })\n }\n break\n }\n case 'audio': {\n if (block.data) {\n parts.push({ type: 'audio', mediaType: block.mimeType || 'audio/mpeg', data: block.data })\n }\n else {\n warnings.push('Audio block omitted because it did not include embedded data.')\n parts.push({ type: 'text', text: '[audio resource omitted: no embedded data]' })\n }\n break\n }\n case 'resource_link':\n parts.push({ type: 'text', text: renderResourceLink(block) })\n break\n case 'resource':\n parts.push(resourceToPromptPart(block))\n break\n default:\n warnings.push('Unknown ACP content block converted to text.')\n parts.push({ type: 'text', text: JSON.stringify(block as Record<string, unknown>) })\n break\n }\n }\n\n return { prompt: parts, warnings }\n}\n\nexport function sessionBlocksToAcp(blocks: readonly SessionContentBlock[]): ContentBlock[] {\n const out: ContentBlock[] = []\n for (const block of blocks) {\n if (block.type === 'text' || block.type === 'thinking') {\n out.push({ type: 'text', text: block.text })\n }\n else if (block.type === 'image') {\n out.push(imageBlockToAcp(block.mediaType, 'data' in block ? block.data : undefined, 'ref' in block ? block.ref : undefined, block.name))\n }\n else if (block.type === 'audio') {\n if (block.data)\n out.push({ type: 'audio', mimeType: block.mediaType, data: block.data })\n }\n else if (block.type === 'document') {\n out.push(documentBlockToAcp(block.mediaType, 'data' in block ? block.data : undefined, 'ref' in block ? block.ref : undefined, block.encoding, block.name))\n }\n }\n return out\n}\n\nexport function toolResultToAcpContent(content: string | ToolResultContent[]): ToolCallContent[] {\n if (typeof content === 'string')\n return [{ type: 'content', content: { type: 'text', text: content } }]\n\n return content.map((block): ToolCallContent => {\n if (block.type === 'text')\n return { type: 'content', content: { type: 'text', text: block.text } }\n if (block.type === 'image') {\n return {\n type: 'content',\n content: imageBlockToAcp(block.mediaType, 'data' in block ? block.data : undefined, 'ref' in block ? block.ref : undefined, 'name' in block ? block.name : undefined),\n }\n }\n if (block.type === 'audio' && block.data)\n return { type: 'content', content: { type: 'audio', mimeType: block.mediaType, data: block.data } }\n if (block.type === 'document') {\n return {\n type: 'content',\n content: documentBlockToAcp(block.mediaType, 'data' in block ? block.data : undefined, 'ref' in block ? block.ref : undefined, block.encoding, 'name' in block ? block.name : undefined),\n }\n }\n return { type: 'content', content: { type: 'text', text: toolResultToText([block]) } }\n })\n}\n\n/**\n * Build a spec-valid ACP image block. `ImageContent` requires `data` +\n * `mimeType`; when we only have a reference (`ref`/uri) we fall back to a\n * `resource_link` (which requires `name` + `uri`) so we never emit an image\n * block missing its required `data`.\n */\nfunction imageBlockToAcp(mimeType: string, data: string | undefined, ref: string | undefined, name: string | undefined): ContentBlock {\n if (data)\n return { type: 'image', mimeType, data, ...(ref ? { uri: ref } : {}) }\n return { type: 'resource_link', uri: ref ?? acpSyntheticUri('image', name), name: name ?? 'image', mimeType }\n}\n\n/**\n * Build a spec-valid embedded `resource` (or a `resource_link` fallback for\n * reference-only documents). `EmbeddedResource.resource` requires a `uri`\n * plus either `text` (text payload) or `blob` (base64), so a synthetic URI is\n * minted when the source block has none.\n */\nfunction documentBlockToAcp(mimeType: string, data: string | undefined, ref: string | undefined, encoding: 'base64' | 'text' | undefined, name: string | undefined): ContentBlock {\n const uri = ref ?? acpSyntheticUri('document', name)\n if (typeof data !== 'string') {\n return { type: 'resource_link', uri, name: name ?? 'document', mimeType }\n }\n const resource: EmbeddedResourceResource = encoding === 'text'\n ? { uri, text: data, mimeType }\n : { uri, blob: data, mimeType }\n return { type: 'resource', resource }\n}\n\nfunction acpSyntheticUri(kind: string, name: string | undefined): string {\n const slug = (name ?? kind).replace(/[^\\w.-]+/g, '_')\n return `acp:///${kind}/${slug}`\n}\n\nexport function toolKindForName(name: string): ToolKind {\n if (name === 'read_file' || name === 'list_files')\n return 'read'\n if (name === 'write_file' || name === 'edit' || name === 'multi_edit')\n return 'edit'\n if (name === 'grep' || name === 'glob' || name === 'tool_search')\n return 'search'\n if (name === 'shell' || name === 'wait_task' || name === 'shell_kill')\n return 'execute'\n if (name === 'web_search' || name === 'fetch_url')\n return 'fetch'\n if (name === 'present_plan' || name === 'ask_user')\n return 'think'\n return 'other'\n}\n\nexport function stopReasonFromRun(input: { aborted: boolean, turnUsage?: TurnUsage[], maxTurnsReached?: boolean }): StopReason {\n if (input.aborted)\n return 'cancelled'\n if (input.maxTurnsReached)\n return 'max_turn_requests'\n const finish = lastFinishReason(input.turnUsage)\n switch (finish) {\n case 'length':\n return 'max_tokens'\n case 'content-filter':\n case 'error':\n return 'refusal'\n default:\n return 'end_turn'\n }\n}\n\nexport function usageCost(cost: number | undefined): Cost | null {\n if (typeof cost !== 'number' || !Number.isFinite(cost))\n return null\n return { amount: cost, currency: 'USD' }\n}\n\nexport function resolveAcpPath(cwd: string, path: string): string {\n return path.startsWith('/') ? path : resolve(cwd, path)\n}\n\nfunction lastFinishReason(turnUsage: TurnUsage[] | undefined): TurnFinishReason | undefined {\n for (let i = (turnUsage?.length ?? 0) - 1; i >= 0; i--) {\n const reason = turnUsage?.[i]?.finishReason\n if (reason)\n return reason\n }\n return undefined\n}\n\nfunction headersToRecord(headers: readonly { name: string, value: string }[] | undefined): Record<string, string> {\n const out: Record<string, string> = {}\n for (const header of headers ?? [])\n out[header.name] = header.value\n return out\n}\n\nfunction envToRecord(env: readonly { name: string, value: string }[] | undefined): Record<string, string> {\n const out: Record<string, string> = {}\n for (const item of env ?? [])\n out[item.name] = item.value\n return out\n}\n\nfunction renderResourceLink(block: { uri: string, name?: string | null, title?: string | null, mimeType?: string | null }): string {\n const label = block.title ?? block.name ?? block.uri\n return block.mimeType\n ? `[resource: ${label}](${block.uri}) (${block.mimeType})`\n : `[resource: ${label}](${block.uri})`\n}\n\nfunction resourceToPromptPart(block: EmbeddedResource): PromptPart {\n const resource = block.resource\n const mediaType = resource.mimeType ?? 'text/plain'\n const name = nameFromUri(resource.uri)\n if ('text' in resource && typeof resource.text === 'string') {\n return {\n type: 'document',\n mediaType,\n data: resource.text,\n encoding: 'text',\n ...(name ? { name } : {}),\n }\n }\n if ('blob' in resource && typeof resource.blob === 'string') {\n return {\n type: 'document',\n mediaType,\n data: resource.blob,\n encoding: 'base64',\n ...(name ? { name } : {}),\n }\n }\n return { type: 'text', text: `[resource omitted: ${resource.uri}]` }\n}\n\nfunction nameFromUri(uri: string | undefined): string | undefined {\n if (!uri)\n return undefined\n const trimmed = uri.replace(/[/\\\\]+$/, '')\n const segment = trimmed.split(/[/\\\\]/).pop()\n return segment && segment.length > 0 ? segment : undefined\n}\n","import type { ToolContext, ToolDef } from '../tools'\nimport type { AcpClientCapabilities, AcpPeer, CreateTerminalRequest, TerminalOutputResponse } from './types'\nimport { Buffer } from 'node:buffer'\nimport { hashContent, readStateKey, resolveReadStateMap } from '../tools'\nimport { resolveAcpPath } from './mapping'\n\nexport interface AcpClientToolOptions {\n client: AcpPeer\n sessionId: string\n capabilities: AcpClientCapabilities\n useClientFileSystem?: boolean\n useClientTerminal?: boolean\n}\n\nexport function wrapToolsForAcpClient(tools: Record<string, ToolDef> | undefined, options: AcpClientToolOptions): Record<string, ToolDef> | undefined {\n if (!tools)\n return undefined\n\n const wrapped: Record<string, ToolDef> = { ...tools }\n const readFileEntry = findToolEntry(tools, 'read_file')\n const writeFileEntry = findToolEntry(tools, 'write_file')\n const shellEntry = findToolEntry(tools, 'shell')\n if (options.useClientFileSystem !== false && options.capabilities.fs?.readTextFile && readFileEntry)\n wrapped[readFileEntry.key] = wrapReadFile(readFileEntry.tool, options)\n if (options.useClientFileSystem !== false && options.capabilities.fs?.writeTextFile && writeFileEntry)\n wrapped[writeFileEntry.key] = wrapWriteFile(writeFileEntry.tool, options)\n if (options.useClientTerminal !== false && options.capabilities.terminal && shellEntry)\n wrapped[shellEntry.key] = wrapShell(shellEntry.tool, options)\n return wrapped\n}\n\nfunction findToolEntry(tools: Record<string, ToolDef>, canonicalName: string): { key: string, tool: ToolDef } | null {\n for (const [key, tool] of Object.entries(tools)) {\n if (key === canonicalName || tool.spec.name === canonicalName)\n return { key, tool }\n }\n return null\n}\n\nfunction wrapReadFile(base: ToolDef, options: AcpClientToolOptions): ToolDef {\n return {\n ...base,\n async execute(input, ctx) {\n const path = typeof input.path === 'string' ? input.path : ''\n if (!path)\n return 'Read error: missing path.'\n const absPath = resolveAcpPath(ctx.handle.cwd, path)\n const line = lineOrDefault(input.offset)\n const limit = positiveNumberOrNull(input.limit)\n const response = await options.client.sendRequest('fs/read_text_file', {\n sessionId: options.sessionId,\n path: absPath,\n line,\n ...(limit !== null ? { limit } : {}),\n }) as { content?: unknown }\n const content = typeof response.content === 'string' ? response.content : ''\n seedReadState(ctx, absPath, content, line ?? 1, limit ?? Number.POSITIVE_INFINITY)\n if (input.lineNumbers === false)\n return content\n return withLineNumbers(content, line ?? 1)\n },\n }\n}\n\nfunction wrapWriteFile(base: ToolDef, options: AcpClientToolOptions): ToolDef {\n return {\n ...base,\n async execute(input, ctx) {\n const path = typeof input.path === 'string' ? input.path : ''\n const content = typeof input.content === 'string' ? input.content : ''\n if (!path)\n return 'Write error: missing path.'\n const absPath = resolveAcpPath(ctx.handle.cwd, path)\n await options.client.sendRequest('fs/write_text_file', {\n sessionId: options.sessionId,\n path: absPath,\n content,\n })\n seedReadState(ctx, absPath, content, 0, Number.POSITIVE_INFINITY)\n ctx.reportOutcome?.('updated')\n return `Wrote ${absPath} (${Buffer.byteLength(content)} bytes).`\n },\n }\n}\n\nfunction wrapShell(base: ToolDef, options: AcpClientToolOptions): ToolDef {\n return {\n ...base,\n spec: withoutShellBackgroundInput(base.spec),\n async execute(input, ctx) {\n const command = typeof input.command === 'string' ? input.command : ''\n if (!command)\n return 'shell error: missing command.'\n if (input.run_in_background === true)\n return 'shell error: background mode is not supported through ACP terminal callbacks. Run the command in the foreground.'\n\n const request: CreateTerminalRequest = {\n sessionId: options.sessionId,\n command,\n cwd: ctx.handle.cwd,\n outputByteLimit: typeof input.maxOutputBytes === 'number' ? input.maxOutputBytes : null,\n }\n const created = await options.client.sendRequest('terminal/create', request) as { terminalId?: unknown }\n const terminalId = typeof created.terminalId === 'string' ? created.terminalId : ''\n if (!terminalId)\n return 'shell error: ACP client did not return a terminal id.'\n\n try {\n const exit = await options.client.sendRequest('terminal/wait_for_exit', {\n sessionId: options.sessionId,\n terminalId,\n }) as { exitCode?: number | null, signal?: string | null }\n const output = await options.client.sendRequest('terminal/output', {\n sessionId: options.sessionId,\n terminalId,\n }) as TerminalOutputResponse\n return formatTerminalOutput(output, exit)\n }\n finally {\n await options.client.sendRequest('terminal/release', {\n sessionId: options.sessionId,\n terminalId,\n }).catch(() => undefined)\n }\n },\n }\n}\n\nfunction formatTerminalOutput(output: TerminalOutputResponse, exit: { exitCode?: number | null, signal?: string | null }): string {\n const body = output.output || '(no output)'\n const code = exit.exitCode ?? output.exitStatus?.exitCode\n const signal = exit.signal ?? output.exitStatus?.signal\n const suffix = signal\n ? `\\n(signal ${signal})`\n : typeof code === 'number'\n ? `\\n(exit ${code})`\n : ''\n const truncated = output.truncated ? '\\n(output truncated by ACP client)' : ''\n return `${body}${truncated}${suffix}`\n}\n\nfunction withoutShellBackgroundInput(spec: ToolDef['spec']): ToolDef['spec'] {\n const properties = isRecord(spec.inputSchema.properties) ? spec.inputSchema.properties : undefined\n if (!properties || !Object.hasOwn(properties, 'run_in_background'))\n return spec\n\n const { run_in_background: _runInBackground, ...nextProperties } = properties\n const required = Array.isArray(spec.inputSchema.required)\n ? spec.inputSchema.required.filter(name => name !== 'run_in_background')\n : spec.inputSchema.required\n\n return {\n ...spec,\n description: spec.description\n .split('\\n')\n .filter(line =>\n !line.includes('run_in_background')\n && !line.includes('<task-notification>')\n && !line.includes('background task'),\n )\n .join('\\n'),\n inputSchema: {\n ...spec.inputSchema,\n properties: nextProperties,\n ...(required ? { required } : {}),\n },\n }\n}\n\nfunction withLineNumbers(content: string, start: number): string {\n return content\n .split('\\n')\n .map((line, index) => `${start + index}\\t${line}`)\n .join('\\n')\n}\n\nfunction lineOrDefault(value: unknown): number {\n return typeof value === 'number' && Number.isFinite(value) && value >= 1 ? Math.trunc(value) : 1\n}\n\nfunction positiveNumberOrNull(value: unknown): number | null {\n return typeof value === 'number' && Number.isFinite(value) && value > 0 ? Math.trunc(value) : null\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction seedReadState(ctx: ToolContext, path: string, content: string, offset: number, limit: number): void {\n const readState = resolveReadStateMap(ctx)\n if (!readState)\n return\n readState.set(readStateKey(ctx.handle.cwd, path), {\n contentHash: hashContent(content),\n offset,\n limit,\n maxBytes: Number.POSITIVE_INFINITY,\n mtimeMs: Date.now(),\n })\n}\n","import type { AgentOptions } from '../agent'\nimport type { Provider } from '../providers'\nimport type { Session } from '../session'\nimport type { ToolDef } from '../tools'\nimport type { AgentStats, McpServerConfig, TurnUsage } from '../types'\nimport type {\n AcpClientCapabilities,\n AcpPeer,\n AcpServerOptions,\n AcpSessionRuntime,\n AuthenticateRequest,\n CancelNotification,\n DeleteSessionRequest,\n InitializeRequest,\n JsonRpcMessage,\n JsonRpcRequest,\n JsonRpcResponse,\n ListSessionsRequest,\n LoadSessionRequest,\n NewSessionRequest,\n PermissionOption,\n PromptRequest,\n PromptResponse,\n RequestPermissionOutcome,\n ResumeSessionRequest,\n SessionConfigOption,\n SessionInfo,\n SessionMode,\n SessionUpdate,\n SetSessionConfigOptionRequest,\n SetSessionModeRequest,\n ToolCallUpdate,\n} from './types'\nimport { createAgent } from '../agent'\nimport { createProcessContext } from '../contexts'\nimport { errorMessage } from '../errors'\nimport { basic } from '../presets'\nimport { createSession, loadSession } from '../session'\nimport { effectiveInputFromTurn } from '../stats'\nimport { wrapToolsForAcpClient } from './client-tools'\nimport { errorResponse, successResponse } from './json-rpc'\nimport {\n acpMcpServersToZidane,\n acpPromptToPromptParts,\n defaultModes,\n makeModeState,\n mcpCapabilities,\n newSessionResponse,\n promptCapabilitiesForProvider,\n sessionBlocksToAcp,\n stopReasonFromRun,\n toolKindForName,\n toolResultToAcpContent,\n usageCost,\n} from './mapping'\nimport { ACP_PROTOCOL_VERSION, AcpErrorCode } from './types'\n\nconst ACP_AGENT_VERSION = '1'\n\nconst DEFAULT_PERMISSION_OPTIONS: PermissionOption[] = [\n { optionId: 'allow_once', name: 'Allow once', kind: 'allow_once' },\n { optionId: 'allow_always', name: 'Always allow', kind: 'allow_always' },\n { optionId: 'reject_once', name: 'Reject once', kind: 'reject_once' },\n { optionId: 'reject_always', name: 'Always reject', kind: 'reject_always' },\n]\n\nexport interface AcpServer {\n setPeer: (peer: AcpPeer) => void\n handleMessage: (message: JsonRpcMessage) => Promise<JsonRpcResponse | null>\n handleRequest: (method: string, params?: unknown) => Promise<unknown>\n notify: (method: string, params?: unknown) => Promise<void>\n close: () => Promise<void>\n}\n\nexport function createAcpServer(options: AcpServerOptions): AcpServer {\n return new AcpServerImpl(options)\n}\n\nclass AcpServerImpl implements AcpServer {\n private peer: AcpPeer | null = null\n private clientCapabilities: AcpClientCapabilities = {}\n private sessions = new Map<string, AcpSessionRuntime>()\n private modes: SessionMode[]\n private defaultModeId: string\n private defaultConfigOptions: SessionConfigOption[]\n\n constructor(private readonly options: AcpServerOptions) {\n this.modes = defaultModes(options.modes)\n this.defaultModeId = options.defaultModeId ?? this.modes[0]?.id ?? 'build'\n this.defaultConfigOptions = options.configOptions ?? []\n }\n\n setPeer(peer: AcpPeer): void {\n this.peer = peer\n }\n\n async handleMessage(message: JsonRpcMessage): Promise<JsonRpcResponse | null> {\n if (!isObject(message) || typeof (message as { method?: unknown }).method !== 'string') {\n const id = 'id' in (message as object) ? (message as { id?: unknown }).id : null\n return errorResponse(normalizeId(id), AcpErrorCode.InvalidRequest, 'Invalid JSON-RPC request.')\n }\n\n if (!('id' in message)) {\n await this.handleNotification(message.method, (message as { params?: unknown }).params)\n return null\n }\n\n const request = message as JsonRpcRequest\n try {\n const result = await this.handleRequest(request.method, request.params)\n return successResponse(request.id, result)\n }\n catch (err) {\n const rpcError = toRpcError(err)\n return errorResponse(request.id, rpcError.code, rpcError.message, rpcError.data)\n }\n }\n\n async handleRequest(method: string, params?: unknown): Promise<unknown> {\n switch (method) {\n case 'initialize':\n return this.initialize(asObject<InitializeRequest>(params))\n case 'authenticate':\n return this.authenticate(asObject<AuthenticateRequest>(params))\n case 'logout':\n return this.logout()\n case 'session/new':\n return this.newSession(asObject<NewSessionRequest>(params))\n case 'session/load':\n return this.loadExistingSession(asObject<LoadSessionRequest>(params))\n case 'session/resume':\n return this.resumeSession(asObject<ResumeSessionRequest>(params))\n case 'session/list':\n return this.listSessions(asObject<ListSessionsRequest>(params))\n case 'session/delete':\n return this.deleteSession(asObject<DeleteSessionRequest>(params))\n case 'session/close':\n return this.closeSession(asObject<{ sessionId: string }>(params))\n case 'session/prompt':\n return this.prompt(asObject<PromptRequest>(params))\n case 'session/set_mode':\n return this.setMode(asObject<SetSessionModeRequest>(params))\n case 'session/set_config_option':\n return this.setConfigOption(asObject<SetSessionConfigOptionRequest>(params))\n default:\n throw new AcpProtocolError(AcpErrorCode.MethodNotFound, `Unknown ACP method: ${method}`)\n }\n }\n\n async notify(method: string, params?: unknown): Promise<void> {\n await this.peer?.sendNotification(method, params)\n }\n\n async close(): Promise<void> {\n const sessions = [...this.sessions.values()]\n this.sessions.clear()\n await Promise.allSettled(sessions.map(async (runtime) => {\n runtime.abortController?.abort(new Error('ACP server closing.'))\n await runtime.agent.destroy()\n }))\n }\n\n private async handleNotification(method: string, params?: unknown): Promise<void> {\n switch (method) {\n case 'session/cancel':\n this.cancel(asObject<CancelNotification>(params))\n break\n default:\n break\n }\n }\n\n private initialize(params: InitializeRequest): unknown {\n this.clientCapabilities = params.clientCapabilities ?? {}\n const provider = this.resolveProvider()\n return {\n // We currently speak ACP v1 only. Per ACP, return the requested version\n // only if supported; otherwise advertise the latest supported version.\n protocolVersion: params.protocolVersion === ACP_PROTOCOL_VERSION ? params.protocolVersion : ACP_PROTOCOL_VERSION,\n agentCapabilities: {\n loadSession: true,\n promptCapabilities: promptCapabilitiesForProvider(provider.meta.capabilities),\n mcpCapabilities: mcpCapabilities(),\n sessionCapabilities: {\n list: {},\n delete: {},\n resume: {},\n close: {},\n additionalDirectories: {},\n },\n auth: {\n ...(this.options.logout ? { logout: {} } : {}),\n },\n },\n agentInfo: this.options.agentInfo ?? { name: 'zidane', title: 'Zidane ACP', version: ACP_AGENT_VERSION },\n authMethods: this.options.authMethods ?? [],\n }\n }\n\n private async authenticate(params: AuthenticateRequest): Promise<unknown> {\n if (!this.options.authenticate)\n return {}\n return await this.options.authenticate(params)\n }\n\n private async logout(): Promise<unknown> {\n if (!this.options.logout)\n return {}\n return await this.options.logout()\n }\n\n private async newSession(params: NewSessionRequest): Promise<unknown> {\n const runtime = await this.createRuntime(params)\n this.deferAvailableCommands(runtime.sessionId)\n return newSessionResponse(runtime.sessionId, this.modes, runtime.modeId, runtime.configOptions)\n }\n\n private async loadExistingSession(params: LoadSessionRequest): Promise<unknown> {\n const runtime = await this.createRuntime(params, params.sessionId, true)\n // ACP `session/load` replays the full history through `session/update`\n // notifications BEFORE the response resolves; the response itself only\n // carries mode/config state (no inline `messages`).\n await this.replayHistory(runtime)\n this.deferAvailableCommands(runtime.sessionId)\n return this.sessionStateResponse(runtime)\n }\n\n private async resumeSession(params: ResumeSessionRequest): Promise<unknown> {\n const runtime = await this.createRuntime({\n cwd: params.cwd,\n additionalDirectories: params.additionalDirectories,\n mcpServers: params.mcpServers ?? [],\n }, params.sessionId, true)\n // `session/resume` does not replay history (unlike `session/load`); it only\n // reports current mode state.\n this.deferAvailableCommands(runtime.sessionId)\n return this.sessionStateResponse(runtime)\n }\n\n private sessionStateResponse(runtime: AcpSessionRuntime): { modes: ReturnType<typeof makeModeState>, configOptions?: SessionConfigOption[] } {\n return {\n modes: makeModeState(this.modes, runtime.modeId),\n ...(runtime.configOptions.length > 0 ? { configOptions: runtime.configOptions } : {}),\n }\n }\n\n private deferAvailableCommands(sessionId: string): void {\n if (!this.options.commands || this.options.commands.length === 0)\n return\n setTimeout(() => {\n void this.sessionUpdate(sessionId, {\n sessionUpdate: 'available_commands_update',\n availableCommands: this.options.commands!,\n })\n }, 0)\n }\n\n private async replayHistory(runtime: AcpSessionRuntime): Promise<void> {\n for (const turn of runtime.session.turns) {\n const blocks = sessionBlocksToAcp(turn.content)\n if (blocks.length === 0)\n continue\n const sessionUpdate = turn.role === 'assistant' ? 'agent_message_chunk' : 'user_message_chunk'\n for (const content of blocks)\n await this.sessionUpdate(runtime.sessionId, { sessionUpdate, content })\n }\n }\n\n private async listSessions(params: ListSessionsRequest): Promise<unknown> {\n const store = this.options.store\n if (!store) {\n return {\n sessions: [...this.sessions.values()]\n .filter(runtime => !params.cwd || runtime.cwd === params.cwd)\n .map(runtime => sessionInfo(runtime)),\n nextCursor: null,\n }\n }\n\n const ids = await store.list({ limit: 100, ...(params.cwd ? { projectRoot: params.cwd } : {}) })\n const sessions: SessionInfo[] = []\n for (const id of ids) {\n const loaded = await store.load(id)\n if (!loaded)\n continue\n // `SessionInfo.cwd` is required and must be absolute; fall back to the\n // requested filter cwd, then the live runtime cwd. Skip sessions we\n // cannot attribute to a working directory rather than emit an invalid one.\n const cwd = loaded.projectRoot ?? params.cwd ?? this.sessions.get(loaded.id)?.cwd\n if (!cwd)\n continue\n sessions.push({\n sessionId: loaded.id,\n cwd,\n title: typeof loaded.metadata.title === 'string' ? loaded.metadata.title : null,\n updatedAt: new Date(loaded.updatedAt).toISOString(),\n })\n }\n return { sessions, nextCursor: null }\n }\n\n private async deleteSession(params: DeleteSessionRequest): Promise<unknown> {\n const runtime = this.sessions.get(params.sessionId)\n if (runtime) {\n runtime.abortController?.abort(new Error('ACP session deleted.'))\n await runtime.agent.destroy()\n this.sessions.delete(params.sessionId)\n }\n await this.options.store?.delete(params.sessionId)\n return {}\n }\n\n private async closeSession(params: { sessionId: string }): Promise<unknown> {\n const runtime = this.requireSession(params.sessionId)\n runtime.abortController?.abort(new Error('ACP session closed.'))\n await runtime.agent.destroy()\n this.sessions.delete(params.sessionId)\n return {}\n }\n\n private async prompt(params: PromptRequest): Promise<PromptResponse> {\n const runtime = this.requireSession(params.sessionId)\n if (runtime.inFlight)\n throw new AcpProtocolError(AcpErrorCode.InvalidRequest, `Session ${params.sessionId} already has an in-flight prompt.`)\n\n const mapped = acpPromptToPromptParts(params.prompt)\n const abortController = new AbortController()\n runtime.abortController = abortController\n const run = async (): Promise<PromptResponse> => {\n let stats: AgentStats | undefined\n let aborted = false\n try {\n for (const warning of mapped.warnings) {\n await this.sessionUpdate(runtime.sessionId, {\n sessionUpdate: 'agent_thought_chunk',\n content: { type: 'text', text: warning },\n })\n }\n stats = await runtime.agent.run({\n prompt: mapped.prompt,\n ...(this.options.model ? { model: this.options.model } : {}),\n ...(this.options.system ? { system: this.options.system } : {}),\n signal: abortController.signal,\n })\n }\n catch (err) {\n aborted = abortController.signal.aborted\n if (!aborted)\n throw err\n }\n finally {\n runtime.abortController = undefined\n runtime.inFlight = undefined\n }\n\n return {\n stopReason: stopReasonFromRun({\n aborted: aborted || abortController.signal.aborted,\n turnUsage: stats?.turnUsage,\n maxTurnsReached: stats ? reachedMaxTurns(stats, this.options.behavior) : false,\n }),\n }\n }\n\n const inFlight = run()\n runtime.inFlight = inFlight\n return await inFlight\n }\n\n private cancel(params: CancelNotification): void {\n const runtime = this.sessions.get(params.sessionId)\n runtime?.abortController?.abort(new Error('Cancelled by ACP client.'))\n runtime?.agent.abort()\n }\n\n private async setMode(params: SetSessionModeRequest): Promise<unknown> {\n const runtime = this.requireSession(params.sessionId)\n if (!this.modes.some(mode => mode.id === params.modeId))\n throw new AcpProtocolError(AcpErrorCode.InvalidParams, `Unknown mode: ${params.modeId}`)\n runtime.modeId = params.modeId\n await this.sessionUpdate(params.sessionId, {\n sessionUpdate: 'current_mode_update',\n currentModeId: params.modeId,\n })\n return {}\n }\n\n private async setConfigOption(params: SetSessionConfigOptionRequest): Promise<unknown> {\n const runtime = this.requireSession(params.sessionId)\n const configOptions = this.applyConfigSelection(runtime, params.configId, params.value)\n runtime.config.set(params.configId, params.value)\n await this.sessionUpdate(params.sessionId, {\n sessionUpdate: 'config_option_update',\n configOptions,\n })\n return { configOptions }\n }\n\n /** Reflect a `select` choice back into the advertised option set's `currentValue`. */\n private applyConfigSelection(runtime: AcpSessionRuntime, configId: string, value: string): SessionConfigOption[] {\n const option = runtime.configOptions.find(candidate => candidate.id === configId)\n if (!option)\n throw new AcpProtocolError(AcpErrorCode.InvalidParams, `Unknown config option: ${configId}`)\n if (!configOptionHasValue(option, value))\n throw new AcpProtocolError(AcpErrorCode.InvalidParams, `Invalid value for config option ${configId}: ${value}`)\n runtime.configOptions = runtime.configOptions.map(candidate =>\n candidate.id === configId ? { ...candidate, currentValue: value } : candidate,\n )\n return runtime.configOptions\n }\n\n private async createRuntime(params: NewSessionRequest | LoadSessionRequest | ResumeSessionRequest, requestedSessionId?: string, mustExist = false): Promise<AcpSessionRuntime> {\n if (requestedSessionId) {\n const existing = this.sessions.get(requestedSessionId)\n if (existing) {\n if (existing.cwd !== params.cwd)\n throw new AcpProtocolError(AcpErrorCode.InvalidParams, `Session ${requestedSessionId} belongs to cwd ${existing.cwd}, not ${params.cwd}.`)\n const nextAdditionalDirectories = params.additionalDirectories ?? existing.additionalDirectories\n const nextMcpServers = params.mcpServers === undefined\n ? existing.mcpServers\n : acpMcpServersToZidane(params.mcpServers)\n if (!sameStringArray(existing.additionalDirectories, nextAdditionalDirectories)) {\n throw new AcpProtocolError(\n AcpErrorCode.InvalidParams,\n `Session ${requestedSessionId} is already active with different additionalDirectories; close it before resuming with changed roots.`,\n )\n }\n if (!sameJson(existing.mcpServers, nextMcpServers)) {\n throw new AcpProtocolError(\n AcpErrorCode.InvalidParams,\n `Session ${requestedSessionId} is already active with different MCP servers; close it before resuming with changed MCP configuration.`,\n )\n }\n return existing\n }\n }\n\n const mcpServers = acpMcpServersToZidane(params.mcpServers)\n const session = await this.resolveSession(requestedSessionId, params.cwd, mustExist)\n const execution = this.resolveExecution(params)\n const provider = this.resolveProvider()\n const sessionId = session.id\n const base = this.options.preset ?? basic\n const agentOptions = this.options.agentOptions ?? {}\n const tools = mergeTools(base.tools, agentOptions.tools, this.options.tools)\n const wrappedTools = wrapToolsForAcpClient(tools, {\n client: this.requirePeer(),\n sessionId,\n capabilities: this.clientCapabilities,\n useClientFileSystem: this.options.useClientFileSystem,\n useClientTerminal: this.options.useClientTerminal,\n })\n const behavior = { ...base.behavior, ...agentOptions.behavior, ...this.options.behavior }\n const agent = createAgent({\n ...base,\n ...agentOptions,\n provider,\n execution,\n session,\n tools: wrappedTools,\n behavior,\n mcpServers: mergeMcpServers(base.mcpServers, agentOptions.mcpServers, this.options.agentOptions?.mcpServers, mcpServers),\n ...(this.options.system ? { system: this.options.system } : {}),\n })\n\n const runtime: AcpSessionRuntime = {\n sessionId,\n cwd: params.cwd,\n additionalDirectories: params.additionalDirectories ?? [],\n mcpServers,\n session,\n execution,\n agent,\n modeId: this.defaultModeId,\n configOptions: cloneConfigOptions(this.defaultConfigOptions),\n config: new Map(),\n }\n this.installHookAdapter(runtime)\n this.sessions.set(sessionId, runtime)\n session.setMeta('acp.cwd', params.cwd)\n session.setMeta('acp.additionalDirectories', params.additionalDirectories ?? [])\n if (session.store)\n await session.save().catch(() => undefined)\n return runtime\n }\n\n private async resolveSession(sessionId: string | undefined, cwd: string, mustExist: boolean): Promise<Session> {\n const store = this.options.store\n if (sessionId && this.sessions.has(sessionId))\n return this.sessions.get(sessionId)!.session\n if (sessionId && store) {\n const existing = await loadSession(store, sessionId)\n if (existing)\n return existing\n if (mustExist)\n throw new AcpProtocolError(AcpErrorCode.ResourceNotFound, `Unknown session: ${sessionId}`)\n const created = await createSession({ id: sessionId, store, projectRoot: cwd, metadata: { title: 'ACP session' } })\n await created.save()\n return created\n }\n if (sessionId && mustExist)\n throw new AcpProtocolError(AcpErrorCode.ResourceNotFound, `Unknown session: ${sessionId}`)\n const created = await createSession({ ...(sessionId ? { id: sessionId } : {}), ...(store ? { store } : {}), projectRoot: cwd, metadata: { title: 'ACP session' } })\n if (store)\n await created.save()\n return created\n }\n\n private resolveExecution(params: NewSessionRequest | LoadSessionRequest | ResumeSessionRequest) {\n if (typeof this.options.execution === 'function')\n return this.options.execution(params)\n return this.options.execution ?? createProcessContext({ cwd: params.cwd })\n }\n\n private resolveProvider(): Provider {\n return typeof this.options.provider === 'function' ? this.options.provider() : this.options.provider\n }\n\n private installHookAdapter(runtime: AcpSessionRuntime): void {\n const seenTools = new Set<string>()\n\n runtime.agent.hooks.hook('stream:text', ({ delta, turnId }) => {\n void this.sessionUpdate(runtime.sessionId, {\n sessionUpdate: 'agent_message_chunk',\n messageId: turnId,\n content: { type: 'text', text: delta },\n })\n })\n runtime.agent.hooks.hook('stream:thinking', ({ delta, turnId }) => {\n void this.sessionUpdate(runtime.sessionId, {\n sessionUpdate: 'agent_thought_chunk',\n messageId: turnId,\n content: { type: 'text', text: delta },\n })\n })\n runtime.agent.hooks.hook('tool:gate', async (ctx) => {\n if (!this.shouldRequestPermission(ctx.name, ctx.input))\n return\n const key = permissionKey(ctx.name, ctx.input)\n const cached = runtime.config.get(key)\n if (cached === 'allow')\n return\n if (cached === 'reject') {\n ctx.block = true\n ctx.reason = 'Rejected by prior ACP permission decision.'\n return\n }\n const outcome = await this.requestPermission(runtime, {\n toolCallId: ctx.callId,\n title: ctx.name,\n kind: toolKindForName(ctx.name),\n status: 'pending',\n rawInput: ctx.input,\n })\n if (outcome.outcome === 'cancelled') {\n ctx.block = true\n ctx.reason = 'Cancelled by ACP client.'\n return\n }\n if (outcome.optionId === 'allow_always')\n runtime.config.set(key, 'allow')\n if (outcome.optionId === 'reject_always')\n runtime.config.set(key, 'reject')\n if (outcome.optionId.startsWith('reject')) {\n ctx.block = true\n ctx.reason = 'Rejected by ACP client.'\n }\n })\n runtime.agent.hooks.hook('tool:dispatched', (ctx) => {\n seenTools.add(ctx.callId)\n const status = ctx.outcome === 'gate-block' || ctx.outcome === 'invalid-input' || ctx.outcome === 'unknown' ? 'failed' : 'pending'\n void this.sessionUpdate(runtime.sessionId, {\n sessionUpdate: 'tool_call',\n toolCallId: ctx.callId,\n title: ctx.name,\n kind: toolKindForName(ctx.name),\n status,\n rawInput: ctx.input,\n ...(status === 'failed' ? { rawOutput: ctx.reason ?? ctx.outcome } : {}),\n })\n })\n runtime.agent.hooks.hook('tool:before', (ctx) => {\n if (!seenTools.has(ctx.callId)) {\n void this.sessionUpdate(runtime.sessionId, {\n sessionUpdate: 'tool_call',\n toolCallId: ctx.callId,\n title: ctx.name,\n kind: toolKindForName(ctx.name),\n status: 'in_progress',\n rawInput: ctx.input,\n })\n return\n }\n void this.sessionUpdate(runtime.sessionId, {\n sessionUpdate: 'tool_call_update',\n toolCallId: ctx.callId,\n status: 'in_progress',\n })\n })\n runtime.agent.hooks.hook('tool:after', (ctx) => {\n void this.sessionUpdate(runtime.sessionId, {\n sessionUpdate: 'tool_call_update',\n toolCallId: ctx.callId,\n status: 'completed',\n content: toolResultToAcpContent(ctx.result),\n rawOutput: ctx.result,\n })\n })\n runtime.agent.hooks.hook('tool:error', (ctx) => {\n void this.sessionUpdate(runtime.sessionId, {\n sessionUpdate: 'tool_call_update',\n toolCallId: ctx.callId,\n status: 'failed',\n rawOutput: errorMessage(ctx.error),\n })\n })\n runtime.agent.hooks.hook('tool:cancelled', (ctx) => {\n void this.sessionUpdate(runtime.sessionId, {\n sessionUpdate: 'tool_call_update',\n toolCallId: ctx.callId,\n status: 'failed',\n rawOutput: ctx.reason ?? 'cancelled',\n })\n })\n runtime.agent.hooks.hook('turn:after', ({ usage, cumulativeUsage }) => {\n // ACP `usage_update.used` is \"tokens currently in context\" and must track\n // `size`. Report the latest turn's effective input (input + cache read +\n // cache creation) — NOT the run-cumulative total, which would climb past\n // the window across turns. `cost` stays cumulative per the ACP spec.\n // Emit only when a window size is resolvable (never fabricate `size`) and\n // when occupancy is known (skip 0-token placeholder/aborted turns so we\n // don't reset the client's context meter).\n const size = this.resolveContextWindow()\n if (size === undefined)\n return\n const used = effectiveInputFromTurn(usage)\n if (used <= 0)\n return\n const cost = usageCost(cumulativeUsage.cost)\n void this.sessionUpdate(runtime.sessionId, {\n sessionUpdate: 'usage_update',\n used,\n size,\n ...(cost ? { cost } : {}),\n })\n })\n }\n\n private resolveContextWindow(): number | undefined {\n if (typeof this.options.contextWindow === 'number' && this.options.contextWindow > 0)\n return this.options.contextWindow\n const fromBehavior = this.options.behavior?.autoCompact\n if (fromBehavior && typeof fromBehavior === 'object' && typeof fromBehavior.contextWindow === 'number' && fromBehavior.contextWindow > 0)\n return fromBehavior.contextWindow\n const meta = this.resolveProvider().meta as { contextWindow?: unknown }\n if (typeof meta.contextWindow === 'number' && meta.contextWindow > 0)\n return meta.contextWindow\n return undefined\n }\n\n private shouldRequestPermission(name: string, input: Record<string, unknown>): boolean {\n const policy = this.options.permission\n if (policy?.enabled !== true || !this.peer)\n return false\n if (policy.toolMatcher)\n return policy.toolMatcher(name, input)\n return name === 'shell' || name === 'write_file' || name === 'edit' || name === 'multi_edit'\n }\n\n private async requestPermission(runtime: AcpSessionRuntime, toolCall: ToolCallUpdate): Promise<RequestPermissionOutcome> {\n const peer = this.requirePeer()\n const request = peer.sendRequest('session/request_permission', {\n sessionId: runtime.sessionId,\n toolCall,\n options: this.options.permission?.options ?? DEFAULT_PERMISSION_OPTIONS,\n }) as Promise<{ outcome?: RequestPermissionOutcome }>\n const aborted = new Promise<{ outcome: RequestPermissionOutcome }>((resolve) => {\n const signal = runtime.abortController?.signal\n if (!signal)\n return\n if (signal.aborted) {\n resolve({ outcome: { outcome: 'cancelled' } })\n return\n }\n signal.addEventListener('abort', () => resolve({ outcome: { outcome: 'cancelled' } }), { once: true })\n })\n const response = await Promise.race([request, aborted])\n return response.outcome ?? { outcome: 'cancelled' }\n }\n\n private async sessionUpdate(sessionId: string, update: SessionUpdate): Promise<void> {\n await this.notify('session/update', { sessionId, update })\n }\n\n private requireSession(sessionId: string): AcpSessionRuntime {\n const runtime = this.sessions.get(sessionId)\n if (!runtime)\n throw new AcpProtocolError(AcpErrorCode.ResourceNotFound, `Unknown session: ${sessionId}`)\n return runtime\n }\n\n private requirePeer(): AcpPeer {\n if (!this.peer) {\n return {\n sendNotification: () => undefined,\n sendRequest: () => Promise.reject(new AcpProtocolError(AcpErrorCode.MethodNotFound, 'No ACP client peer is attached.')),\n }\n }\n return this.peer\n }\n}\n\nexport class AcpProtocolError extends Error {\n constructor(readonly code: number, message: string, readonly data?: unknown) {\n super(message)\n this.name = 'AcpProtocolError'\n }\n}\n\nfunction mergeTools(...sources: Array<Record<string, ToolDef> | undefined>): Record<string, ToolDef> | undefined {\n const out: Record<string, ToolDef> = {}\n for (const source of sources) {\n if (source)\n Object.assign(out, source)\n }\n return Object.keys(out).length > 0 ? out : undefined\n}\n\nfunction mergeMcpServers(...sources: Array<readonly McpServerConfig[] | undefined>): McpServerConfig[] {\n const byName = new Map<string, McpServerConfig>()\n for (const source of sources) {\n for (const server of source ?? [])\n byName.set(server.name, server)\n }\n return [...byName.values()]\n}\n\nfunction cloneConfigOptions(options: readonly SessionConfigOption[]): SessionConfigOption[] {\n return options.map(option => ({\n ...option,\n options: option.options.map(item => 'group' in item\n ? { ...item, options: item.options.map(child => ({ ...child })) }\n : { ...item }) as SessionConfigOption['options'],\n }))\n}\n\nfunction configOptionHasValue(option: SessionConfigOption, value: string): boolean {\n for (const item of option.options) {\n if ('group' in item) {\n if (item.options.some(child => child.value === value))\n return true\n }\n else if (item.value === value) {\n return true\n }\n }\n return false\n}\n\nfunction sameStringArray(left: readonly string[], right: readonly string[]): boolean {\n return left.length === right.length && left.every((value, index) => value === right[index])\n}\n\nfunction sameJson(left: unknown, right: unknown): boolean {\n return stableStringify(left) === stableStringify(right)\n}\n\nfunction asObject<T>(value: unknown): T {\n if (!isObject(value))\n throw new AcpProtocolError(AcpErrorCode.InvalidParams, 'Expected object parameters.')\n return value as T\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction normalizeId(id: unknown) {\n return typeof id === 'string' || typeof id === 'number' || id === null ? id : null\n}\n\nfunction toRpcError(err: unknown): { code: number, message: string, data?: unknown } {\n if (err instanceof AcpProtocolError)\n return { code: err.code, message: err.message, ...(err.data !== undefined ? { data: err.data } : {}) }\n return { code: AcpErrorCode.InternalError, message: err instanceof Error ? err.message : String(err) }\n}\n\nfunction sessionInfo(runtime: AcpSessionRuntime): SessionInfo {\n return {\n sessionId: runtime.sessionId,\n cwd: runtime.cwd,\n additionalDirectories: runtime.additionalDirectories,\n title: typeof runtime.session.metadata.title === 'string' ? runtime.session.metadata.title : null,\n updatedAt: new Date().toISOString(),\n }\n}\n\nfunction permissionKey(name: string, input: Record<string, unknown>): string {\n return `permission:${name}:${stableStringify(input)}`\n}\n\nfunction stableStringify(value: unknown): string {\n if (!isObject(value))\n return JSON.stringify(value)\n const keys = Object.keys(value).sort()\n const out: Record<string, unknown> = {}\n for (const key of keys)\n out[key] = value[key]\n return JSON.stringify(out)\n}\n\nfunction reachedMaxTurns(stats: AgentStats, behavior: AgentOptions['behavior'] | undefined): boolean {\n const maxTurns = behavior?.maxTurns\n return typeof maxTurns === 'number' && stats.turns >= maxTurns && lastFinishReason(stats.turnUsage) !== 'length'\n}\n\nfunction lastFinishReason(turnUsage: TurnUsage[] | undefined) {\n for (let i = (turnUsage?.length ?? 0) - 1; i >= 0; i--) {\n const reason = turnUsage?.[i]?.finishReason\n if (reason)\n return reason\n }\n return undefined\n}\n","import type { Readable, Writable } from 'node:stream'\nimport type { AcpServerOptions } from './types'\nimport { createJsonRpcConnection } from './json-rpc'\nimport { createAcpServer } from './server'\n\nexport { wrapToolsForAcpClient } from './client-tools'\nexport type { AcpClientToolOptions } from './client-tools'\nexport { createJsonRpcConnection, JsonRpcRemoteError } from './json-rpc'\nexport type { JsonRpcConnection, JsonRpcConnectionOptions } from './json-rpc'\nexport { acpMcpServersToZidane, acpPromptToPromptParts, sessionBlocksToAcp, stopReasonFromRun, toolResultToAcpContent } from './mapping'\nexport { AcpProtocolError, createAcpServer } from './server'\nexport type { AcpServer } from './server'\nexport type * from './types'\n\nexport interface RunAcpStdioServerOptions extends AcpServerOptions {\n input?: Readable\n output?: Writable\n framing?: 'content-length' | 'newline'\n onError?: (error: Error) => void\n}\n\nexport function runAcpStdioServer(options: RunAcpStdioServerOptions) {\n const server = createAcpServer(options)\n const connection = createJsonRpcConnection({\n input: options.input ?? process.stdin,\n output: options.output ?? process.stdout,\n framing: options.framing,\n onError: options.onError,\n onRequest: message => server.handleMessage(message),\n onNotification: async (message) => {\n await server.handleMessage(message)\n },\n })\n server.setPeer(connection)\n connection.start()\n return {\n server,\n connection,\n async close() {\n connection.close()\n await server.close()\n },\n }\n}\n"],"mappings":";;;;;;;;;;;AAwBA,SAAgB,wBAAwB,SAAsD;CAC5F,IAAI,SAAS;CACb,IAAI,SAAS;CACb,IAAI,SAAkC,OAAO,MAAM,CAAC;CACpD,MAAM,0BAAU,IAAI,IAA+B;CAEnD,MAAM,gBAAgB,YAAkC;EACtD,IAAI,QACF;EACF,MAAM,OAAO,KAAK,UAAU;GAAE,GAAG;GAAS,SAAS;EAAM,CAAC;EAK1D,IAAI,QAAQ,YAAY,kBAAkB;GACxC,MAAM,QAAQ,OAAO,WAAW,IAAI;GACpC,QAAQ,OAAO,MAAM,mBAAmB,MAAM,UAAU,MAAM;GAC9D;EACF;EACA,QAAQ,OAAO,MAAM,GAAG,KAAK,GAAG;CAClC;CAEA,MAAM,eAAe,OAAO,YAAoC;EAC9D,IAAI,CAACA,WAAS,OAAO,GAAG;GACtB,aAAa,cAAc,MAAA,QAAmC,2BAA2B,CAAC;GAC1F;EACF;EAEA,MAAM,MAAM;EACZ,IAAI,QAAQ,QAAQ,YAAY,OAAO,WAAW,MAAM;GACtD,MAAM,UAAU,QAAQ,IAAI,IAAI,EAAE;GAClC,IAAI,CAAC,SACH;GACF,QAAQ,OAAO,IAAI,EAAE;GACrB,IAAI,WAAW,OAAO,IAAI,OACxB,QAAQ,OAAO,IAAI,mBAAmB,IAAI,MAAM,SAAS,IAAI,MAAM,MAAM,IAAI,MAAM,IAAI,CAAC;QAGxF,QAAQ,QAAS,IAA6B,MAAM;GAEtD;EACF;EAEA,IAAI,OAAQ,IAA6B,WAAW,UAAU;GAC5D,aAAa,eAAe,QAAQ,MAAM,IAAI,KAAK,SAAS,MAAA,QAAmC,0BAA0B,CAAC;GAC1H;EACF;EAEA,IAAI,QAAQ,KAAK;GACf,IAAI;IACF,MAAM,WAAW,MAAM,QAAQ,UAAU,GAAqB;IAC9D,IAAI,UACF,aAAa,QAAQ;GACzB,SACO,KAAK;IACV,aAAa,cAAc,IAAI,IAAA,QAAgC,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,CAAC;GAClH;GACA;EACF;EAEA,IAAI;GACF,MAAM,QAAQ,iBAAiB,GAA0D;EAC3F,SACO,KAAK;GACV,QAAQ,UAAU,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC;EACvE;CACF;CAEA,MAAM,UAAU,UAAiC;EAC/C,SAAS,OAAO,OAAO,CAAC,QAAQ,OAAO,UAAU,WAAW,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC;EACvF,SAAS;GACP,IAAI;GACJ,IAAI;IACF,SAAS,gBAAgB,MAAM;GACjC,SACO,KAAK;IACV,SAAS,OAAO,MAAM,CAAC;IACvB,aAAa,cAAc,MAAA,QAA+B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,CAAC;IAC3G;GACF;GACA,IAAI,CAAC,QACH;GACF,SAAS,OAAO;GAChB,aAAkB,OAAO,OAAO;EAClC;CACF;CAEA,MAAM,WAAW,QAAqB;EACpC,QAAQ,UAAU,GAAG;CACvB;CAEA,OAAO;EACL,QAAQ;GACN,QAAQ,MAAM,GAAG,QAAQ,MAAM;GAC/B,QAAQ,MAAM,GAAG,SAAS,OAAO;EACnC;EACA,QAAQ;GACN,SAAS;GACT,QAAQ,MAAM,IAAI,QAAQ,MAAM;GAChC,QAAQ,MAAM,IAAI,SAAS,OAAO;GAClC,KAAK,MAAM,WAAW,QAAQ,OAAO,GACnC,QAAQ,uBAAO,IAAI,MAAM,6BAA6B,CAAC;GACzD,QAAQ,MAAM;EAChB;EACA,iBAAiB,QAAgB,QAAkB;GACjD,aAAa;IAAE,SAAS;IAAO;IAAQ,GAAI,WAAW,KAAA,IAAY,EAAE,OAAO,IAAI,CAAC;GAAG,CAAC;EACtF;EACA,YAAY,QAAgB,QAAkB;GAC5C,IAAI,QACF,OAAO,QAAQ,uBAAO,IAAI,MAAM,gCAAgC,CAAC;GACnE,MAAM,KAAK;GACX,aAAa;IAAE,SAAS;IAAO;IAAI;IAAQ,GAAI,WAAW,KAAA,IAAY,EAAE,OAAO,IAAI,CAAC;GAAG,CAAC;GACxF,OAAO,IAAI,SAAS,SAAS,WAAW;IACtC,QAAQ,IAAI,IAAI;KAAE;KAAS;IAAO,CAAC;GACrC,CAAC;EACH;CACF;AACF;AAEA,IAAa,qBAAb,cAAwC,MAAM;CACN;CAAuB;CAA7D,YAAY,SAAiB,MAAuB,MAAyB;EAC3E,MAAM,OAAO;EADuB,KAAA,OAAA;EAAuB,KAAA,OAAA;EAE3D,KAAK,OAAO;CACd;AACF;AAEA,SAAgB,gBAAgB,IAAe,SAAkB,CAAC,GAAoB;CACpF,OAAO;EAAE,SAAS;EAAO;EAAI;CAAO;AACtC;AAEA,SAAgB,cAAc,IAAe,MAAc,SAAiB,MAAgC;CAC1G,OAAO;EACL,SAAS;EACT;EACA,OAAO;GACL;GACA;GACA,GAAI,SAAS,KAAA,IAAY,EAAE,KAAK,IAAI,CAAC;EACvC;CACF;AACF;AAEA,SAAS,gBAAgB,OAA4F;CACnH,IAAI,MAAM,WAAW,GACnB,OAAO;CAET,MAAM,YAAY,MAAM,QAAQ,UAAU;CAC1C,IAAI,aAAa,GAAG;EAClB,MAAM,SAAS,MAAM,SAAS,GAAG,SAAS,EAAE,SAAS,MAAM;EAC3D,MAAM,QAAQ,6BAA6B,KAAK,MAAM;EACtD,IAAI,CAAC,OACH,OAAO,gBAAgB,KAAK;EAC9B,MAAM,SAAS,OAAO,MAAM,EAAE;EAC9B,MAAM,YAAY,YAAY;EAC9B,MAAM,UAAU,YAAY;EAC5B,IAAI,MAAM,SAAS,SACjB,OAAO;EACT,MAAM,OAAO,MAAM,SAAS,WAAW,OAAO,EAAE,SAAS,MAAM;EAC/D,OAAO;GAAE,SAAS,KAAK,MAAM,IAAI;GAAG,MAAM,MAAM,SAAS,OAAO;EAAE;CACpE;CAEA,IAAI,oBAAoB,KAAK,MAAM,SAAS,GAAG,KAAK,IAAI,MAAM,QAAQ,EAAE,CAAC,EAAE,SAAS,MAAM,CAAC,GACzF,OAAO;CAET,OAAO,gBAAgB,KAAK;AAC9B;AAEA,SAAS,gBAAgB,OAA4F;CACnH,IAAI,OAAO;CAGX,SAAS;EACP,MAAM,UAAU,KAAK,QAAQ,IAAI;EACjC,IAAI,UAAU,GACZ,OAAO;EACT,MAAM,OAAO,KAAK,SAAS,GAAG,OAAO,EAAE,SAAS,MAAM,EAAE,KAAK;EAC7D,OAAO,KAAK,SAAS,UAAU,CAAC;EAChC,IAAI,KAAK,WAAW,GAClB;EACF,OAAO;GAAE,SAAS,KAAK,MAAM,IAAI;GAAG;EAAK;CAC3C;AACF;AAEA,SAASA,WAAS,OAAkD;CAClE,OAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC5E;;;AC7LA,SAAgB,sBAAsB,SAAiE;CACrG,IAAI,CAAC,SACH,OAAO,CAAC;CACV,OAAO,QAAQ,KAAK,WAA4B;EAC9C,IAAI,OAAO,SAAS,QAClB,OAAO;GACL,MAAM,OAAO;GACb,WAAW;GACX,KAAK,OAAO;GACZ,SAAS,gBAAgB,OAAO,OAAO;EACzC;EAEF,IAAI,OAAO,SAAS,OAClB,OAAO;GACL,MAAM,OAAO;GACb,WAAW;GACX,KAAK,OAAO;GACZ,SAAS,gBAAgB,OAAO,OAAO;EACzC;EAEF,MAAM,QAAQ;EACd,OAAO;GACL,MAAM,OAAO;GACb,WAAW;GACX,SAAS,MAAM;GACf,MAAM,MAAM,QAAQ,CAAC;GACrB,KAAK,YAAY,MAAM,GAAG;EAC5B;CACF,CAAC;AACH;AAEA,SAAgB,8BAA8B,cAAqF;CACjI,OAAO;EACL,OAAO,cAAc,WAAW;EAChC,OAAO,cAAc,UAAU;EAC/B,iBAAiB;CACnB;AACF;AAEA,SAAgB,kBAAmC;CACjD,OAAO;EAAE,MAAM;EAAM,KAAK;CAAK;AACjC;AAEA,SAAgB,aAAa,OAA0D;CACrF,OAAO,SAAS,MAAM,SAAS,IAC3B,CAAC,GAAG,KAAK,IACT,CACE;EAAE,IAAI;EAAS,MAAM;EAAS,aAAa;CAA4C,GACvF;EAAE,IAAI;EAAQ,MAAM;EAAQ,aAAa;CAA6D,CACxG;AACN;AAEA,SAAgB,cAAc,OAA+B,eAAyC;CACpG,OAAO;EAAE;EAAe,gBAAgB,CAAC,GAAG,KAAK;CAAE;AACrD;AAEA,SAAgB,mBACd,WACA,OACA,eACA,eACoB;CACpB,OAAO;EACL;EACA,OAAO,cAAc,OAAO,aAAa;EACzC,GAAI,iBAAiB,cAAc,SAAS,IAAI,EAAE,cAAc,IAAI,CAAC;CACvE;AACF;AAEA,SAAgB,uBAAuB,QAAmD;CACxF,MAAM,QAAsB,CAAC;CAC7B,MAAM,WAAqB,CAAC;CAE5B,KAAK,MAAM,SAAS,QAClB,QAAQ,MAAM,MAAd;EACE,KAAK;GACH,MAAM,KAAK;IAAE,MAAM;IAAQ,MAAM,MAAM;GAAK,CAAC;GAC7C;EACF,KAAK;GACH,IAAI,MAAM,MACR,MAAM,KAAK;IAAE,MAAM;IAAS,WAAW,MAAM,YAAY;IAAa,MAAM,MAAM;GAAK,CAAC;QAErF;IACH,SAAS,KAAK,8CAA8C,MAAM,OAAO,eAAe;IACxF,MAAM,KAAK;KAAE,MAAM;KAAQ,MAAM,oBAAoB,MAAM,OAAO,cAAc;IAAG,CAAC;GACtF;GACA;EAEF,KAAK;GACH,IAAI,MAAM,MACR,MAAM,KAAK;IAAE,MAAM;IAAS,WAAW,MAAM,YAAY;IAAc,MAAM,MAAM;GAAK,CAAC;QAEtF;IACH,SAAS,KAAK,+DAA+D;IAC7E,MAAM,KAAK;KAAE,MAAM;KAAQ,MAAM;IAA6C,CAAC;GACjF;GACA;EAEF,KAAK;GACH,MAAM,KAAK;IAAE,MAAM;IAAQ,MAAM,mBAAmB,KAAK;GAAE,CAAC;GAC5D;EACF,KAAK;GACH,MAAM,KAAK,qBAAqB,KAAK,CAAC;GACtC;EACF;GACE,SAAS,KAAK,8CAA8C;GAC5D,MAAM,KAAK;IAAE,MAAM;IAAQ,MAAM,KAAK,UAAU,KAAgC;GAAE,CAAC;GACnF;CACJ;CAGF,OAAO;EAAE,QAAQ;EAAO;CAAS;AACnC;AAEA,SAAgB,mBAAmB,QAAwD;CACzF,MAAM,MAAsB,CAAC;CAC7B,KAAK,MAAM,SAAS,QAClB,IAAI,MAAM,SAAS,UAAU,MAAM,SAAS,YAC1C,IAAI,KAAK;EAAE,MAAM;EAAQ,MAAM,MAAM;CAAK,CAAC;MAExC,IAAI,MAAM,SAAS,SACtB,IAAI,KAAK,gBAAgB,MAAM,WAAW,UAAU,QAAQ,MAAM,OAAO,KAAA,GAAW,SAAS,QAAQ,MAAM,MAAM,KAAA,GAAW,MAAM,IAAI,CAAC;MAEpI,IAAI,MAAM,SAAS;MAClB,MAAM,MACR,IAAI,KAAK;GAAE,MAAM;GAAS,UAAU,MAAM;GAAW,MAAM,MAAM;EAAK,CAAC;CAAA,OAEtE,IAAI,MAAM,SAAS,YACtB,IAAI,KAAK,mBAAmB,MAAM,WAAW,UAAU,QAAQ,MAAM,OAAO,KAAA,GAAW,SAAS,QAAQ,MAAM,MAAM,KAAA,GAAW,MAAM,UAAU,MAAM,IAAI,CAAC;CAG9J,OAAO;AACT;AAEA,SAAgB,uBAAuB,SAA0D;CAC/F,IAAI,OAAO,YAAY,UACrB,OAAO,CAAC;EAAE,MAAM;EAAW,SAAS;GAAE,MAAM;GAAQ,MAAM;EAAQ;CAAE,CAAC;CAEvE,OAAO,QAAQ,KAAK,UAA2B;EAC7C,IAAI,MAAM,SAAS,QACjB,OAAO;GAAE,MAAM;GAAW,SAAS;IAAE,MAAM;IAAQ,MAAM,MAAM;GAAK;EAAE;EACxE,IAAI,MAAM,SAAS,SACjB,OAAO;GACL,MAAM;GACN,SAAS,gBAAgB,MAAM,WAAW,UAAU,QAAQ,MAAM,OAAO,KAAA,GAAW,SAAS,QAAQ,MAAM,MAAM,KAAA,GAAW,UAAU,QAAQ,MAAM,OAAO,KAAA,CAAS;EACtK;EAEF,IAAI,MAAM,SAAS,WAAW,MAAM,MAClC,OAAO;GAAE,MAAM;GAAW,SAAS;IAAE,MAAM;IAAS,UAAU,MAAM;IAAW,MAAM,MAAM;GAAK;EAAE;EACpG,IAAI,MAAM,SAAS,YACjB,OAAO;GACL,MAAM;GACN,SAAS,mBAAmB,MAAM,WAAW,UAAU,QAAQ,MAAM,OAAO,KAAA,GAAW,SAAS,QAAQ,MAAM,MAAM,KAAA,GAAW,MAAM,UAAU,UAAU,QAAQ,MAAM,OAAO,KAAA,CAAS;EACzL;EAEF,OAAO;GAAE,MAAM;GAAW,SAAS;IAAE,MAAM;IAAQ,MAAM,iBAAiB,CAAC,KAAK,CAAC;GAAE;EAAE;CACvF,CAAC;AACH;;;;;;;AAQA,SAAS,gBAAgB,UAAkB,MAA0B,KAAyB,MAAwC;CACpI,IAAI,MACF,OAAO;EAAE,MAAM;EAAS;EAAU;EAAM,GAAI,MAAM,EAAE,KAAK,IAAI,IAAI,CAAC;CAAG;CACvE,OAAO;EAAE,MAAM;EAAiB,KAAK,OAAO,gBAAgB,SAAS,IAAI;EAAG,MAAM,QAAQ;EAAS;CAAS;AAC9G;;;;;;;AAQA,SAAS,mBAAmB,UAAkB,MAA0B,KAAyB,UAAyC,MAAwC;CAChL,MAAM,MAAM,OAAO,gBAAgB,YAAY,IAAI;CACnD,IAAI,OAAO,SAAS,UAClB,OAAO;EAAE,MAAM;EAAiB;EAAK,MAAM,QAAQ;EAAY;CAAS;CAK1E,OAAO;EAAE,MAAM;EAAY,UAHgB,aAAa,SACpD;GAAE;GAAK,MAAM;GAAM;EAAS,IAC5B;GAAE;GAAK,MAAM;GAAM;EAAS;CACI;AACtC;AAEA,SAAS,gBAAgB,MAAc,MAAkC;CAEvE,OAAO,UAAU,KAAK,IADR,QAAQ,MAAM,QAAQ,aAAa,GACrB;AAC9B;AAEA,SAAgB,gBAAgB,MAAwB;CACtD,IAAI,SAAS,eAAe,SAAS,cACnC,OAAO;CACT,IAAI,SAAS,gBAAgB,SAAS,UAAU,SAAS,cACvD,OAAO;CACT,IAAI,SAAS,UAAU,SAAS,UAAU,SAAS,eACjD,OAAO;CACT,IAAI,SAAS,WAAW,SAAS,eAAe,SAAS,cACvD,OAAO;CACT,IAAI,SAAS,gBAAgB,SAAS,aACpC,OAAO;CACT,IAAI,SAAS,kBAAkB,SAAS,YACtC,OAAO;CACT,OAAO;AACT;AAEA,SAAgB,kBAAkB,OAA6F;CAC7H,IAAI,MAAM,SACR,OAAO;CACT,IAAI,MAAM,iBACR,OAAO;CAET,QADeC,mBAAiB,MAAM,SACzB,GAAb;EACE,KAAK,UACH,OAAO;EACT,KAAK;EACL,KAAK,SACH,OAAO;EACT,SACE,OAAO;CACX;AACF;AAEA,SAAgB,UAAU,MAAuC;CAC/D,IAAI,OAAO,SAAS,YAAY,CAAC,OAAO,SAAS,IAAI,GACnD,OAAO;CACT,OAAO;EAAE,QAAQ;EAAM,UAAU;CAAM;AACzC;AAEA,SAAgB,eAAe,KAAa,MAAsB;CAChE,OAAO,KAAK,WAAW,GAAG,IAAI,OAAO,QAAQ,KAAK,IAAI;AACxD;AAEA,SAASA,mBAAiB,WAAkE;CAC1F,KAAK,IAAI,KAAK,WAAW,UAAU,KAAK,GAAG,KAAK,GAAG,KAAK;EACtD,MAAM,SAAS,YAAY,IAAI;EAC/B,IAAI,QACF,OAAO;CACX;AAEF;AAEA,SAAS,gBAAgB,SAAyF;CAChH,MAAM,MAA8B,CAAC;CACrC,KAAK,MAAM,UAAU,WAAW,CAAC,GAC/B,IAAI,OAAO,QAAQ,OAAO;CAC5B,OAAO;AACT;AAEA,SAAS,YAAY,KAAqF;CACxG,MAAM,MAA8B,CAAC;CACrC,KAAK,MAAM,QAAQ,OAAO,CAAC,GACzB,IAAI,KAAK,QAAQ,KAAK;CACxB,OAAO;AACT;AAEA,SAAS,mBAAmB,OAAuG;CACjI,MAAM,QAAQ,MAAM,SAAS,MAAM,QAAQ,MAAM;CACjD,OAAO,MAAM,WACT,cAAc,MAAM,IAAI,MAAM,IAAI,KAAK,MAAM,SAAS,KACtD,cAAc,MAAM,IAAI,MAAM,IAAI;AACxC;AAEA,SAAS,qBAAqB,OAAqC;CACjE,MAAM,WAAW,MAAM;CACvB,MAAM,YAAY,SAAS,YAAY;CACvC,MAAM,OAAO,YAAY,SAAS,GAAG;CACrC,IAAI,UAAU,YAAY,OAAO,SAAS,SAAS,UACjD,OAAO;EACL,MAAM;EACN;EACA,MAAM,SAAS;EACf,UAAU;EACV,GAAI,OAAO,EAAE,KAAK,IAAI,CAAC;CACzB;CAEF,IAAI,UAAU,YAAY,OAAO,SAAS,SAAS,UACjD,OAAO;EACL,MAAM;EACN;EACA,MAAM,SAAS;EACf,UAAU;EACV,GAAI,OAAO,EAAE,KAAK,IAAI,CAAC;CACzB;CAEF,OAAO;EAAE,MAAM;EAAQ,MAAM,sBAAsB,SAAS,IAAI;CAAG;AACrE;AAEA,SAAS,YAAY,KAA6C;CAChE,IAAI,CAAC,KACH,OAAO,KAAA;CAET,MAAM,UADU,IAAI,QAAQ,WAAW,EACjB,EAAE,MAAM,OAAO,EAAE,IAAI;CAC3C,OAAO,WAAW,QAAQ,SAAS,IAAI,UAAU,KAAA;AACnD;;;AC/SA,SAAgB,sBAAsB,OAA4C,SAAoE;CACpJ,IAAI,CAAC,OACH,OAAO,KAAA;CAET,MAAM,UAAmC,EAAE,GAAG,MAAM;CACpD,MAAM,gBAAgB,cAAc,OAAO,WAAW;CACtD,MAAM,iBAAiB,cAAc,OAAO,YAAY;CACxD,MAAM,aAAa,cAAc,OAAO,OAAO;CAC/C,IAAI,QAAQ,wBAAwB,SAAS,QAAQ,aAAa,IAAI,gBAAgB,eACpF,QAAQ,cAAc,OAAO,aAAa,cAAc,MAAM,OAAO;CACvE,IAAI,QAAQ,wBAAwB,SAAS,QAAQ,aAAa,IAAI,iBAAiB,gBACrF,QAAQ,eAAe,OAAO,cAAc,eAAe,MAAM,OAAO;CAC1E,IAAI,QAAQ,sBAAsB,SAAS,QAAQ,aAAa,YAAY,YAC1E,QAAQ,WAAW,OAAO,UAAU,WAAW,MAAM,OAAO;CAC9D,OAAO;AACT;AAEA,SAAS,cAAc,OAAgC,eAA8D;CACnH,KAAK,MAAM,CAAC,KAAK,SAAS,OAAO,QAAQ,KAAK,GAC5C,IAAI,QAAQ,iBAAiB,KAAK,KAAK,SAAS,eAC9C,OAAO;EAAE;EAAK;CAAK;CAEvB,OAAO;AACT;AAEA,SAAS,aAAa,MAAe,SAAwC;CAC3E,OAAO;EACL,GAAG;EACH,MAAM,QAAQ,OAAO,KAAK;GACxB,MAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;GAC3D,IAAI,CAAC,MACH,OAAO;GACT,MAAM,UAAU,eAAe,IAAI,OAAO,KAAK,IAAI;GACnD,MAAM,OAAO,cAAc,MAAM,MAAM;GACvC,MAAM,QAAQ,qBAAqB,MAAM,KAAK;GAC9C,MAAM,WAAW,MAAM,QAAQ,OAAO,YAAY,qBAAqB;IACrE,WAAW,QAAQ;IACnB,MAAM;IACN;IACA,GAAI,UAAU,OAAO,EAAE,MAAM,IAAI,CAAC;GACpC,CAAC;GACD,MAAM,UAAU,OAAO,SAAS,YAAY,WAAW,SAAS,UAAU;GAC1E,cAAc,KAAK,SAAS,SAAS,QAAQ,GAAG,SAAS,OAAO,iBAAiB;GACjF,IAAI,MAAM,gBAAgB,OACxB,OAAO;GACT,OAAO,gBAAgB,SAAS,QAAQ,CAAC;EAC3C;CACF;AACF;AAEA,SAAS,cAAc,MAAe,SAAwC;CAC5E,OAAO;EACL,GAAG;EACH,MAAM,QAAQ,OAAO,KAAK;GACxB,MAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;GAC3D,MAAM,UAAU,OAAO,MAAM,YAAY,WAAW,MAAM,UAAU;GACpE,IAAI,CAAC,MACH,OAAO;GACT,MAAM,UAAU,eAAe,IAAI,OAAO,KAAK,IAAI;GACnD,MAAM,QAAQ,OAAO,YAAY,sBAAsB;IACrD,WAAW,QAAQ;IACnB,MAAM;IACN;GACF,CAAC;GACD,cAAc,KAAK,SAAS,SAAS,GAAG,OAAO,iBAAiB;GAChE,IAAI,gBAAgB,SAAS;GAC7B,OAAO,SAAS,QAAQ,IAAI,OAAO,WAAW,OAAO,EAAE;EACzD;CACF;AACF;AAEA,SAAS,UAAU,MAAe,SAAwC;CACxE,OAAO;EACL,GAAG;EACH,MAAM,4BAA4B,KAAK,IAAI;EAC3C,MAAM,QAAQ,OAAO,KAAK;GACxB,MAAM,UAAU,OAAO,MAAM,YAAY,WAAW,MAAM,UAAU;GACpE,IAAI,CAAC,SACH,OAAO;GACT,IAAI,MAAM,sBAAsB,MAC9B,OAAO;GAET,MAAM,UAAiC;IACrC,WAAW,QAAQ;IACnB;IACA,KAAK,IAAI,OAAO;IAChB,iBAAiB,OAAO,MAAM,mBAAmB,WAAW,MAAM,iBAAiB;GACrF;GACA,MAAM,UAAU,MAAM,QAAQ,OAAO,YAAY,mBAAmB,OAAO;GAC3E,MAAM,aAAa,OAAO,QAAQ,eAAe,WAAW,QAAQ,aAAa;GACjF,IAAI,CAAC,YACH,OAAO;GAET,IAAI;IACF,MAAM,OAAO,MAAM,QAAQ,OAAO,YAAY,0BAA0B;KACtE,WAAW,QAAQ;KACnB;IACF,CAAC;IAKD,OAAO,qBAAqB,MAJP,QAAQ,OAAO,YAAY,mBAAmB;KACjE,WAAW,QAAQ;KACnB;IACF,CAAC,GACmC,IAAI;GAC1C,UACQ;IACN,MAAM,QAAQ,OAAO,YAAY,oBAAoB;KACnD,WAAW,QAAQ;KACnB;IACF,CAAC,EAAE,YAAY,KAAA,CAAS;GAC1B;EACF;CACF;AACF;AAEA,SAAS,qBAAqB,QAAgC,MAAoE;CAChI,MAAM,OAAO,OAAO,UAAU;CAC9B,MAAM,OAAO,KAAK,YAAY,OAAO,YAAY;CACjD,MAAM,SAAS,KAAK,UAAU,OAAO,YAAY;CACjD,MAAM,SAAS,SACX,aAAa,OAAO,KACpB,OAAO,SAAS,WACd,WAAW,KAAK,KAChB;CAEN,OAAO,GAAG,OADQ,OAAO,YAAY,uCAAuC,KAC/C;AAC/B;AAEA,SAAS,4BAA4B,MAAwC;CAC3E,MAAM,aAAa,SAAS,KAAK,YAAY,UAAU,IAAI,KAAK,YAAY,aAAa,KAAA;CACzF,IAAI,CAAC,cAAc,CAAC,OAAO,OAAO,YAAY,mBAAmB,GAC/D,OAAO;CAET,MAAM,EAAE,mBAAmB,kBAAkB,GAAG,mBAAmB;CACnE,MAAM,WAAW,MAAM,QAAQ,KAAK,YAAY,QAAQ,IACpD,KAAK,YAAY,SAAS,QAAO,SAAQ,SAAS,mBAAmB,IACrE,KAAK,YAAY;CAErB,OAAO;EACL,GAAG;EACH,aAAa,KAAK,YACf,MAAM,IAAI,EACV,QAAO,SACN,CAAC,KAAK,SAAS,mBAAmB,KAC/B,CAAC,KAAK,SAAS,qBAAqB,KACpC,CAAC,KAAK,SAAS,iBAAiB,CACrC,EACC,KAAK,IAAI;EACZ,aAAa;GACX,GAAG,KAAK;GACR,YAAY;GACZ,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;EACjC;CACF;AACF;AAEA,SAAS,gBAAgB,SAAiB,OAAuB;CAC/D,OAAO,QACJ,MAAM,IAAI,EACV,KAAK,MAAM,UAAU,GAAG,QAAQ,MAAM,IAAI,MAAM,EAChD,KAAK,IAAI;AACd;AAEA,SAAS,cAAc,OAAwB;CAC7C,OAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,KAAK,SAAS,IAAI,KAAK,MAAM,KAAK,IAAI;AACjG;AAEA,SAAS,qBAAqB,OAA+B;CAC3D,OAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,KAAK,QAAQ,IAAI,KAAK,MAAM,KAAK,IAAI;AAChG;AAEA,SAAS,SAAS,OAAkD;CAClE,OAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,cAAc,KAAkB,MAAc,SAAiB,QAAgB,OAAqB;CAC3G,MAAM,YAAY,oBAAoB,GAAG;CACzC,IAAI,CAAC,WACH;CACF,UAAU,IAAI,aAAa,IAAI,OAAO,KAAK,IAAI,GAAG;EAChD,aAAa,YAAY,OAAO;EAChC;EACA;EACA,UAAU,OAAO;EACjB,SAAS,KAAK,IAAI;CACpB,CAAC;AACH;;;AC9IA,MAAM,oBAAoB;AAE1B,MAAM,6BAAiD;CACrD;EAAE,UAAU;EAAc,MAAM;EAAc,MAAM;CAAa;CACjE;EAAE,UAAU;EAAgB,MAAM;EAAgB,MAAM;CAAe;CACvE;EAAE,UAAU;EAAe,MAAM;EAAe,MAAM;CAAc;CACpE;EAAE,UAAU;EAAiB,MAAM;EAAiB,MAAM;CAAgB;AAC5E;AAUA,SAAgB,gBAAgB,SAAsC;CACpE,OAAO,IAAI,cAAc,OAAO;AAClC;AAEA,IAAM,gBAAN,MAAyC;CAQV;CAP7B,OAA+B;CAC/B,qBAAoD,CAAC;CACrD,2BAAmB,IAAI,IAA+B;CACtD;CACA;CACA;CAEA,YAAY,SAA4C;EAA3B,KAAA,UAAA;EAC3B,KAAK,QAAQ,aAAa,QAAQ,KAAK;EACvC,KAAK,gBAAgB,QAAQ,iBAAiB,KAAK,MAAM,IAAI,MAAM;EACnE,KAAK,uBAAuB,QAAQ,iBAAiB,CAAC;CACxD;CAEA,QAAQ,MAAqB;EAC3B,KAAK,OAAO;CACd;CAEA,MAAM,cAAc,SAA0D;EAC5E,IAAI,CAAC,SAAS,OAAO,KAAK,OAAQ,QAAiC,WAAW,UAE5E,OAAO,cAAc,YADV,QAAS,UAAsB,QAA6B,KAAK,IACzC,GAAA,QAAgC,2BAA2B;EAGhG,IAAI,EAAE,QAAQ,UAAU;GACtB,MAAM,KAAK,mBAAmB,QAAQ,QAAS,QAAiC,MAAM;GACtF,OAAO;EACT;EAEA,MAAM,UAAU;EAChB,IAAI;GACF,MAAM,SAAS,MAAM,KAAK,cAAc,QAAQ,QAAQ,QAAQ,MAAM;GACtE,OAAO,gBAAgB,QAAQ,IAAI,MAAM;EAC3C,SACO,KAAK;GACV,MAAM,WAAW,WAAW,GAAG;GAC/B,OAAO,cAAc,QAAQ,IAAI,SAAS,MAAM,SAAS,SAAS,SAAS,IAAI;EACjF;CACF;CAEA,MAAM,cAAc,QAAgB,QAAoC;EACtE,QAAQ,QAAR;GACE,KAAK,cACH,OAAO,KAAK,WAAW,SAA4B,MAAM,CAAC;GAC5D,KAAK,gBACH,OAAO,KAAK,aAAa,SAA8B,MAAM,CAAC;GAChE,KAAK,UACH,OAAO,KAAK,OAAO;GACrB,KAAK,eACH,OAAO,KAAK,WAAW,SAA4B,MAAM,CAAC;GAC5D,KAAK,gBACH,OAAO,KAAK,oBAAoB,SAA6B,MAAM,CAAC;GACtE,KAAK,kBACH,OAAO,KAAK,cAAc,SAA+B,MAAM,CAAC;GAClE,KAAK,gBACH,OAAO,KAAK,aAAa,SAA8B,MAAM,CAAC;GAChE,KAAK,kBACH,OAAO,KAAK,cAAc,SAA+B,MAAM,CAAC;GAClE,KAAK,iBACH,OAAO,KAAK,aAAa,SAAgC,MAAM,CAAC;GAClE,KAAK,kBACH,OAAO,KAAK,OAAO,SAAwB,MAAM,CAAC;GACpD,KAAK,oBACH,OAAO,KAAK,QAAQ,SAAgC,MAAM,CAAC;GAC7D,KAAK,6BACH,OAAO,KAAK,gBAAgB,SAAwC,MAAM,CAAC;GAC7E,SACE,MAAM,IAAI,iBAAA,QAA8C,uBAAuB,QAAQ;EAC3F;CACF;CAEA,MAAM,OAAO,QAAgB,QAAiC;EAC5D,MAAM,KAAK,MAAM,iBAAiB,QAAQ,MAAM;CAClD;CAEA,MAAM,QAAuB;EAC3B,MAAM,WAAW,CAAC,GAAG,KAAK,SAAS,OAAO,CAAC;EAC3C,KAAK,SAAS,MAAM;EACpB,MAAM,QAAQ,WAAW,SAAS,IAAI,OAAO,YAAY;GACvD,QAAQ,iBAAiB,sBAAM,IAAI,MAAM,qBAAqB,CAAC;GAC/D,MAAM,QAAQ,MAAM,QAAQ;EAC9B,CAAC,CAAC;CACJ;CAEA,MAAc,mBAAmB,QAAgB,QAAiC;EAChF,QAAQ,QAAR;GACE,KAAK;IACH,KAAK,OAAO,SAA6B,MAAM,CAAC;IAChD;GACF,SACE;EACJ;CACF;CAEA,WAAmB,QAAoC;EACrD,KAAK,qBAAqB,OAAO,sBAAsB,CAAC;EACxD,MAAM,WAAW,KAAK,gBAAgB;EACtC,OAAO;GAGL,iBAAiB,OAAO,oBAAA,IAA2C,OAAO,kBAAA;GAC1E,mBAAmB;IACjB,aAAa;IACb,oBAAoB,8BAA8B,SAAS,KAAK,YAAY;IAC5E,iBAAiB,gBAAgB;IACjC,qBAAqB;KACnB,MAAM,CAAC;KACP,QAAQ,CAAC;KACT,QAAQ,CAAC;KACT,OAAO,CAAC;KACR,uBAAuB,CAAC;IAC1B;IACA,MAAM,EACJ,GAAI,KAAK,QAAQ,SAAS,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,EAC9C;GACF;GACA,WAAW,KAAK,QAAQ,aAAa;IAAE,MAAM;IAAU,OAAO;IAAc,SAAS;GAAkB;GACvG,aAAa,KAAK,QAAQ,eAAe,CAAC;EAC5C;CACF;CAEA,MAAc,aAAa,QAA+C;EACxE,IAAI,CAAC,KAAK,QAAQ,cAChB,OAAO,CAAC;EACV,OAAO,MAAM,KAAK,QAAQ,aAAa,MAAM;CAC/C;CAEA,MAAc,SAA2B;EACvC,IAAI,CAAC,KAAK,QAAQ,QAChB,OAAO,CAAC;EACV,OAAO,MAAM,KAAK,QAAQ,OAAO;CACnC;CAEA,MAAc,WAAW,QAA6C;EACpE,MAAM,UAAU,MAAM,KAAK,cAAc,MAAM;EAC/C,KAAK,uBAAuB,QAAQ,SAAS;EAC7C,OAAO,mBAAmB,QAAQ,WAAW,KAAK,OAAO,QAAQ,QAAQ,QAAQ,aAAa;CAChG;CAEA,MAAc,oBAAoB,QAA8C;EAC9E,MAAM,UAAU,MAAM,KAAK,cAAc,QAAQ,OAAO,WAAW,IAAI;EAIvE,MAAM,KAAK,cAAc,OAAO;EAChC,KAAK,uBAAuB,QAAQ,SAAS;EAC7C,OAAO,KAAK,qBAAqB,OAAO;CAC1C;CAEA,MAAc,cAAc,QAAgD;EAC1E,MAAM,UAAU,MAAM,KAAK,cAAc;GACvC,KAAK,OAAO;GACZ,uBAAuB,OAAO;GAC9B,YAAY,OAAO,cAAc,CAAC;EACpC,GAAG,OAAO,WAAW,IAAI;EAGzB,KAAK,uBAAuB,QAAQ,SAAS;EAC7C,OAAO,KAAK,qBAAqB,OAAO;CAC1C;CAEA,qBAA6B,SAAgH;EAC3I,OAAO;GACL,OAAO,cAAc,KAAK,OAAO,QAAQ,MAAM;GAC/C,GAAI,QAAQ,cAAc,SAAS,IAAI,EAAE,eAAe,QAAQ,cAAc,IAAI,CAAC;EACrF;CACF;CAEA,uBAA+B,WAAyB;EACtD,IAAI,CAAC,KAAK,QAAQ,YAAY,KAAK,QAAQ,SAAS,WAAW,GAC7D;EACF,iBAAiB;GACf,KAAU,cAAc,WAAW;IACjC,eAAe;IACf,mBAAmB,KAAK,QAAQ;GAClC,CAAC;EACH,GAAG,CAAC;CACN;CAEA,MAAc,cAAc,SAA2C;EACrE,KAAK,MAAM,QAAQ,QAAQ,QAAQ,OAAO;GACxC,MAAM,SAAS,mBAAmB,KAAK,OAAO;GAC9C,IAAI,OAAO,WAAW,GACpB;GACF,MAAM,gBAAgB,KAAK,SAAS,cAAc,wBAAwB;GAC1E,KAAK,MAAM,WAAW,QACpB,MAAM,KAAK,cAAc,QAAQ,WAAW;IAAE;IAAe;GAAQ,CAAC;EAC1E;CACF;CAEA,MAAc,aAAa,QAA+C;EACxE,MAAM,QAAQ,KAAK,QAAQ;EAC3B,IAAI,CAAC,OACH,OAAO;GACL,UAAU,CAAC,GAAG,KAAK,SAAS,OAAO,CAAC,EACjC,QAAO,YAAW,CAAC,OAAO,OAAO,QAAQ,QAAQ,OAAO,GAAG,EAC3D,KAAI,YAAW,YAAY,OAAO,CAAC;GACtC,YAAY;EACd;EAGF,MAAM,MAAM,MAAM,MAAM,KAAK;GAAE,OAAO;GAAK,GAAI,OAAO,MAAM,EAAE,aAAa,OAAO,IAAI,IAAI,CAAC;EAAG,CAAC;EAC/F,MAAM,WAA0B,CAAC;EACjC,KAAK,MAAM,MAAM,KAAK;GACpB,MAAM,SAAS,MAAM,MAAM,KAAK,EAAE;GAClC,IAAI,CAAC,QACH;GAIF,MAAM,MAAM,OAAO,eAAe,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,EAAE,GAAG;GAC9E,IAAI,CAAC,KACH;GACF,SAAS,KAAK;IACZ,WAAW,OAAO;IAClB;IACA,OAAO,OAAO,OAAO,SAAS,UAAU,WAAW,OAAO,SAAS,QAAQ;IAC3E,WAAW,IAAI,KAAK,OAAO,SAAS,EAAE,YAAY;GACpD,CAAC;EACH;EACA,OAAO;GAAE;GAAU,YAAY;EAAK;CACtC;CAEA,MAAc,cAAc,QAAgD;EAC1E,MAAM,UAAU,KAAK,SAAS,IAAI,OAAO,SAAS;EAClD,IAAI,SAAS;GACX,QAAQ,iBAAiB,sBAAM,IAAI,MAAM,sBAAsB,CAAC;GAChE,MAAM,QAAQ,MAAM,QAAQ;GAC5B,KAAK,SAAS,OAAO,OAAO,SAAS;EACvC;EACA,MAAM,KAAK,QAAQ,OAAO,OAAO,OAAO,SAAS;EACjD,OAAO,CAAC;CACV;CAEA,MAAc,aAAa,QAAiD;EAC1E,MAAM,UAAU,KAAK,eAAe,OAAO,SAAS;EACpD,QAAQ,iBAAiB,sBAAM,IAAI,MAAM,qBAAqB,CAAC;EAC/D,MAAM,QAAQ,MAAM,QAAQ;EAC5B,KAAK,SAAS,OAAO,OAAO,SAAS;EACrC,OAAO,CAAC;CACV;CAEA,MAAc,OAAO,QAAgD;EACnE,MAAM,UAAU,KAAK,eAAe,OAAO,SAAS;EACpD,IAAI,QAAQ,UACV,MAAM,IAAI,iBAAA,QAA8C,WAAW,OAAO,UAAU,kCAAkC;EAExH,MAAM,SAAS,uBAAuB,OAAO,MAAM;EACnD,MAAM,kBAAkB,IAAI,gBAAgB;EAC5C,QAAQ,kBAAkB;EAC1B,MAAM,MAAM,YAAqC;GAC/C,IAAI;GACJ,IAAI,UAAU;GACd,IAAI;IACF,KAAK,MAAM,WAAW,OAAO,UAC3B,MAAM,KAAK,cAAc,QAAQ,WAAW;KAC1C,eAAe;KACf,SAAS;MAAE,MAAM;MAAQ,MAAM;KAAQ;IACzC,CAAC;IAEH,QAAQ,MAAM,QAAQ,MAAM,IAAI;KAC9B,QAAQ,OAAO;KACf,GAAI,KAAK,QAAQ,QAAQ,EAAE,OAAO,KAAK,QAAQ,MAAM,IAAI,CAAC;KAC1D,GAAI,KAAK,QAAQ,SAAS,EAAE,QAAQ,KAAK,QAAQ,OAAO,IAAI,CAAC;KAC7D,QAAQ,gBAAgB;IAC1B,CAAC;GACH,SACO,KAAK;IACV,UAAU,gBAAgB,OAAO;IACjC,IAAI,CAAC,SACH,MAAM;GACV,UACQ;IACN,QAAQ,kBAAkB,KAAA;IAC1B,QAAQ,WAAW,KAAA;GACrB;GAEA,OAAO,EACL,YAAY,kBAAkB;IAC5B,SAAS,WAAW,gBAAgB,OAAO;IAC3C,WAAW,OAAO;IAClB,iBAAiB,QAAQ,gBAAgB,OAAO,KAAK,QAAQ,QAAQ,IAAI;GAC3E,CAAC,EACH;EACF;EAEA,MAAM,WAAW,IAAI;EACrB,QAAQ,WAAW;EACnB,OAAO,MAAM;CACf;CAEA,OAAe,QAAkC;EAC/C,MAAM,UAAU,KAAK,SAAS,IAAI,OAAO,SAAS;EAClD,SAAS,iBAAiB,sBAAM,IAAI,MAAM,0BAA0B,CAAC;EACrE,SAAS,MAAM,MAAM;CACvB;CAEA,MAAc,QAAQ,QAAiD;EACrE,MAAM,UAAU,KAAK,eAAe,OAAO,SAAS;EACpD,IAAI,CAAC,KAAK,MAAM,MAAK,SAAQ,KAAK,OAAO,OAAO,MAAM,GACpD,MAAM,IAAI,iBAAA,QAA6C,iBAAiB,OAAO,QAAQ;EACzF,QAAQ,SAAS,OAAO;EACxB,MAAM,KAAK,cAAc,OAAO,WAAW;GACzC,eAAe;GACf,eAAe,OAAO;EACxB,CAAC;EACD,OAAO,CAAC;CACV;CAEA,MAAc,gBAAgB,QAAyD;EACrF,MAAM,UAAU,KAAK,eAAe,OAAO,SAAS;EACpD,MAAM,gBAAgB,KAAK,qBAAqB,SAAS,OAAO,UAAU,OAAO,KAAK;EACtF,QAAQ,OAAO,IAAI,OAAO,UAAU,OAAO,KAAK;EAChD,MAAM,KAAK,cAAc,OAAO,WAAW;GACzC,eAAe;GACf;EACF,CAAC;EACD,OAAO,EAAE,cAAc;CACzB;;CAGA,qBAA6B,SAA4B,UAAkB,OAAsC;EAC/G,MAAM,SAAS,QAAQ,cAAc,MAAK,cAAa,UAAU,OAAO,QAAQ;EAChF,IAAI,CAAC,QACH,MAAM,IAAI,iBAAA,QAA6C,0BAA0B,UAAU;EAC7F,IAAI,CAAC,qBAAqB,QAAQ,KAAK,GACrC,MAAM,IAAI,iBAAA,QAA6C,mCAAmC,SAAS,IAAI,OAAO;EAChH,QAAQ,gBAAgB,QAAQ,cAAc,KAAI,cAChD,UAAU,OAAO,WAAW;GAAE,GAAG;GAAW,cAAc;EAAM,IAAI,SACtE;EACA,OAAO,QAAQ;CACjB;CAEA,MAAc,cAAc,QAAuE,oBAA6B,YAAY,OAAmC;EAC7K,IAAI,oBAAoB;GACtB,MAAM,WAAW,KAAK,SAAS,IAAI,kBAAkB;GACrD,IAAI,UAAU;IACZ,IAAI,SAAS,QAAQ,OAAO,KAC1B,MAAM,IAAI,iBAAA,QAA6C,WAAW,mBAAmB,kBAAkB,SAAS,IAAI,QAAQ,OAAO,IAAI,EAAE;IAC3I,MAAM,4BAA4B,OAAO,yBAAyB,SAAS;IAC3E,MAAM,iBAAiB,OAAO,eAAe,KAAA,IACzC,SAAS,aACT,sBAAsB,OAAO,UAAU;IAC3C,IAAI,CAAC,gBAAgB,SAAS,uBAAuB,yBAAyB,GAC5E,MAAM,IAAI,iBAAA,QAER,WAAW,mBAAmB,sGAChC;IAEF,IAAI,CAAC,SAAS,SAAS,YAAY,cAAc,GAC/C,MAAM,IAAI,iBAAA,QAER,WAAW,mBAAmB,wGAChC;IAEF,OAAO;GACT;EACF;EAEA,MAAM,aAAa,sBAAsB,OAAO,UAAU;EAC1D,MAAM,UAAU,MAAM,KAAK,eAAe,oBAAoB,OAAO,KAAK,SAAS;EACnF,MAAM,YAAY,KAAK,iBAAiB,MAAM;EAC9C,MAAM,WAAW,KAAK,gBAAgB;EACtC,MAAM,YAAY,QAAQ;EAC1B,MAAM,OAAO,KAAK,QAAQ,UAAUC;EACpC,MAAM,eAAe,KAAK,QAAQ,gBAAgB,CAAC;EAEnD,MAAM,eAAe,sBADP,WAAW,KAAK,OAAO,aAAa,OAAO,KAAK,QAAQ,KACvB,GAAG;GAChD,QAAQ,KAAK,YAAY;GACzB;GACA,cAAc,KAAK;GACnB,qBAAqB,KAAK,QAAQ;GAClC,mBAAmB,KAAK,QAAQ;EAClC,CAAC;EACD,MAAM,WAAW;GAAE,GAAG,KAAK;GAAU,GAAG,aAAa;GAAU,GAAG,KAAK,QAAQ;EAAS;EACxF,MAAM,QAAQ,YAAY;GACxB,GAAG;GACH,GAAG;GACH;GACA;GACA;GACA,OAAO;GACP;GACA,YAAY,gBAAgB,KAAK,YAAY,aAAa,YAAY,KAAK,QAAQ,cAAc,YAAY,UAAU;GACvH,GAAI,KAAK,QAAQ,SAAS,EAAE,QAAQ,KAAK,QAAQ,OAAO,IAAI,CAAC;EAC/D,CAAC;EAED,MAAM,UAA6B;GACjC;GACA,KAAK,OAAO;GACZ,uBAAuB,OAAO,yBAAyB,CAAC;GACxD;GACA;GACA;GACA;GACA,QAAQ,KAAK;GACb,eAAe,mBAAmB,KAAK,oBAAoB;GAC3D,wBAAQ,IAAI,IAAI;EAClB;EACA,KAAK,mBAAmB,OAAO;EAC/B,KAAK,SAAS,IAAI,WAAW,OAAO;EACpC,QAAQ,QAAQ,WAAW,OAAO,GAAG;EACrC,QAAQ,QAAQ,6BAA6B,OAAO,yBAAyB,CAAC,CAAC;EAC/E,IAAI,QAAQ,OACV,MAAM,QAAQ,KAAK,EAAE,YAAY,KAAA,CAAS;EAC5C,OAAO;CACT;CAEA,MAAc,eAAe,WAA+B,KAAa,WAAsC;EAC7G,MAAM,QAAQ,KAAK,QAAQ;EAC3B,IAAI,aAAa,KAAK,SAAS,IAAI,SAAS,GAC1C,OAAO,KAAK,SAAS,IAAI,SAAS,EAAG;EACvC,IAAI,aAAa,OAAO;GACtB,MAAM,WAAW,MAAM,YAAY,OAAO,SAAS;GACnD,IAAI,UACF,OAAO;GACT,IAAI,WACF,MAAM,IAAI,iBAAA,QAAgD,oBAAoB,WAAW;GAC3F,MAAM,UAAU,MAAM,cAAc;IAAE,IAAI;IAAW;IAAO,aAAa;IAAK,UAAU,EAAE,OAAO,cAAc;GAAE,CAAC;GAClH,MAAM,QAAQ,KAAK;GACnB,OAAO;EACT;EACA,IAAI,aAAa,WACf,MAAM,IAAI,iBAAA,QAAgD,oBAAoB,WAAW;EAC3F,MAAM,UAAU,MAAM,cAAc;GAAE,GAAI,YAAY,EAAE,IAAI,UAAU,IAAI,CAAC;GAAI,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;GAAI,aAAa;GAAK,UAAU,EAAE,OAAO,cAAc;EAAE,CAAC;EAClK,IAAI,OACF,MAAM,QAAQ,KAAK;EACrB,OAAO;CACT;CAEA,iBAAyB,QAAuE;EAC9F,IAAI,OAAO,KAAK,QAAQ,cAAc,YACpC,OAAO,KAAK,QAAQ,UAAU,MAAM;EACtC,OAAO,KAAK,QAAQ,aAAa,qBAAqB,EAAE,KAAK,OAAO,IAAI,CAAC;CAC3E;CAEA,kBAAoC;EAClC,OAAO,OAAO,KAAK,QAAQ,aAAa,aAAa,KAAK,QAAQ,SAAS,IAAI,KAAK,QAAQ;CAC9F;CAEA,mBAA2B,SAAkC;EAC3D,MAAM,4BAAY,IAAI,IAAY;EAElC,QAAQ,MAAM,MAAM,KAAK,gBAAgB,EAAE,OAAO,aAAa;GAC7D,KAAU,cAAc,QAAQ,WAAW;IACzC,eAAe;IACf,WAAW;IACX,SAAS;KAAE,MAAM;KAAQ,MAAM;IAAM;GACvC,CAAC;EACH,CAAC;EACD,QAAQ,MAAM,MAAM,KAAK,oBAAoB,EAAE,OAAO,aAAa;GACjE,KAAU,cAAc,QAAQ,WAAW;IACzC,eAAe;IACf,WAAW;IACX,SAAS;KAAE,MAAM;KAAQ,MAAM;IAAM;GACvC,CAAC;EACH,CAAC;EACD,QAAQ,MAAM,MAAM,KAAK,aAAa,OAAO,QAAQ;GACnD,IAAI,CAAC,KAAK,wBAAwB,IAAI,MAAM,IAAI,KAAK,GACnD;GACF,MAAM,MAAM,cAAc,IAAI,MAAM,IAAI,KAAK;GAC7C,MAAM,SAAS,QAAQ,OAAO,IAAI,GAAG;GACrC,IAAI,WAAW,SACb;GACF,IAAI,WAAW,UAAU;IACvB,IAAI,QAAQ;IACZ,IAAI,SAAS;IACb;GACF;GACA,MAAM,UAAU,MAAM,KAAK,kBAAkB,SAAS;IACpD,YAAY,IAAI;IAChB,OAAO,IAAI;IACX,MAAM,gBAAgB,IAAI,IAAI;IAC9B,QAAQ;IACR,UAAU,IAAI;GAChB,CAAC;GACD,IAAI,QAAQ,YAAY,aAAa;IACnC,IAAI,QAAQ;IACZ,IAAI,SAAS;IACb;GACF;GACA,IAAI,QAAQ,aAAa,gBACvB,QAAQ,OAAO,IAAI,KAAK,OAAO;GACjC,IAAI,QAAQ,aAAa,iBACvB,QAAQ,OAAO,IAAI,KAAK,QAAQ;GAClC,IAAI,QAAQ,SAAS,WAAW,QAAQ,GAAG;IACzC,IAAI,QAAQ;IACZ,IAAI,SAAS;GACf;EACF,CAAC;EACD,QAAQ,MAAM,MAAM,KAAK,oBAAoB,QAAQ;GACnD,UAAU,IAAI,IAAI,MAAM;GACxB,MAAM,SAAS,IAAI,YAAY,gBAAgB,IAAI,YAAY,mBAAmB,IAAI,YAAY,YAAY,WAAW;GACzH,KAAU,cAAc,QAAQ,WAAW;IACzC,eAAe;IACf,YAAY,IAAI;IAChB,OAAO,IAAI;IACX,MAAM,gBAAgB,IAAI,IAAI;IAC9B;IACA,UAAU,IAAI;IACd,GAAI,WAAW,WAAW,EAAE,WAAW,IAAI,UAAU,IAAI,QAAQ,IAAI,CAAC;GACxE,CAAC;EACH,CAAC;EACD,QAAQ,MAAM,MAAM,KAAK,gBAAgB,QAAQ;GAC/C,IAAI,CAAC,UAAU,IAAI,IAAI,MAAM,GAAG;IAC9B,KAAU,cAAc,QAAQ,WAAW;KACzC,eAAe;KACf,YAAY,IAAI;KAChB,OAAO,IAAI;KACX,MAAM,gBAAgB,IAAI,IAAI;KAC9B,QAAQ;KACR,UAAU,IAAI;IAChB,CAAC;IACD;GACF;GACA,KAAU,cAAc,QAAQ,WAAW;IACzC,eAAe;IACf,YAAY,IAAI;IAChB,QAAQ;GACV,CAAC;EACH,CAAC;EACD,QAAQ,MAAM,MAAM,KAAK,eAAe,QAAQ;GAC9C,KAAU,cAAc,QAAQ,WAAW;IACzC,eAAe;IACf,YAAY,IAAI;IAChB,QAAQ;IACR,SAAS,uBAAuB,IAAI,MAAM;IAC1C,WAAW,IAAI;GACjB,CAAC;EACH,CAAC;EACD,QAAQ,MAAM,MAAM,KAAK,eAAe,QAAQ;GAC9C,KAAU,cAAc,QAAQ,WAAW;IACzC,eAAe;IACf,YAAY,IAAI;IAChB,QAAQ;IACR,WAAW,aAAa,IAAI,KAAK;GACnC,CAAC;EACH,CAAC;EACD,QAAQ,MAAM,MAAM,KAAK,mBAAmB,QAAQ;GAClD,KAAU,cAAc,QAAQ,WAAW;IACzC,eAAe;IACf,YAAY,IAAI;IAChB,QAAQ;IACR,WAAW,IAAI,UAAU;GAC3B,CAAC;EACH,CAAC;EACD,QAAQ,MAAM,MAAM,KAAK,eAAe,EAAE,OAAO,sBAAsB;GAQrE,MAAM,OAAO,KAAK,qBAAqB;GACvC,IAAI,SAAS,KAAA,GACX;GACF,MAAM,OAAO,uBAAuB,KAAK;GACzC,IAAI,QAAQ,GACV;GACF,MAAM,OAAO,UAAU,gBAAgB,IAAI;GAC3C,KAAU,cAAc,QAAQ,WAAW;IACzC,eAAe;IACf;IACA;IACA,GAAI,OAAO,EAAE,KAAK,IAAI,CAAC;GACzB,CAAC;EACH,CAAC;CACH;CAEA,uBAAmD;EACjD,IAAI,OAAO,KAAK,QAAQ,kBAAkB,YAAY,KAAK,QAAQ,gBAAgB,GACjF,OAAO,KAAK,QAAQ;EACtB,MAAM,eAAe,KAAK,QAAQ,UAAU;EAC5C,IAAI,gBAAgB,OAAO,iBAAiB,YAAY,OAAO,aAAa,kBAAkB,YAAY,aAAa,gBAAgB,GACrI,OAAO,aAAa;EACtB,MAAM,OAAO,KAAK,gBAAgB,EAAE;EACpC,IAAI,OAAO,KAAK,kBAAkB,YAAY,KAAK,gBAAgB,GACjE,OAAO,KAAK;CAEhB;CAEA,wBAAgC,MAAc,OAAyC;EACrF,MAAM,SAAS,KAAK,QAAQ;EAC5B,IAAI,QAAQ,YAAY,QAAQ,CAAC,KAAK,MACpC,OAAO;EACT,IAAI,OAAO,aACT,OAAO,OAAO,YAAY,MAAM,KAAK;EACvC,OAAO,SAAS,WAAW,SAAS,gBAAgB,SAAS,UAAU,SAAS;CAClF;CAEA,MAAc,kBAAkB,SAA4B,UAA6D;EAEvH,MAAM,UADO,KAAK,YACC,EAAE,YAAY,8BAA8B;GAC7D,WAAW,QAAQ;GACnB;GACA,SAAS,KAAK,QAAQ,YAAY,WAAW;EAC/C,CAAC;EACD,MAAM,UAAU,IAAI,SAAgD,YAAY;GAC9E,MAAM,SAAS,QAAQ,iBAAiB;GACxC,IAAI,CAAC,QACH;GACF,IAAI,OAAO,SAAS;IAClB,QAAQ,EAAE,SAAS,EAAE,SAAS,YAAY,EAAE,CAAC;IAC7C;GACF;GACA,OAAO,iBAAiB,eAAe,QAAQ,EAAE,SAAS,EAAE,SAAS,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC;EACvG,CAAC;EAED,QAAO,MADgB,QAAQ,KAAK,CAAC,SAAS,OAAO,CAAC,GACtC,WAAW,EAAE,SAAS,YAAY;CACpD;CAEA,MAAc,cAAc,WAAmB,QAAsC;EACnF,MAAM,KAAK,OAAO,kBAAkB;GAAE;GAAW;EAAO,CAAC;CAC3D;CAEA,eAAuB,WAAsC;EAC3D,MAAM,UAAU,KAAK,SAAS,IAAI,SAAS;EAC3C,IAAI,CAAC,SACH,MAAM,IAAI,iBAAA,QAAgD,oBAAoB,WAAW;EAC3F,OAAO;CACT;CAEA,cAA+B;EAC7B,IAAI,CAAC,KAAK,MACR,OAAO;GACL,wBAAwB,KAAA;GACxB,mBAAmB,QAAQ,OAAO,IAAI,iBAAA,QAA8C,iCAAiC,CAAC;EACxH;EAEF,OAAO,KAAK;CACd;AACF;AAEA,IAAa,mBAAb,cAAsC,MAAM;CACrB;CAAwC;CAA7D,YAAY,MAAuB,SAAiB,MAAyB;EAC3E,MAAM,OAAO;EADM,KAAA,OAAA;EAAwC,KAAA,OAAA;EAE3D,KAAK,OAAO;CACd;AACF;AAEA,SAAS,WAAW,GAAG,SAA0F;CAC/G,MAAM,MAA+B,CAAC;CACtC,KAAK,MAAM,UAAU,SACnB,IAAI,QACF,OAAO,OAAO,KAAK,MAAM;CAE7B,OAAO,OAAO,KAAK,GAAG,EAAE,SAAS,IAAI,MAAM,KAAA;AAC7C;AAEA,SAAS,gBAAgB,GAAG,SAA2E;CACrG,MAAM,yBAAS,IAAI,IAA6B;CAChD,KAAK,MAAM,UAAU,SACnB,KAAK,MAAM,UAAU,UAAU,CAAC,GAC9B,OAAO,IAAI,OAAO,MAAM,MAAM;CAElC,OAAO,CAAC,GAAG,OAAO,OAAO,CAAC;AAC5B;AAEA,SAAS,mBAAmB,SAAgE;CAC1F,OAAO,QAAQ,KAAI,YAAW;EAC5B,GAAG;EACH,SAAS,OAAO,QAAQ,KAAI,SAAQ,WAAW,OAC3C;GAAE,GAAG;GAAM,SAAS,KAAK,QAAQ,KAAI,WAAU,EAAE,GAAG,MAAM,EAAE;EAAE,IAC9D,EAAE,GAAG,KAAK,CAAC;CACjB,EAAE;AACJ;AAEA,SAAS,qBAAqB,QAA6B,OAAwB;CACjF,KAAK,MAAM,QAAQ,OAAO,SACxB,IAAI,WAAW;MACT,KAAK,QAAQ,MAAK,UAAS,MAAM,UAAU,KAAK,GAClD,OAAO;CAAA,OAEN,IAAI,KAAK,UAAU,OACtB,OAAO;CAGX,OAAO;AACT;AAEA,SAAS,gBAAgB,MAAyB,OAAmC;CACnF,OAAO,KAAK,WAAW,MAAM,UAAU,KAAK,OAAO,OAAO,UAAU,UAAU,MAAM,MAAM;AAC5F;AAEA,SAAS,SAAS,MAAe,OAAyB;CACxD,OAAO,gBAAgB,IAAI,MAAM,gBAAgB,KAAK;AACxD;AAEA,SAAS,SAAY,OAAmB;CACtC,IAAI,CAAC,SAAS,KAAK,GACjB,MAAM,IAAI,iBAAA,QAA6C,6BAA6B;CACtF,OAAO;AACT;AAEA,SAAS,SAAS,OAAkD;CAClE,OAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,YAAY,IAAa;CAChC,OAAO,OAAO,OAAO,YAAY,OAAO,OAAO,YAAY,OAAO,OAAO,KAAK;AAChF;AAEA,SAAS,WAAW,KAAiE;CACnF,IAAI,eAAe,kBACjB,OAAO;EAAE,MAAM,IAAI;EAAM,SAAS,IAAI;EAAS,GAAI,IAAI,SAAS,KAAA,IAAY,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CAAG;CACvG,OAAO;EAAE,MAAA;EAAkC,SAAS,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;CAAE;AACvG;AAEA,SAAS,YAAY,SAAyC;CAC5D,OAAO;EACL,WAAW,QAAQ;EACnB,KAAK,QAAQ;EACb,uBAAuB,QAAQ;EAC/B,OAAO,OAAO,QAAQ,QAAQ,SAAS,UAAU,WAAW,QAAQ,QAAQ,SAAS,QAAQ;EAC7F,4BAAW,IAAI,KAAK,GAAE,YAAY;CACpC;AACF;AAEA,SAAS,cAAc,MAAc,OAAwC;CAC3E,OAAO,cAAc,KAAK,GAAG,gBAAgB,KAAK;AACpD;AAEA,SAAS,gBAAgB,OAAwB;CAC/C,IAAI,CAAC,SAAS,KAAK,GACjB,OAAO,KAAK,UAAU,KAAK;CAC7B,MAAM,OAAO,OAAO,KAAK,KAAK,EAAE,KAAK;CACrC,MAAM,MAA+B,CAAC;CACtC,KAAK,MAAM,OAAO,MAChB,IAAI,OAAO,MAAM;CACnB,OAAO,KAAK,UAAU,GAAG;AAC3B;AAEA,SAAS,gBAAgB,OAAmB,UAAyD;CACnG,MAAM,WAAW,UAAU;CAC3B,OAAO,OAAO,aAAa,YAAY,MAAM,SAAS,YAAY,iBAAiB,MAAM,SAAS,MAAM;AAC1G;AAEA,SAAS,iBAAiB,WAAoC;CAC5D,KAAK,IAAI,KAAK,WAAW,UAAU,KAAK,GAAG,KAAK,GAAG,KAAK;EACtD,MAAM,SAAS,YAAY,IAAI;EAC/B,IAAI,QACF,OAAO;CACX;AAEF;;;AClyBA,SAAgB,kBAAkB,SAAmC;CACnE,MAAM,SAAS,gBAAgB,OAAO;CACtC,MAAM,aAAa,wBAAwB;EACzC,OAAO,QAAQ,SAAS,QAAQ;EAChC,QAAQ,QAAQ,UAAU,QAAQ;EAClC,SAAS,QAAQ;EACjB,SAAS,QAAQ;EACjB,YAAW,YAAW,OAAO,cAAc,OAAO;EAClD,gBAAgB,OAAO,YAAY;GACjC,MAAM,OAAO,cAAc,OAAO;EACpC;CACF,CAAC;CACD,OAAO,QAAQ,UAAU;CACzB,WAAW,MAAM;CACjB,OAAO;EACL;EACA;EACA,MAAM,QAAQ;GACZ,WAAW,MAAM;GACjB,MAAM,OAAO,MAAM;EACrB;CACF;AACF"}
@@ -0,0 +1 @@
1
+ export { };