eclipsa 0.1.2 → 0.1.3
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/{action-DstcBFEm.mjs → action-CgM3EJUS.mjs} +26 -2
- package/{action-DstcBFEm.mjs.map → action-CgM3EJUS.mjs.map} +1 -1
- package/{client-D1zMr8hs.mjs → client-COjBNTyt.mjs} +4 -4
- package/{client-D1zMr8hs.mjs.map → client-COjBNTyt.mjs.map} +1 -1
- package/{component-DjUmyVqL.d.mts → component-D_nEtZ69.d.mts} +2 -2
- package/core/client/mod.d.mts +2 -2
- package/core/client/mod.mjs +4 -4
- package/core/dev-client/mod.d.mts +1 -1
- package/core/dev-client/mod.mjs +4 -4
- package/core/internal.d.mts +1 -1
- package/core/internal.mjs +1 -1
- package/core/prod-client/mod.d.mts +3 -3
- package/core/prod-client/mod.mjs +4 -4
- package/{internal-Dmvt_AGE.d.mts → internal-Csbm0Qnv.d.mts} +3 -3
- package/jsx/jsx-dev-runtime.d.mts +1 -1
- package/jsx/jsx-runtime.d.mts +1 -1
- package/jsx/mod.d.mts +1 -1
- package/jsx/mod.mjs +1 -1
- package/{mod-CaLAdQcH.d.mts → mod-DLb8ple9.d.mts} +4 -4
- package/mod.d.mts +4 -4
- package/mod.mjs +6 -6
- package/mod.mjs.map +1 -1
- package/package.json +2 -2
- package/{resume-hmr-BRDojQNp.mjs → resume-hmr-qTpLc5o-.mjs} +1 -1
- package/{resume-hmr-BRDojQNp.mjs.map → resume-hmr-qTpLc5o-.mjs.map} +1 -1
- package/{signal-CosyYdtA.d.mts → signal-B7AfIKrr.d.mts} +1 -1
- package/{signal-D1WmFjmJ.mjs → signal-CJtquEfo.mjs} +2 -2
- package/{signal-D1WmFjmJ.mjs.map → signal-CJtquEfo.mjs.map} +1 -1
- package/{snapshot-BG0kq9wt.mjs → snapshot-BdY3jcVk.mjs} +1 -1
- package/{snapshot-BG0kq9wt.mjs.map → snapshot-BdY3jcVk.mjs.map} +1 -1
- package/{types-WOJV0N2h.d.mts → types-BCEY9lGp.d.mts} +1 -1
- package/{types-DDeNM8UH.d.mts → types-DKpefD_u.d.mts} +1 -1
- package/vite/mod.mjs +29 -147180
- package/vite/mod.mjs.map +1 -1
- package/web-utils/mod.d.mts +1 -1
- package/web-utils/mod.mjs +2 -2
- package/loader-DDVVUXBr.mjs +0 -2
- /package/{jsx-runtime-QIK6ADiK.d.mts → jsx-runtime-BFDPoxFn.d.mts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-DstcBFEm.mjs","names":["isPlainObject","isPlainObject","composeMiddlewares","createHandleSignal","ACTION_FORM_ATTR"],"sources":["../core/no-serialize.ts","../core/serialize.ts","../core/hooks.ts","../core/suspense.ts","../core/context.ts","../core/metadata.ts","../core/loader.ts","../core/internal.ts","../core/router-shared.ts","../core/runtime.ts","../core/action.ts"],"sourcesContent":["const noSerializeValues = new WeakSet<object>()\n\nconst canNoSerialize = (value: unknown): value is object | Function =>\n (typeof value === 'object' && value !== null) || typeof value === 'function'\n\nexport type NoSerialize<T> = T & {\n readonly __eclipsa_no_serialize__?: true\n}\n\nexport const noSerialize = <T extends object | Function | undefined>(value: T): T => {\n if (canNoSerialize(value)) {\n noSerializeValues.add(value as object)\n }\n return value\n}\n\nexport const isNoSerialize = (value: unknown): boolean =>\n canNoSerialize(value) && noSerializeValues.has(value as object)\n","import { isNoSerialize } from './no-serialize.ts'\n\nexport interface SerializedUndefined {\n __eclipsa_type: 'undefined'\n}\n\nexport interface SerializedObject {\n __eclipsa_type: 'object'\n entries: [string, SerializedValue][]\n}\n\nexport interface SerializedMap {\n __eclipsa_type: 'map'\n entries: [SerializedValue, SerializedValue][]\n}\n\nexport interface SerializedSet {\n __eclipsa_type: 'set'\n entries: SerializedValue[]\n}\n\nexport interface SerializedReference {\n __eclipsa_type: 'ref'\n data?: SerializedValue\n kind: string\n token: string\n}\n\nexport type SerializedValue =\n | SerializedUndefined\n | SerializedObject\n | SerializedMap\n | SerializedSet\n | SerializedReference\n | null\n | boolean\n | number\n | string\n | SerializedValue[]\n\nexport interface SerializeValueOptions {\n maxDepth?: number\n maxEntries?: number\n serializeReference?: (value: unknown) => SerializedReference | null\n}\n\nexport interface DeserializeValueOptions {\n deserializeReference?: (value: SerializedReference) => unknown\n maxDepth?: number\n maxEntries?: number\n}\n\nconst DEFAULT_MAX_DEPTH = 64\nconst DEFAULT_MAX_ENTRIES = 10_000\n\nconst RESERVED_KEYS = new Set(['__proto__', 'constructor', 'prototype'])\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (!value || typeof value !== 'object') {\n return false\n }\n const proto = Object.getPrototypeOf(value)\n return proto === Object.prototype || proto === null\n}\n\nconst getSerializedObjectTag = (value: object) => Object.prototype.toString.call(value)\n\nconst getSerializedConstructorName = (value: object) => {\n const constructor = value.constructor\n if (typeof constructor !== 'function') {\n return null\n }\n const name = constructor.name\n return typeof name === 'string' && name.length > 0 ? name : null\n}\n\nconst createUnsupportedObjectError = (value: object) => {\n const tag = getSerializedObjectTag(value)\n const constructorName = getSerializedConstructorName(value)\n const constructorLabel =\n constructorName && constructorName !== 'Object' && constructorName !== 'Array'\n ? ` (constructor: ${constructorName})`\n : ''\n\n return new TypeError(\n `Unsupported object ${tag}${constructorLabel}. ` +\n 'Only primitives, plain objects, arrays, Map, Set, undefined, and registered references can be serialized. ' +\n 'For runtime-only values, wrap them with noSerialize() or avoid capturing them in resumable props, state, or callbacks.',\n )\n}\n\nconst assertSafeEntryBudget = (count: number, maxEntries: number) => {\n if (count > maxEntries) {\n throw new RangeError(`Serialized value exceeds the maximum entry budget of ${maxEntries}.`)\n }\n}\n\nconst assertSafeDepth = (depth: number, maxDepth: number) => {\n if (depth > maxDepth) {\n throw new RangeError(`Serialized value exceeds the maximum depth of ${maxDepth}.`)\n }\n}\n\nconst assertSafeObject = (value: Record<string, unknown>) => {\n const descriptors = Object.getOwnPropertyDescriptors(value)\n const symbolKeys = Object.getOwnPropertySymbols(value)\n if (symbolKeys.length > 0) {\n throw new TypeError('Objects with symbol keys cannot be serialized.')\n }\n for (const [key, descriptor] of Object.entries(descriptors)) {\n if ('get' in descriptor || 'set' in descriptor) {\n throw new TypeError(`Objects with accessors cannot be serialized (${key}).`)\n }\n }\n}\n\nconst defineDecodedProperty = (target: Record<string, unknown>, key: string, value: unknown) => {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n value,\n writable: true,\n })\n}\n\nconst assertReferenceShape = (value: SerializedReference) => {\n const keys = Object.keys(value).sort()\n const allowedKeys =\n value.data === undefined\n ? ['__eclipsa_type', 'kind', 'token']\n : ['__eclipsa_type', 'data', 'kind', 'token']\n if (keys.length !== allowedKeys.length || keys.some((key, index) => key !== allowedKeys[index])) {\n throw new TypeError('Malformed serialized reference.')\n }\n if (typeof value.kind !== 'string' || value.kind.length === 0) {\n throw new TypeError('Serialized references require a non-empty kind.')\n }\n if (typeof value.token !== 'string' || value.token.length === 0) {\n throw new TypeError('Serialized references require a non-empty token.')\n }\n}\n\nconst serializeUnknown = (\n value: unknown,\n state: {\n entryCount: number\n maxDepth: number\n maxEntries: number\n serializeReference?: (value: unknown) => SerializedReference | null\n },\n stack: Set<object>,\n depth: number,\n): SerializedValue => {\n assertSafeDepth(depth, state.maxDepth)\n\n if (isNoSerialize(value)) {\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return {\n __eclipsa_type: 'undefined',\n }\n }\n\n const reference = state.serializeReference?.(value) ?? null\n if (reference) {\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return reference\n }\n\n if (value === undefined) {\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return {\n __eclipsa_type: 'undefined',\n }\n }\n if (value === null || typeof value === 'string' || typeof value === 'boolean') {\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return value\n }\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n throw new TypeError('Non-finite numbers cannot be serialized.')\n }\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return value\n }\n if (typeof value === 'function') {\n throw new TypeError('Functions cannot be serialized.')\n }\n if (typeof value === 'symbol') {\n throw new TypeError('Symbols cannot be serialized.')\n }\n if (typeof value !== 'object') {\n throw new TypeError(`Unsupported primitive ${typeof value}.`)\n }\n if (value instanceof Promise) {\n throw new TypeError('Promises cannot be serialized.')\n }\n if (value instanceof WeakMap || value instanceof WeakSet) {\n throw new TypeError('Weak collections cannot be serialized.')\n }\n if (\n value instanceof Date ||\n value instanceof RegExp ||\n value instanceof URL ||\n value instanceof Error ||\n value instanceof ArrayBuffer ||\n ArrayBuffer.isView(value)\n ) {\n throw createUnsupportedObjectError(value)\n }\n if (stack.has(value)) {\n throw new TypeError('Circular values cannot be serialized.')\n }\n\n stack.add(value)\n try {\n if (Array.isArray(value)) {\n for (let index = 0; index < value.length; index += 1) {\n if (!(index in value)) {\n throw new TypeError('Sparse arrays cannot be serialized.')\n }\n }\n state.entryCount += value.length + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return value.map((entry) => serializeUnknown(entry, state, stack, depth + 1))\n }\n if (value instanceof Map) {\n state.entryCount += value.size * 2 + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n const entries: [SerializedValue, SerializedValue][] = []\n for (const [key, entry] of value.entries()) {\n entries.push([\n serializeUnknown(key, state, stack, depth + 1),\n serializeUnknown(entry, state, stack, depth + 1),\n ])\n }\n return {\n __eclipsa_type: 'map',\n entries,\n }\n }\n if (value instanceof Set) {\n state.entryCount += value.size + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return {\n __eclipsa_type: 'set',\n entries: [...value].map((entry) => serializeUnknown(entry, state, stack, depth + 1)),\n }\n }\n if (isPlainObject(value)) {\n assertSafeObject(value)\n const descriptors = Object.entries(value)\n state.entryCount += descriptors.length + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return {\n __eclipsa_type: 'object',\n entries: descriptors.map(([key, entry]) => [\n key,\n serializeUnknown(entry, state, stack, depth + 1),\n ]),\n }\n }\n\n throw createUnsupportedObjectError(value)\n } finally {\n stack.delete(value)\n }\n}\n\nconst deserializeUnknown = (\n value: SerializedValue,\n state: {\n deserializeReference?: (value: SerializedReference) => unknown\n entryCount: number\n maxDepth: number\n maxEntries: number\n },\n depth: number,\n): unknown => {\n assertSafeDepth(depth, state.maxDepth)\n\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean' ||\n typeof value === 'number'\n ) {\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return value\n }\n if (Array.isArray(value)) {\n state.entryCount += value.length + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return value.map((entry) => deserializeUnknown(entry, state, depth + 1))\n }\n if (!value || typeof value !== 'object' || typeof value.__eclipsa_type !== 'string') {\n throw new TypeError('Malformed serialized value.')\n }\n\n switch (value.__eclipsa_type) {\n case 'undefined':\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return undefined\n case 'object': {\n const keys = Object.keys(value).sort()\n if (keys.length !== 2 || keys[0] !== '__eclipsa_type' || keys[1] !== 'entries') {\n throw new TypeError('Malformed serialized object.')\n }\n if (!Array.isArray(value.entries)) {\n throw new TypeError('Serialized object entries must be an array.')\n }\n state.entryCount += value.entries.length + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n const result: Record<string, unknown> = Object.create(null)\n for (const entry of value.entries) {\n if (!Array.isArray(entry) || entry.length !== 2 || typeof entry[0] !== 'string') {\n throw new TypeError('Malformed serialized object entry.')\n }\n const [key, child] = entry\n if (RESERVED_KEYS.has(key)) {\n defineDecodedProperty(result, key, deserializeUnknown(child, state, depth + 1))\n continue\n }\n defineDecodedProperty(result, key, deserializeUnknown(child, state, depth + 1))\n }\n return result\n }\n case 'map': {\n const keys = Object.keys(value).sort()\n if (keys.length !== 2 || keys[0] !== '__eclipsa_type' || keys[1] !== 'entries') {\n throw new TypeError('Malformed serialized map.')\n }\n if (!Array.isArray(value.entries)) {\n throw new TypeError('Serialized map entries must be an array.')\n }\n state.entryCount += value.entries.length * 2 + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n const result = new Map<unknown, unknown>()\n for (const entry of value.entries) {\n if (!Array.isArray(entry) || entry.length !== 2) {\n throw new TypeError('Malformed serialized map entry.')\n }\n result.set(\n deserializeUnknown(entry[0], state, depth + 1),\n deserializeUnknown(entry[1], state, depth + 1),\n )\n }\n return result\n }\n case 'set': {\n const keys = Object.keys(value).sort()\n if (keys.length !== 2 || keys[0] !== '__eclipsa_type' || keys[1] !== 'entries') {\n throw new TypeError('Malformed serialized set.')\n }\n if (!Array.isArray(value.entries)) {\n throw new TypeError('Serialized set entries must be an array.')\n }\n state.entryCount += value.entries.length + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return new Set(value.entries.map((entry) => deserializeUnknown(entry, state, depth + 1)))\n }\n case 'ref':\n assertReferenceShape(value)\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n if (!state.deserializeReference) {\n throw new TypeError(`Cannot deserialize reference kind \"${value.kind}\" in this context.`)\n }\n return state.deserializeReference(value)\n default:\n throw new TypeError(\n `Unknown serialized value type \"${(value as { __eclipsa_type: string }).__eclipsa_type}\".`,\n )\n }\n}\n\nexport const serializeValue = (value: unknown, options?: SerializeValueOptions): SerializedValue =>\n serializeUnknown(\n value,\n {\n entryCount: 0,\n maxDepth: options?.maxDepth ?? DEFAULT_MAX_DEPTH,\n maxEntries: options?.maxEntries ?? DEFAULT_MAX_ENTRIES,\n serializeReference: options?.serializeReference,\n },\n new Set<object>(),\n 0,\n )\n\nexport const deserializeValue = (\n value: SerializedValue,\n options?: DeserializeValueOptions,\n): unknown =>\n deserializeUnknown(\n value,\n {\n deserializeReference: options?.deserializeReference,\n entryCount: 0,\n maxDepth: options?.maxDepth ?? DEFAULT_MAX_DEPTH,\n maxEntries: options?.maxEntries ?? DEFAULT_MAX_ENTRIES,\n },\n 0,\n )\n\nexport const escapeJSONScriptText = (json: string) =>\n json\n .replaceAll('<', '\\\\u003C')\n .replaceAll('>', '\\\\u003E')\n .replaceAll('&', '\\\\u0026')\n .replaceAll('\\u2028', '\\\\u2028')\n .replaceAll('\\u2029', '\\\\u2029')\n\nexport const escapeInlineScriptText = (script: string) =>\n script\n .replaceAll('<', '\\\\u003C')\n .replaceAll('&', '\\\\u0026')\n .replaceAll('\\u2028', '\\\\u2028')\n .replaceAll('\\u2029', '\\\\u2029')\n\nexport const serializeJSONScriptContent = (value: unknown, options?: SerializeValueOptions) =>\n escapeJSONScriptText(JSON.stringify(serializeValue(value, options)))\n\nexport const parseSerializedJSON = (json: string): SerializedValue => {\n const parsed = JSON.parse(json) as unknown\n return parsed as SerializedValue\n}\n","import type { Context } from 'hono'\nimport type { Env } from 'hono/types'\nimport type { AsyncLocalStorage } from 'node:async_hooks'\nimport {\n deserializeValue,\n serializeValue,\n type DeserializeValueOptions,\n type SerializedReference,\n type SerializedValue,\n type SerializeValueOptions,\n} from './serialize.ts'\n\nexport type { DeserializeValueOptions, SerializeValueOptions, SerializedReference, SerializedValue }\n\nexport const APP_HOOKS_ELEMENT_ID = 'eclipsa-app-hooks'\n\nexport interface AppVariables {}\n\nexport interface PublicErrorShape {\n message: string\n [key: string]: unknown\n}\n\nexport interface PublicError extends PublicErrorShape {}\n\nexport interface AppHooksManifest {\n client: string | null\n}\n\nexport type RequestFetch = typeof fetch\n\nexport type BaseAppVariables = AppVariables & {\n fetch: RequestFetch\n}\n\nexport interface AppEnv extends Env {\n Variables: BaseAppVariables\n}\n\ntype EnvVariables<E extends Env> = E extends {\n Variables: infer Variables\n}\n ? Variables\n : {}\n\nexport type WithAppEnv<E extends Env = Env> = Omit<E, 'Variables'> & {\n Variables: EnvVariables<E> & BaseAppVariables\n}\n\nexport type AppContext<E extends Env = Env> = Context<WithAppEnv<E>>\n\nexport interface HandleResolveOptions {\n pathname?: string\n}\n\nexport type HandleResolve<E extends Env = Env> = (\n context?: AppContext<E>,\n options?: HandleResolveOptions,\n) => Promise<Response>\n\nexport type Handle<E extends Env = Env> = (\n context: AppContext<E>,\n resolve: HandleResolve<E>,\n) => Response | Promise<Response>\n\nexport type HandleFetch<E extends Env = Env> = (\n context: AppContext<E>,\n request: Request,\n fetch: RequestFetch,\n) => Response | Promise<Response>\n\nexport interface HandleErrorInput<E extends Env = Env> {\n context: AppContext<E>\n error: unknown\n event: 'action' | 'handle' | 'loader' | 'middleware' | 'page' | 'server' | 'transport'\n}\n\nexport type HandleError<E extends Env = Env> = (\n input: HandleErrorInput<E>,\n) => PublicError | void | Promise<PublicError | void>\n\nexport type Reroute = (input: { request: Request | null; url: URL }) => string | URL | void\n\nexport interface TransportHook {\n decode: (value: unknown) => unknown\n encode: (value: unknown) => unknown\n}\n\nexport type Transport = Record<string, TransportHook>\n\nexport type ServerInit = () => void | Promise<void>\n\nexport interface ServerHooksModule<E extends Env = Env> {\n handle?: Handle<E>\n handleError?: HandleError<E>\n handleFetch?: HandleFetch<E>\n init?: ServerInit\n}\n\nexport interface AppHooksModule {\n reroute?: Reroute\n transport?: Transport\n}\n\nexport interface ResolvedHooks<E extends Env = Env> {\n app: AppHooksModule\n server: ServerHooksModule<E>\n}\n\nconst PUBLIC_ERROR_KEY = Symbol.for('eclipsa.public-error')\n\ntype RequestContextStore = {\n context: AppContext<any>\n handleError?: HandleError<any>\n transport?: Transport\n}\n\nlet requestContextStorage: AsyncLocalStorage<RequestContextStore> | null = null\n\nlet clientHooks: AppHooksModule = {}\n\nconst isBrowserRuntime = () => typeof window !== 'undefined' && typeof document !== 'undefined'\n\ntype AsyncLocalStorageConstructor = new <T>() => AsyncLocalStorage<T>\n\nconst getAsyncLocalStorageConstructor = (): AsyncLocalStorageConstructor | null => {\n if (isBrowserRuntime() || typeof process === 'undefined') {\n return null\n }\n const asyncHooks = (\n process as typeof process & {\n getBuiltinModule?: (id: string) => unknown\n }\n ).getBuiltinModule?.('node:async_hooks') as\n | {\n AsyncLocalStorage?: AsyncLocalStorageConstructor\n }\n | undefined\n return typeof asyncHooks?.AsyncLocalStorage === 'function' ? asyncHooks.AsyncLocalStorage : null\n}\n\nconst getRequestContextStorage = () => {\n const AsyncLocalStorageCtor = getAsyncLocalStorageConstructor()\n if (!AsyncLocalStorageCtor) {\n return null\n }\n requestContextStorage ??= new AsyncLocalStorageCtor<RequestContextStore>()\n return requestContextStorage\n}\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (!value || typeof value !== 'object') {\n return false\n }\n const proto = Object.getPrototypeOf(value)\n return proto === Object.prototype || proto === null\n}\n\nconst normalizePublicError = (value: unknown): PublicError => {\n if (value && typeof value === 'object') {\n const message = (value as { message?: unknown }).message\n if (typeof message === 'string' && message.length > 0) {\n return value as PublicError\n }\n }\n if (value instanceof Error) {\n return {\n message: value.message || 'Internal Server Error',\n name: value.name,\n }\n }\n return {\n message: 'Internal Server Error',\n }\n}\n\nconst getActiveTransport = () =>\n getRequestContextStorage()?.getStore()?.transport ?? clientHooks.transport\n\nconst serializeTransportReference = (\n value: unknown,\n transport: Transport,\n): SerializedReference | null => {\n for (const [key, hook] of Object.entries(transport)) {\n const encoded = hook.encode(value)\n if (encoded === undefined) {\n continue\n }\n return {\n __eclipsa_type: 'ref',\n data: serializeValue(encoded),\n kind: 'transport',\n token: key,\n }\n }\n return null\n}\n\nconst deserializeTransportReference = (reference: SerializedReference, transport: Transport) => {\n const hook = transport[reference.token]\n if (!hook) {\n throw new TypeError(`Unknown transport \"${reference.token}\".`)\n }\n return hook.decode(reference.data === undefined ? undefined : deserializeValue(reference.data))\n}\n\nexport const serializePublicValue = (\n value: unknown,\n options?: SerializeValueOptions,\n): SerializedValue =>\n serializeValue(value, {\n ...options,\n serializeReference(candidate) {\n const resolved = options?.serializeReference?.(candidate) ?? null\n if (resolved) {\n return resolved\n }\n const transport = getActiveTransport()\n return transport ? serializeTransportReference(candidate, transport) : null\n },\n })\n\nexport const deserializePublicValue = (\n value: SerializedValue,\n options?: DeserializeValueOptions,\n): unknown =>\n deserializeValue(value, {\n ...options,\n deserializeReference(reference) {\n const resolved = options?.deserializeReference?.(reference)\n if (resolved !== undefined) {\n return resolved\n }\n const transport = getActiveTransport()\n if (reference.kind === 'transport' && transport) {\n return deserializeTransportReference(reference, transport)\n }\n if (reference.kind === 'transport') {\n throw new TypeError(`Unknown transport \"${reference.token}\".`)\n }\n if (!options?.deserializeReference) {\n throw new TypeError(\n `Cannot deserialize reference kind \"${reference.kind}\" in this context.`,\n )\n }\n return options.deserializeReference(reference)\n },\n })\n\nexport const withServerRequestContext = <T>(\n context: AppContext<any>,\n hooks: {\n handleError?: HandleError<any>\n transport?: Transport\n },\n fn: () => T,\n) => {\n const storage = getRequestContextStorage()\n if (!storage) {\n return fn()\n }\n return storage.run(\n {\n context,\n handleError: hooks.handleError,\n transport: hooks.transport,\n },\n fn,\n )\n}\n\nexport const getCurrentServerRequestContext = () =>\n getRequestContextStorage()?.getStore()?.context ?? null\n\nexport const transformCurrentPublicError = async (\n error: unknown,\n event: HandleErrorInput<any>['event'],\n) => {\n const store = getRequestContextStorage()?.getStore()\n const publicError = store\n ? await runHandleError(\n {\n handleError: store.handleError,\n },\n {\n context: store.context,\n error,\n event,\n },\n )\n : toPublicError(error)\n return markPublicError(error, publicError)\n}\n\nexport const createRequestFetch = (\n context: AppContext<any>,\n handleFetch?: HandleFetch<any>,\n): RequestFetch => {\n const baseFetch: RequestFetch = ((input: Request | URL | string, init?: RequestInit) => {\n const request = input instanceof Request ? input : new Request(input, init)\n return fetch(request)\n }) as RequestFetch\n\n if (!handleFetch) {\n return baseFetch\n }\n\n return (async (input: Request | URL | string, init?: RequestInit) => {\n const request = input instanceof Request ? input : new Request(input, init)\n return handleFetch(context, request, baseFetch)\n }) as RequestFetch\n}\n\nexport const attachRequestFetch = <E extends Env>(\n context: AppContext<E>,\n fetchImpl: RequestFetch,\n) => {\n context.set('fetch' as never, fetchImpl as never)\n}\n\nexport const resolveReroute = (\n reroute: Reroute | undefined,\n request: Request | null,\n pathname: string,\n baseUrl: string,\n) => {\n if (!reroute) {\n return pathname\n }\n const url = new URL(pathname, baseUrl)\n const resolved = reroute({ request, url })\n if (!resolved) {\n return pathname\n }\n const nextUrl = resolved instanceof URL ? resolved : new URL(String(resolved), url)\n return nextUrl.pathname\n}\n\nexport const toPublicError = (error: unknown): PublicError =>\n error &&\n typeof error === 'object' &&\n (error as Record<PropertyKey, unknown>)[PUBLIC_ERROR_KEY] &&\n isPlainObject((error as Record<PropertyKey, unknown>)[PUBLIC_ERROR_KEY])\n ? ((error as Record<PropertyKey, unknown>)[PUBLIC_ERROR_KEY] as PublicError)\n : normalizePublicError(error)\n\nexport const markPublicError = <T>(error: T, publicError: PublicError): T => {\n if (!error || (typeof error !== 'object' && typeof error !== 'function')) {\n return error\n }\n Object.defineProperty(error as Record<PropertyKey, unknown>, PUBLIC_ERROR_KEY, {\n configurable: true,\n enumerable: false,\n value: publicError,\n writable: true,\n })\n return error\n}\n\nexport const runHandleError = async (\n hooks: {\n handleError?: HandleError<any>\n },\n input: HandleErrorInput<any>,\n) => {\n const transformed = await hooks.handleError?.(input)\n return transformed ? normalizePublicError(transformed) : toPublicError(input.error)\n}\n\nexport const registerClientHooks = (hooks: AppHooksModule) => {\n clientHooks = hooks\n}\n\nexport const getClientHooks = () => clientHooks\n\nexport const resetClientHooks = () => {\n clientHooks = {}\n}\n","import type { JSX } from '../jsx/types.ts'\n\nconst PENDING_SIGNAL_ERROR_KEY = Symbol.for('eclipsa.pending-signal-error')\nconst SUSPENSE_TYPE_KEY = Symbol.for('eclipsa.suspense-type')\n\nexport interface SuspenseProps {\n children?: JSX.Element | JSX.Element[] | (() => JSX.Element | JSX.Element[])\n fallback?: JSX.Element | JSX.Element[]\n}\n\nexport interface PendingSignalError {\n [PENDING_SIGNAL_ERROR_KEY]: true\n promise: Promise<unknown>\n}\n\nexport const Suspense = ((props: SuspenseProps): JSX.Element =>\n (props.children ?? null) as JSX.Element) as ((props: SuspenseProps) => JSX.Element) & {\n [SUSPENSE_TYPE_KEY]?: true\n}\n\nObject.defineProperty(Suspense, SUSPENSE_TYPE_KEY, {\n configurable: true,\n enumerable: false,\n value: true,\n writable: false,\n})\n\nexport const createPendingSignalError = (promise: Promise<unknown>): PendingSignalError => ({\n [PENDING_SIGNAL_ERROR_KEY]: true,\n promise,\n})\n\nexport const isPendingSignalError = (value: unknown): value is PendingSignalError =>\n !!value &&\n typeof value === 'object' &&\n (value as PendingSignalError)[PENDING_SIGNAL_ERROR_KEY] === true\n\nexport const isSuspenseType = (value: unknown): value is typeof Suspense =>\n !!value && typeof value === 'function' && (value as typeof Suspense)[SUSPENSE_TYPE_KEY] === true\n","import type { JSX } from '../jsx/types.ts'\nimport type { Component } from './component.ts'\nimport {\n getRuntimeContextValue,\n hasActiveRuntimeComponent,\n type RuntimeContextToken,\n} from './runtime.ts'\n\nconst CONTEXT_PROVIDER_META_KEY = Symbol.for('eclipsa.context-provider-meta')\nconst CONTEXT_TOKEN_KEY = Symbol.for('eclipsa.context-token')\nconst CONTEXT_REGISTRY_KEY = Symbol.for('eclipsa.context-registry')\nconst CONTEXT_NEXT_ID_KEY = Symbol.for('eclipsa.context-next-id')\n\ninterface ContextProviderMeta<T = unknown> {\n id: string\n token: RuntimeContextToken<T>\n}\n\ninterface RuntimeContextState<T> {\n defaultValue: T | undefined\n hasDefault: boolean\n id: string\n token: RuntimeContextToken<T>\n}\n\ninterface RuntimeContext<T> extends Context<T> {\n [CONTEXT_TOKEN_KEY]: RuntimeContextState<T>\n}\n\ninterface ContextProviderComponent<T> extends Component<ContextProviderProps<T>> {\n [CONTEXT_PROVIDER_META_KEY]?: ContextProviderMeta<T>\n}\n\nexport interface ContextProviderProps<T> {\n children?: JSX.Element | JSX.Element[]\n value: T\n}\n\nexport interface Context<T> {\n Provider: Component<ContextProviderProps<T>>\n}\n\ninterface SerializedContextDescriptor<T = unknown> {\n defaultValue: T | undefined\n hasDefault: boolean\n id: string\n}\n\nconst getContextRegistry = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n let registry = globalRecord[CONTEXT_REGISTRY_KEY] as Map<string, Context<unknown>> | undefined\n if (!registry) {\n registry = new Map()\n globalRecord[CONTEXT_REGISTRY_KEY] = registry\n }\n return registry\n}\n\nconst allocateContextId = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const nextId = ((globalRecord[CONTEXT_NEXT_ID_KEY] as number | undefined) ?? 0) + 1\n globalRecord[CONTEXT_NEXT_ID_KEY] = nextId\n return `ctx${nextId}`\n}\n\nconst getContextStateMaybe = <T>(context: unknown): RuntimeContextState<T> | null =>\n context &&\n (typeof context === 'object' || typeof context === 'function') &&\n CONTEXT_TOKEN_KEY in (context as Record<PropertyKey, unknown>)\n ? ((context as RuntimeContext<T>)[CONTEXT_TOKEN_KEY] ?? null)\n : null\n\nconst getContextState = <T>(context: Context<T>): RuntimeContextState<T> => {\n const state = getContextStateMaybe<T>(context)\n if (!state) {\n throw new TypeError('useContext() expects a context created by createContext().')\n }\n return state\n}\n\nexport const getContextProviderMeta = (value: unknown): ContextProviderMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[CONTEXT_PROVIDER_META_KEY] as\n | ContextProviderMeta\n | undefined) ?? null\n )\n}\n\nconst registerContext = <T>(id: string, context: Context<T>) => {\n getContextRegistry().set(id, context as Context<unknown>)\n}\n\nconst createContextWithId = <T>(\n id: string,\n hasDefault: boolean,\n defaultValue: T | undefined,\n): Context<T> => {\n const token = Symbol.for(`eclipsa.context:${id}`) as RuntimeContextToken<T>\n const Provider = ((props: ContextProviderProps<T>) =>\n props.children) as ContextProviderComponent<T>\n\n Object.defineProperty(Provider, CONTEXT_PROVIDER_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n id,\n token,\n } satisfies ContextProviderMeta<T>,\n writable: false,\n })\n\n const context = {\n Provider,\n } as RuntimeContext<T>\n\n Object.defineProperty(context, CONTEXT_TOKEN_KEY, {\n configurable: false,\n enumerable: false,\n value: {\n defaultValue,\n hasDefault,\n id,\n token,\n } satisfies RuntimeContextState<T>,\n writable: false,\n })\n\n registerContext(id, context)\n return context\n}\n\nexport const createContext = <T>(...args: [defaultValue?: T]): Context<T> =>\n createContextWithId(allocateContextId(), args.length > 0, args[0])\n\nexport const getRuntimeContextReference = (value: unknown) => {\n const state = getContextStateMaybe(value)\n if (state) {\n return {\n defaultValue: state.defaultValue,\n hasDefault: state.hasDefault,\n id: state.id,\n kind: 'context' as const,\n }\n }\n\n const providerMeta = getContextProviderMeta(value)\n if (!providerMeta) {\n return null\n }\n\n const context = getContextRegistry().get(providerMeta.id)\n const contextState = context ? getContextState(context) : null\n return {\n defaultValue: contextState?.defaultValue,\n hasDefault: contextState?.hasDefault ?? false,\n id: providerMeta.id,\n kind: 'context-provider' as const,\n }\n}\n\nconst materializeContextWithDescriptor = <T>({\n defaultValue,\n hasDefault,\n id,\n}: SerializedContextDescriptor<T>): Context<T> => {\n const existing = getContextRegistry().get(id) as Context<T> | undefined\n if (existing) {\n return existing\n }\n return createContextWithId(id, hasDefault, defaultValue)\n}\n\nexport const materializeRuntimeContext = <T>(descriptor: SerializedContextDescriptor<T>) =>\n materializeContextWithDescriptor(descriptor)\n\nexport const materializeRuntimeContextProvider = <T>(descriptor: SerializedContextDescriptor<T>) =>\n materializeContextWithDescriptor(descriptor).Provider\n\nexport const useContext = <T>(context: Context<T>): T => {\n if (!hasActiveRuntimeComponent()) {\n throw new Error('useContext() can only be used while rendering a component.')\n }\n\n const state = getContextState(context)\n const resolved = getRuntimeContextValue(state.token)\n if (!resolved.found) {\n if (state.hasDefault) {\n return state.defaultValue as T\n }\n throw new Error('useContext() could not find a matching context provider.')\n }\n\n return resolved.value as T\n}\n","import { jsxDEV } from '../jsx/jsx-dev-runtime.ts'\nimport type { JSX } from '../jsx/jsx-runtime.ts'\nimport type { RouteParams } from './router-shared.ts'\n\nexport const ROUTE_METADATA_HEAD_ATTR = 'data-e-metadata'\n\nexport interface MetadataContext {\n params: RouteParams\n url: URL\n}\n\nexport interface OpenGraphMetadata {\n description?: string\n images?: string[]\n title?: string\n type?: string\n url?: string\n}\n\nexport interface TwitterMetadata {\n card?: string\n description?: string\n images?: string[]\n title?: string\n}\n\nexport interface RouteMetadata {\n canonical?: string\n description?: string\n openGraph?: OpenGraphMetadata\n title?: string\n twitter?: TwitterMetadata\n}\n\nexport type RouteMetadataValue = RouteMetadata | null | undefined\nexport type RouteMetadataResolver = (ctx: MetadataContext) => RouteMetadataValue\nexport type RouteMetadataExport = RouteMetadataValue | RouteMetadataResolver\n\nconst mergeDefined = <T extends object>(parent: T | undefined, child: T | undefined) => {\n if (!parent) {\n return child\n }\n if (!child) {\n return parent\n }\n return Object.fromEntries(\n [...new Set([...Object.keys(parent), ...Object.keys(child)])].flatMap((key) => {\n const value = (child as Record<string, unknown>)[key]\n return value === undefined\n ? [[key, (parent as Record<string, unknown>)[key]]]\n : [[key, value]]\n }),\n ) as T\n}\n\nconst mergeRouteMetadata = (parent: RouteMetadata | null, child: RouteMetadata | null) => {\n if (!parent) {\n return child\n }\n if (!child) {\n return parent\n }\n\n return {\n canonical: child.canonical ?? parent.canonical,\n description: child.description ?? parent.description,\n openGraph: mergeDefined(parent.openGraph, child.openGraph),\n title: child.title ?? parent.title,\n twitter: mergeDefined(parent.twitter, child.twitter),\n } satisfies RouteMetadata\n}\n\nexport const resolveRouteMetadata = (\n value: RouteMetadataExport,\n ctx: MetadataContext,\n): RouteMetadata | null => {\n if (!value) {\n return null\n }\n const resolved = typeof value === 'function' ? value(ctx) : value\n return resolved ?? null\n}\n\nexport const composeRouteMetadata = (\n values: RouteMetadataExport[],\n ctx: MetadataContext,\n): RouteMetadata | null =>\n values.reduce<RouteMetadata | null>(\n (current, value) => mergeRouteMetadata(current, resolveRouteMetadata(value, ctx)),\n null,\n )\n\nexport const renderRouteMetadataHead = (metadata: RouteMetadata | null): JSX.Element[] => {\n if (!metadata) {\n return []\n }\n\n const elements: JSX.Element[] = []\n\n if (metadata.title) {\n elements.push(\n jsxDEV(\n 'title',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n children: metadata.title,\n },\n null,\n true,\n {},\n ),\n )\n }\n\n if (metadata.description) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.description,\n name: 'description',\n },\n null,\n true,\n {},\n ),\n )\n }\n\n if (metadata.canonical) {\n elements.push(\n jsxDEV(\n 'link',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n href: metadata.canonical,\n rel: 'canonical',\n },\n null,\n true,\n {},\n ),\n )\n }\n\n if (metadata.openGraph?.title) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.openGraph.title,\n property: 'og:title',\n },\n null,\n true,\n {},\n ),\n )\n }\n if (metadata.openGraph?.description) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.openGraph.description,\n property: 'og:description',\n },\n null,\n true,\n {},\n ),\n )\n }\n if (metadata.openGraph?.type) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.openGraph.type,\n property: 'og:type',\n },\n null,\n true,\n {},\n ),\n )\n }\n if (metadata.openGraph?.url) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.openGraph.url,\n property: 'og:url',\n },\n null,\n true,\n {},\n ),\n )\n }\n for (const image of metadata.openGraph?.images ?? []) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: image,\n property: 'og:image',\n },\n image,\n true,\n {},\n ),\n )\n }\n\n if (metadata.twitter?.card) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.twitter.card,\n name: 'twitter:card',\n },\n null,\n true,\n {},\n ),\n )\n }\n if (metadata.twitter?.title) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.twitter.title,\n name: 'twitter:title',\n },\n null,\n true,\n {},\n ),\n )\n }\n if (metadata.twitter?.description) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.twitter.description,\n name: 'twitter:description',\n },\n null,\n true,\n {},\n ),\n )\n }\n for (const image of metadata.twitter?.images ?? []) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: image,\n name: 'twitter:image',\n },\n image,\n true,\n {},\n ),\n )\n }\n\n return elements\n}\n","import type { Env, MiddlewareHandler, Next } from 'hono/types'\nimport {\n type AppContext,\n deserializePublicValue,\n serializePublicValue,\n transformCurrentPublicError,\n type WithAppEnv,\n} from './hooks.ts'\nimport { type SerializedValue } from './serialize.ts'\nimport { registerLoaderHook, setLoaderHandleMeta, setLoaderHookMeta } from './internal.ts'\nimport {\n createDetachedRuntimeSignal,\n getRuntimeContainer,\n type RuntimeContainer,\n} from './runtime.ts'\n\nconst LOADER_REGISTRY_KEY = Symbol.for('eclipsa.loader-registry')\nconst LOADER_CONTENT_TYPE = 'application/eclipsa-loader+json'\nconst SSR_PENDING_LOADER_ERROR = Symbol.for('eclipsa.ssr-pending-loader-error')\nconst SSR_PENDING_LOADER_IDS_KEY = Symbol.for('eclipsa.ssr-pending-loader-ids')\n\ntype MiddlewareEnv<T> = T extends {\n readonly __eclipsa_loader_env__?: infer MiddlewareEnv\n}\n ? Exclude<MiddlewareEnv, undefined> extends Env\n ? WithAppEnv<Exclude<MiddlewareEnv, undefined>>\n : {}\n : T extends MiddlewareHandler<infer MiddlewareEnv, any, any>\n ? WithAppEnv<MiddlewareEnv>\n : WithAppEnv<Env>\n\ntype LoaderEnv<Middlewares extends readonly LoaderMiddleware<any>[]> =\n Middlewares extends readonly [infer Head, ...infer Tail]\n ? Tail extends readonly LoaderMiddleware<any>[]\n ? MiddlewareEnv<Head> & LoaderEnv<Tail>\n : MiddlewareEnv<Head>\n : WithAppEnv<Env>\n\nexport interface LoaderHandle<Output> {\n readonly data: Output | undefined\n readonly error: unknown\n readonly isLoading: boolean\n load: () => Promise<Output>\n}\n\nexport interface LoaderMiddleware<E extends Env = Env> extends MiddlewareHandler<E> {\n readonly __eclipsa_loader_env__?: E\n}\n\nexport type LoaderHandler<E extends Env = Env, Output = unknown> = (\n c: AppContext<E>,\n) => Output | Promise<Output>\n\ntype LoaderUse<\n _Middlewares extends readonly LoaderMiddleware<any>[],\n Output,\n> = () => LoaderHandle<Output>\n\nexport interface LoaderFactory {\n <Output>(handler: LoaderHandler<{}, Output>): LoaderUse<[], Output>\n <M1 extends LoaderMiddleware<any>, Output>(\n middleware1: M1,\n handler: LoaderHandler<LoaderEnv<[M1]>, Output>,\n ): LoaderUse<[M1], Output>\n <M1 extends LoaderMiddleware<any>, M2 extends LoaderMiddleware<any>, Output>(\n middleware1: M1,\n middleware2: M2,\n handler: LoaderHandler<LoaderEnv<[M1, M2]>, Output>,\n ): LoaderUse<[M1, M2], Output>\n <\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n M3 extends LoaderMiddleware<any>,\n Output,\n >(\n middleware1: M1,\n middleware2: M2,\n middleware3: M3,\n handler: LoaderHandler<LoaderEnv<[M1, M2, M3]>, Output>,\n ): LoaderUse<[M1, M2, M3], Output>\n <\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n M3 extends LoaderMiddleware<any>,\n M4 extends LoaderMiddleware<any>,\n Output,\n >(\n middleware1: M1,\n middleware2: M2,\n middleware3: M3,\n middleware4: M4,\n handler: LoaderHandler<LoaderEnv<[M1, M2, M3, M4]>, Output>,\n ): LoaderUse<[M1, M2, M3, M4], Output>\n <\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n M3 extends LoaderMiddleware<any>,\n M4 extends LoaderMiddleware<any>,\n M5 extends LoaderMiddleware<any>,\n Output,\n >(\n middleware1: M1,\n middleware2: M2,\n middleware3: M3,\n middleware4: M4,\n middleware5: M5,\n handler: LoaderHandler<LoaderEnv<[M1, M2, M3, M4, M5]>, Output>,\n ): LoaderUse<[M1, M2, M3, M4, M5], Output>\n}\n\ninterface RegisteredLoader {\n handler: LoaderHandler<any, unknown>\n id: string\n middlewares: LoaderMiddleware<any>[]\n}\n\ninterface LoaderJsonSuccess {\n ok: true\n value: SerializedValue\n}\n\ninterface LoaderJsonFailure {\n error: SerializedValue\n ok: false\n}\n\nconst ensurePendingSsrLoaderIds = (container: RuntimeContainer) => {\n const record = container as RuntimeContainer & {\n [SSR_PENDING_LOADER_IDS_KEY]?: Set<string>\n }\n const existing = record[SSR_PENDING_LOADER_IDS_KEY]\n if (existing instanceof Set) {\n return existing\n }\n const created = new Set<string>()\n record[SSR_PENDING_LOADER_IDS_KEY] = created\n return created\n}\n\nexport const markPendingSsrLoader = (container: RuntimeContainer, id: string) => {\n ensurePendingSsrLoaderIds(container).add(id)\n}\n\nexport const consumePendingSsrLoaderIds = (container: RuntimeContainer) => {\n const ids = [...ensurePendingSsrLoaderIds(container)]\n ensurePendingSsrLoaderIds(container).clear()\n return ids\n}\n\nexport const isPendingSsrLoaderError = (error: unknown) => error === SSR_PENDING_LOADER_ERROR\n\nconst getLoaderRegistry = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[LOADER_REGISTRY_KEY]\n if (existing instanceof Map) {\n return existing as Map<string, RegisteredLoader>\n }\n const created = new Map<string, RegisteredLoader>()\n globalRecord[LOADER_REGISTRY_KEY] = created\n return created\n}\n\nconst composeMiddlewares = async (\n c: AppContext<any>,\n middlewares: LoaderMiddleware<any>[],\n handler: LoaderHandler<any, unknown>,\n): Promise<Response | unknown> => {\n let index = -1\n const dispatch = async (nextIndex: number): Promise<Response | unknown> => {\n if (nextIndex <= index) {\n throw new Error('Loader middleware called next() multiple times.')\n }\n index = nextIndex\n const middleware = middlewares[nextIndex]\n if (!middleware) {\n return handler(c)\n }\n let nextResult: Response | unknown = undefined\n const result = await middleware(c, (async () => {\n nextResult = await dispatch(nextIndex + 1)\n }) as Next)\n if (result !== undefined) {\n return result\n }\n return nextResult\n }\n return dispatch(0)\n}\n\nconst toSerializedLoaderError = (error: unknown): SerializedValue => {\n if (error instanceof Error) {\n return serializePublicValue({\n message: error.message,\n name: error.name,\n })\n }\n try {\n return serializePublicValue(error)\n } catch {\n return serializePublicValue({\n message: 'Loader failed.',\n })\n }\n}\n\nconst normalizeLoaderValue = (value: unknown) => {\n if (value instanceof Response) {\n throw new TypeError('loader() handlers and middlewares must resolve to data, not Response.')\n }\n if (typeof ReadableStream !== 'undefined' && value instanceof ReadableStream) {\n throw new TypeError('loader() does not support ReadableStream results.')\n }\n if (value && typeof value === 'object' && Symbol.asyncIterator in value) {\n throw new TypeError('loader() does not support async iterable results.')\n }\n return value\n}\n\nconst updateLoaderSnapshot = (\n container: RuntimeContainer | null,\n id: string,\n snapshot: {\n data: unknown\n error: unknown\n loaded: boolean\n },\n) => {\n container?.loaderStates.set(id, snapshot)\n}\n\nconst createHandleSignal = <T>(\n container: RuntimeContainer | null,\n id: string,\n key: string,\n initialValue: T,\n) => {\n if (!container) {\n throw new Error('Loader handles require an active runtime container.')\n }\n return {\n detached: false,\n signal: createDetachedRuntimeSignal(container, `$loader:${id}:${key}`, initialValue),\n }\n}\n\nconst parseJsonLoaderResponse = async (response: Response) => {\n const body = (await response.json()) as LoaderJsonFailure | LoaderJsonSuccess\n if (!body || typeof body !== 'object' || typeof body.ok !== 'boolean') {\n throw new TypeError('Malformed loader response.')\n }\n if (!body.ok) {\n throw deserializePublicValue(body.error)\n }\n return deserializePublicValue(body.value)\n}\n\nconst invokeLoader = async (id: string) => {\n const response = await fetch(`/__eclipsa/loader/${encodeURIComponent(id)}`, {\n headers: {\n accept: LOADER_CONTENT_TYPE,\n },\n method: 'GET',\n })\n return parseJsonLoaderResponse(response)\n}\n\nconst resolveLoader = async (id: string, c: AppContext<any>) => {\n const loader = getLoaderRegistry().get(id)\n if (!loader) {\n throw new Error(`Unknown loader ${id}.`)\n }\n return normalizeLoaderValue(await composeMiddlewares(c, loader.middlewares, loader.handler))\n}\n\nexport const loader: LoaderFactory = (() => {\n throw new Error('loader() must be compiled by the Eclipsa analyzer before it can run.')\n}) as LoaderFactory\n\nexport function registerLoader<Output>(\n id: string,\n middlewares: readonly [],\n handler: LoaderHandler<{}, Output>,\n): void\nexport function registerLoader<M1 extends LoaderMiddleware<any>, Output>(\n id: string,\n middlewares: readonly [M1],\n handler: LoaderHandler<LoaderEnv<[M1]>, Output>,\n): void\nexport function registerLoader<\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2],\n handler: LoaderHandler<LoaderEnv<[M1, M2]>, Output>,\n): void\nexport function registerLoader<\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n M3 extends LoaderMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2, M3],\n handler: LoaderHandler<LoaderEnv<[M1, M2, M3]>, Output>,\n): void\nexport function registerLoader<\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n M3 extends LoaderMiddleware<any>,\n M4 extends LoaderMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2, M3, M4],\n handler: LoaderHandler<LoaderEnv<[M1, M2, M3, M4]>, Output>,\n): void\nexport function registerLoader<\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n M3 extends LoaderMiddleware<any>,\n M4 extends LoaderMiddleware<any>,\n M5 extends LoaderMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2, M3, M4, M5],\n handler: LoaderHandler<LoaderEnv<[M1, M2, M3, M4, M5]>, Output>,\n): void\nexport function registerLoader(\n id: string,\n middlewares: readonly LoaderMiddleware<any>[],\n handler: LoaderHandler<any, unknown>,\n) {\n getLoaderRegistry().set(id, {\n handler,\n id,\n middlewares: [...middlewares] as LoaderMiddleware<any>[],\n })\n}\n\nexport const hasLoader = (id: string) => getLoaderRegistry().has(id)\n\nexport const executeLoader = async (id: string, c: AppContext<any>) => {\n try {\n return new Response(\n JSON.stringify({\n ok: true,\n value: serializePublicValue(await resolveLoader(id, c)),\n } satisfies LoaderJsonSuccess),\n {\n headers: {\n 'content-type': LOADER_CONTENT_TYPE,\n },\n },\n )\n } catch (error) {\n const publicError = await transformCurrentPublicError(error, 'loader')\n return new Response(\n JSON.stringify({\n error: toSerializedLoaderError(publicError),\n ok: false,\n } satisfies LoaderJsonFailure),\n {\n headers: {\n 'content-type': LOADER_CONTENT_TYPE,\n },\n status: error instanceof Error && error.message.startsWith('Unknown loader ') ? 404 : 500,\n },\n )\n }\n}\n\nexport const primeLoaderState = async (\n container: RuntimeContainer,\n id: string,\n c: AppContext<any>,\n) => {\n const value = await resolveLoader(id, c)\n updateLoaderSnapshot(container, id, {\n data: value,\n error: undefined,\n loaded: true,\n })\n return value\n}\n\nexport const resolvePendingLoaders = async (container: RuntimeContainer, c: AppContext<any>) => {\n const pendingIds = consumePendingSsrLoaderIds(container)\n if (pendingIds.length === 0) {\n return false\n }\n await Promise.all(pendingIds.map((id) => primeLoaderState(container, id, c)))\n return true\n}\n\nexport const __eclipsaLoader = <const Middlewares extends readonly LoaderMiddleware<any>[], Output>(\n id: string,\n middlewares: readonly [...Middlewares],\n handler: LoaderHandler<LoaderEnv<Middlewares>, Output>,\n) => {\n if (typeof window === 'undefined') {\n getLoaderRegistry().set(id, {\n handler: handler as LoaderHandler<any, unknown>,\n id,\n middlewares: [...middlewares] as LoaderMiddleware<any>[],\n })\n }\n\n const useLoaderHandle = registerLoaderHook(\n id,\n setLoaderHookMeta(() => {\n const container = getRuntimeContainer()\n const existing = container?.loaders.get(id)\n if (existing) {\n return existing as LoaderHandle<Output>\n }\n\n const initialState = container?.loaderStates.get(id)\n if (typeof window === 'undefined' && !initialState?.loaded) {\n if (!container) {\n throw new Error(`loader(\"${id}\") was used during SSR before it was preloaded.`)\n }\n markPendingSsrLoader(container, id)\n throw SSR_PENDING_LOADER_ERROR\n }\n\n const loadingState = createHandleSignal(container, id, 'loading', false)\n const dataState = createHandleSignal<Output | undefined>(\n container,\n id,\n 'data',\n initialState?.loaded ? (initialState.data as Output) : undefined,\n )\n const errorState = createHandleSignal(container, id, 'error', initialState?.error)\n const isDetached = loadingState.detached || dataState.detached || errorState.detached\n const isLoading = loadingState.signal\n const data = dataState.signal\n const error = errorState.signal\n let loaded = initialState?.loaded ?? false\n let inFlight: Promise<Output> | null = null\n let autoRequested = false\n\n const syncSnapshot = () => {\n updateLoaderSnapshot(container ?? null, id, {\n data: data.value,\n error: error.value,\n loaded,\n })\n }\n\n const load = async () => {\n if (inFlight) {\n return inFlight\n }\n isLoading.value = true\n error.value = undefined\n syncSnapshot()\n inFlight = (async () => {\n try {\n const value = (await invokeLoader(id)) as Output\n data.value = value\n loaded = true\n return value\n } catch (caught) {\n error.value = caught\n throw caught\n } finally {\n isLoading.value = false\n syncSnapshot()\n inFlight = null\n }\n })()\n return inFlight\n }\n\n const loaderHandle = setLoaderHandleMeta(\n {\n get data() {\n return data.value\n },\n get error() {\n return error.value\n },\n get isLoading() {\n return isLoading.value\n },\n load,\n } satisfies LoaderHandle<Output>,\n id,\n )\n container?.loaders.set(id, loaderHandle)\n syncSnapshot()\n\n if (typeof window !== 'undefined' && !isDetached && !loaded && !autoRequested) {\n autoRequested = true\n queueMicrotask(() => {\n void load().catch(() => {})\n })\n }\n\n return loaderHandle\n }, id),\n ) as () => LoaderHandle<Output>\n\n return useLoaderHandle\n}\n","import type { Component, EURL } from './component.ts'\nimport type { Navigate } from './router-shared.ts'\n\nexport { __eclipsaAction } from './action.ts'\nexport { __eclipsaLoader } from './loader.ts'\nexport { getRuntimeComponentId } from './runtime.ts'\n\nconst COMPONENT_META_KEY = Symbol.for('eclipsa.component-meta')\nconst LAZY_META_KEY = Symbol.for('eclipsa.lazy-meta')\nconst NAVIGATE_META_KEY = Symbol.for('eclipsa.navigate-meta')\nconst SIGNAL_META_KEY = Symbol.for('eclipsa.signal-meta')\nconst ACTION_HOOK_META_KEY = Symbol.for('eclipsa.action-hook-meta')\nconst ACTION_HANDLE_META_KEY = Symbol.for('eclipsa.action-handle-meta')\nconst LOADER_HOOK_META_KEY = Symbol.for('eclipsa.loader-hook-meta')\nconst LOADER_HANDLE_META_KEY = Symbol.for('eclipsa.loader-handle-meta')\nconst WATCH_META_KEY = Symbol.for('eclipsa.watch-meta')\nconst ACTION_HOOK_REGISTRY_KEY = Symbol.for('eclipsa.action-hook-registry')\nconst LOADER_HOOK_REGISTRY_KEY = Symbol.for('eclipsa.loader-hook-registry')\n\nexport interface ComponentMeta {\n captures: () => unknown[]\n optimizedRoot?: boolean\n projectionSlots?: Record<string, number>\n symbol: string\n}\n\nexport interface ComponentOptions {\n optimizedRoot?: boolean\n}\n\nexport interface LazyMeta {\n captures: () => unknown[]\n eventName?: string\n symbol: string\n}\n\nexport interface WatchMeta {\n captures: () => unknown[]\n symbol: string\n}\n\nexport interface SignalMeta<T = unknown> {\n get(): T\n id: string\n set(value: T): void\n}\n\nexport interface NavigateMeta {\n readonly kind: 'navigate'\n}\n\nexport interface ActionHandleMeta {\n readonly id: string\n readonly kind: 'action'\n}\n\nexport interface ActionHookMeta {\n readonly id: string\n readonly kind: 'action-hook'\n}\n\nexport interface LoaderHandleMeta {\n readonly id: string\n readonly kind: 'loader'\n}\n\nexport interface LoaderHookMeta {\n readonly id: string\n readonly kind: 'loader-hook'\n}\n\nexport interface EventDescriptor {\n captures: () => unknown[]\n eventName?: string\n symbol: string\n}\n\nexport interface LazyReference<\n T extends (...args: any[]) => unknown = (...args: any[]) => unknown,\n> extends Function {\n (...args: Parameters<T>): ReturnType<T>\n [LAZY_META_KEY]?: LazyMeta\n}\n\nexport interface WatchReference<\n T extends (...args: any[]) => unknown = (...args: any[]) => unknown,\n> extends Function {\n (...args: Parameters<T>): ReturnType<T>\n [WATCH_META_KEY]?: WatchMeta\n}\n\nexport const __eclipsaComponent = <T>(\n component: Component<T>,\n symbol: string,\n captures: () => unknown[],\n projectionSlots?: Record<string, number>,\n options?: ComponentOptions,\n): Component<T> => {\n Object.defineProperty(component, COMPONENT_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n symbol,\n captures,\n ...(options?.optimizedRoot ? { optimizedRoot: true } : {}),\n ...(projectionSlots ? { projectionSlots } : {}),\n } satisfies ComponentMeta,\n writable: true,\n })\n return component\n}\n\nexport const __eclipsaLazy = <T extends (...args: any[]) => unknown>(\n symbol: string,\n fn: T,\n captures: () => unknown[],\n): EURL<T> => {\n const wrapped = ((...args: Parameters<T>) => fn(...args)) as LazyReference<T>\n Object.defineProperty(wrapped, LAZY_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n symbol,\n captures,\n } satisfies LazyMeta,\n writable: true,\n })\n return wrapped as EURL<T>\n}\n\nexport const __eclipsaWatch = <T extends (...args: any[]) => unknown>(\n symbol: string,\n fn: T,\n captures: () => unknown[],\n): T => {\n const wrapped = ((...args: Parameters<T>) => fn(...args)) as WatchReference<T>\n Object.defineProperty(wrapped, WATCH_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n symbol,\n captures,\n } satisfies WatchMeta,\n writable: true,\n })\n return wrapped as T\n}\n\nexport const __eclipsaEvent = (\n eventName: string,\n symbol: string,\n captures: () => unknown[],\n): EventDescriptor => ({\n eventName,\n symbol,\n captures,\n})\n\nexport const getComponentMeta = (value: unknown): ComponentMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[COMPONENT_META_KEY] as\n | ComponentMeta\n | undefined) ?? null\n )\n}\n\nexport const getLazyMeta = (value: unknown): LazyMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[LAZY_META_KEY] as LazyMeta | undefined) ??\n null\n )\n}\n\nexport const setNavigateMeta = <T extends Navigate>(target: T): T => {\n Object.defineProperty(target, NAVIGATE_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n kind: 'navigate',\n } satisfies NavigateMeta,\n writable: true,\n })\n return target\n}\n\nexport const getNavigateMeta = (value: unknown): NavigateMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[NAVIGATE_META_KEY] as\n | NavigateMeta\n | undefined) ?? null\n )\n}\n\nexport const setActionHookMeta = <T extends Function>(target: T, id: string): T => {\n Object.defineProperty(target, ACTION_HOOK_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n id,\n kind: 'action-hook',\n } satisfies ActionHookMeta,\n writable: true,\n })\n return target\n}\n\nexport const getActionHookMeta = (value: unknown): ActionHookMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[ACTION_HOOK_META_KEY] as\n | ActionHookMeta\n | undefined) ?? null\n )\n}\n\nexport const setActionHandleMeta = <T extends object>(target: T, id: string): T => {\n Object.defineProperty(target, ACTION_HANDLE_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n id,\n kind: 'action',\n } satisfies ActionHandleMeta,\n writable: true,\n })\n return target\n}\n\nexport const getActionHandleMeta = (value: unknown): ActionHandleMeta | null => {\n if (!value || typeof value !== 'object') {\n return null\n }\n return (\n ((value as Record<PropertyKey, unknown>)[ACTION_HANDLE_META_KEY] as\n | ActionHandleMeta\n | undefined) ?? null\n )\n}\n\nexport const setLoaderHookMeta = <T extends Function>(target: T, id: string): T => {\n Object.defineProperty(target, LOADER_HOOK_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n id,\n kind: 'loader-hook',\n } satisfies LoaderHookMeta,\n writable: true,\n })\n return target\n}\n\nexport const getLoaderHookMeta = (value: unknown): LoaderHookMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[LOADER_HOOK_META_KEY] as\n | LoaderHookMeta\n | undefined) ?? null\n )\n}\n\nexport const setLoaderHandleMeta = <T extends object>(target: T, id: string): T => {\n Object.defineProperty(target, LOADER_HANDLE_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n id,\n kind: 'loader',\n } satisfies LoaderHandleMeta,\n writable: true,\n })\n return target\n}\n\nexport const getLoaderHandleMeta = (value: unknown): LoaderHandleMeta | null => {\n if (!value || typeof value !== 'object') {\n return null\n }\n return (\n ((value as Record<PropertyKey, unknown>)[LOADER_HANDLE_META_KEY] as\n | LoaderHandleMeta\n | undefined) ?? null\n )\n}\n\nconst getActionHookRegistry = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[ACTION_HOOK_REGISTRY_KEY]\n if (existing instanceof Map) {\n return existing as Map<string, Function>\n }\n const created = new Map<string, Function>()\n globalRecord[ACTION_HOOK_REGISTRY_KEY] = created\n return created\n}\n\nexport const registerActionHook = <T extends Function>(id: string, hook: T): T => {\n getActionHookRegistry().set(id, hook)\n return hook\n}\n\nexport const getRegisteredActionHook = <T extends Function>(id: string): T | null =>\n (getActionHookRegistry().get(id) as T | undefined) ?? null\n\nexport const getRegisteredActionHookIds = () => [...getActionHookRegistry().keys()]\n\nconst getLoaderHookRegistry = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[LOADER_HOOK_REGISTRY_KEY]\n if (existing instanceof Map) {\n return existing as Map<string, Function>\n }\n const created = new Map<string, Function>()\n globalRecord[LOADER_HOOK_REGISTRY_KEY] = created\n return created\n}\n\nexport const registerLoaderHook = <T extends Function>(id: string, hook: T): T => {\n getLoaderHookRegistry().set(id, hook)\n return hook\n}\n\nexport const getRegisteredLoaderHook = <T extends Function>(id: string): T | null =>\n (getLoaderHookRegistry().get(id) as T | undefined) ?? null\n\nexport const getRegisteredLoaderHookIds = () => [...getLoaderHookRegistry().keys()]\n\nexport const getWatchMeta = (value: unknown): WatchMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[WATCH_META_KEY] as WatchMeta | undefined) ??\n null\n )\n}\n\nexport const getEventMeta = (value: unknown): EventDescriptor | LazyMeta | null => {\n if (value && typeof value === 'object') {\n const descriptor = value as EventDescriptor\n if (typeof descriptor.symbol === 'string' && typeof descriptor.captures === 'function') {\n return descriptor\n }\n }\n return getLazyMeta(value)\n}\n\nexport const setSignalMeta = <T>(target: { value: T }, meta: SignalMeta<T>): { value: T } => {\n Object.defineProperty(target, SIGNAL_META_KEY, {\n configurable: true,\n enumerable: false,\n value: meta,\n writable: true,\n })\n return target\n}\n\nexport const getSignalMeta = <T>(value: unknown): SignalMeta<T> | null => {\n if (!value || typeof value !== 'object') {\n return null\n }\n return (\n ((value as Record<PropertyKey, unknown>)[SIGNAL_META_KEY] as SignalMeta<T> | undefined) ?? null\n )\n}\n","export const ROUTE_LINK_ATTR = 'data-e-link'\nexport const ROUTE_DATA_ENDPOINT = '/__eclipsa/route-data'\nexport const ROUTE_DATA_REQUEST_HEADER = 'x-eclipsa-route-data'\nexport const ROUTE_MANIFEST_ELEMENT_ID = 'eclipsa-route-manifest'\nexport const ROUTE_PREFETCH_ATTR = 'data-e-link-prefetch'\nexport const ROUTE_PREFLIGHT_ENDPOINT = '/__eclipsa/route-preflight'\nexport const ROUTE_PREFLIGHT_REQUEST_HEADER = 'x-eclipsa-route-preflight'\nexport const ROUTE_REPLACE_ATTR = 'data-e-link-replace'\n\nexport interface NavigateOptions {\n replace?: boolean\n}\n\nexport interface Navigate {\n (href: string, options?: NavigateOptions): Promise<void>\n readonly isNavigating: boolean\n}\n\nexport type LinkPrefetchMode = 'focus' | 'hover' | 'intent' | 'none'\n\nexport interface RouteLocation {\n readonly hash: string\n readonly href: string\n readonly pathname: string\n readonly search: string\n}\n\nexport type RouteParams = Record<string, string | string[] | undefined>\n\nexport interface StaticPath {\n params: RouteParams\n}\n\nexport type GetStaticPaths = () => StaticPath[] | Promise<StaticPath[]>\n\nexport interface RoutePathSegment {\n kind: 'static' | 'required' | 'optional' | 'rest'\n value: string\n}\n\nexport interface RouteModuleManifest {\n error: string | null\n hasMiddleware: boolean\n layouts: string[]\n loading: string | null\n notFound: string | null\n page: string | null\n routePath: string\n segments: RoutePathSegment[]\n server: string | null\n}\n\nexport type RouteManifest = RouteModuleManifest[]\n","import type { JSX } from '../jsx/types.ts'\nimport { FRAGMENT } from '../jsx/shared.ts'\nimport { isSSRAttrValue, isSSRTemplate, jsxDEV } from '../jsx/jsx-dev-runtime.ts'\nimport { isPendingSignalError, isSuspenseType, type SuspenseProps } from './suspense.ts'\nimport type { ResumeHmrUpdatePayload } from './resume-hmr.ts'\nimport {\n deserializePublicValue,\n serializePublicValue,\n type SerializedReference,\n type SerializedValue,\n} from './hooks.ts'\nimport { escapeJSONScriptText } from './serialize.ts'\nimport type { Component } from './component.ts'\nimport type { Insertable } from './client/types.ts'\nimport {\n getContextProviderMeta,\n getRuntimeContextReference,\n materializeRuntimeContext,\n materializeRuntimeContextProvider,\n} from './context.ts'\nimport {\n ROUTE_METADATA_HEAD_ATTR,\n composeRouteMetadata,\n type RouteMetadataExport,\n} from './metadata.ts'\nimport {\n __eclipsaComponent,\n getActionHandleMeta,\n getActionHookMeta,\n getComponentMeta,\n getEventMeta,\n getRegisteredActionHookIds,\n getRegisteredActionHook,\n getRegisteredLoaderHookIds,\n getRegisteredLoaderHook,\n getLazyMeta,\n getLoaderHandleMeta,\n getLoaderHookMeta,\n getNavigateMeta,\n getSignalMeta,\n getWatchMeta,\n setNavigateMeta,\n setSignalMeta,\n type ComponentMeta,\n type EventDescriptor,\n type LazyMeta,\n type SignalMeta,\n} from './internal.ts'\nimport {\n ROUTE_DATA_ENDPOINT,\n ROUTE_LINK_ATTR,\n ROUTE_PREFETCH_ATTR,\n ROUTE_PREFLIGHT_REQUEST_HEADER,\n ROUTE_REPLACE_ATTR,\n type LinkPrefetchMode,\n type Navigate,\n type NavigateOptions,\n type RouteManifest,\n type RouteLocation,\n type RouteModuleManifest,\n type RouteParams,\n} from './router-shared.ts'\n\nconst CONTAINER_STACK_KEY = Symbol.for('eclipsa.container-stack')\nconst CONTEXT_VALUE_STACK_KEY = Symbol.for('eclipsa.context-value-stack')\nconst FRAME_STACK_KEY = Symbol.for('eclipsa.frame-stack')\nconst DIRTY_FLUSH_PROMISE_KEY = Symbol.for('eclipsa.dirty-flush-promise')\nconst ASYNC_SIGNAL_SNAPSHOT_CACHE_KEY = Symbol.for('eclipsa.async-signal-snapshot-cache')\nconst STANDALONE_SIGNAL_ID_KEY = Symbol.for('eclipsa.standalone-signal-id')\nconst ACTION_FORM_ATTR = 'data-e-action-form'\nconst ROUTER_EVENT_STATE_KEY = Symbol.for('eclipsa.router-event-state')\nconst ROUTER_CURRENT_PATH_SIGNAL_ID = '$router:path'\nconst ROUTER_CURRENT_URL_SIGNAL_ID = '$router:url'\nconst ROUTER_IS_NAVIGATING_SIGNAL_ID = '$router:isNavigating'\nconst ROUTER_LINK_BOUND_KEY = Symbol.for('eclipsa.router-link-bound')\nconst ROUTER_LINK_PREFETCH_BOUND_KEY = Symbol.for('eclipsa.router-link-prefetch-bound')\nconst ROUTE_NOT_FOUND_KEY = Symbol.for('eclipsa.route-not-found')\nconst ROUTE_PARAMS_PROP = '__eclipsa_route_params'\nconst ROUTE_ERROR_PROP = '__eclipsa_route_error'\nconst ROUTE_SLOT_ROUTE_KEY = Symbol.for('eclipsa.route-slot-route')\nconst RESUME_CONTAINERS_KEY = Symbol.for('eclipsa.resume-containers')\nexport const RESUME_STATE_ELEMENT_ID = 'eclipsa-resume'\nexport const RESUME_FINAL_STATE_ELEMENT_ID = 'eclipsa-resume-final'\nexport const SCOPED_STYLE_ATTR = 'data-e-scope'\nconst ROOT_COMPONENT_ID = '$root'\nconst SUSPENSE_COMPONENT_SYMBOL = '$suspense'\nconst ROUTE_SLOT_TYPE = 'route-slot'\nconst PROJECTION_SLOT_TYPE = 'projection-slot'\nconst CONTAINER_ID_KEY = Symbol.for('eclipsa.runtime-container-id')\nconst RENDER_COMPONENT_TYPE_KEY = Symbol.for('eclipsa.render-component-type')\nconst RENDER_REFERENCE_KIND = 'render'\nconst REF_SIGNAL_ATTR = 'data-e-ref'\nconst STREAM_STATE_KEY = '__eclipsa_stream'\nconst PENDING_RESUME_LINK_KEY = '__eclipsa_pending_route_link'\nconst BIND_VALUE_PROP = 'bind:value'\nconst BIND_CHECKED_PROP = 'bind:checked'\nconst BIND_VALUE_ATTR = 'data-e-bind-value'\nconst BIND_CHECKED_ATTR = 'data-e-bind-checked'\nconst CLIENT_INSERT_OWNER_SYMBOL = '$client-insert-root'\nconst CLIENT_INSERT_OWNER_ID_PREFIX = '$insert:'\nconst DOM_TEXT_NODE = 3\nconst DOM_COMMENT_NODE = 8\nconst DOM_SHOW_COMMENT = 0x80\ntype DomConstructorName =\n | 'Element'\n | 'HTMLElement'\n | 'HTMLInputElement'\n | 'HTMLSelectElement'\n | 'HTMLTextAreaElement'\n | 'HTMLAnchorElement'\n | 'HTMLFormElement'\n\nexport interface ResumeComponentPayload {\n optimizedRoot?: boolean\n props: SerializedValue\n projectionSlots?: Record<string, number>\n scope: string\n signalIds: string[]\n symbol: string\n visibleCount: number\n watchCount: number\n}\n\ninterface ResumeWatchPayload {\n componentId: string\n mode: WatchMode\n scope: string\n signals: string[]\n symbol: string\n}\n\ninterface ResumeActionPayload {\n error: SerializedValue\n input: SerializedValue\n result: SerializedValue\n}\n\ninterface ResumeVisiblePayload {\n componentId: string\n scope: string\n symbol: string\n}\n\nexport interface ResumeLoaderPayload {\n data: SerializedValue\n error: SerializedValue\n loaded: boolean\n}\n\ninterface LoaderSnapshot {\n data: unknown\n error: unknown\n loaded: boolean\n}\n\nexport interface ResumePayload {\n actions: Record<string, ResumeActionPayload>\n components: Record<string, ResumeComponentPayload>\n loaders: Record<string, ResumeLoaderPayload>\n scopes: Record<string, SerializedValue[]>\n signals: Record<string, SerializedValue>\n subscriptions: Record<string, string[]>\n symbols: Record<string, string>\n visibles: Record<string, ResumeVisiblePayload>\n watches: Record<string, ResumeWatchPayload>\n}\n\ninterface StreamedSuspenseChunk {\n boundaryId: string\n payloadScriptId: string\n templateId: string\n}\n\ninterface StreamState {\n enqueue: (chunk: StreamedSuspenseChunk) => void\n pending: StreamedSuspenseChunk[]\n process?: () => Promise<void>\n processing?: Promise<void> | null\n}\n\ninterface SignalRecord<T = unknown> {\n effects: Set<ReactiveEffect>\n handle: {\n value: T\n }\n id: string\n subscribers: Set<string>\n value: T\n}\n\ntype CleanupCallback = () => void\n\nexport type RuntimeContextToken<T = unknown> = symbol & {\n __eclipsa_context_type__?: T\n}\n\ninterface RuntimeContextValue {\n token: RuntimeContextToken\n value: unknown\n}\n\nconst getDomContexts = (value: unknown): Array<Window | typeof globalThis> => {\n const contexts: Array<Window | typeof globalThis> = []\n if (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n return contexts\n }\n if ('ownerDocument' in value) {\n const ownerDocument = (value as { ownerDocument?: Document | null }).ownerDocument\n if (ownerDocument?.defaultView) {\n contexts.push(ownerDocument.defaultView)\n }\n }\n if ('defaultView' in value) {\n const defaultView = (value as { defaultView?: Window | null }).defaultView\n if (defaultView) {\n contexts.push(defaultView)\n }\n }\n contexts.push(globalThis)\n return contexts\n}\n\nconst isDomInstance = <T>(value: unknown, name: DomConstructorName): value is T => {\n for (const context of getDomContexts(value)) {\n const ctor = (context as Record<DomConstructorName, unknown>)[name]\n if (typeof ctor === 'function' && value instanceof ctor) {\n return true\n }\n }\n return false\n}\n\nconst hasOwnerDocument = (value: unknown): value is ParentNode & { ownerDocument: Document } =>\n !!value &&\n (typeof value === 'object' || typeof value === 'function') &&\n 'ownerDocument' in value &&\n !!(value as { ownerDocument?: Document | null }).ownerDocument\n\nconst isElementNode = (value: unknown): value is Element =>\n isDomInstance<Element>(value, 'Element') || isDomInstance<HTMLElement>(value, 'HTMLElement')\n\nconst isHTMLElementNode = (value: unknown): value is HTMLElement =>\n isDomInstance<HTMLElement>(value, 'HTMLElement')\n\nconst isHTMLInputElementNode = (value: unknown): value is HTMLInputElement =>\n isDomInstance<HTMLInputElement>(value, 'HTMLInputElement')\n\nconst isHTMLSelectElementNode = (value: unknown): value is HTMLSelectElement =>\n isDomInstance<HTMLSelectElement>(value, 'HTMLSelectElement')\n\nconst isHTMLTextAreaElementNode = (value: unknown): value is HTMLTextAreaElement =>\n isDomInstance<HTMLTextAreaElement>(value, 'HTMLTextAreaElement')\n\nconst isTextEntryElement = (value: unknown): value is HTMLInputElement | HTMLTextAreaElement =>\n isHTMLInputElementNode(value) || isHTMLTextAreaElementNode(value)\n\nconst isHTMLAnchorElementNode = (value: unknown): value is HTMLAnchorElement =>\n isDomInstance<HTMLAnchorElement>(value, 'HTMLAnchorElement')\n\nconst isHTMLFormElementNode = (value: unknown): value is HTMLFormElement =>\n isDomInstance<HTMLFormElement>(value, 'HTMLFormElement')\n\ninterface CleanupSlot {\n callbacks: CleanupCallback[]\n}\n\ninterface ComponentState {\n active: boolean\n activateModeOnFlush?: 'patch' | 'replace'\n didMount: boolean\n end?: Comment\n id: string\n mountCleanupSlots: CleanupSlot[]\n optimizedRoot?: boolean\n parentId: string | null\n prefersEffectOnlyLocalSignalWrites?: boolean\n props: unknown\n projectionSlots: Record<string, number> | null\n rawProps?: Record<string, unknown> | null\n renderEffectCleanupSlot: CleanupSlot\n reuseExistingDomOnActivate?: boolean\n reuseProjectionSlotDomOnActivate?: boolean\n scopeId: string\n signalIds: string[]\n start?: Comment\n symbol: string\n suspensePromise?: Promise<unknown> | null\n visibleCount: number\n watchCount: number\n}\n\ninterface RenderFrame {\n childCursor: number\n component: ComponentState\n container: RuntimeContainer\n effectCleanupSlot: CleanupSlot\n insertCursor: number\n mountCallbacks: Array<() => void>\n projectionState: {\n counters: Map<string, number>\n reuseExistingDom: boolean\n reuseProjectionSlotDom: boolean\n }\n visitedDescendants: Set<string>\n mode: 'client' | 'ssr'\n scopedStyles: ScopedStyleEntry[]\n signalCursor: number\n visibleCursor: number\n watchCursor: number\n}\n\nexport interface ClientInsertOwner {\n childIndex: number\n componentId: string\n projectionCounters: Array<[string, number]>\n}\n\ninterface ScopedStyleEntry {\n attributes: Record<string, unknown>\n cssText: string\n}\n\ninterface RouterEventState {\n originalPreventDefault: () => void\n routerPrevented: boolean\n userPrevented: boolean\n}\n\ninterface RouterState {\n currentPath: { value: string }\n currentRoute: LoadedRoute | null\n currentUrl: { value: string }\n defaultTitle: string\n isNavigating: { value: boolean }\n loadedRoutes: Map<string, LoadedRoute>\n location: RouteLocation\n manifest: RouteManifest\n navigate: Navigate\n prefetchedLoaders: Map<string, Map<string, LoaderSnapshot>>\n routeModuleBusts: Map<string, number>\n routePrefetches: Map<string, Promise<RoutePrefetchResult>>\n sequence: number\n}\n\nexport interface RuntimeContainer {\n actions: Map<string, unknown>\n actionStates: Map<\n string,\n {\n error: unknown\n input: unknown\n result: unknown\n }\n >\n components: Map<string, ComponentState>\n dirty: Set<string>\n dirtyFlushQueued: boolean\n doc?: Document\n eventDispatchPromise: Promise<void> | null\n id: string\n imports: Map<string, Promise<RuntimeSymbolModule>>\n interactivePrefetchCheckQueued: boolean\n loaderStates: Map<\n string,\n {\n data: unknown\n error: unknown\n loaded: boolean\n }\n >\n loaders: Map<string, unknown>\n nextComponentId: number\n nextElementId: number\n nextScopeId: number\n nextSignalId: number\n pendingSuspensePromises: Set<Promise<unknown>>\n resumeReadyPromise: Promise<void> | null\n rootChildCursor: number\n rootElement?: HTMLElement\n router: RouterState | null\n asyncSignalStates: Map<string, unknown>\n asyncSignalSnapshotCache: Map<string, unknown>\n atoms: WeakMap<object, string>\n nextAtomId: number\n scopes: Map<string, SerializedValue[]>\n signals: Map<string, SignalRecord>\n symbols: Map<string, string>\n visibilityListenersCleanup: (() => void) | null\n visibilityCheckQueued: boolean\n visibles: Map<string, VisibleState>\n watches: Map<string, WatchState>\n}\n\ninterface RuntimeSymbolModule {\n default: (scope: unknown[], propsOrArg?: unknown, ...args: unknown[]) => unknown\n}\n\ninterface ReactiveEffect {\n fn: () => void\n signals: Set<SignalRecord>\n}\n\nconst COMPONENT_BOUNDARY_PROPS_CHANGED = Symbol.for('eclipsa.component-boundary-props-changed')\nconst COMPONENT_BOUNDARY_SYMBOL_CHANGED = Symbol.for('eclipsa.component-boundary-symbol-changed')\n\nconst isMissingGeneratedScopeReferenceError = (error: unknown): error is ReferenceError =>\n error instanceof ReferenceError && /\\b__scope\\b/.test(error.message)\n\nconst toRuntimeError = (error: unknown) =>\n error instanceof Error ? error : new Error(typeof error === 'string' ? error : String(error))\n\nconst areShallowEqualRenderProps = (\n previous: Record<string, unknown> | null,\n next: Record<string, unknown> | null,\n) => {\n if (previous === next) {\n return true\n }\n if (!previous || !next) {\n return !previous && !next\n }\n\n const previousKeys = Object.keys(previous)\n const nextKeys = Object.keys(next)\n if (previousKeys.length !== nextKeys.length) {\n return false\n }\n\n for (const key of previousKeys) {\n if (!Object.hasOwn(next, key) || !Object.is(previous[key], next[key])) {\n return false\n }\n }\n\n for (const hiddenKey of [ROUTE_PARAMS_PROP, ROUTE_ERROR_PROP] as const) {\n const previousHas = Object.hasOwn(previous, hiddenKey)\n const nextHas = Object.hasOwn(next, hiddenKey)\n if (previousHas !== nextHas) {\n return false\n }\n if (previousHas && !Object.is(previous[hiddenKey], next[hiddenKey])) {\n return false\n }\n }\n\n return true\n}\n\nconst wrapGeneratedScopeReferenceError = (\n error: unknown,\n context: {\n componentId?: string\n phase: string\n symbolId?: string\n },\n) => {\n const baseError = toRuntimeError(error)\n if (!isMissingGeneratedScopeReferenceError(baseError)) {\n return baseError\n }\n\n const location = [\n context.componentId ? `component \"${context.componentId}\"` : null,\n context.symbolId ? `symbol \"${context.symbolId}\"` : null,\n ]\n .filter(Boolean)\n .join(', ')\n\n const wrapped = new Error(\n `Eclipsa runtime failed while ${context.phase}${location ? ` ${location}` : ''}. The generated resumable symbol referenced \"__scope\" outside its valid scope. This usually means a same-file helper was transformed incorrectly during symbol compilation. Inline that helper into the component as a workaround. Original error: ${baseError.message}`,\n { cause: baseError },\n )\n wrapped.name = 'EclipsaRuntimeError'\n return wrapped\n}\n\ntype WatchDependency = { value: unknown } | (() => unknown)\ntype EffectOptions = {\n dependencies?: WatchDependency[]\n errorLabel?: string\n untracked?: boolean\n}\ntype WatchMode = 'dynamic' | 'explicit'\ntype RouteRenderer = (props: unknown) => unknown\n\ninterface LoadedRouteModule {\n metadata: RouteMetadataExport | null\n renderer: RouteRenderer\n symbol: string | null\n url: string\n}\n\ninterface LoadedRoute {\n entry: RouteModuleManifest\n error: unknown\n layouts: LoadedRouteModule[]\n params: RouteParams\n pathname: string\n page: LoadedRouteModule\n render: RouteRenderer\n}\n\ninterface RoutePreflightSuccess {\n ok: true\n}\n\ninterface RoutePreflightRedirect {\n location: string\n ok: false\n}\n\ninterface RoutePreflightDocumentFallback {\n document: true\n ok: false\n}\n\ntype RoutePreflightResult =\n | RoutePreflightSuccess\n | RoutePreflightRedirect\n | RoutePreflightDocumentFallback\n\ninterface RouteDataSuccess {\n finalHref: string\n finalPathname: string\n kind: 'page' | 'not-found'\n loaders: Record<string, ResumeLoaderPayload>\n ok: true\n}\n\ninterface RouteDataRedirect {\n location: string\n ok: false\n}\n\ninterface RouteDataDocumentFallback {\n document: true\n ok: false\n}\n\ntype RouteDataResponse = RouteDataSuccess | RouteDataRedirect | RouteDataDocumentFallback\ntype RoutePrefetchResult = RouteDataResponse\n\ninterface RouteSlotValue {\n __eclipsa_type: typeof ROUTE_SLOT_TYPE\n pathname: string\n startLayoutIndex: number\n}\n\ninterface RouteSlotCarrier extends RouteSlotValue {\n [ROUTE_SLOT_ROUTE_KEY]?: LoadedRoute\n}\n\ninterface ProjectionSlotValue {\n __eclipsa_type: typeof PROJECTION_SLOT_TYPE\n componentId: string\n name: string\n occurrence: number\n source: unknown\n}\n\ninterface WatchState {\n cleanupSlot: CleanupSlot\n componentId: string\n effect: ReactiveEffect\n id: string\n mode: WatchMode\n pending: Promise<void> | null\n run: (() => void) | null\n scopeId: string\n symbol: string\n track: (() => void) | null\n}\n\ninterface VisibleState {\n cleanupSlot: CleanupSlot\n componentId: string\n done: boolean\n id: string\n pending: Promise<void> | null\n run: (() => void | Promise<void>) | null\n scopeId: string\n symbol: string\n}\n\ninterface PendingLinkNavigation {\n href: string\n replace: boolean\n state: RouterEventState\n}\n\ninterface PendingResumeLinkNavigation {\n href: string\n replace: boolean\n}\n\ntype NavigationMode = 'pop' | 'push' | 'replace'\n\ntype RenderObject = Extract<\n JSX.Element,\n {\n isStatic: boolean\n props: Record<string, unknown>\n type: JSX.Type\n }\n>\n\ninterface RenderComponentTypeRef {\n scopeId: string\n symbol: string\n}\n\ninterface ForValue<T = unknown> {\n __e_for: true\n arr: readonly T[]\n fallback?: JSX.Element\n fn: (e: T, i: number) => JSX.Element\n key?: (e: T, i: number) => string | number | symbol\n}\n\ninterface ShowValue<T = unknown> {\n __e_show: true\n children: JSX.Element | ((value: T) => JSX.Element)\n fallback?: JSX.Element | ((value: T) => JSX.Element)\n when: T\n}\n\nconst resolvedRuntimeSymbols = new WeakMap<RuntimeContainer, Map<string, RuntimeSymbolModule>>()\nconst managedElementAttributes = new WeakMap<Element, Set<string>>()\nconst listNodeChildren = (\n node: { childNodes?: Iterable<Node> | ArrayLike<Node> } | null | undefined,\n) => Array.from((node?.childNodes ?? []) as Iterable<Node> | ArrayLike<Node>)\n\nconst getElementAttributeNames = (element: Element): string[] => {\n const withGetAttributeNames = element as Element & { getAttributeNames?: () => string[] }\n if (typeof withGetAttributeNames.getAttributeNames === 'function') {\n return withGetAttributeNames.getAttributeNames.call(element)\n }\n\n const attributes = (\n element as Element & {\n attributes?: Map<string, string> | ArrayLike<Attr | { name?: string }>\n }\n ).attributes\n if (attributes instanceof Map) {\n return [...attributes.keys()]\n }\n if (attributes && typeof attributes.length === 'number') {\n const names: string[] = []\n for (let index = 0; index < attributes.length; index += 1) {\n const attribute = attributes[index]\n if (attribute && typeof attribute === 'object' && 'name' in attribute) {\n const name = attribute.name\n if (typeof name === 'string') {\n names.push(name)\n }\n }\n }\n return names\n }\n\n return []\n}\n\nconst hasElementAttribute = (element: Element, name: string): boolean | null => {\n const withHasAttribute = element as Element & { hasAttribute?: (name: string) => boolean }\n if (typeof withHasAttribute.hasAttribute === 'function') {\n return withHasAttribute.hasAttribute.call(element, name)\n }\n\n const withGetAttribute = element as Element & { getAttribute?: (name: string) => string | null }\n if (typeof withGetAttribute.getAttribute === 'function') {\n return withGetAttribute.getAttribute.call(element, name) !== null\n }\n\n const attributes = (element as Element & { attributes?: Map<string, string> }).attributes\n if (attributes instanceof Map) {\n return attributes.has(name)\n }\n\n return null\n}\nconst insertMarkerNodeCounts = new WeakMap<Comment, number>()\n\nconst getResolvedRuntimeSymbols = (container: RuntimeContainer) => {\n const existing = resolvedRuntimeSymbols.get(container)\n if (existing) {\n return existing\n }\n const created = new Map<string, RuntimeSymbolModule>()\n resolvedRuntimeSymbols.set(container, created)\n return created\n}\n\nexport const invalidateRuntimeSymbolCaches = (\n container: RuntimeContainer,\n symbolIds: Iterable<string>,\n) => {\n const resolved = getResolvedRuntimeSymbols(container)\n for (const symbolId of symbolIds) {\n container.imports.delete(symbolId)\n resolved.delete(symbolId)\n }\n}\n\nconst cloneManagedAttributeSnapshot = (element: Element) =>\n new Set(getElementAttributeNames(element))\n\nconst replaceManagedAttributeSnapshot = (element: Element, names: Iterable<string>) => {\n managedElementAttributes.set(element, new Set(names))\n}\n\nconst getManagedAttributeSnapshot = (element: Element) =>\n managedElementAttributes.get(element) ?? null\n\nexport const syncManagedAttributeSnapshot = (element: Element, name: string) => {\n const snapshot = getManagedAttributeSnapshot(element) ?? new Set<string>()\n const hasAttribute = hasElementAttribute(element, name)\n if (hasAttribute === true) {\n snapshot.add(name)\n } else if (hasAttribute === false) {\n snapshot.delete(name)\n } else {\n snapshot.add(name)\n }\n replaceManagedAttributeSnapshot(element, snapshot)\n}\n\nexport const rememberManagedAttributesForNode = (node: Node | null | undefined) => {\n if (!node) {\n return\n }\n\n const visit = (current: Node) => {\n if (isElementNode(current)) {\n replaceManagedAttributeSnapshot(current, cloneManagedAttributeSnapshot(current))\n }\n for (const child of listNodeChildren(current)) {\n visit(child)\n }\n }\n\n visit(node)\n}\n\nexport const rememberManagedAttributesForNodes = (nodes: Iterable<Node>) => {\n for (const node of nodes) {\n rememberManagedAttributesForNode(node)\n }\n}\n\nexport const rememberInsertMarkerRange = (\n marker: Node | null | undefined,\n nodes: Iterable<Node>,\n) => {\n if (!(typeof Comment !== 'undefined' ? marker instanceof Comment : marker?.nodeType === 8)) {\n return\n }\n\n let count = 0\n for (const _node of nodes) {\n count += 1\n }\n insertMarkerNodeCounts.set(marker as Comment, count)\n}\n\nconst withResumeHmrTimestamp = (url: string, timestamp: number) => {\n const parsed = new URL(url, 'http://localhost')\n parsed.searchParams.set('t', timestamp.toString())\n return `${parsed.pathname}${parsed.search}${parsed.hash}`\n}\n\nconst canBustRuntimeSymbolUrl = (url: string) => parseSymbolIdFromUrl(url) !== null\n\nexport const bustRuntimeSymbolUrls = (\n container: RuntimeContainer,\n symbolIds: Iterable<string>,\n timestamp: number,\n) => {\n for (const symbolId of symbolIds) {\n const current = container.symbols.get(symbolId)\n if (!current || !canBustRuntimeSymbolUrl(current)) {\n continue\n }\n container.symbols.set(symbolId, withResumeHmrTimestamp(current, timestamp))\n }\n}\n\nconst isRenderObject = (value: unknown): value is RenderObject =>\n typeof value === 'object' && value !== null && 'type' in value && 'props' in value\n\nconst getContainerStack = (): RuntimeContainer[] => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[CONTAINER_STACK_KEY]\n if (Array.isArray(existing)) {\n return existing as RuntimeContainer[]\n }\n const created: RuntimeContainer[] = []\n globalRecord[CONTAINER_STACK_KEY] = created\n return created\n}\n\nconst getContextValueStack = (): RuntimeContextValue[] => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[CONTEXT_VALUE_STACK_KEY]\n if (Array.isArray(existing)) {\n return existing as RuntimeContextValue[]\n }\n const created: RuntimeContextValue[] = []\n globalRecord[CONTEXT_VALUE_STACK_KEY] = created\n return created\n}\n\nconst getFrameStack = (): RenderFrame[] => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[FRAME_STACK_KEY]\n if (Array.isArray(existing)) {\n return existing as RenderFrame[]\n }\n const created: RenderFrame[] = []\n globalRecord[FRAME_STACK_KEY] = created\n return created\n}\n\nconst getResumeContainers = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[RESUME_CONTAINERS_KEY]\n if (existing instanceof Set) {\n return existing as Set<RuntimeContainer>\n }\n const created = new Set<RuntimeContainer>()\n globalRecord[RESUME_CONTAINERS_KEY] = created\n return created\n}\n\nconst getCurrentContainer = (): RuntimeContainer | null => {\n const stack = getContainerStack()\n return stack.length > 0 ? stack[stack.length - 1] : null\n}\n\nconst getAsyncSignalSnapshotCache = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[ASYNC_SIGNAL_SNAPSHOT_CACHE_KEY]\n if (existing instanceof Map) {\n return existing as Map<string, unknown>\n }\n const created = new Map<string, unknown>()\n globalRecord[ASYNC_SIGNAL_SNAPSHOT_CACHE_KEY] = created\n return created\n}\n\nexport const readAsyncSignalSnapshot = (\n id: string,\n container: RuntimeContainer | null = getCurrentContainer(),\n) =>\n container?.asyncSignalStates.get(id) ??\n container?.asyncSignalSnapshotCache.get(id) ??\n getAsyncSignalSnapshotCache().get(id)\n\nexport const writeAsyncSignalSnapshot = (\n id: string,\n value: unknown,\n container: RuntimeContainer | null = getCurrentContainer(),\n) => {\n container?.asyncSignalStates.set(id, value)\n container?.asyncSignalSnapshotCache.set(id, value)\n if (!container) {\n getAsyncSignalSnapshotCache().set(id, value)\n }\n}\n\nexport const clearAsyncSignalSnapshot = (\n id: string,\n container: RuntimeContainer | null = getCurrentContainer(),\n) => {\n container?.asyncSignalStates.delete(id)\n container?.asyncSignalSnapshotCache.delete(id)\n if (!container) {\n getAsyncSignalSnapshotCache().delete(id)\n }\n}\n\nconst getCurrentFrame = (): RenderFrame | null => {\n const stack = getFrameStack()\n return stack.length > 0 ? stack[stack.length - 1] : null\n}\n\nexport const shouldReconnectDetachedInsertMarkers = (container: RuntimeContainer | null) => {\n const frame = getCurrentFrame()\n if (!container || !frame || frame.container !== container) {\n return true\n }\n return frame.projectionState.reuseExistingDom\n}\n\nconst hasScopedStyles = (frame: RenderFrame | null) => !!frame && frame.scopedStyles.length > 0\n\nconst getScopedStyleRootSelector = (scopeId: string) =>\n `[${SCOPED_STYLE_ATTR}=\"${escapeAttr(scopeId)}\"]`\n\nconst wrapScopedStyleCss = (scopeId: string, cssText: string) =>\n `@scope (${getScopedStyleRootSelector(scopeId)}) {\\n${cssText}\\n}`\n\nconst renderScopedStyleString = (scopeId: string, style: ScopedStyleEntry) => {\n const attrParts = Object.entries(style.attributes)\n .filter(([, value]) => value !== false && value !== undefined && value !== null)\n .map(([name, value]) => (value === true ? name : `${name}=\"${escapeAttr(String(value))}\"`))\n const attrs = attrParts.length > 0 ? ` ${attrParts.join(' ')}` : ''\n return `<style${attrs}>${escapeText(wrapScopedStyleCss(scopeId, style.cssText))}</style>`\n}\n\nconst renderScopedStyleNode = (\n container: RuntimeContainer,\n scopeId: string,\n style: ScopedStyleEntry,\n) => {\n const element = createElementNode(container.doc!, 'style')\n for (const [name, value] of Object.entries(style.attributes)) {\n if (value === false || value === undefined || value === null) {\n continue\n }\n if (value === true) {\n element.setAttribute(name, '')\n continue\n }\n element.setAttribute(name, String(value))\n }\n element.appendChild(container.doc!.createTextNode(wrapScopedStyleCss(scopeId, style.cssText)))\n return element\n}\n\nconst renderFrameScopedStylesToString = (frame: RenderFrame) =>\n frame.scopedStyles\n .map((style) => renderScopedStyleString(frame.component.scopeId, style))\n .join('')\n\nconst renderFrameScopedStylesToNodes = (frame: RenderFrame, container: RuntimeContainer) =>\n frame.scopedStyles.map((style) =>\n renderScopedStyleNode(container, frame.component.scopeId, style),\n )\n\nexport const registerRuntimeScopedStyle = (\n cssText: string,\n attributes: Record<string, unknown> = {},\n): void => {\n const frame = getCurrentFrame()\n if (!frame || frame.component.id === ROOT_COMPONENT_ID) {\n throw new Error('useStyleScoped() can only be used while rendering a component.')\n }\n\n if (cssText.length === 0) {\n return\n }\n\n const existing = frame.scopedStyles.find(\n (entry) =>\n entry.cssText === cssText && JSON.stringify(entry.attributes) === JSON.stringify(attributes),\n )\n if (existing) {\n return\n }\n\n frame.scopedStyles.push({\n attributes: { ...attributes },\n cssText,\n })\n}\n\nconst normalizeRoutePath = (pathname: string) => {\n const normalizedPath = pathname.trim() || '/'\n const withLeadingSlash = normalizedPath.startsWith('/') ? normalizedPath : `/${normalizedPath}`\n if (withLeadingSlash.length > 1 && withLeadingSlash.endsWith('/')) {\n return withLeadingSlash.slice(0, -1)\n }\n return withLeadingSlash\n}\n\nconst parseLocationHref = (href: string) => new URL(href, 'http://localhost')\n\nconst createStandaloneLocation = (): RouteLocation => ({\n get hash() {\n return typeof window === 'undefined' ? '' : window.location.hash\n },\n get href() {\n return typeof window === 'undefined' ? '/' : window.location.href\n },\n get pathname() {\n return typeof window === 'undefined' ? '/' : normalizeRoutePath(window.location.pathname)\n },\n get search() {\n return typeof window === 'undefined' ? '' : window.location.search\n },\n})\n\nconst createRouterLocation = (router: RouterState): RouteLocation => ({\n get hash() {\n return parseLocationHref(router.currentUrl.value).hash\n },\n get href() {\n return router.currentUrl.value\n },\n get pathname() {\n return normalizeRoutePath(parseLocationHref(router.currentUrl.value).pathname)\n },\n get search() {\n return parseLocationHref(router.currentUrl.value).search\n },\n})\n\nconst EMPTY_ROUTE_PARAMS = Object.freeze({}) as RouteParams\n\nconst splitRoutePath = (pathname: string) => normalizeRoutePath(pathname).split('/').filter(Boolean)\n\nconst matchRouteSegments = (\n segments: RouteModuleManifest['segments'],\n pathnameSegments: string[],\n routeIndex = 0,\n pathIndex = 0,\n params: RouteParams = {},\n): RouteParams | null => {\n if (routeIndex >= segments.length) {\n return pathIndex >= pathnameSegments.length ? params : null\n }\n\n const segment = segments[routeIndex]!\n switch (segment.kind) {\n case 'static':\n if (pathnameSegments[pathIndex] !== segment.value) {\n return null\n }\n return matchRouteSegments(segments, pathnameSegments, routeIndex + 1, pathIndex + 1, params)\n case 'required':\n if (pathIndex >= pathnameSegments.length) {\n return null\n }\n return matchRouteSegments(segments, pathnameSegments, routeIndex + 1, pathIndex + 1, {\n ...params,\n [segment.value]: pathnameSegments[pathIndex],\n })\n case 'optional': {\n const consumed =\n pathIndex < pathnameSegments.length\n ? matchRouteSegments(segments, pathnameSegments, routeIndex + 1, pathIndex + 1, {\n ...params,\n [segment.value]: pathnameSegments[pathIndex],\n })\n : null\n if (consumed) {\n return consumed\n }\n return matchRouteSegments(segments, pathnameSegments, routeIndex + 1, pathIndex, {\n ...params,\n [segment.value]: undefined,\n })\n }\n case 'rest': {\n const rest = pathnameSegments.slice(pathIndex)\n if (rest.length === 0) {\n return null\n }\n return matchRouteSegments(\n segments,\n pathnameSegments,\n segments.length,\n pathnameSegments.length,\n {\n ...params,\n [segment.value]: rest,\n },\n )\n }\n }\n}\n\nconst matchRouteManifest = (manifest: RouteManifest, pathname: string) => {\n const normalizedPath = normalizeRoutePath(pathname)\n const pathnameSegments = splitRoutePath(normalizedPath)\n for (const entry of manifest) {\n const params = matchRouteSegments(entry.segments, pathnameSegments)\n if (params) {\n return {\n entry,\n params,\n pathname: normalizedPath,\n }\n }\n }\n return null\n}\n\nconst scoreSpecialManifestEntry = (entry: RouteModuleManifest, pathname: string) => {\n const pathnameSegments = splitRoutePath(pathname)\n let score = 0\n for (\n let index = 0;\n index < entry.segments.length && index < pathnameSegments.length;\n index += 1\n ) {\n const segment = entry.segments[index]!\n const pathnameSegment = pathnameSegments[index]\n if (segment.kind === 'static') {\n if (segment.value !== pathnameSegment) {\n break\n }\n score += 10\n continue\n }\n score += segment.kind === 'rest' ? 1 : 2\n if (segment.kind === 'rest') {\n break\n }\n }\n return score\n}\n\nconst findSpecialManifestEntry = (\n manifest: RouteManifest,\n pathname: string,\n kind: 'error' | 'notFound',\n) => {\n const matched = matchRouteManifest(manifest, pathname)\n if (matched?.entry[kind]) {\n return matched\n }\n\n let best: ReturnType<typeof matchRouteManifest> = null\n let bestScore = -1\n for (const entry of manifest) {\n if (!entry[kind]) {\n continue\n }\n const score = scoreSpecialManifestEntry(entry, pathname)\n if (score > bestScore) {\n best = {\n entry,\n params: EMPTY_ROUTE_PARAMS,\n pathname: normalizeRoutePath(pathname),\n }\n bestScore = score\n }\n }\n return best\n}\n\nconst routeCacheKey = (\n pathname: string,\n variant: 'page' | 'loading' | 'error' | 'not-found' = 'page',\n) => `${normalizeRoutePath(pathname)}::${variant}`\n\nconst routePrefetchKey = (url: URL) => `${normalizeRoutePath(url.pathname)}${url.search}`\nconst isLoaderSignalId = (id: string) => id.startsWith('$loader:')\n\nlet currentEffect: ReactiveEffect | null = null\nlet currentCleanupSlot: CleanupSlot | null = null\n\nconst withoutTrackedEffect = <T>(fn: () => T): T => {\n const previous = currentEffect\n currentEffect = null\n try {\n return fn()\n } finally {\n currentEffect = previous\n }\n}\n\nconst createCleanupSlot = (): CleanupSlot => ({\n callbacks: [],\n})\n\nconst withCleanupSlot = <T>(slot: CleanupSlot, fn: () => T): T => {\n const previous = currentCleanupSlot\n currentCleanupSlot = slot\n try {\n return fn()\n } finally {\n currentCleanupSlot = previous\n }\n}\n\nconst disposeCleanupSlot = (slot: CleanupSlot | null | undefined) => {\n if (!slot || slot.callbacks.length === 0) {\n return\n }\n\n const callbacks = [...slot.callbacks].reverse()\n slot.callbacks.length = 0\n let firstError: unknown = null\n const previous = currentCleanupSlot\n currentCleanupSlot = null\n\n try {\n for (const callback of callbacks) {\n try {\n withoutTrackedEffect(callback)\n } catch (error) {\n firstError ??= error\n }\n }\n } finally {\n currentCleanupSlot = previous\n }\n\n if (firstError) {\n throw firstError\n }\n}\n\nconst resetComponentRenderEffects = (component: ComponentState) => {\n disposeCleanupSlot(component.renderEffectCleanupSlot)\n component.renderEffectCleanupSlot = createCleanupSlot()\n}\n\nconst syncEffectOnlyLocalSignalPreference = (component: ComponentState) => {\n component.prefersEffectOnlyLocalSignalWrites = component.optimizedRoot === true\n}\n\nconst clearEffectSignals = (effect: ReactiveEffect) => {\n for (const signal of effect.signals) {\n signal.effects.delete(effect)\n }\n effect.signals.clear()\n}\n\nconst collectTrackedDependencies = (effect: ReactiveEffect, fn: () => void) => {\n clearEffectSignals(effect)\n currentEffect = effect\n try {\n fn()\n } finally {\n currentEffect = null\n }\n}\n\nconst runWithoutDependencyTracking = <T>(fn: () => T): T => {\n const previousEffect = currentEffect\n currentEffect = null\n try {\n return fn()\n } finally {\n currentEffect = previousEffect\n }\n}\n\nconst trackWatchDependencies = (dependencies: WatchDependency[], errorLabel = 'useWatch') => {\n for (const dependency of dependencies) {\n if (typeof dependency === 'function') {\n dependency()\n continue\n }\n const signalMeta = getSignalMeta(dependency)\n if (!signalMeta) {\n throw new TypeError(`${errorLabel} dependencies must be signals or getter functions.`)\n }\n void dependency.value\n }\n}\n\nconst runWatchCallback = (\n effect: ReactiveEffect,\n cleanupSlot: CleanupSlot,\n fn: () => void,\n dependencies?: WatchDependency[],\n) => {\n disposeCleanupSlot(cleanupSlot)\n if (!dependencies) {\n collectTrackedDependencies(effect, () => {\n withCleanupSlot(cleanupSlot, fn)\n })\n return\n }\n collectTrackedDependencies(effect, () => {\n trackWatchDependencies(dependencies)\n })\n withCleanupSlot(cleanupSlot, fn)\n}\n\nconst createLocalWatchRunner =\n (\n effect: ReactiveEffect,\n cleanupSlot: CleanupSlot,\n fn: () => void,\n dependencies?: WatchDependency[],\n ) =>\n () => {\n runWatchCallback(effect, cleanupSlot, fn, dependencies)\n }\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (!value || typeof value !== 'object') {\n return false\n }\n const proto = Object.getPrototypeOf(value)\n return proto === Object.prototype || proto === null\n}\n\nconst isProjectionSlot = (value: unknown): value is ProjectionSlotValue =>\n isPlainObject(value) && value.__eclipsa_type === PROJECTION_SLOT_TYPE\n\nconst createProjectionSlot = (\n componentId: string,\n name: string,\n occurrence: number,\n source: unknown,\n): ProjectionSlotValue => ({\n __eclipsa_type: PROJECTION_SLOT_TYPE,\n componentId,\n name,\n occurrence,\n source,\n})\n\nconst encodeProjectionSlotName = (value: string) => encodeURIComponent(value)\nconst decodeProjectionSlotName = (value: string) => decodeURIComponent(value)\nconst encodeKeyedRangeToken = (value: string | number | symbol) => encodeURIComponent(String(value))\nconst decodeKeyedRangeToken = (value: string) => {\n try {\n return decodeURIComponent(value)\n } catch {\n return value\n }\n}\n\nconst createProjectionSlotMarker = (\n componentId: string,\n name: string,\n occurrence: number,\n kind: 'start' | 'end',\n) => `ec:s:${componentId}:${encodeProjectionSlotName(name)}:${occurrence}:${kind}`\nconst createKeyedRangeMarker = (value: string | number | symbol, kind: 'start' | 'end') =>\n `ec:k:${encodeKeyedRangeToken(value)}:${kind}`\n\nconst COMPONENT_BOUNDARY_MARKER_REGEX = /^ec:c:(.+):(start|end)$/\nconst INSERT_MARKER_REGEX = /^ec:i:(.+)$/\nconst KEYED_RANGE_MARKER_REGEX = /^ec:k:([^:]+):(start|end)$/\nconst PROJECTION_SLOT_MARKER_REGEX = /^ec:s:([^:]+):([^:]+):(\\d+):(start|end)$/\n\nconst parseComponentBoundaryMarker = (value: string) => {\n const matched = value.match(COMPONENT_BOUNDARY_MARKER_REGEX)\n if (!matched) {\n return null\n }\n return {\n id: matched[1],\n kind: matched[2] as 'start' | 'end',\n }\n}\n\nconst parseProjectionSlotMarker = (value: string) => {\n const matched = value.match(PROJECTION_SLOT_MARKER_REGEX)\n if (!matched) {\n return null\n }\n return {\n componentId: matched[1],\n kind: matched[4] as 'start' | 'end',\n key: `${matched[1]}:${matched[2]}:${matched[3]}`,\n name: decodeProjectionSlotName(matched[2]),\n occurrence: Number(matched[3]),\n }\n}\n\nconst parseKeyedRangeMarker = (value: string) => {\n const matched = value.match(KEYED_RANGE_MARKER_REGEX)\n if (!matched) {\n return null\n }\n return {\n key: decodeKeyedRangeToken(matched[1]!),\n kind: matched[2] as 'start' | 'end',\n }\n}\n\nconst parseInsertMarker = (value: string) => {\n const matched = value.match(INSERT_MARKER_REGEX)\n if (!matched) {\n return null\n }\n return {\n key: matched[1],\n }\n}\n\nconst getRenderComponentTypeRef = (value: unknown): RenderComponentTypeRef | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[RENDER_COMPONENT_TYPE_KEY] as\n | RenderComponentTypeRef\n | undefined) ?? null\n )\n}\n\nconst createMaterializedRenderComponentType = (\n container: RuntimeContainer,\n symbol: string,\n scopeId: string,\n) => {\n const component = __eclipsaComponent(\n ((props: unknown) => {\n const module = getResolvedRuntimeSymbols(container).get(symbol)\n if (!module) {\n throw new Error(`Missing preloaded render component symbol ${symbol}.`)\n }\n return module.default(materializeScope(container, scopeId), props)\n }) as Component,\n symbol,\n () => materializeScope(container, scopeId),\n )\n Object.defineProperty(component, RENDER_COMPONENT_TYPE_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n scopeId,\n symbol,\n } satisfies RenderComponentTypeRef,\n writable: true,\n })\n return component\n}\n\nconst serializeRenderObjectReference = (\n container: RuntimeContainer,\n value: RenderObject,\n): SerializedReference => {\n if (typeof value.type === 'function' && !getComponentMeta(value.type)) {\n const resolved = resolveRenderable((value.type as Component)(value.props))\n if (!isRenderObject(resolved)) {\n throw new TypeError('Only resumable component render objects can be serialized.')\n }\n return serializeRenderObjectReference(container, resolved)\n }\n\n const evaluatedProps = evaluateProps(value.props)\n const key = value.key ?? null\n const metadata = value.metadata ?? null\n\n if (typeof value.type === 'string') {\n return {\n __eclipsa_type: 'ref',\n data: [\n 'element',\n value.type,\n null,\n serializeRuntimeValue(container, evaluatedProps),\n serializeRuntimeValue(container, key),\n value.isStatic,\n serializeRuntimeValue(container, metadata),\n ],\n kind: RENDER_REFERENCE_KIND,\n token: 'jsx',\n }\n }\n\n const meta = getComponentMeta(value.type)\n if (!meta) {\n throw new TypeError('Only resumable component render objects can be serialized.')\n }\n\n return {\n __eclipsa_type: 'ref',\n data: [\n 'component',\n meta.symbol,\n registerScope(container, meta.captures()),\n serializeRuntimeValue(container, evaluatedProps),\n serializeRuntimeValue(container, key),\n value.isStatic,\n serializeRuntimeValue(container, metadata),\n ],\n kind: RENDER_REFERENCE_KIND,\n token: 'jsx',\n }\n}\n\nconst deserializeRenderObjectReference = (\n container: RuntimeContainer,\n data: SerializedValue | undefined,\n): RenderObject => {\n if (!Array.isArray(data) || data.length !== 7) {\n throw new TypeError('Render references require a seven-part payload.')\n }\n\n const [variant, typeValue, scopeValue, propsValue, keyValue, isStaticValue, metadataValue] = data\n if (variant !== 'element' && variant !== 'component') {\n throw new TypeError(`Unsupported render reference variant \"${String(variant)}\".`)\n }\n if (typeof isStaticValue !== 'boolean') {\n throw new TypeError('Render references require a boolean static flag.')\n }\n\n const props = deserializeRuntimeValue(container, propsValue as SerializedValue)\n const key = deserializeRuntimeValue(container, keyValue as SerializedValue)\n const metadata = deserializeRuntimeValue(container, metadataValue as SerializedValue)\n\n if (!props || typeof props !== 'object') {\n throw new TypeError('Render references require object props.')\n }\n\n if (variant === 'element') {\n if (typeof typeValue !== 'string') {\n throw new TypeError('Element render references require a string tag name.')\n }\n return {\n isStatic: isStaticValue,\n key: (key ?? undefined) as RenderObject['key'],\n metadata: (metadata ?? undefined) as RenderObject['metadata'],\n props: props as Record<string, unknown>,\n type: typeValue,\n }\n }\n\n if (typeof typeValue !== 'string' || typeof scopeValue !== 'string') {\n throw new TypeError('Component render references require a symbol id and scope id.')\n }\n\n return {\n isStatic: isStaticValue,\n key: (key ?? undefined) as RenderObject['key'],\n metadata: (metadata ?? undefined) as RenderObject['metadata'],\n props: props as Record<string, unknown>,\n type: createMaterializedRenderComponentType(container, typeValue, scopeValue),\n }\n}\n\nconst preloadResumableValue = async (\n container: RuntimeContainer,\n value: unknown,\n seen = new Set<unknown>(),\n): Promise<void> => {\n if (value === null || value === undefined || value === false) {\n return\n }\n if (seen.has(value)) {\n return\n }\n if (typeof value === 'function') {\n const renderComponentRef = getRenderComponentTypeRef(value)\n if (!renderComponentRef) {\n return\n }\n seen.add(value)\n await loadSymbol(container, renderComponentRef.symbol)\n for (const capturedValue of materializeScope(container, renderComponentRef.scopeId)) {\n await preloadResumableValue(container, capturedValue, seen)\n }\n return\n }\n if (Array.isArray(value)) {\n seen.add(value)\n for (const entry of value) {\n await preloadResumableValue(container, entry, seen)\n }\n return\n }\n if (typeof Node !== 'undefined' && value instanceof Node) {\n return\n }\n if (isProjectionSlot(value)) {\n return\n }\n if (isRenderObject(value)) {\n seen.add(value)\n await preloadResumableValue(container, value.type, seen)\n await preloadResumableValue(container, evaluateProps(value.props), seen)\n return\n }\n if (!isPlainObject(value)) {\n return\n }\n\n seen.add(value)\n for (const entry of Object.values(value)) {\n await preloadResumableValue(container, entry, seen)\n }\n}\n\nconst serializeRuntimeValue = (container: RuntimeContainer, value: unknown): SerializedValue =>\n serializePublicValue(value, {\n serializeReference(candidate) {\n const signalMeta = getSignalMeta(candidate)\n if (signalMeta) {\n return {\n __eclipsa_type: 'ref',\n kind: 'signal',\n token: signalMeta.id,\n }\n }\n if (getNavigateMeta(candidate)) {\n return {\n __eclipsa_type: 'ref',\n kind: 'navigate',\n token: 'navigate',\n }\n }\n const actionMeta = getActionHandleMeta(candidate)\n if (actionMeta) {\n return {\n __eclipsa_type: 'ref',\n kind: 'action',\n token: actionMeta.id,\n }\n }\n const actionHookMeta = getActionHookMeta(candidate)\n if (actionHookMeta) {\n return {\n __eclipsa_type: 'ref',\n kind: 'action-hook',\n token: actionHookMeta.id,\n }\n }\n const loaderMeta = getLoaderHandleMeta(candidate)\n if (loaderMeta) {\n return {\n __eclipsa_type: 'ref',\n kind: 'loader',\n token: loaderMeta.id,\n }\n }\n const loaderHookMeta = getLoaderHookMeta(candidate)\n if (loaderHookMeta) {\n return {\n __eclipsa_type: 'ref',\n kind: 'loader-hook',\n token: loaderHookMeta.id,\n }\n }\n const contextReference = getRuntimeContextReference(candidate)\n if (contextReference) {\n return {\n __eclipsa_type: 'ref',\n data: serializeRuntimeValue(container, {\n defaultValue: contextReference.defaultValue,\n hasDefault: contextReference.hasDefault,\n }),\n kind: contextReference.kind,\n token: contextReference.id,\n }\n }\n if (isRouteSlot(candidate)) {\n return {\n __eclipsa_type: 'ref',\n data: serializePublicValue(candidate.startLayoutIndex),\n kind: 'route-slot',\n token: candidate.pathname,\n }\n }\n if (isProjectionSlot(candidate)) {\n return {\n __eclipsa_type: 'ref',\n data: serializeRuntimeValue(container, candidate.source),\n kind: PROJECTION_SLOT_TYPE,\n token: JSON.stringify([candidate.componentId, candidate.name, candidate.occurrence]),\n }\n }\n if (isRenderObject(candidate)) {\n return serializeRenderObjectReference(container, candidate)\n }\n const lazyMeta = getLazyMeta(candidate)\n if (lazyMeta) {\n return {\n __eclipsa_type: 'ref',\n data: lazyMeta.captures().map((entry) => serializeRuntimeValue(container, entry)),\n kind: 'symbol',\n token: lazyMeta.symbol,\n }\n }\n if (isElementNode(candidate)) {\n return {\n __eclipsa_type: 'ref',\n kind: 'dom',\n token: ensureRuntimeElementId(container, candidate),\n }\n }\n return null\n },\n })\n\nconst deserializeRuntimeValue = (container: RuntimeContainer, value: SerializedValue): unknown =>\n deserializePublicValue(value, {\n deserializeReference(reference) {\n if (reference.kind === 'navigate') {\n return ensureRouterState(container).navigate\n }\n if (reference.kind === 'action') {\n const action = container.actions.get(reference.token)\n if (!action) {\n throw new Error(`Missing action handle ${reference.token}.`)\n }\n return action\n }\n if (reference.kind === 'action-hook') {\n const actionHook = getRegisteredActionHook(reference.token)\n if (!actionHook) {\n throw new Error(`Missing action hook ${reference.token}.`)\n }\n return actionHook\n }\n if (reference.kind === 'loader') {\n const loader = container.loaders.get(reference.token)\n if (!loader) {\n throw new Error(`Missing loader handle ${reference.token}.`)\n }\n return loader\n }\n if (reference.kind === 'loader-hook') {\n const loaderHook = getRegisteredLoaderHook(reference.token)\n if (!loaderHook) {\n throw new Error(`Missing loader hook ${reference.token}.`)\n }\n return loaderHook\n }\n if (reference.kind === 'context' || reference.kind === 'context-provider') {\n const decoded =\n reference.data === undefined\n ? null\n : (deserializeRuntimeValue(container, reference.data as SerializedValue) as {\n defaultValue?: unknown\n hasDefault?: unknown\n } | null)\n const hasDefault = decoded?.hasDefault === true\n const defaultValue = hasDefault ? decoded?.defaultValue : undefined\n const descriptor = {\n defaultValue,\n hasDefault,\n id: reference.token,\n }\n return reference.kind === 'context'\n ? materializeRuntimeContext(descriptor)\n : materializeRuntimeContextProvider(descriptor)\n }\n if (reference.kind === 'route-slot') {\n const startLayoutIndex =\n reference.data === undefined ? 0 : deserializePublicValue(reference.data)\n if (typeof startLayoutIndex !== 'number' || !Number.isInteger(startLayoutIndex)) {\n throw new TypeError('Route slot references require an integer start layout index.')\n }\n return {\n __eclipsa_type: ROUTE_SLOT_TYPE,\n pathname: reference.token,\n startLayoutIndex,\n } satisfies RouteSlotValue\n }\n if (reference.kind === PROJECTION_SLOT_TYPE) {\n let componentId = ''\n let name = ''\n let occurrence = 0\n try {\n const parsed = JSON.parse(reference.token)\n if (\n !Array.isArray(parsed) ||\n parsed.length !== 3 ||\n typeof parsed[0] !== 'string' ||\n typeof parsed[1] !== 'string' ||\n typeof parsed[2] !== 'number'\n ) {\n throw new Error('invalid projection slot token')\n }\n componentId = parsed[0]\n name = parsed[1]\n occurrence = parsed[2]\n } catch {\n throw new TypeError(\n 'Projection slot references require a component id, name, and occurrence.',\n )\n }\n return createProjectionSlot(\n componentId,\n name,\n occurrence,\n deserializeRuntimeValue(container, reference.data as SerializedValue),\n )\n }\n if (reference.kind === 'signal') {\n const record = container.signals.get(reference.token)\n if (!record) {\n throw new Error(`Missing signal ${reference.token}.`)\n }\n return record.handle\n }\n if (reference.kind === 'symbol') {\n if (!reference.data || !Array.isArray(reference.data)) {\n throw new TypeError('Symbol references require an encoded scope array.')\n }\n const scopeId = registerSerializedScope(container, reference.data)\n return materializeSymbolReference(container, reference.token, scopeId)\n }\n if (reference.kind === RENDER_REFERENCE_KIND) {\n return deserializeRenderObjectReference(container, reference.data)\n }\n if (reference.kind === 'dom') {\n const element = findRuntimeElement(container, reference.token)\n if (!element) {\n throw new Error(`Missing DOM reference ${reference.token}.`)\n }\n return element\n }\n throw new TypeError(`Unsupported runtime reference kind \"${reference.kind}\".`)\n },\n })\n\nconst findNextNumericId = (ids: Iterable<string>, prefix: string) => {\n let nextId = 0\n for (const id of ids) {\n if (!id.startsWith(prefix)) {\n continue\n }\n const suffix = id.slice(prefix.length)\n if (!/^\\d+$/.test(suffix)) {\n continue\n }\n nextId = Math.max(nextId, Number(suffix) + 1)\n }\n return nextId\n}\n\nconst getRefSignalId = (value: unknown) => getSignalMeta(value)?.id ?? null\n\nconst getBindableSignalId = (value: unknown) => getSignalMeta(value)?.id ?? null\n\nexport const syncRuntimeRefMarker = (element: Element, value: unknown) => {\n const signalId = getRefSignalId(value)\n if (signalId) {\n element.setAttribute(REF_SIGNAL_ATTR, signalId)\n syncManagedAttributeSnapshot(element, REF_SIGNAL_ATTR)\n return\n }\n element.removeAttribute(REF_SIGNAL_ATTR)\n syncManagedAttributeSnapshot(element, REF_SIGNAL_ATTR)\n}\n\nconst readBindableSignalValue = (value: unknown) => {\n if (!value || (typeof value !== 'object' && typeof value !== 'function') || !('value' in value)) {\n return undefined\n }\n return (value as { value: unknown }).value\n}\n\nexport const assignRuntimeRef = (\n value: unknown,\n element: Element,\n container: RuntimeContainer | null = getCurrentContainer(),\n) => {\n const signalMeta = getSignalMeta<Element | undefined>(value)\n if (!signalMeta) {\n return false\n }\n\n const record = container?.signals.get(signalMeta.id)\n if (record) {\n writeSignalValue(container, record, element)\n return true\n }\n\n signalMeta.set(element)\n return true\n}\n\nexport const restoreSignalRefs = (container: RuntimeContainer, root: ParentNode) => {\n const assignElement = (element: Element) => {\n const signalId = element.getAttribute(REF_SIGNAL_ATTR)\n if (!signalId) {\n return\n }\n const record = container.signals.get(signalId)\n if (!record) {\n return\n }\n writeSignalValue(container, record, element)\n }\n\n if (isElementNode(root) && root.getAttribute(REF_SIGNAL_ATTR)) {\n assignElement(root)\n }\n\n const visitDescendants = (node: ParentNode) => {\n for (const child of listNodeChildren(node)) {\n if (!isElementNode(child)) {\n continue\n }\n if (child.getAttribute(REF_SIGNAL_ATTR)) {\n assignElement(child)\n }\n visitDescendants(child)\n }\n }\n\n visitDescendants(root)\n}\n\nconst evaluateProps = (props: Record<string, unknown>): Record<string, unknown> => {\n const result: Record<string, unknown> = {}\n for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(props))) {\n if (descriptor.get) {\n result[key] = descriptor.get.call(props)\n } else {\n result[key] = descriptor.value\n }\n }\n return result\n}\n\nconst hasProjectionSlotValue = (props: Record<string, unknown>, name: string) =>\n Object.prototype.hasOwnProperty.call(props, name)\n\nconst shouldRenderProjectionSlotValue = (value: unknown): boolean => {\n if (value === null || value === undefined || value === false) {\n return false\n }\n if (isProjectionSlot(value)) {\n return false\n }\n if (Array.isArray(value)) {\n return value.some((entry) => shouldRenderProjectionSlotValue(entry))\n }\n if (typeof value === 'function') {\n return true\n }\n return typeof value === 'object'\n}\n\nconst shouldPreserveProjectionSlotDom = (value: unknown): boolean => {\n if (value === null || value === undefined || value === false) {\n return false\n }\n if (isProjectionSlot(value) || isRouteSlot(value)) {\n return false\n }\n if (Array.isArray(value)) {\n return value.some((entry) => shouldPreserveProjectionSlotDom(entry))\n }\n if (typeof value === 'function') {\n return true\n }\n return typeof value === 'object'\n}\n\nconst getComponentProjectionSlotProps = (component: ComponentState) => {\n if (component.rawProps && typeof component.rawProps === 'object') {\n return component.rawProps\n }\n return component.props && typeof component.props === 'object'\n ? (component.props as Record<string, unknown>)\n : null\n}\n\nconst hasDynamicProjectionSlotDom = (component: ComponentState) => {\n if (!component.projectionSlots || Object.keys(component.projectionSlots).length === 0) {\n return false\n }\n\n const props = getComponentProjectionSlotProps(component)\n if (!props) {\n return false\n }\n\n return Object.keys(component.projectionSlots).some(\n (name) => hasProjectionSlotValue(props, name) && shouldPreserveProjectionSlotDom(props[name]),\n )\n}\n\nconst createRenderProps = (\n componentId: string,\n meta: ComponentMeta,\n props: Record<string, unknown>,\n): Record<string, unknown> => {\n const nextProps = Object.create(null) as Record<string, unknown>\n Object.defineProperties(nextProps, Object.getOwnPropertyDescriptors(props))\n\n if (!meta.projectionSlots || Object.keys(meta.projectionSlots).length === 0) {\n return nextProps\n }\n\n const counters = new Map<string, number>()\n\n for (const [name, totalOccurrences] of Object.entries(meta.projectionSlots)) {\n Object.defineProperty(nextProps, name, {\n configurable: true,\n enumerable: true,\n get() {\n if (!hasProjectionSlotValue(props, name)) {\n return undefined\n }\n const value = props[name]\n if (!shouldRenderProjectionSlotValue(value)) {\n return value\n }\n const current = counters.get(name) ?? 0\n counters.set(name, current + 1)\n const occurrence = totalOccurrences > 0 ? current % totalOccurrences : current\n return createProjectionSlot(componentId, name, occurrence, value)\n },\n })\n }\n\n return nextProps\n}\n\nconst preloadComponentProps = async (\n container: RuntimeContainer,\n meta: ComponentMeta,\n props: unknown,\n) => {\n if (!props || typeof props !== 'object') {\n await preloadResumableValue(container, props)\n return\n }\n\n if (!meta.projectionSlots) {\n await preloadResumableValue(container, props)\n return\n }\n\n const projectionNames = new Set(Object.keys(meta.projectionSlots))\n const entries: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(props as Record<string, unknown>)) {\n if (projectionNames.has(key)) {\n await preloadResumableValue(container, value)\n continue\n }\n entries[key] = value\n }\n await preloadResumableValue(container, entries)\n}\n\nconst createContainer = (\n symbols: Record<string, string>,\n doc?: Document,\n asyncSignalSnapshotCache?: Map<string, unknown>,\n): RuntimeContainer => ({\n actions: new Map(),\n actionStates: new Map(),\n asyncSignalStates: new Map(),\n asyncSignalSnapshotCache: asyncSignalSnapshotCache ?? new Map(),\n atoms: new WeakMap(),\n components: new Map(),\n dirty: new Set(),\n dirtyFlushQueued: false,\n doc,\n eventDispatchPromise: null,\n id: `rt${((globalThis as Record<PropertyKey, unknown>)[CONTAINER_ID_KEY] =\n (((globalThis as Record<PropertyKey, unknown>)[CONTAINER_ID_KEY] as number | undefined) ?? 0) +\n 1)}`,\n imports: new Map(),\n interactivePrefetchCheckQueued: false,\n loaderStates: new Map(),\n loaders: new Map(),\n nextAtomId: 0,\n nextComponentId: 0,\n nextElementId: 0,\n nextScopeId: 0,\n nextSignalId: 0,\n pendingSuspensePromises: new Set(),\n resumeReadyPromise: null,\n rootChildCursor: 0,\n rootElement: doc?.body,\n router: null,\n scopes: new Map(),\n signals: new Map(),\n symbols: new Map(Object.entries(symbols)),\n visibilityCheckQueued: false,\n visibilityListenersCleanup: null,\n visibles: new Map(),\n watches: new Map(),\n})\n\nexport const registerResumeContainer = (container: RuntimeContainer) => {\n const containers = getResumeContainers()\n containers.add(container)\n return () => {\n containers.delete(container)\n }\n}\n\nconst createSignalHandle = <T>(record: SignalRecord<T>, container: RuntimeContainer | null) => {\n const handle = {} as { value: T }\n Object.defineProperty(handle, 'value', {\n configurable: true,\n enumerable: true,\n get() {\n recordSignalRead(record)\n return record.value\n },\n set(value: T) {\n writeSignalValue(container, record, value)\n },\n })\n setSignalMeta(handle, {\n get: () => record.value,\n id: record.id,\n set: (value) => {\n writeSignalValue(container, record, value)\n },\n } satisfies SignalMeta<T>)\n return handle\n}\n\nconst isPrimitiveSignalValue = (value: unknown) =>\n value === null || (typeof value !== 'object' && typeof value !== 'function')\n\nconst didSignalValueChange = (previous: unknown, next: unknown) => {\n if (isPrimitiveSignalValue(previous) && isPrimitiveSignalValue(next)) {\n return !Object.is(previous, next)\n }\n\n return previous !== next\n}\n\nconst writeSignalValue = <T>(\n container: RuntimeContainer | null,\n record: SignalRecord<T>,\n nextValue: T,\n) => {\n if (!didSignalValueChange(record.value, nextValue)) {\n return false\n }\n\n record.value = nextValue\n notifySignalWrite(container, record)\n return true\n}\n\nconst ensureSignalRecord = <T>(\n container: RuntimeContainer | null,\n id: string,\n initialValue: T,\n): SignalRecord<T> => {\n if (!container) {\n const record = {\n effects: new Set<ReactiveEffect>(),\n handle: undefined as unknown as { value: T },\n id,\n subscribers: new Set<string>(),\n value: initialValue,\n } satisfies SignalRecord<T>\n record.handle = createSignalHandle(record, null)\n return record\n }\n const existing = container.signals.get(id)\n if (existing) {\n return existing as SignalRecord<T>\n }\n const record: SignalRecord<T> = {\n effects: new Set(),\n handle: undefined as unknown as { value: T },\n id,\n subscribers: new Set(),\n value: initialValue,\n }\n record.handle = createSignalHandle(record, container)\n container.signals.set(id, record as SignalRecord)\n return record\n}\n\nconst isRouterSignalId = (id: string) =>\n id === ROUTER_CURRENT_PATH_SIGNAL_ID ||\n id === ROUTER_CURRENT_URL_SIGNAL_ID ||\n id === ROUTER_IS_NAVIGATING_SIGNAL_ID\n\nconst isAtomSignalId = (id: string) => id.startsWith('a')\n\nconst createStandaloneNavigate = (): Navigate => {\n const navigate = (async (href: string, options?: NavigateOptions) => {\n if (typeof window === 'undefined') {\n return\n }\n const url = new URL(href, window.location.href)\n if (options?.replace) {\n window.location.replace(url.href)\n return\n }\n window.location.assign(url.href)\n }) as Navigate\n\n Object.defineProperty(navigate, 'isNavigating', {\n configurable: true,\n enumerable: true,\n get() {\n return false\n },\n })\n\n return setNavigateMeta(navigate)\n}\n\nexport const primeLocationState = (container: RuntimeContainer, href: string | URL) => {\n writeRouterLocation(ensureRouterState(container), href)\n}\n\nconst recordSignalRead = (record: SignalRecord) => {\n if (currentEffect) {\n currentEffect.signals.add(record)\n record.effects.add(currentEffect)\n return\n }\n const frame = getCurrentFrame()\n if (!frame) {\n return\n }\n record.subscribers.add(frame.component.id)\n}\n\nconst notifySignalWrite = (container: RuntimeContainer | null, record: SignalRecord) => {\n for (const effect of Array.from(record.effects)) {\n effect.fn()\n }\n if (!container) {\n return\n }\n for (const componentId of record.subscribers) {\n const component = container.components.get(componentId)\n if (!component?.start || !component.end) {\n continue\n }\n if (\n component.prefersEffectOnlyLocalSignalWrites &&\n component.signalIds.includes(record.id) &&\n record.effects.size > 0 &&\n !record.subscribers.has(component.id)\n ) {\n continue\n }\n const hasProjectionSlotDom = hasDynamicProjectionSlotDom(component)\n const nextActivateMode = hasProjectionSlotDom ? 'replace' : 'patch'\n component.active = false\n if (component.activateModeOnFlush !== 'replace') {\n component.activateModeOnFlush = nextActivateMode\n }\n component.reuseExistingDomOnActivate = !hasProjectionSlotDom\n component.reuseProjectionSlotDomOnActivate = !hasProjectionSlotDom\n container.dirty.add(component.id)\n }\n scheduleDirtyFlush(container)\n}\n\nconst canFlushDirtyComponents = (container: RuntimeContainer) =>\n [...container.dirty].every((componentId) => {\n const component = container.components.get(componentId)\n return (\n !!component &&\n (container.imports.has(component.symbol) || container.symbols.has(component.symbol))\n )\n })\n\nconst scheduleDirtyFlush = (container: RuntimeContainer) => {\n if (\n container.dirty.size === 0 ||\n container.dirtyFlushQueued ||\n !canFlushDirtyComponents(container)\n ) {\n return\n }\n\n container.dirtyFlushQueued = true\n queueMicrotask(() => {\n const flushWhenReady = async () => {\n try {\n const pendingEvent = container.eventDispatchPromise\n if (pendingEvent) {\n await pendingEvent.catch(() => {})\n }\n } finally {\n container.dirtyFlushQueued = false\n }\n\n if (container.dirty.size === 0) {\n return\n }\n void flushDirtyComponents(container)\n }\n\n void flushWhenReady()\n })\n}\n\nconst writeRouterLocation = (router: RouterState, href: string | URL) => {\n const url = href instanceof URL ? href : parseLocationHref(href)\n const nextPath = normalizeRoutePath(url.pathname)\n if (router.currentPath.value !== nextPath) {\n router.currentPath.value = nextPath\n }\n if (router.currentUrl.value !== url.href) {\n router.currentUrl.value = url.href\n }\n}\n\nconst syncRouterLocationSilently = (container: RuntimeContainer, href: string | URL) => {\n const url = href instanceof URL ? href : parseLocationHref(href)\n const nextPath = normalizeRoutePath(url.pathname)\n ensureSignalRecord(container, ROUTER_CURRENT_PATH_SIGNAL_ID, nextPath).value = nextPath\n ensureSignalRecord(container, ROUTER_CURRENT_URL_SIGNAL_ID, url.href).value = url.href\n ensureSignalRecord(container, ROUTER_IS_NAVIGATING_SIGNAL_ID, false).value = false\n}\n\nconst ensureRouterState = (container: RuntimeContainer, manifest?: RouteManifest) => {\n if (container.router) {\n if (manifest) {\n container.router.manifest = [...manifest]\n }\n return container.router\n }\n\n const currentPath = ensureSignalRecord(\n container,\n ROUTER_CURRENT_PATH_SIGNAL_ID,\n normalizeRoutePath(container.doc?.location.pathname ?? '/'),\n ).handle as { value: string }\n const currentUrl = ensureSignalRecord(\n container,\n ROUTER_CURRENT_URL_SIGNAL_ID,\n container.doc?.location.href ?? currentPath.value,\n ).handle as { value: string }\n const isNavigating = ensureSignalRecord(container, ROUTER_IS_NAVIGATING_SIGNAL_ID, false)\n .handle as { value: boolean }\n\n const router: RouterState = {\n currentPath,\n currentRoute: null,\n currentUrl,\n defaultTitle: container.doc?.title ?? '',\n isNavigating,\n loadedRoutes: new Map(),\n location: undefined as unknown as RouteLocation,\n manifest: [],\n navigate: undefined as unknown as Navigate,\n prefetchedLoaders: new Map(),\n routeModuleBusts: new Map(),\n routePrefetches: new Map(),\n sequence: 0,\n }\n\n container.router = router\n router.location = createRouterLocation(router)\n router.navigate = setNavigateMeta((async (href: string, options?: NavigateOptions) => {\n await navigateContainer(container, href, {\n mode: options?.replace ? 'replace' : 'push',\n })\n }) as Navigate)\n\n Object.defineProperty(router.navigate, 'isNavigating', {\n configurable: true,\n enumerable: true,\n get() {\n return ensureRouterState(container).isNavigating.value\n },\n })\n\n if (manifest) {\n router.manifest = [...manifest]\n }\n\n return router\n}\n\nconst pushContainer = <T>(container: RuntimeContainer, fn: () => T): T => {\n const stack = getContainerStack()\n stack.push(container)\n try {\n return fn()\n } finally {\n stack.pop()\n }\n}\n\nexport const withRuntimeContainer = pushContainer\n\nconst withRuntimeContextValue = <T>(token: RuntimeContextToken, value: unknown, fn: () => T): T => {\n const stack = getContextValueStack()\n stack.push({\n token,\n value,\n })\n try {\n return fn()\n } finally {\n stack.pop()\n }\n}\n\nconst pushFrame = <T>(frame: RenderFrame, fn: () => T): T => {\n const stack = getFrameStack()\n stack.push(frame)\n try {\n return fn()\n } finally {\n stack.pop()\n }\n}\n\nconst allocateScopeId = (container: RuntimeContainer) => `sc${container.nextScopeId++}`\n\nexport const ensureRuntimeElementId = (container: RuntimeContainer, element: Element) => {\n const existingId = element.getAttribute('data-eid')\n if (existingId) {\n return existingId\n }\n const nextId = `e${container.nextElementId++}`\n element.setAttribute('data-eid', nextId)\n return nextId\n}\n\nexport const findRuntimeElement = (\n container: RuntimeContainer,\n elementId: string,\n): Element | null => {\n const root = container.rootElement ?? container.doc?.body\n if (!root) {\n return null\n }\n if (root.getAttribute('data-eid') === elementId) {\n return root\n }\n return root.querySelector(`[data-eid=\"${elementId}\"]`)\n}\n\nconst registerScope = (container: RuntimeContainer, values: unknown[]): string => {\n const id = allocateScopeId(container)\n container.scopes.set(\n id,\n values.map((value) => serializeRuntimeValue(container, value)),\n )\n return id\n}\n\nconst registerSerializedScope = (container: RuntimeContainer, values: SerializedValue[]) => {\n const id = allocateScopeId(container)\n container.scopes.set(id, [...values])\n return id\n}\n\nconst materializeSymbolReference = (\n container: RuntimeContainer,\n symbolId: string,\n scopeId: string,\n) => {\n const fn = (...args: unknown[]) => {\n void loadSymbol(container, symbolId).then((module) =>\n module.default(materializeScope(container, scopeId), ...args),\n )\n }\n Object.defineProperty(fn, 'name', {\n configurable: true,\n value: `eclipsa$${symbolId}`,\n })\n return fn\n}\n\nconst materializeScope = (container: RuntimeContainer, scopeId: string): unknown[] => {\n const slots = container.scopes.get(scopeId)\n if (!slots) {\n throw new Error(`Missing scope ${scopeId}.`)\n }\n return slots.map((slot) => deserializeRuntimeValue(container, slot))\n}\n\nconst createFrame = (\n container: RuntimeContainer,\n component: ComponentState,\n mode: RenderFrame['mode'],\n options?: {\n effectCleanupSlot?: CleanupSlot\n reuseExistingDom?: boolean\n reuseProjectionSlotDom?: boolean\n },\n): RenderFrame => ({\n childCursor: 0,\n component,\n container,\n effectCleanupSlot: options?.effectCleanupSlot ?? component.renderEffectCleanupSlot,\n insertCursor: 0,\n mountCallbacks: [],\n mode,\n projectionState: {\n counters: new Map(),\n reuseExistingDom: options?.reuseExistingDom ?? false,\n reuseProjectionSlotDom: options?.reuseProjectionSlotDom ?? false,\n },\n scopedStyles: [],\n signalCursor: 0,\n visibleCursor: 0,\n visitedDescendants: new Set(),\n watchCursor: 0,\n})\n\nconst createComponentId = (\n container: RuntimeContainer,\n parentId: string | null,\n childIndex: number,\n) => {\n if (!parentId || parentId === ROOT_COMPONENT_ID) {\n return `c${childIndex}`\n }\n return `${parentId}.${childIndex}`\n}\n\nconst getOrCreateComponentState = (\n container: RuntimeContainer,\n id: string,\n symbol: string,\n parentId: string | null,\n): ComponentState => {\n const existing = container.components.get(id)\n if (existing) {\n existing.parentId = parentId\n existing.symbol = symbol\n return existing\n }\n const component: ComponentState = {\n active: false,\n didMount: false,\n id,\n mountCleanupSlots: [],\n optimizedRoot: false,\n parentId,\n prefersEffectOnlyLocalSignalWrites: false,\n props: {},\n projectionSlots: null,\n rawProps: null,\n renderEffectCleanupSlot: createCleanupSlot(),\n reuseExistingDomOnActivate: true,\n reuseProjectionSlotDomOnActivate: false,\n scopeId: registerScope(container, []),\n signalIds: [],\n symbol,\n suspensePromise: null,\n visibleCount: 0,\n watchCount: 0,\n }\n container.components.set(id, component)\n return component\n}\n\nconst resetComponentForSymbolChange = (\n container: RuntimeContainer,\n component: ComponentState,\n meta: ComponentMeta,\n) => {\n disposeComponentMountCleanups(component)\n disposeCleanupSlot(component.renderEffectCleanupSlot)\n component.renderEffectCleanupSlot = createCleanupSlot()\n component.didMount = false\n component.optimizedRoot = meta.optimizedRoot === true\n component.prefersEffectOnlyLocalSignalWrites = false\n component.projectionSlots = meta.projectionSlots ?? null\n component.rawProps = null\n component.scopeId = registerScope(container, meta.captures())\n component.signalIds = []\n component.suspensePromise = null\n pruneComponentVisibles(container, component, 0)\n pruneComponentWatches(container, component, 0)\n}\n\nconst createWatchId = (componentId: string, watchIndex: number) => `${componentId}:w${watchIndex}`\nconst createVisibleId = (componentId: string, visibleIndex: number) =>\n `${componentId}:v${visibleIndex}`\n\nconst getOrCreateWatchState = (\n container: RuntimeContainer,\n id: string,\n componentId: string,\n): WatchState => {\n const existing = container.watches.get(id)\n if (existing) {\n existing.componentId = componentId\n return existing\n }\n const effect: ReactiveEffect = {\n fn() {},\n signals: new Set(),\n }\n const watch: WatchState = {\n cleanupSlot: createCleanupSlot(),\n componentId,\n effect,\n id,\n mode: 'dynamic',\n pending: null,\n run: null,\n scopeId: registerScope(container, []),\n symbol: '',\n track: null,\n }\n effect.fn = () => {\n if (watch.run) {\n watch.run()\n return\n }\n if (!container.doc) {\n return\n }\n const scheduled = (watch.pending ?? Promise.resolve()).then(async () => {\n disposeCleanupSlot(watch.cleanupSlot)\n const module = await loadSymbol(container, watch.symbol)\n const scope = materializeScope(container, watch.scopeId)\n await withClientContainer(container, () => {\n if (watch.mode === 'dynamic') {\n collectTrackedDependencies(effect, () => {\n withCleanupSlot(watch.cleanupSlot, () => {\n module.default(scope)\n })\n })\n return\n }\n collectTrackedDependencies(effect, () => {\n module.default(scope, 'track')\n })\n withCleanupSlot(watch.cleanupSlot, () => {\n module.default(scope, 'run')\n })\n })\n await flushDirtyComponents(container)\n })\n const queued = scheduled.finally(() => {\n if (watch.pending === queued) {\n watch.pending = null\n }\n })\n watch.pending = queued\n }\n container.watches.set(id, watch)\n return watch\n}\n\nconst getOrCreateVisibleState = (\n container: RuntimeContainer,\n id: string,\n componentId: string,\n): VisibleState => {\n const existing = container.visibles.get(id)\n if (existing) {\n existing.componentId = componentId\n return existing\n }\n\n const visible: VisibleState = {\n cleanupSlot: createCleanupSlot(),\n componentId,\n done: false,\n id,\n pending: null,\n run: null,\n scopeId: registerScope(container, []),\n symbol: '',\n }\n container.visibles.set(id, visible)\n return visible\n}\n\nconst clearComponentSubscriptions = (container: RuntimeContainer, componentId: string) => {\n for (const record of container.signals.values()) {\n record.subscribers.delete(componentId)\n }\n}\n\nconst disposeComponentMountCleanups = (component: ComponentState) => {\n disposeCleanupSlot(component.renderEffectCleanupSlot)\n component.renderEffectCleanupSlot = createCleanupSlot()\n const cleanupSlots = [...component.mountCleanupSlots].reverse()\n component.mountCleanupSlots = []\n for (const cleanupSlot of cleanupSlots) {\n disposeCleanupSlot(cleanupSlot)\n }\n}\n\nconst removeWatchState = (container: RuntimeContainer, watchId: string) => {\n const watch = container.watches.get(watchId)\n if (!watch) {\n return\n }\n disposeCleanupSlot(watch.cleanupSlot)\n clearEffectSignals(watch.effect)\n container.watches.delete(watchId)\n}\n\nconst removeVisibleState = (container: RuntimeContainer, visibleId: string) => {\n const visible = container.visibles.get(visibleId)\n if (visible) {\n disposeCleanupSlot(visible.cleanupSlot)\n }\n container.visibles.delete(visibleId)\n}\n\nconst resetVisibleState = (visible: VisibleState) => {\n disposeCleanupSlot(visible.cleanupSlot)\n visible.cleanupSlot = createCleanupSlot()\n visible.done = false\n visible.pending = null\n}\n\nconst resetComponentVisibleStates = (container: RuntimeContainer, componentId: string) => {\n const targetIds = new Set<string>([componentId, ...collectDescendantIds(container, componentId)])\n\n for (const visible of container.visibles.values()) {\n if (!targetIds.has(visible.componentId)) {\n continue\n }\n resetVisibleState(visible)\n }\n}\n\nconst pruneComponentWatches = (\n container: RuntimeContainer,\n component: ComponentState,\n nextCount: number,\n) => {\n for (let index = nextCount; index < component.watchCount; index++) {\n removeWatchState(container, createWatchId(component.id, index))\n }\n component.watchCount = nextCount\n}\n\nconst pruneComponentVisibles = (\n container: RuntimeContainer,\n component: ComponentState,\n nextCount: number,\n) => {\n for (let index = nextCount; index < component.visibleCount; index++) {\n removeVisibleState(container, createVisibleId(component.id, index))\n }\n component.visibleCount = nextCount\n}\n\nconst isDescendantOf = (parentId: string, candidateId: string) =>\n candidateId.startsWith(`${parentId}.`)\n\nconst collectDescendantIds = (container: RuntimeContainer, componentId: string) =>\n [...container.components.keys()].filter((candidate) => isDescendantOf(componentId, candidate))\n\nconst expandComponentIdsToDescendants = (\n container: RuntimeContainer,\n componentIds: Iterable<string>,\n) => {\n const expanded = new Set<string>()\n\n for (const componentId of componentIds) {\n if (expanded.has(componentId)) {\n continue\n }\n expanded.add(componentId)\n for (const descendantId of collectDescendantIds(container, componentId)) {\n expanded.add(descendantId)\n }\n }\n\n return expanded\n}\n\nconst pruneRemovedComponents = (\n container: RuntimeContainer,\n componentId: string,\n keep: Set<string>,\n) => {\n for (const descendantId of collectDescendantIds(container, componentId)) {\n if (keep.has(descendantId)) {\n continue\n }\n clearComponentSubscriptions(container, descendantId)\n const descendant = container.components.get(descendantId)\n if (descendant) {\n disposeComponentMountCleanups(descendant)\n pruneComponentVisibles(container, descendant, 0)\n pruneComponentWatches(container, descendant, 0)\n }\n container.components.delete(descendantId)\n }\n}\n\nconst scheduleMicrotask = (fn: () => void) => {\n if (typeof queueMicrotask === 'function') {\n queueMicrotask(fn)\n return\n }\n Promise.resolve().then(fn)\n}\n\nconst scheduleInteractivePrefetchCheck = (container: RuntimeContainer) => {\n if (\n container.interactivePrefetchCheckQueued ||\n !container.doc ||\n typeof container.doc.querySelectorAll !== 'function'\n ) {\n return\n }\n\n container.interactivePrefetchCheckQueued = true\n scheduleMicrotask(() => {\n container.interactivePrefetchCheckQueued = false\n const doc = container.doc\n if (!doc || typeof doc.querySelectorAll !== 'function') {\n return\n }\n\n for (const element of doc.querySelectorAll(INTERACTIVE_PREFETCH_SELECTOR)) {\n if (!isElementNode(element)) {\n continue\n }\n prefetchElementSymbols(container, element, INTERACTIVE_PREFETCH_EVENT_NAMES)\n }\n })\n}\n\nconst scheduleVisibleCallbacksCheck = (container: RuntimeContainer) => {\n scheduleInteractivePrefetchCheck(container)\n if (container.visibilityCheckQueued || container.visibles.size === 0 || !container.doc) {\n return\n }\n\n ensureVisibilityListeners(container)\n container.visibilityCheckQueued = true\n const run = () => {\n container.visibilityCheckQueued = false\n void flushVisibleCallbacks(container)\n }\n\n const view = container.doc.defaultView\n if (view && typeof view.requestAnimationFrame === 'function') {\n view.requestAnimationFrame(() => run())\n return\n }\n\n scheduleMicrotask(run)\n}\n\nconst rectIntersectsViewport = (\n view: { innerHeight?: number; innerWidth?: number },\n rect: { bottom: number; left: number; right: number; top: number },\n) => {\n const viewportHeight = view.innerHeight ?? 0\n const viewportWidth = view.innerWidth ?? 0\n return rect.bottom > 0 && rect.right > 0 && rect.top < viewportHeight && rect.left < viewportWidth\n}\n\nconst isBoundaryVisible = (doc: Document, start: Comment, end: Comment) => {\n const view = doc.defaultView\n if (typeof doc.createRange !== 'function' || !view) {\n return false\n }\n\n const range = doc.createRange()\n range.setStartAfter(start)\n range.setEndBefore(end)\n\n const rects = range.getClientRects()\n if (rects.length === 0) {\n return rectIntersectsViewport(view, range.getBoundingClientRect())\n }\n\n for (let index = 0; index < rects.length; index++) {\n const rect = rects[index]\n if (rectIntersectsViewport(view, rect)) {\n return true\n }\n }\n return false\n}\n\nconst runVisibleCallback = async (container: RuntimeContainer, visible: VisibleState) => {\n if (visible.done) {\n return\n }\n\n visible.done = true\n const pending = Promise.resolve()\n .then(async () => {\n if (visible.run) {\n await withClientContainer(container, async () => {\n await withCleanupSlot(visible.cleanupSlot, () => visible.run?.())\n })\n } else {\n const module = await loadSymbol(container, visible.symbol)\n await withClientContainer(container, async () => {\n await withCleanupSlot(visible.cleanupSlot, () =>\n module.default(materializeScope(container, visible.scopeId)),\n )\n })\n }\n await flushDirtyComponents(container)\n scheduleVisibleCallbacksCheck(container)\n })\n .finally(() => {\n if (visible.pending === pending) {\n visible.pending = null\n }\n })\n\n visible.pending = pending\n await pending\n}\n\nconst flushVisibleCallbacks = async (container: RuntimeContainer) => {\n if (!container.doc || container.visibles.size === 0) {\n return\n }\n\n for (const visible of Array.from(container.visibles.values())) {\n if (visible.done || visible.pending) {\n continue\n }\n\n const component = container.components.get(visible.componentId)\n if (!component?.start || !component.end) {\n continue\n }\n\n if (!isBoundaryVisible(container.doc, component.start, component.end)) {\n continue\n }\n\n await runVisibleCallback(container, visible)\n }\n}\n\nconst ensureVisibilityListeners = (container: RuntimeContainer) => {\n if (container.visibilityListenersCleanup || !container.doc) {\n return\n }\n\n const doc = container.doc\n const onVisibilityChange = () => {\n scheduleVisibleCallbacksCheck(container)\n }\n\n doc.addEventListener('scroll', onVisibilityChange, true)\n doc.defaultView?.addEventListener('resize', onVisibilityChange)\n\n container.visibilityListenersCleanup = () => {\n doc.removeEventListener('scroll', onVisibilityChange, true)\n doc.defaultView?.removeEventListener('resize', onVisibilityChange)\n container.visibilityListenersCleanup = null\n }\n}\n\nconst scheduleMountCallbacks = (\n container: RuntimeContainer,\n component: ComponentState,\n callbacks: Array<() => void>,\n) => {\n if (component.didMount || callbacks.length === 0) {\n return\n }\n component.didMount = true\n scheduleMicrotask(() => {\n void withClientContainer(container, () => {\n for (const callback of callbacks) {\n const cleanupSlot = createCleanupSlot()\n component.mountCleanupSlots.push(cleanupSlot)\n withCleanupSlot(cleanupSlot, callback)\n }\n })\n .then(() => flushDirtyComponents(container))\n .then(() => {\n scheduleVisibleCallbacksCheck(container)\n })\n })\n}\n\nconst collectProjectionSlotRanges = (roots: Node[]) => {\n const starts = new Map<string, Comment>()\n const ranges = new Map<string, { end: Comment; start: Comment }>()\n\n const visit = (node: Node) => {\n if (typeof Comment !== 'undefined' ? node instanceof Comment : (node as Node).nodeType === 8) {\n const commentNode = node as Comment\n const marker = parseProjectionSlotMarker(commentNode.data)\n if (marker) {\n if (marker.kind === 'start') {\n starts.set(marker.key, commentNode)\n } else {\n const startNode = starts.get(marker.key)\n if (startNode) {\n ranges.set(marker.key, { end: commentNode, start: startNode })\n }\n }\n }\n }\n for (const child of Array.from((node.childNodes ?? []) as unknown as Iterable<Node>)) {\n visit(child)\n }\n }\n\n for (const root of roots) {\n visit(root)\n }\n\n return ranges\n}\n\nconst collectComponentBoundaryIds = (roots: Node[]) => {\n const ids = new Set<string>()\n const visit = (node: Node) => {\n if (typeof Comment !== 'undefined' ? node instanceof Comment : (node as Node).nodeType === 8) {\n const matched = (node as Comment).data.match(/^ec:c:(.+):(start|end)$/)\n if (matched) {\n ids.add(matched[1]!)\n }\n }\n for (const child of Array.from((node.childNodes ?? []) as unknown as Iterable<Node>)) {\n visit(child)\n }\n }\n\n for (const root of roots) {\n visit(root)\n }\n\n return ids\n}\n\nconst collectComponentBoundaryRanges = (roots: Node[]) => {\n const starts = new Map<string, Comment>()\n const ranges = new Map<string, { end: Comment; start: Comment }>()\n\n const visit = (node: Node) => {\n if (typeof Comment !== 'undefined' ? node instanceof Comment : (node as Node).nodeType === 8) {\n const commentNode = node as Comment\n const marker = parseComponentBoundaryMarker(commentNode.data)\n if (marker) {\n if (marker.kind === 'start') {\n starts.set(marker.id, commentNode)\n } else {\n const startNode = starts.get(marker.id)\n if (startNode) {\n ranges.set(marker.id, { end: commentNode, start: startNode })\n }\n }\n }\n }\n for (const child of Array.from((node.childNodes ?? []) as unknown as Iterable<Node>)) {\n visit(child)\n }\n }\n\n for (const root of roots) {\n visit(root)\n }\n\n return ranges\n}\n\nconst collectKeyedRangeRanges = (roots: Node[]) => {\n const starts = new Map<string, Comment>()\n const ranges = new Map<string, { end: Comment; start: Comment }>()\n\n const visit = (node: Node) => {\n if (typeof Comment !== 'undefined' ? node instanceof Comment : (node as Node).nodeType === 8) {\n const commentNode = node as Comment\n const marker = parseKeyedRangeMarker(commentNode.data)\n if (marker) {\n if (marker.kind === 'start') {\n starts.set(marker.key, commentNode)\n } else {\n const startNode = starts.get(marker.key)\n if (startNode) {\n ranges.set(marker.key, { end: commentNode, start: startNode })\n }\n }\n }\n }\n for (const child of Array.from((node.childNodes ?? []) as unknown as Iterable<Node>)) {\n visit(child)\n }\n }\n\n for (const root of roots) {\n visit(root)\n }\n\n return ranges\n}\n\nconst collectBoundaryRangeNodes = (start: Comment, end: Comment) => {\n const nodes: Node[] = [start]\n let cursor: Node | null = start.nextSibling\n while (cursor) {\n nodes.push(cursor)\n if (cursor === end) {\n return nodes\n }\n cursor = cursor.nextSibling\n }\n return []\n}\n\nconst preserveComponentBoundaryContentsInRoots = (currentRoots: Node[], nextRoots: Node[]) => {\n const currentRanges = collectComponentBoundaryRanges(currentRoots)\n const nextRanges = collectComponentBoundaryRanges(nextRoots)\n const preservedComponentIds = new Set<string>()\n\n for (const [id, nextRange] of nextRanges) {\n const boundaryChanged = Boolean(\n (\n nextRange.start as Comment & {\n [COMPONENT_BOUNDARY_PROPS_CHANGED]?: boolean\n [COMPONENT_BOUNDARY_SYMBOL_CHANGED]?: boolean\n }\n )[COMPONENT_BOUNDARY_SYMBOL_CHANGED] ||\n (\n nextRange.start as Comment & {\n [COMPONENT_BOUNDARY_PROPS_CHANGED]?: boolean\n [COMPONENT_BOUNDARY_SYMBOL_CHANGED]?: boolean\n }\n )[COMPONENT_BOUNDARY_PROPS_CHANGED],\n )\n if (boundaryChanged) {\n continue\n }\n const currentRange = currentRanges.get(id)\n if (!currentRange) {\n continue\n }\n\n const movedRoots = collectBoundaryRangeNodes(currentRange.start, currentRange.end)\n if (movedRoots.length === 0) {\n continue\n }\n\n const replacementParent = nextRange.start.parentNode\n if (!replacementParent) {\n continue\n }\n\n for (const node of movedRoots) {\n replacementParent.insertBefore(node, nextRange.start)\n }\n\n let cursor: Node | null = nextRange.start\n while (cursor) {\n const nextSibling: Node | null = cursor.nextSibling\n if (typeof (cursor as Node & { remove?: () => void }).remove === 'function') {\n ;(cursor as Node & { remove: () => void }).remove()\n } else {\n cursor.parentNode?.removeChild(cursor)\n }\n if (cursor === nextRange.end) {\n break\n }\n cursor = nextSibling\n }\n\n preservedComponentIds.add(id)\n for (const componentId of collectComponentBoundaryIds(movedRoots)) {\n preservedComponentIds.add(componentId)\n }\n }\n\n return preservedComponentIds\n}\n\nconst preserveProjectionSlotContentsInRoots = (currentRoots: Node[], nextRoots: Node[]) => {\n const currentRanges = collectProjectionSlotRanges(currentRoots)\n const nextRanges = collectProjectionSlotRanges(nextRoots)\n const preservedComponentIds = new Set<string>()\n\n const isPlaceholderProjectionBody = (nodes: Node[]) => {\n if (nodes.length === 0) {\n return true\n }\n\n for (let index = 0; index < nodes.length; index += 1) {\n const node = nodes[index]!\n const token = getPatchOpaqueRangeToken(node, 'start')\n if (!token) {\n return false\n }\n\n let endIndex = index + 1\n while (endIndex < nodes.length) {\n const endToken = getPatchOpaqueRangeToken(nodes[endIndex]!, 'end')\n if (endToken && endToken.rangeKind === token.rangeKind && endToken.token === token.token) {\n break\n }\n endIndex += 1\n }\n\n if (endIndex >= nodes.length || endIndex !== index + 1) {\n return false\n }\n\n index = endIndex\n }\n\n return true\n }\n\n for (const [key, nextRange] of nextRanges) {\n const currentRange = currentRanges.get(key)\n if (!currentRange) {\n continue\n }\n\n const nextBodyNodes = getBoundaryChildren(nextRange.start, nextRange.end)\n if (!isPlaceholderProjectionBody(nextBodyNodes)) {\n continue\n }\n\n const movedRoots: Node[] = []\n let cursor = currentRange.start.nextSibling\n while (cursor && cursor !== currentRange.end) {\n const nextSibling = cursor.nextSibling\n movedRoots.push(cursor)\n cursor = nextSibling\n }\n\n if (movedRoots.length === 0) {\n continue\n }\n\n let nextBodyCursor = nextRange.start.nextSibling\n while (nextBodyCursor && nextBodyCursor !== nextRange.end) {\n const nextSibling = nextBodyCursor.nextSibling\n if (typeof (nextBodyCursor as Node & { remove?: () => void }).remove === 'function') {\n ;(nextBodyCursor as Node & { remove: () => void }).remove()\n } else {\n nextBodyCursor.parentNode?.removeChild(nextBodyCursor)\n }\n nextBodyCursor = nextSibling\n }\n\n for (const node of movedRoots) {\n nextRange.end.parentNode?.insertBefore(node, nextRange.end)\n }\n\n for (const componentId of collectComponentBoundaryIds(movedRoots)) {\n preservedComponentIds.add(componentId)\n }\n }\n\n return preservedComponentIds\n}\n\nconst preserveKeyedRangeContentsInRoots = (currentRoots: Node[], nextRoots: Node[]) => {\n const preservedComponentIds = new Set<string>()\n const currentRanges = collectKeyedRangeRanges(currentRoots)\n const nextRanges = collectKeyedRangeRanges(nextRoots)\n\n for (const [key, nextRange] of nextRanges) {\n const currentRange = currentRanges.get(key)\n if (!currentRange) {\n continue\n }\n\n const movedRoots = collectBoundaryRangeNodes(currentRange.start, currentRange.end)\n if (movedRoots.length === 0) {\n continue\n }\n\n const replacementParent = nextRange.start.parentNode\n if (!replacementParent) {\n continue\n }\n\n for (const node of movedRoots) {\n replacementParent.insertBefore(node, nextRange.start)\n }\n\n let cursor: Node | null = nextRange.start\n while (cursor) {\n const nextSibling: Node | null = cursor.nextSibling\n if (typeof (cursor as Node & { remove?: () => void }).remove === 'function') {\n ;(cursor as Node & { remove: () => void }).remove()\n } else {\n cursor.parentNode?.removeChild(cursor)\n }\n if (cursor === nextRange.end) {\n break\n }\n cursor = nextSibling\n }\n\n for (const componentId of collectComponentBoundaryIds(movedRoots)) {\n preservedComponentIds.add(componentId)\n }\n }\n\n return preservedComponentIds\n}\n\nconst canMatchReusableRoot = (current: Node, next: Node) => {\n if (current.nodeType !== next.nodeType) {\n return false\n }\n\n if (\n (typeof Comment !== 'undefined' ? current instanceof Comment : current.nodeType === 8) &&\n (typeof Comment !== 'undefined' ? next instanceof Comment : next.nodeType === 8)\n ) {\n return (current as Comment).data === (next as Comment).data\n }\n\n if (current.nodeType === DOM_TEXT_NODE && next.nodeType === DOM_TEXT_NODE) {\n return true\n }\n\n return isElementNode(current) && isElementNode(next) && current.tagName === next.tagName\n}\n\nconst preserveInsertMarkerContentsInRoots = (currentRoots: Node[], nextRoots: Node[]) => {\n const preservedComponentIds = new Set<string>()\n\n const preserveLists = (currentChildren: Node[], nextChildren: Node[]) => {\n let currentIndex = 0\n\n for (const nextChild of nextChildren) {\n const nextInsertMarker = (\n typeof Comment !== 'undefined' ? nextChild instanceof Comment : nextChild.nodeType === 8\n )\n ? parseInsertMarker((nextChild as Comment).data)\n : null\n if (nextInsertMarker) {\n let markerIndex = -1\n for (let index = currentIndex; index < currentChildren.length; index += 1) {\n const currentChild = currentChildren[index]!\n if (\n !(typeof Comment !== 'undefined'\n ? currentChild instanceof Comment\n : currentChild.nodeType === 8)\n ) {\n continue\n }\n const currentInsertMarker = parseInsertMarker((currentChild as Comment).data)\n if (currentInsertMarker?.key === nextInsertMarker.key) {\n markerIndex = index\n break\n }\n }\n if (markerIndex < 0) {\n continue\n }\n\n const currentMarker = currentChildren[markerIndex]! as Comment\n const explicitCount = insertMarkerNodeCounts.get(currentMarker)\n if (explicitCount === undefined) {\n currentIndex = markerIndex + 1\n continue\n }\n const ownedStartIndex =\n explicitCount >= 0 && markerIndex - explicitCount >= currentIndex\n ? markerIndex - explicitCount\n : currentIndex\n const movedRoots = currentChildren.slice(ownedStartIndex, markerIndex)\n if (collectComponentBoundaryIds(movedRoots).size > 0) {\n currentIndex = markerIndex + 1\n continue\n }\n\n for (const node of movedRoots) {\n nextChild.parentNode?.insertBefore(node, nextChild)\n }\n insertMarkerNodeCounts.set(nextChild as Comment, movedRoots.length)\n\n for (const componentId of collectComponentBoundaryIds(movedRoots)) {\n preservedComponentIds.add(componentId)\n }\n\n currentIndex = markerIndex + 1\n continue\n }\n\n let matchedIndex = -1\n for (let index = currentIndex; index < currentChildren.length; index += 1) {\n if (canMatchReusableRoot(currentChildren[index]!, nextChild)) {\n matchedIndex = index\n break\n }\n }\n if (matchedIndex < 0) {\n continue\n }\n\n const currentChild = currentChildren[matchedIndex]!\n if (isElementNode(currentChild) && isElementNode(nextChild)) {\n preserveLists(Array.from(currentChild.childNodes), Array.from(nextChild.childNodes))\n }\n currentIndex = matchedIndex + 1\n }\n }\n\n preserveLists(currentRoots, nextRoots)\n\n return preservedComponentIds\n}\n\nexport const preserveReusableContentInRoots = (\n currentRoots: Node[],\n nextRoots: Node[],\n options?: {\n preserveProjectionSlots?: boolean\n },\n) => {\n const preservedComponentIds = preserveComponentBoundaryContentsInRoots(currentRoots, nextRoots)\n\n if (options?.preserveProjectionSlots ?? true) {\n for (const componentId of preserveProjectionSlotContentsInRoots(currentRoots, nextRoots)) {\n preservedComponentIds.add(componentId)\n }\n }\n\n for (const componentId of preserveKeyedRangeContentsInRoots(currentRoots, nextRoots)) {\n preservedComponentIds.add(componentId)\n }\n\n for (const componentId of preserveInsertMarkerContentsInRoots(currentRoots, nextRoots)) {\n preservedComponentIds.add(componentId)\n }\n\n return preservedComponentIds\n}\n\nconst replaceProjectionSlotContents = (start: Comment, end: Comment, nodes: Node[]) => {\n let cursor = start.nextSibling\n while (cursor && cursor !== end) {\n const next = cursor.nextSibling\n cursor.remove()\n cursor = next\n }\n for (const node of nodes) {\n end.parentNode?.insertBefore(node, end)\n }\n rememberManagedAttributesForNodes(nodes)\n}\n\nconst replaceBoundaryContents = (\n start: Comment,\n end: Comment,\n nodes: Node[],\n options?: {\n preserveProjectionSlots?: boolean\n },\n) => {\n const preservedComponentIds = preserveReusableContentInRoots(\n getBoundaryChildren(start, end),\n nodes,\n {\n preserveProjectionSlots: options?.preserveProjectionSlots ?? true,\n },\n )\n let cursor = start.nextSibling\n while (cursor && cursor !== end) {\n const next = cursor.nextSibling\n cursor.remove()\n cursor = next\n }\n for (const node of nodes) {\n end.parentNode?.insertBefore(node, end)\n }\n rememberManagedAttributesForNodes(nodes)\n\n return preservedComponentIds\n}\n\nexport const syncManagedElementAttributes = (current: Element, next: Element) => {\n const nextNames = new Set(next.getAttributeNames())\n const previousNames = getManagedAttributeSnapshot(current) ?? new Set<string>()\n\n for (const name of previousNames) {\n if (!nextNames.has(name)) {\n current.removeAttribute(name)\n }\n }\n\n for (const name of nextNames) {\n const nextValue = next.getAttribute(name)\n if (nextValue !== null && current.getAttribute(name) !== nextValue) {\n current.setAttribute(name, nextValue)\n }\n }\n\n replaceManagedAttributeSnapshot(current, nextNames)\n\n if (isHTMLInputElementNode(current) && isHTMLInputElementNode(next)) {\n if (current.checked !== next.checked) {\n current.checked = next.checked\n }\n }\n if ('value' in current && 'value' in next && current.value !== next.value) {\n if (current.value !== next.value) {\n current.value = next.value\n }\n }\n}\n\nexport const tryPatchElementShellInPlace = (current: Element, next: Element) => {\n if (current.tagName !== next.tagName) {\n return false\n }\n\n syncManagedElementAttributes(current, next)\n preserveReusableContentInRoots(Array.from(current.childNodes), Array.from(next.childNodes))\n while (current.firstChild) {\n current.firstChild.remove()\n }\n while (next.firstChild) {\n current.appendChild(next.firstChild)\n }\n rememberManagedAttributesForNodes(Array.from(current.childNodes))\n return true\n}\n\nconst collectInsertRangeOwnedNodes = (marker: Comment, ownedNodeCount: number) => {\n if (!marker.parentNode || ownedNodeCount === 0) {\n return [] as Node[]\n }\n\n const nodes: Node[] = []\n let cursor: Node | null = marker.previousSibling\n while (cursor && nodes.length < ownedNodeCount) {\n nodes.unshift(cursor)\n cursor = cursor.previousSibling\n }\n\n return nodes.length === ownedNodeCount ? nodes : []\n}\n\nconst replaceInsertRangeOwnedNodes = (\n currentMarker: Comment,\n currentOwnedNodes: Node[],\n nextOwnedNodes: Node[],\n) => {\n const parent = currentMarker.parentNode\n if (!parent) {\n return false\n }\n\n preserveReusableContentInRoots(currentOwnedNodes, nextOwnedNodes)\n\n for (const node of currentOwnedNodes) {\n if (typeof (node as Node & { remove?: () => void }).remove === 'function') {\n ;(node as Node & { remove: () => void }).remove()\n continue\n }\n node.parentNode?.removeChild(node)\n }\n for (const node of nextOwnedNodes) {\n parent.insertBefore(node, currentMarker)\n }\n\n rememberManagedAttributesForNodes(parent.childNodes)\n insertMarkerNodeCounts.set(currentMarker, nextOwnedNodes.length)\n return true\n}\n\ntype PatchSequenceUnit =\n | { kind: 'node'; node: Node; nodeCount: number }\n | {\n bodyNodes: Node[]\n end: Comment\n kind: 'opaque-range'\n nodeCount: number\n rangeKind: 'component-boundary' | 'keyed' | 'projection-slot'\n start: Comment\n token: string\n }\n | {\n kind: 'insert-range'\n marker: Comment\n nodeCount: number\n token: string\n }\n\nconst getPatchOpaqueRangeToken = (node: Node, kind: 'start' | 'end') => {\n if (!(typeof Comment !== 'undefined' ? node instanceof Comment : node.nodeType === 8)) {\n return null\n }\n\n const comment = node as Comment\n const boundary = parseComponentBoundaryMarker(comment.data)\n if (boundary?.kind === kind) {\n return {\n rangeKind: 'component-boundary' as const,\n token: `component-boundary:${boundary.id}`,\n }\n }\n\n const projectionSlot = parseProjectionSlotMarker(comment.data)\n if (projectionSlot?.kind === kind) {\n return {\n rangeKind: 'projection-slot' as const,\n token: `projection-slot:${projectionSlot.key}`,\n }\n }\n\n const keyedRange = parseKeyedRangeMarker(comment.data)\n if (keyedRange?.kind === kind) {\n return {\n rangeKind: 'keyed' as const,\n token: `keyed:${keyedRange.key}`,\n }\n }\n\n return null\n}\n\nconst collectPatchSequenceUnits = (nodes: Node[]): PatchSequenceUnit[] | null => {\n const units: PatchSequenceUnit[] = []\n\n for (let index = 0; index < nodes.length; index += 1) {\n const node = nodes[index]!\n const token = getPatchOpaqueRangeToken(node, 'start')\n if (!token) {\n const insertMarker =\n (typeof Comment !== 'undefined' ? node instanceof Comment : node.nodeType === 8) &&\n parseInsertMarker((node as Comment).data)\n if (!insertMarker) {\n units.push({ kind: 'node', node, nodeCount: 1 })\n continue\n }\n\n const ownedNodeCount = insertMarkerNodeCounts.get(node as Comment) ?? 0\n let remaining = ownedNodeCount\n while (remaining > 0) {\n const previous = units[units.length - 1]\n if (!previous || previous.nodeCount > remaining) {\n return null\n }\n remaining -= previous.nodeCount\n units.pop()\n }\n\n units.push({\n kind: 'insert-range',\n marker: node as Comment,\n nodeCount: ownedNodeCount + 1,\n token: `insert:${insertMarker.key}`,\n })\n continue\n }\n\n let endIndex = index + 1\n while (endIndex < nodes.length) {\n const endToken = getPatchOpaqueRangeToken(nodes[endIndex]!, 'end')\n if (endToken && endToken.rangeKind === token.rangeKind && endToken.token === token.token) {\n break\n }\n endIndex += 1\n }\n if (endIndex >= nodes.length) {\n units.push({ kind: 'node', node, nodeCount: 1 })\n continue\n }\n\n units.push({\n bodyNodes: nodes.slice(index + 1, endIndex),\n end: nodes[endIndex]! as Comment,\n kind: 'opaque-range',\n nodeCount: endIndex - index + 1,\n rangeKind: token.rangeKind,\n start: node as Comment,\n token: token.token,\n })\n index = endIndex\n }\n\n return units\n}\n\nconst hasStructuredPatchUnits = (nodes: Node[]) => {\n const units = collectPatchSequenceUnits(nodes)\n if (!units) {\n return true\n }\n return units.some((unit) => unit.kind !== 'node')\n}\n\nexport const tryPatchNodeSequenceInPlace = (currentNodes: Node[], nextNodes: Node[]) => {\n const currentUnits = collectPatchSequenceUnits(currentNodes)\n const nextUnits = collectPatchSequenceUnits(nextNodes)\n if (!currentUnits || !nextUnits || currentUnits.length !== nextUnits.length) {\n return false\n }\n\n for (let index = 0; index < currentUnits.length; index += 1) {\n const currentUnit = currentUnits[index]!\n const nextUnit = nextUnits[index]!\n if (currentUnit.kind !== nextUnit.kind) {\n return false\n }\n if (currentUnit.kind === 'insert-range' && nextUnit.kind === 'insert-range') {\n const currentOwnedNodes = collectInsertRangeOwnedNodes(\n currentUnit.marker,\n currentUnit.nodeCount - 1,\n )\n const nextOwnedNodes = collectInsertRangeOwnedNodes(nextUnit.marker, nextUnit.nodeCount - 1)\n if (\n currentUnit.token !== nextUnit.token &&\n (hasStructuredPatchUnits(currentOwnedNodes) || hasStructuredPatchUnits(nextOwnedNodes))\n ) {\n return false\n }\n if (\n currentOwnedNodes.length > 0 ||\n nextOwnedNodes.length > 0 ||\n currentUnit.nodeCount !== nextUnit.nodeCount\n ) {\n if (!tryPatchNodeSequenceInPlace(currentOwnedNodes, nextOwnedNodes)) {\n if (\n !replaceInsertRangeOwnedNodes(currentUnit.marker, currentOwnedNodes, nextOwnedNodes)\n ) {\n return false\n }\n } else {\n insertMarkerNodeCounts.set(currentUnit.marker, nextOwnedNodes.length)\n }\n }\n continue\n }\n if (currentUnit.kind === 'opaque-range' && nextUnit.kind === 'opaque-range') {\n if (currentUnit.token !== nextUnit.token || currentUnit.rangeKind !== nextUnit.rangeKind) {\n return false\n }\n if (currentUnit.rangeKind === 'component-boundary') {\n const symbolChanged = Boolean(\n (\n nextUnit.start as Comment & {\n [COMPONENT_BOUNDARY_SYMBOL_CHANGED]?: boolean\n }\n )[COMPONENT_BOUNDARY_SYMBOL_CHANGED],\n )\n if (symbolChanged) {\n return false\n }\n const propsChanged = Boolean(\n (\n nextUnit.start as Comment & {\n [COMPONENT_BOUNDARY_PROPS_CHANGED]?: boolean\n }\n )[COMPONENT_BOUNDARY_PROPS_CHANGED],\n )\n if (propsChanged) {\n const nextRangeNodes = nextUnit.bodyNodes\n if (\n !tryPatchBoundaryContentsInPlace(currentUnit.start, currentUnit.end, nextRangeNodes)\n ) {\n replaceBoundaryContents(currentUnit.start, currentUnit.end, nextRangeNodes)\n }\n }\n } else if (currentUnit.rangeKind === 'keyed') {\n const nextRangeNodes = nextUnit.bodyNodes\n if (!tryPatchNodeSequenceInPlace(currentUnit.bodyNodes, nextRangeNodes)) {\n replaceBoundaryContents(currentUnit.start, currentUnit.end, nextRangeNodes)\n }\n }\n continue\n }\n if (currentUnit.kind !== 'node' || nextUnit.kind !== 'node') {\n return false\n }\n if (!patchNodeInPlace(currentUnit.node, nextUnit.node)) {\n return false\n }\n }\n\n return true\n}\n\nconst patchNodeInPlace = (current: Node, next: Node): boolean => {\n if (current.nodeType !== next.nodeType) {\n return false\n }\n\n if (current.nodeType === DOM_TEXT_NODE && next.nodeType === DOM_TEXT_NODE) {\n if (current.textContent !== next.textContent) {\n current.textContent = next.textContent\n }\n return true\n }\n\n if (current.nodeType === DOM_COMMENT_NODE && next.nodeType === DOM_COMMENT_NODE) {\n const currentComment = current as Comment\n const nextComment = next as Comment\n const currentIsProjectionSlot = !!parseProjectionSlotMarker(currentComment.data)\n const nextIsProjectionSlot = !!parseProjectionSlotMarker(nextComment.data)\n const currentIsBoundaryMarker = !!parseComponentBoundaryMarker(currentComment.data)\n const nextIsBoundaryMarker = !!parseComponentBoundaryMarker(nextComment.data)\n const currentIsInsertMarker = !!parseInsertMarker(currentComment.data)\n const nextIsInsertMarker = !!parseInsertMarker(nextComment.data)\n if (\n currentIsProjectionSlot ||\n nextIsProjectionSlot ||\n currentIsBoundaryMarker ||\n nextIsBoundaryMarker ||\n currentIsInsertMarker ||\n nextIsInsertMarker\n ) {\n return currentComment.data === nextComment.data\n }\n if (currentComment.data !== nextComment.data) {\n currentComment.data = nextComment.data\n }\n return true\n }\n\n if (!isElementNode(current) || !isElementNode(next) || current.tagName !== next.tagName) {\n return false\n }\n\n if (tryPatchNodeSequenceInPlace(Array.from(current.childNodes), Array.from(next.childNodes))) {\n syncManagedElementAttributes(current, next)\n return true\n }\n\n return tryPatchElementShellInPlace(current, next)\n}\n\nexport const tryPatchBoundaryContentsInPlace = (\n start: Comment,\n end: Comment,\n nextNodes: Node[],\n) => {\n const currentNodes = getBoundaryChildren(start, end)\n return tryPatchNodeSequenceInPlace(currentNodes, nextNodes)\n}\n\ninterface FocusSnapshot {\n path: number[]\n selectionDirection?: 'backward' | 'forward' | 'none' | null\n selectionEnd?: number | null\n selectionStart?: number | null\n}\n\ninterface PendingFocusRestore {\n snapshot: FocusSnapshot\n}\n\nconst getBoundaryChildren = (start: Comment, end: Comment) => {\n const nodes: Node[] = []\n let cursor = start.nextSibling\n while (cursor && cursor !== end) {\n nodes.push(cursor)\n cursor = cursor.nextSibling\n }\n return nodes\n}\n\nconst collectMountedBoundaryDescendants = (component: ComponentState) =>\n component.start && component.end\n ? collectComponentBoundaryIds(getBoundaryChildren(component.start, component.end))\n : new Set<string>()\n\nconst collectMountedDescendantComponentIds = (\n container: RuntimeContainer,\n component: ComponentState,\n) => expandComponentIdsToDescendants(container, collectMountedBoundaryDescendants(component))\n\nconst collectProjectionSlotComponentIds = (roots: Node[]) => {\n const preserved = new Set<string>()\n for (const range of collectProjectionSlotRanges(roots).values()) {\n for (const componentId of collectComponentBoundaryIds(\n getBoundaryChildren(range.start, range.end),\n )) {\n preserved.add(componentId)\n }\n }\n return preserved\n}\n\nconst collectPreservedProjectionSlotComponentIds = (\n container: RuntimeContainer,\n start: Comment,\n end: Comment,\n) =>\n expandComponentIdsToDescendants(\n container,\n collectProjectionSlotComponentIds(getBoundaryChildren(start, end)),\n )\n\nconst getNodePath = (root: Node, target: Node): number[] | null => {\n if (root === target) {\n return []\n }\n\n const path: number[] = []\n let cursor: Node | null = target\n while (cursor && cursor !== root) {\n const parent: Node | null = cursor.parentNode\n if (!parent) {\n return null\n }\n const index = Array.prototype.indexOf.call(parent.childNodes, cursor)\n if (index < 0) {\n return null\n }\n path.unshift(index)\n cursor = parent\n }\n\n return cursor === root ? path : null\n}\n\nconst getNodeByPath = (root: Node, path: number[]) => {\n let cursor: Node | null = root\n for (const index of path) {\n const childNodes: NodeListOf<ChildNode> | Node[] | undefined = cursor\n ? ((cursor.childNodes as NodeListOf<ChildNode>) ?? undefined)\n : undefined\n cursor =\n (childNodes &&\n ('item' in childNodes\n ? (childNodes.item(index) as Node | null)\n : ((childNodes as unknown as Node[])[index] ?? null))) ??\n null\n if (!cursor) {\n return null\n }\n }\n return cursor\n}\n\nconst getElementPath = (root: Element, target: Element): number[] | null => {\n if (root === target) {\n return []\n }\n\n const path: number[] = []\n let cursor: Element | null = target\n while (cursor && cursor !== root) {\n const parent: HTMLElement | null = cursor.parentElement\n if (!parent) {\n return null\n }\n const index = Array.prototype.indexOf.call(parent.children, cursor)\n if (index < 0) {\n return null\n }\n path.unshift(index)\n cursor = parent\n }\n\n return cursor === root ? path : null\n}\n\nconst getElementByPath = (root: Element, path: number[]) => {\n let cursor: Element | null = root\n for (const index of path) {\n const children: HTMLCollection | Element[] | undefined = cursor\n ? ((cursor.children as HTMLCollection) ?? undefined)\n : undefined\n cursor =\n (children &&\n ('item' in children\n ? (children.item(index) as Element | null)\n : ((children as unknown as Element[])[index] ?? null))) ??\n null\n if (!cursor) {\n return null\n }\n }\n return cursor\n}\n\nconst captureBoundaryFocus = (\n doc: Document,\n start: Comment,\n end: Comment,\n): FocusSnapshot | null => {\n const activeElement = doc.activeElement\n if (!isHTMLElementNode(activeElement)) {\n return null\n }\n\n const topLevelNodes = getBoundaryChildren(start, end)\n for (let i = 0; i < topLevelNodes.length; i++) {\n const candidate = topLevelNodes[i]\n if (\n candidate !== activeElement &&\n (!isElementNode(candidate) || !candidate.contains(activeElement))\n ) {\n continue\n }\n\n const innerPath = getNodePath(candidate, activeElement)\n if (!innerPath) {\n continue\n }\n\n return {\n path: [i, ...innerPath],\n selectionDirection: isTextEntryElement(activeElement)\n ? activeElement.selectionDirection\n : null,\n selectionEnd: isTextEntryElement(activeElement) ? activeElement.selectionEnd : null,\n selectionStart: isTextEntryElement(activeElement) ? activeElement.selectionStart : null,\n }\n }\n\n return null\n}\n\nconst restoreBoundaryFocus = (\n doc: Document,\n start: Comment,\n end: Comment,\n snapshot: FocusSnapshot | null,\n) => {\n if (!snapshot) {\n return\n }\n\n const [topLevelIndex, ...innerPath] = snapshot.path\n const root = getBoundaryChildren(start, end)[topLevelIndex]\n if (!root) {\n return\n }\n\n const nextActive = innerPath.length > 0 ? getNodeByPath(root, innerPath) : root\n if (!isHTMLElementNode(nextActive)) {\n return\n }\n\n restoreFocusTarget(doc, nextActive, snapshot)\n}\n\nconst restoreFocusTarget = (doc: Document, nextActive: HTMLElement, snapshot: FocusSnapshot) => {\n const restore = () => {\n if (!nextActive.isConnected) {\n return false\n }\n nextActive.focus({ preventScroll: true })\n if (\n isTextEntryElement(nextActive) &&\n snapshot.selectionStart !== null &&\n snapshot.selectionStart !== undefined\n ) {\n nextActive.setSelectionRange(\n snapshot.selectionStart,\n snapshot.selectionEnd ?? snapshot.selectionStart,\n snapshot.selectionDirection ?? undefined,\n )\n }\n return doc.activeElement === nextActive\n }\n\n if (restore()) {\n return\n }\n\n const win = doc.defaultView\n if (!win) {\n return\n }\n\n let remainingAttempts = 3\n const retry = () => {\n if (remainingAttempts <= 0) {\n return\n }\n remainingAttempts--\n const run = () => {\n if (restore()) {\n return\n }\n retry()\n }\n\n if (typeof win.requestAnimationFrame === 'function') {\n win.requestAnimationFrame(() => run())\n return\n }\n win.setTimeout(run, 16)\n }\n\n retry()\n}\n\nconst captureDocumentFocus = (\n doc: Document,\n focusSource?: EventTarget | null,\n): FocusSnapshot | null => {\n const candidate = isHTMLElementNode(focusSource)\n ? focusSource\n : isHTMLElementNode(doc.activeElement)\n ? doc.activeElement\n : null\n if (!candidate) {\n return null\n }\n\n const path = getElementPath(doc.body, candidate)\n if (!path) {\n return null\n }\n\n return {\n path,\n selectionDirection: isTextEntryElement(candidate) ? candidate.selectionDirection : null,\n selectionEnd: isTextEntryElement(candidate) ? candidate.selectionEnd : null,\n selectionStart: isTextEntryElement(candidate) ? candidate.selectionStart : null,\n }\n}\n\nconst capturePendingFocusRestore = (\n container: RuntimeContainer,\n focusSource?: EventTarget | null,\n): PendingFocusRestore | null => {\n if (!container.doc) {\n return null\n }\n\n const snapshot = captureDocumentFocus(container.doc, focusSource)\n if (!snapshot) {\n return null\n }\n return {\n snapshot,\n }\n}\n\nconst shouldSkipPendingFocusRestore = (\n container: RuntimeContainer,\n pending: PendingFocusRestore,\n) => {\n if (!container.doc) {\n return false\n }\n\n const activeElement = container.doc.activeElement\n if (!isHTMLElementNode(activeElement)) {\n return false\n }\n if (\n activeElement === container.doc.body ||\n !activeElement.isConnected ||\n !container.doc.body.contains(activeElement)\n ) {\n return false\n }\n\n const activePath = getElementPath(container.doc.body, activeElement)\n if (!activePath) {\n return false\n }\n\n if (activePath.length !== pending.snapshot.path.length) {\n return true\n }\n\n return activePath.some((index, position) => index !== pending.snapshot.path[position])\n}\n\nconst restorePendingFocus = (container: RuntimeContainer, pending: PendingFocusRestore | null) => {\n if (!pending || !container.doc) {\n return\n }\n if (shouldSkipPendingFocusRestore(container, pending)) {\n return\n }\n\n const nextActive = getElementByPath(container.doc.body, pending.snapshot.path)\n if (!isHTMLElementNode(nextActive)) {\n return\n }\n\n restoreFocusTarget(container.doc, nextActive, pending.snapshot)\n}\n\nconst EVENT_PROP_REGEX = /^on([A-Z].+)$/\nconst DANGEROUSLY_SET_INNER_HTML_PROP = 'dangerouslySetInnerHTML'\n\nconst resolveDangerouslySetInnerHTML = (value: unknown) =>\n value === false || value === undefined || value === null ? null : String(value)\n\nconst toEventName = (propName: string) => {\n const matched = propName.match(EVENT_PROP_REGEX)\n if (!matched) {\n return null\n }\n const [first, ...rest] = matched[1]\n return `${first.toLowerCase()}${rest.join('')}`\n}\n\nconst TEXT_ESCAPE_REGEX = /[&<>]/\nconst ATTR_ESCAPE_REGEX = /[&<>'\"]/\n\nconst escapeString = (value: string, mode: 'text' | 'attr') => {\n const escapePattern = mode === 'attr' ? ATTR_ESCAPE_REGEX : TEXT_ESCAPE_REGEX\n const firstMatch = value.search(escapePattern)\n if (firstMatch < 0) {\n return value\n }\n\n let output = ''\n let lastIndex = 0\n for (let index = firstMatch; index < value.length; index += 1) {\n let escaped: string | null = null\n switch (value.charCodeAt(index)) {\n case 34:\n escaped = mode === 'attr' ? '"' : null\n break\n case 38:\n escaped = '&'\n break\n case 39:\n escaped = mode === 'attr' ? ''' : null\n break\n case 60:\n escaped = '<'\n break\n case 62:\n escaped = '>'\n break\n }\n if (!escaped) {\n continue\n }\n output += value.slice(lastIndex, index)\n output += escaped\n lastIndex = index + 1\n }\n return output + value.slice(lastIndex)\n}\n\nconst escapeText = (value: string) => escapeString(value, 'text')\n\nconst escapeAttr = (value: string) => escapeString(value, 'attr')\n\nconst renderSSRAttr = (name: string, value: unknown) => {\n if (value === false || value === undefined || value === null) {\n return ''\n }\n if (value === true) {\n return ` ${name}`\n }\n return ` ${name}=\"${escapeAttr(String(value))}\"`\n}\n\nconst renderStringArray = (values: readonly (JSX.Element | JSX.Element[])[]) => {\n let output = ''\n for (let index = 0; index < values.length; index += 1) {\n output += renderStringNode(values[index] as JSX.Element | JSX.Element[])\n }\n return output\n}\n\nconst renderSSRTemplateValue = (value: unknown): string => {\n if (value === false || value === null || value === undefined) {\n return ''\n }\n if (Array.isArray(value)) {\n return renderStringArray(value as readonly (JSX.Element | JSX.Element[])[])\n }\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return escapeText(String(value))\n }\n if (isSSRTemplate(value)) {\n return renderSSRTemplateNode(value)\n }\n if (isProjectionSlot(value)) {\n return renderProjectionSlotToString(value)\n }\n if (isRouteSlot(value)) {\n const routeElement = resolveRouteSlot(getCurrentContainer(), value)\n return routeElement ? renderStringNode(routeElement as JSX.Element) : ''\n }\n return renderStringNode(value as JSX.Element)\n}\n\nconst renderSSRTemplateNode = (template: JSX.SSRTemplate) => {\n let output = template.strings[0] ?? ''\n for (let index = 0; index < template.values.length; index += 1) {\n const value = template.values[index]\n output += isSSRAttrValue(value)\n ? renderSSRAttr(value.name, value.value)\n : renderSSRTemplateValue(value)\n output += template.strings[index + 1] ?? ''\n }\n return output\n}\n\nconst resolveRenderable = (value: JSX.Element): JSX.Element => {\n let current = value\n while (\n typeof current === 'function' &&\n !getLazyMeta(current) &&\n !getComponentMeta(current) &&\n !getContextProviderMeta(current)\n ) {\n current = current()\n }\n return current\n}\n\nconst nextComponentPosition = (container: RuntimeContainer) => {\n const frame = getCurrentFrame()\n if (!frame) {\n return {\n childIndex: container.rootChildCursor++,\n parentId: ROOT_COMPONENT_ID,\n }\n }\n return {\n childIndex: frame.childCursor++,\n parentId: frame.component.id,\n }\n}\n\nconst registerEventBinding = (\n container: RuntimeContainer,\n descriptor: EventDescriptor | LazyMeta,\n): string => {\n const scopeId = registerScope(container, descriptor.captures())\n return `${descriptor.symbol}:${scopeId}`\n}\n\nconst getRuntimeEventDescriptor = (value: unknown): EventDescriptor | LazyMeta | null =>\n getEventMeta(value) ?? getLazyMeta(value)\n\nconst isForValue = (value: unknown): value is ForValue =>\n !!value && typeof value === 'object' && (value as ForValue).__e_for === true\n\nconst isShowValue = (value: unknown): value is ShowValue =>\n !!value && typeof value === 'object' && (value as ShowValue).__e_show === true\n\nexport const bindRuntimeEvent = (element: Element, eventName: string, value: unknown): boolean => {\n const descriptor = getRuntimeEventDescriptor(value)\n if (!descriptor) {\n return false\n }\n\n const container = getCurrentContainer()\n if (!container) {\n return false\n }\n\n element.setAttribute('data-eid', `e${container.nextElementId++}`)\n element.setAttribute(`data-e-on${eventName}`, registerEventBinding(container, descriptor))\n syncManagedAttributeSnapshot(element, 'data-eid')\n syncManagedAttributeSnapshot(element, `data-e-on${eventName}`)\n return true\n}\n\nconst renderProjectionSlotToString = (slot: ProjectionSlotValue) => {\n const frame = getCurrentFrame()\n const start = createProjectionSlotMarker(slot.componentId, slot.name, slot.occurrence, 'start')\n const end = createProjectionSlotMarker(slot.componentId, slot.name, slot.occurrence, 'end')\n if (frame?.component.id === slot.componentId && frame.projectionState.reuseExistingDom) {\n return `<!--${start}--><!--${end}-->`\n }\n return `<!--${start}-->${renderStringNode(slot.source as JSX.Element)}<!--${end}-->`\n}\n\nconst wrapStringWithKeyedRange = (value: string, key: string | number | symbol) => {\n const start = createKeyedRangeMarker(key, 'start')\n const end = createKeyedRangeMarker(key, 'end')\n return `<!--${start}-->${value}<!--${end}-->`\n}\n\nconst resolveForItemKey = <T>(\n value: ForValue<T>,\n item: T,\n index: number,\n): string | number | symbol =>\n value.key\n ? value.key(item, index)\n : typeof item === 'string' || typeof item === 'number' || typeof item === 'symbol'\n ? item\n : index\n\nconst stripForChildRootKey = (value: JSX.Element): JSX.Element => {\n const resolved = resolveRenderable(value)\n if (!isRenderObject(resolved) || resolved.key === null || resolved.key === undefined) {\n return resolved\n }\n return {\n ...resolved,\n key: undefined,\n }\n}\n\nconst resolveShowBranch = <T>(value: ShowValue<T>): JSX.Element => {\n const branch = !value.when ? (value.fallback ?? null) : value.children\n return typeof branch === 'function'\n ? (branch as (nextValue: T) => JSX.Element)(value.when)\n : branch\n}\n\nconst renderForValueToString = <T>(value: ForValue<T>): string => {\n if (value.arr.length === 0) {\n return renderStringNode((value.fallback ?? null) as JSX.Element)\n }\n\n let output = ''\n for (let index = 0; index < value.arr.length; index += 1) {\n const item = value.arr[index]!\n output += wrapStringWithKeyedRange(\n renderStringNode(stripForChildRootKey(value.fn(item, index))),\n resolveForItemKey(value, item, index),\n )\n }\n return output\n}\n\nconst renderProjectionSlotToNodes = (slot: ProjectionSlotValue, container: RuntimeContainer) => {\n if (!container.doc) {\n throw new Error('Client rendering requires a document.')\n }\n const frame = getCurrentFrame()\n\n const start = container.doc.createComment(\n createProjectionSlotMarker(slot.componentId, slot.name, slot.occurrence, 'start'),\n )\n const end = container.doc.createComment(\n createProjectionSlotMarker(slot.componentId, slot.name, slot.occurrence, 'end'),\n )\n if (frame?.component.id === slot.componentId && frame.projectionState.reuseExistingDom) {\n return [start, end]\n }\n return [start, ...renderClientInsertable(slot.source, container), end]\n}\n\nconst renderContextProviderToString = (\n token: RuntimeContextToken,\n props: Record<string, unknown>,\n) =>\n withRuntimeContextValue(token, props.value, () =>\n renderStringNode((props.children ?? null) as JSX.Element | JSX.Element[]),\n )\n\nconst renderContextProviderToNodes = (\n token: RuntimeContextToken,\n props: Record<string, unknown>,\n container: RuntimeContainer,\n) =>\n withRuntimeContextValue(token, props.value, () =>\n renderClientNodes((props.children ?? null) as JSX.Element | JSX.Element[], container),\n )\n\nconst renderStringNode = (inputElementLike: JSX.Element | JSX.Element[]): string => {\n if (Array.isArray(inputElementLike)) {\n return renderStringArray(inputElementLike)\n }\n\n const resolved = resolveRenderable(inputElementLike as JSX.Element)\n if (resolved === false || resolved === null || resolved === undefined) {\n return ''\n }\n if (Array.isArray(resolved)) {\n return renderStringNode(resolved)\n }\n if (\n typeof resolved === 'string' ||\n typeof resolved === 'number' ||\n typeof resolved === 'boolean'\n ) {\n return escapeText(String(resolved))\n }\n if (isShowValue(resolved)) {\n return renderStringNode(resolveShowBranch(resolved))\n }\n if (isForValue(resolved)) {\n return renderForValueToString(resolved)\n }\n if (isSSRTemplate(resolved)) {\n return renderSSRTemplateNode(resolved)\n }\n if (isProjectionSlot(resolved)) {\n return renderProjectionSlotToString(resolved)\n }\n if (isRouteSlot(resolved)) {\n const routeElement = resolveRouteSlot(getCurrentContainer(), resolved)\n return routeElement ? renderStringNode(routeElement as JSX.Element) : ''\n }\n if (!isRenderObject(resolved)) {\n return ''\n }\n\n if (isSuspenseType(resolved.type)) {\n const rendered = renderSuspenseComponentToString(resolved.props as SuspenseProps)\n return resolved.key === null || resolved.key === undefined\n ? rendered\n : wrapStringWithKeyedRange(rendered, resolved.key)\n }\n\n if (typeof resolved.type === 'function') {\n const providerMeta = getContextProviderMeta(resolved.type)\n if (providerMeta) {\n return renderContextProviderToString(providerMeta.token, evaluateProps(resolved.props))\n }\n\n const container = getCurrentContainer()\n const componentFn = resolved.type as Component\n const meta = getComponentMeta(componentFn)\n if (!meta || !container) {\n const rendered = renderStringNode(componentFn(resolved.props))\n return resolved.key === null || resolved.key === undefined\n ? rendered\n : wrapStringWithKeyedRange(rendered, resolved.key)\n }\n\n const evaluatedProps = evaluateProps(resolved.props)\n const position = nextComponentPosition(container)\n const componentId = createComponentId(container, position.parentId, position.childIndex)\n const component = getOrCreateComponentState(\n container,\n componentId,\n meta.symbol,\n position.parentId,\n )\n component.scopeId = registerScope(container, meta.captures())\n component.optimizedRoot = meta.optimizedRoot === true\n component.props = evaluatedProps\n component.projectionSlots = meta.projectionSlots ?? null\n const frame = createFrame(container, component, 'ssr')\n clearComponentSubscriptions(container, component.id)\n const renderProps = createRenderProps(componentId, meta, resolved.props)\n\n const body = pushFrame(frame, () => renderStringNode(componentFn(renderProps)))\n pruneComponentVisibles(container, component, frame.visibleCursor)\n pruneComponentWatches(container, component, frame.watchCursor)\n const rendered = `<!--ec:c:${componentId}:start-->${renderFrameScopedStylesToString(frame)}${body}<!--ec:c:${componentId}:end-->`\n return resolved.key === null || resolved.key === undefined\n ? rendered\n : wrapStringWithKeyedRange(rendered, resolved.key)\n }\n\n const attrParts: string[] = []\n const container = getCurrentContainer()\n const frame = getCurrentFrame()\n let hasInnerHTML = false\n let innerHTML: string | null = null\n\n if (frame && hasScopedStyles(frame) && resolved.type !== 'style') {\n attrParts.push(`${SCOPED_STYLE_ATTR}=\"${escapeAttr(frame.component.scopeId)}\"`)\n }\n\n for (const name in resolved.props) {\n if (!Object.hasOwn(resolved.props, name)) {\n continue\n }\n if (name === 'children') {\n continue\n }\n\n const eventName = toEventName(name)\n const value = resolved.props[name]\n\n if (name === BIND_VALUE_PROP) {\n const signalId = getBindableSignalId(value)\n if (!signalId) {\n continue\n }\n attrParts.push(`${BIND_VALUE_ATTR}=\"${escapeAttr(signalId)}\"`)\n const currentValue = readBindableSignalValue(value)\n if (currentValue !== undefined && currentValue !== null) {\n attrParts.push(`value=\"${escapeAttr(String(currentValue))}\"`)\n }\n continue\n }\n\n if (name === BIND_CHECKED_PROP) {\n const signalId = getBindableSignalId(value)\n if (!signalId) {\n continue\n }\n attrParts.push(`${BIND_CHECKED_ATTR}=\"${escapeAttr(signalId)}\"`)\n if (readBindableSignalValue(value)) {\n attrParts.push('checked')\n }\n continue\n }\n\n if (eventName) {\n const eventMeta = getRuntimeEventDescriptor(value)\n if (!eventMeta || !container) {\n continue\n }\n attrParts.push(`data-eid=\"e${container.nextElementId++}\"`)\n attrParts.push(\n `data-e-on${eventName}=\"${escapeAttr(registerEventBinding(container, eventMeta))}\"`,\n )\n continue\n }\n\n if (name === 'ref') {\n const signalId = getRefSignalId(value)\n if (signalId) {\n attrParts.push(`${REF_SIGNAL_ATTR}=\"${escapeAttr(signalId)}\"`)\n }\n continue\n }\n\n if (name === DANGEROUSLY_SET_INNER_HTML_PROP) {\n hasInnerHTML = true\n innerHTML = resolveDangerouslySetInnerHTML(value)\n continue\n }\n\n if (value === false || value === undefined || value === null) {\n continue\n }\n\n if (resolved.type === 'body' && name === 'data-e-resume') {\n continue\n }\n\n if (value === true) {\n attrParts.push(name)\n continue\n }\n\n attrParts.push(`${name}=\"${escapeAttr(String(value))}\"`)\n }\n\n if (resolved.type === 'body' && container) {\n attrParts.push('data-e-resume=\"paused\"')\n }\n\n let childrenText = innerHTML ?? ''\n if (!hasInnerHTML) {\n const children = resolved.props.children\n if (Array.isArray(children)) {\n for (const child of children) {\n childrenText += renderStringNode(child)\n }\n } else {\n childrenText += renderStringNode(children as JSX.Element)\n }\n }\n\n const rendered =\n resolved.type === FRAGMENT\n ? childrenText\n : `<${resolved.type}${attrParts.length > 0 ? ` ${attrParts.join(' ')}` : ''}>${childrenText}</${\n resolved.type\n }>`\n return resolved.key === null || resolved.key === undefined\n ? rendered\n : wrapStringWithKeyedRange(rendered, resolved.key)\n}\n\nconst createElementNode = (doc: Document, tagName: string) => doc.createElement(tagName)\n\nconst renderComponentToNodes = (\n componentFn: Component,\n props: Record<string, unknown>,\n container: RuntimeContainer,\n mode: RenderFrame['mode'],\n rawProps?: Record<string, unknown>,\n): Node[] => {\n if (!container.doc) {\n throw new Error('Client rendering requires a document.')\n }\n const meta = getComponentMeta(componentFn)\n if (!meta) {\n return renderClientNodes(componentFn((rawProps ?? props) as Record<string, unknown>), container)\n }\n\n const position = nextComponentPosition(container)\n const componentId = createComponentId(container, position.parentId, position.childIndex)\n const existing = container.components.get(componentId)\n const symbolChanged = !!existing && existing.symbol !== meta.symbol\n const component = getOrCreateComponentState(\n container,\n componentId,\n meta.symbol,\n position.parentId,\n )\n const wasActive = component.active\n const previousRenderProps =\n ((component.rawProps ?? component.props) as Record<string, unknown> | null) ?? null\n component.active = mode === 'client'\n if (!existing || symbolChanged) {\n resetComponentForSymbolChange(container, component, meta)\n }\n component.optimizedRoot = meta.optimizedRoot === true\n component.props = props\n component.rawProps = rawProps ?? null\n component.projectionSlots = meta.projectionSlots ?? null\n const parentFrame = getCurrentFrame()\n const shouldReuseProjectionSlotDom = parentFrame?.projectionState.reuseProjectionSlotDom ?? false\n const previousStart = component.start\n const previousEnd = component.end\n const propsChanged =\n symbolChanged ||\n !areShallowEqualRenderProps(\n previousRenderProps,\n ((rawProps ?? props) as Record<string, unknown> | null) ?? null,\n )\n const boundaryContentsChanged = propsChanged || (!wasActive && !!previousStart && !!previousEnd)\n if (mode === 'client' && wasActive && previousStart && previousEnd && !boundaryContentsChanged) {\n const start = container.doc.createComment(`ec:c:${componentId}:start`)\n const end = container.doc.createComment(`ec:c:${componentId}:end`)\n ;(\n start as Comment & {\n [COMPONENT_BOUNDARY_PROPS_CHANGED]?: boolean\n [COMPONENT_BOUNDARY_SYMBOL_CHANGED]?: boolean\n }\n )[COMPONENT_BOUNDARY_PROPS_CHANGED] = false\n ;(\n start as Comment & {\n [COMPONENT_BOUNDARY_PROPS_CHANGED]?: boolean\n [COMPONENT_BOUNDARY_SYMBOL_CHANGED]?: boolean\n }\n )[COMPONENT_BOUNDARY_SYMBOL_CHANGED] = false\n\n if (parentFrame) {\n for (const descendantId of expandComponentIdsToDescendants(container, [componentId])) {\n parentFrame.visitedDescendants.add(descendantId)\n }\n }\n\n return [start, end]\n }\n const speculativeEffectCleanupSlot =\n !previousStart || !previousEnd ? null : boundaryContentsChanged ? null : createCleanupSlot()\n if (!speculativeEffectCleanupSlot) {\n resetComponentRenderEffects(component)\n }\n const frame = createFrame(container, component, mode, {\n effectCleanupSlot: speculativeEffectCleanupSlot ?? component.renderEffectCleanupSlot,\n reuseExistingDom: shouldReuseProjectionSlotDom,\n reuseProjectionSlotDom: shouldReuseProjectionSlotDom,\n })\n clearComponentSubscriptions(container, componentId)\n const oldDescendants = collectDescendantIds(container, componentId)\n const start = container.doc.createComment(`ec:c:${componentId}:start`)\n const end = container.doc.createComment(`ec:c:${componentId}:end`)\n ;(\n start as Comment & {\n [COMPONENT_BOUNDARY_PROPS_CHANGED]?: boolean\n [COMPONENT_BOUNDARY_SYMBOL_CHANGED]?: boolean\n }\n )[COMPONENT_BOUNDARY_PROPS_CHANGED] = boundaryContentsChanged\n ;(\n start as Comment & {\n [COMPONENT_BOUNDARY_PROPS_CHANGED]?: boolean\n [COMPONENT_BOUNDARY_SYMBOL_CHANGED]?: boolean\n }\n )[COMPONENT_BOUNDARY_SYMBOL_CHANGED] = symbolChanged\n if (!previousStart || !previousEnd) {\n component.start = start\n component.end = end\n }\n const renderProps = createRenderProps(componentId, meta, rawProps ?? props)\n let rendered: Node[]\n try {\n rendered = pushFrame(frame, () => toMountedNodes(componentFn(renderProps), container))\n } catch (error) {\n disposeCleanupSlot(speculativeEffectCleanupSlot)\n if (isPendingSignalError(error) && parentFrame) {\n parentFrame.visitedDescendants.add(componentId)\n for (const descendantId of frame.visitedDescendants) {\n parentFrame.visitedDescendants.add(descendantId)\n }\n }\n throw error\n }\n disposeCleanupSlot(speculativeEffectCleanupSlot)\n pruneComponentVisibles(container, component, frame.visibleCursor)\n pruneComponentWatches(container, component, frame.watchCursor)\n const preservedDescendants =\n frame.projectionState.reuseExistingDom && previousStart && previousEnd\n ? collectPreservedProjectionSlotComponentIds(container, previousStart, previousEnd)\n : new Set<string>()\n const keptDescendants = new Set([\n ...frame.visitedDescendants,\n ...preservedDescendants,\n ...collectMountedDescendantComponentIds(container, component),\n ])\n pruneRemovedComponents(container, componentId, keptDescendants)\n\n for (const descendantId of oldDescendants) {\n if (keptDescendants.has(descendantId)) {\n continue\n }\n clearComponentSubscriptions(container, descendantId)\n }\n\n if (parentFrame) {\n parentFrame.visitedDescendants.add(componentId)\n for (const descendantId of keptDescendants) {\n parentFrame.visitedDescendants.add(descendantId)\n }\n }\n\n scheduleMountCallbacks(container, component, frame.mountCallbacks)\n scheduleVisibleCallbacksCheck(container)\n syncEffectOnlyLocalSignalPreference(component)\n\n return [start, ...renderFrameScopedStylesToNodes(frame, container), ...rendered, end]\n}\n\nconst wrapNodesWithKeyedRange = (\n doc: Document,\n nodes: Node[],\n key: string | number | symbol,\n): Node[] => [\n doc.createComment(createKeyedRangeMarker(key, 'start')),\n ...nodes,\n doc.createComment(createKeyedRangeMarker(key, 'end')),\n]\n\nconst renderForValueToNodes = <T>(value: ForValue<T>, container: RuntimeContainer): Node[] => {\n if (value.arr.length === 0) {\n return renderClientNodes((value.fallback ?? null) as JSX.Element, container)\n }\n\n const nodes: Node[] = []\n for (let index = 0; index < value.arr.length; index += 1) {\n const item = value.arr[index]!\n nodes.push(\n ...wrapNodesWithKeyedRange(\n container.doc!,\n renderClientNodes(stripForChildRootKey(value.fn(item, index)), container),\n resolveForItemKey(value, item, index),\n ),\n )\n }\n return nodes\n}\n\nconst applyElementProp = (\n element: HTMLElement,\n name: string,\n value: unknown,\n container: RuntimeContainer,\n) => {\n if (name === BIND_VALUE_PROP) {\n const signalId = getBindableSignalId(value)\n if (signalId) {\n element.setAttribute(BIND_VALUE_ATTR, signalId)\n }\n if ('value' in element) {\n ;(element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement).value = String(\n readBindableSignalValue(value) ?? '',\n )\n }\n return\n }\n\n if (name === BIND_CHECKED_PROP) {\n const signalId = getBindableSignalId(value)\n if (signalId) {\n element.setAttribute(BIND_CHECKED_ATTR, signalId)\n }\n if (isHTMLInputElementNode(element)) {\n element.checked = Boolean(readBindableSignalValue(value))\n }\n return\n }\n\n const eventName = toEventName(name)\n if (eventName) {\n const eventMeta = getRuntimeEventDescriptor(value)\n if (!eventMeta) {\n return\n }\n element.setAttribute('data-eid', `e${container.nextElementId++}`)\n element.setAttribute(`data-e-on${eventName}`, registerEventBinding(container, eventMeta))\n return\n }\n\n if (name === 'ref') {\n syncRuntimeRefMarker(element, value)\n assignRuntimeRef(value, element, container)\n return\n }\n\n if (name === DANGEROUSLY_SET_INNER_HTML_PROP) {\n const html = resolveDangerouslySetInnerHTML(value)\n if (html !== null) {\n element.innerHTML = html\n }\n return\n }\n\n if (value === false || value === undefined || value === null) {\n return\n }\n\n if (name === 'class') {\n element.className = String(value)\n return\n }\n\n if (name === 'style' && isPlainObject(value)) {\n element.setAttribute(\n 'style',\n Object.entries(value)\n .map(([styleName, styleValue]) => `${styleName}: ${styleValue}`)\n .join('; '),\n )\n return\n }\n\n if (name === 'value' && 'value' in element) {\n ;(element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement).value = String(value)\n }\n if (name === 'checked' && isHTMLInputElementNode(element)) {\n element.checked = Boolean(value)\n }\n\n if (value === true) {\n element.setAttribute(name, '')\n return\n }\n\n element.setAttribute(name, String(value))\n}\n\nexport const renderClientNodes = (\n inputElementLike: JSX.Element | JSX.Element[],\n container: RuntimeContainer,\n): Node[] => {\n if (!container.doc) {\n throw new Error('Client rendering requires a document.')\n }\n if (Array.isArray(inputElementLike)) {\n return inputElementLike.flatMap((entry) => renderClientNodes(entry, container))\n }\n\n const resolved = resolveRenderable(inputElementLike as JSX.Element)\n if (resolved === false || resolved === null || resolved === undefined) {\n return []\n }\n if (Array.isArray(resolved)) {\n return renderClientNodes(resolved, container)\n }\n if (\n typeof resolved === 'string' ||\n typeof resolved === 'number' ||\n typeof resolved === 'boolean'\n ) {\n return [container.doc.createTextNode(String(resolved))]\n }\n if (isShowValue(resolved)) {\n return renderClientNodes(resolveShowBranch(resolved), container)\n }\n if (isForValue(resolved)) {\n return renderForValueToNodes(resolved, container)\n }\n if (typeof Node !== 'undefined' && resolved instanceof Node) {\n rememberManagedAttributesForNode(resolved)\n return [resolved]\n }\n if (isProjectionSlot(resolved)) {\n return renderProjectionSlotToNodes(resolved, container)\n }\n if (isRouteSlot(resolved)) {\n const routeElement = resolveRouteSlot(container, resolved)\n return routeElement ? renderClientNodes(routeElement as JSX.Element, container) : []\n }\n if (!isRenderObject(resolved)) {\n return []\n }\n\n let nodes: Node[]\n\n if (isSuspenseType(resolved.type)) {\n nodes = renderSuspenseComponentToNodes(resolved.props as SuspenseProps, container, 'client')\n } else if (typeof resolved.type === 'function') {\n const providerMeta = getContextProviderMeta(resolved.type)\n if (providerMeta) {\n nodes = renderContextProviderToNodes(\n providerMeta.token,\n evaluateProps(resolved.props),\n container,\n )\n } else {\n const componentFn = resolved.type as Component\n if (getComponentMeta(resolved.type)) {\n nodes = withoutTrackedEffect(() =>\n renderComponentToNodes(\n componentFn,\n evaluateProps(resolved.props),\n container,\n 'client',\n resolved.props,\n ),\n )\n } else {\n nodes = renderComponentToNodes(\n componentFn,\n resolved.props as Record<string, unknown>,\n container,\n 'client',\n resolved.props,\n )\n }\n }\n } else if (resolved.type === FRAGMENT) {\n const children = resolved.props.children\n nodes = Array.isArray(children)\n ? children.flatMap((child: JSX.Element) => renderClientNodes(child, container))\n : renderClientNodes(children as JSX.Element, container)\n } else {\n const element = createElementNode(container.doc, resolved.type)\n const frame = getCurrentFrame()\n if (frame && hasScopedStyles(frame) && resolved.type !== 'style') {\n element.setAttribute(SCOPED_STYLE_ATTR, frame.component.scopeId)\n }\n let hasInnerHTML = false\n for (const [name, descriptor] of Object.entries(\n Object.getOwnPropertyDescriptors(resolved.props),\n ) as [string, PropertyDescriptor][]) {\n if (name === 'children') {\n continue\n }\n const value = descriptor.get ? descriptor.get.call(resolved.props) : descriptor.value\n if (resolved.type === 'body' && name === 'data-e-resume') {\n continue\n }\n if (name === DANGEROUSLY_SET_INNER_HTML_PROP) {\n hasInnerHTML = true\n }\n applyElementProp(element, name, value, container)\n }\n\n if (hasInnerHTML) {\n rememberManagedAttributesForNode(element)\n nodes = [element]\n } else {\n const children = resolved.props.children\n const childNodes = Array.isArray(children)\n ? children.flatMap((child: JSX.Element) => renderClientNodes(child, container))\n : renderClientNodes(children as JSX.Element, container)\n for (const child of childNodes) {\n element.appendChild(child)\n }\n\n rememberManagedAttributesForNode(element)\n nodes = [element]\n }\n }\n\n return resolved.key === null || resolved.key === undefined\n ? nodes\n : wrapNodesWithKeyedRange(container.doc, nodes, resolved.key)\n}\n\nconst scanComponentBoundaries = (\n root: ParentNode & { ownerDocument: Document },\n): Map<string, { end?: Comment; start?: Comment }> => {\n const walker = root.ownerDocument.createTreeWalker(root, DOM_SHOW_COMMENT)\n const boundaries = new Map<string, { end?: Comment; start?: Comment }>()\n\n while (walker.nextNode()) {\n const node = walker.currentNode\n const isCommentNode =\n node.nodeType === DOM_COMMENT_NODE ||\n (typeof Comment !== 'undefined' && node instanceof Comment)\n if (!isCommentNode) {\n continue\n }\n const matched = (node as Comment).data.match(/^ec:c:(.+):(start|end)$/)\n if (!matched) {\n continue\n }\n const [, id, edge] = matched\n const boundary = boundaries.get(id) ?? {}\n if (edge === 'start') {\n boundary.start = node as Comment\n } else {\n boundary.end = node as Comment\n }\n boundaries.set(id, boundary)\n }\n\n return boundaries\n}\n\nconst loadSymbol = async (\n container: RuntimeContainer,\n symbolId: string,\n): Promise<RuntimeSymbolModule> => {\n const resolved = getResolvedRuntimeSymbols(container).get(symbolId)\n if (resolved) {\n return resolved\n }\n const existing = container.imports.get(symbolId)\n if (existing) {\n const module = await existing\n getResolvedRuntimeSymbols(container).set(symbolId, module)\n return module\n }\n\n const url = container.symbols.get(symbolId)\n if (!url) {\n throw new Error(`Missing symbol URL for ${symbolId}.`)\n }\n\n const loaded = (import(/* @vite-ignore */ url) as Promise<RuntimeSymbolModule>).then((module) => {\n getResolvedRuntimeSymbols(container).set(symbolId, module)\n return module\n })\n container.imports.set(symbolId, loaded)\n return loaded\n}\n\nconst toMountedNodes = (value: unknown, container: RuntimeContainer): Node[] => {\n if (!container.doc) {\n throw new Error('Client rendering requires a document.')\n }\n\n let resolved = value\n while (typeof resolved === 'function') {\n resolved = resolved()\n }\n\n if (Array.isArray(resolved)) {\n return resolved.flatMap((entry) => toMountedNodes(entry, container))\n }\n if (resolved === null || resolved === undefined || resolved === false) {\n return [container.doc.createComment('eclipsa-empty')]\n }\n if (typeof Node !== 'undefined' && resolved instanceof Node) {\n return [resolved]\n }\n if (\n typeof resolved === 'string' ||\n typeof resolved === 'number' ||\n typeof resolved === 'boolean'\n ) {\n return [container.doc.createTextNode(String(resolved))]\n }\n return renderClientNodes(resolved as JSX.Element | JSX.Element[], container)\n}\n\nexport const getRuntimeContainer = () => getCurrentContainer()\n\nexport const captureClientInsertOwner = (\n container: RuntimeContainer | null,\n siteKey?: string | null,\n): ClientInsertOwner | null => {\n const frame = getCurrentFrame()\n if (!container || !frame || frame.container !== container) {\n return null\n }\n\n const ownerComponentId =\n typeof siteKey === 'string' && siteKey !== ''\n ? `${frame.component.id}.$i${siteKey}`\n : `${frame.component.id}.$i${frame.insertCursor++}`\n getOrCreateComponentState(\n container,\n ownerComponentId,\n CLIENT_INSERT_OWNER_SYMBOL,\n frame.component.id,\n )\n frame.visitedDescendants.add(ownerComponentId)\n return {\n childIndex: 0,\n componentId: ownerComponentId,\n projectionCounters: [...frame.projectionState.counters.entries()],\n }\n}\n\nexport const createDetachedClientInsertOwner = (container: RuntimeContainer): ClientInsertOwner => {\n const componentId = `${CLIENT_INSERT_OWNER_ID_PREFIX}${container.nextComponentId++}`\n getOrCreateComponentState(container, componentId, CLIENT_INSERT_OWNER_SYMBOL, ROOT_COMPONENT_ID)\n return {\n childIndex: 0,\n componentId,\n projectionCounters: [],\n }\n}\n\nconst inferClientInsertOwnerParentId = (componentId: string) => {\n if (componentId.startsWith(CLIENT_INSERT_OWNER_ID_PREFIX)) {\n return ROOT_COMPONENT_ID\n }\n\n const lastDotIndex = componentId.lastIndexOf('.')\n if (lastDotIndex < 0) {\n return ROOT_COMPONENT_ID\n }\n\n return componentId.slice(0, lastDotIndex)\n}\n\nexport const renderClientInsertableForOwner = (\n value: Insertable,\n container: RuntimeContainer,\n owner: ClientInsertOwner | null,\n) => {\n if (!owner) {\n return renderClientInsertable(value, container)\n }\n\n const component =\n container.components.get(owner.componentId) ??\n getOrCreateComponentState(\n container,\n owner.componentId,\n CLIENT_INSERT_OWNER_SYMBOL,\n inferClientInsertOwnerParentId(owner.componentId),\n )\n\n const parentFrame = getCurrentFrame()\n const oldDescendants = collectDescendantIds(container, owner.componentId)\n const frame = createFrame(container, component, 'client', {\n reuseExistingDom: false,\n reuseProjectionSlotDom: false,\n })\n frame.childCursor = owner.childIndex\n frame.projectionState.counters = new Map(owner.projectionCounters)\n const nodes = pushContainer(container, () =>\n pushFrame(frame, () => renderClientInsertable(value, container)),\n )\n const keptDescendants = expandComponentIdsToDescendants(container, [\n ...frame.visitedDescendants,\n ...collectComponentBoundaryIds(nodes),\n ])\n pruneRemovedComponents(container, owner.componentId, keptDescendants)\n for (const descendantId of oldDescendants) {\n if (keptDescendants.has(descendantId)) {\n continue\n }\n clearComponentSubscriptions(container, descendantId)\n }\n if (parentFrame && parentFrame !== frame) {\n parentFrame.visitedDescendants.add(owner.componentId)\n for (const descendantId of keptDescendants) {\n parentFrame.visitedDescendants.add(descendantId)\n }\n }\n return nodes\n}\n\nexport const serializeContainerValue = (\n container: RuntimeContainer | null,\n value: unknown,\n): SerializedValue =>\n container ? serializeRuntimeValue(container, value) : serializePublicValue(value)\n\nexport const deserializeContainerValue = (\n container: RuntimeContainer | null,\n value: SerializedValue,\n): unknown =>\n container ? deserializeRuntimeValue(container, value) : deserializePublicValue(value)\n\nexport const renderClientInsertable = (\n value: unknown,\n container: RuntimeContainer | null = getCurrentContainer(),\n): Node[] => {\n const doc = container?.doc ?? (typeof document !== 'undefined' ? document : null)\n if (!doc) {\n return []\n }\n if (Array.isArray(value)) {\n return value.flatMap((entry) => renderClientInsertable(entry, container))\n }\n\n let resolved = value\n while (typeof resolved === 'function') {\n resolved = resolved()\n }\n\n if (resolved === null || resolved === undefined || resolved === false) {\n return [doc.createComment('eclipsa-empty')]\n }\n if (typeof Node !== 'undefined' && resolved instanceof Node) {\n rememberManagedAttributesForNode(resolved)\n return [resolved]\n }\n if (\n typeof resolved === 'string' ||\n typeof resolved === 'number' ||\n typeof resolved === 'boolean'\n ) {\n return [doc.createTextNode(String(resolved))]\n }\n if (isShowValue(resolved)) {\n return renderClientInsertable(resolveShowBranch(resolved), container)\n }\n if (isForValue(resolved)) {\n return container\n ? renderForValueToNodes(resolved, container)\n : resolved.arr.flatMap((item, index) =>\n renderClientInsertable(resolved.fn(item, index), container),\n )\n }\n if (isProjectionSlot(resolved)) {\n return container\n ? renderProjectionSlotToNodes(resolved, container)\n : renderClientInsertable(resolved.source, container)\n }\n if (isRouteSlot(resolved)) {\n const routeElement = resolveRouteSlot(container, resolved)\n return routeElement\n ? renderClientInsertable(routeElement, container)\n : [doc.createComment('eclipsa-empty')]\n }\n if (container) {\n return renderClientNodes(resolved as JSX.Element | JSX.Element[], container)\n }\n return [doc.createTextNode(String(resolved))]\n}\n\nconst resetContainerForRouteRender = (container: RuntimeContainer) => {\n for (const component of container.components.values()) {\n disposeComponentMountCleanups(component)\n pruneComponentVisibles(container, component, 0)\n pruneComponentWatches(container, component, 0)\n }\n\n for (const watch of container.watches.values()) {\n clearEffectSignals(watch.effect)\n }\n\n container.components.clear()\n container.dirty.clear()\n container.nextElementId = 0\n container.nextScopeId = 0\n container.nextSignalId = 0\n container.rootChildCursor = 0\n container.scopes.clear()\n container.visibles.clear()\n container.watches.clear()\n\n for (const [id, record] of Array.from(container.signals.entries())) {\n for (const effect of Array.from(record.effects)) {\n clearEffectSignals(effect)\n }\n record.effects.clear()\n record.subscribers.clear()\n if (!isRouterSignalId(id) && !isAtomSignalId(id)) {\n container.signals.delete(id)\n }\n }\n}\n\nconst isRouteSlot = (value: unknown): value is RouteSlotCarrier =>\n isPlainObject(value) && value.__eclipsa_type === ROUTE_SLOT_TYPE\n\nconst createRouteSlot = (route: LoadedRoute, startLayoutIndex: number): RouteSlotCarrier => {\n const slot: RouteSlotCarrier = {\n __eclipsa_type: ROUTE_SLOT_TYPE,\n pathname: route.pathname,\n startLayoutIndex,\n }\n Object.defineProperty(slot, ROUTE_SLOT_ROUTE_KEY, {\n configurable: true,\n enumerable: false,\n value: route,\n writable: true,\n })\n return slot\n}\n\nconst resolveRouteSlot = (container: RuntimeContainer | null, slot: RouteSlotCarrier) => {\n const route =\n slot[ROUTE_SLOT_ROUTE_KEY] ??\n container?.router?.loadedRoutes.get(routeCacheKey(slot.pathname, 'page'))\n if (!route) {\n return null\n }\n return createRouteElement(route, slot.startLayoutIndex)\n}\n\nconst createRouteElement = (route: LoadedRoute, startLayoutIndex = 0) => {\n const createRouteProps = (props: Record<string, unknown>) => {\n const nextProps = {\n ...props,\n }\n Object.defineProperty(nextProps, ROUTE_PARAMS_PROP, {\n configurable: true,\n enumerable: false,\n value: route.params,\n writable: true,\n })\n Object.defineProperty(nextProps, ROUTE_ERROR_PROP, {\n configurable: true,\n enumerable: false,\n value: route.error,\n writable: true,\n })\n return nextProps\n }\n\n if (startLayoutIndex >= route.layouts.length) {\n return jsxDEV(route.page.renderer as unknown as JSX.Type, createRouteProps({}), null, false, {})\n }\n\n let children: unknown = null\n for (let index = route.layouts.length - 1; index >= startLayoutIndex; index -= 1) {\n const layout = route.layouts[index]!\n children = jsxDEV(\n layout.renderer as unknown as JSX.Type,\n createRouteProps({\n children: createRouteSlot(route, index + 1),\n }),\n null,\n false,\n {},\n )\n }\n return children\n}\n\nconst trackSuspenseBoundaryPromise = (\n container: RuntimeContainer,\n componentId: string,\n promise: Promise<unknown>,\n) => {\n const component = container.components.get(componentId)\n if (!component) {\n return\n }\n component.suspensePromise = promise\n promise.finally(() => {\n const current = container.components.get(componentId)\n if (!current || current.suspensePromise !== promise) {\n return\n }\n current.suspensePromise = null\n current.active = false\n container.dirty.add(componentId)\n void flushDirtyComponents(container)\n })\n}\n\nconst renderSuspenseContentToString = (\n props: SuspenseProps,\n container: RuntimeContainer,\n componentId: string,\n) => {\n try {\n const rendered =\n typeof props.children === 'function' ? props.children() : (props.children ?? null)\n return renderStringNode(rendered as JSX.Element | JSX.Element[])\n } catch (error) {\n if (!isPendingSignalError(error)) {\n throw error\n }\n container.pendingSuspensePromises.add(error.promise)\n const component = container.components.get(componentId)\n if (component) {\n component.suspensePromise = error.promise\n }\n return renderStringNode((props.fallback ?? null) as JSX.Element | JSX.Element[])\n }\n}\n\nexport const collectPendingSuspenseBoundaryIds = (container: RuntimeContainer) =>\n [...container.components.values()]\n .filter(\n (component) => component.symbol === SUSPENSE_COMPONENT_SYMBOL && !!component.suspensePromise,\n )\n .map((component) => component.id)\n .sort((left, right) => left.split('.').length - right.split('.').length)\n\nexport const renderResolvedSuspenseBoundaryToString = (\n container: RuntimeContainer,\n componentId: string,\n) => {\n const component = container.components.get(componentId)\n if (!component || component.symbol !== SUSPENSE_COMPONENT_SYMBOL) {\n throw new Error(`Missing suspense boundary ${componentId}.`)\n }\n\n pruneRemovedComponents(container, componentId, new Set())\n clearComponentSubscriptions(container, component.id)\n component.suspensePromise = null\n const frame = createFrame(container, component, 'ssr')\n return pushContainer(container, () =>\n pushFrame(frame, () =>\n renderSuspenseContentToString(component.props as SuspenseProps, container, componentId),\n ),\n )\n}\n\nconst renderSuspenseContentToNodes = (\n props: SuspenseProps,\n container: RuntimeContainer,\n componentId: string,\n) => {\n try {\n const rendered =\n typeof props.children === 'function' ? props.children() : (props.children ?? null)\n return toMountedNodes(rendered as JSX.Element | JSX.Element[], container)\n } catch (error) {\n if (!isPendingSignalError(error)) {\n throw error\n }\n trackSuspenseBoundaryPromise(container, componentId, error.promise)\n const fallback = props.fallback ?? null\n return toMountedNodes(fallback as JSX.Element | JSX.Element[], container)\n }\n}\n\nconst renderSuspenseComponentToString = (props: SuspenseProps) => {\n const container = getCurrentContainer()\n if (!container) {\n return renderStringNode((props.children ?? null) as JSX.Element | JSX.Element[])\n }\n const parentFrame = getCurrentFrame()\n if (!parentFrame) {\n return renderSuspenseContentToString(props, container, ROOT_COMPONENT_ID)\n }\n\n const position = nextComponentPosition(container)\n const componentId = createComponentId(container, position.parentId, position.childIndex)\n const component = getOrCreateComponentState(\n container,\n componentId,\n SUSPENSE_COMPONENT_SYMBOL,\n position.parentId,\n )\n component.props = {\n children: props.children,\n fallback: props.fallback,\n }\n component.projectionSlots = null\n const frame = createFrame(container, component, 'ssr')\n clearComponentSubscriptions(container, component.id)\n const body = pushFrame(frame, () =>\n renderSuspenseContentToString(component.props as SuspenseProps, container, componentId),\n )\n pruneComponentVisibles(container, component, frame.visibleCursor)\n pruneComponentWatches(container, component, frame.watchCursor)\n return `<!--ec:c:${componentId}:start-->${body}<!--ec:c:${componentId}:end-->`\n}\n\nconst renderSuspenseComponentToNodes = (\n props: SuspenseProps,\n container: RuntimeContainer,\n mode: RenderFrame['mode'],\n) => {\n const parentFrame = getCurrentFrame()\n if (!parentFrame) {\n return renderSuspenseContentToNodes(props, container, ROOT_COMPONENT_ID)\n }\n\n const position = nextComponentPosition(container)\n const componentId = createComponentId(container, position.parentId, position.childIndex)\n const component = getOrCreateComponentState(\n container,\n componentId,\n SUSPENSE_COMPONENT_SYMBOL,\n position.parentId,\n )\n component.props = {\n children: props.children,\n fallback: props.fallback,\n }\n component.projectionSlots = null\n component.active = true\n component.start = undefined\n component.end = undefined\n\n const frame = createFrame(container, component, mode)\n clearComponentSubscriptions(container, component.id)\n const bodyNodes = pushFrame(frame, () =>\n renderSuspenseContentToNodes(component.props as SuspenseProps, container, componentId),\n )\n pruneComponentVisibles(container, component, frame.visibleCursor)\n pruneComponentWatches(container, component, frame.watchCursor)\n parentFrame.visitedDescendants.add(componentId)\n for (const descendantId of frame.visitedDescendants) {\n parentFrame.visitedDescendants.add(descendantId)\n }\n scheduleMountCallbacks(container, component, frame.mountCallbacks)\n scheduleVisibleCallbacksCheck(container)\n\n if (!container.doc) {\n return bodyNodes\n }\n const start = container.doc.createComment(`ec:c:${componentId}:start`)\n const end = container.doc.createComment(`ec:c:${componentId}:end`)\n if (!component.start || !component.end) {\n component.start = start\n component.end = end\n }\n return [start, ...bodyNodes, end]\n}\n\nconst renderRouteIntoRoot = (container: RuntimeContainer, Page: RouteRenderer) => {\n if (!container.doc || !container.rootElement) {\n throw new Error('Client route rendering requires a document root.')\n }\n\n resetContainerForRouteRender(container)\n const nodes = pushContainer(container, () => toMountedNodes(Page({}), container))\n\n const root = container.rootElement\n while (root.firstChild) {\n root.firstChild.remove()\n }\n for (const node of nodes) {\n root.appendChild(node)\n }\n rememberManagedAttributesForNode(root)\n restoreSignalRefs(container, root)\n bindRouterLinks(container, root)\n scheduleVisibleCallbacksCheck(container)\n}\n\nconst getRouteModuleImportUrl = (router: RouterState, url: string) => {\n const token = router.routeModuleBusts.get(url)\n if (token == null) {\n return url\n }\n\n const baseUrl = typeof window === 'undefined' ? 'http://localhost' : window.location.href\n const nextUrl = new URL(url, baseUrl)\n nextUrl.searchParams.set('t', token.toString())\n if (/^[a-z]+:\\/\\//i.test(url)) {\n return nextUrl.href\n }\n return `${nextUrl.pathname}${nextUrl.search}${nextUrl.hash}`\n}\n\nconst loadRouteModule = async (router: RouterState, url: string): Promise<LoadedRouteModule> => {\n const module = (await import(/* @vite-ignore */ getRouteModuleImportUrl(router, url))) as {\n default?: RouteRenderer\n metadata?: RouteMetadataExport\n }\n if (typeof module.default !== 'function') {\n throw new TypeError(`Route module ${url} does not export a default component.`)\n }\n\n return {\n metadata: module.metadata ?? null,\n renderer: module.default,\n symbol: getComponentMeta(module.default)?.symbol ?? null,\n url,\n }\n}\n\nconst createManagedHeadElement = (doc: Document, tagName: 'link' | 'meta') => {\n const element = doc.createElement(tagName)\n element.setAttribute(ROUTE_METADATA_HEAD_ATTR, '')\n return element\n}\n\nconst applyRouteMetadata = (doc: Document, route: LoadedRoute, url: URL, defaultTitle: string) => {\n for (const element of doc.head.querySelectorAll(`[${ROUTE_METADATA_HEAD_ATTR}]`)) {\n element.remove()\n }\n\n const metadata = composeRouteMetadata(\n [...route.layouts.map((layout) => layout.metadata ?? null), route.page.metadata ?? null],\n {\n params: route.params,\n url,\n },\n )\n\n doc.title = metadata?.title ?? defaultTitle\n\n const appendMeta = (name: string, content: string, attr: 'name' | 'property') => {\n const meta = createManagedHeadElement(doc, 'meta')\n meta.setAttribute(attr, name)\n meta.setAttribute('content', content)\n doc.head.appendChild(meta)\n }\n\n if (metadata?.description) {\n appendMeta('description', metadata.description, 'name')\n }\n if (metadata?.canonical) {\n const link = createManagedHeadElement(doc, 'link')\n link.setAttribute('href', metadata.canonical)\n link.setAttribute('rel', 'canonical')\n doc.head.appendChild(link)\n }\n if (metadata?.openGraph?.title) {\n appendMeta('og:title', metadata.openGraph.title, 'property')\n }\n if (metadata?.openGraph?.description) {\n appendMeta('og:description', metadata.openGraph.description, 'property')\n }\n if (metadata?.openGraph?.type) {\n appendMeta('og:type', metadata.openGraph.type, 'property')\n }\n if (metadata?.openGraph?.url) {\n appendMeta('og:url', metadata.openGraph.url, 'property')\n }\n for (const image of metadata?.openGraph?.images ?? []) {\n appendMeta('og:image', image, 'property')\n }\n if (metadata?.twitter?.card) {\n appendMeta('twitter:card', metadata.twitter.card, 'name')\n }\n if (metadata?.twitter?.title) {\n appendMeta('twitter:title', metadata.twitter.title, 'name')\n }\n if (metadata?.twitter?.description) {\n appendMeta('twitter:description', metadata.twitter.description, 'name')\n }\n for (const image of metadata?.twitter?.images ?? []) {\n appendMeta('twitter:image', image, 'name')\n }\n}\n\nconst loadResolvedRoute = async (\n container: RuntimeContainer,\n matched: {\n entry: RouteModuleManifest\n params: RouteParams\n pathname: string\n },\n variant: 'page' | 'loading' | 'error' | 'not-found' = 'page',\n) => {\n const router = ensureRouterState(container)\n const normalizedPath = normalizeRoutePath(matched.pathname)\n const cacheKey = routeCacheKey(normalizedPath, variant)\n const existing = router.loadedRoutes.get(cacheKey)\n if (existing) {\n return existing\n }\n\n const moduleUrl =\n variant === 'page'\n ? matched.entry.page\n : variant === 'loading'\n ? matched.entry.loading\n : variant === 'error'\n ? matched.entry.error\n : matched.entry.notFound\n if (!moduleUrl) {\n return null\n }\n\n const [page, ...layouts] = await Promise.all([\n loadRouteModule(router, moduleUrl),\n ...matched.entry.layouts.map((layoutUrl) => loadRouteModule(router, layoutUrl)),\n ])\n let route!: LoadedRoute\n route = {\n entry: matched.entry,\n error: undefined,\n layouts,\n params: matched.params,\n pathname: normalizedPath,\n page,\n render: () => createRouteElement(route),\n }\n\n router.loadedRoutes.set(cacheKey, route)\n return route\n}\n\nconst loadResolvedRouteFromSpecial = async (\n container: RuntimeContainer,\n pathname: string,\n kind: 'error' | 'notFound',\n) => {\n const matched = findSpecialManifestEntry(ensureRouterState(container).manifest, pathname, kind)\n if (!matched) {\n return null\n }\n return loadResolvedRoute(container, matched, kind === 'error' ? 'error' : 'not-found')\n}\n\nconst loadRouteComponent = async (container: RuntimeContainer, pathname: string) => {\n const matched = matchRouteManifest(ensureRouterState(container).manifest, pathname)\n if (!matched || !matched.entry.page) {\n return null\n }\n return loadResolvedRoute(container, matched, 'page')\n}\n\nconst findRouteComponentChain = (\n container: RuntimeContainer,\n symbols: string[],\n parentId: string | null = null,\n): string[] | null => {\n if (symbols.length === 0) {\n return []\n }\n\n const [symbol, ...rest] = symbols\n const candidates = [...container.components.values()]\n .filter((component) => {\n if (\n !component.start ||\n !component.end ||\n !component.start.parentNode ||\n !component.end.parentNode ||\n component.symbol !== symbol\n ) {\n return false\n }\n if (parentId === null) {\n return true\n }\n return isDescendantOf(parentId, component.id)\n })\n .sort((left, right) => left.id.split('.').length - right.id.split('.').length)\n\n for (const candidate of candidates) {\n const remainder = findRouteComponentChain(container, rest, candidate.id)\n if (!remainder) {\n continue\n }\n return [candidate.id, ...remainder]\n }\n\n return null\n}\n\nconst collectSharedLayoutBoundaryIds = (container: RuntimeContainer, route: LoadedRoute) => {\n if (route.layouts.length === 0 || route.layouts.some((layout) => !layout.symbol)) {\n return null\n }\n\n const symbols = route.layouts.map((layout) => layout.symbol as string)\n if (route.page.symbol) {\n const chain = findRouteComponentChain(container, [...symbols, route.page.symbol])\n if (chain) {\n return chain.slice(0, route.layouts.length)\n }\n }\n\n return findRouteComponentChain(container, symbols)\n}\n\nconst getComponentIdDepth = (componentId: string) => componentId.split('.').length\n\nconst parseDirectChildIndex = (parentId: string, childId: string) => {\n if (!childId.startsWith(`${parentId}.`)) {\n return null\n }\n const remainder = childId.slice(parentId.length + 1)\n if (remainder.length === 0 || remainder.includes('.')) {\n return null\n }\n const parsed = Number(remainder)\n return Number.isInteger(parsed) ? parsed : null\n}\n\ntype SharedLayoutRouteRoot =\n | {\n childIndex: number\n kind: 'direct'\n rootId: string\n }\n | {\n kind: 'owner'\n ownerId: string\n rootId: string\n }\n\nconst resolveSharedLayoutRouteRoot = (\n container: RuntimeContainer,\n boundaryId: string,\n slotRange: { start: Comment; end: Comment },\n): SharedLayoutRouteRoot | null => {\n const candidateIds = [\n ...collectComponentBoundaryIds(getBoundaryChildren(slotRange.start, slotRange.end)),\n ].sort((left, right) => getComponentIdDepth(left) - getComponentIdDepth(right))\n\n for (const candidateId of candidateIds) {\n const childIndex = parseDirectChildIndex(boundaryId, candidateId)\n if (childIndex !== null) {\n return {\n childIndex,\n kind: 'direct',\n rootId: candidateId,\n }\n }\n }\n\n for (const candidateId of candidateIds) {\n const component = container.components.get(candidateId)\n if (!component?.parentId) {\n continue\n }\n const owner = container.components.get(component.parentId)\n if (!owner || owner.symbol !== CLIENT_INSERT_OWNER_SYMBOL || owner.parentId !== boundaryId) {\n continue\n }\n return {\n kind: 'owner',\n ownerId: owner.id,\n rootId: candidateId,\n }\n }\n\n return null\n}\n\nconst renderRouteSubtreeForProjectionSlot = (\n container: RuntimeContainer,\n boundary: ComponentState,\n childIndex: number,\n source: unknown,\n) => {\n const frame = createFrame(container, boundary, 'client', {\n reuseExistingDom: false,\n reuseProjectionSlotDom: false,\n })\n frame.childCursor = childIndex\n const nodes = pushContainer(container, () =>\n pushFrame(frame, () => renderClientInsertable(source, container)),\n )\n return {\n nodes,\n visitedDescendants: frame.visitedDescendants,\n }\n}\n\nconst renderRouteSubtreeForProjectionSlotOwner = (\n container: RuntimeContainer,\n ownerId: string,\n source: unknown,\n) => {\n const nodes = renderClientInsertableForOwner(source as Insertable, container, {\n childIndex: 0,\n componentId: ownerId,\n projectionCounters: [],\n })\n return {\n nodes,\n visitedDescendants: expandComponentIdsToDescendants(container, [ownerId]),\n }\n}\n\nconst clearSharedLayoutDescendantDirtyStates = (\n container: RuntimeContainer,\n boundaryId: string,\n excludedRootId: string | null,\n) => {\n for (const componentId of Array.from(container.dirty)) {\n if (!isDescendantOf(boundaryId, componentId)) {\n continue\n }\n if (\n excludedRootId &&\n (componentId === excludedRootId || isDescendantOf(excludedRootId, componentId))\n ) {\n continue\n }\n container.dirty.delete(componentId)\n const component = container.components.get(componentId)\n if (!component) {\n continue\n }\n component.activateModeOnFlush = undefined\n component.reuseExistingDomOnActivate = true\n component.reuseProjectionSlotDomOnActivate = false\n }\n}\n\nconst deactivateComponentSubtree = (container: RuntimeContainer, rootId: string) => {\n const root = container.components.get(rootId)\n if (root) {\n root.active = false\n }\n for (const componentId of collectDescendantIds(container, rootId)) {\n const component = container.components.get(componentId)\n if (component) {\n component.active = false\n }\n }\n}\n\nconst withUpdatedComponentChildren = (props: Record<string, unknown> | null, children: unknown) => {\n const next = {}\n if (props) {\n Object.defineProperties(next, Object.getOwnPropertyDescriptors(props))\n }\n Object.defineProperty(next, 'children', {\n configurable: true,\n enumerable: true,\n value: children,\n writable: true,\n })\n return next as Record<string, unknown>\n}\n\nconst countSharedLayouts = (current: LoadedRoute | null, next: LoadedRoute) => {\n if (!current) {\n return 0\n }\n\n let count = 0\n const limit = Math.min(current.layouts.length, next.layouts.length)\n while (count < limit && current.layouts[count]!.url === next.layouts[count]!.url) {\n count += 1\n }\n return count\n}\n\nconst updateSharedLayoutBoundary = async (\n container: RuntimeContainer,\n current: LoadedRoute,\n next: LoadedRoute,\n sharedLayoutCount: number,\n) => {\n if (sharedLayoutCount <= 0) {\n return false\n }\n\n const boundaryIds = collectSharedLayoutBoundaryIds(container, current)\n if (!boundaryIds || boundaryIds.length < sharedLayoutCount) {\n return false\n }\n\n const boundaryId = boundaryIds[sharedLayoutCount - 1]!\n const boundary = container.components.get(boundaryId)\n if (!boundary?.start || !boundary.end) {\n return false\n }\n\n const nextChildren = createRouteElement(next, sharedLayoutCount)\n const rerenderSharedLayoutBoundary = async () => {\n const focusSnapshot = captureBoundaryFocus(container.doc!, boundary.start!, boundary.end!)\n const boundaryProps =\n boundary.props && typeof boundary.props === 'object'\n ? (boundary.props as Record<string, unknown>)\n : null\n const boundaryRawProps =\n boundary.rawProps && typeof boundary.rawProps === 'object' ? boundary.rawProps : boundaryProps\n boundary.props = withUpdatedComponentChildren(boundaryProps, nextChildren)\n boundary.rawProps = withUpdatedComponentChildren(boundaryRawProps, nextChildren)\n boundary.active = false\n boundary.activateModeOnFlush = 'replace'\n boundary.reuseExistingDomOnActivate = false\n boundary.reuseProjectionSlotDomOnActivate = false\n container.dirty.add(boundaryId)\n if (boundary.start?.parentNode && 'querySelectorAll' in boundary.start.parentNode) {\n bindRouterLinks(container, boundary.start.parentNode as ParentNode)\n }\n if (container.dirty.size > 0) {\n await flushDirtyComponents(container)\n }\n if (boundary.start && boundary.end) {\n restoreBoundaryFocus(container.doc!, boundary.start, boundary.end, focusSnapshot)\n }\n return true\n }\n\n if ((boundary.projectionSlots?.children ?? 0) !== 1) {\n return rerenderSharedLayoutBoundary()\n }\n\n const slotRanges = collectProjectionSlotRanges(getBoundaryChildren(boundary.start, boundary.end))\n const slotRange = slotRanges.get(`${boundaryId}:${encodeProjectionSlotName('children')}:0`)\n if (!slotRange) {\n return rerenderSharedLayoutBoundary()\n }\n const routeRoot = resolveSharedLayoutRouteRoot(container, boundaryId, slotRange)\n if (!routeRoot) {\n return rerenderSharedLayoutBoundary()\n }\n if (routeRoot.kind === 'owner') {\n deactivateComponentSubtree(container, routeRoot.rootId)\n const focusSnapshot = captureBoundaryFocus(container.doc!, slotRange.start, slotRange.end)\n const { nodes } = renderRouteSubtreeForProjectionSlotOwner(\n container,\n routeRoot.ownerId,\n nextChildren,\n )\n replaceProjectionSlotContents(slotRange.start, slotRange.end, nodes)\n restoreBoundaryFocus(container.doc!, slotRange.start, slotRange.end, focusSnapshot)\n const boundaryProps =\n boundary.props && typeof boundary.props === 'object'\n ? (boundary.props as Record<string, unknown>)\n : null\n const boundaryRawProps =\n boundary.rawProps && typeof boundary.rawProps === 'object' ? boundary.rawProps : boundaryProps\n boundary.props = withUpdatedComponentChildren(boundaryProps, nextChildren)\n boundary.rawProps = withUpdatedComponentChildren(boundaryRawProps, nextChildren)\n container.dirty.delete(boundaryId)\n clearSharedLayoutDescendantDirtyStates(container, boundaryId, routeRoot.ownerId)\n boundary.active = false\n boundary.activateModeOnFlush = 'patch'\n boundary.reuseExistingDomOnActivate = true\n boundary.reuseProjectionSlotDomOnActivate = true\n container.dirty.add(boundaryId)\n if (boundary.start.parentNode && 'querySelectorAll' in boundary.start.parentNode) {\n bindRouterLinks(container, boundary.start.parentNode as ParentNode)\n }\n if (container.dirty.size > 0) {\n await flushDirtyComponents(container)\n }\n return true\n }\n\n const currentRouteRoot = container.components.get(routeRoot.rootId) ?? null\n const needsFullBoundaryRerender =\n (currentRouteRoot?.watchCount ?? 0) > 0 || (currentRouteRoot?.visibleCount ?? 0) > 0\n\n if (needsFullBoundaryRerender) {\n deactivateComponentSubtree(container, routeRoot.rootId)\n return rerenderSharedLayoutBoundary()\n }\n\n boundary.props = {\n children: nextChildren,\n }\n deactivateComponentSubtree(container, routeRoot.rootId)\n const focusSnapshot = captureBoundaryFocus(container.doc!, slotRange.start, slotRange.end)\n const { nodes, visitedDescendants } = renderRouteSubtreeForProjectionSlot(\n container,\n boundary,\n routeRoot.childIndex,\n nextChildren,\n )\n replaceProjectionSlotContents(slotRange.start, slotRange.end, nodes)\n restoreBoundaryFocus(container.doc!, slotRange.start, slotRange.end, focusSnapshot)\n pruneRemovedComponents(container, routeRoot.rootId, visitedDescendants)\n boundary.active = false\n boundary.activateModeOnFlush = 'patch'\n boundary.reuseExistingDomOnActivate = true\n boundary.reuseProjectionSlotDomOnActivate = true\n container.dirty.add(boundaryId)\n if (boundary.start.parentNode && 'querySelectorAll' in boundary.start.parentNode) {\n bindRouterLinks(container, boundary.start.parentNode as ParentNode)\n }\n if (container.dirty.size > 0) {\n await flushDirtyComponents(container)\n }\n return true\n}\n\nconst commitBrowserNavigation = (doc: Document, url: URL, mode: NavigationMode) => {\n if (!doc.defaultView || mode === 'pop') {\n return\n }\n if (mode === 'replace') {\n doc.defaultView.history.replaceState(null, '', url.href)\n return\n }\n doc.defaultView.history.pushState(null, '', url.href)\n}\n\nconst fallbackDocumentNavigation = (doc: Document, url: URL, mode: NavigationMode) => {\n if (!doc.defaultView) {\n return\n }\n if (mode === 'replace') {\n doc.defaultView.location.replace(url.href)\n return\n }\n if (mode === 'pop') {\n doc.defaultView.location.assign(url.href)\n return\n }\n doc.defaultView.location.assign(url.href)\n}\n\nconst cachePrefetchedLoaders = (\n container: RuntimeContainer,\n url: URL,\n loaders: Record<string, ResumeLoaderPayload>,\n) => {\n const router = ensureRouterState(container)\n const snapshots = new Map<string, LoaderSnapshot>()\n for (const [id, loaderPayload] of Object.entries(loaders)) {\n snapshots.set(id, {\n data: deserializeRuntimeValue(container, loaderPayload.data),\n error: deserializeRuntimeValue(container, loaderPayload.error),\n loaded: loaderPayload.loaded,\n })\n }\n router.prefetchedLoaders.set(routePrefetchKey(url), snapshots)\n}\n\nconst applyPrefetchedLoaders = (container: RuntimeContainer, url: URL) => {\n const router = ensureRouterState(container)\n const prefetchedLoaders = router.prefetchedLoaders.get(routePrefetchKey(url))\n if (!prefetchedLoaders) {\n return\n }\n for (const [id, snapshot] of prefetchedLoaders) {\n container.loaderStates.set(id, {\n data: snapshot.data,\n error: snapshot.error,\n loaded: snapshot.loaded,\n })\n }\n}\n\nconst isRouteDataSuccess = (body: RouteDataResponse): body is RouteDataSuccess =>\n body.ok === true &&\n typeof body.finalHref === 'string' &&\n typeof body.finalPathname === 'string' &&\n (body.kind === 'page' || body.kind === 'not-found') &&\n !!body.loaders &&\n typeof body.loaders === 'object'\n\nconst extractScriptTextById = (html: string, id: string) => {\n const scriptPattern = /<script\\b([^>]*)>([\\s\\S]*?)<\\/script>/gi\n const idPattern = /\\bid\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/i\n\n for (const match of html.matchAll(scriptPattern)) {\n const attrs = match[1] ?? ''\n const idMatch = attrs.match(idPattern)\n if (!idMatch) {\n continue\n }\n if ((idMatch[1] ?? idMatch[2]) === id) {\n return match[2] ?? ''\n }\n }\n\n return null\n}\n\nconst parseRouteDataFromHtml = (\n container: RuntimeContainer,\n requestUrl: URL,\n response: {\n url?: string\n },\n html: string,\n): RouteDataResponse => {\n const finalUrl = new URL(response.url || requestUrl.href, requestUrl.href)\n if (finalUrl.origin !== requestUrl.origin) {\n return {\n location: finalUrl.href,\n ok: false,\n }\n }\n\n const payloadText =\n extractScriptTextById(html, RESUME_FINAL_STATE_ELEMENT_ID) ??\n extractScriptTextById(html, RESUME_STATE_ELEMENT_ID)\n if (!payloadText) {\n return {\n document: true,\n ok: false,\n }\n }\n\n let payload: ResumePayload\n try {\n payload = JSON.parse(payloadText) as ResumePayload\n } catch {\n return {\n document: true,\n ok: false,\n }\n }\n\n const finalPathname = normalizeRoutePath(finalUrl.pathname)\n const router = ensureRouterState(container)\n const matched = matchRouteManifest(router.manifest, finalPathname)\n const notFoundMatched = !matched\n ? findSpecialManifestEntry(router.manifest, finalPathname, 'notFound')\n : null\n if (!matched?.entry.page && !notFoundMatched?.entry.notFound) {\n return {\n document: true,\n ok: false,\n }\n }\n\n return {\n finalHref: finalUrl.href,\n finalPathname,\n kind: matched?.entry.page ? 'page' : 'not-found',\n loaders: payload.loaders ?? {},\n ok: true,\n }\n}\n\nconst requestRouteData = async (\n container: RuntimeContainer,\n href: string,\n): Promise<RouteDataResponse> => {\n const baseUrl = typeof window === 'undefined' ? 'http://localhost' : window.location.href\n const requestUrl = new URL(href, baseUrl)\n\n try {\n const endpointUrl = new URL(ROUTE_DATA_ENDPOINT, requestUrl)\n endpointUrl.searchParams.set('href', requestUrl.href)\n const response = await fetch(endpointUrl.href)\n if (response.status >= 200 && response.status < 300) {\n const body = (await response.json()) as RouteDataResponse\n if (!body || typeof body !== 'object' || typeof body.ok !== 'boolean') {\n return {\n document: true,\n ok: false,\n }\n }\n if (isRouteDataSuccess(body)) {\n return body\n }\n if ('location' in body && typeof body.location === 'string') {\n return body\n }\n }\n } catch {}\n\n try {\n const response = await fetch(requestUrl.href)\n const html = await response.text()\n return parseRouteDataFromHtml(container, requestUrl, response, html)\n } catch {}\n\n return {\n document: true,\n ok: false,\n }\n}\n\nconst resetRouteLoaderState = (container: RuntimeContainer) => {\n container.loaders.clear()\n container.loaderStates.clear()\n\n for (const [id, record] of Array.from(container.signals.entries())) {\n if (!isLoaderSignalId(id)) {\n continue\n }\n for (const effect of Array.from(record.effects)) {\n clearEffectSignals(effect)\n }\n record.effects.clear()\n record.subscribers.clear()\n container.signals.delete(id)\n }\n}\n\nconst requestRoutePreflight = async (href: string): Promise<RoutePreflightResult> => {\n try {\n const requestUrl = new URL(\n href,\n typeof window === 'undefined' ? 'http://localhost' : window.location.href,\n )\n const response = await fetch(requestUrl.href, {\n headers: {\n [ROUTE_PREFLIGHT_REQUEST_HEADER]: '1',\n },\n })\n if (response.status < 200 || response.status >= 300) {\n return {\n document: true,\n ok: false,\n }\n }\n const finalUrl = new URL(response.url || requestUrl.href, requestUrl.href)\n if (\n finalUrl.origin !== requestUrl.origin ||\n finalUrl.pathname !== requestUrl.pathname ||\n finalUrl.search !== requestUrl.search\n ) {\n return {\n location: finalUrl.href,\n ok: false,\n }\n }\n return {\n ok: true,\n }\n } catch {\n return {\n document: true,\n ok: false,\n }\n }\n}\n\nconst prefetchResolvedRouteModules = async (\n container: RuntimeContainer,\n pathname: string,\n finalUrl: URL,\n) => {\n const router = ensureRouterState(container)\n const matched = matchRouteManifest(router.manifest, pathname)\n if (matched?.entry.page) {\n await loadResolvedRoute(container, matched)\n return\n }\n const notFoundMatched = findSpecialManifestEntry(router.manifest, pathname, 'notFound')\n if (notFoundMatched?.entry.notFound) {\n await loadResolvedRoute(container, notFoundMatched, 'not-found')\n }\n if (finalUrl.pathname !== pathname) {\n const redirectedPath = normalizeRoutePath(finalUrl.pathname)\n const redirectedMatched = matchRouteManifest(router.manifest, redirectedPath)\n if (redirectedMatched?.entry.page) {\n await loadResolvedRoute(container, redirectedMatched)\n }\n }\n}\n\nconst prefetchRoute = async (container: RuntimeContainer, href: string) => {\n const doc = container.doc\n if (!doc) {\n return\n }\n\n const requestUrl = new URL(href, doc.location.href)\n if (requestUrl.origin !== doc.location.origin) {\n return\n }\n const key = routePrefetchKey(requestUrl)\n const router = ensureRouterState(container)\n const existing = router.routePrefetches.get(key)\n if (existing) {\n await existing\n return\n }\n\n const pathname = normalizeRoutePath(requestUrl.pathname)\n const matched = matchRouteManifest(router.manifest, pathname)\n const specialRoute = !matched\n ? findSpecialManifestEntry(router.manifest, pathname, 'notFound')\n : null\n if (!matched?.entry.page && !specialRoute?.entry.notFound) {\n return\n }\n\n const prefetchPromise = (async () => {\n try {\n const result = await requestRouteData(container, requestUrl.href)\n if (!result.ok) {\n return result\n }\n\n const finalUrl = new URL(result.finalHref, requestUrl.href)\n if (finalUrl.origin !== requestUrl.origin) {\n return {\n document: true,\n ok: false,\n } satisfies RoutePrefetchResult\n }\n\n await prefetchResolvedRouteModules(container, result.finalPathname, finalUrl)\n cachePrefetchedLoaders(container, finalUrl, result.loaders)\n return result\n } catch {\n return {\n document: true,\n ok: false,\n } satisfies RoutePrefetchResult\n }\n })()\n\n router.routePrefetches.set(key, prefetchPromise)\n await prefetchPromise\n}\n\nconst navigateContainer = async (\n container: RuntimeContainer,\n href: string,\n options?: {\n force?: boolean\n redirectDepth?: number\n mode?: NavigationMode\n },\n) => {\n const doc = container.doc\n if (!doc) {\n return\n }\n\n await waitForPendingDirtyFlush()\n\n const mode = options?.mode ?? 'push'\n const force = options?.force ?? false\n const redirectDepth = options?.redirectDepth ?? 0\n const url = new URL(href, doc.location.href)\n if (url.origin !== doc.location.origin) {\n fallbackDocumentNavigation(doc, url, mode)\n return\n }\n const pathname = normalizeRoutePath(url.pathname)\n const router = ensureRouterState(container)\n const matched = matchRouteManifest(router.manifest, pathname)\n const specialPreflightTarget = !matched\n ? findSpecialManifestEntry(router.manifest, pathname, 'notFound')\n : null\n\n const currentRouteUrl = new URL(router.currentUrl.value, doc.location.href)\n const currentHref = `${currentRouteUrl.pathname}${currentRouteUrl.search}${currentRouteUrl.hash}`\n const nextHref = `${url.pathname}${url.search}${url.hash}`\n if (!force && nextHref === currentHref) {\n return\n }\n\n const prefetchKey = routePrefetchKey(url)\n let pendingPrefetch = router.routePrefetches.get(prefetchKey)\n if (!pendingPrefetch && (matched?.entry.page || specialPreflightTarget?.entry.notFound)) {\n await prefetchRoute(container, url.href)\n pendingPrefetch = router.routePrefetches.get(prefetchKey)\n }\n const prefetched = pendingPrefetch ? await pendingPrefetch : null\n if (prefetched && !prefetched.ok) {\n if ('location' in prefetched) {\n if (redirectDepth >= 8) {\n fallbackDocumentNavigation(doc, new URL(prefetched.location, doc.location.href), mode)\n return\n }\n const redirectUrl = new URL(prefetched.location, doc.location.href)\n if (redirectUrl.origin !== doc.location.origin) {\n fallbackDocumentNavigation(doc, redirectUrl, mode)\n return\n }\n await navigateContainer(container, redirectUrl.href, {\n mode,\n redirectDepth: redirectDepth + 1,\n })\n return\n }\n fallbackDocumentNavigation(doc, url, mode)\n return\n }\n\n const shouldPreflight =\n (matched?.entry.page && matched.entry.hasMiddleware) ||\n (!!specialPreflightTarget?.entry.notFound && specialPreflightTarget.entry.hasMiddleware)\n if (shouldPreflight && !prefetched) {\n const preflight = await requestRoutePreflight(url.href)\n if (!preflight.ok) {\n if ('location' in preflight) {\n if (redirectDepth >= 8) {\n fallbackDocumentNavigation(doc, new URL(preflight.location, doc.location.href), mode)\n return\n }\n const redirectUrl = new URL(preflight.location, doc.location.href)\n if (redirectUrl.origin !== doc.location.origin) {\n fallbackDocumentNavigation(doc, redirectUrl, mode)\n return\n }\n await navigateContainer(container, redirectUrl.href, {\n mode,\n redirectDepth: redirectDepth + 1,\n })\n return\n }\n fallbackDocumentNavigation(doc, url, mode)\n return\n }\n }\n\n if (!matched || !matched.entry.page) {\n const notFoundRoute = !matched\n ? await loadResolvedRouteFromSpecial(container, pathname, 'notFound')\n : null\n if (notFoundRoute) {\n resetRouteLoaderState(container)\n renderRouteIntoRoot(container, notFoundRoute.render)\n router.currentRoute = notFoundRoute\n applyRouteMetadata(doc, notFoundRoute, url, router.defaultTitle)\n commitBrowserNavigation(doc, url, mode)\n writeRouterLocation(router, url)\n return\n }\n fallbackDocumentNavigation(doc, url, mode)\n return\n }\n\n if (!force && pathname === router.currentPath.value) {\n if (nextHref !== currentHref) {\n commitBrowserNavigation(doc, url, mode)\n writeRouterLocation(router, url)\n }\n return\n }\n\n resetRouteLoaderState(container)\n applyPrefetchedLoaders(\n container,\n prefetched?.ok ? new URL(prefetched.finalHref, doc.location.href) : url,\n )\n const sequence = ++router.sequence\n router.isNavigating.value = true\n\n try {\n const nextRoutePromise = loadResolvedRoute(container, matched)\n if (matched.entry.loading) {\n let settled = false\n nextRoutePromise.finally(() => {\n settled = true\n })\n await Promise.resolve()\n if (!settled) {\n const loadingRoute = await loadResolvedRoute(container, matched, 'loading')\n if (loadingRoute) {\n renderRouteIntoRoot(container, loadingRoute.render)\n router.currentRoute = loadingRoute\n }\n }\n }\n const [currentRoute, nextRoute] = await Promise.all([\n router.currentRoute\n ? Promise.resolve(router.currentRoute)\n : loadRouteComponent(container, router.currentPath.value),\n nextRoutePromise,\n ])\n if (!nextRoute) {\n fallbackDocumentNavigation(doc, url, mode)\n return\n }\n if (sequence !== router.sequence) {\n return\n }\n\n router.currentRoute = nextRoute\n writeRouterLocation(router, url)\n\n const sharedLayoutCount = countSharedLayouts(currentRoute, nextRoute)\n const reusedLayout =\n currentRoute && sharedLayoutCount > 0\n ? await updateSharedLayoutBoundary(container, currentRoute, nextRoute, sharedLayoutCount)\n : false\n\n if (!reusedLayout) {\n renderRouteIntoRoot(container, nextRoute.render)\n }\n\n applyRouteMetadata(doc, nextRoute, url, router.defaultTitle)\n commitBrowserNavigation(doc, url, mode)\n } catch (error) {\n if (sequence === router.sequence) {\n const fallbackRoute = isRouteNotFoundError(error)\n ? await loadResolvedRouteFromSpecial(container, pathname, 'notFound')\n : await loadResolvedRoute(container, matched, 'error')\n if (fallbackRoute) {\n renderRouteIntoRoot(container, fallbackRoute.render)\n router.currentRoute = fallbackRoute\n applyRouteMetadata(doc, fallbackRoute, url, router.defaultTitle)\n commitBrowserNavigation(doc, url, mode)\n writeRouterLocation(router, url)\n return\n }\n fallbackDocumentNavigation(doc, url, mode)\n }\n } finally {\n if (sequence === router.sequence) {\n router.isNavigating.value = false\n }\n }\n}\n\nexport const refreshRouteContainer = async (container: RuntimeContainer) => {\n const doc = container.doc\n if (!doc) {\n return false\n }\n const url = new URL(doc.location.href)\n const router = ensureRouterState(container)\n const key = routePrefetchKey(url)\n router.prefetchedLoaders.delete(key)\n router.routePrefetches.delete(key)\n await prefetchRoute(container, url.href)\n await navigateContainer(container, url.href, {\n force: true,\n mode: 'replace',\n })\n return true\n}\n\nconst routeEntryReferencesModuleUrl = (entry: RouteModuleManifest, fileUrl: string) =>\n entry.page === fileUrl ||\n entry.loading === fileUrl ||\n entry.error === fileUrl ||\n entry.notFound === fileUrl ||\n entry.layouts.includes(fileUrl)\n\nconst routeReferencesModuleUrl = (route: LoadedRoute, fileUrl: string) =>\n route.page.url === fileUrl ||\n route.layouts.some((layout) => layout.url === fileUrl) ||\n routeEntryReferencesModuleUrl(route.entry, fileUrl)\n\nconst resolveCurrentRouteManifestEntry = (router: RouterState) => {\n const currentPath = normalizeRoutePath(router.currentPath.value)\n const matched = matchRouteManifest(router.manifest, currentPath)\n if (matched?.entry.page) {\n return matched.entry\n }\n return findSpecialManifestEntry(router.manifest, currentPath, 'notFound')?.entry ?? null\n}\n\nexport const invalidateRouteModulesForHmr = (\n container: RuntimeContainer,\n fileUrl: string,\n bustToken = Date.now(),\n) => {\n const router = container.router\n if (!router) {\n return false\n }\n\n let invalidated = false\n for (const [cacheKey, route] of Array.from(router.loadedRoutes.entries())) {\n if (!routeReferencesModuleUrl(route, fileUrl)) {\n continue\n }\n router.loadedRoutes.delete(cacheKey)\n invalidated = true\n }\n\n if (router.currentRoute && routeReferencesModuleUrl(router.currentRoute, fileUrl)) {\n router.currentRoute = null\n invalidated = true\n }\n\n const currentEntry = resolveCurrentRouteManifestEntry(router)\n if (currentEntry && routeEntryReferencesModuleUrl(currentEntry, fileUrl)) {\n invalidated = true\n }\n\n if (!invalidated) {\n return false\n }\n\n router.routeModuleBusts.set(fileUrl, bustToken)\n\n if (container.doc) {\n const currentUrl = new URL(container.doc.location.href)\n const currentKey = routePrefetchKey(currentUrl)\n router.prefetchedLoaders.delete(currentKey)\n router.routePrefetches.delete(currentKey)\n }\n\n return true\n}\n\nexport const refreshRouteContainerForHmr = async (\n container: RuntimeContainer,\n fileUrl: string,\n bustToken = Date.now(),\n) => {\n const doc = container.doc\n if (!doc || !invalidateRouteModulesForHmr(container, fileUrl, bustToken)) {\n return false\n }\n\n const router = ensureRouterState(container)\n const pathname = normalizeRoutePath(router.currentPath.value)\n\n try {\n const nextRoute =\n (await loadRouteComponent(container, pathname)) ??\n (await loadResolvedRouteFromSpecial(container, pathname, 'notFound'))\n if (!nextRoute) {\n await refreshRouteContainer(container)\n return true\n }\n\n renderRouteIntoRoot(container, nextRoute.render)\n router.currentRoute = nextRoute\n applyRouteMetadata(doc, nextRoute, new URL(doc.location.href), router.defaultTitle)\n return true\n } catch {\n await refreshRouteContainer(container)\n return true\n }\n}\n\nexport const refreshRegisteredRouteContainers = async () => {\n for (const container of getResumeContainers()) {\n await refreshRouteContainer(container)\n }\n}\n\nconst activateComponent = async (container: RuntimeContainer, componentId: string) => {\n const component = container.components.get(componentId)\n if (!component?.start || !component.end || component.active) {\n return false\n }\n const activateSymbol = component.symbol\n const activateMode = component.activateModeOnFlush ?? 'replace'\n component.activateModeOnFlush = undefined\n\n if (component.symbol === SUSPENSE_COMPONENT_SYMBOL) {\n clearComponentSubscriptions(container, componentId)\n const oldDescendants = collectDescendantIds(container, componentId)\n const suspenseSpeculativeEffectCleanupSlot = component.reuseProjectionSlotDomOnActivate\n ? createCleanupSlot()\n : null\n if (!suspenseSpeculativeEffectCleanupSlot) {\n resetComponentRenderEffects(component)\n }\n const frame = createFrame(container, component, 'client', {\n effectCleanupSlot: suspenseSpeculativeEffectCleanupSlot ?? component.renderEffectCleanupSlot,\n reuseExistingDom: component.reuseExistingDomOnActivate ?? true,\n reuseProjectionSlotDom: component.reuseProjectionSlotDomOnActivate ?? false,\n })\n component.reuseExistingDomOnActivate = true\n component.reuseProjectionSlotDomOnActivate = false\n const parentRoot = component.start.parentNode\n const focusSnapshot = captureBoundaryFocus(container.doc!, component.start, component.end)\n let nodes: Node[]\n try {\n nodes = pushContainer(container, () =>\n pushFrame(frame, () =>\n renderSuspenseContentToNodes(component.props as SuspenseProps, container, componentId),\n ),\n )\n } catch (error) {\n disposeCleanupSlot(suspenseSpeculativeEffectCleanupSlot)\n throw error\n }\n disposeCleanupSlot(suspenseSpeculativeEffectCleanupSlot)\n pruneComponentVisibles(container, component, frame.visibleCursor)\n pruneComponentWatches(container, component, frame.watchCursor)\n const patched =\n activateMode === 'patch' &&\n tryPatchBoundaryContentsInPlace(component.start, component.end, nodes)\n const preservedDescendants = expandComponentIdsToDescendants(\n container,\n patched\n ? frame.projectionState.reuseExistingDom\n ? collectPreservedProjectionSlotComponentIds(container, component.start, component.end)\n : new Set<string>()\n : replaceBoundaryContents(component.start, component.end, nodes, {\n preserveProjectionSlots: frame.projectionState.reuseExistingDom,\n }),\n )\n restoreBoundaryFocus(container.doc!, component.start, component.end, focusSnapshot)\n if (parentRoot) {\n bindComponentBoundaries(container, parentRoot)\n restoreSignalRefs(container, parentRoot)\n }\n component.active = true\n const keptDescendants = new Set([\n ...frame.visitedDescendants,\n ...preservedDescendants,\n ...collectMountedDescendantComponentIds(container, component),\n ])\n pruneRemovedComponents(container, componentId, keptDescendants)\n for (const descendantId of oldDescendants) {\n if (keptDescendants.has(descendantId)) {\n continue\n }\n clearComponentSubscriptions(container, descendantId)\n }\n syncEffectOnlyLocalSignalPreference(component)\n return patched\n }\n\n clearComponentSubscriptions(container, componentId)\n const oldDescendants = collectDescendantIds(container, componentId)\n const scope = materializeScope(container, component.scopeId)\n await preloadResumableValue(container, scope)\n const module = await loadSymbol(container, activateSymbol)\n const rawProps =\n component.rawProps && typeof component.rawProps === 'object' ? component.rawProps : null\n if (rawProps) {\n component.props = evaluateProps(rawProps)\n }\n await preloadComponentProps(\n container,\n {\n captures: () => [],\n projectionSlots: component.projectionSlots ?? undefined,\n symbol: component.symbol,\n },\n component.props,\n )\n const speculativeEffectCleanupSlot = component.reuseProjectionSlotDomOnActivate\n ? createCleanupSlot()\n : null\n if (!speculativeEffectCleanupSlot) {\n resetComponentRenderEffects(component)\n }\n const frame = createFrame(container, component, 'client', {\n effectCleanupSlot: speculativeEffectCleanupSlot ?? component.renderEffectCleanupSlot,\n reuseExistingDom: component.reuseExistingDomOnActivate ?? true,\n reuseProjectionSlotDom: component.reuseProjectionSlotDomOnActivate ?? false,\n })\n component.reuseExistingDomOnActivate = true\n component.reuseProjectionSlotDomOnActivate = false\n const parentRoot = component.start.parentNode\n const focusSnapshot = captureBoundaryFocus(container.doc!, component.start, component.end)\n let nodes: Node[]\n try {\n nodes = pushContainer(container, () =>\n pushFrame(frame, () => {\n const renderProps = rawProps\n ? createRenderProps(\n component.id,\n {\n captures: () => [],\n projectionSlots: component.projectionSlots ?? undefined,\n symbol: activateSymbol,\n },\n rawProps,\n )\n : component.props && typeof component.props === 'object'\n ? createRenderProps(\n component.id,\n {\n captures: () => [],\n projectionSlots: component.projectionSlots ?? undefined,\n symbol: activateSymbol,\n },\n component.props as Record<string, unknown>,\n )\n : component.props\n const rendered = module.default(scope, renderProps)\n return toMountedNodes(rendered, container)\n }),\n )\n } catch (error) {\n disposeCleanupSlot(speculativeEffectCleanupSlot)\n throw wrapGeneratedScopeReferenceError(error, {\n componentId,\n phase: 'rerendering',\n symbolId: activateSymbol,\n })\n }\n disposeCleanupSlot(speculativeEffectCleanupSlot)\n pruneComponentVisibles(container, component, frame.visibleCursor)\n pruneComponentWatches(container, component, frame.watchCursor)\n const patched =\n activateMode === 'patch' &&\n tryPatchBoundaryContentsInPlace(component.start, component.end, nodes)\n const preservedDescendants = expandComponentIdsToDescendants(\n container,\n patched\n ? frame.projectionState.reuseExistingDom\n ? collectPreservedProjectionSlotComponentIds(container, component.start, component.end)\n : new Set<string>()\n : replaceBoundaryContents(component.start, component.end, nodes, {\n preserveProjectionSlots: frame.projectionState.reuseExistingDom,\n }),\n )\n if (component.start.parentNode && 'querySelectorAll' in component.start.parentNode) {\n bindRouterLinks(container, component.start.parentNode as ParentNode)\n }\n restoreBoundaryFocus(container.doc!, component.start, component.end, focusSnapshot)\n if (parentRoot) {\n bindComponentBoundaries(container, parentRoot)\n restoreSignalRefs(container, parentRoot)\n }\n\n component.active = true\n\n const keptDescendants = new Set([\n ...frame.visitedDescendants,\n ...preservedDescendants,\n ...collectMountedDescendantComponentIds(container, component),\n ])\n pruneRemovedComponents(container, componentId, keptDescendants)\n\n for (const descendantId of oldDescendants) {\n if (keptDescendants.has(descendantId)) {\n continue\n }\n clearComponentSubscriptions(container, descendantId)\n }\n scheduleMountCallbacks(container, component, frame.mountCallbacks)\n scheduleVisibleCallbacksCheck(container)\n syncEffectOnlyLocalSignalPreference(component)\n return patched\n}\n\nconst sortDirtyComponents = (ids: Iterable<string>) =>\n [...ids].sort((a, b) => a.split('.').length - b.split('.').length)\n\nconst parseSymbolIdFromUrl = (url: string) => {\n const parsed = new URL(url, 'http://localhost')\n return parsed.searchParams.get('eclipsa-symbol')\n}\n\nexport const resolveResumeHmrBoundarySymbols = (payload: ResumeHmrUpdatePayload) => {\n const symbolIds = new Set([...payload.rerenderComponentSymbols, ...payload.rerenderOwnerSymbols])\n\n for (const symbolId of symbolIds) {\n const replacementUrl = payload.symbolUrlReplacements[symbolId]\n if (!replacementUrl) {\n continue\n }\n const replacementSymbolId = parseSymbolIdFromUrl(replacementUrl)\n if (replacementSymbolId) {\n symbolIds.add(replacementSymbolId)\n }\n }\n\n return [...symbolIds]\n}\n\nconst findNearestMountedBoundary = (container: RuntimeContainer, componentId: string) => {\n let currentId: string | null = componentId\n while (currentId && currentId !== ROOT_COMPONENT_ID) {\n const component = container.components.get(currentId)\n if (!component) {\n return null\n }\n if (component.start && component.end) {\n return component.id\n }\n currentId = component.parentId\n }\n return null\n}\n\nexport const collectResumeHmrBoundaryIds = (\n container: RuntimeContainer,\n symbolIds: Iterable<string>,\n) => {\n const targetSymbols = new Set(symbolIds)\n const pendingBoundaries = new Set<string>()\n\n for (const component of container.components.values()) {\n if (!targetSymbols.has(component.symbol)) {\n continue\n }\n const boundaryId = findNearestMountedBoundary(container, component.id)\n if (!boundaryId) {\n if (component.active) {\n return null\n }\n continue\n }\n pendingBoundaries.add(boundaryId)\n }\n\n const result: string[] = []\n for (const boundaryId of sortDirtyComponents(pendingBoundaries)) {\n if (\n result.some((parentId) => boundaryId === parentId || isDescendantOf(parentId, boundaryId))\n ) {\n continue\n }\n result.push(boundaryId)\n }\n return result\n}\n\nexport const applyResumeHmrSymbolReplacements = (\n container: RuntimeContainer,\n replacements: Record<string, string>,\n) => {\n for (const [oldSymbolId, url] of Object.entries(replacements)) {\n const currentUrl = container.symbols.get(oldSymbolId)\n const affectedIds = new Set<string>([oldSymbolId])\n\n if (currentUrl) {\n for (const [candidateId, candidateUrl] of container.symbols.entries()) {\n if (candidateUrl === currentUrl) {\n affectedIds.add(candidateId)\n }\n }\n }\n\n for (const affectedId of affectedIds) {\n container.symbols.set(affectedId, url)\n }\n invalidateRuntimeSymbolCaches(container, affectedIds)\n\n const nextSymbolId = parseSymbolIdFromUrl(url)\n if (!nextSymbolId) {\n continue\n }\n\n for (const component of container.components.values()) {\n if (affectedIds.has(component.symbol)) {\n component.symbol = nextSymbolId\n }\n }\n\n for (const watch of container.watches.values()) {\n if (affectedIds.has(watch.symbol)) {\n watch.symbol = nextSymbolId\n }\n }\n\n for (const visible of container.visibles.values()) {\n if (affectedIds.has(visible.symbol)) {\n visible.symbol = nextSymbolId\n }\n }\n\n container.symbols.set(nextSymbolId, url)\n invalidateRuntimeSymbolCaches(container, [nextSymbolId])\n }\n}\n\nexport const markResumeHmrBoundaryDirty = (container: RuntimeContainer, boundaryId: string) => {\n const component = container.components.get(boundaryId)\n if (!component) {\n return false\n }\n resetComponentVisibleStates(container, boundaryId)\n component.active = false\n component.activateModeOnFlush = 'replace'\n component.reuseExistingDomOnActivate = false\n component.reuseProjectionSlotDomOnActivate = false\n container.dirty.add(boundaryId)\n return true\n}\n\nexport const applyResumeHmrUpdate = async (\n container: RuntimeContainer,\n payload: ResumeHmrUpdatePayload,\n) => {\n if (payload.fullReload) {\n return 'reload' as const\n }\n\n const rerenderSymbolIds = resolveResumeHmrBoundarySymbols(payload)\n const boundaryIds = collectResumeHmrBoundaryIds(container, rerenderSymbolIds)\n if (boundaryIds === null || (rerenderSymbolIds.length > 0 && boundaryIds.length === 0)) {\n return 'reload' as const\n }\n\n applyResumeHmrSymbolReplacements(container, payload.symbolUrlReplacements)\n const invalidatedSymbolIds = rerenderSymbolIds.filter((symbolId) => {\n if (Object.hasOwn(payload.symbolUrlReplacements, symbolId)) {\n return true\n }\n const currentUrl = container.symbols.get(symbolId)\n return !!currentUrl && canBustRuntimeSymbolUrl(currentUrl)\n })\n bustRuntimeSymbolUrls(container, invalidatedSymbolIds, Date.now())\n invalidateRuntimeSymbolCaches(container, invalidatedSymbolIds)\n\n for (const boundaryId of boundaryIds) {\n markResumeHmrBoundaryDirty(container, boundaryId)\n }\n\n if (container.dirty.size > 0) {\n await flushDirtyComponents(container)\n }\n\n return 'updated' as const\n}\n\nexport const applyResumeHmrUpdateToRegisteredContainers = async (\n payload: ResumeHmrUpdatePayload,\n) => {\n const routeRefreshBustToken = Date.now()\n let handled = false\n for (const container of getResumeContainers()) {\n const refreshed = await refreshRouteContainerForHmr(\n container,\n payload.fileUrl,\n routeRefreshBustToken,\n )\n if (refreshed) {\n handled = true\n continue\n }\n const result = await applyResumeHmrUpdate(container, payload)\n if (result === 'updated') {\n handled = true\n }\n }\n\n return handled ? ('updated' as const) : ('reload' as const)\n}\n\nexport const flushDirtyComponents = async (container: RuntimeContainer) => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n while (true) {\n const existing = globalRecord[DIRTY_FLUSH_PROMISE_KEY]\n if (existing instanceof Promise) {\n await existing\n if (container.dirty.size === 0) {\n return\n }\n continue\n }\n\n if (container.dirty.size === 0) {\n return\n }\n\n const pendingFocus = capturePendingFocusRestore(container, container.doc?.activeElement)\n\n const flushing = (async () => {\n while (container.dirty.size > 0) {\n const batch = sortDirtyComponents(container.dirty)\n container.dirty.clear()\n const patchedAncestors = new Set<string>()\n const rerendered = new Set<string>()\n for (const componentId of batch) {\n const rerenderedParent = [...rerendered].find(\n (parentId) => componentId === parentId || isDescendantOf(parentId, componentId),\n )\n if (rerenderedParent) {\n const component = container.components.get(componentId)\n if (\n patchedAncestors.has(rerenderedParent) &&\n component?.start?.parentNode &&\n component.end?.parentNode\n ) {\n component.active = false\n container.dirty.add(componentId)\n }\n continue\n }\n const component = container.components.get(componentId)\n if (component?.active) {\n continue\n }\n const preservesProjectionSlotDom =\n (component?.activateModeOnFlush ?? 'replace') === 'patch' &&\n (component?.reuseProjectionSlotDomOnActivate ?? false)\n const patched = await activateComponent(container, componentId)\n rerendered.add(componentId)\n if (preservesProjectionSlotDom && patched) {\n patchedAncestors.add(componentId)\n }\n }\n }\n })()\n\n globalRecord[DIRTY_FLUSH_PROMISE_KEY] = flushing\n try {\n await flushing\n } finally {\n if (globalRecord[DIRTY_FLUSH_PROMISE_KEY] === flushing) {\n delete globalRecord[DIRTY_FLUSH_PROMISE_KEY]\n }\n }\n\n restorePendingFocus(container, pendingFocus)\n\n if (container.dirty.size === 0) {\n return\n }\n }\n}\n\nconst waitForPendingDirtyFlush = async () => {\n const existing = (globalThis as Record<PropertyKey, unknown>)[DIRTY_FLUSH_PROMISE_KEY]\n if (existing instanceof Promise) {\n await existing\n }\n}\n\nexport const beginSSRContainer = <T>(\n symbols: Record<string, string>,\n render: () => T,\n): {\n container: RuntimeContainer\n result: T\n} => {\n const container = createContainer(symbols)\n const rootComponent: ComponentState = {\n active: false,\n didMount: false,\n id: ROOT_COMPONENT_ID,\n mountCleanupSlots: [],\n parentId: null,\n props: {},\n projectionSlots: null,\n rawProps: null,\n renderEffectCleanupSlot: createCleanupSlot(),\n scopeId: registerScope(container, []),\n signalIds: [],\n symbol: ROOT_COMPONENT_ID,\n suspensePromise: null,\n visibleCount: 0,\n watchCount: 0,\n }\n\n const rootFrame = createFrame(container, rootComponent, 'ssr')\n const result = pushContainer(container, () => pushFrame(rootFrame, render))\n return {\n container,\n result,\n }\n}\n\nexport const beginAsyncSSRContainer = async <T>(\n symbols: Record<string, string>,\n render: () => T,\n prepare?: (container: RuntimeContainer) => void | Promise<void>,\n options?: {\n asyncSignalSnapshotCache?: Map<string, unknown>\n },\n): Promise<{\n container: RuntimeContainer\n result: T\n}> => {\n const container = createContainer(symbols, undefined, options?.asyncSignalSnapshotCache)\n const rootComponent: ComponentState = {\n active: false,\n didMount: false,\n id: ROOT_COMPONENT_ID,\n mountCleanupSlots: [],\n parentId: null,\n props: {},\n projectionSlots: null,\n rawProps: null,\n renderEffectCleanupSlot: createCleanupSlot(),\n scopeId: registerScope(container, []),\n signalIds: [],\n symbol: ROOT_COMPONENT_ID,\n suspensePromise: null,\n visibleCount: 0,\n watchCount: 0,\n }\n\n const rootFrame = createFrame(container, rootComponent, 'ssr')\n await prepare?.(container)\n const result = pushContainer(container, () => pushFrame(rootFrame, render))\n return {\n container,\n result,\n }\n}\n\nconst createResumePayload = (\n container: RuntimeContainer,\n componentIds?: Iterable<string>,\n): ResumePayload => {\n const keepComponents = componentIds ? new Set(componentIds) : null\n const componentEntries = [...container.components.entries()].filter(\n ([id]) => !keepComponents || keepComponents.has(id),\n )\n const keepSignals = new Set(componentEntries.flatMap(([, component]) => component.signalIds))\n if (keepComponents) {\n for (const [id, record] of container.signals.entries()) {\n if ([...record.subscribers].some((componentId) => keepComponents.has(componentId))) {\n keepSignals.add(id)\n }\n }\n }\n\n return {\n actions: Object.fromEntries(\n [...container.actionStates.entries()].map(([id, action]) => [\n id,\n {\n error: serializeRuntimeValue(container, action.error),\n input: serializeRuntimeValue(container, action.input),\n result: serializeRuntimeValue(container, action.result),\n } satisfies ResumeActionPayload,\n ]),\n ),\n components: Object.fromEntries(\n componentEntries.map(([id, component]) => [\n id,\n {\n ...(component.optimizedRoot ? { optimizedRoot: true } : {}),\n props: serializeRuntimeValue(container, component.props),\n ...(component.projectionSlots\n ? { projectionSlots: { ...component.projectionSlots } }\n : {}),\n scope: component.scopeId,\n signalIds: [...component.signalIds],\n symbol: component.symbol,\n visibleCount: component.visibleCount,\n watchCount: component.watchCount,\n } satisfies ResumeComponentPayload,\n ]),\n ),\n loaders: Object.fromEntries(\n [...container.loaderStates.entries()].map(([id, loader]) => [\n id,\n {\n data: serializeRuntimeValue(container, loader.data),\n error: serializeRuntimeValue(container, loader.error),\n loaded: loader.loaded,\n } satisfies ResumeLoaderPayload,\n ]),\n ),\n scopes: Object.fromEntries(container.scopes.entries()),\n signals: Object.fromEntries(\n [...container.signals.entries()]\n .filter(([id]) => !keepComponents || keepSignals.has(id))\n .map(([id, record]) => [id, serializeRuntimeValue(container, record.value)]),\n ),\n subscriptions: Object.fromEntries(\n [...container.signals.entries()]\n .filter(([id]) => !keepComponents || keepSignals.has(id))\n .map(([id, record]) => [\n id,\n [...record.subscribers].filter(\n (componentId) => !keepComponents || keepComponents.has(componentId),\n ),\n ]),\n ),\n symbols: Object.fromEntries(container.symbols.entries()),\n visibles: Object.fromEntries(\n [...container.visibles.entries()]\n .filter(([, visible]) => !keepComponents || keepComponents.has(visible.componentId))\n .map(([id, visible]) => [\n id,\n {\n componentId: visible.componentId,\n scope: visible.scopeId,\n symbol: visible.symbol,\n } satisfies ResumeVisiblePayload,\n ]),\n ),\n watches: Object.fromEntries(\n [...container.watches.entries()]\n .filter(([, watch]) => !keepComponents || keepComponents.has(watch.componentId))\n .map(([id, watch]) => [\n id,\n {\n componentId: watch.componentId,\n mode: watch.mode,\n scope: watch.scopeId,\n signals: [...watch.effect.signals].map((signal) => signal.id),\n symbol: watch.symbol,\n } satisfies ResumeWatchPayload,\n ]),\n ),\n }\n}\n\nexport const toResumePayload = (container: RuntimeContainer): ResumePayload =>\n createResumePayload(container)\n\nexport const toResumePayloadSubset = (\n container: RuntimeContainer,\n componentIds: Iterable<string>,\n): ResumePayload => createResumePayload(container, componentIds)\n\nconst bindComponentBoundaries = (container: RuntimeContainer, root: ParentNode) => {\n if (!hasOwnerDocument(root)) {\n return\n }\n for (const [id, boundary] of scanComponentBoundaries(root)) {\n const component = container.components.get(id)\n if (!component) {\n continue\n }\n component.start = boundary.start\n component.end = boundary.end\n }\n}\n\nexport const mergeResumePayload = (container: RuntimeContainer, payload: ResumePayload) => {\n for (const [id, actionPayload] of Object.entries(payload.actions ?? {})) {\n container.actionStates.set(id, {\n error: deserializeRuntimeValue(container, actionPayload.error),\n input: deserializeRuntimeValue(container, actionPayload.input),\n result: deserializeRuntimeValue(container, actionPayload.result),\n })\n }\n\n for (const [id, encodedValue] of Object.entries(payload.signals)) {\n const decodedValue = deserializeRuntimeValue(container, encodedValue)\n const record = ensureSignalRecord(container, id, decodedValue)\n record.value = decodedValue\n }\n\n for (const [id, loaderPayload] of Object.entries(payload.loaders ?? {})) {\n container.loaderStates.set(id, {\n data: deserializeRuntimeValue(container, loaderPayload.data),\n error: deserializeRuntimeValue(container, loaderPayload.error),\n loaded: loaderPayload.loaded,\n })\n }\n\n for (const [id, slots] of Object.entries(payload.scopes)) {\n container.scopes.set(id, slots)\n }\n container.nextScopeId = findNextNumericId(container.scopes.keys(), 'sc')\n\n for (const [id, componentPayload] of Object.entries(payload.components)) {\n container.components.set(id, {\n active: false,\n didMount: false,\n id,\n mountCleanupSlots: [],\n optimizedRoot: componentPayload.optimizedRoot === true,\n parentId: id.includes('.') ? id.slice(0, id.lastIndexOf('.')) : ROOT_COMPONENT_ID,\n prefersEffectOnlyLocalSignalWrites: false,\n props: deserializeRuntimeValue(container, componentPayload.props),\n projectionSlots: componentPayload.projectionSlots\n ? { ...componentPayload.projectionSlots }\n : null,\n rawProps: null,\n renderEffectCleanupSlot: createCleanupSlot(),\n scopeId: componentPayload.scope,\n signalIds: [...componentPayload.signalIds],\n symbol: componentPayload.symbol,\n suspensePromise: null,\n visibleCount: componentPayload.visibleCount ?? 0,\n watchCount: componentPayload.watchCount,\n })\n }\n\n for (const [signalId, subscribers] of Object.entries(payload.subscriptions)) {\n const record = container.signals.get(signalId)\n if (!record) {\n continue\n }\n record.subscribers = new Set(subscribers)\n }\n container.nextSignalId = findNextNumericId(container.signals.keys(), 's')\n container.nextAtomId = findNextNumericId(container.signals.keys(), 'a')\n\n for (const [id, watchPayload] of Object.entries(payload.watches)) {\n const watch = getOrCreateWatchState(container, id, watchPayload.componentId)\n watch.mode = watchPayload.mode\n watch.scopeId = watchPayload.scope\n watch.symbol = watchPayload.symbol\n watch.track = null\n watch.run = null\n clearEffectSignals(watch.effect)\n for (const signalId of watchPayload.signals) {\n const record = container.signals.get(signalId)\n if (!record) {\n continue\n }\n watch.effect.signals.add(record)\n record.effects.add(watch.effect)\n }\n }\n\n for (const [id, visiblePayload] of Object.entries(payload.visibles ?? {})) {\n const visible = getOrCreateVisibleState(container, id, visiblePayload.componentId)\n visible.done = false\n visible.pending = null\n visible.run = null\n visible.scopeId = visiblePayload.scope\n visible.symbol = visiblePayload.symbol\n }\n}\n\nconst pruneStreamedBoundaryDescendants = (\n container: RuntimeContainer,\n boundaryId: string,\n payload: ResumePayload,\n) => {\n const keep = new Set(\n Object.keys(payload.components).filter((candidate) => isDescendantOf(boundaryId, candidate)),\n )\n pruneRemovedComponents(container, boundaryId, keep)\n}\n\nconst applyStreamedSuspenseBoundary = (\n container: RuntimeContainer,\n chunk: StreamedSuspenseChunk,\n) => {\n const doc = container.doc\n if (!doc) {\n return\n }\n const component = container.components.get(chunk.boundaryId)\n if (!component?.start || !component.end) {\n return\n }\n const template = doc.getElementById(chunk.templateId)\n const payloadScript = doc.getElementById(chunk.payloadScriptId)\n if (!(template instanceof HTMLTemplateElement) || !payloadScript?.textContent) {\n return\n }\n\n const payload = JSON.parse(payloadScript.textContent) as ResumePayload\n const focusSnapshot = captureBoundaryFocus(doc, component.start, component.end)\n const fragment = template.content.cloneNode(true) as DocumentFragment\n const nodes = [...fragment.childNodes]\n replaceBoundaryContents(component.start, component.end, nodes)\n pruneStreamedBoundaryDescendants(container, chunk.boundaryId, payload)\n mergeResumePayload(container, payload)\n component.suspensePromise = null\n\n const parentRoot = component.start.parentNode\n if (parentRoot) {\n bindComponentBoundaries(container, parentRoot)\n restoreSignalRefs(container, parentRoot)\n if ('querySelectorAll' in parentRoot) {\n bindRouterLinks(container, parentRoot)\n }\n }\n\n restoreBoundaryFocus(doc, component.start, component.end, focusSnapshot)\n scheduleVisibleCallbacksCheck(container)\n template.remove()\n payloadScript.remove()\n}\n\nconst getStreamState = (): StreamState => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[STREAM_STATE_KEY]\n if (existing && typeof existing === 'object' && 'enqueue' in existing && 'pending' in existing) {\n return existing as StreamState\n }\n const created: StreamState = {\n enqueue(chunk) {\n created.pending.push(chunk)\n void created.process?.()\n },\n pending: [],\n processing: null,\n }\n globalRecord[STREAM_STATE_KEY] = created\n return created\n}\n\nexport const getStreamingResumeBootstrapScriptContent = () =>\n `(()=>{const streamKey=\"${STREAM_STATE_KEY}\";const stream=window[streamKey]??={pending:[]};stream.enqueue=stream.enqueue??function(chunk){this.pending.push(chunk);if(this.process){void this.process();}};const navKey=\"${PENDING_RESUME_LINK_KEY}\";document.addEventListener(\"click\",(event)=>{if(document.body?.getAttribute(\"data-e-resume\")!==\"paused\")return;if(event.defaultPrevented||event.button!==0||event.metaKey||event.ctrlKey||event.shiftKey||event.altKey)return;let element=event.target instanceof Element?event.target:event.target instanceof Node?event.target.parentElement:null;while(element&&!(element instanceof HTMLAnchorElement)){element=element.parentElement;}if(!element||!element.hasAttribute(\"${ROUTE_LINK_ATTR}\")||element.hasAttribute(\"download\"))return;if(element.target&&element.target!==\"_self\")return;const href=element.getAttribute(\"href\");if(!href)return;const url=new URL(href,window.location.href);if(url.origin!==window.location.origin)return;event.preventDefault();window[navKey]={href:url.href,replace:element.getAttribute(\"${ROUTE_REPLACE_ATTR}\")===\"true\"};},{capture:true});})();`\n\nconst takePendingResumeLinkNavigation = (): PendingResumeLinkNavigation | null => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const pending = globalRecord[PENDING_RESUME_LINK_KEY]\n if (\n !pending ||\n typeof pending !== 'object' ||\n typeof (pending as { href?: unknown }).href !== 'string'\n ) {\n return null\n }\n delete globalRecord[PENDING_RESUME_LINK_KEY]\n return {\n href: (pending as { href: string }).href,\n replace: (pending as { replace?: unknown }).replace === true,\n }\n}\n\nconst installStreamedSuspenseController = (container: RuntimeContainer) => {\n const state = getStreamState()\n state.process = async () => {\n if (state.processing) {\n await state.processing\n return\n }\n state.processing = (async () => {\n while (state.pending.length > 0) {\n const chunk = state.pending.shift()\n if (!chunk) {\n continue\n }\n applyStreamedSuspenseBoundary(container, chunk)\n }\n })()\n try {\n await state.processing\n } finally {\n state.processing = null\n }\n }\n if (state.pending.length > 0) {\n void state.process()\n }\n}\n\nexport const createResumeContainer = (\n source: Document | HTMLElement,\n payload: ResumePayload,\n options?: {\n routeManifest?: RouteManifest\n },\n) => {\n const doc = source instanceof Document ? source : source.ownerDocument\n const root = source instanceof Document ? doc.body : source\n const container = createContainer(payload.symbols, doc)\n container.rootElement = root as HTMLElement\n ensureRouterState(container, options?.routeManifest)\n\n mergeResumePayload(container, payload)\n rememberManagedAttributesForNode(root as HTMLElement)\n bindComponentBoundaries(container, root as HTMLElement)\n restoreSignalRefs(container, root as HTMLElement)\n\n restoreRegisteredRpcHandles(container)\n\n ensureRouterState(container)\n syncRouterLocationSilently(container, doc.location.href)\n scheduleVisibleCallbacksCheck(container)\n\n return container\n}\n\nconst canRestoreResumedLocalSignalEffects = (\n container: RuntimeContainer,\n component: ComponentState,\n) =>\n !!component.start &&\n !!component.end &&\n !component.active &&\n component.signalIds.length > 0 &&\n (component.symbol === SUSPENSE_COMPONENT_SYMBOL ||\n container.imports.has(component.symbol) ||\n container.symbols.has(component.symbol))\n\nexport const restoreResumedLocalSignalEffects = async (container: RuntimeContainer) => {\n let queued = false\n const restoredIds: string[] = []\n\n for (const componentId of sortDirtyComponents(\n [...container.components.values()]\n .filter((component) => canRestoreResumedLocalSignalEffects(container, component))\n .map((component) => component.id),\n )) {\n const component = container.components.get(componentId)\n if (!component || component.active) {\n continue\n }\n component.active = false\n component.activateModeOnFlush = 'replace'\n component.reuseExistingDomOnActivate = false\n component.reuseProjectionSlotDomOnActivate = false\n container.dirty.add(component.id)\n restoredIds.push(component.id)\n queued = true\n }\n\n if (queued) {\n await flushDirtyComponents(container)\n }\n\n for (const componentId of restoredIds) {\n const component = container.components.get(componentId)\n if (!component?.active) {\n continue\n }\n syncEffectOnlyLocalSignalPreference(component)\n }\n}\n\nexport const restoreRegisteredRpcHandles = (container: RuntimeContainer) => {\n withRuntimeContainer(container, () => {\n for (const id of getRegisteredActionHookIds()) {\n getRegisteredActionHook<() => unknown>(id)?.()\n }\n for (const id of getRegisteredLoaderHookIds()) {\n getRegisteredLoaderHook<() => unknown>(id)?.()\n }\n })\n}\n\nexport const primeRouteModules = async (container: RuntimeContainer) => {\n const router = ensureRouterState(container)\n const currentRoute = await loadRouteComponent(container, router.currentPath.value)\n if (currentRoute) {\n router.currentRoute = currentRoute\n if (container.doc) {\n applyRouteMetadata(\n container.doc,\n currentRoute,\n new URL(container.doc.location.href),\n router.defaultTitle,\n )\n }\n }\n}\n\nconst getRouterEventState = (event: Event): RouterEventState => {\n const eventRecord = event as Event & {\n [ROUTER_EVENT_STATE_KEY]?: RouterEventState\n preventDefault: () => void\n }\n const existing = eventRecord[ROUTER_EVENT_STATE_KEY]\n if (existing) {\n return existing\n }\n\n const originalPreventDefault = event.preventDefault.bind(event)\n const state: RouterEventState = {\n originalPreventDefault,\n routerPrevented: false,\n userPrevented: false,\n }\n\n eventRecord.preventDefault = () => {\n if (state.routerPrevented) {\n state.userPrevented = true\n }\n originalPreventDefault()\n }\n eventRecord[ROUTER_EVENT_STATE_KEY] = state\n return state\n}\n\nconst findInteractiveTarget = (target: EventTarget | null, eventName: string): Element | null => {\n let element = isElementNode(target)\n ? target\n : target instanceof Node\n ? target.parentElement\n : null\n while (element) {\n if (element.hasAttribute(`data-e-on${eventName}`)) {\n return element\n }\n element = element.parentElement\n }\n return null\n}\n\nconst INTERACTIVE_PREFETCH_EVENT_NAMES = [\n 'click',\n 'input',\n 'change',\n 'submit',\n 'keydown',\n 'compositionstart',\n 'compositionend',\n] as const\nconst INTERACTIVE_PREFETCH_SELECTOR = INTERACTIVE_PREFETCH_EVENT_NAMES.map(\n (eventName) => `[data-e-on${eventName}]`,\n).join(', ')\n\nconst prefetchElementSymbols = (\n container: RuntimeContainer,\n element: Element,\n eventNames: readonly string[],\n) => {\n for (const eventName of eventNames) {\n const binding = element.getAttribute(`data-e-on${eventName}`)\n if (!binding) {\n continue\n }\n const { symbolId } = parseBinding(binding)\n void loadSymbol(container, symbolId).catch(() => {})\n }\n}\n\nconst prefetchInteractiveTargetSymbols = (\n container: RuntimeContainer,\n target: EventTarget | null,\n eventNames: readonly string[],\n) => {\n let element = isElementNode(target)\n ? target\n : target instanceof Node\n ? target.parentElement\n : null\n\n while (element) {\n prefetchElementSymbols(container, element, eventNames)\n element = element.parentElement\n }\n}\n\nconst getPendingLinkNavigationForLink = (\n container: RuntimeContainer,\n event: Event,\n link: HTMLAnchorElement,\n): PendingLinkNavigation | null => {\n if (!(event instanceof MouseEvent)) {\n return null\n }\n if (event.defaultPrevented) {\n return null\n }\n if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {\n return null\n }\n if (link.hasAttribute('download')) {\n return null\n }\n if (link.target && link.target !== '_self') {\n return null\n }\n\n const href = link.getAttribute('href')\n if (!href || !container.doc) {\n return null\n }\n\n const url = new URL(href, container.doc.location.href)\n const pathname = normalizeRoutePath(url.pathname)\n if (url.origin !== container.doc.location.origin) {\n return null\n }\n const matched = matchRouteManifest(ensureRouterState(container).manifest, pathname)\n if (!matched?.entry.page) {\n return null\n }\n\n const state = getRouterEventState(event)\n state.routerPrevented = true\n state.originalPreventDefault()\n\n return {\n href: url.href,\n replace: link.getAttribute(ROUTE_REPLACE_ATTR) === 'true',\n state,\n }\n}\n\nconst getLinkPrefetchMode = (link: HTMLAnchorElement): LinkPrefetchMode => {\n const value = link.getAttribute(ROUTE_PREFETCH_ATTR)\n if (value === 'hover' || value === 'focus' || value === 'intent' || value === 'none') {\n return value\n }\n return 'intent'\n}\n\nconst findRouteLinkTarget = (target: EventTarget | null) => {\n let element = isElementNode(target)\n ? target\n : target instanceof Node\n ? target.parentElement\n : null\n\n while (element) {\n if (isHTMLAnchorElementNode(element) && element.hasAttribute(ROUTE_LINK_ATTR)) {\n return element\n }\n element = element.parentElement\n }\n\n return null\n}\n\nconst bindRouterLinkPrefetch = (container: RuntimeContainer, link: HTMLAnchorElement) => {\n const boundLink = link as HTMLAnchorElement & {\n [ROUTER_LINK_PREFETCH_BOUND_KEY]?: true\n }\n if (boundLink[ROUTER_LINK_PREFETCH_BOUND_KEY]) {\n return\n }\n\n boundLink[ROUTER_LINK_PREFETCH_BOUND_KEY] = true\n const mode = getLinkPrefetchMode(link)\n if (mode === 'none') {\n return\n }\n\n const runPrefetch = () => {\n const href = link.getAttribute('href')\n if (!href) {\n return\n }\n void prefetchRoute(container, href)\n }\n\n const runPointerIntentPrefetch = (event: Event) => {\n if (event instanceof MouseEvent && event.button !== 0) {\n return\n }\n runPrefetch()\n }\n\n if (mode === 'hover' || mode === 'intent') {\n link.addEventListener('mouseenter', runPrefetch)\n }\n if (mode === 'focus' || mode === 'intent') {\n link.addEventListener('focus', runPrefetch)\n }\n if (mode === 'intent') {\n link.addEventListener('pointerdown', runPointerIntentPrefetch)\n }\n}\n\nconst bindRouterLink = (container: RuntimeContainer, link: HTMLAnchorElement) => {\n const boundLink = link as HTMLAnchorElement & {\n [ROUTER_LINK_BOUND_KEY]?: true\n }\n if (boundLink[ROUTER_LINK_BOUND_KEY]) {\n return\n }\n\n boundLink[ROUTER_LINK_BOUND_KEY] = true\n link.addEventListener('click', (event) => {\n const pendingLink = getPendingLinkNavigationForLink(container, event, link)\n if (!pendingLink || pendingLink.state.userPrevented) {\n return\n }\n void navigateContainer(container, pendingLink.href, {\n mode: pendingLink.replace ? 'replace' : 'push',\n })\n })\n}\n\nconst bindRouterLinks = (container: RuntimeContainer, root: ParentNode) => {\n const links = root.querySelectorAll(`a[${ROUTE_LINK_ATTR}]`)\n for (const link of links) {\n if (!isHTMLAnchorElementNode(link)) {\n continue\n }\n bindRouterLinkPrefetch(container, link)\n bindRouterLink(container, link)\n }\n}\n\nexport const installResumeLinkListeners = (container: RuntimeContainer) => {\n if (!container.doc) {\n return\n }\n bindRouterLinks(container, container.doc)\n const onRouteClick = (event: Event) => {\n const link = findRouteLinkTarget(event.target)\n if (!link) {\n return\n }\n const pendingLink = getPendingLinkNavigationForLink(container, event, link)\n if (!pendingLink || pendingLink.state.userPrevented) {\n return\n }\n void navigateContainer(container, pendingLink.href, {\n mode: pendingLink.replace ? 'replace' : 'push',\n })\n }\n container.doc.addEventListener('click', onRouteClick)\n const pending = takePendingResumeLinkNavigation()\n if (pending) {\n void navigateContainer(container, pending.href, {\n mode: pending.replace ? 'replace' : 'push',\n })\n }\n return () => {\n container.doc?.removeEventListener('click', onRouteClick)\n }\n}\n\nconst parseBinding = (value: string): { scopeId: string; symbolId: string } => {\n const separatorIndex = value.indexOf(':')\n if (separatorIndex < 0) {\n throw new Error(`Invalid binding ${value}.`)\n }\n return {\n symbolId: value.slice(0, separatorIndex),\n scopeId: value.slice(separatorIndex + 1),\n }\n}\n\nconst withClientContainer = async <T>(container: RuntimeContainer, fn: () => Promise<T> | T) =>\n pushContainer(container, () => Promise.resolve(fn()))\n\nexport const createDelegatedEvent = (event: Event, currentTarget: Element) =>\n new Proxy(event, {\n get(target, property) {\n if (property === 'currentTarget') {\n return currentTarget\n }\n const value = Reflect.get(target, property, target)\n return typeof value === 'function' ? value.bind(target) : value\n },\n }) as Event\n\nconst readBoundElementValue = (\n element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n currentValue: unknown,\n) => {\n if (\n isHTMLInputElementNode(element) &&\n typeof currentValue === 'number' &&\n (element.type === 'number' || element.type === 'range') &&\n !Number.isNaN(element.valueAsNumber)\n ) {\n return element.valueAsNumber\n }\n\n return element.value\n}\n\nexport const syncBoundElementSignal = (container: RuntimeContainer, target: EventTarget | null) => {\n if (\n !isHTMLInputElementNode(target) &&\n !isHTMLSelectElementNode(target) &&\n !isHTMLTextAreaElementNode(target)\n ) {\n return false\n }\n\n let didSync = false\n const valueSignalId = target.getAttribute(BIND_VALUE_ATTR)\n if (valueSignalId) {\n const record = container.signals.get(valueSignalId)\n if (record) {\n const nextValue = readBoundElementValue(target, record.value)\n writeSignalValue(container, record, nextValue)\n didSync = true\n }\n }\n\n if (isHTMLInputElementNode(target)) {\n const checkedSignalId = target.getAttribute(BIND_CHECKED_ATTR)\n if (checkedSignalId) {\n const record = container.signals.get(checkedSignalId)\n if (record) {\n const nextChecked = target.checked\n writeSignalValue(container, record, nextChecked)\n didSync = true\n }\n }\n }\n\n return didSync\n}\n\nexport const createClientLazyListener = (\n descriptor: EventDescriptor | LazyMeta,\n currentTarget: Element,\n) => {\n const container = getCurrentContainer()\n if (!container) {\n return null\n }\n\n return async (event: Event) => {\n const module = await loadSymbol(container, descriptor.symbol)\n try {\n await withClientContainer(container, async () => {\n await module.default(descriptor.captures(), createDelegatedEvent(event, currentTarget))\n })\n } catch (error) {\n throw wrapGeneratedScopeReferenceError(error, {\n phase: 'running a lazy event handler for',\n symbolId: descriptor.symbol,\n })\n }\n await flushDirtyComponents(container)\n }\n}\n\nexport const dispatchResumeEvent = async (container: RuntimeContainer, event: Event) => {\n const interactiveTarget = findInteractiveTarget(event.target, event.type)\n if (!interactiveTarget) {\n return\n }\n\n const binding = interactiveTarget.getAttribute(`data-e-on${event.type}`)\n if (!binding) {\n return\n }\n const pendingFocus = capturePendingFocusRestore(container, event.target)\n\n const { scopeId, symbolId } = parseBinding(binding)\n const module =\n getResolvedRuntimeSymbols(container).get(symbolId) ?? (await loadSymbol(container, symbolId))\n const scope = materializeScope(container, scopeId)\n try {\n await withClientContainer(container, async () => {\n await module.default(scope, createDelegatedEvent(event, interactiveTarget))\n })\n } catch (error) {\n throw wrapGeneratedScopeReferenceError(error, {\n phase: 'running a resumable event handler for',\n symbolId,\n })\n }\n await flushDirtyComponents(container)\n restorePendingFocus(container, pendingFocus)\n}\n\nexport const dispatchDocumentEvent = async (container: RuntimeContainer, event: Event) => {\n if (container.resumeReadyPromise) {\n await container.resumeReadyPromise\n }\n const didSyncBoundSignal =\n (event.type === 'input' || event.type === 'change') &&\n syncBoundElementSignal(container, event.target)\n const pendingFocus = didSyncBoundSignal\n ? capturePendingFocusRestore(container, event.target)\n : null\n await dispatchResumeEvent(container, event)\n if (didSyncBoundSignal) {\n await flushDirtyComponents(container)\n restorePendingFocus(container, pendingFocus)\n }\n if (event.type === 'submit' && !event.defaultPrevented && isHTMLFormElementNode(event.target)) {\n const actionId = event.target.getAttribute(ACTION_FORM_ATTR)\n if (actionId) {\n const handle = container.actions.get(actionId) as\n | {\n action: (input?: unknown) => Promise<unknown>\n }\n | undefined\n if (handle) {\n event.preventDefault()\n const submitter =\n typeof SubmitEvent !== 'undefined' && event instanceof SubmitEvent\n ? (event.submitter ?? undefined)\n : undefined\n const formData = isHTMLElementNode(submitter)\n ? new FormData(event.target, submitter)\n : new FormData(event.target)\n await handle.action(formData)\n await flushDirtyComponents(container)\n }\n }\n }\n}\n\nconst enqueueDocumentEvent = (container: RuntimeContainer, event: Event) => {\n if (!container.eventDispatchPromise) {\n const running = dispatchDocumentEvent(container, event)\n const tracked = running.finally(() => {\n if (container.eventDispatchPromise === tracked) {\n container.eventDispatchPromise = null\n }\n })\n container.eventDispatchPromise = tracked\n return tracked\n }\n\n const previous = container.eventDispatchPromise ?? Promise.resolve()\n const queued = previous\n .catch(() => {})\n .then(async () => {\n await dispatchDocumentEvent(container, event)\n })\n container.eventDispatchPromise = queued.finally(() => {\n if (container.eventDispatchPromise === queued) {\n container.eventDispatchPromise = null\n }\n })\n return container.eventDispatchPromise\n}\n\nexport const installResumeListeners = (container: RuntimeContainer) => {\n const doc = container.doc\n if (!doc) {\n return () => {}\n }\n const cleanupRouteLinks = installResumeLinkListeners(container)\n installStreamedSuspenseController(container)\n ensureVisibilityListeners(container)\n scheduleVisibleCallbacksCheck(container)\n const listeners = [\n 'cancel',\n 'click',\n 'input',\n 'change',\n 'submit',\n 'keydown',\n 'compositionstart',\n 'compositionend',\n ] as const\n const onEvent = (event: Event) => {\n void enqueueDocumentEvent(container, event)\n }\n const onIntent = (event: Event) => {\n if (event.type === 'pointerdown') {\n prefetchInteractiveTargetSymbols(container, event.target, ['click', 'submit'])\n return\n }\n prefetchInteractiveTargetSymbols(container, event.target, INTERACTIVE_PREFETCH_EVENT_NAMES)\n }\n const onPopState = () => {\n void navigateContainer(container, doc.location.href, {\n mode: 'pop',\n })\n }\n\n for (const eventName of listeners) {\n doc.addEventListener(eventName, onEvent, true)\n }\n doc.addEventListener('pointerdown', onIntent, true)\n doc.addEventListener('focusin', onIntent, true)\n doc.defaultView?.addEventListener('popstate', onPopState)\n\n return () => {\n for (const eventName of listeners) {\n doc.removeEventListener(eventName, onEvent, true)\n }\n doc.removeEventListener('pointerdown', onIntent, true)\n doc.removeEventListener('focusin', onIntent, true)\n doc.defaultView?.removeEventListener('popstate', onPopState)\n cleanupRouteLinks?.()\n container.visibilityListenersCleanup?.()\n }\n}\n\nexport const renderString = (inputElementLike: JSX.Element | JSX.Element[]) =>\n renderStringNode(inputElementLike)\n\nexport const hasActiveRuntimeComponent = () => {\n const frame = getCurrentFrame()\n return !!frame && frame.component.id !== ROOT_COMPONENT_ID\n}\n\nexport const getRuntimeContextValue = (\n token: RuntimeContextToken,\n): {\n found: boolean\n value: unknown\n} => {\n const stack = getContextValueStack()\n for (let index = stack.length - 1; index >= 0; index -= 1) {\n const entry = stack[index]\n if (entry?.token === token) {\n return {\n found: true,\n value: entry.value,\n }\n }\n }\n return {\n found: false,\n value: undefined,\n }\n}\n\nexport const createStandaloneRuntimeSignal = <T>(fallback: T): { value: T } => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const nextId = ((globalRecord[STANDALONE_SIGNAL_ID_KEY] as number | undefined) ?? 0) + 1\n globalRecord[STANDALONE_SIGNAL_ID_KEY] = nextId\n return ensureSignalRecord(null, `$standalone:${nextId}`, fallback).handle\n}\n\nexport const useRuntimeSignal = <T>(fallback: T): { value: T } => {\n const container = getCurrentContainer()\n const frame = getCurrentFrame()\n\n if (!container || !frame || frame.component.id === ROOT_COMPONENT_ID) {\n throw new Error('useSignal() can only be used while rendering a component.')\n }\n\n const signalIndex = frame.signalCursor++\n const existingId = frame.component.signalIds[signalIndex]\n const signalId = existingId ?? `s${container.nextSignalId++}`\n if (!existingId) {\n frame.component.signalIds.push(signalId)\n }\n return ensureSignalRecord(container, signalId, fallback).handle\n}\n\nexport const useRuntimeAtom = <T>(atom: object, fallback: T): { value: T } => {\n const container = getCurrentContainer()\n const frame = getCurrentFrame()\n\n if (!container || !frame || frame.component.id === ROOT_COMPONENT_ID) {\n throw new Error('useAtom() can only be used while rendering a component.')\n }\n\n const signalIndex = frame.signalCursor++\n const existingId = frame.component.signalIds[signalIndex]\n const mappedId = container.atoms.get(atom)\n const signalId = existingId ?? mappedId ?? `a${container.nextAtomId++}`\n if (!existingId) {\n frame.component.signalIds.push(signalId)\n }\n if (mappedId !== signalId) {\n container.atoms.set(atom, signalId)\n }\n return ensureSignalRecord(container, signalId, fallback).handle\n}\n\nexport const createDetachedRuntimeSignal = <T>(\n container: RuntimeContainer,\n id: string,\n fallback: T,\n): { value: T } => ensureSignalRecord(container, id, fallback).handle\n\nexport const getRuntimeComponentId = () => getCurrentFrame()?.component.id ?? null\nexport const getRuntimeSignalId = (value: unknown) => getSignalMeta(value)?.id ?? null\n\nexport const useRuntimeNavigate = (): Navigate => {\n const container = getCurrentContainer()\n if (!container) {\n return createStandaloneNavigate()\n }\n return ensureRouterState(container).navigate\n}\n\nexport const useRuntimeLocation = (): RouteLocation => {\n const container = getCurrentContainer()\n if (!container) {\n return createStandaloneLocation()\n }\n return ensureRouterState(container).location\n}\n\nexport const useRuntimeRouteParams = (): RouteParams => {\n const frame = getCurrentFrame()\n if (frame?.component.props && typeof frame.component.props === 'object') {\n const candidate = (frame.component.props as Record<string, unknown>)[ROUTE_PARAMS_PROP]\n if (candidate && typeof candidate === 'object') {\n return candidate as RouteParams\n }\n }\n const container = getCurrentContainer()\n return container?.router?.currentRoute?.params ?? EMPTY_ROUTE_PARAMS\n}\n\nexport const useRuntimeRouteError = (): unknown => {\n const frame = getCurrentFrame()\n if (frame?.component.props && typeof frame.component.props === 'object') {\n const candidate = (frame.component.props as Record<string, unknown>)[ROUTE_ERROR_PROP]\n if (candidate !== undefined) {\n return candidate\n }\n }\n return getCurrentContainer()?.router?.currentRoute?.error\n}\n\nexport const notFound = (): never => {\n throw {\n __eclipsa_not_found__: true,\n [ROUTE_NOT_FOUND_KEY]: true,\n }\n}\n\nexport const isRouteNotFoundError = (error: unknown) =>\n !!error &&\n typeof error === 'object' &&\n ((error as { __eclipsa_not_found__?: boolean }).__eclipsa_not_found__ === true ||\n (error as Record<PropertyKey, unknown>)[ROUTE_NOT_FOUND_KEY] === true)\n\nexport const createEffect = (fn: () => void, options?: EffectOptions) => {\n const frame = getCurrentFrame()\n const effect: ReactiveEffect = {\n fn() {\n const dependencies = options?.dependencies\n if (!dependencies) {\n collectTrackedDependencies(effect, fn)\n return\n }\n\n collectTrackedDependencies(effect, () => {\n trackWatchDependencies(dependencies, options?.errorLabel)\n })\n\n if (options?.untracked) {\n runWithoutDependencyTracking(fn)\n return\n }\n\n fn()\n },\n signals: new Set(),\n }\n\n if (frame && frame.mode === 'client' && frame.component.id !== ROOT_COMPONENT_ID) {\n frame.effectCleanupSlot.callbacks.push(() => {\n clearEffectSignals(effect)\n })\n }\n\n effect.fn()\n}\n\nexport const createOnCleanup = (fn: () => void) => {\n if (!currentCleanupSlot) {\n throw new Error(\n 'onCleanup() can only be used while running onMount(), onVisible(), or useWatch() callbacks.',\n )\n }\n currentCleanupSlot.callbacks.push(fn)\n}\n\nexport const createOnMount = (fn: () => void) => {\n const frame = getCurrentFrame()\n if (!frame || frame.component.id === ROOT_COMPONENT_ID || frame.mode !== 'client') {\n return\n }\n frame.mountCallbacks.push(fn)\n}\n\nexport const createOnVisible = (fn: () => void) => {\n const container = getCurrentContainer()\n const frame = getCurrentFrame()\n const lazyMeta = getLazyMeta(fn)\n\n if (!container || !frame || frame.component.id === ROOT_COMPONENT_ID) {\n return\n }\n\n if (!lazyMeta && frame.mode === 'ssr') {\n return\n }\n\n const visibleIndex = frame.visibleCursor++\n const visibleId = createVisibleId(frame.component.id, visibleIndex)\n const visible = getOrCreateVisibleState(container, visibleId, frame.component.id)\n visible.scopeId = lazyMeta\n ? registerScope(container, lazyMeta.captures())\n : registerScope(container, [])\n visible.symbol = lazyMeta?.symbol ?? ''\n visible.run = lazyMeta ? null : fn\n\n scheduleVisibleCallbacksCheck(container)\n}\n\nexport const createWatch = (fn: () => void, dependencies?: WatchDependency[]) => {\n const container = getCurrentContainer()\n const frame = getCurrentFrame()\n const watchMeta = getWatchMeta(fn)\n\n if (!container || !frame || frame.component.id === ROOT_COMPONENT_ID || !watchMeta) {\n const cleanupSlot = createCleanupSlot()\n const effect: ReactiveEffect = {\n fn() {\n createLocalWatchRunner(effect, cleanupSlot, fn, dependencies)()\n },\n signals: new Set(),\n }\n effect.fn()\n return\n }\n\n const watchIndex = frame.watchCursor++\n const watchId = createWatchId(frame.component.id, watchIndex)\n const watch = getOrCreateWatchState(container, watchId, frame.component.id)\n watch.mode = dependencies ? 'explicit' : 'dynamic'\n watch.scopeId = registerScope(container, watchMeta.captures())\n watch.symbol = watchMeta.symbol\n watch.track = dependencies ? () => trackWatchDependencies(dependencies) : null\n watch.run = createLocalWatchRunner(watch.effect, watch.cleanupSlot, fn, dependencies)\n watch.effect.fn()\n}\n\nexport const getResumePayloadScriptContent = (payload: ResumePayload) =>\n escapeJSONScriptText(JSON.stringify(payload))\n","import type { JSX } from '../jsx/types.ts'\nimport type { Env, MiddlewareHandler, Next } from 'hono/types'\nimport {\n type AppContext,\n deserializePublicValue,\n serializePublicValue,\n type SerializedReference,\n type SerializedValue,\n transformCurrentPublicError,\n type WithAppEnv,\n} from './hooks.ts'\nimport {\n createDetachedRuntimeSignal,\n ensureRuntimeElementId,\n findRuntimeElement,\n flushDirtyComponents,\n getRuntimeContainer,\n getRuntimeSignalId,\n type RuntimeContainer,\n} from './runtime.ts'\nimport { registerActionHook, setActionHandleMeta, setActionHookMeta } from './internal.ts'\n\nconst ACTION_REGISTRY_KEY = Symbol.for('eclipsa.action-registry')\nexport const ACTION_CONTENT_TYPE = 'application/eclipsa-action+json'\nconst ACTION_STREAM_CONTENT_TYPE = 'application/eclipsa-action-stream+json'\nexport const ACTION_FORM_ATTR = 'data-e-action-form'\nexport const ACTION_FORM_FIELD = '__e_action'\nconst ACTION_INPUT_CACHE_KEY = Symbol.for('eclipsa.action-input-cache')\n\ndeclare const ACTION_REF_BRAND: unique symbol\ndeclare const ACTION_INPUT_TYPE: unique symbol\n\nexport interface StandardSchemaIssue {\n message: string\n path?: ReadonlyArray<PropertyKey | { readonly key: PropertyKey }>\n}\n\nexport type StandardSchemaResult<T> =\n | {\n issues: readonly StandardSchemaIssue[]\n }\n | {\n issues?: undefined\n value: T\n }\n\nexport interface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly '~standard': {\n readonly validate: (\n value: unknown,\n options?: { readonly libraryOptions?: Record<string, unknown> },\n ) => StandardSchemaResult<Output> | Promise<StandardSchemaResult<Output>>\n readonly types?:\n | {\n readonly input: Input\n readonly output: Output\n }\n | undefined\n readonly vendor: string\n readonly version: 1\n }\n}\n\nexport type InferStandardSchemaInput<Schema extends StandardSchemaV1<any, any>> = NonNullable<\n Schema['~standard']['types']\n>['input']\n\nexport type InferStandardSchemaOutput<Schema extends StandardSchemaV1<any, any>> = NonNullable<\n Schema['~standard']['types']\n>['output']\n\nexport interface OpaqueSignalRef {\n readonly [ACTION_REF_BRAND]?: 'signal'\n readonly containerId: string | null\n readonly kind: 'signal-ref'\n readonly token: string\n}\n\nexport interface OpaqueDomRef {\n readonly [ACTION_REF_BRAND]?: 'dom'\n readonly containerId: string | null\n readonly kind: 'dom-ref'\n readonly token: string\n}\n\nexport type ActionOpaqueRef = OpaqueSignalRef | OpaqueDomRef\n\ntype MiddlewareEnv<T> = T extends {\n readonly __eclipsa_action_env__?: infer MiddlewareEnv\n}\n ? Exclude<MiddlewareEnv, undefined> extends Env\n ? WithAppEnv<Exclude<MiddlewareEnv, undefined>>\n : {}\n : T extends MiddlewareHandler<infer MiddlewareEnv, any, any>\n ? WithAppEnv<MiddlewareEnv>\n : WithAppEnv<Env>\n\ntype ActionEnv<Middlewares extends readonly ActionMiddleware<any>[]> =\n Middlewares extends readonly [infer Head, ...infer Tail]\n ? Tail extends readonly ActionMiddleware<any>[]\n ? MiddlewareEnv<Head> & ActionEnv<Tail>\n : MiddlewareEnv<Head>\n : WithAppEnv<Env>\ntype MiddlewareActionInput<T> = T extends {\n readonly [ACTION_INPUT_TYPE]?: infer Input\n}\n ? Exclude<Input, undefined>\n : never\n\ntype ActionInput<Middlewares extends readonly ActionMiddleware<any>[]> = [\n MiddlewareActionInput<Middlewares[number]>,\n] extends [never]\n ? unknown\n : MiddlewareActionInput<Middlewares[number]>\n\ntype ResolvedActionOutput<Output> = Awaited<Output>\n\ntype ActionStreamYield<Output> =\n ResolvedActionOutput<Output> extends AsyncIterable<infer Value>\n ? Value\n : ResolvedActionOutput<Output> extends ReadableStream<infer Value>\n ? Value\n : ResolvedActionOutput<Output>\n\ntype ActionInvokeResult<Output> =\n ResolvedActionOutput<Output> extends AsyncIterable<infer Value>\n ? AsyncGenerator<Value, void, void>\n : Promise<ResolvedActionOutput<Output>>\n\ntype ActionInvoker<Input, Result> = unknown extends Input\n ? (input?: Input | FormData) => Result\n : undefined extends Input\n ? (input?: Input | FormData) => Result\n : (input: Input | FormData) => Result\n\nexport interface ActionSubmission<Input, Output> {\n readonly error: unknown\n readonly input: Input\n readonly result: Output | undefined\n}\n\nexport interface ActionFormProps extends Record<string, unknown> {\n children?: JSX.Element | JSX.Element[]\n}\n\nexport interface ActionHandle<Input, Output, InvokeResult = Promise<Output>> {\n Form: (props: ActionFormProps) => JSX.Element\n action: ActionInvoker<Input, InvokeResult>\n readonly error: unknown\n readonly formActionId: string\n readonly isPending: boolean\n readonly lastSubmission: ActionSubmission<Input, Output> | undefined\n readonly result: Output | undefined\n}\n\nexport interface ActionMiddleware<E extends Env = Env> extends MiddlewareHandler<E> {\n readonly __eclipsa_action_env__?: E\n}\nexport interface ActionValidatorMiddleware<Input, Output> extends ActionMiddleware<{\n Variables: {\n input: Output\n }\n}> {\n readonly [ACTION_INPUT_TYPE]?: Input\n}\nexport type ActionHandler<E extends Env = Env, Output = unknown> = (\n c: AppContext<E>,\n) => Output | Promise<Output>\n\ntype ActionHandlerOutput<Handler extends (...args: any[]) => unknown> = Awaited<ReturnType<Handler>>\n\ntype ActionUse<\n Middlewares extends readonly ActionMiddleware<any>[],\n Handler extends ActionHandler<any, any>,\n> = () => ActionHandle<\n ActionInput<Middlewares>,\n ActionStreamYield<ActionHandlerOutput<Handler>>,\n ActionInvokeResult<ActionHandlerOutput<Handler>>\n>\n\nexport interface ActionFactory {\n <Handler extends ActionHandler<{}, any>>(handler: Handler): ActionUse<[], Handler>\n <M1 extends ActionMiddleware<any>, Handler extends ActionHandler<ActionEnv<[M1]>, any>>(\n middleware1: M1,\n handler: Handler,\n ): ActionUse<[M1], Handler>\n <\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n Handler extends ActionHandler<ActionEnv<[M1, M2]>, any>,\n >(\n middleware1: M1,\n middleware2: M2,\n handler: Handler,\n ): ActionUse<[M1, M2], Handler>\n <\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n M3 extends ActionMiddleware<any>,\n Handler extends ActionHandler<ActionEnv<[M1, M2, M3]>, any>,\n >(\n middleware1: M1,\n middleware2: M2,\n middleware3: M3,\n handler: Handler,\n ): ActionUse<[M1, M2, M3], Handler>\n <\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n M3 extends ActionMiddleware<any>,\n M4 extends ActionMiddleware<any>,\n Handler extends ActionHandler<ActionEnv<[M1, M2, M3, M4]>, any>,\n >(\n middleware1: M1,\n middleware2: M2,\n middleware3: M3,\n middleware4: M4,\n handler: Handler,\n ): ActionUse<[M1, M2, M3, M4], Handler>\n <\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n M3 extends ActionMiddleware<any>,\n M4 extends ActionMiddleware<any>,\n M5 extends ActionMiddleware<any>,\n Handler extends ActionHandler<ActionEnv<[M1, M2, M3, M4, M5]>, any>,\n >(\n middleware1: M1,\n middleware2: M2,\n middleware3: M3,\n middleware4: M4,\n middleware5: M5,\n handler: Handler,\n ): ActionUse<[M1, M2, M3, M4, M5], Handler>\n}\n\ninterface RegisteredAction {\n handler: ActionHandler<any, unknown>\n id: string\n middlewares: ActionMiddleware<any>[]\n}\n\ninterface ActionJsonSuccess {\n ok: true\n value: SerializedValue\n}\n\ninterface ActionJsonFailure {\n error: SerializedValue\n ok: false\n}\n\ninterface ActionStateSnapshot {\n error: unknown\n input: unknown\n result: unknown\n}\n\ninterface ActionExecutionValue {\n input: unknown\n kind: 'value'\n value: unknown\n}\n\ninterface ActionExecutionResponse {\n input: unknown\n kind: 'response'\n response: Response\n}\n\ntype ActionExecutionResult = ActionExecutionResponse | ActionExecutionValue\n\ninterface StreamChunkFrame {\n type: 'chunk'\n value: SerializedValue\n}\n\ninterface StreamDoneFrame {\n type: 'done'\n}\n\ninterface StreamErrorFrame {\n error: SerializedValue\n type: 'error'\n}\n\ntype ActionStreamFrame = StreamChunkFrame | StreamDoneFrame | StreamErrorFrame\n\nconst getActionRegistry = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[ACTION_REGISTRY_KEY]\n if (existing instanceof Map) {\n return existing as Map<string, RegisteredAction>\n }\n const created = new Map<string, RegisteredAction>()\n globalRecord[ACTION_REGISTRY_KEY] = created\n return created\n}\n\nconst isFormDataValue = (value: unknown): value is FormData =>\n typeof FormData !== 'undefined' && value instanceof FormData\n\nconst formDataToInputObject = (value: FormData) => {\n const result: Record<string, FormDataEntryValue | FormDataEntryValue[]> = {}\n for (const [key, entry] of value.entries()) {\n const existing = result[key]\n if (existing === undefined) {\n result[key] = entry\n continue\n }\n result[key] = Array.isArray(existing) ? [...existing, entry] : [existing, entry]\n }\n return result\n}\n\nconst normalizeFormSubmissionInput = (value: unknown) => {\n if (!isFormDataValue(value)) {\n return value\n }\n const normalized = formDataToInputObject(value)\n return Object.fromEntries(\n Object.entries(normalized).flatMap(([key, entry]) => {\n if (key === ACTION_FORM_FIELD) {\n return []\n }\n if (Array.isArray(entry)) {\n const values = entry\n .filter((candidate): candidate is string => typeof candidate === 'string')\n .map((candidate) => candidate)\n return values.length > 0 ? [[key, values.length === 1 ? values[0] : values]] : []\n }\n return typeof entry === 'string' ? [[key, entry]] : []\n }),\n )\n}\n\nconst getActionInputCache = (c: AppContext<any>) => {\n const record = c as AppContext<any> & {\n [ACTION_INPUT_CACHE_KEY]?: Promise<unknown>\n }\n if (!record[ACTION_INPUT_CACHE_KEY]) {\n record[ACTION_INPUT_CACHE_KEY] = (async () => {\n const contentType = c.req.header('content-type') ?? ''\n if (contentType.startsWith(ACTION_CONTENT_TYPE)) {\n let parsedBody: unknown\n try {\n parsedBody = await c.req.json()\n } catch {\n throw new TypeError('Action input must be valid JSON.')\n }\n if (!parsedBody || typeof parsedBody !== 'object' || !('input' in parsedBody)) {\n throw new TypeError('Action request body must contain an input field.')\n }\n return deserializeActionServerValue((parsedBody as { input: SerializedValue }).input)\n }\n if (\n contentType.startsWith('application/x-www-form-urlencoded') ||\n contentType.startsWith('multipart/form-data')\n ) {\n return c.req.formData()\n }\n return undefined\n })()\n }\n return record[ACTION_INPUT_CACHE_KEY]!\n}\n\nconst createActionRefScope = (container: RuntimeContainer | null) =>\n container ? serializePublicValue({ container: container.id }) : undefined\n\nconst readActionRefContainerId = (reference: SerializedReference) => {\n if (!reference.data) {\n return null\n }\n const decoded = deserializePublicValue(reference.data)\n if (!decoded || typeof decoded !== 'object') {\n return null\n }\n const containerId = (decoded as Record<string, unknown>).container\n return typeof containerId === 'string' ? containerId : null\n}\n\nconst serializeActionClientValue = (container: RuntimeContainer | null, value: unknown) =>\n serializePublicValue(value, {\n serializeReference(candidate) {\n const signalId = getRuntimeSignalId(candidate)\n if (signalId) {\n return {\n __eclipsa_type: 'ref',\n data: createActionRefScope(container),\n kind: 'signal',\n token: signalId,\n }\n }\n if (container && typeof Element !== 'undefined' && candidate instanceof Element) {\n return {\n __eclipsa_type: 'ref',\n data: createActionRefScope(container),\n kind: 'dom',\n token: ensureRuntimeElementId(container, candidate),\n }\n }\n return null\n },\n })\n\nconst deserializeActionServerValue = (value: SerializedValue) =>\n deserializePublicValue(value, {\n deserializeReference(reference) {\n const containerId = readActionRefContainerId(reference)\n if (reference.kind === 'signal') {\n return {\n containerId,\n kind: 'signal-ref',\n token: reference.token,\n } satisfies OpaqueSignalRef\n }\n if (reference.kind === 'dom') {\n return {\n containerId,\n kind: 'dom-ref',\n token: reference.token,\n } satisfies OpaqueDomRef\n }\n throw new TypeError(`Unsupported action input reference kind \"${reference.kind}\".`)\n },\n })\n\nconst deserializeActionClientValue = (container: RuntimeContainer | null, value: SerializedValue) =>\n deserializePublicValue(value, {\n deserializeReference(reference) {\n if (!container) {\n throw new TypeError('Action references require an active runtime container.')\n }\n const containerId = readActionRefContainerId(reference)\n if (containerId !== container.id) {\n throw new TypeError('Action reference does not belong to the active runtime container.')\n }\n if (reference.kind === 'signal') {\n const signal = container.signals.get(reference.token)\n if (!signal) {\n throw new Error(`Missing action signal ${reference.token}.`)\n }\n return signal.handle\n }\n if (reference.kind === 'dom') {\n const element = findRuntimeElement(container, reference.token)\n if (!element) {\n throw new Error(`Missing action DOM ref ${reference.token}.`)\n }\n return element\n }\n throw new TypeError(`Unsupported action output reference kind \"${reference.kind}\".`)\n },\n })\n\nconst isOpaqueSignalRef = (value: unknown): value is OpaqueSignalRef =>\n !!value &&\n typeof value === 'object' &&\n (value as Record<string, unknown>).kind === 'signal-ref' &&\n typeof (value as Record<string, unknown>).token === 'string'\n\nconst isOpaqueDomRef = (value: unknown): value is OpaqueDomRef =>\n !!value &&\n typeof value === 'object' &&\n (value as Record<string, unknown>).kind === 'dom-ref' &&\n typeof (value as Record<string, unknown>).token === 'string'\n\nconst serializeActionServerValue = (value: unknown) =>\n serializePublicValue(value, {\n serializeReference(candidate) {\n if (isOpaqueSignalRef(candidate)) {\n return {\n __eclipsa_type: 'ref',\n data:\n candidate.containerId === null\n ? undefined\n : serializePublicValue({\n container: candidate.containerId,\n }),\n kind: 'signal',\n token: candidate.token,\n }\n }\n if (isOpaqueDomRef(candidate)) {\n return {\n __eclipsa_type: 'ref',\n data:\n candidate.containerId === null\n ? undefined\n : serializePublicValue({\n container: candidate.containerId,\n }),\n kind: 'dom',\n token: candidate.token,\n }\n }\n return null\n },\n })\n\nconst isReadableStreamValue = (value: unknown): value is ReadableStream<unknown> =>\n typeof ReadableStream !== 'undefined' && value instanceof ReadableStream\n\nconst isAsyncGeneratorValue = (\n value: unknown,\n): value is AsyncGenerator<unknown, unknown, unknown> | AsyncIterable<unknown> =>\n !!value && typeof value === 'object' && Symbol.asyncIterator in value\n\nconst isAsyncGeneratorFunctionValue = (\n value: unknown,\n): value is (...args: any[]) => AsyncGenerator<unknown, unknown, unknown> =>\n typeof value === 'function' &&\n Object.prototype.toString.call(value) === '[object AsyncGeneratorFunction]'\n\nconst toSerializedActionError = (error: unknown): SerializedValue => {\n if (error instanceof Error) {\n return serializeActionServerValue({\n message: error.message,\n name: error.name,\n })\n }\n try {\n return serializeActionServerValue(error)\n } catch {\n return serializeActionServerValue({\n message: 'Action failed.',\n })\n }\n}\n\nconst toAsyncIterable = async function* (\n value: ReadableStream<unknown> | AsyncIterable<unknown>,\n): AsyncGenerator<unknown, void, void> {\n if (isReadableStreamValue(value)) {\n const reader = value.getReader()\n try {\n while (true) {\n const next = await reader.read()\n if (next.done) {\n return\n }\n yield next.value\n }\n } finally {\n reader.releaseLock()\n }\n }\n yield* value\n}\n\nconst encodeStreamFrame = (frame: ActionStreamFrame) =>\n `${JSON.stringify(frame)}\n`\n\nconst streamActionValue = (\n value: ReadableStream<unknown> | AsyncIterable<unknown>,\n serializeChunk: (value: unknown) => SerializedValue,\n) => {\n const encoder = new TextEncoder()\n\n return new ReadableStream<Uint8Array>({\n async start(controller) {\n try {\n for await (const chunk of toAsyncIterable(value)) {\n controller.enqueue(\n encoder.encode(\n encodeStreamFrame({\n type: 'chunk',\n value: serializeChunk(chunk),\n }),\n ),\n )\n }\n controller.enqueue(\n encoder.encode(\n encodeStreamFrame({\n type: 'done',\n }),\n ),\n )\n } catch (error) {\n controller.enqueue(\n encoder.encode(\n encodeStreamFrame({\n error: toSerializedActionError(error),\n type: 'error',\n }),\n ),\n )\n } finally {\n controller.close()\n }\n },\n })\n}\n\nconst parseJsonActionResponse = async (response: Response, container: RuntimeContainer | null) => {\n const body = (await response.json()) as ActionJsonFailure | ActionJsonSuccess\n if (!body || typeof body !== 'object' || typeof body.ok !== 'boolean') {\n throw new TypeError('Malformed action response.')\n }\n if (!body.ok) {\n throw deserializeActionClientValue(container, body.error)\n }\n return deserializeActionClientValue(container, body.value)\n}\n\nconst iterateStreamFrames = async function* (\n body: ReadableStream<Uint8Array>,\n): AsyncGenerator<ActionStreamFrame, void, void> {\n const reader = body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n try {\n while (true) {\n const next = await reader.read()\n if (next.done) {\n break\n }\n buffer += decoder.decode(next.value, { stream: true })\n while (true) {\n const newlineIndex = buffer.indexOf('\\n')\n if (newlineIndex < 0) {\n break\n }\n const line = buffer.slice(0, newlineIndex).trim()\n buffer = buffer.slice(newlineIndex + 1)\n if (!line) {\n continue\n }\n yield JSON.parse(line) as ActionStreamFrame\n }\n }\n const trailing = buffer.trim()\n if (trailing) {\n yield JSON.parse(trailing) as ActionStreamFrame\n }\n } finally {\n reader.releaseLock()\n }\n}\n\nconst toClientStream = (response: Response, container: RuntimeContainer | null) => {\n if (!response.body) {\n throw new TypeError('Missing action stream body.')\n }\n return new ReadableStream<unknown>({\n async start(controller) {\n try {\n for await (const frame of iterateStreamFrames(response.body!)) {\n if (frame.type === 'chunk') {\n controller.enqueue(deserializeActionClientValue(container, frame.value))\n continue\n }\n if (frame.type === 'done') {\n controller.close()\n return\n }\n controller.error(deserializeActionClientValue(container, frame.error))\n return\n }\n controller.close()\n } catch (error) {\n controller.error(error)\n }\n },\n })\n}\n\nconst toClientAsyncGenerator = async function* (\n response: Response,\n container: RuntimeContainer | null,\n) {\n if (!response.body) {\n throw new TypeError('Missing action stream body.')\n }\n for await (const frame of iterateStreamFrames(response.body)) {\n if (frame.type === 'chunk') {\n yield deserializeActionClientValue(container, frame.value)\n continue\n }\n if (frame.type === 'done') {\n return\n }\n throw deserializeActionClientValue(container, frame.error)\n }\n}\n\nconst invokeAction = async (id: string, input: unknown, container: RuntimeContainer | null) => {\n const isFormSubmission = isFormDataValue(input)\n const response = await fetch(`/__eclipsa/action/${encodeURIComponent(id)}`, {\n body: isFormSubmission\n ? input\n : JSON.stringify({\n input: serializeActionClientValue(container, input),\n }),\n headers: {\n accept: `${ACTION_STREAM_CONTENT_TYPE}, ${ACTION_CONTENT_TYPE}`,\n ...(isFormSubmission ? {} : { 'content-type': ACTION_CONTENT_TYPE }),\n },\n method: 'POST',\n })\n const contentType = response.headers.get('content-type') ?? ''\n const streamKind = response.headers.get('x-eclipsa-stream-kind')\n if (contentType.startsWith(ACTION_STREAM_CONTENT_TYPE)) {\n if (streamKind === 'async-generator') {\n return toClientAsyncGenerator(response, container)\n }\n return toClientStream(response, container)\n }\n return parseJsonActionResponse(response, container)\n}\n\nconst composeMiddlewares = async (\n c: AppContext<any>,\n middlewares: ActionMiddleware<any>[],\n handler: ActionHandler<any, unknown>,\n): Promise<Response | unknown> => {\n let index = -1\n const dispatch = async (nextIndex: number): Promise<Response | unknown> => {\n if (nextIndex <= index) {\n throw new Error('Action middleware called next() multiple times.')\n }\n index = nextIndex\n const middleware = middlewares[nextIndex]\n if (!middleware) {\n return handler(c)\n }\n let nextResult: Response | unknown = undefined\n const result = await middleware(c, (async () => {\n nextResult = await dispatch(nextIndex + 1)\n }) as Next)\n if (result !== undefined) {\n return result\n }\n return nextResult\n }\n return dispatch(0)\n}\n\nconst toActionResponse = (value: unknown): Response => {\n if (value instanceof Response) {\n return value\n }\n if (isReadableStreamValue(value)) {\n return new Response(\n streamActionValue(value, (entry) => serializeActionServerValue(entry)),\n {\n headers: {\n 'content-type': ACTION_STREAM_CONTENT_TYPE,\n 'x-eclipsa-stream-kind': 'readable-stream',\n },\n },\n )\n }\n if (isAsyncGeneratorValue(value)) {\n return new Response(\n streamActionValue(value, (entry) => serializeActionServerValue(entry)),\n {\n headers: {\n 'content-type': ACTION_STREAM_CONTENT_TYPE,\n 'x-eclipsa-stream-kind': 'async-generator',\n },\n },\n )\n }\n return new Response(\n JSON.stringify({\n ok: true,\n value: serializeActionServerValue(value),\n } satisfies ActionJsonSuccess),\n {\n headers: {\n 'content-type': ACTION_CONTENT_TYPE,\n },\n },\n )\n}\n\nconst createHandleSignal = <T>(\n container: RuntimeContainer | null,\n id: string,\n key: string,\n initialValue: T,\n) => {\n if (!container) {\n throw new Error('Action handles require an active runtime container.')\n }\n return createDetachedRuntimeSignal(container, `$action:${id}:${key}`, initialValue)\n}\n\nconst readActionSubmissionInput = async (c: AppContext<any>) => {\n const cached = await getActionInputCache(c)\n const actionVars = c.var as Record<string, unknown>\n return normalizeFormSubmissionInput(actionVars.__e_action_raw_input ?? cached)\n}\n\nexport const getNormalizedActionInput = (c: AppContext<any>) => readActionSubmissionInput(c)\n\nexport const getActionFormSubmissionId = async (c: AppContext<any>) => {\n const input = await getActionInputCache(c)\n if (!isFormDataValue(input)) {\n return null\n }\n const actionId = input.get(ACTION_FORM_FIELD)\n return typeof actionId === 'string' && actionId ? actionId : null\n}\n\nexport const executeActionSubmission = async (\n id: string,\n c: AppContext<any>,\n): Promise<ActionExecutionResult> => {\n const action = getActionRegistry().get(id)\n if (!action) {\n throw new Error(`Unknown action ${id}.`)\n }\n const input = await readActionSubmissionInput(c)\n const result = await composeMiddlewares(c, action.middlewares, action.handler)\n if (result instanceof Response) {\n return {\n input,\n kind: 'response',\n response: result,\n }\n }\n return {\n input,\n kind: 'value',\n value: result,\n }\n}\n\nexport const primeActionState = (\n container: RuntimeContainer,\n id: string,\n snapshot: ActionStateSnapshot,\n) => {\n container.actionStates.set(id, {\n error: snapshot.error,\n input: snapshot.input,\n result: snapshot.result,\n })\n}\n\nconst appendClientChildren = (parent: Element, value: unknown) => {\n let resolved = value\n while (typeof resolved === 'function') {\n resolved = resolved()\n }\n\n if (Array.isArray(resolved)) {\n for (const entry of resolved) {\n appendClientChildren(parent, entry)\n }\n return\n }\n if (resolved === null || resolved === undefined || resolved === false) {\n return\n }\n if (resolved instanceof Node) {\n parent.appendChild(resolved)\n return\n }\n\n parent.appendChild(document.createTextNode(String(resolved)))\n}\n\nconst createActionFormNode = (id: string, props: ActionFormProps) => {\n const form = document.createElement('form')\n form.setAttribute(ACTION_FORM_ATTR, id)\n form.setAttribute('method', 'post')\n\n const hiddenInput = document.createElement('input')\n hiddenInput.name = ACTION_FORM_FIELD\n hiddenInput.type = 'hidden'\n hiddenInput.value = id\n form.appendChild(hiddenInput)\n\n for (const [name, value] of Object.entries(props)) {\n if (\n name === 'children' ||\n name === 'action' ||\n name === 'method' ||\n value === false ||\n value === undefined ||\n value === null\n ) {\n continue\n }\n if (name === 'class') {\n form.className = String(value)\n continue\n }\n if (name === 'style' && value && typeof value === 'object') {\n form.setAttribute(\n 'style',\n Object.entries(value as Record<string, unknown>)\n .map(([styleName, styleValue]) => `${styleName}: ${styleValue}`)\n .join('; '),\n )\n continue\n }\n if (value === true) {\n form.setAttribute(name, '')\n continue\n }\n form.setAttribute(name, String(value))\n }\n\n appendClientChildren(form, props.children)\n return form\n}\n\nexport const action: ActionFactory = (() => {\n throw new Error('action() must be compiled by the Eclipsa analyzer before it can run.')\n}) as ActionFactory\n\nexport const validator = <Schema extends StandardSchemaV1<any, any>>(\n schema: Schema,\n): ActionValidatorMiddleware<\n InferStandardSchemaInput<Schema>,\n InferStandardSchemaOutput<Schema>\n> => {\n const middleware = async (c: any, next: any) => {\n let parsedBody: unknown\n try {\n parsedBody = await getActionInputCache(c)\n } catch (error) {\n return c.json(\n {\n error: serializePublicValue({\n issues: [\n {\n message:\n error instanceof Error && error.message\n ? error.message\n : 'Action input could not be parsed.',\n },\n ],\n }),\n ok: false,\n } satisfies ActionJsonFailure,\n 400,\n )\n }\n const rawInput = normalizeFormSubmissionInput(parsedBody)\n const validated = await schema['~standard'].validate(rawInput)\n if ('issues' in validated) {\n return c.json(\n {\n error: serializePublicValue({\n issues: validated.issues,\n }),\n ok: false,\n } satisfies ActionJsonFailure,\n 400,\n )\n }\n c.set('__e_action_raw_input', rawInput)\n c.set('input', validated.value as InferStandardSchemaOutput<Schema>)\n await next()\n }\n return middleware as ActionValidatorMiddleware<\n InferStandardSchemaInput<Schema>,\n InferStandardSchemaOutput<Schema>\n >\n}\n\nexport function registerAction<Output>(\n id: string,\n middlewares: readonly [],\n handler: ActionHandler<{}, Output>,\n): void\nexport function registerAction<M1 extends ActionMiddleware<any>, Output>(\n id: string,\n middlewares: readonly [M1],\n handler: ActionHandler<ActionEnv<[M1]>, Output>,\n): void\nexport function registerAction<\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2],\n handler: ActionHandler<ActionEnv<[M1, M2]>, Output>,\n): void\nexport function registerAction<\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n M3 extends ActionMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2, M3],\n handler: ActionHandler<ActionEnv<[M1, M2, M3]>, Output>,\n): void\nexport function registerAction<\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n M3 extends ActionMiddleware<any>,\n M4 extends ActionMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2, M3, M4],\n handler: ActionHandler<ActionEnv<[M1, M2, M3, M4]>, Output>,\n): void\nexport function registerAction<\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n M3 extends ActionMiddleware<any>,\n M4 extends ActionMiddleware<any>,\n M5 extends ActionMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2, M3, M4, M5],\n handler: ActionHandler<ActionEnv<[M1, M2, M3, M4, M5]>, Output>,\n): void\nexport function registerAction(\n id: string,\n middlewares: readonly ActionMiddleware<any>[],\n handler: ActionHandler<any, unknown>,\n) {\n getActionRegistry().set(id, {\n handler,\n id,\n middlewares: [...middlewares] as ActionMiddleware<any>[],\n })\n}\n\nexport const hasAction = (id: string) => getActionRegistry().has(id)\n\nexport const executeAction = async (id: string, c: AppContext<any>) => {\n try {\n const result = await executeActionSubmission(id, c)\n return result.kind === 'response' ? result.response : toActionResponse(result.value)\n } catch (error) {\n const publicError = await transformCurrentPublicError(error, 'action')\n return new Response(\n JSON.stringify({\n error: toSerializedActionError(publicError),\n ok: false,\n } satisfies ActionJsonFailure),\n {\n headers: {\n 'content-type': ACTION_CONTENT_TYPE,\n },\n status: 500,\n },\n )\n }\n}\n\nexport const __eclipsaAction = <\n const Middlewares extends readonly ActionMiddleware<any>[],\n Handler extends ActionHandler<ActionEnv<Middlewares>, any>,\n>(\n id: string,\n middlewares: readonly [...Middlewares],\n handler: Handler,\n): ActionUse<Middlewares, Handler> => {\n type Output = ActionHandlerOutput<Handler>\n\n if (typeof window === 'undefined') {\n getActionRegistry().set(id, {\n handler: handler as ActionHandler<any, unknown>,\n id,\n middlewares: [...middlewares] as ActionMiddleware<any>[],\n })\n }\n\n const useActionHandle = registerActionHook(\n id,\n setActionHookMeta(() => {\n const container = getRuntimeContainer()\n const existing = container?.actions.get(id)\n if (existing) {\n return existing as ReturnType<ActionUse<Middlewares, Handler>>\n }\n\n const initialState = container?.actionStates.get(id)\n const pending = createHandleSignal(container, id, 'pending', false)\n const result = createHandleSignal<ActionStreamYield<Output> | undefined>(\n container,\n id,\n 'result',\n initialState?.result as ActionStreamYield<Output> | undefined,\n )\n const error = createHandleSignal<unknown>(container, id, 'error', initialState?.error)\n const lastSubmission = createHandleSignal<\n ActionSubmission<ActionInput<Middlewares>, ActionStreamYield<Output>> | undefined\n >(\n container,\n id,\n 'last-submission',\n initialState\n ? ({\n error: initialState.error,\n input: initialState.input as ActionInput<Middlewares>,\n result: initialState.result as ActionStreamYield<Output> | undefined,\n } satisfies ActionSubmission<ActionInput<Middlewares>, ActionStreamYield<Output>>)\n : undefined,\n )\n\n const syncSnapshot = () => {\n if (!container) {\n return\n }\n const submission = lastSubmission.value\n if (!submission) {\n container.actionStates.delete(id)\n return\n }\n container.actionStates.set(id, {\n error: submission.error,\n input: submission.input,\n result: submission.result,\n })\n }\n\n const flushHandleUpdates = async () => {\n if (!container) {\n return\n }\n await flushDirtyComponents(container)\n }\n\n const applySubmissionChunk = async (\n input: ActionInput<Middlewares>,\n value: ActionStreamYield<Output>,\n ) => {\n result.value = value\n lastSubmission.value = {\n error: undefined,\n input,\n result: value,\n }\n syncSnapshot()\n await flushHandleUpdates()\n }\n\n const applySubmissionError = async (input: ActionInput<Middlewares>, caught: unknown) => {\n error.value = caught\n lastSubmission.value = {\n error: caught,\n input,\n result: result.value,\n }\n syncSnapshot()\n await flushHandleUpdates()\n }\n\n const finalizeSubmission = async () => {\n pending.value = false\n await flushHandleUpdates()\n }\n\n const invoke = (input: ActionInput<Middlewares> | FormData) => {\n pending.value = true\n error.value = undefined\n const normalizedInput = normalizeFormSubmissionInput(input) as ActionInput<Middlewares>\n const request = invokeAction(id, input, container)\n\n if (isAsyncGeneratorFunctionValue(handler)) {\n return (async function* () {\n try {\n const value = await request\n if (isAsyncGeneratorValue(value)) {\n for await (const chunk of value) {\n const resolved = chunk as ActionStreamYield<Output>\n await applySubmissionChunk(normalizedInput, resolved)\n yield resolved\n }\n return\n }\n const resolved = value as ActionStreamYield<Output>\n await applySubmissionChunk(normalizedInput, resolved)\n yield resolved\n } catch (caught) {\n await applySubmissionError(normalizedInput, caught)\n throw caught\n } finally {\n await finalizeSubmission()\n }\n })() as ActionInvokeResult<Output>\n }\n\n return request\n .then(async (value) => {\n const resolved = value as ActionStreamYield<Output>\n await applySubmissionChunk(normalizedInput, resolved)\n return value as ResolvedActionOutput<Output>\n })\n .catch(async (caught) => {\n await applySubmissionError(normalizedInput, caught)\n throw caught\n })\n .finally(finalizeSubmission) as ActionInvokeResult<Output>\n }\n\n const Form = (props: ActionFormProps) => {\n const body =\n typeof document !== 'undefined'\n ? (createActionFormNode(id, props) as unknown as JSX.Element)\n : (() => {\n const nextProps: Record<string, unknown> = {\n ...props,\n [ACTION_FORM_ATTR]: id,\n method: 'post',\n children: [\n {\n isStatic: true,\n props: {\n name: ACTION_FORM_FIELD,\n type: 'hidden',\n value: id,\n },\n type: 'input',\n },\n props.children,\n ],\n }\n delete nextProps.action\n delete nextProps.method\n return {\n isStatic: true,\n props: nextProps,\n type: 'form',\n } satisfies JSX.Element\n })()\n\n return body\n }\n const actionHandle = setActionHandleMeta(\n {\n Form,\n action: invoke as ActionInvoker<ActionInput<Middlewares>, ActionInvokeResult<Output>>,\n get error() {\n return error.value\n },\n get formActionId() {\n return id\n },\n get isPending() {\n return pending.value\n },\n get lastSubmission() {\n return lastSubmission.value\n },\n get result() {\n return result.value\n },\n } satisfies ActionHandle<\n ActionInput<Middlewares>,\n ActionStreamYield<Output>,\n ActionInvokeResult<Output>\n >,\n id,\n )\n container?.actions.set(id, actionHandle)\n syncSnapshot()\n return actionHandle\n }, id),\n ) as ActionUse<Middlewares, Handler>\n\n return useActionHandle\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"action-CgM3EJUS.mjs","names":["isPlainObject","isPlainObject","composeMiddlewares","createHandleSignal","ACTION_FORM_ATTR"],"sources":["../core/no-serialize.ts","../core/serialize.ts","../core/hooks.ts","../core/suspense.ts","../core/context.ts","../core/metadata.ts","../core/loader.ts","../core/internal.ts","../core/router-shared.ts","../core/runtime.ts","../core/action.ts"],"sourcesContent":["const noSerializeValues = new WeakSet<object>()\n\nconst canNoSerialize = (value: unknown): value is object | Function =>\n (typeof value === 'object' && value !== null) || typeof value === 'function'\n\nexport type NoSerialize<T> = T & {\n readonly __eclipsa_no_serialize__?: true\n}\n\nexport const noSerialize = <T extends object | Function | undefined>(value: T): T => {\n if (canNoSerialize(value)) {\n noSerializeValues.add(value as object)\n }\n return value\n}\n\nexport const isNoSerialize = (value: unknown): boolean =>\n canNoSerialize(value) && noSerializeValues.has(value as object)\n","import { isNoSerialize } from './no-serialize.ts'\n\nexport interface SerializedUndefined {\n __eclipsa_type: 'undefined'\n}\n\nexport interface SerializedObject {\n __eclipsa_type: 'object'\n entries: [string, SerializedValue][]\n}\n\nexport interface SerializedMap {\n __eclipsa_type: 'map'\n entries: [SerializedValue, SerializedValue][]\n}\n\nexport interface SerializedSet {\n __eclipsa_type: 'set'\n entries: SerializedValue[]\n}\n\nexport interface SerializedReference {\n __eclipsa_type: 'ref'\n data?: SerializedValue\n kind: string\n token: string\n}\n\nexport type SerializedValue =\n | SerializedUndefined\n | SerializedObject\n | SerializedMap\n | SerializedSet\n | SerializedReference\n | null\n | boolean\n | number\n | string\n | SerializedValue[]\n\nexport interface SerializeValueOptions {\n maxDepth?: number\n maxEntries?: number\n serializeReference?: (value: unknown) => SerializedReference | null\n}\n\nexport interface DeserializeValueOptions {\n deserializeReference?: (value: SerializedReference) => unknown\n maxDepth?: number\n maxEntries?: number\n}\n\nconst DEFAULT_MAX_DEPTH = 64\nconst DEFAULT_MAX_ENTRIES = 10_000\n\nconst RESERVED_KEYS = new Set(['__proto__', 'constructor', 'prototype'])\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (!value || typeof value !== 'object') {\n return false\n }\n const proto = Object.getPrototypeOf(value)\n return proto === Object.prototype || proto === null\n}\n\nconst getSerializedObjectTag = (value: object) => Object.prototype.toString.call(value)\n\nconst getSerializedConstructorName = (value: object) => {\n const constructor = value.constructor\n if (typeof constructor !== 'function') {\n return null\n }\n const name = constructor.name\n return typeof name === 'string' && name.length > 0 ? name : null\n}\n\nconst createUnsupportedObjectError = (value: object) => {\n const tag = getSerializedObjectTag(value)\n const constructorName = getSerializedConstructorName(value)\n const constructorLabel =\n constructorName && constructorName !== 'Object' && constructorName !== 'Array'\n ? ` (constructor: ${constructorName})`\n : ''\n\n return new TypeError(\n `Unsupported object ${tag}${constructorLabel}. ` +\n 'Only primitives, plain objects, arrays, Map, Set, undefined, and registered references can be serialized. ' +\n 'For runtime-only values, wrap them with noSerialize() or avoid capturing them in resumable props, state, or callbacks.',\n )\n}\n\nconst assertSafeEntryBudget = (count: number, maxEntries: number) => {\n if (count > maxEntries) {\n throw new RangeError(`Serialized value exceeds the maximum entry budget of ${maxEntries}.`)\n }\n}\n\nconst assertSafeDepth = (depth: number, maxDepth: number) => {\n if (depth > maxDepth) {\n throw new RangeError(`Serialized value exceeds the maximum depth of ${maxDepth}.`)\n }\n}\n\nconst assertSafeObject = (value: Record<string, unknown>) => {\n const descriptors = Object.getOwnPropertyDescriptors(value)\n const symbolKeys = Object.getOwnPropertySymbols(value)\n if (symbolKeys.length > 0) {\n throw new TypeError('Objects with symbol keys cannot be serialized.')\n }\n for (const [key, descriptor] of Object.entries(descriptors)) {\n if ('get' in descriptor || 'set' in descriptor) {\n throw new TypeError(`Objects with accessors cannot be serialized (${key}).`)\n }\n }\n}\n\nconst defineDecodedProperty = (target: Record<string, unknown>, key: string, value: unknown) => {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n value,\n writable: true,\n })\n}\n\nconst assertReferenceShape = (value: SerializedReference) => {\n const keys = Object.keys(value).sort()\n const allowedKeys =\n value.data === undefined\n ? ['__eclipsa_type', 'kind', 'token']\n : ['__eclipsa_type', 'data', 'kind', 'token']\n if (keys.length !== allowedKeys.length || keys.some((key, index) => key !== allowedKeys[index])) {\n throw new TypeError('Malformed serialized reference.')\n }\n if (typeof value.kind !== 'string' || value.kind.length === 0) {\n throw new TypeError('Serialized references require a non-empty kind.')\n }\n if (typeof value.token !== 'string' || value.token.length === 0) {\n throw new TypeError('Serialized references require a non-empty token.')\n }\n}\n\nconst serializeUnknown = (\n value: unknown,\n state: {\n entryCount: number\n maxDepth: number\n maxEntries: number\n serializeReference?: (value: unknown) => SerializedReference | null\n },\n stack: Set<object>,\n depth: number,\n): SerializedValue => {\n assertSafeDepth(depth, state.maxDepth)\n\n if (isNoSerialize(value)) {\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return {\n __eclipsa_type: 'undefined',\n }\n }\n\n const reference = state.serializeReference?.(value) ?? null\n if (reference) {\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return reference\n }\n\n if (value === undefined) {\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return {\n __eclipsa_type: 'undefined',\n }\n }\n if (value === null || typeof value === 'string' || typeof value === 'boolean') {\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return value\n }\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n throw new TypeError('Non-finite numbers cannot be serialized.')\n }\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return value\n }\n if (typeof value === 'function') {\n throw new TypeError('Functions cannot be serialized.')\n }\n if (typeof value === 'symbol') {\n throw new TypeError('Symbols cannot be serialized.')\n }\n if (typeof value !== 'object') {\n throw new TypeError(`Unsupported primitive ${typeof value}.`)\n }\n if (value instanceof Promise) {\n throw new TypeError('Promises cannot be serialized.')\n }\n if (value instanceof WeakMap || value instanceof WeakSet) {\n throw new TypeError('Weak collections cannot be serialized.')\n }\n if (\n value instanceof Date ||\n value instanceof RegExp ||\n value instanceof URL ||\n value instanceof Error ||\n value instanceof ArrayBuffer ||\n ArrayBuffer.isView(value)\n ) {\n throw createUnsupportedObjectError(value)\n }\n if (stack.has(value)) {\n throw new TypeError('Circular values cannot be serialized.')\n }\n\n stack.add(value)\n try {\n if (Array.isArray(value)) {\n for (let index = 0; index < value.length; index += 1) {\n if (!(index in value)) {\n throw new TypeError('Sparse arrays cannot be serialized.')\n }\n }\n state.entryCount += value.length + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return value.map((entry) => serializeUnknown(entry, state, stack, depth + 1))\n }\n if (value instanceof Map) {\n state.entryCount += value.size * 2 + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n const entries: [SerializedValue, SerializedValue][] = []\n for (const [key, entry] of value.entries()) {\n entries.push([\n serializeUnknown(key, state, stack, depth + 1),\n serializeUnknown(entry, state, stack, depth + 1),\n ])\n }\n return {\n __eclipsa_type: 'map',\n entries,\n }\n }\n if (value instanceof Set) {\n state.entryCount += value.size + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return {\n __eclipsa_type: 'set',\n entries: [...value].map((entry) => serializeUnknown(entry, state, stack, depth + 1)),\n }\n }\n if (isPlainObject(value)) {\n assertSafeObject(value)\n const descriptors = Object.entries(value)\n state.entryCount += descriptors.length + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return {\n __eclipsa_type: 'object',\n entries: descriptors.map(([key, entry]) => [\n key,\n serializeUnknown(entry, state, stack, depth + 1),\n ]),\n }\n }\n\n throw createUnsupportedObjectError(value)\n } finally {\n stack.delete(value)\n }\n}\n\nconst deserializeUnknown = (\n value: SerializedValue,\n state: {\n deserializeReference?: (value: SerializedReference) => unknown\n entryCount: number\n maxDepth: number\n maxEntries: number\n },\n depth: number,\n): unknown => {\n assertSafeDepth(depth, state.maxDepth)\n\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean' ||\n typeof value === 'number'\n ) {\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return value\n }\n if (Array.isArray(value)) {\n state.entryCount += value.length + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return value.map((entry) => deserializeUnknown(entry, state, depth + 1))\n }\n if (!value || typeof value !== 'object' || typeof value.__eclipsa_type !== 'string') {\n throw new TypeError('Malformed serialized value.')\n }\n\n switch (value.__eclipsa_type) {\n case 'undefined':\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return undefined\n case 'object': {\n const keys = Object.keys(value).sort()\n if (keys.length !== 2 || keys[0] !== '__eclipsa_type' || keys[1] !== 'entries') {\n throw new TypeError('Malformed serialized object.')\n }\n if (!Array.isArray(value.entries)) {\n throw new TypeError('Serialized object entries must be an array.')\n }\n state.entryCount += value.entries.length + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n const result: Record<string, unknown> = Object.create(null)\n for (const entry of value.entries) {\n if (!Array.isArray(entry) || entry.length !== 2 || typeof entry[0] !== 'string') {\n throw new TypeError('Malformed serialized object entry.')\n }\n const [key, child] = entry\n if (RESERVED_KEYS.has(key)) {\n defineDecodedProperty(result, key, deserializeUnknown(child, state, depth + 1))\n continue\n }\n defineDecodedProperty(result, key, deserializeUnknown(child, state, depth + 1))\n }\n return result\n }\n case 'map': {\n const keys = Object.keys(value).sort()\n if (keys.length !== 2 || keys[0] !== '__eclipsa_type' || keys[1] !== 'entries') {\n throw new TypeError('Malformed serialized map.')\n }\n if (!Array.isArray(value.entries)) {\n throw new TypeError('Serialized map entries must be an array.')\n }\n state.entryCount += value.entries.length * 2 + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n const result = new Map<unknown, unknown>()\n for (const entry of value.entries) {\n if (!Array.isArray(entry) || entry.length !== 2) {\n throw new TypeError('Malformed serialized map entry.')\n }\n result.set(\n deserializeUnknown(entry[0], state, depth + 1),\n deserializeUnknown(entry[1], state, depth + 1),\n )\n }\n return result\n }\n case 'set': {\n const keys = Object.keys(value).sort()\n if (keys.length !== 2 || keys[0] !== '__eclipsa_type' || keys[1] !== 'entries') {\n throw new TypeError('Malformed serialized set.')\n }\n if (!Array.isArray(value.entries)) {\n throw new TypeError('Serialized set entries must be an array.')\n }\n state.entryCount += value.entries.length + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return new Set(value.entries.map((entry) => deserializeUnknown(entry, state, depth + 1)))\n }\n case 'ref':\n assertReferenceShape(value)\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n if (!state.deserializeReference) {\n throw new TypeError(`Cannot deserialize reference kind \"${value.kind}\" in this context.`)\n }\n return state.deserializeReference(value)\n default:\n throw new TypeError(\n `Unknown serialized value type \"${(value as { __eclipsa_type: string }).__eclipsa_type}\".`,\n )\n }\n}\n\nexport const serializeValue = (value: unknown, options?: SerializeValueOptions): SerializedValue =>\n serializeUnknown(\n value,\n {\n entryCount: 0,\n maxDepth: options?.maxDepth ?? DEFAULT_MAX_DEPTH,\n maxEntries: options?.maxEntries ?? DEFAULT_MAX_ENTRIES,\n serializeReference: options?.serializeReference,\n },\n new Set<object>(),\n 0,\n )\n\nexport const deserializeValue = (\n value: SerializedValue,\n options?: DeserializeValueOptions,\n): unknown =>\n deserializeUnknown(\n value,\n {\n deserializeReference: options?.deserializeReference,\n entryCount: 0,\n maxDepth: options?.maxDepth ?? DEFAULT_MAX_DEPTH,\n maxEntries: options?.maxEntries ?? DEFAULT_MAX_ENTRIES,\n },\n 0,\n )\n\nexport const escapeJSONScriptText = (json: string) =>\n json\n .replaceAll('<', '\\\\u003C')\n .replaceAll('>', '\\\\u003E')\n .replaceAll('&', '\\\\u0026')\n .replaceAll('\\u2028', '\\\\u2028')\n .replaceAll('\\u2029', '\\\\u2029')\n\nexport const escapeInlineScriptText = (script: string) =>\n script\n .replaceAll('<', '\\\\u003C')\n .replaceAll('&', '\\\\u0026')\n .replaceAll('\\u2028', '\\\\u2028')\n .replaceAll('\\u2029', '\\\\u2029')\n\nexport const serializeJSONScriptContent = (value: unknown, options?: SerializeValueOptions) =>\n escapeJSONScriptText(JSON.stringify(serializeValue(value, options)))\n\nexport const parseSerializedJSON = (json: string): SerializedValue => {\n const parsed = JSON.parse(json) as unknown\n return parsed as SerializedValue\n}\n","import type { Context } from 'hono'\nimport type { Env } from 'hono/types'\nimport type { AsyncLocalStorage } from 'node:async_hooks'\nimport {\n deserializeValue,\n serializeValue,\n type DeserializeValueOptions,\n type SerializedReference,\n type SerializedValue,\n type SerializeValueOptions,\n} from './serialize.ts'\n\nexport type { DeserializeValueOptions, SerializeValueOptions, SerializedReference, SerializedValue }\n\nexport const APP_HOOKS_ELEMENT_ID = 'eclipsa-app-hooks'\n\nexport interface AppVariables {}\n\nexport interface PublicErrorShape {\n message: string\n [key: string]: unknown\n}\n\nexport interface PublicError extends PublicErrorShape {}\n\nexport interface AppHooksManifest {\n client: string | null\n}\n\nexport type RequestFetch = typeof fetch\n\nexport type BaseAppVariables = AppVariables & {\n fetch: RequestFetch\n}\n\nexport interface AppEnv extends Env {\n Variables: BaseAppVariables\n}\n\ntype EnvVariables<E extends Env> = E extends {\n Variables: infer Variables\n}\n ? Variables\n : {}\n\nexport type WithAppEnv<E extends Env = Env> = Omit<E, 'Variables'> & {\n Variables: EnvVariables<E> & BaseAppVariables\n}\n\nexport type AppContext<E extends Env = Env> = Context<WithAppEnv<E>>\n\nexport interface HandleResolveOptions {\n pathname?: string\n}\n\nexport type HandleResolve<E extends Env = Env> = (\n context?: AppContext<E>,\n options?: HandleResolveOptions,\n) => Promise<Response>\n\nexport type Handle<E extends Env = Env> = (\n context: AppContext<E>,\n resolve: HandleResolve<E>,\n) => Response | Promise<Response>\n\nexport type HandleFetch<E extends Env = Env> = (\n context: AppContext<E>,\n request: Request,\n fetch: RequestFetch,\n) => Response | Promise<Response>\n\nexport interface HandleErrorInput<E extends Env = Env> {\n context: AppContext<E>\n error: unknown\n event: 'action' | 'handle' | 'loader' | 'middleware' | 'page' | 'server' | 'transport'\n}\n\nexport type HandleError<E extends Env = Env> = (\n input: HandleErrorInput<E>,\n) => PublicError | void | Promise<PublicError | void>\n\nexport type Reroute = (input: { request: Request | null; url: URL }) => string | URL | void\n\nexport interface TransportHook {\n decode: (value: unknown) => unknown\n encode: (value: unknown) => unknown\n}\n\nexport type Transport = Record<string, TransportHook>\n\nexport type ServerInit = () => void | Promise<void>\n\nexport interface ServerHooksModule<E extends Env = Env> {\n handle?: Handle<E>\n handleError?: HandleError<E>\n handleFetch?: HandleFetch<E>\n init?: ServerInit\n}\n\nexport interface AppHooksModule {\n reroute?: Reroute\n transport?: Transport\n}\n\nexport interface ResolvedHooks<E extends Env = Env> {\n app: AppHooksModule\n server: ServerHooksModule<E>\n}\n\nconst PUBLIC_ERROR_KEY = Symbol.for('eclipsa.public-error')\n\ntype RequestContextStore = {\n context: AppContext<any>\n handleError?: HandleError<any>\n transport?: Transport\n}\n\nlet requestContextStorage: AsyncLocalStorage<RequestContextStore> | null = null\n\nlet clientHooks: AppHooksModule = {}\n\nconst isBrowserRuntime = () => typeof window !== 'undefined' && typeof document !== 'undefined'\n\ntype AsyncLocalStorageConstructor = new <T>() => AsyncLocalStorage<T>\n\nconst getAsyncLocalStorageConstructor = (): AsyncLocalStorageConstructor | null => {\n if (isBrowserRuntime() || typeof process === 'undefined') {\n return null\n }\n const asyncHooks = (\n process as typeof process & {\n getBuiltinModule?: (id: string) => unknown\n }\n ).getBuiltinModule?.('node:async_hooks') as\n | {\n AsyncLocalStorage?: AsyncLocalStorageConstructor\n }\n | undefined\n return typeof asyncHooks?.AsyncLocalStorage === 'function' ? asyncHooks.AsyncLocalStorage : null\n}\n\nconst getRequestContextStorage = () => {\n const AsyncLocalStorageCtor = getAsyncLocalStorageConstructor()\n if (!AsyncLocalStorageCtor) {\n return null\n }\n requestContextStorage ??= new AsyncLocalStorageCtor<RequestContextStore>()\n return requestContextStorage\n}\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (!value || typeof value !== 'object') {\n return false\n }\n const proto = Object.getPrototypeOf(value)\n return proto === Object.prototype || proto === null\n}\n\nconst normalizePublicError = (value: unknown): PublicError => {\n if (value && typeof value === 'object') {\n const message = (value as { message?: unknown }).message\n if (typeof message === 'string' && message.length > 0) {\n return value as PublicError\n }\n }\n if (value instanceof Error) {\n return {\n message: value.message || 'Internal Server Error',\n name: value.name,\n }\n }\n return {\n message: 'Internal Server Error',\n }\n}\n\nconst getActiveTransport = () =>\n getRequestContextStorage()?.getStore()?.transport ?? clientHooks.transport\n\nconst serializeTransportReference = (\n value: unknown,\n transport: Transport,\n): SerializedReference | null => {\n for (const [key, hook] of Object.entries(transport)) {\n const encoded = hook.encode(value)\n if (encoded === undefined) {\n continue\n }\n return {\n __eclipsa_type: 'ref',\n data: serializeValue(encoded),\n kind: 'transport',\n token: key,\n }\n }\n return null\n}\n\nconst deserializeTransportReference = (reference: SerializedReference, transport: Transport) => {\n const hook = transport[reference.token]\n if (!hook) {\n throw new TypeError(`Unknown transport \"${reference.token}\".`)\n }\n return hook.decode(reference.data === undefined ? undefined : deserializeValue(reference.data))\n}\n\nexport const serializePublicValue = (\n value: unknown,\n options?: SerializeValueOptions,\n): SerializedValue =>\n serializeValue(value, {\n ...options,\n serializeReference(candidate) {\n const resolved = options?.serializeReference?.(candidate) ?? null\n if (resolved) {\n return resolved\n }\n const transport = getActiveTransport()\n return transport ? serializeTransportReference(candidate, transport) : null\n },\n })\n\nexport const deserializePublicValue = (\n value: SerializedValue,\n options?: DeserializeValueOptions,\n): unknown =>\n deserializeValue(value, {\n ...options,\n deserializeReference(reference) {\n const resolved = options?.deserializeReference?.(reference)\n if (resolved !== undefined) {\n return resolved\n }\n const transport = getActiveTransport()\n if (reference.kind === 'transport' && transport) {\n return deserializeTransportReference(reference, transport)\n }\n if (reference.kind === 'transport') {\n throw new TypeError(`Unknown transport \"${reference.token}\".`)\n }\n if (!options?.deserializeReference) {\n throw new TypeError(\n `Cannot deserialize reference kind \"${reference.kind}\" in this context.`,\n )\n }\n return options.deserializeReference(reference)\n },\n })\n\nexport const withServerRequestContext = <T>(\n context: AppContext<any>,\n hooks: {\n handleError?: HandleError<any>\n transport?: Transport\n },\n fn: () => T,\n) => {\n const storage = getRequestContextStorage()\n if (!storage) {\n return fn()\n }\n return storage.run(\n {\n context,\n handleError: hooks.handleError,\n transport: hooks.transport,\n },\n fn,\n )\n}\n\nexport const getCurrentServerRequestContext = () =>\n getRequestContextStorage()?.getStore()?.context ?? null\n\nexport const transformCurrentPublicError = async (\n error: unknown,\n event: HandleErrorInput<any>['event'],\n) => {\n const store = getRequestContextStorage()?.getStore()\n const publicError = store\n ? await runHandleError(\n {\n handleError: store.handleError,\n },\n {\n context: store.context,\n error,\n event,\n },\n )\n : toPublicError(error)\n return markPublicError(error, publicError)\n}\n\nexport const createRequestFetch = (\n context: AppContext<any>,\n handleFetch?: HandleFetch<any>,\n): RequestFetch => {\n const baseFetch: RequestFetch = ((input: Request | URL | string, init?: RequestInit) => {\n const request = input instanceof Request ? input : new Request(input, init)\n return fetch(request)\n }) as RequestFetch\n\n if (!handleFetch) {\n return baseFetch\n }\n\n return (async (input: Request | URL | string, init?: RequestInit) => {\n const request = input instanceof Request ? input : new Request(input, init)\n return handleFetch(context, request, baseFetch)\n }) as RequestFetch\n}\n\nexport const attachRequestFetch = <E extends Env>(\n context: AppContext<E>,\n fetchImpl: RequestFetch,\n) => {\n context.set('fetch' as never, fetchImpl as never)\n}\n\nexport const resolveReroute = (\n reroute: Reroute | undefined,\n request: Request | null,\n pathname: string,\n baseUrl: string,\n) => {\n if (!reroute) {\n return pathname\n }\n const url = new URL(pathname, baseUrl)\n const resolved = reroute({ request, url })\n if (!resolved) {\n return pathname\n }\n const nextUrl = resolved instanceof URL ? resolved : new URL(String(resolved), url)\n return nextUrl.pathname\n}\n\nexport const toPublicError = (error: unknown): PublicError =>\n error &&\n typeof error === 'object' &&\n (error as Record<PropertyKey, unknown>)[PUBLIC_ERROR_KEY] &&\n isPlainObject((error as Record<PropertyKey, unknown>)[PUBLIC_ERROR_KEY])\n ? ((error as Record<PropertyKey, unknown>)[PUBLIC_ERROR_KEY] as PublicError)\n : normalizePublicError(error)\n\nexport const markPublicError = <T>(error: T, publicError: PublicError): T => {\n if (!error || (typeof error !== 'object' && typeof error !== 'function')) {\n return error\n }\n Object.defineProperty(error as Record<PropertyKey, unknown>, PUBLIC_ERROR_KEY, {\n configurable: true,\n enumerable: false,\n value: publicError,\n writable: true,\n })\n return error\n}\n\nexport const runHandleError = async (\n hooks: {\n handleError?: HandleError<any>\n },\n input: HandleErrorInput<any>,\n) => {\n const transformed = await hooks.handleError?.(input)\n return transformed ? normalizePublicError(transformed) : toPublicError(input.error)\n}\n\nexport const registerClientHooks = (hooks: AppHooksModule) => {\n clientHooks = hooks\n}\n\nexport const getClientHooks = () => clientHooks\n\nexport const resetClientHooks = () => {\n clientHooks = {}\n}\n","import type { JSX } from '../jsx/types.ts'\n\nconst PENDING_SIGNAL_ERROR_KEY = Symbol.for('eclipsa.pending-signal-error')\nconst SUSPENSE_TYPE_KEY = Symbol.for('eclipsa.suspense-type')\n\nexport interface SuspenseProps {\n children?: JSX.Element | JSX.Element[] | (() => JSX.Element | JSX.Element[])\n fallback?: JSX.Element | JSX.Element[]\n}\n\nexport interface PendingSignalError {\n [PENDING_SIGNAL_ERROR_KEY]: true\n promise: Promise<unknown>\n}\n\nexport const Suspense = ((props: SuspenseProps): JSX.Element =>\n (props.children ?? null) as JSX.Element) as ((props: SuspenseProps) => JSX.Element) & {\n [SUSPENSE_TYPE_KEY]?: true\n}\n\nObject.defineProperty(Suspense, SUSPENSE_TYPE_KEY, {\n configurable: true,\n enumerable: false,\n value: true,\n writable: false,\n})\n\nexport const createPendingSignalError = (promise: Promise<unknown>): PendingSignalError => ({\n [PENDING_SIGNAL_ERROR_KEY]: true,\n promise,\n})\n\nexport const isPendingSignalError = (value: unknown): value is PendingSignalError =>\n !!value &&\n typeof value === 'object' &&\n (value as PendingSignalError)[PENDING_SIGNAL_ERROR_KEY] === true\n\nexport const isSuspenseType = (value: unknown): value is typeof Suspense =>\n !!value && typeof value === 'function' && (value as typeof Suspense)[SUSPENSE_TYPE_KEY] === true\n","import type { JSX } from '../jsx/types.ts'\nimport type { Component } from './component.ts'\nimport {\n getRuntimeContextValue,\n hasActiveRuntimeComponent,\n type RuntimeContextToken,\n} from './runtime.ts'\n\nconst CONTEXT_PROVIDER_META_KEY = Symbol.for('eclipsa.context-provider-meta')\nconst CONTEXT_TOKEN_KEY = Symbol.for('eclipsa.context-token')\nconst CONTEXT_REGISTRY_KEY = Symbol.for('eclipsa.context-registry')\nconst CONTEXT_NEXT_ID_KEY = Symbol.for('eclipsa.context-next-id')\n\ninterface ContextProviderMeta<T = unknown> {\n id: string\n token: RuntimeContextToken<T>\n}\n\ninterface RuntimeContextState<T> {\n defaultValue: T | undefined\n hasDefault: boolean\n id: string\n token: RuntimeContextToken<T>\n}\n\ninterface RuntimeContext<T> extends Context<T> {\n [CONTEXT_TOKEN_KEY]: RuntimeContextState<T>\n}\n\ninterface ContextProviderComponent<T> extends Component<ContextProviderProps<T>> {\n [CONTEXT_PROVIDER_META_KEY]?: ContextProviderMeta<T>\n}\n\nexport interface ContextProviderProps<T> {\n children?: JSX.Element | JSX.Element[]\n value: T\n}\n\nexport interface Context<T> {\n Provider: Component<ContextProviderProps<T>>\n}\n\ninterface SerializedContextDescriptor<T = unknown> {\n defaultValue: T | undefined\n hasDefault: boolean\n id: string\n}\n\nconst getContextRegistry = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n let registry = globalRecord[CONTEXT_REGISTRY_KEY] as Map<string, Context<unknown>> | undefined\n if (!registry) {\n registry = new Map()\n globalRecord[CONTEXT_REGISTRY_KEY] = registry\n }\n return registry\n}\n\nconst allocateContextId = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const nextId = ((globalRecord[CONTEXT_NEXT_ID_KEY] as number | undefined) ?? 0) + 1\n globalRecord[CONTEXT_NEXT_ID_KEY] = nextId\n return `ctx${nextId}`\n}\n\nconst getContextStateMaybe = <T>(context: unknown): RuntimeContextState<T> | null =>\n context &&\n (typeof context === 'object' || typeof context === 'function') &&\n CONTEXT_TOKEN_KEY in (context as Record<PropertyKey, unknown>)\n ? ((context as RuntimeContext<T>)[CONTEXT_TOKEN_KEY] ?? null)\n : null\n\nconst getContextState = <T>(context: Context<T>): RuntimeContextState<T> => {\n const state = getContextStateMaybe<T>(context)\n if (!state) {\n throw new TypeError('useContext() expects a context created by createContext().')\n }\n return state\n}\n\nexport const getContextProviderMeta = (value: unknown): ContextProviderMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[CONTEXT_PROVIDER_META_KEY] as\n | ContextProviderMeta\n | undefined) ?? null\n )\n}\n\nconst registerContext = <T>(id: string, context: Context<T>) => {\n getContextRegistry().set(id, context as Context<unknown>)\n}\n\nconst createContextWithId = <T>(\n id: string,\n hasDefault: boolean,\n defaultValue: T | undefined,\n): Context<T> => {\n const token = Symbol.for(`eclipsa.context:${id}`) as RuntimeContextToken<T>\n const Provider = ((props: ContextProviderProps<T>) =>\n props.children) as ContextProviderComponent<T>\n\n Object.defineProperty(Provider, CONTEXT_PROVIDER_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n id,\n token,\n } satisfies ContextProviderMeta<T>,\n writable: false,\n })\n\n const context = {\n Provider,\n } as RuntimeContext<T>\n\n Object.defineProperty(context, CONTEXT_TOKEN_KEY, {\n configurable: false,\n enumerable: false,\n value: {\n defaultValue,\n hasDefault,\n id,\n token,\n } satisfies RuntimeContextState<T>,\n writable: false,\n })\n\n registerContext(id, context)\n return context\n}\n\nexport const createContext = <T>(...args: [defaultValue?: T]): Context<T> =>\n createContextWithId(allocateContextId(), args.length > 0, args[0])\n\nexport const getRuntimeContextReference = (value: unknown) => {\n const state = getContextStateMaybe(value)\n if (state) {\n return {\n defaultValue: state.defaultValue,\n hasDefault: state.hasDefault,\n id: state.id,\n kind: 'context' as const,\n }\n }\n\n const providerMeta = getContextProviderMeta(value)\n if (!providerMeta) {\n return null\n }\n\n const context = getContextRegistry().get(providerMeta.id)\n const contextState = context ? getContextState(context) : null\n return {\n defaultValue: contextState?.defaultValue,\n hasDefault: contextState?.hasDefault ?? false,\n id: providerMeta.id,\n kind: 'context-provider' as const,\n }\n}\n\nconst materializeContextWithDescriptor = <T>({\n defaultValue,\n hasDefault,\n id,\n}: SerializedContextDescriptor<T>): Context<T> => {\n const existing = getContextRegistry().get(id) as Context<T> | undefined\n if (existing) {\n return existing\n }\n return createContextWithId(id, hasDefault, defaultValue)\n}\n\nexport const materializeRuntimeContext = <T>(descriptor: SerializedContextDescriptor<T>) =>\n materializeContextWithDescriptor(descriptor)\n\nexport const materializeRuntimeContextProvider = <T>(descriptor: SerializedContextDescriptor<T>) =>\n materializeContextWithDescriptor(descriptor).Provider\n\nexport const useContext = <T>(context: Context<T>): T => {\n if (!hasActiveRuntimeComponent()) {\n throw new Error('useContext() can only be used while rendering a component.')\n }\n\n const state = getContextState(context)\n const resolved = getRuntimeContextValue(state.token)\n if (!resolved.found) {\n if (state.hasDefault) {\n return state.defaultValue as T\n }\n throw new Error('useContext() could not find a matching context provider.')\n }\n\n return resolved.value as T\n}\n","import { jsxDEV } from '../jsx/jsx-dev-runtime.ts'\nimport type { JSX } from '../jsx/jsx-runtime.ts'\nimport type { RouteParams } from './router-shared.ts'\n\nexport const ROUTE_METADATA_HEAD_ATTR = 'data-e-metadata'\n\nexport interface MetadataContext {\n params: RouteParams\n url: URL\n}\n\nexport interface OpenGraphMetadata {\n description?: string\n images?: string[]\n title?: string\n type?: string\n url?: string\n}\n\nexport interface TwitterMetadata {\n card?: string\n description?: string\n images?: string[]\n title?: string\n}\n\nexport interface RouteMetadata {\n canonical?: string\n description?: string\n openGraph?: OpenGraphMetadata\n title?: string\n twitter?: TwitterMetadata\n}\n\nexport type RouteMetadataValue = RouteMetadata | null | undefined\nexport type RouteMetadataResolver = (ctx: MetadataContext) => RouteMetadataValue\nexport type RouteMetadataExport = RouteMetadataValue | RouteMetadataResolver\n\nconst mergeDefined = <T extends object>(parent: T | undefined, child: T | undefined) => {\n if (!parent) {\n return child\n }\n if (!child) {\n return parent\n }\n return Object.fromEntries(\n [...new Set([...Object.keys(parent), ...Object.keys(child)])].flatMap((key) => {\n const value = (child as Record<string, unknown>)[key]\n return value === undefined\n ? [[key, (parent as Record<string, unknown>)[key]]]\n : [[key, value]]\n }),\n ) as T\n}\n\nconst mergeRouteMetadata = (parent: RouteMetadata | null, child: RouteMetadata | null) => {\n if (!parent) {\n return child\n }\n if (!child) {\n return parent\n }\n\n return {\n canonical: child.canonical ?? parent.canonical,\n description: child.description ?? parent.description,\n openGraph: mergeDefined(parent.openGraph, child.openGraph),\n title: child.title ?? parent.title,\n twitter: mergeDefined(parent.twitter, child.twitter),\n } satisfies RouteMetadata\n}\n\nexport const resolveRouteMetadata = (\n value: RouteMetadataExport,\n ctx: MetadataContext,\n): RouteMetadata | null => {\n if (!value) {\n return null\n }\n const resolved = typeof value === 'function' ? value(ctx) : value\n return resolved ?? null\n}\n\nexport const composeRouteMetadata = (\n values: RouteMetadataExport[],\n ctx: MetadataContext,\n): RouteMetadata | null =>\n values.reduce<RouteMetadata | null>(\n (current, value) => mergeRouteMetadata(current, resolveRouteMetadata(value, ctx)),\n null,\n )\n\nexport const renderRouteMetadataHead = (metadata: RouteMetadata | null): JSX.Element[] => {\n if (!metadata) {\n return []\n }\n\n const elements: JSX.Element[] = []\n\n if (metadata.title) {\n elements.push(\n jsxDEV(\n 'title',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n children: metadata.title,\n },\n null,\n true,\n {},\n ),\n )\n }\n\n if (metadata.description) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.description,\n name: 'description',\n },\n null,\n true,\n {},\n ),\n )\n }\n\n if (metadata.canonical) {\n elements.push(\n jsxDEV(\n 'link',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n href: metadata.canonical,\n rel: 'canonical',\n },\n null,\n true,\n {},\n ),\n )\n }\n\n if (metadata.openGraph?.title) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.openGraph.title,\n property: 'og:title',\n },\n null,\n true,\n {},\n ),\n )\n }\n if (metadata.openGraph?.description) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.openGraph.description,\n property: 'og:description',\n },\n null,\n true,\n {},\n ),\n )\n }\n if (metadata.openGraph?.type) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.openGraph.type,\n property: 'og:type',\n },\n null,\n true,\n {},\n ),\n )\n }\n if (metadata.openGraph?.url) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.openGraph.url,\n property: 'og:url',\n },\n null,\n true,\n {},\n ),\n )\n }\n for (const image of metadata.openGraph?.images ?? []) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: image,\n property: 'og:image',\n },\n image,\n true,\n {},\n ),\n )\n }\n\n if (metadata.twitter?.card) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.twitter.card,\n name: 'twitter:card',\n },\n null,\n true,\n {},\n ),\n )\n }\n if (metadata.twitter?.title) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.twitter.title,\n name: 'twitter:title',\n },\n null,\n true,\n {},\n ),\n )\n }\n if (metadata.twitter?.description) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.twitter.description,\n name: 'twitter:description',\n },\n null,\n true,\n {},\n ),\n )\n }\n for (const image of metadata.twitter?.images ?? []) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: image,\n name: 'twitter:image',\n },\n image,\n true,\n {},\n ),\n )\n }\n\n return elements\n}\n","import type { Env, MiddlewareHandler, Next } from 'hono/types'\nimport {\n type AppContext,\n deserializePublicValue,\n serializePublicValue,\n transformCurrentPublicError,\n type WithAppEnv,\n} from './hooks.ts'\nimport { type SerializedValue } from './serialize.ts'\nimport { registerLoaderHook, setLoaderHandleMeta, setLoaderHookMeta } from './internal.ts'\nimport {\n createDetachedRuntimeSignal,\n getRuntimeContainer,\n type RuntimeContainer,\n} from './runtime.ts'\n\nconst LOADER_REGISTRY_KEY = Symbol.for('eclipsa.loader-registry')\nconst LOADER_CONTENT_TYPE = 'application/eclipsa-loader+json'\nconst SSR_PENDING_LOADER_ERROR = Symbol.for('eclipsa.ssr-pending-loader-error')\nconst SSR_PENDING_LOADER_IDS_KEY = Symbol.for('eclipsa.ssr-pending-loader-ids')\n\ntype MiddlewareEnv<T> = T extends {\n readonly __eclipsa_loader_env__?: infer MiddlewareEnv\n}\n ? Exclude<MiddlewareEnv, undefined> extends Env\n ? WithAppEnv<Exclude<MiddlewareEnv, undefined>>\n : {}\n : T extends MiddlewareHandler<infer MiddlewareEnv, any, any>\n ? WithAppEnv<MiddlewareEnv>\n : WithAppEnv<Env>\n\ntype LoaderEnv<Middlewares extends readonly LoaderMiddleware<any>[]> =\n Middlewares extends readonly [infer Head, ...infer Tail]\n ? Tail extends readonly LoaderMiddleware<any>[]\n ? MiddlewareEnv<Head> & LoaderEnv<Tail>\n : MiddlewareEnv<Head>\n : WithAppEnv<Env>\n\nexport interface LoaderHandle<Output> {\n readonly data: Output | undefined\n readonly error: unknown\n readonly isLoading: boolean\n load: () => Promise<Output>\n}\n\nexport interface LoaderMiddleware<E extends Env = Env> extends MiddlewareHandler<E> {\n readonly __eclipsa_loader_env__?: E\n}\n\nexport type LoaderHandler<E extends Env = Env, Output = unknown> = (\n c: AppContext<E>,\n) => Output | Promise<Output>\n\ntype LoaderUse<\n _Middlewares extends readonly LoaderMiddleware<any>[],\n Output,\n> = () => LoaderHandle<Output>\n\nexport interface LoaderFactory {\n <Output>(handler: LoaderHandler<{}, Output>): LoaderUse<[], Output>\n <M1 extends LoaderMiddleware<any>, Output>(\n middleware1: M1,\n handler: LoaderHandler<LoaderEnv<[M1]>, Output>,\n ): LoaderUse<[M1], Output>\n <M1 extends LoaderMiddleware<any>, M2 extends LoaderMiddleware<any>, Output>(\n middleware1: M1,\n middleware2: M2,\n handler: LoaderHandler<LoaderEnv<[M1, M2]>, Output>,\n ): LoaderUse<[M1, M2], Output>\n <\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n M3 extends LoaderMiddleware<any>,\n Output,\n >(\n middleware1: M1,\n middleware2: M2,\n middleware3: M3,\n handler: LoaderHandler<LoaderEnv<[M1, M2, M3]>, Output>,\n ): LoaderUse<[M1, M2, M3], Output>\n <\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n M3 extends LoaderMiddleware<any>,\n M4 extends LoaderMiddleware<any>,\n Output,\n >(\n middleware1: M1,\n middleware2: M2,\n middleware3: M3,\n middleware4: M4,\n handler: LoaderHandler<LoaderEnv<[M1, M2, M3, M4]>, Output>,\n ): LoaderUse<[M1, M2, M3, M4], Output>\n <\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n M3 extends LoaderMiddleware<any>,\n M4 extends LoaderMiddleware<any>,\n M5 extends LoaderMiddleware<any>,\n Output,\n >(\n middleware1: M1,\n middleware2: M2,\n middleware3: M3,\n middleware4: M4,\n middleware5: M5,\n handler: LoaderHandler<LoaderEnv<[M1, M2, M3, M4, M5]>, Output>,\n ): LoaderUse<[M1, M2, M3, M4, M5], Output>\n}\n\ninterface RegisteredLoader {\n handler: LoaderHandler<any, unknown>\n id: string\n middlewares: LoaderMiddleware<any>[]\n}\n\ninterface LoaderJsonSuccess {\n ok: true\n value: SerializedValue\n}\n\ninterface LoaderJsonFailure {\n error: SerializedValue\n ok: false\n}\n\nconst ensurePendingSsrLoaderIds = (container: RuntimeContainer) => {\n const record = container as RuntimeContainer & {\n [SSR_PENDING_LOADER_IDS_KEY]?: Set<string>\n }\n const existing = record[SSR_PENDING_LOADER_IDS_KEY]\n if (existing instanceof Set) {\n return existing\n }\n const created = new Set<string>()\n record[SSR_PENDING_LOADER_IDS_KEY] = created\n return created\n}\n\nexport const markPendingSsrLoader = (container: RuntimeContainer, id: string) => {\n ensurePendingSsrLoaderIds(container).add(id)\n}\n\nexport const consumePendingSsrLoaderIds = (container: RuntimeContainer) => {\n const ids = [...ensurePendingSsrLoaderIds(container)]\n ensurePendingSsrLoaderIds(container).clear()\n return ids\n}\n\nexport const isPendingSsrLoaderError = (error: unknown) => error === SSR_PENDING_LOADER_ERROR\n\nconst getLoaderRegistry = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[LOADER_REGISTRY_KEY]\n if (existing instanceof Map) {\n return existing as Map<string, RegisteredLoader>\n }\n const created = new Map<string, RegisteredLoader>()\n globalRecord[LOADER_REGISTRY_KEY] = created\n return created\n}\n\nconst composeMiddlewares = async (\n c: AppContext<any>,\n middlewares: LoaderMiddleware<any>[],\n handler: LoaderHandler<any, unknown>,\n): Promise<Response | unknown> => {\n let index = -1\n const dispatch = async (nextIndex: number): Promise<Response | unknown> => {\n if (nextIndex <= index) {\n throw new Error('Loader middleware called next() multiple times.')\n }\n index = nextIndex\n const middleware = middlewares[nextIndex]\n if (!middleware) {\n return handler(c)\n }\n let nextResult: Response | unknown = undefined\n const result = await middleware(c, (async () => {\n nextResult = await dispatch(nextIndex + 1)\n }) as Next)\n if (result !== undefined) {\n return result\n }\n return nextResult\n }\n return dispatch(0)\n}\n\nconst toSerializedLoaderError = (error: unknown): SerializedValue => {\n if (error instanceof Error) {\n return serializePublicValue({\n message: error.message,\n name: error.name,\n })\n }\n try {\n return serializePublicValue(error)\n } catch {\n return serializePublicValue({\n message: 'Loader failed.',\n })\n }\n}\n\nconst normalizeLoaderValue = (value: unknown) => {\n if (value instanceof Response) {\n throw new TypeError('loader() handlers and middlewares must resolve to data, not Response.')\n }\n if (typeof ReadableStream !== 'undefined' && value instanceof ReadableStream) {\n throw new TypeError('loader() does not support ReadableStream results.')\n }\n if (value && typeof value === 'object' && Symbol.asyncIterator in value) {\n throw new TypeError('loader() does not support async iterable results.')\n }\n return value\n}\n\nconst updateLoaderSnapshot = (\n container: RuntimeContainer | null,\n id: string,\n snapshot: {\n data: unknown\n error: unknown\n loaded: boolean\n },\n) => {\n container?.loaderStates.set(id, snapshot)\n}\n\nconst createHandleSignal = <T>(\n container: RuntimeContainer | null,\n id: string,\n key: string,\n initialValue: T,\n) => {\n if (!container) {\n throw new Error('Loader handles require an active runtime container.')\n }\n return {\n detached: false,\n signal: createDetachedRuntimeSignal(container, `$loader:${id}:${key}`, initialValue),\n }\n}\n\nconst parseJsonLoaderResponse = async (response: Response) => {\n const body = (await response.json()) as LoaderJsonFailure | LoaderJsonSuccess\n if (!body || typeof body !== 'object' || typeof body.ok !== 'boolean') {\n throw new TypeError('Malformed loader response.')\n }\n if (!body.ok) {\n throw deserializePublicValue(body.error)\n }\n return deserializePublicValue(body.value)\n}\n\nconst invokeLoader = async (id: string) => {\n const response = await fetch(`/__eclipsa/loader/${encodeURIComponent(id)}`, {\n headers: {\n accept: LOADER_CONTENT_TYPE,\n },\n method: 'GET',\n })\n return parseJsonLoaderResponse(response)\n}\n\nconst resolveLoader = async (id: string, c: AppContext<any>) => {\n const loader = getLoaderRegistry().get(id)\n if (!loader) {\n throw new Error(`Unknown loader ${id}.`)\n }\n return normalizeLoaderValue(await composeMiddlewares(c, loader.middlewares, loader.handler))\n}\n\nexport const loader: LoaderFactory = (() => {\n throw new Error('loader() must be compiled by the Eclipsa analyzer before it can run.')\n}) as LoaderFactory\n\nexport function registerLoader<Output>(\n id: string,\n middlewares: readonly [],\n handler: LoaderHandler<{}, Output>,\n): void\nexport function registerLoader<M1 extends LoaderMiddleware<any>, Output>(\n id: string,\n middlewares: readonly [M1],\n handler: LoaderHandler<LoaderEnv<[M1]>, Output>,\n): void\nexport function registerLoader<\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2],\n handler: LoaderHandler<LoaderEnv<[M1, M2]>, Output>,\n): void\nexport function registerLoader<\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n M3 extends LoaderMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2, M3],\n handler: LoaderHandler<LoaderEnv<[M1, M2, M3]>, Output>,\n): void\nexport function registerLoader<\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n M3 extends LoaderMiddleware<any>,\n M4 extends LoaderMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2, M3, M4],\n handler: LoaderHandler<LoaderEnv<[M1, M2, M3, M4]>, Output>,\n): void\nexport function registerLoader<\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n M3 extends LoaderMiddleware<any>,\n M4 extends LoaderMiddleware<any>,\n M5 extends LoaderMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2, M3, M4, M5],\n handler: LoaderHandler<LoaderEnv<[M1, M2, M3, M4, M5]>, Output>,\n): void\nexport function registerLoader(\n id: string,\n middlewares: readonly LoaderMiddleware<any>[],\n handler: LoaderHandler<any, unknown>,\n) {\n getLoaderRegistry().set(id, {\n handler,\n id,\n middlewares: [...middlewares] as LoaderMiddleware<any>[],\n })\n}\n\nexport const hasLoader = (id: string) => getLoaderRegistry().has(id)\n\nexport const executeLoader = async (id: string, c: AppContext<any>) => {\n try {\n return new Response(\n JSON.stringify({\n ok: true,\n value: serializePublicValue(await resolveLoader(id, c)),\n } satisfies LoaderJsonSuccess),\n {\n headers: {\n 'content-type': LOADER_CONTENT_TYPE,\n },\n },\n )\n } catch (error) {\n const publicError = await transformCurrentPublicError(error, 'loader')\n return new Response(\n JSON.stringify({\n error: toSerializedLoaderError(publicError),\n ok: false,\n } satisfies LoaderJsonFailure),\n {\n headers: {\n 'content-type': LOADER_CONTENT_TYPE,\n },\n status: error instanceof Error && error.message.startsWith('Unknown loader ') ? 404 : 500,\n },\n )\n }\n}\n\nexport const primeLoaderState = async (\n container: RuntimeContainer,\n id: string,\n c: AppContext<any>,\n) => {\n const value = await resolveLoader(id, c)\n updateLoaderSnapshot(container, id, {\n data: value,\n error: undefined,\n loaded: true,\n })\n return value\n}\n\nexport const resolvePendingLoaders = async (container: RuntimeContainer, c: AppContext<any>) => {\n const pendingIds = consumePendingSsrLoaderIds(container)\n if (pendingIds.length === 0) {\n return false\n }\n await Promise.all(pendingIds.map((id) => primeLoaderState(container, id, c)))\n return true\n}\n\nexport const __eclipsaLoader = <const Middlewares extends readonly LoaderMiddleware<any>[], Output>(\n id: string,\n middlewares: readonly [...Middlewares],\n handler: LoaderHandler<LoaderEnv<Middlewares>, Output>,\n) => {\n if (typeof window === 'undefined') {\n getLoaderRegistry().set(id, {\n handler: handler as LoaderHandler<any, unknown>,\n id,\n middlewares: [...middlewares] as LoaderMiddleware<any>[],\n })\n }\n\n const useLoaderHandle = registerLoaderHook(\n id,\n setLoaderHookMeta(() => {\n const container = getRuntimeContainer()\n const existing = container?.loaders.get(id)\n if (existing) {\n return existing as LoaderHandle<Output>\n }\n\n const initialState = container?.loaderStates.get(id)\n if (typeof window === 'undefined' && !initialState?.loaded) {\n if (!container) {\n throw new Error(`loader(\"${id}\") was used during SSR before it was preloaded.`)\n }\n markPendingSsrLoader(container, id)\n throw SSR_PENDING_LOADER_ERROR\n }\n\n const loadingState = createHandleSignal(container, id, 'loading', false)\n const dataState = createHandleSignal<Output | undefined>(\n container,\n id,\n 'data',\n initialState?.loaded ? (initialState.data as Output) : undefined,\n )\n const errorState = createHandleSignal(container, id, 'error', initialState?.error)\n const isDetached = loadingState.detached || dataState.detached || errorState.detached\n const isLoading = loadingState.signal\n const data = dataState.signal\n const error = errorState.signal\n let loaded = initialState?.loaded ?? false\n let inFlight: Promise<Output> | null = null\n let autoRequested = false\n\n const syncSnapshot = () => {\n updateLoaderSnapshot(container ?? null, id, {\n data: data.value,\n error: error.value,\n loaded,\n })\n }\n\n const load = async () => {\n if (inFlight) {\n return inFlight\n }\n isLoading.value = true\n error.value = undefined\n syncSnapshot()\n inFlight = (async () => {\n try {\n const value = (await invokeLoader(id)) as Output\n data.value = value\n loaded = true\n return value\n } catch (caught) {\n error.value = caught\n throw caught\n } finally {\n isLoading.value = false\n syncSnapshot()\n inFlight = null\n }\n })()\n return inFlight\n }\n\n const loaderHandle = setLoaderHandleMeta(\n {\n get data() {\n return data.value\n },\n get error() {\n return error.value\n },\n get isLoading() {\n return isLoading.value\n },\n load,\n } satisfies LoaderHandle<Output>,\n id,\n )\n container?.loaders.set(id, loaderHandle)\n syncSnapshot()\n\n if (typeof window !== 'undefined' && !isDetached && !loaded && !autoRequested) {\n autoRequested = true\n queueMicrotask(() => {\n void load().catch(() => {})\n })\n }\n\n return loaderHandle\n }, id),\n ) as () => LoaderHandle<Output>\n\n return useLoaderHandle\n}\n","import type { Component, EURL } from './component.ts'\nimport type { Navigate } from './router-shared.ts'\n\nexport { __eclipsaAction } from './action.ts'\nexport { __eclipsaLoader } from './loader.ts'\nexport { getRuntimeComponentId } from './runtime.ts'\n\nconst COMPONENT_META_KEY = Symbol.for('eclipsa.component-meta')\nconst LAZY_META_KEY = Symbol.for('eclipsa.lazy-meta')\nconst NAVIGATE_META_KEY = Symbol.for('eclipsa.navigate-meta')\nconst SIGNAL_META_KEY = Symbol.for('eclipsa.signal-meta')\nconst ACTION_HOOK_META_KEY = Symbol.for('eclipsa.action-hook-meta')\nconst ACTION_HANDLE_META_KEY = Symbol.for('eclipsa.action-handle-meta')\nconst LOADER_HOOK_META_KEY = Symbol.for('eclipsa.loader-hook-meta')\nconst LOADER_HANDLE_META_KEY = Symbol.for('eclipsa.loader-handle-meta')\nconst WATCH_META_KEY = Symbol.for('eclipsa.watch-meta')\nconst ACTION_HOOK_REGISTRY_KEY = Symbol.for('eclipsa.action-hook-registry')\nconst LOADER_HOOK_REGISTRY_KEY = Symbol.for('eclipsa.loader-hook-registry')\n\nexport interface ComponentMeta {\n captures: () => unknown[]\n optimizedRoot?: boolean\n projectionSlots?: Record<string, number>\n symbol: string\n}\n\nexport interface ComponentOptions {\n optimizedRoot?: boolean\n}\n\nexport interface LazyMeta {\n captures: () => unknown[]\n eventName?: string\n symbol: string\n}\n\nexport interface WatchMeta {\n captures: () => unknown[]\n symbol: string\n}\n\nexport interface SignalMeta<T = unknown> {\n get(): T\n id: string\n set(value: T): void\n}\n\nexport interface NavigateMeta {\n readonly kind: 'navigate'\n}\n\nexport interface ActionHandleMeta {\n readonly id: string\n readonly kind: 'action'\n}\n\nexport interface ActionHookMeta {\n readonly id: string\n readonly kind: 'action-hook'\n}\n\nexport interface LoaderHandleMeta {\n readonly id: string\n readonly kind: 'loader'\n}\n\nexport interface LoaderHookMeta {\n readonly id: string\n readonly kind: 'loader-hook'\n}\n\nexport interface EventDescriptor {\n captures: () => unknown[]\n eventName?: string\n symbol: string\n}\n\nexport interface LazyReference<\n T extends (...args: any[]) => unknown = (...args: any[]) => unknown,\n> extends Function {\n (...args: Parameters<T>): ReturnType<T>\n [LAZY_META_KEY]?: LazyMeta\n}\n\nexport interface WatchReference<\n T extends (...args: any[]) => unknown = (...args: any[]) => unknown,\n> extends Function {\n (...args: Parameters<T>): ReturnType<T>\n [WATCH_META_KEY]?: WatchMeta\n}\n\nexport const __eclipsaComponent = <T>(\n component: Component<T>,\n symbol: string,\n captures: () => unknown[],\n projectionSlots?: Record<string, number>,\n options?: ComponentOptions,\n): Component<T> => {\n Object.defineProperty(component, COMPONENT_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n symbol,\n captures,\n ...(options?.optimizedRoot ? { optimizedRoot: true } : {}),\n ...(projectionSlots ? { projectionSlots } : {}),\n } satisfies ComponentMeta,\n writable: true,\n })\n return component\n}\n\nexport const __eclipsaLazy = <T extends (...args: any[]) => unknown>(\n symbol: string,\n fn: T,\n captures: () => unknown[],\n): EURL<T> => {\n const wrapped = ((...args: Parameters<T>) => fn(...args)) as LazyReference<T>\n Object.defineProperty(wrapped, LAZY_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n symbol,\n captures,\n } satisfies LazyMeta,\n writable: true,\n })\n return wrapped as EURL<T>\n}\n\nexport const __eclipsaWatch = <T extends (...args: any[]) => unknown>(\n symbol: string,\n fn: T,\n captures: () => unknown[],\n): T => {\n const wrapped = ((...args: Parameters<T>) => fn(...args)) as WatchReference<T>\n Object.defineProperty(wrapped, WATCH_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n symbol,\n captures,\n } satisfies WatchMeta,\n writable: true,\n })\n return wrapped as T\n}\n\nexport const __eclipsaEvent = (\n eventName: string,\n symbol: string,\n captures: () => unknown[],\n): EventDescriptor => ({\n eventName,\n symbol,\n captures,\n})\n\nexport const getComponentMeta = (value: unknown): ComponentMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[COMPONENT_META_KEY] as\n | ComponentMeta\n | undefined) ?? null\n )\n}\n\nexport const getLazyMeta = (value: unknown): LazyMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[LAZY_META_KEY] as LazyMeta | undefined) ??\n null\n )\n}\n\nexport const setNavigateMeta = <T extends Navigate>(target: T): T => {\n Object.defineProperty(target, NAVIGATE_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n kind: 'navigate',\n } satisfies NavigateMeta,\n writable: true,\n })\n return target\n}\n\nexport const getNavigateMeta = (value: unknown): NavigateMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[NAVIGATE_META_KEY] as\n | NavigateMeta\n | undefined) ?? null\n )\n}\n\nexport const setActionHookMeta = <T extends Function>(target: T, id: string): T => {\n Object.defineProperty(target, ACTION_HOOK_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n id,\n kind: 'action-hook',\n } satisfies ActionHookMeta,\n writable: true,\n })\n return target\n}\n\nexport const getActionHookMeta = (value: unknown): ActionHookMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[ACTION_HOOK_META_KEY] as\n | ActionHookMeta\n | undefined) ?? null\n )\n}\n\nexport const setActionHandleMeta = <T extends object>(target: T, id: string): T => {\n Object.defineProperty(target, ACTION_HANDLE_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n id,\n kind: 'action',\n } satisfies ActionHandleMeta,\n writable: true,\n })\n return target\n}\n\nexport const getActionHandleMeta = (value: unknown): ActionHandleMeta | null => {\n if (!value || typeof value !== 'object') {\n return null\n }\n return (\n ((value as Record<PropertyKey, unknown>)[ACTION_HANDLE_META_KEY] as\n | ActionHandleMeta\n | undefined) ?? null\n )\n}\n\nexport const setLoaderHookMeta = <T extends Function>(target: T, id: string): T => {\n Object.defineProperty(target, LOADER_HOOK_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n id,\n kind: 'loader-hook',\n } satisfies LoaderHookMeta,\n writable: true,\n })\n return target\n}\n\nexport const getLoaderHookMeta = (value: unknown): LoaderHookMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[LOADER_HOOK_META_KEY] as\n | LoaderHookMeta\n | undefined) ?? null\n )\n}\n\nexport const setLoaderHandleMeta = <T extends object>(target: T, id: string): T => {\n Object.defineProperty(target, LOADER_HANDLE_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n id,\n kind: 'loader',\n } satisfies LoaderHandleMeta,\n writable: true,\n })\n return target\n}\n\nexport const getLoaderHandleMeta = (value: unknown): LoaderHandleMeta | null => {\n if (!value || typeof value !== 'object') {\n return null\n }\n return (\n ((value as Record<PropertyKey, unknown>)[LOADER_HANDLE_META_KEY] as\n | LoaderHandleMeta\n | undefined) ?? null\n )\n}\n\nconst getActionHookRegistry = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[ACTION_HOOK_REGISTRY_KEY]\n if (existing instanceof Map) {\n return existing as Map<string, Function>\n }\n const created = new Map<string, Function>()\n globalRecord[ACTION_HOOK_REGISTRY_KEY] = created\n return created\n}\n\nexport const registerActionHook = <T extends Function>(id: string, hook: T): T => {\n getActionHookRegistry().set(id, hook)\n return hook\n}\n\nexport const getRegisteredActionHook = <T extends Function>(id: string): T | null =>\n (getActionHookRegistry().get(id) as T | undefined) ?? null\n\nexport const getRegisteredActionHookIds = () => [...getActionHookRegistry().keys()]\n\nconst getLoaderHookRegistry = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[LOADER_HOOK_REGISTRY_KEY]\n if (existing instanceof Map) {\n return existing as Map<string, Function>\n }\n const created = new Map<string, Function>()\n globalRecord[LOADER_HOOK_REGISTRY_KEY] = created\n return created\n}\n\nexport const registerLoaderHook = <T extends Function>(id: string, hook: T): T => {\n getLoaderHookRegistry().set(id, hook)\n return hook\n}\n\nexport const getRegisteredLoaderHook = <T extends Function>(id: string): T | null =>\n (getLoaderHookRegistry().get(id) as T | undefined) ?? null\n\nexport const getRegisteredLoaderHookIds = () => [...getLoaderHookRegistry().keys()]\n\nexport const getWatchMeta = (value: unknown): WatchMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[WATCH_META_KEY] as WatchMeta | undefined) ??\n null\n )\n}\n\nexport const getEventMeta = (value: unknown): EventDescriptor | LazyMeta | null => {\n if (value && typeof value === 'object') {\n const descriptor = value as EventDescriptor\n if (typeof descriptor.symbol === 'string' && typeof descriptor.captures === 'function') {\n return descriptor\n }\n }\n return getLazyMeta(value)\n}\n\nexport const setSignalMeta = <T>(target: { value: T }, meta: SignalMeta<T>): { value: T } => {\n Object.defineProperty(target, SIGNAL_META_KEY, {\n configurable: true,\n enumerable: false,\n value: meta,\n writable: true,\n })\n return target\n}\n\nexport const getSignalMeta = <T>(value: unknown): SignalMeta<T> | null => {\n if (!value || typeof value !== 'object') {\n return null\n }\n return (\n ((value as Record<PropertyKey, unknown>)[SIGNAL_META_KEY] as SignalMeta<T> | undefined) ?? null\n )\n}\n","export const ROUTE_LINK_ATTR = 'data-e-link'\nexport const ROUTE_DATA_ENDPOINT = '/__eclipsa/route-data'\nexport const ROUTE_DATA_REQUEST_HEADER = 'x-eclipsa-route-data'\nexport const ROUTE_MANIFEST_ELEMENT_ID = 'eclipsa-route-manifest'\nexport const ROUTE_PREFETCH_ATTR = 'data-e-link-prefetch'\nexport const ROUTE_PREFLIGHT_ENDPOINT = '/__eclipsa/route-preflight'\nexport const ROUTE_PREFLIGHT_REQUEST_HEADER = 'x-eclipsa-route-preflight'\nexport const ROUTE_REPLACE_ATTR = 'data-e-link-replace'\n\nexport interface NavigateOptions {\n replace?: boolean\n}\n\nexport interface Navigate {\n (href: string, options?: NavigateOptions): Promise<void>\n readonly isNavigating: boolean\n}\n\nexport type LinkPrefetchMode = 'focus' | 'hover' | 'intent' | 'none'\n\nexport interface RouteLocation {\n readonly hash: string\n readonly href: string\n readonly pathname: string\n readonly search: string\n}\n\nexport type RouteParams = Record<string, string | string[] | undefined>\n\nexport interface StaticPath {\n params: RouteParams\n}\n\nexport type GetStaticPaths = () => StaticPath[] | Promise<StaticPath[]>\n\nexport interface RoutePathSegment {\n kind: 'static' | 'required' | 'optional' | 'rest'\n value: string\n}\n\nexport interface RouteModuleManifest {\n error: string | null\n hasMiddleware: boolean\n layouts: string[]\n loading: string | null\n notFound: string | null\n page: string | null\n routePath: string\n segments: RoutePathSegment[]\n server: string | null\n}\n\nexport type RouteManifest = RouteModuleManifest[]\n","import type { JSX } from '../jsx/types.ts'\nimport { FRAGMENT } from '../jsx/shared.ts'\nimport { isSSRAttrValue, isSSRTemplate, jsxDEV } from '../jsx/jsx-dev-runtime.ts'\nimport { isPendingSignalError, isSuspenseType, type SuspenseProps } from './suspense.ts'\nimport type { ResumeHmrUpdatePayload } from './resume-hmr.ts'\nimport {\n deserializePublicValue,\n serializePublicValue,\n type SerializedReference,\n type SerializedValue,\n} from './hooks.ts'\nimport { escapeJSONScriptText } from './serialize.ts'\nimport type { Component } from './component.ts'\nimport type { Insertable } from './client/types.ts'\nimport {\n getContextProviderMeta,\n getRuntimeContextReference,\n materializeRuntimeContext,\n materializeRuntimeContextProvider,\n} from './context.ts'\nimport {\n ROUTE_METADATA_HEAD_ATTR,\n composeRouteMetadata,\n type RouteMetadataExport,\n} from './metadata.ts'\nimport {\n __eclipsaComponent,\n getActionHandleMeta,\n getActionHookMeta,\n getComponentMeta,\n getEventMeta,\n getRegisteredActionHookIds,\n getRegisteredActionHook,\n getRegisteredLoaderHookIds,\n getRegisteredLoaderHook,\n getLazyMeta,\n getLoaderHandleMeta,\n getLoaderHookMeta,\n getNavigateMeta,\n getSignalMeta,\n getWatchMeta,\n setNavigateMeta,\n setSignalMeta,\n type ComponentMeta,\n type EventDescriptor,\n type LazyMeta,\n type SignalMeta,\n} from './internal.ts'\nimport {\n ROUTE_DATA_ENDPOINT,\n ROUTE_LINK_ATTR,\n ROUTE_PREFETCH_ATTR,\n ROUTE_PREFLIGHT_REQUEST_HEADER,\n ROUTE_REPLACE_ATTR,\n type LinkPrefetchMode,\n type Navigate,\n type NavigateOptions,\n type RouteManifest,\n type RouteLocation,\n type RouteModuleManifest,\n type RouteParams,\n} from './router-shared.ts'\n\nconst CONTAINER_STACK_KEY = Symbol.for('eclipsa.container-stack')\nconst CONTEXT_VALUE_STACK_KEY = Symbol.for('eclipsa.context-value-stack')\nconst FRAME_STACK_KEY = Symbol.for('eclipsa.frame-stack')\nconst DIRTY_FLUSH_PROMISE_KEY = Symbol.for('eclipsa.dirty-flush-promise')\nconst ASYNC_SIGNAL_SNAPSHOT_CACHE_KEY = Symbol.for('eclipsa.async-signal-snapshot-cache')\nconst STANDALONE_SIGNAL_ID_KEY = Symbol.for('eclipsa.standalone-signal-id')\nconst ACTION_FORM_ATTR = 'data-e-action-form'\nconst ROUTER_EVENT_STATE_KEY = Symbol.for('eclipsa.router-event-state')\nconst ROUTER_CURRENT_PATH_SIGNAL_ID = '$router:path'\nconst ROUTER_CURRENT_URL_SIGNAL_ID = '$router:url'\nconst ROUTER_IS_NAVIGATING_SIGNAL_ID = '$router:isNavigating'\nconst ROUTER_LINK_BOUND_KEY = Symbol.for('eclipsa.router-link-bound')\nconst ROUTER_LINK_PREFETCH_BOUND_KEY = Symbol.for('eclipsa.router-link-prefetch-bound')\nconst ROUTE_NOT_FOUND_KEY = Symbol.for('eclipsa.route-not-found')\nconst ROUTE_PARAMS_PROP = '__eclipsa_route_params'\nconst ROUTE_ERROR_PROP = '__eclipsa_route_error'\nconst ROUTE_SLOT_ROUTE_KEY = Symbol.for('eclipsa.route-slot-route')\nconst RESUME_CONTAINERS_KEY = Symbol.for('eclipsa.resume-containers')\nexport const RESUME_STATE_ELEMENT_ID = 'eclipsa-resume'\nexport const RESUME_FINAL_STATE_ELEMENT_ID = 'eclipsa-resume-final'\nexport const SCOPED_STYLE_ATTR = 'data-e-scope'\nconst ROOT_COMPONENT_ID = '$root'\nconst SUSPENSE_COMPONENT_SYMBOL = '$suspense'\nconst ROUTE_SLOT_TYPE = 'route-slot'\nconst PROJECTION_SLOT_TYPE = 'projection-slot'\nconst CONTAINER_ID_KEY = Symbol.for('eclipsa.runtime-container-id')\nconst RENDER_COMPONENT_TYPE_KEY = Symbol.for('eclipsa.render-component-type')\nconst RENDER_REFERENCE_KIND = 'render'\nconst REF_SIGNAL_ATTR = 'data-e-ref'\nconst STREAM_STATE_KEY = '__eclipsa_stream'\nconst PENDING_RESUME_LINK_KEY = '__eclipsa_pending_route_link'\nconst BIND_VALUE_PROP = 'bind:value'\nconst BIND_CHECKED_PROP = 'bind:checked'\nconst BIND_VALUE_ATTR = 'data-e-bind-value'\nconst BIND_CHECKED_ATTR = 'data-e-bind-checked'\nconst CLIENT_INSERT_OWNER_SYMBOL = '$client-insert-root'\nconst CLIENT_INSERT_OWNER_ID_PREFIX = '$insert:'\nconst DOM_TEXT_NODE = 3\nconst DOM_COMMENT_NODE = 8\nconst DOM_SHOW_COMMENT = 0x80\ntype DomConstructorName =\n | 'Element'\n | 'HTMLElement'\n | 'HTMLInputElement'\n | 'HTMLSelectElement'\n | 'HTMLTextAreaElement'\n | 'HTMLAnchorElement'\n | 'HTMLFormElement'\n\nexport interface ResumeComponentPayload {\n optimizedRoot?: boolean\n props: SerializedValue\n projectionSlots?: Record<string, number>\n scope: string\n signalIds: string[]\n symbol: string\n visibleCount: number\n watchCount: number\n}\n\ninterface ResumeWatchPayload {\n componentId: string\n mode: WatchMode\n scope: string\n signals: string[]\n symbol: string\n}\n\ninterface ResumeActionPayload {\n error: SerializedValue\n input: SerializedValue\n result: SerializedValue\n}\n\ninterface ResumeVisiblePayload {\n componentId: string\n scope: string\n symbol: string\n}\n\nexport interface ResumeLoaderPayload {\n data: SerializedValue\n error: SerializedValue\n loaded: boolean\n}\n\ninterface LoaderSnapshot {\n data: unknown\n error: unknown\n loaded: boolean\n}\n\nexport interface ResumePayload {\n actions: Record<string, ResumeActionPayload>\n components: Record<string, ResumeComponentPayload>\n loaders: Record<string, ResumeLoaderPayload>\n scopes: Record<string, SerializedValue[]>\n signals: Record<string, SerializedValue>\n subscriptions: Record<string, string[]>\n symbols: Record<string, string>\n visibles: Record<string, ResumeVisiblePayload>\n watches: Record<string, ResumeWatchPayload>\n}\n\ninterface StreamedSuspenseChunk {\n boundaryId: string\n payloadScriptId: string\n templateId: string\n}\n\ninterface StreamState {\n enqueue: (chunk: StreamedSuspenseChunk) => void\n pending: StreamedSuspenseChunk[]\n process?: () => Promise<void>\n processing?: Promise<void> | null\n}\n\ninterface SignalRecord<T = unknown> {\n effects: Set<ReactiveEffect>\n handle: {\n value: T\n }\n id: string\n subscribers: Set<string>\n value: T\n}\n\ntype CleanupCallback = () => void\n\nexport type RuntimeContextToken<T = unknown> = symbol & {\n __eclipsa_context_type__?: T\n}\n\ninterface RuntimeContextValue {\n token: RuntimeContextToken\n value: unknown\n}\n\nconst getDomContexts = (value: unknown): Array<Window | typeof globalThis> => {\n const contexts: Array<Window | typeof globalThis> = []\n if (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n return contexts\n }\n if ('ownerDocument' in value) {\n const ownerDocument = (value as { ownerDocument?: Document | null }).ownerDocument\n if (ownerDocument?.defaultView) {\n contexts.push(ownerDocument.defaultView)\n }\n }\n if ('defaultView' in value) {\n const defaultView = (value as { defaultView?: Window | null }).defaultView\n if (defaultView) {\n contexts.push(defaultView)\n }\n }\n contexts.push(globalThis)\n return contexts\n}\n\nconst isDomInstance = <T>(value: unknown, name: DomConstructorName): value is T => {\n for (const context of getDomContexts(value)) {\n const ctor = (context as Record<DomConstructorName, unknown>)[name]\n if (typeof ctor === 'function' && value instanceof ctor) {\n return true\n }\n }\n return false\n}\n\nconst hasOwnerDocument = (value: unknown): value is ParentNode & { ownerDocument: Document } =>\n !!value &&\n (typeof value === 'object' || typeof value === 'function') &&\n 'ownerDocument' in value &&\n !!(value as { ownerDocument?: Document | null }).ownerDocument\n\nconst isElementNode = (value: unknown): value is Element =>\n isDomInstance<Element>(value, 'Element') || isDomInstance<HTMLElement>(value, 'HTMLElement')\n\nconst isHTMLElementNode = (value: unknown): value is HTMLElement =>\n isDomInstance<HTMLElement>(value, 'HTMLElement')\n\nconst isHTMLInputElementNode = (value: unknown): value is HTMLInputElement =>\n isDomInstance<HTMLInputElement>(value, 'HTMLInputElement')\n\nconst isHTMLSelectElementNode = (value: unknown): value is HTMLSelectElement =>\n isDomInstance<HTMLSelectElement>(value, 'HTMLSelectElement')\n\nconst isHTMLTextAreaElementNode = (value: unknown): value is HTMLTextAreaElement =>\n isDomInstance<HTMLTextAreaElement>(value, 'HTMLTextAreaElement')\n\nconst isTextEntryElement = (value: unknown): value is HTMLInputElement | HTMLTextAreaElement =>\n isHTMLInputElementNode(value) || isHTMLTextAreaElementNode(value)\n\nconst isHTMLAnchorElementNode = (value: unknown): value is HTMLAnchorElement =>\n isDomInstance<HTMLAnchorElement>(value, 'HTMLAnchorElement')\n\nconst isHTMLFormElementNode = (value: unknown): value is HTMLFormElement =>\n isDomInstance<HTMLFormElement>(value, 'HTMLFormElement')\n\ninterface CleanupSlot {\n callbacks: CleanupCallback[]\n}\n\ninterface ComponentState {\n active: boolean\n activateModeOnFlush?: 'patch' | 'replace'\n didMount: boolean\n end?: Comment\n id: string\n mountCleanupSlots: CleanupSlot[]\n optimizedRoot?: boolean\n parentId: string | null\n prefersEffectOnlyLocalSignalWrites?: boolean\n props: unknown\n projectionSlots: Record<string, number> | null\n rawProps?: Record<string, unknown> | null\n renderEffectCleanupSlot: CleanupSlot\n reuseExistingDomOnActivate?: boolean\n reuseProjectionSlotDomOnActivate?: boolean\n scopeId: string\n signalIds: string[]\n start?: Comment\n symbol: string\n suspensePromise?: Promise<unknown> | null\n visibleCount: number\n watchCount: number\n}\n\ninterface RenderFrame {\n childCursor: number\n component: ComponentState\n container: RuntimeContainer\n effectCleanupSlot: CleanupSlot\n insertCursor: number\n mountCallbacks: Array<() => void>\n projectionState: {\n counters: Map<string, number>\n reuseExistingDom: boolean\n reuseProjectionSlotDom: boolean\n }\n visitedDescendants: Set<string>\n mode: 'client' | 'ssr'\n scopedStyles: ScopedStyleEntry[]\n signalCursor: number\n visibleCursor: number\n watchCursor: number\n}\n\nexport interface ClientInsertOwner {\n childIndex: number\n componentId: string\n projectionCounters: Array<[string, number]>\n}\n\ninterface ScopedStyleEntry {\n attributes: Record<string, unknown>\n cssText: string\n}\n\ninterface RouterEventState {\n originalPreventDefault: () => void\n routerPrevented: boolean\n userPrevented: boolean\n}\n\ninterface RouterState {\n currentPath: { value: string }\n currentRoute: LoadedRoute | null\n currentUrl: { value: string }\n defaultTitle: string\n isNavigating: { value: boolean }\n loadedRoutes: Map<string, LoadedRoute>\n location: RouteLocation\n manifest: RouteManifest\n navigate: Navigate\n prefetchedLoaders: Map<string, Map<string, LoaderSnapshot>>\n routeModuleBusts: Map<string, number>\n routePrefetches: Map<string, Promise<RoutePrefetchResult>>\n sequence: number\n}\n\nexport interface RuntimeContainer {\n actions: Map<string, unknown>\n actionStates: Map<\n string,\n {\n error: unknown\n input: unknown\n result: unknown\n }\n >\n components: Map<string, ComponentState>\n dirty: Set<string>\n dirtyFlushQueued: boolean\n doc?: Document\n eventDispatchPromise: Promise<void> | null\n id: string\n imports: Map<string, Promise<RuntimeSymbolModule>>\n interactivePrefetchCheckQueued: boolean\n loaderStates: Map<\n string,\n {\n data: unknown\n error: unknown\n loaded: boolean\n }\n >\n loaders: Map<string, unknown>\n nextComponentId: number\n nextElementId: number\n nextScopeId: number\n nextSignalId: number\n pendingSuspensePromises: Set<Promise<unknown>>\n resumeReadyPromise: Promise<void> | null\n rootChildCursor: number\n rootElement?: HTMLElement\n router: RouterState | null\n asyncSignalStates: Map<string, unknown>\n asyncSignalSnapshotCache: Map<string, unknown>\n atoms: WeakMap<object, string>\n nextAtomId: number\n scopes: Map<string, SerializedValue[]>\n signals: Map<string, SignalRecord>\n symbols: Map<string, string>\n visibilityListenersCleanup: (() => void) | null\n visibilityCheckQueued: boolean\n visibles: Map<string, VisibleState>\n watches: Map<string, WatchState>\n}\n\ninterface RuntimeSymbolModule {\n default: (scope: unknown[], propsOrArg?: unknown, ...args: unknown[]) => unknown\n}\n\ninterface ReactiveEffect {\n fn: () => void\n signals: Set<SignalRecord>\n}\n\nconst COMPONENT_BOUNDARY_PROPS_CHANGED = Symbol.for('eclipsa.component-boundary-props-changed')\nconst COMPONENT_BOUNDARY_SYMBOL_CHANGED = Symbol.for('eclipsa.component-boundary-symbol-changed')\n\nconst isMissingGeneratedScopeReferenceError = (error: unknown): error is ReferenceError =>\n error instanceof ReferenceError && /\\b__scope\\b/.test(error.message)\n\nconst toRuntimeError = (error: unknown) =>\n error instanceof Error ? error : new Error(typeof error === 'string' ? error : String(error))\n\nconst areShallowEqualRenderProps = (\n previous: Record<string, unknown> | null,\n next: Record<string, unknown> | null,\n) => {\n if (previous === next) {\n return true\n }\n if (!previous || !next) {\n return !previous && !next\n }\n\n const previousKeys = Object.keys(previous)\n const nextKeys = Object.keys(next)\n if (previousKeys.length !== nextKeys.length) {\n return false\n }\n\n for (const key of previousKeys) {\n if (!Object.hasOwn(next, key) || !Object.is(previous[key], next[key])) {\n return false\n }\n }\n\n for (const hiddenKey of [ROUTE_PARAMS_PROP, ROUTE_ERROR_PROP] as const) {\n const previousHas = Object.hasOwn(previous, hiddenKey)\n const nextHas = Object.hasOwn(next, hiddenKey)\n if (previousHas !== nextHas) {\n return false\n }\n if (previousHas && !Object.is(previous[hiddenKey], next[hiddenKey])) {\n return false\n }\n }\n\n return true\n}\n\nconst wrapGeneratedScopeReferenceError = (\n error: unknown,\n context: {\n componentId?: string\n phase: string\n symbolId?: string\n },\n) => {\n const baseError = toRuntimeError(error)\n if (!isMissingGeneratedScopeReferenceError(baseError)) {\n return baseError\n }\n\n const location = [\n context.componentId ? `component \"${context.componentId}\"` : null,\n context.symbolId ? `symbol \"${context.symbolId}\"` : null,\n ]\n .filter(Boolean)\n .join(', ')\n\n const wrapped = new Error(\n `Eclipsa runtime failed while ${context.phase}${location ? ` ${location}` : ''}. The generated resumable symbol referenced \"__scope\" outside its valid scope. This usually means a same-file helper was transformed incorrectly during symbol compilation. Inline that helper into the component as a workaround. Original error: ${baseError.message}`,\n { cause: baseError },\n )\n wrapped.name = 'EclipsaRuntimeError'\n return wrapped\n}\n\ntype WatchDependency = { value: unknown } | (() => unknown)\ntype EffectOptions = {\n dependencies?: WatchDependency[]\n errorLabel?: string\n untracked?: boolean\n}\ntype WatchMode = 'dynamic' | 'explicit'\ntype RouteRenderer = (props: unknown) => unknown\n\ninterface LoadedRouteModule {\n metadata: RouteMetadataExport | null\n renderer: RouteRenderer\n symbol: string | null\n url: string\n}\n\ninterface LoadedRoute {\n entry: RouteModuleManifest\n error: unknown\n layouts: LoadedRouteModule[]\n params: RouteParams\n pathname: string\n page: LoadedRouteModule\n render: RouteRenderer\n}\n\ninterface RoutePreflightSuccess {\n ok: true\n}\n\ninterface RoutePreflightRedirect {\n location: string\n ok: false\n}\n\ninterface RoutePreflightDocumentFallback {\n document: true\n ok: false\n}\n\ntype RoutePreflightResult =\n | RoutePreflightSuccess\n | RoutePreflightRedirect\n | RoutePreflightDocumentFallback\n\ninterface RouteDataSuccess {\n finalHref: string\n finalPathname: string\n kind: 'page' | 'not-found'\n loaders: Record<string, ResumeLoaderPayload>\n ok: true\n}\n\ninterface RouteDataRedirect {\n location: string\n ok: false\n}\n\ninterface RouteDataDocumentFallback {\n document: true\n ok: false\n}\n\ntype RouteDataResponse = RouteDataSuccess | RouteDataRedirect | RouteDataDocumentFallback\ntype RoutePrefetchResult = RouteDataResponse\n\ninterface RouteSlotValue {\n __eclipsa_type: typeof ROUTE_SLOT_TYPE\n pathname: string\n startLayoutIndex: number\n}\n\ninterface RouteSlotCarrier extends RouteSlotValue {\n [ROUTE_SLOT_ROUTE_KEY]?: LoadedRoute\n}\n\ninterface ProjectionSlotValue {\n __eclipsa_type: typeof PROJECTION_SLOT_TYPE\n componentId: string\n name: string\n occurrence: number\n source: unknown\n}\n\ninterface WatchState {\n cleanupSlot: CleanupSlot\n componentId: string\n effect: ReactiveEffect\n id: string\n mode: WatchMode\n pending: Promise<void> | null\n run: (() => void) | null\n scopeId: string\n symbol: string\n track: (() => void) | null\n}\n\ninterface VisibleState {\n cleanupSlot: CleanupSlot\n componentId: string\n done: boolean\n id: string\n pending: Promise<void> | null\n run: (() => void | Promise<void>) | null\n scopeId: string\n symbol: string\n}\n\ninterface PendingLinkNavigation {\n href: string\n replace: boolean\n state: RouterEventState\n}\n\ninterface PendingResumeLinkNavigation {\n href: string\n replace: boolean\n}\n\ntype NavigationMode = 'pop' | 'push' | 'replace'\n\ntype RenderObject = Extract<\n JSX.Element,\n {\n isStatic: boolean\n props: Record<string, unknown>\n type: JSX.Type\n }\n>\n\ninterface RenderComponentTypeRef {\n scopeId: string\n symbol: string\n}\n\ninterface ForValue<T = unknown> {\n __e_for: true\n arr: readonly T[]\n fallback?: JSX.Element\n fn: (e: T, i: number) => JSX.Element\n key?: (e: T, i: number) => string | number | symbol\n}\n\ninterface ShowValue<T = unknown> {\n __e_show: true\n children: JSX.Element | ((value: T) => JSX.Element)\n fallback?: JSX.Element | ((value: T) => JSX.Element)\n when: T\n}\n\nconst resolvedRuntimeSymbols = new WeakMap<RuntimeContainer, Map<string, RuntimeSymbolModule>>()\nconst managedElementAttributes = new WeakMap<Element, Set<string>>()\nconst listNodeChildren = (\n node: { childNodes?: Iterable<Node> | ArrayLike<Node> } | null | undefined,\n) => Array.from((node?.childNodes ?? []) as Iterable<Node> | ArrayLike<Node>)\n\nconst getElementAttributeNames = (element: Element): string[] => {\n const withGetAttributeNames = element as Element & { getAttributeNames?: () => string[] }\n if (typeof withGetAttributeNames.getAttributeNames === 'function') {\n return withGetAttributeNames.getAttributeNames.call(element)\n }\n\n const attributes = (\n element as Element & {\n attributes?: Map<string, string> | ArrayLike<Attr | { name?: string }>\n }\n ).attributes\n if (attributes instanceof Map) {\n return [...attributes.keys()]\n }\n if (attributes && typeof attributes.length === 'number') {\n const names: string[] = []\n for (let index = 0; index < attributes.length; index += 1) {\n const attribute = attributes[index]\n if (attribute && typeof attribute === 'object' && 'name' in attribute) {\n const name = attribute.name\n if (typeof name === 'string') {\n names.push(name)\n }\n }\n }\n return names\n }\n\n return []\n}\n\nconst hasElementAttribute = (element: Element, name: string): boolean | null => {\n const withHasAttribute = element as Element & { hasAttribute?: (name: string) => boolean }\n if (typeof withHasAttribute.hasAttribute === 'function') {\n return withHasAttribute.hasAttribute.call(element, name)\n }\n\n const withGetAttribute = element as Element & { getAttribute?: (name: string) => string | null }\n if (typeof withGetAttribute.getAttribute === 'function') {\n return withGetAttribute.getAttribute.call(element, name) !== null\n }\n\n const attributes = (element as Element & { attributes?: Map<string, string> }).attributes\n if (attributes instanceof Map) {\n return attributes.has(name)\n }\n\n return null\n}\nconst insertMarkerNodeCounts = new WeakMap<Comment, number>()\n\nconst getResolvedRuntimeSymbols = (container: RuntimeContainer) => {\n const existing = resolvedRuntimeSymbols.get(container)\n if (existing) {\n return existing\n }\n const created = new Map<string, RuntimeSymbolModule>()\n resolvedRuntimeSymbols.set(container, created)\n return created\n}\n\nexport const invalidateRuntimeSymbolCaches = (\n container: RuntimeContainer,\n symbolIds: Iterable<string>,\n) => {\n const resolved = getResolvedRuntimeSymbols(container)\n for (const symbolId of symbolIds) {\n container.imports.delete(symbolId)\n resolved.delete(symbolId)\n }\n}\n\nconst cloneManagedAttributeSnapshot = (element: Element) =>\n new Set(getElementAttributeNames(element))\n\nconst replaceManagedAttributeSnapshot = (element: Element, names: Iterable<string>) => {\n managedElementAttributes.set(element, new Set(names))\n}\n\nconst getManagedAttributeSnapshot = (element: Element) =>\n managedElementAttributes.get(element) ?? null\n\nexport const syncManagedAttributeSnapshot = (element: Element, name: string) => {\n const snapshot = getManagedAttributeSnapshot(element) ?? new Set<string>()\n const hasAttribute = hasElementAttribute(element, name)\n if (hasAttribute === true) {\n snapshot.add(name)\n } else if (hasAttribute === false) {\n snapshot.delete(name)\n } else {\n snapshot.add(name)\n }\n replaceManagedAttributeSnapshot(element, snapshot)\n}\n\nexport const rememberManagedAttributesForNode = (node: Node | null | undefined) => {\n if (!node) {\n return\n }\n\n const visit = (current: Node) => {\n if (isElementNode(current)) {\n replaceManagedAttributeSnapshot(current, cloneManagedAttributeSnapshot(current))\n }\n for (const child of listNodeChildren(current)) {\n visit(child)\n }\n }\n\n visit(node)\n}\n\nexport const rememberManagedAttributesForNodes = (nodes: Iterable<Node>) => {\n for (const node of nodes) {\n rememberManagedAttributesForNode(node)\n }\n}\n\nexport const rememberInsertMarkerRange = (\n marker: Node | null | undefined,\n nodes: Iterable<Node>,\n) => {\n if (!(typeof Comment !== 'undefined' ? marker instanceof Comment : marker?.nodeType === 8)) {\n return\n }\n\n let count = 0\n for (const _node of nodes) {\n count += 1\n }\n insertMarkerNodeCounts.set(marker as Comment, count)\n}\n\nconst withResumeHmrTimestamp = (url: string, timestamp: number) => {\n const parsed = new URL(url, 'http://localhost')\n parsed.searchParams.set('t', timestamp.toString())\n return `${parsed.pathname}${parsed.search}${parsed.hash}`\n}\n\nconst canBustRuntimeSymbolUrl = (url: string) => parseSymbolIdFromUrl(url) !== null\n\nexport const bustRuntimeSymbolUrls = (\n container: RuntimeContainer,\n symbolIds: Iterable<string>,\n timestamp: number,\n) => {\n for (const symbolId of symbolIds) {\n const current = container.symbols.get(symbolId)\n if (!current || !canBustRuntimeSymbolUrl(current)) {\n continue\n }\n container.symbols.set(symbolId, withResumeHmrTimestamp(current, timestamp))\n }\n}\n\nconst isRenderObject = (value: unknown): value is RenderObject =>\n typeof value === 'object' && value !== null && 'type' in value && 'props' in value\n\nconst getContainerStack = (): RuntimeContainer[] => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[CONTAINER_STACK_KEY]\n if (Array.isArray(existing)) {\n return existing as RuntimeContainer[]\n }\n const created: RuntimeContainer[] = []\n globalRecord[CONTAINER_STACK_KEY] = created\n return created\n}\n\nconst getContextValueStack = (): RuntimeContextValue[] => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[CONTEXT_VALUE_STACK_KEY]\n if (Array.isArray(existing)) {\n return existing as RuntimeContextValue[]\n }\n const created: RuntimeContextValue[] = []\n globalRecord[CONTEXT_VALUE_STACK_KEY] = created\n return created\n}\n\nconst getFrameStack = (): RenderFrame[] => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[FRAME_STACK_KEY]\n if (Array.isArray(existing)) {\n return existing as RenderFrame[]\n }\n const created: RenderFrame[] = []\n globalRecord[FRAME_STACK_KEY] = created\n return created\n}\n\nconst getResumeContainers = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[RESUME_CONTAINERS_KEY]\n if (existing instanceof Set) {\n return existing as Set<RuntimeContainer>\n }\n const created = new Set<RuntimeContainer>()\n globalRecord[RESUME_CONTAINERS_KEY] = created\n return created\n}\n\nconst getCurrentContainer = (): RuntimeContainer | null => {\n const stack = getContainerStack()\n return stack.length > 0 ? stack[stack.length - 1] : null\n}\n\nconst getAsyncSignalSnapshotCache = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[ASYNC_SIGNAL_SNAPSHOT_CACHE_KEY]\n if (existing instanceof Map) {\n return existing as Map<string, unknown>\n }\n const created = new Map<string, unknown>()\n globalRecord[ASYNC_SIGNAL_SNAPSHOT_CACHE_KEY] = created\n return created\n}\n\nexport const readAsyncSignalSnapshot = (\n id: string,\n container: RuntimeContainer | null = getCurrentContainer(),\n) =>\n container?.asyncSignalStates.get(id) ??\n container?.asyncSignalSnapshotCache.get(id) ??\n getAsyncSignalSnapshotCache().get(id)\n\nexport const writeAsyncSignalSnapshot = (\n id: string,\n value: unknown,\n container: RuntimeContainer | null = getCurrentContainer(),\n) => {\n container?.asyncSignalStates.set(id, value)\n container?.asyncSignalSnapshotCache.set(id, value)\n if (!container) {\n getAsyncSignalSnapshotCache().set(id, value)\n }\n}\n\nexport const clearAsyncSignalSnapshot = (\n id: string,\n container: RuntimeContainer | null = getCurrentContainer(),\n) => {\n container?.asyncSignalStates.delete(id)\n container?.asyncSignalSnapshotCache.delete(id)\n if (!container) {\n getAsyncSignalSnapshotCache().delete(id)\n }\n}\n\nconst getCurrentFrame = (): RenderFrame | null => {\n const stack = getFrameStack()\n return stack.length > 0 ? stack[stack.length - 1] : null\n}\n\nexport const shouldReconnectDetachedInsertMarkers = (container: RuntimeContainer | null) => {\n const frame = getCurrentFrame()\n if (!container || !frame || frame.container !== container) {\n return true\n }\n return frame.projectionState.reuseExistingDom\n}\n\nconst hasScopedStyles = (frame: RenderFrame | null) => !!frame && frame.scopedStyles.length > 0\n\nconst getScopedStyleRootSelector = (scopeId: string) =>\n `[${SCOPED_STYLE_ATTR}=\"${escapeAttr(scopeId)}\"]`\n\nconst wrapScopedStyleCss = (scopeId: string, cssText: string) =>\n `@scope (${getScopedStyleRootSelector(scopeId)}) {\\n${cssText}\\n}`\n\nconst renderScopedStyleString = (scopeId: string, style: ScopedStyleEntry) => {\n const attrParts = Object.entries(style.attributes)\n .filter(([, value]) => value !== false && value !== undefined && value !== null)\n .map(([name, value]) => (value === true ? name : `${name}=\"${escapeAttr(String(value))}\"`))\n const attrs = attrParts.length > 0 ? ` ${attrParts.join(' ')}` : ''\n return `<style${attrs}>${escapeText(wrapScopedStyleCss(scopeId, style.cssText))}</style>`\n}\n\nconst renderScopedStyleNode = (\n container: RuntimeContainer,\n scopeId: string,\n style: ScopedStyleEntry,\n) => {\n const element = createElementNode(container.doc!, 'style')\n for (const [name, value] of Object.entries(style.attributes)) {\n if (value === false || value === undefined || value === null) {\n continue\n }\n if (value === true) {\n element.setAttribute(name, '')\n continue\n }\n element.setAttribute(name, String(value))\n }\n element.appendChild(container.doc!.createTextNode(wrapScopedStyleCss(scopeId, style.cssText)))\n return element\n}\n\nconst renderFrameScopedStylesToString = (frame: RenderFrame) =>\n frame.scopedStyles\n .map((style) => renderScopedStyleString(frame.component.scopeId, style))\n .join('')\n\nconst renderFrameScopedStylesToNodes = (frame: RenderFrame, container: RuntimeContainer) =>\n frame.scopedStyles.map((style) =>\n renderScopedStyleNode(container, frame.component.scopeId, style),\n )\n\nexport const registerRuntimeScopedStyle = (\n cssText: string,\n attributes: Record<string, unknown> = {},\n): void => {\n const frame = getCurrentFrame()\n if (!frame || frame.component.id === ROOT_COMPONENT_ID) {\n throw new Error('useStyleScoped() can only be used while rendering a component.')\n }\n\n if (cssText.length === 0) {\n return\n }\n\n const existing = frame.scopedStyles.find(\n (entry) =>\n entry.cssText === cssText && JSON.stringify(entry.attributes) === JSON.stringify(attributes),\n )\n if (existing) {\n return\n }\n\n frame.scopedStyles.push({\n attributes: { ...attributes },\n cssText,\n })\n}\n\nconst normalizeRoutePath = (pathname: string) => {\n const normalizedPath = pathname.trim() || '/'\n const withLeadingSlash = normalizedPath.startsWith('/') ? normalizedPath : `/${normalizedPath}`\n if (withLeadingSlash.length > 1 && withLeadingSlash.endsWith('/')) {\n return withLeadingSlash.slice(0, -1)\n }\n return withLeadingSlash\n}\n\nconst parseLocationHref = (href: string) => new URL(href, 'http://localhost')\n\nconst createStandaloneLocation = (): RouteLocation => ({\n get hash() {\n return typeof window === 'undefined' ? '' : window.location.hash\n },\n get href() {\n return typeof window === 'undefined' ? '/' : window.location.href\n },\n get pathname() {\n return typeof window === 'undefined' ? '/' : normalizeRoutePath(window.location.pathname)\n },\n get search() {\n return typeof window === 'undefined' ? '' : window.location.search\n },\n})\n\nconst createRouterLocation = (router: RouterState): RouteLocation => ({\n get hash() {\n return parseLocationHref(router.currentUrl.value).hash\n },\n get href() {\n return router.currentUrl.value\n },\n get pathname() {\n return normalizeRoutePath(parseLocationHref(router.currentUrl.value).pathname)\n },\n get search() {\n return parseLocationHref(router.currentUrl.value).search\n },\n})\n\nconst EMPTY_ROUTE_PARAMS = Object.freeze({}) as RouteParams\n\nconst splitRoutePath = (pathname: string) => normalizeRoutePath(pathname).split('/').filter(Boolean)\n\nconst matchRouteSegments = (\n segments: RouteModuleManifest['segments'],\n pathnameSegments: string[],\n routeIndex = 0,\n pathIndex = 0,\n params: RouteParams = {},\n): RouteParams | null => {\n if (routeIndex >= segments.length) {\n return pathIndex >= pathnameSegments.length ? params : null\n }\n\n const segment = segments[routeIndex]!\n switch (segment.kind) {\n case 'static':\n if (pathnameSegments[pathIndex] !== segment.value) {\n return null\n }\n return matchRouteSegments(segments, pathnameSegments, routeIndex + 1, pathIndex + 1, params)\n case 'required':\n if (pathIndex >= pathnameSegments.length) {\n return null\n }\n return matchRouteSegments(segments, pathnameSegments, routeIndex + 1, pathIndex + 1, {\n ...params,\n [segment.value]: pathnameSegments[pathIndex],\n })\n case 'optional': {\n const consumed =\n pathIndex < pathnameSegments.length\n ? matchRouteSegments(segments, pathnameSegments, routeIndex + 1, pathIndex + 1, {\n ...params,\n [segment.value]: pathnameSegments[pathIndex],\n })\n : null\n if (consumed) {\n return consumed\n }\n return matchRouteSegments(segments, pathnameSegments, routeIndex + 1, pathIndex, {\n ...params,\n [segment.value]: undefined,\n })\n }\n case 'rest': {\n const rest = pathnameSegments.slice(pathIndex)\n if (rest.length === 0) {\n return null\n }\n return matchRouteSegments(\n segments,\n pathnameSegments,\n segments.length,\n pathnameSegments.length,\n {\n ...params,\n [segment.value]: rest,\n },\n )\n }\n }\n}\n\nconst matchRouteManifest = (manifest: RouteManifest, pathname: string) => {\n const normalizedPath = normalizeRoutePath(pathname)\n const pathnameSegments = splitRoutePath(normalizedPath)\n for (const entry of manifest) {\n const params = matchRouteSegments(entry.segments, pathnameSegments)\n if (params) {\n return {\n entry,\n params,\n pathname: normalizedPath,\n }\n }\n }\n return null\n}\n\nconst scoreSpecialManifestEntry = (entry: RouteModuleManifest, pathname: string) => {\n const pathnameSegments = splitRoutePath(pathname)\n let score = 0\n for (\n let index = 0;\n index < entry.segments.length && index < pathnameSegments.length;\n index += 1\n ) {\n const segment = entry.segments[index]!\n const pathnameSegment = pathnameSegments[index]\n if (segment.kind === 'static') {\n if (segment.value !== pathnameSegment) {\n break\n }\n score += 10\n continue\n }\n score += segment.kind === 'rest' ? 1 : 2\n if (segment.kind === 'rest') {\n break\n }\n }\n return score\n}\n\nconst findSpecialManifestEntry = (\n manifest: RouteManifest,\n pathname: string,\n kind: 'error' | 'notFound',\n) => {\n const matched = matchRouteManifest(manifest, pathname)\n if (matched?.entry[kind]) {\n return matched\n }\n\n let best: ReturnType<typeof matchRouteManifest> = null\n let bestScore = -1\n for (const entry of manifest) {\n if (!entry[kind]) {\n continue\n }\n const score = scoreSpecialManifestEntry(entry, pathname)\n if (score > bestScore) {\n best = {\n entry,\n params: EMPTY_ROUTE_PARAMS,\n pathname: normalizeRoutePath(pathname),\n }\n bestScore = score\n }\n }\n return best\n}\n\nconst routeCacheKey = (\n pathname: string,\n variant: 'page' | 'loading' | 'error' | 'not-found' = 'page',\n) => `${normalizeRoutePath(pathname)}::${variant}`\n\nconst routePrefetchKey = (url: URL) => `${normalizeRoutePath(url.pathname)}${url.search}`\nconst isLoaderSignalId = (id: string) => id.startsWith('$loader:')\n\nlet currentEffect: ReactiveEffect | null = null\nlet currentCleanupSlot: CleanupSlot | null = null\n\nconst withoutTrackedEffect = <T>(fn: () => T): T => {\n const previous = currentEffect\n currentEffect = null\n try {\n return fn()\n } finally {\n currentEffect = previous\n }\n}\n\nconst createCleanupSlot = (): CleanupSlot => ({\n callbacks: [],\n})\n\nconst withCleanupSlot = <T>(slot: CleanupSlot, fn: () => T): T => {\n const previous = currentCleanupSlot\n currentCleanupSlot = slot\n try {\n return fn()\n } finally {\n currentCleanupSlot = previous\n }\n}\n\nconst disposeCleanupSlot = (slot: CleanupSlot | null | undefined) => {\n if (!slot || slot.callbacks.length === 0) {\n return\n }\n\n const callbacks = [...slot.callbacks].reverse()\n slot.callbacks.length = 0\n let firstError: unknown = null\n const previous = currentCleanupSlot\n currentCleanupSlot = null\n\n try {\n for (const callback of callbacks) {\n try {\n withoutTrackedEffect(callback)\n } catch (error) {\n firstError ??= error\n }\n }\n } finally {\n currentCleanupSlot = previous\n }\n\n if (firstError) {\n throw firstError\n }\n}\n\nconst resetComponentRenderEffects = (component: ComponentState) => {\n disposeCleanupSlot(component.renderEffectCleanupSlot)\n component.renderEffectCleanupSlot = createCleanupSlot()\n}\n\nconst syncEffectOnlyLocalSignalPreference = (component: ComponentState) => {\n component.prefersEffectOnlyLocalSignalWrites = component.optimizedRoot === true\n}\n\nconst clearEffectSignals = (effect: ReactiveEffect) => {\n for (const signal of effect.signals) {\n signal.effects.delete(effect)\n }\n effect.signals.clear()\n}\n\nconst collectTrackedDependencies = (effect: ReactiveEffect, fn: () => void) => {\n clearEffectSignals(effect)\n currentEffect = effect\n try {\n fn()\n } finally {\n currentEffect = null\n }\n}\n\nconst runWithoutDependencyTracking = <T>(fn: () => T): T => {\n const previousEffect = currentEffect\n currentEffect = null\n try {\n return fn()\n } finally {\n currentEffect = previousEffect\n }\n}\n\nconst trackWatchDependencies = (dependencies: WatchDependency[], errorLabel = 'useWatch') => {\n for (const dependency of dependencies) {\n if (typeof dependency === 'function') {\n dependency()\n continue\n }\n const signalMeta = getSignalMeta(dependency)\n if (!signalMeta) {\n throw new TypeError(`${errorLabel} dependencies must be signals or getter functions.`)\n }\n void dependency.value\n }\n}\n\nconst runWatchCallback = (\n effect: ReactiveEffect,\n cleanupSlot: CleanupSlot,\n fn: () => void,\n dependencies?: WatchDependency[],\n) => {\n disposeCleanupSlot(cleanupSlot)\n if (!dependencies) {\n collectTrackedDependencies(effect, () => {\n withCleanupSlot(cleanupSlot, fn)\n })\n return\n }\n collectTrackedDependencies(effect, () => {\n trackWatchDependencies(dependencies)\n })\n withCleanupSlot(cleanupSlot, fn)\n}\n\nconst createLocalWatchRunner =\n (\n effect: ReactiveEffect,\n cleanupSlot: CleanupSlot,\n fn: () => void,\n dependencies?: WatchDependency[],\n ) =>\n () => {\n runWatchCallback(effect, cleanupSlot, fn, dependencies)\n }\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (!value || typeof value !== 'object') {\n return false\n }\n const proto = Object.getPrototypeOf(value)\n return proto === Object.prototype || proto === null\n}\n\nconst isProjectionSlot = (value: unknown): value is ProjectionSlotValue =>\n isPlainObject(value) && value.__eclipsa_type === PROJECTION_SLOT_TYPE\n\nconst createProjectionSlot = (\n componentId: string,\n name: string,\n occurrence: number,\n source: unknown,\n): ProjectionSlotValue => ({\n __eclipsa_type: PROJECTION_SLOT_TYPE,\n componentId,\n name,\n occurrence,\n source,\n})\n\nconst encodeProjectionSlotName = (value: string) => encodeURIComponent(value)\nconst decodeProjectionSlotName = (value: string) => decodeURIComponent(value)\nconst encodeKeyedRangeToken = (value: string | number | symbol) => encodeURIComponent(String(value))\nconst decodeKeyedRangeToken = (value: string) => {\n try {\n return decodeURIComponent(value)\n } catch {\n return value\n }\n}\n\nconst createProjectionSlotMarker = (\n componentId: string,\n name: string,\n occurrence: number,\n kind: 'start' | 'end',\n) => `ec:s:${componentId}:${encodeProjectionSlotName(name)}:${occurrence}:${kind}`\nconst createKeyedRangeMarker = (value: string | number | symbol, kind: 'start' | 'end') =>\n `ec:k:${encodeKeyedRangeToken(value)}:${kind}`\n\nconst COMPONENT_BOUNDARY_MARKER_REGEX = /^ec:c:(.+):(start|end)$/\nconst INSERT_MARKER_REGEX = /^ec:i:(.+)$/\nconst KEYED_RANGE_MARKER_REGEX = /^ec:k:([^:]+):(start|end)$/\nconst PROJECTION_SLOT_MARKER_REGEX = /^ec:s:([^:]+):([^:]+):(\\d+):(start|end)$/\n\nconst parseComponentBoundaryMarker = (value: string) => {\n const matched = value.match(COMPONENT_BOUNDARY_MARKER_REGEX)\n if (!matched) {\n return null\n }\n return {\n id: matched[1],\n kind: matched[2] as 'start' | 'end',\n }\n}\n\nconst parseProjectionSlotMarker = (value: string) => {\n const matched = value.match(PROJECTION_SLOT_MARKER_REGEX)\n if (!matched) {\n return null\n }\n return {\n componentId: matched[1],\n kind: matched[4] as 'start' | 'end',\n key: `${matched[1]}:${matched[2]}:${matched[3]}`,\n name: decodeProjectionSlotName(matched[2]),\n occurrence: Number(matched[3]),\n }\n}\n\nconst parseKeyedRangeMarker = (value: string) => {\n const matched = value.match(KEYED_RANGE_MARKER_REGEX)\n if (!matched) {\n return null\n }\n return {\n key: decodeKeyedRangeToken(matched[1]!),\n kind: matched[2] as 'start' | 'end',\n }\n}\n\nconst parseInsertMarker = (value: string) => {\n const matched = value.match(INSERT_MARKER_REGEX)\n if (!matched) {\n return null\n }\n return {\n key: matched[1],\n }\n}\n\nconst getRenderComponentTypeRef = (value: unknown): RenderComponentTypeRef | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[RENDER_COMPONENT_TYPE_KEY] as\n | RenderComponentTypeRef\n | undefined) ?? null\n )\n}\n\nconst createMaterializedRenderComponentType = (\n container: RuntimeContainer,\n symbol: string,\n scopeId: string,\n) => {\n const component = __eclipsaComponent(\n ((props: unknown) => {\n const module = getResolvedRuntimeSymbols(container).get(symbol)\n if (!module) {\n throw new Error(`Missing preloaded render component symbol ${symbol}.`)\n }\n return module.default(materializeScope(container, scopeId), props)\n }) as Component,\n symbol,\n () => materializeScope(container, scopeId),\n )\n Object.defineProperty(component, RENDER_COMPONENT_TYPE_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n scopeId,\n symbol,\n } satisfies RenderComponentTypeRef,\n writable: true,\n })\n return component\n}\n\nconst serializeRenderObjectReference = (\n container: RuntimeContainer,\n value: RenderObject,\n): SerializedReference => {\n if (typeof value.type === 'function' && !getComponentMeta(value.type)) {\n const resolved = resolveRenderable((value.type as Component)(value.props))\n if (!isRenderObject(resolved)) {\n throw new TypeError('Only resumable component render objects can be serialized.')\n }\n return serializeRenderObjectReference(container, resolved)\n }\n\n const evaluatedProps = evaluateProps(value.props)\n const key = value.key ?? null\n const metadata = value.metadata ?? null\n\n if (typeof value.type === 'string') {\n return {\n __eclipsa_type: 'ref',\n data: [\n 'element',\n value.type,\n null,\n serializeRuntimeValue(container, evaluatedProps),\n serializeRuntimeValue(container, key),\n value.isStatic,\n serializeRuntimeValue(container, metadata),\n ],\n kind: RENDER_REFERENCE_KIND,\n token: 'jsx',\n }\n }\n\n const meta = getComponentMeta(value.type)\n if (!meta) {\n throw new TypeError('Only resumable component render objects can be serialized.')\n }\n\n return {\n __eclipsa_type: 'ref',\n data: [\n 'component',\n meta.symbol,\n registerScope(container, meta.captures()),\n serializeRuntimeValue(container, evaluatedProps),\n serializeRuntimeValue(container, key),\n value.isStatic,\n serializeRuntimeValue(container, metadata),\n ],\n kind: RENDER_REFERENCE_KIND,\n token: 'jsx',\n }\n}\n\nconst deserializeRenderObjectReference = (\n container: RuntimeContainer,\n data: SerializedValue | undefined,\n): RenderObject => {\n if (!Array.isArray(data) || data.length !== 7) {\n throw new TypeError('Render references require a seven-part payload.')\n }\n\n const [variant, typeValue, scopeValue, propsValue, keyValue, isStaticValue, metadataValue] = data\n if (variant !== 'element' && variant !== 'component') {\n throw new TypeError(`Unsupported render reference variant \"${String(variant)}\".`)\n }\n if (typeof isStaticValue !== 'boolean') {\n throw new TypeError('Render references require a boolean static flag.')\n }\n\n const props = deserializeRuntimeValue(container, propsValue as SerializedValue)\n const key = deserializeRuntimeValue(container, keyValue as SerializedValue)\n const metadata = deserializeRuntimeValue(container, metadataValue as SerializedValue)\n\n if (!props || typeof props !== 'object') {\n throw new TypeError('Render references require object props.')\n }\n\n if (variant === 'element') {\n if (typeof typeValue !== 'string') {\n throw new TypeError('Element render references require a string tag name.')\n }\n return {\n isStatic: isStaticValue,\n key: (key ?? undefined) as RenderObject['key'],\n metadata: (metadata ?? undefined) as RenderObject['metadata'],\n props: props as Record<string, unknown>,\n type: typeValue,\n }\n }\n\n if (typeof typeValue !== 'string' || typeof scopeValue !== 'string') {\n throw new TypeError('Component render references require a symbol id and scope id.')\n }\n\n return {\n isStatic: isStaticValue,\n key: (key ?? undefined) as RenderObject['key'],\n metadata: (metadata ?? undefined) as RenderObject['metadata'],\n props: props as Record<string, unknown>,\n type: createMaterializedRenderComponentType(container, typeValue, scopeValue),\n }\n}\n\nconst preloadResumableValue = async (\n container: RuntimeContainer,\n value: unknown,\n seen = new Set<unknown>(),\n): Promise<void> => {\n if (value === null || value === undefined || value === false) {\n return\n }\n if (seen.has(value)) {\n return\n }\n if (typeof value === 'function') {\n const renderComponentRef = getRenderComponentTypeRef(value)\n if (!renderComponentRef) {\n return\n }\n seen.add(value)\n await loadSymbol(container, renderComponentRef.symbol)\n for (const capturedValue of materializeScope(container, renderComponentRef.scopeId)) {\n await preloadResumableValue(container, capturedValue, seen)\n }\n return\n }\n if (Array.isArray(value)) {\n seen.add(value)\n for (const entry of value) {\n await preloadResumableValue(container, entry, seen)\n }\n return\n }\n if (typeof Node !== 'undefined' && value instanceof Node) {\n return\n }\n if (isProjectionSlot(value)) {\n return\n }\n if (isRenderObject(value)) {\n seen.add(value)\n await preloadResumableValue(container, value.type, seen)\n await preloadResumableValue(container, evaluateProps(value.props), seen)\n return\n }\n if (!isPlainObject(value)) {\n return\n }\n\n seen.add(value)\n for (const entry of Object.values(value)) {\n await preloadResumableValue(container, entry, seen)\n }\n}\n\nconst serializeRuntimeValue = (container: RuntimeContainer, value: unknown): SerializedValue =>\n serializePublicValue(value, {\n serializeReference(candidate) {\n const signalMeta = getSignalMeta(candidate)\n if (signalMeta) {\n return {\n __eclipsa_type: 'ref',\n kind: 'signal',\n token: signalMeta.id,\n }\n }\n if (getNavigateMeta(candidate)) {\n return {\n __eclipsa_type: 'ref',\n kind: 'navigate',\n token: 'navigate',\n }\n }\n const actionMeta = getActionHandleMeta(candidate)\n if (actionMeta) {\n return {\n __eclipsa_type: 'ref',\n kind: 'action',\n token: actionMeta.id,\n }\n }\n const actionHookMeta = getActionHookMeta(candidate)\n if (actionHookMeta) {\n return {\n __eclipsa_type: 'ref',\n kind: 'action-hook',\n token: actionHookMeta.id,\n }\n }\n const loaderMeta = getLoaderHandleMeta(candidate)\n if (loaderMeta) {\n return {\n __eclipsa_type: 'ref',\n kind: 'loader',\n token: loaderMeta.id,\n }\n }\n const loaderHookMeta = getLoaderHookMeta(candidate)\n if (loaderHookMeta) {\n return {\n __eclipsa_type: 'ref',\n kind: 'loader-hook',\n token: loaderHookMeta.id,\n }\n }\n const contextReference = getRuntimeContextReference(candidate)\n if (contextReference) {\n return {\n __eclipsa_type: 'ref',\n data: serializeRuntimeValue(container, {\n defaultValue: contextReference.defaultValue,\n hasDefault: contextReference.hasDefault,\n }),\n kind: contextReference.kind,\n token: contextReference.id,\n }\n }\n if (isRouteSlot(candidate)) {\n return {\n __eclipsa_type: 'ref',\n data: serializePublicValue(candidate.startLayoutIndex),\n kind: 'route-slot',\n token: candidate.pathname,\n }\n }\n if (isProjectionSlot(candidate)) {\n return {\n __eclipsa_type: 'ref',\n data: serializeRuntimeValue(container, candidate.source),\n kind: PROJECTION_SLOT_TYPE,\n token: JSON.stringify([candidate.componentId, candidate.name, candidate.occurrence]),\n }\n }\n if (isRenderObject(candidate)) {\n return serializeRenderObjectReference(container, candidate)\n }\n const lazyMeta = getLazyMeta(candidate)\n if (lazyMeta) {\n return {\n __eclipsa_type: 'ref',\n data: lazyMeta.captures().map((entry) => serializeRuntimeValue(container, entry)),\n kind: 'symbol',\n token: lazyMeta.symbol,\n }\n }\n if (isElementNode(candidate)) {\n return {\n __eclipsa_type: 'ref',\n kind: 'dom',\n token: ensureRuntimeElementId(container, candidate),\n }\n }\n return null\n },\n })\n\nconst deserializeRuntimeValue = (container: RuntimeContainer, value: SerializedValue): unknown =>\n deserializePublicValue(value, {\n deserializeReference(reference) {\n if (reference.kind === 'navigate') {\n return ensureRouterState(container).navigate\n }\n if (reference.kind === 'action') {\n const action = container.actions.get(reference.token)\n if (!action) {\n throw new Error(`Missing action handle ${reference.token}.`)\n }\n return action\n }\n if (reference.kind === 'action-hook') {\n const actionHook = getRegisteredActionHook(reference.token)\n if (!actionHook) {\n throw new Error(`Missing action hook ${reference.token}.`)\n }\n return actionHook\n }\n if (reference.kind === 'loader') {\n const loader = container.loaders.get(reference.token)\n if (!loader) {\n throw new Error(`Missing loader handle ${reference.token}.`)\n }\n return loader\n }\n if (reference.kind === 'loader-hook') {\n const loaderHook = getRegisteredLoaderHook(reference.token)\n if (!loaderHook) {\n throw new Error(`Missing loader hook ${reference.token}.`)\n }\n return loaderHook\n }\n if (reference.kind === 'context' || reference.kind === 'context-provider') {\n const decoded =\n reference.data === undefined\n ? null\n : (deserializeRuntimeValue(container, reference.data as SerializedValue) as {\n defaultValue?: unknown\n hasDefault?: unknown\n } | null)\n const hasDefault = decoded?.hasDefault === true\n const defaultValue = hasDefault ? decoded?.defaultValue : undefined\n const descriptor = {\n defaultValue,\n hasDefault,\n id: reference.token,\n }\n return reference.kind === 'context'\n ? materializeRuntimeContext(descriptor)\n : materializeRuntimeContextProvider(descriptor)\n }\n if (reference.kind === 'route-slot') {\n const startLayoutIndex =\n reference.data === undefined ? 0 : deserializePublicValue(reference.data)\n if (typeof startLayoutIndex !== 'number' || !Number.isInteger(startLayoutIndex)) {\n throw new TypeError('Route slot references require an integer start layout index.')\n }\n return {\n __eclipsa_type: ROUTE_SLOT_TYPE,\n pathname: reference.token,\n startLayoutIndex,\n } satisfies RouteSlotValue\n }\n if (reference.kind === PROJECTION_SLOT_TYPE) {\n let componentId = ''\n let name = ''\n let occurrence = 0\n try {\n const parsed = JSON.parse(reference.token)\n if (\n !Array.isArray(parsed) ||\n parsed.length !== 3 ||\n typeof parsed[0] !== 'string' ||\n typeof parsed[1] !== 'string' ||\n typeof parsed[2] !== 'number'\n ) {\n throw new Error('invalid projection slot token')\n }\n componentId = parsed[0]\n name = parsed[1]\n occurrence = parsed[2]\n } catch {\n throw new TypeError(\n 'Projection slot references require a component id, name, and occurrence.',\n )\n }\n return createProjectionSlot(\n componentId,\n name,\n occurrence,\n deserializeRuntimeValue(container, reference.data as SerializedValue),\n )\n }\n if (reference.kind === 'signal') {\n const record = container.signals.get(reference.token)\n if (!record) {\n throw new Error(`Missing signal ${reference.token}.`)\n }\n return record.handle\n }\n if (reference.kind === 'symbol') {\n if (!reference.data || !Array.isArray(reference.data)) {\n throw new TypeError('Symbol references require an encoded scope array.')\n }\n const scopeId = registerSerializedScope(container, reference.data)\n return materializeSymbolReference(container, reference.token, scopeId)\n }\n if (reference.kind === RENDER_REFERENCE_KIND) {\n return deserializeRenderObjectReference(container, reference.data)\n }\n if (reference.kind === 'dom') {\n const element = findRuntimeElement(container, reference.token)\n if (!element) {\n throw new Error(`Missing DOM reference ${reference.token}.`)\n }\n return element\n }\n throw new TypeError(`Unsupported runtime reference kind \"${reference.kind}\".`)\n },\n })\n\nconst findNextNumericId = (ids: Iterable<string>, prefix: string) => {\n let nextId = 0\n for (const id of ids) {\n if (!id.startsWith(prefix)) {\n continue\n }\n const suffix = id.slice(prefix.length)\n if (!/^\\d+$/.test(suffix)) {\n continue\n }\n nextId = Math.max(nextId, Number(suffix) + 1)\n }\n return nextId\n}\n\nconst getRefSignalId = (value: unknown) => getSignalMeta(value)?.id ?? null\n\nconst getBindableSignalId = (value: unknown) => getSignalMeta(value)?.id ?? null\n\nexport const syncRuntimeRefMarker = (element: Element, value: unknown) => {\n const signalId = getRefSignalId(value)\n if (signalId) {\n element.setAttribute(REF_SIGNAL_ATTR, signalId)\n syncManagedAttributeSnapshot(element, REF_SIGNAL_ATTR)\n return\n }\n element.removeAttribute(REF_SIGNAL_ATTR)\n syncManagedAttributeSnapshot(element, REF_SIGNAL_ATTR)\n}\n\nconst readBindableSignalValue = (value: unknown) => {\n if (!value || (typeof value !== 'object' && typeof value !== 'function') || !('value' in value)) {\n return undefined\n }\n return (value as { value: unknown }).value\n}\n\nexport const assignRuntimeRef = (\n value: unknown,\n element: Element,\n container: RuntimeContainer | null = getCurrentContainer(),\n) => {\n const signalMeta = getSignalMeta<Element | undefined>(value)\n if (!signalMeta) {\n return false\n }\n\n const record = container?.signals.get(signalMeta.id)\n if (record) {\n writeSignalValue(container, record, element)\n return true\n }\n\n signalMeta.set(element)\n return true\n}\n\nexport const restoreSignalRefs = (container: RuntimeContainer, root: ParentNode) => {\n const assignElement = (element: Element) => {\n const signalId = element.getAttribute(REF_SIGNAL_ATTR)\n if (!signalId) {\n return\n }\n const record = container.signals.get(signalId)\n if (!record) {\n return\n }\n writeSignalValue(container, record, element)\n }\n\n if (isElementNode(root) && root.getAttribute(REF_SIGNAL_ATTR)) {\n assignElement(root)\n }\n\n const visitDescendants = (node: ParentNode) => {\n for (const child of listNodeChildren(node)) {\n if (!isElementNode(child)) {\n continue\n }\n if (child.getAttribute(REF_SIGNAL_ATTR)) {\n assignElement(child)\n }\n visitDescendants(child)\n }\n }\n\n visitDescendants(root)\n}\n\nconst evaluateProps = (props: Record<string, unknown>): Record<string, unknown> => {\n const result: Record<string, unknown> = {}\n for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(props))) {\n if (descriptor.get) {\n result[key] = descriptor.get.call(props)\n } else {\n result[key] = descriptor.value\n }\n }\n return result\n}\n\nconst hasProjectionSlotValue = (props: Record<string, unknown>, name: string) =>\n Object.prototype.hasOwnProperty.call(props, name)\n\nconst shouldRenderProjectionSlotValue = (value: unknown): boolean => {\n if (value === null || value === undefined || value === false) {\n return false\n }\n if (isProjectionSlot(value)) {\n return false\n }\n if (Array.isArray(value)) {\n return value.some((entry) => shouldRenderProjectionSlotValue(entry))\n }\n if (typeof value === 'function') {\n return true\n }\n return typeof value === 'object'\n}\n\nconst shouldPreserveProjectionSlotDom = (value: unknown): boolean => {\n if (value === null || value === undefined || value === false) {\n return false\n }\n if (isProjectionSlot(value) || isRouteSlot(value)) {\n return false\n }\n if (Array.isArray(value)) {\n return value.some((entry) => shouldPreserveProjectionSlotDom(entry))\n }\n if (typeof value === 'function') {\n return true\n }\n return typeof value === 'object'\n}\n\nconst getComponentProjectionSlotProps = (component: ComponentState) => {\n if (component.rawProps && typeof component.rawProps === 'object') {\n return component.rawProps\n }\n return component.props && typeof component.props === 'object'\n ? (component.props as Record<string, unknown>)\n : null\n}\n\nconst hasDynamicProjectionSlotDom = (component: ComponentState) => {\n if (!component.projectionSlots || Object.keys(component.projectionSlots).length === 0) {\n return false\n }\n\n const props = getComponentProjectionSlotProps(component)\n if (!props) {\n return false\n }\n\n return Object.keys(component.projectionSlots).some(\n (name) => hasProjectionSlotValue(props, name) && shouldPreserveProjectionSlotDom(props[name]),\n )\n}\n\nconst createRenderProps = (\n componentId: string,\n meta: ComponentMeta,\n props: Record<string, unknown>,\n): Record<string, unknown> => {\n const nextProps = Object.create(null) as Record<string, unknown>\n Object.defineProperties(nextProps, Object.getOwnPropertyDescriptors(props))\n\n if (!meta.projectionSlots || Object.keys(meta.projectionSlots).length === 0) {\n return nextProps\n }\n\n const counters = new Map<string, number>()\n\n for (const [name, totalOccurrences] of Object.entries(meta.projectionSlots)) {\n Object.defineProperty(nextProps, name, {\n configurable: true,\n enumerable: true,\n get() {\n if (!hasProjectionSlotValue(props, name)) {\n return undefined\n }\n const value = props[name]\n if (!shouldRenderProjectionSlotValue(value)) {\n return value\n }\n const current = counters.get(name) ?? 0\n counters.set(name, current + 1)\n const occurrence = totalOccurrences > 0 ? current % totalOccurrences : current\n return createProjectionSlot(componentId, name, occurrence, value)\n },\n })\n }\n\n return nextProps\n}\n\nconst preloadComponentProps = async (\n container: RuntimeContainer,\n meta: ComponentMeta,\n props: unknown,\n) => {\n if (!props || typeof props !== 'object') {\n await preloadResumableValue(container, props)\n return\n }\n\n if (!meta.projectionSlots) {\n await preloadResumableValue(container, props)\n return\n }\n\n const projectionNames = new Set(Object.keys(meta.projectionSlots))\n const entries: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(props as Record<string, unknown>)) {\n if (projectionNames.has(key)) {\n await preloadResumableValue(container, value)\n continue\n }\n entries[key] = value\n }\n await preloadResumableValue(container, entries)\n}\n\nconst createContainer = (\n symbols: Record<string, string>,\n doc?: Document,\n asyncSignalSnapshotCache?: Map<string, unknown>,\n): RuntimeContainer => ({\n actions: new Map(),\n actionStates: new Map(),\n asyncSignalStates: new Map(),\n asyncSignalSnapshotCache: asyncSignalSnapshotCache ?? new Map(),\n atoms: new WeakMap(),\n components: new Map(),\n dirty: new Set(),\n dirtyFlushQueued: false,\n doc,\n eventDispatchPromise: null,\n id: `rt${((globalThis as Record<PropertyKey, unknown>)[CONTAINER_ID_KEY] =\n (((globalThis as Record<PropertyKey, unknown>)[CONTAINER_ID_KEY] as number | undefined) ?? 0) +\n 1)}`,\n imports: new Map(),\n interactivePrefetchCheckQueued: false,\n loaderStates: new Map(),\n loaders: new Map(),\n nextAtomId: 0,\n nextComponentId: 0,\n nextElementId: 0,\n nextScopeId: 0,\n nextSignalId: 0,\n pendingSuspensePromises: new Set(),\n resumeReadyPromise: null,\n rootChildCursor: 0,\n rootElement: doc?.body,\n router: null,\n scopes: new Map(),\n signals: new Map(),\n symbols: new Map(Object.entries(symbols)),\n visibilityCheckQueued: false,\n visibilityListenersCleanup: null,\n visibles: new Map(),\n watches: new Map(),\n})\n\nexport const registerResumeContainer = (container: RuntimeContainer) => {\n const containers = getResumeContainers()\n containers.add(container)\n return () => {\n containers.delete(container)\n }\n}\n\nconst createSignalHandle = <T>(record: SignalRecord<T>, container: RuntimeContainer | null) => {\n const handle = {} as { value: T }\n Object.defineProperty(handle, 'value', {\n configurable: true,\n enumerable: true,\n get() {\n recordSignalRead(record)\n return record.value\n },\n set(value: T) {\n writeSignalValue(container, record, value)\n },\n })\n setSignalMeta(handle, {\n get: () => record.value,\n id: record.id,\n set: (value) => {\n writeSignalValue(container, record, value)\n },\n } satisfies SignalMeta<T>)\n return handle\n}\n\nconst isPrimitiveSignalValue = (value: unknown) =>\n value === null || (typeof value !== 'object' && typeof value !== 'function')\n\nconst didSignalValueChange = (previous: unknown, next: unknown) => {\n if (isPrimitiveSignalValue(previous) && isPrimitiveSignalValue(next)) {\n return !Object.is(previous, next)\n }\n\n return previous !== next\n}\n\nconst writeSignalValue = <T>(\n container: RuntimeContainer | null,\n record: SignalRecord<T>,\n nextValue: T,\n) => {\n if (!didSignalValueChange(record.value, nextValue)) {\n return false\n }\n\n record.value = nextValue\n notifySignalWrite(container, record)\n return true\n}\n\nconst ensureSignalRecord = <T>(\n container: RuntimeContainer | null,\n id: string,\n initialValue: T,\n): SignalRecord<T> => {\n if (!container) {\n const record = {\n effects: new Set<ReactiveEffect>(),\n handle: undefined as unknown as { value: T },\n id,\n subscribers: new Set<string>(),\n value: initialValue,\n } satisfies SignalRecord<T>\n record.handle = createSignalHandle(record, null)\n return record\n }\n const existing = container.signals.get(id)\n if (existing) {\n return existing as SignalRecord<T>\n }\n const record: SignalRecord<T> = {\n effects: new Set(),\n handle: undefined as unknown as { value: T },\n id,\n subscribers: new Set(),\n value: initialValue,\n }\n record.handle = createSignalHandle(record, container)\n container.signals.set(id, record as SignalRecord)\n return record\n}\n\nconst isRouterSignalId = (id: string) =>\n id === ROUTER_CURRENT_PATH_SIGNAL_ID ||\n id === ROUTER_CURRENT_URL_SIGNAL_ID ||\n id === ROUTER_IS_NAVIGATING_SIGNAL_ID\n\nconst isAtomSignalId = (id: string) => id.startsWith('a')\n\nconst createStandaloneNavigate = (): Navigate => {\n const navigate = (async (href: string, options?: NavigateOptions) => {\n if (typeof window === 'undefined') {\n return\n }\n const url = new URL(href, window.location.href)\n if (options?.replace) {\n window.location.replace(url.href)\n return\n }\n window.location.assign(url.href)\n }) as Navigate\n\n Object.defineProperty(navigate, 'isNavigating', {\n configurable: true,\n enumerable: true,\n get() {\n return false\n },\n })\n\n return setNavigateMeta(navigate)\n}\n\nexport const primeLocationState = (container: RuntimeContainer, href: string | URL) => {\n writeRouterLocation(ensureRouterState(container), href)\n}\n\nconst recordSignalRead = (record: SignalRecord) => {\n if (currentEffect) {\n currentEffect.signals.add(record)\n record.effects.add(currentEffect)\n return\n }\n const frame = getCurrentFrame()\n if (!frame) {\n return\n }\n record.subscribers.add(frame.component.id)\n}\n\nconst notifySignalWrite = (container: RuntimeContainer | null, record: SignalRecord) => {\n for (const effect of Array.from(record.effects)) {\n effect.fn()\n }\n if (!container) {\n return\n }\n for (const componentId of record.subscribers) {\n const component = container.components.get(componentId)\n if (!component?.start || !component.end) {\n continue\n }\n if (\n component.prefersEffectOnlyLocalSignalWrites &&\n component.signalIds.includes(record.id) &&\n record.effects.size > 0 &&\n !record.subscribers.has(component.id)\n ) {\n continue\n }\n const hasProjectionSlotDom = hasDynamicProjectionSlotDom(component)\n const nextActivateMode = hasProjectionSlotDom ? 'replace' : 'patch'\n component.active = false\n if (component.activateModeOnFlush !== 'replace') {\n component.activateModeOnFlush = nextActivateMode\n }\n component.reuseExistingDomOnActivate = !hasProjectionSlotDom\n component.reuseProjectionSlotDomOnActivate = !hasProjectionSlotDom\n container.dirty.add(component.id)\n }\n scheduleDirtyFlush(container)\n}\n\nconst canFlushDirtyComponents = (container: RuntimeContainer) =>\n [...container.dirty].every((componentId) => {\n const component = container.components.get(componentId)\n return (\n !!component &&\n (container.imports.has(component.symbol) || container.symbols.has(component.symbol))\n )\n })\n\nconst scheduleDirtyFlush = (container: RuntimeContainer) => {\n if (\n container.dirty.size === 0 ||\n container.dirtyFlushQueued ||\n !canFlushDirtyComponents(container)\n ) {\n return\n }\n\n container.dirtyFlushQueued = true\n queueMicrotask(() => {\n const flushWhenReady = async () => {\n try {\n const pendingEvent = container.eventDispatchPromise\n if (pendingEvent) {\n await pendingEvent.catch(() => {})\n }\n } finally {\n container.dirtyFlushQueued = false\n }\n\n if (container.dirty.size === 0) {\n return\n }\n void flushDirtyComponents(container)\n }\n\n void flushWhenReady()\n })\n}\n\nconst writeRouterLocation = (router: RouterState, href: string | URL) => {\n const url = href instanceof URL ? href : parseLocationHref(href)\n const nextPath = normalizeRoutePath(url.pathname)\n if (router.currentPath.value !== nextPath) {\n router.currentPath.value = nextPath\n }\n if (router.currentUrl.value !== url.href) {\n router.currentUrl.value = url.href\n }\n}\n\nconst syncRouterLocationSilently = (container: RuntimeContainer, href: string | URL) => {\n const url = href instanceof URL ? href : parseLocationHref(href)\n const nextPath = normalizeRoutePath(url.pathname)\n ensureSignalRecord(container, ROUTER_CURRENT_PATH_SIGNAL_ID, nextPath).value = nextPath\n ensureSignalRecord(container, ROUTER_CURRENT_URL_SIGNAL_ID, url.href).value = url.href\n ensureSignalRecord(container, ROUTER_IS_NAVIGATING_SIGNAL_ID, false).value = false\n}\n\nconst ensureRouterState = (container: RuntimeContainer, manifest?: RouteManifest) => {\n if (container.router) {\n if (manifest) {\n container.router.manifest = [...manifest]\n }\n return container.router\n }\n\n const currentPath = ensureSignalRecord(\n container,\n ROUTER_CURRENT_PATH_SIGNAL_ID,\n normalizeRoutePath(container.doc?.location.pathname ?? '/'),\n ).handle as { value: string }\n const currentUrl = ensureSignalRecord(\n container,\n ROUTER_CURRENT_URL_SIGNAL_ID,\n container.doc?.location.href ?? currentPath.value,\n ).handle as { value: string }\n const isNavigating = ensureSignalRecord(container, ROUTER_IS_NAVIGATING_SIGNAL_ID, false)\n .handle as { value: boolean }\n\n const router: RouterState = {\n currentPath,\n currentRoute: null,\n currentUrl,\n defaultTitle: container.doc?.title ?? '',\n isNavigating,\n loadedRoutes: new Map(),\n location: undefined as unknown as RouteLocation,\n manifest: [],\n navigate: undefined as unknown as Navigate,\n prefetchedLoaders: new Map(),\n routeModuleBusts: new Map(),\n routePrefetches: new Map(),\n sequence: 0,\n }\n\n container.router = router\n router.location = createRouterLocation(router)\n router.navigate = setNavigateMeta((async (href: string, options?: NavigateOptions) => {\n await navigateContainer(container, href, {\n mode: options?.replace ? 'replace' : 'push',\n })\n }) as Navigate)\n\n Object.defineProperty(router.navigate, 'isNavigating', {\n configurable: true,\n enumerable: true,\n get() {\n return ensureRouterState(container).isNavigating.value\n },\n })\n\n if (manifest) {\n router.manifest = [...manifest]\n }\n\n return router\n}\n\nconst pushContainer = <T>(container: RuntimeContainer, fn: () => T): T => {\n const stack = getContainerStack()\n stack.push(container)\n try {\n return fn()\n } finally {\n stack.pop()\n }\n}\n\nexport const withRuntimeContainer = pushContainer\n\nconst withRuntimeContextValue = <T>(token: RuntimeContextToken, value: unknown, fn: () => T): T => {\n const stack = getContextValueStack()\n stack.push({\n token,\n value,\n })\n try {\n return fn()\n } finally {\n stack.pop()\n }\n}\n\nconst pushFrame = <T>(frame: RenderFrame, fn: () => T): T => {\n const stack = getFrameStack()\n stack.push(frame)\n try {\n return fn()\n } finally {\n stack.pop()\n }\n}\n\nconst allocateScopeId = (container: RuntimeContainer) => `sc${container.nextScopeId++}`\n\nexport const ensureRuntimeElementId = (container: RuntimeContainer, element: Element) => {\n const existingId = element.getAttribute('data-eid')\n if (existingId) {\n return existingId\n }\n const nextId = `e${container.nextElementId++}`\n element.setAttribute('data-eid', nextId)\n return nextId\n}\n\nexport const findRuntimeElement = (\n container: RuntimeContainer,\n elementId: string,\n): Element | null => {\n const root = container.rootElement ?? container.doc?.body\n if (!root) {\n return null\n }\n if (root.getAttribute('data-eid') === elementId) {\n return root\n }\n return root.querySelector(`[data-eid=\"${elementId}\"]`)\n}\n\nconst registerScope = (container: RuntimeContainer, values: unknown[]): string => {\n const id = allocateScopeId(container)\n container.scopes.set(\n id,\n values.map((value) => serializeRuntimeValue(container, value)),\n )\n return id\n}\n\nconst registerSerializedScope = (container: RuntimeContainer, values: SerializedValue[]) => {\n const id = allocateScopeId(container)\n container.scopes.set(id, [...values])\n return id\n}\n\nconst materializeSymbolReference = (\n container: RuntimeContainer,\n symbolId: string,\n scopeId: string,\n) => {\n const fn = (...args: unknown[]) => {\n void loadSymbol(container, symbolId).then((module) =>\n module.default(materializeScope(container, scopeId), ...args),\n )\n }\n Object.defineProperty(fn, 'name', {\n configurable: true,\n value: `eclipsa$${symbolId}`,\n })\n return fn\n}\n\nconst materializeScope = (container: RuntimeContainer, scopeId: string): unknown[] => {\n const slots = container.scopes.get(scopeId)\n if (!slots) {\n throw new Error(`Missing scope ${scopeId}.`)\n }\n return slots.map((slot) => deserializeRuntimeValue(container, slot))\n}\n\nconst createFrame = (\n container: RuntimeContainer,\n component: ComponentState,\n mode: RenderFrame['mode'],\n options?: {\n effectCleanupSlot?: CleanupSlot\n reuseExistingDom?: boolean\n reuseProjectionSlotDom?: boolean\n },\n): RenderFrame => ({\n childCursor: 0,\n component,\n container,\n effectCleanupSlot: options?.effectCleanupSlot ?? component.renderEffectCleanupSlot,\n insertCursor: 0,\n mountCallbacks: [],\n mode,\n projectionState: {\n counters: new Map(),\n reuseExistingDom: options?.reuseExistingDom ?? false,\n reuseProjectionSlotDom: options?.reuseProjectionSlotDom ?? false,\n },\n scopedStyles: [],\n signalCursor: 0,\n visibleCursor: 0,\n visitedDescendants: new Set(),\n watchCursor: 0,\n})\n\nconst createComponentId = (\n container: RuntimeContainer,\n parentId: string | null,\n childIndex: number,\n) => {\n if (!parentId || parentId === ROOT_COMPONENT_ID) {\n return `c${childIndex}`\n }\n return `${parentId}.${childIndex}`\n}\n\nconst getOrCreateComponentState = (\n container: RuntimeContainer,\n id: string,\n symbol: string,\n parentId: string | null,\n): ComponentState => {\n const existing = container.components.get(id)\n if (existing) {\n existing.parentId = parentId\n existing.symbol = symbol\n return existing\n }\n const component: ComponentState = {\n active: false,\n didMount: false,\n id,\n mountCleanupSlots: [],\n optimizedRoot: false,\n parentId,\n prefersEffectOnlyLocalSignalWrites: false,\n props: {},\n projectionSlots: null,\n rawProps: null,\n renderEffectCleanupSlot: createCleanupSlot(),\n reuseExistingDomOnActivate: true,\n reuseProjectionSlotDomOnActivate: false,\n scopeId: registerScope(container, []),\n signalIds: [],\n symbol,\n suspensePromise: null,\n visibleCount: 0,\n watchCount: 0,\n }\n container.components.set(id, component)\n return component\n}\n\nconst resetComponentForSymbolChange = (\n container: RuntimeContainer,\n component: ComponentState,\n meta: ComponentMeta,\n) => {\n disposeComponentMountCleanups(component)\n disposeCleanupSlot(component.renderEffectCleanupSlot)\n component.renderEffectCleanupSlot = createCleanupSlot()\n component.didMount = false\n component.optimizedRoot = meta.optimizedRoot === true\n component.prefersEffectOnlyLocalSignalWrites = false\n component.projectionSlots = meta.projectionSlots ?? null\n component.rawProps = null\n component.scopeId = registerScope(container, meta.captures())\n component.signalIds = []\n component.suspensePromise = null\n pruneComponentVisibles(container, component, 0)\n pruneComponentWatches(container, component, 0)\n}\n\nconst createWatchId = (componentId: string, watchIndex: number) => `${componentId}:w${watchIndex}`\nconst createVisibleId = (componentId: string, visibleIndex: number) =>\n `${componentId}:v${visibleIndex}`\n\nconst getOrCreateWatchState = (\n container: RuntimeContainer,\n id: string,\n componentId: string,\n): WatchState => {\n const existing = container.watches.get(id)\n if (existing) {\n existing.componentId = componentId\n return existing\n }\n const effect: ReactiveEffect = {\n fn() {},\n signals: new Set(),\n }\n const watch: WatchState = {\n cleanupSlot: createCleanupSlot(),\n componentId,\n effect,\n id,\n mode: 'dynamic',\n pending: null,\n run: null,\n scopeId: registerScope(container, []),\n symbol: '',\n track: null,\n }\n effect.fn = () => {\n if (watch.run) {\n watch.run()\n return\n }\n if (!container.doc) {\n return\n }\n const scheduled = (watch.pending ?? Promise.resolve()).then(async () => {\n disposeCleanupSlot(watch.cleanupSlot)\n const module = await loadSymbol(container, watch.symbol)\n const scope = materializeScope(container, watch.scopeId)\n await withClientContainer(container, () => {\n if (watch.mode === 'dynamic') {\n collectTrackedDependencies(effect, () => {\n withCleanupSlot(watch.cleanupSlot, () => {\n module.default(scope)\n })\n })\n return\n }\n collectTrackedDependencies(effect, () => {\n module.default(scope, 'track')\n })\n withCleanupSlot(watch.cleanupSlot, () => {\n module.default(scope, 'run')\n })\n })\n await flushDirtyComponents(container)\n })\n const queued = scheduled.finally(() => {\n if (watch.pending === queued) {\n watch.pending = null\n }\n })\n watch.pending = queued\n }\n container.watches.set(id, watch)\n return watch\n}\n\nconst getOrCreateVisibleState = (\n container: RuntimeContainer,\n id: string,\n componentId: string,\n): VisibleState => {\n const existing = container.visibles.get(id)\n if (existing) {\n existing.componentId = componentId\n return existing\n }\n\n const visible: VisibleState = {\n cleanupSlot: createCleanupSlot(),\n componentId,\n done: false,\n id,\n pending: null,\n run: null,\n scopeId: registerScope(container, []),\n symbol: '',\n }\n container.visibles.set(id, visible)\n return visible\n}\n\nconst clearComponentSubscriptions = (container: RuntimeContainer, componentId: string) => {\n for (const record of container.signals.values()) {\n record.subscribers.delete(componentId)\n }\n}\n\nconst disposeComponentMountCleanups = (component: ComponentState) => {\n disposeCleanupSlot(component.renderEffectCleanupSlot)\n component.renderEffectCleanupSlot = createCleanupSlot()\n const cleanupSlots = [...component.mountCleanupSlots].reverse()\n component.mountCleanupSlots = []\n for (const cleanupSlot of cleanupSlots) {\n disposeCleanupSlot(cleanupSlot)\n }\n}\n\nconst removeWatchState = (container: RuntimeContainer, watchId: string) => {\n const watch = container.watches.get(watchId)\n if (!watch) {\n return\n }\n disposeCleanupSlot(watch.cleanupSlot)\n clearEffectSignals(watch.effect)\n container.watches.delete(watchId)\n}\n\nconst removeVisibleState = (container: RuntimeContainer, visibleId: string) => {\n const visible = container.visibles.get(visibleId)\n if (visible) {\n disposeCleanupSlot(visible.cleanupSlot)\n }\n container.visibles.delete(visibleId)\n}\n\nconst resetVisibleState = (visible: VisibleState) => {\n disposeCleanupSlot(visible.cleanupSlot)\n visible.cleanupSlot = createCleanupSlot()\n visible.done = false\n visible.pending = null\n}\n\nconst resetComponentVisibleStates = (container: RuntimeContainer, componentId: string) => {\n const targetIds = new Set<string>([componentId, ...collectDescendantIds(container, componentId)])\n\n for (const visible of container.visibles.values()) {\n if (!targetIds.has(visible.componentId)) {\n continue\n }\n resetVisibleState(visible)\n }\n}\n\nconst pruneComponentWatches = (\n container: RuntimeContainer,\n component: ComponentState,\n nextCount: number,\n) => {\n for (let index = nextCount; index < component.watchCount; index++) {\n removeWatchState(container, createWatchId(component.id, index))\n }\n component.watchCount = nextCount\n}\n\nconst pruneComponentVisibles = (\n container: RuntimeContainer,\n component: ComponentState,\n nextCount: number,\n) => {\n for (let index = nextCount; index < component.visibleCount; index++) {\n removeVisibleState(container, createVisibleId(component.id, index))\n }\n component.visibleCount = nextCount\n}\n\nconst isDescendantOf = (parentId: string, candidateId: string) =>\n candidateId.startsWith(`${parentId}.`)\n\nconst collectDescendantIds = (container: RuntimeContainer, componentId: string) =>\n [...container.components.keys()].filter((candidate) => isDescendantOf(componentId, candidate))\n\nconst expandComponentIdsToDescendants = (\n container: RuntimeContainer,\n componentIds: Iterable<string>,\n) => {\n const expanded = new Set<string>()\n\n for (const componentId of componentIds) {\n if (expanded.has(componentId)) {\n continue\n }\n expanded.add(componentId)\n for (const descendantId of collectDescendantIds(container, componentId)) {\n expanded.add(descendantId)\n }\n }\n\n return expanded\n}\n\nconst pruneRemovedComponents = (\n container: RuntimeContainer,\n componentId: string,\n keep: Set<string>,\n) => {\n for (const descendantId of collectDescendantIds(container, componentId)) {\n if (keep.has(descendantId)) {\n continue\n }\n clearComponentSubscriptions(container, descendantId)\n const descendant = container.components.get(descendantId)\n if (descendant) {\n disposeComponentMountCleanups(descendant)\n pruneComponentVisibles(container, descendant, 0)\n pruneComponentWatches(container, descendant, 0)\n }\n container.components.delete(descendantId)\n }\n}\n\nconst scheduleMicrotask = (fn: () => void) => {\n if (typeof queueMicrotask === 'function') {\n queueMicrotask(fn)\n return\n }\n Promise.resolve().then(fn)\n}\n\nconst scheduleInteractivePrefetchCheck = (container: RuntimeContainer) => {\n if (\n container.interactivePrefetchCheckQueued ||\n !container.doc ||\n typeof container.doc.querySelectorAll !== 'function'\n ) {\n return\n }\n\n container.interactivePrefetchCheckQueued = true\n scheduleMicrotask(() => {\n container.interactivePrefetchCheckQueued = false\n const doc = container.doc\n if (!doc || typeof doc.querySelectorAll !== 'function') {\n return\n }\n\n for (const element of doc.querySelectorAll(INTERACTIVE_PREFETCH_SELECTOR)) {\n if (!isElementNode(element)) {\n continue\n }\n prefetchElementSymbols(container, element, INTERACTIVE_PREFETCH_EVENT_NAMES)\n }\n })\n}\n\nconst scheduleVisibleCallbacksCheck = (container: RuntimeContainer) => {\n scheduleInteractivePrefetchCheck(container)\n if (container.visibilityCheckQueued || container.visibles.size === 0 || !container.doc) {\n return\n }\n\n ensureVisibilityListeners(container)\n container.visibilityCheckQueued = true\n const run = () => {\n container.visibilityCheckQueued = false\n void flushVisibleCallbacks(container)\n }\n\n const view = container.doc.defaultView\n if (view && typeof view.requestAnimationFrame === 'function') {\n view.requestAnimationFrame(() => run())\n return\n }\n\n scheduleMicrotask(run)\n}\n\nconst rectIntersectsViewport = (\n view: { innerHeight?: number; innerWidth?: number },\n rect: { bottom: number; left: number; right: number; top: number },\n) => {\n const viewportHeight = view.innerHeight ?? 0\n const viewportWidth = view.innerWidth ?? 0\n return rect.bottom > 0 && rect.right > 0 && rect.top < viewportHeight && rect.left < viewportWidth\n}\n\nconst isBoundaryVisible = (doc: Document, start: Comment, end: Comment) => {\n const view = doc.defaultView\n if (typeof doc.createRange !== 'function' || !view) {\n return false\n }\n\n const range = doc.createRange()\n range.setStartAfter(start)\n range.setEndBefore(end)\n\n const rects = range.getClientRects()\n if (rects.length === 0) {\n return rectIntersectsViewport(view, range.getBoundingClientRect())\n }\n\n for (let index = 0; index < rects.length; index++) {\n const rect = rects[index]\n if (rectIntersectsViewport(view, rect)) {\n return true\n }\n }\n return false\n}\n\nconst runVisibleCallback = async (container: RuntimeContainer, visible: VisibleState) => {\n if (visible.done) {\n return\n }\n\n visible.done = true\n const pending = Promise.resolve()\n .then(async () => {\n if (visible.run) {\n await withClientContainer(container, async () => {\n await withCleanupSlot(visible.cleanupSlot, () => visible.run?.())\n })\n } else {\n const module = await loadSymbol(container, visible.symbol)\n await withClientContainer(container, async () => {\n await withCleanupSlot(visible.cleanupSlot, () =>\n module.default(materializeScope(container, visible.scopeId)),\n )\n })\n }\n await flushDirtyComponents(container)\n scheduleVisibleCallbacksCheck(container)\n })\n .finally(() => {\n if (visible.pending === pending) {\n visible.pending = null\n }\n })\n\n visible.pending = pending\n await pending\n}\n\nconst flushVisibleCallbacks = async (container: RuntimeContainer) => {\n if (!container.doc || container.visibles.size === 0) {\n return\n }\n\n for (const visible of Array.from(container.visibles.values())) {\n if (visible.done || visible.pending) {\n continue\n }\n\n const component = container.components.get(visible.componentId)\n if (!component?.start || !component.end) {\n continue\n }\n\n if (!isBoundaryVisible(container.doc, component.start, component.end)) {\n continue\n }\n\n await runVisibleCallback(container, visible)\n }\n}\n\nconst ensureVisibilityListeners = (container: RuntimeContainer) => {\n if (container.visibilityListenersCleanup || !container.doc) {\n return\n }\n\n const doc = container.doc\n const onVisibilityChange = () => {\n scheduleVisibleCallbacksCheck(container)\n }\n\n doc.addEventListener('scroll', onVisibilityChange, true)\n doc.defaultView?.addEventListener('resize', onVisibilityChange)\n\n container.visibilityListenersCleanup = () => {\n doc.removeEventListener('scroll', onVisibilityChange, true)\n doc.defaultView?.removeEventListener('resize', onVisibilityChange)\n container.visibilityListenersCleanup = null\n }\n}\n\nconst scheduleMountCallbacks = (\n container: RuntimeContainer,\n component: ComponentState,\n callbacks: Array<() => void>,\n) => {\n if (component.didMount || callbacks.length === 0) {\n return\n }\n component.didMount = true\n scheduleMicrotask(() => {\n void withClientContainer(container, () => {\n for (const callback of callbacks) {\n const cleanupSlot = createCleanupSlot()\n component.mountCleanupSlots.push(cleanupSlot)\n withCleanupSlot(cleanupSlot, callback)\n }\n })\n .then(() => flushDirtyComponents(container))\n .then(() => {\n scheduleVisibleCallbacksCheck(container)\n })\n })\n}\n\nconst collectProjectionSlotRanges = (roots: Node[]) => {\n const starts = new Map<string, Comment>()\n const ranges = new Map<string, { end: Comment; start: Comment }>()\n\n const visit = (node: Node) => {\n if (typeof Comment !== 'undefined' ? node instanceof Comment : (node as Node).nodeType === 8) {\n const commentNode = node as Comment\n const marker = parseProjectionSlotMarker(commentNode.data)\n if (marker) {\n if (marker.kind === 'start') {\n starts.set(marker.key, commentNode)\n } else {\n const startNode = starts.get(marker.key)\n if (startNode) {\n ranges.set(marker.key, { end: commentNode, start: startNode })\n }\n }\n }\n }\n for (const child of Array.from((node.childNodes ?? []) as unknown as Iterable<Node>)) {\n visit(child)\n }\n }\n\n for (const root of roots) {\n visit(root)\n }\n\n return ranges\n}\n\nconst collectComponentBoundaryIds = (roots: Node[]) => {\n const ids = new Set<string>()\n const visit = (node: Node) => {\n if (typeof Comment !== 'undefined' ? node instanceof Comment : (node as Node).nodeType === 8) {\n const matched = (node as Comment).data.match(/^ec:c:(.+):(start|end)$/)\n if (matched) {\n ids.add(matched[1]!)\n }\n }\n for (const child of Array.from((node.childNodes ?? []) as unknown as Iterable<Node>)) {\n visit(child)\n }\n }\n\n for (const root of roots) {\n visit(root)\n }\n\n return ids\n}\n\nconst collectComponentBoundaryRanges = (roots: Node[]) => {\n const starts = new Map<string, Comment>()\n const ranges = new Map<string, { end: Comment; start: Comment }>()\n\n const visit = (node: Node) => {\n if (typeof Comment !== 'undefined' ? node instanceof Comment : (node as Node).nodeType === 8) {\n const commentNode = node as Comment\n const marker = parseComponentBoundaryMarker(commentNode.data)\n if (marker) {\n if (marker.kind === 'start') {\n starts.set(marker.id, commentNode)\n } else {\n const startNode = starts.get(marker.id)\n if (startNode) {\n ranges.set(marker.id, { end: commentNode, start: startNode })\n }\n }\n }\n }\n for (const child of Array.from((node.childNodes ?? []) as unknown as Iterable<Node>)) {\n visit(child)\n }\n }\n\n for (const root of roots) {\n visit(root)\n }\n\n return ranges\n}\n\nconst collectKeyedRangeRanges = (roots: Node[]) => {\n const starts = new Map<string, Comment>()\n const ranges = new Map<string, { end: Comment; start: Comment }>()\n\n const visit = (node: Node) => {\n if (typeof Comment !== 'undefined' ? node instanceof Comment : (node as Node).nodeType === 8) {\n const commentNode = node as Comment\n const marker = parseKeyedRangeMarker(commentNode.data)\n if (marker) {\n if (marker.kind === 'start') {\n starts.set(marker.key, commentNode)\n } else {\n const startNode = starts.get(marker.key)\n if (startNode) {\n ranges.set(marker.key, { end: commentNode, start: startNode })\n }\n }\n }\n }\n for (const child of Array.from((node.childNodes ?? []) as unknown as Iterable<Node>)) {\n visit(child)\n }\n }\n\n for (const root of roots) {\n visit(root)\n }\n\n return ranges\n}\n\nconst collectBoundaryRangeNodes = (start: Comment, end: Comment) => {\n const nodes: Node[] = [start]\n let cursor: Node | null = start.nextSibling\n while (cursor) {\n nodes.push(cursor)\n if (cursor === end) {\n return nodes\n }\n cursor = cursor.nextSibling\n }\n return []\n}\n\nconst preserveComponentBoundaryContentsInRoots = (currentRoots: Node[], nextRoots: Node[]) => {\n const currentRanges = collectComponentBoundaryRanges(currentRoots)\n const nextRanges = collectComponentBoundaryRanges(nextRoots)\n const preservedComponentIds = new Set<string>()\n\n for (const [id, nextRange] of nextRanges) {\n const boundaryChanged = Boolean(\n (\n nextRange.start as Comment & {\n [COMPONENT_BOUNDARY_PROPS_CHANGED]?: boolean\n [COMPONENT_BOUNDARY_SYMBOL_CHANGED]?: boolean\n }\n )[COMPONENT_BOUNDARY_SYMBOL_CHANGED] ||\n (\n nextRange.start as Comment & {\n [COMPONENT_BOUNDARY_PROPS_CHANGED]?: boolean\n [COMPONENT_BOUNDARY_SYMBOL_CHANGED]?: boolean\n }\n )[COMPONENT_BOUNDARY_PROPS_CHANGED],\n )\n if (boundaryChanged) {\n continue\n }\n const currentRange = currentRanges.get(id)\n if (!currentRange) {\n continue\n }\n\n const movedRoots = collectBoundaryRangeNodes(currentRange.start, currentRange.end)\n if (movedRoots.length === 0) {\n continue\n }\n\n const replacementParent = nextRange.start.parentNode\n if (!replacementParent) {\n continue\n }\n\n for (const node of movedRoots) {\n replacementParent.insertBefore(node, nextRange.start)\n }\n\n let cursor: Node | null = nextRange.start\n while (cursor) {\n const nextSibling: Node | null = cursor.nextSibling\n if (typeof (cursor as Node & { remove?: () => void }).remove === 'function') {\n ;(cursor as Node & { remove: () => void }).remove()\n } else {\n cursor.parentNode?.removeChild(cursor)\n }\n if (cursor === nextRange.end) {\n break\n }\n cursor = nextSibling\n }\n\n preservedComponentIds.add(id)\n for (const componentId of collectComponentBoundaryIds(movedRoots)) {\n preservedComponentIds.add(componentId)\n }\n }\n\n return preservedComponentIds\n}\n\nconst preserveProjectionSlotContentsInRoots = (currentRoots: Node[], nextRoots: Node[]) => {\n const currentRanges = collectProjectionSlotRanges(currentRoots)\n const nextRanges = collectProjectionSlotRanges(nextRoots)\n const preservedComponentIds = new Set<string>()\n\n const isPlaceholderProjectionBody = (nodes: Node[]) => {\n if (nodes.length === 0) {\n return true\n }\n\n for (let index = 0; index < nodes.length; index += 1) {\n const node = nodes[index]!\n const token = getPatchOpaqueRangeToken(node, 'start')\n if (!token) {\n return false\n }\n\n let endIndex = index + 1\n while (endIndex < nodes.length) {\n const endToken = getPatchOpaqueRangeToken(nodes[endIndex]!, 'end')\n if (endToken && endToken.rangeKind === token.rangeKind && endToken.token === token.token) {\n break\n }\n endIndex += 1\n }\n\n if (endIndex >= nodes.length || endIndex !== index + 1) {\n return false\n }\n\n index = endIndex\n }\n\n return true\n }\n\n for (const [key, nextRange] of nextRanges) {\n const currentRange = currentRanges.get(key)\n if (!currentRange) {\n continue\n }\n\n const nextBodyNodes = getBoundaryChildren(nextRange.start, nextRange.end)\n if (!isPlaceholderProjectionBody(nextBodyNodes)) {\n continue\n }\n\n const movedRoots: Node[] = []\n let cursor = currentRange.start.nextSibling\n while (cursor && cursor !== currentRange.end) {\n const nextSibling = cursor.nextSibling\n movedRoots.push(cursor)\n cursor = nextSibling\n }\n\n if (movedRoots.length === 0) {\n continue\n }\n\n let nextBodyCursor = nextRange.start.nextSibling\n while (nextBodyCursor && nextBodyCursor !== nextRange.end) {\n const nextSibling = nextBodyCursor.nextSibling\n if (typeof (nextBodyCursor as Node & { remove?: () => void }).remove === 'function') {\n ;(nextBodyCursor as Node & { remove: () => void }).remove()\n } else {\n nextBodyCursor.parentNode?.removeChild(nextBodyCursor)\n }\n nextBodyCursor = nextSibling\n }\n\n for (const node of movedRoots) {\n nextRange.end.parentNode?.insertBefore(node, nextRange.end)\n }\n\n for (const componentId of collectComponentBoundaryIds(movedRoots)) {\n preservedComponentIds.add(componentId)\n }\n }\n\n return preservedComponentIds\n}\n\nconst preserveKeyedRangeContentsInRoots = (currentRoots: Node[], nextRoots: Node[]) => {\n const preservedComponentIds = new Set<string>()\n const currentRanges = collectKeyedRangeRanges(currentRoots)\n const nextRanges = collectKeyedRangeRanges(nextRoots)\n\n for (const [key, nextRange] of nextRanges) {\n const currentRange = currentRanges.get(key)\n if (!currentRange) {\n continue\n }\n\n const movedRoots = collectBoundaryRangeNodes(currentRange.start, currentRange.end)\n if (movedRoots.length === 0) {\n continue\n }\n\n const replacementParent = nextRange.start.parentNode\n if (!replacementParent) {\n continue\n }\n\n for (const node of movedRoots) {\n replacementParent.insertBefore(node, nextRange.start)\n }\n\n let cursor: Node | null = nextRange.start\n while (cursor) {\n const nextSibling: Node | null = cursor.nextSibling\n if (typeof (cursor as Node & { remove?: () => void }).remove === 'function') {\n ;(cursor as Node & { remove: () => void }).remove()\n } else {\n cursor.parentNode?.removeChild(cursor)\n }\n if (cursor === nextRange.end) {\n break\n }\n cursor = nextSibling\n }\n\n for (const componentId of collectComponentBoundaryIds(movedRoots)) {\n preservedComponentIds.add(componentId)\n }\n }\n\n return preservedComponentIds\n}\n\nconst canMatchReusableRoot = (current: Node, next: Node) => {\n if (current.nodeType !== next.nodeType) {\n return false\n }\n\n if (\n (typeof Comment !== 'undefined' ? current instanceof Comment : current.nodeType === 8) &&\n (typeof Comment !== 'undefined' ? next instanceof Comment : next.nodeType === 8)\n ) {\n return (current as Comment).data === (next as Comment).data\n }\n\n if (current.nodeType === DOM_TEXT_NODE && next.nodeType === DOM_TEXT_NODE) {\n return true\n }\n\n return isElementNode(current) && isElementNode(next) && current.tagName === next.tagName\n}\n\nconst preserveInsertMarkerContentsInRoots = (currentRoots: Node[], nextRoots: Node[]) => {\n const preservedComponentIds = new Set<string>()\n\n const preserveLists = (currentChildren: Node[], nextChildren: Node[]) => {\n let currentIndex = 0\n\n for (const nextChild of nextChildren) {\n const nextInsertMarker = (\n typeof Comment !== 'undefined' ? nextChild instanceof Comment : nextChild.nodeType === 8\n )\n ? parseInsertMarker((nextChild as Comment).data)\n : null\n if (nextInsertMarker) {\n let markerIndex = -1\n for (let index = currentIndex; index < currentChildren.length; index += 1) {\n const currentChild = currentChildren[index]!\n if (\n !(typeof Comment !== 'undefined'\n ? currentChild instanceof Comment\n : currentChild.nodeType === 8)\n ) {\n continue\n }\n const currentInsertMarker = parseInsertMarker((currentChild as Comment).data)\n if (currentInsertMarker?.key === nextInsertMarker.key) {\n markerIndex = index\n break\n }\n }\n if (markerIndex < 0) {\n continue\n }\n\n const currentMarker = currentChildren[markerIndex]! as Comment\n const explicitCount = insertMarkerNodeCounts.get(currentMarker)\n if (explicitCount === undefined) {\n currentIndex = markerIndex + 1\n continue\n }\n const ownedStartIndex =\n explicitCount >= 0 && markerIndex - explicitCount >= currentIndex\n ? markerIndex - explicitCount\n : currentIndex\n const movedRoots = currentChildren.slice(ownedStartIndex, markerIndex)\n if (collectComponentBoundaryIds(movedRoots).size > 0) {\n currentIndex = markerIndex + 1\n continue\n }\n\n for (const node of movedRoots) {\n nextChild.parentNode?.insertBefore(node, nextChild)\n }\n insertMarkerNodeCounts.set(nextChild as Comment, movedRoots.length)\n\n for (const componentId of collectComponentBoundaryIds(movedRoots)) {\n preservedComponentIds.add(componentId)\n }\n\n currentIndex = markerIndex + 1\n continue\n }\n\n let matchedIndex = -1\n for (let index = currentIndex; index < currentChildren.length; index += 1) {\n if (canMatchReusableRoot(currentChildren[index]!, nextChild)) {\n matchedIndex = index\n break\n }\n }\n if (matchedIndex < 0) {\n continue\n }\n\n const currentChild = currentChildren[matchedIndex]!\n if (isElementNode(currentChild) && isElementNode(nextChild)) {\n preserveLists(Array.from(currentChild.childNodes), Array.from(nextChild.childNodes))\n }\n currentIndex = matchedIndex + 1\n }\n }\n\n preserveLists(currentRoots, nextRoots)\n\n return preservedComponentIds\n}\n\nexport const preserveReusableContentInRoots = (\n currentRoots: Node[],\n nextRoots: Node[],\n options?: {\n preserveProjectionSlots?: boolean\n },\n) => {\n const preservedComponentIds = preserveComponentBoundaryContentsInRoots(currentRoots, nextRoots)\n\n if (options?.preserveProjectionSlots ?? true) {\n for (const componentId of preserveProjectionSlotContentsInRoots(currentRoots, nextRoots)) {\n preservedComponentIds.add(componentId)\n }\n }\n\n for (const componentId of preserveKeyedRangeContentsInRoots(currentRoots, nextRoots)) {\n preservedComponentIds.add(componentId)\n }\n\n for (const componentId of preserveInsertMarkerContentsInRoots(currentRoots, nextRoots)) {\n preservedComponentIds.add(componentId)\n }\n\n return preservedComponentIds\n}\n\nconst replaceProjectionSlotContents = (start: Comment, end: Comment, nodes: Node[]) => {\n let cursor = start.nextSibling\n while (cursor && cursor !== end) {\n const next = cursor.nextSibling\n cursor.remove()\n cursor = next\n }\n for (const node of nodes) {\n end.parentNode?.insertBefore(node, end)\n }\n rememberManagedAttributesForNodes(nodes)\n}\n\nconst replaceBoundaryContents = (\n start: Comment,\n end: Comment,\n nodes: Node[],\n options?: {\n preserveProjectionSlots?: boolean\n },\n) => {\n const preservedComponentIds = preserveReusableContentInRoots(\n getBoundaryChildren(start, end),\n nodes,\n {\n preserveProjectionSlots: options?.preserveProjectionSlots ?? true,\n },\n )\n let cursor = start.nextSibling\n while (cursor && cursor !== end) {\n const next = cursor.nextSibling\n cursor.remove()\n cursor = next\n }\n for (const node of nodes) {\n end.parentNode?.insertBefore(node, end)\n }\n rememberManagedAttributesForNodes(nodes)\n\n return preservedComponentIds\n}\n\nexport const syncManagedElementAttributes = (current: Element, next: Element) => {\n const nextNames = new Set(next.getAttributeNames())\n const previousNames = getManagedAttributeSnapshot(current) ?? new Set<string>()\n\n for (const name of previousNames) {\n if (!nextNames.has(name)) {\n current.removeAttribute(name)\n }\n }\n\n for (const name of nextNames) {\n const nextValue = next.getAttribute(name)\n if (nextValue !== null && current.getAttribute(name) !== nextValue) {\n current.setAttribute(name, nextValue)\n }\n }\n\n replaceManagedAttributeSnapshot(current, nextNames)\n\n if (isHTMLInputElementNode(current) && isHTMLInputElementNode(next)) {\n if (current.checked !== next.checked) {\n current.checked = next.checked\n }\n }\n if ('value' in current && 'value' in next && current.value !== next.value) {\n if (current.value !== next.value) {\n current.value = next.value\n }\n }\n}\n\nexport const tryPatchElementShellInPlace = (current: Element, next: Element) => {\n if (current.tagName !== next.tagName) {\n return false\n }\n\n syncManagedElementAttributes(current, next)\n preserveReusableContentInRoots(Array.from(current.childNodes), Array.from(next.childNodes))\n while (current.firstChild) {\n current.firstChild.remove()\n }\n while (next.firstChild) {\n current.appendChild(next.firstChild)\n }\n rememberManagedAttributesForNodes(Array.from(current.childNodes))\n return true\n}\n\nconst collectInsertRangeOwnedNodes = (marker: Comment, ownedNodeCount: number) => {\n if (!marker.parentNode || ownedNodeCount === 0) {\n return [] as Node[]\n }\n\n const nodes: Node[] = []\n let cursor: Node | null = marker.previousSibling\n while (cursor && nodes.length < ownedNodeCount) {\n nodes.unshift(cursor)\n cursor = cursor.previousSibling\n }\n\n return nodes.length === ownedNodeCount ? nodes : []\n}\n\nconst replaceInsertRangeOwnedNodes = (\n currentMarker: Comment,\n currentOwnedNodes: Node[],\n nextOwnedNodes: Node[],\n) => {\n const parent = currentMarker.parentNode\n if (!parent) {\n return false\n }\n\n preserveReusableContentInRoots(currentOwnedNodes, nextOwnedNodes)\n\n for (const node of currentOwnedNodes) {\n if (typeof (node as Node & { remove?: () => void }).remove === 'function') {\n ;(node as Node & { remove: () => void }).remove()\n continue\n }\n node.parentNode?.removeChild(node)\n }\n for (const node of nextOwnedNodes) {\n parent.insertBefore(node, currentMarker)\n }\n\n rememberManagedAttributesForNodes(parent.childNodes)\n insertMarkerNodeCounts.set(currentMarker, nextOwnedNodes.length)\n return true\n}\n\ntype PatchSequenceUnit =\n | { kind: 'node'; node: Node; nodeCount: number }\n | {\n bodyNodes: Node[]\n end: Comment\n kind: 'opaque-range'\n nodeCount: number\n rangeKind: 'component-boundary' | 'keyed' | 'projection-slot'\n start: Comment\n token: string\n }\n | {\n kind: 'insert-range'\n marker: Comment\n nodeCount: number\n token: string\n }\n\nconst getPatchOpaqueRangeToken = (node: Node, kind: 'start' | 'end') => {\n if (!(typeof Comment !== 'undefined' ? node instanceof Comment : node.nodeType === 8)) {\n return null\n }\n\n const comment = node as Comment\n const boundary = parseComponentBoundaryMarker(comment.data)\n if (boundary?.kind === kind) {\n return {\n rangeKind: 'component-boundary' as const,\n token: `component-boundary:${boundary.id}`,\n }\n }\n\n const projectionSlot = parseProjectionSlotMarker(comment.data)\n if (projectionSlot?.kind === kind) {\n return {\n rangeKind: 'projection-slot' as const,\n token: `projection-slot:${projectionSlot.key}`,\n }\n }\n\n const keyedRange = parseKeyedRangeMarker(comment.data)\n if (keyedRange?.kind === kind) {\n return {\n rangeKind: 'keyed' as const,\n token: `keyed:${keyedRange.key}`,\n }\n }\n\n return null\n}\n\nconst collectPatchSequenceUnits = (nodes: Node[]): PatchSequenceUnit[] | null => {\n const units: PatchSequenceUnit[] = []\n\n for (let index = 0; index < nodes.length; index += 1) {\n const node = nodes[index]!\n const token = getPatchOpaqueRangeToken(node, 'start')\n if (!token) {\n const insertMarker =\n (typeof Comment !== 'undefined' ? node instanceof Comment : node.nodeType === 8) &&\n parseInsertMarker((node as Comment).data)\n if (!insertMarker) {\n units.push({ kind: 'node', node, nodeCount: 1 })\n continue\n }\n\n const ownedNodeCount = insertMarkerNodeCounts.get(node as Comment) ?? 0\n let remaining = ownedNodeCount\n while (remaining > 0) {\n const previous = units[units.length - 1]\n if (!previous || previous.nodeCount > remaining) {\n return null\n }\n remaining -= previous.nodeCount\n units.pop()\n }\n\n units.push({\n kind: 'insert-range',\n marker: node as Comment,\n nodeCount: ownedNodeCount + 1,\n token: `insert:${insertMarker.key}`,\n })\n continue\n }\n\n let endIndex = index + 1\n while (endIndex < nodes.length) {\n const endToken = getPatchOpaqueRangeToken(nodes[endIndex]!, 'end')\n if (endToken && endToken.rangeKind === token.rangeKind && endToken.token === token.token) {\n break\n }\n endIndex += 1\n }\n if (endIndex >= nodes.length) {\n units.push({ kind: 'node', node, nodeCount: 1 })\n continue\n }\n\n units.push({\n bodyNodes: nodes.slice(index + 1, endIndex),\n end: nodes[endIndex]! as Comment,\n kind: 'opaque-range',\n nodeCount: endIndex - index + 1,\n rangeKind: token.rangeKind,\n start: node as Comment,\n token: token.token,\n })\n index = endIndex\n }\n\n return units\n}\n\nconst hasStructuredPatchUnits = (nodes: Node[]) => {\n const units = collectPatchSequenceUnits(nodes)\n if (!units) {\n return true\n }\n return units.some((unit) => unit.kind !== 'node')\n}\n\nexport const tryPatchNodeSequenceInPlace = (currentNodes: Node[], nextNodes: Node[]) => {\n const currentUnits = collectPatchSequenceUnits(currentNodes)\n const nextUnits = collectPatchSequenceUnits(nextNodes)\n if (!currentUnits || !nextUnits || currentUnits.length !== nextUnits.length) {\n return false\n }\n\n for (let index = 0; index < currentUnits.length; index += 1) {\n const currentUnit = currentUnits[index]!\n const nextUnit = nextUnits[index]!\n if (currentUnit.kind !== nextUnit.kind) {\n return false\n }\n if (currentUnit.kind === 'insert-range' && nextUnit.kind === 'insert-range') {\n const currentOwnedNodes = collectInsertRangeOwnedNodes(\n currentUnit.marker,\n currentUnit.nodeCount - 1,\n )\n const nextOwnedNodes = collectInsertRangeOwnedNodes(nextUnit.marker, nextUnit.nodeCount - 1)\n if (\n currentUnit.token !== nextUnit.token &&\n (hasStructuredPatchUnits(currentOwnedNodes) || hasStructuredPatchUnits(nextOwnedNodes))\n ) {\n return false\n }\n if (\n currentOwnedNodes.length > 0 ||\n nextOwnedNodes.length > 0 ||\n currentUnit.nodeCount !== nextUnit.nodeCount\n ) {\n if (!tryPatchNodeSequenceInPlace(currentOwnedNodes, nextOwnedNodes)) {\n if (\n !replaceInsertRangeOwnedNodes(currentUnit.marker, currentOwnedNodes, nextOwnedNodes)\n ) {\n return false\n }\n } else {\n insertMarkerNodeCounts.set(currentUnit.marker, nextOwnedNodes.length)\n }\n }\n continue\n }\n if (currentUnit.kind === 'opaque-range' && nextUnit.kind === 'opaque-range') {\n if (currentUnit.token !== nextUnit.token || currentUnit.rangeKind !== nextUnit.rangeKind) {\n return false\n }\n if (currentUnit.rangeKind === 'component-boundary') {\n const symbolChanged = Boolean(\n (\n nextUnit.start as Comment & {\n [COMPONENT_BOUNDARY_SYMBOL_CHANGED]?: boolean\n }\n )[COMPONENT_BOUNDARY_SYMBOL_CHANGED],\n )\n if (symbolChanged) {\n return false\n }\n const propsChanged = Boolean(\n (\n nextUnit.start as Comment & {\n [COMPONENT_BOUNDARY_PROPS_CHANGED]?: boolean\n }\n )[COMPONENT_BOUNDARY_PROPS_CHANGED],\n )\n if (propsChanged) {\n const nextRangeNodes = nextUnit.bodyNodes\n if (\n !tryPatchBoundaryContentsInPlace(currentUnit.start, currentUnit.end, nextRangeNodes)\n ) {\n replaceBoundaryContents(currentUnit.start, currentUnit.end, nextRangeNodes)\n }\n }\n } else if (currentUnit.rangeKind === 'keyed') {\n const nextRangeNodes = nextUnit.bodyNodes\n if (!tryPatchNodeSequenceInPlace(currentUnit.bodyNodes, nextRangeNodes)) {\n replaceBoundaryContents(currentUnit.start, currentUnit.end, nextRangeNodes)\n }\n }\n continue\n }\n if (currentUnit.kind !== 'node' || nextUnit.kind !== 'node') {\n return false\n }\n if (!patchNodeInPlace(currentUnit.node, nextUnit.node)) {\n return false\n }\n }\n\n return true\n}\n\nconst patchNodeInPlace = (current: Node, next: Node): boolean => {\n if (current.nodeType !== next.nodeType) {\n return false\n }\n\n if (current.nodeType === DOM_TEXT_NODE && next.nodeType === DOM_TEXT_NODE) {\n if (current.textContent !== next.textContent) {\n current.textContent = next.textContent\n }\n return true\n }\n\n if (current.nodeType === DOM_COMMENT_NODE && next.nodeType === DOM_COMMENT_NODE) {\n const currentComment = current as Comment\n const nextComment = next as Comment\n const currentIsProjectionSlot = !!parseProjectionSlotMarker(currentComment.data)\n const nextIsProjectionSlot = !!parseProjectionSlotMarker(nextComment.data)\n const currentIsBoundaryMarker = !!parseComponentBoundaryMarker(currentComment.data)\n const nextIsBoundaryMarker = !!parseComponentBoundaryMarker(nextComment.data)\n const currentIsInsertMarker = !!parseInsertMarker(currentComment.data)\n const nextIsInsertMarker = !!parseInsertMarker(nextComment.data)\n if (\n currentIsProjectionSlot ||\n nextIsProjectionSlot ||\n currentIsBoundaryMarker ||\n nextIsBoundaryMarker ||\n currentIsInsertMarker ||\n nextIsInsertMarker\n ) {\n return currentComment.data === nextComment.data\n }\n if (currentComment.data !== nextComment.data) {\n currentComment.data = nextComment.data\n }\n return true\n }\n\n if (!isElementNode(current) || !isElementNode(next) || current.tagName !== next.tagName) {\n return false\n }\n\n if (tryPatchNodeSequenceInPlace(Array.from(current.childNodes), Array.from(next.childNodes))) {\n syncManagedElementAttributes(current, next)\n return true\n }\n\n return tryPatchElementShellInPlace(current, next)\n}\n\nexport const tryPatchBoundaryContentsInPlace = (\n start: Comment,\n end: Comment,\n nextNodes: Node[],\n) => {\n const currentNodes = getBoundaryChildren(start, end)\n return tryPatchNodeSequenceInPlace(currentNodes, nextNodes)\n}\n\ninterface FocusSnapshot {\n path: number[]\n selectionDirection?: 'backward' | 'forward' | 'none' | null\n selectionEnd?: number | null\n selectionStart?: number | null\n}\n\ninterface PendingFocusRestore {\n snapshot: FocusSnapshot\n}\n\nconst getBoundaryChildren = (start: Comment, end: Comment) => {\n const nodes: Node[] = []\n let cursor = start.nextSibling\n while (cursor && cursor !== end) {\n nodes.push(cursor)\n cursor = cursor.nextSibling\n }\n return nodes\n}\n\nconst collectMountedBoundaryDescendants = (component: ComponentState) =>\n component.start && component.end\n ? collectComponentBoundaryIds(getBoundaryChildren(component.start, component.end))\n : new Set<string>()\n\nconst collectMountedDescendantComponentIds = (\n container: RuntimeContainer,\n component: ComponentState,\n) => expandComponentIdsToDescendants(container, collectMountedBoundaryDescendants(component))\n\nconst collectProjectionSlotComponentIds = (roots: Node[]) => {\n const preserved = new Set<string>()\n for (const range of collectProjectionSlotRanges(roots).values()) {\n for (const componentId of collectComponentBoundaryIds(\n getBoundaryChildren(range.start, range.end),\n )) {\n preserved.add(componentId)\n }\n }\n return preserved\n}\n\nconst collectPreservedProjectionSlotComponentIds = (\n container: RuntimeContainer,\n start: Comment,\n end: Comment,\n) =>\n expandComponentIdsToDescendants(\n container,\n collectProjectionSlotComponentIds(getBoundaryChildren(start, end)),\n )\n\nconst getNodePath = (root: Node, target: Node): number[] | null => {\n if (root === target) {\n return []\n }\n\n const path: number[] = []\n let cursor: Node | null = target\n while (cursor && cursor !== root) {\n const parent: Node | null = cursor.parentNode\n if (!parent) {\n return null\n }\n const index = Array.prototype.indexOf.call(parent.childNodes, cursor)\n if (index < 0) {\n return null\n }\n path.unshift(index)\n cursor = parent\n }\n\n return cursor === root ? path : null\n}\n\nconst getNodeByPath = (root: Node, path: number[]) => {\n let cursor: Node | null = root\n for (const index of path) {\n const childNodes: NodeListOf<ChildNode> | Node[] | undefined = cursor\n ? ((cursor.childNodes as NodeListOf<ChildNode>) ?? undefined)\n : undefined\n cursor =\n (childNodes &&\n ('item' in childNodes\n ? (childNodes.item(index) as Node | null)\n : ((childNodes as unknown as Node[])[index] ?? null))) ??\n null\n if (!cursor) {\n return null\n }\n }\n return cursor\n}\n\nconst getElementPath = (root: Element, target: Element): number[] | null => {\n if (root === target) {\n return []\n }\n\n const path: number[] = []\n let cursor: Element | null = target\n while (cursor && cursor !== root) {\n const parent: HTMLElement | null = cursor.parentElement\n if (!parent) {\n return null\n }\n const index = Array.prototype.indexOf.call(parent.children, cursor)\n if (index < 0) {\n return null\n }\n path.unshift(index)\n cursor = parent\n }\n\n return cursor === root ? path : null\n}\n\nconst getElementByPath = (root: Element, path: number[]) => {\n let cursor: Element | null = root\n for (const index of path) {\n const children: HTMLCollection | Element[] | undefined = cursor\n ? ((cursor.children as HTMLCollection) ?? undefined)\n : undefined\n cursor =\n (children &&\n ('item' in children\n ? (children.item(index) as Element | null)\n : ((children as unknown as Element[])[index] ?? null))) ??\n null\n if (!cursor) {\n return null\n }\n }\n return cursor\n}\n\nconst captureBoundaryFocus = (\n doc: Document,\n start: Comment,\n end: Comment,\n): FocusSnapshot | null => {\n const activeElement = doc.activeElement\n if (!isHTMLElementNode(activeElement)) {\n return null\n }\n\n const topLevelNodes = getBoundaryChildren(start, end)\n for (let i = 0; i < topLevelNodes.length; i++) {\n const candidate = topLevelNodes[i]\n if (\n candidate !== activeElement &&\n (!isElementNode(candidate) || !candidate.contains(activeElement))\n ) {\n continue\n }\n\n const innerPath = getNodePath(candidate, activeElement)\n if (!innerPath) {\n continue\n }\n\n return {\n path: [i, ...innerPath],\n selectionDirection: isTextEntryElement(activeElement)\n ? activeElement.selectionDirection\n : null,\n selectionEnd: isTextEntryElement(activeElement) ? activeElement.selectionEnd : null,\n selectionStart: isTextEntryElement(activeElement) ? activeElement.selectionStart : null,\n }\n }\n\n return null\n}\n\nconst restoreBoundaryFocus = (\n doc: Document,\n start: Comment,\n end: Comment,\n snapshot: FocusSnapshot | null,\n) => {\n if (!snapshot) {\n return\n }\n\n const [topLevelIndex, ...innerPath] = snapshot.path\n const root = getBoundaryChildren(start, end)[topLevelIndex]\n if (!root) {\n return\n }\n\n const nextActive = innerPath.length > 0 ? getNodeByPath(root, innerPath) : root\n if (!isHTMLElementNode(nextActive)) {\n return\n }\n\n restoreFocusTarget(doc, nextActive, snapshot)\n}\n\nconst restoreFocusTarget = (doc: Document, nextActive: HTMLElement, snapshot: FocusSnapshot) => {\n const restore = () => {\n if (!nextActive.isConnected) {\n return false\n }\n nextActive.focus({ preventScroll: true })\n if (\n isTextEntryElement(nextActive) &&\n snapshot.selectionStart !== null &&\n snapshot.selectionStart !== undefined\n ) {\n nextActive.setSelectionRange(\n snapshot.selectionStart,\n snapshot.selectionEnd ?? snapshot.selectionStart,\n snapshot.selectionDirection ?? undefined,\n )\n }\n return doc.activeElement === nextActive\n }\n\n if (restore()) {\n return\n }\n\n const win = doc.defaultView\n if (!win) {\n return\n }\n\n let remainingAttempts = 3\n const retry = () => {\n if (remainingAttempts <= 0) {\n return\n }\n remainingAttempts--\n const run = () => {\n if (restore()) {\n return\n }\n retry()\n }\n\n if (typeof win.requestAnimationFrame === 'function') {\n win.requestAnimationFrame(() => run())\n return\n }\n win.setTimeout(run, 16)\n }\n\n retry()\n}\n\nconst captureDocumentFocus = (\n doc: Document,\n focusSource?: EventTarget | null,\n): FocusSnapshot | null => {\n const candidate = isHTMLElementNode(focusSource)\n ? focusSource\n : isHTMLElementNode(doc.activeElement)\n ? doc.activeElement\n : null\n if (!candidate) {\n return null\n }\n\n const path = getElementPath(doc.body, candidate)\n if (!path) {\n return null\n }\n\n return {\n path,\n selectionDirection: isTextEntryElement(candidate) ? candidate.selectionDirection : null,\n selectionEnd: isTextEntryElement(candidate) ? candidate.selectionEnd : null,\n selectionStart: isTextEntryElement(candidate) ? candidate.selectionStart : null,\n }\n}\n\nconst capturePendingFocusRestore = (\n container: RuntimeContainer,\n focusSource?: EventTarget | null,\n): PendingFocusRestore | null => {\n if (!container.doc) {\n return null\n }\n\n const snapshot = captureDocumentFocus(container.doc, focusSource)\n if (!snapshot) {\n return null\n }\n return {\n snapshot,\n }\n}\n\nconst shouldSkipPendingFocusRestore = (\n container: RuntimeContainer,\n pending: PendingFocusRestore,\n) => {\n if (!container.doc) {\n return false\n }\n\n const activeElement = container.doc.activeElement\n if (!isHTMLElementNode(activeElement)) {\n return false\n }\n if (\n activeElement === container.doc.body ||\n !activeElement.isConnected ||\n !container.doc.body.contains(activeElement)\n ) {\n return false\n }\n\n const activePath = getElementPath(container.doc.body, activeElement)\n if (!activePath) {\n return false\n }\n\n if (activePath.length !== pending.snapshot.path.length) {\n return true\n }\n\n return activePath.some((index, position) => index !== pending.snapshot.path[position])\n}\n\nconst restorePendingFocus = (container: RuntimeContainer, pending: PendingFocusRestore | null) => {\n if (!pending || !container.doc) {\n return\n }\n if (shouldSkipPendingFocusRestore(container, pending)) {\n return\n }\n\n const nextActive = getElementByPath(container.doc.body, pending.snapshot.path)\n if (!isHTMLElementNode(nextActive)) {\n return\n }\n\n restoreFocusTarget(container.doc, nextActive, pending.snapshot)\n}\n\nconst EVENT_PROP_REGEX = /^on([A-Z].+)$/\nconst DANGEROUSLY_SET_INNER_HTML_PROP = 'dangerouslySetInnerHTML'\n\nconst resolveDangerouslySetInnerHTML = (value: unknown) =>\n value === false || value === undefined || value === null ? null : String(value)\n\nconst toEventName = (propName: string) => {\n const matched = propName.match(EVENT_PROP_REGEX)\n if (!matched) {\n return null\n }\n const [first, ...rest] = matched[1]\n return `${first.toLowerCase()}${rest.join('')}`\n}\n\nconst TEXT_ESCAPE_REGEX = /[&<>]/\nconst ATTR_ESCAPE_REGEX = /[&<>'\"]/\n\nconst escapeString = (value: string, mode: 'text' | 'attr') => {\n const escapePattern = mode === 'attr' ? ATTR_ESCAPE_REGEX : TEXT_ESCAPE_REGEX\n const firstMatch = value.search(escapePattern)\n if (firstMatch < 0) {\n return value\n }\n\n let output = ''\n let lastIndex = 0\n for (let index = firstMatch; index < value.length; index += 1) {\n let escaped: string | null = null\n switch (value.charCodeAt(index)) {\n case 34:\n escaped = mode === 'attr' ? '"' : null\n break\n case 38:\n escaped = '&'\n break\n case 39:\n escaped = mode === 'attr' ? ''' : null\n break\n case 60:\n escaped = '<'\n break\n case 62:\n escaped = '>'\n break\n }\n if (!escaped) {\n continue\n }\n output += value.slice(lastIndex, index)\n output += escaped\n lastIndex = index + 1\n }\n return output + value.slice(lastIndex)\n}\n\nconst escapeText = (value: string) => escapeString(value, 'text')\n\nconst escapeAttr = (value: string) => escapeString(value, 'attr')\n\nconst renderSSRAttr = (name: string, value: unknown) => {\n if (value === false || value === undefined || value === null) {\n return ''\n }\n if (value === true) {\n return ` ${name}`\n }\n return ` ${name}=\"${escapeAttr(String(value))}\"`\n}\n\nconst renderStringArray = (values: readonly (JSX.Element | JSX.Element[])[]) => {\n let output = ''\n for (let index = 0; index < values.length; index += 1) {\n output += renderStringNode(values[index] as JSX.Element | JSX.Element[])\n }\n return output\n}\n\nconst renderSSRTemplateValue = (value: unknown): string => {\n if (value === false || value === null || value === undefined) {\n return ''\n }\n if (Array.isArray(value)) {\n return renderStringArray(value as readonly (JSX.Element | JSX.Element[])[])\n }\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return escapeText(String(value))\n }\n if (isSSRTemplate(value)) {\n return renderSSRTemplateNode(value)\n }\n if (isProjectionSlot(value)) {\n return renderProjectionSlotToString(value)\n }\n if (isRouteSlot(value)) {\n const routeElement = resolveRouteSlot(getCurrentContainer(), value)\n return routeElement ? renderStringNode(routeElement as JSX.Element) : ''\n }\n return renderStringNode(value as JSX.Element)\n}\n\nconst renderSSRTemplateNode = (template: JSX.SSRTemplate) => {\n let output = template.strings[0] ?? ''\n for (let index = 0; index < template.values.length; index += 1) {\n const value = template.values[index]\n output += isSSRAttrValue(value)\n ? renderSSRAttr(value.name, value.value)\n : renderSSRTemplateValue(value)\n output += template.strings[index + 1] ?? ''\n }\n return output\n}\n\nconst resolveRenderable = (value: JSX.Element): JSX.Element => {\n let current = value\n while (\n typeof current === 'function' &&\n !getLazyMeta(current) &&\n !getComponentMeta(current) &&\n !getContextProviderMeta(current)\n ) {\n current = current()\n }\n return current\n}\n\nconst nextComponentPosition = (container: RuntimeContainer) => {\n const frame = getCurrentFrame()\n if (!frame) {\n return {\n childIndex: container.rootChildCursor++,\n parentId: ROOT_COMPONENT_ID,\n }\n }\n return {\n childIndex: frame.childCursor++,\n parentId: frame.component.id,\n }\n}\n\nconst registerEventBinding = (\n container: RuntimeContainer,\n descriptor: EventDescriptor | LazyMeta,\n): string => {\n const scopeId = registerScope(container, descriptor.captures())\n return `${descriptor.symbol}:${scopeId}`\n}\n\nconst getRuntimeEventDescriptor = (value: unknown): EventDescriptor | LazyMeta | null =>\n getEventMeta(value) ?? getLazyMeta(value)\n\nconst isForValue = (value: unknown): value is ForValue =>\n !!value && typeof value === 'object' && (value as ForValue).__e_for === true\n\nconst isShowValue = (value: unknown): value is ShowValue =>\n !!value && typeof value === 'object' && (value as ShowValue).__e_show === true\n\nexport const bindRuntimeEvent = (element: Element, eventName: string, value: unknown): boolean => {\n const descriptor = getRuntimeEventDescriptor(value)\n if (!descriptor) {\n return false\n }\n\n const container = getCurrentContainer()\n if (!container) {\n return false\n }\n\n element.setAttribute('data-eid', `e${container.nextElementId++}`)\n element.setAttribute(`data-e-on${eventName}`, registerEventBinding(container, descriptor))\n syncManagedAttributeSnapshot(element, 'data-eid')\n syncManagedAttributeSnapshot(element, `data-e-on${eventName}`)\n return true\n}\n\nconst renderProjectionSlotToString = (slot: ProjectionSlotValue) => {\n const frame = getCurrentFrame()\n const start = createProjectionSlotMarker(slot.componentId, slot.name, slot.occurrence, 'start')\n const end = createProjectionSlotMarker(slot.componentId, slot.name, slot.occurrence, 'end')\n if (frame?.component.id === slot.componentId && frame.projectionState.reuseExistingDom) {\n return `<!--${start}--><!--${end}-->`\n }\n return `<!--${start}-->${renderStringNode(slot.source as JSX.Element)}<!--${end}-->`\n}\n\nconst wrapStringWithKeyedRange = (value: string, key: string | number | symbol) => {\n const start = createKeyedRangeMarker(key, 'start')\n const end = createKeyedRangeMarker(key, 'end')\n return `<!--${start}-->${value}<!--${end}-->`\n}\n\nconst resolveForItemKey = <T>(\n value: ForValue<T>,\n item: T,\n index: number,\n): string | number | symbol =>\n value.key\n ? value.key(item, index)\n : typeof item === 'string' || typeof item === 'number' || typeof item === 'symbol'\n ? item\n : index\n\nconst stripForChildRootKey = (value: JSX.Element): JSX.Element => {\n const resolved = resolveRenderable(value)\n if (!isRenderObject(resolved) || resolved.key === null || resolved.key === undefined) {\n return resolved\n }\n return {\n ...resolved,\n key: undefined,\n }\n}\n\nconst resolveShowBranch = <T>(value: ShowValue<T>): JSX.Element => {\n const branch = !value.when ? (value.fallback ?? null) : value.children\n return typeof branch === 'function'\n ? (branch as (nextValue: T) => JSX.Element)(value.when)\n : branch\n}\n\nconst renderForValueToString = <T>(value: ForValue<T>): string => {\n if (value.arr.length === 0) {\n return renderStringNode((value.fallback ?? null) as JSX.Element)\n }\n\n let output = ''\n for (let index = 0; index < value.arr.length; index += 1) {\n const item = value.arr[index]!\n output += wrapStringWithKeyedRange(\n renderStringNode(stripForChildRootKey(value.fn(item, index))),\n resolveForItemKey(value, item, index),\n )\n }\n return output\n}\n\nconst renderProjectionSlotToNodes = (slot: ProjectionSlotValue, container: RuntimeContainer) => {\n if (!container.doc) {\n throw new Error('Client rendering requires a document.')\n }\n const frame = getCurrentFrame()\n\n const start = container.doc.createComment(\n createProjectionSlotMarker(slot.componentId, slot.name, slot.occurrence, 'start'),\n )\n const end = container.doc.createComment(\n createProjectionSlotMarker(slot.componentId, slot.name, slot.occurrence, 'end'),\n )\n if (frame?.component.id === slot.componentId && frame.projectionState.reuseExistingDom) {\n return [start, end]\n }\n return [start, ...renderClientInsertable(slot.source, container), end]\n}\n\nconst renderContextProviderToString = (\n token: RuntimeContextToken,\n props: Record<string, unknown>,\n) =>\n withRuntimeContextValue(token, props.value, () =>\n renderStringNode((props.children ?? null) as JSX.Element | JSX.Element[]),\n )\n\nconst renderContextProviderToNodes = (\n token: RuntimeContextToken,\n props: Record<string, unknown>,\n container: RuntimeContainer,\n) =>\n withRuntimeContextValue(token, props.value, () =>\n renderClientNodes((props.children ?? null) as JSX.Element | JSX.Element[], container),\n )\n\nconst renderStringNode = (inputElementLike: JSX.Element | JSX.Element[]): string => {\n if (Array.isArray(inputElementLike)) {\n return renderStringArray(inputElementLike)\n }\n\n const resolved = resolveRenderable(inputElementLike as JSX.Element)\n if (resolved === false || resolved === null || resolved === undefined) {\n return ''\n }\n if (Array.isArray(resolved)) {\n return renderStringNode(resolved)\n }\n if (\n typeof resolved === 'string' ||\n typeof resolved === 'number' ||\n typeof resolved === 'boolean'\n ) {\n return escapeText(String(resolved))\n }\n if (isShowValue(resolved)) {\n return renderStringNode(resolveShowBranch(resolved))\n }\n if (isForValue(resolved)) {\n return renderForValueToString(resolved)\n }\n if (isSSRTemplate(resolved)) {\n return renderSSRTemplateNode(resolved)\n }\n if (isProjectionSlot(resolved)) {\n return renderProjectionSlotToString(resolved)\n }\n if (isRouteSlot(resolved)) {\n const routeElement = resolveRouteSlot(getCurrentContainer(), resolved)\n return routeElement ? renderStringNode(routeElement as JSX.Element) : ''\n }\n if (!isRenderObject(resolved)) {\n return ''\n }\n\n if (isSuspenseType(resolved.type)) {\n const rendered = renderSuspenseComponentToString(resolved.props as SuspenseProps)\n return resolved.key === null || resolved.key === undefined\n ? rendered\n : wrapStringWithKeyedRange(rendered, resolved.key)\n }\n\n if (typeof resolved.type === 'function') {\n const providerMeta = getContextProviderMeta(resolved.type)\n if (providerMeta) {\n return renderContextProviderToString(providerMeta.token, evaluateProps(resolved.props))\n }\n\n const container = getCurrentContainer()\n const componentFn = resolved.type as Component\n const meta = getComponentMeta(componentFn)\n if (!meta || !container) {\n const rendered = renderStringNode(componentFn(resolved.props))\n return resolved.key === null || resolved.key === undefined\n ? rendered\n : wrapStringWithKeyedRange(rendered, resolved.key)\n }\n\n const evaluatedProps = evaluateProps(resolved.props)\n const position = nextComponentPosition(container)\n const componentId = createComponentId(container, position.parentId, position.childIndex)\n const component = getOrCreateComponentState(\n container,\n componentId,\n meta.symbol,\n position.parentId,\n )\n component.scopeId = registerScope(container, meta.captures())\n component.optimizedRoot = meta.optimizedRoot === true\n component.props = evaluatedProps\n component.projectionSlots = meta.projectionSlots ?? null\n const frame = createFrame(container, component, 'ssr')\n clearComponentSubscriptions(container, component.id)\n const renderProps = createRenderProps(componentId, meta, resolved.props)\n\n const body = pushFrame(frame, () => renderStringNode(componentFn(renderProps)))\n pruneComponentVisibles(container, component, frame.visibleCursor)\n pruneComponentWatches(container, component, frame.watchCursor)\n const rendered = `<!--ec:c:${componentId}:start-->${renderFrameScopedStylesToString(frame)}${body}<!--ec:c:${componentId}:end-->`\n return resolved.key === null || resolved.key === undefined\n ? rendered\n : wrapStringWithKeyedRange(rendered, resolved.key)\n }\n\n const attrParts: string[] = []\n const container = getCurrentContainer()\n const frame = getCurrentFrame()\n let hasInnerHTML = false\n let innerHTML: string | null = null\n\n if (frame && hasScopedStyles(frame) && resolved.type !== 'style') {\n attrParts.push(`${SCOPED_STYLE_ATTR}=\"${escapeAttr(frame.component.scopeId)}\"`)\n }\n\n for (const name in resolved.props) {\n if (!Object.hasOwn(resolved.props, name)) {\n continue\n }\n if (name === 'children') {\n continue\n }\n\n const eventName = toEventName(name)\n const value = resolved.props[name]\n\n if (name === BIND_VALUE_PROP) {\n const signalId = getBindableSignalId(value)\n if (!signalId) {\n continue\n }\n attrParts.push(`${BIND_VALUE_ATTR}=\"${escapeAttr(signalId)}\"`)\n const currentValue = readBindableSignalValue(value)\n if (currentValue !== undefined && currentValue !== null) {\n attrParts.push(`value=\"${escapeAttr(String(currentValue))}\"`)\n }\n continue\n }\n\n if (name === BIND_CHECKED_PROP) {\n const signalId = getBindableSignalId(value)\n if (!signalId) {\n continue\n }\n attrParts.push(`${BIND_CHECKED_ATTR}=\"${escapeAttr(signalId)}\"`)\n if (readBindableSignalValue(value)) {\n attrParts.push('checked')\n }\n continue\n }\n\n if (eventName) {\n const eventMeta = getRuntimeEventDescriptor(value)\n if (!eventMeta || !container) {\n continue\n }\n attrParts.push(`data-eid=\"e${container.nextElementId++}\"`)\n attrParts.push(\n `data-e-on${eventName}=\"${escapeAttr(registerEventBinding(container, eventMeta))}\"`,\n )\n continue\n }\n\n if (name === 'ref') {\n const signalId = getRefSignalId(value)\n if (signalId) {\n attrParts.push(`${REF_SIGNAL_ATTR}=\"${escapeAttr(signalId)}\"`)\n }\n continue\n }\n\n if (name === DANGEROUSLY_SET_INNER_HTML_PROP) {\n hasInnerHTML = true\n innerHTML = resolveDangerouslySetInnerHTML(value)\n continue\n }\n\n if (value === false || value === undefined || value === null) {\n continue\n }\n\n if (resolved.type === 'body' && name === 'data-e-resume') {\n continue\n }\n\n if (value === true) {\n attrParts.push(name)\n continue\n }\n\n attrParts.push(`${name}=\"${escapeAttr(String(value))}\"`)\n }\n\n if (resolved.type === 'body' && container) {\n attrParts.push('data-e-resume=\"paused\"')\n }\n\n let childrenText = innerHTML ?? ''\n if (!hasInnerHTML) {\n const children = resolved.props.children\n if (Array.isArray(children)) {\n for (const child of children) {\n childrenText += renderStringNode(child)\n }\n } else {\n childrenText += renderStringNode(children as JSX.Element)\n }\n }\n\n const rendered =\n resolved.type === FRAGMENT\n ? childrenText\n : `<${resolved.type}${attrParts.length > 0 ? ` ${attrParts.join(' ')}` : ''}>${childrenText}</${\n resolved.type\n }>`\n return resolved.key === null || resolved.key === undefined\n ? rendered\n : wrapStringWithKeyedRange(rendered, resolved.key)\n}\n\nconst createElementNode = (doc: Document, tagName: string) => doc.createElement(tagName)\n\nconst renderComponentToNodes = (\n componentFn: Component,\n props: Record<string, unknown>,\n container: RuntimeContainer,\n mode: RenderFrame['mode'],\n rawProps?: Record<string, unknown>,\n): Node[] => {\n if (!container.doc) {\n throw new Error('Client rendering requires a document.')\n }\n const meta = getComponentMeta(componentFn)\n if (!meta) {\n return renderClientNodes(componentFn((rawProps ?? props) as Record<string, unknown>), container)\n }\n\n const position = nextComponentPosition(container)\n const componentId = createComponentId(container, position.parentId, position.childIndex)\n const existing = container.components.get(componentId)\n const symbolChanged = !!existing && existing.symbol !== meta.symbol\n const component = getOrCreateComponentState(\n container,\n componentId,\n meta.symbol,\n position.parentId,\n )\n const wasActive = component.active\n const previousRenderProps =\n ((component.rawProps ?? component.props) as Record<string, unknown> | null) ?? null\n component.active = mode === 'client'\n if (!existing || symbolChanged) {\n resetComponentForSymbolChange(container, component, meta)\n }\n component.optimizedRoot = meta.optimizedRoot === true\n component.props = props\n component.rawProps = rawProps ?? null\n component.projectionSlots = meta.projectionSlots ?? null\n const parentFrame = getCurrentFrame()\n const shouldReuseProjectionSlotDom = parentFrame?.projectionState.reuseProjectionSlotDom ?? false\n const previousStart = component.start\n const previousEnd = component.end\n const propsChanged =\n symbolChanged ||\n !areShallowEqualRenderProps(\n previousRenderProps,\n ((rawProps ?? props) as Record<string, unknown> | null) ?? null,\n )\n const boundaryContentsChanged = propsChanged || (!wasActive && !!previousStart && !!previousEnd)\n if (mode === 'client' && wasActive && previousStart && previousEnd && !boundaryContentsChanged) {\n const start = container.doc.createComment(`ec:c:${componentId}:start`)\n const end = container.doc.createComment(`ec:c:${componentId}:end`)\n ;(\n start as Comment & {\n [COMPONENT_BOUNDARY_PROPS_CHANGED]?: boolean\n [COMPONENT_BOUNDARY_SYMBOL_CHANGED]?: boolean\n }\n )[COMPONENT_BOUNDARY_PROPS_CHANGED] = false\n ;(\n start as Comment & {\n [COMPONENT_BOUNDARY_PROPS_CHANGED]?: boolean\n [COMPONENT_BOUNDARY_SYMBOL_CHANGED]?: boolean\n }\n )[COMPONENT_BOUNDARY_SYMBOL_CHANGED] = false\n\n if (parentFrame) {\n for (const descendantId of expandComponentIdsToDescendants(container, [componentId])) {\n parentFrame.visitedDescendants.add(descendantId)\n }\n }\n\n return [start, end]\n }\n const speculativeEffectCleanupSlot =\n !previousStart || !previousEnd ? null : boundaryContentsChanged ? null : createCleanupSlot()\n if (!speculativeEffectCleanupSlot) {\n resetComponentRenderEffects(component)\n }\n const frame = createFrame(container, component, mode, {\n effectCleanupSlot: speculativeEffectCleanupSlot ?? component.renderEffectCleanupSlot,\n reuseExistingDom: shouldReuseProjectionSlotDom,\n reuseProjectionSlotDom: shouldReuseProjectionSlotDom,\n })\n clearComponentSubscriptions(container, componentId)\n const oldDescendants = collectDescendantIds(container, componentId)\n const start = container.doc.createComment(`ec:c:${componentId}:start`)\n const end = container.doc.createComment(`ec:c:${componentId}:end`)\n ;(\n start as Comment & {\n [COMPONENT_BOUNDARY_PROPS_CHANGED]?: boolean\n [COMPONENT_BOUNDARY_SYMBOL_CHANGED]?: boolean\n }\n )[COMPONENT_BOUNDARY_PROPS_CHANGED] = boundaryContentsChanged\n ;(\n start as Comment & {\n [COMPONENT_BOUNDARY_PROPS_CHANGED]?: boolean\n [COMPONENT_BOUNDARY_SYMBOL_CHANGED]?: boolean\n }\n )[COMPONENT_BOUNDARY_SYMBOL_CHANGED] = symbolChanged\n if (!previousStart || !previousEnd) {\n component.start = start\n component.end = end\n }\n const renderProps = createRenderProps(componentId, meta, rawProps ?? props)\n let rendered: Node[]\n try {\n rendered = pushFrame(frame, () => toMountedNodes(componentFn(renderProps), container))\n } catch (error) {\n disposeCleanupSlot(speculativeEffectCleanupSlot)\n if (isPendingSignalError(error) && parentFrame) {\n parentFrame.visitedDescendants.add(componentId)\n for (const descendantId of frame.visitedDescendants) {\n parentFrame.visitedDescendants.add(descendantId)\n }\n }\n throw error\n }\n disposeCleanupSlot(speculativeEffectCleanupSlot)\n pruneComponentVisibles(container, component, frame.visibleCursor)\n pruneComponentWatches(container, component, frame.watchCursor)\n const preservedDescendants =\n frame.projectionState.reuseExistingDom && previousStart && previousEnd\n ? collectPreservedProjectionSlotComponentIds(container, previousStart, previousEnd)\n : new Set<string>()\n const keptDescendants = new Set([\n ...frame.visitedDescendants,\n ...preservedDescendants,\n ...collectMountedDescendantComponentIds(container, component),\n ])\n pruneRemovedComponents(container, componentId, keptDescendants)\n\n for (const descendantId of oldDescendants) {\n if (keptDescendants.has(descendantId)) {\n continue\n }\n clearComponentSubscriptions(container, descendantId)\n }\n\n if (parentFrame) {\n parentFrame.visitedDescendants.add(componentId)\n for (const descendantId of keptDescendants) {\n parentFrame.visitedDescendants.add(descendantId)\n }\n }\n\n scheduleMountCallbacks(container, component, frame.mountCallbacks)\n scheduleVisibleCallbacksCheck(container)\n syncEffectOnlyLocalSignalPreference(component)\n\n return [start, ...renderFrameScopedStylesToNodes(frame, container), ...rendered, end]\n}\n\nconst wrapNodesWithKeyedRange = (\n doc: Document,\n nodes: Node[],\n key: string | number | symbol,\n): Node[] => [\n doc.createComment(createKeyedRangeMarker(key, 'start')),\n ...nodes,\n doc.createComment(createKeyedRangeMarker(key, 'end')),\n]\n\nconst renderForValueToNodes = <T>(value: ForValue<T>, container: RuntimeContainer): Node[] => {\n if (value.arr.length === 0) {\n return renderClientNodes((value.fallback ?? null) as JSX.Element, container)\n }\n\n const nodes: Node[] = []\n for (let index = 0; index < value.arr.length; index += 1) {\n const item = value.arr[index]!\n nodes.push(\n ...wrapNodesWithKeyedRange(\n container.doc!,\n renderClientNodes(stripForChildRootKey(value.fn(item, index)), container),\n resolveForItemKey(value, item, index),\n ),\n )\n }\n return nodes\n}\n\nconst applyElementProp = (\n element: HTMLElement,\n name: string,\n value: unknown,\n container: RuntimeContainer,\n) => {\n if (name === BIND_VALUE_PROP) {\n const signalId = getBindableSignalId(value)\n if (signalId) {\n element.setAttribute(BIND_VALUE_ATTR, signalId)\n }\n if ('value' in element) {\n ;(element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement).value = String(\n readBindableSignalValue(value) ?? '',\n )\n }\n return\n }\n\n if (name === BIND_CHECKED_PROP) {\n const signalId = getBindableSignalId(value)\n if (signalId) {\n element.setAttribute(BIND_CHECKED_ATTR, signalId)\n }\n if (isHTMLInputElementNode(element)) {\n element.checked = Boolean(readBindableSignalValue(value))\n }\n return\n }\n\n const eventName = toEventName(name)\n if (eventName) {\n const eventMeta = getRuntimeEventDescriptor(value)\n if (!eventMeta) {\n return\n }\n element.setAttribute('data-eid', `e${container.nextElementId++}`)\n element.setAttribute(`data-e-on${eventName}`, registerEventBinding(container, eventMeta))\n return\n }\n\n if (name === 'ref') {\n syncRuntimeRefMarker(element, value)\n assignRuntimeRef(value, element, container)\n return\n }\n\n if (name === DANGEROUSLY_SET_INNER_HTML_PROP) {\n const html = resolveDangerouslySetInnerHTML(value)\n if (html !== null) {\n element.innerHTML = html\n }\n return\n }\n\n if (value === false || value === undefined || value === null) {\n return\n }\n\n if (name === 'class') {\n element.className = String(value)\n return\n }\n\n if (name === 'style' && isPlainObject(value)) {\n element.setAttribute(\n 'style',\n Object.entries(value)\n .map(([styleName, styleValue]) => `${styleName}: ${styleValue}`)\n .join('; '),\n )\n return\n }\n\n if (name === 'value' && 'value' in element) {\n ;(element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement).value = String(value)\n }\n if (name === 'checked' && isHTMLInputElementNode(element)) {\n element.checked = Boolean(value)\n }\n\n if (value === true) {\n element.setAttribute(name, '')\n return\n }\n\n element.setAttribute(name, String(value))\n}\n\nexport const renderClientNodes = (\n inputElementLike: JSX.Element | JSX.Element[],\n container: RuntimeContainer,\n): Node[] => {\n if (!container.doc) {\n throw new Error('Client rendering requires a document.')\n }\n if (Array.isArray(inputElementLike)) {\n return inputElementLike.flatMap((entry) => renderClientNodes(entry, container))\n }\n\n const resolved = resolveRenderable(inputElementLike as JSX.Element)\n if (resolved === false || resolved === null || resolved === undefined) {\n return []\n }\n if (Array.isArray(resolved)) {\n return renderClientNodes(resolved, container)\n }\n if (\n typeof resolved === 'string' ||\n typeof resolved === 'number' ||\n typeof resolved === 'boolean'\n ) {\n return [container.doc.createTextNode(String(resolved))]\n }\n if (isShowValue(resolved)) {\n return renderClientNodes(resolveShowBranch(resolved), container)\n }\n if (isForValue(resolved)) {\n return renderForValueToNodes(resolved, container)\n }\n if (typeof Node !== 'undefined' && resolved instanceof Node) {\n rememberManagedAttributesForNode(resolved)\n return [resolved]\n }\n if (isProjectionSlot(resolved)) {\n return renderProjectionSlotToNodes(resolved, container)\n }\n if (isRouteSlot(resolved)) {\n const routeElement = resolveRouteSlot(container, resolved)\n return routeElement ? renderClientNodes(routeElement as JSX.Element, container) : []\n }\n if (!isRenderObject(resolved)) {\n return []\n }\n\n let nodes: Node[]\n\n if (isSuspenseType(resolved.type)) {\n nodes = renderSuspenseComponentToNodes(resolved.props as SuspenseProps, container, 'client')\n } else if (typeof resolved.type === 'function') {\n const providerMeta = getContextProviderMeta(resolved.type)\n if (providerMeta) {\n nodes = renderContextProviderToNodes(\n providerMeta.token,\n evaluateProps(resolved.props),\n container,\n )\n } else {\n const componentFn = resolved.type as Component\n if (getComponentMeta(resolved.type)) {\n nodes = withoutTrackedEffect(() =>\n renderComponentToNodes(\n componentFn,\n evaluateProps(resolved.props),\n container,\n 'client',\n resolved.props,\n ),\n )\n } else {\n nodes = renderComponentToNodes(\n componentFn,\n resolved.props as Record<string, unknown>,\n container,\n 'client',\n resolved.props,\n )\n }\n }\n } else if (resolved.type === FRAGMENT) {\n const children = resolved.props.children\n nodes = Array.isArray(children)\n ? children.flatMap((child: JSX.Element) => renderClientNodes(child, container))\n : renderClientNodes(children as JSX.Element, container)\n } else {\n const element = createElementNode(container.doc, resolved.type)\n const frame = getCurrentFrame()\n if (frame && hasScopedStyles(frame) && resolved.type !== 'style') {\n element.setAttribute(SCOPED_STYLE_ATTR, frame.component.scopeId)\n }\n let hasInnerHTML = false\n for (const [name, descriptor] of Object.entries(\n Object.getOwnPropertyDescriptors(resolved.props),\n ) as [string, PropertyDescriptor][]) {\n if (name === 'children') {\n continue\n }\n const value = descriptor.get ? descriptor.get.call(resolved.props) : descriptor.value\n if (resolved.type === 'body' && name === 'data-e-resume') {\n continue\n }\n if (name === DANGEROUSLY_SET_INNER_HTML_PROP) {\n hasInnerHTML = true\n }\n applyElementProp(element, name, value, container)\n }\n\n if (hasInnerHTML) {\n rememberManagedAttributesForNode(element)\n nodes = [element]\n } else {\n const children = resolved.props.children\n const childNodes = Array.isArray(children)\n ? children.flatMap((child: JSX.Element) => renderClientNodes(child, container))\n : renderClientNodes(children as JSX.Element, container)\n for (const child of childNodes) {\n element.appendChild(child)\n }\n\n rememberManagedAttributesForNode(element)\n nodes = [element]\n }\n }\n\n return resolved.key === null || resolved.key === undefined\n ? nodes\n : wrapNodesWithKeyedRange(container.doc, nodes, resolved.key)\n}\n\nconst scanComponentBoundaries = (\n root: ParentNode & { ownerDocument: Document },\n): Map<string, { end?: Comment; start?: Comment }> => {\n const walker = root.ownerDocument.createTreeWalker(root, DOM_SHOW_COMMENT)\n const boundaries = new Map<string, { end?: Comment; start?: Comment }>()\n\n while (walker.nextNode()) {\n const node = walker.currentNode\n const isCommentNode =\n node.nodeType === DOM_COMMENT_NODE ||\n (typeof Comment !== 'undefined' && node instanceof Comment)\n if (!isCommentNode) {\n continue\n }\n const matched = (node as Comment).data.match(/^ec:c:(.+):(start|end)$/)\n if (!matched) {\n continue\n }\n const [, id, edge] = matched\n const boundary = boundaries.get(id) ?? {}\n if (edge === 'start') {\n boundary.start = node as Comment\n } else {\n boundary.end = node as Comment\n }\n boundaries.set(id, boundary)\n }\n\n return boundaries\n}\n\nconst loadSymbol = async (\n container: RuntimeContainer,\n symbolId: string,\n): Promise<RuntimeSymbolModule> => {\n const resolved = getResolvedRuntimeSymbols(container).get(symbolId)\n if (resolved) {\n return resolved\n }\n const existing = container.imports.get(symbolId)\n if (existing) {\n const module = await existing\n getResolvedRuntimeSymbols(container).set(symbolId, module)\n return module\n }\n\n const url = container.symbols.get(symbolId)\n if (!url) {\n throw new Error(`Missing symbol URL for ${symbolId}.`)\n }\n\n const loaded = (import(/* @vite-ignore */ url) as Promise<RuntimeSymbolModule>).then((module) => {\n getResolvedRuntimeSymbols(container).set(symbolId, module)\n return module\n })\n container.imports.set(symbolId, loaded)\n return loaded\n}\n\nconst toMountedNodes = (value: unknown, container: RuntimeContainer): Node[] => {\n if (!container.doc) {\n throw new Error('Client rendering requires a document.')\n }\n\n let resolved = value\n while (typeof resolved === 'function') {\n resolved = resolved()\n }\n\n if (Array.isArray(resolved)) {\n return resolved.flatMap((entry) => toMountedNodes(entry, container))\n }\n if (resolved === null || resolved === undefined || resolved === false) {\n return [container.doc.createComment('eclipsa-empty')]\n }\n if (typeof Node !== 'undefined' && resolved instanceof Node) {\n return [resolved]\n }\n if (\n typeof resolved === 'string' ||\n typeof resolved === 'number' ||\n typeof resolved === 'boolean'\n ) {\n return [container.doc.createTextNode(String(resolved))]\n }\n return renderClientNodes(resolved as JSX.Element | JSX.Element[], container)\n}\n\nexport const getRuntimeContainer = () => getCurrentContainer()\n\nexport const captureClientInsertOwner = (\n container: RuntimeContainer | null,\n siteKey?: string | null,\n): ClientInsertOwner | null => {\n const frame = getCurrentFrame()\n if (!container || !frame || frame.container !== container) {\n return null\n }\n\n const ownerComponentId =\n typeof siteKey === 'string' && siteKey !== ''\n ? `${frame.component.id}.$i${siteKey}`\n : `${frame.component.id}.$i${frame.insertCursor++}`\n getOrCreateComponentState(\n container,\n ownerComponentId,\n CLIENT_INSERT_OWNER_SYMBOL,\n frame.component.id,\n )\n frame.visitedDescendants.add(ownerComponentId)\n return {\n childIndex: 0,\n componentId: ownerComponentId,\n projectionCounters: [...frame.projectionState.counters.entries()],\n }\n}\n\nexport const createDetachedClientInsertOwner = (container: RuntimeContainer): ClientInsertOwner => {\n const componentId = `${CLIENT_INSERT_OWNER_ID_PREFIX}${container.nextComponentId++}`\n getOrCreateComponentState(container, componentId, CLIENT_INSERT_OWNER_SYMBOL, ROOT_COMPONENT_ID)\n return {\n childIndex: 0,\n componentId,\n projectionCounters: [],\n }\n}\n\nconst inferClientInsertOwnerParentId = (componentId: string) => {\n if (componentId.startsWith(CLIENT_INSERT_OWNER_ID_PREFIX)) {\n return ROOT_COMPONENT_ID\n }\n\n const lastDotIndex = componentId.lastIndexOf('.')\n if (lastDotIndex < 0) {\n return ROOT_COMPONENT_ID\n }\n\n return componentId.slice(0, lastDotIndex)\n}\n\nexport const renderClientInsertableForOwner = (\n value: Insertable,\n container: RuntimeContainer,\n owner: ClientInsertOwner | null,\n) => {\n if (!owner) {\n return renderClientInsertable(value, container)\n }\n\n const component =\n container.components.get(owner.componentId) ??\n getOrCreateComponentState(\n container,\n owner.componentId,\n CLIENT_INSERT_OWNER_SYMBOL,\n inferClientInsertOwnerParentId(owner.componentId),\n )\n\n const parentFrame = getCurrentFrame()\n const oldDescendants = collectDescendantIds(container, owner.componentId)\n const frame = createFrame(container, component, 'client', {\n reuseExistingDom: false,\n reuseProjectionSlotDom: false,\n })\n frame.childCursor = owner.childIndex\n frame.projectionState.counters = new Map(owner.projectionCounters)\n const nodes = pushContainer(container, () =>\n pushFrame(frame, () => renderClientInsertable(value, container)),\n )\n const keptDescendants = expandComponentIdsToDescendants(container, [\n ...frame.visitedDescendants,\n ...collectComponentBoundaryIds(nodes),\n ])\n pruneRemovedComponents(container, owner.componentId, keptDescendants)\n for (const descendantId of oldDescendants) {\n if (keptDescendants.has(descendantId)) {\n continue\n }\n clearComponentSubscriptions(container, descendantId)\n }\n if (parentFrame && parentFrame !== frame) {\n parentFrame.visitedDescendants.add(owner.componentId)\n for (const descendantId of keptDescendants) {\n parentFrame.visitedDescendants.add(descendantId)\n }\n }\n return nodes\n}\n\nexport const serializeContainerValue = (\n container: RuntimeContainer | null,\n value: unknown,\n): SerializedValue =>\n container ? serializeRuntimeValue(container, value) : serializePublicValue(value)\n\nexport const deserializeContainerValue = (\n container: RuntimeContainer | null,\n value: SerializedValue,\n): unknown =>\n container ? deserializeRuntimeValue(container, value) : deserializePublicValue(value)\n\nexport const renderClientInsertable = (\n value: unknown,\n container: RuntimeContainer | null = getCurrentContainer(),\n): Node[] => {\n const doc = container?.doc ?? (typeof document !== 'undefined' ? document : null)\n if (!doc) {\n return []\n }\n if (Array.isArray(value)) {\n return value.flatMap((entry) => renderClientInsertable(entry, container))\n }\n\n let resolved = value\n while (typeof resolved === 'function') {\n resolved = resolved()\n }\n\n if (resolved === null || resolved === undefined || resolved === false) {\n return [doc.createComment('eclipsa-empty')]\n }\n if (typeof Node !== 'undefined' && resolved instanceof Node) {\n rememberManagedAttributesForNode(resolved)\n return [resolved]\n }\n if (\n typeof resolved === 'string' ||\n typeof resolved === 'number' ||\n typeof resolved === 'boolean'\n ) {\n return [doc.createTextNode(String(resolved))]\n }\n if (isShowValue(resolved)) {\n return renderClientInsertable(resolveShowBranch(resolved), container)\n }\n if (isForValue(resolved)) {\n return container\n ? renderForValueToNodes(resolved, container)\n : resolved.arr.flatMap((item, index) =>\n renderClientInsertable(resolved.fn(item, index), container),\n )\n }\n if (isProjectionSlot(resolved)) {\n return container\n ? renderProjectionSlotToNodes(resolved, container)\n : renderClientInsertable(resolved.source, container)\n }\n if (isRouteSlot(resolved)) {\n const routeElement = resolveRouteSlot(container, resolved)\n return routeElement\n ? renderClientInsertable(routeElement, container)\n : [doc.createComment('eclipsa-empty')]\n }\n if (container) {\n return renderClientNodes(resolved as JSX.Element | JSX.Element[], container)\n }\n return [doc.createTextNode(String(resolved))]\n}\n\nconst resetContainerForRouteRender = (container: RuntimeContainer) => {\n for (const component of container.components.values()) {\n disposeComponentMountCleanups(component)\n pruneComponentVisibles(container, component, 0)\n pruneComponentWatches(container, component, 0)\n }\n\n for (const watch of container.watches.values()) {\n clearEffectSignals(watch.effect)\n }\n\n container.components.clear()\n container.dirty.clear()\n container.nextElementId = 0\n container.nextScopeId = 0\n container.nextSignalId = 0\n container.rootChildCursor = 0\n container.scopes.clear()\n container.visibles.clear()\n container.watches.clear()\n\n for (const [id, record] of Array.from(container.signals.entries())) {\n for (const effect of Array.from(record.effects)) {\n clearEffectSignals(effect)\n }\n record.effects.clear()\n record.subscribers.clear()\n if (!isRouterSignalId(id) && !isAtomSignalId(id)) {\n container.signals.delete(id)\n }\n }\n}\n\nconst isRouteSlot = (value: unknown): value is RouteSlotCarrier =>\n isPlainObject(value) && value.__eclipsa_type === ROUTE_SLOT_TYPE\n\nconst createRouteSlot = (route: LoadedRoute, startLayoutIndex: number): RouteSlotCarrier => {\n const slot: RouteSlotCarrier = {\n __eclipsa_type: ROUTE_SLOT_TYPE,\n pathname: route.pathname,\n startLayoutIndex,\n }\n Object.defineProperty(slot, ROUTE_SLOT_ROUTE_KEY, {\n configurable: true,\n enumerable: false,\n value: route,\n writable: true,\n })\n return slot\n}\n\nconst resolveRouteSlot = (container: RuntimeContainer | null, slot: RouteSlotCarrier) => {\n const route =\n slot[ROUTE_SLOT_ROUTE_KEY] ??\n container?.router?.loadedRoutes.get(routeCacheKey(slot.pathname, 'page'))\n if (!route) {\n return null\n }\n return createRouteElement(route, slot.startLayoutIndex)\n}\n\nconst createRouteElement = (route: LoadedRoute, startLayoutIndex = 0) => {\n const createRouteProps = (props: Record<string, unknown>) => {\n const nextProps = {\n ...props,\n }\n Object.defineProperty(nextProps, ROUTE_PARAMS_PROP, {\n configurable: true,\n enumerable: false,\n value: route.params,\n writable: true,\n })\n Object.defineProperty(nextProps, ROUTE_ERROR_PROP, {\n configurable: true,\n enumerable: false,\n value: route.error,\n writable: true,\n })\n return nextProps\n }\n\n if (startLayoutIndex >= route.layouts.length) {\n return jsxDEV(route.page.renderer as unknown as JSX.Type, createRouteProps({}), null, false, {})\n }\n\n let children: unknown = null\n for (let index = route.layouts.length - 1; index >= startLayoutIndex; index -= 1) {\n const layout = route.layouts[index]!\n children = jsxDEV(\n layout.renderer as unknown as JSX.Type,\n createRouteProps({\n children: createRouteSlot(route, index + 1),\n }),\n null,\n false,\n {},\n )\n }\n return children\n}\n\nconst trackSuspenseBoundaryPromise = (\n container: RuntimeContainer,\n componentId: string,\n promise: Promise<unknown>,\n) => {\n const component = container.components.get(componentId)\n if (!component) {\n return\n }\n component.suspensePromise = promise\n promise.finally(() => {\n const current = container.components.get(componentId)\n if (!current || current.suspensePromise !== promise) {\n return\n }\n current.suspensePromise = null\n current.active = false\n container.dirty.add(componentId)\n void flushDirtyComponents(container)\n })\n}\n\nconst renderSuspenseContentToString = (\n props: SuspenseProps,\n container: RuntimeContainer,\n componentId: string,\n) => {\n try {\n const rendered =\n typeof props.children === 'function' ? props.children() : (props.children ?? null)\n return renderStringNode(rendered as JSX.Element | JSX.Element[])\n } catch (error) {\n if (!isPendingSignalError(error)) {\n throw error\n }\n container.pendingSuspensePromises.add(error.promise)\n const component = container.components.get(componentId)\n if (component) {\n component.suspensePromise = error.promise\n }\n return renderStringNode((props.fallback ?? null) as JSX.Element | JSX.Element[])\n }\n}\n\nexport const collectPendingSuspenseBoundaryIds = (container: RuntimeContainer) =>\n [...container.components.values()]\n .filter(\n (component) => component.symbol === SUSPENSE_COMPONENT_SYMBOL && !!component.suspensePromise,\n )\n .map((component) => component.id)\n .sort((left, right) => left.split('.').length - right.split('.').length)\n\nexport const renderResolvedSuspenseBoundaryToString = (\n container: RuntimeContainer,\n componentId: string,\n) => {\n const component = container.components.get(componentId)\n if (!component || component.symbol !== SUSPENSE_COMPONENT_SYMBOL) {\n throw new Error(`Missing suspense boundary ${componentId}.`)\n }\n\n pruneRemovedComponents(container, componentId, new Set())\n clearComponentSubscriptions(container, component.id)\n component.suspensePromise = null\n const frame = createFrame(container, component, 'ssr')\n return pushContainer(container, () =>\n pushFrame(frame, () =>\n renderSuspenseContentToString(component.props as SuspenseProps, container, componentId),\n ),\n )\n}\n\nconst renderSuspenseContentToNodes = (\n props: SuspenseProps,\n container: RuntimeContainer,\n componentId: string,\n) => {\n try {\n const rendered =\n typeof props.children === 'function' ? props.children() : (props.children ?? null)\n return toMountedNodes(rendered as JSX.Element | JSX.Element[], container)\n } catch (error) {\n if (!isPendingSignalError(error)) {\n throw error\n }\n trackSuspenseBoundaryPromise(container, componentId, error.promise)\n const fallback = props.fallback ?? null\n return toMountedNodes(fallback as JSX.Element | JSX.Element[], container)\n }\n}\n\nconst renderSuspenseComponentToString = (props: SuspenseProps) => {\n const container = getCurrentContainer()\n if (!container) {\n return renderStringNode((props.children ?? null) as JSX.Element | JSX.Element[])\n }\n const parentFrame = getCurrentFrame()\n if (!parentFrame) {\n return renderSuspenseContentToString(props, container, ROOT_COMPONENT_ID)\n }\n\n const position = nextComponentPosition(container)\n const componentId = createComponentId(container, position.parentId, position.childIndex)\n const component = getOrCreateComponentState(\n container,\n componentId,\n SUSPENSE_COMPONENT_SYMBOL,\n position.parentId,\n )\n component.props = {\n children: props.children,\n fallback: props.fallback,\n }\n component.projectionSlots = null\n const frame = createFrame(container, component, 'ssr')\n clearComponentSubscriptions(container, component.id)\n const body = pushFrame(frame, () =>\n renderSuspenseContentToString(component.props as SuspenseProps, container, componentId),\n )\n pruneComponentVisibles(container, component, frame.visibleCursor)\n pruneComponentWatches(container, component, frame.watchCursor)\n return `<!--ec:c:${componentId}:start-->${body}<!--ec:c:${componentId}:end-->`\n}\n\nconst renderSuspenseComponentToNodes = (\n props: SuspenseProps,\n container: RuntimeContainer,\n mode: RenderFrame['mode'],\n) => {\n const parentFrame = getCurrentFrame()\n if (!parentFrame) {\n return renderSuspenseContentToNodes(props, container, ROOT_COMPONENT_ID)\n }\n\n const position = nextComponentPosition(container)\n const componentId = createComponentId(container, position.parentId, position.childIndex)\n const component = getOrCreateComponentState(\n container,\n componentId,\n SUSPENSE_COMPONENT_SYMBOL,\n position.parentId,\n )\n component.props = {\n children: props.children,\n fallback: props.fallback,\n }\n component.projectionSlots = null\n component.active = true\n component.start = undefined\n component.end = undefined\n\n const frame = createFrame(container, component, mode)\n clearComponentSubscriptions(container, component.id)\n const bodyNodes = pushFrame(frame, () =>\n renderSuspenseContentToNodes(component.props as SuspenseProps, container, componentId),\n )\n pruneComponentVisibles(container, component, frame.visibleCursor)\n pruneComponentWatches(container, component, frame.watchCursor)\n parentFrame.visitedDescendants.add(componentId)\n for (const descendantId of frame.visitedDescendants) {\n parentFrame.visitedDescendants.add(descendantId)\n }\n scheduleMountCallbacks(container, component, frame.mountCallbacks)\n scheduleVisibleCallbacksCheck(container)\n\n if (!container.doc) {\n return bodyNodes\n }\n const start = container.doc.createComment(`ec:c:${componentId}:start`)\n const end = container.doc.createComment(`ec:c:${componentId}:end`)\n if (!component.start || !component.end) {\n component.start = start\n component.end = end\n }\n return [start, ...bodyNodes, end]\n}\n\nconst renderRouteIntoRoot = (container: RuntimeContainer, Page: RouteRenderer) => {\n if (!container.doc || !container.rootElement) {\n throw new Error('Client route rendering requires a document root.')\n }\n\n resetContainerForRouteRender(container)\n const nodes = pushContainer(container, () => toMountedNodes(Page({}), container))\n\n const root = container.rootElement\n while (root.firstChild) {\n root.firstChild.remove()\n }\n for (const node of nodes) {\n root.appendChild(node)\n }\n rememberManagedAttributesForNode(root)\n restoreSignalRefs(container, root)\n bindRouterLinks(container, root)\n scheduleVisibleCallbacksCheck(container)\n}\n\nconst getRouteModuleImportUrl = (router: RouterState, url: string) => {\n const token = router.routeModuleBusts.get(url)\n if (token == null) {\n return url\n }\n\n const baseUrl = typeof window === 'undefined' ? 'http://localhost' : window.location.href\n const nextUrl = new URL(url, baseUrl)\n nextUrl.searchParams.set('t', token.toString())\n if (/^[a-z]+:\\/\\//i.test(url)) {\n return nextUrl.href\n }\n return `${nextUrl.pathname}${nextUrl.search}${nextUrl.hash}`\n}\n\nconst loadRouteModule = async (router: RouterState, url: string): Promise<LoadedRouteModule> => {\n const module = (await import(/* @vite-ignore */ getRouteModuleImportUrl(router, url))) as {\n default?: RouteRenderer\n metadata?: RouteMetadataExport\n }\n if (typeof module.default !== 'function') {\n throw new TypeError(`Route module ${url} does not export a default component.`)\n }\n\n return {\n metadata: module.metadata ?? null,\n renderer: module.default,\n symbol: getComponentMeta(module.default)?.symbol ?? null,\n url,\n }\n}\n\nconst createManagedHeadElement = (doc: Document, tagName: 'link' | 'meta') => {\n const element = doc.createElement(tagName)\n element.setAttribute(ROUTE_METADATA_HEAD_ATTR, '')\n return element\n}\n\nconst applyRouteMetadata = (doc: Document, route: LoadedRoute, url: URL, defaultTitle: string) => {\n for (const element of doc.head.querySelectorAll(`[${ROUTE_METADATA_HEAD_ATTR}]`)) {\n element.remove()\n }\n\n const metadata = composeRouteMetadata(\n [...route.layouts.map((layout) => layout.metadata ?? null), route.page.metadata ?? null],\n {\n params: route.params,\n url,\n },\n )\n\n doc.title = metadata?.title ?? defaultTitle\n\n const appendMeta = (name: string, content: string, attr: 'name' | 'property') => {\n const meta = createManagedHeadElement(doc, 'meta')\n meta.setAttribute(attr, name)\n meta.setAttribute('content', content)\n doc.head.appendChild(meta)\n }\n\n if (metadata?.description) {\n appendMeta('description', metadata.description, 'name')\n }\n if (metadata?.canonical) {\n const link = createManagedHeadElement(doc, 'link')\n link.setAttribute('href', metadata.canonical)\n link.setAttribute('rel', 'canonical')\n doc.head.appendChild(link)\n }\n if (metadata?.openGraph?.title) {\n appendMeta('og:title', metadata.openGraph.title, 'property')\n }\n if (metadata?.openGraph?.description) {\n appendMeta('og:description', metadata.openGraph.description, 'property')\n }\n if (metadata?.openGraph?.type) {\n appendMeta('og:type', metadata.openGraph.type, 'property')\n }\n if (metadata?.openGraph?.url) {\n appendMeta('og:url', metadata.openGraph.url, 'property')\n }\n for (const image of metadata?.openGraph?.images ?? []) {\n appendMeta('og:image', image, 'property')\n }\n if (metadata?.twitter?.card) {\n appendMeta('twitter:card', metadata.twitter.card, 'name')\n }\n if (metadata?.twitter?.title) {\n appendMeta('twitter:title', metadata.twitter.title, 'name')\n }\n if (metadata?.twitter?.description) {\n appendMeta('twitter:description', metadata.twitter.description, 'name')\n }\n for (const image of metadata?.twitter?.images ?? []) {\n appendMeta('twitter:image', image, 'name')\n }\n}\n\nconst loadResolvedRoute = async (\n container: RuntimeContainer,\n matched: {\n entry: RouteModuleManifest\n params: RouteParams\n pathname: string\n },\n variant: 'page' | 'loading' | 'error' | 'not-found' = 'page',\n) => {\n const router = ensureRouterState(container)\n const normalizedPath = normalizeRoutePath(matched.pathname)\n const cacheKey = routeCacheKey(normalizedPath, variant)\n const existing = router.loadedRoutes.get(cacheKey)\n if (existing) {\n return existing\n }\n\n const moduleUrl =\n variant === 'page'\n ? matched.entry.page\n : variant === 'loading'\n ? matched.entry.loading\n : variant === 'error'\n ? matched.entry.error\n : matched.entry.notFound\n if (!moduleUrl) {\n return null\n }\n\n const [page, ...layouts] = await Promise.all([\n loadRouteModule(router, moduleUrl),\n ...matched.entry.layouts.map((layoutUrl) => loadRouteModule(router, layoutUrl)),\n ])\n let route!: LoadedRoute\n route = {\n entry: matched.entry,\n error: undefined,\n layouts,\n params: matched.params,\n pathname: normalizedPath,\n page,\n render: () => createRouteElement(route),\n }\n\n router.loadedRoutes.set(cacheKey, route)\n return route\n}\n\nconst loadResolvedRouteFromSpecial = async (\n container: RuntimeContainer,\n pathname: string,\n kind: 'error' | 'notFound',\n) => {\n const matched = findSpecialManifestEntry(ensureRouterState(container).manifest, pathname, kind)\n if (!matched) {\n return null\n }\n return loadResolvedRoute(container, matched, kind === 'error' ? 'error' : 'not-found')\n}\n\nconst loadRouteComponent = async (container: RuntimeContainer, pathname: string) => {\n const matched = matchRouteManifest(ensureRouterState(container).manifest, pathname)\n if (!matched || !matched.entry.page) {\n return null\n }\n return loadResolvedRoute(container, matched, 'page')\n}\n\nconst findRouteComponentChain = (\n container: RuntimeContainer,\n symbols: string[],\n parentId: string | null = null,\n): string[] | null => {\n if (symbols.length === 0) {\n return []\n }\n\n const [symbol, ...rest] = symbols\n const candidates = [...container.components.values()]\n .filter((component) => {\n if (\n !component.start ||\n !component.end ||\n !component.start.parentNode ||\n !component.end.parentNode ||\n component.symbol !== symbol\n ) {\n return false\n }\n if (parentId === null) {\n return true\n }\n return isDescendantOf(parentId, component.id)\n })\n .sort((left, right) => left.id.split('.').length - right.id.split('.').length)\n\n for (const candidate of candidates) {\n const remainder = findRouteComponentChain(container, rest, candidate.id)\n if (!remainder) {\n continue\n }\n return [candidate.id, ...remainder]\n }\n\n return null\n}\n\nconst collectSharedLayoutBoundaryIds = (container: RuntimeContainer, route: LoadedRoute) => {\n if (route.layouts.length === 0 || route.layouts.some((layout) => !layout.symbol)) {\n return null\n }\n\n const symbols = route.layouts.map((layout) => layout.symbol as string)\n if (route.page.symbol) {\n const chain = findRouteComponentChain(container, [...symbols, route.page.symbol])\n if (chain) {\n return chain.slice(0, route.layouts.length)\n }\n }\n\n return findRouteComponentChain(container, symbols)\n}\n\nconst getComponentIdDepth = (componentId: string) => componentId.split('.').length\n\nconst parseDirectChildIndex = (parentId: string, childId: string) => {\n if (!childId.startsWith(`${parentId}.`)) {\n return null\n }\n const remainder = childId.slice(parentId.length + 1)\n if (remainder.length === 0 || remainder.includes('.')) {\n return null\n }\n const parsed = Number(remainder)\n return Number.isInteger(parsed) ? parsed : null\n}\n\ntype SharedLayoutRouteRoot =\n | {\n childIndex: number\n kind: 'direct'\n rootId: string\n }\n | {\n kind: 'owner'\n ownerId: string\n rootId: string\n }\n\nconst resolveSharedLayoutRouteRoot = (\n container: RuntimeContainer,\n boundaryId: string,\n slotRange: { start: Comment; end: Comment },\n): SharedLayoutRouteRoot | null => {\n const candidateIds = [\n ...collectComponentBoundaryIds(getBoundaryChildren(slotRange.start, slotRange.end)),\n ].sort((left, right) => getComponentIdDepth(left) - getComponentIdDepth(right))\n\n for (const candidateId of candidateIds) {\n const childIndex = parseDirectChildIndex(boundaryId, candidateId)\n if (childIndex !== null) {\n return {\n childIndex,\n kind: 'direct',\n rootId: candidateId,\n }\n }\n }\n\n for (const candidateId of candidateIds) {\n const component = container.components.get(candidateId)\n if (!component?.parentId) {\n continue\n }\n const owner = container.components.get(component.parentId)\n if (!owner || owner.symbol !== CLIENT_INSERT_OWNER_SYMBOL || owner.parentId !== boundaryId) {\n continue\n }\n return {\n kind: 'owner',\n ownerId: owner.id,\n rootId: candidateId,\n }\n }\n\n return null\n}\n\nconst renderRouteSubtreeForProjectionSlot = (\n container: RuntimeContainer,\n boundary: ComponentState,\n childIndex: number,\n source: unknown,\n) => {\n const frame = createFrame(container, boundary, 'client', {\n reuseExistingDom: false,\n reuseProjectionSlotDom: false,\n })\n frame.childCursor = childIndex\n const nodes = pushContainer(container, () =>\n pushFrame(frame, () => renderClientInsertable(source, container)),\n )\n return {\n nodes,\n visitedDescendants: frame.visitedDescendants,\n }\n}\n\nconst renderRouteSubtreeForProjectionSlotOwner = (\n container: RuntimeContainer,\n ownerId: string,\n source: unknown,\n) => {\n const nodes = renderClientInsertableForOwner(source as Insertable, container, {\n childIndex: 0,\n componentId: ownerId,\n projectionCounters: [],\n })\n return {\n nodes,\n visitedDescendants: expandComponentIdsToDescendants(container, [ownerId]),\n }\n}\n\nconst clearSharedLayoutDescendantDirtyStates = (\n container: RuntimeContainer,\n boundaryId: string,\n excludedRootId: string | null,\n) => {\n for (const componentId of Array.from(container.dirty)) {\n if (!isDescendantOf(boundaryId, componentId)) {\n continue\n }\n if (\n excludedRootId &&\n (componentId === excludedRootId || isDescendantOf(excludedRootId, componentId))\n ) {\n continue\n }\n container.dirty.delete(componentId)\n const component = container.components.get(componentId)\n if (!component) {\n continue\n }\n component.activateModeOnFlush = undefined\n component.reuseExistingDomOnActivate = true\n component.reuseProjectionSlotDomOnActivate = false\n }\n}\n\nconst deactivateComponentSubtree = (container: RuntimeContainer, rootId: string) => {\n const root = container.components.get(rootId)\n if (root) {\n root.active = false\n }\n for (const componentId of collectDescendantIds(container, rootId)) {\n const component = container.components.get(componentId)\n if (component) {\n component.active = false\n }\n }\n}\n\nconst withUpdatedComponentChildren = (props: Record<string, unknown> | null, children: unknown) => {\n const next = {}\n if (props) {\n Object.defineProperties(next, Object.getOwnPropertyDescriptors(props))\n }\n Object.defineProperty(next, 'children', {\n configurable: true,\n enumerable: true,\n value: children,\n writable: true,\n })\n return next as Record<string, unknown>\n}\n\nconst countSharedLayouts = (current: LoadedRoute | null, next: LoadedRoute) => {\n if (!current) {\n return 0\n }\n\n let count = 0\n const limit = Math.min(current.layouts.length, next.layouts.length)\n while (count < limit && current.layouts[count]!.url === next.layouts[count]!.url) {\n count += 1\n }\n return count\n}\n\nconst updateSharedLayoutBoundary = async (\n container: RuntimeContainer,\n current: LoadedRoute,\n next: LoadedRoute,\n sharedLayoutCount: number,\n) => {\n if (sharedLayoutCount <= 0) {\n return false\n }\n\n const boundaryIds = collectSharedLayoutBoundaryIds(container, current)\n if (!boundaryIds || boundaryIds.length < sharedLayoutCount) {\n return false\n }\n\n const boundaryId = boundaryIds[sharedLayoutCount - 1]!\n const boundary = container.components.get(boundaryId)\n if (!boundary?.start || !boundary.end) {\n return false\n }\n\n const nextChildren = createRouteElement(next, sharedLayoutCount)\n const rerenderSharedLayoutBoundary = async () => {\n const focusSnapshot = captureBoundaryFocus(container.doc!, boundary.start!, boundary.end!)\n const boundaryProps =\n boundary.props && typeof boundary.props === 'object'\n ? (boundary.props as Record<string, unknown>)\n : null\n const boundaryRawProps =\n boundary.rawProps && typeof boundary.rawProps === 'object' ? boundary.rawProps : boundaryProps\n boundary.props = withUpdatedComponentChildren(boundaryProps, nextChildren)\n boundary.rawProps = withUpdatedComponentChildren(boundaryRawProps, nextChildren)\n boundary.active = false\n boundary.activateModeOnFlush = 'replace'\n boundary.reuseExistingDomOnActivate = false\n boundary.reuseProjectionSlotDomOnActivate = false\n container.dirty.add(boundaryId)\n if (boundary.start?.parentNode && 'querySelectorAll' in boundary.start.parentNode) {\n bindRouterLinks(container, boundary.start.parentNode as ParentNode)\n }\n if (container.dirty.size > 0) {\n await flushDirtyComponents(container)\n }\n if (boundary.start && boundary.end) {\n restoreBoundaryFocus(container.doc!, boundary.start, boundary.end, focusSnapshot)\n }\n return true\n }\n\n if ((boundary.projectionSlots?.children ?? 0) !== 1) {\n return rerenderSharedLayoutBoundary()\n }\n\n const slotRanges = collectProjectionSlotRanges(getBoundaryChildren(boundary.start, boundary.end))\n const slotRange = slotRanges.get(`${boundaryId}:${encodeProjectionSlotName('children')}:0`)\n if (!slotRange) {\n return rerenderSharedLayoutBoundary()\n }\n const routeRoot = resolveSharedLayoutRouteRoot(container, boundaryId, slotRange)\n if (!routeRoot) {\n return rerenderSharedLayoutBoundary()\n }\n if (routeRoot.kind === 'owner') {\n deactivateComponentSubtree(container, routeRoot.rootId)\n const focusSnapshot = captureBoundaryFocus(container.doc!, slotRange.start, slotRange.end)\n const { nodes } = renderRouteSubtreeForProjectionSlotOwner(\n container,\n routeRoot.ownerId,\n nextChildren,\n )\n replaceProjectionSlotContents(slotRange.start, slotRange.end, nodes)\n restoreBoundaryFocus(container.doc!, slotRange.start, slotRange.end, focusSnapshot)\n const boundaryProps =\n boundary.props && typeof boundary.props === 'object'\n ? (boundary.props as Record<string, unknown>)\n : null\n const boundaryRawProps =\n boundary.rawProps && typeof boundary.rawProps === 'object' ? boundary.rawProps : boundaryProps\n boundary.props = withUpdatedComponentChildren(boundaryProps, nextChildren)\n boundary.rawProps = withUpdatedComponentChildren(boundaryRawProps, nextChildren)\n container.dirty.delete(boundaryId)\n clearSharedLayoutDescendantDirtyStates(container, boundaryId, routeRoot.ownerId)\n boundary.active = false\n boundary.activateModeOnFlush = 'patch'\n boundary.reuseExistingDomOnActivate = true\n boundary.reuseProjectionSlotDomOnActivate = true\n container.dirty.add(boundaryId)\n if (boundary.start.parentNode && 'querySelectorAll' in boundary.start.parentNode) {\n bindRouterLinks(container, boundary.start.parentNode as ParentNode)\n }\n if (container.dirty.size > 0) {\n await flushDirtyComponents(container)\n }\n return true\n }\n\n const currentRouteRoot = container.components.get(routeRoot.rootId) ?? null\n const needsFullBoundaryRerender =\n (currentRouteRoot?.watchCount ?? 0) > 0 || (currentRouteRoot?.visibleCount ?? 0) > 0\n\n if (needsFullBoundaryRerender) {\n deactivateComponentSubtree(container, routeRoot.rootId)\n return rerenderSharedLayoutBoundary()\n }\n\n boundary.props = {\n children: nextChildren,\n }\n deactivateComponentSubtree(container, routeRoot.rootId)\n const focusSnapshot = captureBoundaryFocus(container.doc!, slotRange.start, slotRange.end)\n const { nodes, visitedDescendants } = renderRouteSubtreeForProjectionSlot(\n container,\n boundary,\n routeRoot.childIndex,\n nextChildren,\n )\n replaceProjectionSlotContents(slotRange.start, slotRange.end, nodes)\n restoreBoundaryFocus(container.doc!, slotRange.start, slotRange.end, focusSnapshot)\n pruneRemovedComponents(container, routeRoot.rootId, visitedDescendants)\n boundary.active = false\n boundary.activateModeOnFlush = 'patch'\n boundary.reuseExistingDomOnActivate = true\n boundary.reuseProjectionSlotDomOnActivate = true\n container.dirty.add(boundaryId)\n if (boundary.start.parentNode && 'querySelectorAll' in boundary.start.parentNode) {\n bindRouterLinks(container, boundary.start.parentNode as ParentNode)\n }\n if (container.dirty.size > 0) {\n await flushDirtyComponents(container)\n }\n return true\n}\n\nconst commitBrowserNavigation = (doc: Document, url: URL, mode: NavigationMode) => {\n if (!doc.defaultView || mode === 'pop') {\n return\n }\n if (mode === 'replace') {\n doc.defaultView.history.replaceState(null, '', url.href)\n return\n }\n doc.defaultView.history.pushState(null, '', url.href)\n}\n\nconst fallbackDocumentNavigation = (doc: Document, url: URL, mode: NavigationMode) => {\n if (!doc.defaultView) {\n return\n }\n if (mode === 'replace') {\n doc.defaultView.location.replace(url.href)\n return\n }\n if (mode === 'pop') {\n doc.defaultView.location.assign(url.href)\n return\n }\n doc.defaultView.location.assign(url.href)\n}\n\nconst cachePrefetchedLoaders = (\n container: RuntimeContainer,\n url: URL,\n loaders: Record<string, ResumeLoaderPayload>,\n) => {\n const router = ensureRouterState(container)\n const snapshots = new Map<string, LoaderSnapshot>()\n for (const [id, loaderPayload] of Object.entries(loaders)) {\n snapshots.set(id, {\n data: deserializeRuntimeValue(container, loaderPayload.data),\n error: deserializeRuntimeValue(container, loaderPayload.error),\n loaded: loaderPayload.loaded,\n })\n }\n router.prefetchedLoaders.set(routePrefetchKey(url), snapshots)\n}\n\nconst applyPrefetchedLoaders = (container: RuntimeContainer, url: URL) => {\n const router = ensureRouterState(container)\n const prefetchedLoaders = router.prefetchedLoaders.get(routePrefetchKey(url))\n if (!prefetchedLoaders) {\n return\n }\n for (const [id, snapshot] of prefetchedLoaders) {\n container.loaderStates.set(id, {\n data: snapshot.data,\n error: snapshot.error,\n loaded: snapshot.loaded,\n })\n }\n}\n\nconst isRouteDataSuccess = (body: RouteDataResponse): body is RouteDataSuccess =>\n body.ok === true &&\n typeof body.finalHref === 'string' &&\n typeof body.finalPathname === 'string' &&\n (body.kind === 'page' || body.kind === 'not-found') &&\n !!body.loaders &&\n typeof body.loaders === 'object'\n\nconst extractScriptTextById = (html: string, id: string) => {\n const scriptPattern = /<script\\b([^>]*)>([\\s\\S]*?)<\\/script>/gi\n const idPattern = /\\bid\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/i\n\n for (const match of html.matchAll(scriptPattern)) {\n const attrs = match[1] ?? ''\n const idMatch = attrs.match(idPattern)\n if (!idMatch) {\n continue\n }\n if ((idMatch[1] ?? idMatch[2]) === id) {\n return match[2] ?? ''\n }\n }\n\n return null\n}\n\nconst parseRouteDataFromHtml = (\n container: RuntimeContainer,\n requestUrl: URL,\n response: {\n url?: string\n },\n html: string,\n): RouteDataResponse => {\n const finalUrl = new URL(response.url || requestUrl.href, requestUrl.href)\n if (finalUrl.origin !== requestUrl.origin) {\n return {\n location: finalUrl.href,\n ok: false,\n }\n }\n\n const payloadText =\n extractScriptTextById(html, RESUME_FINAL_STATE_ELEMENT_ID) ??\n extractScriptTextById(html, RESUME_STATE_ELEMENT_ID)\n if (!payloadText) {\n return {\n document: true,\n ok: false,\n }\n }\n\n let payload: ResumePayload\n try {\n payload = JSON.parse(payloadText) as ResumePayload\n } catch {\n return {\n document: true,\n ok: false,\n }\n }\n\n const finalPathname = normalizeRoutePath(finalUrl.pathname)\n const router = ensureRouterState(container)\n const matched = matchRouteManifest(router.manifest, finalPathname)\n const notFoundMatched = !matched\n ? findSpecialManifestEntry(router.manifest, finalPathname, 'notFound')\n : null\n if (!matched?.entry.page && !notFoundMatched?.entry.notFound) {\n return {\n document: true,\n ok: false,\n }\n }\n\n return {\n finalHref: finalUrl.href,\n finalPathname,\n kind: matched?.entry.page ? 'page' : 'not-found',\n loaders: payload.loaders ?? {},\n ok: true,\n }\n}\n\nconst requestRouteData = async (\n container: RuntimeContainer,\n href: string,\n): Promise<RouteDataResponse> => {\n const baseUrl = typeof window === 'undefined' ? 'http://localhost' : window.location.href\n const requestUrl = new URL(href, baseUrl)\n\n try {\n const endpointUrl = new URL(ROUTE_DATA_ENDPOINT, requestUrl)\n endpointUrl.searchParams.set('href', requestUrl.href)\n const response = await fetch(endpointUrl.href)\n if (response.status >= 200 && response.status < 300) {\n const body = (await response.json()) as RouteDataResponse\n if (!body || typeof body !== 'object' || typeof body.ok !== 'boolean') {\n return {\n document: true,\n ok: false,\n }\n }\n if (isRouteDataSuccess(body)) {\n return body\n }\n if ('location' in body && typeof body.location === 'string') {\n return body\n }\n }\n } catch {}\n\n try {\n const response = await fetch(requestUrl.href)\n const html = await response.text()\n return parseRouteDataFromHtml(container, requestUrl, response, html)\n } catch {}\n\n return {\n document: true,\n ok: false,\n }\n}\n\nconst resetRouteLoaderState = (container: RuntimeContainer) => {\n container.loaders.clear()\n container.loaderStates.clear()\n\n for (const [id, record] of Array.from(container.signals.entries())) {\n if (!isLoaderSignalId(id)) {\n continue\n }\n for (const effect of Array.from(record.effects)) {\n clearEffectSignals(effect)\n }\n record.effects.clear()\n record.subscribers.clear()\n container.signals.delete(id)\n }\n}\n\nconst requestRoutePreflight = async (href: string): Promise<RoutePreflightResult> => {\n try {\n const requestUrl = new URL(\n href,\n typeof window === 'undefined' ? 'http://localhost' : window.location.href,\n )\n const response = await fetch(requestUrl.href, {\n headers: {\n [ROUTE_PREFLIGHT_REQUEST_HEADER]: '1',\n },\n })\n if (response.status < 200 || response.status >= 300) {\n return {\n document: true,\n ok: false,\n }\n }\n const finalUrl = new URL(response.url || requestUrl.href, requestUrl.href)\n if (\n finalUrl.origin !== requestUrl.origin ||\n finalUrl.pathname !== requestUrl.pathname ||\n finalUrl.search !== requestUrl.search\n ) {\n return {\n location: finalUrl.href,\n ok: false,\n }\n }\n return {\n ok: true,\n }\n } catch {\n return {\n document: true,\n ok: false,\n }\n }\n}\n\nconst prefetchResolvedRouteModules = async (\n container: RuntimeContainer,\n pathname: string,\n finalUrl: URL,\n) => {\n const router = ensureRouterState(container)\n const matched = matchRouteManifest(router.manifest, pathname)\n if (matched?.entry.page) {\n await loadResolvedRoute(container, matched)\n return\n }\n const notFoundMatched = findSpecialManifestEntry(router.manifest, pathname, 'notFound')\n if (notFoundMatched?.entry.notFound) {\n await loadResolvedRoute(container, notFoundMatched, 'not-found')\n }\n if (finalUrl.pathname !== pathname) {\n const redirectedPath = normalizeRoutePath(finalUrl.pathname)\n const redirectedMatched = matchRouteManifest(router.manifest, redirectedPath)\n if (redirectedMatched?.entry.page) {\n await loadResolvedRoute(container, redirectedMatched)\n }\n }\n}\n\nconst prefetchRoute = async (container: RuntimeContainer, href: string) => {\n const doc = container.doc\n if (!doc) {\n return\n }\n\n const requestUrl = new URL(href, doc.location.href)\n if (requestUrl.origin !== doc.location.origin) {\n return\n }\n const key = routePrefetchKey(requestUrl)\n const router = ensureRouterState(container)\n const existing = router.routePrefetches.get(key)\n if (existing) {\n await existing\n return\n }\n\n const pathname = normalizeRoutePath(requestUrl.pathname)\n const matched = matchRouteManifest(router.manifest, pathname)\n const specialRoute = !matched\n ? findSpecialManifestEntry(router.manifest, pathname, 'notFound')\n : null\n if (!matched?.entry.page && !specialRoute?.entry.notFound) {\n return\n }\n\n const prefetchPromise = (async () => {\n try {\n const result = await requestRouteData(container, requestUrl.href)\n if (!result.ok) {\n return result\n }\n\n const finalUrl = new URL(result.finalHref, requestUrl.href)\n if (finalUrl.origin !== requestUrl.origin) {\n return {\n document: true,\n ok: false,\n } satisfies RoutePrefetchResult\n }\n\n await prefetchResolvedRouteModules(container, result.finalPathname, finalUrl)\n cachePrefetchedLoaders(container, finalUrl, result.loaders)\n return result\n } catch {\n return {\n document: true,\n ok: false,\n } satisfies RoutePrefetchResult\n }\n })()\n\n router.routePrefetches.set(key, prefetchPromise)\n await prefetchPromise\n}\n\nconst navigateContainer = async (\n container: RuntimeContainer,\n href: string,\n options?: {\n force?: boolean\n redirectDepth?: number\n mode?: NavigationMode\n },\n) => {\n const doc = container.doc\n if (!doc) {\n return\n }\n\n await waitForPendingDirtyFlush()\n\n const mode = options?.mode ?? 'push'\n const force = options?.force ?? false\n const redirectDepth = options?.redirectDepth ?? 0\n const url = new URL(href, doc.location.href)\n if (url.origin !== doc.location.origin) {\n fallbackDocumentNavigation(doc, url, mode)\n return\n }\n const pathname = normalizeRoutePath(url.pathname)\n const router = ensureRouterState(container)\n const matched = matchRouteManifest(router.manifest, pathname)\n const specialPreflightTarget = !matched\n ? findSpecialManifestEntry(router.manifest, pathname, 'notFound')\n : null\n\n const currentRouteUrl = new URL(router.currentUrl.value, doc.location.href)\n const currentHref = `${currentRouteUrl.pathname}${currentRouteUrl.search}${currentRouteUrl.hash}`\n const nextHref = `${url.pathname}${url.search}${url.hash}`\n if (!force && nextHref === currentHref) {\n return\n }\n\n const prefetchKey = routePrefetchKey(url)\n let pendingPrefetch = router.routePrefetches.get(prefetchKey)\n if (!pendingPrefetch && (matched?.entry.page || specialPreflightTarget?.entry.notFound)) {\n await prefetchRoute(container, url.href)\n pendingPrefetch = router.routePrefetches.get(prefetchKey)\n }\n const prefetched = pendingPrefetch ? await pendingPrefetch : null\n if (prefetched && !prefetched.ok) {\n if ('location' in prefetched) {\n if (redirectDepth >= 8) {\n fallbackDocumentNavigation(doc, new URL(prefetched.location, doc.location.href), mode)\n return\n }\n const redirectUrl = new URL(prefetched.location, doc.location.href)\n if (redirectUrl.origin !== doc.location.origin) {\n fallbackDocumentNavigation(doc, redirectUrl, mode)\n return\n }\n await navigateContainer(container, redirectUrl.href, {\n mode,\n redirectDepth: redirectDepth + 1,\n })\n return\n }\n fallbackDocumentNavigation(doc, url, mode)\n return\n }\n\n const shouldPreflight =\n (matched?.entry.page && matched.entry.hasMiddleware) ||\n (!!specialPreflightTarget?.entry.notFound && specialPreflightTarget.entry.hasMiddleware)\n if (shouldPreflight && !prefetched) {\n const preflight = await requestRoutePreflight(url.href)\n if (!preflight.ok) {\n if ('location' in preflight) {\n if (redirectDepth >= 8) {\n fallbackDocumentNavigation(doc, new URL(preflight.location, doc.location.href), mode)\n return\n }\n const redirectUrl = new URL(preflight.location, doc.location.href)\n if (redirectUrl.origin !== doc.location.origin) {\n fallbackDocumentNavigation(doc, redirectUrl, mode)\n return\n }\n await navigateContainer(container, redirectUrl.href, {\n mode,\n redirectDepth: redirectDepth + 1,\n })\n return\n }\n fallbackDocumentNavigation(doc, url, mode)\n return\n }\n }\n\n if (!matched || !matched.entry.page) {\n const notFoundRoute = !matched\n ? await loadResolvedRouteFromSpecial(container, pathname, 'notFound')\n : null\n if (notFoundRoute) {\n resetRouteLoaderState(container)\n renderRouteIntoRoot(container, notFoundRoute.render)\n router.currentRoute = notFoundRoute\n applyRouteMetadata(doc, notFoundRoute, url, router.defaultTitle)\n commitBrowserNavigation(doc, url, mode)\n writeRouterLocation(router, url)\n return\n }\n fallbackDocumentNavigation(doc, url, mode)\n return\n }\n\n if (!force && pathname === router.currentPath.value) {\n if (nextHref !== currentHref) {\n commitBrowserNavigation(doc, url, mode)\n writeRouterLocation(router, url)\n }\n return\n }\n\n resetRouteLoaderState(container)\n applyPrefetchedLoaders(\n container,\n prefetched?.ok ? new URL(prefetched.finalHref, doc.location.href) : url,\n )\n const sequence = ++router.sequence\n router.isNavigating.value = true\n\n try {\n const nextRoutePromise = loadResolvedRoute(container, matched)\n if (matched.entry.loading) {\n let settled = false\n nextRoutePromise.finally(() => {\n settled = true\n })\n await Promise.resolve()\n if (!settled) {\n const loadingRoute = await loadResolvedRoute(container, matched, 'loading')\n if (loadingRoute) {\n renderRouteIntoRoot(container, loadingRoute.render)\n router.currentRoute = loadingRoute\n }\n }\n }\n const [currentRoute, nextRoute] = await Promise.all([\n router.currentRoute\n ? Promise.resolve(router.currentRoute)\n : loadRouteComponent(container, router.currentPath.value),\n nextRoutePromise,\n ])\n if (!nextRoute) {\n fallbackDocumentNavigation(doc, url, mode)\n return\n }\n if (sequence !== router.sequence) {\n return\n }\n\n router.currentRoute = nextRoute\n writeRouterLocation(router, url)\n\n const sharedLayoutCount = countSharedLayouts(currentRoute, nextRoute)\n const reusedLayout =\n currentRoute && sharedLayoutCount > 0\n ? await updateSharedLayoutBoundary(container, currentRoute, nextRoute, sharedLayoutCount)\n : false\n\n if (!reusedLayout) {\n renderRouteIntoRoot(container, nextRoute.render)\n }\n\n applyRouteMetadata(doc, nextRoute, url, router.defaultTitle)\n commitBrowserNavigation(doc, url, mode)\n } catch (error) {\n if (sequence === router.sequence) {\n const fallbackRoute = isRouteNotFoundError(error)\n ? await loadResolvedRouteFromSpecial(container, pathname, 'notFound')\n : await loadResolvedRoute(container, matched, 'error')\n if (fallbackRoute) {\n renderRouteIntoRoot(container, fallbackRoute.render)\n router.currentRoute = fallbackRoute\n applyRouteMetadata(doc, fallbackRoute, url, router.defaultTitle)\n commitBrowserNavigation(doc, url, mode)\n writeRouterLocation(router, url)\n return\n }\n fallbackDocumentNavigation(doc, url, mode)\n }\n } finally {\n if (sequence === router.sequence) {\n router.isNavigating.value = false\n }\n }\n}\n\nexport const refreshRouteContainer = async (container: RuntimeContainer) => {\n const doc = container.doc\n if (!doc) {\n return false\n }\n const url = new URL(doc.location.href)\n const router = ensureRouterState(container)\n const key = routePrefetchKey(url)\n router.prefetchedLoaders.delete(key)\n router.routePrefetches.delete(key)\n await prefetchRoute(container, url.href)\n await navigateContainer(container, url.href, {\n force: true,\n mode: 'replace',\n })\n return true\n}\n\nconst routeEntryReferencesModuleUrl = (entry: RouteModuleManifest, fileUrl: string) =>\n entry.page === fileUrl ||\n entry.loading === fileUrl ||\n entry.error === fileUrl ||\n entry.notFound === fileUrl ||\n entry.layouts.includes(fileUrl)\n\nconst routeReferencesModuleUrl = (route: LoadedRoute, fileUrl: string) =>\n route.page.url === fileUrl ||\n route.layouts.some((layout) => layout.url === fileUrl) ||\n routeEntryReferencesModuleUrl(route.entry, fileUrl)\n\nconst resolveCurrentRouteManifestEntry = (router: RouterState) => {\n const currentPath = normalizeRoutePath(router.currentPath.value)\n const matched = matchRouteManifest(router.manifest, currentPath)\n if (matched?.entry.page) {\n return matched.entry\n }\n return findSpecialManifestEntry(router.manifest, currentPath, 'notFound')?.entry ?? null\n}\n\nexport const invalidateRouteModulesForHmr = (\n container: RuntimeContainer,\n fileUrl: string,\n bustToken = Date.now(),\n) => {\n const router = container.router\n if (!router) {\n return false\n }\n\n let invalidated = false\n for (const [cacheKey, route] of Array.from(router.loadedRoutes.entries())) {\n if (!routeReferencesModuleUrl(route, fileUrl)) {\n continue\n }\n router.loadedRoutes.delete(cacheKey)\n invalidated = true\n }\n\n if (router.currentRoute && routeReferencesModuleUrl(router.currentRoute, fileUrl)) {\n router.currentRoute = null\n invalidated = true\n }\n\n const currentEntry = resolveCurrentRouteManifestEntry(router)\n if (currentEntry && routeEntryReferencesModuleUrl(currentEntry, fileUrl)) {\n invalidated = true\n }\n\n if (!invalidated) {\n return false\n }\n\n router.routeModuleBusts.set(fileUrl, bustToken)\n\n if (container.doc) {\n const currentUrl = new URL(container.doc.location.href)\n const currentKey = routePrefetchKey(currentUrl)\n router.prefetchedLoaders.delete(currentKey)\n router.routePrefetches.delete(currentKey)\n }\n\n return true\n}\n\nexport const refreshRouteContainerForHmr = async (\n container: RuntimeContainer,\n fileUrl: string,\n bustToken = Date.now(),\n) => {\n const doc = container.doc\n if (!doc || !invalidateRouteModulesForHmr(container, fileUrl, bustToken)) {\n return false\n }\n\n const router = ensureRouterState(container)\n const pathname = normalizeRoutePath(router.currentPath.value)\n\n try {\n const nextRoute =\n (await loadRouteComponent(container, pathname)) ??\n (await loadResolvedRouteFromSpecial(container, pathname, 'notFound'))\n if (!nextRoute) {\n await refreshRouteContainer(container)\n return true\n }\n\n renderRouteIntoRoot(container, nextRoute.render)\n router.currentRoute = nextRoute\n applyRouteMetadata(doc, nextRoute, new URL(doc.location.href), router.defaultTitle)\n return true\n } catch {\n await refreshRouteContainer(container)\n return true\n }\n}\n\nexport const refreshRegisteredRouteContainers = async () => {\n for (const container of getResumeContainers()) {\n await refreshRouteContainer(container)\n }\n}\n\nconst activateComponent = async (container: RuntimeContainer, componentId: string) => {\n const component = container.components.get(componentId)\n if (!component?.start || !component.end || component.active) {\n return false\n }\n const activateSymbol = component.symbol\n const activateMode = component.activateModeOnFlush ?? 'replace'\n component.activateModeOnFlush = undefined\n\n if (component.symbol === SUSPENSE_COMPONENT_SYMBOL) {\n clearComponentSubscriptions(container, componentId)\n const oldDescendants = collectDescendantIds(container, componentId)\n const suspenseSpeculativeEffectCleanupSlot = component.reuseProjectionSlotDomOnActivate\n ? createCleanupSlot()\n : null\n if (!suspenseSpeculativeEffectCleanupSlot) {\n resetComponentRenderEffects(component)\n }\n const frame = createFrame(container, component, 'client', {\n effectCleanupSlot: suspenseSpeculativeEffectCleanupSlot ?? component.renderEffectCleanupSlot,\n reuseExistingDom: component.reuseExistingDomOnActivate ?? true,\n reuseProjectionSlotDom: component.reuseProjectionSlotDomOnActivate ?? false,\n })\n component.reuseExistingDomOnActivate = true\n component.reuseProjectionSlotDomOnActivate = false\n const parentRoot = component.start.parentNode\n const focusSnapshot = captureBoundaryFocus(container.doc!, component.start, component.end)\n let nodes: Node[]\n try {\n nodes = pushContainer(container, () =>\n pushFrame(frame, () =>\n renderSuspenseContentToNodes(component.props as SuspenseProps, container, componentId),\n ),\n )\n } catch (error) {\n disposeCleanupSlot(suspenseSpeculativeEffectCleanupSlot)\n throw error\n }\n disposeCleanupSlot(suspenseSpeculativeEffectCleanupSlot)\n pruneComponentVisibles(container, component, frame.visibleCursor)\n pruneComponentWatches(container, component, frame.watchCursor)\n const patched =\n activateMode === 'patch' &&\n tryPatchBoundaryContentsInPlace(component.start, component.end, nodes)\n const preservedDescendants = expandComponentIdsToDescendants(\n container,\n patched\n ? frame.projectionState.reuseExistingDom\n ? collectPreservedProjectionSlotComponentIds(container, component.start, component.end)\n : new Set<string>()\n : replaceBoundaryContents(component.start, component.end, nodes, {\n preserveProjectionSlots: frame.projectionState.reuseExistingDom,\n }),\n )\n restoreBoundaryFocus(container.doc!, component.start, component.end, focusSnapshot)\n if (parentRoot) {\n bindComponentBoundaries(container, parentRoot)\n restoreSignalRefs(container, parentRoot)\n }\n component.active = true\n const keptDescendants = new Set([\n ...frame.visitedDescendants,\n ...preservedDescendants,\n ...collectMountedDescendantComponentIds(container, component),\n ])\n pruneRemovedComponents(container, componentId, keptDescendants)\n for (const descendantId of oldDescendants) {\n if (keptDescendants.has(descendantId)) {\n continue\n }\n clearComponentSubscriptions(container, descendantId)\n }\n syncEffectOnlyLocalSignalPreference(component)\n return patched\n }\n\n clearComponentSubscriptions(container, componentId)\n const oldDescendants = collectDescendantIds(container, componentId)\n const scope = materializeScope(container, component.scopeId)\n await preloadResumableValue(container, scope)\n const module = await loadSymbol(container, activateSymbol)\n const rawProps =\n component.rawProps && typeof component.rawProps === 'object' ? component.rawProps : null\n if (rawProps) {\n component.props = evaluateProps(rawProps)\n }\n await preloadComponentProps(\n container,\n {\n captures: () => [],\n projectionSlots: component.projectionSlots ?? undefined,\n symbol: component.symbol,\n },\n component.props,\n )\n const speculativeEffectCleanupSlot = component.reuseProjectionSlotDomOnActivate\n ? createCleanupSlot()\n : null\n if (!speculativeEffectCleanupSlot) {\n resetComponentRenderEffects(component)\n }\n const frame = createFrame(container, component, 'client', {\n effectCleanupSlot: speculativeEffectCleanupSlot ?? component.renderEffectCleanupSlot,\n reuseExistingDom: component.reuseExistingDomOnActivate ?? true,\n reuseProjectionSlotDom: component.reuseProjectionSlotDomOnActivate ?? false,\n })\n component.reuseExistingDomOnActivate = true\n component.reuseProjectionSlotDomOnActivate = false\n const parentRoot = component.start.parentNode\n const focusSnapshot = captureBoundaryFocus(container.doc!, component.start, component.end)\n let nodes: Node[]\n try {\n nodes = pushContainer(container, () =>\n pushFrame(frame, () => {\n const renderProps = rawProps\n ? createRenderProps(\n component.id,\n {\n captures: () => [],\n projectionSlots: component.projectionSlots ?? undefined,\n symbol: activateSymbol,\n },\n rawProps,\n )\n : component.props && typeof component.props === 'object'\n ? createRenderProps(\n component.id,\n {\n captures: () => [],\n projectionSlots: component.projectionSlots ?? undefined,\n symbol: activateSymbol,\n },\n component.props as Record<string, unknown>,\n )\n : component.props\n const rendered = module.default(scope, renderProps)\n return toMountedNodes(rendered, container)\n }),\n )\n } catch (error) {\n disposeCleanupSlot(speculativeEffectCleanupSlot)\n throw wrapGeneratedScopeReferenceError(error, {\n componentId,\n phase: 'rerendering',\n symbolId: activateSymbol,\n })\n }\n disposeCleanupSlot(speculativeEffectCleanupSlot)\n pruneComponentVisibles(container, component, frame.visibleCursor)\n pruneComponentWatches(container, component, frame.watchCursor)\n const patched =\n activateMode === 'patch' &&\n tryPatchBoundaryContentsInPlace(component.start, component.end, nodes)\n const preservedDescendants = expandComponentIdsToDescendants(\n container,\n patched\n ? frame.projectionState.reuseExistingDom\n ? collectPreservedProjectionSlotComponentIds(container, component.start, component.end)\n : new Set<string>()\n : replaceBoundaryContents(component.start, component.end, nodes, {\n preserveProjectionSlots: frame.projectionState.reuseExistingDom,\n }),\n )\n if (component.start.parentNode && 'querySelectorAll' in component.start.parentNode) {\n bindRouterLinks(container, component.start.parentNode as ParentNode)\n }\n restoreBoundaryFocus(container.doc!, component.start, component.end, focusSnapshot)\n if (parentRoot) {\n bindComponentBoundaries(container, parentRoot)\n restoreSignalRefs(container, parentRoot)\n }\n\n component.active = true\n\n const keptDescendants = new Set([\n ...frame.visitedDescendants,\n ...preservedDescendants,\n ...collectMountedDescendantComponentIds(container, component),\n ])\n pruneRemovedComponents(container, componentId, keptDescendants)\n\n for (const descendantId of oldDescendants) {\n if (keptDescendants.has(descendantId)) {\n continue\n }\n clearComponentSubscriptions(container, descendantId)\n }\n scheduleMountCallbacks(container, component, frame.mountCallbacks)\n scheduleVisibleCallbacksCheck(container)\n syncEffectOnlyLocalSignalPreference(component)\n return patched\n}\n\nconst sortDirtyComponents = (ids: Iterable<string>) =>\n [...ids].sort((a, b) => a.split('.').length - b.split('.').length)\n\nconst parseSymbolIdFromUrl = (url: string) => {\n const parsed = new URL(url, 'http://localhost')\n return parsed.searchParams.get('eclipsa-symbol')\n}\n\nexport const resolveResumeHmrBoundarySymbols = (payload: ResumeHmrUpdatePayload) => {\n const symbolIds = new Set([...payload.rerenderComponentSymbols, ...payload.rerenderOwnerSymbols])\n\n for (const symbolId of symbolIds) {\n const replacementUrl = payload.symbolUrlReplacements[symbolId]\n if (!replacementUrl) {\n continue\n }\n const replacementSymbolId = parseSymbolIdFromUrl(replacementUrl)\n if (replacementSymbolId) {\n symbolIds.add(replacementSymbolId)\n }\n }\n\n return [...symbolIds]\n}\n\nconst findNearestMountedBoundary = (container: RuntimeContainer, componentId: string) => {\n let currentId: string | null = componentId\n while (currentId && currentId !== ROOT_COMPONENT_ID) {\n const component = container.components.get(currentId)\n if (!component) {\n return null\n }\n if (component.start && component.end) {\n return component.id\n }\n currentId = component.parentId\n }\n return null\n}\n\nexport const collectResumeHmrBoundaryIds = (\n container: RuntimeContainer,\n symbolIds: Iterable<string>,\n) => {\n const targetSymbols = new Set(symbolIds)\n const pendingBoundaries = new Set<string>()\n\n for (const component of container.components.values()) {\n if (!targetSymbols.has(component.symbol)) {\n continue\n }\n const boundaryId = findNearestMountedBoundary(container, component.id)\n if (!boundaryId) {\n if (component.active) {\n return null\n }\n continue\n }\n pendingBoundaries.add(boundaryId)\n }\n\n const result: string[] = []\n for (const boundaryId of sortDirtyComponents(pendingBoundaries)) {\n if (\n result.some((parentId) => boundaryId === parentId || isDescendantOf(parentId, boundaryId))\n ) {\n continue\n }\n result.push(boundaryId)\n }\n return result\n}\n\nexport const applyResumeHmrSymbolReplacements = (\n container: RuntimeContainer,\n replacements: Record<string, string>,\n) => {\n for (const [oldSymbolId, url] of Object.entries(replacements)) {\n const currentUrl = container.symbols.get(oldSymbolId)\n const affectedIds = new Set<string>([oldSymbolId])\n\n if (currentUrl) {\n for (const [candidateId, candidateUrl] of container.symbols.entries()) {\n if (candidateUrl === currentUrl) {\n affectedIds.add(candidateId)\n }\n }\n }\n\n for (const affectedId of affectedIds) {\n container.symbols.set(affectedId, url)\n }\n invalidateRuntimeSymbolCaches(container, affectedIds)\n\n const nextSymbolId = parseSymbolIdFromUrl(url)\n if (!nextSymbolId) {\n continue\n }\n\n for (const component of container.components.values()) {\n if (affectedIds.has(component.symbol)) {\n component.symbol = nextSymbolId\n }\n }\n\n for (const watch of container.watches.values()) {\n if (affectedIds.has(watch.symbol)) {\n watch.symbol = nextSymbolId\n }\n }\n\n for (const visible of container.visibles.values()) {\n if (affectedIds.has(visible.symbol)) {\n visible.symbol = nextSymbolId\n }\n }\n\n container.symbols.set(nextSymbolId, url)\n invalidateRuntimeSymbolCaches(container, [nextSymbolId])\n }\n}\n\nexport const markResumeHmrBoundaryDirty = (container: RuntimeContainer, boundaryId: string) => {\n const component = container.components.get(boundaryId)\n if (!component) {\n return false\n }\n resetComponentVisibleStates(container, boundaryId)\n component.active = false\n component.activateModeOnFlush = 'replace'\n component.reuseExistingDomOnActivate = false\n component.reuseProjectionSlotDomOnActivate = false\n container.dirty.add(boundaryId)\n return true\n}\n\nexport const applyResumeHmrUpdate = async (\n container: RuntimeContainer,\n payload: ResumeHmrUpdatePayload,\n) => {\n if (payload.fullReload) {\n return 'reload' as const\n }\n\n const rerenderSymbolIds = resolveResumeHmrBoundarySymbols(payload)\n const boundaryIds = collectResumeHmrBoundaryIds(container, rerenderSymbolIds)\n if (boundaryIds === null || (rerenderSymbolIds.length > 0 && boundaryIds.length === 0)) {\n return 'reload' as const\n }\n\n applyResumeHmrSymbolReplacements(container, payload.symbolUrlReplacements)\n const invalidatedSymbolIds = rerenderSymbolIds.filter((symbolId) => {\n if (Object.hasOwn(payload.symbolUrlReplacements, symbolId)) {\n return true\n }\n const currentUrl = container.symbols.get(symbolId)\n return !!currentUrl && canBustRuntimeSymbolUrl(currentUrl)\n })\n bustRuntimeSymbolUrls(container, invalidatedSymbolIds, Date.now())\n invalidateRuntimeSymbolCaches(container, invalidatedSymbolIds)\n\n for (const boundaryId of boundaryIds) {\n markResumeHmrBoundaryDirty(container, boundaryId)\n }\n\n if (container.dirty.size > 0) {\n await flushDirtyComponents(container)\n }\n\n return 'updated' as const\n}\n\nexport const applyResumeHmrUpdateToRegisteredContainers = async (\n payload: ResumeHmrUpdatePayload,\n) => {\n const routeRefreshBustToken = Date.now()\n let handled = false\n for (const container of getResumeContainers()) {\n const refreshed = await refreshRouteContainerForHmr(\n container,\n payload.fileUrl,\n routeRefreshBustToken,\n )\n if (refreshed) {\n handled = true\n continue\n }\n const result = await applyResumeHmrUpdate(container, payload)\n if (result === 'updated') {\n handled = true\n }\n }\n\n return handled ? ('updated' as const) : ('reload' as const)\n}\n\nexport const flushDirtyComponents = async (container: RuntimeContainer) => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n while (true) {\n const existing = globalRecord[DIRTY_FLUSH_PROMISE_KEY]\n if (existing instanceof Promise) {\n await existing\n if (container.dirty.size === 0) {\n return\n }\n continue\n }\n\n if (container.dirty.size === 0) {\n return\n }\n\n const pendingFocus = capturePendingFocusRestore(container, container.doc?.activeElement)\n\n const flushing = (async () => {\n while (container.dirty.size > 0) {\n const batch = sortDirtyComponents(container.dirty)\n container.dirty.clear()\n const patchedAncestors = new Set<string>()\n const rerendered = new Set<string>()\n for (const componentId of batch) {\n const rerenderedParent = [...rerendered].find(\n (parentId) => componentId === parentId || isDescendantOf(parentId, componentId),\n )\n if (rerenderedParent) {\n const component = container.components.get(componentId)\n if (\n patchedAncestors.has(rerenderedParent) &&\n component?.start?.parentNode &&\n component.end?.parentNode\n ) {\n component.active = false\n container.dirty.add(componentId)\n }\n continue\n }\n const component = container.components.get(componentId)\n if (component?.active) {\n continue\n }\n const preservesProjectionSlotDom =\n (component?.activateModeOnFlush ?? 'replace') === 'patch' &&\n (component?.reuseProjectionSlotDomOnActivate ?? false)\n const patched = await activateComponent(container, componentId)\n rerendered.add(componentId)\n if (preservesProjectionSlotDom && patched) {\n patchedAncestors.add(componentId)\n }\n }\n }\n })()\n\n globalRecord[DIRTY_FLUSH_PROMISE_KEY] = flushing\n try {\n await flushing\n } finally {\n if (globalRecord[DIRTY_FLUSH_PROMISE_KEY] === flushing) {\n delete globalRecord[DIRTY_FLUSH_PROMISE_KEY]\n }\n }\n\n restorePendingFocus(container, pendingFocus)\n\n if (container.dirty.size === 0) {\n return\n }\n }\n}\n\nconst waitForPendingDirtyFlush = async () => {\n const existing = (globalThis as Record<PropertyKey, unknown>)[DIRTY_FLUSH_PROMISE_KEY]\n if (existing instanceof Promise) {\n await existing\n }\n}\n\nexport const beginSSRContainer = <T>(\n symbols: Record<string, string>,\n render: () => T,\n): {\n container: RuntimeContainer\n result: T\n} => {\n const container = createContainer(symbols)\n const rootComponent: ComponentState = {\n active: false,\n didMount: false,\n id: ROOT_COMPONENT_ID,\n mountCleanupSlots: [],\n parentId: null,\n props: {},\n projectionSlots: null,\n rawProps: null,\n renderEffectCleanupSlot: createCleanupSlot(),\n scopeId: registerScope(container, []),\n signalIds: [],\n symbol: ROOT_COMPONENT_ID,\n suspensePromise: null,\n visibleCount: 0,\n watchCount: 0,\n }\n\n const rootFrame = createFrame(container, rootComponent, 'ssr')\n const result = pushContainer(container, () => pushFrame(rootFrame, render))\n return {\n container,\n result,\n }\n}\n\nexport const beginAsyncSSRContainer = async <T>(\n symbols: Record<string, string>,\n render: () => T,\n prepare?: (container: RuntimeContainer) => void | Promise<void>,\n options?: {\n asyncSignalSnapshotCache?: Map<string, unknown>\n },\n): Promise<{\n container: RuntimeContainer\n result: T\n}> => {\n const container = createContainer(symbols, undefined, options?.asyncSignalSnapshotCache)\n const rootComponent: ComponentState = {\n active: false,\n didMount: false,\n id: ROOT_COMPONENT_ID,\n mountCleanupSlots: [],\n parentId: null,\n props: {},\n projectionSlots: null,\n rawProps: null,\n renderEffectCleanupSlot: createCleanupSlot(),\n scopeId: registerScope(container, []),\n signalIds: [],\n symbol: ROOT_COMPONENT_ID,\n suspensePromise: null,\n visibleCount: 0,\n watchCount: 0,\n }\n\n const rootFrame = createFrame(container, rootComponent, 'ssr')\n await prepare?.(container)\n const result = pushContainer(container, () => pushFrame(rootFrame, render))\n return {\n container,\n result,\n }\n}\n\nconst createResumePayload = (\n container: RuntimeContainer,\n componentIds?: Iterable<string>,\n): ResumePayload => {\n const keepComponents = componentIds ? new Set(componentIds) : null\n const componentEntries = [...container.components.entries()].filter(\n ([id]) => !keepComponents || keepComponents.has(id),\n )\n const keepSignals = new Set(componentEntries.flatMap(([, component]) => component.signalIds))\n if (keepComponents) {\n for (const [id, record] of container.signals.entries()) {\n if ([...record.subscribers].some((componentId) => keepComponents.has(componentId))) {\n keepSignals.add(id)\n }\n }\n }\n\n return {\n actions: Object.fromEntries(\n [...container.actionStates.entries()].map(([id, action]) => [\n id,\n {\n error: serializeRuntimeValue(container, action.error),\n input: serializeRuntimeValue(container, action.input),\n result: serializeRuntimeValue(container, action.result),\n } satisfies ResumeActionPayload,\n ]),\n ),\n components: Object.fromEntries(\n componentEntries.map(([id, component]) => [\n id,\n {\n ...(component.optimizedRoot ? { optimizedRoot: true } : {}),\n props: serializeRuntimeValue(container, component.props),\n ...(component.projectionSlots\n ? { projectionSlots: { ...component.projectionSlots } }\n : {}),\n scope: component.scopeId,\n signalIds: [...component.signalIds],\n symbol: component.symbol,\n visibleCount: component.visibleCount,\n watchCount: component.watchCount,\n } satisfies ResumeComponentPayload,\n ]),\n ),\n loaders: Object.fromEntries(\n [...container.loaderStates.entries()].map(([id, loader]) => [\n id,\n {\n data: serializeRuntimeValue(container, loader.data),\n error: serializeRuntimeValue(container, loader.error),\n loaded: loader.loaded,\n } satisfies ResumeLoaderPayload,\n ]),\n ),\n scopes: Object.fromEntries(container.scopes.entries()),\n signals: Object.fromEntries(\n [...container.signals.entries()]\n .filter(([id]) => !keepComponents || keepSignals.has(id))\n .map(([id, record]) => [id, serializeRuntimeValue(container, record.value)]),\n ),\n subscriptions: Object.fromEntries(\n [...container.signals.entries()]\n .filter(([id]) => !keepComponents || keepSignals.has(id))\n .map(([id, record]) => [\n id,\n [...record.subscribers].filter(\n (componentId) => !keepComponents || keepComponents.has(componentId),\n ),\n ]),\n ),\n symbols: Object.fromEntries(container.symbols.entries()),\n visibles: Object.fromEntries(\n [...container.visibles.entries()]\n .filter(([, visible]) => !keepComponents || keepComponents.has(visible.componentId))\n .map(([id, visible]) => [\n id,\n {\n componentId: visible.componentId,\n scope: visible.scopeId,\n symbol: visible.symbol,\n } satisfies ResumeVisiblePayload,\n ]),\n ),\n watches: Object.fromEntries(\n [...container.watches.entries()]\n .filter(([, watch]) => !keepComponents || keepComponents.has(watch.componentId))\n .map(([id, watch]) => [\n id,\n {\n componentId: watch.componentId,\n mode: watch.mode,\n scope: watch.scopeId,\n signals: [...watch.effect.signals].map((signal) => signal.id),\n symbol: watch.symbol,\n } satisfies ResumeWatchPayload,\n ]),\n ),\n }\n}\n\nexport const toResumePayload = (container: RuntimeContainer): ResumePayload =>\n createResumePayload(container)\n\nexport const toResumePayloadSubset = (\n container: RuntimeContainer,\n componentIds: Iterable<string>,\n): ResumePayload => createResumePayload(container, componentIds)\n\nconst bindComponentBoundaries = (container: RuntimeContainer, root: ParentNode) => {\n if (!hasOwnerDocument(root)) {\n return\n }\n for (const [id, boundary] of scanComponentBoundaries(root)) {\n const component = container.components.get(id)\n if (!component) {\n continue\n }\n component.start = boundary.start\n component.end = boundary.end\n }\n}\n\nexport const mergeResumePayload = (container: RuntimeContainer, payload: ResumePayload) => {\n for (const [id, actionPayload] of Object.entries(payload.actions ?? {})) {\n container.actionStates.set(id, {\n error: deserializeRuntimeValue(container, actionPayload.error),\n input: deserializeRuntimeValue(container, actionPayload.input),\n result: deserializeRuntimeValue(container, actionPayload.result),\n })\n }\n\n for (const [id, encodedValue] of Object.entries(payload.signals)) {\n const decodedValue = deserializeRuntimeValue(container, encodedValue)\n const record = ensureSignalRecord(container, id, decodedValue)\n record.value = decodedValue\n }\n\n for (const [id, loaderPayload] of Object.entries(payload.loaders ?? {})) {\n container.loaderStates.set(id, {\n data: deserializeRuntimeValue(container, loaderPayload.data),\n error: deserializeRuntimeValue(container, loaderPayload.error),\n loaded: loaderPayload.loaded,\n })\n }\n\n for (const [id, slots] of Object.entries(payload.scopes)) {\n container.scopes.set(id, slots)\n }\n container.nextScopeId = findNextNumericId(container.scopes.keys(), 'sc')\n\n for (const [id, componentPayload] of Object.entries(payload.components)) {\n container.components.set(id, {\n active: false,\n didMount: false,\n id,\n mountCleanupSlots: [],\n optimizedRoot: componentPayload.optimizedRoot === true,\n parentId: id.includes('.') ? id.slice(0, id.lastIndexOf('.')) : ROOT_COMPONENT_ID,\n prefersEffectOnlyLocalSignalWrites: false,\n props: deserializeRuntimeValue(container, componentPayload.props),\n projectionSlots: componentPayload.projectionSlots\n ? { ...componentPayload.projectionSlots }\n : null,\n rawProps: null,\n renderEffectCleanupSlot: createCleanupSlot(),\n scopeId: componentPayload.scope,\n signalIds: [...componentPayload.signalIds],\n symbol: componentPayload.symbol,\n suspensePromise: null,\n visibleCount: componentPayload.visibleCount ?? 0,\n watchCount: componentPayload.watchCount,\n })\n }\n\n for (const [signalId, subscribers] of Object.entries(payload.subscriptions)) {\n const record = container.signals.get(signalId)\n if (!record) {\n continue\n }\n record.subscribers = new Set(subscribers)\n }\n container.nextSignalId = findNextNumericId(container.signals.keys(), 's')\n container.nextAtomId = findNextNumericId(container.signals.keys(), 'a')\n\n for (const [id, watchPayload] of Object.entries(payload.watches)) {\n const watch = getOrCreateWatchState(container, id, watchPayload.componentId)\n watch.mode = watchPayload.mode\n watch.scopeId = watchPayload.scope\n watch.symbol = watchPayload.symbol\n watch.track = null\n watch.run = null\n clearEffectSignals(watch.effect)\n for (const signalId of watchPayload.signals) {\n const record = container.signals.get(signalId)\n if (!record) {\n continue\n }\n watch.effect.signals.add(record)\n record.effects.add(watch.effect)\n }\n }\n\n for (const [id, visiblePayload] of Object.entries(payload.visibles ?? {})) {\n const visible = getOrCreateVisibleState(container, id, visiblePayload.componentId)\n visible.done = false\n visible.pending = null\n visible.run = null\n visible.scopeId = visiblePayload.scope\n visible.symbol = visiblePayload.symbol\n }\n}\n\nconst pruneStreamedBoundaryDescendants = (\n container: RuntimeContainer,\n boundaryId: string,\n payload: ResumePayload,\n) => {\n const keep = new Set(\n Object.keys(payload.components).filter((candidate) => isDescendantOf(boundaryId, candidate)),\n )\n pruneRemovedComponents(container, boundaryId, keep)\n}\n\nconst applyStreamedSuspenseBoundary = (\n container: RuntimeContainer,\n chunk: StreamedSuspenseChunk,\n) => {\n const doc = container.doc\n if (!doc) {\n return\n }\n const component = container.components.get(chunk.boundaryId)\n if (!component?.start || !component.end) {\n return\n }\n const template = doc.getElementById(chunk.templateId)\n const payloadScript = doc.getElementById(chunk.payloadScriptId)\n if (!(template instanceof HTMLTemplateElement) || !payloadScript?.textContent) {\n return\n }\n\n const payload = JSON.parse(payloadScript.textContent) as ResumePayload\n const focusSnapshot = captureBoundaryFocus(doc, component.start, component.end)\n const fragment = template.content.cloneNode(true) as DocumentFragment\n const nodes = [...fragment.childNodes]\n replaceBoundaryContents(component.start, component.end, nodes)\n pruneStreamedBoundaryDescendants(container, chunk.boundaryId, payload)\n mergeResumePayload(container, payload)\n component.suspensePromise = null\n\n const parentRoot = component.start.parentNode\n if (parentRoot) {\n bindComponentBoundaries(container, parentRoot)\n restoreSignalRefs(container, parentRoot)\n if ('querySelectorAll' in parentRoot) {\n bindRouterLinks(container, parentRoot)\n }\n }\n\n restoreBoundaryFocus(doc, component.start, component.end, focusSnapshot)\n scheduleVisibleCallbacksCheck(container)\n template.remove()\n payloadScript.remove()\n}\n\nconst getStreamState = (): StreamState => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[STREAM_STATE_KEY]\n if (existing && typeof existing === 'object' && 'enqueue' in existing && 'pending' in existing) {\n return existing as StreamState\n }\n const created: StreamState = {\n enqueue(chunk) {\n created.pending.push(chunk)\n void created.process?.()\n },\n pending: [],\n processing: null,\n }\n globalRecord[STREAM_STATE_KEY] = created\n return created\n}\n\nexport const getStreamingResumeBootstrapScriptContent = () =>\n `(()=>{const streamKey=\"${STREAM_STATE_KEY}\";const stream=window[streamKey]??={pending:[]};stream.enqueue=stream.enqueue??function(chunk){this.pending.push(chunk);if(this.process){void this.process();}};const navKey=\"${PENDING_RESUME_LINK_KEY}\";document.addEventListener(\"click\",(event)=>{if(document.body?.getAttribute(\"data-e-resume\")!==\"paused\")return;if(event.defaultPrevented||event.button!==0||event.metaKey||event.ctrlKey||event.shiftKey||event.altKey)return;let element=event.target instanceof Element?event.target:event.target instanceof Node?event.target.parentElement:null;while(element&&!(element instanceof HTMLAnchorElement)){element=element.parentElement;}if(!element||!element.hasAttribute(\"${ROUTE_LINK_ATTR}\")||element.hasAttribute(\"download\"))return;if(element.target&&element.target!==\"_self\")return;const href=element.getAttribute(\"href\");if(!href)return;const url=new URL(href,window.location.href);if(url.origin!==window.location.origin)return;event.preventDefault();window[navKey]={href:url.href,replace:element.getAttribute(\"${ROUTE_REPLACE_ATTR}\")===\"true\"};},{capture:true});})();`\n\nconst takePendingResumeLinkNavigation = (): PendingResumeLinkNavigation | null => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const pending = globalRecord[PENDING_RESUME_LINK_KEY]\n if (\n !pending ||\n typeof pending !== 'object' ||\n typeof (pending as { href?: unknown }).href !== 'string'\n ) {\n return null\n }\n delete globalRecord[PENDING_RESUME_LINK_KEY]\n return {\n href: (pending as { href: string }).href,\n replace: (pending as { replace?: unknown }).replace === true,\n }\n}\n\nconst installStreamedSuspenseController = (container: RuntimeContainer) => {\n const state = getStreamState()\n state.process = async () => {\n if (state.processing) {\n await state.processing\n return\n }\n state.processing = (async () => {\n while (state.pending.length > 0) {\n const chunk = state.pending.shift()\n if (!chunk) {\n continue\n }\n applyStreamedSuspenseBoundary(container, chunk)\n }\n })()\n try {\n await state.processing\n } finally {\n state.processing = null\n }\n }\n if (state.pending.length > 0) {\n void state.process()\n }\n}\n\nexport const createResumeContainer = (\n source: Document | HTMLElement,\n payload: ResumePayload,\n options?: {\n routeManifest?: RouteManifest\n },\n) => {\n const doc = source instanceof Document ? source : source.ownerDocument\n const root = source instanceof Document ? doc.body : source\n const container = createContainer(payload.symbols, doc)\n container.rootElement = root as HTMLElement\n ensureRouterState(container, options?.routeManifest)\n\n mergeResumePayload(container, payload)\n rememberManagedAttributesForNode(root as HTMLElement)\n bindComponentBoundaries(container, root as HTMLElement)\n restoreSignalRefs(container, root as HTMLElement)\n\n restoreRegisteredRpcHandles(container)\n\n ensureRouterState(container)\n syncRouterLocationSilently(container, doc.location.href)\n scheduleVisibleCallbacksCheck(container)\n\n return container\n}\n\nconst canRestoreResumedLocalSignalEffects = (\n container: RuntimeContainer,\n component: ComponentState,\n) =>\n !!component.start &&\n !!component.end &&\n !component.active &&\n component.signalIds.length > 0 &&\n (component.symbol === SUSPENSE_COMPONENT_SYMBOL ||\n container.imports.has(component.symbol) ||\n container.symbols.has(component.symbol))\n\nexport const restoreResumedLocalSignalEffects = async (container: RuntimeContainer) => {\n let queued = false\n const restoredIds: string[] = []\n\n for (const componentId of sortDirtyComponents(\n [...container.components.values()]\n .filter((component) => canRestoreResumedLocalSignalEffects(container, component))\n .map((component) => component.id),\n )) {\n const component = container.components.get(componentId)\n if (!component || component.active) {\n continue\n }\n component.active = false\n component.activateModeOnFlush = 'replace'\n component.reuseExistingDomOnActivate = false\n component.reuseProjectionSlotDomOnActivate = false\n container.dirty.add(component.id)\n restoredIds.push(component.id)\n queued = true\n }\n\n if (queued) {\n await flushDirtyComponents(container)\n }\n\n for (const componentId of restoredIds) {\n const component = container.components.get(componentId)\n if (!component?.active) {\n continue\n }\n syncEffectOnlyLocalSignalPreference(component)\n }\n}\n\nexport const restoreRegisteredRpcHandles = (container: RuntimeContainer) => {\n withRuntimeContainer(container, () => {\n for (const id of getRegisteredActionHookIds()) {\n getRegisteredActionHook<() => unknown>(id)?.()\n }\n for (const id of getRegisteredLoaderHookIds()) {\n getRegisteredLoaderHook<() => unknown>(id)?.()\n }\n })\n}\n\nexport const primeRouteModules = async (container: RuntimeContainer) => {\n const router = ensureRouterState(container)\n const currentRoute = await loadRouteComponent(container, router.currentPath.value)\n if (currentRoute) {\n router.currentRoute = currentRoute\n if (container.doc) {\n applyRouteMetadata(\n container.doc,\n currentRoute,\n new URL(container.doc.location.href),\n router.defaultTitle,\n )\n }\n }\n}\n\nconst getRouterEventState = (event: Event): RouterEventState => {\n const eventRecord = event as Event & {\n [ROUTER_EVENT_STATE_KEY]?: RouterEventState\n preventDefault: () => void\n }\n const existing = eventRecord[ROUTER_EVENT_STATE_KEY]\n if (existing) {\n return existing\n }\n\n const originalPreventDefault = event.preventDefault.bind(event)\n const state: RouterEventState = {\n originalPreventDefault,\n routerPrevented: false,\n userPrevented: false,\n }\n\n eventRecord.preventDefault = () => {\n if (state.routerPrevented) {\n state.userPrevented = true\n }\n originalPreventDefault()\n }\n eventRecord[ROUTER_EVENT_STATE_KEY] = state\n return state\n}\n\nconst findInteractiveTarget = (target: EventTarget | null, eventName: string): Element | null => {\n let element = isElementNode(target)\n ? target\n : target instanceof Node\n ? target.parentElement\n : null\n while (element) {\n if (element.hasAttribute(`data-e-on${eventName}`)) {\n return element\n }\n element = element.parentElement\n }\n return null\n}\n\nconst INTERACTIVE_PREFETCH_EVENT_NAMES = [\n 'click',\n 'input',\n 'change',\n 'submit',\n 'keydown',\n 'compositionstart',\n 'compositionend',\n] as const\nconst INTERACTIVE_PREFETCH_SELECTOR = INTERACTIVE_PREFETCH_EVENT_NAMES.map(\n (eventName) => `[data-e-on${eventName}]`,\n).join(', ')\n\nconst prefetchElementSymbols = (\n container: RuntimeContainer,\n element: Element,\n eventNames: readonly string[],\n) => {\n for (const eventName of eventNames) {\n const binding = element.getAttribute(`data-e-on${eventName}`)\n if (!binding) {\n continue\n }\n const { symbolId } = parseBinding(binding)\n void loadSymbol(container, symbolId).catch(() => {})\n }\n}\n\nconst prefetchInteractiveTargetSymbols = (\n container: RuntimeContainer,\n target: EventTarget | null,\n eventNames: readonly string[],\n) => {\n let element = isElementNode(target)\n ? target\n : target instanceof Node\n ? target.parentElement\n : null\n\n while (element) {\n prefetchElementSymbols(container, element, eventNames)\n element = element.parentElement\n }\n}\n\nconst getPendingLinkNavigationForLink = (\n container: RuntimeContainer,\n event: Event,\n link: HTMLAnchorElement,\n): PendingLinkNavigation | null => {\n if (!(event instanceof MouseEvent)) {\n return null\n }\n if (event.defaultPrevented) {\n return null\n }\n if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {\n return null\n }\n if (link.hasAttribute('download')) {\n return null\n }\n if (link.target && link.target !== '_self') {\n return null\n }\n\n const href = link.getAttribute('href')\n if (!href || !container.doc) {\n return null\n }\n\n const url = new URL(href, container.doc.location.href)\n const pathname = normalizeRoutePath(url.pathname)\n if (url.origin !== container.doc.location.origin) {\n return null\n }\n const matched = matchRouteManifest(ensureRouterState(container).manifest, pathname)\n if (!matched?.entry.page) {\n return null\n }\n\n const state = getRouterEventState(event)\n state.routerPrevented = true\n state.originalPreventDefault()\n\n return {\n href: url.href,\n replace: link.getAttribute(ROUTE_REPLACE_ATTR) === 'true',\n state,\n }\n}\n\nconst getLinkPrefetchMode = (link: HTMLAnchorElement): LinkPrefetchMode => {\n const value = link.getAttribute(ROUTE_PREFETCH_ATTR)\n if (value === 'hover' || value === 'focus' || value === 'intent' || value === 'none') {\n return value\n }\n return 'intent'\n}\n\nconst findRouteLinkTarget = (target: EventTarget | null) => {\n let element = isElementNode(target)\n ? target\n : target instanceof Node\n ? target.parentElement\n : null\n\n while (element) {\n if (isHTMLAnchorElementNode(element) && element.hasAttribute(ROUTE_LINK_ATTR)) {\n return element\n }\n element = element.parentElement\n }\n\n return null\n}\n\nconst bindRouterLinkPrefetch = (container: RuntimeContainer, link: HTMLAnchorElement) => {\n const boundLink = link as HTMLAnchorElement & {\n [ROUTER_LINK_PREFETCH_BOUND_KEY]?: true\n }\n if (boundLink[ROUTER_LINK_PREFETCH_BOUND_KEY]) {\n return\n }\n\n boundLink[ROUTER_LINK_PREFETCH_BOUND_KEY] = true\n const mode = getLinkPrefetchMode(link)\n if (mode === 'none') {\n return\n }\n\n const runPrefetch = () => {\n const href = link.getAttribute('href')\n if (!href) {\n return\n }\n void prefetchRoute(container, href)\n }\n\n const runPointerIntentPrefetch = (event: Event) => {\n if (event instanceof MouseEvent && event.button !== 0) {\n return\n }\n runPrefetch()\n }\n\n if (mode === 'hover' || mode === 'intent') {\n link.addEventListener('mouseenter', runPrefetch)\n }\n if (mode === 'focus' || mode === 'intent') {\n link.addEventListener('focus', runPrefetch)\n }\n if (mode === 'intent') {\n link.addEventListener('pointerdown', runPointerIntentPrefetch)\n }\n}\n\nconst bindRouterLink = (container: RuntimeContainer, link: HTMLAnchorElement) => {\n const boundLink = link as HTMLAnchorElement & {\n [ROUTER_LINK_BOUND_KEY]?: true\n }\n if (boundLink[ROUTER_LINK_BOUND_KEY]) {\n return\n }\n\n boundLink[ROUTER_LINK_BOUND_KEY] = true\n link.addEventListener('click', (event) => {\n const pendingLink = getPendingLinkNavigationForLink(container, event, link)\n if (!pendingLink || pendingLink.state.userPrevented) {\n return\n }\n void navigateContainer(container, pendingLink.href, {\n mode: pendingLink.replace ? 'replace' : 'push',\n })\n })\n}\n\nconst bindRouterLinks = (container: RuntimeContainer, root: ParentNode) => {\n const links = root.querySelectorAll(`a[${ROUTE_LINK_ATTR}]`)\n for (const link of links) {\n if (!isHTMLAnchorElementNode(link)) {\n continue\n }\n bindRouterLinkPrefetch(container, link)\n bindRouterLink(container, link)\n }\n}\n\nexport const installResumeLinkListeners = (container: RuntimeContainer) => {\n if (!container.doc) {\n return\n }\n bindRouterLinks(container, container.doc)\n const onRouteClick = (event: Event) => {\n const link = findRouteLinkTarget(event.target)\n if (!link) {\n return\n }\n const pendingLink = getPendingLinkNavigationForLink(container, event, link)\n if (!pendingLink || pendingLink.state.userPrevented) {\n return\n }\n void navigateContainer(container, pendingLink.href, {\n mode: pendingLink.replace ? 'replace' : 'push',\n })\n }\n container.doc.addEventListener('click', onRouteClick)\n const pending = takePendingResumeLinkNavigation()\n if (pending) {\n void navigateContainer(container, pending.href, {\n mode: pending.replace ? 'replace' : 'push',\n })\n }\n return () => {\n container.doc?.removeEventListener('click', onRouteClick)\n }\n}\n\nconst parseBinding = (value: string): { scopeId: string; symbolId: string } => {\n const separatorIndex = value.indexOf(':')\n if (separatorIndex < 0) {\n throw new Error(`Invalid binding ${value}.`)\n }\n return {\n symbolId: value.slice(0, separatorIndex),\n scopeId: value.slice(separatorIndex + 1),\n }\n}\n\nconst withClientContainer = async <T>(container: RuntimeContainer, fn: () => Promise<T> | T) =>\n pushContainer(container, () => Promise.resolve(fn()))\n\nexport const createDelegatedEvent = (event: Event, currentTarget: Element) =>\n new Proxy(event, {\n get(target, property) {\n if (property === 'currentTarget') {\n return currentTarget\n }\n const value = Reflect.get(target, property, target)\n return typeof value === 'function' ? value.bind(target) : value\n },\n }) as Event\n\nconst readBoundElementValue = (\n element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n currentValue: unknown,\n) => {\n if (\n isHTMLInputElementNode(element) &&\n typeof currentValue === 'number' &&\n (element.type === 'number' || element.type === 'range') &&\n !Number.isNaN(element.valueAsNumber)\n ) {\n return element.valueAsNumber\n }\n\n return element.value\n}\n\nexport const syncBoundElementSignal = (container: RuntimeContainer, target: EventTarget | null) => {\n if (\n !isHTMLInputElementNode(target) &&\n !isHTMLSelectElementNode(target) &&\n !isHTMLTextAreaElementNode(target)\n ) {\n return false\n }\n\n let didSync = false\n const valueSignalId = target.getAttribute(BIND_VALUE_ATTR)\n if (valueSignalId) {\n const record = container.signals.get(valueSignalId)\n if (record) {\n const nextValue = readBoundElementValue(target, record.value)\n writeSignalValue(container, record, nextValue)\n didSync = true\n }\n }\n\n if (isHTMLInputElementNode(target)) {\n const checkedSignalId = target.getAttribute(BIND_CHECKED_ATTR)\n if (checkedSignalId) {\n const record = container.signals.get(checkedSignalId)\n if (record) {\n const nextChecked = target.checked\n writeSignalValue(container, record, nextChecked)\n didSync = true\n }\n }\n }\n\n return didSync\n}\n\nexport const createClientLazyListener = (\n descriptor: EventDescriptor | LazyMeta,\n currentTarget: Element,\n) => {\n const container = getCurrentContainer()\n if (!container) {\n return null\n }\n\n return async (event: Event) => {\n const module = await loadSymbol(container, descriptor.symbol)\n try {\n await withClientContainer(container, async () => {\n await module.default(descriptor.captures(), createDelegatedEvent(event, currentTarget))\n })\n } catch (error) {\n throw wrapGeneratedScopeReferenceError(error, {\n phase: 'running a lazy event handler for',\n symbolId: descriptor.symbol,\n })\n }\n await flushDirtyComponents(container)\n }\n}\n\nexport const dispatchResumeEvent = async (container: RuntimeContainer, event: Event) => {\n const interactiveTarget = findInteractiveTarget(event.target, event.type)\n if (!interactiveTarget) {\n return\n }\n\n const binding = interactiveTarget.getAttribute(`data-e-on${event.type}`)\n if (!binding) {\n return\n }\n const pendingFocus = capturePendingFocusRestore(container, event.target)\n\n const { scopeId, symbolId } = parseBinding(binding)\n const module =\n getResolvedRuntimeSymbols(container).get(symbolId) ?? (await loadSymbol(container, symbolId))\n const scope = materializeScope(container, scopeId)\n try {\n await withClientContainer(container, async () => {\n await module.default(scope, createDelegatedEvent(event, interactiveTarget))\n })\n } catch (error) {\n throw wrapGeneratedScopeReferenceError(error, {\n phase: 'running a resumable event handler for',\n symbolId,\n })\n }\n await flushDirtyComponents(container)\n restorePendingFocus(container, pendingFocus)\n}\n\nexport const dispatchDocumentEvent = async (container: RuntimeContainer, event: Event) => {\n if (container.resumeReadyPromise) {\n await container.resumeReadyPromise\n }\n const didSyncBoundSignal =\n (event.type === 'input' || event.type === 'change') &&\n syncBoundElementSignal(container, event.target)\n const pendingFocus = didSyncBoundSignal\n ? capturePendingFocusRestore(container, event.target)\n : null\n await dispatchResumeEvent(container, event)\n if (didSyncBoundSignal) {\n await flushDirtyComponents(container)\n restorePendingFocus(container, pendingFocus)\n }\n if (event.type === 'submit' && !event.defaultPrevented && isHTMLFormElementNode(event.target)) {\n const actionId = event.target.getAttribute(ACTION_FORM_ATTR)\n if (actionId) {\n const handle = container.actions.get(actionId) as\n | {\n action: (input?: unknown) => Promise<unknown>\n }\n | undefined\n if (handle) {\n event.preventDefault()\n const submitter =\n typeof SubmitEvent !== 'undefined' && event instanceof SubmitEvent\n ? (event.submitter ?? undefined)\n : undefined\n const formData = isHTMLElementNode(submitter)\n ? new FormData(event.target, submitter)\n : new FormData(event.target)\n await handle.action(formData)\n await flushDirtyComponents(container)\n }\n }\n }\n}\n\nconst enqueueDocumentEvent = (container: RuntimeContainer, event: Event) => {\n if (!container.eventDispatchPromise) {\n const running = dispatchDocumentEvent(container, event)\n const tracked = running.finally(() => {\n if (container.eventDispatchPromise === tracked) {\n container.eventDispatchPromise = null\n }\n })\n container.eventDispatchPromise = tracked\n return tracked\n }\n\n const previous = container.eventDispatchPromise ?? Promise.resolve()\n const queued = previous\n .catch(() => {})\n .then(async () => {\n await dispatchDocumentEvent(container, event)\n })\n container.eventDispatchPromise = queued.finally(() => {\n if (container.eventDispatchPromise === queued) {\n container.eventDispatchPromise = null\n }\n })\n return container.eventDispatchPromise\n}\n\nexport const installResumeListeners = (container: RuntimeContainer) => {\n const doc = container.doc\n if (!doc) {\n return () => {}\n }\n const cleanupRouteLinks = installResumeLinkListeners(container)\n installStreamedSuspenseController(container)\n ensureVisibilityListeners(container)\n scheduleVisibleCallbacksCheck(container)\n const listeners = [\n 'cancel',\n 'click',\n 'input',\n 'change',\n 'submit',\n 'keydown',\n 'compositionstart',\n 'compositionend',\n ] as const\n const onEvent = (event: Event) => {\n void enqueueDocumentEvent(container, event)\n }\n const onIntent = (event: Event) => {\n if (event.type === 'pointerdown') {\n prefetchInteractiveTargetSymbols(container, event.target, ['click', 'submit'])\n return\n }\n prefetchInteractiveTargetSymbols(container, event.target, INTERACTIVE_PREFETCH_EVENT_NAMES)\n }\n const onPopState = () => {\n void navigateContainer(container, doc.location.href, {\n mode: 'pop',\n })\n }\n\n for (const eventName of listeners) {\n doc.addEventListener(eventName, onEvent, true)\n }\n doc.addEventListener('pointerdown', onIntent, true)\n doc.addEventListener('focusin', onIntent, true)\n doc.defaultView?.addEventListener('popstate', onPopState)\n\n return () => {\n for (const eventName of listeners) {\n doc.removeEventListener(eventName, onEvent, true)\n }\n doc.removeEventListener('pointerdown', onIntent, true)\n doc.removeEventListener('focusin', onIntent, true)\n doc.defaultView?.removeEventListener('popstate', onPopState)\n cleanupRouteLinks?.()\n container.visibilityListenersCleanup?.()\n }\n}\n\nexport const renderString = (inputElementLike: JSX.Element | JSX.Element[]) =>\n renderStringNode(inputElementLike)\n\nexport const hasActiveRuntimeComponent = () => {\n const frame = getCurrentFrame()\n return !!frame && frame.component.id !== ROOT_COMPONENT_ID\n}\n\nexport const getRuntimeContextValue = (\n token: RuntimeContextToken,\n): {\n found: boolean\n value: unknown\n} => {\n const stack = getContextValueStack()\n for (let index = stack.length - 1; index >= 0; index -= 1) {\n const entry = stack[index]\n if (entry?.token === token) {\n return {\n found: true,\n value: entry.value,\n }\n }\n }\n return {\n found: false,\n value: undefined,\n }\n}\n\nexport const createStandaloneRuntimeSignal = <T>(fallback: T): { value: T } => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const nextId = ((globalRecord[STANDALONE_SIGNAL_ID_KEY] as number | undefined) ?? 0) + 1\n globalRecord[STANDALONE_SIGNAL_ID_KEY] = nextId\n return ensureSignalRecord(null, `$standalone:${nextId}`, fallback).handle\n}\n\nexport const useRuntimeSignal = <T>(fallback: T): { value: T } => {\n const container = getCurrentContainer()\n const frame = getCurrentFrame()\n\n if (!container || !frame || frame.component.id === ROOT_COMPONENT_ID) {\n throw new Error('useSignal() can only be used while rendering a component.')\n }\n\n const signalIndex = frame.signalCursor++\n const existingId = frame.component.signalIds[signalIndex]\n const signalId = existingId ?? `s${container.nextSignalId++}`\n if (!existingId) {\n frame.component.signalIds.push(signalId)\n }\n return ensureSignalRecord(container, signalId, fallback).handle\n}\n\nexport const useRuntimeAtom = <T>(atom: object, fallback: T): { value: T } => {\n const container = getCurrentContainer()\n const frame = getCurrentFrame()\n\n if (!container || !frame || frame.component.id === ROOT_COMPONENT_ID) {\n throw new Error('useAtom() can only be used while rendering a component.')\n }\n\n const signalIndex = frame.signalCursor++\n const existingId = frame.component.signalIds[signalIndex]\n const mappedId = container.atoms.get(atom)\n const signalId = existingId ?? mappedId ?? `a${container.nextAtomId++}`\n if (!existingId) {\n frame.component.signalIds.push(signalId)\n }\n if (mappedId !== signalId) {\n container.atoms.set(atom, signalId)\n }\n return ensureSignalRecord(container, signalId, fallback).handle\n}\n\nexport const createDetachedRuntimeSignal = <T>(\n container: RuntimeContainer,\n id: string,\n fallback: T,\n): { value: T } => ensureSignalRecord(container, id, fallback).handle\n\nexport const getRuntimeComponentId = () => getCurrentFrame()?.component.id ?? null\nexport const getRuntimeSignalId = (value: unknown) => getSignalMeta(value)?.id ?? null\n\nexport const useRuntimeNavigate = (): Navigate => {\n const container = getCurrentContainer()\n if (!container) {\n return createStandaloneNavigate()\n }\n return ensureRouterState(container).navigate\n}\n\nexport const useRuntimeLocation = (): RouteLocation => {\n const container = getCurrentContainer()\n if (!container) {\n return createStandaloneLocation()\n }\n return ensureRouterState(container).location\n}\n\nexport const useRuntimeRouteParams = (): RouteParams => {\n const frame = getCurrentFrame()\n if (frame?.component.props && typeof frame.component.props === 'object') {\n const candidate = (frame.component.props as Record<string, unknown>)[ROUTE_PARAMS_PROP]\n if (candidate && typeof candidate === 'object') {\n return candidate as RouteParams\n }\n }\n const container = getCurrentContainer()\n return container?.router?.currentRoute?.params ?? EMPTY_ROUTE_PARAMS\n}\n\nexport const useRuntimeRouteError = (): unknown => {\n const frame = getCurrentFrame()\n if (frame?.component.props && typeof frame.component.props === 'object') {\n const candidate = (frame.component.props as Record<string, unknown>)[ROUTE_ERROR_PROP]\n if (candidate !== undefined) {\n return candidate\n }\n }\n return getCurrentContainer()?.router?.currentRoute?.error\n}\n\nexport const notFound = (): never => {\n throw {\n __eclipsa_not_found__: true,\n [ROUTE_NOT_FOUND_KEY]: true,\n }\n}\n\nexport const isRouteNotFoundError = (error: unknown) =>\n !!error &&\n typeof error === 'object' &&\n ((error as { __eclipsa_not_found__?: boolean }).__eclipsa_not_found__ === true ||\n (error as Record<PropertyKey, unknown>)[ROUTE_NOT_FOUND_KEY] === true)\n\nexport const createEffect = (fn: () => void, options?: EffectOptions) => {\n const frame = getCurrentFrame()\n const effect: ReactiveEffect = {\n fn() {\n const dependencies = options?.dependencies\n if (!dependencies) {\n collectTrackedDependencies(effect, fn)\n return\n }\n\n collectTrackedDependencies(effect, () => {\n trackWatchDependencies(dependencies, options?.errorLabel)\n })\n\n if (options?.untracked) {\n runWithoutDependencyTracking(fn)\n return\n }\n\n fn()\n },\n signals: new Set(),\n }\n\n if (frame && frame.mode === 'client' && frame.component.id !== ROOT_COMPONENT_ID) {\n frame.effectCleanupSlot.callbacks.push(() => {\n clearEffectSignals(effect)\n })\n }\n\n effect.fn()\n}\n\nexport const createOnCleanup = (fn: () => void) => {\n if (!currentCleanupSlot) {\n throw new Error(\n 'onCleanup() can only be used while running onMount(), onVisible(), or useWatch() callbacks.',\n )\n }\n currentCleanupSlot.callbacks.push(fn)\n}\n\nexport const createOnMount = (fn: () => void) => {\n const frame = getCurrentFrame()\n if (!frame || frame.component.id === ROOT_COMPONENT_ID || frame.mode !== 'client') {\n return\n }\n frame.mountCallbacks.push(fn)\n}\n\nexport const createOnVisible = (fn: () => void) => {\n const container = getCurrentContainer()\n const frame = getCurrentFrame()\n const lazyMeta = getLazyMeta(fn)\n\n if (!container || !frame || frame.component.id === ROOT_COMPONENT_ID) {\n return\n }\n\n if (!lazyMeta && frame.mode === 'ssr') {\n return\n }\n\n const visibleIndex = frame.visibleCursor++\n const visibleId = createVisibleId(frame.component.id, visibleIndex)\n const visible = getOrCreateVisibleState(container, visibleId, frame.component.id)\n visible.scopeId = lazyMeta\n ? registerScope(container, lazyMeta.captures())\n : registerScope(container, [])\n visible.symbol = lazyMeta?.symbol ?? ''\n visible.run = lazyMeta ? null : fn\n\n scheduleVisibleCallbacksCheck(container)\n}\n\nexport const createWatch = (fn: () => void, dependencies?: WatchDependency[]) => {\n const container = getCurrentContainer()\n const frame = getCurrentFrame()\n const watchMeta = getWatchMeta(fn)\n\n if (!container || !frame || frame.component.id === ROOT_COMPONENT_ID || !watchMeta) {\n const cleanupSlot = createCleanupSlot()\n const effect: ReactiveEffect = {\n fn() {\n createLocalWatchRunner(effect, cleanupSlot, fn, dependencies)()\n },\n signals: new Set(),\n }\n effect.fn()\n return\n }\n\n const watchIndex = frame.watchCursor++\n const watchId = createWatchId(frame.component.id, watchIndex)\n const watch = getOrCreateWatchState(container, watchId, frame.component.id)\n watch.mode = dependencies ? 'explicit' : 'dynamic'\n watch.scopeId = registerScope(container, watchMeta.captures())\n watch.symbol = watchMeta.symbol\n watch.track = dependencies ? () => trackWatchDependencies(dependencies) : null\n watch.run = createLocalWatchRunner(watch.effect, watch.cleanupSlot, fn, dependencies)\n watch.effect.fn()\n}\n\nexport const getResumePayloadScriptContent = (payload: ResumePayload) =>\n escapeJSONScriptText(JSON.stringify(payload))\n","import type { JSX } from '../jsx/types.ts'\nimport type { Env, MiddlewareHandler, Next } from 'hono/types'\nimport {\n type AppContext,\n deserializePublicValue,\n serializePublicValue,\n type SerializedReference,\n type SerializedValue,\n transformCurrentPublicError,\n type WithAppEnv,\n} from './hooks.ts'\nimport {\n createDetachedRuntimeSignal,\n ensureRuntimeElementId,\n findRuntimeElement,\n flushDirtyComponents,\n getRuntimeContainer,\n getRuntimeSignalId,\n type RuntimeContainer,\n} from './runtime.ts'\nimport { registerActionHook, setActionHandleMeta, setActionHookMeta } from './internal.ts'\n\nconst ACTION_REGISTRY_KEY = Symbol.for('eclipsa.action-registry')\nexport const ACTION_CONTENT_TYPE = 'application/eclipsa-action+json'\nconst ACTION_STREAM_CONTENT_TYPE = 'application/eclipsa-action-stream+json'\nexport const ACTION_FORM_ATTR = 'data-e-action-form'\nexport const ACTION_FORM_FIELD = '__e_action'\nconst ACTION_INPUT_CACHE_KEY = Symbol.for('eclipsa.action-input-cache')\n\ndeclare const ACTION_REF_BRAND: unique symbol\ndeclare const ACTION_INPUT_TYPE: unique symbol\n\nexport interface StandardSchemaIssue {\n message: string\n path?: ReadonlyArray<PropertyKey | { readonly key: PropertyKey }>\n}\n\nexport type StandardSchemaResult<T> =\n | {\n issues: readonly StandardSchemaIssue[]\n }\n | {\n issues?: undefined\n value: T\n }\n\nexport interface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly '~standard': {\n readonly validate: (\n value: unknown,\n options?: { readonly libraryOptions?: Record<string, unknown> },\n ) => StandardSchemaResult<Output> | Promise<StandardSchemaResult<Output>>\n readonly types?:\n | {\n readonly input: Input\n readonly output: Output\n }\n | undefined\n readonly vendor: string\n readonly version: 1\n }\n}\n\nexport type InferStandardSchemaInput<Schema extends StandardSchemaV1<any, any>> = NonNullable<\n Schema['~standard']['types']\n>['input']\n\nexport type InferStandardSchemaOutput<Schema extends StandardSchemaV1<any, any>> = NonNullable<\n Schema['~standard']['types']\n>['output']\n\nexport interface OpaqueSignalRef {\n readonly [ACTION_REF_BRAND]?: 'signal'\n readonly containerId: string | null\n readonly kind: 'signal-ref'\n readonly token: string\n}\n\nexport interface OpaqueDomRef {\n readonly [ACTION_REF_BRAND]?: 'dom'\n readonly containerId: string | null\n readonly kind: 'dom-ref'\n readonly token: string\n}\n\nexport type ActionOpaqueRef = OpaqueSignalRef | OpaqueDomRef\n\ntype MiddlewareEnv<T> = T extends {\n readonly __eclipsa_action_env__?: infer MiddlewareEnv\n}\n ? Exclude<MiddlewareEnv, undefined> extends Env\n ? WithAppEnv<Exclude<MiddlewareEnv, undefined>>\n : {}\n : T extends MiddlewareHandler<infer MiddlewareEnv, any, any>\n ? WithAppEnv<MiddlewareEnv>\n : WithAppEnv<Env>\n\ntype ActionEnv<Middlewares extends readonly ActionMiddleware<any>[]> =\n Middlewares extends readonly [infer Head, ...infer Tail]\n ? Tail extends readonly ActionMiddleware<any>[]\n ? MiddlewareEnv<Head> & ActionEnv<Tail>\n : MiddlewareEnv<Head>\n : WithAppEnv<Env>\ntype MiddlewareActionInput<T> = T extends {\n readonly [ACTION_INPUT_TYPE]?: infer Input\n}\n ? Exclude<Input, undefined>\n : never\n\ntype ActionInput<Middlewares extends readonly ActionMiddleware<any>[]> = [\n MiddlewareActionInput<Middlewares[number]>,\n] extends [never]\n ? unknown\n : MiddlewareActionInput<Middlewares[number]>\n\ntype ResolvedActionOutput<Output> = Awaited<Output>\n\ntype ActionStreamYield<Output> =\n ResolvedActionOutput<Output> extends AsyncIterable<infer Value>\n ? Value\n : ResolvedActionOutput<Output> extends ReadableStream<infer Value>\n ? Value\n : ResolvedActionOutput<Output>\n\ntype ActionInvokeResult<Output> =\n ResolvedActionOutput<Output> extends AsyncIterable<infer Value>\n ? AsyncGenerator<Value, void, void>\n : Promise<ResolvedActionOutput<Output>>\n\ntype ActionInvoker<Input, Result> = unknown extends Input\n ? (input?: Input | FormData) => Result\n : undefined extends Input\n ? (input?: Input | FormData) => Result\n : (input: Input | FormData) => Result\n\nexport interface ActionSubmission<Input, Output> {\n readonly error: unknown\n readonly input: Input\n readonly result: Output | undefined\n}\n\nexport interface ActionFormProps extends Record<string, unknown> {\n children?: JSX.Element | JSX.Element[]\n}\n\nexport interface ActionHandle<Input, Output, InvokeResult = Promise<Output>> {\n Form: (props: ActionFormProps) => JSX.Element\n action: ActionInvoker<Input, InvokeResult>\n readonly error: unknown\n readonly formActionId: string\n readonly isPending: boolean\n readonly lastSubmission: ActionSubmission<Input, Output> | undefined\n readonly result: Output | undefined\n}\n\nexport interface ActionMiddleware<E extends Env = Env> extends MiddlewareHandler<E> {\n readonly __eclipsa_action_env__?: E\n}\nexport interface ActionValidatorMiddleware<Input, Output> extends ActionMiddleware<{\n Variables: {\n input: Output\n }\n}> {\n readonly [ACTION_INPUT_TYPE]?: Input\n}\nexport type ActionHandler<E extends Env = Env, Output = unknown> = (\n c: AppContext<E>,\n) => Output | Promise<Output>\n\ntype ActionHandlerOutput<Handler extends (...args: any[]) => unknown> = Awaited<ReturnType<Handler>>\n\ntype ActionUse<\n Middlewares extends readonly ActionMiddleware<any>[],\n Handler extends ActionHandler<any, any>,\n> = () => ActionHandle<\n ActionInput<Middlewares>,\n ActionStreamYield<ActionHandlerOutput<Handler>>,\n ActionInvokeResult<ActionHandlerOutput<Handler>>\n>\n\nexport interface ActionFactory {\n <Handler extends ActionHandler<{}, any>>(handler: Handler): ActionUse<[], Handler>\n <M1 extends ActionMiddleware<any>, Handler extends ActionHandler<ActionEnv<[M1]>, any>>(\n middleware1: M1,\n handler: Handler,\n ): ActionUse<[M1], Handler>\n <\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n Handler extends ActionHandler<ActionEnv<[M1, M2]>, any>,\n >(\n middleware1: M1,\n middleware2: M2,\n handler: Handler,\n ): ActionUse<[M1, M2], Handler>\n <\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n M3 extends ActionMiddleware<any>,\n Handler extends ActionHandler<ActionEnv<[M1, M2, M3]>, any>,\n >(\n middleware1: M1,\n middleware2: M2,\n middleware3: M3,\n handler: Handler,\n ): ActionUse<[M1, M2, M3], Handler>\n <\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n M3 extends ActionMiddleware<any>,\n M4 extends ActionMiddleware<any>,\n Handler extends ActionHandler<ActionEnv<[M1, M2, M3, M4]>, any>,\n >(\n middleware1: M1,\n middleware2: M2,\n middleware3: M3,\n middleware4: M4,\n handler: Handler,\n ): ActionUse<[M1, M2, M3, M4], Handler>\n <\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n M3 extends ActionMiddleware<any>,\n M4 extends ActionMiddleware<any>,\n M5 extends ActionMiddleware<any>,\n Handler extends ActionHandler<ActionEnv<[M1, M2, M3, M4, M5]>, any>,\n >(\n middleware1: M1,\n middleware2: M2,\n middleware3: M3,\n middleware4: M4,\n middleware5: M5,\n handler: Handler,\n ): ActionUse<[M1, M2, M3, M4, M5], Handler>\n}\n\ninterface RegisteredAction {\n handler: ActionHandler<any, unknown>\n id: string\n middlewares: ActionMiddleware<any>[]\n}\n\ninterface ActionJsonSuccess {\n ok: true\n value: SerializedValue\n}\n\ninterface ActionJsonFailure {\n error: SerializedValue\n ok: false\n}\n\ninterface ActionStateSnapshot {\n error: unknown\n input: unknown\n result: unknown\n}\n\ninterface ActionExecutionValue {\n input: unknown\n kind: 'value'\n value: unknown\n}\n\ninterface ActionExecutionResponse {\n input: unknown\n kind: 'response'\n response: Response\n}\n\ntype ActionExecutionResult = ActionExecutionResponse | ActionExecutionValue\n\ninterface StreamChunkFrame {\n type: 'chunk'\n value: SerializedValue\n}\n\ninterface StreamDoneFrame {\n type: 'done'\n}\n\ninterface StreamErrorFrame {\n error: SerializedValue\n type: 'error'\n}\n\ntype ActionStreamFrame = StreamChunkFrame | StreamDoneFrame | StreamErrorFrame\n\nconst getActionRegistry = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[ACTION_REGISTRY_KEY]\n if (existing instanceof Map) {\n return existing as Map<string, RegisteredAction>\n }\n const created = new Map<string, RegisteredAction>()\n globalRecord[ACTION_REGISTRY_KEY] = created\n return created\n}\n\nconst isFormDataValue = (value: unknown): value is FormData =>\n typeof FormData !== 'undefined' && value instanceof FormData\n\nconst formDataToInputObject = (value: FormData) => {\n const result: Record<string, FormDataEntryValue | FormDataEntryValue[]> = {}\n for (const [key, entry] of value.entries()) {\n const existing = result[key]\n if (existing === undefined) {\n result[key] = entry\n continue\n }\n result[key] = Array.isArray(existing) ? [...existing, entry] : [existing, entry]\n }\n return result\n}\n\nconst normalizeFormSubmissionInput = (value: unknown) => {\n if (!isFormDataValue(value)) {\n return value\n }\n const normalized = formDataToInputObject(value)\n return Object.fromEntries(\n Object.entries(normalized).flatMap(([key, entry]) => {\n if (key === ACTION_FORM_FIELD) {\n return []\n }\n if (Array.isArray(entry)) {\n const values = entry\n .filter((candidate): candidate is string => typeof candidate === 'string')\n .map((candidate) => candidate)\n return values.length > 0 ? [[key, values.length === 1 ? values[0] : values]] : []\n }\n return typeof entry === 'string' ? [[key, entry]] : []\n }),\n )\n}\n\nconst getActionInputCache = (c: AppContext<any>) => {\n const record = c as AppContext<any> & {\n [ACTION_INPUT_CACHE_KEY]?: Promise<unknown>\n }\n if (!record[ACTION_INPUT_CACHE_KEY]) {\n record[ACTION_INPUT_CACHE_KEY] = (async () => {\n const contentType = c.req.header('content-type') ?? ''\n if (contentType.startsWith(ACTION_CONTENT_TYPE)) {\n let parsedBody: unknown\n try {\n parsedBody = await c.req.json()\n } catch {\n throw new TypeError('Action input must be valid JSON.')\n }\n if (!parsedBody || typeof parsedBody !== 'object' || !('input' in parsedBody)) {\n throw new TypeError('Action request body must contain an input field.')\n }\n return deserializeActionServerValue((parsedBody as { input: SerializedValue }).input)\n }\n if (\n contentType.startsWith('application/x-www-form-urlencoded') ||\n contentType.startsWith('multipart/form-data')\n ) {\n return c.req.formData()\n }\n return undefined\n })()\n }\n return record[ACTION_INPUT_CACHE_KEY]!\n}\n\nconst createActionRefScope = (container: RuntimeContainer | null) =>\n container ? serializePublicValue({ container: container.id }) : undefined\n\nconst readActionRefContainerId = (reference: SerializedReference) => {\n if (!reference.data) {\n return null\n }\n const decoded = deserializePublicValue(reference.data)\n if (!decoded || typeof decoded !== 'object') {\n return null\n }\n const containerId = (decoded as Record<string, unknown>).container\n return typeof containerId === 'string' ? containerId : null\n}\n\nconst serializeActionClientValue = (container: RuntimeContainer | null, value: unknown) =>\n serializePublicValue(value, {\n serializeReference(candidate) {\n const signalId = getRuntimeSignalId(candidate)\n if (signalId) {\n return {\n __eclipsa_type: 'ref',\n data: createActionRefScope(container),\n kind: 'signal',\n token: signalId,\n }\n }\n if (container && typeof Element !== 'undefined' && candidate instanceof Element) {\n return {\n __eclipsa_type: 'ref',\n data: createActionRefScope(container),\n kind: 'dom',\n token: ensureRuntimeElementId(container, candidate),\n }\n }\n return null\n },\n })\n\nconst deserializeActionServerValue = (value: SerializedValue) =>\n deserializePublicValue(value, {\n deserializeReference(reference) {\n const containerId = readActionRefContainerId(reference)\n if (reference.kind === 'signal') {\n return {\n containerId,\n kind: 'signal-ref',\n token: reference.token,\n } satisfies OpaqueSignalRef\n }\n if (reference.kind === 'dom') {\n return {\n containerId,\n kind: 'dom-ref',\n token: reference.token,\n } satisfies OpaqueDomRef\n }\n throw new TypeError(`Unsupported action input reference kind \"${reference.kind}\".`)\n },\n })\n\nconst deserializeActionClientValue = (container: RuntimeContainer | null, value: SerializedValue) =>\n deserializePublicValue(value, {\n deserializeReference(reference) {\n if (!container) {\n throw new TypeError('Action references require an active runtime container.')\n }\n const containerId = readActionRefContainerId(reference)\n if (containerId !== container.id) {\n throw new TypeError('Action reference does not belong to the active runtime container.')\n }\n if (reference.kind === 'signal') {\n const signal = container.signals.get(reference.token)\n if (!signal) {\n throw new Error(`Missing action signal ${reference.token}.`)\n }\n return signal.handle\n }\n if (reference.kind === 'dom') {\n const element = findRuntimeElement(container, reference.token)\n if (!element) {\n throw new Error(`Missing action DOM ref ${reference.token}.`)\n }\n return element\n }\n throw new TypeError(`Unsupported action output reference kind \"${reference.kind}\".`)\n },\n })\n\nconst isOpaqueSignalRef = (value: unknown): value is OpaqueSignalRef =>\n !!value &&\n typeof value === 'object' &&\n (value as Record<string, unknown>).kind === 'signal-ref' &&\n typeof (value as Record<string, unknown>).token === 'string'\n\nconst isOpaqueDomRef = (value: unknown): value is OpaqueDomRef =>\n !!value &&\n typeof value === 'object' &&\n (value as Record<string, unknown>).kind === 'dom-ref' &&\n typeof (value as Record<string, unknown>).token === 'string'\n\nconst serializeActionServerValue = (value: unknown) =>\n serializePublicValue(value, {\n serializeReference(candidate) {\n if (isOpaqueSignalRef(candidate)) {\n return {\n __eclipsa_type: 'ref',\n data:\n candidate.containerId === null\n ? undefined\n : serializePublicValue({\n container: candidate.containerId,\n }),\n kind: 'signal',\n token: candidate.token,\n }\n }\n if (isOpaqueDomRef(candidate)) {\n return {\n __eclipsa_type: 'ref',\n data:\n candidate.containerId === null\n ? undefined\n : serializePublicValue({\n container: candidate.containerId,\n }),\n kind: 'dom',\n token: candidate.token,\n }\n }\n return null\n },\n })\n\nconst isReadableStreamValue = (value: unknown): value is ReadableStream<unknown> =>\n typeof ReadableStream !== 'undefined' && value instanceof ReadableStream\n\nconst isAsyncGeneratorValue = (\n value: unknown,\n): value is AsyncGenerator<unknown, unknown, unknown> | AsyncIterable<unknown> =>\n !!value && typeof value === 'object' && Symbol.asyncIterator in value\n\nconst isAsyncGeneratorFunctionValue = (\n value: unknown,\n): value is (...args: any[]) => AsyncGenerator<unknown, unknown, unknown> =>\n typeof value === 'function' &&\n Object.prototype.toString.call(value) === '[object AsyncGeneratorFunction]'\n\nconst toSerializedActionError = (error: unknown): SerializedValue => {\n if (error instanceof Error) {\n return serializeActionServerValue({\n message: error.message,\n name: error.name,\n })\n }\n try {\n return serializeActionServerValue(error)\n } catch {\n return serializeActionServerValue({\n message: 'Action failed.',\n })\n }\n}\n\nconst toAsyncIterable = async function* (\n value: ReadableStream<unknown> | AsyncIterable<unknown>,\n): AsyncGenerator<unknown, void, void> {\n if (isReadableStreamValue(value)) {\n const reader = value.getReader()\n try {\n while (true) {\n const next = await reader.read()\n if (next.done) {\n return\n }\n yield next.value\n }\n } finally {\n reader.releaseLock()\n }\n }\n yield* value\n}\n\nconst encodeStreamFrame = (frame: ActionStreamFrame) =>\n `${JSON.stringify(frame)}\n`\n\nconst streamActionValue = (\n value: ReadableStream<unknown> | AsyncIterable<unknown>,\n serializeChunk: (value: unknown) => SerializedValue,\n) => {\n const encoder = new TextEncoder()\n\n return new ReadableStream<Uint8Array>({\n async start(controller) {\n try {\n for await (const chunk of toAsyncIterable(value)) {\n controller.enqueue(\n encoder.encode(\n encodeStreamFrame({\n type: 'chunk',\n value: serializeChunk(chunk),\n }),\n ),\n )\n }\n controller.enqueue(\n encoder.encode(\n encodeStreamFrame({\n type: 'done',\n }),\n ),\n )\n } catch (error) {\n controller.enqueue(\n encoder.encode(\n encodeStreamFrame({\n error: toSerializedActionError(error),\n type: 'error',\n }),\n ),\n )\n } finally {\n controller.close()\n }\n },\n })\n}\n\nconst parseJsonActionResponse = async (response: Response, container: RuntimeContainer | null) => {\n const body = (await response.json()) as ActionJsonFailure | ActionJsonSuccess\n if (!body || typeof body !== 'object' || typeof body.ok !== 'boolean') {\n throw new TypeError('Malformed action response.')\n }\n if (!body.ok) {\n throw deserializeActionClientValue(container, body.error)\n }\n return deserializeActionClientValue(container, body.value)\n}\n\nconst iterateStreamFrames = async function* (\n body: ReadableStream<Uint8Array>,\n): AsyncGenerator<ActionStreamFrame, void, void> {\n const reader = body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n try {\n while (true) {\n const next = await reader.read()\n if (next.done) {\n break\n }\n buffer += decoder.decode(next.value, { stream: true })\n while (true) {\n const newlineIndex = buffer.indexOf('\\n')\n if (newlineIndex < 0) {\n break\n }\n const line = buffer.slice(0, newlineIndex).trim()\n buffer = buffer.slice(newlineIndex + 1)\n if (!line) {\n continue\n }\n yield JSON.parse(line) as ActionStreamFrame\n }\n }\n const trailing = buffer.trim()\n if (trailing) {\n yield JSON.parse(trailing) as ActionStreamFrame\n }\n } finally {\n reader.releaseLock()\n }\n}\n\nconst toClientStream = (response: Response, container: RuntimeContainer | null) => {\n if (!response.body) {\n throw new TypeError('Missing action stream body.')\n }\n return new ReadableStream<unknown>({\n async start(controller) {\n try {\n for await (const frame of iterateStreamFrames(response.body!)) {\n if (frame.type === 'chunk') {\n controller.enqueue(deserializeActionClientValue(container, frame.value))\n continue\n }\n if (frame.type === 'done') {\n controller.close()\n return\n }\n controller.error(deserializeActionClientValue(container, frame.error))\n return\n }\n controller.close()\n } catch (error) {\n controller.error(error)\n }\n },\n })\n}\n\nconst toClientAsyncGenerator = async function* (\n response: Response,\n container: RuntimeContainer | null,\n) {\n if (!response.body) {\n throw new TypeError('Missing action stream body.')\n }\n for await (const frame of iterateStreamFrames(response.body)) {\n if (frame.type === 'chunk') {\n yield deserializeActionClientValue(container, frame.value)\n continue\n }\n if (frame.type === 'done') {\n return\n }\n throw deserializeActionClientValue(container, frame.error)\n }\n}\n\nconst invokeAction = async (id: string, input: unknown, container: RuntimeContainer | null) => {\n const isFormSubmission = isFormDataValue(input)\n const response = await fetch(`/__eclipsa/action/${encodeURIComponent(id)}`, {\n body: isFormSubmission\n ? input\n : JSON.stringify({\n input: serializeActionClientValue(container, input),\n }),\n headers: {\n accept: `${ACTION_STREAM_CONTENT_TYPE}, ${ACTION_CONTENT_TYPE}`,\n ...(isFormSubmission ? {} : { 'content-type': ACTION_CONTENT_TYPE }),\n },\n method: 'POST',\n })\n const contentType = response.headers.get('content-type') ?? ''\n const streamKind = response.headers.get('x-eclipsa-stream-kind')\n if (contentType.startsWith(ACTION_STREAM_CONTENT_TYPE)) {\n if (streamKind === 'async-generator') {\n return toClientAsyncGenerator(response, container)\n }\n return toClientStream(response, container)\n }\n return parseJsonActionResponse(response, container)\n}\n\nconst composeMiddlewares = async (\n c: AppContext<any>,\n middlewares: ActionMiddleware<any>[],\n handler: ActionHandler<any, unknown>,\n): Promise<Response | unknown> => {\n let index = -1\n const dispatch = async (nextIndex: number): Promise<Response | unknown> => {\n if (nextIndex <= index) {\n throw new Error('Action middleware called next() multiple times.')\n }\n index = nextIndex\n const middleware = middlewares[nextIndex]\n if (!middleware) {\n return handler(c)\n }\n let nextResult: Response | unknown = undefined\n const result = await middleware(c, (async () => {\n nextResult = await dispatch(nextIndex + 1)\n }) as Next)\n if (result !== undefined) {\n return result\n }\n return nextResult\n }\n return dispatch(0)\n}\n\nconst toActionResponse = (value: unknown): Response => {\n if (value instanceof Response) {\n return value\n }\n if (isReadableStreamValue(value)) {\n return new Response(\n streamActionValue(value, (entry) => serializeActionServerValue(entry)),\n {\n headers: {\n 'content-type': ACTION_STREAM_CONTENT_TYPE,\n 'x-eclipsa-stream-kind': 'readable-stream',\n },\n },\n )\n }\n if (isAsyncGeneratorValue(value)) {\n return new Response(\n streamActionValue(value, (entry) => serializeActionServerValue(entry)),\n {\n headers: {\n 'content-type': ACTION_STREAM_CONTENT_TYPE,\n 'x-eclipsa-stream-kind': 'async-generator',\n },\n },\n )\n }\n return new Response(\n JSON.stringify({\n ok: true,\n value: serializeActionServerValue(value),\n } satisfies ActionJsonSuccess),\n {\n headers: {\n 'content-type': ACTION_CONTENT_TYPE,\n },\n },\n )\n}\n\nconst createHandleSignal = <T>(\n container: RuntimeContainer | null,\n id: string,\n key: string,\n initialValue: T,\n) => {\n if (!container) {\n throw new Error('Action handles require an active runtime container.')\n }\n return createDetachedRuntimeSignal(container, `$action:${id}:${key}`, initialValue)\n}\n\nconst readActionSubmissionInput = async (c: AppContext<any>) => {\n const cached = await getActionInputCache(c)\n const actionVars = c.var as Record<string, unknown>\n return normalizeFormSubmissionInput(actionVars.__e_action_raw_input ?? cached)\n}\n\nexport const getNormalizedActionInput = (c: AppContext<any>) => readActionSubmissionInput(c)\n\nexport const getActionFormSubmissionId = async (c: AppContext<any>) => {\n const input = await getActionInputCache(c)\n if (!isFormDataValue(input)) {\n return null\n }\n const actionId = input.get(ACTION_FORM_FIELD)\n return typeof actionId === 'string' && actionId ? actionId : null\n}\n\nexport const executeActionSubmission = async (\n id: string,\n c: AppContext<any>,\n): Promise<ActionExecutionResult> => {\n const action = getActionRegistry().get(id)\n if (!action) {\n throw new Error(`Unknown action ${id}.`)\n }\n const input = await readActionSubmissionInput(c)\n const result = await composeMiddlewares(c, action.middlewares, action.handler)\n if (result instanceof Response) {\n return {\n input,\n kind: 'response',\n response: result,\n }\n }\n return {\n input,\n kind: 'value',\n value: result,\n }\n}\n\nexport const primeActionState = (\n container: RuntimeContainer,\n id: string,\n snapshot: ActionStateSnapshot,\n) => {\n container.actionStates.set(id, {\n error: snapshot.error,\n input: snapshot.input,\n result: snapshot.result,\n })\n}\n\nconst appendClientChildren = (parent: Element, value: unknown) => {\n let resolved = value\n while (typeof resolved === 'function') {\n resolved = resolved()\n }\n\n if (Array.isArray(resolved)) {\n for (const entry of resolved) {\n appendClientChildren(parent, entry)\n }\n return\n }\n if (resolved === null || resolved === undefined || resolved === false) {\n return\n }\n if (resolved instanceof Node) {\n parent.appendChild(resolved)\n return\n }\n\n parent.appendChild(document.createTextNode(String(resolved)))\n}\n\nconst createActionFormNode = (id: string, props: ActionFormProps) => {\n const form = document.createElement('form')\n form.setAttribute(ACTION_FORM_ATTR, id)\n form.setAttribute('method', 'post')\n\n const hiddenInput = document.createElement('input')\n hiddenInput.name = ACTION_FORM_FIELD\n hiddenInput.type = 'hidden'\n hiddenInput.value = id\n form.appendChild(hiddenInput)\n\n for (const [name, value] of Object.entries(props)) {\n if (\n name === 'children' ||\n name === 'action' ||\n name === 'method' ||\n value === false ||\n value === undefined ||\n value === null\n ) {\n continue\n }\n if (name === 'class') {\n form.className = String(value)\n continue\n }\n if (name === 'style' && value && typeof value === 'object') {\n form.setAttribute(\n 'style',\n Object.entries(value as Record<string, unknown>)\n .map(([styleName, styleValue]) => `${styleName}: ${styleValue}`)\n .join('; '),\n )\n continue\n }\n if (value === true) {\n form.setAttribute(name, '')\n continue\n }\n form.setAttribute(name, String(value))\n }\n\n appendClientChildren(form, props.children)\n return form\n}\n\nexport const action: ActionFactory = (() => {\n throw new Error('action() must be compiled by the Eclipsa analyzer before it can run.')\n}) as ActionFactory\n\nexport const validator = <Schema extends StandardSchemaV1<any, any>>(\n schema: Schema,\n): ActionValidatorMiddleware<\n InferStandardSchemaInput<Schema>,\n InferStandardSchemaOutput<Schema>\n> => {\n const middleware = async (c: any, next: any) => {\n let parsedBody: unknown\n try {\n parsedBody = await getActionInputCache(c)\n } catch (error) {\n return c.json(\n {\n error: serializePublicValue({\n issues: [\n {\n message:\n error instanceof Error && error.message\n ? error.message\n : 'Action input could not be parsed.',\n },\n ],\n }),\n ok: false,\n } satisfies ActionJsonFailure,\n 400,\n )\n }\n const rawInput = normalizeFormSubmissionInput(parsedBody)\n const validated = await schema['~standard'].validate(rawInput)\n if ('issues' in validated) {\n return c.json(\n {\n error: serializePublicValue({\n issues: validated.issues,\n }),\n ok: false,\n } satisfies ActionJsonFailure,\n 400,\n )\n }\n c.set('__e_action_raw_input', rawInput)\n c.set('input', validated.value as InferStandardSchemaOutput<Schema>)\n await next()\n }\n return middleware as ActionValidatorMiddleware<\n InferStandardSchemaInput<Schema>,\n InferStandardSchemaOutput<Schema>\n >\n}\n\nexport function registerAction<Output>(\n id: string,\n middlewares: readonly [],\n handler: ActionHandler<{}, Output>,\n): void\nexport function registerAction<M1 extends ActionMiddleware<any>, Output>(\n id: string,\n middlewares: readonly [M1],\n handler: ActionHandler<ActionEnv<[M1]>, Output>,\n): void\nexport function registerAction<\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2],\n handler: ActionHandler<ActionEnv<[M1, M2]>, Output>,\n): void\nexport function registerAction<\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n M3 extends ActionMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2, M3],\n handler: ActionHandler<ActionEnv<[M1, M2, M3]>, Output>,\n): void\nexport function registerAction<\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n M3 extends ActionMiddleware<any>,\n M4 extends ActionMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2, M3, M4],\n handler: ActionHandler<ActionEnv<[M1, M2, M3, M4]>, Output>,\n): void\nexport function registerAction<\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n M3 extends ActionMiddleware<any>,\n M4 extends ActionMiddleware<any>,\n M5 extends ActionMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2, M3, M4, M5],\n handler: ActionHandler<ActionEnv<[M1, M2, M3, M4, M5]>, Output>,\n): void\nexport function registerAction(\n id: string,\n middlewares: readonly ActionMiddleware<any>[],\n handler: ActionHandler<any, unknown>,\n) {\n getActionRegistry().set(id, {\n handler,\n id,\n middlewares: [...middlewares] as ActionMiddleware<any>[],\n })\n}\n\nexport const hasAction = (id: string) => getActionRegistry().has(id)\n\nexport const executeAction = async (id: string, c: AppContext<any>) => {\n try {\n const result = await executeActionSubmission(id, c)\n return result.kind === 'response' ? result.response : toActionResponse(result.value)\n } catch (error) {\n const publicError = await transformCurrentPublicError(error, 'action')\n return new Response(\n JSON.stringify({\n error: toSerializedActionError(publicError),\n ok: false,\n } satisfies ActionJsonFailure),\n {\n headers: {\n 'content-type': ACTION_CONTENT_TYPE,\n },\n status: 500,\n },\n )\n }\n}\n\nexport const __eclipsaAction = <\n const Middlewares extends readonly ActionMiddleware<any>[],\n Handler extends ActionHandler<ActionEnv<Middlewares>, any>,\n>(\n id: string,\n middlewares: readonly [...Middlewares],\n handler: Handler,\n): ActionUse<Middlewares, Handler> => {\n type Output = ActionHandlerOutput<Handler>\n\n if (typeof window === 'undefined') {\n getActionRegistry().set(id, {\n handler: handler as ActionHandler<any, unknown>,\n id,\n middlewares: [...middlewares] as ActionMiddleware<any>[],\n })\n }\n\n const useActionHandle = registerActionHook(\n id,\n setActionHookMeta(() => {\n const container = getRuntimeContainer()\n const existing = container?.actions.get(id)\n if (existing) {\n return existing as ReturnType<ActionUse<Middlewares, Handler>>\n }\n\n const initialState = container?.actionStates.get(id)\n const pending = createHandleSignal(container, id, 'pending', false)\n const result = createHandleSignal<ActionStreamYield<Output> | undefined>(\n container,\n id,\n 'result',\n initialState?.result as ActionStreamYield<Output> | undefined,\n )\n const error = createHandleSignal<unknown>(container, id, 'error', initialState?.error)\n const lastSubmission = createHandleSignal<\n ActionSubmission<ActionInput<Middlewares>, ActionStreamYield<Output>> | undefined\n >(\n container,\n id,\n 'last-submission',\n initialState\n ? ({\n error: initialState.error,\n input: initialState.input as ActionInput<Middlewares>,\n result: initialState.result as ActionStreamYield<Output> | undefined,\n } satisfies ActionSubmission<ActionInput<Middlewares>, ActionStreamYield<Output>>)\n : undefined,\n )\n\n const syncSnapshot = () => {\n if (!container) {\n return\n }\n const submission = lastSubmission.value\n if (!submission) {\n container.actionStates.delete(id)\n return\n }\n container.actionStates.set(id, {\n error: submission.error,\n input: submission.input,\n result: submission.result,\n })\n }\n\n const flushHandleUpdates = async () => {\n if (!container) {\n return\n }\n await flushDirtyComponents(container)\n }\n\n const applySubmissionChunk = async (\n input: ActionInput<Middlewares>,\n value: ActionStreamYield<Output>,\n ) => {\n result.value = value\n lastSubmission.value = {\n error: undefined,\n input,\n result: value,\n }\n syncSnapshot()\n await flushHandleUpdates()\n }\n\n const applySubmissionError = async (input: ActionInput<Middlewares>, caught: unknown) => {\n error.value = caught\n lastSubmission.value = {\n error: caught,\n input,\n result: result.value,\n }\n syncSnapshot()\n await flushHandleUpdates()\n }\n\n const finalizeSubmission = async () => {\n pending.value = false\n await flushHandleUpdates()\n }\n\n const invoke = (input: ActionInput<Middlewares> | FormData) => {\n pending.value = true\n error.value = undefined\n const normalizedInput = normalizeFormSubmissionInput(input) as ActionInput<Middlewares>\n const request = invokeAction(id, input, container)\n\n if (isAsyncGeneratorFunctionValue(handler)) {\n return (async function* () {\n try {\n const value = await request\n if (isAsyncGeneratorValue(value)) {\n for await (const chunk of value) {\n const resolved = chunk as ActionStreamYield<Output>\n await applySubmissionChunk(normalizedInput, resolved)\n yield resolved\n }\n return\n }\n const resolved = value as ActionStreamYield<Output>\n await applySubmissionChunk(normalizedInput, resolved)\n yield resolved\n } catch (caught) {\n await applySubmissionError(normalizedInput, caught)\n throw caught\n } finally {\n await finalizeSubmission()\n }\n })() as ActionInvokeResult<Output>\n }\n\n return request\n .then(async (value) => {\n const resolved = value as ActionStreamYield<Output>\n await applySubmissionChunk(normalizedInput, resolved)\n return value as ResolvedActionOutput<Output>\n })\n .catch(async (caught) => {\n await applySubmissionError(normalizedInput, caught)\n throw caught\n })\n .finally(finalizeSubmission) as ActionInvokeResult<Output>\n }\n\n const Form = (props: ActionFormProps) => {\n const body =\n typeof document !== 'undefined'\n ? (createActionFormNode(id, props) as unknown as JSX.Element)\n : (() => {\n const nextProps: Record<string, unknown> = {\n ...props,\n [ACTION_FORM_ATTR]: id,\n method: 'post',\n children: [\n {\n isStatic: true,\n props: {\n name: ACTION_FORM_FIELD,\n type: 'hidden',\n value: id,\n },\n type: 'input',\n },\n props.children,\n ],\n }\n delete nextProps.action\n delete nextProps.method\n return {\n isStatic: true,\n props: nextProps,\n type: 'form',\n } satisfies JSX.Element\n })()\n\n return body\n }\n const actionHandle = setActionHandleMeta(\n {\n Form,\n action: invoke as ActionInvoker<ActionInput<Middlewares>, ActionInvokeResult<Output>>,\n get error() {\n return error.value\n },\n get formActionId() {\n return id\n },\n get isPending() {\n return pending.value\n },\n get lastSubmission() {\n return lastSubmission.value\n },\n get result() {\n return result.value\n },\n } satisfies ActionHandle<\n ActionInput<Middlewares>,\n ActionStreamYield<Output>,\n ActionInvokeResult<Output>\n >,\n id,\n )\n container?.actions.set(id, actionHandle)\n syncSnapshot()\n return actionHandle\n }, id),\n ) as ActionUse<Middlewares, Handler>\n\n return useActionHandle\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,MAAM,oCAAoB,IAAI,SAAiB;AAE/C,MAAM,kBAAkB,UACrB,OAAO,UAAU,YAAY,UAAU,QAAS,OAAO,UAAU;AAMpE,MAAa,eAAwD,UAAgB;AACnF,KAAI,eAAe,MAAM,CACvB,mBAAkB,IAAI,MAAgB;AAExC,QAAO;;AAGT,MAAa,iBAAiB,UAC5B,eAAe,MAAM,IAAI,kBAAkB,IAAI,MAAgB;;;ACmCjE,MAAM,oBAAoB;AAC1B,MAAM,sBAAsB;AAE5B,MAAM,gBAAgB,IAAI,IAAI;CAAC;CAAa;CAAe;CAAY,CAAC;AAExE,MAAMA,mBAAiB,UAAqD;AAC1E,KAAI,CAAC,SAAS,OAAO,UAAU,SAC7B,QAAO;CAET,MAAM,QAAQ,OAAO,eAAe,MAAM;AAC1C,QAAO,UAAU,OAAO,aAAa,UAAU;;AAGjD,MAAM,0BAA0B,UAAkB,OAAO,UAAU,SAAS,KAAK,MAAM;AAEvF,MAAM,gCAAgC,UAAkB;CACtD,MAAM,cAAc,MAAM;AAC1B,KAAI,OAAO,gBAAgB,WACzB,QAAO;CAET,MAAM,OAAO,YAAY;AACzB,QAAO,OAAO,SAAS,YAAY,KAAK,SAAS,IAAI,OAAO;;AAG9D,MAAM,gCAAgC,UAAkB;CACtD,MAAM,MAAM,uBAAuB,MAAM;CACzC,MAAM,kBAAkB,6BAA6B,MAAM;CAC3D,MAAM,mBACJ,mBAAmB,oBAAoB,YAAY,oBAAoB,UACnE,kBAAkB,gBAAgB,KAClC;AAEN,wBAAO,IAAI,UACT,sBAAsB,MAAM,iBAAiB,oOAG9C;;AAGH,MAAM,yBAAyB,OAAe,eAAuB;AACnE,KAAI,QAAQ,WACV,OAAM,IAAI,WAAW,wDAAwD,WAAW,GAAG;;AAI/F,MAAM,mBAAmB,OAAe,aAAqB;AAC3D,KAAI,QAAQ,SACV,OAAM,IAAI,WAAW,iDAAiD,SAAS,GAAG;;AAItF,MAAM,oBAAoB,UAAmC;CAC3D,MAAM,cAAc,OAAO,0BAA0B,MAAM;AAE3D,KADmB,OAAO,sBAAsB,MAAM,CACvC,SAAS,EACtB,OAAM,IAAI,UAAU,iDAAiD;AAEvE,MAAK,MAAM,CAAC,KAAK,eAAe,OAAO,QAAQ,YAAY,CACzD,KAAI,SAAS,cAAc,SAAS,WAClC,OAAM,IAAI,UAAU,gDAAgD,IAAI,IAAI;;AAKlF,MAAM,yBAAyB,QAAiC,KAAa,UAAmB;AAC9F,QAAO,eAAe,QAAQ,KAAK;EACjC,cAAc;EACd,YAAY;EACZ;EACA,UAAU;EACX,CAAC;;AAGJ,MAAM,wBAAwB,UAA+B;CAC3D,MAAM,OAAO,OAAO,KAAK,MAAM,CAAC,MAAM;CACtC,MAAM,cACJ,MAAM,SAAS,KAAA,IACX;EAAC;EAAkB;EAAQ;EAAQ,GACnC;EAAC;EAAkB;EAAQ;EAAQ;EAAQ;AACjD,KAAI,KAAK,WAAW,YAAY,UAAU,KAAK,MAAM,KAAK,UAAU,QAAQ,YAAY,OAAO,CAC7F,OAAM,IAAI,UAAU,kCAAkC;AAExD,KAAI,OAAO,MAAM,SAAS,YAAY,MAAM,KAAK,WAAW,EAC1D,OAAM,IAAI,UAAU,kDAAkD;AAExE,KAAI,OAAO,MAAM,UAAU,YAAY,MAAM,MAAM,WAAW,EAC5D,OAAM,IAAI,UAAU,mDAAmD;;AAI3E,MAAM,oBACJ,OACA,OAMA,OACA,UACoB;AACpB,iBAAgB,OAAO,MAAM,SAAS;AAEtC,KAAI,cAAc,MAAM,EAAE;AACxB,QAAM,cAAc;AACpB,wBAAsB,MAAM,YAAY,MAAM,WAAW;AACzD,SAAO,EACL,gBAAgB,aACjB;;CAGH,MAAM,YAAY,MAAM,qBAAqB,MAAM,IAAI;AACvD,KAAI,WAAW;AACb,QAAM,cAAc;AACpB,wBAAsB,MAAM,YAAY,MAAM,WAAW;AACzD,SAAO;;AAGT,KAAI,UAAU,KAAA,GAAW;AACvB,QAAM,cAAc;AACpB,wBAAsB,MAAM,YAAY,MAAM,WAAW;AACzD,SAAO,EACL,gBAAgB,aACjB;;AAEH,KAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,OAAO,UAAU,WAAW;AAC7E,QAAM,cAAc;AACpB,wBAAsB,MAAM,YAAY,MAAM,WAAW;AACzD,SAAO;;AAET,KAAI,OAAO,UAAU,UAAU;AAC7B,MAAI,CAAC,OAAO,SAAS,MAAM,CACzB,OAAM,IAAI,UAAU,2CAA2C;AAEjE,QAAM,cAAc;AACpB,wBAAsB,MAAM,YAAY,MAAM,WAAW;AACzD,SAAO;;AAET,KAAI,OAAO,UAAU,WACnB,OAAM,IAAI,UAAU,kCAAkC;AAExD,KAAI,OAAO,UAAU,SACnB,OAAM,IAAI,UAAU,gCAAgC;AAEtD,KAAI,OAAO,UAAU,SACnB,OAAM,IAAI,UAAU,yBAAyB,OAAO,MAAM,GAAG;AAE/D,KAAI,iBAAiB,QACnB,OAAM,IAAI,UAAU,iCAAiC;AAEvD,KAAI,iBAAiB,WAAW,iBAAiB,QAC/C,OAAM,IAAI,UAAU,yCAAyC;AAE/D,KACE,iBAAiB,QACjB,iBAAiB,UACjB,iBAAiB,OACjB,iBAAiB,SACjB,iBAAiB,eACjB,YAAY,OAAO,MAAM,CAEzB,OAAM,6BAA6B,MAAM;AAE3C,KAAI,MAAM,IAAI,MAAM,CAClB,OAAM,IAAI,UAAU,wCAAwC;AAG9D,OAAM,IAAI,MAAM;AAChB,KAAI;AACF,MAAI,MAAM,QAAQ,MAAM,EAAE;AACxB,QAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,EACjD,KAAI,EAAE,SAAS,OACb,OAAM,IAAI,UAAU,sCAAsC;AAG9D,SAAM,cAAc,MAAM,SAAS;AACnC,yBAAsB,MAAM,YAAY,MAAM,WAAW;AACzD,UAAO,MAAM,KAAK,UAAU,iBAAiB,OAAO,OAAO,OAAO,QAAQ,EAAE,CAAC;;AAE/E,MAAI,iBAAiB,KAAK;AACxB,SAAM,cAAc,MAAM,OAAO,IAAI;AACrC,yBAAsB,MAAM,YAAY,MAAM,WAAW;GACzD,MAAM,UAAgD,EAAE;AACxD,QAAK,MAAM,CAAC,KAAK,UAAU,MAAM,SAAS,CACxC,SAAQ,KAAK,CACX,iBAAiB,KAAK,OAAO,OAAO,QAAQ,EAAE,EAC9C,iBAAiB,OAAO,OAAO,OAAO,QAAQ,EAAE,CACjD,CAAC;AAEJ,UAAO;IACL,gBAAgB;IAChB;IACD;;AAEH,MAAI,iBAAiB,KAAK;AACxB,SAAM,cAAc,MAAM,OAAO;AACjC,yBAAsB,MAAM,YAAY,MAAM,WAAW;AACzD,UAAO;IACL,gBAAgB;IAChB,SAAS,CAAC,GAAG,MAAM,CAAC,KAAK,UAAU,iBAAiB,OAAO,OAAO,OAAO,QAAQ,EAAE,CAAC;IACrF;;AAEH,MAAIA,gBAAc,MAAM,EAAE;AACxB,oBAAiB,MAAM;GACvB,MAAM,cAAc,OAAO,QAAQ,MAAM;AACzC,SAAM,cAAc,YAAY,SAAS;AACzC,yBAAsB,MAAM,YAAY,MAAM,WAAW;AACzD,UAAO;IACL,gBAAgB;IAChB,SAAS,YAAY,KAAK,CAAC,KAAK,WAAW,CACzC,KACA,iBAAiB,OAAO,OAAO,OAAO,QAAQ,EAAE,CACjD,CAAC;IACH;;AAGH,QAAM,6BAA6B,MAAM;WACjC;AACR,QAAM,OAAO,MAAM;;;AAIvB,MAAM,sBACJ,OACA,OAMA,UACY;AACZ,iBAAgB,OAAO,MAAM,SAAS;AAEtC,KACE,UAAU,QACV,OAAO,UAAU,YACjB,OAAO,UAAU,aACjB,OAAO,UAAU,UACjB;AACA,QAAM,cAAc;AACpB,wBAAsB,MAAM,YAAY,MAAM,WAAW;AACzD,SAAO;;AAET,KAAI,MAAM,QAAQ,MAAM,EAAE;AACxB,QAAM,cAAc,MAAM,SAAS;AACnC,wBAAsB,MAAM,YAAY,MAAM,WAAW;AACzD,SAAO,MAAM,KAAK,UAAU,mBAAmB,OAAO,OAAO,QAAQ,EAAE,CAAC;;AAE1E,KAAI,CAAC,SAAS,OAAO,UAAU,YAAY,OAAO,MAAM,mBAAmB,SACzE,OAAM,IAAI,UAAU,8BAA8B;AAGpD,SAAQ,MAAM,gBAAd;EACE,KAAK;AACH,SAAM,cAAc;AACpB,yBAAsB,MAAM,YAAY,MAAM,WAAW;AACzD;EACF,KAAK,UAAU;GACb,MAAM,OAAO,OAAO,KAAK,MAAM,CAAC,MAAM;AACtC,OAAI,KAAK,WAAW,KAAK,KAAK,OAAO,oBAAoB,KAAK,OAAO,UACnE,OAAM,IAAI,UAAU,+BAA+B;AAErD,OAAI,CAAC,MAAM,QAAQ,MAAM,QAAQ,CAC/B,OAAM,IAAI,UAAU,8CAA8C;AAEpE,SAAM,cAAc,MAAM,QAAQ,SAAS;AAC3C,yBAAsB,MAAM,YAAY,MAAM,WAAW;GACzD,MAAM,SAAkC,OAAO,OAAO,KAAK;AAC3D,QAAK,MAAM,SAAS,MAAM,SAAS;AACjC,QAAI,CAAC,MAAM,QAAQ,MAAM,IAAI,MAAM,WAAW,KAAK,OAAO,MAAM,OAAO,SACrE,OAAM,IAAI,UAAU,qCAAqC;IAE3D,MAAM,CAAC,KAAK,SAAS;AACrB,QAAI,cAAc,IAAI,IAAI,EAAE;AAC1B,2BAAsB,QAAQ,KAAK,mBAAmB,OAAO,OAAO,QAAQ,EAAE,CAAC;AAC/E;;AAEF,0BAAsB,QAAQ,KAAK,mBAAmB,OAAO,OAAO,QAAQ,EAAE,CAAC;;AAEjF,UAAO;;EAET,KAAK,OAAO;GACV,MAAM,OAAO,OAAO,KAAK,MAAM,CAAC,MAAM;AACtC,OAAI,KAAK,WAAW,KAAK,KAAK,OAAO,oBAAoB,KAAK,OAAO,UACnE,OAAM,IAAI,UAAU,4BAA4B;AAElD,OAAI,CAAC,MAAM,QAAQ,MAAM,QAAQ,CAC/B,OAAM,IAAI,UAAU,2CAA2C;AAEjE,SAAM,cAAc,MAAM,QAAQ,SAAS,IAAI;AAC/C,yBAAsB,MAAM,YAAY,MAAM,WAAW;GACzD,MAAM,yBAAS,IAAI,KAAuB;AAC1C,QAAK,MAAM,SAAS,MAAM,SAAS;AACjC,QAAI,CAAC,MAAM,QAAQ,MAAM,IAAI,MAAM,WAAW,EAC5C,OAAM,IAAI,UAAU,kCAAkC;AAExD,WAAO,IACL,mBAAmB,MAAM,IAAI,OAAO,QAAQ,EAAE,EAC9C,mBAAmB,MAAM,IAAI,OAAO,QAAQ,EAAE,CAC/C;;AAEH,UAAO;;EAET,KAAK,OAAO;GACV,MAAM,OAAO,OAAO,KAAK,MAAM,CAAC,MAAM;AACtC,OAAI,KAAK,WAAW,KAAK,KAAK,OAAO,oBAAoB,KAAK,OAAO,UACnE,OAAM,IAAI,UAAU,4BAA4B;AAElD,OAAI,CAAC,MAAM,QAAQ,MAAM,QAAQ,CAC/B,OAAM,IAAI,UAAU,2CAA2C;AAEjE,SAAM,cAAc,MAAM,QAAQ,SAAS;AAC3C,yBAAsB,MAAM,YAAY,MAAM,WAAW;AACzD,UAAO,IAAI,IAAI,MAAM,QAAQ,KAAK,UAAU,mBAAmB,OAAO,OAAO,QAAQ,EAAE,CAAC,CAAC;;EAE3F,KAAK;AACH,wBAAqB,MAAM;AAC3B,SAAM,cAAc;AACpB,yBAAsB,MAAM,YAAY,MAAM,WAAW;AACzD,OAAI,CAAC,MAAM,qBACT,OAAM,IAAI,UAAU,sCAAsC,MAAM,KAAK,oBAAoB;AAE3F,UAAO,MAAM,qBAAqB,MAAM;EAC1C,QACE,OAAM,IAAI,UACR,kCAAmC,MAAqC,eAAe,IACxF;;;AAIP,MAAa,kBAAkB,OAAgB,YAC7C,iBACE,OACA;CACE,YAAY;CACZ,UAAU,SAAS,YAAY;CAC/B,YAAY,SAAS,cAAc;CACnC,oBAAoB,SAAS;CAC9B,kBACD,IAAI,KAAa,EACjB,EACD;AAEH,MAAa,oBACX,OACA,YAEA,mBACE,OACA;CACE,sBAAsB,SAAS;CAC/B,YAAY;CACZ,UAAU,SAAS,YAAY;CAC/B,YAAY,SAAS,cAAc;CACpC,EACD,EACD;AAEH,MAAa,wBAAwB,SACnC,KACG,WAAW,KAAK,UAAU,CAC1B,WAAW,KAAK,UAAU,CAC1B,WAAW,KAAK,UAAU,CAC1B,WAAW,UAAU,UAAU,CAC/B,WAAW,UAAU,UAAU;AAEpC,MAAa,0BAA0B,WACrC,OACG,WAAW,KAAK,UAAU,CAC1B,WAAW,KAAK,UAAU,CAC1B,WAAW,UAAU,UAAU,CAC/B,WAAW,UAAU,UAAU;AAEpC,MAAa,8BAA8B,OAAgB,YACzD,qBAAqB,KAAK,UAAU,eAAe,OAAO,QAAQ,CAAC,CAAC;AAEtE,MAAa,uBAAuB,SAAkC;AAEpE,QADe,KAAK,MAAM,KAAK;;;;AChajC,MAAa,uBAAuB;AA+FpC,MAAM,mBAAmB,OAAO,IAAI,uBAAuB;AAQ3D,IAAI,wBAAuE;AAE3E,IAAI,cAA8B,EAAE;AAEpC,MAAM,yBAAyB,OAAO,WAAW,eAAe,OAAO,aAAa;AAIpF,MAAM,wCAA6E;AACjF,KAAI,kBAAkB,IAAI,OAAO,YAAY,YAC3C,QAAO;CAET,MAAM,aACJ,QAGA,mBAAmB,mBAAmB;AAKxC,QAAO,OAAO,YAAY,sBAAsB,aAAa,WAAW,oBAAoB;;AAG9F,MAAM,iCAAiC;CACrC,MAAM,wBAAwB,iCAAiC;AAC/D,KAAI,CAAC,sBACH,QAAO;AAET,2BAA0B,IAAI,uBAA4C;AAC1E,QAAO;;AAGT,MAAMC,mBAAiB,UAAqD;AAC1E,KAAI,CAAC,SAAS,OAAO,UAAU,SAC7B,QAAO;CAET,MAAM,QAAQ,OAAO,eAAe,MAAM;AAC1C,QAAO,UAAU,OAAO,aAAa,UAAU;;AAGjD,MAAM,wBAAwB,UAAgC;AAC5D,KAAI,SAAS,OAAO,UAAU,UAAU;EACtC,MAAM,UAAW,MAAgC;AACjD,MAAI,OAAO,YAAY,YAAY,QAAQ,SAAS,EAClD,QAAO;;AAGX,KAAI,iBAAiB,MACnB,QAAO;EACL,SAAS,MAAM,WAAW;EAC1B,MAAM,MAAM;EACb;AAEH,QAAO,EACL,SAAS,yBACV;;AAGH,MAAM,2BACJ,0BAA0B,EAAE,UAAU,EAAE,aAAa,YAAY;AAEnE,MAAM,+BACJ,OACA,cAC+B;AAC/B,MAAK,MAAM,CAAC,KAAK,SAAS,OAAO,QAAQ,UAAU,EAAE;EACnD,MAAM,UAAU,KAAK,OAAO,MAAM;AAClC,MAAI,YAAY,KAAA,EACd;AAEF,SAAO;GACL,gBAAgB;GAChB,MAAM,eAAe,QAAQ;GAC7B,MAAM;GACN,OAAO;GACR;;AAEH,QAAO;;AAGT,MAAM,iCAAiC,WAAgC,cAAyB;CAC9F,MAAM,OAAO,UAAU,UAAU;AACjC,KAAI,CAAC,KACH,OAAM,IAAI,UAAU,sBAAsB,UAAU,MAAM,IAAI;AAEhE,QAAO,KAAK,OAAO,UAAU,SAAS,KAAA,IAAY,KAAA,IAAY,iBAAiB,UAAU,KAAK,CAAC;;AAGjG,MAAa,wBACX,OACA,YAEA,eAAe,OAAO;CACpB,GAAG;CACH,mBAAmB,WAAW;EAC5B,MAAM,WAAW,SAAS,qBAAqB,UAAU,IAAI;AAC7D,MAAI,SACF,QAAO;EAET,MAAM,YAAY,oBAAoB;AACtC,SAAO,YAAY,4BAA4B,WAAW,UAAU,GAAG;;CAE1E,CAAC;AAEJ,MAAa,0BACX,OACA,YAEA,iBAAiB,OAAO;CACtB,GAAG;CACH,qBAAqB,WAAW;EAC9B,MAAM,WAAW,SAAS,uBAAuB,UAAU;AAC3D,MAAI,aAAa,KAAA,EACf,QAAO;EAET,MAAM,YAAY,oBAAoB;AACtC,MAAI,UAAU,SAAS,eAAe,UACpC,QAAO,8BAA8B,WAAW,UAAU;AAE5D,MAAI,UAAU,SAAS,YACrB,OAAM,IAAI,UAAU,sBAAsB,UAAU,MAAM,IAAI;AAEhE,MAAI,CAAC,SAAS,qBACZ,OAAM,IAAI,UACR,sCAAsC,UAAU,KAAK,oBACtD;AAEH,SAAO,QAAQ,qBAAqB,UAAU;;CAEjD,CAAC;AAEJ,MAAa,4BACX,SACA,OAIA,OACG;CACH,MAAM,UAAU,0BAA0B;AAC1C,KAAI,CAAC,QACH,QAAO,IAAI;AAEb,QAAO,QAAQ,IACb;EACE;EACA,aAAa,MAAM;EACnB,WAAW,MAAM;EAClB,EACD,GACD;;AAGH,MAAa,uCACX,0BAA0B,EAAE,UAAU,EAAE,WAAW;AAErD,MAAa,8BAA8B,OACzC,OACA,UACG;CACH,MAAM,QAAQ,0BAA0B,EAAE,UAAU;AAapD,QAAO,gBAAgB,OAZH,QAChB,MAAM,eACJ,EACE,aAAa,MAAM,aACpB,EACD;EACE,SAAS,MAAM;EACf;EACA;EACD,CACF,GACD,cAAc,MAAM,CACkB;;AAG5C,MAAa,sBACX,SACA,gBACiB;CACjB,MAAM,cAA4B,OAA+B,SAAuB;EACtF,MAAM,UAAU,iBAAiB,UAAU,QAAQ,IAAI,QAAQ,OAAO,KAAK;AAC3E,SAAO,MAAM,QAAQ;;AAGvB,KAAI,CAAC,YACH,QAAO;AAGT,SAAQ,OAAO,OAA+B,SAAuB;AAEnE,SAAO,YAAY,SADH,iBAAiB,UAAU,QAAQ,IAAI,QAAQ,OAAO,KAAK,EACtC,UAAU;;;AAInD,MAAa,sBACX,SACA,cACG;AACH,SAAQ,IAAI,SAAkB,UAAmB;;AAGnD,MAAa,kBACX,SACA,SACA,UACA,YACG;AACH,KAAI,CAAC,QACH,QAAO;CAET,MAAM,MAAM,IAAI,IAAI,UAAU,QAAQ;CACtC,MAAM,WAAW,QAAQ;EAAE;EAAS;EAAK,CAAC;AAC1C,KAAI,CAAC,SACH,QAAO;AAGT,SADgB,oBAAoB,MAAM,WAAW,IAAI,IAAI,OAAO,SAAS,EAAE,IAAI,EACpE;;AAGjB,MAAa,iBAAiB,UAC5B,SACA,OAAO,UAAU,YAChB,MAAuC,qBACxCA,gBAAe,MAAuC,kBAAkB,GAClE,MAAuC,oBACzC,qBAAqB,MAAM;AAEjC,MAAa,mBAAsB,OAAU,gBAAgC;AAC3E,KAAI,CAAC,SAAU,OAAO,UAAU,YAAY,OAAO,UAAU,WAC3D,QAAO;AAET,QAAO,eAAe,OAAuC,kBAAkB;EAC7E,cAAc;EACd,YAAY;EACZ,OAAO;EACP,UAAU;EACX,CAAC;AACF,QAAO;;AAGT,MAAa,iBAAiB,OAC5B,OAGA,UACG;CACH,MAAM,cAAc,MAAM,MAAM,cAAc,MAAM;AACpD,QAAO,cAAc,qBAAqB,YAAY,GAAG,cAAc,MAAM,MAAM;;AAGrF,MAAa,uBAAuB,UAA0B;AAC5D,eAAc;;AAGhB,MAAa,uBAAuB;AAEpC,MAAa,yBAAyB;AACpC,eAAc,EAAE;;;;ACtXlB,MAAM,2BAA2B,OAAO,IAAI,+BAA+B;AAC3E,MAAM,oBAAoB,OAAO,IAAI,wBAAwB;AAY7D,MAAa,aAAa,UACvB,MAAM,YAAY;AAIrB,OAAO,eAAe,UAAU,mBAAmB;CACjD,cAAc;CACd,YAAY;CACZ,OAAO;CACP,UAAU;CACX,CAAC;AAEF,MAAa,4BAA4B,aAAmD;EACzF,2BAA2B;CAC5B;CACD;AAED,MAAa,wBAAwB,UACnC,CAAC,CAAC,SACF,OAAO,UAAU,YAChB,MAA6B,8BAA8B;AAE9D,MAAa,kBAAkB,UAC7B,CAAC,CAAC,SAAS,OAAO,UAAU,cAAe,MAA0B,uBAAuB;;;AC9B9F,MAAM,4BAA4B,OAAO,IAAI,gCAAgC;AAC7E,MAAM,oBAAoB,OAAO,IAAI,wBAAwB;AAC7D,MAAM,uBAAuB,OAAO,IAAI,2BAA2B;AACnE,MAAM,sBAAsB,OAAO,IAAI,0BAA0B;AAqCjE,MAAM,2BAA2B;CAC/B,MAAM,eAAe;CACrB,IAAI,WAAW,aAAa;AAC5B,KAAI,CAAC,UAAU;AACb,6BAAW,IAAI,KAAK;AACpB,eAAa,wBAAwB;;AAEvC,QAAO;;AAGT,MAAM,0BAA0B;CAC9B,MAAM,eAAe;CACrB,MAAM,UAAW,aAAa,wBAA+C,KAAK;AAClF,cAAa,uBAAuB;AACpC,QAAO,MAAM;;AAGf,MAAM,wBAA2B,YAC/B,YACC,OAAO,YAAY,YAAY,OAAO,YAAY,eACnD,qBAAsB,UAChB,QAA8B,sBAAsB,OACtD;AAEN,MAAM,mBAAsB,YAAgD;CAC1E,MAAM,QAAQ,qBAAwB,QAAQ;AAC9C,KAAI,CAAC,MACH,OAAM,IAAI,UAAU,6DAA6D;AAEnF,QAAO;;AAGT,MAAa,0BAA0B,UAA+C;AACpF,KAAI,OAAO,UAAU,WACnB,QAAO;AAET,QACI,MAAkD,8BAElC;;AAItB,MAAM,mBAAsB,IAAY,YAAwB;AAC9D,qBAAoB,CAAC,IAAI,IAAI,QAA4B;;AAG3D,MAAM,uBACJ,IACA,YACA,iBACe;CACf,MAAM,QAAQ,OAAO,IAAI,mBAAmB,KAAK;CACjD,MAAM,aAAa,UACjB,MAAM;AAER,QAAO,eAAe,UAAU,2BAA2B;EACzD,cAAc;EACd,YAAY;EACZ,OAAO;GACL;GACA;GACD;EACD,UAAU;EACX,CAAC;CAEF,MAAM,UAAU,EACd,UACD;AAED,QAAO,eAAe,SAAS,mBAAmB;EAChD,cAAc;EACd,YAAY;EACZ,OAAO;GACL;GACA;GACA;GACA;GACD;EACD,UAAU;EACX,CAAC;AAEF,iBAAgB,IAAI,QAAQ;AAC5B,QAAO;;AAGT,MAAa,iBAAoB,GAAG,SAClC,oBAAoB,mBAAmB,EAAE,KAAK,SAAS,GAAG,KAAK,GAAG;AAEpE,MAAa,8BAA8B,UAAmB;CAC5D,MAAM,QAAQ,qBAAqB,MAAM;AACzC,KAAI,MACF,QAAO;EACL,cAAc,MAAM;EACpB,YAAY,MAAM;EAClB,IAAI,MAAM;EACV,MAAM;EACP;CAGH,MAAM,eAAe,uBAAuB,MAAM;AAClD,KAAI,CAAC,aACH,QAAO;CAGT,MAAM,UAAU,oBAAoB,CAAC,IAAI,aAAa,GAAG;CACzD,MAAM,eAAe,UAAU,gBAAgB,QAAQ,GAAG;AAC1D,QAAO;EACL,cAAc,cAAc;EAC5B,YAAY,cAAc,cAAc;EACxC,IAAI,aAAa;EACjB,MAAM;EACP;;AAGH,MAAM,oCAAuC,EAC3C,cACA,YACA,SACgD;CAChD,MAAM,WAAW,oBAAoB,CAAC,IAAI,GAAG;AAC7C,KAAI,SACF,QAAO;AAET,QAAO,oBAAoB,IAAI,YAAY,aAAa;;AAG1D,MAAa,6BAAgC,eAC3C,iCAAiC,WAAW;AAE9C,MAAa,qCAAwC,eACnD,iCAAiC,WAAW,CAAC;AAE/C,MAAa,cAAiB,YAA2B;AACvD,KAAI,CAAC,2BAA2B,CAC9B,OAAM,IAAI,MAAM,6DAA6D;CAG/E,MAAM,QAAQ,gBAAgB,QAAQ;CACtC,MAAM,WAAW,uBAAuB,MAAM,MAAM;AACpD,KAAI,CAAC,SAAS,OAAO;AACnB,MAAI,MAAM,WACR,QAAO,MAAM;AAEf,QAAM,IAAI,MAAM,2DAA2D;;AAG7E,QAAO,SAAS;;;;AC/LlB,MAAa,2BAA2B;AAkCxC,MAAM,gBAAkC,QAAuB,UAAyB;AACtF,KAAI,CAAC,OACH,QAAO;AAET,KAAI,CAAC,MACH,QAAO;AAET,QAAO,OAAO,YACZ,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,OAAO,KAAK,OAAO,EAAE,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ;EAC7E,MAAM,QAAS,MAAkC;AACjD,SAAO,UAAU,KAAA,IACb,CAAC,CAAC,KAAM,OAAmC,KAAK,CAAC,GACjD,CAAC,CAAC,KAAK,MAAM,CAAC;GAClB,CACH;;AAGH,MAAM,sBAAsB,QAA8B,UAAgC;AACxF,KAAI,CAAC,OACH,QAAO;AAET,KAAI,CAAC,MACH,QAAO;AAGT,QAAO;EACL,WAAW,MAAM,aAAa,OAAO;EACrC,aAAa,MAAM,eAAe,OAAO;EACzC,WAAW,aAAa,OAAO,WAAW,MAAM,UAAU;EAC1D,OAAO,MAAM,SAAS,OAAO;EAC7B,SAAS,aAAa,OAAO,SAAS,MAAM,QAAQ;EACrD;;AAGH,MAAa,wBACX,OACA,QACyB;AACzB,KAAI,CAAC,MACH,QAAO;AAGT,SADiB,OAAO,UAAU,aAAa,MAAM,IAAI,GAAG,UACzC;;AAGrB,MAAa,wBACX,QACA,QAEA,OAAO,QACJ,SAAS,UAAU,mBAAmB,SAAS,qBAAqB,OAAO,IAAI,CAAC,EACjF,KACD;AAEH,MAAa,2BAA2B,aAAkD;AACxF,KAAI,CAAC,SACH,QAAO,EAAE;CAGX,MAAM,WAA0B,EAAE;AAElC,KAAI,SAAS,MACX,UAAS,KACP,OACE,SACA;GACG,2BAA2B;EAC5B,UAAU,SAAS;EACpB,EACD,MACA,MACA,EAAE,CACH,CACF;AAGH,KAAI,SAAS,YACX,UAAS,KACP,OACE,QACA;GACG,2BAA2B;EAC5B,SAAS,SAAS;EAClB,MAAM;EACP,EACD,MACA,MACA,EAAE,CACH,CACF;AAGH,KAAI,SAAS,UACX,UAAS,KACP,OACE,QACA;GACG,2BAA2B;EAC5B,MAAM,SAAS;EACf,KAAK;EACN,EACD,MACA,MACA,EAAE,CACH,CACF;AAGH,KAAI,SAAS,WAAW,MACtB,UAAS,KACP,OACE,QACA;GACG,2BAA2B;EAC5B,SAAS,SAAS,UAAU;EAC5B,UAAU;EACX,EACD,MACA,MACA,EAAE,CACH,CACF;AAEH,KAAI,SAAS,WAAW,YACtB,UAAS,KACP,OACE,QACA;GACG,2BAA2B;EAC5B,SAAS,SAAS,UAAU;EAC5B,UAAU;EACX,EACD,MACA,MACA,EAAE,CACH,CACF;AAEH,KAAI,SAAS,WAAW,KACtB,UAAS,KACP,OACE,QACA;GACG,2BAA2B;EAC5B,SAAS,SAAS,UAAU;EAC5B,UAAU;EACX,EACD,MACA,MACA,EAAE,CACH,CACF;AAEH,KAAI,SAAS,WAAW,IACtB,UAAS,KACP,OACE,QACA;GACG,2BAA2B;EAC5B,SAAS,SAAS,UAAU;EAC5B,UAAU;EACX,EACD,MACA,MACA,EAAE,CACH,CACF;AAEH,MAAK,MAAM,SAAS,SAAS,WAAW,UAAU,EAAE,CAClD,UAAS,KACP,OACE,QACA;GACG,2BAA2B;EAC5B,SAAS;EACT,UAAU;EACX,EACD,OACA,MACA,EAAE,CACH,CACF;AAGH,KAAI,SAAS,SAAS,KACpB,UAAS,KACP,OACE,QACA;GACG,2BAA2B;EAC5B,SAAS,SAAS,QAAQ;EAC1B,MAAM;EACP,EACD,MACA,MACA,EAAE,CACH,CACF;AAEH,KAAI,SAAS,SAAS,MACpB,UAAS,KACP,OACE,QACA;GACG,2BAA2B;EAC5B,SAAS,SAAS,QAAQ;EAC1B,MAAM;EACP,EACD,MACA,MACA,EAAE,CACH,CACF;AAEH,KAAI,SAAS,SAAS,YACpB,UAAS,KACP,OACE,QACA;GACG,2BAA2B;EAC5B,SAAS,SAAS,QAAQ;EAC1B,MAAM;EACP,EACD,MACA,MACA,EAAE,CACH,CACF;AAEH,MAAK,MAAM,SAAS,SAAS,SAAS,UAAU,EAAE,CAChD,UAAS,KACP,OACE,QACA;GACG,2BAA2B;EAC5B,SAAS;EACT,MAAM;EACP,EACD,OACA,MACA,EAAE,CACH,CACF;AAGH,QAAO;;;;;;;;;;;;;;;;AC3QT,MAAM,sBAAsB,OAAO,IAAI,0BAA0B;AACjE,MAAM,sBAAsB;AAC5B,MAAM,2BAA2B,OAAO,IAAI,mCAAmC;AAC/E,MAAM,6BAA6B,OAAO,IAAI,iCAAiC;AA2G/E,MAAM,6BAA6B,cAAgC;CACjE,MAAM,SAAS;CAGf,MAAM,WAAW,OAAO;AACxB,KAAI,oBAAoB,IACtB,QAAO;CAET,MAAM,0BAAU,IAAI,KAAa;AACjC,QAAO,8BAA8B;AACrC,QAAO;;AAGT,MAAa,wBAAwB,WAA6B,OAAe;AAC/E,2BAA0B,UAAU,CAAC,IAAI,GAAG;;AAG9C,MAAa,8BAA8B,cAAgC;CACzE,MAAM,MAAM,CAAC,GAAG,0BAA0B,UAAU,CAAC;AACrD,2BAA0B,UAAU,CAAC,OAAO;AAC5C,QAAO;;AAGT,MAAa,2BAA2B,UAAmB,UAAU;AAErE,MAAM,0BAA0B;CAC9B,MAAM,eAAe;CACrB,MAAM,WAAW,aAAa;AAC9B,KAAI,oBAAoB,IACtB,QAAO;CAET,MAAM,0BAAU,IAAI,KAA+B;AACnD,cAAa,uBAAuB;AACpC,QAAO;;AAGT,MAAMC,uBAAqB,OACzB,GACA,aACA,YACgC;CAChC,IAAI,QAAQ;CACZ,MAAM,WAAW,OAAO,cAAmD;AACzE,MAAI,aAAa,MACf,OAAM,IAAI,MAAM,kDAAkD;AAEpE,UAAQ;EACR,MAAM,aAAa,YAAY;AAC/B,MAAI,CAAC,WACH,QAAO,QAAQ,EAAE;EAEnB,IAAI,aAAiC,KAAA;EACrC,MAAM,SAAS,MAAM,WAAW,IAAI,YAAY;AAC9C,gBAAa,MAAM,SAAS,YAAY,EAAE;KACjC;AACX,MAAI,WAAW,KAAA,EACb,QAAO;AAET,SAAO;;AAET,QAAO,SAAS,EAAE;;AAGpB,MAAM,2BAA2B,UAAoC;AACnE,KAAI,iBAAiB,MACnB,QAAO,qBAAqB;EAC1B,SAAS,MAAM;EACf,MAAM,MAAM;EACb,CAAC;AAEJ,KAAI;AACF,SAAO,qBAAqB,MAAM;SAC5B;AACN,SAAO,qBAAqB,EAC1B,SAAS,kBACV,CAAC;;;AAIN,MAAM,wBAAwB,UAAmB;AAC/C,KAAI,iBAAiB,SACnB,OAAM,IAAI,UAAU,wEAAwE;AAE9F,KAAI,OAAO,mBAAmB,eAAe,iBAAiB,eAC5D,OAAM,IAAI,UAAU,oDAAoD;AAE1E,KAAI,SAAS,OAAO,UAAU,YAAY,OAAO,iBAAiB,MAChE,OAAM,IAAI,UAAU,oDAAoD;AAE1E,QAAO;;AAGT,MAAM,wBACJ,WACA,IACA,aAKG;AACH,YAAW,aAAa,IAAI,IAAI,SAAS;;AAG3C,MAAMC,wBACJ,WACA,IACA,KACA,iBACG;AACH,KAAI,CAAC,UACH,OAAM,IAAI,MAAM,sDAAsD;AAExE,QAAO;EACL,UAAU;EACV,QAAQ,4BAA4B,WAAW,WAAW,GAAG,GAAG,OAAO,aAAa;EACrF;;AAGH,MAAM,0BAA0B,OAAO,aAAuB;CAC5D,MAAM,OAAQ,MAAM,SAAS,MAAM;AACnC,KAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,OAAO,KAAK,OAAO,UAC1D,OAAM,IAAI,UAAU,6BAA6B;AAEnD,KAAI,CAAC,KAAK,GACR,OAAM,uBAAuB,KAAK,MAAM;AAE1C,QAAO,uBAAuB,KAAK,MAAM;;AAG3C,MAAM,eAAe,OAAO,OAAe;AAOzC,QAAO,wBANU,MAAM,MAAM,qBAAqB,mBAAmB,GAAG,IAAI;EAC1E,SAAS,EACP,QAAQ,qBACT;EACD,QAAQ;EACT,CAAC,CACsC;;AAG1C,MAAM,gBAAgB,OAAO,IAAY,MAAuB;CAC9D,MAAM,SAAS,mBAAmB,CAAC,IAAI,GAAG;AAC1C,KAAI,CAAC,OACH,OAAM,IAAI,MAAM,kBAAkB,GAAG,GAAG;AAE1C,QAAO,qBAAqB,MAAMD,qBAAmB,GAAG,OAAO,aAAa,OAAO,QAAQ,CAAC;;AAG9F,MAAa,gBAA+B;AAC1C,OAAM,IAAI,MAAM,uEAAuE;;AAuDzF,SAAgB,eACd,IACA,aACA,SACA;AACA,oBAAmB,CAAC,IAAI,IAAI;EAC1B;EACA;EACA,aAAa,CAAC,GAAG,YAAY;EAC9B,CAAC;;AAGJ,MAAa,aAAa,OAAe,mBAAmB,CAAC,IAAI,GAAG;AAEpE,MAAa,gBAAgB,OAAO,IAAY,MAAuB;AACrE,KAAI;AACF,SAAO,IAAI,SACT,KAAK,UAAU;GACb,IAAI;GACJ,OAAO,qBAAqB,MAAM,cAAc,IAAI,EAAE,CAAC;GACxD,CAA6B,EAC9B,EACE,SAAS,EACP,gBAAgB,qBACjB,EACF,CACF;UACM,OAAO;EACd,MAAM,cAAc,MAAM,4BAA4B,OAAO,SAAS;AACtE,SAAO,IAAI,SACT,KAAK,UAAU;GACb,OAAO,wBAAwB,YAAY;GAC3C,IAAI;GACL,CAA6B,EAC9B;GACE,SAAS,EACP,gBAAgB,qBACjB;GACD,QAAQ,iBAAiB,SAAS,MAAM,QAAQ,WAAW,kBAAkB,GAAG,MAAM;GACvF,CACF;;;AAIL,MAAa,mBAAmB,OAC9B,WACA,IACA,MACG;CACH,MAAM,QAAQ,MAAM,cAAc,IAAI,EAAE;AACxC,sBAAqB,WAAW,IAAI;EAClC,MAAM;EACN,OAAO,KAAA;EACP,QAAQ;EACT,CAAC;AACF,QAAO;;AAGT,MAAa,wBAAwB,OAAO,WAA6B,MAAuB;CAC9F,MAAM,aAAa,2BAA2B,UAAU;AACxD,KAAI,WAAW,WAAW,EACxB,QAAO;AAET,OAAM,QAAQ,IAAI,WAAW,KAAK,OAAO,iBAAiB,WAAW,IAAI,EAAE,CAAC,CAAC;AAC7E,QAAO;;AAGT,MAAa,mBACX,IACA,aACA,YACG;AACH,KAAI,OAAO,WAAW,YACpB,oBAAmB,CAAC,IAAI,IAAI;EACjB;EACT;EACA,aAAa,CAAC,GAAG,YAAY;EAC9B,CAAC;AAmGJ,QAhGwB,mBACtB,IACA,wBAAwB;EACtB,MAAM,YAAY,qBAAqB;EACvC,MAAM,WAAW,WAAW,QAAQ,IAAI,GAAG;AAC3C,MAAI,SACF,QAAO;EAGT,MAAM,eAAe,WAAW,aAAa,IAAI,GAAG;AACpD,MAAI,OAAO,WAAW,eAAe,CAAC,cAAc,QAAQ;AAC1D,OAAI,CAAC,UACH,OAAM,IAAI,MAAM,WAAW,GAAG,iDAAiD;AAEjF,wBAAqB,WAAW,GAAG;AACnC,SAAM;;EAGR,MAAM,eAAeC,qBAAmB,WAAW,IAAI,WAAW,MAAM;EACxE,MAAM,YAAYA,qBAChB,WACA,IACA,QACA,cAAc,SAAU,aAAa,OAAkB,KAAA,EACxD;EACD,MAAM,aAAaA,qBAAmB,WAAW,IAAI,SAAS,cAAc,MAAM;EAClF,MAAM,aAAa,aAAa,YAAY,UAAU,YAAY,WAAW;EAC7E,MAAM,YAAY,aAAa;EAC/B,MAAM,OAAO,UAAU;EACvB,MAAM,QAAQ,WAAW;EACzB,IAAI,SAAS,cAAc,UAAU;EACrC,IAAI,WAAmC;EACvC,IAAI,gBAAgB;EAEpB,MAAM,qBAAqB;AACzB,wBAAqB,aAAa,MAAM,IAAI;IAC1C,MAAM,KAAK;IACX,OAAO,MAAM;IACb;IACD,CAAC;;EAGJ,MAAM,OAAO,YAAY;AACvB,OAAI,SACF,QAAO;AAET,aAAU,QAAQ;AAClB,SAAM,QAAQ,KAAA;AACd,iBAAc;AACd,eAAY,YAAY;AACtB,QAAI;KACF,MAAM,QAAS,MAAM,aAAa,GAAG;AACrC,UAAK,QAAQ;AACb,cAAS;AACT,YAAO;aACA,QAAQ;AACf,WAAM,QAAQ;AACd,WAAM;cACE;AACR,eAAU,QAAQ;AAClB,mBAAc;AACd,gBAAW;;OAEX;AACJ,UAAO;;EAGT,MAAM,eAAe,oBACnB;GACE,IAAI,OAAO;AACT,WAAO,KAAK;;GAEd,IAAI,QAAQ;AACV,WAAO,MAAM;;GAEf,IAAI,YAAY;AACd,WAAO,UAAU;;GAEnB;GACD,EACD,GACD;AACD,aAAW,QAAQ,IAAI,IAAI,aAAa;AACxC,gBAAc;AAEd,MAAI,OAAO,WAAW,eAAe,CAAC,cAAc,CAAC,UAAU,CAAC,eAAe;AAC7E,mBAAgB;AAChB,wBAAqB;AACd,UAAM,CAAC,YAAY,GAAG;KAC3B;;AAGJ,SAAO;IACN,GAAG,CACP;;;;ACjfH,MAAM,qBAAqB,OAAO,IAAI,yBAAyB;AAC/D,MAAM,gBAAgB,OAAO,IAAI,oBAAoB;AACrD,MAAM,oBAAoB,OAAO,IAAI,wBAAwB;AAC7D,MAAM,kBAAkB,OAAO,IAAI,sBAAsB;AACzD,MAAM,uBAAuB,OAAO,IAAI,2BAA2B;AACnE,MAAM,yBAAyB,OAAO,IAAI,6BAA6B;AACvE,MAAM,uBAAuB,OAAO,IAAI,2BAA2B;AACnE,MAAM,yBAAyB,OAAO,IAAI,6BAA6B;AACvE,MAAM,iBAAiB,OAAO,IAAI,qBAAqB;AACvD,MAAM,2BAA2B,OAAO,IAAI,+BAA+B;AAC3E,MAAM,2BAA2B,OAAO,IAAI,+BAA+B;AA0E3E,MAAa,sBACX,WACA,QACA,UACA,iBACA,YACiB;AACjB,QAAO,eAAe,WAAW,oBAAoB;EACnD,cAAc;EACd,YAAY;EACZ,OAAO;GACL;GACA;GACA,GAAI,SAAS,gBAAgB,EAAE,eAAe,MAAM,GAAG,EAAE;GACzD,GAAI,kBAAkB,EAAE,iBAAiB,GAAG,EAAE;GAC/C;EACD,UAAU;EACX,CAAC;AACF,QAAO;;AAGT,MAAa,iBACX,QACA,IACA,aACY;CACZ,MAAM,YAAY,GAAG,SAAwB,GAAG,GAAG,KAAK;AACxD,QAAO,eAAe,SAAS,eAAe;EAC5C,cAAc;EACd,YAAY;EACZ,OAAO;GACL;GACA;GACD;EACD,UAAU;EACX,CAAC;AACF,QAAO;;AAGT,MAAa,kBACX,QACA,IACA,aACM;CACN,MAAM,YAAY,GAAG,SAAwB,GAAG,GAAG,KAAK;AACxD,QAAO,eAAe,SAAS,gBAAgB;EAC7C,cAAc;EACd,YAAY;EACZ,OAAO;GACL;GACA;GACD;EACD,UAAU;EACX,CAAC;AACF,QAAO;;AAGT,MAAa,kBACX,WACA,QACA,cACqB;CACrB;CACA;CACA;CACD;AAED,MAAa,oBAAoB,UAAyC;AACxE,KAAI,OAAO,UAAU,WACnB,QAAO;AAET,QACI,MAAkD,uBAElC;;AAItB,MAAa,eAAe,UAAoC;AAC9D,KAAI,OAAO,UAAU,WACnB,QAAO;AAET,QACI,MAAkD,kBACpD;;AAIJ,MAAa,mBAAuC,WAAiB;AACnE,QAAO,eAAe,QAAQ,mBAAmB;EAC/C,cAAc;EACd,YAAY;EACZ,OAAO,EACL,MAAM,YACP;EACD,UAAU;EACX,CAAC;AACF,QAAO;;AAGT,MAAa,mBAAmB,UAAwC;AACtE,KAAI,OAAO,UAAU,WACnB,QAAO;AAET,QACI,MAAkD,sBAElC;;AAItB,MAAa,qBAAyC,QAAW,OAAkB;AACjF,QAAO,eAAe,QAAQ,sBAAsB;EAClD,cAAc;EACd,YAAY;EACZ,OAAO;GACL;GACA,MAAM;GACP;EACD,UAAU;EACX,CAAC;AACF,QAAO;;AAGT,MAAa,qBAAqB,UAA0C;AAC1E,KAAI,OAAO,UAAU,WACnB,QAAO;AAET,QACI,MAAkD,yBAElC;;AAItB,MAAa,uBAAyC,QAAW,OAAkB;AACjF,QAAO,eAAe,QAAQ,wBAAwB;EACpD,cAAc;EACd,YAAY;EACZ,OAAO;GACL;GACA,MAAM;GACP;EACD,UAAU;EACX,CAAC;AACF,QAAO;;AAGT,MAAa,uBAAuB,UAA4C;AAC9E,KAAI,CAAC,SAAS,OAAO,UAAU,SAC7B,QAAO;AAET,QACI,MAAuC,2BAEvB;;AAItB,MAAa,qBAAyC,QAAW,OAAkB;AACjF,QAAO,eAAe,QAAQ,sBAAsB;EAClD,cAAc;EACd,YAAY;EACZ,OAAO;GACL;GACA,MAAM;GACP;EACD,UAAU;EACX,CAAC;AACF,QAAO;;AAGT,MAAa,qBAAqB,UAA0C;AAC1E,KAAI,OAAO,UAAU,WACnB,QAAO;AAET,QACI,MAAkD,yBAElC;;AAItB,MAAa,uBAAyC,QAAW,OAAkB;AACjF,QAAO,eAAe,QAAQ,wBAAwB;EACpD,cAAc;EACd,YAAY;EACZ,OAAO;GACL;GACA,MAAM;GACP;EACD,UAAU;EACX,CAAC;AACF,QAAO;;AAGT,MAAa,uBAAuB,UAA4C;AAC9E,KAAI,CAAC,SAAS,OAAO,UAAU,SAC7B,QAAO;AAET,QACI,MAAuC,2BAEvB;;AAItB,MAAM,8BAA8B;CAClC,MAAM,eAAe;CACrB,MAAM,WAAW,aAAa;AAC9B,KAAI,oBAAoB,IACtB,QAAO;CAET,MAAM,0BAAU,IAAI,KAAuB;AAC3C,cAAa,4BAA4B;AACzC,QAAO;;AAGT,MAAa,sBAA0C,IAAY,SAAe;AAChF,wBAAuB,CAAC,IAAI,IAAI,KAAK;AACrC,QAAO;;AAGT,MAAa,2BAA+C,OACzD,uBAAuB,CAAC,IAAI,GAAG,IAAsB;AAExD,MAAa,mCAAmC,CAAC,GAAG,uBAAuB,CAAC,MAAM,CAAC;AAEnF,MAAM,8BAA8B;CAClC,MAAM,eAAe;CACrB,MAAM,WAAW,aAAa;AAC9B,KAAI,oBAAoB,IACtB,QAAO;CAET,MAAM,0BAAU,IAAI,KAAuB;AAC3C,cAAa,4BAA4B;AACzC,QAAO;;AAGT,MAAa,sBAA0C,IAAY,SAAe;AAChF,wBAAuB,CAAC,IAAI,IAAI,KAAK;AACrC,QAAO;;AAGT,MAAa,2BAA+C,OACzD,uBAAuB,CAAC,IAAI,GAAG,IAAsB;AAExD,MAAa,mCAAmC,CAAC,GAAG,uBAAuB,CAAC,MAAM,CAAC;AAEnF,MAAa,gBAAgB,UAAqC;AAChE,KAAI,OAAO,UAAU,WACnB,QAAO;AAET,QACI,MAAkD,mBACpD;;AAIJ,MAAa,gBAAgB,UAAsD;AACjF,KAAI,SAAS,OAAO,UAAU,UAAU;EACtC,MAAM,aAAa;AACnB,MAAI,OAAO,WAAW,WAAW,YAAY,OAAO,WAAW,aAAa,WAC1E,QAAO;;AAGX,QAAO,YAAY,MAAM;;AAG3B,MAAa,iBAAoB,QAAsB,SAAsC;AAC3F,QAAO,eAAe,QAAQ,iBAAiB;EAC7C,cAAc;EACd,YAAY;EACZ,OAAO;EACP,UAAU;EACX,CAAC;AACF,QAAO;;AAGT,MAAa,iBAAoB,UAAyC;AACxE,KAAI,CAAC,SAAS,OAAO,UAAU,SAC7B,QAAO;AAET,QACI,MAAuC,oBAAkD;;;;ACvX/F,MAAa,kBAAkB;AAC/B,MAAa,sBAAsB;AACnC,MAAa,4BAA4B;AACzC,MAAa,4BAA4B;AACzC,MAAa,sBAAsB;AACnC,MAAa,2BAA2B;AACxC,MAAa,iCAAiC;AAC9C,MAAa,qBAAqB;;;ACwDlC,MAAM,sBAAsB,OAAO,IAAI,0BAA0B;AACjE,MAAM,0BAA0B,OAAO,IAAI,8BAA8B;AACzE,MAAM,kBAAkB,OAAO,IAAI,sBAAsB;AACzD,MAAM,0BAA0B,OAAO,IAAI,8BAA8B;AACzE,MAAM,kCAAkC,OAAO,IAAI,sCAAsC;AACzF,MAAM,2BAA2B,OAAO,IAAI,+BAA+B;AAC3E,MAAMC,qBAAmB;AACzB,MAAM,yBAAyB,OAAO,IAAI,6BAA6B;AACvE,MAAM,gCAAgC;AACtC,MAAM,+BAA+B;AACrC,MAAM,iCAAiC;AACvC,MAAM,wBAAwB,OAAO,IAAI,4BAA4B;AACrE,MAAM,iCAAiC,OAAO,IAAI,qCAAqC;AACvF,MAAM,sBAAsB,OAAO,IAAI,0BAA0B;AACjE,MAAM,oBAAoB;AAC1B,MAAM,mBAAmB;AACzB,MAAM,uBAAuB,OAAO,IAAI,2BAA2B;AACnE,MAAM,wBAAwB,OAAO,IAAI,4BAA4B;AACrE,MAAa,0BAA0B;AACvC,MAAa,gCAAgC;AAC7C,MAAa,oBAAoB;AACjC,MAAM,oBAAoB;AAC1B,MAAM,4BAA4B;AAClC,MAAM,kBAAkB;AACxB,MAAM,uBAAuB;AAC7B,MAAM,mBAAmB,OAAO,IAAI,+BAA+B;AACnE,MAAM,4BAA4B,OAAO,IAAI,gCAAgC;AAC7E,MAAM,wBAAwB;AAC9B,MAAM,kBAAkB;AACxB,MAAM,mBAAmB;AACzB,MAAM,0BAA0B;AAChC,MAAM,kBAAkB;AACxB,MAAM,oBAAoB;AAC1B,MAAM,kBAAkB;AACxB,MAAM,oBAAoB;AAC1B,MAAM,6BAA6B;AACnC,MAAM,gCAAgC;AACtC,MAAM,gBAAgB;AACtB,MAAM,mBAAmB;AACzB,MAAM,mBAAmB;AAmGzB,MAAM,kBAAkB,UAAsD;CAC5E,MAAM,WAA8C,EAAE;AACtD,KAAI,CAAC,SAAU,OAAO,UAAU,YAAY,OAAO,UAAU,WAC3D,QAAO;AAET,KAAI,mBAAmB,OAAO;EAC5B,MAAM,gBAAiB,MAA8C;AACrE,MAAI,eAAe,YACjB,UAAS,KAAK,cAAc,YAAY;;AAG5C,KAAI,iBAAiB,OAAO;EAC1B,MAAM,cAAe,MAA0C;AAC/D,MAAI,YACF,UAAS,KAAK,YAAY;;AAG9B,UAAS,KAAK,WAAW;AACzB,QAAO;;AAGT,MAAM,iBAAoB,OAAgB,SAAyC;AACjF,MAAK,MAAM,WAAW,eAAe,MAAM,EAAE;EAC3C,MAAM,OAAQ,QAAgD;AAC9D,MAAI,OAAO,SAAS,cAAc,iBAAiB,KACjD,QAAO;;AAGX,QAAO;;AAGT,MAAM,oBAAoB,UACxB,CAAC,CAAC,UACD,OAAO,UAAU,YAAY,OAAO,UAAU,eAC/C,mBAAmB,SACnB,CAAC,CAAE,MAA8C;AAEnD,MAAM,iBAAiB,UACrB,cAAuB,OAAO,UAAU,IAAI,cAA2B,OAAO,cAAc;AAE9F,MAAM,qBAAqB,UACzB,cAA2B,OAAO,cAAc;AAElD,MAAM,0BAA0B,UAC9B,cAAgC,OAAO,mBAAmB;AAE5D,MAAM,2BAA2B,UAC/B,cAAiC,OAAO,oBAAoB;AAE9D,MAAM,6BAA6B,UACjC,cAAmC,OAAO,sBAAsB;AAElE,MAAM,sBAAsB,UAC1B,uBAAuB,MAAM,IAAI,0BAA0B,MAAM;AAEnE,MAAM,2BAA2B,UAC/B,cAAiC,OAAO,oBAAoB;AAE9D,MAAM,yBAAyB,UAC7B,cAA+B,OAAO,kBAAkB;AA8I1D,MAAM,mCAAmC,OAAO,IAAI,2CAA2C;AAC/F,MAAM,oCAAoC,OAAO,IAAI,4CAA4C;AAEjG,MAAM,yCAAyC,UAC7C,iBAAiB,kBAAkB,cAAc,KAAK,MAAM,QAAQ;AAEtE,MAAM,kBAAkB,UACtB,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,UAAU,WAAW,QAAQ,OAAO,MAAM,CAAC;AAE/F,MAAM,8BACJ,UACA,SACG;AACH,KAAI,aAAa,KACf,QAAO;AAET,KAAI,CAAC,YAAY,CAAC,KAChB,QAAO,CAAC,YAAY,CAAC;CAGvB,MAAM,eAAe,OAAO,KAAK,SAAS;CAC1C,MAAM,WAAW,OAAO,KAAK,KAAK;AAClC,KAAI,aAAa,WAAW,SAAS,OACnC,QAAO;AAGT,MAAK,MAAM,OAAO,aAChB,KAAI,CAAC,OAAO,OAAO,MAAM,IAAI,IAAI,CAAC,OAAO,GAAG,SAAS,MAAM,KAAK,KAAK,CACnE,QAAO;AAIX,MAAK,MAAM,aAAa,CAAC,mBAAmB,iBAAiB,EAAW;EACtE,MAAM,cAAc,OAAO,OAAO,UAAU,UAAU;AAEtD,MAAI,gBADY,OAAO,OAAO,MAAM,UAAU,CAE5C,QAAO;AAET,MAAI,eAAe,CAAC,OAAO,GAAG,SAAS,YAAY,KAAK,WAAW,CACjE,QAAO;;AAIX,QAAO;;AAGT,MAAM,oCACJ,OACA,YAKG;CACH,MAAM,YAAY,eAAe,MAAM;AACvC,KAAI,CAAC,sCAAsC,UAAU,CACnD,QAAO;CAGT,MAAM,WAAW,CACf,QAAQ,cAAc,cAAc,QAAQ,YAAY,KAAK,MAC7D,QAAQ,WAAW,WAAW,QAAQ,SAAS,KAAK,KACrD,CACE,OAAO,QAAQ,CACf,KAAK,KAAK;CAEb,MAAM,UAAU,IAAI,MAClB,gCAAgC,QAAQ,QAAQ,WAAW,IAAI,aAAa,GAAG,qPAAqP,UAAU,WAC9U,EAAE,OAAO,WAAW,CACrB;AACD,SAAQ,OAAO;AACf,QAAO;;AAyJT,MAAM,yCAAyB,IAAI,SAA6D;AAChG,MAAM,2CAA2B,IAAI,SAA+B;AACpE,MAAM,oBACJ,SACG,MAAM,KAAM,MAAM,cAAc,EAAE,CAAsC;AAE7E,MAAM,4BAA4B,YAA+B;CAC/D,MAAM,wBAAwB;AAC9B,KAAI,OAAO,sBAAsB,sBAAsB,WACrD,QAAO,sBAAsB,kBAAkB,KAAK,QAAQ;CAG9D,MAAM,aACJ,QAGA;AACF,KAAI,sBAAsB,IACxB,QAAO,CAAC,GAAG,WAAW,MAAM,CAAC;AAE/B,KAAI,cAAc,OAAO,WAAW,WAAW,UAAU;EACvD,MAAM,QAAkB,EAAE;AAC1B,OAAK,IAAI,QAAQ,GAAG,QAAQ,WAAW,QAAQ,SAAS,GAAG;GACzD,MAAM,YAAY,WAAW;AAC7B,OAAI,aAAa,OAAO,cAAc,YAAY,UAAU,WAAW;IACrE,MAAM,OAAO,UAAU;AACvB,QAAI,OAAO,SAAS,SAClB,OAAM,KAAK,KAAK;;;AAItB,SAAO;;AAGT,QAAO,EAAE;;AAGX,MAAM,uBAAuB,SAAkB,SAAiC;CAC9E,MAAM,mBAAmB;AACzB,KAAI,OAAO,iBAAiB,iBAAiB,WAC3C,QAAO,iBAAiB,aAAa,KAAK,SAAS,KAAK;CAG1D,MAAM,mBAAmB;AACzB,KAAI,OAAO,iBAAiB,iBAAiB,WAC3C,QAAO,iBAAiB,aAAa,KAAK,SAAS,KAAK,KAAK;CAG/D,MAAM,aAAc,QAA2D;AAC/E,KAAI,sBAAsB,IACxB,QAAO,WAAW,IAAI,KAAK;AAG7B,QAAO;;AAET,MAAM,yCAAyB,IAAI,SAA0B;AAE7D,MAAM,6BAA6B,cAAgC;CACjE,MAAM,WAAW,uBAAuB,IAAI,UAAU;AACtD,KAAI,SACF,QAAO;CAET,MAAM,0BAAU,IAAI,KAAkC;AACtD,wBAAuB,IAAI,WAAW,QAAQ;AAC9C,QAAO;;AAGT,MAAa,iCACX,WACA,cACG;CACH,MAAM,WAAW,0BAA0B,UAAU;AACrD,MAAK,MAAM,YAAY,WAAW;AAChC,YAAU,QAAQ,OAAO,SAAS;AAClC,WAAS,OAAO,SAAS;;;AAI7B,MAAM,iCAAiC,YACrC,IAAI,IAAI,yBAAyB,QAAQ,CAAC;AAE5C,MAAM,mCAAmC,SAAkB,UAA4B;AACrF,0BAAyB,IAAI,SAAS,IAAI,IAAI,MAAM,CAAC;;AAGvD,MAAM,+BAA+B,YACnC,yBAAyB,IAAI,QAAQ,IAAI;AAE3C,MAAa,gCAAgC,SAAkB,SAAiB;CAC9E,MAAM,WAAW,4BAA4B,QAAQ,oBAAI,IAAI,KAAa;CAC1E,MAAM,eAAe,oBAAoB,SAAS,KAAK;AACvD,KAAI,iBAAiB,KACnB,UAAS,IAAI,KAAK;UACT,iBAAiB,MAC1B,UAAS,OAAO,KAAK;KAErB,UAAS,IAAI,KAAK;AAEpB,iCAAgC,SAAS,SAAS;;AAGpD,MAAa,oCAAoC,SAAkC;AACjF,KAAI,CAAC,KACH;CAGF,MAAM,SAAS,YAAkB;AAC/B,MAAI,cAAc,QAAQ,CACxB,iCAAgC,SAAS,8BAA8B,QAAQ,CAAC;AAElF,OAAK,MAAM,SAAS,iBAAiB,QAAQ,CAC3C,OAAM,MAAM;;AAIhB,OAAM,KAAK;;AAGb,MAAa,qCAAqC,UAA0B;AAC1E,MAAK,MAAM,QAAQ,MACjB,kCAAiC,KAAK;;AAI1C,MAAa,6BACX,QACA,UACG;AACH,KAAI,EAAE,OAAO,YAAY,cAAc,kBAAkB,UAAU,QAAQ,aAAa,GACtF;CAGF,IAAI,QAAQ;AACZ,MAAK,MAAM,SAAS,MAClB,UAAS;AAEX,wBAAuB,IAAI,QAAmB,MAAM;;AAGtD,MAAM,0BAA0B,KAAa,cAAsB;CACjE,MAAM,SAAS,IAAI,IAAI,KAAK,mBAAmB;AAC/C,QAAO,aAAa,IAAI,KAAK,UAAU,UAAU,CAAC;AAClD,QAAO,GAAG,OAAO,WAAW,OAAO,SAAS,OAAO;;AAGrD,MAAM,2BAA2B,QAAgB,qBAAqB,IAAI,KAAK;AAE/E,MAAa,yBACX,WACA,WACA,cACG;AACH,MAAK,MAAM,YAAY,WAAW;EAChC,MAAM,UAAU,UAAU,QAAQ,IAAI,SAAS;AAC/C,MAAI,CAAC,WAAW,CAAC,wBAAwB,QAAQ,CAC/C;AAEF,YAAU,QAAQ,IAAI,UAAU,uBAAuB,SAAS,UAAU,CAAC;;;AAI/E,MAAM,kBAAkB,UACtB,OAAO,UAAU,YAAY,UAAU,QAAQ,UAAU,SAAS,WAAW;AAE/E,MAAM,0BAA8C;CAClD,MAAM,eAAe;CACrB,MAAM,WAAW,aAAa;AAC9B,KAAI,MAAM,QAAQ,SAAS,CACzB,QAAO;CAET,MAAM,UAA8B,EAAE;AACtC,cAAa,uBAAuB;AACpC,QAAO;;AAGT,MAAM,6BAAoD;CACxD,MAAM,eAAe;CACrB,MAAM,WAAW,aAAa;AAC9B,KAAI,MAAM,QAAQ,SAAS,CACzB,QAAO;CAET,MAAM,UAAiC,EAAE;AACzC,cAAa,2BAA2B;AACxC,QAAO;;AAGT,MAAM,sBAAqC;CACzC,MAAM,eAAe;CACrB,MAAM,WAAW,aAAa;AAC9B,KAAI,MAAM,QAAQ,SAAS,CACzB,QAAO;CAET,MAAM,UAAyB,EAAE;AACjC,cAAa,mBAAmB;AAChC,QAAO;;AAGT,MAAM,4BAA4B;CAChC,MAAM,eAAe;CACrB,MAAM,WAAW,aAAa;AAC9B,KAAI,oBAAoB,IACtB,QAAO;CAET,MAAM,0BAAU,IAAI,KAAuB;AAC3C,cAAa,yBAAyB;AACtC,QAAO;;AAGT,MAAM,4BAAqD;CACzD,MAAM,QAAQ,mBAAmB;AACjC,QAAO,MAAM,SAAS,IAAI,MAAM,MAAM,SAAS,KAAK;;AAGtD,MAAM,oCAAoC;CACxC,MAAM,eAAe;CACrB,MAAM,WAAW,aAAa;AAC9B,KAAI,oBAAoB,IACtB,QAAO;CAET,MAAM,0BAAU,IAAI,KAAsB;AAC1C,cAAa,mCAAmC;AAChD,QAAO;;AAGT,MAAa,2BACX,IACA,YAAqC,qBAAqB,KAE1D,WAAW,kBAAkB,IAAI,GAAG,IACpC,WAAW,yBAAyB,IAAI,GAAG,IAC3C,6BAA6B,CAAC,IAAI,GAAG;AAEvC,MAAa,4BACX,IACA,OACA,YAAqC,qBAAqB,KACvD;AACH,YAAW,kBAAkB,IAAI,IAAI,MAAM;AAC3C,YAAW,yBAAyB,IAAI,IAAI,MAAM;AAClD,KAAI,CAAC,UACH,8BAA6B,CAAC,IAAI,IAAI,MAAM;;AAehD,MAAM,wBAA4C;CAChD,MAAM,QAAQ,eAAe;AAC7B,QAAO,MAAM,SAAS,IAAI,MAAM,MAAM,SAAS,KAAK;;AAGtD,MAAa,wCAAwC,cAAuC;CAC1F,MAAM,QAAQ,iBAAiB;AAC/B,KAAI,CAAC,aAAa,CAAC,SAAS,MAAM,cAAc,UAC9C,QAAO;AAET,QAAO,MAAM,gBAAgB;;AAG/B,MAAM,mBAAmB,UAA8B,CAAC,CAAC,SAAS,MAAM,aAAa,SAAS;AAE9F,MAAM,8BAA8B,YAClC,IAAI,kBAAkB,IAAI,WAAW,QAAQ,CAAC;AAEhD,MAAM,sBAAsB,SAAiB,YAC3C,WAAW,2BAA2B,QAAQ,CAAC,OAAO,QAAQ;AAEhE,MAAM,2BAA2B,SAAiB,UAA4B;CAC5E,MAAM,YAAY,OAAO,QAAQ,MAAM,WAAW,CAC/C,QAAQ,GAAG,WAAW,UAAU,SAAS,UAAU,KAAA,KAAa,UAAU,KAAK,CAC/E,KAAK,CAAC,MAAM,WAAY,UAAU,OAAO,OAAO,GAAG,KAAK,IAAI,WAAW,OAAO,MAAM,CAAC,CAAC,GAAI;AAE7F,QAAO,SADO,UAAU,SAAS,IAAI,IAAI,UAAU,KAAK,IAAI,KAAK,GAC3C,GAAG,WAAW,mBAAmB,SAAS,MAAM,QAAQ,CAAC,CAAC;;AAGlF,MAAM,yBACJ,WACA,SACA,UACG;CACH,MAAM,UAAU,kBAAkB,UAAU,KAAM,QAAQ;AAC1D,MAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,MAAM,WAAW,EAAE;AAC5D,MAAI,UAAU,SAAS,UAAU,KAAA,KAAa,UAAU,KACtD;AAEF,MAAI,UAAU,MAAM;AAClB,WAAQ,aAAa,MAAM,GAAG;AAC9B;;AAEF,UAAQ,aAAa,MAAM,OAAO,MAAM,CAAC;;AAE3C,SAAQ,YAAY,UAAU,IAAK,eAAe,mBAAmB,SAAS,MAAM,QAAQ,CAAC,CAAC;AAC9F,QAAO;;AAGT,MAAM,mCAAmC,UACvC,MAAM,aACH,KAAK,UAAU,wBAAwB,MAAM,UAAU,SAAS,MAAM,CAAC,CACvE,KAAK,GAAG;AAEb,MAAM,kCAAkC,OAAoB,cAC1D,MAAM,aAAa,KAAK,UACtB,sBAAsB,WAAW,MAAM,UAAU,SAAS,MAAM,CACjE;AAEH,MAAa,8BACX,SACA,aAAsC,EAAE,KAC/B;CACT,MAAM,QAAQ,iBAAiB;AAC/B,KAAI,CAAC,SAAS,MAAM,UAAU,OAAO,kBACnC,OAAM,IAAI,MAAM,iEAAiE;AAGnF,KAAI,QAAQ,WAAW,EACrB;AAOF,KAJiB,MAAM,aAAa,MACjC,UACC,MAAM,YAAY,WAAW,KAAK,UAAU,MAAM,WAAW,KAAK,KAAK,UAAU,WAAW,CAC/F,CAEC;AAGF,OAAM,aAAa,KAAK;EACtB,YAAY,EAAE,GAAG,YAAY;EAC7B;EACD,CAAC;;AAGJ,MAAM,sBAAsB,aAAqB;CAC/C,MAAM,iBAAiB,SAAS,MAAM,IAAI;CAC1C,MAAM,mBAAmB,eAAe,WAAW,IAAI,GAAG,iBAAiB,IAAI;AAC/E,KAAI,iBAAiB,SAAS,KAAK,iBAAiB,SAAS,IAAI,CAC/D,QAAO,iBAAiB,MAAM,GAAG,GAAG;AAEtC,QAAO;;AAGT,MAAM,qBAAqB,SAAiB,IAAI,IAAI,MAAM,mBAAmB;AAE7E,MAAM,kCAAiD;CACrD,IAAI,OAAO;AACT,SAAO,OAAO,WAAW,cAAc,KAAK,OAAO,SAAS;;CAE9D,IAAI,OAAO;AACT,SAAO,OAAO,WAAW,cAAc,MAAM,OAAO,SAAS;;CAE/D,IAAI,WAAW;AACb,SAAO,OAAO,WAAW,cAAc,MAAM,mBAAmB,OAAO,SAAS,SAAS;;CAE3F,IAAI,SAAS;AACX,SAAO,OAAO,WAAW,cAAc,KAAK,OAAO,SAAS;;CAE/D;AAED,MAAM,wBAAwB,YAAwC;CACpE,IAAI,OAAO;AACT,SAAO,kBAAkB,OAAO,WAAW,MAAM,CAAC;;CAEpD,IAAI,OAAO;AACT,SAAO,OAAO,WAAW;;CAE3B,IAAI,WAAW;AACb,SAAO,mBAAmB,kBAAkB,OAAO,WAAW,MAAM,CAAC,SAAS;;CAEhF,IAAI,SAAS;AACX,SAAO,kBAAkB,OAAO,WAAW,MAAM,CAAC;;CAErD;AAED,MAAM,qBAAqB,OAAO,OAAO,EAAE,CAAC;AAE5C,MAAM,kBAAkB,aAAqB,mBAAmB,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,QAAQ;AAEpG,MAAM,sBACJ,UACA,kBACA,aAAa,GACb,YAAY,GACZ,SAAsB,EAAE,KACD;AACvB,KAAI,cAAc,SAAS,OACzB,QAAO,aAAa,iBAAiB,SAAS,SAAS;CAGzD,MAAM,UAAU,SAAS;AACzB,SAAQ,QAAQ,MAAhB;EACE,KAAK;AACH,OAAI,iBAAiB,eAAe,QAAQ,MAC1C,QAAO;AAET,UAAO,mBAAmB,UAAU,kBAAkB,aAAa,GAAG,YAAY,GAAG,OAAO;EAC9F,KAAK;AACH,OAAI,aAAa,iBAAiB,OAChC,QAAO;AAET,UAAO,mBAAmB,UAAU,kBAAkB,aAAa,GAAG,YAAY,GAAG;IACnF,GAAG;KACF,QAAQ,QAAQ,iBAAiB;IACnC,CAAC;EACJ,KAAK,YAAY;GACf,MAAM,WACJ,YAAY,iBAAiB,SACzB,mBAAmB,UAAU,kBAAkB,aAAa,GAAG,YAAY,GAAG;IAC5E,GAAG;KACF,QAAQ,QAAQ,iBAAiB;IACnC,CAAC,GACF;AACN,OAAI,SACF,QAAO;AAET,UAAO,mBAAmB,UAAU,kBAAkB,aAAa,GAAG,WAAW;IAC/E,GAAG;KACF,QAAQ,QAAQ,KAAA;IAClB,CAAC;;EAEJ,KAAK,QAAQ;GACX,MAAM,OAAO,iBAAiB,MAAM,UAAU;AAC9C,OAAI,KAAK,WAAW,EAClB,QAAO;AAET,UAAO,mBACL,UACA,kBACA,SAAS,QACT,iBAAiB,QACjB;IACE,GAAG;KACF,QAAQ,QAAQ;IAClB,CACF;;;;AAKP,MAAM,sBAAsB,UAAyB,aAAqB;CACxE,MAAM,iBAAiB,mBAAmB,SAAS;CACnD,MAAM,mBAAmB,eAAe,eAAe;AACvD,MAAK,MAAM,SAAS,UAAU;EAC5B,MAAM,SAAS,mBAAmB,MAAM,UAAU,iBAAiB;AACnE,MAAI,OACF,QAAO;GACL;GACA;GACA,UAAU;GACX;;AAGL,QAAO;;AAGT,MAAM,6BAA6B,OAA4B,aAAqB;CAClF,MAAM,mBAAmB,eAAe,SAAS;CACjD,IAAI,QAAQ;AACZ,MACE,IAAI,QAAQ,GACZ,QAAQ,MAAM,SAAS,UAAU,QAAQ,iBAAiB,QAC1D,SAAS,GACT;EACA,MAAM,UAAU,MAAM,SAAS;EAC/B,MAAM,kBAAkB,iBAAiB;AACzC,MAAI,QAAQ,SAAS,UAAU;AAC7B,OAAI,QAAQ,UAAU,gBACpB;AAEF,YAAS;AACT;;AAEF,WAAS,QAAQ,SAAS,SAAS,IAAI;AACvC,MAAI,QAAQ,SAAS,OACnB;;AAGJ,QAAO;;AAGT,MAAM,4BACJ,UACA,UACA,SACG;CACH,MAAM,UAAU,mBAAmB,UAAU,SAAS;AACtD,KAAI,SAAS,MAAM,MACjB,QAAO;CAGT,IAAI,OAA8C;CAClD,IAAI,YAAY;AAChB,MAAK,MAAM,SAAS,UAAU;AAC5B,MAAI,CAAC,MAAM,MACT;EAEF,MAAM,QAAQ,0BAA0B,OAAO,SAAS;AACxD,MAAI,QAAQ,WAAW;AACrB,UAAO;IACL;IACA,QAAQ;IACR,UAAU,mBAAmB,SAAS;IACvC;AACD,eAAY;;;AAGhB,QAAO;;AAGT,MAAM,iBACJ,UACA,UAAsD,WACnD,GAAG,mBAAmB,SAAS,CAAC,IAAI;AAEzC,MAAM,oBAAoB,QAAa,GAAG,mBAAmB,IAAI,SAAS,GAAG,IAAI;AACjF,MAAM,oBAAoB,OAAe,GAAG,WAAW,WAAW;AAElE,IAAI,gBAAuC;AAC3C,IAAI,qBAAyC;AAE7C,MAAM,wBAA2B,OAAmB;CAClD,MAAM,WAAW;AACjB,iBAAgB;AAChB,KAAI;AACF,SAAO,IAAI;WACH;AACR,kBAAgB;;;AAIpB,MAAM,2BAAwC,EAC5C,WAAW,EAAE,EACd;AAED,MAAM,mBAAsB,MAAmB,OAAmB;CAChE,MAAM,WAAW;AACjB,sBAAqB;AACrB,KAAI;AACF,SAAO,IAAI;WACH;AACR,uBAAqB;;;AAIzB,MAAM,sBAAsB,SAAyC;AACnE,KAAI,CAAC,QAAQ,KAAK,UAAU,WAAW,EACrC;CAGF,MAAM,YAAY,CAAC,GAAG,KAAK,UAAU,CAAC,SAAS;AAC/C,MAAK,UAAU,SAAS;CACxB,IAAI,aAAsB;CAC1B,MAAM,WAAW;AACjB,sBAAqB;AAErB,KAAI;AACF,OAAK,MAAM,YAAY,UACrB,KAAI;AACF,wBAAqB,SAAS;WACvB,OAAO;AACd,kBAAe;;WAGX;AACR,uBAAqB;;AAGvB,KAAI,WACF,OAAM;;AAIV,MAAM,+BAA+B,cAA8B;AACjE,oBAAmB,UAAU,wBAAwB;AACrD,WAAU,0BAA0B,mBAAmB;;AAGzD,MAAM,uCAAuC,cAA8B;AACzE,WAAU,qCAAqC,UAAU,kBAAkB;;AAG7E,MAAM,sBAAsB,WAA2B;AACrD,MAAK,MAAM,UAAU,OAAO,QAC1B,QAAO,QAAQ,OAAO,OAAO;AAE/B,QAAO,QAAQ,OAAO;;AAGxB,MAAM,8BAA8B,QAAwB,OAAmB;AAC7E,oBAAmB,OAAO;AAC1B,iBAAgB;AAChB,KAAI;AACF,MAAI;WACI;AACR,kBAAgB;;;AAIpB,MAAM,gCAAmC,OAAmB;CAC1D,MAAM,iBAAiB;AACvB,iBAAgB;AAChB,KAAI;AACF,SAAO,IAAI;WACH;AACR,kBAAgB;;;AAIpB,MAAM,0BAA0B,cAAiC,aAAa,eAAe;AAC3F,MAAK,MAAM,cAAc,cAAc;AACrC,MAAI,OAAO,eAAe,YAAY;AACpC,eAAY;AACZ;;AAGF,MAAI,CADe,cAAc,WAAW,CAE1C,OAAM,IAAI,UAAU,GAAG,WAAW,oDAAoD;AAEnF,aAAW;;;AAIpB,MAAM,oBACJ,QACA,aACA,IACA,iBACG;AACH,oBAAmB,YAAY;AAC/B,KAAI,CAAC,cAAc;AACjB,6BAA2B,cAAc;AACvC,mBAAgB,aAAa,GAAG;IAChC;AACF;;AAEF,4BAA2B,cAAc;AACvC,yBAAuB,aAAa;GACpC;AACF,iBAAgB,aAAa,GAAG;;AAGlC,MAAM,0BAEF,QACA,aACA,IACA,uBAEI;AACJ,kBAAiB,QAAQ,aAAa,IAAI,aAAa;;AAG3D,MAAM,iBAAiB,UAAqD;AAC1E,KAAI,CAAC,SAAS,OAAO,UAAU,SAC7B,QAAO;CAET,MAAM,QAAQ,OAAO,eAAe,MAAM;AAC1C,QAAO,UAAU,OAAO,aAAa,UAAU;;AAGjD,MAAM,oBAAoB,UACxB,cAAc,MAAM,IAAI,MAAM,mBAAmB;AAEnD,MAAM,wBACJ,aACA,MACA,YACA,YACyB;CACzB,gBAAgB;CAChB;CACA;CACA;CACA;CACD;AAED,MAAM,4BAA4B,UAAkB,mBAAmB,MAAM;AAC7E,MAAM,4BAA4B,UAAkB,mBAAmB,MAAM;AAC7E,MAAM,yBAAyB,UAAoC,mBAAmB,OAAO,MAAM,CAAC;AACpG,MAAM,yBAAyB,UAAkB;AAC/C,KAAI;AACF,SAAO,mBAAmB,MAAM;SAC1B;AACN,SAAO;;;AAIX,MAAM,8BACJ,aACA,MACA,YACA,SACG,QAAQ,YAAY,GAAG,yBAAyB,KAAK,CAAC,GAAG,WAAW,GAAG;AAC5E,MAAM,0BAA0B,OAAiC,SAC/D,QAAQ,sBAAsB,MAAM,CAAC,GAAG;AAE1C,MAAM,kCAAkC;AACxC,MAAM,sBAAsB;AAC5B,MAAM,2BAA2B;AACjC,MAAM,+BAA+B;AAErC,MAAM,gCAAgC,UAAkB;CACtD,MAAM,UAAU,MAAM,MAAM,gCAAgC;AAC5D,KAAI,CAAC,QACH,QAAO;AAET,QAAO;EACL,IAAI,QAAQ;EACZ,MAAM,QAAQ;EACf;;AAGH,MAAM,6BAA6B,UAAkB;CACnD,MAAM,UAAU,MAAM,MAAM,6BAA6B;AACzD,KAAI,CAAC,QACH,QAAO;AAET,QAAO;EACL,aAAa,QAAQ;EACrB,MAAM,QAAQ;EACd,KAAK,GAAG,QAAQ,GAAG,GAAG,QAAQ,GAAG,GAAG,QAAQ;EAC5C,MAAM,yBAAyB,QAAQ,GAAG;EAC1C,YAAY,OAAO,QAAQ,GAAG;EAC/B;;AAGH,MAAM,yBAAyB,UAAkB;CAC/C,MAAM,UAAU,MAAM,MAAM,yBAAyB;AACrD,KAAI,CAAC,QACH,QAAO;AAET,QAAO;EACL,KAAK,sBAAsB,QAAQ,GAAI;EACvC,MAAM,QAAQ;EACf;;AAGH,MAAM,qBAAqB,UAAkB;CAC3C,MAAM,UAAU,MAAM,MAAM,oBAAoB;AAChD,KAAI,CAAC,QACH,QAAO;AAET,QAAO,EACL,KAAK,QAAQ,IACd;;AAGH,MAAM,6BAA6B,UAAkD;AACnF,KAAI,OAAO,UAAU,WACnB,QAAO;AAET,QACI,MAAkD,8BAElC;;AAItB,MAAM,yCACJ,WACA,QACA,YACG;CACH,MAAM,YAAY,qBACd,UAAmB;EACnB,MAAM,SAAS,0BAA0B,UAAU,CAAC,IAAI,OAAO;AAC/D,MAAI,CAAC,OACH,OAAM,IAAI,MAAM,6CAA6C,OAAO,GAAG;AAEzE,SAAO,OAAO,QAAQ,iBAAiB,WAAW,QAAQ,EAAE,MAAM;KAEpE,cACM,iBAAiB,WAAW,QAAQ,CAC3C;AACD,QAAO,eAAe,WAAW,2BAA2B;EAC1D,cAAc;EACd,YAAY;EACZ,OAAO;GACL;GACA;GACD;EACD,UAAU;EACX,CAAC;AACF,QAAO;;AAGT,MAAM,kCACJ,WACA,UACwB;AACxB,KAAI,OAAO,MAAM,SAAS,cAAc,CAAC,iBAAiB,MAAM,KAAK,EAAE;EACrE,MAAM,WAAW,kBAAmB,MAAM,KAAmB,MAAM,MAAM,CAAC;AAC1E,MAAI,CAAC,eAAe,SAAS,CAC3B,OAAM,IAAI,UAAU,6DAA6D;AAEnF,SAAO,+BAA+B,WAAW,SAAS;;CAG5D,MAAM,iBAAiB,cAAc,MAAM,MAAM;CACjD,MAAM,MAAM,MAAM,OAAO;CACzB,MAAM,WAAW,MAAM,YAAY;AAEnC,KAAI,OAAO,MAAM,SAAS,SACxB,QAAO;EACL,gBAAgB;EAChB,MAAM;GACJ;GACA,MAAM;GACN;GACA,sBAAsB,WAAW,eAAe;GAChD,sBAAsB,WAAW,IAAI;GACrC,MAAM;GACN,sBAAsB,WAAW,SAAS;GAC3C;EACD,MAAM;EACN,OAAO;EACR;CAGH,MAAM,OAAO,iBAAiB,MAAM,KAAK;AACzC,KAAI,CAAC,KACH,OAAM,IAAI,UAAU,6DAA6D;AAGnF,QAAO;EACL,gBAAgB;EAChB,MAAM;GACJ;GACA,KAAK;GACL,cAAc,WAAW,KAAK,UAAU,CAAC;GACzC,sBAAsB,WAAW,eAAe;GAChD,sBAAsB,WAAW,IAAI;GACrC,MAAM;GACN,sBAAsB,WAAW,SAAS;GAC3C;EACD,MAAM;EACN,OAAO;EACR;;AAGH,MAAM,oCACJ,WACA,SACiB;AACjB,KAAI,CAAC,MAAM,QAAQ,KAAK,IAAI,KAAK,WAAW,EAC1C,OAAM,IAAI,UAAU,kDAAkD;CAGxE,MAAM,CAAC,SAAS,WAAW,YAAY,YAAY,UAAU,eAAe,iBAAiB;AAC7F,KAAI,YAAY,aAAa,YAAY,YACvC,OAAM,IAAI,UAAU,yCAAyC,OAAO,QAAQ,CAAC,IAAI;AAEnF,KAAI,OAAO,kBAAkB,UAC3B,OAAM,IAAI,UAAU,mDAAmD;CAGzE,MAAM,QAAQ,wBAAwB,WAAW,WAA8B;CAC/E,MAAM,MAAM,wBAAwB,WAAW,SAA4B;CAC3E,MAAM,WAAW,wBAAwB,WAAW,cAAiC;AAErF,KAAI,CAAC,SAAS,OAAO,UAAU,SAC7B,OAAM,IAAI,UAAU,0CAA0C;AAGhE,KAAI,YAAY,WAAW;AACzB,MAAI,OAAO,cAAc,SACvB,OAAM,IAAI,UAAU,uDAAuD;AAE7E,SAAO;GACL,UAAU;GACV,KAAM,OAAO,KAAA;GACb,UAAW,YAAY,KAAA;GAChB;GACP,MAAM;GACP;;AAGH,KAAI,OAAO,cAAc,YAAY,OAAO,eAAe,SACzD,OAAM,IAAI,UAAU,gEAAgE;AAGtF,QAAO;EACL,UAAU;EACV,KAAM,OAAO,KAAA;EACb,UAAW,YAAY,KAAA;EAChB;EACP,MAAM,sCAAsC,WAAW,WAAW,WAAW;EAC9E;;AAGH,MAAM,wBAAwB,OAC5B,WACA,OACA,uBAAO,IAAI,KAAc,KACP;AAClB,KAAI,UAAU,QAAQ,UAAU,KAAA,KAAa,UAAU,MACrD;AAEF,KAAI,KAAK,IAAI,MAAM,CACjB;AAEF,KAAI,OAAO,UAAU,YAAY;EAC/B,MAAM,qBAAqB,0BAA0B,MAAM;AAC3D,MAAI,CAAC,mBACH;AAEF,OAAK,IAAI,MAAM;AACf,QAAM,WAAW,WAAW,mBAAmB,OAAO;AACtD,OAAK,MAAM,iBAAiB,iBAAiB,WAAW,mBAAmB,QAAQ,CACjF,OAAM,sBAAsB,WAAW,eAAe,KAAK;AAE7D;;AAEF,KAAI,MAAM,QAAQ,MAAM,EAAE;AACxB,OAAK,IAAI,MAAM;AACf,OAAK,MAAM,SAAS,MAClB,OAAM,sBAAsB,WAAW,OAAO,KAAK;AAErD;;AAEF,KAAI,OAAO,SAAS,eAAe,iBAAiB,KAClD;AAEF,KAAI,iBAAiB,MAAM,CACzB;AAEF,KAAI,eAAe,MAAM,EAAE;AACzB,OAAK,IAAI,MAAM;AACf,QAAM,sBAAsB,WAAW,MAAM,MAAM,KAAK;AACxD,QAAM,sBAAsB,WAAW,cAAc,MAAM,MAAM,EAAE,KAAK;AACxE;;AAEF,KAAI,CAAC,cAAc,MAAM,CACvB;AAGF,MAAK,IAAI,MAAM;AACf,MAAK,MAAM,SAAS,OAAO,OAAO,MAAM,CACtC,OAAM,sBAAsB,WAAW,OAAO,KAAK;;AAIvD,MAAM,yBAAyB,WAA6B,UAC1D,qBAAqB,OAAO,EAC1B,mBAAmB,WAAW;CAC5B,MAAM,aAAa,cAAc,UAAU;AAC3C,KAAI,WACF,QAAO;EACL,gBAAgB;EAChB,MAAM;EACN,OAAO,WAAW;EACnB;AAEH,KAAI,gBAAgB,UAAU,CAC5B,QAAO;EACL,gBAAgB;EAChB,MAAM;EACN,OAAO;EACR;CAEH,MAAM,aAAa,oBAAoB,UAAU;AACjD,KAAI,WACF,QAAO;EACL,gBAAgB;EAChB,MAAM;EACN,OAAO,WAAW;EACnB;CAEH,MAAM,iBAAiB,kBAAkB,UAAU;AACnD,KAAI,eACF,QAAO;EACL,gBAAgB;EAChB,MAAM;EACN,OAAO,eAAe;EACvB;CAEH,MAAM,aAAa,oBAAoB,UAAU;AACjD,KAAI,WACF,QAAO;EACL,gBAAgB;EAChB,MAAM;EACN,OAAO,WAAW;EACnB;CAEH,MAAM,iBAAiB,kBAAkB,UAAU;AACnD,KAAI,eACF,QAAO;EACL,gBAAgB;EAChB,MAAM;EACN,OAAO,eAAe;EACvB;CAEH,MAAM,mBAAmB,2BAA2B,UAAU;AAC9D,KAAI,iBACF,QAAO;EACL,gBAAgB;EAChB,MAAM,sBAAsB,WAAW;GACrC,cAAc,iBAAiB;GAC/B,YAAY,iBAAiB;GAC9B,CAAC;EACF,MAAM,iBAAiB;EACvB,OAAO,iBAAiB;EACzB;AAEH,KAAI,YAAY,UAAU,CACxB,QAAO;EACL,gBAAgB;EAChB,MAAM,qBAAqB,UAAU,iBAAiB;EACtD,MAAM;EACN,OAAO,UAAU;EAClB;AAEH,KAAI,iBAAiB,UAAU,CAC7B,QAAO;EACL,gBAAgB;EAChB,MAAM,sBAAsB,WAAW,UAAU,OAAO;EACxD,MAAM;EACN,OAAO,KAAK,UAAU;GAAC,UAAU;GAAa,UAAU;GAAM,UAAU;GAAW,CAAC;EACrF;AAEH,KAAI,eAAe,UAAU,CAC3B,QAAO,+BAA+B,WAAW,UAAU;CAE7D,MAAM,WAAW,YAAY,UAAU;AACvC,KAAI,SACF,QAAO;EACL,gBAAgB;EAChB,MAAM,SAAS,UAAU,CAAC,KAAK,UAAU,sBAAsB,WAAW,MAAM,CAAC;EACjF,MAAM;EACN,OAAO,SAAS;EACjB;AAEH,KAAI,cAAc,UAAU,CAC1B,QAAO;EACL,gBAAgB;EAChB,MAAM;EACN,OAAO,uBAAuB,WAAW,UAAU;EACpD;AAEH,QAAO;GAEV,CAAC;AAEJ,MAAM,2BAA2B,WAA6B,UAC5D,uBAAuB,OAAO,EAC5B,qBAAqB,WAAW;AAC9B,KAAI,UAAU,SAAS,WACrB,QAAO,kBAAkB,UAAU,CAAC;AAEtC,KAAI,UAAU,SAAS,UAAU;EAC/B,MAAM,SAAS,UAAU,QAAQ,IAAI,UAAU,MAAM;AACrD,MAAI,CAAC,OACH,OAAM,IAAI,MAAM,yBAAyB,UAAU,MAAM,GAAG;AAE9D,SAAO;;AAET,KAAI,UAAU,SAAS,eAAe;EACpC,MAAM,aAAa,wBAAwB,UAAU,MAAM;AAC3D,MAAI,CAAC,WACH,OAAM,IAAI,MAAM,uBAAuB,UAAU,MAAM,GAAG;AAE5D,SAAO;;AAET,KAAI,UAAU,SAAS,UAAU;EAC/B,MAAM,SAAS,UAAU,QAAQ,IAAI,UAAU,MAAM;AACrD,MAAI,CAAC,OACH,OAAM,IAAI,MAAM,yBAAyB,UAAU,MAAM,GAAG;AAE9D,SAAO;;AAET,KAAI,UAAU,SAAS,eAAe;EACpC,MAAM,aAAa,wBAAwB,UAAU,MAAM;AAC3D,MAAI,CAAC,WACH,OAAM,IAAI,MAAM,uBAAuB,UAAU,MAAM,GAAG;AAE5D,SAAO;;AAET,KAAI,UAAU,SAAS,aAAa,UAAU,SAAS,oBAAoB;EACzE,MAAM,UACJ,UAAU,SAAS,KAAA,IACf,OACC,wBAAwB,WAAW,UAAU,KAAwB;EAI5E,MAAM,aAAa,SAAS,eAAe;EAE3C,MAAM,aAAa;GACjB,cAFmB,aAAa,SAAS,eAAe,KAAA;GAGxD;GACA,IAAI,UAAU;GACf;AACD,SAAO,UAAU,SAAS,YACtB,0BAA0B,WAAW,GACrC,kCAAkC,WAAW;;AAEnD,KAAI,UAAU,SAAS,cAAc;EACnC,MAAM,mBACJ,UAAU,SAAS,KAAA,IAAY,IAAI,uBAAuB,UAAU,KAAK;AAC3E,MAAI,OAAO,qBAAqB,YAAY,CAAC,OAAO,UAAU,iBAAiB,CAC7E,OAAM,IAAI,UAAU,+DAA+D;AAErF,SAAO;GACL,gBAAgB;GAChB,UAAU,UAAU;GACpB;GACD;;AAEH,KAAI,UAAU,SAAS,sBAAsB;EAC3C,IAAI,cAAc;EAClB,IAAI,OAAO;EACX,IAAI,aAAa;AACjB,MAAI;GACF,MAAM,SAAS,KAAK,MAAM,UAAU,MAAM;AAC1C,OACE,CAAC,MAAM,QAAQ,OAAO,IACtB,OAAO,WAAW,KAClB,OAAO,OAAO,OAAO,YACrB,OAAO,OAAO,OAAO,YACrB,OAAO,OAAO,OAAO,SAErB,OAAM,IAAI,MAAM,gCAAgC;AAElD,iBAAc,OAAO;AACrB,UAAO,OAAO;AACd,gBAAa,OAAO;UACd;AACN,SAAM,IAAI,UACR,2EACD;;AAEH,SAAO,qBACL,aACA,MACA,YACA,wBAAwB,WAAW,UAAU,KAAwB,CACtE;;AAEH,KAAI,UAAU,SAAS,UAAU;EAC/B,MAAM,SAAS,UAAU,QAAQ,IAAI,UAAU,MAAM;AACrD,MAAI,CAAC,OACH,OAAM,IAAI,MAAM,kBAAkB,UAAU,MAAM,GAAG;AAEvD,SAAO,OAAO;;AAEhB,KAAI,UAAU,SAAS,UAAU;AAC/B,MAAI,CAAC,UAAU,QAAQ,CAAC,MAAM,QAAQ,UAAU,KAAK,CACnD,OAAM,IAAI,UAAU,oDAAoD;EAE1E,MAAM,UAAU,wBAAwB,WAAW,UAAU,KAAK;AAClE,SAAO,2BAA2B,WAAW,UAAU,OAAO,QAAQ;;AAExE,KAAI,UAAU,SAAS,sBACrB,QAAO,iCAAiC,WAAW,UAAU,KAAK;AAEpE,KAAI,UAAU,SAAS,OAAO;EAC5B,MAAM,UAAU,mBAAmB,WAAW,UAAU,MAAM;AAC9D,MAAI,CAAC,QACH,OAAM,IAAI,MAAM,yBAAyB,UAAU,MAAM,GAAG;AAE9D,SAAO;;AAET,OAAM,IAAI,UAAU,uCAAuC,UAAU,KAAK,IAAI;GAEjF,CAAC;AAEJ,MAAM,qBAAqB,KAAuB,WAAmB;CACnE,IAAI,SAAS;AACb,MAAK,MAAM,MAAM,KAAK;AACpB,MAAI,CAAC,GAAG,WAAW,OAAO,CACxB;EAEF,MAAM,SAAS,GAAG,MAAM,OAAO,OAAO;AACtC,MAAI,CAAC,QAAQ,KAAK,OAAO,CACvB;AAEF,WAAS,KAAK,IAAI,QAAQ,OAAO,OAAO,GAAG,EAAE;;AAE/C,QAAO;;AAGT,MAAM,kBAAkB,UAAmB,cAAc,MAAM,EAAE,MAAM;AAEvE,MAAM,uBAAuB,UAAmB,cAAc,MAAM,EAAE,MAAM;AAE5E,MAAa,wBAAwB,SAAkB,UAAmB;CACxE,MAAM,WAAW,eAAe,MAAM;AACtC,KAAI,UAAU;AACZ,UAAQ,aAAa,iBAAiB,SAAS;AAC/C,+BAA6B,SAAS,gBAAgB;AACtD;;AAEF,SAAQ,gBAAgB,gBAAgB;AACxC,8BAA6B,SAAS,gBAAgB;;AAGxD,MAAM,2BAA2B,UAAmB;AAClD,KAAI,CAAC,SAAU,OAAO,UAAU,YAAY,OAAO,UAAU,cAAe,EAAE,WAAW,OACvF;AAEF,QAAQ,MAA6B;;AAGvC,MAAa,oBACX,OACA,SACA,YAAqC,qBAAqB,KACvD;CACH,MAAM,aAAa,cAAmC,MAAM;AAC5D,KAAI,CAAC,WACH,QAAO;CAGT,MAAM,SAAS,WAAW,QAAQ,IAAI,WAAW,GAAG;AACpD,KAAI,QAAQ;AACV,mBAAiB,WAAW,QAAQ,QAAQ;AAC5C,SAAO;;AAGT,YAAW,IAAI,QAAQ;AACvB,QAAO;;AAGT,MAAa,qBAAqB,WAA6B,SAAqB;CAClF,MAAM,iBAAiB,YAAqB;EAC1C,MAAM,WAAW,QAAQ,aAAa,gBAAgB;AACtD,MAAI,CAAC,SACH;EAEF,MAAM,SAAS,UAAU,QAAQ,IAAI,SAAS;AAC9C,MAAI,CAAC,OACH;AAEF,mBAAiB,WAAW,QAAQ,QAAQ;;AAG9C,KAAI,cAAc,KAAK,IAAI,KAAK,aAAa,gBAAgB,CAC3D,eAAc,KAAK;CAGrB,MAAM,oBAAoB,SAAqB;AAC7C,OAAK,MAAM,SAAS,iBAAiB,KAAK,EAAE;AAC1C,OAAI,CAAC,cAAc,MAAM,CACvB;AAEF,OAAI,MAAM,aAAa,gBAAgB,CACrC,eAAc,MAAM;AAEtB,oBAAiB,MAAM;;;AAI3B,kBAAiB,KAAK;;AAGxB,MAAM,iBAAiB,UAA4D;CACjF,MAAM,SAAkC,EAAE;AAC1C,MAAK,MAAM,CAAC,KAAK,eAAe,OAAO,QAAQ,OAAO,0BAA0B,MAAM,CAAC,CACrF,KAAI,WAAW,IACb,QAAO,OAAO,WAAW,IAAI,KAAK,MAAM;KAExC,QAAO,OAAO,WAAW;AAG7B,QAAO;;AAGT,MAAM,0BAA0B,OAAgC,SAC9D,OAAO,UAAU,eAAe,KAAK,OAAO,KAAK;AAEnD,MAAM,mCAAmC,UAA4B;AACnE,KAAI,UAAU,QAAQ,UAAU,KAAA,KAAa,UAAU,MACrD,QAAO;AAET,KAAI,iBAAiB,MAAM,CACzB,QAAO;AAET,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,MAAM,MAAM,UAAU,gCAAgC,MAAM,CAAC;AAEtE,KAAI,OAAO,UAAU,WACnB,QAAO;AAET,QAAO,OAAO,UAAU;;AAG1B,MAAM,mCAAmC,UAA4B;AACnE,KAAI,UAAU,QAAQ,UAAU,KAAA,KAAa,UAAU,MACrD,QAAO;AAET,KAAI,iBAAiB,MAAM,IAAI,YAAY,MAAM,CAC/C,QAAO;AAET,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,MAAM,MAAM,UAAU,gCAAgC,MAAM,CAAC;AAEtE,KAAI,OAAO,UAAU,WACnB,QAAO;AAET,QAAO,OAAO,UAAU;;AAG1B,MAAM,mCAAmC,cAA8B;AACrE,KAAI,UAAU,YAAY,OAAO,UAAU,aAAa,SACtD,QAAO,UAAU;AAEnB,QAAO,UAAU,SAAS,OAAO,UAAU,UAAU,WAChD,UAAU,QACX;;AAGN,MAAM,+BAA+B,cAA8B;AACjE,KAAI,CAAC,UAAU,mBAAmB,OAAO,KAAK,UAAU,gBAAgB,CAAC,WAAW,EAClF,QAAO;CAGT,MAAM,QAAQ,gCAAgC,UAAU;AACxD,KAAI,CAAC,MACH,QAAO;AAGT,QAAO,OAAO,KAAK,UAAU,gBAAgB,CAAC,MAC3C,SAAS,uBAAuB,OAAO,KAAK,IAAI,gCAAgC,MAAM,MAAM,CAC9F;;AAGH,MAAM,qBACJ,aACA,MACA,UAC4B;CAC5B,MAAM,YAAY,OAAO,OAAO,KAAK;AACrC,QAAO,iBAAiB,WAAW,OAAO,0BAA0B,MAAM,CAAC;AAE3E,KAAI,CAAC,KAAK,mBAAmB,OAAO,KAAK,KAAK,gBAAgB,CAAC,WAAW,EACxE,QAAO;CAGT,MAAM,2BAAW,IAAI,KAAqB;AAE1C,MAAK,MAAM,CAAC,MAAM,qBAAqB,OAAO,QAAQ,KAAK,gBAAgB,CACzE,QAAO,eAAe,WAAW,MAAM;EACrC,cAAc;EACd,YAAY;EACZ,MAAM;AACJ,OAAI,CAAC,uBAAuB,OAAO,KAAK,CACtC;GAEF,MAAM,QAAQ,MAAM;AACpB,OAAI,CAAC,gCAAgC,MAAM,CACzC,QAAO;GAET,MAAM,UAAU,SAAS,IAAI,KAAK,IAAI;AACtC,YAAS,IAAI,MAAM,UAAU,EAAE;AAE/B,UAAO,qBAAqB,aAAa,MADtB,mBAAmB,IAAI,UAAU,mBAAmB,SACZ,MAAM;;EAEpE,CAAC;AAGJ,QAAO;;AAGT,MAAM,wBAAwB,OAC5B,WACA,MACA,UACG;AACH,KAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACvC,QAAM,sBAAsB,WAAW,MAAM;AAC7C;;AAGF,KAAI,CAAC,KAAK,iBAAiB;AACzB,QAAM,sBAAsB,WAAW,MAAM;AAC7C;;CAGF,MAAM,kBAAkB,IAAI,IAAI,OAAO,KAAK,KAAK,gBAAgB,CAAC;CAClE,MAAM,UAAmC,EAAE;AAC3C,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAiC,EAAE;AAC3E,MAAI,gBAAgB,IAAI,IAAI,EAAE;AAC5B,SAAM,sBAAsB,WAAW,MAAM;AAC7C;;AAEF,UAAQ,OAAO;;AAEjB,OAAM,sBAAsB,WAAW,QAAQ;;AAGjD,MAAM,mBACJ,SACA,KACA,8BACsB;CACtB,yBAAS,IAAI,KAAK;CAClB,8BAAc,IAAI,KAAK;CACvB,mCAAmB,IAAI,KAAK;CAC5B,0BAA0B,4CAA4B,IAAI,KAAK;CAC/D,uBAAO,IAAI,SAAS;CACpB,4BAAY,IAAI,KAAK;CACrB,uBAAO,IAAI,KAAK;CAChB,kBAAkB;CAClB;CACA,sBAAsB;CACtB,IAAI,KAAM,WAA6C,qBAClD,WAA4C,qBAA4C,KAC3F;CACF,yBAAS,IAAI,KAAK;CAClB,gCAAgC;CAChC,8BAAc,IAAI,KAAK;CACvB,yBAAS,IAAI,KAAK;CAClB,YAAY;CACZ,iBAAiB;CACjB,eAAe;CACf,aAAa;CACb,cAAc;CACd,yCAAyB,IAAI,KAAK;CAClC,oBAAoB;CACpB,iBAAiB;CACjB,aAAa,KAAK;CAClB,QAAQ;CACR,wBAAQ,IAAI,KAAK;CACjB,yBAAS,IAAI,KAAK;CAClB,SAAS,IAAI,IAAI,OAAO,QAAQ,QAAQ,CAAC;CACzC,uBAAuB;CACvB,4BAA4B;CAC5B,0BAAU,IAAI,KAAK;CACnB,yBAAS,IAAI,KAAK;CACnB;AAED,MAAa,2BAA2B,cAAgC;CACtE,MAAM,aAAa,qBAAqB;AACxC,YAAW,IAAI,UAAU;AACzB,cAAa;AACX,aAAW,OAAO,UAAU;;;AAIhC,MAAM,sBAAyB,QAAyB,cAAuC;CAC7F,MAAM,SAAS,EAAE;AACjB,QAAO,eAAe,QAAQ,SAAS;EACrC,cAAc;EACd,YAAY;EACZ,MAAM;AACJ,oBAAiB,OAAO;AACxB,UAAO,OAAO;;EAEhB,IAAI,OAAU;AACZ,oBAAiB,WAAW,QAAQ,MAAM;;EAE7C,CAAC;AACF,eAAc,QAAQ;EACpB,WAAW,OAAO;EAClB,IAAI,OAAO;EACX,MAAM,UAAU;AACd,oBAAiB,WAAW,QAAQ,MAAM;;EAE7C,CAAyB;AAC1B,QAAO;;AAGT,MAAM,0BAA0B,UAC9B,UAAU,QAAS,OAAO,UAAU,YAAY,OAAO,UAAU;AAEnE,MAAM,wBAAwB,UAAmB,SAAkB;AACjE,KAAI,uBAAuB,SAAS,IAAI,uBAAuB,KAAK,CAClE,QAAO,CAAC,OAAO,GAAG,UAAU,KAAK;AAGnC,QAAO,aAAa;;AAGtB,MAAM,oBACJ,WACA,QACA,cACG;AACH,KAAI,CAAC,qBAAqB,OAAO,OAAO,UAAU,CAChD,QAAO;AAGT,QAAO,QAAQ;AACf,mBAAkB,WAAW,OAAO;AACpC,QAAO;;AAGT,MAAM,sBACJ,WACA,IACA,iBACoB;AACpB,KAAI,CAAC,WAAW;EACd,MAAM,SAAS;GACb,yBAAS,IAAI,KAAqB;GAClC,QAAQ,KAAA;GACR;GACA,6BAAa,IAAI,KAAa;GAC9B,OAAO;GACR;AACD,SAAO,SAAS,mBAAmB,QAAQ,KAAK;AAChD,SAAO;;CAET,MAAM,WAAW,UAAU,QAAQ,IAAI,GAAG;AAC1C,KAAI,SACF,QAAO;CAET,MAAM,SAA0B;EAC9B,yBAAS,IAAI,KAAK;EAClB,QAAQ,KAAA;EACR;EACA,6BAAa,IAAI,KAAK;EACtB,OAAO;EACR;AACD,QAAO,SAAS,mBAAmB,QAAQ,UAAU;AACrD,WAAU,QAAQ,IAAI,IAAI,OAAuB;AACjD,QAAO;;AAGT,MAAM,oBAAoB,OACxB,OAAO,iCACP,OAAO,gCACP,OAAO;AAET,MAAM,kBAAkB,OAAe,GAAG,WAAW,IAAI;AAEzD,MAAM,iCAA2C;CAC/C,MAAM,YAAY,OAAO,MAAc,YAA8B;AACnE,MAAI,OAAO,WAAW,YACpB;EAEF,MAAM,MAAM,IAAI,IAAI,MAAM,OAAO,SAAS,KAAK;AAC/C,MAAI,SAAS,SAAS;AACpB,UAAO,SAAS,QAAQ,IAAI,KAAK;AACjC;;AAEF,SAAO,SAAS,OAAO,IAAI,KAAK;;AAGlC,QAAO,eAAe,UAAU,gBAAgB;EAC9C,cAAc;EACd,YAAY;EACZ,MAAM;AACJ,UAAO;;EAEV,CAAC;AAEF,QAAO,gBAAgB,SAAS;;AAGlC,MAAa,sBAAsB,WAA6B,SAAuB;AACrF,qBAAoB,kBAAkB,UAAU,EAAE,KAAK;;AAGzD,MAAM,oBAAoB,WAAyB;AACjD,KAAI,eAAe;AACjB,gBAAc,QAAQ,IAAI,OAAO;AACjC,SAAO,QAAQ,IAAI,cAAc;AACjC;;CAEF,MAAM,QAAQ,iBAAiB;AAC/B,KAAI,CAAC,MACH;AAEF,QAAO,YAAY,IAAI,MAAM,UAAU,GAAG;;AAG5C,MAAM,qBAAqB,WAAoC,WAAyB;AACtF,MAAK,MAAM,UAAU,MAAM,KAAK,OAAO,QAAQ,CAC7C,QAAO,IAAI;AAEb,KAAI,CAAC,UACH;AAEF,MAAK,MAAM,eAAe,OAAO,aAAa;EAC5C,MAAM,YAAY,UAAU,WAAW,IAAI,YAAY;AACvD,MAAI,CAAC,WAAW,SAAS,CAAC,UAAU,IAClC;AAEF,MACE,UAAU,sCACV,UAAU,UAAU,SAAS,OAAO,GAAG,IACvC,OAAO,QAAQ,OAAO,KACtB,CAAC,OAAO,YAAY,IAAI,UAAU,GAAG,CAErC;EAEF,MAAM,uBAAuB,4BAA4B,UAAU;EACnE,MAAM,mBAAmB,uBAAuB,YAAY;AAC5D,YAAU,SAAS;AACnB,MAAI,UAAU,wBAAwB,UACpC,WAAU,sBAAsB;AAElC,YAAU,6BAA6B,CAAC;AACxC,YAAU,mCAAmC,CAAC;AAC9C,YAAU,MAAM,IAAI,UAAU,GAAG;;AAEnC,oBAAmB,UAAU;;AAG/B,MAAM,2BAA2B,cAC/B,CAAC,GAAG,UAAU,MAAM,CAAC,OAAO,gBAAgB;CAC1C,MAAM,YAAY,UAAU,WAAW,IAAI,YAAY;AACvD,QACE,CAAC,CAAC,cACD,UAAU,QAAQ,IAAI,UAAU,OAAO,IAAI,UAAU,QAAQ,IAAI,UAAU,OAAO;EAErF;AAEJ,MAAM,sBAAsB,cAAgC;AAC1D,KACE,UAAU,MAAM,SAAS,KACzB,UAAU,oBACV,CAAC,wBAAwB,UAAU,CAEnC;AAGF,WAAU,mBAAmB;AAC7B,sBAAqB;EACnB,MAAM,iBAAiB,YAAY;AACjC,OAAI;IACF,MAAM,eAAe,UAAU;AAC/B,QAAI,aACF,OAAM,aAAa,YAAY,GAAG;aAE5B;AACR,cAAU,mBAAmB;;AAG/B,OAAI,UAAU,MAAM,SAAS,EAC3B;AAEG,wBAAqB,UAAU;;AAGjC,kBAAgB;GACrB;;AAGJ,MAAM,uBAAuB,QAAqB,SAAuB;CACvE,MAAM,MAAM,gBAAgB,MAAM,OAAO,kBAAkB,KAAK;CAChE,MAAM,WAAW,mBAAmB,IAAI,SAAS;AACjD,KAAI,OAAO,YAAY,UAAU,SAC/B,QAAO,YAAY,QAAQ;AAE7B,KAAI,OAAO,WAAW,UAAU,IAAI,KAClC,QAAO,WAAW,QAAQ,IAAI;;AAIlC,MAAM,8BAA8B,WAA6B,SAAuB;CACtF,MAAM,MAAM,gBAAgB,MAAM,OAAO,kBAAkB,KAAK;CAChE,MAAM,WAAW,mBAAmB,IAAI,SAAS;AACjD,oBAAmB,WAAW,+BAA+B,SAAS,CAAC,QAAQ;AAC/E,oBAAmB,WAAW,8BAA8B,IAAI,KAAK,CAAC,QAAQ,IAAI;AAClF,oBAAmB,WAAW,gCAAgC,MAAM,CAAC,QAAQ;;AAG/E,MAAM,qBAAqB,WAA6B,aAA6B;AACnF,KAAI,UAAU,QAAQ;AACpB,MAAI,SACF,WAAU,OAAO,WAAW,CAAC,GAAG,SAAS;AAE3C,SAAO,UAAU;;CAGnB,MAAM,cAAc,mBAClB,WACA,+BACA,mBAAmB,UAAU,KAAK,SAAS,YAAY,IAAI,CAC5D,CAAC;CACF,MAAM,aAAa,mBACjB,WACA,8BACA,UAAU,KAAK,SAAS,QAAQ,YAAY,MAC7C,CAAC;CACF,MAAM,eAAe,mBAAmB,WAAW,gCAAgC,MAAM,CACtF;CAEH,MAAM,SAAsB;EAC1B;EACA,cAAc;EACd;EACA,cAAc,UAAU,KAAK,SAAS;EACtC;EACA,8BAAc,IAAI,KAAK;EACvB,UAAU,KAAA;EACV,UAAU,EAAE;EACZ,UAAU,KAAA;EACV,mCAAmB,IAAI,KAAK;EAC5B,kCAAkB,IAAI,KAAK;EAC3B,iCAAiB,IAAI,KAAK;EAC1B,UAAU;EACX;AAED,WAAU,SAAS;AACnB,QAAO,WAAW,qBAAqB,OAAO;AAC9C,QAAO,WAAW,iBAAiB,OAAO,MAAc,YAA8B;AACpF,QAAM,kBAAkB,WAAW,MAAM,EACvC,MAAM,SAAS,UAAU,YAAY,QACtC,CAAC;IACW;AAEf,QAAO,eAAe,OAAO,UAAU,gBAAgB;EACrD,cAAc;EACd,YAAY;EACZ,MAAM;AACJ,UAAO,kBAAkB,UAAU,CAAC,aAAa;;EAEpD,CAAC;AAEF,KAAI,SACF,QAAO,WAAW,CAAC,GAAG,SAAS;AAGjC,QAAO;;AAGT,MAAM,iBAAoB,WAA6B,OAAmB;CACxE,MAAM,QAAQ,mBAAmB;AACjC,OAAM,KAAK,UAAU;AACrB,KAAI;AACF,SAAO,IAAI;WACH;AACR,QAAM,KAAK;;;AAIf,MAAa,uBAAuB;AAEpC,MAAM,2BAA8B,OAA4B,OAAgB,OAAmB;CACjG,MAAM,QAAQ,sBAAsB;AACpC,OAAM,KAAK;EACT;EACA;EACD,CAAC;AACF,KAAI;AACF,SAAO,IAAI;WACH;AACR,QAAM,KAAK;;;AAIf,MAAM,aAAgB,OAAoB,OAAmB;CAC3D,MAAM,QAAQ,eAAe;AAC7B,OAAM,KAAK,MAAM;AACjB,KAAI;AACF,SAAO,IAAI;WACH;AACR,QAAM,KAAK;;;AAIf,MAAM,mBAAmB,cAAgC,KAAK,UAAU;AAExE,MAAa,0BAA0B,WAA6B,YAAqB;CACvF,MAAM,aAAa,QAAQ,aAAa,WAAW;AACnD,KAAI,WACF,QAAO;CAET,MAAM,SAAS,IAAI,UAAU;AAC7B,SAAQ,aAAa,YAAY,OAAO;AACxC,QAAO;;AAGT,MAAa,sBACX,WACA,cACmB;CACnB,MAAM,OAAO,UAAU,eAAe,UAAU,KAAK;AACrD,KAAI,CAAC,KACH,QAAO;AAET,KAAI,KAAK,aAAa,WAAW,KAAK,UACpC,QAAO;AAET,QAAO,KAAK,cAAc,cAAc,UAAU,IAAI;;AAGxD,MAAM,iBAAiB,WAA6B,WAA8B;CAChF,MAAM,KAAK,gBAAgB,UAAU;AACrC,WAAU,OAAO,IACf,IACA,OAAO,KAAK,UAAU,sBAAsB,WAAW,MAAM,CAAC,CAC/D;AACD,QAAO;;AAGT,MAAM,2BAA2B,WAA6B,WAA8B;CAC1F,MAAM,KAAK,gBAAgB,UAAU;AACrC,WAAU,OAAO,IAAI,IAAI,CAAC,GAAG,OAAO,CAAC;AACrC,QAAO;;AAGT,MAAM,8BACJ,WACA,UACA,YACG;CACH,MAAM,MAAM,GAAG,SAAoB;AAC5B,aAAW,WAAW,SAAS,CAAC,MAAM,WACzC,OAAO,QAAQ,iBAAiB,WAAW,QAAQ,EAAE,GAAG,KAAK,CAC9D;;AAEH,QAAO,eAAe,IAAI,QAAQ;EAChC,cAAc;EACd,OAAO,WAAW;EACnB,CAAC;AACF,QAAO;;AAGT,MAAM,oBAAoB,WAA6B,YAA+B;CACpF,MAAM,QAAQ,UAAU,OAAO,IAAI,QAAQ;AAC3C,KAAI,CAAC,MACH,OAAM,IAAI,MAAM,iBAAiB,QAAQ,GAAG;AAE9C,QAAO,MAAM,KAAK,SAAS,wBAAwB,WAAW,KAAK,CAAC;;AAGtE,MAAM,eACJ,WACA,WACA,MACA,aAKiB;CACjB,aAAa;CACb;CACA;CACA,mBAAmB,SAAS,qBAAqB,UAAU;CAC3D,cAAc;CACd,gBAAgB,EAAE;CAClB;CACA,iBAAiB;EACf,0BAAU,IAAI,KAAK;EACnB,kBAAkB,SAAS,oBAAoB;EAC/C,wBAAwB,SAAS,0BAA0B;EAC5D;CACD,cAAc,EAAE;CAChB,cAAc;CACd,eAAe;CACf,oCAAoB,IAAI,KAAK;CAC7B,aAAa;CACd;AAED,MAAM,qBACJ,WACA,UACA,eACG;AACH,KAAI,CAAC,YAAY,aAAa,kBAC5B,QAAO,IAAI;AAEb,QAAO,GAAG,SAAS,GAAG;;AAGxB,MAAM,6BACJ,WACA,IACA,QACA,aACmB;CACnB,MAAM,WAAW,UAAU,WAAW,IAAI,GAAG;AAC7C,KAAI,UAAU;AACZ,WAAS,WAAW;AACpB,WAAS,SAAS;AAClB,SAAO;;CAET,MAAM,YAA4B;EAChC,QAAQ;EACR,UAAU;EACV;EACA,mBAAmB,EAAE;EACrB,eAAe;EACf;EACA,oCAAoC;EACpC,OAAO,EAAE;EACT,iBAAiB;EACjB,UAAU;EACV,yBAAyB,mBAAmB;EAC5C,4BAA4B;EAC5B,kCAAkC;EAClC,SAAS,cAAc,WAAW,EAAE,CAAC;EACrC,WAAW,EAAE;EACb;EACA,iBAAiB;EACjB,cAAc;EACd,YAAY;EACb;AACD,WAAU,WAAW,IAAI,IAAI,UAAU;AACvC,QAAO;;AAGT,MAAM,iCACJ,WACA,WACA,SACG;AACH,+BAA8B,UAAU;AACxC,oBAAmB,UAAU,wBAAwB;AACrD,WAAU,0BAA0B,mBAAmB;AACvD,WAAU,WAAW;AACrB,WAAU,gBAAgB,KAAK,kBAAkB;AACjD,WAAU,qCAAqC;AAC/C,WAAU,kBAAkB,KAAK,mBAAmB;AACpD,WAAU,WAAW;AACrB,WAAU,UAAU,cAAc,WAAW,KAAK,UAAU,CAAC;AAC7D,WAAU,YAAY,EAAE;AACxB,WAAU,kBAAkB;AAC5B,wBAAuB,WAAW,WAAW,EAAE;AAC/C,uBAAsB,WAAW,WAAW,EAAE;;AAGhD,MAAM,iBAAiB,aAAqB,eAAuB,GAAG,YAAY,IAAI;AACtF,MAAM,mBAAmB,aAAqB,iBAC5C,GAAG,YAAY,IAAI;AAErB,MAAM,yBACJ,WACA,IACA,gBACe;CACf,MAAM,WAAW,UAAU,QAAQ,IAAI,GAAG;AAC1C,KAAI,UAAU;AACZ,WAAS,cAAc;AACvB,SAAO;;CAET,MAAM,SAAyB;EAC7B,KAAK;EACL,yBAAS,IAAI,KAAK;EACnB;CACD,MAAM,QAAoB;EACxB,aAAa,mBAAmB;EAChC;EACA;EACA;EACA,MAAM;EACN,SAAS;EACT,KAAK;EACL,SAAS,cAAc,WAAW,EAAE,CAAC;EACrC,QAAQ;EACR,OAAO;EACR;AACD,QAAO,WAAW;AAChB,MAAI,MAAM,KAAK;AACb,SAAM,KAAK;AACX;;AAEF,MAAI,CAAC,UAAU,IACb;EAwBF,MAAM,UAtBa,MAAM,WAAW,QAAQ,SAAS,EAAE,KAAK,YAAY;AACtE,sBAAmB,MAAM,YAAY;GACrC,MAAM,SAAS,MAAM,WAAW,WAAW,MAAM,OAAO;GACxD,MAAM,QAAQ,iBAAiB,WAAW,MAAM,QAAQ;AACxD,SAAM,oBAAoB,iBAAiB;AACzC,QAAI,MAAM,SAAS,WAAW;AAC5B,gCAA2B,cAAc;AACvC,sBAAgB,MAAM,mBAAmB;AACvC,cAAO,QAAQ,MAAM;QACrB;OACF;AACF;;AAEF,+BAA2B,cAAc;AACvC,YAAO,QAAQ,OAAO,QAAQ;MAC9B;AACF,oBAAgB,MAAM,mBAAmB;AACvC,YAAO,QAAQ,OAAO,MAAM;MAC5B;KACF;AACF,SAAM,qBAAqB,UAAU;IACrC,CACuB,cAAc;AACrC,OAAI,MAAM,YAAY,OACpB,OAAM,UAAU;IAElB;AACF,QAAM,UAAU;;AAElB,WAAU,QAAQ,IAAI,IAAI,MAAM;AAChC,QAAO;;AAGT,MAAM,2BACJ,WACA,IACA,gBACiB;CACjB,MAAM,WAAW,UAAU,SAAS,IAAI,GAAG;AAC3C,KAAI,UAAU;AACZ,WAAS,cAAc;AACvB,SAAO;;CAGT,MAAM,UAAwB;EAC5B,aAAa,mBAAmB;EAChC;EACA,MAAM;EACN;EACA,SAAS;EACT,KAAK;EACL,SAAS,cAAc,WAAW,EAAE,CAAC;EACrC,QAAQ;EACT;AACD,WAAU,SAAS,IAAI,IAAI,QAAQ;AACnC,QAAO;;AAGT,MAAM,+BAA+B,WAA6B,gBAAwB;AACxF,MAAK,MAAM,UAAU,UAAU,QAAQ,QAAQ,CAC7C,QAAO,YAAY,OAAO,YAAY;;AAI1C,MAAM,iCAAiC,cAA8B;AACnE,oBAAmB,UAAU,wBAAwB;AACrD,WAAU,0BAA0B,mBAAmB;CACvD,MAAM,eAAe,CAAC,GAAG,UAAU,kBAAkB,CAAC,SAAS;AAC/D,WAAU,oBAAoB,EAAE;AAChC,MAAK,MAAM,eAAe,aACxB,oBAAmB,YAAY;;AAInC,MAAM,oBAAoB,WAA6B,YAAoB;CACzE,MAAM,QAAQ,UAAU,QAAQ,IAAI,QAAQ;AAC5C,KAAI,CAAC,MACH;AAEF,oBAAmB,MAAM,YAAY;AACrC,oBAAmB,MAAM,OAAO;AAChC,WAAU,QAAQ,OAAO,QAAQ;;AAGnC,MAAM,sBAAsB,WAA6B,cAAsB;CAC7E,MAAM,UAAU,UAAU,SAAS,IAAI,UAAU;AACjD,KAAI,QACF,oBAAmB,QAAQ,YAAY;AAEzC,WAAU,SAAS,OAAO,UAAU;;AAGtC,MAAM,qBAAqB,YAA0B;AACnD,oBAAmB,QAAQ,YAAY;AACvC,SAAQ,cAAc,mBAAmB;AACzC,SAAQ,OAAO;AACf,SAAQ,UAAU;;AAGpB,MAAM,+BAA+B,WAA6B,gBAAwB;CACxF,MAAM,YAAY,IAAI,IAAY,CAAC,aAAa,GAAG,qBAAqB,WAAW,YAAY,CAAC,CAAC;AAEjG,MAAK,MAAM,WAAW,UAAU,SAAS,QAAQ,EAAE;AACjD,MAAI,CAAC,UAAU,IAAI,QAAQ,YAAY,CACrC;AAEF,oBAAkB,QAAQ;;;AAI9B,MAAM,yBACJ,WACA,WACA,cACG;AACH,MAAK,IAAI,QAAQ,WAAW,QAAQ,UAAU,YAAY,QACxD,kBAAiB,WAAW,cAAc,UAAU,IAAI,MAAM,CAAC;AAEjE,WAAU,aAAa;;AAGzB,MAAM,0BACJ,WACA,WACA,cACG;AACH,MAAK,IAAI,QAAQ,WAAW,QAAQ,UAAU,cAAc,QAC1D,oBAAmB,WAAW,gBAAgB,UAAU,IAAI,MAAM,CAAC;AAErE,WAAU,eAAe;;AAG3B,MAAM,kBAAkB,UAAkB,gBACxC,YAAY,WAAW,GAAG,SAAS,GAAG;AAExC,MAAM,wBAAwB,WAA6B,gBACzD,CAAC,GAAG,UAAU,WAAW,MAAM,CAAC,CAAC,QAAQ,cAAc,eAAe,aAAa,UAAU,CAAC;AAEhG,MAAM,mCACJ,WACA,iBACG;CACH,MAAM,2BAAW,IAAI,KAAa;AAElC,MAAK,MAAM,eAAe,cAAc;AACtC,MAAI,SAAS,IAAI,YAAY,CAC3B;AAEF,WAAS,IAAI,YAAY;AACzB,OAAK,MAAM,gBAAgB,qBAAqB,WAAW,YAAY,CACrE,UAAS,IAAI,aAAa;;AAI9B,QAAO;;AAGT,MAAM,0BACJ,WACA,aACA,SACG;AACH,MAAK,MAAM,gBAAgB,qBAAqB,WAAW,YAAY,EAAE;AACvE,MAAI,KAAK,IAAI,aAAa,CACxB;AAEF,8BAA4B,WAAW,aAAa;EACpD,MAAM,aAAa,UAAU,WAAW,IAAI,aAAa;AACzD,MAAI,YAAY;AACd,iCAA8B,WAAW;AACzC,0BAAuB,WAAW,YAAY,EAAE;AAChD,yBAAsB,WAAW,YAAY,EAAE;;AAEjD,YAAU,WAAW,OAAO,aAAa;;;AAI7C,MAAM,qBAAqB,OAAmB;AAC5C,KAAI,OAAO,mBAAmB,YAAY;AACxC,iBAAe,GAAG;AAClB;;AAEF,SAAQ,SAAS,CAAC,KAAK,GAAG;;AAG5B,MAAM,oCAAoC,cAAgC;AACxE,KACE,UAAU,kCACV,CAAC,UAAU,OACX,OAAO,UAAU,IAAI,qBAAqB,WAE1C;AAGF,WAAU,iCAAiC;AAC3C,yBAAwB;AACtB,YAAU,iCAAiC;EAC3C,MAAM,MAAM,UAAU;AACtB,MAAI,CAAC,OAAO,OAAO,IAAI,qBAAqB,WAC1C;AAGF,OAAK,MAAM,WAAW,IAAI,iBAAiB,8BAA8B,EAAE;AACzE,OAAI,CAAC,cAAc,QAAQ,CACzB;AAEF,0BAAuB,WAAW,SAAS,iCAAiC;;GAE9E;;AAGJ,MAAM,iCAAiC,cAAgC;AACrE,kCAAiC,UAAU;AAC3C,KAAI,UAAU,yBAAyB,UAAU,SAAS,SAAS,KAAK,CAAC,UAAU,IACjF;AAGF,2BAA0B,UAAU;AACpC,WAAU,wBAAwB;CAClC,MAAM,YAAY;AAChB,YAAU,wBAAwB;AAC7B,wBAAsB,UAAU;;CAGvC,MAAM,OAAO,UAAU,IAAI;AAC3B,KAAI,QAAQ,OAAO,KAAK,0BAA0B,YAAY;AAC5D,OAAK,4BAA4B,KAAK,CAAC;AACvC;;AAGF,mBAAkB,IAAI;;AAGxB,MAAM,0BACJ,MACA,SACG;CACH,MAAM,iBAAiB,KAAK,eAAe;CAC3C,MAAM,gBAAgB,KAAK,cAAc;AACzC,QAAO,KAAK,SAAS,KAAK,KAAK,QAAQ,KAAK,KAAK,MAAM,kBAAkB,KAAK,OAAO;;AAGvF,MAAM,qBAAqB,KAAe,OAAgB,QAAiB;CACzE,MAAM,OAAO,IAAI;AACjB,KAAI,OAAO,IAAI,gBAAgB,cAAc,CAAC,KAC5C,QAAO;CAGT,MAAM,QAAQ,IAAI,aAAa;AAC/B,OAAM,cAAc,MAAM;AAC1B,OAAM,aAAa,IAAI;CAEvB,MAAM,QAAQ,MAAM,gBAAgB;AACpC,KAAI,MAAM,WAAW,EACnB,QAAO,uBAAuB,MAAM,MAAM,uBAAuB,CAAC;AAGpE,MAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS;EACjD,MAAM,OAAO,MAAM;AACnB,MAAI,uBAAuB,MAAM,KAAK,CACpC,QAAO;;AAGX,QAAO;;AAGT,MAAM,qBAAqB,OAAO,WAA6B,YAA0B;AACvF,KAAI,QAAQ,KACV;AAGF,SAAQ,OAAO;CACf,MAAM,UAAU,QAAQ,SAAS,CAC9B,KAAK,YAAY;AAChB,MAAI,QAAQ,IACV,OAAM,oBAAoB,WAAW,YAAY;AAC/C,SAAM,gBAAgB,QAAQ,mBAAmB,QAAQ,OAAO,CAAC;IACjE;OACG;GACL,MAAM,SAAS,MAAM,WAAW,WAAW,QAAQ,OAAO;AAC1D,SAAM,oBAAoB,WAAW,YAAY;AAC/C,UAAM,gBAAgB,QAAQ,mBAC5B,OAAO,QAAQ,iBAAiB,WAAW,QAAQ,QAAQ,CAAC,CAC7D;KACD;;AAEJ,QAAM,qBAAqB,UAAU;AACrC,gCAA8B,UAAU;GACxC,CACD,cAAc;AACb,MAAI,QAAQ,YAAY,QACtB,SAAQ,UAAU;GAEpB;AAEJ,SAAQ,UAAU;AAClB,OAAM;;AAGR,MAAM,wBAAwB,OAAO,cAAgC;AACnE,KAAI,CAAC,UAAU,OAAO,UAAU,SAAS,SAAS,EAChD;AAGF,MAAK,MAAM,WAAW,MAAM,KAAK,UAAU,SAAS,QAAQ,CAAC,EAAE;AAC7D,MAAI,QAAQ,QAAQ,QAAQ,QAC1B;EAGF,MAAM,YAAY,UAAU,WAAW,IAAI,QAAQ,YAAY;AAC/D,MAAI,CAAC,WAAW,SAAS,CAAC,UAAU,IAClC;AAGF,MAAI,CAAC,kBAAkB,UAAU,KAAK,UAAU,OAAO,UAAU,IAAI,CACnE;AAGF,QAAM,mBAAmB,WAAW,QAAQ;;;AAIhD,MAAM,6BAA6B,cAAgC;AACjE,KAAI,UAAU,8BAA8B,CAAC,UAAU,IACrD;CAGF,MAAM,MAAM,UAAU;CACtB,MAAM,2BAA2B;AAC/B,gCAA8B,UAAU;;AAG1C,KAAI,iBAAiB,UAAU,oBAAoB,KAAK;AACxD,KAAI,aAAa,iBAAiB,UAAU,mBAAmB;AAE/D,WAAU,mCAAmC;AAC3C,MAAI,oBAAoB,UAAU,oBAAoB,KAAK;AAC3D,MAAI,aAAa,oBAAoB,UAAU,mBAAmB;AAClE,YAAU,6BAA6B;;;AAI3C,MAAM,0BACJ,WACA,WACA,cACG;AACH,KAAI,UAAU,YAAY,UAAU,WAAW,EAC7C;AAEF,WAAU,WAAW;AACrB,yBAAwB;AACjB,sBAAoB,iBAAiB;AACxC,QAAK,MAAM,YAAY,WAAW;IAChC,MAAM,cAAc,mBAAmB;AACvC,cAAU,kBAAkB,KAAK,YAAY;AAC7C,oBAAgB,aAAa,SAAS;;IAExC,CACC,WAAW,qBAAqB,UAAU,CAAC,CAC3C,WAAW;AACV,iCAA8B,UAAU;IACxC;GACJ;;AAGJ,MAAM,+BAA+B,UAAkB;CACrD,MAAM,yBAAS,IAAI,KAAsB;CACzC,MAAM,yBAAS,IAAI,KAA+C;CAElE,MAAM,SAAS,SAAe;AAC5B,MAAI,OAAO,YAAY,cAAc,gBAAgB,UAAW,KAAc,aAAa,GAAG;GAC5F,MAAM,cAAc;GACpB,MAAM,SAAS,0BAA0B,YAAY,KAAK;AAC1D,OAAI,OACF,KAAI,OAAO,SAAS,QAClB,QAAO,IAAI,OAAO,KAAK,YAAY;QAC9B;IACL,MAAM,YAAY,OAAO,IAAI,OAAO,IAAI;AACxC,QAAI,UACF,QAAO,IAAI,OAAO,KAAK;KAAE,KAAK;KAAa,OAAO;KAAW,CAAC;;;AAKtE,OAAK,MAAM,SAAS,MAAM,KAAM,KAAK,cAAc,EAAE,CAA+B,CAClF,OAAM,MAAM;;AAIhB,MAAK,MAAM,QAAQ,MACjB,OAAM,KAAK;AAGb,QAAO;;AAGT,MAAM,+BAA+B,UAAkB;CACrD,MAAM,sBAAM,IAAI,KAAa;CAC7B,MAAM,SAAS,SAAe;AAC5B,MAAI,OAAO,YAAY,cAAc,gBAAgB,UAAW,KAAc,aAAa,GAAG;GAC5F,MAAM,UAAW,KAAiB,KAAK,MAAM,0BAA0B;AACvE,OAAI,QACF,KAAI,IAAI,QAAQ,GAAI;;AAGxB,OAAK,MAAM,SAAS,MAAM,KAAM,KAAK,cAAc,EAAE,CAA+B,CAClF,OAAM,MAAM;;AAIhB,MAAK,MAAM,QAAQ,MACjB,OAAM,KAAK;AAGb,QAAO;;AAGT,MAAM,kCAAkC,UAAkB;CACxD,MAAM,yBAAS,IAAI,KAAsB;CACzC,MAAM,yBAAS,IAAI,KAA+C;CAElE,MAAM,SAAS,SAAe;AAC5B,MAAI,OAAO,YAAY,cAAc,gBAAgB,UAAW,KAAc,aAAa,GAAG;GAC5F,MAAM,cAAc;GACpB,MAAM,SAAS,6BAA6B,YAAY,KAAK;AAC7D,OAAI,OACF,KAAI,OAAO,SAAS,QAClB,QAAO,IAAI,OAAO,IAAI,YAAY;QAC7B;IACL,MAAM,YAAY,OAAO,IAAI,OAAO,GAAG;AACvC,QAAI,UACF,QAAO,IAAI,OAAO,IAAI;KAAE,KAAK;KAAa,OAAO;KAAW,CAAC;;;AAKrE,OAAK,MAAM,SAAS,MAAM,KAAM,KAAK,cAAc,EAAE,CAA+B,CAClF,OAAM,MAAM;;AAIhB,MAAK,MAAM,QAAQ,MACjB,OAAM,KAAK;AAGb,QAAO;;AAGT,MAAM,2BAA2B,UAAkB;CACjD,MAAM,yBAAS,IAAI,KAAsB;CACzC,MAAM,yBAAS,IAAI,KAA+C;CAElE,MAAM,SAAS,SAAe;AAC5B,MAAI,OAAO,YAAY,cAAc,gBAAgB,UAAW,KAAc,aAAa,GAAG;GAC5F,MAAM,cAAc;GACpB,MAAM,SAAS,sBAAsB,YAAY,KAAK;AACtD,OAAI,OACF,KAAI,OAAO,SAAS,QAClB,QAAO,IAAI,OAAO,KAAK,YAAY;QAC9B;IACL,MAAM,YAAY,OAAO,IAAI,OAAO,IAAI;AACxC,QAAI,UACF,QAAO,IAAI,OAAO,KAAK;KAAE,KAAK;KAAa,OAAO;KAAW,CAAC;;;AAKtE,OAAK,MAAM,SAAS,MAAM,KAAM,KAAK,cAAc,EAAE,CAA+B,CAClF,OAAM,MAAM;;AAIhB,MAAK,MAAM,QAAQ,MACjB,OAAM,KAAK;AAGb,QAAO;;AAGT,MAAM,6BAA6B,OAAgB,QAAiB;CAClE,MAAM,QAAgB,CAAC,MAAM;CAC7B,IAAI,SAAsB,MAAM;AAChC,QAAO,QAAQ;AACb,QAAM,KAAK,OAAO;AAClB,MAAI,WAAW,IACb,QAAO;AAET,WAAS,OAAO;;AAElB,QAAO,EAAE;;AAGX,MAAM,4CAA4C,cAAsB,cAAsB;CAC5F,MAAM,gBAAgB,+BAA+B,aAAa;CAClE,MAAM,aAAa,+BAA+B,UAAU;CAC5D,MAAM,wCAAwB,IAAI,KAAa;AAE/C,MAAK,MAAM,CAAC,IAAI,cAAc,YAAY;AAexC,MAdwB,QAEpB,UAAU,MAIV,sCAEA,UAAU,MAIV,kCACH,CAEC;EAEF,MAAM,eAAe,cAAc,IAAI,GAAG;AAC1C,MAAI,CAAC,aACH;EAGF,MAAM,aAAa,0BAA0B,aAAa,OAAO,aAAa,IAAI;AAClF,MAAI,WAAW,WAAW,EACxB;EAGF,MAAM,oBAAoB,UAAU,MAAM;AAC1C,MAAI,CAAC,kBACH;AAGF,OAAK,MAAM,QAAQ,WACjB,mBAAkB,aAAa,MAAM,UAAU,MAAM;EAGvD,IAAI,SAAsB,UAAU;AACpC,SAAO,QAAQ;GACb,MAAM,cAA2B,OAAO;AACxC,OAAI,OAAQ,OAA0C,WAAW,WAC7D,QAAyC,QAAQ;OAEnD,QAAO,YAAY,YAAY,OAAO;AAExC,OAAI,WAAW,UAAU,IACvB;AAEF,YAAS;;AAGX,wBAAsB,IAAI,GAAG;AAC7B,OAAK,MAAM,eAAe,4BAA4B,WAAW,CAC/D,uBAAsB,IAAI,YAAY;;AAI1C,QAAO;;AAGT,MAAM,yCAAyC,cAAsB,cAAsB;CACzF,MAAM,gBAAgB,4BAA4B,aAAa;CAC/D,MAAM,aAAa,4BAA4B,UAAU;CACzD,MAAM,wCAAwB,IAAI,KAAa;CAE/C,MAAM,+BAA+B,UAAkB;AACrD,MAAI,MAAM,WAAW,EACnB,QAAO;AAGT,OAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;GACpD,MAAM,OAAO,MAAM;GACnB,MAAM,QAAQ,yBAAyB,MAAM,QAAQ;AACrD,OAAI,CAAC,MACH,QAAO;GAGT,IAAI,WAAW,QAAQ;AACvB,UAAO,WAAW,MAAM,QAAQ;IAC9B,MAAM,WAAW,yBAAyB,MAAM,WAAY,MAAM;AAClE,QAAI,YAAY,SAAS,cAAc,MAAM,aAAa,SAAS,UAAU,MAAM,MACjF;AAEF,gBAAY;;AAGd,OAAI,YAAY,MAAM,UAAU,aAAa,QAAQ,EACnD,QAAO;AAGT,WAAQ;;AAGV,SAAO;;AAGT,MAAK,MAAM,CAAC,KAAK,cAAc,YAAY;EACzC,MAAM,eAAe,cAAc,IAAI,IAAI;AAC3C,MAAI,CAAC,aACH;AAIF,MAAI,CAAC,4BADiB,oBAAoB,UAAU,OAAO,UAAU,IAAI,CAC1B,CAC7C;EAGF,MAAM,aAAqB,EAAE;EAC7B,IAAI,SAAS,aAAa,MAAM;AAChC,SAAO,UAAU,WAAW,aAAa,KAAK;GAC5C,MAAM,cAAc,OAAO;AAC3B,cAAW,KAAK,OAAO;AACvB,YAAS;;AAGX,MAAI,WAAW,WAAW,EACxB;EAGF,IAAI,iBAAiB,UAAU,MAAM;AACrC,SAAO,kBAAkB,mBAAmB,UAAU,KAAK;GACzD,MAAM,cAAc,eAAe;AACnC,OAAI,OAAQ,eAAkD,WAAW,WACrE,gBAAiD,QAAQ;OAE3D,gBAAe,YAAY,YAAY,eAAe;AAExD,oBAAiB;;AAGnB,OAAK,MAAM,QAAQ,WACjB,WAAU,IAAI,YAAY,aAAa,MAAM,UAAU,IAAI;AAG7D,OAAK,MAAM,eAAe,4BAA4B,WAAW,CAC/D,uBAAsB,IAAI,YAAY;;AAI1C,QAAO;;AAGT,MAAM,qCAAqC,cAAsB,cAAsB;CACrF,MAAM,wCAAwB,IAAI,KAAa;CAC/C,MAAM,gBAAgB,wBAAwB,aAAa;CAC3D,MAAM,aAAa,wBAAwB,UAAU;AAErD,MAAK,MAAM,CAAC,KAAK,cAAc,YAAY;EACzC,MAAM,eAAe,cAAc,IAAI,IAAI;AAC3C,MAAI,CAAC,aACH;EAGF,MAAM,aAAa,0BAA0B,aAAa,OAAO,aAAa,IAAI;AAClF,MAAI,WAAW,WAAW,EACxB;EAGF,MAAM,oBAAoB,UAAU,MAAM;AAC1C,MAAI,CAAC,kBACH;AAGF,OAAK,MAAM,QAAQ,WACjB,mBAAkB,aAAa,MAAM,UAAU,MAAM;EAGvD,IAAI,SAAsB,UAAU;AACpC,SAAO,QAAQ;GACb,MAAM,cAA2B,OAAO;AACxC,OAAI,OAAQ,OAA0C,WAAW,WAC7D,QAAyC,QAAQ;OAEnD,QAAO,YAAY,YAAY,OAAO;AAExC,OAAI,WAAW,UAAU,IACvB;AAEF,YAAS;;AAGX,OAAK,MAAM,eAAe,4BAA4B,WAAW,CAC/D,uBAAsB,IAAI,YAAY;;AAI1C,QAAO;;AAGT,MAAM,wBAAwB,SAAe,SAAe;AAC1D,KAAI,QAAQ,aAAa,KAAK,SAC5B,QAAO;AAGT,MACG,OAAO,YAAY,cAAc,mBAAmB,UAAU,QAAQ,aAAa,OACnF,OAAO,YAAY,cAAc,gBAAgB,UAAU,KAAK,aAAa,GAE9E,QAAQ,QAAoB,SAAU,KAAiB;AAGzD,KAAI,QAAQ,aAAa,iBAAiB,KAAK,aAAa,cAC1D,QAAO;AAGT,QAAO,cAAc,QAAQ,IAAI,cAAc,KAAK,IAAI,QAAQ,YAAY,KAAK;;AAGnF,MAAM,uCAAuC,cAAsB,cAAsB;CACvF,MAAM,wCAAwB,IAAI,KAAa;CAE/C,MAAM,iBAAiB,iBAAyB,iBAAyB;EACvE,IAAI,eAAe;AAEnB,OAAK,MAAM,aAAa,cAAc;GACpC,MAAM,oBACJ,OAAO,YAAY,cAAc,qBAAqB,UAAU,UAAU,aAAa,KAErF,kBAAmB,UAAsB,KAAK,GAC9C;AACJ,OAAI,kBAAkB;IACpB,IAAI,cAAc;AAClB,SAAK,IAAI,QAAQ,cAAc,QAAQ,gBAAgB,QAAQ,SAAS,GAAG;KACzE,MAAM,eAAe,gBAAgB;AACrC,SACE,EAAE,OAAO,YAAY,cACjB,wBAAwB,UACxB,aAAa,aAAa,GAE9B;AAGF,SAD4B,kBAAmB,aAAyB,KAAK,EACpD,QAAQ,iBAAiB,KAAK;AACrD,oBAAc;AACd;;;AAGJ,QAAI,cAAc,EAChB;IAGF,MAAM,gBAAgB,gBAAgB;IACtC,MAAM,gBAAgB,uBAAuB,IAAI,cAAc;AAC/D,QAAI,kBAAkB,KAAA,GAAW;AAC/B,oBAAe,cAAc;AAC7B;;IAEF,MAAM,kBACJ,iBAAiB,KAAK,cAAc,iBAAiB,eACjD,cAAc,gBACd;IACN,MAAM,aAAa,gBAAgB,MAAM,iBAAiB,YAAY;AACtE,QAAI,4BAA4B,WAAW,CAAC,OAAO,GAAG;AACpD,oBAAe,cAAc;AAC7B;;AAGF,SAAK,MAAM,QAAQ,WACjB,WAAU,YAAY,aAAa,MAAM,UAAU;AAErD,2BAAuB,IAAI,WAAsB,WAAW,OAAO;AAEnE,SAAK,MAAM,eAAe,4BAA4B,WAAW,CAC/D,uBAAsB,IAAI,YAAY;AAGxC,mBAAe,cAAc;AAC7B;;GAGF,IAAI,eAAe;AACnB,QAAK,IAAI,QAAQ,cAAc,QAAQ,gBAAgB,QAAQ,SAAS,EACtE,KAAI,qBAAqB,gBAAgB,QAAS,UAAU,EAAE;AAC5D,mBAAe;AACf;;AAGJ,OAAI,eAAe,EACjB;GAGF,MAAM,eAAe,gBAAgB;AACrC,OAAI,cAAc,aAAa,IAAI,cAAc,UAAU,CACzD,eAAc,MAAM,KAAK,aAAa,WAAW,EAAE,MAAM,KAAK,UAAU,WAAW,CAAC;AAEtF,kBAAe,eAAe;;;AAIlC,eAAc,cAAc,UAAU;AAEtC,QAAO;;AAGT,MAAa,kCACX,cACA,WACA,YAGG;CACH,MAAM,wBAAwB,yCAAyC,cAAc,UAAU;AAE/F,KAAI,SAAS,2BAA2B,KACtC,MAAK,MAAM,eAAe,sCAAsC,cAAc,UAAU,CACtF,uBAAsB,IAAI,YAAY;AAI1C,MAAK,MAAM,eAAe,kCAAkC,cAAc,UAAU,CAClF,uBAAsB,IAAI,YAAY;AAGxC,MAAK,MAAM,eAAe,oCAAoC,cAAc,UAAU,CACpF,uBAAsB,IAAI,YAAY;AAGxC,QAAO;;AAGT,MAAM,iCAAiC,OAAgB,KAAc,UAAkB;CACrF,IAAI,SAAS,MAAM;AACnB,QAAO,UAAU,WAAW,KAAK;EAC/B,MAAM,OAAO,OAAO;AACpB,SAAO,QAAQ;AACf,WAAS;;AAEX,MAAK,MAAM,QAAQ,MACjB,KAAI,YAAY,aAAa,MAAM,IAAI;AAEzC,mCAAkC,MAAM;;AAG1C,MAAM,2BACJ,OACA,KACA,OACA,YAGG;CACH,MAAM,wBAAwB,+BAC5B,oBAAoB,OAAO,IAAI,EAC/B,OACA,EACE,yBAAyB,SAAS,2BAA2B,MAC9D,CACF;CACD,IAAI,SAAS,MAAM;AACnB,QAAO,UAAU,WAAW,KAAK;EAC/B,MAAM,OAAO,OAAO;AACpB,SAAO,QAAQ;AACf,WAAS;;AAEX,MAAK,MAAM,QAAQ,MACjB,KAAI,YAAY,aAAa,MAAM,IAAI;AAEzC,mCAAkC,MAAM;AAExC,QAAO;;AAGT,MAAa,gCAAgC,SAAkB,SAAkB;CAC/E,MAAM,YAAY,IAAI,IAAI,KAAK,mBAAmB,CAAC;CACnD,MAAM,gBAAgB,4BAA4B,QAAQ,oBAAI,IAAI,KAAa;AAE/E,MAAK,MAAM,QAAQ,cACjB,KAAI,CAAC,UAAU,IAAI,KAAK,CACtB,SAAQ,gBAAgB,KAAK;AAIjC,MAAK,MAAM,QAAQ,WAAW;EAC5B,MAAM,YAAY,KAAK,aAAa,KAAK;AACzC,MAAI,cAAc,QAAQ,QAAQ,aAAa,KAAK,KAAK,UACvD,SAAQ,aAAa,MAAM,UAAU;;AAIzC,iCAAgC,SAAS,UAAU;AAEnD,KAAI,uBAAuB,QAAQ,IAAI,uBAAuB,KAAK;MAC7D,QAAQ,YAAY,KAAK,QAC3B,SAAQ,UAAU,KAAK;;AAG3B,KAAI,WAAW,WAAW,WAAW,QAAQ,QAAQ,UAAU,KAAK;MAC9D,QAAQ,UAAU,KAAK,MACzB,SAAQ,QAAQ,KAAK;;;AAK3B,MAAa,+BAA+B,SAAkB,SAAkB;AAC9E,KAAI,QAAQ,YAAY,KAAK,QAC3B,QAAO;AAGT,8BAA6B,SAAS,KAAK;AAC3C,gCAA+B,MAAM,KAAK,QAAQ,WAAW,EAAE,MAAM,KAAK,KAAK,WAAW,CAAC;AAC3F,QAAO,QAAQ,WACb,SAAQ,WAAW,QAAQ;AAE7B,QAAO,KAAK,WACV,SAAQ,YAAY,KAAK,WAAW;AAEtC,mCAAkC,MAAM,KAAK,QAAQ,WAAW,CAAC;AACjE,QAAO;;AAGT,MAAM,gCAAgC,QAAiB,mBAA2B;AAChF,KAAI,CAAC,OAAO,cAAc,mBAAmB,EAC3C,QAAO,EAAE;CAGX,MAAM,QAAgB,EAAE;CACxB,IAAI,SAAsB,OAAO;AACjC,QAAO,UAAU,MAAM,SAAS,gBAAgB;AAC9C,QAAM,QAAQ,OAAO;AACrB,WAAS,OAAO;;AAGlB,QAAO,MAAM,WAAW,iBAAiB,QAAQ,EAAE;;AAGrD,MAAM,gCACJ,eACA,mBACA,mBACG;CACH,MAAM,SAAS,cAAc;AAC7B,KAAI,CAAC,OACH,QAAO;AAGT,gCAA+B,mBAAmB,eAAe;AAEjE,MAAK,MAAM,QAAQ,mBAAmB;AACpC,MAAI,OAAQ,KAAwC,WAAW,YAAY;AACvE,QAAuC,QAAQ;AACjD;;AAEF,OAAK,YAAY,YAAY,KAAK;;AAEpC,MAAK,MAAM,QAAQ,eACjB,QAAO,aAAa,MAAM,cAAc;AAG1C,mCAAkC,OAAO,WAAW;AACpD,wBAAuB,IAAI,eAAe,eAAe,OAAO;AAChE,QAAO;;AAqBT,MAAM,4BAA4B,MAAY,SAA0B;AACtE,KAAI,EAAE,OAAO,YAAY,cAAc,gBAAgB,UAAU,KAAK,aAAa,GACjF,QAAO;CAGT,MAAM,UAAU;CAChB,MAAM,WAAW,6BAA6B,QAAQ,KAAK;AAC3D,KAAI,UAAU,SAAS,KACrB,QAAO;EACL,WAAW;EACX,OAAO,sBAAsB,SAAS;EACvC;CAGH,MAAM,iBAAiB,0BAA0B,QAAQ,KAAK;AAC9D,KAAI,gBAAgB,SAAS,KAC3B,QAAO;EACL,WAAW;EACX,OAAO,mBAAmB,eAAe;EAC1C;CAGH,MAAM,aAAa,sBAAsB,QAAQ,KAAK;AACtD,KAAI,YAAY,SAAS,KACvB,QAAO;EACL,WAAW;EACX,OAAO,SAAS,WAAW;EAC5B;AAGH,QAAO;;AAGT,MAAM,6BAA6B,UAA8C;CAC/E,MAAM,QAA6B,EAAE;AAErC,MAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;EACpD,MAAM,OAAO,MAAM;EACnB,MAAM,QAAQ,yBAAyB,MAAM,QAAQ;AACrD,MAAI,CAAC,OAAO;GACV,MAAM,gBACH,OAAO,YAAY,cAAc,gBAAgB,UAAU,KAAK,aAAa,MAC9E,kBAAmB,KAAiB,KAAK;AAC3C,OAAI,CAAC,cAAc;AACjB,UAAM,KAAK;KAAE,MAAM;KAAQ;KAAM,WAAW;KAAG,CAAC;AAChD;;GAGF,MAAM,iBAAiB,uBAAuB,IAAI,KAAgB,IAAI;GACtE,IAAI,YAAY;AAChB,UAAO,YAAY,GAAG;IACpB,MAAM,WAAW,MAAM,MAAM,SAAS;AACtC,QAAI,CAAC,YAAY,SAAS,YAAY,UACpC,QAAO;AAET,iBAAa,SAAS;AACtB,UAAM,KAAK;;AAGb,SAAM,KAAK;IACT,MAAM;IACN,QAAQ;IACR,WAAW,iBAAiB;IAC5B,OAAO,UAAU,aAAa;IAC/B,CAAC;AACF;;EAGF,IAAI,WAAW,QAAQ;AACvB,SAAO,WAAW,MAAM,QAAQ;GAC9B,MAAM,WAAW,yBAAyB,MAAM,WAAY,MAAM;AAClE,OAAI,YAAY,SAAS,cAAc,MAAM,aAAa,SAAS,UAAU,MAAM,MACjF;AAEF,eAAY;;AAEd,MAAI,YAAY,MAAM,QAAQ;AAC5B,SAAM,KAAK;IAAE,MAAM;IAAQ;IAAM,WAAW;IAAG,CAAC;AAChD;;AAGF,QAAM,KAAK;GACT,WAAW,MAAM,MAAM,QAAQ,GAAG,SAAS;GAC3C,KAAK,MAAM;GACX,MAAM;GACN,WAAW,WAAW,QAAQ;GAC9B,WAAW,MAAM;GACjB,OAAO;GACP,OAAO,MAAM;GACd,CAAC;AACF,UAAQ;;AAGV,QAAO;;AAGT,MAAM,2BAA2B,UAAkB;CACjD,MAAM,QAAQ,0BAA0B,MAAM;AAC9C,KAAI,CAAC,MACH,QAAO;AAET,QAAO,MAAM,MAAM,SAAS,KAAK,SAAS,OAAO;;AAGnD,MAAa,+BAA+B,cAAsB,cAAsB;CACtF,MAAM,eAAe,0BAA0B,aAAa;CAC5D,MAAM,YAAY,0BAA0B,UAAU;AACtD,KAAI,CAAC,gBAAgB,CAAC,aAAa,aAAa,WAAW,UAAU,OACnE,QAAO;AAGT,MAAK,IAAI,QAAQ,GAAG,QAAQ,aAAa,QAAQ,SAAS,GAAG;EAC3D,MAAM,cAAc,aAAa;EACjC,MAAM,WAAW,UAAU;AAC3B,MAAI,YAAY,SAAS,SAAS,KAChC,QAAO;AAET,MAAI,YAAY,SAAS,kBAAkB,SAAS,SAAS,gBAAgB;GAC3E,MAAM,oBAAoB,6BACxB,YAAY,QACZ,YAAY,YAAY,EACzB;GACD,MAAM,iBAAiB,6BAA6B,SAAS,QAAQ,SAAS,YAAY,EAAE;AAC5F,OACE,YAAY,UAAU,SAAS,UAC9B,wBAAwB,kBAAkB,IAAI,wBAAwB,eAAe,EAEtF,QAAO;AAET,OACE,kBAAkB,SAAS,KAC3B,eAAe,SAAS,KACxB,YAAY,cAAc,SAAS,UAEnC,KAAI,CAAC,4BAA4B,mBAAmB,eAAe;QAE/D,CAAC,6BAA6B,YAAY,QAAQ,mBAAmB,eAAe,CAEpF,QAAO;SAGT,wBAAuB,IAAI,YAAY,QAAQ,eAAe,OAAO;AAGzE;;AAEF,MAAI,YAAY,SAAS,kBAAkB,SAAS,SAAS,gBAAgB;AAC3E,OAAI,YAAY,UAAU,SAAS,SAAS,YAAY,cAAc,SAAS,UAC7E,QAAO;AAET,OAAI,YAAY,cAAc,sBAAsB;AAQlD,QAPsB,QAElB,SAAS,MAGT,mCACH,CAEC,QAAO;AAST,QAPqB,QAEjB,SAAS,MAGT,kCACH,EACiB;KAChB,MAAM,iBAAiB,SAAS;AAChC,SACE,CAAC,gCAAgC,YAAY,OAAO,YAAY,KAAK,eAAe,CAEpF,yBAAwB,YAAY,OAAO,YAAY,KAAK,eAAe;;cAGtE,YAAY,cAAc,SAAS;IAC5C,MAAM,iBAAiB,SAAS;AAChC,QAAI,CAAC,4BAA4B,YAAY,WAAW,eAAe,CACrE,yBAAwB,YAAY,OAAO,YAAY,KAAK,eAAe;;AAG/E;;AAEF,MAAI,YAAY,SAAS,UAAU,SAAS,SAAS,OACnD,QAAO;AAET,MAAI,CAAC,iBAAiB,YAAY,MAAM,SAAS,KAAK,CACpD,QAAO;;AAIX,QAAO;;AAGT,MAAM,oBAAoB,SAAe,SAAwB;AAC/D,KAAI,QAAQ,aAAa,KAAK,SAC5B,QAAO;AAGT,KAAI,QAAQ,aAAa,iBAAiB,KAAK,aAAa,eAAe;AACzE,MAAI,QAAQ,gBAAgB,KAAK,YAC/B,SAAQ,cAAc,KAAK;AAE7B,SAAO;;AAGT,KAAI,QAAQ,aAAa,oBAAoB,KAAK,aAAa,kBAAkB;EAC/E,MAAM,iBAAiB;EACvB,MAAM,cAAc;EACpB,MAAM,0BAA0B,CAAC,CAAC,0BAA0B,eAAe,KAAK;EAChF,MAAM,uBAAuB,CAAC,CAAC,0BAA0B,YAAY,KAAK;EAC1E,MAAM,0BAA0B,CAAC,CAAC,6BAA6B,eAAe,KAAK;EACnF,MAAM,uBAAuB,CAAC,CAAC,6BAA6B,YAAY,KAAK;EAC7E,MAAM,wBAAwB,CAAC,CAAC,kBAAkB,eAAe,KAAK;EACtE,MAAM,qBAAqB,CAAC,CAAC,kBAAkB,YAAY,KAAK;AAChE,MACE,2BACA,wBACA,2BACA,wBACA,yBACA,mBAEA,QAAO,eAAe,SAAS,YAAY;AAE7C,MAAI,eAAe,SAAS,YAAY,KACtC,gBAAe,OAAO,YAAY;AAEpC,SAAO;;AAGT,KAAI,CAAC,cAAc,QAAQ,IAAI,CAAC,cAAc,KAAK,IAAI,QAAQ,YAAY,KAAK,QAC9E,QAAO;AAGT,KAAI,4BAA4B,MAAM,KAAK,QAAQ,WAAW,EAAE,MAAM,KAAK,KAAK,WAAW,CAAC,EAAE;AAC5F,+BAA6B,SAAS,KAAK;AAC3C,SAAO;;AAGT,QAAO,4BAA4B,SAAS,KAAK;;AAGnD,MAAa,mCACX,OACA,KACA,cACG;AAEH,QAAO,4BADc,oBAAoB,OAAO,IAAI,EACH,UAAU;;AAc7D,MAAM,uBAAuB,OAAgB,QAAiB;CAC5D,MAAM,QAAgB,EAAE;CACxB,IAAI,SAAS,MAAM;AACnB,QAAO,UAAU,WAAW,KAAK;AAC/B,QAAM,KAAK,OAAO;AAClB,WAAS,OAAO;;AAElB,QAAO;;AAGT,MAAM,qCAAqC,cACzC,UAAU,SAAS,UAAU,MACzB,4BAA4B,oBAAoB,UAAU,OAAO,UAAU,IAAI,CAAC,mBAChF,IAAI,KAAa;AAEvB,MAAM,wCACJ,WACA,cACG,gCAAgC,WAAW,kCAAkC,UAAU,CAAC;AAE7F,MAAM,qCAAqC,UAAkB;CAC3D,MAAM,4BAAY,IAAI,KAAa;AACnC,MAAK,MAAM,SAAS,4BAA4B,MAAM,CAAC,QAAQ,CAC7D,MAAK,MAAM,eAAe,4BACxB,oBAAoB,MAAM,OAAO,MAAM,IAAI,CAC5C,CACC,WAAU,IAAI,YAAY;AAG9B,QAAO;;AAGT,MAAM,8CACJ,WACA,OACA,QAEA,gCACE,WACA,kCAAkC,oBAAoB,OAAO,IAAI,CAAC,CACnE;AAEH,MAAM,eAAe,MAAY,WAAkC;AACjE,KAAI,SAAS,OACX,QAAO,EAAE;CAGX,MAAM,OAAiB,EAAE;CACzB,IAAI,SAAsB;AAC1B,QAAO,UAAU,WAAW,MAAM;EAChC,MAAM,SAAsB,OAAO;AACnC,MAAI,CAAC,OACH,QAAO;EAET,MAAM,QAAQ,MAAM,UAAU,QAAQ,KAAK,OAAO,YAAY,OAAO;AACrE,MAAI,QAAQ,EACV,QAAO;AAET,OAAK,QAAQ,MAAM;AACnB,WAAS;;AAGX,QAAO,WAAW,OAAO,OAAO;;AAGlC,MAAM,iBAAiB,MAAY,SAAmB;CACpD,IAAI,SAAsB;AAC1B,MAAK,MAAM,SAAS,MAAM;EACxB,MAAM,aAAyD,SACzD,OAAO,cAAwC,KAAA,IACjD,KAAA;AACJ,YACG,eACE,UAAU,aACN,WAAW,KAAK,MAAM,GACrB,WAAiC,UAAU,UACnD;AACF,MAAI,CAAC,OACH,QAAO;;AAGX,QAAO;;AAGT,MAAM,kBAAkB,MAAe,WAAqC;AAC1E,KAAI,SAAS,OACX,QAAO,EAAE;CAGX,MAAM,OAAiB,EAAE;CACzB,IAAI,SAAyB;AAC7B,QAAO,UAAU,WAAW,MAAM;EAChC,MAAM,SAA6B,OAAO;AAC1C,MAAI,CAAC,OACH,QAAO;EAET,MAAM,QAAQ,MAAM,UAAU,QAAQ,KAAK,OAAO,UAAU,OAAO;AACnE,MAAI,QAAQ,EACV,QAAO;AAET,OAAK,QAAQ,MAAM;AACnB,WAAS;;AAGX,QAAO,WAAW,OAAO,OAAO;;AAGlC,MAAM,oBAAoB,MAAe,SAAmB;CAC1D,IAAI,SAAyB;AAC7B,MAAK,MAAM,SAAS,MAAM;EACxB,MAAM,WAAmD,SACnD,OAAO,YAA+B,KAAA,IACxC,KAAA;AACJ,YACG,aACE,UAAU,WACN,SAAS,KAAK,MAAM,GACnB,SAAkC,UAAU,UACpD;AACF,MAAI,CAAC,OACH,QAAO;;AAGX,QAAO;;AAGT,MAAM,wBACJ,KACA,OACA,QACyB;CACzB,MAAM,gBAAgB,IAAI;AAC1B,KAAI,CAAC,kBAAkB,cAAc,CACnC,QAAO;CAGT,MAAM,gBAAgB,oBAAoB,OAAO,IAAI;AACrD,MAAK,IAAI,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;EAC7C,MAAM,YAAY,cAAc;AAChC,MACE,cAAc,kBACb,CAAC,cAAc,UAAU,IAAI,CAAC,UAAU,SAAS,cAAc,EAEhE;EAGF,MAAM,YAAY,YAAY,WAAW,cAAc;AACvD,MAAI,CAAC,UACH;AAGF,SAAO;GACL,MAAM,CAAC,GAAG,GAAG,UAAU;GACvB,oBAAoB,mBAAmB,cAAc,GACjD,cAAc,qBACd;GACJ,cAAc,mBAAmB,cAAc,GAAG,cAAc,eAAe;GAC/E,gBAAgB,mBAAmB,cAAc,GAAG,cAAc,iBAAiB;GACpF;;AAGH,QAAO;;AAGT,MAAM,wBACJ,KACA,OACA,KACA,aACG;AACH,KAAI,CAAC,SACH;CAGF,MAAM,CAAC,eAAe,GAAG,aAAa,SAAS;CAC/C,MAAM,OAAO,oBAAoB,OAAO,IAAI,CAAC;AAC7C,KAAI,CAAC,KACH;CAGF,MAAM,aAAa,UAAU,SAAS,IAAI,cAAc,MAAM,UAAU,GAAG;AAC3E,KAAI,CAAC,kBAAkB,WAAW,CAChC;AAGF,oBAAmB,KAAK,YAAY,SAAS;;AAG/C,MAAM,sBAAsB,KAAe,YAAyB,aAA4B;CAC9F,MAAM,gBAAgB;AACpB,MAAI,CAAC,WAAW,YACd,QAAO;AAET,aAAW,MAAM,EAAE,eAAe,MAAM,CAAC;AACzC,MACE,mBAAmB,WAAW,IAC9B,SAAS,mBAAmB,QAC5B,SAAS,mBAAmB,KAAA,EAE5B,YAAW,kBACT,SAAS,gBACT,SAAS,gBAAgB,SAAS,gBAClC,SAAS,sBAAsB,KAAA,EAChC;AAEH,SAAO,IAAI,kBAAkB;;AAG/B,KAAI,SAAS,CACX;CAGF,MAAM,MAAM,IAAI;AAChB,KAAI,CAAC,IACH;CAGF,IAAI,oBAAoB;CACxB,MAAM,cAAc;AAClB,MAAI,qBAAqB,EACvB;AAEF;EACA,MAAM,YAAY;AAChB,OAAI,SAAS,CACX;AAEF,UAAO;;AAGT,MAAI,OAAO,IAAI,0BAA0B,YAAY;AACnD,OAAI,4BAA4B,KAAK,CAAC;AACtC;;AAEF,MAAI,WAAW,KAAK,GAAG;;AAGzB,QAAO;;AAGT,MAAM,wBACJ,KACA,gBACyB;CACzB,MAAM,YAAY,kBAAkB,YAAY,GAC5C,cACA,kBAAkB,IAAI,cAAc,GAClC,IAAI,gBACJ;AACN,KAAI,CAAC,UACH,QAAO;CAGT,MAAM,OAAO,eAAe,IAAI,MAAM,UAAU;AAChD,KAAI,CAAC,KACH,QAAO;AAGT,QAAO;EACL;EACA,oBAAoB,mBAAmB,UAAU,GAAG,UAAU,qBAAqB;EACnF,cAAc,mBAAmB,UAAU,GAAG,UAAU,eAAe;EACvE,gBAAgB,mBAAmB,UAAU,GAAG,UAAU,iBAAiB;EAC5E;;AAGH,MAAM,8BACJ,WACA,gBAC+B;AAC/B,KAAI,CAAC,UAAU,IACb,QAAO;CAGT,MAAM,WAAW,qBAAqB,UAAU,KAAK,YAAY;AACjE,KAAI,CAAC,SACH,QAAO;AAET,QAAO,EACL,UACD;;AAGH,MAAM,iCACJ,WACA,YACG;AACH,KAAI,CAAC,UAAU,IACb,QAAO;CAGT,MAAM,gBAAgB,UAAU,IAAI;AACpC,KAAI,CAAC,kBAAkB,cAAc,CACnC,QAAO;AAET,KACE,kBAAkB,UAAU,IAAI,QAChC,CAAC,cAAc,eACf,CAAC,UAAU,IAAI,KAAK,SAAS,cAAc,CAE3C,QAAO;CAGT,MAAM,aAAa,eAAe,UAAU,IAAI,MAAM,cAAc;AACpE,KAAI,CAAC,WACH,QAAO;AAGT,KAAI,WAAW,WAAW,QAAQ,SAAS,KAAK,OAC9C,QAAO;AAGT,QAAO,WAAW,MAAM,OAAO,aAAa,UAAU,QAAQ,SAAS,KAAK,UAAU;;AAGxF,MAAM,uBAAuB,WAA6B,YAAwC;AAChG,KAAI,CAAC,WAAW,CAAC,UAAU,IACzB;AAEF,KAAI,8BAA8B,WAAW,QAAQ,CACnD;CAGF,MAAM,aAAa,iBAAiB,UAAU,IAAI,MAAM,QAAQ,SAAS,KAAK;AAC9E,KAAI,CAAC,kBAAkB,WAAW,CAChC;AAGF,oBAAmB,UAAU,KAAK,YAAY,QAAQ,SAAS;;AAGjE,MAAM,mBAAmB;AACzB,MAAM,kCAAkC;AAExC,MAAM,kCAAkC,UACtC,UAAU,SAAS,UAAU,KAAA,KAAa,UAAU,OAAO,OAAO,OAAO,MAAM;AAEjF,MAAM,eAAe,aAAqB;CACxC,MAAM,UAAU,SAAS,MAAM,iBAAiB;AAChD,KAAI,CAAC,QACH,QAAO;CAET,MAAM,CAAC,OAAO,GAAG,QAAQ,QAAQ;AACjC,QAAO,GAAG,MAAM,aAAa,GAAG,KAAK,KAAK,GAAG;;AAG/C,MAAM,oBAAoB;AAC1B,MAAM,oBAAoB;AAE1B,MAAM,gBAAgB,OAAe,SAA0B;CAC7D,MAAM,gBAAgB,SAAS,SAAS,oBAAoB;CAC5D,MAAM,aAAa,MAAM,OAAO,cAAc;AAC9C,KAAI,aAAa,EACf,QAAO;CAGT,IAAI,SAAS;CACb,IAAI,YAAY;AAChB,MAAK,IAAI,QAAQ,YAAY,QAAQ,MAAM,QAAQ,SAAS,GAAG;EAC7D,IAAI,UAAyB;AAC7B,UAAQ,MAAM,WAAW,MAAM,EAA/B;GACE,KAAK;AACH,cAAU,SAAS,SAAS,WAAW;AACvC;GACF,KAAK;AACH,cAAU;AACV;GACF,KAAK;AACH,cAAU,SAAS,SAAS,UAAU;AACtC;GACF,KAAK;AACH,cAAU;AACV;GACF,KAAK;AACH,cAAU;AACV;;AAEJ,MAAI,CAAC,QACH;AAEF,YAAU,MAAM,MAAM,WAAW,MAAM;AACvC,YAAU;AACV,cAAY,QAAQ;;AAEtB,QAAO,SAAS,MAAM,MAAM,UAAU;;AAGxC,MAAM,cAAc,UAAkB,aAAa,OAAO,OAAO;AAEjE,MAAM,cAAc,UAAkB,aAAa,OAAO,OAAO;AAEjE,MAAM,iBAAiB,MAAc,UAAmB;AACtD,KAAI,UAAU,SAAS,UAAU,KAAA,KAAa,UAAU,KACtD,QAAO;AAET,KAAI,UAAU,KACZ,QAAO,IAAI;AAEb,QAAO,IAAI,KAAK,IAAI,WAAW,OAAO,MAAM,CAAC,CAAC;;AAGhD,MAAM,qBAAqB,WAAqD;CAC9E,IAAI,SAAS;AACb,MAAK,IAAI,QAAQ,GAAG,QAAQ,OAAO,QAAQ,SAAS,EAClD,WAAU,iBAAiB,OAAO,OAAsC;AAE1E,QAAO;;AAGT,MAAM,0BAA0B,UAA2B;AACzD,KAAI,UAAU,SAAS,UAAU,QAAQ,UAAU,KAAA,EACjD,QAAO;AAET,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,kBAAkB,MAAkD;AAE7E,KAAI,OAAO,UAAU,YAAY,OAAO,UAAU,YAAY,OAAO,UAAU,UAC7E,QAAO,WAAW,OAAO,MAAM,CAAC;AAElC,KAAI,cAAc,MAAM,CACtB,QAAO,sBAAsB,MAAM;AAErC,KAAI,iBAAiB,MAAM,CACzB,QAAO,6BAA6B,MAAM;AAE5C,KAAI,YAAY,MAAM,EAAE;EACtB,MAAM,eAAe,iBAAiB,qBAAqB,EAAE,MAAM;AACnE,SAAO,eAAe,iBAAiB,aAA4B,GAAG;;AAExE,QAAO,iBAAiB,MAAqB;;AAG/C,MAAM,yBAAyB,aAA8B;CAC3D,IAAI,SAAS,SAAS,QAAQ,MAAM;AACpC,MAAK,IAAI,QAAQ,GAAG,QAAQ,SAAS,OAAO,QAAQ,SAAS,GAAG;EAC9D,MAAM,QAAQ,SAAS,OAAO;AAC9B,YAAU,eAAe,MAAM,GAC3B,cAAc,MAAM,MAAM,MAAM,MAAM,GACtC,uBAAuB,MAAM;AACjC,YAAU,SAAS,QAAQ,QAAQ,MAAM;;AAE3C,QAAO;;AAGT,MAAM,qBAAqB,UAAoC;CAC7D,IAAI,UAAU;AACd,QACE,OAAO,YAAY,cACnB,CAAC,YAAY,QAAQ,IACrB,CAAC,iBAAiB,QAAQ,IAC1B,CAAC,uBAAuB,QAAQ,CAEhC,WAAU,SAAS;AAErB,QAAO;;AAGT,MAAM,yBAAyB,cAAgC;CAC7D,MAAM,QAAQ,iBAAiB;AAC/B,KAAI,CAAC,MACH,QAAO;EACL,YAAY,UAAU;EACtB,UAAU;EACX;AAEH,QAAO;EACL,YAAY,MAAM;EAClB,UAAU,MAAM,UAAU;EAC3B;;AAGH,MAAM,wBACJ,WACA,eACW;CACX,MAAM,UAAU,cAAc,WAAW,WAAW,UAAU,CAAC;AAC/D,QAAO,GAAG,WAAW,OAAO,GAAG;;AAGjC,MAAM,6BAA6B,UACjC,aAAa,MAAM,IAAI,YAAY,MAAM;AAE3C,MAAM,cAAc,UAClB,CAAC,CAAC,SAAS,OAAO,UAAU,YAAa,MAAmB,YAAY;AAE1E,MAAM,eAAe,UACnB,CAAC,CAAC,SAAS,OAAO,UAAU,YAAa,MAAoB,aAAa;AAE5E,MAAa,oBAAoB,SAAkB,WAAmB,UAA4B;CAChG,MAAM,aAAa,0BAA0B,MAAM;AACnD,KAAI,CAAC,WACH,QAAO;CAGT,MAAM,YAAY,qBAAqB;AACvC,KAAI,CAAC,UACH,QAAO;AAGT,SAAQ,aAAa,YAAY,IAAI,UAAU,kBAAkB;AACjE,SAAQ,aAAa,YAAY,aAAa,qBAAqB,WAAW,WAAW,CAAC;AAC1F,8BAA6B,SAAS,WAAW;AACjD,8BAA6B,SAAS,YAAY,YAAY;AAC9D,QAAO;;AAGT,MAAM,gCAAgC,SAA8B;CAClE,MAAM,QAAQ,iBAAiB;CAC/B,MAAM,QAAQ,2BAA2B,KAAK,aAAa,KAAK,MAAM,KAAK,YAAY,QAAQ;CAC/F,MAAM,MAAM,2BAA2B,KAAK,aAAa,KAAK,MAAM,KAAK,YAAY,MAAM;AAC3F,KAAI,OAAO,UAAU,OAAO,KAAK,eAAe,MAAM,gBAAgB,iBACpE,QAAO,OAAO,MAAM,SAAS,IAAI;AAEnC,QAAO,OAAO,MAAM,KAAK,iBAAiB,KAAK,OAAsB,CAAC,MAAM,IAAI;;AAGlF,MAAM,4BAA4B,OAAe,QAAkC;AAGjF,QAAO,OAFO,uBAAuB,KAAK,QAAQ,CAE9B,KAAK,MAAM,MADnB,uBAAuB,KAAK,MAAM,CACL;;AAG3C,MAAM,qBACJ,OACA,MACA,UAEA,MAAM,MACF,MAAM,IAAI,MAAM,MAAM,GACtB,OAAO,SAAS,YAAY,OAAO,SAAS,YAAY,OAAO,SAAS,WACtE,OACA;AAER,MAAM,wBAAwB,UAAoC;CAChE,MAAM,WAAW,kBAAkB,MAAM;AACzC,KAAI,CAAC,eAAe,SAAS,IAAI,SAAS,QAAQ,QAAQ,SAAS,QAAQ,KAAA,EACzE,QAAO;AAET,QAAO;EACL,GAAG;EACH,KAAK,KAAA;EACN;;AAGH,MAAM,qBAAwB,UAAqC;CACjE,MAAM,SAAS,CAAC,MAAM,OAAQ,MAAM,YAAY,OAAQ,MAAM;AAC9D,QAAO,OAAO,WAAW,aACpB,OAAyC,MAAM,KAAK,GACrD;;AAGN,MAAM,0BAA6B,UAA+B;AAChE,KAAI,MAAM,IAAI,WAAW,EACvB,QAAO,iBAAkB,MAAM,YAAY,KAAqB;CAGlE,IAAI,SAAS;AACb,MAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,IAAI,QAAQ,SAAS,GAAG;EACxD,MAAM,OAAO,MAAM,IAAI;AACvB,YAAU,yBACR,iBAAiB,qBAAqB,MAAM,GAAG,MAAM,MAAM,CAAC,CAAC,EAC7D,kBAAkB,OAAO,MAAM,MAAM,CACtC;;AAEH,QAAO;;AAGT,MAAM,+BAA+B,MAA2B,cAAgC;AAC9F,KAAI,CAAC,UAAU,IACb,OAAM,IAAI,MAAM,wCAAwC;CAE1D,MAAM,QAAQ,iBAAiB;CAE/B,MAAM,QAAQ,UAAU,IAAI,cAC1B,2BAA2B,KAAK,aAAa,KAAK,MAAM,KAAK,YAAY,QAAQ,CAClF;CACD,MAAM,MAAM,UAAU,IAAI,cACxB,2BAA2B,KAAK,aAAa,KAAK,MAAM,KAAK,YAAY,MAAM,CAChF;AACD,KAAI,OAAO,UAAU,OAAO,KAAK,eAAe,MAAM,gBAAgB,iBACpE,QAAO,CAAC,OAAO,IAAI;AAErB,QAAO;EAAC;EAAO,GAAG,uBAAuB,KAAK,QAAQ,UAAU;EAAE;EAAI;;AAGxE,MAAM,iCACJ,OACA,UAEA,wBAAwB,OAAO,MAAM,aACnC,iBAAkB,MAAM,YAAY,KAAqC,CAC1E;AAEH,MAAM,gCACJ,OACA,OACA,cAEA,wBAAwB,OAAO,MAAM,aACnC,kBAAmB,MAAM,YAAY,MAAsC,UAAU,CACtF;AAEH,MAAM,oBAAoB,qBAA0D;AAClF,KAAI,MAAM,QAAQ,iBAAiB,CACjC,QAAO,kBAAkB,iBAAiB;CAG5C,MAAM,WAAW,kBAAkB,iBAAgC;AACnE,KAAI,aAAa,SAAS,aAAa,QAAQ,aAAa,KAAA,EAC1D,QAAO;AAET,KAAI,MAAM,QAAQ,SAAS,CACzB,QAAO,iBAAiB,SAAS;AAEnC,KACE,OAAO,aAAa,YACpB,OAAO,aAAa,YACpB,OAAO,aAAa,UAEpB,QAAO,WAAW,OAAO,SAAS,CAAC;AAErC,KAAI,YAAY,SAAS,CACvB,QAAO,iBAAiB,kBAAkB,SAAS,CAAC;AAEtD,KAAI,WAAW,SAAS,CACtB,QAAO,uBAAuB,SAAS;AAEzC,KAAI,cAAc,SAAS,CACzB,QAAO,sBAAsB,SAAS;AAExC,KAAI,iBAAiB,SAAS,CAC5B,QAAO,6BAA6B,SAAS;AAE/C,KAAI,YAAY,SAAS,EAAE;EACzB,MAAM,eAAe,iBAAiB,qBAAqB,EAAE,SAAS;AACtE,SAAO,eAAe,iBAAiB,aAA4B,GAAG;;AAExE,KAAI,CAAC,eAAe,SAAS,CAC3B,QAAO;AAGT,KAAI,eAAe,SAAS,KAAK,EAAE;EACjC,MAAM,WAAW,gCAAgC,SAAS,MAAuB;AACjF,SAAO,SAAS,QAAQ,QAAQ,SAAS,QAAQ,KAAA,IAC7C,WACA,yBAAyB,UAAU,SAAS,IAAI;;AAGtD,KAAI,OAAO,SAAS,SAAS,YAAY;EACvC,MAAM,eAAe,uBAAuB,SAAS,KAAK;AAC1D,MAAI,aACF,QAAO,8BAA8B,aAAa,OAAO,cAAc,SAAS,MAAM,CAAC;EAGzF,MAAM,YAAY,qBAAqB;EACvC,MAAM,cAAc,SAAS;EAC7B,MAAM,OAAO,iBAAiB,YAAY;AAC1C,MAAI,CAAC,QAAQ,CAAC,WAAW;GACvB,MAAM,WAAW,iBAAiB,YAAY,SAAS,MAAM,CAAC;AAC9D,UAAO,SAAS,QAAQ,QAAQ,SAAS,QAAQ,KAAA,IAC7C,WACA,yBAAyB,UAAU,SAAS,IAAI;;EAGtD,MAAM,iBAAiB,cAAc,SAAS,MAAM;EACpD,MAAM,WAAW,sBAAsB,UAAU;EACjD,MAAM,cAAc,kBAAkB,WAAW,SAAS,UAAU,SAAS,WAAW;EACxF,MAAM,YAAY,0BAChB,WACA,aACA,KAAK,QACL,SAAS,SACV;AACD,YAAU,UAAU,cAAc,WAAW,KAAK,UAAU,CAAC;AAC7D,YAAU,gBAAgB,KAAK,kBAAkB;AACjD,YAAU,QAAQ;AAClB,YAAU,kBAAkB,KAAK,mBAAmB;EACpD,MAAM,QAAQ,YAAY,WAAW,WAAW,MAAM;AACtD,8BAA4B,WAAW,UAAU,GAAG;EACpD,MAAM,cAAc,kBAAkB,aAAa,MAAM,SAAS,MAAM;EAExE,MAAM,OAAO,UAAU,aAAa,iBAAiB,YAAY,YAAY,CAAC,CAAC;AAC/E,yBAAuB,WAAW,WAAW,MAAM,cAAc;AACjE,wBAAsB,WAAW,WAAW,MAAM,YAAY;EAC9D,MAAM,WAAW,YAAY,YAAY,WAAW,gCAAgC,MAAM,GAAG,KAAK,WAAW,YAAY;AACzH,SAAO,SAAS,QAAQ,QAAQ,SAAS,QAAQ,KAAA,IAC7C,WACA,yBAAyB,UAAU,SAAS,IAAI;;CAGtD,MAAM,YAAsB,EAAE;CAC9B,MAAM,YAAY,qBAAqB;CACvC,MAAM,QAAQ,iBAAiB;CAC/B,IAAI,eAAe;CACnB,IAAI,YAA2B;AAE/B,KAAI,SAAS,gBAAgB,MAAM,IAAI,SAAS,SAAS,QACvD,WAAU,KAAK,GAAG,kBAAkB,IAAI,WAAW,MAAM,UAAU,QAAQ,CAAC,GAAG;AAGjF,MAAK,MAAM,QAAQ,SAAS,OAAO;AACjC,MAAI,CAAC,OAAO,OAAO,SAAS,OAAO,KAAK,CACtC;AAEF,MAAI,SAAS,WACX;EAGF,MAAM,YAAY,YAAY,KAAK;EACnC,MAAM,QAAQ,SAAS,MAAM;AAE7B,MAAI,SAAS,iBAAiB;GAC5B,MAAM,WAAW,oBAAoB,MAAM;AAC3C,OAAI,CAAC,SACH;AAEF,aAAU,KAAK,GAAG,gBAAgB,IAAI,WAAW,SAAS,CAAC,GAAG;GAC9D,MAAM,eAAe,wBAAwB,MAAM;AACnD,OAAI,iBAAiB,KAAA,KAAa,iBAAiB,KACjD,WAAU,KAAK,UAAU,WAAW,OAAO,aAAa,CAAC,CAAC,GAAG;AAE/D;;AAGF,MAAI,SAAS,mBAAmB;GAC9B,MAAM,WAAW,oBAAoB,MAAM;AAC3C,OAAI,CAAC,SACH;AAEF,aAAU,KAAK,GAAG,kBAAkB,IAAI,WAAW,SAAS,CAAC,GAAG;AAChE,OAAI,wBAAwB,MAAM,CAChC,WAAU,KAAK,UAAU;AAE3B;;AAGF,MAAI,WAAW;GACb,MAAM,YAAY,0BAA0B,MAAM;AAClD,OAAI,CAAC,aAAa,CAAC,UACjB;AAEF,aAAU,KAAK,cAAc,UAAU,gBAAgB,GAAG;AAC1D,aAAU,KACR,YAAY,UAAU,IAAI,WAAW,qBAAqB,WAAW,UAAU,CAAC,CAAC,GAClF;AACD;;AAGF,MAAI,SAAS,OAAO;GAClB,MAAM,WAAW,eAAe,MAAM;AACtC,OAAI,SACF,WAAU,KAAK,GAAG,gBAAgB,IAAI,WAAW,SAAS,CAAC,GAAG;AAEhE;;AAGF,MAAI,SAAS,iCAAiC;AAC5C,kBAAe;AACf,eAAY,+BAA+B,MAAM;AACjD;;AAGF,MAAI,UAAU,SAAS,UAAU,KAAA,KAAa,UAAU,KACtD;AAGF,MAAI,SAAS,SAAS,UAAU,SAAS,gBACvC;AAGF,MAAI,UAAU,MAAM;AAClB,aAAU,KAAK,KAAK;AACpB;;AAGF,YAAU,KAAK,GAAG,KAAK,IAAI,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;;AAG1D,KAAI,SAAS,SAAS,UAAU,UAC9B,WAAU,KAAK,2BAAyB;CAG1C,IAAI,eAAe,aAAa;AAChC,KAAI,CAAC,cAAc;EACjB,MAAM,WAAW,SAAS,MAAM;AAChC,MAAI,MAAM,QAAQ,SAAS,CACzB,MAAK,MAAM,SAAS,SAClB,iBAAgB,iBAAiB,MAAM;MAGzC,iBAAgB,iBAAiB,SAAwB;;CAI7D,MAAM,WACJ,SAAS,SAAA,uBACL,eACA,IAAI,SAAS,OAAO,UAAU,SAAS,IAAI,IAAI,UAAU,KAAK,IAAI,KAAK,GAAG,GAAG,aAAa,IACxF,SAAS,KACV;AACP,QAAO,SAAS,QAAQ,QAAQ,SAAS,QAAQ,KAAA,IAC7C,WACA,yBAAyB,UAAU,SAAS,IAAI;;AAGtD,MAAM,qBAAqB,KAAe,YAAoB,IAAI,cAAc,QAAQ;AAExF,MAAM,0BACJ,aACA,OACA,WACA,MACA,aACW;AACX,KAAI,CAAC,UAAU,IACb,OAAM,IAAI,MAAM,wCAAwC;CAE1D,MAAM,OAAO,iBAAiB,YAAY;AAC1C,KAAI,CAAC,KACH,QAAO,kBAAkB,YAAa,YAAY,MAAkC,EAAE,UAAU;CAGlG,MAAM,WAAW,sBAAsB,UAAU;CACjD,MAAM,cAAc,kBAAkB,WAAW,SAAS,UAAU,SAAS,WAAW;CACxF,MAAM,WAAW,UAAU,WAAW,IAAI,YAAY;CACtD,MAAM,gBAAgB,CAAC,CAAC,YAAY,SAAS,WAAW,KAAK;CAC7D,MAAM,YAAY,0BAChB,WACA,aACA,KAAK,QACL,SAAS,SACV;CACD,MAAM,YAAY,UAAU;CAC5B,MAAM,sBACF,UAAU,YAAY,UAAU,SAA6C;AACjF,WAAU,SAAS,SAAS;AAC5B,KAAI,CAAC,YAAY,cACf,+BAA8B,WAAW,WAAW,KAAK;AAE3D,WAAU,gBAAgB,KAAK,kBAAkB;AACjD,WAAU,QAAQ;AAClB,WAAU,WAAW,YAAY;AACjC,WAAU,kBAAkB,KAAK,mBAAmB;CACpD,MAAM,cAAc,iBAAiB;CACrC,MAAM,+BAA+B,aAAa,gBAAgB,0BAA0B;CAC5F,MAAM,gBAAgB,UAAU;CAChC,MAAM,cAAc,UAAU;CAO9B,MAAM,0BALJ,iBACA,CAAC,2BACC,qBACE,YAAY,SAA6C,KAC5D,IAC8C,CAAC,aAAa,CAAC,CAAC,iBAAiB,CAAC,CAAC;AACpF,KAAI,SAAS,YAAY,aAAa,iBAAiB,eAAe,CAAC,yBAAyB;EAC9F,MAAM,QAAQ,UAAU,IAAI,cAAc,QAAQ,YAAY,QAAQ;EACtE,MAAM,MAAM,UAAU,IAAI,cAAc,QAAQ,YAAY,MAAM;AAEhE,QAIA,oCAAoC;AAEpC,QAIA,qCAAqC;AAEvC,MAAI,YACF,MAAK,MAAM,gBAAgB,gCAAgC,WAAW,CAAC,YAAY,CAAC,CAClF,aAAY,mBAAmB,IAAI,aAAa;AAIpD,SAAO,CAAC,OAAO,IAAI;;CAErB,MAAM,+BACJ,CAAC,iBAAiB,CAAC,cAAc,OAAO,0BAA0B,OAAO,mBAAmB;AAC9F,KAAI,CAAC,6BACH,6BAA4B,UAAU;CAExC,MAAM,QAAQ,YAAY,WAAW,WAAW,MAAM;EACpD,mBAAmB,gCAAgC,UAAU;EAC7D,kBAAkB;EAClB,wBAAwB;EACzB,CAAC;AACF,6BAA4B,WAAW,YAAY;CACnD,MAAM,iBAAiB,qBAAqB,WAAW,YAAY;CACnE,MAAM,QAAQ,UAAU,IAAI,cAAc,QAAQ,YAAY,QAAQ;CACtE,MAAM,MAAM,UAAU,IAAI,cAAc,QAAQ,YAAY,MAAM;AAEhE,OAIA,oCAAoC;AAEpC,OAIA,qCAAqC;AACvC,KAAI,CAAC,iBAAiB,CAAC,aAAa;AAClC,YAAU,QAAQ;AAClB,YAAU,MAAM;;CAElB,MAAM,cAAc,kBAAkB,aAAa,MAAM,YAAY,MAAM;CAC3E,IAAI;AACJ,KAAI;AACF,aAAW,UAAU,aAAa,eAAe,YAAY,YAAY,EAAE,UAAU,CAAC;UAC/E,OAAO;AACd,qBAAmB,6BAA6B;AAChD,MAAI,qBAAqB,MAAM,IAAI,aAAa;AAC9C,eAAY,mBAAmB,IAAI,YAAY;AAC/C,QAAK,MAAM,gBAAgB,MAAM,mBAC/B,aAAY,mBAAmB,IAAI,aAAa;;AAGpD,QAAM;;AAER,oBAAmB,6BAA6B;AAChD,wBAAuB,WAAW,WAAW,MAAM,cAAc;AACjE,uBAAsB,WAAW,WAAW,MAAM,YAAY;CAC9D,MAAM,uBACJ,MAAM,gBAAgB,oBAAoB,iBAAiB,cACvD,2CAA2C,WAAW,eAAe,YAAY,mBACjF,IAAI,KAAa;CACvB,MAAM,kBAAkB,IAAI,IAAI;EAC9B,GAAG,MAAM;EACT,GAAG;EACH,GAAG,qCAAqC,WAAW,UAAU;EAC9D,CAAC;AACF,wBAAuB,WAAW,aAAa,gBAAgB;AAE/D,MAAK,MAAM,gBAAgB,gBAAgB;AACzC,MAAI,gBAAgB,IAAI,aAAa,CACnC;AAEF,8BAA4B,WAAW,aAAa;;AAGtD,KAAI,aAAa;AACf,cAAY,mBAAmB,IAAI,YAAY;AAC/C,OAAK,MAAM,gBAAgB,gBACzB,aAAY,mBAAmB,IAAI,aAAa;;AAIpD,wBAAuB,WAAW,WAAW,MAAM,eAAe;AAClE,+BAA8B,UAAU;AACxC,qCAAoC,UAAU;AAE9C,QAAO;EAAC;EAAO,GAAG,+BAA+B,OAAO,UAAU;EAAE,GAAG;EAAU;EAAI;;AAGvF,MAAM,2BACJ,KACA,OACA,QACW;CACX,IAAI,cAAc,uBAAuB,KAAK,QAAQ,CAAC;CACvD,GAAG;CACH,IAAI,cAAc,uBAAuB,KAAK,MAAM,CAAC;CACtD;AAED,MAAM,yBAA4B,OAAoB,cAAwC;AAC5F,KAAI,MAAM,IAAI,WAAW,EACvB,QAAO,kBAAmB,MAAM,YAAY,MAAsB,UAAU;CAG9E,MAAM,QAAgB,EAAE;AACxB,MAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,IAAI,QAAQ,SAAS,GAAG;EACxD,MAAM,OAAO,MAAM,IAAI;AACvB,QAAM,KACJ,GAAG,wBACD,UAAU,KACV,kBAAkB,qBAAqB,MAAM,GAAG,MAAM,MAAM,CAAC,EAAE,UAAU,EACzE,kBAAkB,OAAO,MAAM,MAAM,CACtC,CACF;;AAEH,QAAO;;AAGT,MAAM,oBACJ,SACA,MACA,OACA,cACG;AACH,KAAI,SAAS,iBAAiB;EAC5B,MAAM,WAAW,oBAAoB,MAAM;AAC3C,MAAI,SACF,SAAQ,aAAa,iBAAiB,SAAS;AAEjD,MAAI,WAAW,QACX,SAAuE,QAAQ,OAC/E,wBAAwB,MAAM,IAAI,GACnC;AAEH;;AAGF,KAAI,SAAS,mBAAmB;EAC9B,MAAM,WAAW,oBAAoB,MAAM;AAC3C,MAAI,SACF,SAAQ,aAAa,mBAAmB,SAAS;AAEnD,MAAI,uBAAuB,QAAQ,CACjC,SAAQ,UAAU,QAAQ,wBAAwB,MAAM,CAAC;AAE3D;;CAGF,MAAM,YAAY,YAAY,KAAK;AACnC,KAAI,WAAW;EACb,MAAM,YAAY,0BAA0B,MAAM;AAClD,MAAI,CAAC,UACH;AAEF,UAAQ,aAAa,YAAY,IAAI,UAAU,kBAAkB;AACjE,UAAQ,aAAa,YAAY,aAAa,qBAAqB,WAAW,UAAU,CAAC;AACzF;;AAGF,KAAI,SAAS,OAAO;AAClB,uBAAqB,SAAS,MAAM;AACpC,mBAAiB,OAAO,SAAS,UAAU;AAC3C;;AAGF,KAAI,SAAS,iCAAiC;EAC5C,MAAM,OAAO,+BAA+B,MAAM;AAClD,MAAI,SAAS,KACX,SAAQ,YAAY;AAEtB;;AAGF,KAAI,UAAU,SAAS,UAAU,KAAA,KAAa,UAAU,KACtD;AAGF,KAAI,SAAS,SAAS;AACpB,UAAQ,YAAY,OAAO,MAAM;AACjC;;AAGF,KAAI,SAAS,WAAW,cAAc,MAAM,EAAE;AAC5C,UAAQ,aACN,SACA,OAAO,QAAQ,MAAM,CAClB,KAAK,CAAC,WAAW,gBAAgB,GAAG,UAAU,IAAI,aAAa,CAC/D,KAAK,KAAK,CACd;AACD;;AAGF,KAAI,SAAS,WAAW,WAAW,QAC/B,SAAuE,QAAQ,OAAO,MAAM;AAEhG,KAAI,SAAS,aAAa,uBAAuB,QAAQ,CACvD,SAAQ,UAAU,QAAQ,MAAM;AAGlC,KAAI,UAAU,MAAM;AAClB,UAAQ,aAAa,MAAM,GAAG;AAC9B;;AAGF,SAAQ,aAAa,MAAM,OAAO,MAAM,CAAC;;AAG3C,MAAa,qBACX,kBACA,cACW;AACX,KAAI,CAAC,UAAU,IACb,OAAM,IAAI,MAAM,wCAAwC;AAE1D,KAAI,MAAM,QAAQ,iBAAiB,CACjC,QAAO,iBAAiB,SAAS,UAAU,kBAAkB,OAAO,UAAU,CAAC;CAGjF,MAAM,WAAW,kBAAkB,iBAAgC;AACnE,KAAI,aAAa,SAAS,aAAa,QAAQ,aAAa,KAAA,EAC1D,QAAO,EAAE;AAEX,KAAI,MAAM,QAAQ,SAAS,CACzB,QAAO,kBAAkB,UAAU,UAAU;AAE/C,KACE,OAAO,aAAa,YACpB,OAAO,aAAa,YACpB,OAAO,aAAa,UAEpB,QAAO,CAAC,UAAU,IAAI,eAAe,OAAO,SAAS,CAAC,CAAC;AAEzD,KAAI,YAAY,SAAS,CACvB,QAAO,kBAAkB,kBAAkB,SAAS,EAAE,UAAU;AAElE,KAAI,WAAW,SAAS,CACtB,QAAO,sBAAsB,UAAU,UAAU;AAEnD,KAAI,OAAO,SAAS,eAAe,oBAAoB,MAAM;AAC3D,mCAAiC,SAAS;AAC1C,SAAO,CAAC,SAAS;;AAEnB,KAAI,iBAAiB,SAAS,CAC5B,QAAO,4BAA4B,UAAU,UAAU;AAEzD,KAAI,YAAY,SAAS,EAAE;EACzB,MAAM,eAAe,iBAAiB,WAAW,SAAS;AAC1D,SAAO,eAAe,kBAAkB,cAA6B,UAAU,GAAG,EAAE;;AAEtF,KAAI,CAAC,eAAe,SAAS,CAC3B,QAAO,EAAE;CAGX,IAAI;AAEJ,KAAI,eAAe,SAAS,KAAK,CAC/B,SAAQ,+BAA+B,SAAS,OAAwB,WAAW,SAAS;UACnF,OAAO,SAAS,SAAS,YAAY;EAC9C,MAAM,eAAe,uBAAuB,SAAS,KAAK;AAC1D,MAAI,aACF,SAAQ,6BACN,aAAa,OACb,cAAc,SAAS,MAAM,EAC7B,UACD;OACI;GACL,MAAM,cAAc,SAAS;AAC7B,OAAI,iBAAiB,SAAS,KAAK,CACjC,SAAQ,2BACN,uBACE,aACA,cAAc,SAAS,MAAM,EAC7B,WACA,UACA,SAAS,MACV,CACF;OAED,SAAQ,uBACN,aACA,SAAS,OACT,WACA,UACA,SAAS,MACV;;YAGI,SAAS,SAAA,sBAAmB;EACrC,MAAM,WAAW,SAAS,MAAM;AAChC,UAAQ,MAAM,QAAQ,SAAS,GAC3B,SAAS,SAAS,UAAuB,kBAAkB,OAAO,UAAU,CAAC,GAC7E,kBAAkB,UAAyB,UAAU;QACpD;EACL,MAAM,UAAU,kBAAkB,UAAU,KAAK,SAAS,KAAK;EAC/D,MAAM,QAAQ,iBAAiB;AAC/B,MAAI,SAAS,gBAAgB,MAAM,IAAI,SAAS,SAAS,QACvD,SAAQ,aAAa,mBAAmB,MAAM,UAAU,QAAQ;EAElE,IAAI,eAAe;AACnB,OAAK,MAAM,CAAC,MAAM,eAAe,OAAO,QACtC,OAAO,0BAA0B,SAAS,MAAM,CACjD,EAAoC;AACnC,OAAI,SAAS,WACX;GAEF,MAAM,QAAQ,WAAW,MAAM,WAAW,IAAI,KAAK,SAAS,MAAM,GAAG,WAAW;AAChF,OAAI,SAAS,SAAS,UAAU,SAAS,gBACvC;AAEF,OAAI,SAAS,gCACX,gBAAe;AAEjB,oBAAiB,SAAS,MAAM,OAAO,UAAU;;AAGnD,MAAI,cAAc;AAChB,oCAAiC,QAAQ;AACzC,WAAQ,CAAC,QAAQ;SACZ;GACL,MAAM,WAAW,SAAS,MAAM;GAChC,MAAM,aAAa,MAAM,QAAQ,SAAS,GACtC,SAAS,SAAS,UAAuB,kBAAkB,OAAO,UAAU,CAAC,GAC7E,kBAAkB,UAAyB,UAAU;AACzD,QAAK,MAAM,SAAS,WAClB,SAAQ,YAAY,MAAM;AAG5B,oCAAiC,QAAQ;AACzC,WAAQ,CAAC,QAAQ;;;AAIrB,QAAO,SAAS,QAAQ,QAAQ,SAAS,QAAQ,KAAA,IAC7C,QACA,wBAAwB,UAAU,KAAK,OAAO,SAAS,IAAI;;AAGjE,MAAM,2BACJ,SACoD;CACpD,MAAM,SAAS,KAAK,cAAc,iBAAiB,MAAM,iBAAiB;CAC1E,MAAM,6BAAa,IAAI,KAAiD;AAExE,QAAO,OAAO,UAAU,EAAE;EACxB,MAAM,OAAO,OAAO;AAIpB,MAAI,EAFF,KAAK,aAAa,oBACjB,OAAO,YAAY,eAAe,gBAAgB,SAEnD;EAEF,MAAM,UAAW,KAAiB,KAAK,MAAM,0BAA0B;AACvE,MAAI,CAAC,QACH;EAEF,MAAM,GAAG,IAAI,QAAQ;EACrB,MAAM,WAAW,WAAW,IAAI,GAAG,IAAI,EAAE;AACzC,MAAI,SAAS,QACX,UAAS,QAAQ;MAEjB,UAAS,MAAM;AAEjB,aAAW,IAAI,IAAI,SAAS;;AAG9B,QAAO;;AAGT,MAAM,aAAa,OACjB,WACA,aACiC;CACjC,MAAM,WAAW,0BAA0B,UAAU,CAAC,IAAI,SAAS;AACnE,KAAI,SACF,QAAO;CAET,MAAM,WAAW,UAAU,QAAQ,IAAI,SAAS;AAChD,KAAI,UAAU;EACZ,MAAM,SAAS,MAAM;AACrB,4BAA0B,UAAU,CAAC,IAAI,UAAU,OAAO;AAC1D,SAAO;;CAGT,MAAM,MAAM,UAAU,QAAQ,IAAI,SAAS;AAC3C,KAAI,CAAC,IACH,OAAM,IAAI,MAAM,0BAA0B,SAAS,GAAG;CAGxD,MAAM,SAAU;;EAA0B;EAAsC,MAAM,WAAW;AAC/F,4BAA0B,UAAU,CAAC,IAAI,UAAU,OAAO;AAC1D,SAAO;GACP;AACF,WAAU,QAAQ,IAAI,UAAU,OAAO;AACvC,QAAO;;AAGT,MAAM,kBAAkB,OAAgB,cAAwC;AAC9E,KAAI,CAAC,UAAU,IACb,OAAM,IAAI,MAAM,wCAAwC;CAG1D,IAAI,WAAW;AACf,QAAO,OAAO,aAAa,WACzB,YAAW,UAAU;AAGvB,KAAI,MAAM,QAAQ,SAAS,CACzB,QAAO,SAAS,SAAS,UAAU,eAAe,OAAO,UAAU,CAAC;AAEtE,KAAI,aAAa,QAAQ,aAAa,KAAA,KAAa,aAAa,MAC9D,QAAO,CAAC,UAAU,IAAI,cAAc,gBAAgB,CAAC;AAEvD,KAAI,OAAO,SAAS,eAAe,oBAAoB,KACrD,QAAO,CAAC,SAAS;AAEnB,KACE,OAAO,aAAa,YACpB,OAAO,aAAa,YACpB,OAAO,aAAa,UAEpB,QAAO,CAAC,UAAU,IAAI,eAAe,OAAO,SAAS,CAAC,CAAC;AAEzD,QAAO,kBAAkB,UAAyC,UAAU;;AAG9E,MAAa,4BAA4B,qBAAqB;AAE9D,MAAa,4BACX,WACA,YAC6B;CAC7B,MAAM,QAAQ,iBAAiB;AAC/B,KAAI,CAAC,aAAa,CAAC,SAAS,MAAM,cAAc,UAC9C,QAAO;CAGT,MAAM,mBACJ,OAAO,YAAY,YAAY,YAAY,KACvC,GAAG,MAAM,UAAU,GAAG,KAAK,YAC3B,GAAG,MAAM,UAAU,GAAG,KAAK,MAAM;AACvC,2BACE,WACA,kBACA,4BACA,MAAM,UAAU,GACjB;AACD,OAAM,mBAAmB,IAAI,iBAAiB;AAC9C,QAAO;EACL,YAAY;EACZ,aAAa;EACb,oBAAoB,CAAC,GAAG,MAAM,gBAAgB,SAAS,SAAS,CAAC;EAClE;;AAGH,MAAa,mCAAmC,cAAmD;CACjG,MAAM,cAAc,GAAG,gCAAgC,UAAU;AACjE,2BAA0B,WAAW,aAAa,4BAA4B,kBAAkB;AAChG,QAAO;EACL,YAAY;EACZ;EACA,oBAAoB,EAAE;EACvB;;AAGH,MAAM,kCAAkC,gBAAwB;AAC9D,KAAI,YAAY,WAAW,8BAA8B,CACvD,QAAO;CAGT,MAAM,eAAe,YAAY,YAAY,IAAI;AACjD,KAAI,eAAe,EACjB,QAAO;AAGT,QAAO,YAAY,MAAM,GAAG,aAAa;;AAG3C,MAAa,kCACX,OACA,WACA,UACG;AACH,KAAI,CAAC,MACH,QAAO,uBAAuB,OAAO,UAAU;CAGjD,MAAM,YACJ,UAAU,WAAW,IAAI,MAAM,YAAY,IAC3C,0BACE,WACA,MAAM,aACN,4BACA,+BAA+B,MAAM,YAAY,CAClD;CAEH,MAAM,cAAc,iBAAiB;CACrC,MAAM,iBAAiB,qBAAqB,WAAW,MAAM,YAAY;CACzE,MAAM,QAAQ,YAAY,WAAW,WAAW,UAAU;EACxD,kBAAkB;EAClB,wBAAwB;EACzB,CAAC;AACF,OAAM,cAAc,MAAM;AAC1B,OAAM,gBAAgB,WAAW,IAAI,IAAI,MAAM,mBAAmB;CAClE,MAAM,QAAQ,cAAc,iBAC1B,UAAU,aAAa,uBAAuB,OAAO,UAAU,CAAC,CACjE;CACD,MAAM,kBAAkB,gCAAgC,WAAW,CACjE,GAAG,MAAM,oBACT,GAAG,4BAA4B,MAAM,CACtC,CAAC;AACF,wBAAuB,WAAW,MAAM,aAAa,gBAAgB;AACrE,MAAK,MAAM,gBAAgB,gBAAgB;AACzC,MAAI,gBAAgB,IAAI,aAAa,CACnC;AAEF,8BAA4B,WAAW,aAAa;;AAEtD,KAAI,eAAe,gBAAgB,OAAO;AACxC,cAAY,mBAAmB,IAAI,MAAM,YAAY;AACrD,OAAK,MAAM,gBAAgB,gBACzB,aAAY,mBAAmB,IAAI,aAAa;;AAGpD,QAAO;;AAeT,MAAa,0BACX,OACA,YAAqC,qBAAqB,KAC/C;CACX,MAAM,MAAM,WAAW,QAAQ,OAAO,aAAa,cAAc,WAAW;AAC5E,KAAI,CAAC,IACH,QAAO,EAAE;AAEX,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,MAAM,SAAS,UAAU,uBAAuB,OAAO,UAAU,CAAC;CAG3E,IAAI,WAAW;AACf,QAAO,OAAO,aAAa,WACzB,YAAW,UAAU;AAGvB,KAAI,aAAa,QAAQ,aAAa,KAAA,KAAa,aAAa,MAC9D,QAAO,CAAC,IAAI,cAAc,gBAAgB,CAAC;AAE7C,KAAI,OAAO,SAAS,eAAe,oBAAoB,MAAM;AAC3D,mCAAiC,SAAS;AAC1C,SAAO,CAAC,SAAS;;AAEnB,KACE,OAAO,aAAa,YACpB,OAAO,aAAa,YACpB,OAAO,aAAa,UAEpB,QAAO,CAAC,IAAI,eAAe,OAAO,SAAS,CAAC,CAAC;AAE/C,KAAI,YAAY,SAAS,CACvB,QAAO,uBAAuB,kBAAkB,SAAS,EAAE,UAAU;AAEvE,KAAI,WAAW,SAAS,CACtB,QAAO,YACH,sBAAsB,UAAU,UAAU,GAC1C,SAAS,IAAI,SAAS,MAAM,UAC1B,uBAAuB,SAAS,GAAG,MAAM,MAAM,EAAE,UAAU,CAC5D;AAEP,KAAI,iBAAiB,SAAS,CAC5B,QAAO,YACH,4BAA4B,UAAU,UAAU,GAChD,uBAAuB,SAAS,QAAQ,UAAU;AAExD,KAAI,YAAY,SAAS,EAAE;EACzB,MAAM,eAAe,iBAAiB,WAAW,SAAS;AAC1D,SAAO,eACH,uBAAuB,cAAc,UAAU,GAC/C,CAAC,IAAI,cAAc,gBAAgB,CAAC;;AAE1C,KAAI,UACF,QAAO,kBAAkB,UAAyC,UAAU;AAE9E,QAAO,CAAC,IAAI,eAAe,OAAO,SAAS,CAAC,CAAC;;AAG/C,MAAM,gCAAgC,cAAgC;AACpE,MAAK,MAAM,aAAa,UAAU,WAAW,QAAQ,EAAE;AACrD,gCAA8B,UAAU;AACxC,yBAAuB,WAAW,WAAW,EAAE;AAC/C,wBAAsB,WAAW,WAAW,EAAE;;AAGhD,MAAK,MAAM,SAAS,UAAU,QAAQ,QAAQ,CAC5C,oBAAmB,MAAM,OAAO;AAGlC,WAAU,WAAW,OAAO;AAC5B,WAAU,MAAM,OAAO;AACvB,WAAU,gBAAgB;AAC1B,WAAU,cAAc;AACxB,WAAU,eAAe;AACzB,WAAU,kBAAkB;AAC5B,WAAU,OAAO,OAAO;AACxB,WAAU,SAAS,OAAO;AAC1B,WAAU,QAAQ,OAAO;AAEzB,MAAK,MAAM,CAAC,IAAI,WAAW,MAAM,KAAK,UAAU,QAAQ,SAAS,CAAC,EAAE;AAClE,OAAK,MAAM,UAAU,MAAM,KAAK,OAAO,QAAQ,CAC7C,oBAAmB,OAAO;AAE5B,SAAO,QAAQ,OAAO;AACtB,SAAO,YAAY,OAAO;AAC1B,MAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,GAAG,CAC9C,WAAU,QAAQ,OAAO,GAAG;;;AAKlC,MAAM,eAAe,UACnB,cAAc,MAAM,IAAI,MAAM,mBAAmB;AAEnD,MAAM,mBAAmB,OAAoB,qBAA+C;CAC1F,MAAM,OAAyB;EAC7B,gBAAgB;EAChB,UAAU,MAAM;EAChB;EACD;AACD,QAAO,eAAe,MAAM,sBAAsB;EAChD,cAAc;EACd,YAAY;EACZ,OAAO;EACP,UAAU;EACX,CAAC;AACF,QAAO;;AAGT,MAAM,oBAAoB,WAAoC,SAA2B;CACvF,MAAM,QACJ,KAAK,yBACL,WAAW,QAAQ,aAAa,IAAI,cAAc,KAAK,UAAU,OAAO,CAAC;AAC3E,KAAI,CAAC,MACH,QAAO;AAET,QAAO,mBAAmB,OAAO,KAAK,iBAAiB;;AAGzD,MAAM,sBAAsB,OAAoB,mBAAmB,MAAM;CACvE,MAAM,oBAAoB,UAAmC;EAC3D,MAAM,YAAY,EAChB,GAAG,OACJ;AACD,SAAO,eAAe,WAAW,mBAAmB;GAClD,cAAc;GACd,YAAY;GACZ,OAAO,MAAM;GACb,UAAU;GACX,CAAC;AACF,SAAO,eAAe,WAAW,kBAAkB;GACjD,cAAc;GACd,YAAY;GACZ,OAAO,MAAM;GACb,UAAU;GACX,CAAC;AACF,SAAO;;AAGT,KAAI,oBAAoB,MAAM,QAAQ,OACpC,QAAO,OAAO,MAAM,KAAK,UAAiC,iBAAiB,EAAE,CAAC,EAAE,MAAM,OAAO,EAAE,CAAC;CAGlG,IAAI,WAAoB;AACxB,MAAK,IAAI,QAAQ,MAAM,QAAQ,SAAS,GAAG,SAAS,kBAAkB,SAAS,GAAG;EAChF,MAAM,SAAS,MAAM,QAAQ;AAC7B,aAAW,OACT,OAAO,UACP,iBAAiB,EACf,UAAU,gBAAgB,OAAO,QAAQ,EAAE,EAC5C,CAAC,EACF,MACA,OACA,EAAE,CACH;;AAEH,QAAO;;AAGT,MAAM,gCACJ,WACA,aACA,YACG;CACH,MAAM,YAAY,UAAU,WAAW,IAAI,YAAY;AACvD,KAAI,CAAC,UACH;AAEF,WAAU,kBAAkB;AAC5B,SAAQ,cAAc;EACpB,MAAM,UAAU,UAAU,WAAW,IAAI,YAAY;AACrD,MAAI,CAAC,WAAW,QAAQ,oBAAoB,QAC1C;AAEF,UAAQ,kBAAkB;AAC1B,UAAQ,SAAS;AACjB,YAAU,MAAM,IAAI,YAAY;AAC3B,uBAAqB,UAAU;GACpC;;AAGJ,MAAM,iCACJ,OACA,WACA,gBACG;AACH,KAAI;AAGF,SAAO,iBADL,OAAO,MAAM,aAAa,aAAa,MAAM,UAAU,GAAI,MAAM,YAAY,KACf;UACzD,OAAO;AACd,MAAI,CAAC,qBAAqB,MAAM,CAC9B,OAAM;AAER,YAAU,wBAAwB,IAAI,MAAM,QAAQ;EACpD,MAAM,YAAY,UAAU,WAAW,IAAI,YAAY;AACvD,MAAI,UACF,WAAU,kBAAkB,MAAM;AAEpC,SAAO,iBAAkB,MAAM,YAAY,KAAqC;;;AAIpF,MAAa,qCAAqC,cAChD,CAAC,GAAG,UAAU,WAAW,QAAQ,CAAC,CAC/B,QACE,cAAc,UAAU,WAAW,6BAA6B,CAAC,CAAC,UAAU,gBAC9E,CACA,KAAK,cAAc,UAAU,GAAG,CAChC,MAAM,MAAM,UAAU,KAAK,MAAM,IAAI,CAAC,SAAS,MAAM,MAAM,IAAI,CAAC,OAAO;AAsB5E,MAAM,gCACJ,OACA,WACA,gBACG;AACH,KAAI;AAGF,SAAO,eADL,OAAO,MAAM,aAAa,aAAa,MAAM,UAAU,GAAI,MAAM,YAAY,MAChB,UAAU;UAClE,OAAO;AACd,MAAI,CAAC,qBAAqB,MAAM,CAC9B,OAAM;AAER,+BAA6B,WAAW,aAAa,MAAM,QAAQ;AAEnE,SAAO,eADU,MAAM,YAAY,MAC4B,UAAU;;;AAI7E,MAAM,mCAAmC,UAAyB;CAChE,MAAM,YAAY,qBAAqB;AACvC,KAAI,CAAC,UACH,QAAO,iBAAkB,MAAM,YAAY,KAAqC;AAGlF,KAAI,CADgB,iBAAiB,CAEnC,QAAO,8BAA8B,OAAO,WAAW,kBAAkB;CAG3E,MAAM,WAAW,sBAAsB,UAAU;CACjD,MAAM,cAAc,kBAAkB,WAAW,SAAS,UAAU,SAAS,WAAW;CACxF,MAAM,YAAY,0BAChB,WACA,aACA,2BACA,SAAS,SACV;AACD,WAAU,QAAQ;EAChB,UAAU,MAAM;EAChB,UAAU,MAAM;EACjB;AACD,WAAU,kBAAkB;CAC5B,MAAM,QAAQ,YAAY,WAAW,WAAW,MAAM;AACtD,6BAA4B,WAAW,UAAU,GAAG;CACpD,MAAM,OAAO,UAAU,aACrB,8BAA8B,UAAU,OAAwB,WAAW,YAAY,CACxF;AACD,wBAAuB,WAAW,WAAW,MAAM,cAAc;AACjE,uBAAsB,WAAW,WAAW,MAAM,YAAY;AAC9D,QAAO,YAAY,YAAY,WAAW,KAAK,WAAW,YAAY;;AAGxE,MAAM,kCACJ,OACA,WACA,SACG;CACH,MAAM,cAAc,iBAAiB;AACrC,KAAI,CAAC,YACH,QAAO,6BAA6B,OAAO,WAAW,kBAAkB;CAG1E,MAAM,WAAW,sBAAsB,UAAU;CACjD,MAAM,cAAc,kBAAkB,WAAW,SAAS,UAAU,SAAS,WAAW;CACxF,MAAM,YAAY,0BAChB,WACA,aACA,2BACA,SAAS,SACV;AACD,WAAU,QAAQ;EAChB,UAAU,MAAM;EAChB,UAAU,MAAM;EACjB;AACD,WAAU,kBAAkB;AAC5B,WAAU,SAAS;AACnB,WAAU,QAAQ,KAAA;AAClB,WAAU,MAAM,KAAA;CAEhB,MAAM,QAAQ,YAAY,WAAW,WAAW,KAAK;AACrD,6BAA4B,WAAW,UAAU,GAAG;CACpD,MAAM,YAAY,UAAU,aAC1B,6BAA6B,UAAU,OAAwB,WAAW,YAAY,CACvF;AACD,wBAAuB,WAAW,WAAW,MAAM,cAAc;AACjE,uBAAsB,WAAW,WAAW,MAAM,YAAY;AAC9D,aAAY,mBAAmB,IAAI,YAAY;AAC/C,MAAK,MAAM,gBAAgB,MAAM,mBAC/B,aAAY,mBAAmB,IAAI,aAAa;AAElD,wBAAuB,WAAW,WAAW,MAAM,eAAe;AAClE,+BAA8B,UAAU;AAExC,KAAI,CAAC,UAAU,IACb,QAAO;CAET,MAAM,QAAQ,UAAU,IAAI,cAAc,QAAQ,YAAY,QAAQ;CACtE,MAAM,MAAM,UAAU,IAAI,cAAc,QAAQ,YAAY,MAAM;AAClE,KAAI,CAAC,UAAU,SAAS,CAAC,UAAU,KAAK;AACtC,YAAU,QAAQ;AAClB,YAAU,MAAM;;AAElB,QAAO;EAAC;EAAO,GAAG;EAAW;EAAI;;AAGnC,MAAM,uBAAuB,WAA6B,SAAwB;AAChF,KAAI,CAAC,UAAU,OAAO,CAAC,UAAU,YAC/B,OAAM,IAAI,MAAM,mDAAmD;AAGrE,8BAA6B,UAAU;CACvC,MAAM,QAAQ,cAAc,iBAAiB,eAAe,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC;CAEjF,MAAM,OAAO,UAAU;AACvB,QAAO,KAAK,WACV,MAAK,WAAW,QAAQ;AAE1B,MAAK,MAAM,QAAQ,MACjB,MAAK,YAAY,KAAK;AAExB,kCAAiC,KAAK;AACtC,mBAAkB,WAAW,KAAK;AAClC,iBAAgB,WAAW,KAAK;AAChC,+BAA8B,UAAU;;AAG1C,MAAM,2BAA2B,QAAqB,QAAgB;CACpE,MAAM,QAAQ,OAAO,iBAAiB,IAAI,IAAI;AAC9C,KAAI,SAAS,KACX,QAAO;CAGT,MAAM,UAAU,OAAO,WAAW,cAAc,qBAAqB,OAAO,SAAS;CACrF,MAAM,UAAU,IAAI,IAAI,KAAK,QAAQ;AACrC,SAAQ,aAAa,IAAI,KAAK,MAAM,UAAU,CAAC;AAC/C,KAAI,gBAAgB,KAAK,IAAI,CAC3B,QAAO,QAAQ;AAEjB,QAAO,GAAG,QAAQ,WAAW,QAAQ,SAAS,QAAQ;;AAGxD,MAAM,kBAAkB,OAAO,QAAqB,QAA4C;CAC9F,MAAM,SAAU,MAAM;;EAA0B,wBAAwB,QAAQ,IAAI;;AAIpF,KAAI,OAAO,OAAO,YAAY,WAC5B,OAAM,IAAI,UAAU,gBAAgB,IAAI,uCAAuC;AAGjF,QAAO;EACL,UAAU,OAAO,YAAY;EAC7B,UAAU,OAAO;EACjB,QAAQ,iBAAiB,OAAO,QAAQ,EAAE,UAAU;EACpD;EACD;;AAGH,MAAM,4BAA4B,KAAe,YAA6B;CAC5E,MAAM,UAAU,IAAI,cAAc,QAAQ;AAC1C,SAAQ,aAAa,0BAA0B,GAAG;AAClD,QAAO;;AAGT,MAAM,sBAAsB,KAAe,OAAoB,KAAU,iBAAyB;AAChG,MAAK,MAAM,WAAW,IAAI,KAAK,iBAAiB,IAAI,yBAAyB,GAAG,CAC9E,SAAQ,QAAQ;CAGlB,MAAM,WAAW,qBACf,CAAC,GAAG,MAAM,QAAQ,KAAK,WAAW,OAAO,YAAY,KAAK,EAAE,MAAM,KAAK,YAAY,KAAK,EACxF;EACE,QAAQ,MAAM;EACd;EACD,CACF;AAED,KAAI,QAAQ,UAAU,SAAS;CAE/B,MAAM,cAAc,MAAc,SAAiB,SAA8B;EAC/E,MAAM,OAAO,yBAAyB,KAAK,OAAO;AAClD,OAAK,aAAa,MAAM,KAAK;AAC7B,OAAK,aAAa,WAAW,QAAQ;AACrC,MAAI,KAAK,YAAY,KAAK;;AAG5B,KAAI,UAAU,YACZ,YAAW,eAAe,SAAS,aAAa,OAAO;AAEzD,KAAI,UAAU,WAAW;EACvB,MAAM,OAAO,yBAAyB,KAAK,OAAO;AAClD,OAAK,aAAa,QAAQ,SAAS,UAAU;AAC7C,OAAK,aAAa,OAAO,YAAY;AACrC,MAAI,KAAK,YAAY,KAAK;;AAE5B,KAAI,UAAU,WAAW,MACvB,YAAW,YAAY,SAAS,UAAU,OAAO,WAAW;AAE9D,KAAI,UAAU,WAAW,YACvB,YAAW,kBAAkB,SAAS,UAAU,aAAa,WAAW;AAE1E,KAAI,UAAU,WAAW,KACvB,YAAW,WAAW,SAAS,UAAU,MAAM,WAAW;AAE5D,KAAI,UAAU,WAAW,IACvB,YAAW,UAAU,SAAS,UAAU,KAAK,WAAW;AAE1D,MAAK,MAAM,SAAS,UAAU,WAAW,UAAU,EAAE,CACnD,YAAW,YAAY,OAAO,WAAW;AAE3C,KAAI,UAAU,SAAS,KACrB,YAAW,gBAAgB,SAAS,QAAQ,MAAM,OAAO;AAE3D,KAAI,UAAU,SAAS,MACrB,YAAW,iBAAiB,SAAS,QAAQ,OAAO,OAAO;AAE7D,KAAI,UAAU,SAAS,YACrB,YAAW,uBAAuB,SAAS,QAAQ,aAAa,OAAO;AAEzE,MAAK,MAAM,SAAS,UAAU,SAAS,UAAU,EAAE,CACjD,YAAW,iBAAiB,OAAO,OAAO;;AAI9C,MAAM,oBAAoB,OACxB,WACA,SAKA,UAAsD,WACnD;CACH,MAAM,SAAS,kBAAkB,UAAU;CAC3C,MAAM,iBAAiB,mBAAmB,QAAQ,SAAS;CAC3D,MAAM,WAAW,cAAc,gBAAgB,QAAQ;CACvD,MAAM,WAAW,OAAO,aAAa,IAAI,SAAS;AAClD,KAAI,SACF,QAAO;CAGT,MAAM,YACJ,YAAY,SACR,QAAQ,MAAM,OACd,YAAY,YACV,QAAQ,MAAM,UACd,YAAY,UACV,QAAQ,MAAM,QACd,QAAQ,MAAM;AACxB,KAAI,CAAC,UACH,QAAO;CAGT,MAAM,CAAC,MAAM,GAAG,WAAW,MAAM,QAAQ,IAAI,CAC3C,gBAAgB,QAAQ,UAAU,EAClC,GAAG,QAAQ,MAAM,QAAQ,KAAK,cAAc,gBAAgB,QAAQ,UAAU,CAAC,CAChF,CAAC;CACF,IAAI;AACJ,SAAQ;EACN,OAAO,QAAQ;EACf,OAAO,KAAA;EACP;EACA,QAAQ,QAAQ;EAChB,UAAU;EACV;EACA,cAAc,mBAAmB,MAAM;EACxC;AAED,QAAO,aAAa,IAAI,UAAU,MAAM;AACxC,QAAO;;AAGT,MAAM,+BAA+B,OACnC,WACA,UACA,SACG;CACH,MAAM,UAAU,yBAAyB,kBAAkB,UAAU,CAAC,UAAU,UAAU,KAAK;AAC/F,KAAI,CAAC,QACH,QAAO;AAET,QAAO,kBAAkB,WAAW,SAAS,SAAS,UAAU,UAAU,YAAY;;AAGxF,MAAM,qBAAqB,OAAO,WAA6B,aAAqB;CAClF,MAAM,UAAU,mBAAmB,kBAAkB,UAAU,CAAC,UAAU,SAAS;AACnF,KAAI,CAAC,WAAW,CAAC,QAAQ,MAAM,KAC7B,QAAO;AAET,QAAO,kBAAkB,WAAW,SAAS,OAAO;;AAGtD,MAAM,2BACJ,WACA,SACA,WAA0B,SACN;AACpB,KAAI,QAAQ,WAAW,EACrB,QAAO,EAAE;CAGX,MAAM,CAAC,QAAQ,GAAG,QAAQ;CAC1B,MAAM,aAAa,CAAC,GAAG,UAAU,WAAW,QAAQ,CAAC,CAClD,QAAQ,cAAc;AACrB,MACE,CAAC,UAAU,SACX,CAAC,UAAU,OACX,CAAC,UAAU,MAAM,cACjB,CAAC,UAAU,IAAI,cACf,UAAU,WAAW,OAErB,QAAO;AAET,MAAI,aAAa,KACf,QAAO;AAET,SAAO,eAAe,UAAU,UAAU,GAAG;GAC7C,CACD,MAAM,MAAM,UAAU,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO;AAEhF,MAAK,MAAM,aAAa,YAAY;EAClC,MAAM,YAAY,wBAAwB,WAAW,MAAM,UAAU,GAAG;AACxE,MAAI,CAAC,UACH;AAEF,SAAO,CAAC,UAAU,IAAI,GAAG,UAAU;;AAGrC,QAAO;;AAGT,MAAM,kCAAkC,WAA6B,UAAuB;AAC1F,KAAI,MAAM,QAAQ,WAAW,KAAK,MAAM,QAAQ,MAAM,WAAW,CAAC,OAAO,OAAO,CAC9E,QAAO;CAGT,MAAM,UAAU,MAAM,QAAQ,KAAK,WAAW,OAAO,OAAiB;AACtE,KAAI,MAAM,KAAK,QAAQ;EACrB,MAAM,QAAQ,wBAAwB,WAAW,CAAC,GAAG,SAAS,MAAM,KAAK,OAAO,CAAC;AACjF,MAAI,MACF,QAAO,MAAM,MAAM,GAAG,MAAM,QAAQ,OAAO;;AAI/C,QAAO,wBAAwB,WAAW,QAAQ;;AAGpD,MAAM,uBAAuB,gBAAwB,YAAY,MAAM,IAAI,CAAC;AAE5E,MAAM,yBAAyB,UAAkB,YAAoB;AACnE,KAAI,CAAC,QAAQ,WAAW,GAAG,SAAS,GAAG,CACrC,QAAO;CAET,MAAM,YAAY,QAAQ,MAAM,SAAS,SAAS,EAAE;AACpD,KAAI,UAAU,WAAW,KAAK,UAAU,SAAS,IAAI,CACnD,QAAO;CAET,MAAM,SAAS,OAAO,UAAU;AAChC,QAAO,OAAO,UAAU,OAAO,GAAG,SAAS;;AAe7C,MAAM,gCACJ,WACA,YACA,cACiC;CACjC,MAAM,eAAe,CACnB,GAAG,4BAA4B,oBAAoB,UAAU,OAAO,UAAU,IAAI,CAAC,CACpF,CAAC,MAAM,MAAM,UAAU,oBAAoB,KAAK,GAAG,oBAAoB,MAAM,CAAC;AAE/E,MAAK,MAAM,eAAe,cAAc;EACtC,MAAM,aAAa,sBAAsB,YAAY,YAAY;AACjE,MAAI,eAAe,KACjB,QAAO;GACL;GACA,MAAM;GACN,QAAQ;GACT;;AAIL,MAAK,MAAM,eAAe,cAAc;EACtC,MAAM,YAAY,UAAU,WAAW,IAAI,YAAY;AACvD,MAAI,CAAC,WAAW,SACd;EAEF,MAAM,QAAQ,UAAU,WAAW,IAAI,UAAU,SAAS;AAC1D,MAAI,CAAC,SAAS,MAAM,WAAW,8BAA8B,MAAM,aAAa,WAC9E;AAEF,SAAO;GACL,MAAM;GACN,SAAS,MAAM;GACf,QAAQ;GACT;;AAGH,QAAO;;AAGT,MAAM,uCACJ,WACA,UACA,YACA,WACG;CACH,MAAM,QAAQ,YAAY,WAAW,UAAU,UAAU;EACvD,kBAAkB;EAClB,wBAAwB;EACzB,CAAC;AACF,OAAM,cAAc;AAIpB,QAAO;EACL,OAJY,cAAc,iBAC1B,UAAU,aAAa,uBAAuB,QAAQ,UAAU,CAAC,CAClE;EAGC,oBAAoB,MAAM;EAC3B;;AAGH,MAAM,4CACJ,WACA,SACA,WACG;AAMH,QAAO;EACL,OANY,+BAA+B,QAAsB,WAAW;GAC5E,YAAY;GACZ,aAAa;GACb,oBAAoB,EAAE;GACvB,CAAC;EAGA,oBAAoB,gCAAgC,WAAW,CAAC,QAAQ,CAAC;EAC1E;;AAGH,MAAM,0CACJ,WACA,YACA,mBACG;AACH,MAAK,MAAM,eAAe,MAAM,KAAK,UAAU,MAAM,EAAE;AACrD,MAAI,CAAC,eAAe,YAAY,YAAY,CAC1C;AAEF,MACE,mBACC,gBAAgB,kBAAkB,eAAe,gBAAgB,YAAY,EAE9E;AAEF,YAAU,MAAM,OAAO,YAAY;EACnC,MAAM,YAAY,UAAU,WAAW,IAAI,YAAY;AACvD,MAAI,CAAC,UACH;AAEF,YAAU,sBAAsB,KAAA;AAChC,YAAU,6BAA6B;AACvC,YAAU,mCAAmC;;;AAIjD,MAAM,8BAA8B,WAA6B,WAAmB;CAClF,MAAM,OAAO,UAAU,WAAW,IAAI,OAAO;AAC7C,KAAI,KACF,MAAK,SAAS;AAEhB,MAAK,MAAM,eAAe,qBAAqB,WAAW,OAAO,EAAE;EACjE,MAAM,YAAY,UAAU,WAAW,IAAI,YAAY;AACvD,MAAI,UACF,WAAU,SAAS;;;AAKzB,MAAM,gCAAgC,OAAuC,aAAsB;CACjG,MAAM,OAAO,EAAE;AACf,KAAI,MACF,QAAO,iBAAiB,MAAM,OAAO,0BAA0B,MAAM,CAAC;AAExE,QAAO,eAAe,MAAM,YAAY;EACtC,cAAc;EACd,YAAY;EACZ,OAAO;EACP,UAAU;EACX,CAAC;AACF,QAAO;;AAGT,MAAM,sBAAsB,SAA6B,SAAsB;AAC7E,KAAI,CAAC,QACH,QAAO;CAGT,IAAI,QAAQ;CACZ,MAAM,QAAQ,KAAK,IAAI,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,OAAO;AACnE,QAAO,QAAQ,SAAS,QAAQ,QAAQ,OAAQ,QAAQ,KAAK,QAAQ,OAAQ,IAC3E,UAAS;AAEX,QAAO;;AAGT,MAAM,6BAA6B,OACjC,WACA,SACA,MACA,sBACG;AACH,KAAI,qBAAqB,EACvB,QAAO;CAGT,MAAM,cAAc,+BAA+B,WAAW,QAAQ;AACtE,KAAI,CAAC,eAAe,YAAY,SAAS,kBACvC,QAAO;CAGT,MAAM,aAAa,YAAY,oBAAoB;CACnD,MAAM,WAAW,UAAU,WAAW,IAAI,WAAW;AACrD,KAAI,CAAC,UAAU,SAAS,CAAC,SAAS,IAChC,QAAO;CAGT,MAAM,eAAe,mBAAmB,MAAM,kBAAkB;CAChE,MAAM,+BAA+B,YAAY;EAC/C,MAAM,gBAAgB,qBAAqB,UAAU,KAAM,SAAS,OAAQ,SAAS,IAAK;EAC1F,MAAM,gBACJ,SAAS,SAAS,OAAO,SAAS,UAAU,WACvC,SAAS,QACV;EACN,MAAM,mBACJ,SAAS,YAAY,OAAO,SAAS,aAAa,WAAW,SAAS,WAAW;AACnF,WAAS,QAAQ,6BAA6B,eAAe,aAAa;AAC1E,WAAS,WAAW,6BAA6B,kBAAkB,aAAa;AAChF,WAAS,SAAS;AAClB,WAAS,sBAAsB;AAC/B,WAAS,6BAA6B;AACtC,WAAS,mCAAmC;AAC5C,YAAU,MAAM,IAAI,WAAW;AAC/B,MAAI,SAAS,OAAO,cAAc,sBAAsB,SAAS,MAAM,WACrE,iBAAgB,WAAW,SAAS,MAAM,WAAyB;AAErE,MAAI,UAAU,MAAM,OAAO,EACzB,OAAM,qBAAqB,UAAU;AAEvC,MAAI,SAAS,SAAS,SAAS,IAC7B,sBAAqB,UAAU,KAAM,SAAS,OAAO,SAAS,KAAK,cAAc;AAEnF,SAAO;;AAGT,MAAK,SAAS,iBAAiB,YAAY,OAAO,EAChD,QAAO,8BAA8B;CAIvC,MAAM,YADa,4BAA4B,oBAAoB,SAAS,OAAO,SAAS,IAAI,CAAC,CACpE,IAAI,GAAG,WAAW,GAAG,yBAAyB,WAAW,CAAC,IAAI;AAC3F,KAAI,CAAC,UACH,QAAO,8BAA8B;CAEvC,MAAM,YAAY,6BAA6B,WAAW,YAAY,UAAU;AAChF,KAAI,CAAC,UACH,QAAO,8BAA8B;AAEvC,KAAI,UAAU,SAAS,SAAS;AAC9B,6BAA2B,WAAW,UAAU,OAAO;EACvD,MAAM,gBAAgB,qBAAqB,UAAU,KAAM,UAAU,OAAO,UAAU,IAAI;EAC1F,MAAM,EAAE,UAAU,yCAChB,WACA,UAAU,SACV,aACD;AACD,gCAA8B,UAAU,OAAO,UAAU,KAAK,MAAM;AACpE,uBAAqB,UAAU,KAAM,UAAU,OAAO,UAAU,KAAK,cAAc;EACnF,MAAM,gBACJ,SAAS,SAAS,OAAO,SAAS,UAAU,WACvC,SAAS,QACV;EACN,MAAM,mBACJ,SAAS,YAAY,OAAO,SAAS,aAAa,WAAW,SAAS,WAAW;AACnF,WAAS,QAAQ,6BAA6B,eAAe,aAAa;AAC1E,WAAS,WAAW,6BAA6B,kBAAkB,aAAa;AAChF,YAAU,MAAM,OAAO,WAAW;AAClC,yCAAuC,WAAW,YAAY,UAAU,QAAQ;AAChF,WAAS,SAAS;AAClB,WAAS,sBAAsB;AAC/B,WAAS,6BAA6B;AACtC,WAAS,mCAAmC;AAC5C,YAAU,MAAM,IAAI,WAAW;AAC/B,MAAI,SAAS,MAAM,cAAc,sBAAsB,SAAS,MAAM,WACpE,iBAAgB,WAAW,SAAS,MAAM,WAAyB;AAErE,MAAI,UAAU,MAAM,OAAO,EACzB,OAAM,qBAAqB,UAAU;AAEvC,SAAO;;CAGT,MAAM,mBAAmB,UAAU,WAAW,IAAI,UAAU,OAAO,IAAI;AAIvE,MAFG,kBAAkB,cAAc,KAAK,MAAM,kBAAkB,gBAAgB,KAAK,GAEtD;AAC7B,6BAA2B,WAAW,UAAU,OAAO;AACvD,SAAO,8BAA8B;;AAGvC,UAAS,QAAQ,EACf,UAAU,cACX;AACD,4BAA2B,WAAW,UAAU,OAAO;CACvD,MAAM,gBAAgB,qBAAqB,UAAU,KAAM,UAAU,OAAO,UAAU,IAAI;CAC1F,MAAM,EAAE,OAAO,uBAAuB,oCACpC,WACA,UACA,UAAU,YACV,aACD;AACD,+BAA8B,UAAU,OAAO,UAAU,KAAK,MAAM;AACpE,sBAAqB,UAAU,KAAM,UAAU,OAAO,UAAU,KAAK,cAAc;AACnF,wBAAuB,WAAW,UAAU,QAAQ,mBAAmB;AACvE,UAAS,SAAS;AAClB,UAAS,sBAAsB;AAC/B,UAAS,6BAA6B;AACtC,UAAS,mCAAmC;AAC5C,WAAU,MAAM,IAAI,WAAW;AAC/B,KAAI,SAAS,MAAM,cAAc,sBAAsB,SAAS,MAAM,WACpE,iBAAgB,WAAW,SAAS,MAAM,WAAyB;AAErE,KAAI,UAAU,MAAM,OAAO,EACzB,OAAM,qBAAqB,UAAU;AAEvC,QAAO;;AAGT,MAAM,2BAA2B,KAAe,KAAU,SAAyB;AACjF,KAAI,CAAC,IAAI,eAAe,SAAS,MAC/B;AAEF,KAAI,SAAS,WAAW;AACtB,MAAI,YAAY,QAAQ,aAAa,MAAM,IAAI,IAAI,KAAK;AACxD;;AAEF,KAAI,YAAY,QAAQ,UAAU,MAAM,IAAI,IAAI,KAAK;;AAGvD,MAAM,8BAA8B,KAAe,KAAU,SAAyB;AACpF,KAAI,CAAC,IAAI,YACP;AAEF,KAAI,SAAS,WAAW;AACtB,MAAI,YAAY,SAAS,QAAQ,IAAI,KAAK;AAC1C;;AAEF,KAAI,SAAS,OAAO;AAClB,MAAI,YAAY,SAAS,OAAO,IAAI,KAAK;AACzC;;AAEF,KAAI,YAAY,SAAS,OAAO,IAAI,KAAK;;AAG3C,MAAM,0BACJ,WACA,KACA,YACG;CACH,MAAM,SAAS,kBAAkB,UAAU;CAC3C,MAAM,4BAAY,IAAI,KAA6B;AACnD,MAAK,MAAM,CAAC,IAAI,kBAAkB,OAAO,QAAQ,QAAQ,CACvD,WAAU,IAAI,IAAI;EAChB,MAAM,wBAAwB,WAAW,cAAc,KAAK;EAC5D,OAAO,wBAAwB,WAAW,cAAc,MAAM;EAC9D,QAAQ,cAAc;EACvB,CAAC;AAEJ,QAAO,kBAAkB,IAAI,iBAAiB,IAAI,EAAE,UAAU;;AAGhE,MAAM,0BAA0B,WAA6B,QAAa;CAExE,MAAM,oBADS,kBAAkB,UAAU,CACV,kBAAkB,IAAI,iBAAiB,IAAI,CAAC;AAC7E,KAAI,CAAC,kBACH;AAEF,MAAK,MAAM,CAAC,IAAI,aAAa,kBAC3B,WAAU,aAAa,IAAI,IAAI;EAC7B,MAAM,SAAS;EACf,OAAO,SAAS;EAChB,QAAQ,SAAS;EAClB,CAAC;;AAIN,MAAM,sBAAsB,SAC1B,KAAK,OAAO,QACZ,OAAO,KAAK,cAAc,YAC1B,OAAO,KAAK,kBAAkB,aAC7B,KAAK,SAAS,UAAU,KAAK,SAAS,gBACvC,CAAC,CAAC,KAAK,WACP,OAAO,KAAK,YAAY;AAE1B,MAAM,yBAAyB,MAAc,OAAe;CAC1D,MAAM,gBAAgB;CACtB,MAAM,YAAY;AAElB,MAAK,MAAM,SAAS,KAAK,SAAS,cAAc,EAAE;EAEhD,MAAM,WADQ,MAAM,MAAM,IACJ,MAAM,UAAU;AACtC,MAAI,CAAC,QACH;AAEF,OAAK,QAAQ,MAAM,QAAQ,QAAQ,GACjC,QAAO,MAAM,MAAM;;AAIvB,QAAO;;AAGT,MAAM,0BACJ,WACA,YACA,UAGA,SACsB;CACtB,MAAM,WAAW,IAAI,IAAI,SAAS,OAAO,WAAW,MAAM,WAAW,KAAK;AAC1E,KAAI,SAAS,WAAW,WAAW,OACjC,QAAO;EACL,UAAU,SAAS;EACnB,IAAI;EACL;CAGH,MAAM,cACJ,sBAAsB,MAAA,uBAAoC,IAC1D,sBAAsB,MAAA,iBAA8B;AACtD,KAAI,CAAC,YACH,QAAO;EACL,UAAU;EACV,IAAI;EACL;CAGH,IAAI;AACJ,KAAI;AACF,YAAU,KAAK,MAAM,YAAY;SAC3B;AACN,SAAO;GACL,UAAU;GACV,IAAI;GACL;;CAGH,MAAM,gBAAgB,mBAAmB,SAAS,SAAS;CAC3D,MAAM,SAAS,kBAAkB,UAAU;CAC3C,MAAM,UAAU,mBAAmB,OAAO,UAAU,cAAc;CAClE,MAAM,kBAAkB,CAAC,UACrB,yBAAyB,OAAO,UAAU,eAAe,WAAW,GACpE;AACJ,KAAI,CAAC,SAAS,MAAM,QAAQ,CAAC,iBAAiB,MAAM,SAClD,QAAO;EACL,UAAU;EACV,IAAI;EACL;AAGH,QAAO;EACL,WAAW,SAAS;EACpB;EACA,MAAM,SAAS,MAAM,OAAO,SAAS;EACrC,SAAS,QAAQ,WAAW,EAAE;EAC9B,IAAI;EACL;;AAGH,MAAM,mBAAmB,OACvB,WACA,SAC+B;CAC/B,MAAM,UAAU,OAAO,WAAW,cAAc,qBAAqB,OAAO,SAAS;CACrF,MAAM,aAAa,IAAI,IAAI,MAAM,QAAQ;AAEzC,KAAI;EACF,MAAM,cAAc,IAAI,IAAI,qBAAqB,WAAW;AAC5D,cAAY,aAAa,IAAI,QAAQ,WAAW,KAAK;EACrD,MAAM,WAAW,MAAM,MAAM,YAAY,KAAK;AAC9C,MAAI,SAAS,UAAU,OAAO,SAAS,SAAS,KAAK;GACnD,MAAM,OAAQ,MAAM,SAAS,MAAM;AACnC,OAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,OAAO,KAAK,OAAO,UAC1D,QAAO;IACL,UAAU;IACV,IAAI;IACL;AAEH,OAAI,mBAAmB,KAAK,CAC1B,QAAO;AAET,OAAI,cAAc,QAAQ,OAAO,KAAK,aAAa,SACjD,QAAO;;SAGL;AAER,KAAI;EACF,MAAM,WAAW,MAAM,MAAM,WAAW,KAAK;AAE7C,SAAO,uBAAuB,WAAW,YAAY,UADxC,MAAM,SAAS,MAAM,CACkC;SAC9D;AAER,QAAO;EACL,UAAU;EACV,IAAI;EACL;;AAGH,MAAM,yBAAyB,cAAgC;AAC7D,WAAU,QAAQ,OAAO;AACzB,WAAU,aAAa,OAAO;AAE9B,MAAK,MAAM,CAAC,IAAI,WAAW,MAAM,KAAK,UAAU,QAAQ,SAAS,CAAC,EAAE;AAClE,MAAI,CAAC,iBAAiB,GAAG,CACvB;AAEF,OAAK,MAAM,UAAU,MAAM,KAAK,OAAO,QAAQ,CAC7C,oBAAmB,OAAO;AAE5B,SAAO,QAAQ,OAAO;AACtB,SAAO,YAAY,OAAO;AAC1B,YAAU,QAAQ,OAAO,GAAG;;;AAIhC,MAAM,wBAAwB,OAAO,SAAgD;AACnF,KAAI;EACF,MAAM,aAAa,IAAI,IACrB,MACA,OAAO,WAAW,cAAc,qBAAqB,OAAO,SAAS,KACtE;EACD,MAAM,WAAW,MAAM,MAAM,WAAW,MAAM,EAC5C,SAAS,GACN,iCAAiC,KACnC,EACF,CAAC;AACF,MAAI,SAAS,SAAS,OAAO,SAAS,UAAU,IAC9C,QAAO;GACL,UAAU;GACV,IAAI;GACL;EAEH,MAAM,WAAW,IAAI,IAAI,SAAS,OAAO,WAAW,MAAM,WAAW,KAAK;AAC1E,MACE,SAAS,WAAW,WAAW,UAC/B,SAAS,aAAa,WAAW,YACjC,SAAS,WAAW,WAAW,OAE/B,QAAO;GACL,UAAU,SAAS;GACnB,IAAI;GACL;AAEH,SAAO,EACL,IAAI,MACL;SACK;AACN,SAAO;GACL,UAAU;GACV,IAAI;GACL;;;AAIL,MAAM,+BAA+B,OACnC,WACA,UACA,aACG;CACH,MAAM,SAAS,kBAAkB,UAAU;CAC3C,MAAM,UAAU,mBAAmB,OAAO,UAAU,SAAS;AAC7D,KAAI,SAAS,MAAM,MAAM;AACvB,QAAM,kBAAkB,WAAW,QAAQ;AAC3C;;CAEF,MAAM,kBAAkB,yBAAyB,OAAO,UAAU,UAAU,WAAW;AACvF,KAAI,iBAAiB,MAAM,SACzB,OAAM,kBAAkB,WAAW,iBAAiB,YAAY;AAElE,KAAI,SAAS,aAAa,UAAU;EAClC,MAAM,iBAAiB,mBAAmB,SAAS,SAAS;EAC5D,MAAM,oBAAoB,mBAAmB,OAAO,UAAU,eAAe;AAC7E,MAAI,mBAAmB,MAAM,KAC3B,OAAM,kBAAkB,WAAW,kBAAkB;;;AAK3D,MAAM,gBAAgB,OAAO,WAA6B,SAAiB;CACzE,MAAM,MAAM,UAAU;AACtB,KAAI,CAAC,IACH;CAGF,MAAM,aAAa,IAAI,IAAI,MAAM,IAAI,SAAS,KAAK;AACnD,KAAI,WAAW,WAAW,IAAI,SAAS,OACrC;CAEF,MAAM,MAAM,iBAAiB,WAAW;CACxC,MAAM,SAAS,kBAAkB,UAAU;CAC3C,MAAM,WAAW,OAAO,gBAAgB,IAAI,IAAI;AAChD,KAAI,UAAU;AACZ,QAAM;AACN;;CAGF,MAAM,WAAW,mBAAmB,WAAW,SAAS;CACxD,MAAM,UAAU,mBAAmB,OAAO,UAAU,SAAS;CAC7D,MAAM,eAAe,CAAC,UAClB,yBAAyB,OAAO,UAAU,UAAU,WAAW,GAC/D;AACJ,KAAI,CAAC,SAAS,MAAM,QAAQ,CAAC,cAAc,MAAM,SAC/C;CAGF,MAAM,mBAAmB,YAAY;AACnC,MAAI;GACF,MAAM,SAAS,MAAM,iBAAiB,WAAW,WAAW,KAAK;AACjE,OAAI,CAAC,OAAO,GACV,QAAO;GAGT,MAAM,WAAW,IAAI,IAAI,OAAO,WAAW,WAAW,KAAK;AAC3D,OAAI,SAAS,WAAW,WAAW,OACjC,QAAO;IACL,UAAU;IACV,IAAI;IACL;AAGH,SAAM,6BAA6B,WAAW,OAAO,eAAe,SAAS;AAC7E,0BAAuB,WAAW,UAAU,OAAO,QAAQ;AAC3D,UAAO;UACD;AACN,UAAO;IACL,UAAU;IACV,IAAI;IACL;;KAED;AAEJ,QAAO,gBAAgB,IAAI,KAAK,gBAAgB;AAChD,OAAM;;AAGR,MAAM,oBAAoB,OACxB,WACA,MACA,YAKG;CACH,MAAM,MAAM,UAAU;AACtB,KAAI,CAAC,IACH;AAGF,OAAM,0BAA0B;CAEhC,MAAM,OAAO,SAAS,QAAQ;CAC9B,MAAM,QAAQ,SAAS,SAAS;CAChC,MAAM,gBAAgB,SAAS,iBAAiB;CAChD,MAAM,MAAM,IAAI,IAAI,MAAM,IAAI,SAAS,KAAK;AAC5C,KAAI,IAAI,WAAW,IAAI,SAAS,QAAQ;AACtC,6BAA2B,KAAK,KAAK,KAAK;AAC1C;;CAEF,MAAM,WAAW,mBAAmB,IAAI,SAAS;CACjD,MAAM,SAAS,kBAAkB,UAAU;CAC3C,MAAM,UAAU,mBAAmB,OAAO,UAAU,SAAS;CAC7D,MAAM,yBAAyB,CAAC,UAC5B,yBAAyB,OAAO,UAAU,UAAU,WAAW,GAC/D;CAEJ,MAAM,kBAAkB,IAAI,IAAI,OAAO,WAAW,OAAO,IAAI,SAAS,KAAK;CAC3E,MAAM,cAAc,GAAG,gBAAgB,WAAW,gBAAgB,SAAS,gBAAgB;CAC3F,MAAM,WAAW,GAAG,IAAI,WAAW,IAAI,SAAS,IAAI;AACpD,KAAI,CAAC,SAAS,aAAa,YACzB;CAGF,MAAM,cAAc,iBAAiB,IAAI;CACzC,IAAI,kBAAkB,OAAO,gBAAgB,IAAI,YAAY;AAC7D,KAAI,CAAC,oBAAoB,SAAS,MAAM,QAAQ,wBAAwB,MAAM,WAAW;AACvF,QAAM,cAAc,WAAW,IAAI,KAAK;AACxC,oBAAkB,OAAO,gBAAgB,IAAI,YAAY;;CAE3D,MAAM,aAAa,kBAAkB,MAAM,kBAAkB;AAC7D,KAAI,cAAc,CAAC,WAAW,IAAI;AAChC,MAAI,cAAc,YAAY;AAC5B,OAAI,iBAAiB,GAAG;AACtB,+BAA2B,KAAK,IAAI,IAAI,WAAW,UAAU,IAAI,SAAS,KAAK,EAAE,KAAK;AACtF;;GAEF,MAAM,cAAc,IAAI,IAAI,WAAW,UAAU,IAAI,SAAS,KAAK;AACnE,OAAI,YAAY,WAAW,IAAI,SAAS,QAAQ;AAC9C,+BAA2B,KAAK,aAAa,KAAK;AAClD;;AAEF,SAAM,kBAAkB,WAAW,YAAY,MAAM;IACnD;IACA,eAAe,gBAAgB;IAChC,CAAC;AACF;;AAEF,6BAA2B,KAAK,KAAK,KAAK;AAC1C;;AAMF,MAFG,SAAS,MAAM,QAAQ,QAAQ,MAAM,iBACrC,CAAC,CAAC,wBAAwB,MAAM,YAAY,uBAAuB,MAAM,kBACrD,CAAC,YAAY;EAClC,MAAM,YAAY,MAAM,sBAAsB,IAAI,KAAK;AACvD,MAAI,CAAC,UAAU,IAAI;AACjB,OAAI,cAAc,WAAW;AAC3B,QAAI,iBAAiB,GAAG;AACtB,gCAA2B,KAAK,IAAI,IAAI,UAAU,UAAU,IAAI,SAAS,KAAK,EAAE,KAAK;AACrF;;IAEF,MAAM,cAAc,IAAI,IAAI,UAAU,UAAU,IAAI,SAAS,KAAK;AAClE,QAAI,YAAY,WAAW,IAAI,SAAS,QAAQ;AAC9C,gCAA2B,KAAK,aAAa,KAAK;AAClD;;AAEF,UAAM,kBAAkB,WAAW,YAAY,MAAM;KACnD;KACA,eAAe,gBAAgB;KAChC,CAAC;AACF;;AAEF,8BAA2B,KAAK,KAAK,KAAK;AAC1C;;;AAIJ,KAAI,CAAC,WAAW,CAAC,QAAQ,MAAM,MAAM;EACnC,MAAM,gBAAgB,CAAC,UACnB,MAAM,6BAA6B,WAAW,UAAU,WAAW,GACnE;AACJ,MAAI,eAAe;AACjB,yBAAsB,UAAU;AAChC,uBAAoB,WAAW,cAAc,OAAO;AACpD,UAAO,eAAe;AACtB,sBAAmB,KAAK,eAAe,KAAK,OAAO,aAAa;AAChE,2BAAwB,KAAK,KAAK,KAAK;AACvC,uBAAoB,QAAQ,IAAI;AAChC;;AAEF,6BAA2B,KAAK,KAAK,KAAK;AAC1C;;AAGF,KAAI,CAAC,SAAS,aAAa,OAAO,YAAY,OAAO;AACnD,MAAI,aAAa,aAAa;AAC5B,2BAAwB,KAAK,KAAK,KAAK;AACvC,uBAAoB,QAAQ,IAAI;;AAElC;;AAGF,uBAAsB,UAAU;AAChC,wBACE,WACA,YAAY,KAAK,IAAI,IAAI,WAAW,WAAW,IAAI,SAAS,KAAK,GAAG,IACrE;CACD,MAAM,WAAW,EAAE,OAAO;AAC1B,QAAO,aAAa,QAAQ;AAE5B,KAAI;EACF,MAAM,mBAAmB,kBAAkB,WAAW,QAAQ;AAC9D,MAAI,QAAQ,MAAM,SAAS;GACzB,IAAI,UAAU;AACd,oBAAiB,cAAc;AAC7B,cAAU;KACV;AACF,SAAM,QAAQ,SAAS;AACvB,OAAI,CAAC,SAAS;IACZ,MAAM,eAAe,MAAM,kBAAkB,WAAW,SAAS,UAAU;AAC3E,QAAI,cAAc;AAChB,yBAAoB,WAAW,aAAa,OAAO;AACnD,YAAO,eAAe;;;;EAI5B,MAAM,CAAC,cAAc,aAAa,MAAM,QAAQ,IAAI,CAClD,OAAO,eACH,QAAQ,QAAQ,OAAO,aAAa,GACpC,mBAAmB,WAAW,OAAO,YAAY,MAAM,EAC3D,iBACD,CAAC;AACF,MAAI,CAAC,WAAW;AACd,8BAA2B,KAAK,KAAK,KAAK;AAC1C;;AAEF,MAAI,aAAa,OAAO,SACtB;AAGF,SAAO,eAAe;AACtB,sBAAoB,QAAQ,IAAI;EAEhC,MAAM,oBAAoB,mBAAmB,cAAc,UAAU;AAMrE,MAAI,EAJF,gBAAgB,oBAAoB,IAChC,MAAM,2BAA2B,WAAW,cAAc,WAAW,kBAAkB,GACvF,OAGJ,qBAAoB,WAAW,UAAU,OAAO;AAGlD,qBAAmB,KAAK,WAAW,KAAK,OAAO,aAAa;AAC5D,0BAAwB,KAAK,KAAK,KAAK;UAChC,OAAO;AACd,MAAI,aAAa,OAAO,UAAU;GAChC,MAAM,gBAAgB,qBAAqB,MAAM,GAC7C,MAAM,6BAA6B,WAAW,UAAU,WAAW,GACnE,MAAM,kBAAkB,WAAW,SAAS,QAAQ;AACxD,OAAI,eAAe;AACjB,wBAAoB,WAAW,cAAc,OAAO;AACpD,WAAO,eAAe;AACtB,uBAAmB,KAAK,eAAe,KAAK,OAAO,aAAa;AAChE,4BAAwB,KAAK,KAAK,KAAK;AACvC,wBAAoB,QAAQ,IAAI;AAChC;;AAEF,8BAA2B,KAAK,KAAK,KAAK;;WAEpC;AACR,MAAI,aAAa,OAAO,SACtB,QAAO,aAAa,QAAQ;;;AAKlC,MAAa,wBAAwB,OAAO,cAAgC;CAC1E,MAAM,MAAM,UAAU;AACtB,KAAI,CAAC,IACH,QAAO;CAET,MAAM,MAAM,IAAI,IAAI,IAAI,SAAS,KAAK;CACtC,MAAM,SAAS,kBAAkB,UAAU;CAC3C,MAAM,MAAM,iBAAiB,IAAI;AACjC,QAAO,kBAAkB,OAAO,IAAI;AACpC,QAAO,gBAAgB,OAAO,IAAI;AAClC,OAAM,cAAc,WAAW,IAAI,KAAK;AACxC,OAAM,kBAAkB,WAAW,IAAI,MAAM;EAC3C,OAAO;EACP,MAAM;EACP,CAAC;AACF,QAAO;;AAGT,MAAM,iCAAiC,OAA4B,YACjE,MAAM,SAAS,WACf,MAAM,YAAY,WAClB,MAAM,UAAU,WAChB,MAAM,aAAa,WACnB,MAAM,QAAQ,SAAS,QAAQ;AAEjC,MAAM,4BAA4B,OAAoB,YACpD,MAAM,KAAK,QAAQ,WACnB,MAAM,QAAQ,MAAM,WAAW,OAAO,QAAQ,QAAQ,IACtD,8BAA8B,MAAM,OAAO,QAAQ;AAErD,MAAM,oCAAoC,WAAwB;CAChE,MAAM,cAAc,mBAAmB,OAAO,YAAY,MAAM;CAChE,MAAM,UAAU,mBAAmB,OAAO,UAAU,YAAY;AAChE,KAAI,SAAS,MAAM,KACjB,QAAO,QAAQ;AAEjB,QAAO,yBAAyB,OAAO,UAAU,aAAa,WAAW,EAAE,SAAS;;AAGtF,MAAa,gCACX,WACA,SACA,YAAY,KAAK,KAAK,KACnB;CACH,MAAM,SAAS,UAAU;AACzB,KAAI,CAAC,OACH,QAAO;CAGT,IAAI,cAAc;AAClB,MAAK,MAAM,CAAC,UAAU,UAAU,MAAM,KAAK,OAAO,aAAa,SAAS,CAAC,EAAE;AACzE,MAAI,CAAC,yBAAyB,OAAO,QAAQ,CAC3C;AAEF,SAAO,aAAa,OAAO,SAAS;AACpC,gBAAc;;AAGhB,KAAI,OAAO,gBAAgB,yBAAyB,OAAO,cAAc,QAAQ,EAAE;AACjF,SAAO,eAAe;AACtB,gBAAc;;CAGhB,MAAM,eAAe,iCAAiC,OAAO;AAC7D,KAAI,gBAAgB,8BAA8B,cAAc,QAAQ,CACtE,eAAc;AAGhB,KAAI,CAAC,YACH,QAAO;AAGT,QAAO,iBAAiB,IAAI,SAAS,UAAU;AAE/C,KAAI,UAAU,KAAK;EAEjB,MAAM,aAAa,iBADA,IAAI,IAAI,UAAU,IAAI,SAAS,KAAK,CACR;AAC/C,SAAO,kBAAkB,OAAO,WAAW;AAC3C,SAAO,gBAAgB,OAAO,WAAW;;AAG3C,QAAO;;AAGT,MAAa,8BAA8B,OACzC,WACA,SACA,YAAY,KAAK,KAAK,KACnB;CACH,MAAM,MAAM,UAAU;AACtB,KAAI,CAAC,OAAO,CAAC,6BAA6B,WAAW,SAAS,UAAU,CACtE,QAAO;CAGT,MAAM,SAAS,kBAAkB,UAAU;CAC3C,MAAM,WAAW,mBAAmB,OAAO,YAAY,MAAM;AAE7D,KAAI;EACF,MAAM,YACH,MAAM,mBAAmB,WAAW,SAAS,IAC7C,MAAM,6BAA6B,WAAW,UAAU,WAAW;AACtE,MAAI,CAAC,WAAW;AACd,SAAM,sBAAsB,UAAU;AACtC,UAAO;;AAGT,sBAAoB,WAAW,UAAU,OAAO;AAChD,SAAO,eAAe;AACtB,qBAAmB,KAAK,WAAW,IAAI,IAAI,IAAI,SAAS,KAAK,EAAE,OAAO,aAAa;AACnF,SAAO;SACD;AACN,QAAM,sBAAsB,UAAU;AACtC,SAAO;;;AAIX,MAAa,mCAAmC,YAAY;AAC1D,MAAK,MAAM,aAAa,qBAAqB,CAC3C,OAAM,sBAAsB,UAAU;;AAI1C,MAAM,oBAAoB,OAAO,WAA6B,gBAAwB;CACpF,MAAM,YAAY,UAAU,WAAW,IAAI,YAAY;AACvD,KAAI,CAAC,WAAW,SAAS,CAAC,UAAU,OAAO,UAAU,OACnD,QAAO;CAET,MAAM,iBAAiB,UAAU;CACjC,MAAM,eAAe,UAAU,uBAAuB;AACtD,WAAU,sBAAsB,KAAA;AAEhC,KAAI,UAAU,WAAW,2BAA2B;AAClD,8BAA4B,WAAW,YAAY;EACnD,MAAM,iBAAiB,qBAAqB,WAAW,YAAY;EACnE,MAAM,uCAAuC,UAAU,mCACnD,mBAAmB,GACnB;AACJ,MAAI,CAAC,qCACH,6BAA4B,UAAU;EAExC,MAAM,QAAQ,YAAY,WAAW,WAAW,UAAU;GACxD,mBAAmB,wCAAwC,UAAU;GACrE,kBAAkB,UAAU,8BAA8B;GAC1D,wBAAwB,UAAU,oCAAoC;GACvE,CAAC;AACF,YAAU,6BAA6B;AACvC,YAAU,mCAAmC;EAC7C,MAAM,aAAa,UAAU,MAAM;EACnC,MAAM,gBAAgB,qBAAqB,UAAU,KAAM,UAAU,OAAO,UAAU,IAAI;EAC1F,IAAI;AACJ,MAAI;AACF,WAAQ,cAAc,iBACpB,UAAU,aACR,6BAA6B,UAAU,OAAwB,WAAW,YAAY,CACvF,CACF;WACM,OAAO;AACd,sBAAmB,qCAAqC;AACxD,SAAM;;AAER,qBAAmB,qCAAqC;AACxD,yBAAuB,WAAW,WAAW,MAAM,cAAc;AACjE,wBAAsB,WAAW,WAAW,MAAM,YAAY;EAC9D,MAAM,UACJ,iBAAiB,WACjB,gCAAgC,UAAU,OAAO,UAAU,KAAK,MAAM;EACxE,MAAM,uBAAuB,gCAC3B,WACA,UACI,MAAM,gBAAgB,mBACpB,2CAA2C,WAAW,UAAU,OAAO,UAAU,IAAI,mBACrF,IAAI,KAAa,GACnB,wBAAwB,UAAU,OAAO,UAAU,KAAK,OAAO,EAC7D,yBAAyB,MAAM,gBAAgB,kBAChD,CAAC,CACP;AACD,uBAAqB,UAAU,KAAM,UAAU,OAAO,UAAU,KAAK,cAAc;AACnF,MAAI,YAAY;AACd,2BAAwB,WAAW,WAAW;AAC9C,qBAAkB,WAAW,WAAW;;AAE1C,YAAU,SAAS;EACnB,MAAM,kBAAkB,IAAI,IAAI;GAC9B,GAAG,MAAM;GACT,GAAG;GACH,GAAG,qCAAqC,WAAW,UAAU;GAC9D,CAAC;AACF,yBAAuB,WAAW,aAAa,gBAAgB;AAC/D,OAAK,MAAM,gBAAgB,gBAAgB;AACzC,OAAI,gBAAgB,IAAI,aAAa,CACnC;AAEF,+BAA4B,WAAW,aAAa;;AAEtD,sCAAoC,UAAU;AAC9C,SAAO;;AAGT,6BAA4B,WAAW,YAAY;CACnD,MAAM,iBAAiB,qBAAqB,WAAW,YAAY;CACnE,MAAM,QAAQ,iBAAiB,WAAW,UAAU,QAAQ;AAC5D,OAAM,sBAAsB,WAAW,MAAM;CAC7C,MAAM,SAAS,MAAM,WAAW,WAAW,eAAe;CAC1D,MAAM,WACJ,UAAU,YAAY,OAAO,UAAU,aAAa,WAAW,UAAU,WAAW;AACtF,KAAI,SACF,WAAU,QAAQ,cAAc,SAAS;AAE3C,OAAM,sBACJ,WACA;EACE,gBAAgB,EAAE;EAClB,iBAAiB,UAAU,mBAAmB,KAAA;EAC9C,QAAQ,UAAU;EACnB,EACD,UAAU,MACX;CACD,MAAM,+BAA+B,UAAU,mCAC3C,mBAAmB,GACnB;AACJ,KAAI,CAAC,6BACH,6BAA4B,UAAU;CAExC,MAAM,QAAQ,YAAY,WAAW,WAAW,UAAU;EACxD,mBAAmB,gCAAgC,UAAU;EAC7D,kBAAkB,UAAU,8BAA8B;EAC1D,wBAAwB,UAAU,oCAAoC;EACvE,CAAC;AACF,WAAU,6BAA6B;AACvC,WAAU,mCAAmC;CAC7C,MAAM,aAAa,UAAU,MAAM;CACnC,MAAM,gBAAgB,qBAAqB,UAAU,KAAM,UAAU,OAAO,UAAU,IAAI;CAC1F,IAAI;AACJ,KAAI;AACF,UAAQ,cAAc,iBACpB,UAAU,aAAa;GACrB,MAAM,cAAc,WAChB,kBACE,UAAU,IACV;IACE,gBAAgB,EAAE;IAClB,iBAAiB,UAAU,mBAAmB,KAAA;IAC9C,QAAQ;IACT,EACD,SACD,GACD,UAAU,SAAS,OAAO,UAAU,UAAU,WAC5C,kBACE,UAAU,IACV;IACE,gBAAgB,EAAE;IAClB,iBAAiB,UAAU,mBAAmB,KAAA;IAC9C,QAAQ;IACT,EACD,UAAU,MACX,GACD,UAAU;AAEhB,UAAO,eADU,OAAO,QAAQ,OAAO,YAAY,EACnB,UAAU;IAC1C,CACH;UACM,OAAO;AACd,qBAAmB,6BAA6B;AAChD,QAAM,iCAAiC,OAAO;GAC5C;GACA,OAAO;GACP,UAAU;GACX,CAAC;;AAEJ,oBAAmB,6BAA6B;AAChD,wBAAuB,WAAW,WAAW,MAAM,cAAc;AACjE,uBAAsB,WAAW,WAAW,MAAM,YAAY;CAC9D,MAAM,UACJ,iBAAiB,WACjB,gCAAgC,UAAU,OAAO,UAAU,KAAK,MAAM;CACxE,MAAM,uBAAuB,gCAC3B,WACA,UACI,MAAM,gBAAgB,mBACpB,2CAA2C,WAAW,UAAU,OAAO,UAAU,IAAI,mBACrF,IAAI,KAAa,GACnB,wBAAwB,UAAU,OAAO,UAAU,KAAK,OAAO,EAC7D,yBAAyB,MAAM,gBAAgB,kBAChD,CAAC,CACP;AACD,KAAI,UAAU,MAAM,cAAc,sBAAsB,UAAU,MAAM,WACtE,iBAAgB,WAAW,UAAU,MAAM,WAAyB;AAEtE,sBAAqB,UAAU,KAAM,UAAU,OAAO,UAAU,KAAK,cAAc;AACnF,KAAI,YAAY;AACd,0BAAwB,WAAW,WAAW;AAC9C,oBAAkB,WAAW,WAAW;;AAG1C,WAAU,SAAS;CAEnB,MAAM,kBAAkB,IAAI,IAAI;EAC9B,GAAG,MAAM;EACT,GAAG;EACH,GAAG,qCAAqC,WAAW,UAAU;EAC9D,CAAC;AACF,wBAAuB,WAAW,aAAa,gBAAgB;AAE/D,MAAK,MAAM,gBAAgB,gBAAgB;AACzC,MAAI,gBAAgB,IAAI,aAAa,CACnC;AAEF,8BAA4B,WAAW,aAAa;;AAEtD,wBAAuB,WAAW,WAAW,MAAM,eAAe;AAClE,+BAA8B,UAAU;AACxC,qCAAoC,UAAU;AAC9C,QAAO;;AAGT,MAAM,uBAAuB,QAC3B,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,OAAO;AAEpE,MAAM,wBAAwB,QAAgB;AAE5C,QADe,IAAI,IAAI,KAAK,mBAAmB,CACjC,aAAa,IAAI,iBAAiB;;AAGlD,MAAa,mCAAmC,YAAoC;CAClF,MAAM,YAAY,IAAI,IAAI,CAAC,GAAG,QAAQ,0BAA0B,GAAG,QAAQ,qBAAqB,CAAC;AAEjG,MAAK,MAAM,YAAY,WAAW;EAChC,MAAM,iBAAiB,QAAQ,sBAAsB;AACrD,MAAI,CAAC,eACH;EAEF,MAAM,sBAAsB,qBAAqB,eAAe;AAChE,MAAI,oBACF,WAAU,IAAI,oBAAoB;;AAItC,QAAO,CAAC,GAAG,UAAU;;AAGvB,MAAM,8BAA8B,WAA6B,gBAAwB;CACvF,IAAI,YAA2B;AAC/B,QAAO,aAAa,cAAc,mBAAmB;EACnD,MAAM,YAAY,UAAU,WAAW,IAAI,UAAU;AACrD,MAAI,CAAC,UACH,QAAO;AAET,MAAI,UAAU,SAAS,UAAU,IAC/B,QAAO,UAAU;AAEnB,cAAY,UAAU;;AAExB,QAAO;;AAGT,MAAa,+BACX,WACA,cACG;CACH,MAAM,gBAAgB,IAAI,IAAI,UAAU;CACxC,MAAM,oCAAoB,IAAI,KAAa;AAE3C,MAAK,MAAM,aAAa,UAAU,WAAW,QAAQ,EAAE;AACrD,MAAI,CAAC,cAAc,IAAI,UAAU,OAAO,CACtC;EAEF,MAAM,aAAa,2BAA2B,WAAW,UAAU,GAAG;AACtE,MAAI,CAAC,YAAY;AACf,OAAI,UAAU,OACZ,QAAO;AAET;;AAEF,oBAAkB,IAAI,WAAW;;CAGnC,MAAM,SAAmB,EAAE;AAC3B,MAAK,MAAM,cAAc,oBAAoB,kBAAkB,EAAE;AAC/D,MACE,OAAO,MAAM,aAAa,eAAe,YAAY,eAAe,UAAU,WAAW,CAAC,CAE1F;AAEF,SAAO,KAAK,WAAW;;AAEzB,QAAO;;AAGT,MAAa,oCACX,WACA,iBACG;AACH,MAAK,MAAM,CAAC,aAAa,QAAQ,OAAO,QAAQ,aAAa,EAAE;EAC7D,MAAM,aAAa,UAAU,QAAQ,IAAI,YAAY;EACrD,MAAM,cAAc,IAAI,IAAY,CAAC,YAAY,CAAC;AAElD,MAAI;QACG,MAAM,CAAC,aAAa,iBAAiB,UAAU,QAAQ,SAAS,CACnE,KAAI,iBAAiB,WACnB,aAAY,IAAI,YAAY;;AAKlC,OAAK,MAAM,cAAc,YACvB,WAAU,QAAQ,IAAI,YAAY,IAAI;AAExC,gCAA8B,WAAW,YAAY;EAErD,MAAM,eAAe,qBAAqB,IAAI;AAC9C,MAAI,CAAC,aACH;AAGF,OAAK,MAAM,aAAa,UAAU,WAAW,QAAQ,CACnD,KAAI,YAAY,IAAI,UAAU,OAAO,CACnC,WAAU,SAAS;AAIvB,OAAK,MAAM,SAAS,UAAU,QAAQ,QAAQ,CAC5C,KAAI,YAAY,IAAI,MAAM,OAAO,CAC/B,OAAM,SAAS;AAInB,OAAK,MAAM,WAAW,UAAU,SAAS,QAAQ,CAC/C,KAAI,YAAY,IAAI,QAAQ,OAAO,CACjC,SAAQ,SAAS;AAIrB,YAAU,QAAQ,IAAI,cAAc,IAAI;AACxC,gCAA8B,WAAW,CAAC,aAAa,CAAC;;;AAI5D,MAAa,8BAA8B,WAA6B,eAAuB;CAC7F,MAAM,YAAY,UAAU,WAAW,IAAI,WAAW;AACtD,KAAI,CAAC,UACH,QAAO;AAET,6BAA4B,WAAW,WAAW;AAClD,WAAU,SAAS;AACnB,WAAU,sBAAsB;AAChC,WAAU,6BAA6B;AACvC,WAAU,mCAAmC;AAC7C,WAAU,MAAM,IAAI,WAAW;AAC/B,QAAO;;AAGT,MAAa,uBAAuB,OAClC,WACA,YACG;AACH,KAAI,QAAQ,WACV,QAAO;CAGT,MAAM,oBAAoB,gCAAgC,QAAQ;CAClE,MAAM,cAAc,4BAA4B,WAAW,kBAAkB;AAC7E,KAAI,gBAAgB,QAAS,kBAAkB,SAAS,KAAK,YAAY,WAAW,EAClF,QAAO;AAGT,kCAAiC,WAAW,QAAQ,sBAAsB;CAC1E,MAAM,uBAAuB,kBAAkB,QAAQ,aAAa;AAClE,MAAI,OAAO,OAAO,QAAQ,uBAAuB,SAAS,CACxD,QAAO;EAET,MAAM,aAAa,UAAU,QAAQ,IAAI,SAAS;AAClD,SAAO,CAAC,CAAC,cAAc,wBAAwB,WAAW;GAC1D;AACF,uBAAsB,WAAW,sBAAsB,KAAK,KAAK,CAAC;AAClE,+BAA8B,WAAW,qBAAqB;AAE9D,MAAK,MAAM,cAAc,YACvB,4BAA2B,WAAW,WAAW;AAGnD,KAAI,UAAU,MAAM,OAAO,EACzB,OAAM,qBAAqB,UAAU;AAGvC,QAAO;;AAGT,MAAa,6CAA6C,OACxD,YACG;CACH,MAAM,wBAAwB,KAAK,KAAK;CACxC,IAAI,UAAU;AACd,MAAK,MAAM,aAAa,qBAAqB,EAAE;AAM7C,MALkB,MAAM,4BACtB,WACA,QAAQ,SACR,sBACD,EACc;AACb,aAAU;AACV;;AAGF,MADe,MAAM,qBAAqB,WAAW,QAAQ,KAC9C,UACb,WAAU;;AAId,QAAO,UAAW,YAAuB;;AAG3C,MAAa,uBAAuB,OAAO,cAAgC;CACzE,MAAM,eAAe;AACrB,QAAO,MAAM;EACX,MAAM,WAAW,aAAa;AAC9B,MAAI,oBAAoB,SAAS;AAC/B,SAAM;AACN,OAAI,UAAU,MAAM,SAAS,EAC3B;AAEF;;AAGF,MAAI,UAAU,MAAM,SAAS,EAC3B;EAGF,MAAM,eAAe,2BAA2B,WAAW,UAAU,KAAK,cAAc;EAExF,MAAM,YAAY,YAAY;AAC5B,UAAO,UAAU,MAAM,OAAO,GAAG;IAC/B,MAAM,QAAQ,oBAAoB,UAAU,MAAM;AAClD,cAAU,MAAM,OAAO;IACvB,MAAM,mCAAmB,IAAI,KAAa;IAC1C,MAAM,6BAAa,IAAI,KAAa;AACpC,SAAK,MAAM,eAAe,OAAO;KAC/B,MAAM,mBAAmB,CAAC,GAAG,WAAW,CAAC,MACtC,aAAa,gBAAgB,YAAY,eAAe,UAAU,YAAY,CAChF;AACD,SAAI,kBAAkB;MACpB,MAAM,YAAY,UAAU,WAAW,IAAI,YAAY;AACvD,UACE,iBAAiB,IAAI,iBAAiB,IACtC,WAAW,OAAO,cAClB,UAAU,KAAK,YACf;AACA,iBAAU,SAAS;AACnB,iBAAU,MAAM,IAAI,YAAY;;AAElC;;KAEF,MAAM,YAAY,UAAU,WAAW,IAAI,YAAY;AACvD,SAAI,WAAW,OACb;KAEF,MAAM,8BACH,WAAW,uBAAuB,eAAe,YACjD,WAAW,oCAAoC;KAClD,MAAM,UAAU,MAAM,kBAAkB,WAAW,YAAY;AAC/D,gBAAW,IAAI,YAAY;AAC3B,SAAI,8BAA8B,QAChC,kBAAiB,IAAI,YAAY;;;MAIrC;AAEJ,eAAa,2BAA2B;AACxC,MAAI;AACF,SAAM;YACE;AACR,OAAI,aAAa,6BAA6B,SAC5C,QAAO,aAAa;;AAIxB,sBAAoB,WAAW,aAAa;AAE5C,MAAI,UAAU,MAAM,SAAS,EAC3B;;;AAKN,MAAM,2BAA2B,YAAY;CAC3C,MAAM,WAAY,WAA4C;AAC9D,KAAI,oBAAoB,QACtB,OAAM;;AAIV,MAAa,qBACX,SACA,WAIG;CACH,MAAM,YAAY,gBAAgB,QAAQ;CAmB1C,MAAM,YAAY,YAAY,WAlBQ;EACpC,QAAQ;EACR,UAAU;EACV,IAAI;EACJ,mBAAmB,EAAE;EACrB,UAAU;EACV,OAAO,EAAE;EACT,iBAAiB;EACjB,UAAU;EACV,yBAAyB,mBAAmB;EAC5C,SAAS,cAAc,WAAW,EAAE,CAAC;EACrC,WAAW,EAAE;EACb,QAAQ;EACR,iBAAiB;EACjB,cAAc;EACd,YAAY;EACb,EAEuD,MAAM;AAE9D,QAAO;EACL;EACA,QAHa,cAAc,iBAAiB,UAAU,WAAW,OAAO,CAAC;EAI1E;;AAGH,MAAa,yBAAyB,OACpC,SACA,QACA,SACA,YAMI;CACJ,MAAM,YAAY,gBAAgB,SAAS,KAAA,GAAW,SAAS,yBAAyB;CAmBxF,MAAM,YAAY,YAAY,WAlBQ;EACpC,QAAQ;EACR,UAAU;EACV,IAAI;EACJ,mBAAmB,EAAE;EACrB,UAAU;EACV,OAAO,EAAE;EACT,iBAAiB;EACjB,UAAU;EACV,yBAAyB,mBAAmB;EAC5C,SAAS,cAAc,WAAW,EAAE,CAAC;EACrC,WAAW,EAAE;EACb,QAAQ;EACR,iBAAiB;EACjB,cAAc;EACd,YAAY;EACb,EAEuD,MAAM;AAC9D,OAAM,UAAU,UAAU;AAE1B,QAAO;EACL;EACA,QAHa,cAAc,iBAAiB,UAAU,WAAW,OAAO,CAAC;EAI1E;;AAGH,MAAM,uBACJ,WACA,iBACkB;CAClB,MAAM,iBAAiB,eAAe,IAAI,IAAI,aAAa,GAAG;CAC9D,MAAM,mBAAmB,CAAC,GAAG,UAAU,WAAW,SAAS,CAAC,CAAC,QAC1D,CAAC,QAAQ,CAAC,kBAAkB,eAAe,IAAI,GAAG,CACpD;CACD,MAAM,cAAc,IAAI,IAAI,iBAAiB,SAAS,GAAG,eAAe,UAAU,UAAU,CAAC;AAC7F,KAAI;OACG,MAAM,CAAC,IAAI,WAAW,UAAU,QAAQ,SAAS,CACpD,KAAI,CAAC,GAAG,OAAO,YAAY,CAAC,MAAM,gBAAgB,eAAe,IAAI,YAAY,CAAC,CAChF,aAAY,IAAI,GAAG;;AAKzB,QAAO;EACL,SAAS,OAAO,YACd,CAAC,GAAG,UAAU,aAAa,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,YAAY,CAC1D,IACA;GACE,OAAO,sBAAsB,WAAW,OAAO,MAAM;GACrD,OAAO,sBAAsB,WAAW,OAAO,MAAM;GACrD,QAAQ,sBAAsB,WAAW,OAAO,OAAO;GACxD,CACF,CAAC,CACH;EACD,YAAY,OAAO,YACjB,iBAAiB,KAAK,CAAC,IAAI,eAAe,CACxC,IACA;GACE,GAAI,UAAU,gBAAgB,EAAE,eAAe,MAAM,GAAG,EAAE;GAC1D,OAAO,sBAAsB,WAAW,UAAU,MAAM;GACxD,GAAI,UAAU,kBACV,EAAE,iBAAiB,EAAE,GAAG,UAAU,iBAAiB,EAAE,GACrD,EAAE;GACN,OAAO,UAAU;GACjB,WAAW,CAAC,GAAG,UAAU,UAAU;GACnC,QAAQ,UAAU;GAClB,cAAc,UAAU;GACxB,YAAY,UAAU;GACvB,CACF,CAAC,CACH;EACD,SAAS,OAAO,YACd,CAAC,GAAG,UAAU,aAAa,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,YAAY,CAC1D,IACA;GACE,MAAM,sBAAsB,WAAW,OAAO,KAAK;GACnD,OAAO,sBAAsB,WAAW,OAAO,MAAM;GACrD,QAAQ,OAAO;GAChB,CACF,CAAC,CACH;EACD,QAAQ,OAAO,YAAY,UAAU,OAAO,SAAS,CAAC;EACtD,SAAS,OAAO,YACd,CAAC,GAAG,UAAU,QAAQ,SAAS,CAAC,CAC7B,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,YAAY,IAAI,GAAG,CAAC,CACxD,KAAK,CAAC,IAAI,YAAY,CAAC,IAAI,sBAAsB,WAAW,OAAO,MAAM,CAAC,CAAC,CAC/E;EACD,eAAe,OAAO,YACpB,CAAC,GAAG,UAAU,QAAQ,SAAS,CAAC,CAC7B,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,YAAY,IAAI,GAAG,CAAC,CACxD,KAAK,CAAC,IAAI,YAAY,CACrB,IACA,CAAC,GAAG,OAAO,YAAY,CAAC,QACrB,gBAAgB,CAAC,kBAAkB,eAAe,IAAI,YAAY,CACpE,CACF,CAAC,CACL;EACD,SAAS,OAAO,YAAY,UAAU,QAAQ,SAAS,CAAC;EACxD,UAAU,OAAO,YACf,CAAC,GAAG,UAAU,SAAS,SAAS,CAAC,CAC9B,QAAQ,GAAG,aAAa,CAAC,kBAAkB,eAAe,IAAI,QAAQ,YAAY,CAAC,CACnF,KAAK,CAAC,IAAI,aAAa,CACtB,IACA;GACE,aAAa,QAAQ;GACrB,OAAO,QAAQ;GACf,QAAQ,QAAQ;GACjB,CACF,CAAC,CACL;EACD,SAAS,OAAO,YACd,CAAC,GAAG,UAAU,QAAQ,SAAS,CAAC,CAC7B,QAAQ,GAAG,WAAW,CAAC,kBAAkB,eAAe,IAAI,MAAM,YAAY,CAAC,CAC/E,KAAK,CAAC,IAAI,WAAW,CACpB,IACA;GACE,aAAa,MAAM;GACnB,MAAM,MAAM;GACZ,OAAO,MAAM;GACb,SAAS,CAAC,GAAG,MAAM,OAAO,QAAQ,CAAC,KAAK,WAAW,OAAO,GAAG;GAC7D,QAAQ,MAAM;GACf,CACF,CAAC,CACL;EACF;;AAGH,MAAa,mBAAmB,cAC9B,oBAAoB,UAAU;AAEhC,MAAa,yBACX,WACA,iBACkB,oBAAoB,WAAW,aAAa;AAEhE,MAAM,2BAA2B,WAA6B,SAAqB;AACjF,KAAI,CAAC,iBAAiB,KAAK,CACzB;AAEF,MAAK,MAAM,CAAC,IAAI,aAAa,wBAAwB,KAAK,EAAE;EAC1D,MAAM,YAAY,UAAU,WAAW,IAAI,GAAG;AAC9C,MAAI,CAAC,UACH;AAEF,YAAU,QAAQ,SAAS;AAC3B,YAAU,MAAM,SAAS;;;AAI7B,MAAa,sBAAsB,WAA6B,YAA2B;AACzF,MAAK,MAAM,CAAC,IAAI,kBAAkB,OAAO,QAAQ,QAAQ,WAAW,EAAE,CAAC,CACrE,WAAU,aAAa,IAAI,IAAI;EAC7B,OAAO,wBAAwB,WAAW,cAAc,MAAM;EAC9D,OAAO,wBAAwB,WAAW,cAAc,MAAM;EAC9D,QAAQ,wBAAwB,WAAW,cAAc,OAAO;EACjE,CAAC;AAGJ,MAAK,MAAM,CAAC,IAAI,iBAAiB,OAAO,QAAQ,QAAQ,QAAQ,EAAE;EAChE,MAAM,eAAe,wBAAwB,WAAW,aAAa;EACrE,MAAM,SAAS,mBAAmB,WAAW,IAAI,aAAa;AAC9D,SAAO,QAAQ;;AAGjB,MAAK,MAAM,CAAC,IAAI,kBAAkB,OAAO,QAAQ,QAAQ,WAAW,EAAE,CAAC,CACrE,WAAU,aAAa,IAAI,IAAI;EAC7B,MAAM,wBAAwB,WAAW,cAAc,KAAK;EAC5D,OAAO,wBAAwB,WAAW,cAAc,MAAM;EAC9D,QAAQ,cAAc;EACvB,CAAC;AAGJ,MAAK,MAAM,CAAC,IAAI,UAAU,OAAO,QAAQ,QAAQ,OAAO,CACtD,WAAU,OAAO,IAAI,IAAI,MAAM;AAEjC,WAAU,cAAc,kBAAkB,UAAU,OAAO,MAAM,EAAE,KAAK;AAExE,MAAK,MAAM,CAAC,IAAI,qBAAqB,OAAO,QAAQ,QAAQ,WAAW,CACrE,WAAU,WAAW,IAAI,IAAI;EAC3B,QAAQ;EACR,UAAU;EACV;EACA,mBAAmB,EAAE;EACrB,eAAe,iBAAiB,kBAAkB;EAClD,UAAU,GAAG,SAAS,IAAI,GAAG,GAAG,MAAM,GAAG,GAAG,YAAY,IAAI,CAAC,GAAG;EAChE,oCAAoC;EACpC,OAAO,wBAAwB,WAAW,iBAAiB,MAAM;EACjE,iBAAiB,iBAAiB,kBAC9B,EAAE,GAAG,iBAAiB,iBAAiB,GACvC;EACJ,UAAU;EACV,yBAAyB,mBAAmB;EAC5C,SAAS,iBAAiB;EAC1B,WAAW,CAAC,GAAG,iBAAiB,UAAU;EAC1C,QAAQ,iBAAiB;EACzB,iBAAiB;EACjB,cAAc,iBAAiB,gBAAgB;EAC/C,YAAY,iBAAiB;EAC9B,CAAC;AAGJ,MAAK,MAAM,CAAC,UAAU,gBAAgB,OAAO,QAAQ,QAAQ,cAAc,EAAE;EAC3E,MAAM,SAAS,UAAU,QAAQ,IAAI,SAAS;AAC9C,MAAI,CAAC,OACH;AAEF,SAAO,cAAc,IAAI,IAAI,YAAY;;AAE3C,WAAU,eAAe,kBAAkB,UAAU,QAAQ,MAAM,EAAE,IAAI;AACzE,WAAU,aAAa,kBAAkB,UAAU,QAAQ,MAAM,EAAE,IAAI;AAEvE,MAAK,MAAM,CAAC,IAAI,iBAAiB,OAAO,QAAQ,QAAQ,QAAQ,EAAE;EAChE,MAAM,QAAQ,sBAAsB,WAAW,IAAI,aAAa,YAAY;AAC5E,QAAM,OAAO,aAAa;AAC1B,QAAM,UAAU,aAAa;AAC7B,QAAM,SAAS,aAAa;AAC5B,QAAM,QAAQ;AACd,QAAM,MAAM;AACZ,qBAAmB,MAAM,OAAO;AAChC,OAAK,MAAM,YAAY,aAAa,SAAS;GAC3C,MAAM,SAAS,UAAU,QAAQ,IAAI,SAAS;AAC9C,OAAI,CAAC,OACH;AAEF,SAAM,OAAO,QAAQ,IAAI,OAAO;AAChC,UAAO,QAAQ,IAAI,MAAM,OAAO;;;AAIpC,MAAK,MAAM,CAAC,IAAI,mBAAmB,OAAO,QAAQ,QAAQ,YAAY,EAAE,CAAC,EAAE;EACzE,MAAM,UAAU,wBAAwB,WAAW,IAAI,eAAe,YAAY;AAClF,UAAQ,OAAO;AACf,UAAQ,UAAU;AAClB,UAAQ,MAAM;AACd,UAAQ,UAAU,eAAe;AACjC,UAAQ,SAAS,eAAe;;;AAIpC,MAAM,oCACJ,WACA,YACA,YACG;AAIH,wBAAuB,WAAW,YAHrB,IAAI,IACf,OAAO,KAAK,QAAQ,WAAW,CAAC,QAAQ,cAAc,eAAe,YAAY,UAAU,CAAC,CAC7F,CACkD;;AAGrD,MAAM,iCACJ,WACA,UACG;CACH,MAAM,MAAM,UAAU;AACtB,KAAI,CAAC,IACH;CAEF,MAAM,YAAY,UAAU,WAAW,IAAI,MAAM,WAAW;AAC5D,KAAI,CAAC,WAAW,SAAS,CAAC,UAAU,IAClC;CAEF,MAAM,WAAW,IAAI,eAAe,MAAM,WAAW;CACrD,MAAM,gBAAgB,IAAI,eAAe,MAAM,gBAAgB;AAC/D,KAAI,EAAE,oBAAoB,wBAAwB,CAAC,eAAe,YAChE;CAGF,MAAM,UAAU,KAAK,MAAM,cAAc,YAAY;CACrD,MAAM,gBAAgB,qBAAqB,KAAK,UAAU,OAAO,UAAU,IAAI;CAE/E,MAAM,QAAQ,CAAC,GADE,SAAS,QAAQ,UAAU,KAAK,CACtB,WAAW;AACtC,yBAAwB,UAAU,OAAO,UAAU,KAAK,MAAM;AAC9D,kCAAiC,WAAW,MAAM,YAAY,QAAQ;AACtE,oBAAmB,WAAW,QAAQ;AACtC,WAAU,kBAAkB;CAE5B,MAAM,aAAa,UAAU,MAAM;AACnC,KAAI,YAAY;AACd,0BAAwB,WAAW,WAAW;AAC9C,oBAAkB,WAAW,WAAW;AACxC,MAAI,sBAAsB,WACxB,iBAAgB,WAAW,WAAW;;AAI1C,sBAAqB,KAAK,UAAU,OAAO,UAAU,KAAK,cAAc;AACxE,+BAA8B,UAAU;AACxC,UAAS,QAAQ;AACjB,eAAc,QAAQ;;AAGxB,MAAM,uBAAoC;CACxC,MAAM,eAAe;CACrB,MAAM,WAAW,aAAa;AAC9B,KAAI,YAAY,OAAO,aAAa,YAAY,aAAa,YAAY,aAAa,SACpF,QAAO;CAET,MAAM,UAAuB;EAC3B,QAAQ,OAAO;AACb,WAAQ,QAAQ,KAAK,MAAM;AACtB,WAAQ,WAAW;;EAE1B,SAAS,EAAE;EACX,YAAY;EACb;AACD,cAAa,oBAAoB;AACjC,QAAO;;AAGT,MAAa,iDACX,0BAA0B,iBAAiB,gLAAgL,wBAAwB,kdAAkd,gBAAgB,uUAAuU,mBAAmB;AAEjjC,MAAM,wCAA4E;CAChF,MAAM,eAAe;CACrB,MAAM,UAAU,aAAa;AAC7B,KACE,CAAC,WACD,OAAO,YAAY,YACnB,OAAQ,QAA+B,SAAS,SAEhD,QAAO;AAET,QAAO,aAAa;AACpB,QAAO;EACL,MAAO,QAA6B;EACpC,SAAU,QAAkC,YAAY;EACzD;;AAGH,MAAM,qCAAqC,cAAgC;CACzE,MAAM,QAAQ,gBAAgB;AAC9B,OAAM,UAAU,YAAY;AAC1B,MAAI,MAAM,YAAY;AACpB,SAAM,MAAM;AACZ;;AAEF,QAAM,cAAc,YAAY;AAC9B,UAAO,MAAM,QAAQ,SAAS,GAAG;IAC/B,MAAM,QAAQ,MAAM,QAAQ,OAAO;AACnC,QAAI,CAAC,MACH;AAEF,kCAA8B,WAAW,MAAM;;MAE/C;AACJ,MAAI;AACF,SAAM,MAAM;YACJ;AACR,SAAM,aAAa;;;AAGvB,KAAI,MAAM,QAAQ,SAAS,EACpB,OAAM,SAAS;;AAIxB,MAAa,yBACX,QACA,SACA,YAGG;CACH,MAAM,MAAM,kBAAkB,WAAW,SAAS,OAAO;CACzD,MAAM,OAAO,kBAAkB,WAAW,IAAI,OAAO;CACrD,MAAM,YAAY,gBAAgB,QAAQ,SAAS,IAAI;AACvD,WAAU,cAAc;AACxB,mBAAkB,WAAW,SAAS,cAAc;AAEpD,oBAAmB,WAAW,QAAQ;AACtC,kCAAiC,KAAoB;AACrD,yBAAwB,WAAW,KAAoB;AACvD,mBAAkB,WAAW,KAAoB;AAEjD,6BAA4B,UAAU;AAEtC,mBAAkB,UAAU;AAC5B,4BAA2B,WAAW,IAAI,SAAS,KAAK;AACxD,+BAA8B,UAAU;AAExC,QAAO;;AAGT,MAAM,uCACJ,WACA,cAEA,CAAC,CAAC,UAAU,SACZ,CAAC,CAAC,UAAU,OACZ,CAAC,UAAU,UACX,UAAU,UAAU,SAAS,MAC5B,UAAU,WAAW,6BACpB,UAAU,QAAQ,IAAI,UAAU,OAAO,IACvC,UAAU,QAAQ,IAAI,UAAU,OAAO;AAE3C,MAAa,mCAAmC,OAAO,cAAgC;CACrF,IAAI,SAAS;CACb,MAAM,cAAwB,EAAE;AAEhC,MAAK,MAAM,eAAe,oBACxB,CAAC,GAAG,UAAU,WAAW,QAAQ,CAAC,CAC/B,QAAQ,cAAc,oCAAoC,WAAW,UAAU,CAAC,CAChF,KAAK,cAAc,UAAU,GAAG,CACpC,EAAE;EACD,MAAM,YAAY,UAAU,WAAW,IAAI,YAAY;AACvD,MAAI,CAAC,aAAa,UAAU,OAC1B;AAEF,YAAU,SAAS;AACnB,YAAU,sBAAsB;AAChC,YAAU,6BAA6B;AACvC,YAAU,mCAAmC;AAC7C,YAAU,MAAM,IAAI,UAAU,GAAG;AACjC,cAAY,KAAK,UAAU,GAAG;AAC9B,WAAS;;AAGX,KAAI,OACF,OAAM,qBAAqB,UAAU;AAGvC,MAAK,MAAM,eAAe,aAAa;EACrC,MAAM,YAAY,UAAU,WAAW,IAAI,YAAY;AACvD,MAAI,CAAC,WAAW,OACd;AAEF,sCAAoC,UAAU;;;AAIlD,MAAa,+BAA+B,cAAgC;AAC1E,sBAAqB,iBAAiB;AACpC,OAAK,MAAM,MAAM,4BAA4B,CAC3C,yBAAuC,GAAG,IAAI;AAEhD,OAAK,MAAM,MAAM,4BAA4B,CAC3C,yBAAuC,GAAG,IAAI;GAEhD;;AAGJ,MAAa,oBAAoB,OAAO,cAAgC;CACtE,MAAM,SAAS,kBAAkB,UAAU;CAC3C,MAAM,eAAe,MAAM,mBAAmB,WAAW,OAAO,YAAY,MAAM;AAClF,KAAI,cAAc;AAChB,SAAO,eAAe;AACtB,MAAI,UAAU,IACZ,oBACE,UAAU,KACV,cACA,IAAI,IAAI,UAAU,IAAI,SAAS,KAAK,EACpC,OAAO,aACR;;;AAKP,MAAM,uBAAuB,UAAmC;CAC9D,MAAM,cAAc;CAIpB,MAAM,WAAW,YAAY;AAC7B,KAAI,SACF,QAAO;CAGT,MAAM,yBAAyB,MAAM,eAAe,KAAK,MAAM;CAC/D,MAAM,QAA0B;EAC9B;EACA,iBAAiB;EACjB,eAAe;EAChB;AAED,aAAY,uBAAuB;AACjC,MAAI,MAAM,gBACR,OAAM,gBAAgB;AAExB,0BAAwB;;AAE1B,aAAY,0BAA0B;AACtC,QAAO;;AAGT,MAAM,yBAAyB,QAA4B,cAAsC;CAC/F,IAAI,UAAU,cAAc,OAAO,GAC/B,SACA,kBAAkB,OAChB,OAAO,gBACP;AACN,QAAO,SAAS;AACd,MAAI,QAAQ,aAAa,YAAY,YAAY,CAC/C,QAAO;AAET,YAAU,QAAQ;;AAEpB,QAAO;;AAGT,MAAM,mCAAmC;CACvC;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AACD,MAAM,gCAAgC,iCAAiC,KACpE,cAAc,aAAa,UAAU,GACvC,CAAC,KAAK,KAAK;AAEZ,MAAM,0BACJ,WACA,SACA,eACG;AACH,MAAK,MAAM,aAAa,YAAY;EAClC,MAAM,UAAU,QAAQ,aAAa,YAAY,YAAY;AAC7D,MAAI,CAAC,QACH;EAEF,MAAM,EAAE,aAAa,aAAa,QAAQ;AACrC,aAAW,WAAW,SAAS,CAAC,YAAY,GAAG;;;AAIxD,MAAM,oCACJ,WACA,QACA,eACG;CACH,IAAI,UAAU,cAAc,OAAO,GAC/B,SACA,kBAAkB,OAChB,OAAO,gBACP;AAEN,QAAO,SAAS;AACd,yBAAuB,WAAW,SAAS,WAAW;AACtD,YAAU,QAAQ;;;AAItB,MAAM,mCACJ,WACA,OACA,SACiC;AACjC,KAAI,EAAE,iBAAiB,YACrB,QAAO;AAET,KAAI,MAAM,iBACR,QAAO;AAET,KAAI,MAAM,WAAW,KAAK,MAAM,WAAW,MAAM,WAAW,MAAM,YAAY,MAAM,OAClF,QAAO;AAET,KAAI,KAAK,aAAa,WAAW,CAC/B,QAAO;AAET,KAAI,KAAK,UAAU,KAAK,WAAW,QACjC,QAAO;CAGT,MAAM,OAAO,KAAK,aAAa,OAAO;AACtC,KAAI,CAAC,QAAQ,CAAC,UAAU,IACtB,QAAO;CAGT,MAAM,MAAM,IAAI,IAAI,MAAM,UAAU,IAAI,SAAS,KAAK;CACtD,MAAM,WAAW,mBAAmB,IAAI,SAAS;AACjD,KAAI,IAAI,WAAW,UAAU,IAAI,SAAS,OACxC,QAAO;AAGT,KAAI,CADY,mBAAmB,kBAAkB,UAAU,CAAC,UAAU,SAAS,EACrE,MAAM,KAClB,QAAO;CAGT,MAAM,QAAQ,oBAAoB,MAAM;AACxC,OAAM,kBAAkB;AACxB,OAAM,wBAAwB;AAE9B,QAAO;EACL,MAAM,IAAI;EACV,SAAS,KAAK,aAAa,mBAAmB,KAAK;EACnD;EACD;;AAGH,MAAM,uBAAuB,SAA8C;CACzE,MAAM,QAAQ,KAAK,aAAa,oBAAoB;AACpD,KAAI,UAAU,WAAW,UAAU,WAAW,UAAU,YAAY,UAAU,OAC5E,QAAO;AAET,QAAO;;AAGT,MAAM,uBAAuB,WAA+B;CAC1D,IAAI,UAAU,cAAc,OAAO,GAC/B,SACA,kBAAkB,OAChB,OAAO,gBACP;AAEN,QAAO,SAAS;AACd,MAAI,wBAAwB,QAAQ,IAAI,QAAQ,aAAA,cAA6B,CAC3E,QAAO;AAET,YAAU,QAAQ;;AAGpB,QAAO;;AAGT,MAAM,0BAA0B,WAA6B,SAA4B;CACvF,MAAM,YAAY;AAGlB,KAAI,UAAU,gCACZ;AAGF,WAAU,kCAAkC;CAC5C,MAAM,OAAO,oBAAoB,KAAK;AACtC,KAAI,SAAS,OACX;CAGF,MAAM,oBAAoB;EACxB,MAAM,OAAO,KAAK,aAAa,OAAO;AACtC,MAAI,CAAC,KACH;AAEG,gBAAc,WAAW,KAAK;;CAGrC,MAAM,4BAA4B,UAAiB;AACjD,MAAI,iBAAiB,cAAc,MAAM,WAAW,EAClD;AAEF,eAAa;;AAGf,KAAI,SAAS,WAAW,SAAS,SAC/B,MAAK,iBAAiB,cAAc,YAAY;AAElD,KAAI,SAAS,WAAW,SAAS,SAC/B,MAAK,iBAAiB,SAAS,YAAY;AAE7C,KAAI,SAAS,SACX,MAAK,iBAAiB,eAAe,yBAAyB;;AAIlE,MAAM,kBAAkB,WAA6B,SAA4B;CAC/E,MAAM,YAAY;AAGlB,KAAI,UAAU,uBACZ;AAGF,WAAU,yBAAyB;AACnC,MAAK,iBAAiB,UAAU,UAAU;EACxC,MAAM,cAAc,gCAAgC,WAAW,OAAO,KAAK;AAC3E,MAAI,CAAC,eAAe,YAAY,MAAM,cACpC;AAEG,oBAAkB,WAAW,YAAY,MAAM,EAClD,MAAM,YAAY,UAAU,YAAY,QACzC,CAAC;GACF;;AAGJ,MAAM,mBAAmB,WAA6B,SAAqB;CACzE,MAAM,QAAQ,KAAK,iBAAiB,KAAK,gBAAgB,GAAG;AAC5D,MAAK,MAAM,QAAQ,OAAO;AACxB,MAAI,CAAC,wBAAwB,KAAK,CAChC;AAEF,yBAAuB,WAAW,KAAK;AACvC,iBAAe,WAAW,KAAK;;;AAInC,MAAa,8BAA8B,cAAgC;AACzE,KAAI,CAAC,UAAU,IACb;AAEF,iBAAgB,WAAW,UAAU,IAAI;CACzC,MAAM,gBAAgB,UAAiB;EACrC,MAAM,OAAO,oBAAoB,MAAM,OAAO;AAC9C,MAAI,CAAC,KACH;EAEF,MAAM,cAAc,gCAAgC,WAAW,OAAO,KAAK;AAC3E,MAAI,CAAC,eAAe,YAAY,MAAM,cACpC;AAEG,oBAAkB,WAAW,YAAY,MAAM,EAClD,MAAM,YAAY,UAAU,YAAY,QACzC,CAAC;;AAEJ,WAAU,IAAI,iBAAiB,SAAS,aAAa;CACrD,MAAM,UAAU,iCAAiC;AACjD,KAAI,QACG,mBAAkB,WAAW,QAAQ,MAAM,EAC9C,MAAM,QAAQ,UAAU,YAAY,QACrC,CAAC;AAEJ,cAAa;AACX,YAAU,KAAK,oBAAoB,SAAS,aAAa;;;AAI7D,MAAM,gBAAgB,UAAyD;CAC7E,MAAM,iBAAiB,MAAM,QAAQ,IAAI;AACzC,KAAI,iBAAiB,EACnB,OAAM,IAAI,MAAM,mBAAmB,MAAM,GAAG;AAE9C,QAAO;EACL,UAAU,MAAM,MAAM,GAAG,eAAe;EACxC,SAAS,MAAM,MAAM,iBAAiB,EAAE;EACzC;;AAGH,MAAM,sBAAsB,OAAU,WAA6B,OACjE,cAAc,iBAAiB,QAAQ,QAAQ,IAAI,CAAC,CAAC;AAEvD,MAAa,wBAAwB,OAAc,kBACjD,IAAI,MAAM,OAAO,EACf,IAAI,QAAQ,UAAU;AACpB,KAAI,aAAa,gBACf,QAAO;CAET,MAAM,QAAQ,QAAQ,IAAI,QAAQ,UAAU,OAAO;AACnD,QAAO,OAAO,UAAU,aAAa,MAAM,KAAK,OAAO,GAAG;GAE7D,CAAC;AAEJ,MAAM,yBACJ,SACA,iBACG;AACH,KACE,uBAAuB,QAAQ,IAC/B,OAAO,iBAAiB,aACvB,QAAQ,SAAS,YAAY,QAAQ,SAAS,YAC/C,CAAC,OAAO,MAAM,QAAQ,cAAc,CAEpC,QAAO,QAAQ;AAGjB,QAAO,QAAQ;;AAGjB,MAAa,0BAA0B,WAA6B,WAA+B;AACjG,KACE,CAAC,uBAAuB,OAAO,IAC/B,CAAC,wBAAwB,OAAO,IAChC,CAAC,0BAA0B,OAAO,CAElC,QAAO;CAGT,IAAI,UAAU;CACd,MAAM,gBAAgB,OAAO,aAAa,gBAAgB;AAC1D,KAAI,eAAe;EACjB,MAAM,SAAS,UAAU,QAAQ,IAAI,cAAc;AACnD,MAAI,QAAQ;AAEV,oBAAiB,WAAW,QADV,sBAAsB,QAAQ,OAAO,MAAM,CACf;AAC9C,aAAU;;;AAId,KAAI,uBAAuB,OAAO,EAAE;EAClC,MAAM,kBAAkB,OAAO,aAAa,kBAAkB;AAC9D,MAAI,iBAAiB;GACnB,MAAM,SAAS,UAAU,QAAQ,IAAI,gBAAgB;AACrD,OAAI,QAAQ;IACV,MAAM,cAAc,OAAO;AAC3B,qBAAiB,WAAW,QAAQ,YAAY;AAChD,cAAU;;;;AAKhB,QAAO;;AA4BT,MAAa,sBAAsB,OAAO,WAA6B,UAAiB;CACtF,MAAM,oBAAoB,sBAAsB,MAAM,QAAQ,MAAM,KAAK;AACzE,KAAI,CAAC,kBACH;CAGF,MAAM,UAAU,kBAAkB,aAAa,YAAY,MAAM,OAAO;AACxE,KAAI,CAAC,QACH;CAEF,MAAM,eAAe,2BAA2B,WAAW,MAAM,OAAO;CAExE,MAAM,EAAE,SAAS,aAAa,aAAa,QAAQ;CACnD,MAAM,SACJ,0BAA0B,UAAU,CAAC,IAAI,SAAS,IAAK,MAAM,WAAW,WAAW,SAAS;CAC9F,MAAM,QAAQ,iBAAiB,WAAW,QAAQ;AAClD,KAAI;AACF,QAAM,oBAAoB,WAAW,YAAY;AAC/C,SAAM,OAAO,QAAQ,OAAO,qBAAqB,OAAO,kBAAkB,CAAC;IAC3E;UACK,OAAO;AACd,QAAM,iCAAiC,OAAO;GAC5C,OAAO;GACP;GACD,CAAC;;AAEJ,OAAM,qBAAqB,UAAU;AACrC,qBAAoB,WAAW,aAAa;;AAG9C,MAAa,wBAAwB,OAAO,WAA6B,UAAiB;AACxF,KAAI,UAAU,mBACZ,OAAM,UAAU;CAElB,MAAM,sBACH,MAAM,SAAS,WAAW,MAAM,SAAS,aAC1C,uBAAuB,WAAW,MAAM,OAAO;CACjD,MAAM,eAAe,qBACjB,2BAA2B,WAAW,MAAM,OAAO,GACnD;AACJ,OAAM,oBAAoB,WAAW,MAAM;AAC3C,KAAI,oBAAoB;AACtB,QAAM,qBAAqB,UAAU;AACrC,sBAAoB,WAAW,aAAa;;AAE9C,KAAI,MAAM,SAAS,YAAY,CAAC,MAAM,oBAAoB,sBAAsB,MAAM,OAAO,EAAE;EAC7F,MAAM,WAAW,MAAM,OAAO,aAAaA,mBAAiB;AAC5D,MAAI,UAAU;GACZ,MAAM,SAAS,UAAU,QAAQ,IAAI,SAAS;AAK9C,OAAI,QAAQ;AACV,UAAM,gBAAgB;IACtB,MAAM,YACJ,OAAO,gBAAgB,eAAe,iBAAiB,cAClD,MAAM,aAAa,KAAA,IACpB,KAAA;IACN,MAAM,WAAW,kBAAkB,UAAU,GACzC,IAAI,SAAS,MAAM,QAAQ,UAAU,GACrC,IAAI,SAAS,MAAM,OAAO;AAC9B,UAAM,OAAO,OAAO,SAAS;AAC7B,UAAM,qBAAqB,UAAU;;;;;AAM7C,MAAM,wBAAwB,WAA6B,UAAiB;AAC1E,KAAI,CAAC,UAAU,sBAAsB;EAEnC,MAAM,UADU,sBAAsB,WAAW,MAAM,CAC/B,cAAc;AACpC,OAAI,UAAU,yBAAyB,QACrC,WAAU,uBAAuB;IAEnC;AACF,YAAU,uBAAuB;AACjC,SAAO;;CAIT,MAAM,UADW,UAAU,wBAAwB,QAAQ,SAAS,EAEjE,YAAY,GAAG,CACf,KAAK,YAAY;AAChB,QAAM,sBAAsB,WAAW,MAAM;GAC7C;AACJ,WAAU,uBAAuB,OAAO,cAAc;AACpD,MAAI,UAAU,yBAAyB,OACrC,WAAU,uBAAuB;GAEnC;AACF,QAAO,UAAU;;AAGnB,MAAa,0BAA0B,cAAgC;CACrE,MAAM,MAAM,UAAU;AACtB,KAAI,CAAC,IACH,cAAa;CAEf,MAAM,oBAAoB,2BAA2B,UAAU;AAC/D,mCAAkC,UAAU;AAC5C,2BAA0B,UAAU;AACpC,+BAA8B,UAAU;CACxC,MAAM,YAAY;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,MAAM,WAAW,UAAiB;AAC3B,uBAAqB,WAAW,MAAM;;CAE7C,MAAM,YAAY,UAAiB;AACjC,MAAI,MAAM,SAAS,eAAe;AAChC,oCAAiC,WAAW,MAAM,QAAQ,CAAC,SAAS,SAAS,CAAC;AAC9E;;AAEF,mCAAiC,WAAW,MAAM,QAAQ,iCAAiC;;CAE7F,MAAM,mBAAmB;AAClB,oBAAkB,WAAW,IAAI,SAAS,MAAM,EACnD,MAAM,OACP,CAAC;;AAGJ,MAAK,MAAM,aAAa,UACtB,KAAI,iBAAiB,WAAW,SAAS,KAAK;AAEhD,KAAI,iBAAiB,eAAe,UAAU,KAAK;AACnD,KAAI,iBAAiB,WAAW,UAAU,KAAK;AAC/C,KAAI,aAAa,iBAAiB,YAAY,WAAW;AAEzD,cAAa;AACX,OAAK,MAAM,aAAa,UACtB,KAAI,oBAAoB,WAAW,SAAS,KAAK;AAEnD,MAAI,oBAAoB,eAAe,UAAU,KAAK;AACtD,MAAI,oBAAoB,WAAW,UAAU,KAAK;AAClD,MAAI,aAAa,oBAAoB,YAAY,WAAW;AAC5D,uBAAqB;AACrB,YAAU,8BAA8B;;;AAI5C,MAAa,gBAAgB,qBAC3B,iBAAiB,iBAAiB;AAEpC,MAAa,kCAAkC;CAC7C,MAAM,QAAQ,iBAAiB;AAC/B,QAAO,CAAC,CAAC,SAAS,MAAM,UAAU,OAAO;;AAG3C,MAAa,0BACX,UAIG;CACH,MAAM,QAAQ,sBAAsB;AACpC,MAAK,IAAI,QAAQ,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;EACzD,MAAM,QAAQ,MAAM;AACpB,MAAI,OAAO,UAAU,MACnB,QAAO;GACL,OAAO;GACP,OAAO,MAAM;GACd;;AAGL,QAAO;EACL,OAAO;EACP,OAAO,KAAA;EACR;;AAGH,MAAa,iCAAoC,aAA8B;CAC7E,MAAM,eAAe;CACrB,MAAM,UAAW,aAAa,6BAAoD,KAAK;AACvF,cAAa,4BAA4B;AACzC,QAAO,mBAAmB,MAAM,eAAe,UAAU,SAAS,CAAC;;AAGrE,MAAa,oBAAuB,aAA8B;CAChE,MAAM,YAAY,qBAAqB;CACvC,MAAM,QAAQ,iBAAiB;AAE/B,KAAI,CAAC,aAAa,CAAC,SAAS,MAAM,UAAU,OAAO,kBACjD,OAAM,IAAI,MAAM,4DAA4D;CAG9E,MAAM,cAAc,MAAM;CAC1B,MAAM,aAAa,MAAM,UAAU,UAAU;CAC7C,MAAM,WAAW,cAAc,IAAI,UAAU;AAC7C,KAAI,CAAC,WACH,OAAM,UAAU,UAAU,KAAK,SAAS;AAE1C,QAAO,mBAAmB,WAAW,UAAU,SAAS,CAAC;;AAwB3D,MAAa,+BACX,WACA,IACA,aACiB,mBAAmB,WAAW,IAAI,SAAS,CAAC;AAE/D,MAAa,8BAA8B,iBAAiB,EAAE,UAAU,MAAM;AAC9E,MAAa,sBAAsB,UAAmB,cAAc,MAAM,EAAE,MAAM;AAElF,MAAa,2BAAqC;CAChD,MAAM,YAAY,qBAAqB;AACvC,KAAI,CAAC,UACH,QAAO,0BAA0B;AAEnC,QAAO,kBAAkB,UAAU,CAAC;;AAGtC,MAAa,2BAA0C;CACrD,MAAM,YAAY,qBAAqB;AACvC,KAAI,CAAC,UACH,QAAO,0BAA0B;AAEnC,QAAO,kBAAkB,UAAU,CAAC;;AAGtC,MAAa,8BAA2C;CACtD,MAAM,QAAQ,iBAAiB;AAC/B,KAAI,OAAO,UAAU,SAAS,OAAO,MAAM,UAAU,UAAU,UAAU;EACvE,MAAM,YAAa,MAAM,UAAU,MAAkC;AACrE,MAAI,aAAa,OAAO,cAAc,SACpC,QAAO;;AAIX,QADkB,qBAAqB,EACrB,QAAQ,cAAc,UAAU;;AAGpD,MAAa,6BAAsC;CACjD,MAAM,QAAQ,iBAAiB;AAC/B,KAAI,OAAO,UAAU,SAAS,OAAO,MAAM,UAAU,UAAU,UAAU;EACvE,MAAM,YAAa,MAAM,UAAU,MAAkC;AACrE,MAAI,cAAc,KAAA,EAChB,QAAO;;AAGX,QAAO,qBAAqB,EAAE,QAAQ,cAAc;;AAGtD,MAAa,iBAAwB;AACnC,OAAM;EACJ,uBAAuB;GACtB,sBAAsB;EACxB;;AAGH,MAAa,wBAAwB,UACnC,CAAC,CAAC,SACF,OAAO,UAAU,aACf,MAA8C,0BAA0B,QACvE,MAAuC,yBAAyB;AAErE,MAAa,gBAAgB,IAAgB,YAA4B;CACvE,MAAM,QAAQ,iBAAiB;CAC/B,MAAM,SAAyB;EAC7B,KAAK;GACH,MAAM,eAAe,SAAS;AAC9B,OAAI,CAAC,cAAc;AACjB,+BAA2B,QAAQ,GAAG;AACtC;;AAGF,8BAA2B,cAAc;AACvC,2BAAuB,cAAc,SAAS,WAAW;KACzD;AAEF,OAAI,SAAS,WAAW;AACtB,iCAA6B,GAAG;AAChC;;AAGF,OAAI;;EAEN,yBAAS,IAAI,KAAK;EACnB;AAED,KAAI,SAAS,MAAM,SAAS,YAAY,MAAM,UAAU,OAAO,kBAC7D,OAAM,kBAAkB,UAAU,WAAW;AAC3C,qBAAmB,OAAO;GAC1B;AAGJ,QAAO,IAAI;;AAGb,MAAa,mBAAmB,OAAmB;AACjD,KAAI,CAAC,mBACH,OAAM,IAAI,MACR,8FACD;AAEH,oBAAmB,UAAU,KAAK,GAAG;;AAGvC,MAAa,iBAAiB,OAAmB;CAC/C,MAAM,QAAQ,iBAAiB;AAC/B,KAAI,CAAC,SAAS,MAAM,UAAU,OAAO,qBAAqB,MAAM,SAAS,SACvE;AAEF,OAAM,eAAe,KAAK,GAAG;;AAG/B,MAAa,mBAAmB,OAAmB;CACjD,MAAM,YAAY,qBAAqB;CACvC,MAAM,QAAQ,iBAAiB;CAC/B,MAAM,WAAW,YAAY,GAAG;AAEhC,KAAI,CAAC,aAAa,CAAC,SAAS,MAAM,UAAU,OAAO,kBACjD;AAGF,KAAI,CAAC,YAAY,MAAM,SAAS,MAC9B;CAGF,MAAM,eAAe,MAAM;CAE3B,MAAM,UAAU,wBAAwB,WADtB,gBAAgB,MAAM,UAAU,IAAI,aAAa,EACL,MAAM,UAAU,GAAG;AACjF,SAAQ,UAAU,WACd,cAAc,WAAW,SAAS,UAAU,CAAC,GAC7C,cAAc,WAAW,EAAE,CAAC;AAChC,SAAQ,SAAS,UAAU,UAAU;AACrC,SAAQ,MAAM,WAAW,OAAO;AAEhC,+BAA8B,UAAU;;AAG1C,MAAa,eAAe,IAAgB,iBAAqC;CAC/E,MAAM,YAAY,qBAAqB;CACvC,MAAM,QAAQ,iBAAiB;CAC/B,MAAM,YAAY,aAAa,GAAG;AAElC,KAAI,CAAC,aAAa,CAAC,SAAS,MAAM,UAAU,OAAO,qBAAqB,CAAC,WAAW;EAClF,MAAM,cAAc,mBAAmB;EACvC,MAAM,SAAyB;GAC7B,KAAK;AACH,2BAAuB,QAAQ,aAAa,IAAI,aAAa,EAAE;;GAEjE,yBAAS,IAAI,KAAK;GACnB;AACD,SAAO,IAAI;AACX;;CAGF,MAAM,aAAa,MAAM;CAEzB,MAAM,QAAQ,sBAAsB,WADpB,cAAc,MAAM,UAAU,IAAI,WAAW,EACL,MAAM,UAAU,GAAG;AAC3E,OAAM,OAAO,eAAe,aAAa;AACzC,OAAM,UAAU,cAAc,WAAW,UAAU,UAAU,CAAC;AAC9D,OAAM,SAAS,UAAU;AACzB,OAAM,QAAQ,qBAAqB,uBAAuB,aAAa,GAAG;AAC1E,OAAM,MAAM,uBAAuB,MAAM,QAAQ,MAAM,aAAa,IAAI,aAAa;AACrF,OAAM,OAAO,IAAI;;AAGnB,MAAa,iCAAiC,YAC5C,qBAAqB,KAAK,UAAU,QAAQ,CAAC;;;AC1vQ/C,MAAM,sBAAsB,OAAO,IAAI,0BAA0B;AACjE,MAAa,sBAAsB;AACnC,MAAM,6BAA6B;AACnC,MAAa,mBAAmB;AAChC,MAAa,oBAAoB;AACjC,MAAM,yBAAyB,OAAO,IAAI,6BAA6B;AAqQvE,MAAM,0BAA0B;CAC9B,MAAM,eAAe;CACrB,MAAM,WAAW,aAAa;AAC9B,KAAI,oBAAoB,IACtB,QAAO;CAET,MAAM,0BAAU,IAAI,KAA+B;AACnD,cAAa,uBAAuB;AACpC,QAAO;;AAGT,MAAM,mBAAmB,UACvB,OAAO,aAAa,eAAe,iBAAiB;AAEtD,MAAM,yBAAyB,UAAoB;CACjD,MAAM,SAAoE,EAAE;AAC5E,MAAK,MAAM,CAAC,KAAK,UAAU,MAAM,SAAS,EAAE;EAC1C,MAAM,WAAW,OAAO;AACxB,MAAI,aAAa,KAAA,GAAW;AAC1B,UAAO,OAAO;AACd;;AAEF,SAAO,OAAO,MAAM,QAAQ,SAAS,GAAG,CAAC,GAAG,UAAU,MAAM,GAAG,CAAC,UAAU,MAAM;;AAElF,QAAO;;AAGT,MAAM,gCAAgC,UAAmB;AACvD,KAAI,CAAC,gBAAgB,MAAM,CACzB,QAAO;CAET,MAAM,aAAa,sBAAsB,MAAM;AAC/C,QAAO,OAAO,YACZ,OAAO,QAAQ,WAAW,CAAC,SAAS,CAAC,KAAK,WAAW;AACnD,MAAI,QAAA,aACF,QAAO,EAAE;AAEX,MAAI,MAAM,QAAQ,MAAM,EAAE;GACxB,MAAM,SAAS,MACZ,QAAQ,cAAmC,OAAO,cAAc,SAAS,CACzE,KAAK,cAAc,UAAU;AAChC,UAAO,OAAO,SAAS,IAAI,CAAC,CAAC,KAAK,OAAO,WAAW,IAAI,OAAO,KAAK,OAAO,CAAC,GAAG,EAAE;;AAEnF,SAAO,OAAO,UAAU,WAAW,CAAC,CAAC,KAAK,MAAM,CAAC,GAAG,EAAE;GACtD,CACH;;AAGH,MAAM,uBAAuB,MAAuB;CAClD,MAAM,SAAS;AAGf,KAAI,CAAC,OAAO,wBACV,QAAO,2BAA2B,YAAY;EAC5C,MAAM,cAAc,EAAE,IAAI,OAAO,eAAe,IAAI;AACpD,MAAI,YAAY,WAAA,kCAA+B,EAAE;GAC/C,IAAI;AACJ,OAAI;AACF,iBAAa,MAAM,EAAE,IAAI,MAAM;WACzB;AACN,UAAM,IAAI,UAAU,mCAAmC;;AAEzD,OAAI,CAAC,cAAc,OAAO,eAAe,YAAY,EAAE,WAAW,YAChE,OAAM,IAAI,UAAU,mDAAmD;AAEzE,UAAO,6BAA8B,WAA0C,MAAM;;AAEvF,MACE,YAAY,WAAW,oCAAoC,IAC3D,YAAY,WAAW,sBAAsB,CAE7C,QAAO,EAAE,IAAI,UAAU;KAGvB;AAEN,QAAO,OAAO;;AAGhB,MAAM,wBAAwB,cAC5B,YAAY,qBAAqB,EAAE,WAAW,UAAU,IAAI,CAAC,GAAG,KAAA;AAElE,MAAM,4BAA4B,cAAmC;AACnE,KAAI,CAAC,UAAU,KACb,QAAO;CAET,MAAM,UAAU,uBAAuB,UAAU,KAAK;AACtD,KAAI,CAAC,WAAW,OAAO,YAAY,SACjC,QAAO;CAET,MAAM,cAAe,QAAoC;AACzD,QAAO,OAAO,gBAAgB,WAAW,cAAc;;AAGzD,MAAM,8BAA8B,WAAoC,UACtE,qBAAqB,OAAO,EAC1B,mBAAmB,WAAW;CAC5B,MAAM,WAAW,mBAAmB,UAAU;AAC9C,KAAI,SACF,QAAO;EACL,gBAAgB;EAChB,MAAM,qBAAqB,UAAU;EACrC,MAAM;EACN,OAAO;EACR;AAEH,KAAI,aAAa,OAAO,YAAY,eAAe,qBAAqB,QACtE,QAAO;EACL,gBAAgB;EAChB,MAAM,qBAAqB,UAAU;EACrC,MAAM;EACN,OAAO,uBAAuB,WAAW,UAAU;EACpD;AAEH,QAAO;GAEV,CAAC;AAEJ,MAAM,gCAAgC,UACpC,uBAAuB,OAAO,EAC5B,qBAAqB,WAAW;CAC9B,MAAM,cAAc,yBAAyB,UAAU;AACvD,KAAI,UAAU,SAAS,SACrB,QAAO;EACL;EACA,MAAM;EACN,OAAO,UAAU;EAClB;AAEH,KAAI,UAAU,SAAS,MACrB,QAAO;EACL;EACA,MAAM;EACN,OAAO,UAAU;EAClB;AAEH,OAAM,IAAI,UAAU,4CAA4C,UAAU,KAAK,IAAI;GAEtF,CAAC;AAEJ,MAAM,gCAAgC,WAAoC,UACxE,uBAAuB,OAAO,EAC5B,qBAAqB,WAAW;AAC9B,KAAI,CAAC,UACH,OAAM,IAAI,UAAU,yDAAyD;AAG/E,KADoB,yBAAyB,UAAU,KACnC,UAAU,GAC5B,OAAM,IAAI,UAAU,oEAAoE;AAE1F,KAAI,UAAU,SAAS,UAAU;EAC/B,MAAM,SAAS,UAAU,QAAQ,IAAI,UAAU,MAAM;AACrD,MAAI,CAAC,OACH,OAAM,IAAI,MAAM,yBAAyB,UAAU,MAAM,GAAG;AAE9D,SAAO,OAAO;;AAEhB,KAAI,UAAU,SAAS,OAAO;EAC5B,MAAM,UAAU,mBAAmB,WAAW,UAAU,MAAM;AAC9D,MAAI,CAAC,QACH,OAAM,IAAI,MAAM,0BAA0B,UAAU,MAAM,GAAG;AAE/D,SAAO;;AAET,OAAM,IAAI,UAAU,6CAA6C,UAAU,KAAK,IAAI;GAEvF,CAAC;AAEJ,MAAM,qBAAqB,UACzB,CAAC,CAAC,SACF,OAAO,UAAU,YAChB,MAAkC,SAAS,gBAC5C,OAAQ,MAAkC,UAAU;AAEtD,MAAM,kBAAkB,UACtB,CAAC,CAAC,SACF,OAAO,UAAU,YAChB,MAAkC,SAAS,aAC5C,OAAQ,MAAkC,UAAU;AAEtD,MAAM,8BAA8B,UAClC,qBAAqB,OAAO,EAC1B,mBAAmB,WAAW;AAC5B,KAAI,kBAAkB,UAAU,CAC9B,QAAO;EACL,gBAAgB;EAChB,MACE,UAAU,gBAAgB,OACtB,KAAA,IACA,qBAAqB,EACnB,WAAW,UAAU,aACtB,CAAC;EACR,MAAM;EACN,OAAO,UAAU;EAClB;AAEH,KAAI,eAAe,UAAU,CAC3B,QAAO;EACL,gBAAgB;EAChB,MACE,UAAU,gBAAgB,OACtB,KAAA,IACA,qBAAqB,EACnB,WAAW,UAAU,aACtB,CAAC;EACR,MAAM;EACN,OAAO,UAAU;EAClB;AAEH,QAAO;GAEV,CAAC;AAEJ,MAAM,yBAAyB,UAC7B,OAAO,mBAAmB,eAAe,iBAAiB;AAE5D,MAAM,yBACJ,UAEA,CAAC,CAAC,SAAS,OAAO,UAAU,YAAY,OAAO,iBAAiB;AAElE,MAAM,iCACJ,UAEA,OAAO,UAAU,cACjB,OAAO,UAAU,SAAS,KAAK,MAAM,KAAK;AAE5C,MAAM,2BAA2B,UAAoC;AACnE,KAAI,iBAAiB,MACnB,QAAO,2BAA2B;EAChC,SAAS,MAAM;EACf,MAAM,MAAM;EACb,CAAC;AAEJ,KAAI;AACF,SAAO,2BAA2B,MAAM;SAClC;AACN,SAAO,2BAA2B,EAChC,SAAS,kBACV,CAAC;;;AAIN,MAAM,kBAAkB,iBACtB,OACqC;AACrC,KAAI,sBAAsB,MAAM,EAAE;EAChC,MAAM,SAAS,MAAM,WAAW;AAChC,MAAI;AACF,UAAO,MAAM;IACX,MAAM,OAAO,MAAM,OAAO,MAAM;AAChC,QAAI,KAAK,KACP;AAEF,UAAM,KAAK;;YAEL;AACR,UAAO,aAAa;;;AAGxB,QAAO;;AAGT,MAAM,qBAAqB,UACzB,GAAG,KAAK,UAAU,MAAM,CAAC;;AAG3B,MAAM,qBACJ,OACA,mBACG;CACH,MAAM,UAAU,IAAI,aAAa;AAEjC,QAAO,IAAI,eAA2B,EACpC,MAAM,MAAM,YAAY;AACtB,MAAI;AACF,cAAW,MAAM,SAAS,gBAAgB,MAAM,CAC9C,YAAW,QACT,QAAQ,OACN,kBAAkB;IAChB,MAAM;IACN,OAAO,eAAe,MAAM;IAC7B,CAAC,CACH,CACF;AAEH,cAAW,QACT,QAAQ,OACN,kBAAkB,EAChB,MAAM,QACP,CAAC,CACH,CACF;WACM,OAAO;AACd,cAAW,QACT,QAAQ,OACN,kBAAkB;IAChB,OAAO,wBAAwB,MAAM;IACrC,MAAM;IACP,CAAC,CACH,CACF;YACO;AACR,cAAW,OAAO;;IAGvB,CAAC;;AAGJ,MAAM,0BAA0B,OAAO,UAAoB,cAAuC;CAChG,MAAM,OAAQ,MAAM,SAAS,MAAM;AACnC,KAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,OAAO,KAAK,OAAO,UAC1D,OAAM,IAAI,UAAU,6BAA6B;AAEnD,KAAI,CAAC,KAAK,GACR,OAAM,6BAA6B,WAAW,KAAK,MAAM;AAE3D,QAAO,6BAA6B,WAAW,KAAK,MAAM;;AAG5D,MAAM,sBAAsB,iBAC1B,MAC+C;CAC/C,MAAM,SAAS,KAAK,WAAW;CAC/B,MAAM,UAAU,IAAI,aAAa;CACjC,IAAI,SAAS;AAEb,KAAI;AACF,SAAO,MAAM;GACX,MAAM,OAAO,MAAM,OAAO,MAAM;AAChC,OAAI,KAAK,KACP;AAEF,aAAU,QAAQ,OAAO,KAAK,OAAO,EAAE,QAAQ,MAAM,CAAC;AACtD,UAAO,MAAM;IACX,MAAM,eAAe,OAAO,QAAQ,KAAK;AACzC,QAAI,eAAe,EACjB;IAEF,MAAM,OAAO,OAAO,MAAM,GAAG,aAAa,CAAC,MAAM;AACjD,aAAS,OAAO,MAAM,eAAe,EAAE;AACvC,QAAI,CAAC,KACH;AAEF,UAAM,KAAK,MAAM,KAAK;;;EAG1B,MAAM,WAAW,OAAO,MAAM;AAC9B,MAAI,SACF,OAAM,KAAK,MAAM,SAAS;WAEpB;AACR,SAAO,aAAa;;;AAIxB,MAAM,kBAAkB,UAAoB,cAAuC;AACjF,KAAI,CAAC,SAAS,KACZ,OAAM,IAAI,UAAU,8BAA8B;AAEpD,QAAO,IAAI,eAAwB,EACjC,MAAM,MAAM,YAAY;AACtB,MAAI;AACF,cAAW,MAAM,SAAS,oBAAoB,SAAS,KAAM,EAAE;AAC7D,QAAI,MAAM,SAAS,SAAS;AAC1B,gBAAW,QAAQ,6BAA6B,WAAW,MAAM,MAAM,CAAC;AACxE;;AAEF,QAAI,MAAM,SAAS,QAAQ;AACzB,gBAAW,OAAO;AAClB;;AAEF,eAAW,MAAM,6BAA6B,WAAW,MAAM,MAAM,CAAC;AACtE;;AAEF,cAAW,OAAO;WACX,OAAO;AACd,cAAW,MAAM,MAAM;;IAG5B,CAAC;;AAGJ,MAAM,yBAAyB,iBAC7B,UACA,WACA;AACA,KAAI,CAAC,SAAS,KACZ,OAAM,IAAI,UAAU,8BAA8B;AAEpD,YAAW,MAAM,SAAS,oBAAoB,SAAS,KAAK,EAAE;AAC5D,MAAI,MAAM,SAAS,SAAS;AAC1B,SAAM,6BAA6B,WAAW,MAAM,MAAM;AAC1D;;AAEF,MAAI,MAAM,SAAS,OACjB;AAEF,QAAM,6BAA6B,WAAW,MAAM,MAAM;;;AAI9D,MAAM,eAAe,OAAO,IAAY,OAAgB,cAAuC;CAC7F,MAAM,mBAAmB,gBAAgB,MAAM;CAC/C,MAAM,WAAW,MAAM,MAAM,qBAAqB,mBAAmB,GAAG,IAAI;EAC1E,MAAM,mBACF,QACA,KAAK,UAAU,EACb,OAAO,2BAA2B,WAAW,MAAM,EACpD,CAAC;EACN,SAAS;GACP,QAAQ,GAAG,2BAA2B,IAAI;GAC1C,GAAI,mBAAmB,EAAE,GAAG,EAAE,gBAAgB,qBAAqB;GACpE;EACD,QAAQ;EACT,CAAC;CACF,MAAM,cAAc,SAAS,QAAQ,IAAI,eAAe,IAAI;CAC5D,MAAM,aAAa,SAAS,QAAQ,IAAI,wBAAwB;AAChE,KAAI,YAAY,WAAW,2BAA2B,EAAE;AACtD,MAAI,eAAe,kBACjB,QAAO,uBAAuB,UAAU,UAAU;AAEpD,SAAO,eAAe,UAAU,UAAU;;AAE5C,QAAO,wBAAwB,UAAU,UAAU;;AAGrD,MAAM,qBAAqB,OACzB,GACA,aACA,YACgC;CAChC,IAAI,QAAQ;CACZ,MAAM,WAAW,OAAO,cAAmD;AACzE,MAAI,aAAa,MACf,OAAM,IAAI,MAAM,kDAAkD;AAEpE,UAAQ;EACR,MAAM,aAAa,YAAY;AAC/B,MAAI,CAAC,WACH,QAAO,QAAQ,EAAE;EAEnB,IAAI,aAAiC,KAAA;EACrC,MAAM,SAAS,MAAM,WAAW,IAAI,YAAY;AAC9C,gBAAa,MAAM,SAAS,YAAY,EAAE;KACjC;AACX,MAAI,WAAW,KAAA,EACb,QAAO;AAET,SAAO;;AAET,QAAO,SAAS,EAAE;;AAGpB,MAAM,oBAAoB,UAA6B;AACrD,KAAI,iBAAiB,SACnB,QAAO;AAET,KAAI,sBAAsB,MAAM,CAC9B,QAAO,IAAI,SACT,kBAAkB,QAAQ,UAAU,2BAA2B,MAAM,CAAC,EACtE,EACE,SAAS;EACP,gBAAgB;EAChB,yBAAyB;EAC1B,EACF,CACF;AAEH,KAAI,sBAAsB,MAAM,CAC9B,QAAO,IAAI,SACT,kBAAkB,QAAQ,UAAU,2BAA2B,MAAM,CAAC,EACtE,EACE,SAAS;EACP,gBAAgB;EAChB,yBAAyB;EAC1B,EACF,CACF;AAEH,QAAO,IAAI,SACT,KAAK,UAAU;EACb,IAAI;EACJ,OAAO,2BAA2B,MAAM;EACzC,CAA6B,EAC9B,EACE,SAAS,EACP,gBAAgB,qBACjB,EACF,CACF;;AAGH,MAAM,sBACJ,WACA,IACA,KACA,iBACG;AACH,KAAI,CAAC,UACH,OAAM,IAAI,MAAM,sDAAsD;AAExE,QAAO,4BAA4B,WAAW,WAAW,GAAG,GAAG,OAAO,aAAa;;AAGrF,MAAM,4BAA4B,OAAO,MAAuB;CAC9D,MAAM,SAAS,MAAM,oBAAoB,EAAE;CAC3C,MAAM,aAAa,EAAE;AACrB,QAAO,6BAA6B,WAAW,wBAAwB,OAAO;;AAGhF,MAAa,4BAA4B,MAAuB,0BAA0B,EAAE;AAE5F,MAAa,4BAA4B,OAAO,MAAuB;CACrE,MAAM,QAAQ,MAAM,oBAAoB,EAAE;AAC1C,KAAI,CAAC,gBAAgB,MAAM,CACzB,QAAO;CAET,MAAM,WAAW,MAAM,IAAI,kBAAkB;AAC7C,QAAO,OAAO,aAAa,YAAY,WAAW,WAAW;;AAG/D,MAAa,0BAA0B,OACrC,IACA,MACmC;CACnC,MAAM,SAAS,mBAAmB,CAAC,IAAI,GAAG;AAC1C,KAAI,CAAC,OACH,OAAM,IAAI,MAAM,kBAAkB,GAAG,GAAG;CAE1C,MAAM,QAAQ,MAAM,0BAA0B,EAAE;CAChD,MAAM,SAAS,MAAM,mBAAmB,GAAG,OAAO,aAAa,OAAO,QAAQ;AAC9E,KAAI,kBAAkB,SACpB,QAAO;EACL;EACA,MAAM;EACN,UAAU;EACX;AAEH,QAAO;EACL;EACA,MAAM;EACN,OAAO;EACR;;AAGH,MAAa,oBACX,WACA,IACA,aACG;AACH,WAAU,aAAa,IAAI,IAAI;EAC7B,OAAO,SAAS;EAChB,OAAO,SAAS;EAChB,QAAQ,SAAS;EAClB,CAAC;;AAGJ,MAAM,wBAAwB,QAAiB,UAAmB;CAChE,IAAI,WAAW;AACf,QAAO,OAAO,aAAa,WACzB,YAAW,UAAU;AAGvB,KAAI,MAAM,QAAQ,SAAS,EAAE;AAC3B,OAAK,MAAM,SAAS,SAClB,sBAAqB,QAAQ,MAAM;AAErC;;AAEF,KAAI,aAAa,QAAQ,aAAa,KAAA,KAAa,aAAa,MAC9D;AAEF,KAAI,oBAAoB,MAAM;AAC5B,SAAO,YAAY,SAAS;AAC5B;;AAGF,QAAO,YAAY,SAAS,eAAe,OAAO,SAAS,CAAC,CAAC;;AAG/D,MAAM,wBAAwB,IAAY,UAA2B;CACnE,MAAM,OAAO,SAAS,cAAc,OAAO;AAC3C,MAAK,aAAa,kBAAkB,GAAG;AACvC,MAAK,aAAa,UAAU,OAAO;CAEnC,MAAM,cAAc,SAAS,cAAc,QAAQ;AACnD,aAAY,OAAO;AACnB,aAAY,OAAO;AACnB,aAAY,QAAQ;AACpB,MAAK,YAAY,YAAY;AAE7B,MAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,MAAM,EAAE;AACjD,MACE,SAAS,cACT,SAAS,YACT,SAAS,YACT,UAAU,SACV,UAAU,KAAA,KACV,UAAU,KAEV;AAEF,MAAI,SAAS,SAAS;AACpB,QAAK,YAAY,OAAO,MAAM;AAC9B;;AAEF,MAAI,SAAS,WAAW,SAAS,OAAO,UAAU,UAAU;AAC1D,QAAK,aACH,SACA,OAAO,QAAQ,MAAiC,CAC7C,KAAK,CAAC,WAAW,gBAAgB,GAAG,UAAU,IAAI,aAAa,CAC/D,KAAK,KAAK,CACd;AACD;;AAEF,MAAI,UAAU,MAAM;AAClB,QAAK,aAAa,MAAM,GAAG;AAC3B;;AAEF,OAAK,aAAa,MAAM,OAAO,MAAM,CAAC;;AAGxC,sBAAqB,MAAM,MAAM,SAAS;AAC1C,QAAO;;AAGT,MAAa,gBAA+B;AAC1C,OAAM,IAAI,MAAM,uEAAuE;;AAGzF,MAAa,aACX,WAIG;CACH,MAAM,aAAa,OAAO,GAAQ,SAAc;EAC9C,IAAI;AACJ,MAAI;AACF,gBAAa,MAAM,oBAAoB,EAAE;WAClC,OAAO;AACd,UAAO,EAAE,KACP;IACE,OAAO,qBAAqB,EAC1B,QAAQ,CACN,EACE,SACE,iBAAiB,SAAS,MAAM,UAC5B,MAAM,UACN,qCACP,CACF,EACF,CAAC;IACF,IAAI;IACL,EACD,IACD;;EAEH,MAAM,WAAW,6BAA6B,WAAW;EACzD,MAAM,YAAY,MAAM,OAAO,aAAa,SAAS,SAAS;AAC9D,MAAI,YAAY,UACd,QAAO,EAAE,KACP;GACE,OAAO,qBAAqB,EAC1B,QAAQ,UAAU,QACnB,CAAC;GACF,IAAI;GACL,EACD,IACD;AAEH,IAAE,IAAI,wBAAwB,SAAS;AACvC,IAAE,IAAI,SAAS,UAAU,MAA2C;AACpE,QAAM,MAAM;;AAEd,QAAO;;AA0DT,SAAgB,eACd,IACA,aACA,SACA;AACA,oBAAmB,CAAC,IAAI,IAAI;EAC1B;EACA;EACA,aAAa,CAAC,GAAG,YAAY;EAC9B,CAAC;;AAGJ,MAAa,aAAa,OAAe,mBAAmB,CAAC,IAAI,GAAG;AAEpE,MAAa,gBAAgB,OAAO,IAAY,MAAuB;AACrE,KAAI;EACF,MAAM,SAAS,MAAM,wBAAwB,IAAI,EAAE;AACnD,SAAO,OAAO,SAAS,aAAa,OAAO,WAAW,iBAAiB,OAAO,MAAM;UAC7E,OAAO;EACd,MAAM,cAAc,MAAM,4BAA4B,OAAO,SAAS;AACtE,SAAO,IAAI,SACT,KAAK,UAAU;GACb,OAAO,wBAAwB,YAAY;GAC3C,IAAI;GACL,CAA6B,EAC9B;GACE,SAAS,EACP,gBAAgB,qBACjB;GACD,QAAQ;GACT,CACF;;;AAIL,MAAa,mBAIX,IACA,aACA,YACoC;AAGpC,KAAI,OAAO,WAAW,YACpB,oBAAmB,CAAC,IAAI,IAAI;EACjB;EACT;EACA,aAAa,CAAC,GAAG,YAAY;EAC9B,CAAC;AAqMJ,QAlMwB,mBACtB,IACA,wBAAwB;EACtB,MAAM,YAAY,qBAAqB;EACvC,MAAM,WAAW,WAAW,QAAQ,IAAI,GAAG;AAC3C,MAAI,SACF,QAAO;EAGT,MAAM,eAAe,WAAW,aAAa,IAAI,GAAG;EACpD,MAAM,UAAU,mBAAmB,WAAW,IAAI,WAAW,MAAM;EACnE,MAAM,SAAS,mBACb,WACA,IACA,UACA,cAAc,OACf;EACD,MAAM,QAAQ,mBAA4B,WAAW,IAAI,SAAS,cAAc,MAAM;EACtF,MAAM,iBAAiB,mBAGrB,WACA,IACA,mBACA,eACK;GACC,OAAO,aAAa;GACpB,OAAO,aAAa;GACpB,QAAQ,aAAa;GACtB,GACD,KAAA,EACL;EAED,MAAM,qBAAqB;AACzB,OAAI,CAAC,UACH;GAEF,MAAM,aAAa,eAAe;AAClC,OAAI,CAAC,YAAY;AACf,cAAU,aAAa,OAAO,GAAG;AACjC;;AAEF,aAAU,aAAa,IAAI,IAAI;IAC7B,OAAO,WAAW;IAClB,OAAO,WAAW;IAClB,QAAQ,WAAW;IACpB,CAAC;;EAGJ,MAAM,qBAAqB,YAAY;AACrC,OAAI,CAAC,UACH;AAEF,SAAM,qBAAqB,UAAU;;EAGvC,MAAM,uBAAuB,OAC3B,OACA,UACG;AACH,UAAO,QAAQ;AACf,kBAAe,QAAQ;IACrB,OAAO,KAAA;IACP;IACA,QAAQ;IACT;AACD,iBAAc;AACd,SAAM,oBAAoB;;EAG5B,MAAM,uBAAuB,OAAO,OAAiC,WAAoB;AACvF,SAAM,QAAQ;AACd,kBAAe,QAAQ;IACrB,OAAO;IACP;IACA,QAAQ,OAAO;IAChB;AACD,iBAAc;AACd,SAAM,oBAAoB;;EAG5B,MAAM,qBAAqB,YAAY;AACrC,WAAQ,QAAQ;AAChB,SAAM,oBAAoB;;EAG5B,MAAM,UAAU,UAA+C;AAC7D,WAAQ,QAAQ;AAChB,SAAM,QAAQ,KAAA;GACd,MAAM,kBAAkB,6BAA6B,MAAM;GAC3D,MAAM,UAAU,aAAa,IAAI,OAAO,UAAU;AAElD,OAAI,8BAA8B,QAAQ,CACxC,SAAQ,mBAAmB;AACzB,QAAI;KACF,MAAM,QAAQ,MAAM;AACpB,SAAI,sBAAsB,MAAM,EAAE;AAChC,iBAAW,MAAM,SAAS,OAAO;OAC/B,MAAM,WAAW;AACjB,aAAM,qBAAqB,iBAAiB,SAAS;AACrD,aAAM;;AAER;;KAEF,MAAM,WAAW;AACjB,WAAM,qBAAqB,iBAAiB,SAAS;AACrD,WAAM;aACC,QAAQ;AACf,WAAM,qBAAqB,iBAAiB,OAAO;AACnD,WAAM;cACE;AACR,WAAM,oBAAoB;;OAE1B;AAGN,UAAO,QACJ,KAAK,OAAO,UAAU;AAErB,UAAM,qBAAqB,iBADV,MACoC;AACrD,WAAO;KACP,CACD,MAAM,OAAO,WAAW;AACvB,UAAM,qBAAqB,iBAAiB,OAAO;AACnD,UAAM;KACN,CACD,QAAQ,mBAAmB;;EAGhC,MAAM,QAAQ,UAA2B;AA+BvC,UA7BE,OAAO,aAAa,cACf,qBAAqB,IAAI,MAAM,UACzB;IACL,MAAM,YAAqC;KACzC,GAAG;MACF,mBAAmB;KACpB,QAAQ;KACR,UAAU,CACR;MACE,UAAU;MACV,OAAO;OACL,MAAM;OACN,MAAM;OACN,OAAO;OACR;MACD,MAAM;MACP,EACD,MAAM,SACP;KACF;AACD,WAAO,UAAU;AACjB,WAAO,UAAU;AACjB,WAAO;KACL,UAAU;KACV,OAAO;KACP,MAAM;KACP;OACC;;EAIZ,MAAM,eAAe,oBACnB;GACE;GACA,QAAQ;GACR,IAAI,QAAQ;AACV,WAAO,MAAM;;GAEf,IAAI,eAAe;AACjB,WAAO;;GAET,IAAI,YAAY;AACd,WAAO,QAAQ;;GAEjB,IAAI,iBAAiB;AACnB,WAAO,eAAe;;GAExB,IAAI,SAAS;AACX,WAAO,OAAO;;GAEjB,EAKD,GACD;AACD,aAAW,QAAQ,IAAI,IAAI,aAAa;AACxC,gBAAc;AACd,SAAO;IACN,GAAG,CACP"}
|