@aihu/language-server 0.1.1 → 0.2.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.
- package/README.md +11 -9
- package/dist/bin.js +20685 -250
- package/dist/chunk-DcSSxlwY.js +30 -0
- package/dist/core/index.d.ts +1630 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +30 -2
- package/dist/core/index.js.map +1 -0
- package/dist/index-ROvxbbgq.d.ts +22204 -0
- package/dist/index-ROvxbbgq.d.ts.map +1 -0
- package/dist/server.d.ts +60 -9
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +19650 -172
- package/dist/server.js.map +1 -1
- package/dist/{core-BHishSOT.js → volar-plugin-cOusBZ0l.js} +952 -7
- package/dist/volar-plugin-cOusBZ0l.js.map +1 -0
- package/package.json +9 -4
- package/dist/core-BHishSOT.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"core-BHishSOT.js","names":[],"sources":["../../compiler/js/codemods/macro-simplification/migrate.ts","../src/core/code-action.ts","../src/core/completion.ts","../src/core/diagnostics.ts","../src/core/hover.ts"],"sourcesContent":["/**\n * macro-simplification codemod (B6.2)\n *\n * Transforms v1 `.aihu` source into v2 collection-form per\n * `docs/superpowers/specs/2026-05-05-spec-macro-vocabulary-v2.md`.\n *\n * Scope (in-spec macros only): `$prop`, `$computed`, `$action`,\n * `$resource`, `$effect`, `$lifecycle.{mount,dispose}` inside `@state`;\n * `$expose`, `$expose.write`, agent-bare `$action`, `$describe` inside\n * `@agent` (folded into matching `@state` collection entries).\n *\n * Out of scope: `@template`, `@style`, `@route`, `$watch`, `$shared`,\n * `$cookie`, `$server`, `$meta`, `$beforeNavigate`, `$afterNavigate`,\n * `$effect.on`, plain TS imports/decls (passed through verbatim).\n */\n\nexport interface MigrateResult {\n readonly rewritten: string\n readonly warnings: readonly string[]\n}\n\ninterface Sidecar {\n describe?: string\n exposeRead?: boolean\n exposeWrite?: boolean\n isAction?: boolean\n}\n\ninterface PropEntry {\n name: string\n rawType: string | undefined\n rawDefault: string | undefined\n describe: string | undefined\n expose: { read: boolean; write: boolean } | undefined\n leading: string\n}\n\ninterface FunctionishEntry {\n name: string\n args: string\n retType: string | undefined\n body: string\n describe: string | undefined\n expose: { read: boolean; write: boolean } | undefined\n leading: string\n}\n\ninterface ValueEntry {\n name: string\n expr: string\n describe: string | undefined\n expose: { read: boolean; write: boolean } | undefined\n leading: string\n}\n\ninterface AnonEffect {\n body: string\n leading: string\n position: number\n}\n\ninterface LifecycleHook {\n kind: 'mount' | 'dispose'\n body: string\n leading: string\n position: number\n}\n\ninterface PlainDecl {\n raw: string\n leading: string\n name: string | undefined\n rawType: string | undefined\n rawDefault: string | undefined\n}\n\ninterface Passthrough {\n raw: string\n leading: string\n position: number\n}\n\nconst INDENT = ' '\n\n// Public entry point\n\nexport function migrate(source: string): MigrateResult {\n const warnings: string[] = []\n\n const stateBlock = findBlock(source, 'state')\n const agentBlock = findBlock(source, 'agent')\n\n // Phase 1 - sidecar from @agent\n const sidecar = new Map<string, Sidecar>()\n const preservedAgentLines: string[] = []\n if (agentBlock) {\n parseAgent(agentBlock.body, sidecar, preservedAgentLines, warnings)\n }\n\n if (!stateBlock) {\n return { rewritten: source, warnings }\n }\n\n // Phase 2 - walk @state, bucket\n const buckets = walkState(stateBlock.body, sidecar, warnings)\n\n // Phase 3 - emit new @state body and (possibly empty) @agent block\n const newStateBody = emitStateBody(buckets)\n const newStateBlock = `@state {\\n${newStateBody}\\n}`\n\n const newAgentBlock =\n preservedAgentLines.length > 0 ? `@agent {\\n${preservedAgentLines.join('\\n')}\\n}` : null\n\n let out = source.slice(0, stateBlock.start) + newStateBlock + source.slice(stateBlock.end)\n\n if (agentBlock) {\n const agentRelocated = findBlock(out, 'agent')\n if (agentRelocated) {\n if (newAgentBlock) {\n out = out.slice(0, agentRelocated.start) + newAgentBlock + out.slice(agentRelocated.end)\n } else {\n const dropStart = expandLeftToLineStart(out, agentRelocated.start)\n const dropEnd = expandRightThroughBlankLines(out, agentRelocated.end)\n out = out.slice(0, dropStart) + out.slice(dropEnd)\n }\n }\n }\n\n // Validate every sidecar name resolves in @state\n const stateNames = new Set<string>([\n ...buckets.props.map((p) => p.name),\n ...buckets.computed.map((c) => c.name),\n ...buckets.action.map((a) => a.name),\n ...buckets.resource.map((r) => r.name),\n ...buckets.effectNamed.map((e) => e.name),\n ...buckets.plain.map((p) => p.name).filter((x): x is string => !!x),\n ])\n for (const [name] of sidecar) {\n if (!stateNames.has(name)) {\n warnings.push(`@agent references '${name}' but no @state declaration found`)\n }\n }\n\n return { rewritten: out, warnings }\n}\n\n// Block location (brace-balanced, string/comment aware)\n\ninterface BlockSpan {\n start: number\n end: number\n bodyStart: number\n bodyEnd: number\n body: string\n}\n\nfunction findBlock(source: string, name: 'state' | 'agent'): BlockSpan | null {\n const re = new RegExp(`(^|\\\\n)([ \\\\t]*)@${name}\\\\s*\\\\{`, 'g')\n const m = re.exec(source)\n if (!m) return null\n const startMatch = m.index + (m[1] === '\\n' ? 1 : 0)\n const openIdx = m.index + m[0].length - 1\n const closeIdx = matchBrace(source, openIdx)\n if (closeIdx < 0) return null\n return {\n start: startMatch,\n end: closeIdx + 1,\n bodyStart: openIdx + 1,\n bodyEnd: closeIdx,\n body: source.slice(openIdx + 1, closeIdx),\n }\n}\n\nfunction matchBrace(s: string, i: number): number {\n if (s[i] !== '{') return -1\n let depth = 0\n let j = i\n while (j < s.length) {\n const c = s[j]\n if (c === '/' && s[j + 1] === '/') {\n const nl = s.indexOf('\\n', j)\n j = nl < 0 ? s.length : nl\n continue\n }\n if (c === '/' && s[j + 1] === '*') {\n const end = s.indexOf('*/', j + 2)\n j = end < 0 ? s.length : end + 2\n continue\n }\n if (c === '\"' || c === \"'\" || c === '`') {\n j = skipString(s, j)\n continue\n }\n if (c === '{') depth++\n else if (c === '}') {\n depth--\n if (depth === 0) return j\n }\n j++\n }\n return -1\n}\n\nfunction skipString(s: string, i: number): number {\n const quote = s[i]!\n let j = i + 1\n while (j < s.length) {\n const c = s[j]\n if (c === '\\\\') {\n j += 2\n continue\n }\n if (quote === '`' && c === '$' && s[j + 1] === '{') {\n const close = matchBrace(s, j + 1)\n j = close < 0 ? s.length : close + 1\n continue\n }\n if (c === quote) return j + 1\n j++\n }\n return s.length\n}\n\nfunction matchParen(s: string, i: number): number {\n if (s[i] !== '(') return -1\n let depth = 0\n let j = i\n while (j < s.length) {\n const c = s[j]\n if (c === '/' && s[j + 1] === '/') {\n const nl = s.indexOf('\\n', j)\n j = nl < 0 ? s.length : nl\n continue\n }\n if (c === '/' && s[j + 1] === '*') {\n const end = s.indexOf('*/', j + 2)\n j = end < 0 ? s.length : end + 2\n continue\n }\n if (c === '\"' || c === \"'\" || c === '`') {\n j = skipString(s, j)\n continue\n }\n if (c === '{') {\n const close = matchBrace(s, j)\n j = close < 0 ? s.length : close + 1\n continue\n }\n if (c === '(') depth++\n else if (c === ')') {\n depth--\n if (depth === 0) return j\n }\n j++\n }\n return -1\n}\n\n// @agent parsing -> sidecar\n\nfunction parseAgent(\n body: string,\n sidecar: Map<string, Sidecar>,\n preservedAgentLines: string[],\n _warnings: string[],\n): void {\n const upsert = (name: string, patch: Partial<Sidecar>) => {\n sidecar.set(name, { ...(sidecar.get(name) ?? {}), ...patch })\n }\n for (const rawLine of body.split('\\n')) {\n const line = rawLine.trim()\n if (line === '' || line.startsWith('//') || line.startsWith('/*') || line.startsWith('*')) {\n continue\n }\n if (line.startsWith('$expose.write ')) {\n const names = parseNameList(line.slice('$expose.write '.length))\n for (const n of names) upsert(n, { exposeRead: true, exposeWrite: true })\n continue\n }\n if (line.startsWith('$expose ')) {\n const names = parseNameList(line.slice('$expose '.length))\n for (const n of names) {\n upsert(n, { exposeRead: true })\n }\n continue\n }\n if (line.startsWith('$action ')) {\n const rest = line.slice('$action '.length).trim()\n const m = /^([A-Za-z_$][\\w$]*)/.exec(rest)\n if (m) upsert(m[1]!, { isAction: true, exposeRead: true, exposeWrite: true })\n continue\n }\n if (line.startsWith('$describe ')) {\n const rest = line.slice('$describe '.length).trim()\n const nameMatch = /^([A-Za-z_$][\\w$]*)\\s+([\"'])([\\s\\S]*)\\2\\s*$/.exec(rest)\n if (nameMatch) {\n upsert(nameMatch[1]!, { describe: nameMatch[3]! })\n }\n continue\n }\n if (line.startsWith('$scope ')) {\n preservedAgentLines.push(` ${line}`)\n continue\n }\n if (line.startsWith('$rate-limit ')) {\n preservedAgentLines.push(` ${line}`)\n }\n }\n}\n\nfunction parseNameList(s: string): string[] {\n return s\n .split(',')\n .map((x) => x.trim())\n .filter((x) => /^[A-Za-z_$][\\w$]*$/.test(x))\n}\n\n// @state walker - produces buckets in source order\n\ninterface Buckets {\n props: PropEntry[]\n computed: ValueEntry[]\n action: FunctionishEntry[]\n resource: ValueEntry[]\n effectNamed: ValueEntry[]\n effectAnon: AnonEffect[]\n lifecycle: LifecycleHook[]\n plain: PlainDecl[]\n passthrough: Passthrough[]\n}\n\nfunction walkState(body: string, sidecar: Map<string, Sidecar>, warnings: string[]): Buckets {\n const buckets: Buckets = {\n props: [],\n computed: [],\n action: [],\n resource: [],\n effectNamed: [],\n effectAnon: [],\n lifecycle: [],\n plain: [],\n passthrough: [],\n }\n\n let i = 0\n while (i < body.length && (body[i] === '\\n' || body[i] === '\\r')) i++\n\n let leadingBuf = ''\n let position = 0\n\n const consumeWS = () => {\n while (i < body.length) {\n const lineEnd = body.indexOf('\\n', i)\n const end = lineEnd < 0 ? body.length : lineEnd\n const line = body.slice(i, end)\n const trimmed = line.trim()\n if (trimmed === '') {\n leadingBuf += `${line}\\n`\n i = end + 1\n continue\n }\n if (trimmed.startsWith('//')) {\n leadingBuf += `${line}\\n`\n i = end + 1\n continue\n }\n if (trimmed.startsWith('/*')) {\n const close = body.indexOf('*/', i)\n if (close < 0) {\n leadingBuf += body.slice(i)\n i = body.length\n return\n }\n const commentEnd = body.indexOf('\\n', close)\n const realEnd = commentEnd < 0 ? body.length : commentEnd + 1\n leadingBuf += body.slice(i, realEnd)\n i = realEnd\n continue\n }\n return\n }\n }\n\n while (i < body.length) {\n consumeWS()\n if (i >= body.length) break\n const lineStart = i\n const lineEnd = body.indexOf('\\n', i)\n const lineEndIdx = lineEnd < 0 ? body.length : lineEnd\n const lineText = body.slice(lineStart, lineEndIdx)\n const trimmed = lineText.trim()\n const leading = leadingBuf\n leadingBuf = ''\n // Position where trimmed content begins (skipping leading whitespace).\n const trimStart = lineStart + (lineText.length - lineText.trimStart().length)\n\n if (trimmed.startsWith('import ')) {\n buckets.passthrough.push({ raw: lineText.trim(), leading, position: position++ })\n i = lineEndIdx + 1\n continue\n }\n\n // v2 collection-form passthrough (idempotency path): if the source already\n // uses `$<macro>: {` collection-form, re-parse the inner entries into the\n // same buckets so emit is byte-identical on re-run.\n {\n const v2 = tryParseV2Collection(body, trimStart, sidecar, buckets, leading, () => position++)\n if (v2 !== null) {\n i = v2\n continue\n }\n }\n\n // v2 anonymous effect form: `$effect: () => { ... }` or `$effect: () => expr`.\n if (/^\\$effect\\s*:\\s*(?:\\(|async\\b)/.test(trimmed)) {\n const handled = tryParseV2AnonEffect(body, trimStart, buckets, leading, position++)\n if (handled !== null) {\n i = handled\n continue\n }\n }\n\n if (trimmed.startsWith('$prop ')) {\n const handled = handleProp(body, trimStart, sidecar, buckets, leading)\n if (handled !== null) {\n i = handled\n continue\n }\n buckets.passthrough.push({ raw: trimmed, leading, position: position++ })\n i = lineEndIdx + 1\n continue\n }\n\n if (trimmed.startsWith('$computed ')) {\n const handled = handleComputed(body, trimStart, sidecar, buckets, leading)\n if (handled !== null) {\n i = handled\n continue\n }\n buckets.passthrough.push({ raw: trimmed, leading, position: position++ })\n i = lineEndIdx + 1\n continue\n }\n\n if (trimmed.startsWith('$resource ')) {\n const handled = handleResource(body, trimStart, sidecar, buckets, leading)\n if (handled !== null) {\n i = handled\n continue\n }\n buckets.passthrough.push({ raw: trimmed, leading, position: position++ })\n i = lineEndIdx + 1\n continue\n }\n\n if (trimmed.startsWith('$action ')) {\n const handled = handleAction(body, trimStart, sidecar, buckets, leading)\n if (handled !== null) {\n i = handled\n continue\n }\n buckets.passthrough.push({ raw: trimmed, leading, position: position++ })\n i = lineEndIdx + 1\n continue\n }\n\n if (trimmed.startsWith('$lifecycle.mount(') || trimmed.startsWith('$lifecycle.dispose(')) {\n const handled = handleLifecycle(body, trimStart, buckets, leading, position++)\n if (handled !== null) {\n i = handled\n continue\n }\n buckets.passthrough.push({ raw: trimmed, leading, position: position++ })\n i = lineEndIdx + 1\n continue\n }\n\n if (trimmed.startsWith('$effect(')) {\n const handled = handleEffectAnon(body, trimStart, buckets, leading, position++, warnings)\n if (handled !== null) {\n i = handled\n continue\n }\n buckets.passthrough.push({ raw: trimmed, leading, position: position++ })\n i = lineEndIdx + 1\n continue\n }\n\n if (trimmed.startsWith('$effect.on(')) {\n const handled = consumePassthroughCall(body, trimStart)\n buckets.passthrough.push({\n raw: body.slice(trimStart, handled).trim(),\n leading,\n position: position++,\n })\n i = handled\n continue\n }\n\n // Any other `$macro(...)` invocation at top level: pass through preserving\n // the multi-line callback body. Covers `$afterNavigate`, `$beforeNavigate`,\n // `$watch`, etc. — out of v2 redesign scope per spec §1.2.\n if (/^\\$[A-Za-z_][\\w.$]*\\s*\\(/.test(trimmed)) {\n const handled = consumePassthroughCall(body, trimStart)\n buckets.passthrough.push({\n raw: body.slice(trimStart, handled).trimEnd(),\n leading,\n position: position++,\n })\n i = handled\n continue\n }\n\n // Bare `$macro <ident>` form (e.g., `$route currentRoute`, `$shared foo`).\n if (/^\\$[A-Za-z_][\\w.$-]*\\s+[A-Za-z_$]/.test(trimmed)) {\n buckets.passthrough.push({ raw: trimmed, leading, position: position++ })\n i = lineEndIdx + 1\n continue\n }\n\n const plain = tryParsePlainDecl(body, trimStart)\n if (plain !== null) {\n const sc = plain.name ? sidecar.get(plain.name) : undefined\n if (sc) {\n buckets.props.push({\n name: plain.name!,\n rawType: plain.rawType,\n rawDefault: plain.rawDefault,\n describe: sc.describe,\n expose: sidecarToExpose(sc),\n leading,\n })\n } else {\n buckets.plain.push({\n raw: plain.raw,\n leading,\n name: plain.name,\n rawType: plain.rawType,\n rawDefault: plain.rawDefault,\n })\n }\n i = plain.endIdx\n continue\n }\n\n buckets.passthrough.push({ raw: trimmed, leading, position: position++ })\n i = lineEndIdx + 1\n }\n\n return buckets\n}\n\nfunction sidecarToExpose(sc: Sidecar): { read: boolean; write: boolean } | undefined {\n if (!sc.exposeRead && !sc.exposeWrite && !sc.isAction) return undefined\n return { read: !!sc.exposeRead, write: !!sc.exposeWrite }\n}\n\n// handlers - each returns the index just past the consumed statement\n\nfunction handleProp(\n body: string,\n start: number,\n sidecar: Map<string, Sidecar>,\n buckets: Buckets,\n leading: string,\n): number | null {\n const after = start + '$prop '.length\n const nameMatch = /^\\s*([A-Za-z_$][\\w$]*)\\s*:/.exec(body.slice(after))\n if (!nameMatch) return null\n const name = nameMatch[1]!\n let cursor = after + nameMatch[0].length\n const typeStart = cursor\n const typeEnd = scanUntilTopLevel(body, cursor, ['=', '\\n', ';'])\n const rawType = body.slice(typeStart, typeEnd).trim()\n cursor = typeEnd\n let rawDefault: string | undefined\n if (body[cursor] === '=') {\n cursor++\n const defStart = cursor\n const defEnd = scanUntilTopLevel(body, cursor, ['\\n', ';'])\n rawDefault = body.slice(defStart, defEnd).trim()\n cursor = defEnd\n }\n if (body[cursor] === ';' || body[cursor] === '\\n') cursor++\n\n const sc = sidecar.get(name)\n buckets.props.push({\n name,\n rawType: flattenWhitespace(rawType),\n rawDefault: rawDefault !== undefined ? flattenWhitespace(rawDefault) : undefined,\n describe: sc?.describe,\n expose: sc ? sidecarToExpose(sc) : undefined,\n leading,\n })\n return cursor\n}\n\nfunction handleComputed(\n body: string,\n start: number,\n sidecar: Map<string, Sidecar>,\n buckets: Buckets,\n leading: string,\n): number | null {\n const after = start + '$computed '.length\n const nameMatch = /^\\s*([A-Za-z_$][\\w$]*)\\s*=/.exec(body.slice(after))\n if (!nameMatch) return null\n const name = nameMatch[1]!\n let cursor = after + nameMatch[0].length\n const exprStart = cursor\n const exprEnd = scanComputedOrResourceExpr(body, cursor)\n const expr = body.slice(exprStart, exprEnd).trim()\n cursor = exprEnd\n\n const sc = sidecar.get(name)\n buckets.computed.push({\n name,\n expr,\n describe: sc?.describe,\n expose: sc ? sidecarToExpose(sc) : undefined,\n leading,\n })\n return cursor\n}\n\nfunction handleResource(\n body: string,\n start: number,\n sidecar: Map<string, Sidecar>,\n buckets: Buckets,\n leading: string,\n): number | null {\n const after = start + '$resource '.length\n const nameMatch = /^\\s*([A-Za-z_$][\\w$]*)\\s*=/.exec(body.slice(after))\n if (!nameMatch) return null\n const name = nameMatch[1]!\n let cursor = after + nameMatch[0].length\n const exprStart = cursor\n const exprEnd = scanComputedOrResourceExpr(body, cursor)\n const expr = body.slice(exprStart, exprEnd).trim()\n cursor = exprEnd\n\n const sc = sidecar.get(name)\n buckets.resource.push({\n name,\n expr,\n describe: sc?.describe,\n expose: sc ? sidecarToExpose(sc) : undefined,\n leading,\n })\n return cursor\n}\n\nfunction handleAction(\n body: string,\n start: number,\n sidecar: Map<string, Sidecar>,\n buckets: Buckets,\n leading: string,\n): number | null {\n const after = start + '$action '.length\n const nameMatch = /^\\s*([A-Za-z_$][\\w$]*)\\s*\\(/.exec(body.slice(after))\n if (!nameMatch) return null\n const name = nameMatch[1]!\n const parenIdx = after + nameMatch[0].length - 1\n const parenClose = matchParen(body, parenIdx)\n if (parenClose < 0) return null\n const args = body.slice(parenIdx + 1, parenClose).trim()\n let cursor = parenClose + 1\n let retType: string | undefined\n const retStart = cursor\n while (cursor < body.length && body[cursor] !== '{') {\n if (body[cursor] === '\\n') break\n cursor++\n }\n const between = body.slice(retStart, cursor).trim()\n if (between.startsWith(':')) {\n retType = between.slice(1).trim()\n }\n if (body[cursor] !== '{') return null\n const braceClose = matchBrace(body, cursor)\n if (braceClose < 0) return null\n const bodySrc = body.slice(cursor + 1, braceClose)\n cursor = braceClose + 1\n\n const sc = sidecar.get(name)\n buckets.action.push({\n name,\n args,\n retType,\n body: bodySrc,\n describe: sc?.describe,\n expose: sc ? sidecarToExpose(sc) : undefined,\n leading,\n })\n return cursor\n}\n\nfunction handleLifecycle(\n body: string,\n start: number,\n buckets: Buckets,\n leading: string,\n position: number,\n): number | null {\n const trimmedStart = body.slice(start).trim()\n const kind = trimmedStart.startsWith('$lifecycle.mount(') ? 'mount' : 'dispose'\n const parenIdx = body.indexOf('(', start)\n if (parenIdx < 0) return null\n const parenClose = matchParen(body, parenIdx)\n if (parenClose < 0) return null\n const cb = body.slice(parenIdx + 1, parenClose).trim()\n const fn = parseArrowOrFunctionExpr(cb)\n buckets.lifecycle.push({\n kind,\n body: fn ? fn.body : cb,\n leading,\n position,\n })\n let cursor = parenClose + 1\n if (body[cursor] === ';' || body[cursor] === '\\n') cursor++\n return cursor\n}\n\nfunction handleEffectAnon(\n body: string,\n start: number,\n buckets: Buckets,\n leading: string,\n position: number,\n _warnings: string[],\n): number | null {\n const parenIdx = body.indexOf('(', start)\n if (parenIdx < 0) return null\n const parenClose = matchParen(body, parenIdx)\n if (parenClose < 0) return null\n const cb = body.slice(parenIdx + 1, parenClose).trim()\n const fn = parseArrowOrFunctionExpr(cb)\n buckets.effectAnon.push({\n body: fn ? fn.body : cb,\n leading,\n position,\n })\n let cursor = parenClose + 1\n if (body[cursor] === ';' || body[cursor] === '\\n') cursor++\n return cursor\n}\n\nfunction consumePassthroughCall(body: string, start: number): number {\n const parenIdx = body.indexOf('(', start)\n if (parenIdx < 0) {\n const nl = body.indexOf('\\n', start)\n return nl < 0 ? body.length : nl + 1\n }\n const close = matchParen(body, parenIdx)\n if (close < 0) {\n const nl = body.indexOf('\\n', start)\n return nl < 0 ? body.length : nl + 1\n }\n let cursor = close + 1\n if (body[cursor] === ';' || body[cursor] === '\\n') cursor++\n return cursor\n}\n\ninterface PlainDeclParse {\n name: string | undefined\n rawType: string | undefined\n rawDefault: string | undefined\n raw: string\n endIdx: number\n}\n\nfunction tryParsePlainDecl(body: string, start: number): PlainDeclParse | null {\n const m = /^([ \\t]*)([A-Za-z_$][\\w$]*)\\s*:/.exec(body.slice(start))\n if (!m) return null\n const name = m[2]!\n let cursor = start + m[0].length\n const typeStart = cursor\n const typeEnd = scanUntilTopLevel(body, cursor, ['=', '\\n', ';'])\n const rawType = body.slice(typeStart, typeEnd).trim()\n cursor = typeEnd\n let rawDefault: string | undefined\n if (body[cursor] === '=') {\n cursor++\n const defStart = cursor\n const defEnd = scanUntilTopLevel(body, cursor, ['\\n', ';'])\n rawDefault = body.slice(defStart, defEnd).trim()\n cursor = defEnd\n }\n if (body[cursor] === ';') cursor++\n if (body[cursor] === '\\n') cursor++\n return {\n name,\n rawType,\n rawDefault,\n raw: body.slice(start, cursor).replace(/\\n+$/, ''),\n endIdx: cursor,\n }\n}\n\ninterface ParsedFn {\n args: string\n body: string\n retType: string | undefined\n isArrow: boolean\n}\n\nfunction parseArrowOrFunctionExpr(s: string): ParsedFn | null {\n s = s.trim()\n if (s.startsWith('(')) {\n const closeIdx = matchParen(s, 0)\n if (closeIdx < 0) return null\n const args = s.slice(1, closeIdx)\n let cur = closeIdx + 1\n while (cur < s.length && /\\s/.test(s[cur]!)) cur++\n let retType: string | undefined\n if (s[cur] === ':') {\n cur++\n const arrowAt = s.indexOf('=>', cur)\n if (arrowAt < 0) return null\n retType = s.slice(cur, arrowAt).trim()\n cur = arrowAt\n }\n if (s.slice(cur, cur + 2) !== '=>') return null\n cur += 2\n while (cur < s.length && /\\s/.test(s[cur]!)) cur++\n if (s[cur] === '{') {\n const close = matchBrace(s, cur)\n if (close < 0) return null\n return {\n args,\n body: s.slice(cur + 1, close),\n retType,\n isArrow: true,\n }\n }\n return { args, body: ` return ${s.slice(cur).trim()} `, retType, isArrow: true }\n }\n const fnMatch = /^function\\s*(?:[A-Za-z_$][\\w$]*)?\\s*\\(/.exec(s)\n if (fnMatch) {\n const parenIdx = fnMatch[0].length - 1\n const parenClose = matchParen(s, parenIdx)\n if (parenClose < 0) return null\n const args = s.slice(parenIdx + 1, parenClose)\n let cur = parenClose + 1\n while (cur < s.length && /\\s/.test(s[cur]!)) cur++\n let retType: string | undefined\n if (s[cur] === ':') {\n cur++\n const braceAt = s.indexOf('{', cur)\n if (braceAt < 0) return null\n retType = s.slice(cur, braceAt).trim()\n cur = braceAt\n }\n if (s[cur] !== '{') return null\n const close = matchBrace(s, cur)\n if (close < 0) return null\n return {\n args,\n body: s.slice(cur + 1, close),\n retType,\n isArrow: false,\n }\n }\n return null\n}\n\nfunction scanUntilTopLevel(s: string, start: number, stops: readonly string[]): number {\n let j = start\n while (j < s.length) {\n const c = s[j]!\n if (c === '/' && s[j + 1] === '/') {\n const nl = s.indexOf('\\n', j)\n if (stops.includes('\\n')) return nl < 0 ? s.length : nl\n j = nl < 0 ? s.length : nl + 1\n continue\n }\n if (c === '/' && s[j + 1] === '*') {\n const end = s.indexOf('*/', j + 2)\n j = end < 0 ? s.length : end + 2\n continue\n }\n if (c === '\"' || c === \"'\" || c === '`') {\n j = skipString(s, j)\n continue\n }\n if (c === '{') {\n const close = matchBrace(s, j)\n j = close < 0 ? s.length : close + 1\n continue\n }\n if (c === '(') {\n const close = matchParen(s, j)\n j = close < 0 ? s.length : close + 1\n continue\n }\n if (c === '<') {\n const close = scanGeneric(s, j)\n if (close > j) {\n j = close\n continue\n }\n }\n if (stops.includes(c)) return j\n j++\n }\n return s.length\n}\n\nfunction scanGeneric(s: string, start: number): number {\n if (s[start] !== '<') return start\n let depth = 0\n let j = start\n while (j < s.length) {\n const c = s[j]!\n if (c === '<') depth++\n else if (c === '>') {\n depth--\n if (depth === 0) return j + 1\n } else if (c === '\\n') {\n return start\n } else if (c === '(' || c === '{') {\n return start\n } else if (c === '=' || c === ';') {\n return start\n }\n j++\n }\n return start\n}\n\nfunction scanComputedOrResourceExpr(body: string, start: number): number {\n const lineStart = body.lastIndexOf('\\n', start - 1) + 1\n const startLineIndent = countIndent(body, lineStart)\n let j = start\n const lineEnd = body.indexOf('\\n', j)\n if (lineEnd < 0) return body.length\n j = lineEnd + 1\n while (j < body.length) {\n const nextLineEnd = body.indexOf('\\n', j)\n const lineEndIdx = nextLineEnd < 0 ? body.length : nextLineEnd\n const line = body.slice(j, lineEndIdx)\n const trimmed = line.trim()\n if (trimmed === '') {\n return j\n }\n const indent = countIndent(body, j)\n if (\n indent > startLineIndent ||\n (indent === startLineIndent &&\n /^[?:&|+\\-*/<>=,.[\\](){}]/.test(trimmed) &&\n !trimmed.startsWith('//'))\n ) {\n j = nextLineEnd < 0 ? body.length : nextLineEnd + 1\n continue\n }\n return j\n }\n return j\n}\n\nfunction countIndent(body: string, lineStart: number): number {\n let n = 0\n while (lineStart + n < body.length) {\n const c = body[lineStart + n]\n if (c === ' ' || c === '\\t') n++\n else break\n }\n return n\n}\n\n// Emit\n\nfunction emitStateBody(buckets: Buckets): string {\n const out: string[] = []\n const imports = buckets.passthrough.filter((p) => p.raw.startsWith('import '))\n const otherPassthrough = buckets.passthrough.filter((p) => !p.raw.startsWith('import '))\n\n for (const imp of imports) {\n if (imp.leading.trim()) out.push(rstrip(imp.leading))\n out.push(`${INDENT}${imp.raw}`)\n }\n if (imports.length > 0) out.push('')\n\n if (buckets.props.length > 0) {\n pushBlock(out, emitProps(buckets.props))\n }\n\n for (const p of buckets.plain) {\n if (p.leading.trim()) out.push(rstrip(p.leading))\n // raw already includes the original leading indent of the outer line.\n // Don't re-indent — but normalize so the outer line is at INDENT (2 spaces).\n out.push(rebaseLeadingIndent(p.raw, INDENT))\n out.push('')\n }\n trimTrailingBlanks(out)\n\n if (buckets.computed.length > 0) {\n pushBlock(out, emitComputed(buckets.computed))\n }\n\n if (buckets.action.length > 0) {\n pushBlock(out, emitAction(buckets.action))\n }\n\n if (buckets.resource.length > 0) {\n pushBlock(out, emitResource(buckets.resource))\n }\n\n if (buckets.effectNamed.length > 0) {\n pushBlock(out, emitEffectNamed(buckets.effectNamed))\n }\n\n if (buckets.lifecycle.length > 0) {\n pushBlock(out, emitLifecycle(buckets.lifecycle))\n }\n\n if (buckets.effectAnon.length > 0) {\n pushBlock(out, emitEffectAnon(buckets.effectAnon))\n }\n\n for (const p of otherPassthrough) {\n if (p.leading.trim()) out.push(rstrip(p.leading))\n if (p.raw.includes('\\n')) {\n out.push(rebaseLeadingIndent(p.raw, INDENT))\n } else {\n out.push(`${INDENT}${p.raw}`)\n }\n out.push('')\n }\n trimTrailingBlanks(out)\n\n return out.join('\\n')\n}\n\nfunction pushBlock(out: string[], block: string): void {\n if (out.length > 0 && out[out.length - 1] !== '') out.push('')\n out.push(block)\n out.push('')\n}\n\nfunction trimTrailingBlanks(out: string[]): void {\n while (out.length > 0 && out[out.length - 1] === '') out.pop()\n}\n\nfunction emitProps(entries: PropEntry[]): string {\n const lines: string[] = []\n const firstLeading = entries[0]?.leading\n const headerLeading = firstLeading?.trim() ? firstLeading : ''\n const inner: string[] = []\n for (const [idx, e] of entries.entries()) {\n if (idx > 0 && e.leading.trim()) {\n inner.push(rstrip(indentBlock(e.leading, `${INDENT}${INDENT}`)))\n }\n inner.push(formatPropEntry(e))\n }\n if (headerLeading) lines.push(rstrip(headerLeading))\n lines.push(`${INDENT}$prop: {`)\n lines.push(...inner)\n lines.push(`${INDENT}}`)\n return lines.join('\\n')\n}\n\nfunction formatPropEntry(e: PropEntry): string {\n const keys: { k: string; v: string }[] = []\n const needsType = shouldKeepType(e.rawType, e.rawDefault)\n if (needsType && e.rawType) keys.push({ k: 'type', v: e.rawType })\n if (e.rawDefault !== undefined) keys.push({ k: 'default', v: e.rawDefault })\n if (e.describe) keys.push({ k: 'describe', v: quoteSingle(e.describe) })\n if (e.expose) keys.push({ k: 'expose', v: formatExpose(e.expose) })\n\n const inline = `${e.name}: { ${keys.map(({ k, v }) => `${k}: ${v}`).join(', ')} }`\n const baseIndent = INDENT.length * 2\n const linePrefix = ' '.repeat(baseIndent)\n if (keys.length <= 3 && baseIndent + inline.length + 1 <= 100) {\n return `${linePrefix}${inline},`\n }\n const lines: string[] = [`${linePrefix}${e.name}: {`]\n const inner = ' '.repeat(baseIndent + INDENT.length)\n for (const { k, v } of keys) {\n lines.push(`${inner}${k}: ${v},`)\n }\n lines.push(`${linePrefix}},`)\n return lines.join('\\n')\n}\n\nfunction shouldKeepType(rawType: string | undefined, rawDefault: string | undefined): boolean {\n if (!rawType) return false\n if (rawDefault === undefined) return true\n const trimmed = rawDefault.trim()\n if (trimmed === 'null' || trimmed === 'undefined') return true\n if (trimmed === '[]') return true\n if (trimmed === '{}') return true\n if (/^['\"`]/.test(trimmed) && rawType.includes('|')) return true\n if (/[<>{}]/.test(rawType)) {\n if (/^[0-9.+-]/.test(trimmed) || trimmed === 'true' || trimmed === 'false') return true\n if (/^['\"`]/.test(trimmed)) return true\n return true\n }\n return false\n}\n\nfunction emitComputed(entries: ValueEntry[]): string {\n return emitValueCollection('$computed', entries)\n}\n\nfunction emitResource(entries: ValueEntry[]): string {\n return emitValueCollection('$resource', entries)\n}\n\nfunction emitEffectNamed(entries: ValueEntry[]): string {\n return emitValueCollection('$effect', entries)\n}\n\nfunction emitValueCollection(macro: string, entries: ValueEntry[]): string {\n const firstLeading = entries[0]?.leading\n const headerLeading = firstLeading?.trim() ? firstLeading : ''\n const inner: string[] = []\n for (const [idx, e] of entries.entries()) {\n if (idx > 0 && e.leading.trim()) {\n inner.push(rstrip(indentBlock(e.leading, `${INDENT}${INDENT}`)))\n }\n inner.push(formatValueEntry(e))\n }\n const lines: string[] = []\n if (headerLeading) lines.push(rstrip(headerLeading))\n lines.push(`${INDENT}${macro}: {`)\n lines.push(...inner)\n lines.push(`${INDENT}}`)\n return lines.join('\\n')\n}\n\nfunction formatValueEntry(e: ValueEntry): string {\n const baseIndent = INDENT.length * 2\n const linePrefix = ' '.repeat(baseIndent)\n if (!e.describe && !e.expose) {\n if (!e.expr.includes('\\n')) {\n const inline = `${linePrefix}${e.name}: () => ${e.expr},`\n if (inline.length <= 100) return inline\n }\n const indented = reindentExpr(e.expr, baseIndent + INDENT.length)\n return `${linePrefix}${e.name}: () => ${indented},`\n }\n const keys: { k: string; v: string }[] = []\n if (e.describe) keys.push({ k: 'describe', v: quoteSingle(e.describe) })\n if (e.expose) keys.push({ k: 'expose', v: formatExpose(e.expose) })\n const valueExpr = e.expr.includes('\\n')\n ? `() => ${reindentExpr(e.expr, baseIndent + INDENT.length * 2)}`\n : `() => ${e.expr}`\n keys.push({ k: 'value', v: valueExpr })\n\n const lines: string[] = [`${linePrefix}${e.name}: {`]\n const inner = ' '.repeat(baseIndent + INDENT.length)\n for (const { k, v } of keys) {\n lines.push(`${inner}${k}: ${v},`)\n }\n lines.push(`${linePrefix}},`)\n return lines.join('\\n')\n}\n\nfunction emitAction(entries: FunctionishEntry[]): string {\n const firstLeading = entries[0]?.leading\n const headerLeading = firstLeading?.trim() ? firstLeading : ''\n const inner: string[] = []\n for (const [idx, e] of entries.entries()) {\n if (idx > 0 && e.leading.trim()) {\n inner.push(rstrip(indentBlock(e.leading, `${INDENT}${INDENT}`)))\n }\n inner.push(formatActionEntry(e))\n }\n const lines: string[] = []\n if (headerLeading) lines.push(rstrip(headerLeading))\n lines.push(`${INDENT}$action: {`)\n lines.push(...inner)\n lines.push(`${INDENT}}`)\n return lines.join('\\n')\n}\n\nfunction formatActionEntry(e: FunctionishEntry): string {\n const ret = e.retType ? `: ${e.retType}` : ''\n const arrow = `(${e.args})${ret} => `\n const baseIndent = INDENT.length * 2\n const linePrefix = ' '.repeat(baseIndent)\n if (e.describe || e.expose) {\n const keys: { k: string; v: string }[] = []\n if (e.describe) keys.push({ k: 'describe', v: quoteSingle(e.describe) })\n if (e.expose) keys.push({ k: 'expose', v: formatExpose(e.expose) })\n const bodyIndented = reindentBlockBody(e.body, baseIndent + INDENT.length * 2)\n keys.push({ k: 'handler', v: `${arrow}{${bodyIndented}}` })\n const lines: string[] = [`${linePrefix}${e.name}: {`]\n const inner = ' '.repeat(baseIndent + INDENT.length)\n for (const { k, v } of keys) {\n lines.push(`${inner}${k}: ${v},`)\n }\n lines.push(`${linePrefix}},`)\n return lines.join('\\n')\n }\n const bodyIndented = reindentBlockBody(e.body, baseIndent + INDENT.length)\n return `${linePrefix}${e.name}: ${arrow}{${bodyIndented}},`\n}\n\nfunction emitLifecycle(hooks: LifecycleHook[]): string {\n const firstLeading = hooks[0]?.leading\n const headerLeading = firstLeading?.trim() ? firstLeading : ''\n const inner: string[] = []\n const baseIndent = INDENT.length * 2\n const linePrefix = ' '.repeat(baseIndent)\n for (const [idx, h] of hooks.entries()) {\n if (idx > 0 && h.leading.trim()) {\n inner.push(rstrip(indentBlock(h.leading, linePrefix)))\n }\n const bodyIndented = reindentBlockBody(h.body, baseIndent + INDENT.length)\n inner.push(`${linePrefix}${h.kind}: () => {${bodyIndented}},`)\n }\n const lines: string[] = []\n if (headerLeading) lines.push(rstrip(headerLeading))\n lines.push(`${INDENT}$lifecycle: {`)\n lines.push(...inner)\n lines.push(`${INDENT}}`)\n return lines.join('\\n')\n}\n\nfunction emitEffectAnon(effects: AnonEffect[]): string {\n const out: string[] = []\n const baseIndent = INDENT.length\n const linePrefix = ' '.repeat(baseIndent)\n for (const [idx, e] of effects.entries()) {\n if (idx > 0) out.push('')\n if (e.leading.trim()) out.push(rstrip(e.leading))\n const bodyIndented = reindentBlockBody(e.body, baseIndent + INDENT.length)\n out.push(`${linePrefix}$effect: () => {${bodyIndented}}`)\n }\n return out.join('\\n')\n}\n\nfunction formatExpose(e: { read: boolean; write: boolean }): string {\n const parts: string[] = []\n if (e.read) parts.push('read: true')\n if (e.write) parts.push('write: true')\n return `{ ${parts.join(', ')} }`\n}\n\nfunction quoteSingle(s: string): string {\n return `'${s.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`\n}\n\n// Whitespace helpers\n\nfunction rstrip(s: string): string {\n return s\n .replace(/[ \\t]+(\\n|$)/g, '$1')\n .replace(/^\\n+/, '')\n .replace(/\\n+$/g, '')\n}\n\nfunction rebaseLeadingIndent(s: string, indent: string): string {\n const lines = s.split('\\n')\n const first = lines[0] ?? ''\n // determine first-line indent\n let n = 0\n while (n < first.length && (first[n] === ' ' || first[n] === '\\t')) n++\n if (n === 0) {\n return [indent + first, ...lines.slice(1)].join('\\n')\n }\n // Strip n chars from each line that has at least n leading WS, prepend indent\n const rebased = lines.map((line) => {\n if (line.length === 0) return line\n let m = 0\n while (m < line.length && m < n && (line[m] === ' ' || line[m] === '\\t')) m++\n return indent + line.slice(m)\n })\n return rebased.join('\\n')\n}\n\nfunction indentBlock(s: string, indent: string): string {\n return s\n .split('\\n')\n .map((line) => (line.length > 0 ? indent + line : line))\n .join('\\n')\n}\n\nfunction flattenWhitespace(s: string): string {\n return s.replace(/\\s+/g, ' ').trim()\n}\n\nfunction reindentBlockBody(bodyText: string, targetInner: number): string {\n const lines = bodyText.split('\\n')\n let firstReal = 0\n while (firstReal < lines.length && lines[firstReal]!.trim() === '') firstReal++\n let lastReal = lines.length - 1\n while (lastReal >= 0 && lines[lastReal]!.trim() === '') lastReal--\n if (firstReal > lastReal) {\n return ''\n }\n let minIndent = Infinity\n for (let k = firstReal; k <= lastReal; k++) {\n const line = lines[k]!\n if (line.trim() === '') continue\n let n = 0\n while (n < line.length && (line[n] === ' ' || line[n] === '\\t')) n++\n if (n < minIndent) minIndent = n\n }\n if (!Number.isFinite(minIndent)) minIndent = 0\n const rebased: string[] = ['']\n const targetSpaces = ' '.repeat(targetInner)\n for (let k = firstReal; k <= lastReal; k++) {\n const line = lines[k]!\n if (line.trim() === '') {\n rebased.push('')\n continue\n }\n rebased.push((targetSpaces + line.slice(minIndent)).replace(/[ \\t]+$/, ''))\n }\n rebased.push(' '.repeat(Math.max(targetInner - INDENT.length, 0)))\n return rebased.join('\\n')\n}\n\nfunction reindentExpr(expr: string, targetInner: number): string {\n const lines = expr.split('\\n')\n if (lines.length === 1) return expr\n const firstLine = lines[0]!\n const rest = lines.slice(1)\n let minIndent = Infinity\n for (const line of rest) {\n if (line.trim() === '') continue\n let n = 0\n while (n < line.length && (line[n] === ' ' || line[n] === '\\t')) n++\n if (n < minIndent) minIndent = n\n }\n if (!Number.isFinite(minIndent)) minIndent = 0\n const targetSpaces = ' '.repeat(targetInner)\n const rebasedRest = rest.map((line) =>\n line.trim() === '' ? '' : targetSpaces + line.slice(minIndent),\n )\n return [firstLine, ...rebasedRest].join('\\n')\n}\n\nfunction expandLeftToLineStart(s: string, idx: number): number {\n let j = idx\n while (j > 0 && s[j - 1] !== '\\n') j--\n if (j > 0 && s[j - 1] === '\\n') {\n let k = j - 1\n while (k > 0 && (s[k - 1] === ' ' || s[k - 1] === '\\t')) k--\n if (k > 0 && s[k - 1] === '\\n') j = k\n }\n return j\n}\n\nfunction expandRightThroughBlankLines(s: string, idx: number): number {\n let j = idx\n while (j < s.length && (s[j] === ' ' || s[j] === '\\t')) j++\n if (s[j] === '\\n') j++\n while (j < s.length) {\n let k = j\n while (k < s.length && (s[k] === ' ' || s[k] === '\\t')) k++\n if (s[k] === '\\n') {\n j = k + 1\n continue\n }\n break\n }\n return j\n}\n\n// v2 collection-form re-parser - idempotency path\n// Recognizes `$<macro>: { <entries> }` for prop/computed/action/resource/\n// effect/lifecycle, splits the inner object literal at top-level commas, and\n// re-buckets each entry. Returns the cursor past the closing `}` (and any\n// trailing `;`/`\\n`), or null if the line is not a v2 collection.\nfunction tryParseV2Collection(\n body: string,\n start: number,\n sidecar: Map<string, Sidecar>,\n buckets: Buckets,\n leading: string,\n nextPosition: () => number,\n): number | null {\n const m = /^\\$(prop|computed|action|resource|effect|lifecycle)\\s*:\\s*\\{/.exec(body.slice(start))\n if (!m) return null\n const macro = m[1]!\n const braceIdx = start + m[0].length - 1\n const closeIdx = matchBrace(body, braceIdx)\n if (closeIdx < 0) return null\n const inner = body.slice(braceIdx + 1, closeIdx)\n const entries = splitTopLevelEntries(inner)\n let outerLeadingConsumed = false\n for (const e of entries) {\n const parsed = parseV2Entry(e.text)\n if (!parsed) continue\n // Outer block's leading (comments above `$<macro>: {`) attaches to the\n // first parseable entry. Subsequent entries take their own piece-leading\n // only when it carries non-whitespace content (e.g., a comment block).\n let entryLeading: string\n if (!outerLeadingConsumed) {\n entryLeading = e.leading.trim() ? e.leading : leading\n outerLeadingConsumed = true\n } else {\n entryLeading = e.leading.trim() ? e.leading : ''\n }\n routeV2Entry(macro, parsed, sidecar, buckets, entryLeading, nextPosition)\n }\n let cursor = closeIdx + 1\n if (body[cursor] === ';') cursor++\n if (body[cursor] === '\\n') cursor++\n return cursor\n}\n\n// v2 anonymous-effect re-parser - `$effect: () => { ... }`.\nfunction tryParseV2AnonEffect(\n body: string,\n start: number,\n buckets: Buckets,\n leading: string,\n position: number,\n): number | null {\n const colonIdx = body.indexOf(':', start)\n if (colonIdx < 0) return null\n let cursor = colonIdx + 1\n while (cursor < body.length && /[ \\t]/.test(body[cursor]!)) cursor++\n // Allow `async` prefix.\n if (body.slice(cursor, cursor + 5) === 'async') cursor += 5\n while (cursor < body.length && /[ \\t]/.test(body[cursor]!)) cursor++\n if (body[cursor] !== '(') return null\n const exprStart = cursor\n // Consume the rest of the line up to the matching brace (or end of expr).\n // Simplest: parse the arrow expression by finding `=>` and then the body.\n const fn = parseArrowOrFunctionExpr(body.slice(exprStart))\n if (!fn) return null\n // Compute end position: scan from exprStart forward consuming the arrow body.\n // parseArrowOrFunctionExpr reports a body but not the end offset; recompute\n // by counting through the same structure here.\n const closeIdx = scanArrowExprEnd(body, exprStart)\n if (closeIdx < 0) return null\n buckets.effectAnon.push({ body: fn.body, leading, position })\n let c = closeIdx\n if (body[c] === ';') c++\n if (body[c] === '\\n') c++\n return c\n}\n\n// Helper: scan past an arrow-function expression starting at `(`, return idx\n// just past the closing brace (or end-of-expr).\nfunction scanArrowExprEnd(s: string, start: number): number {\n if (s[start] !== '(') return -1\n const parenClose = matchParen(s, start)\n if (parenClose < 0) return -1\n let cur = parenClose + 1\n while (cur < s.length && /[ \\t]/.test(s[cur]!)) cur++\n if (s[cur] === ':') {\n cur++\n const arrowAt = s.indexOf('=>', cur)\n if (arrowAt < 0) return -1\n cur = arrowAt\n }\n if (s.slice(cur, cur + 2) !== '=>') return -1\n cur += 2\n while (cur < s.length && /[ \\t\\n]/.test(s[cur]!)) cur++\n if (s[cur] === '{') {\n const close = matchBrace(s, cur)\n if (close < 0) return -1\n return close + 1\n }\n // expression-bodied arrow: read to end of line\n const nl = s.indexOf('\\n', cur)\n return nl < 0 ? s.length : nl\n}\n\n// Split the inner of `{ ... }` at top-level commas. Each piece keeps its\n// original whitespace but is trimmed on the boundaries.\ninterface SplitEntry {\n text: string\n leading: string\n}\nfunction splitTopLevelEntries(inner: string): SplitEntry[] {\n const out: SplitEntry[] = []\n let depthBrace = 0\n let depthParen = 0\n let depthBracket = 0\n let start = 0\n let j = 0\n while (j < inner.length) {\n const c = inner[j]!\n if (c === '/' && inner[j + 1] === '/') {\n const nl = inner.indexOf('\\n', j)\n j = nl < 0 ? inner.length : nl\n continue\n }\n if (c === '/' && inner[j + 1] === '*') {\n const end = inner.indexOf('*/', j + 2)\n j = end < 0 ? inner.length : end + 2\n continue\n }\n if (c === '\"' || c === \"'\" || c === '`') {\n j = skipString(inner, j)\n continue\n }\n if (c === '{') depthBrace++\n else if (c === '}') depthBrace--\n else if (c === '(') depthParen++\n else if (c === ')') depthParen--\n else if (c === '[') depthBracket++\n else if (c === ']') depthBracket--\n else if (c === ',' && depthBrace === 0 && depthParen === 0 && depthBracket === 0) {\n const piece = inner.slice(start, j)\n pushSplitEntry(out, piece)\n start = j + 1\n }\n j++\n }\n if (start < inner.length) {\n const piece = inner.slice(start)\n pushSplitEntry(out, piece)\n }\n return out\n}\n\nfunction pushSplitEntry(out: SplitEntry[], piece: string): void {\n // Separate leading whitespace/comments from the entry body.\n let head = ''\n let i = 0\n while (i < piece.length) {\n const lineEnd = piece.indexOf('\\n', i)\n const end = lineEnd < 0 ? piece.length : lineEnd\n const line = piece.slice(i, end)\n if (line.trim() === '' || line.trim().startsWith('//') || line.trim().startsWith('/*')) {\n head += `${line}\\n`\n i = end + 1\n if (lineEnd < 0) break\n continue\n }\n break\n }\n const text = piece.slice(i).trim()\n if (text === '') return\n out.push({ text, leading: head })\n}\n\ninterface ParsedV2Entry {\n name: string\n // Either a bare RHS (e.g. arrow function or expression) or a wrapped `{...}` body.\n rhs: string\n isWrapped: boolean\n}\n\nfunction parseV2Entry(text: string): ParsedV2Entry | null {\n const m = /^([A-Za-z_$][\\w$]*)\\s*:\\s*/.exec(text)\n if (!m) return null\n const name = m[1]!\n const rest = text.slice(m[0].length).trim()\n if (rest.startsWith('{')) {\n // Could be either a wrapped metadata-bag OR a JS object expression that's\n // itself the value (rare in v2, e.g. a `$prop` `default: {}`). For our\n // collection-form, the wrapped form is `{ describe?, expose?, value? | handler? | type?, default? }`.\n const close = matchBrace(rest, 0)\n if (close < 0) return null\n const body = rest.slice(1, close).trim()\n return { name, rhs: body, isWrapped: true }\n }\n return { name, rhs: rest, isWrapped: false }\n}\n\n// Parse the inside of a wrapped object `{ describe: ..., expose: ..., value: ..., handler: ..., default: ..., type: ... }`.\ninterface WrappedFields {\n describe?: string\n expose?: { read: boolean; write: boolean }\n value?: string\n handler?: string\n default?: string\n type?: string\n on?: string\n}\nfunction parseWrappedFields(body: string): WrappedFields {\n const out: WrappedFields = {}\n const entries = splitTopLevelEntries(body)\n for (const e of entries) {\n const m = /^([A-Za-z_$][\\w$]*)\\s*:\\s*/.exec(e.text)\n if (!m) continue\n const k = m[1]!\n const v = e.text.slice(m[0].length).trim()\n if (k === 'describe') out.describe = unquoteString(v)\n else if (k === 'expose') {\n const parsed = parseExposeLiteral(v)\n if (parsed) out.expose = parsed\n } else if (k === 'value') out.value = v\n else if (k === 'handler') out.handler = v\n else if (k === 'default') out.default = v\n else if (k === 'type') out.type = v\n else if (k === 'on') out.on = v\n }\n return out\n}\n\nfunction unquoteString(s: string): string {\n s = s.trim()\n if ((s.startsWith(\"'\") && s.endsWith(\"'\")) || (s.startsWith('\"') && s.endsWith('\"'))) {\n return s.slice(1, -1).replace(/\\\\'/g, \"'\").replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\')\n }\n return s\n}\n\nfunction parseExposeLiteral(s: string): { read: boolean; write: boolean } | undefined {\n s = s.trim()\n if (!s.startsWith('{')) return undefined\n const close = matchBrace(s, 0)\n if (close < 0) return undefined\n const body = s.slice(1, close)\n const read = /\\bread\\s*:\\s*true\\b/.test(body)\n const write = /\\bwrite\\s*:\\s*true\\b/.test(body)\n return { read, write }\n}\n\nfunction routeV2Entry(\n macro: string,\n entry: ParsedV2Entry,\n _sidecar: Map<string, Sidecar>,\n buckets: Buckets,\n leading: string,\n nextPosition: () => number,\n): void {\n if (macro === 'prop') {\n if (entry.isWrapped) {\n const f = parseWrappedFields(entry.rhs)\n buckets.props.push({\n name: entry.name,\n rawType: f.type,\n rawDefault: f.default,\n describe: f.describe,\n expose: f.expose,\n leading,\n })\n }\n return\n }\n if (macro === 'computed' || macro === 'resource') {\n let expr: string\n let describe: string | undefined\n let expose: { read: boolean; write: boolean } | undefined\n if (entry.isWrapped) {\n const f = parseWrappedFields(entry.rhs)\n expr = stripThunk(f.value ?? '')\n describe = f.describe\n expose = f.expose\n } else {\n expr = stripThunk(entry.rhs)\n }\n const target = macro === 'computed' ? buckets.computed : buckets.resource\n target.push({ name: entry.name, expr, describe, expose, leading })\n return\n }\n if (macro === 'action') {\n let handlerSrc: string\n let describe: string | undefined\n let expose: { read: boolean; write: boolean } | undefined\n if (entry.isWrapped) {\n const f = parseWrappedFields(entry.rhs)\n handlerSrc = f.handler ?? ''\n describe = f.describe\n expose = f.expose\n } else {\n handlerSrc = entry.rhs\n }\n const fn = parseArrowOrFunctionExpr(handlerSrc)\n if (!fn) return\n buckets.action.push({\n name: entry.name,\n args: fn.args,\n retType: fn.retType,\n body: fn.body,\n describe,\n expose,\n leading,\n })\n return\n }\n if (macro === 'effect') {\n let expr: string\n let describe: string | undefined\n let expose: { read: boolean; write: boolean } | undefined\n if (entry.isWrapped) {\n const f = parseWrappedFields(entry.rhs)\n expr = stripThunk(f.value ?? '')\n describe = f.describe\n expose = f.expose\n } else {\n expr = stripThunk(entry.rhs)\n }\n buckets.effectNamed.push({ name: entry.name, expr, describe, expose, leading })\n return\n }\n if (macro === 'lifecycle') {\n if (entry.name !== 'mount' && entry.name !== 'dispose') return\n const src = entry.isWrapped ? entry.rhs : entry.rhs\n const fn = parseArrowOrFunctionExpr(src)\n if (!fn) return\n buckets.lifecycle.push({\n kind: entry.name,\n body: fn.body,\n leading,\n position: nextPosition(),\n })\n return\n }\n}\n\n// Strip a leading `() =>` from a thunk if present, returning the inner expr.\n// For wrapped `value: () => expr`, we want to round-trip the bare arrow form\n// so re-emit produces `name: () => expr` identically.\nfunction stripThunk(s: string): string {\n s = s.trim()\n const m = /^\\(\\s*\\)\\s*(?::\\s*[^=]+)?=>\\s*/.exec(s)\n if (!m) return s\n const rest = s.slice(m[0].length)\n if (rest.startsWith('{')) {\n const close = matchBrace(rest, 0)\n if (close < 0) return rest\n return rest.slice(1, close).trim()\n }\n return rest.trim()\n}\n","/**\n * packages/language-server/src/core/code-action.ts\n *\n * QuickFix code-action backing — bridges compiler diagnostic codes C440-C444\n * (rejected old-spec macro forms) to the macro-simplification codemod\n * (`migrate()`), which rewrites a full document to v2 collection-form syntax.\n *\n * Editor-agnostic: this module computes WHAT the fix is (the rewritten text +\n * any warnings). The connection layer (src/server.ts) turns that into a protocol\n * `WorkspaceEdit`/`CodeAction`. This keeps the codemod bridge a clean seam for a\n * future Volar code-action provider.\n *\n * The migrate() codemod is internal monorepo source under @aihu/compiler (not a\n * public package export); imported via the workspace-relative path the same way\n * the original embedded server did.\n */\nimport { migrate } from '../../../compiler/js/codemods/macro-simplification/migrate.ts'\n\n/** Compiler diagnostic codes whose QuickFix is the v2 macro migration codemod. */\nexport const MIGRATE_CODES = new Set(['C440', 'C441', 'C442', 'C443', 'C444'])\n\nexport interface MigrateFix {\n /** The full-document rewritten source. */\n rewritten: string\n /** Codemod warnings (e.g. @agent referencing unknown @state name). */\n warnings: readonly string[]\n /** Human-readable action title (includes warning count when non-zero). */\n title: string\n}\n\n/**\n * Run the macro-simplification codemod over `source` and return the fix payload.\n * Returns `null` when the codemod throws (malformed source) so callers can fall\n * back to offering no action rather than surfacing a crash.\n */\nexport function buildMigrateFix(source: string): MigrateFix | null {\n let result: ReturnType<typeof migrate>\n try {\n result = migrate(source)\n } catch {\n return null\n }\n const { rewritten, warnings } = result\n let title = 'Migrate to v2 macro syntax (aihu codemod)'\n if (warnings.length > 0) {\n title += ` (${warnings.length} warning(s) - see Output panel)`\n }\n return { rewritten, warnings, title }\n}\n","/**\n * packages/language-server/src/core/completion.ts\n *\n * LSP completion items for aihu v2 macro-kind collection-form snippets.\n * Triggered by '$' inside @state block, '@' at top level.\n *\n * Uses inline numeric constants for CompletionItemKind and InsertTextFormat\n * to avoid importing vscode-languageserver at module load time (enables testing\n * without the vscode-languageserver package installed, and keeps this module\n * editor-agnostic — the clean seam for a future Volar adoption).\n */\n\n// CompletionItemKind.Snippet = 15, InsertTextFormat.Snippet = 2\nconst SNIPPET_KIND = 15\nconst SNIPPET_FORMAT = 2\n\nexport interface LspCompletionItem {\n label: string\n kind: number\n insertTextFormat: number\n detail: string\n sortText: string\n insertText: string\n}\n\n/** v2 macro-kind snippet completions (triggered by '$' in @state block). */\nexport const STATE_MACRO_COMPLETIONS: LspCompletionItem[] = [\n {\n label: '$prop',\n kind: SNIPPET_KIND,\n insertTextFormat: SNIPPET_FORMAT,\n detail: 'v2 collection-form prop declarations',\n sortText: '0_$prop',\n insertText: [\n '$prop: {',\n \" ${1:name}: { default: ${2:undefined}, describe: '${3:description}' },\",\n '}',\n ].join('\\n'),\n },\n {\n label: '$computed',\n kind: SNIPPET_KIND,\n insertTextFormat: SNIPPET_FORMAT,\n detail: 'v2 collection-form computed declarations',\n sortText: '0_$computed',\n insertText: ['$computed: {', ' ${1:name}: () => ${2:expression},', '}'].join('\\n'),\n },\n {\n label: '$action',\n kind: SNIPPET_KIND,\n insertTextFormat: SNIPPET_FORMAT,\n detail: 'v2 collection-form action declarations',\n sortText: '0_$action',\n insertText: ['$action: {', ' ${1:name}: (${2:args}) => { ${3:body} },', '}'].join('\\n'),\n },\n {\n label: '$resource',\n kind: SNIPPET_KIND,\n insertTextFormat: SNIPPET_FORMAT,\n detail: 'v2 collection-form resource declarations',\n sortText: '0_$resource',\n insertText: ['$resource: {', ' ${1:name}: () => ${2:fetchExpr()},', '}'].join('\\n'),\n },\n {\n label: '$effect',\n kind: SNIPPET_KIND,\n insertTextFormat: SNIPPET_FORMAT,\n detail: 'v2 anonymous effect declaration',\n sortText: '0_$effect',\n insertText: ['$effect: () => {', ' ${1:body}', '}'].join('\\n'),\n },\n {\n label: '$lifecycle',\n kind: SNIPPET_KIND,\n insertTextFormat: SNIPPET_FORMAT,\n detail: 'v2 collection-form lifecycle hooks',\n sortText: '0_$lifecycle',\n insertText: [\n '$lifecycle: {',\n ' mount: () => { ${1:initBody} },',\n ' dispose: () => { ${2:cleanupBody} },',\n '}',\n ].join('\\n'),\n },\n {\n label: '$emit',\n kind: SNIPPET_KIND,\n insertTextFormat: SNIPPET_FORMAT,\n detail: 'typed custom event declarations',\n sortText: '0_$emit',\n insertText: ['$emit: {', ' ${1:eventName}: (payload: ${2:PayloadType}) => void', '}'].join(\n '\\n',\n ),\n },\n {\n label: '$on',\n kind: SNIPPET_KIND,\n insertTextFormat: SNIPPET_FORMAT,\n detail: 'event listener attribute (template)',\n sortText: '0_$on',\n insertText: '$on.${1:click}={${2:handler}}',\n },\n {\n label: '$bind',\n kind: SNIPPET_KIND,\n insertTextFormat: SNIPPET_FORMAT,\n detail: 'two-way attribute binding (template)',\n sortText: '0_$bind',\n insertText: '$bind.${1:value}={${2:signal}}',\n },\n]\n\n/** Top-level block completions (triggered by '@' at top level). */\nexport const BLOCK_COMPLETIONS: LspCompletionItem[] = [\n {\n label: '@state',\n kind: SNIPPET_KIND,\n insertTextFormat: SNIPPET_FORMAT,\n detail: 'aihu @state block',\n sortText: '0_@state',\n insertText: '@state',\n },\n {\n label: '@template',\n kind: SNIPPET_KIND,\n insertTextFormat: SNIPPET_FORMAT,\n detail: 'aihu @template block',\n sortText: '0_@template',\n insertText: '@template',\n },\n {\n label: '@style',\n kind: SNIPPET_KIND,\n insertTextFormat: SNIPPET_FORMAT,\n detail: 'aihu @style block',\n sortText: '0_@style',\n insertText: '@style',\n },\n {\n label: '@agent',\n kind: SNIPPET_KIND,\n insertTextFormat: SNIPPET_FORMAT,\n detail: 'aihu @agent block for MCP tool exposure',\n sortText: '0_@agent',\n insertText: '@agent',\n },\n {\n label: '@route',\n kind: SNIPPET_KIND,\n insertTextFormat: SNIPPET_FORMAT,\n detail: 'aihu @route block for file-based routing',\n sortText: '0_@route',\n insertText: '@route',\n },\n]\n","/**\n * packages/language-server/src/core/diagnostics.ts\n *\n * Async wrapper around the aihu-compile Rust binary with --machine-errors support.\n * Invoked by the LSP server on every textDocument/didOpen and textDocument/didChange.\n *\n * NOTE: Uses node:child_process execFile (not exec) with argv arrays — safe from\n * shell injection. The LSP server process runs out-of-process for editor isolation.\n *\n * This module is editor-agnostic: it returns plain `AihuDiagnostic` records with\n * 0-based LSP positions. The transport/connection layer (src/server.ts) maps these\n * onto protocol `Diagnostic` objects. Keeping the parse logic here is the clean\n * seam for a future `@volar/language-core` virtual-code adoption (arch-4 §2.7).\n */\nimport { type ExecFileOptionsWithStringEncoding, execFile } from 'node:child_process'\nimport { dirname, resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { promisify } from 'node:util'\n\nconst execFileAsync = promisify(execFile)\n\n// execFile honours an `input` option at runtime (written to the child's stdin)\n// but the typed overloads omit it. Extend the string-encoding options type so\n// the call site stays type-safe while feeding source on stdin.\ntype ExecFileStdinOptions = ExecFileOptionsWithStringEncoding & { input: string }\n\nconst ext = process.platform === 'win32' ? '.exe' : ''\n// Resolve binary relative to this module. In the built package the layout is\n// dist/core/diagnostics.js → ../../../compiler/bin/aihu-compile (sibling package\n// in the workspace / installed node_modules). In source/test runs (vitest\n// resolves this file at src/core/diagnostics.ts) the same relative climb lands\n// on packages/compiler/bin/. The AIHU_COMPILE_BIN env var overrides both.\nconst binPath: string =\n process.env.AIHU_COMPILE_BIN ??\n resolve(dirname(fileURLToPath(import.meta.url)), `../../../compiler/bin/aihu-compile${ext}`)\n\n/**\n * The raw JSON shape emitted by the Rust binary with --machine-errors.\n * range uses 1-based lines (Rust internal) and 0-based cols.\n */\ninterface RawMachineError {\n code: string\n message: string\n hint?: string\n fix?: string\n /** Original text token (string) NOT an LSP Position */\n from: string | null\n /** Replacement text (string) NOT an LSP Position */\n to: string | null\n /** { line, col, end_line, end_col } — 1-based line, 0-based col from Rust */\n range: { line: number; col: number; end_line: number; end_col: number } | null\n}\n\n/** Normalised diagnostic with 0-based LSP positions. */\nexport interface AihuDiagnostic {\n code: string\n message: string\n // `| undefined` is explicit so the raw compiler error's optional hint/fix\n // (which may be undefined) assign cleanly under exactOptionalPropertyTypes.\n hint?: string | undefined\n fix?: string | undefined\n /** Original source text to replace (for code-action text edits). */\n fromText: string | null\n /** Replacement text (for code-action text edits). */\n toText: string | null\n /** 0-based LSP range. null when position is unknown. */\n range: {\n start: { line: number; character: number }\n end: { line: number; character: number }\n } | null\n}\n\nfunction toAihuDiagnostic(raw: RawMachineError): AihuDiagnostic {\n let lspRange: AihuDiagnostic['range'] = null\n if (raw.range && raw.range.line > 0) {\n // Rust uses 1-based lines; convert to 0-based for LSP.\n const startLine = raw.range.line - 1\n const endLine = raw.range.end_line - 1\n lspRange = {\n start: { line: startLine, character: raw.range.col },\n end: { line: endLine, character: raw.range.end_col },\n }\n }\n return {\n code: raw.code,\n message: raw.message,\n hint: raw.hint,\n fix: raw.fix,\n fromText: raw.from ?? null,\n toText: raw.to ?? null,\n range: lspRange,\n }\n}\n\n/**\n * Fallback: parse a plain-text compiler error into a synthetic diagnostic.\n * Used when the binary does not emit JSON (very old binary or stdin parse error).\n * TODO: remove when --machine-errors covers all error paths.\n */\nfunction parsePlainError(stderr: string, _filePath: string): AihuDiagnostic {\n const m = /\\b(\\d+):\\s*(.+)/.exec(stderr)\n const line = m ? Math.max(0, Number.parseInt(m[1]!, 10) - 1) : 0\n const message = m ? m[2]! : stderr.trim() || 'Unknown compiler error'\n return {\n code: 'C000',\n message,\n fromText: null,\n toText: null,\n range: {\n start: { line, character: 0 },\n end: { line, character: 0 },\n },\n }\n}\n\nexport interface CompileResult {\n code: string | null\n diagnostics: AihuDiagnostic[]\n}\n\n/**\n * Parse the Rust binary's `--machine-errors` stderr stream into structured\n * diagnostics. Each JSON line is one error; non-JSON lines are skipped. When no\n * JSON is present at all, falls back to a single synthetic plain-text diagnostic.\n *\n * Pure function — no I/O. Exposed so editors/tests can exercise the mapping\n * without spawning the compiler.\n */\nexport function parseMachineErrors(stderr: string, filePath: string): AihuDiagnostic[] {\n const diagnostics: AihuDiagnostic[] = []\n let jsonParsed = false\n for (const line of stderr.split('\\n')) {\n const trimmed = line.trim()\n if (!trimmed?.startsWith('{')) continue\n try {\n const raw = JSON.parse(trimmed) as RawMachineError\n diagnostics.push(toAihuDiagnostic(raw))\n jsonParsed = true\n } catch {\n // not a JSON line — skip\n }\n }\n if (!jsonParsed) {\n diagnostics.push(parsePlainError(stderr, filePath))\n }\n return diagnostics\n}\n\n/**\n * Compile a .aihu source string via stdin, returning structured diagnostics.\n */\nexport async function compileWithDiagnostics(\n source: string,\n filePath: string,\n): Promise<CompileResult> {\n const stem =\n filePath\n .replace(/\\\\/g, '/')\n .split('/')\n .pop()\n ?.replace(/\\.aihu$/, '') ?? 'component'\n\n try {\n const options: ExecFileStdinOptions = {\n input: source,\n encoding: 'utf8',\n maxBuffer: 8 * 1024 * 1024,\n }\n const { stdout } = await execFileAsync(\n binPath,\n ['--stdin', '--tag', stem, '--path', filePath, '--machine-errors'],\n options,\n )\n return { code: stdout, diagnostics: [] }\n } catch (err: unknown) {\n const stderr: string = (err as { stderr?: string }).stderr ?? ''\n return { code: null, diagnostics: parseMachineErrors(stderr, filePath) }\n }\n}\n","/**\n * packages/language-server/src/core/hover.ts\n *\n * Static hover lookup table for aihu macro keywords.\n * Used by the LSP server textDocument/hover handler.\n *\n * Editor-agnostic: returns Markdown strings + does pure position math. The\n * connection layer wraps the result in a protocol `Hover`. Clean seam for a\n * future Volar virtual-code hover provider.\n */\n\nconst HOVER_TABLE: Record<string, string> = {\n $prop: [\n '**aihu macro: `$prop`**',\n '',\n 'Declares reactive prop signals from parent attributes.',\n '',\n 'Compiles to:',\n '```typescript',\n 'const name = computed(() => ctx.attrs.name)',\n '```',\n '',\n '[v2 spec](docs/superpowers/specs/2026-05-05-spec-macro-vocabulary-v2.md)',\n ].join('\\n'),\n\n $computed: [\n '**aihu macro: `$computed`**',\n '',\n 'Declares a derived signal.',\n '',\n 'Compiles to:',\n '```typescript',\n 'const name = computed(() => expr)',\n '```',\n '',\n '[v2 spec](docs/superpowers/specs/2026-05-05-spec-macro-vocabulary-v2.md)',\n ].join('\\n'),\n\n $action: [\n '**aihu macro: `$action`**',\n '',\n 'Declares a callable action in component scope.',\n '',\n 'Compiles to:',\n '```typescript',\n 'function name(args) { return batch(() => { body }) }',\n '```',\n '',\n '[v2 spec](docs/superpowers/specs/2026-05-05-spec-macro-vocabulary-v2.md)',\n ].join('\\n'),\n\n $resource: [\n '**aihu macro: `$resource`**',\n '',\n 'Declares an async data resource signal.',\n '',\n 'Compiles to:',\n '```typescript',\n 'const name = createResource(() => expr)',\n '```',\n '',\n '[v2 spec](docs/superpowers/specs/2026-05-05-spec-macro-vocabulary-v2.md)',\n ].join('\\n'),\n\n $effect: [\n '**aihu macro: `$effect`**',\n '',\n 'Declares a reactive side effect.',\n '',\n 'Compiles to:',\n '```typescript',\n 'effect(() => { body })',\n '```',\n '',\n '[v2 spec](docs/superpowers/specs/2026-05-05-spec-macro-vocabulary-v2.md)',\n ].join('\\n'),\n\n $lifecycle: [\n '**aihu macro: `$lifecycle`**',\n '',\n 'Declares lifecycle hooks (mount, dispose, adopt, attributeChange).',\n '',\n 'Compiles to:',\n '```typescript',\n 'onMount(() => { ... })',\n 'onCleanup(() => { ... })',\n '```',\n '',\n '[v2 spec](docs/superpowers/specs/2026-05-05-spec-macro-vocabulary-v2.md)',\n ].join('\\n'),\n\n $if: [\n '**aihu template directive: `$if` / `{#if}`**',\n '',\n 'Conditional rendering.',\n '',\n 'Compiles to:',\n '```typescript',\n 'branch(condition, () => trueBranch)',\n '```',\n '',\n '[Template spec](docs/superpowers/specs/2026-05-05-spec-macro-vocabulary-v2.md)',\n ].join('\\n'),\n\n $each: [\n '**aihu template directive: `$each` / `{#each}`**',\n '',\n 'List rendering.',\n '',\n 'Compiles to:',\n '```typescript',\n 'branch.each(items, (item) => leaf(...))',\n '```',\n '',\n '[Template spec](docs/superpowers/specs/2026-05-05-spec-macro-vocabulary-v2.md)',\n ].join('\\n'),\n\n $html: [\n '**aihu template directive: `$html` / `{@html}`**',\n '',\n 'Raw HTML injection. Use with trusted content only.',\n '',\n 'Compiles to:',\n '```typescript',\n 'leaf({ nodeValue: htmlContent })',\n '```',\n '',\n '[Template spec](docs/superpowers/specs/2026-05-05-spec-macro-vocabulary-v2.md)',\n ].join('\\n'),\n\n $show: [\n '**aihu template directive: `$show`**',\n '',\n 'Toggles element visibility without removing it from the DOM.',\n '',\n 'Compiles to:',\n '```typescript',\n 'el.style.display = condition ? \"\" : \"none\"',\n '```',\n '',\n '[Template spec](docs/superpowers/specs/2026-05-05-spec-macro-vocabulary-v2.md)',\n ].join('\\n'),\n\n $on: [\n '**aihu template directive: `$on`**',\n '',\n 'Attaches an event listener to a DOM element.',\n '',\n 'Compiles to:',\n '```typescript',\n 'element.addEventListener(\"event\", handler)',\n '```',\n '',\n 'Usage: `$on.click={handler}`',\n '',\n '[Template spec](docs/superpowers/specs/2026-05-05-spec-macro-vocabulary-v2.md)',\n ].join('\\n'),\n\n $bind: [\n '**aihu template directive: `$bind`**',\n '',\n 'Two-way binding between a signal and an element attribute.',\n '',\n 'Compiles to:',\n '```typescript',\n '// two-way binding via signal setter',\n 'el.addEventListener(\"input\", e => setSignal(e.target.value))',\n '```',\n '',\n 'Usage: `$bind.value={signal}`',\n '',\n '[Template spec](docs/superpowers/specs/2026-05-05-spec-macro-vocabulary-v2.md)',\n ].join('\\n'),\n\n $emit: [\n '**aihu macro: `$emit`**',\n '',\n 'Declares and dispatches typed custom events.',\n '',\n 'Compiles to:',\n '```typescript',\n 'this.dispatchEvent(new CustomEvent(name, { detail: payload }))',\n '```',\n '',\n 'Usage: `$emit.name(payload)`',\n '',\n '[v2 spec](docs/superpowers/specs/2026-05-05-spec-macro-vocabulary-v2.md)',\n ].join('\\n'),\n}\n\nexport function getBlockContext(\n lines: string[],\n lineIndex: number,\n): 'state' | 'template' | 'unknown' {\n for (let i = lineIndex; i >= 0; i--) {\n const trimmed = lines[i]!.trimStart()\n if (/^@state\\s*\\{/.test(trimmed)) return 'state'\n if (/^@template\\s*\\{/.test(trimmed)) return 'template'\n if (/^@(style|agent|route)\\s*\\{/.test(trimmed)) return 'unknown'\n }\n return 'unknown'\n}\n\nexport function getMacroAtPosition(lineText: string, character: number): string | null {\n let m: RegExpExecArray | null\n const namespacedRe = /\\$(on|bind)(?:[.:][A-Za-z_$][\\w$]*)?/g\n while ((m = namespacedRe.exec(lineText)) !== null) {\n if (character >= m.index && character <= m.index + m[0].length) {\n return `$${m[1]!}`\n }\n }\n const bareRe = /\\$(prop|computed|action|resource|effect|lifecycle|emit|if|each|html|show)\\b/g\n while ((m = bareRe.exec(lineText)) !== null) {\n if (character >= m.index && character <= m.index + m[0].length) {\n return `$${m[1]!}`\n }\n }\n const blockRe = /\\{(?:#(if|each)|@(html))\\b/g\n while ((m = blockRe.exec(lineText)) !== null) {\n if (character >= m.index && character <= m.index + m[0].length) {\n const keyword = m[1] ?? m[2]!\n return `$${keyword}`\n }\n }\n return null\n}\n\nexport function getHoverContent(macro: string): string | null {\n return HOVER_TABLE[macro] ?? null\n}\n"],"mappings":";;;;;AAkFA,MAAM,SAAS;AAIf,SAAgB,QAAQ,QAA+B;CACrD,MAAM,WAAqB,EAAE;CAE7B,MAAM,aAAa,UAAU,QAAQ,QAAQ;CAC7C,MAAM,aAAa,UAAU,QAAQ,QAAQ;CAG7C,MAAM,0BAAU,IAAI,KAAsB;CAC1C,MAAM,sBAAgC,EAAE;CACxC,IAAI,YACF,WAAW,WAAW,MAAM,SAAS,qBAAqB,SAAS;CAGrE,IAAI,CAAC,YACH,OAAO;EAAE,WAAW;EAAQ;EAAU;CAIxC,MAAM,UAAU,UAAU,WAAW,MAAM,SAAS,SAAS;CAI7D,MAAM,gBAAgB,aADD,cAAc,QACY,CAAC;CAEhD,MAAM,gBACJ,oBAAoB,SAAS,IAAI,aAAa,oBAAoB,KAAK,KAAK,CAAC,OAAO;CAEtF,IAAI,MAAM,OAAO,MAAM,GAAG,WAAW,MAAM,GAAG,gBAAgB,OAAO,MAAM,WAAW,IAAI;CAE1F,IAAI,YAAY;EACd,MAAM,iBAAiB,UAAU,KAAK,QAAQ;EAC9C,IAAI,gBACF,IAAI,eACF,MAAM,IAAI,MAAM,GAAG,eAAe,MAAM,GAAG,gBAAgB,IAAI,MAAM,eAAe,IAAI;OACnF;GACL,MAAM,YAAY,sBAAsB,KAAK,eAAe,MAAM;GAClE,MAAM,UAAU,6BAA6B,KAAK,eAAe,IAAI;GACrE,MAAM,IAAI,MAAM,GAAG,UAAU,GAAG,IAAI,MAAM,QAAQ;;;CAMxD,MAAM,aAAa,IAAI,IAAY;EACjC,GAAG,QAAQ,MAAM,KAAK,MAAM,EAAE,KAAK;EACnC,GAAG,QAAQ,SAAS,KAAK,MAAM,EAAE,KAAK;EACtC,GAAG,QAAQ,OAAO,KAAK,MAAM,EAAE,KAAK;EACpC,GAAG,QAAQ,SAAS,KAAK,MAAM,EAAE,KAAK;EACtC,GAAG,QAAQ,YAAY,KAAK,MAAM,EAAE,KAAK;EACzC,GAAG,QAAQ,MAAM,KAAK,MAAM,EAAE,KAAK,CAAC,QAAQ,MAAmB,CAAC,CAAC,EAAE;EACpE,CAAC;CACF,KAAK,MAAM,CAAC,SAAS,SACnB,IAAI,CAAC,WAAW,IAAI,KAAK,EACvB,SAAS,KAAK,sBAAsB,KAAK,mCAAmC;CAIhF,OAAO;EAAE,WAAW;EAAK;EAAU;;AAarC,SAAS,UAAU,QAAgB,MAA2C;CAE5E,MAAM,IAAI,IADK,OAAO,oBAAoB,KAAK,UAAU,IAC7C,CAAC,KAAK,OAAO;CACzB,IAAI,CAAC,GAAG,OAAO;CACf,MAAM,aAAa,EAAE,SAAS,EAAE,OAAO,OAAO,IAAI;CAClD,MAAM,UAAU,EAAE,QAAQ,EAAE,GAAG,SAAS;CACxC,MAAM,WAAW,WAAW,QAAQ,QAAQ;CAC5C,IAAI,WAAW,GAAG,OAAO;CACzB,OAAO;EACL,OAAO;EACP,KAAK,WAAW;EAChB,WAAW,UAAU;EACrB,SAAS;EACT,MAAM,OAAO,MAAM,UAAU,GAAG,SAAS;EAC1C;;AAGH,SAAS,WAAW,GAAW,GAAmB;CAChD,IAAI,EAAE,OAAO,KAAK,OAAO;CACzB,IAAI,QAAQ;CACZ,IAAI,IAAI;CACR,OAAO,IAAI,EAAE,QAAQ;EACnB,MAAM,IAAI,EAAE;EACZ,IAAI,MAAM,OAAO,EAAE,IAAI,OAAO,KAAK;GACjC,MAAM,KAAK,EAAE,QAAQ,MAAM,EAAE;GAC7B,IAAI,KAAK,IAAI,EAAE,SAAS;GACxB;;EAEF,IAAI,MAAM,OAAO,EAAE,IAAI,OAAO,KAAK;GACjC,MAAM,MAAM,EAAE,QAAQ,MAAM,IAAI,EAAE;GAClC,IAAI,MAAM,IAAI,EAAE,SAAS,MAAM;GAC/B;;EAEF,IAAI,MAAM,QAAO,MAAM,OAAO,MAAM,KAAK;GACvC,IAAI,WAAW,GAAG,EAAE;GACpB;;EAEF,IAAI,MAAM,KAAK;OACV,IAAI,MAAM,KAAK;GAClB;GACA,IAAI,UAAU,GAAG,OAAO;;EAE1B;;CAEF,OAAO;;AAGT,SAAS,WAAW,GAAW,GAAmB;CAChD,MAAM,QAAQ,EAAE;CAChB,IAAI,IAAI,IAAI;CACZ,OAAO,IAAI,EAAE,QAAQ;EACnB,MAAM,IAAI,EAAE;EACZ,IAAI,MAAM,MAAM;GACd,KAAK;GACL;;EAEF,IAAI,UAAU,OAAO,MAAM,OAAO,EAAE,IAAI,OAAO,KAAK;GAClD,MAAM,QAAQ,WAAW,GAAG,IAAI,EAAE;GAClC,IAAI,QAAQ,IAAI,EAAE,SAAS,QAAQ;GACnC;;EAEF,IAAI,MAAM,OAAO,OAAO,IAAI;EAC5B;;CAEF,OAAO,EAAE;;AAGX,SAAS,WAAW,GAAW,GAAmB;CAChD,IAAI,EAAE,OAAO,KAAK,OAAO;CACzB,IAAI,QAAQ;CACZ,IAAI,IAAI;CACR,OAAO,IAAI,EAAE,QAAQ;EACnB,MAAM,IAAI,EAAE;EACZ,IAAI,MAAM,OAAO,EAAE,IAAI,OAAO,KAAK;GACjC,MAAM,KAAK,EAAE,QAAQ,MAAM,EAAE;GAC7B,IAAI,KAAK,IAAI,EAAE,SAAS;GACxB;;EAEF,IAAI,MAAM,OAAO,EAAE,IAAI,OAAO,KAAK;GACjC,MAAM,MAAM,EAAE,QAAQ,MAAM,IAAI,EAAE;GAClC,IAAI,MAAM,IAAI,EAAE,SAAS,MAAM;GAC/B;;EAEF,IAAI,MAAM,QAAO,MAAM,OAAO,MAAM,KAAK;GACvC,IAAI,WAAW,GAAG,EAAE;GACpB;;EAEF,IAAI,MAAM,KAAK;GACb,MAAM,QAAQ,WAAW,GAAG,EAAE;GAC9B,IAAI,QAAQ,IAAI,EAAE,SAAS,QAAQ;GACnC;;EAEF,IAAI,MAAM,KAAK;OACV,IAAI,MAAM,KAAK;GAClB;GACA,IAAI,UAAU,GAAG,OAAO;;EAE1B;;CAEF,OAAO;;AAKT,SAAS,WACP,MACA,SACA,qBACA,WACM;CACN,MAAM,UAAU,MAAc,UAA4B;EACxD,QAAQ,IAAI,MAAM;GAAE,GAAI,QAAQ,IAAI,KAAK,IAAI,EAAE;GAAG,GAAG;GAAO,CAAC;;CAE/D,KAAK,MAAM,WAAW,KAAK,MAAM,KAAK,EAAE;EACtC,MAAM,OAAO,QAAQ,MAAM;EAC3B,IAAI,SAAS,MAAM,KAAK,WAAW,KAAK,IAAI,KAAK,WAAW,KAAK,IAAI,KAAK,WAAW,IAAI,EACvF;EAEF,IAAI,KAAK,WAAW,iBAAiB,EAAE;GACrC,MAAM,QAAQ,cAAc,KAAK,MAAM,GAAwB,CAAC;GAChE,KAAK,MAAM,KAAK,OAAO,OAAO,GAAG;IAAE,YAAY;IAAM,aAAa;IAAM,CAAC;GACzE;;EAEF,IAAI,KAAK,WAAW,WAAW,EAAE;GAC/B,MAAM,QAAQ,cAAc,KAAK,MAAM,EAAkB,CAAC;GAC1D,KAAK,MAAM,KAAK,OACd,OAAO,GAAG,EAAE,YAAY,MAAM,CAAC;GAEjC;;EAEF,IAAI,KAAK,WAAW,WAAW,EAAE;GAC/B,MAAM,OAAO,KAAK,MAAM,EAAkB,CAAC,MAAM;GACjD,MAAM,IAAI,sBAAsB,KAAK,KAAK;GAC1C,IAAI,GAAG,OAAO,EAAE,IAAK;IAAE,UAAU;IAAM,YAAY;IAAM,aAAa;IAAM,CAAC;GAC7E;;EAEF,IAAI,KAAK,WAAW,aAAa,EAAE;GACjC,MAAM,OAAO,KAAK,MAAM,GAAoB,CAAC,MAAM;GACnD,MAAM,YAAY,8CAA8C,KAAK,KAAK;GAC1E,IAAI,WACF,OAAO,UAAU,IAAK,EAAE,UAAU,UAAU,IAAK,CAAC;GAEpD;;EAEF,IAAI,KAAK,WAAW,UAAU,EAAE;GAC9B,oBAAoB,KAAK,KAAK,OAAO;GACrC;;EAEF,IAAI,KAAK,WAAW,eAAe,EACjC,oBAAoB,KAAK,KAAK,OAAO;;;AAK3C,SAAS,cAAc,GAAqB;CAC1C,OAAO,EACJ,MAAM,IAAI,CACV,KAAK,MAAM,EAAE,MAAM,CAAC,CACpB,QAAQ,MAAM,qBAAqB,KAAK,EAAE,CAAC;;AAiBhD,SAAS,UAAU,MAAc,SAA+B,UAA6B;CAC3F,MAAM,UAAmB;EACvB,OAAO,EAAE;EACT,UAAU,EAAE;EACZ,QAAQ,EAAE;EACV,UAAU,EAAE;EACZ,aAAa,EAAE;EACf,YAAY,EAAE;EACd,WAAW,EAAE;EACb,OAAO,EAAE;EACT,aAAa,EAAE;EAChB;CAED,IAAI,IAAI;CACR,OAAO,IAAI,KAAK,WAAW,KAAK,OAAO,QAAQ,KAAK,OAAO,OAAO;CAElE,IAAI,aAAa;CACjB,IAAI,WAAW;CAEf,MAAM,kBAAkB;EACtB,OAAO,IAAI,KAAK,QAAQ;GACtB,MAAM,UAAU,KAAK,QAAQ,MAAM,EAAE;GACrC,MAAM,MAAM,UAAU,IAAI,KAAK,SAAS;GACxC,MAAM,OAAO,KAAK,MAAM,GAAG,IAAI;GAC/B,MAAM,UAAU,KAAK,MAAM;GAC3B,IAAI,YAAY,IAAI;IAClB,cAAc,GAAG,KAAK;IACtB,IAAI,MAAM;IACV;;GAEF,IAAI,QAAQ,WAAW,KAAK,EAAE;IAC5B,cAAc,GAAG,KAAK;IACtB,IAAI,MAAM;IACV;;GAEF,IAAI,QAAQ,WAAW,KAAK,EAAE;IAC5B,MAAM,QAAQ,KAAK,QAAQ,MAAM,EAAE;IACnC,IAAI,QAAQ,GAAG;KACb,cAAc,KAAK,MAAM,EAAE;KAC3B,IAAI,KAAK;KACT;;IAEF,MAAM,aAAa,KAAK,QAAQ,MAAM,MAAM;IAC5C,MAAM,UAAU,aAAa,IAAI,KAAK,SAAS,aAAa;IAC5D,cAAc,KAAK,MAAM,GAAG,QAAQ;IACpC,IAAI;IACJ;;GAEF;;;CAIJ,OAAO,IAAI,KAAK,QAAQ;EACtB,WAAW;EACX,IAAI,KAAK,KAAK,QAAQ;EACtB,MAAM,YAAY;EAClB,MAAM,UAAU,KAAK,QAAQ,MAAM,EAAE;EACrC,MAAM,aAAa,UAAU,IAAI,KAAK,SAAS;EAC/C,MAAM,WAAW,KAAK,MAAM,WAAW,WAAW;EAClD,MAAM,UAAU,SAAS,MAAM;EAC/B,MAAM,UAAU;EAChB,aAAa;EAEb,MAAM,YAAY,aAAa,SAAS,SAAS,SAAS,WAAW,CAAC;EAEtE,IAAI,QAAQ,WAAW,UAAU,EAAE;GACjC,QAAQ,YAAY,KAAK;IAAE,KAAK,SAAS,MAAM;IAAE;IAAS,UAAU;IAAY,CAAC;GACjF,IAAI,aAAa;GACjB;;EAMF;GACE,MAAM,KAAK,qBAAqB,MAAM,WAAW,SAAS,SAAS,eAAe,WAAW;GAC7F,IAAI,OAAO,MAAM;IACf,IAAI;IACJ;;;EAKJ,IAAI,iCAAiC,KAAK,QAAQ,EAAE;GAClD,MAAM,UAAU,qBAAqB,MAAM,WAAW,SAAS,SAAS,WAAW;GACnF,IAAI,YAAY,MAAM;IACpB,IAAI;IACJ;;;EAIJ,IAAI,QAAQ,WAAW,SAAS,EAAE;GAChC,MAAM,UAAU,WAAW,MAAM,WAAW,SAAS,SAAS,QAAQ;GACtE,IAAI,YAAY,MAAM;IACpB,IAAI;IACJ;;GAEF,QAAQ,YAAY,KAAK;IAAE,KAAK;IAAS;IAAS,UAAU;IAAY,CAAC;GACzE,IAAI,aAAa;GACjB;;EAGF,IAAI,QAAQ,WAAW,aAAa,EAAE;GACpC,MAAM,UAAU,eAAe,MAAM,WAAW,SAAS,SAAS,QAAQ;GAC1E,IAAI,YAAY,MAAM;IACpB,IAAI;IACJ;;GAEF,QAAQ,YAAY,KAAK;IAAE,KAAK;IAAS;IAAS,UAAU;IAAY,CAAC;GACzE,IAAI,aAAa;GACjB;;EAGF,IAAI,QAAQ,WAAW,aAAa,EAAE;GACpC,MAAM,UAAU,eAAe,MAAM,WAAW,SAAS,SAAS,QAAQ;GAC1E,IAAI,YAAY,MAAM;IACpB,IAAI;IACJ;;GAEF,QAAQ,YAAY,KAAK;IAAE,KAAK;IAAS;IAAS,UAAU;IAAY,CAAC;GACzE,IAAI,aAAa;GACjB;;EAGF,IAAI,QAAQ,WAAW,WAAW,EAAE;GAClC,MAAM,UAAU,aAAa,MAAM,WAAW,SAAS,SAAS,QAAQ;GACxE,IAAI,YAAY,MAAM;IACpB,IAAI;IACJ;;GAEF,QAAQ,YAAY,KAAK;IAAE,KAAK;IAAS;IAAS,UAAU;IAAY,CAAC;GACzE,IAAI,aAAa;GACjB;;EAGF,IAAI,QAAQ,WAAW,oBAAoB,IAAI,QAAQ,WAAW,sBAAsB,EAAE;GACxF,MAAM,UAAU,gBAAgB,MAAM,WAAW,SAAS,SAAS,WAAW;GAC9E,IAAI,YAAY,MAAM;IACpB,IAAI;IACJ;;GAEF,QAAQ,YAAY,KAAK;IAAE,KAAK;IAAS;IAAS,UAAU;IAAY,CAAC;GACzE,IAAI,aAAa;GACjB;;EAGF,IAAI,QAAQ,WAAW,WAAW,EAAE;GAClC,MAAM,UAAU,iBAAiB,MAAM,WAAW,SAAS,SAAS,YAAY,SAAS;GACzF,IAAI,YAAY,MAAM;IACpB,IAAI;IACJ;;GAEF,QAAQ,YAAY,KAAK;IAAE,KAAK;IAAS;IAAS,UAAU;IAAY,CAAC;GACzE,IAAI,aAAa;GACjB;;EAGF,IAAI,QAAQ,WAAW,cAAc,EAAE;GACrC,MAAM,UAAU,uBAAuB,MAAM,UAAU;GACvD,QAAQ,YAAY,KAAK;IACvB,KAAK,KAAK,MAAM,WAAW,QAAQ,CAAC,MAAM;IAC1C;IACA,UAAU;IACX,CAAC;GACF,IAAI;GACJ;;EAMF,IAAI,2BAA2B,KAAK,QAAQ,EAAE;GAC5C,MAAM,UAAU,uBAAuB,MAAM,UAAU;GACvD,QAAQ,YAAY,KAAK;IACvB,KAAK,KAAK,MAAM,WAAW,QAAQ,CAAC,SAAS;IAC7C;IACA,UAAU;IACX,CAAC;GACF,IAAI;GACJ;;EAIF,IAAI,oCAAoC,KAAK,QAAQ,EAAE;GACrD,QAAQ,YAAY,KAAK;IAAE,KAAK;IAAS;IAAS,UAAU;IAAY,CAAC;GACzE,IAAI,aAAa;GACjB;;EAGF,MAAM,QAAQ,kBAAkB,MAAM,UAAU;EAChD,IAAI,UAAU,MAAM;GAClB,MAAM,KAAK,MAAM,OAAO,QAAQ,IAAI,MAAM,KAAK,GAAG,KAAA;GAClD,IAAI,IACF,QAAQ,MAAM,KAAK;IACjB,MAAM,MAAM;IACZ,SAAS,MAAM;IACf,YAAY,MAAM;IAClB,UAAU,GAAG;IACb,QAAQ,gBAAgB,GAAG;IAC3B;IACD,CAAC;QAEF,QAAQ,MAAM,KAAK;IACjB,KAAK,MAAM;IACX;IACA,MAAM,MAAM;IACZ,SAAS,MAAM;IACf,YAAY,MAAM;IACnB,CAAC;GAEJ,IAAI,MAAM;GACV;;EAGF,QAAQ,YAAY,KAAK;GAAE,KAAK;GAAS;GAAS,UAAU;GAAY,CAAC;EACzE,IAAI,aAAa;;CAGnB,OAAO;;AAGT,SAAS,gBAAgB,IAA4D;CACnF,IAAI,CAAC,GAAG,cAAc,CAAC,GAAG,eAAe,CAAC,GAAG,UAAU,OAAO,KAAA;CAC9D,OAAO;EAAE,MAAM,CAAC,CAAC,GAAG;EAAY,OAAO,CAAC,CAAC,GAAG;EAAa;;AAK3D,SAAS,WACP,MACA,OACA,SACA,SACA,SACe;CACf,MAAM,QAAQ,QAAQ;CACtB,MAAM,YAAY,6BAA6B,KAAK,KAAK,MAAM,MAAM,CAAC;CACtE,IAAI,CAAC,WAAW,OAAO;CACvB,MAAM,OAAO,UAAU;CACvB,IAAI,SAAS,QAAQ,UAAU,GAAG;CAClC,MAAM,YAAY;CAClB,MAAM,UAAU,kBAAkB,MAAM,QAAQ;EAAC;EAAK;EAAM;EAAI,CAAC;CACjE,MAAM,UAAU,KAAK,MAAM,WAAW,QAAQ,CAAC,MAAM;CACrD,SAAS;CACT,IAAI;CACJ,IAAI,KAAK,YAAY,KAAK;EACxB;EACA,MAAM,WAAW;EACjB,MAAM,SAAS,kBAAkB,MAAM,QAAQ,CAAC,MAAM,IAAI,CAAC;EAC3D,aAAa,KAAK,MAAM,UAAU,OAAO,CAAC,MAAM;EAChD,SAAS;;CAEX,IAAI,KAAK,YAAY,OAAO,KAAK,YAAY,MAAM;CAEnD,MAAM,KAAK,QAAQ,IAAI,KAAK;CAC5B,QAAQ,MAAM,KAAK;EACjB;EACA,SAAS,kBAAkB,QAAQ;EACnC,YAAY,eAAe,KAAA,IAAY,kBAAkB,WAAW,GAAG,KAAA;EACvE,UAAU,IAAI;EACd,QAAQ,KAAK,gBAAgB,GAAG,GAAG,KAAA;EACnC;EACD,CAAC;CACF,OAAO;;AAGT,SAAS,eACP,MACA,OACA,SACA,SACA,SACe;CACf,MAAM,QAAQ,QAAQ;CACtB,MAAM,YAAY,6BAA6B,KAAK,KAAK,MAAM,MAAM,CAAC;CACtE,IAAI,CAAC,WAAW,OAAO;CACvB,MAAM,OAAO,UAAU;CACvB,IAAI,SAAS,QAAQ,UAAU,GAAG;CAClC,MAAM,YAAY;CAClB,MAAM,UAAU,2BAA2B,MAAM,OAAO;CACxD,MAAM,OAAO,KAAK,MAAM,WAAW,QAAQ,CAAC,MAAM;CAClD,SAAS;CAET,MAAM,KAAK,QAAQ,IAAI,KAAK;CAC5B,QAAQ,SAAS,KAAK;EACpB;EACA;EACA,UAAU,IAAI;EACd,QAAQ,KAAK,gBAAgB,GAAG,GAAG,KAAA;EACnC;EACD,CAAC;CACF,OAAO;;AAGT,SAAS,eACP,MACA,OACA,SACA,SACA,SACe;CACf,MAAM,QAAQ,QAAQ;CACtB,MAAM,YAAY,6BAA6B,KAAK,KAAK,MAAM,MAAM,CAAC;CACtE,IAAI,CAAC,WAAW,OAAO;CACvB,MAAM,OAAO,UAAU;CACvB,IAAI,SAAS,QAAQ,UAAU,GAAG;CAClC,MAAM,YAAY;CAClB,MAAM,UAAU,2BAA2B,MAAM,OAAO;CACxD,MAAM,OAAO,KAAK,MAAM,WAAW,QAAQ,CAAC,MAAM;CAClD,SAAS;CAET,MAAM,KAAK,QAAQ,IAAI,KAAK;CAC5B,QAAQ,SAAS,KAAK;EACpB;EACA;EACA,UAAU,IAAI;EACd,QAAQ,KAAK,gBAAgB,GAAG,GAAG,KAAA;EACnC;EACD,CAAC;CACF,OAAO;;AAGT,SAAS,aACP,MACA,OACA,SACA,SACA,SACe;CACf,MAAM,QAAQ,QAAQ;CACtB,MAAM,YAAY,8BAA8B,KAAK,KAAK,MAAM,MAAM,CAAC;CACvE,IAAI,CAAC,WAAW,OAAO;CACvB,MAAM,OAAO,UAAU;CACvB,MAAM,WAAW,QAAQ,UAAU,GAAG,SAAS;CAC/C,MAAM,aAAa,WAAW,MAAM,SAAS;CAC7C,IAAI,aAAa,GAAG,OAAO;CAC3B,MAAM,OAAO,KAAK,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM;CACxD,IAAI,SAAS,aAAa;CAC1B,IAAI;CACJ,MAAM,WAAW;CACjB,OAAO,SAAS,KAAK,UAAU,KAAK,YAAY,KAAK;EACnD,IAAI,KAAK,YAAY,MAAM;EAC3B;;CAEF,MAAM,UAAU,KAAK,MAAM,UAAU,OAAO,CAAC,MAAM;CACnD,IAAI,QAAQ,WAAW,IAAI,EACzB,UAAU,QAAQ,MAAM,EAAE,CAAC,MAAM;CAEnC,IAAI,KAAK,YAAY,KAAK,OAAO;CACjC,MAAM,aAAa,WAAW,MAAM,OAAO;CAC3C,IAAI,aAAa,GAAG,OAAO;CAC3B,MAAM,UAAU,KAAK,MAAM,SAAS,GAAG,WAAW;CAClD,SAAS,aAAa;CAEtB,MAAM,KAAK,QAAQ,IAAI,KAAK;CAC5B,QAAQ,OAAO,KAAK;EAClB;EACA;EACA;EACA,MAAM;EACN,UAAU,IAAI;EACd,QAAQ,KAAK,gBAAgB,GAAG,GAAG,KAAA;EACnC;EACD,CAAC;CACF,OAAO;;AAGT,SAAS,gBACP,MACA,OACA,SACA,SACA,UACe;CAEf,MAAM,OADe,KAAK,MAAM,MAAM,CAAC,MACd,CAAC,WAAW,oBAAoB,GAAG,UAAU;CACtE,MAAM,WAAW,KAAK,QAAQ,KAAK,MAAM;CACzC,IAAI,WAAW,GAAG,OAAO;CACzB,MAAM,aAAa,WAAW,MAAM,SAAS;CAC7C,IAAI,aAAa,GAAG,OAAO;CAC3B,MAAM,KAAK,KAAK,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM;CACtD,MAAM,KAAK,yBAAyB,GAAG;CACvC,QAAQ,UAAU,KAAK;EACrB;EACA,MAAM,KAAK,GAAG,OAAO;EACrB;EACA;EACD,CAAC;CACF,IAAI,SAAS,aAAa;CAC1B,IAAI,KAAK,YAAY,OAAO,KAAK,YAAY,MAAM;CACnD,OAAO;;AAGT,SAAS,iBACP,MACA,OACA,SACA,SACA,UACA,WACe;CACf,MAAM,WAAW,KAAK,QAAQ,KAAK,MAAM;CACzC,IAAI,WAAW,GAAG,OAAO;CACzB,MAAM,aAAa,WAAW,MAAM,SAAS;CAC7C,IAAI,aAAa,GAAG,OAAO;CAC3B,MAAM,KAAK,KAAK,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM;CACtD,MAAM,KAAK,yBAAyB,GAAG;CACvC,QAAQ,WAAW,KAAK;EACtB,MAAM,KAAK,GAAG,OAAO;EACrB;EACA;EACD,CAAC;CACF,IAAI,SAAS,aAAa;CAC1B,IAAI,KAAK,YAAY,OAAO,KAAK,YAAY,MAAM;CACnD,OAAO;;AAGT,SAAS,uBAAuB,MAAc,OAAuB;CACnE,MAAM,WAAW,KAAK,QAAQ,KAAK,MAAM;CACzC,IAAI,WAAW,GAAG;EAChB,MAAM,KAAK,KAAK,QAAQ,MAAM,MAAM;EACpC,OAAO,KAAK,IAAI,KAAK,SAAS,KAAK;;CAErC,MAAM,QAAQ,WAAW,MAAM,SAAS;CACxC,IAAI,QAAQ,GAAG;EACb,MAAM,KAAK,KAAK,QAAQ,MAAM,MAAM;EACpC,OAAO,KAAK,IAAI,KAAK,SAAS,KAAK;;CAErC,IAAI,SAAS,QAAQ;CACrB,IAAI,KAAK,YAAY,OAAO,KAAK,YAAY,MAAM;CACnD,OAAO;;AAWT,SAAS,kBAAkB,MAAc,OAAsC;CAC7E,MAAM,IAAI,kCAAkC,KAAK,KAAK,MAAM,MAAM,CAAC;CACnE,IAAI,CAAC,GAAG,OAAO;CACf,MAAM,OAAO,EAAE;CACf,IAAI,SAAS,QAAQ,EAAE,GAAG;CAC1B,MAAM,YAAY;CAClB,MAAM,UAAU,kBAAkB,MAAM,QAAQ;EAAC;EAAK;EAAM;EAAI,CAAC;CACjE,MAAM,UAAU,KAAK,MAAM,WAAW,QAAQ,CAAC,MAAM;CACrD,SAAS;CACT,IAAI;CACJ,IAAI,KAAK,YAAY,KAAK;EACxB;EACA,MAAM,WAAW;EACjB,MAAM,SAAS,kBAAkB,MAAM,QAAQ,CAAC,MAAM,IAAI,CAAC;EAC3D,aAAa,KAAK,MAAM,UAAU,OAAO,CAAC,MAAM;EAChD,SAAS;;CAEX,IAAI,KAAK,YAAY,KAAK;CAC1B,IAAI,KAAK,YAAY,MAAM;CAC3B,OAAO;EACL;EACA;EACA;EACA,KAAK,KAAK,MAAM,OAAO,OAAO,CAAC,QAAQ,QAAQ,GAAG;EAClD,QAAQ;EACT;;AAUH,SAAS,yBAAyB,GAA4B;CAC5D,IAAI,EAAE,MAAM;CACZ,IAAI,EAAE,WAAW,IAAI,EAAE;EACrB,MAAM,WAAW,WAAW,GAAG,EAAE;EACjC,IAAI,WAAW,GAAG,OAAO;EACzB,MAAM,OAAO,EAAE,MAAM,GAAG,SAAS;EACjC,IAAI,MAAM,WAAW;EACrB,OAAO,MAAM,EAAE,UAAU,KAAK,KAAK,EAAE,KAAM,EAAE;EAC7C,IAAI;EACJ,IAAI,EAAE,SAAS,KAAK;GAClB;GACA,MAAM,UAAU,EAAE,QAAQ,MAAM,IAAI;GACpC,IAAI,UAAU,GAAG,OAAO;GACxB,UAAU,EAAE,MAAM,KAAK,QAAQ,CAAC,MAAM;GACtC,MAAM;;EAER,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,KAAK,MAAM,OAAO;EAC3C,OAAO;EACP,OAAO,MAAM,EAAE,UAAU,KAAK,KAAK,EAAE,KAAM,EAAE;EAC7C,IAAI,EAAE,SAAS,KAAK;GAClB,MAAM,QAAQ,WAAW,GAAG,IAAI;GAChC,IAAI,QAAQ,GAAG,OAAO;GACtB,OAAO;IACL;IACA,MAAM,EAAE,MAAM,MAAM,GAAG,MAAM;IAC7B;IACA,SAAS;IACV;;EAEH,OAAO;GAAE;GAAM,MAAM,WAAW,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC;GAAI;GAAS,SAAS;GAAM;;CAElF,MAAM,UAAU,yCAAyC,KAAK,EAAE;CAChE,IAAI,SAAS;EACX,MAAM,WAAW,QAAQ,GAAG,SAAS;EACrC,MAAM,aAAa,WAAW,GAAG,SAAS;EAC1C,IAAI,aAAa,GAAG,OAAO;EAC3B,MAAM,OAAO,EAAE,MAAM,WAAW,GAAG,WAAW;EAC9C,IAAI,MAAM,aAAa;EACvB,OAAO,MAAM,EAAE,UAAU,KAAK,KAAK,EAAE,KAAM,EAAE;EAC7C,IAAI;EACJ,IAAI,EAAE,SAAS,KAAK;GAClB;GACA,MAAM,UAAU,EAAE,QAAQ,KAAK,IAAI;GACnC,IAAI,UAAU,GAAG,OAAO;GACxB,UAAU,EAAE,MAAM,KAAK,QAAQ,CAAC,MAAM;GACtC,MAAM;;EAER,IAAI,EAAE,SAAS,KAAK,OAAO;EAC3B,MAAM,QAAQ,WAAW,GAAG,IAAI;EAChC,IAAI,QAAQ,GAAG,OAAO;EACtB,OAAO;GACL;GACA,MAAM,EAAE,MAAM,MAAM,GAAG,MAAM;GAC7B;GACA,SAAS;GACV;;CAEH,OAAO;;AAGT,SAAS,kBAAkB,GAAW,OAAe,OAAkC;CACrF,IAAI,IAAI;CACR,OAAO,IAAI,EAAE,QAAQ;EACnB,MAAM,IAAI,EAAE;EACZ,IAAI,MAAM,OAAO,EAAE,IAAI,OAAO,KAAK;GACjC,MAAM,KAAK,EAAE,QAAQ,MAAM,EAAE;GAC7B,IAAI,MAAM,SAAS,KAAK,EAAE,OAAO,KAAK,IAAI,EAAE,SAAS;GACrD,IAAI,KAAK,IAAI,EAAE,SAAS,KAAK;GAC7B;;EAEF,IAAI,MAAM,OAAO,EAAE,IAAI,OAAO,KAAK;GACjC,MAAM,MAAM,EAAE,QAAQ,MAAM,IAAI,EAAE;GAClC,IAAI,MAAM,IAAI,EAAE,SAAS,MAAM;GAC/B;;EAEF,IAAI,MAAM,QAAO,MAAM,OAAO,MAAM,KAAK;GACvC,IAAI,WAAW,GAAG,EAAE;GACpB;;EAEF,IAAI,MAAM,KAAK;GACb,MAAM,QAAQ,WAAW,GAAG,EAAE;GAC9B,IAAI,QAAQ,IAAI,EAAE,SAAS,QAAQ;GACnC;;EAEF,IAAI,MAAM,KAAK;GACb,MAAM,QAAQ,WAAW,GAAG,EAAE;GAC9B,IAAI,QAAQ,IAAI,EAAE,SAAS,QAAQ;GACnC;;EAEF,IAAI,MAAM,KAAK;GACb,MAAM,QAAQ,YAAY,GAAG,EAAE;GAC/B,IAAI,QAAQ,GAAG;IACb,IAAI;IACJ;;;EAGJ,IAAI,MAAM,SAAS,EAAE,EAAE,OAAO;EAC9B;;CAEF,OAAO,EAAE;;AAGX,SAAS,YAAY,GAAW,OAAuB;CACrD,IAAI,EAAE,WAAW,KAAK,OAAO;CAC7B,IAAI,QAAQ;CACZ,IAAI,IAAI;CACR,OAAO,IAAI,EAAE,QAAQ;EACnB,MAAM,IAAI,EAAE;EACZ,IAAI,MAAM,KAAK;OACV,IAAI,MAAM,KAAK;GAClB;GACA,IAAI,UAAU,GAAG,OAAO,IAAI;SACvB,IAAI,MAAM,MACf,OAAO;OACF,IAAI,MAAM,OAAO,MAAM,KAC5B,OAAO;OACF,IAAI,MAAM,OAAO,MAAM,KAC5B,OAAO;EAET;;CAEF,OAAO;;AAGT,SAAS,2BAA2B,MAAc,OAAuB;CAEvE,MAAM,kBAAkB,YAAY,MADlB,KAAK,YAAY,MAAM,QAAQ,EAAE,GAAG,EACF;CACpD,IAAI,IAAI;CACR,MAAM,UAAU,KAAK,QAAQ,MAAM,EAAE;CACrC,IAAI,UAAU,GAAG,OAAO,KAAK;CAC7B,IAAI,UAAU;CACd,OAAO,IAAI,KAAK,QAAQ;EACtB,MAAM,cAAc,KAAK,QAAQ,MAAM,EAAE;EACzC,MAAM,aAAa,cAAc,IAAI,KAAK,SAAS;EAEnD,MAAM,UADO,KAAK,MAAM,GAAG,WACP,CAAC,MAAM;EAC3B,IAAI,YAAY,IACd,OAAO;EAET,MAAM,SAAS,YAAY,MAAM,EAAE;EACnC,IACE,SAAS,mBACR,WAAW,mBACV,2BAA2B,KAAK,QAAQ,IACxC,CAAC,QAAQ,WAAW,KAAK,EAC3B;GACA,IAAI,cAAc,IAAI,KAAK,SAAS,cAAc;GAClD;;EAEF,OAAO;;CAET,OAAO;;AAGT,SAAS,YAAY,MAAc,WAA2B;CAC5D,IAAI,IAAI;CACR,OAAO,YAAY,IAAI,KAAK,QAAQ;EAClC,MAAM,IAAI,KAAK,YAAY;EAC3B,IAAI,MAAM,OAAO,MAAM,KAAM;OACxB;;CAEP,OAAO;;AAKT,SAAS,cAAc,SAA0B;CAC/C,MAAM,MAAgB,EAAE;CACxB,MAAM,UAAU,QAAQ,YAAY,QAAQ,MAAM,EAAE,IAAI,WAAW,UAAU,CAAC;CAC9E,MAAM,mBAAmB,QAAQ,YAAY,QAAQ,MAAM,CAAC,EAAE,IAAI,WAAW,UAAU,CAAC;CAExF,KAAK,MAAM,OAAO,SAAS;EACzB,IAAI,IAAI,QAAQ,MAAM,EAAE,IAAI,KAAK,OAAO,IAAI,QAAQ,CAAC;EACrD,IAAI,KAAK,GAAG,SAAS,IAAI,MAAM;;CAEjC,IAAI,QAAQ,SAAS,GAAG,IAAI,KAAK,GAAG;CAEpC,IAAI,QAAQ,MAAM,SAAS,GACzB,UAAU,KAAK,UAAU,QAAQ,MAAM,CAAC;CAG1C,KAAK,MAAM,KAAK,QAAQ,OAAO;EAC7B,IAAI,EAAE,QAAQ,MAAM,EAAE,IAAI,KAAK,OAAO,EAAE,QAAQ,CAAC;EAGjD,IAAI,KAAK,oBAAoB,EAAE,KAAK,OAAO,CAAC;EAC5C,IAAI,KAAK,GAAG;;CAEd,mBAAmB,IAAI;CAEvB,IAAI,QAAQ,SAAS,SAAS,GAC5B,UAAU,KAAK,aAAa,QAAQ,SAAS,CAAC;CAGhD,IAAI,QAAQ,OAAO,SAAS,GAC1B,UAAU,KAAK,WAAW,QAAQ,OAAO,CAAC;CAG5C,IAAI,QAAQ,SAAS,SAAS,GAC5B,UAAU,KAAK,aAAa,QAAQ,SAAS,CAAC;CAGhD,IAAI,QAAQ,YAAY,SAAS,GAC/B,UAAU,KAAK,gBAAgB,QAAQ,YAAY,CAAC;CAGtD,IAAI,QAAQ,UAAU,SAAS,GAC7B,UAAU,KAAK,cAAc,QAAQ,UAAU,CAAC;CAGlD,IAAI,QAAQ,WAAW,SAAS,GAC9B,UAAU,KAAK,eAAe,QAAQ,WAAW,CAAC;CAGpD,KAAK,MAAM,KAAK,kBAAkB;EAChC,IAAI,EAAE,QAAQ,MAAM,EAAE,IAAI,KAAK,OAAO,EAAE,QAAQ,CAAC;EACjD,IAAI,EAAE,IAAI,SAAS,KAAK,EACtB,IAAI,KAAK,oBAAoB,EAAE,KAAK,OAAO,CAAC;OAE5C,IAAI,KAAK,GAAG,SAAS,EAAE,MAAM;EAE/B,IAAI,KAAK,GAAG;;CAEd,mBAAmB,IAAI;CAEvB,OAAO,IAAI,KAAK,KAAK;;AAGvB,SAAS,UAAU,KAAe,OAAqB;CACrD,IAAI,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,OAAO,IAAI,IAAI,KAAK,GAAG;CAC9D,IAAI,KAAK,MAAM;CACf,IAAI,KAAK,GAAG;;AAGd,SAAS,mBAAmB,KAAqB;CAC/C,OAAO,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,OAAO,IAAI,IAAI,KAAK;;AAGhE,SAAS,UAAU,SAA8B;CAC/C,MAAM,QAAkB,EAAE;CAC1B,MAAM,eAAe,QAAQ,IAAI;CACjC,MAAM,gBAAgB,cAAc,MAAM,GAAG,eAAe;CAC5D,MAAM,QAAkB,EAAE;CAC1B,KAAK,MAAM,CAAC,KAAK,MAAM,QAAQ,SAAS,EAAE;EACxC,IAAI,MAAM,KAAK,EAAE,QAAQ,MAAM,EAC7B,MAAM,KAAK,OAAO,YAAY,EAAE,SAAS,GAAG,SAAS,SAAS,CAAC,CAAC;EAElE,MAAM,KAAK,gBAAgB,EAAE,CAAC;;CAEhC,IAAI,eAAe,MAAM,KAAK,OAAO,cAAc,CAAC;CACpD,MAAM,KAAK,GAAG,OAAO,UAAU;CAC/B,MAAM,KAAK,GAAG,MAAM;CACpB,MAAM,KAAK,GAAG,OAAO,GAAG;CACxB,OAAO,MAAM,KAAK,KAAK;;AAGzB,SAAS,gBAAgB,GAAsB;CAC7C,MAAM,OAAmC,EAAE;CAE3C,IADkB,eAAe,EAAE,SAAS,EAAE,WACjC,IAAI,EAAE,SAAS,KAAK,KAAK;EAAE,GAAG;EAAQ,GAAG,EAAE;EAAS,CAAC;CAClE,IAAI,EAAE,eAAe,KAAA,GAAW,KAAK,KAAK;EAAE,GAAG;EAAW,GAAG,EAAE;EAAY,CAAC;CAC5E,IAAI,EAAE,UAAU,KAAK,KAAK;EAAE,GAAG;EAAY,GAAG,YAAY,EAAE,SAAS;EAAE,CAAC;CACxE,IAAI,EAAE,QAAQ,KAAK,KAAK;EAAE,GAAG;EAAU,GAAG,aAAa,EAAE,OAAO;EAAE,CAAC;CAEnE,MAAM,SAAS,GAAG,EAAE,KAAK,MAAM,KAAK,KAAK,EAAE,GAAG,QAAQ,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;CAC/E,MAAM,aAAa;CACnB,MAAM,aAAa,IAAI,OAAO,WAAW;CACzC,IAAI,KAAK,UAAU,KAAK,aAAa,OAAO,SAAS,KAAK,KACxD,OAAO,GAAG,aAAa,OAAO;CAEhC,MAAM,QAAkB,CAAC,GAAG,aAAa,EAAE,KAAK,KAAK;CACrD,MAAM,QAAQ,IAAI,OAAO,aAAa,EAAc;CACpD,KAAK,MAAM,EAAE,GAAG,OAAO,MACrB,MAAM,KAAK,GAAG,QAAQ,EAAE,IAAI,EAAE,GAAG;CAEnC,MAAM,KAAK,GAAG,WAAW,IAAI;CAC7B,OAAO,MAAM,KAAK,KAAK;;AAGzB,SAAS,eAAe,SAA6B,YAAyC;CAC5F,IAAI,CAAC,SAAS,OAAO;CACrB,IAAI,eAAe,KAAA,GAAW,OAAO;CACrC,MAAM,UAAU,WAAW,MAAM;CACjC,IAAI,YAAY,UAAU,YAAY,aAAa,OAAO;CAC1D,IAAI,YAAY,MAAM,OAAO;CAC7B,IAAI,YAAY,MAAM,OAAO;CAC7B,IAAI,SAAS,KAAK,QAAQ,IAAI,QAAQ,SAAS,IAAI,EAAE,OAAO;CAC5D,IAAI,SAAS,KAAK,QAAQ,EAAE;EAC1B,IAAI,YAAY,KAAK,QAAQ,IAAI,YAAY,UAAU,YAAY,SAAS,OAAO;EACnF,IAAI,SAAS,KAAK,QAAQ,EAAE,OAAO;EACnC,OAAO;;CAET,OAAO;;AAGT,SAAS,aAAa,SAA+B;CACnD,OAAO,oBAAoB,aAAa,QAAQ;;AAGlD,SAAS,aAAa,SAA+B;CACnD,OAAO,oBAAoB,aAAa,QAAQ;;AAGlD,SAAS,gBAAgB,SAA+B;CACtD,OAAO,oBAAoB,WAAW,QAAQ;;AAGhD,SAAS,oBAAoB,OAAe,SAA+B;CACzE,MAAM,eAAe,QAAQ,IAAI;CACjC,MAAM,gBAAgB,cAAc,MAAM,GAAG,eAAe;CAC5D,MAAM,QAAkB,EAAE;CAC1B,KAAK,MAAM,CAAC,KAAK,MAAM,QAAQ,SAAS,EAAE;EACxC,IAAI,MAAM,KAAK,EAAE,QAAQ,MAAM,EAC7B,MAAM,KAAK,OAAO,YAAY,EAAE,SAAS,GAAG,SAAS,SAAS,CAAC,CAAC;EAElE,MAAM,KAAK,iBAAiB,EAAE,CAAC;;CAEjC,MAAM,QAAkB,EAAE;CAC1B,IAAI,eAAe,MAAM,KAAK,OAAO,cAAc,CAAC;CACpD,MAAM,KAAK,GAAG,SAAS,MAAM,KAAK;CAClC,MAAM,KAAK,GAAG,MAAM;CACpB,MAAM,KAAK,GAAG,OAAO,GAAG;CACxB,OAAO,MAAM,KAAK,KAAK;;AAGzB,SAAS,iBAAiB,GAAuB;CAC/C,MAAM,aAAa;CACnB,MAAM,aAAa,IAAI,OAAO,WAAW;CACzC,IAAI,CAAC,EAAE,YAAY,CAAC,EAAE,QAAQ;EAC5B,IAAI,CAAC,EAAE,KAAK,SAAS,KAAK,EAAE;GAC1B,MAAM,SAAS,GAAG,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK;GACvD,IAAI,OAAO,UAAU,KAAK,OAAO;;EAEnC,MAAM,WAAW,aAAa,EAAE,MAAM,aAAa,EAAc;EACjE,OAAO,GAAG,aAAa,EAAE,KAAK,UAAU,SAAS;;CAEnD,MAAM,OAAmC,EAAE;CAC3C,IAAI,EAAE,UAAU,KAAK,KAAK;EAAE,GAAG;EAAY,GAAG,YAAY,EAAE,SAAS;EAAE,CAAC;CACxE,IAAI,EAAE,QAAQ,KAAK,KAAK;EAAE,GAAG;EAAU,GAAG,aAAa,EAAE,OAAO;EAAE,CAAC;CACnE,MAAM,YAAY,EAAE,KAAK,SAAS,KAAK,GACnC,SAAS,aAAa,EAAE,MAAM,aAAa,EAAkB,KAC7D,SAAS,EAAE;CACf,KAAK,KAAK;EAAE,GAAG;EAAS,GAAG;EAAW,CAAC;CAEvC,MAAM,QAAkB,CAAC,GAAG,aAAa,EAAE,KAAK,KAAK;CACrD,MAAM,QAAQ,IAAI,OAAO,aAAa,EAAc;CACpD,KAAK,MAAM,EAAE,GAAG,OAAO,MACrB,MAAM,KAAK,GAAG,QAAQ,EAAE,IAAI,EAAE,GAAG;CAEnC,MAAM,KAAK,GAAG,WAAW,IAAI;CAC7B,OAAO,MAAM,KAAK,KAAK;;AAGzB,SAAS,WAAW,SAAqC;CACvD,MAAM,eAAe,QAAQ,IAAI;CACjC,MAAM,gBAAgB,cAAc,MAAM,GAAG,eAAe;CAC5D,MAAM,QAAkB,EAAE;CAC1B,KAAK,MAAM,CAAC,KAAK,MAAM,QAAQ,SAAS,EAAE;EACxC,IAAI,MAAM,KAAK,EAAE,QAAQ,MAAM,EAC7B,MAAM,KAAK,OAAO,YAAY,EAAE,SAAS,GAAG,SAAS,SAAS,CAAC,CAAC;EAElE,MAAM,KAAK,kBAAkB,EAAE,CAAC;;CAElC,MAAM,QAAkB,EAAE;CAC1B,IAAI,eAAe,MAAM,KAAK,OAAO,cAAc,CAAC;CACpD,MAAM,KAAK,GAAG,OAAO,YAAY;CACjC,MAAM,KAAK,GAAG,MAAM;CACpB,MAAM,KAAK,GAAG,OAAO,GAAG;CACxB,OAAO,MAAM,KAAK,KAAK;;AAGzB,SAAS,kBAAkB,GAA6B;CACtD,MAAM,MAAM,EAAE,UAAU,KAAK,EAAE,YAAY;CAC3C,MAAM,QAAQ,IAAI,EAAE,KAAK,GAAG,IAAI;CAChC,MAAM,aAAa;CACnB,MAAM,aAAa,IAAI,OAAO,WAAW;CACzC,IAAI,EAAE,YAAY,EAAE,QAAQ;EAC1B,MAAM,OAAmC,EAAE;EAC3C,IAAI,EAAE,UAAU,KAAK,KAAK;GAAE,GAAG;GAAY,GAAG,YAAY,EAAE,SAAS;GAAE,CAAC;EACxE,IAAI,EAAE,QAAQ,KAAK,KAAK;GAAE,GAAG;GAAU,GAAG,aAAa,EAAE,OAAO;GAAE,CAAC;EACnE,MAAM,eAAe,kBAAkB,EAAE,MAAM,aAAa,EAAkB;EAC9E,KAAK,KAAK;GAAE,GAAG;GAAW,GAAG,GAAG,MAAM,GAAG,aAAa;GAAI,CAAC;EAC3D,MAAM,QAAkB,CAAC,GAAG,aAAa,EAAE,KAAK,KAAK;EACrD,MAAM,QAAQ,IAAI,OAAO,aAAa,EAAc;EACpD,KAAK,MAAM,EAAE,GAAG,OAAO,MACrB,MAAM,KAAK,GAAG,QAAQ,EAAE,IAAI,EAAE,GAAG;EAEnC,MAAM,KAAK,GAAG,WAAW,IAAI;EAC7B,OAAO,MAAM,KAAK,KAAK;;CAEzB,MAAM,eAAe,kBAAkB,EAAE,MAAM,aAAa,EAAc;CAC1E,OAAO,GAAG,aAAa,EAAE,KAAK,IAAI,MAAM,GAAG,aAAa;;AAG1D,SAAS,cAAc,OAAgC;CACrD,MAAM,eAAe,MAAM,IAAI;CAC/B,MAAM,gBAAgB,cAAc,MAAM,GAAG,eAAe;CAC5D,MAAM,QAAkB,EAAE;CAC1B,MAAM,aAAa;CACnB,MAAM,aAAa,IAAI,OAAO,WAAW;CACzC,KAAK,MAAM,CAAC,KAAK,MAAM,MAAM,SAAS,EAAE;EACtC,IAAI,MAAM,KAAK,EAAE,QAAQ,MAAM,EAC7B,MAAM,KAAK,OAAO,YAAY,EAAE,SAAS,WAAW,CAAC,CAAC;EAExD,MAAM,eAAe,kBAAkB,EAAE,MAAM,aAAa,EAAc;EAC1E,MAAM,KAAK,GAAG,aAAa,EAAE,KAAK,WAAW,aAAa,IAAI;;CAEhE,MAAM,QAAkB,EAAE;CAC1B,IAAI,eAAe,MAAM,KAAK,OAAO,cAAc,CAAC;CACpD,MAAM,KAAK,GAAG,OAAO,eAAe;CACpC,MAAM,KAAK,GAAG,MAAM;CACpB,MAAM,KAAK,GAAG,OAAO,GAAG;CACxB,OAAO,MAAM,KAAK,KAAK;;AAGzB,SAAS,eAAe,SAA+B;CACrD,MAAM,MAAgB,EAAE;CACxB,MAAM,aAAa;CACnB,MAAM,aAAa,IAAI,OAAO,WAAW;CACzC,KAAK,MAAM,CAAC,KAAK,MAAM,QAAQ,SAAS,EAAE;EACxC,IAAI,MAAM,GAAG,IAAI,KAAK,GAAG;EACzB,IAAI,EAAE,QAAQ,MAAM,EAAE,IAAI,KAAK,OAAO,EAAE,QAAQ,CAAC;EACjD,MAAM,eAAe,kBAAkB,EAAE,MAAM,aAAa,EAAc;EAC1E,IAAI,KAAK,GAAG,WAAW,kBAAkB,aAAa,GAAG;;CAE3D,OAAO,IAAI,KAAK,KAAK;;AAGvB,SAAS,aAAa,GAA8C;CAClE,MAAM,QAAkB,EAAE;CAC1B,IAAI,EAAE,MAAM,MAAM,KAAK,aAAa;CACpC,IAAI,EAAE,OAAO,MAAM,KAAK,cAAc;CACtC,OAAO,KAAK,MAAM,KAAK,KAAK,CAAC;;AAG/B,SAAS,YAAY,GAAmB;CACtC,OAAO,IAAI,EAAE,QAAQ,OAAO,OAAO,CAAC,QAAQ,MAAM,MAAM,CAAC;;AAK3D,SAAS,OAAO,GAAmB;CACjC,OAAO,EACJ,QAAQ,iBAAiB,KAAK,CAC9B,QAAQ,QAAQ,GAAG,CACnB,QAAQ,SAAS,GAAG;;AAGzB,SAAS,oBAAoB,GAAW,QAAwB;CAC9D,MAAM,QAAQ,EAAE,MAAM,KAAK;CAC3B,MAAM,QAAQ,MAAM,MAAM;CAE1B,IAAI,IAAI;CACR,OAAO,IAAI,MAAM,WAAW,MAAM,OAAO,OAAO,MAAM,OAAO,MAAO;CACpE,IAAI,MAAM,GACR,OAAO,CAAC,SAAS,OAAO,GAAG,MAAM,MAAM,EAAE,CAAC,CAAC,KAAK,KAAK;CASvD,OANgB,MAAM,KAAK,SAAS;EAClC,IAAI,KAAK,WAAW,GAAG,OAAO;EAC9B,IAAI,IAAI;EACR,OAAO,IAAI,KAAK,UAAU,IAAI,MAAM,KAAK,OAAO,OAAO,KAAK,OAAO,MAAO;EAC1E,OAAO,SAAS,KAAK,MAAM,EAAE;GAEjB,CAAC,KAAK,KAAK;;AAG3B,SAAS,YAAY,GAAW,QAAwB;CACtD,OAAO,EACJ,MAAM,KAAK,CACX,KAAK,SAAU,KAAK,SAAS,IAAI,SAAS,OAAO,KAAM,CACvD,KAAK,KAAK;;AAGf,SAAS,kBAAkB,GAAmB;CAC5C,OAAO,EAAE,QAAQ,QAAQ,IAAI,CAAC,MAAM;;AAGtC,SAAS,kBAAkB,UAAkB,aAA6B;CACxE,MAAM,QAAQ,SAAS,MAAM,KAAK;CAClC,IAAI,YAAY;CAChB,OAAO,YAAY,MAAM,UAAU,MAAM,WAAY,MAAM,KAAK,IAAI;CACpE,IAAI,WAAW,MAAM,SAAS;CAC9B,OAAO,YAAY,KAAK,MAAM,UAAW,MAAM,KAAK,IAAI;CACxD,IAAI,YAAY,UACd,OAAO;CAET,IAAI,YAAY;CAChB,KAAK,IAAI,IAAI,WAAW,KAAK,UAAU,KAAK;EAC1C,MAAM,OAAO,MAAM;EACnB,IAAI,KAAK,MAAM,KAAK,IAAI;EACxB,IAAI,IAAI;EACR,OAAO,IAAI,KAAK,WAAW,KAAK,OAAO,OAAO,KAAK,OAAO,MAAO;EACjE,IAAI,IAAI,WAAW,YAAY;;CAEjC,IAAI,CAAC,OAAO,SAAS,UAAU,EAAE,YAAY;CAC7C,MAAM,UAAoB,CAAC,GAAG;CAC9B,MAAM,eAAe,IAAI,OAAO,YAAY;CAC5C,KAAK,IAAI,IAAI,WAAW,KAAK,UAAU,KAAK;EAC1C,MAAM,OAAO,MAAM;EACnB,IAAI,KAAK,MAAM,KAAK,IAAI;GACtB,QAAQ,KAAK,GAAG;GAChB;;EAEF,QAAQ,MAAM,eAAe,KAAK,MAAM,UAAU,EAAE,QAAQ,WAAW,GAAG,CAAC;;CAE7E,QAAQ,KAAK,IAAI,OAAO,KAAK,IAAI,cAAc,GAAe,EAAE,CAAC,CAAC;CAClE,OAAO,QAAQ,KAAK,KAAK;;AAG3B,SAAS,aAAa,MAAc,aAA6B;CAC/D,MAAM,QAAQ,KAAK,MAAM,KAAK;CAC9B,IAAI,MAAM,WAAW,GAAG,OAAO;CAC/B,MAAM,YAAY,MAAM;CACxB,MAAM,OAAO,MAAM,MAAM,EAAE;CAC3B,IAAI,YAAY;CAChB,KAAK,MAAM,QAAQ,MAAM;EACvB,IAAI,KAAK,MAAM,KAAK,IAAI;EACxB,IAAI,IAAI;EACR,OAAO,IAAI,KAAK,WAAW,KAAK,OAAO,OAAO,KAAK,OAAO,MAAO;EACjE,IAAI,IAAI,WAAW,YAAY;;CAEjC,IAAI,CAAC,OAAO,SAAS,UAAU,EAAE,YAAY;CAC7C,MAAM,eAAe,IAAI,OAAO,YAAY;CAI5C,OAAO,CAAC,WAAW,GAHC,KAAK,KAAK,SAC5B,KAAK,MAAM,KAAK,KAAK,KAAK,eAAe,KAAK,MAAM,UAAU,CAE/B,CAAC,CAAC,KAAK,KAAK;;AAG/C,SAAS,sBAAsB,GAAW,KAAqB;CAC7D,IAAI,IAAI;CACR,OAAO,IAAI,KAAK,EAAE,IAAI,OAAO,MAAM;CACnC,IAAI,IAAI,KAAK,EAAE,IAAI,OAAO,MAAM;EAC9B,IAAI,IAAI,IAAI;EACZ,OAAO,IAAI,MAAM,EAAE,IAAI,OAAO,OAAO,EAAE,IAAI,OAAO,MAAO;EACzD,IAAI,IAAI,KAAK,EAAE,IAAI,OAAO,MAAM,IAAI;;CAEtC,OAAO;;AAGT,SAAS,6BAA6B,GAAW,KAAqB;CACpE,IAAI,IAAI;CACR,OAAO,IAAI,EAAE,WAAW,EAAE,OAAO,OAAO,EAAE,OAAO,MAAO;CACxD,IAAI,EAAE,OAAO,MAAM;CACnB,OAAO,IAAI,EAAE,QAAQ;EACnB,IAAI,IAAI;EACR,OAAO,IAAI,EAAE,WAAW,EAAE,OAAO,OAAO,EAAE,OAAO,MAAO;EACxD,IAAI,EAAE,OAAO,MAAM;GACjB,IAAI,IAAI;GACR;;EAEF;;CAEF,OAAO;;AAQT,SAAS,qBACP,MACA,OACA,SACA,SACA,SACA,cACe;CACf,MAAM,IAAI,+DAA+D,KAAK,KAAK,MAAM,MAAM,CAAC;CAChG,IAAI,CAAC,GAAG,OAAO;CACf,MAAM,QAAQ,EAAE;CAChB,MAAM,WAAW,QAAQ,EAAE,GAAG,SAAS;CACvC,MAAM,WAAW,WAAW,MAAM,SAAS;CAC3C,IAAI,WAAW,GAAG,OAAO;CAEzB,MAAM,UAAU,qBADF,KAAK,MAAM,WAAW,GAAG,SACG,CAAC;CAC3C,IAAI,uBAAuB;CAC3B,KAAK,MAAM,KAAK,SAAS;EACvB,MAAM,SAAS,aAAa,EAAE,KAAK;EACnC,IAAI,CAAC,QAAQ;EAIb,IAAI;EACJ,IAAI,CAAC,sBAAsB;GACzB,eAAe,EAAE,QAAQ,MAAM,GAAG,EAAE,UAAU;GAC9C,uBAAuB;SAEvB,eAAe,EAAE,QAAQ,MAAM,GAAG,EAAE,UAAU;EAEhD,aAAa,OAAO,QAAQ,SAAS,SAAS,cAAc,aAAa;;CAE3E,IAAI,SAAS,WAAW;CACxB,IAAI,KAAK,YAAY,KAAK;CAC1B,IAAI,KAAK,YAAY,MAAM;CAC3B,OAAO;;AAIT,SAAS,qBACP,MACA,OACA,SACA,SACA,UACe;CACf,MAAM,WAAW,KAAK,QAAQ,KAAK,MAAM;CACzC,IAAI,WAAW,GAAG,OAAO;CACzB,IAAI,SAAS,WAAW;CACxB,OAAO,SAAS,KAAK,UAAU,QAAQ,KAAK,KAAK,QAAS,EAAE;CAE5D,IAAI,KAAK,MAAM,QAAQ,SAAS,EAAE,KAAK,SAAS,UAAU;CAC1D,OAAO,SAAS,KAAK,UAAU,QAAQ,KAAK,KAAK,QAAS,EAAE;CAC5D,IAAI,KAAK,YAAY,KAAK,OAAO;CACjC,MAAM,YAAY;CAGlB,MAAM,KAAK,yBAAyB,KAAK,MAAM,UAAU,CAAC;CAC1D,IAAI,CAAC,IAAI,OAAO;CAIhB,MAAM,WAAW,iBAAiB,MAAM,UAAU;CAClD,IAAI,WAAW,GAAG,OAAO;CACzB,QAAQ,WAAW,KAAK;EAAE,MAAM,GAAG;EAAM;EAAS;EAAU,CAAC;CAC7D,IAAI,IAAI;CACR,IAAI,KAAK,OAAO,KAAK;CACrB,IAAI,KAAK,OAAO,MAAM;CACtB,OAAO;;AAKT,SAAS,iBAAiB,GAAW,OAAuB;CAC1D,IAAI,EAAE,WAAW,KAAK,OAAO;CAC7B,MAAM,aAAa,WAAW,GAAG,MAAM;CACvC,IAAI,aAAa,GAAG,OAAO;CAC3B,IAAI,MAAM,aAAa;CACvB,OAAO,MAAM,EAAE,UAAU,QAAQ,KAAK,EAAE,KAAM,EAAE;CAChD,IAAI,EAAE,SAAS,KAAK;EAClB;EACA,MAAM,UAAU,EAAE,QAAQ,MAAM,IAAI;EACpC,IAAI,UAAU,GAAG,OAAO;EACxB,MAAM;;CAER,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,KAAK,MAAM,OAAO;CAC3C,OAAO;CACP,OAAO,MAAM,EAAE,UAAU,UAAU,KAAK,EAAE,KAAM,EAAE;CAClD,IAAI,EAAE,SAAS,KAAK;EAClB,MAAM,QAAQ,WAAW,GAAG,IAAI;EAChC,IAAI,QAAQ,GAAG,OAAO;EACtB,OAAO,QAAQ;;CAGjB,MAAM,KAAK,EAAE,QAAQ,MAAM,IAAI;CAC/B,OAAO,KAAK,IAAI,EAAE,SAAS;;AAS7B,SAAS,qBAAqB,OAA6B;CACzD,MAAM,MAAoB,EAAE;CAC5B,IAAI,aAAa;CACjB,IAAI,aAAa;CACjB,IAAI,eAAe;CACnB,IAAI,QAAQ;CACZ,IAAI,IAAI;CACR,OAAO,IAAI,MAAM,QAAQ;EACvB,MAAM,IAAI,MAAM;EAChB,IAAI,MAAM,OAAO,MAAM,IAAI,OAAO,KAAK;GACrC,MAAM,KAAK,MAAM,QAAQ,MAAM,EAAE;GACjC,IAAI,KAAK,IAAI,MAAM,SAAS;GAC5B;;EAEF,IAAI,MAAM,OAAO,MAAM,IAAI,OAAO,KAAK;GACrC,MAAM,MAAM,MAAM,QAAQ,MAAM,IAAI,EAAE;GACtC,IAAI,MAAM,IAAI,MAAM,SAAS,MAAM;GACnC;;EAEF,IAAI,MAAM,QAAO,MAAM,OAAO,MAAM,KAAK;GACvC,IAAI,WAAW,OAAO,EAAE;GACxB;;EAEF,IAAI,MAAM,KAAK;OACV,IAAI,MAAM,KAAK;OACf,IAAI,MAAM,KAAK;OACf,IAAI,MAAM,KAAK;OACf,IAAI,MAAM,KAAK;OACf,IAAI,MAAM,KAAK;OACf,IAAI,MAAM,OAAO,eAAe,KAAK,eAAe,KAAK,iBAAiB,GAAG;GAEhF,eAAe,KADD,MAAM,MAAM,OAAO,EACR,CAAC;GAC1B,QAAQ,IAAI;;EAEd;;CAEF,IAAI,QAAQ,MAAM,QAEhB,eAAe,KADD,MAAM,MAAM,MACD,CAAC;CAE5B,OAAO;;AAGT,SAAS,eAAe,KAAmB,OAAqB;CAE9D,IAAI,OAAO;CACX,IAAI,IAAI;CACR,OAAO,IAAI,MAAM,QAAQ;EACvB,MAAM,UAAU,MAAM,QAAQ,MAAM,EAAE;EACtC,MAAM,MAAM,UAAU,IAAI,MAAM,SAAS;EACzC,MAAM,OAAO,MAAM,MAAM,GAAG,IAAI;EAChC,IAAI,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,CAAC,WAAW,KAAK,IAAI,KAAK,MAAM,CAAC,WAAW,KAAK,EAAE;GACtF,QAAQ,GAAG,KAAK;GAChB,IAAI,MAAM;GACV,IAAI,UAAU,GAAG;GACjB;;EAEF;;CAEF,MAAM,OAAO,MAAM,MAAM,EAAE,CAAC,MAAM;CAClC,IAAI,SAAS,IAAI;CACjB,IAAI,KAAK;EAAE;EAAM,SAAS;EAAM,CAAC;;AAUnC,SAAS,aAAa,MAAoC;CACxD,MAAM,IAAI,6BAA6B,KAAK,KAAK;CACjD,IAAI,CAAC,GAAG,OAAO;CACf,MAAM,OAAO,EAAE;CACf,MAAM,OAAO,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM;CAC3C,IAAI,KAAK,WAAW,IAAI,EAAE;EAIxB,MAAM,QAAQ,WAAW,MAAM,EAAE;EACjC,IAAI,QAAQ,GAAG,OAAO;EAEtB,OAAO;GAAE;GAAM,KADF,KAAK,MAAM,GAAG,MAAM,CAAC,MACV;GAAE,WAAW;GAAM;;CAE7C,OAAO;EAAE;EAAM,KAAK;EAAM,WAAW;EAAO;;AAa9C,SAAS,mBAAmB,MAA6B;CACvD,MAAM,MAAqB,EAAE;CAC7B,MAAM,UAAU,qBAAqB,KAAK;CAC1C,KAAK,MAAM,KAAK,SAAS;EACvB,MAAM,IAAI,6BAA6B,KAAK,EAAE,KAAK;EACnD,IAAI,CAAC,GAAG;EACR,MAAM,IAAI,EAAE;EACZ,MAAM,IAAI,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM;EAC1C,IAAI,MAAM,YAAY,IAAI,WAAW,cAAc,EAAE;OAChD,IAAI,MAAM,UAAU;GACvB,MAAM,SAAS,mBAAmB,EAAE;GACpC,IAAI,QAAQ,IAAI,SAAS;SACpB,IAAI,MAAM,SAAS,IAAI,QAAQ;OACjC,IAAI,MAAM,WAAW,IAAI,UAAU;OACnC,IAAI,MAAM,WAAW,IAAI,UAAU;OACnC,IAAI,MAAM,QAAQ,IAAI,OAAO;OAC7B,IAAI,MAAM,MAAM,IAAI,KAAK;;CAEhC,OAAO;;AAGT,SAAS,cAAc,GAAmB;CACxC,IAAI,EAAE,MAAM;CACZ,IAAK,EAAE,WAAW,IAAI,IAAI,EAAE,SAAS,IAAI,IAAM,EAAE,WAAW,KAAI,IAAI,EAAE,SAAS,KAAI,EACjF,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,QAAQ,QAAQ,IAAI,CAAC,QAAQ,QAAQ,KAAI,CAAC,QAAQ,SAAS,KAAK;CAExF,OAAO;;AAGT,SAAS,mBAAmB,GAA0D;CACpF,IAAI,EAAE,MAAM;CACZ,IAAI,CAAC,EAAE,WAAW,IAAI,EAAE,OAAO,KAAA;CAC/B,MAAM,QAAQ,WAAW,GAAG,EAAE;CAC9B,IAAI,QAAQ,GAAG,OAAO,KAAA;CACtB,MAAM,OAAO,EAAE,MAAM,GAAG,MAAM;CAG9B,OAAO;EAAE,MAFI,sBAAsB,KAAK,KAE3B;EAAE,OADD,uBAAuB,KAAK,KACtB;EAAE;;AAGxB,SAAS,aACP,OACA,OACA,UACA,SACA,SACA,cACM;CACN,IAAI,UAAU,QAAQ;EACpB,IAAI,MAAM,WAAW;GACnB,MAAM,IAAI,mBAAmB,MAAM,IAAI;GACvC,QAAQ,MAAM,KAAK;IACjB,MAAM,MAAM;IACZ,SAAS,EAAE;IACX,YAAY,EAAE;IACd,UAAU,EAAE;IACZ,QAAQ,EAAE;IACV;IACD,CAAC;;EAEJ;;CAEF,IAAI,UAAU,cAAc,UAAU,YAAY;EAChD,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI,MAAM,WAAW;GACnB,MAAM,IAAI,mBAAmB,MAAM,IAAI;GACvC,OAAO,WAAW,EAAE,SAAS,GAAG;GAChC,WAAW,EAAE;GACb,SAAS,EAAE;SAEX,OAAO,WAAW,MAAM,IAAI;EAG9B,CADe,UAAU,aAAa,QAAQ,WAAW,QAAQ,UAC1D,KAAK;GAAE,MAAM,MAAM;GAAM;GAAM;GAAU;GAAQ;GAAS,CAAC;EAClE;;CAEF,IAAI,UAAU,UAAU;EACtB,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI,MAAM,WAAW;GACnB,MAAM,IAAI,mBAAmB,MAAM,IAAI;GACvC,aAAa,EAAE,WAAW;GAC1B,WAAW,EAAE;GACb,SAAS,EAAE;SAEX,aAAa,MAAM;EAErB,MAAM,KAAK,yBAAyB,WAAW;EAC/C,IAAI,CAAC,IAAI;EACT,QAAQ,OAAO,KAAK;GAClB,MAAM,MAAM;GACZ,MAAM,GAAG;GACT,SAAS,GAAG;GACZ,MAAM,GAAG;GACT;GACA;GACA;GACD,CAAC;EACF;;CAEF,IAAI,UAAU,UAAU;EACtB,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI,MAAM,WAAW;GACnB,MAAM,IAAI,mBAAmB,MAAM,IAAI;GACvC,OAAO,WAAW,EAAE,SAAS,GAAG;GAChC,WAAW,EAAE;GACb,SAAS,EAAE;SAEX,OAAO,WAAW,MAAM,IAAI;EAE9B,QAAQ,YAAY,KAAK;GAAE,MAAM,MAAM;GAAM;GAAM;GAAU;GAAQ;GAAS,CAAC;EAC/E;;CAEF,IAAI,UAAU,aAAa;EACzB,IAAI,MAAM,SAAS,WAAW,MAAM,SAAS,WAAW;EAExD,MAAM,KAAK,yBADC,MAAM,YAAY,MAAM,MAAM,MAAM,IACR;EACxC,IAAI,CAAC,IAAI;EACT,QAAQ,UAAU,KAAK;GACrB,MAAM,MAAM;GACZ,MAAM,GAAG;GACT;GACA,UAAU,cAAc;GACzB,CAAC;EACF;;;AAOJ,SAAS,WAAW,GAAmB;CACrC,IAAI,EAAE,MAAM;CACZ,MAAM,IAAI,iCAAiC,KAAK,EAAE;CAClD,IAAI,CAAC,GAAG,OAAO;CACf,MAAM,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO;CACjC,IAAI,KAAK,WAAW,IAAI,EAAE;EACxB,MAAM,QAAQ,WAAW,MAAM,EAAE;EACjC,IAAI,QAAQ,GAAG,OAAO;EACtB,OAAO,KAAK,MAAM,GAAG,MAAM,CAAC,MAAM;;CAEpC,OAAO,KAAK,MAAM;;;;;;;;;;;;;;;;;;;;;AClqDpB,MAAa,gBAAgB,IAAI,IAAI;CAAC;CAAQ;CAAQ;CAAQ;CAAQ;CAAO,CAAC;;;;;;AAgB9E,SAAgB,gBAAgB,QAAmC;CACjE,IAAI;CACJ,IAAI;EACF,SAAS,QAAQ,OAAO;SAClB;EACN,OAAO;;CAET,MAAM,EAAE,WAAW,aAAa;CAChC,IAAI,QAAQ;CACZ,IAAI,SAAS,SAAS,GACpB,SAAS,KAAK,SAAS,OAAO;CAEhC,OAAO;EAAE;EAAW;EAAU;EAAO;;;;;;;;;;;;;;;AClCvC,MAAM,eAAe;AACrB,MAAM,iBAAiB;;AAYvB,MAAa,0BAA+C;CAC1D;EACE,OAAO;EACP,MAAM;EACN,kBAAkB;EAClB,QAAQ;EACR,UAAU;EACV,YAAY;GACV;GACA;GACA;GACD,CAAC,KAAK,KAAK;EACb;CACD;EACE,OAAO;EACP,MAAM;EACN,kBAAkB;EAClB,QAAQ;EACR,UAAU;EACV,YAAY;GAAC;GAAgB;GAAuC;GAAI,CAAC,KAAK,KAAK;EACpF;CACD;EACE,OAAO;EACP,MAAM;EACN,kBAAkB;EAClB,QAAQ;EACR,UAAU;EACV,YAAY;GAAC;GAAc;GAA8C;GAAI,CAAC,KAAK,KAAK;EACzF;CACD;EACE,OAAO;EACP,MAAM;EACN,kBAAkB;EAClB,QAAQ;EACR,UAAU;EACV,YAAY;GAAC;GAAgB;GAAwC;GAAI,CAAC,KAAK,KAAK;EACrF;CACD;EACE,OAAO;EACP,MAAM;EACN,kBAAkB;EAClB,QAAQ;EACR,UAAU;EACV,YAAY;GAAC;GAAoB;GAAe;GAAI,CAAC,KAAK,KAAK;EAChE;CACD;EACE,OAAO;EACP,MAAM;EACN,kBAAkB;EAClB,QAAQ;EACR,UAAU;EACV,YAAY;GACV;GACA;GACA;GACA;GACD,CAAC,KAAK,KAAK;EACb;CACD;EACE,OAAO;EACP,MAAM;EACN,kBAAkB;EAClB,QAAQ;EACR,UAAU;EACV,YAAY;GAAC;GAAY;GAAyD;GAAI,CAAC,KACrF,KACD;EACF;CACD;EACE,OAAO;EACP,MAAM;EACN,kBAAkB;EAClB,QAAQ;EACR,UAAU;EACV,YAAY;EACb;CACD;EACE,OAAO;EACP,MAAM;EACN,kBAAkB;EAClB,QAAQ;EACR,UAAU;EACV,YAAY;EACb;CACF;;AAGD,MAAa,oBAAyC;CACpD;EACE,OAAO;EACP,MAAM;EACN,kBAAkB;EAClB,QAAQ;EACR,UAAU;EACV,YAAY;EACb;CACD;EACE,OAAO;EACP,MAAM;EACN,kBAAkB;EAClB,QAAQ;EACR,UAAU;EACV,YAAY;EACb;CACD;EACE,OAAO;EACP,MAAM;EACN,kBAAkB;EAClB,QAAQ;EACR,UAAU;EACV,YAAY;EACb;CACD;EACE,OAAO;EACP,MAAM;EACN,kBAAkB;EAClB,QAAQ;EACR,UAAU;EACV,YAAY;EACb;CACD;EACE,OAAO;EACP,MAAM;EACN,kBAAkB;EAClB,QAAQ;EACR,UAAU;EACV,YAAY;EACb;CACF;;;;;;;;;;;;;;;;;ACvID,MAAM,gBAAgB,UAAU,SAAS;AAOzC,MAAM,MAAM,QAAQ,aAAa,UAAU,SAAS;AAMpD,MAAM,UACJ,QAAQ,IAAI,oBACZ,QAAQ,QAAQ,cAAc,OAAO,KAAK,IAAI,CAAC,EAAE,qCAAqC,MAAM;AAsC9F,SAAS,iBAAiB,KAAsC;CAC9D,IAAI,WAAoC;CACxC,IAAI,IAAI,SAAS,IAAI,MAAM,OAAO,GAAG;EAEnC,MAAM,YAAY,IAAI,MAAM,OAAO;EACnC,MAAM,UAAU,IAAI,MAAM,WAAW;EACrC,WAAW;GACT,OAAO;IAAE,MAAM;IAAW,WAAW,IAAI,MAAM;IAAK;GACpD,KAAK;IAAE,MAAM;IAAS,WAAW,IAAI,MAAM;IAAS;GACrD;;CAEH,OAAO;EACL,MAAM,IAAI;EACV,SAAS,IAAI;EACb,MAAM,IAAI;EACV,KAAK,IAAI;EACT,UAAU,IAAI,QAAQ;EACtB,QAAQ,IAAI,MAAM;EAClB,OAAO;EACR;;;;;;;AAQH,SAAS,gBAAgB,QAAgB,WAAmC;CAC1E,MAAM,IAAI,kBAAkB,KAAK,OAAO;CACxC,MAAM,OAAO,IAAI,KAAK,IAAI,GAAG,OAAO,SAAS,EAAE,IAAK,GAAG,GAAG,EAAE,GAAG;CAE/D,OAAO;EACL,MAAM;EACN,SAHc,IAAI,EAAE,KAAM,OAAO,MAAM,IAAI;EAI3C,UAAU;EACV,QAAQ;EACR,OAAO;GACL,OAAO;IAAE;IAAM,WAAW;IAAG;GAC7B,KAAK;IAAE;IAAM,WAAW;IAAG;GAC5B;EACF;;;;;;;;;;AAgBH,SAAgB,mBAAmB,QAAgB,UAAoC;CACrF,MAAM,cAAgC,EAAE;CACxC,IAAI,aAAa;CACjB,KAAK,MAAM,QAAQ,OAAO,MAAM,KAAK,EAAE;EACrC,MAAM,UAAU,KAAK,MAAM;EAC3B,IAAI,CAAC,SAAS,WAAW,IAAI,EAAE;EAC/B,IAAI;GACF,MAAM,MAAM,KAAK,MAAM,QAAQ;GAC/B,YAAY,KAAK,iBAAiB,IAAI,CAAC;GACvC,aAAa;UACP;;CAIV,IAAI,CAAC,YACH,YAAY,KAAK,gBAAgB,QAAQ,SAAS,CAAC;CAErD,OAAO;;;;;AAMT,eAAsB,uBACpB,QACA,UACwB;CACxB,MAAM,OACJ,SACG,QAAQ,OAAO,IAAI,CACnB,MAAM,IAAI,CACV,KAAK,EACJ,QAAQ,WAAW,GAAG,IAAI;CAEhC,IAAI;EAMF,MAAM,EAAE,WAAW,MAAM,cACvB,SACA;GAAC;GAAW;GAAS;GAAM;GAAU;GAAU;GAAmB,EAClE;GAPA,OAAO;GACP,UAAU;GACV,WAAW,IAAI,OAAO;GAKf,CACR;EACD,OAAO;GAAE,MAAM;GAAQ,aAAa,EAAE;GAAE;UACjC,KAAc;EAErB,OAAO;GAAE,MAAM;GAAM,aAAa,mBADV,IAA4B,UAAU,IACD,SAAS;GAAE;;;;;;;;;;;;;;;ACrK5E,MAAM,cAAsC;CAC1C,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,KAAK,KAAK;CAEZ,WAAW;EACT;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,KAAK,KAAK;CAEZ,SAAS;EACP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,KAAK,KAAK;CAEZ,WAAW;EACT;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,KAAK,KAAK;CAEZ,SAAS;EACP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,KAAK,KAAK;CAEZ,YAAY;EACV;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,KAAK,KAAK;CAEZ,KAAK;EACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,KAAK,KAAK;CAEZ,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,KAAK,KAAK;CAEZ,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,KAAK,KAAK;CAEZ,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,KAAK,KAAK;CAEZ,KAAK;EACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,KAAK,KAAK;CAEZ,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,KAAK,KAAK;CAEZ,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,KAAK,KAAK;CACb;AAED,SAAgB,gBACd,OACA,WACkC;CAClC,KAAK,IAAI,IAAI,WAAW,KAAK,GAAG,KAAK;EACnC,MAAM,UAAU,MAAM,GAAI,WAAW;EACrC,IAAI,eAAe,KAAK,QAAQ,EAAE,OAAO;EACzC,IAAI,kBAAkB,KAAK,QAAQ,EAAE,OAAO;EAC5C,IAAI,6BAA6B,KAAK,QAAQ,EAAE,OAAO;;CAEzD,OAAO;;AAGT,SAAgB,mBAAmB,UAAkB,WAAkC;CACrF,IAAI;CACJ,MAAM,eAAe;CACrB,QAAQ,IAAI,aAAa,KAAK,SAAS,MAAM,MAC3C,IAAI,aAAa,EAAE,SAAS,aAAa,EAAE,QAAQ,EAAE,GAAG,QACtD,OAAO,IAAI,EAAE;CAGjB,MAAM,SAAS;CACf,QAAQ,IAAI,OAAO,KAAK,SAAS,MAAM,MACrC,IAAI,aAAa,EAAE,SAAS,aAAa,EAAE,QAAQ,EAAE,GAAG,QACtD,OAAO,IAAI,EAAE;CAGjB,MAAM,UAAU;CAChB,QAAQ,IAAI,QAAQ,KAAK,SAAS,MAAM,MACtC,IAAI,aAAa,EAAE,SAAS,aAAa,EAAE,QAAQ,EAAE,GAAG,QAEtD,OAAO,IADS,EAAE,MAAM,EAAE;CAI9B,OAAO;;AAGT,SAAgB,gBAAgB,OAA8B;CAC5D,OAAO,YAAY,UAAU"}
|