tensorlake 0.5.131 → 0.5.133

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +27 -0
  2. package/dist/applications/index.cjs +492 -708
  3. package/dist/applications/index.cjs.map +1 -1
  4. package/dist/applications/index.d.cts +3 -3
  5. package/dist/applications/index.d.ts +3 -3
  6. package/dist/applications/index.js +493 -713
  7. package/dist/applications/index.js.map +1 -1
  8. package/dist/function-agent/main.cjs +5 -2
  9. package/dist/function-agent/main.cjs.map +1 -1
  10. package/dist/function-agent/main.js +6 -3
  11. package/dist/function-agent/main.js.map +1 -1
  12. package/dist/function-executor/main.cjs +6 -3
  13. package/dist/function-executor/main.cjs.map +1 -1
  14. package/dist/function-executor/main.js +7 -4
  15. package/dist/function-executor/main.js.map +1 -1
  16. package/dist/index.cjs +121 -418
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +8 -22
  19. package/dist/index.d.ts +8 -22
  20. package/dist/index.js +122 -423
  21. package/dist/index.js.map +1 -1
  22. package/dist/native-worker.cjs +1 -0
  23. package/dist/native-worker.cjs.map +1 -1
  24. package/dist/native-worker.js +1 -0
  25. package/dist/native-worker.js.map +1 -1
  26. package/dist/{remote-DRCCuRth.d.cts → remote-D95Y6Czr.d.cts} +1 -1
  27. package/dist/{remote-0dzBqScB.d.ts → remote-omwTzbfj.d.ts} +1 -1
  28. package/dist/{sandbox-image-Bf5bcxtO.d.cts → sandbox-image-ChzWDeZy.d.cts} +2 -0
  29. package/dist/{sandbox-image-Bf5bcxtO.d.ts → sandbox-image-ChzWDeZy.d.ts} +2 -0
  30. package/dist/sandbox-image.cjs +476 -453
  31. package/dist/sandbox-image.cjs.map +1 -1
  32. package/dist/sandbox-image.d.cts +1 -1
  33. package/dist/sandbox-image.d.ts +1 -1
  34. package/dist/sandbox-image.js +475 -456
  35. package/dist/sandbox-image.js.map +1 -1
  36. package/package.json +8 -8
  37. package/runtime/function-executor/manifest.json +14 -14
  38. package/runtime/function-executor/package/dist/function-executor/main.js +7 -4
  39. package/runtime/function-executor/package/dist/function-executor/main.js.map +1 -1
  40. package/runtime/function-executor/package/dist/native-worker.cjs +1 -0
  41. package/runtime/function-executor/package/dist/native-worker.cjs.map +1 -1
  42. package/runtime/function-executor/package/npm-shrinkwrap.json +2 -12
  43. package/runtime/function-executor/package/package.json +1 -2
  44. package/runtime/typescript-function-runner/manifest.json +13 -13
  45. package/runtime/typescript-function-runner/package/dist/function-agent/main.js +6 -3
  46. package/runtime/typescript-function-runner/package/dist/function-agent/main.js.map +1 -1
  47. package/runtime/typescript-function-runner/package/dist/native-worker.cjs +1 -0
  48. package/runtime/typescript-function-runner/package/dist/native-worker.cjs.map +1 -1
  49. package/runtime/typescript-function-runner/package/npm-shrinkwrap.json +20 -29
  50. package/runtime/typescript-function-runner/package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/function-executor/main.ts","../../src/native-worker-client.ts","../../src/native-worker-protocol.ts","../../src/defaults.ts","../../src/url.ts","../../src/function-executor/safe-output.ts","../../src/function-executor/service.ts","../../src/applications/errors.ts","../../src/applications/registry.ts","../../src/function-executor/allocation.ts","../../src/applications/function.ts","../../src/applications/schema.ts","../../src/applications/file.ts","../../src/applications/http-body.ts","../../src/applications/headers.ts","../../src/applications/context.ts","../../src/applications/serialization.ts","../../src/function-executor/async-queue.ts","../../src/function-executor/blob.ts","../../src/function-executor/user-events.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport { configureNativeWorker } from \"../native-worker-client.js\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport * as grpc from \"@grpc/grpc-js\";\nimport { loadSync } from \"@grpc/proto-loader\";\nimport { getProtoPath } from \"google-proto-files\";\nimport { writeStructuredOutput } from \"./safe-output.js\";\nimport { FunctionExecutorService } from \"./service.js\";\n\ninterface Arguments {\n address?: string;\n executorId?: string;\n functionExecutorId: string;\n}\n\nconst SHUTDOWN_GRACE_PERIOD_MS = 10_000;\nconst IPV4_LOOPBACK_ADDRESS = \"127.0.0.1\";\n\nexport function functionExecutorBindAddress(address: string): string {\n if (address === \"localhost\") return IPV4_LOOPBACK_ADDRESS;\n if (address.startsWith(\"localhost:\")) {\n return `${IPV4_LOOPBACK_ADDRESS}${address.slice(\"localhost\".length)}`;\n }\n return address;\n}\n\nfunction parseArguments(argv: string[]): Arguments {\n const result: Arguments = { functionExecutorId: \"\" };\n for (let index = 0; index < argv.length; index += 1) {\n const argument = argv[index];\n const [key, inline] = argument.split(\"=\", 2);\n const value = inline ?? argv[index + 1];\n if (key === \"--address\") result.address = value;\n else if (key === \"--executor-id\") result.executorId = value;\n else if (key === \"--function-executor-id\") result.functionExecutorId = value ?? \"\";\n else continue;\n if (inline == null) index += 1;\n }\n return result;\n}\n\nfunction serviceDefinition(): grpc.ServiceDefinition {\n const protoRoot = functionExecutorProtoRoot();\n const protoPath = path.join(protoRoot, \"tensorlake/function_executor/proto/function_executor.proto\");\n const packageDefinition = loadSync(protoPath, {\n includeDirs: [path.dirname(protoPath), protoRoot, getProtoPath()],\n keepCase: false,\n longs: Number,\n enums: String,\n defaults: false,\n oneofs: true,\n });\n const loaded = grpc.loadPackageDefinition(packageDefinition) as Record<string, any>;\n return loaded.function_executor_service.FunctionExecutor.service as grpc.ServiceDefinition;\n}\n\nfunction functionExecutorProtoRoot(): string {\n const relativeRoots = [\n // Standalone function-executor capsule.\n \"../../proto/\",\n // Function executor launched directly from the published SDK package.\n \"../../runtime/function-executor/package/proto/\",\n // Development checkout: both language runtimes use the repository source.\n \"../../../proto/\",\n ];\n for (const relativeRoot of relativeRoots) {\n const protoRoot = fileURLToPath(new URL(relativeRoot, import.meta.url));\n const protoPath = path.join(protoRoot, \"tensorlake/function_executor/proto/function_executor.proto\");\n if (existsSync(protoPath)) return protoRoot;\n }\n throw new Error(\"Cannot find the shared Tensorlake function-executor protobuf definition\");\n}\n\nexport async function main(argv = process.argv.slice(2)): Promise<void> {\n configureNativeWorker(() => new URL(\"../native-worker.cjs\", import.meta.url));\n const nodeMajor = Number(process.versions.node.split(\".\")[0]);\n if (nodeMajor < 24) throw new Error(`Tensorlake TypeScript functions require Node 24 or newer; got ${process.versions.node}`);\n const args = parseArguments(argv);\n if (!args.address) throw new Error(\"--address argument is required\");\n if (!args.executorId) throw new Error(\"--executor-id argument is required\");\n const address = functionExecutorBindAddress(args.address);\n\n writeStructuredOutput(\"stderr\", () => ({\n timestamp: new Date().toISOString(),\n level: \"info\",\n component: \"typescript_function_executor_main\",\n message: \"starting TypeScript function executor\",\n address,\n executor_id: args.executorId,\n fn_executor_id: args.functionExecutorId,\n node_version: process.versions.node,\n pid: process.pid,\n }));\n\n const server = new grpc.Server({\n \"grpc.max_receive_message_length\": -1,\n \"grpc.max_send_message_length\": -1,\n \"grpc.so_reuseport\": 0,\n });\n const service = new FunctionExecutorService();\n server.addService(serviceDefinition(), service.implementation);\n await new Promise<void>((resolve, reject) => {\n server.bindAsync(address, grpc.ServerCredentials.createInsecure(), (error) => {\n if (error != null) reject(error);\n else resolve();\n });\n });\n writeStructuredOutput(\"stderr\", () => ({\n timestamp: new Date().toISOString(),\n level: \"info\",\n component: \"typescript_function_executor_main\",\n message: \"started TypeScript function executor\",\n address,\n executor_id: args.executorId,\n fn_executor_id: args.functionExecutorId,\n node_version: process.versions.node,\n }));\n let stopping = false;\n const shutdown = (signal: string) => {\n if (stopping) return;\n stopping = true;\n writeStructuredOutput(\"stderr\", () => ({\n timestamp: new Date().toISOString(),\n level: \"info\",\n component: \"typescript_function_executor_main\",\n message: \"stopping TypeScript function executor\",\n signal,\n executor_id: args.executorId,\n fn_executor_id: args.functionExecutorId,\n pid: process.pid,\n }));\n const forceShutdownTimer = setTimeout(() => {\n writeStructuredOutput(\"stderr\", () => ({\n timestamp: new Date().toISOString(),\n level: \"error\",\n component: \"typescript_function_executor_main\",\n message: \"forcing TypeScript function executor shutdown after grace period\",\n signal,\n executor_id: args.executorId,\n fn_executor_id: args.functionExecutorId,\n pid: process.pid,\n grace_period_ms: SHUTDOWN_GRACE_PERIOD_MS,\n }));\n server.forceShutdown();\n process.exit(1);\n }, SHUTDOWN_GRACE_PERIOD_MS);\n const gracefulShutdown = service\n .shutdown(new Error(`Function executor received ${signal}`))\n .then(() => new Promise<void>((resolve, reject) => {\n server.tryShutdown((error) => {\n if (error != null) reject(error);\n else resolve();\n });\n }));\n void gracefulShutdown.then(\n () => {\n clearTimeout(forceShutdownTimer);\n writeStructuredOutput(\"stderr\", () => ({\n timestamp: new Date().toISOString(),\n level: \"info\",\n component: \"typescript_function_executor_main\",\n message: \"stopped TypeScript function executor\",\n signal,\n executor_id: args.executorId,\n fn_executor_id: args.functionExecutorId,\n pid: process.pid,\n }));\n process.exit(0);\n },\n (error: unknown) => {\n clearTimeout(forceShutdownTimer);\n writeStructuredOutput(\"stderr\", () => ({\n timestamp: new Date().toISOString(),\n level: \"error\",\n component: \"typescript_function_executor_main\",\n message: \"TypeScript function executor shutdown failed\",\n signal,\n executor_id: args.executorId,\n fn_executor_id: args.functionExecutorId,\n pid: process.pid,\n error: error instanceof Error ? `${error.name}: ${error.message}` : String(error),\n }));\n server.forceShutdown();\n process.exit(1);\n },\n );\n };\n process.once(\"SIGINT\", () => shutdown(\"SIGINT\"));\n process.once(\"SIGTERM\", () => shutdown(\"SIGTERM\"));\n}\n","import { createRequire } from \"node:module\";\nimport { SHARE_ENV, Worker } from \"node:worker_threads\";\nimport type { NativeEmit, NativeSandboxBinding } from \"./native-sandbox.js\";\nimport {\n cancelNativeCall,\n closeNativeHandle,\n type NativeCall,\n type NativeHandle,\n type WorkerRequest,\n type WorkerResponse,\n} from \"./native-worker-protocol.js\";\nimport { resolveProxyTarget } from \"./url.js\";\n\ninterface PendingCall {\n resolve: (value: any) => void;\n reject: (error: Error) => void;\n emit?: NativeEmit;\n // Keep descriptors (and their parents) alive until the operation settles.\n handle?: NativeHandle;\n}\n\n/** One persistent worker per SDK installation and calling isolate. */\nexport class NativeWorkerClient {\n private worker?: Worker;\n private nextId = 1;\n private registered = new Set<number>();\n private pending = new Map<number, PendingCall>();\n private finalizers = new FinalizationRegistry<number>((id) =>\n this.release(id),\n );\n\n constructor(\n private readonly workerPath: () => string | URL = () =>\n createRequire(import.meta.url).resolve(\n \"tensorlake/internal/native-worker\",\n ),\n ) {}\n\n handle(\n kind: NativeHandle[\"kind\"],\n args: unknown[],\n parent?: NativeHandle,\n ): object {\n const handle: NativeHandle = { id: this.nextId++, kind, args, parent };\n this.finalizers.register(handle, handle.id);\n let closed = false;\n return new Proxy(\n {},\n {\n get: (_target, method) => {\n if (method === \"then\") return undefined;\n if (method === closeNativeHandle)\n return () => {\n closed = true;\n this.release(handle.id);\n };\n if (method === \"connectProxy\")\n return (...proxyArgs: unknown[]) => {\n if (closed) throw new Error(\"Tensorlake native client is closed\");\n return this.handle(\"NativeSandboxProxyClient\", proxyArgs, handle);\n };\n if (method === \"baseUrl\")\n return () =>\n resolveProxyTarget(String(args[0]), String(args[1])).baseUrl;\n if (typeof method !== \"string\") return undefined;\n return (...callArgs: unknown[]) => {\n if (closed)\n return Promise.reject(\n new Error(\"Tensorlake native client is closed\"),\n );\n const emit =\n typeof callArgs.at(-1) === \"function\"\n ? (callArgs.pop() as NativeEmit)\n : undefined;\n return this.call(handle, method, callArgs, emit);\n };\n },\n },\n );\n }\n\n call(\n handle: NativeHandle | undefined,\n method: string,\n args: unknown[],\n emit?: NativeEmit,\n ): NativeCall<any> {\n const id = this.nextId++;\n let worker: Worker | undefined;\n const promise: NativeCall<any> = new Promise((resolve, reject) => {\n try {\n worker = this.getWorker();\n this.pending.set(id, { resolve, reject, emit, handle });\n worker.ref();\n if (handle) this.register(handle, worker);\n this.send(worker, {\n type: \"call\",\n id,\n handleId: handle?.id,\n method,\n args,\n stream: !!emit,\n });\n } catch (error) {\n this.pending.delete(id);\n this.unrefIfIdle();\n reject(error);\n }\n });\n promise[cancelNativeCall] = () => {\n const pending = this.pending.get(id);\n if (pending && worker) {\n pending.emit = undefined;\n this.send(worker, { type: \"cancel\", id });\n }\n };\n return promise;\n }\n\n private getWorker(): Worker {\n if (this.worker) return this.worker;\n const worker = new Worker(this.workerPath(), {\n env: SHARE_ENV,\n name: \"tensorlake-native\",\n });\n this.worker = worker;\n worker.on(\"message\", (message: WorkerResponse) => {\n const pending = this.pending.get(message.id);\n if (!pending || this.worker !== worker) return;\n if (message.type === \"event\") {\n // Acknowledge only when the consumer asks for the next event. At most\n // one event per stream is outstanding across Rust, worker and caller.\n Promise.resolve()\n .then(() => pending.emit?.(message.value))\n .then(\n () => {\n if (this.worker === worker)\n this.send(worker, { type: \"ack\", id: message.id });\n },\n (error: Error) => {\n this.send(worker, { type: \"cancel\", id: message.id });\n pending.reject(error);\n },\n );\n return;\n }\n this.pending.delete(message.id);\n if (message.type === \"error\") {\n const error = new Error(message.error.message);\n error.name = message.error.name;\n error.stack = message.error.stack ?? error.stack;\n pending.reject(error);\n } else {\n pending.resolve(message.value);\n }\n this.unrefIfIdle();\n });\n const fail = (error: Error) => {\n if (this.worker !== worker) return;\n this.worker = undefined;\n this.registered.clear();\n for (const pending of this.pending.values()) pending.reject(error);\n this.pending.clear();\n // Never replay an in-flight request: it may already have taken effect.\n // A subsequent explicit call starts a fresh worker from descriptors.\n void worker.terminate();\n };\n worker.on(\"error\", fail);\n worker.on(\"messageerror\", fail);\n worker.on(\"exit\", (code) =>\n fail(\n new Error(\n `Tensorlake native worker exited (${code}); in-flight operations were not retried`,\n ),\n ),\n );\n worker.unref();\n return worker;\n }\n\n private register(handle: NativeHandle, worker: Worker): void {\n if (this.registered.has(handle.id)) return;\n if (handle.parent) this.register(handle.parent, worker);\n this.send(worker, {\n type: \"create\",\n handle: { id: handle.id, kind: handle.kind, args: handle.args },\n parentId: handle.parent?.id,\n });\n this.registered.add(handle.id);\n }\n\n private release(handleId: number): void {\n if (this.worker && this.registered.delete(handleId))\n this.send(this.worker, { type: \"release\", handleId });\n }\n\n private send(worker: Worker, message: WorkerRequest): void {\n worker.postMessage(message);\n }\n private unrefIfIdle(): void {\n if (this.pending.size === 0) this.worker?.unref();\n }\n}\n\nexport function createWorkerBinding(\n runtime: NativeWorkerClient,\n): NativeSandboxBinding {\n return {\n NativeSandboxClient: class {\n constructor(...args: unknown[]) {\n return runtime.handle(\"NativeSandboxClient\", args);\n }\n },\n NativeSandboxProxyClient: class {\n constructor(...args: unknown[]) {\n return runtime.handle(\"NativeSandboxProxyClient\", args);\n }\n },\n NativeRepositoryClient: class {\n constructor(...args: unknown[]) {\n return runtime.handle(\"NativeRepositoryClient\", args);\n }\n },\n validateManagedName: (name: string) =>\n runtime.call(undefined, \"validateManagedName\", [name]),\n } as unknown as NativeSandboxBinding;\n}\n\n// ESM and CJS can coexist in one application. Share the worker across bundles\n// of this SDK version, while keeping incompatible installed versions separate.\ndeclare const __SDK_VERSION__: string;\nconst runtimeKey = Symbol.for(\n `tensorlake.native.worker.${typeof __SDK_VERSION__ === \"undefined\" ? \"source\" : __SDK_VERSION__}.v1`,\n);\nconst runtimes = globalThis as typeof globalThis & {\n [runtimeKey]?: NativeWorkerClient;\n};\nexport function workerBinding(): NativeSandboxBinding {\n return createWorkerBinding(\n (runtimes[runtimeKey] ??= new NativeWorkerClient()),\n );\n}\n\n/** Runtime capsules supply the worker alongside their bundled application SDK. */\nexport function configureNativeWorker(workerPath: () => string | URL): void {\n runtimes[runtimeKey] ??= new NativeWorkerClient(workerPath);\n}\n\nexport function releaseNativeHandle(handle: object | null): void {\n (handle as { [closeNativeHandle]?: () => void } | null)?.[\n closeNativeHandle\n ]?.();\n}\n","/** Internal protocol. Native objects never cross an isolate boundary. */\nexport type NativeClientKind =\n | \"NativeSandboxClient\"\n | \"NativeSandboxProxyClient\"\n | \"NativeRepositoryClient\";\n\nexport interface NativeHandle {\n id: number;\n kind: NativeClientKind;\n args: unknown[];\n parent?: NativeHandle;\n}\n\nexport type WorkerRequest =\n | { type: \"create\"; handle: Omit<NativeHandle, \"parent\">; parentId?: number }\n | {\n type: \"call\";\n id: number;\n handleId?: number;\n method: string;\n args: unknown[];\n stream: boolean;\n }\n | { type: \"release\"; handleId: number }\n | { type: \"ack\" | \"cancel\"; id: number };\n\nexport type WorkerResponse =\n | { type: \"result\"; id: number; value: unknown }\n | {\n type: \"error\";\n id: number;\n error: { name: string; message: string; stack?: string };\n }\n | { type: \"event\"; id: number; value: string };\n\nexport const cancelNativeCall = Symbol.for(\"tensorlake.native.cancel.v1\");\nexport const closeNativeHandle = Symbol.for(\"tensorlake.native.close.v1\");\nexport type NativeCall<T> = Promise<T> & { [cancelNativeCall]?: () => void };\n","declare const __SDK_VERSION__: string;\nexport const SDK_VERSION: string = __SDK_VERSION__;\n\nexport const API_URL =\n process.env.TENSORLAKE_API_URL ?? \"https://api.tensorlake.ai\";\nexport const API_KEY = process.env.TENSORLAKE_API_KEY ?? undefined;\nexport const NAMESPACE = process.env.INDEXIFY_NAMESPACE ?? \"default\";\nexport const SANDBOX_PROXY_URL =\n process.env.TENSORLAKE_SANDBOX_PROXY_URL ?? \"https://sandbox.tensorlake.ai\";\n\nexport const DEFAULT_HTTP_TIMEOUT_MS = 300_000;\nexport const MAX_RETRIES = 3;\nexport const RETRY_BACKOFF_MS = 500;\nexport const RETRYABLE_STATUS_CODES = new Set([429, 502, 503, 504]);\n","import * as defaults from \"./defaults.js\";\n\n/** Remove a trailing slash from a URL string if present. */\nfunction trimTrailingSlashes(url: string): string {\n return url.endsWith(\"/\") ? url.slice(0, -1) : url;\n}\n\n/** Check whether a URL points to localhost. */\nexport function isLocalhost(apiUrl: string): boolean {\n try {\n const parsed = new URL(apiUrl);\n return parsed.hostname === \"localhost\" || parsed.hostname === \"127.0.0.1\";\n } catch {\n return false;\n }\n}\n\n/** Return the explicit sandbox proxy env override, if the user set one. */\nexport function explicitProxyUrlOverride(): string | undefined {\n const explicit = process.env.TENSORLAKE_SANDBOX_PROXY_URL?.trim();\n return explicit && explicit.length > 0 ? explicit : undefined;\n}\n\n/**\n * Resolve the legacy default proxy URL for direct sandbox handles.\n *\n * Normal client connect/create flows use the server-returned `sandboxUrl`.\n * This helper keeps the old direct-handle behavior and treats the env var as\n * an explicit override.\n *\n * Legacy priority:\n * 1. TENSORLAKE_SANDBOX_PROXY_URL env var\n * 2. `http://localhost:9443` for localhost API URLs\n * 3. Transform `api.X` → `sandbox.X`\n * 4. Default fallback\n */\nexport function resolveProxyUrl(apiUrl: string): string {\n const explicit = explicitProxyUrlOverride();\n if (explicit) return explicit;\n\n if (isLocalhost(apiUrl)) return \"http://localhost:9443\";\n\n try {\n const parsed = new URL(apiUrl);\n const host = parsed.hostname;\n if (host.startsWith(\"api.\")) {\n const proxyHost = \"sandbox.\" + host.slice(4);\n return `${parsed.protocol}//${proxyHost}`;\n }\n } catch {\n // fall through to default\n }\n\n return defaults.SANDBOX_PROXY_URL;\n}\n\n/**\n * Resolve the proxy target for a specific sandbox.\n *\n * - Localhost: base URL stays the same, Host header set to `{sandboxId}.local`\n * - Cloud: selected proxy domain with `X-Tensorlake-Sandbox-Id` header\n *\n * Returns `{ baseUrl, hostHeader, sandboxIdHeader }`.\n */\nexport function resolveProxyTarget(\n proxyUrl: string,\n sandboxId: string,\n): { baseUrl: string; hostHeader: string | undefined; sandboxIdHeader: string | undefined } {\n try {\n const parsed = new URL(proxyUrl);\n const host = parsed.hostname;\n\n if (host === \"localhost\" || host === \"127.0.0.1\") {\n return {\n baseUrl: trimTrailingSlashes(proxyUrl),\n hostHeader: `${sandboxId}.local`,\n sandboxIdHeader: undefined,\n };\n }\n\n const port = parsed.port ? `:${parsed.port}` : \"\";\n return {\n baseUrl: `${parsed.protocol}//${host}${port}`,\n hostHeader: undefined,\n sandboxIdHeader: sandboxId,\n };\n } catch {\n return {\n baseUrl: `${trimTrailingSlashes(proxyUrl)}/${sandboxId}`,\n hostHeader: undefined,\n sandboxIdHeader: undefined,\n };\n }\n}\n\n/**\n * Build a public sandbox URL from a server-provided ingress endpoint.\n *\n * `port` omitted or `9501` returns the management URL:\n * `https://<sandbox-id>.<ingress-host>`. User ports use the public\n * `<port>-<sandbox-id>.<ingress-host>` form.\n */\nexport function sandboxUrlFromIngressEndpoint(\n ingressEndpoint: string,\n sandboxId: string,\n port = 9501,\n): string {\n const parsed = new URL(ingressEndpoint);\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(\"ingressEndpoint must be an absolute http(s) URL\");\n }\n const label = port === 9501 ? sandboxId : `${port}-${sandboxId}`;\n return `${parsed.protocol}//${label}.${parsed.host}`;\n}\n\n/**\n * Derive the sandbox lifecycle URL from the API URL.\n *\n * Transforms `api.X` → `sandbox.X` for cloud. Returns the URL unchanged for\n * localhost or unrecognised patterns.\n */\nexport function resolveSandboxLifecycleUrl(apiUrl: string): string {\n if (isLocalhost(apiUrl)) return apiUrl;\n\n try {\n const parsed = new URL(apiUrl);\n if (parsed.hostname.startsWith(\"api.\")) {\n parsed.hostname = \"sandbox.\" + parsed.hostname.slice(4);\n return parsed.toString().replace(/\\/$/, \"\");\n }\n } catch {\n // fall through\n }\n\n return apiUrl;\n}\n\n/**\n * Build a lifecycle API path.\n *\n * - Localhost (namespaced): `/v1/namespaces/{namespace}/{path}`\n * - Cloud (flat): `/{path}`\n */\nexport function lifecyclePath(\n path: string,\n isLocal: boolean,\n namespace: string,\n): string {\n if (isLocal) {\n return `/v1/namespaces/${namespace}/${path}`;\n }\n return `/${path}`;\n}\n","type OutputDestination = \"stdout\" | \"stderr\";\n\ninterface CapturedStream {\n readonly write: (\n chunk: string,\n callback: (error?: Error | null) => void,\n ) => boolean;\n}\n\ninterface ExecutorOutput {\n readonly stdout: CapturedStream;\n readonly stderr: CapturedStream;\n}\n\nconst nativeJSONStringify = JSON.stringify;\n\nfunction captureStream(stream: NodeJS.WriteStream): CapturedStream {\n // A closed descriptor reports its failure through the stream's error event.\n // The executor owns these output streams, so logging failures must not become\n // uncaught exceptions in an allocation or initialization path.\n stream.on(\"error\", () => undefined);\n return {\n // Deployed code runs in this process and can replace stream.write. Capture\n // the executor's writer before application modules are imported.\n write: stream.write.bind(stream) as CapturedStream[\"write\"],\n };\n}\n\nconst executorOutput: ExecutorOutput = {\n stdout: captureStream(process.stdout),\n stderr: captureStream(process.stderr),\n};\n\n/**\n * Writes one JSON log record without allowing serialization or stream failures\n * to affect executor control flow.\n */\nexport function writeStructuredOutput(\n destination: OutputDestination,\n createRecord: () => Record<string, unknown>,\n): void {\n try {\n const serialized = nativeJSONStringify(createRecord());\n if (serialized == null) return;\n executorOutput[destination].write(`${serialized}\\n`, () => undefined);\n } catch {\n // Logging is best-effort. In particular, terminal allocation and\n // initialization callbacks must still run after user code damages stdio.\n }\n}\n","import { mkdir, mkdtemp, readFile, rm, writeFile } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { compileFunction, constants as vmConstants } from \"node:vm\";\nimport * as grpc from \"@grpc/grpc-js\";\nimport { unzipSync } from \"fflate\";\nimport { SDK_VERSION } from \"../defaults.js\";\nimport type { RegisteredDefinition } from \"../applications/function.js\";\nimport { restoreRegistry, snapshotRegistry } from \"../applications/registry.js\";\nimport { AllocationRunner } from \"./allocation.js\";\nimport { writeStructuredOutput } from \"./safe-output.js\";\nimport { printCloudEvent } from \"./user-events.js\";\n\ntype Message = Record<string, any>;\ntype UnaryCall = grpc.ServerUnaryCall<Message, Message>;\ntype Callback = grpc.sendUnaryData<Message>;\ntype WritableCall = grpc.ServerWritableStream<Message, Message>;\ntype LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\nconst SHUTDOWN_TERMINAL_DRAIN_TIMEOUT_MS = 1_000;\n\ninterface CodeManifest {\n format_version?: number;\n runtime?: string;\n minimum_node_major?: number;\n module?: string;\n functions?: Record<string, { name?: string }>;\n}\n\ninterface RuntimeModule {\n __tensorlakeGetFunction?(name: string): RegisteredDefinition;\n}\n\nconst nativeImport = compileFunction(\n \"return import(specifier)\",\n [\"specifier\"],\n { importModuleDynamically: vmConstants.USE_MAIN_CONTEXT_DEFAULT_LOADER },\n) as (specifier: string) => Promise<unknown>;\n\nfunction rpcError(code: grpc.status, details: string): grpc.ServiceError {\n return Object.assign(new Error(details), { code, details, metadata: new grpc.Metadata() });\n}\n\nfunction requireSafeSize(value: unknown, field: string): number {\n if (!Number.isSafeInteger(value) || Number(value) < 0) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, `${field} must be a non-negative safe integer`);\n }\n return Number(value);\n}\n\nfunction validateSerializedObjectManifest(manifest: Message | undefined, field: string): void {\n if (manifest == null) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, `${field}.manifest is required`);\n }\n if (manifest.encoding == null) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, `${field}.manifest.encoding is required`);\n }\n if (manifest.encodingVersion == null) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, `${field}.manifest.encoding_version is required`);\n }\n requireSafeSize(manifest.encodingVersion, `${field}.manifest.encoding_version`);\n requireSafeSize(manifest.size, `${field}.manifest.size`);\n if (manifest.metadataSize == null) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, `${field}.manifest.metadata_size is required`);\n }\n const metadataSize = requireSafeSize(manifest.metadataSize, `${field}.manifest.metadata_size`);\n if (metadataSize > Number(manifest.size)) {\n throw rpcError(\n grpc.status.INVALID_ARGUMENT,\n `${field}.manifest.metadata_size cannot exceed size`,\n );\n }\n if (typeof manifest.sha256Hash !== \"string\" || manifest.sha256Hash.length === 0) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, `${field}.manifest.sha256_hash is required`);\n }\n}\n\nfunction validateBlob(blob: Message | undefined, field: string): void {\n if (blob == null) throw rpcError(grpc.status.INVALID_ARGUMENT, `${field} is required`);\n if (!Array.isArray(blob.chunks)) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, `${field}.chunks must be an array`);\n }\n blob.chunks.forEach((chunk: Message | undefined, index: number) => {\n if (chunk == null || typeof chunk.uri !== \"string\" || chunk.uri.length === 0) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, `${field}.chunks[${index}].uri is required`);\n }\n requireSafeSize(chunk.size, `${field}.chunks[${index}].size`);\n });\n}\n\nfunction validateNewAllocation(allocation: Message | undefined): asserts allocation is Message {\n if (allocation == null) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, \"CreateAllocationRequest.allocation is required\");\n }\n for (const [field, value] of [\n [\"request_id\", allocation.requestId],\n [\"function_call_id\", allocation.functionCallId],\n [\"allocation_id\", allocation.allocationId],\n ] as const) {\n if (typeof value !== \"string\" || value.length === 0) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, `Allocation.${field} is required`);\n }\n }\n const inputs = allocation.inputs;\n if (inputs == null) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, \"Allocation.inputs is required\");\n }\n if (!Array.isArray(inputs.args) || !Array.isArray(inputs.argBlobs)) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, \"Allocation input args and arg_blobs must be arrays\");\n }\n if (inputs.args.length !== inputs.argBlobs.length) {\n throw rpcError(\n grpc.status.INVALID_ARGUMENT,\n `Mismatched function arguments and argument blobs lengths, ${inputs.args.length} != ${inputs.argBlobs.length}`,\n );\n }\n inputs.args.forEach((argument: Message | undefined, index: number) => {\n if (argument == null) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, `Allocation.inputs.args[${index}] is required`);\n }\n requireSafeSize(argument.offset, `Allocation.inputs.args[${index}].offset`);\n validateSerializedObjectManifest(argument.manifest, `Allocation.inputs.args[${index}]`);\n validateBlob(inputs.argBlobs[index], `Allocation.inputs.arg_blobs[${index}]`);\n });\n validateBlob(inputs.requestErrorBlob, \"Allocation.inputs.request_error_blob\");\n}\n\nfunction safeArchivePath(root: string, archivePath: string): string {\n const output = path.resolve(root, archivePath);\n if (output !== root && !output.startsWith(`${root}${path.sep}`)) {\n throw new Error(`Application archive contains unsafe path '${archivePath}'`);\n }\n return output;\n}\n\nasync function unpackApplicationCode(data: Uint8Array): Promise<{ root: string; manifest: CodeManifest }> {\n const root = await mkdtemp(path.join(os.tmpdir(), \"tensorlake-typescript-app-\"));\n try {\n const files = unzipSync(data);\n for (const [name, content] of Object.entries(files)) {\n const destination = safeArchivePath(root, name);\n await mkdir(path.dirname(destination), { recursive: true });\n await writeFile(destination, content, { mode: 0o600 });\n }\n const manifest = JSON.parse(\n await readFile(path.join(root, \".tensorlake_code_manifest.json\"), \"utf8\"),\n ) as CodeManifest;\n return { root, manifest };\n } catch (error) {\n await rm(root, { recursive: true, force: true });\n throw error;\n }\n}\n\nexport class FunctionExecutorService {\n private readonly allocations = new Map<string, AllocationRunner>();\n private functionRef?: Message;\n private definition?: RegisteredDefinition;\n private applicationDefinition?: RegisteredDefinition;\n private initialization?: Promise<void>;\n private stopping = false;\n private shutdownPromise?: Promise<void>;\n\n readonly implementation: grpc.UntypedServiceImplementation = {\n initialize: this.initialize.bind(this),\n listAllocations: this.listAllocations.bind(this),\n createAllocation: this.createAllocation.bind(this),\n deleteAllocation: this.deleteAllocation.bind(this),\n watchAllocationState: this.watchAllocationState.bind(this),\n sendAllocationUpdate: this.sendAllocationUpdate.bind(this),\n getAllocationExecutionLogBatch: this.getAllocationExecutionLogBatch.bind(this),\n advanceAllocationExecutionLogBatch: this.advanceAllocationExecutionLogBatch.bind(this),\n watchAllocationEventLogReads: this.watchAllocationEventLogReads.bind(this),\n sendAllocationEventLogReadResponse: this.sendAllocationEventLogReadResponse.bind(this),\n checkHealth: this.checkHealth.bind(this),\n getInfo: this.getInfo.bind(this),\n };\n\n shutdown(reason: unknown = new Error(\"Function executor is shutting down\")): Promise<void> {\n if (this.shutdownPromise != null) return this.shutdownPromise;\n this.stopping = true;\n const shutdown = (async () => {\n this.log(\"info\", \"function executor service shutdown requested\", {\n allocation_count: this.allocations.size,\n });\n const allocations = [...this.allocations.values()];\n for (const allocation of allocations) allocation.cancel(reason);\n await Promise.all(allocations.map((allocation) => allocation.waitForCompletion()));\n const terminalObservations = await Promise.all(\n allocations.map((allocation) =>\n allocation.waitForTerminalBatchObserved(SHUTDOWN_TERMINAL_DRAIN_TIMEOUT_MS)\n ),\n );\n const unobservedCount = terminalObservations.filter((observed) => !observed).length;\n if (unobservedCount > 0) {\n this.log(\n \"warn\",\n \"shutdown terminal execution batches were not observed before drain deadline\",\n { unobserved_allocation_count: unobservedCount },\n );\n }\n this.log(\"info\", \"function executor service shutdown completed\", {\n allocation_count: allocations.length,\n });\n })();\n this.shutdownPromise = shutdown;\n return shutdown;\n }\n\n private initialize(call: UnaryCall, callback: Callback): void {\n if (this.stopping) {\n callback(rpcError(grpc.status.UNAVAILABLE, \"Function Executor is shutting down\"));\n return;\n }\n const startedAt = Date.now();\n this.log(\"info\", \"initialize RPC received\", {\n ...this.functionLogFields(call.request.function),\n application_code_bytes: call.request.applicationCode?.data?.length,\n });\n this.emitInitializationEvent(call.request.function, \"function_executor_initialization_started\", \"Initializing function executor\");\n void this.initializeAsync(call.request).then(\n () => {\n this.log(\"info\", \"initialize RPC completed\", {\n ...this.functionLogFields(call.request.function),\n duration_ms: Date.now() - startedAt,\n outcome: \"success\",\n });\n this.emitInitializationEvent(call.request.function, \"function_executor_initialization_finished\", \"Function executor initialization completed\");\n callback(null, { outcomeCode: \"INITIALIZATION_OUTCOME_CODE_SUCCESS\" });\n },\n (error: unknown) => {\n const message = error instanceof Error ? `${error.name}: ${error.message}` : String(error);\n this.log(\"error\", \"initialize RPC failed\", {\n ...this.functionLogFields(call.request.function),\n duration_ms: Date.now() - startedAt,\n outcome: \"failure\",\n }, error);\n this.emitInitializationEvent(\n call.request.function,\n \"function_executor_initialization_failed\",\n \"Function executor initialization failed\",\n error,\n );\n callback(null, {\n outcomeCode: \"INITIALIZATION_OUTCOME_CODE_FAILURE\",\n failureReason: \"INITIALIZATION_FAILURE_REASON_FUNCTION_ERROR\",\n errorMessage: message,\n });\n },\n );\n }\n\n private emitInitializationEvent(\n functionRef: Message | undefined,\n event: string,\n message: string,\n error?: unknown,\n ): void {\n const rendered = error instanceof Error ? error.stack?.split(\"\\n\") : error == null ? undefined : [String(error)];\n printCloudEvent({\n ...(error == null ? {} : { level: \"error\" }),\n event,\n message,\n namespace: functionRef?.namespace,\n application: functionRef?.applicationName,\n application_version: functionRef?.applicationVersion,\n function: functionRef?.functionName,\n ...(rendered == null ? {} : { error: rendered }),\n });\n }\n\n private async initializeAsync(request: Message): Promise<void> {\n if (this.definition != null) throw new Error(\"Function Executor is already initialized\");\n if (this.initialization != null) throw new Error(\"Function Executor initialization is already in progress\");\n const initialization = this.initializeAttempt(request);\n this.initialization = initialization;\n try {\n await initialization;\n } finally {\n if (this.initialization === initialization) this.initialization = undefined;\n }\n }\n\n private async initializeAttempt(request: Message): Promise<void> {\n if (request.function == null) throw new Error(\"InitializeRequest.function is required\");\n for (const [field, value] of [\n [\"namespace\", request.function.namespace],\n [\"application_name\", request.function.applicationName],\n [\"function_name\", request.function.functionName],\n [\"application_version\", request.function.applicationVersion],\n ] as const) {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`InitializeRequest.function.${field} is required`);\n }\n }\n if (request.applicationCode == null) throw new Error(\"InitializeRequest.application_code is required\");\n if (request.applicationCode.manifest == null) throw new Error(\"InitializeRequest.application_code.manifest is required\");\n if (request.applicationCode.data == null) throw new Error(\"InitializeRequest.application_code.data is required\");\n const codeManifest = request.applicationCode.manifest;\n if (codeManifest.encoding == null) throw new Error(\"InitializeRequest.application_code.manifest.encoding is required\");\n if (codeManifest.encodingVersion == null) throw new Error(\"InitializeRequest.application_code.manifest.encoding_version is required\");\n if (codeManifest.size == null) throw new Error(\"InitializeRequest.application_code.manifest.size is required\");\n if (codeManifest.sha256Hash == null) throw new Error(\"InitializeRequest.application_code.manifest.sha256_hash is required\");\n if (!new Set([\"SERIALIZED_OBJECT_ENCODING_BINARY_ZIP\", 4]).has(codeManifest.encoding)) {\n throw new Error(\n `Invalid application code encoding: ${String(codeManifest.encoding)}. Expected: BINARY_ZIP`,\n );\n }\n // Match the Python executor: the manifest describes dataplane transport,\n // while initialization consumes the archive bytes that were delivered.\n const declaredSize = requireSafeSize(\n codeManifest.size,\n \"InitializeRequest.application_code.manifest.size\",\n );\n const metadataSize = codeManifest.metadataSize == null\n ? 0\n : requireSafeSize(\n codeManifest.metadataSize,\n \"InitializeRequest.application_code.manifest.metadata_size\",\n );\n if (metadataSize > declaredSize) {\n throw new Error(\n \"InitializeRequest.application_code.manifest.metadata_size cannot exceed size\",\n );\n }\n const archive = new Uint8Array(request.applicationCode.data);\n this.log(\"debug\", \"unpacking application code\", {\n ...this.functionLogFields(request.function),\n application_code_bytes: archive.byteLength,\n });\n const unpackStartedAt = Date.now();\n const { root, manifest } = await unpackApplicationCode(archive);\n let registrySnapshot: ReturnType<typeof snapshotRegistry> | undefined;\n try {\n this.log(\"debug\", \"application code unpacked\", {\n ...this.functionLogFields(request.function),\n duration_ms: Date.now() - unpackStartedAt,\n manifest_format_version: manifest.format_version,\n manifest_runtime: manifest.runtime,\n manifest_function_count: Object.keys(manifest.functions ?? {}).length,\n });\n if (manifest.format_version !== 2 || manifest.runtime !== \"typescript\") {\n throw new Error(\"Application code is not a Tensorlake TypeScript bundle\");\n }\n const nodeMajor = Number(process.versions.node.split(\".\")[0]);\n if ((manifest.minimum_node_major ?? 24) > nodeMajor) {\n throw new Error(`Application requires Node ${manifest.minimum_node_major} or newer; executor has ${nodeMajor}`);\n }\n const moduleName = manifest.module;\n if (!moduleName) throw new Error(\"Application code manifest does not name a runtime module\");\n const functionName = String(request.function.functionName);\n if (manifest.functions?.[functionName] == null) {\n throw new Error(`Function '${functionName}' is not present in the application bundle`);\n }\n const modulePath = safeArchivePath(root, moduleName);\n this.log(\"debug\", \"importing application runtime module\", {\n ...this.functionLogFields(request.function),\n module: moduleName,\n });\n const importStartedAt = Date.now();\n registrySnapshot = snapshotRegistry();\n const runtime = await nativeImport(`${pathToFileURL(modulePath).href}?executor=${Date.now()}`) as RuntimeModule;\n if (typeof runtime.__tensorlakeGetFunction !== \"function\") {\n throw new Error(\"Application runtime does not export __tensorlakeGetFunction\");\n }\n const definition = runtime.__tensorlakeGetFunction(functionName);\n if (definition?.name !== functionName) {\n throw new Error(\n `Application runtime resolved function '${functionName}' as '${String(definition?.name)}'`,\n );\n }\n const applicationName = String(request.function.applicationName);\n const applicationDefinition = runtime.__tensorlakeGetFunction(applicationName);\n if (applicationDefinition?.name !== applicationName) {\n throw new Error(\n `Application runtime resolved application '${applicationName}' as '${String(applicationDefinition?.name)}'`,\n );\n }\n if (applicationDefinition.application == null) {\n throw new Error(`'${applicationName}' is not a Tensorlake application`);\n }\n this.functionRef = request.function;\n this.definition = definition;\n this.applicationDefinition = applicationDefinition;\n this.log(\"debug\", \"application function resolved\", {\n ...this.functionLogFields(request.function),\n duration_ms: Date.now() - importStartedAt,\n parameter_count: definition.parameters.length,\n application_max_retries: applicationDefinition.application.retries.maxRetries,\n });\n registrySnapshot = undefined;\n } catch (error) {\n if (registrySnapshot != null) restoreRegistry(registrySnapshot);\n this.functionRef = undefined;\n this.definition = undefined;\n this.applicationDefinition = undefined;\n await rm(root, { recursive: true, force: true });\n throw error;\n }\n }\n\n private getAllocation(id: string): AllocationRunner {\n const allocation = this.allocations.get(id);\n if (allocation == null) throw rpcError(grpc.status.NOT_FOUND, `Allocation ${id} not found`);\n return allocation;\n }\n\n private listAllocations(_call: UnaryCall, callback: Callback): void {\n this.log(\"debug\", \"list allocations RPC received\", { allocation_count: this.allocations.size });\n callback(null, { allocations: [...this.allocations.values()].map((runner) => runner.allocation) });\n }\n\n private createAllocation(call: UnaryCall, callback: Callback): void {\n void this.createAllocationAsync(call).then(\n () => callback(null, {}),\n (error: unknown) => {\n this.log(\n \"error\",\n \"create allocation RPC failed\",\n this.allocationLogFields(call.request.allocation),\n error,\n );\n callback(error as grpc.ServiceError);\n },\n );\n }\n\n private async createAllocationAsync(call: UnaryCall): Promise<void> {\n if (this.stopping) {\n throw rpcError(grpc.status.UNAVAILABLE, \"Function Executor is shutting down\");\n }\n const initialization = this.initialization;\n if (initialization != null) {\n this.log(\"info\", \"create allocation RPC waiting for initialization\", {\n ...this.allocationLogFields(call.request.allocation),\n });\n await this.waitForInitialization(call, initialization);\n this.log(\"info\", \"create allocation RPC resumed after initialization\", {\n ...this.allocationLogFields(call.request.allocation),\n });\n }\n this.assertAllocationAdmissionActive(call);\n if (this.stopping) {\n throw rpcError(grpc.status.UNAVAILABLE, \"Function Executor is shutting down\");\n }\n if (this.definition == null || this.applicationDefinition == null || this.functionRef == null) {\n throw rpcError(grpc.status.FAILED_PRECONDITION, \"Function Executor is not initialized\");\n }\n const allocation = call.request.allocation;\n validateNewAllocation(allocation);\n const id = String(allocation.allocationId);\n this.log(\"info\", \"create allocation RPC received\", {\n ...this.allocationLogFields(allocation),\n replay_mode: allocation?.replayMode,\n input_count: allocation?.inputs?.args?.length ?? 0,\n });\n if (this.allocations.has(id)) throw rpcError(grpc.status.ALREADY_EXISTS, `Allocation ${id} already exists`);\n const runner = new AllocationRunner(\n allocation,\n this.functionRef,\n this.definition,\n this.applicationDefinition,\n );\n this.allocations.set(id, runner);\n runner.start();\n this.log(\"info\", \"allocation runner started\", this.allocationLogFields(allocation));\n }\n\n private waitForInitialization(call: UnaryCall, initialization: Promise<void>): Promise<void> {\n return new Promise((resolve, reject) => {\n let timer: NodeJS.Timeout | undefined;\n let settled = false;\n const deadline = typeof call.getDeadline === \"function\" ? call.getDeadline() : Infinity;\n const deadlineMs = deadline instanceof Date ? deadline.getTime() : Number(deadline);\n const cancellationError = () =>\n Number.isFinite(deadlineMs) && deadlineMs <= Date.now()\n ? rpcError(\n grpc.status.DEADLINE_EXCEEDED,\n \"Initialization did not finish before the allocation deadline\",\n )\n : rpcError(\n grpc.status.CANCELLED,\n \"Create allocation RPC was cancelled during initialization\",\n );\n const onCancelled = () => finish(cancellationError());\n const finish = (error?: unknown) => {\n if (settled) return;\n settled = true;\n if (timer != null) clearTimeout(timer);\n if (typeof call.off === \"function\") call.off(\"cancelled\", onCancelled);\n if (error == null) resolve();\n else reject(error);\n };\n\n if (\n call.cancelled\n || (Number.isFinite(deadlineMs) && deadlineMs <= Date.now())\n ) {\n finish(cancellationError());\n return;\n }\n if (typeof call.once === \"function\") call.once(\"cancelled\", onCancelled);\n\n if (Number.isFinite(deadlineMs)) {\n const remainingMs = deadlineMs - Date.now();\n if (remainingMs <= 0) {\n finish(rpcError(grpc.status.DEADLINE_EXCEEDED, \"Initialization did not finish before the allocation deadline\"));\n return;\n }\n timer = setTimeout(() => {\n finish(rpcError(\n grpc.status.DEADLINE_EXCEEDED,\n \"Initialization did not finish before the allocation deadline\",\n ));\n }, remainingMs);\n }\n\n initialization.then(\n () => finish(\n call.cancelled || (Number.isFinite(deadlineMs) && deadlineMs <= Date.now())\n ? cancellationError()\n : undefined,\n ),\n () => finish(rpcError(\n grpc.status.FAILED_PRECONDITION,\n \"Function Executor initialization failed\",\n )),\n );\n });\n }\n\n private assertAllocationAdmissionActive(call: UnaryCall): void {\n const deadline = typeof call.getDeadline === \"function\" ? call.getDeadline() : Infinity;\n const deadlineMs = deadline instanceof Date ? deadline.getTime() : Number(deadline);\n if (Number.isFinite(deadlineMs) && deadlineMs <= Date.now()) {\n throw rpcError(grpc.status.DEADLINE_EXCEEDED, \"Create allocation RPC deadline exceeded\");\n }\n if (call.cancelled) {\n throw rpcError(grpc.status.CANCELLED, \"Create allocation RPC was cancelled before allocation start\");\n }\n }\n\n private deleteAllocation(call: UnaryCall, callback: Callback): void {\n try {\n const id = String(call.request.allocationId ?? \"\");\n const allocation = this.getAllocation(id);\n this.log(\"debug\", \"delete allocation RPC received\", {\n allocation_id: id,\n finished: allocation.isFinished,\n });\n if (!allocation.isFinished) {\n throw rpcError(grpc.status.FAILED_PRECONDITION, `Allocation ${id} is still running`);\n }\n this.allocations.delete(id);\n this.log(\"info\", \"allocation deleted\", { allocation_id: id });\n callback(null, {});\n } catch (error) {\n this.log(\"error\", \"delete allocation RPC failed\", { allocation_id: call.request.allocationId }, error);\n callback(error as grpc.ServiceError);\n }\n }\n\n private watchAllocationState(call: WritableCall): void {\n try {\n const allocationId = String(call.request.allocationId ?? \"\");\n this.log(\"debug\", \"allocation state stream opening\", { allocation_id: allocationId });\n this.getAllocation(allocationId).watchState(call);\n } catch (error) {\n this.log(\"error\", \"allocation state stream failed to open\", { allocation_id: call.request.allocationId }, error);\n call.destroy(error as Error);\n }\n }\n\n private sendAllocationUpdate(call: UnaryCall, callback: Callback): void {\n try {\n const allocationId = String(call.request.allocationId ?? \"\");\n this.log(\"debug\", \"allocation update RPC received\", {\n allocation_id: allocationId,\n update_kind: call.request.outputBlob != null\n ? \"output_blob\"\n : call.request.requestStateOperationResult != null\n ? \"request_state_operation_result\"\n : \"unknown\",\n });\n if (\n call.request.outputBlob == null\n && call.request.requestStateOperationResult == null\n ) {\n throw rpcError(\n grpc.status.INVALID_ARGUMENT,\n `Unknown update type in AllocationUpdate for allocation ${allocationId}`,\n );\n }\n const allocation = this.getAllocation(allocationId);\n if (allocation.isFinished) throw rpcError(grpc.status.FAILED_PRECONDITION, \"Allocation is already finished\");\n allocation.deliverUpdate(call.request);\n callback(null, {});\n } catch (error) {\n this.log(\"error\", \"allocation update RPC failed\", { allocation_id: call.request.allocationId }, error);\n callback(error as grpc.ServiceError);\n }\n }\n\n private getAllocationExecutionLogBatch(call: UnaryCall, callback: Callback): void {\n try {\n const allocationId = String(call.request.allocationId ?? \"\");\n this.log(\"debug\", \"execution log batch RPC waiting\", { allocation_id: allocationId });\n const allocation = this.getAllocation(allocationId);\n void allocation.getExecutionBatch().then(\n (events) => {\n this.log(\"debug\", \"execution log batch RPC completed\", {\n allocation_id: allocationId,\n event_count: events.length,\n });\n callback(null, { events });\n },\n (error) => {\n this.log(\"error\", \"execution log batch RPC failed\", { allocation_id: allocationId }, error);\n callback(error as grpc.ServiceError);\n },\n );\n } catch (error) {\n this.log(\"error\", \"execution log batch RPC failed\", { allocation_id: call.request.allocationId }, error);\n callback(error as grpc.ServiceError);\n }\n }\n\n private advanceAllocationExecutionLogBatch(call: UnaryCall, callback: Callback): void {\n try {\n const allocationId = String(call.request.allocationId ?? \"\");\n this.log(\"debug\", \"advance execution log batch RPC received\", { allocation_id: allocationId });\n this.getAllocation(allocationId).advanceExecutionBatch();\n callback(null, {});\n } catch (error) {\n this.log(\"error\", \"advance execution log batch RPC failed\", { allocation_id: call.request.allocationId }, error);\n callback(error as grpc.ServiceError);\n }\n }\n\n private watchAllocationEventLogReads(call: WritableCall): void {\n try {\n const allocationId = String(call.request.allocationId ?? \"\");\n const allocation = this.getAllocation(allocationId);\n this.log(\"debug\", \"event log read stream opening\", { allocation_id: allocationId });\n\n // grpc-js sends response metadata lazily on the first message. EventLog\n // streams normally have no message until user code starts a durable call,\n // while the dataplane waits for response metadata before it starts polling\n // execution batches. Send headers explicitly to break that startup cycle.\n call.sendMetadata(new grpc.Metadata());\n this.log(\"debug\", \"event log read stream established\", { allocation_id: allocationId });\n allocation.watchEventLogReads(call);\n } catch (error) {\n this.log(\"error\", \"event log read stream failed to open\", { allocation_id: call.request.allocationId }, error);\n call.destroy(error as Error);\n }\n }\n\n private sendAllocationEventLogReadResponse(call: UnaryCall, callback: Callback): void {\n try {\n const allocationId = String(call.request.allocationId ?? \"\");\n this.log(\"debug\", \"event log read response RPC received\", {\n allocation_id: allocationId,\n entry_count: call.request.entries?.length ?? 0,\n last_clock: call.request.lastClock,\n has_more: call.request.hasMore,\n });\n this.getAllocation(allocationId).deliverEventLogResponse(call.request);\n callback(null, {});\n } catch (error) {\n this.log(\"error\", \"event log read response RPC failed\", { allocation_id: call.request.allocationId }, error);\n callback(error as grpc.ServiceError);\n }\n }\n\n private checkHealth(_call: UnaryCall, callback: Callback): void {\n this.log(\"debug\", \"health check RPC received\", { initialized: this.definition != null });\n if (this.definition == null) {\n callback(rpcError(grpc.status.UNAVAILABLE, \"Function Executor is not initialized\"));\n } else {\n callback(null, { healthy: true, statusMessage: \"ok\" });\n }\n }\n\n private getInfo(_call: UnaryCall, callback: Callback): void {\n this.log(\"debug\", \"executor info RPC received\", { protocol_version: \"0.1.3\" });\n callback(null, {\n version: \"0.1.3\",\n sdkVersion: SDK_VERSION,\n sdkLanguage: \"typescript\",\n sdkLanguageVersion: process.versions.node,\n });\n }\n\n private functionLogFields(functionRef: Message | undefined): Message {\n return {\n namespace: functionRef?.namespace,\n application: functionRef?.applicationName,\n application_version: functionRef?.applicationVersion,\n function: functionRef?.functionName,\n };\n }\n\n private allocationLogFields(allocation: Message | undefined): Message {\n return {\n allocation_id: allocation?.allocationId,\n request_id: allocation?.requestId,\n function_call_id: allocation?.functionCallId,\n };\n }\n\n private log(level: LogLevel, message: string, fields: Message = {}, error?: unknown): void {\n writeStructuredOutput(\"stderr\", () => {\n const rendered = error instanceof Error\n ? error.stack?.split(\"\\n\") ?? [`${error.name}: ${error.message}`]\n : error == null ? undefined : [String(error)];\n return {\n timestamp: new Date().toISOString(),\n level,\n component: \"typescript_function_executor_service\",\n message,\n ...fields,\n ...(rendered == null ? {} : { error: rendered }),\n };\n });\n }\n}\n","const SDK_USAGE_ERROR_BRAND = Symbol.for(\"tensorlake.applications.sdk-usage-error.v1\");\nconst REQUEST_ERROR_BRAND = Symbol.for(\"tensorlake.applications.request-error.v1\");\nconst FUNCTION_ERROR_BRAND = Symbol.for(\"tensorlake.applications.function-error.v1\");\nconst TIMEOUT_ERROR_BRAND = Symbol.for(\"tensorlake.applications.timeout-error.v1\");\n\nexport class TensorlakeApplicationError extends Error {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"TensorlakeApplicationError\";\n }\n}\n\nexport class SDKUsageError extends TensorlakeApplicationError {\n readonly [SDK_USAGE_ERROR_BRAND] = true;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== SDKUsageError) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isSDKUsageError(value);\n }\n\n constructor(message: string) {\n super(message);\n this.name = \"SDKUsageError\";\n }\n}\n\n/** Recognizes SDKUsageError instances thrown by independently bundled SDK copies. */\nfunction isSDKUsageError(value: unknown): value is SDKUsageError {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[SDK_USAGE_ERROR_BRAND] === true && typeof candidate.message === \"string\";\n}\n\nexport class SerializationError extends TensorlakeApplicationError {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"SerializationError\";\n }\n}\n\nexport class DeserializationError extends TensorlakeApplicationError {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"DeserializationError\";\n }\n}\n\nexport class FunctionError extends TensorlakeApplicationError {\n readonly [FUNCTION_ERROR_BRAND] = true;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== FunctionError) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isFunctionError(value);\n }\n\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"FunctionError\";\n }\n}\n\nexport class TimeoutError extends TensorlakeApplicationError {\n readonly [TIMEOUT_ERROR_BRAND] = true;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== TimeoutError) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isTimeoutError(value);\n }\n\n constructor() {\n super(\"Timed out.\");\n this.name = \"TimeoutError\";\n }\n}\n\n/** Recognizes TimeoutError instances thrown by independently bundled SDK copies. */\nfunction isTimeoutError(value: unknown): value is TimeoutError {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[TIMEOUT_ERROR_BRAND] === true && typeof candidate.message === \"string\";\n}\n\n/** Recognizes FunctionError instances thrown by independently bundled SDK copies. */\nfunction isFunctionError(value: unknown): value is FunctionError {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[FUNCTION_ERROR_BRAND] === true && typeof candidate.message === \"string\";\n}\n\nexport class RequestError extends TensorlakeApplicationError {\n readonly [REQUEST_ERROR_BRAND] = true;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== RequestError) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isRequestError(value);\n }\n\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"RequestError\";\n }\n}\n\n/** Recognizes RequestError instances thrown by independently bundled SDK copies. */\nexport function isRequestError(value: unknown): value is RequestError {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[REQUEST_ERROR_BRAND] === true && typeof candidate.message === \"string\";\n}\n\nexport class ReplayMismatchError extends TensorlakeApplicationError {\n constructor(message = \"Function execution diverged from its durable event history\") {\n super(message);\n this.name = \"ReplayMismatchError\";\n }\n}\n","import type { RegisteredDefinition } from \"./function.js\";\nimport { SDKUsageError } from \"./errors.js\";\n\ninterface RegistryState {\n functions: Map<string, RegisteredDefinition>;\n applications: Map<string, RegisteredDefinition>;\n}\n\nexport interface RegistrySnapshot {\n functions: Map<string, RegisteredDefinition>;\n applications: Map<string, RegisteredDefinition>;\n}\n\nconst REGISTRY_KEY = Symbol.for(\"tensorlake.applications.registry.v1\");\n\nfunction registry(): RegistryState {\n const target = globalThis as typeof globalThis & { [REGISTRY_KEY]?: RegistryState };\n target[REGISTRY_KEY] ??= { functions: new Map(), applications: new Map() };\n return target[REGISTRY_KEY];\n}\n\nexport function registerDefinition(definition: RegisteredDefinition, isApplication: boolean): void {\n const state = registry();\n const existing = state.functions.get(definition.name);\n if (existing != null && existing !== definition) {\n throw new SDKUsageError(`Multiple Tensorlake functions are named '${definition.name}'`);\n }\n state.functions.set(definition.name, definition);\n if (isApplication) {\n const app = state.applications.get(definition.name);\n if (app != null && app !== definition) {\n throw new SDKUsageError(`Multiple Tensorlake applications are named '${definition.name}'`);\n }\n state.applications.set(definition.name, definition);\n }\n}\n\nexport function getFunction(name: string): RegisteredDefinition {\n const result = registry().functions.get(name);\n if (result == null) throw new SDKUsageError(`Tensorlake function '${name}' is not registered`);\n return result;\n}\n\nexport function getFunctions(): RegisteredDefinition[] {\n return [...registry().functions.values()];\n}\n\nexport function getApplications(): RegisteredDefinition[] {\n return [...registry().applications.values()];\n}\n\nexport function snapshotRegistry(): RegistrySnapshot {\n const state = registry();\n return {\n functions: new Map(state.functions),\n applications: new Map(state.applications),\n };\n}\n\nexport function restoreRegistry(snapshot: RegistrySnapshot): void {\n const state = registry();\n state.functions.clear();\n state.applications.clear();\n for (const [name, definition] of snapshot.functions) state.functions.set(name, definition);\n for (const [name, definition] of snapshot.applications) state.applications.set(name, definition);\n}\n\nexport function clearRegistryForTest(): void {\n registry().functions.clear();\n registry().applications.clear();\n}\n","import { AsyncResource, createHook, executionAsyncId } from \"node:async_hooks\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport type { RegisteredDefinition, FunctionRuntime, FunctionFuture, TailCall } from \"../applications/function.js\";\nimport {\n DURABLE_PROMISE_INTERNAL_THEN,\n DURABLE_PROMISE_OBSERVER,\n executeHandlerResult,\n installPromiseInstrumentation,\n isDetachedDurableThenable,\n isTailCall,\n registerDurableAssimilation,\n registerDurableThenable,\n runWithFunctionRuntime,\n} from \"../applications/function.js\";\nimport { File } from \"../applications/file.js\";\nimport { Headers } from \"../applications/headers.js\";\nimport { HttpBody } from \"../applications/http-body.js\";\nimport {\n DeserializationError,\n FunctionError,\n ReplayMismatchError,\n RequestError,\n SDKUsageError,\n TimeoutError,\n isRequestError,\n} from \"../applications/errors.js\";\nimport type { RequestContextValue } from \"../applications/context.js\";\nimport {\n runWithRequestContext,\n serializeRequestStateValue,\n validateCounterMetric,\n validateProgressUpdate,\n validateRequestStateKey,\n validateTimerMetric,\n waitWithAbortSignal,\n} from \"../applications/context.js\";\nimport { deserializeJSON } from \"../applications/serialization.js\";\nimport { deferred, type Deferred } from \"./async-queue.js\";\nimport {\n deserializeValueFromProtocol,\n downloadBlob as downloadBlobData,\n downloadSerializedObject as downloadSerializedObjectData,\n joinPrepared,\n prepareSerializedObject,\n prepareTextObject,\n uploadBlob as uploadBlobData,\n type BlobValue,\n type PreparedSerializedObject,\n type SerializedObjectInsideBlobValue,\n} from \"./blob.js\";\nimport { writeStructuredOutput } from \"./safe-output.js\";\nimport { printCloudEvent } from \"./user-events.js\";\n\n// The executor imports this module before deployed application modules and\n// their dependencies, so module-level captures retain the instrumented\n// Promise implementations used during allocation execution.\ninstallPromiseInstrumentation();\n\ntype Message = Record<string, any>;\ntype StreamCall = { write(value: Message): boolean; end(): void; on(event: string, listener: () => void): void };\ntype LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nconst OK = 0;\nconst NOT_FOUND = 5;\nconst REPLAY_STRICT = new Set([\"REPLAY_MODE_STRICT\", 1]);\nconst OUTCOME_SUCCESS = new Set([\"ALLOCATION_OUTCOME_CODE_SUCCESS\", 1]);\nconst OUTCOME_FAILURE = new Set([\"ALLOCATION_OUTCOME_CODE_FAILURE\", 2]);\nconst WATCHER_TIMED_OUT = new Set([\"FUNCTION_CALL_WATCHER_STATUS_TIMEDOUT\", 2]);\nconst MAX_REDUCE_CALLS_PER_PLAN = 512;\nconst nativeStructuredClone = globalThis.structuredClone;\n\nfunction statusError(status: Message | undefined, fallback: string): Error | undefined {\n if (status == null || (status.code ?? OK) === OK) return undefined;\n return new FunctionError(status.message || fallback);\n}\n\nfunction validatedEventLogClock<E extends Error>(\n response: Message,\n requestedAfterClock: number,\n createError: (message: string) => E,\n): number {\n if (response.entries != null && !Array.isArray(response.entries)) {\n throw createError(\"Allocation event log returned a non-array entries field\");\n }\n const responseClock = Number(response.lastClock ?? requestedAfterClock);\n if (\n !Number.isFinite(responseClock)\n || !Number.isSafeInteger(responseClock)\n || responseClock < 0\n ) {\n throw createError(\n `Allocation event log returned invalid clock '${String(response.lastClock)}'`,\n );\n }\n if (responseClock < requestedAfterClock) {\n throw createError(\n `Allocation event log moved backwards from clock ${requestedAfterClock} to ${responseClock}`,\n );\n }\n if (response.hasMore && responseClock === requestedAfterClock) {\n throw createError(\n `Allocation event log reported more entries without advancing clock ${requestedAfterClock}`,\n );\n }\n if ((response.entries?.length ?? 0) > 0 && responseClock === requestedAfterClock) {\n throw createError(\n `Allocation event log returned entries without advancing clock ${requestedAfterClock}`,\n );\n }\n const eventFields = [\n \"functionCallCreated\",\n \"functionCallWatcherCreated\",\n \"functionCallWatcherResult\",\n ];\n let previousEntryClock = requestedAfterClock;\n for (const [index, entry] of (response.entries ?? []).entries()) {\n if (entry == null || typeof entry !== \"object\") {\n throw createError(`Allocation event log entry ${index} is not an object`);\n }\n const presentFields = eventFields.filter((field) => entry[field] != null);\n if (presentFields.length !== 1) {\n throw createError(\n `Allocation event log entry ${index} has ${presentFields.length} recognized payloads; expected exactly one`,\n );\n }\n const entryClock = Number(entry.clock);\n if (\n !Number.isSafeInteger(entryClock)\n || entryClock <= previousEntryClock\n || entryClock > responseClock\n ) {\n throw createError(\n `Allocation event log entry ${index} has invalid clock '${String(entry.clock)}'`\n + ` after ${previousEntryClock} with page clock ${responseClock}`,\n );\n }\n previousEntryClock = entryClock;\n }\n return responseClock;\n}\n\nfunction durableHash(values: string[]): string {\n const hash = createHash(\"sha256\");\n for (const value of values) {\n const bytes = Buffer.from(value, \"utf8\");\n const length = Buffer.alloc(8);\n length.writeBigUInt64BE(BigInt(bytes.byteLength));\n hash.update(length);\n hash.update(bytes);\n hash.update(\"|\");\n }\n return hash.digest(\"hex\");\n}\n\nfunction protocolTimestamp(date: Date): { seconds: number; nanos: number } {\n const milliseconds = date.getTime();\n return { seconds: Math.floor(milliseconds / 1000), nanos: (milliseconds % 1000) * 1_000_000 };\n}\n\nfunction parseHTTPMessage(data: Uint8Array): { headers: Record<string, string>; body: Uint8Array } {\n const marker = Buffer.from(\"\\r\\n\\r\\n\");\n const bytes = Buffer.from(data);\n const split = bytes.indexOf(marker);\n if (split < 0) throw new DeserializationError(\"Invalid message/http application input\");\n const lines = bytes.subarray(0, split).toString(\"utf8\").split(\"\\r\\n\");\n lines.shift();\n const headers: Record<string, string> = {};\n for (const line of lines) {\n const colon = line.indexOf(\":\");\n if (colon > 0) headers[line.slice(0, colon).trim().toLowerCase()] = line.slice(colon + 1).trim();\n }\n return { headers, body: new Uint8Array(bytes.subarray(split + marker.byteLength)) };\n}\n\nexport async function deserializeApplicationArguments(\n definition: RegisteredDefinition,\n payload: { data: Uint8Array; contentType?: string; encoding?: string | number },\n): Promise<{ args: unknown[] }> {\n let data = payload.data;\n let suppliedContentType = payload.contentType;\n let hasExplicitContentType = payload.contentType != null;\n if (suppliedContentType?.toLowerCase().startsWith(\"message/http\")) {\n const parsed = parseHTTPMessage(data);\n data = parsed.body;\n const bodyContentType = parsed.headers[\"content-type\"];\n hasExplicitContentType = bodyContentType != null;\n suppliedContentType = bodyContentType;\n }\n if (definition.parameters.length === 0) return { args: [] };\n const firstParameter = definition.parameters[0];\n if (\n definition.parameters.length === 1\n && firstParameter?.schema._httpBody\n ) {\n return { args: [new HttpBody(data, suppliedContentType)] };\n }\n const contentType = suppliedContentType ?? \"application/json\";\n if (contentType.toLowerCase().startsWith(\"multipart/form-data\")) {\n let form: FormData;\n try {\n form = await new Response(Uint8Array.from(data).buffer, {\n headers: { \"content-type\": contentType },\n }).formData();\n } catch (error) {\n throw new DeserializationError(\"Failed to deserialize multipart application input\", { cause: error });\n }\n const args: unknown[] = [];\n for (const [index, parameter] of definition.parameters.entries()) {\n const part = form.get(parameter.name) ?? form.get(String(index));\n if (part == null) {\n args.push(undefined);\n } else if (parameter.schema._file || parameter.schema._httpBody) {\n const bytes = typeof part === \"string\"\n ? new TextEncoder().encode(part)\n : new Uint8Array(await part.arrayBuffer());\n const partContentType = typeof part === \"string\"\n ? \"application/octet-stream\"\n : part.type || \"application/octet-stream\";\n args.push(parameter.schema._httpBody\n ? new HttpBody(bytes, partContentType)\n : new File(bytes, partContentType));\n } else {\n try {\n const bytes = typeof part === \"string\"\n ? new TextEncoder().encode(part)\n : new Uint8Array(await part.arrayBuffer());\n args.push(deserializeJSON(bytes));\n } catch (error) {\n if (error instanceof DeserializationError) throw error;\n throw new DeserializationError(\n `Failed to deserialize multipart argument '${parameter.name}' as JSON`,\n { cause: error },\n );\n }\n }\n }\n return { args };\n }\n // An invocation without a request body supplies no arguments. This lets the\n // normal argument validator apply JavaScript defaults (or report a required\n // argument) instead of attempting to parse an empty JSON document. An\n // explicitly typed empty file remains a real File input.\n if (data.byteLength === 0 && (!firstParameter?.schema._file || !hasExplicitContentType)) {\n return { args: [] };\n }\n if (firstParameter?.schema._file) return { args: [new File(data, contentType)] };\n if (!contentType.toLowerCase().includes(\"json\")) {\n throw new DeserializationError(\n `Expected application/json input for '${firstParameter?.name ?? \"argument\"}', got ${contentType}`,\n );\n }\n return { args: [deserializeJSON(data)] };\n}\n\ntype ReplayEntryKind = \"call\" | \"watcher\" | \"result\" | \"unknown\";\n\ninterface ReplayEntry {\n readonly kind: ReplayEntryKind;\n readonly event: Message;\n consumed: boolean;\n}\n\n// Handles that can remain alive without representing a pending callback which\n// could resume application code. Request resources, timers, immediates, and\n// promises are deliberately not in this set.\nconst PASSIVE_ASYNC_RESOURCE_TYPES = new Set([\n \"PIPEWRAP\",\n \"PIPESERVERWRAP\",\n \"SIGNALWRAP\",\n \"TCPSERVERWRAP\",\n \"TCPWRAP\",\n \"TLSWRAP\",\n \"TTYWRAP\",\n \"UDPWRAP\",\n]);\n\ninterface TrackedAsyncResource {\n readonly type: string;\n readonly triggerAsyncId: number;\n // Promise destroy hooks are GC-driven. A strong reference here would keep\n // every Promise alive until the allocation ends and prevent that cleanup\n // hook from ever running.\n readonly promise?: WeakRef<object>;\n pending: boolean;\n}\n\n/**\n * Tracks asynchronous work which is causally capable of producing the next\n * durable event during strict replay.\n *\n * Promise frames created by async functions are not producers by themselves:\n * they can be waiting on another durable result and form a replay cycle.\n * Timers and I/O request resources are producers. Promise ownership is still\n * propagated when one promise is resolved by a causal continuation, which\n * carries causality through Promise.all/race and pre-created await reactions.\n */\nexport class ReplayCausality {\n private readonly hook: ReturnType<typeof createHook>;\n private readonly children = new Map<number, Set<number>>();\n private readonly resources = new Map<number, TrackedAsyncResource>();\n private readonly owners = new Map<number, Set<number>>();\n private readonly provenance = new Map<number, Set<number>>();\n private readonly tokenResources = new Map<number, Set<number>>();\n private readonly tokenProducers = new Map<number, Set<number>>();\n private readonly promiseIds = new WeakMap<object, number>();\n private readonly excludedRoots = new Set<number>();\n private readonly durableAssimilations = new Map<number, number>();\n private readonly nativeDurableAssimilations = new Set<number>();\n private readonly explicitDurableAssimilations = new Set<number>();\n private readonly promiseAggregateAssimilationScopes: Set<number>[] = [];\n private readonly promiseSettlementObservers = new Map<number, Set<() => void>>();\n private readonly mixedPromiseProducerGroups = new Set<Set<number>>();\n private nextToken = 1;\n private checkScheduled = false;\n private checkHandle?: NodeJS.Immediate;\n private suppressOwnership = false;\n private stopped = false;\n\n constructor(private readonly onQuiescent: () => void) {\n this.hook = createHook({\n init: (asyncId, type, triggerAsyncId, resource) => {\n if (this.stopped) return;\n const triggerPromise = this.resources.get(triggerAsyncId)?.promise?.deref();\n const resumesDetachedDurable =\n type === \"PROMISE\"\n && triggerPromise != null\n && isDetachedDurableThenable(triggerPromise);\n const children = this.children.get(triggerAsyncId) ?? new Set<number>();\n children.add(asyncId);\n this.children.set(triggerAsyncId, children);\n if (type === \"PROMISE\" && typeof resource === \"object\" && resource != null) {\n this.promiseIds.set(resource, asyncId);\n }\n const triggerOwners = new Set(this.owners.get(triggerAsyncId) ?? []);\n this.resources.set(asyncId, {\n type,\n triggerAsyncId,\n promise: type === \"PROMISE\" && typeof resource === \"object\" && resource != null\n ? new WeakRef(resource)\n : undefined,\n pending: true,\n });\n if (resumesDetachedDurable) {\n this.nativeDurableAssimilations.add(asyncId);\n this.promiseAggregateAssimilationScopes.at(-1)?.add(asyncId);\n this.suspendDurableAssimilation(asyncId);\n }\n if (this.suppressOwnership) return;\n const inherited = new Set([\n ...(this.owners.get(executionAsyncId()) ?? []),\n ...triggerOwners,\n ]);\n for (const token of inherited) this.addTokenToSubtree(asyncId, token);\n },\n promiseResolve: (asyncId) => {\n if (this.stopped) return;\n this.notifyPromiseSettlement(asyncId);\n if (this.nativeDurableAssimilations.delete(asyncId)) {\n this.resumeDurableAssimilation(asyncId);\n }\n if (this.explicitDurableAssimilations.delete(asyncId)) {\n this.resumeDurableAssimilation(asyncId);\n }\n this.settleMixedPromiseProducerGroups(asyncId);\n const currentOwners = this.owners.get(executionAsyncId());\n if (currentOwners != null) {\n for (const token of currentOwners) this.addTokenToSubtree(asyncId, token);\n }\n this.setResourcePending(asyncId, false);\n this.scheduleCheck();\n },\n destroy: (asyncId) => {\n if (this.stopped) return;\n this.notifyPromiseSettlement(asyncId);\n if (this.nativeDurableAssimilations.delete(asyncId)) {\n this.detachDurableAssimilation(asyncId);\n }\n if (this.explicitDurableAssimilations.delete(asyncId)) {\n this.detachDurableAssimilation(asyncId);\n }\n this.settleMixedPromiseProducerGroups(asyncId);\n this.setResourcePending(asyncId, false);\n this.releaseDestroyedResource(asyncId);\n this.scheduleCheck();\n },\n });\n this.hook.enable();\n }\n\n runRoot<T>(callback: () => Promise<T>): Promise<T> {\n const resource = new AsyncResource(\"TensorlakeReplayCausality\");\n let result!: Promise<T>;\n resource.runInAsyncScope(() => {\n this.beginCurrentContinuation();\n result = callback();\n // The async handler's own result promise is pending for the handler's\n // entire lifetime, so it cannot prove that application code can advance\n // replay. Concrete promises created by the handler remain tracked.\n this.excludePromise(result);\n });\n resource.emitDestroy();\n return result;\n }\n\n beginCurrentContinuation(): void {\n if (this.stopped) return;\n const asyncId = executionAsyncId();\n this.excludedRoots.delete(asyncId);\n this.addTokenToSubtree(asyncId, this.nextToken);\n this.nextToken += 1;\n this.scheduleCheck();\n }\n\n excludePromise(promise: Promise<unknown>): void {\n const asyncId = this.promiseIds.get(promise);\n if (asyncId == null) return;\n this.excludedRoots.add(asyncId);\n this.removeOwnersFromSubtree(asyncId);\n this.scheduleCheck();\n }\n\n suspendDurableAssimilation(asyncId: number): boolean {\n if (this.stopped) return false;\n const count = this.durableAssimilations.get(asyncId) ?? 0;\n this.durableAssimilations.set(asyncId, count + 1);\n if (count === 0) {\n this.excludedRoots.add(asyncId);\n this.removeOwnersFromSubtree(asyncId);\n }\n this.scheduleCheck();\n return true;\n }\n\n resumeDurableAssimilation(asyncId: number): void {\n if (this.stopped) return;\n const count = this.durableAssimilations.get(asyncId);\n if (count == null) return;\n if (count > 1) {\n this.durableAssimilations.set(asyncId, count - 1);\n return;\n }\n this.durableAssimilations.delete(asyncId);\n this.excludedRoots.delete(asyncId);\n const currentOwners = this.owners.get(executionAsyncId());\n if (currentOwners != null) {\n for (const token of currentOwners) this.addTokenToSubtree(asyncId, token);\n }\n }\n\n detachDurableAssimilation(asyncId: number): void {\n if (this.stopped) return;\n const count = this.durableAssimilations.get(asyncId);\n if (count == null) return;\n if (count > 1) {\n this.durableAssimilations.set(asyncId, count - 1);\n return;\n }\n this.durableAssimilations.delete(asyncId);\n this.excludedRoots.delete(asyncId);\n // This reaction belongs to aggregate construction rather than an\n // application-level await. Do not restore its old ownership: a pending\n // durable input would otherwise mask a genuinely blocked durable await\n // created when user code later consumes the aggregate.\n this.scheduleCheck();\n }\n\n hasPendingDurableAssimilation(): boolean {\n return this.durableAssimilations.size > 0;\n }\n\n hasPendingProducer(): boolean {\n if (this.mixedPromiseProducerGroups.size > 0) return true;\n for (const producers of this.tokenProducers.values()) {\n if (producers.size > 0) return true;\n }\n return false;\n }\n\n requestCheck(): void {\n this.scheduleCheck();\n }\n\n trackMixedPromiseRace(\n promise: Promise<unknown>,\n producers: readonly Promise<unknown>[] = [promise],\n ): void {\n if (this.stopped) return;\n const producerIds = new Set<number>();\n for (const producer of producers) {\n const asyncId = this.promiseIds.get(producer);\n if (asyncId == null) continue;\n // A producer in this race has already settled, so the \"first producer\n // settles\" lifetime has already ended and the other producers must not\n // keep replay alive.\n if (this.resources.get(asyncId)?.pending !== true) {\n this.scheduleCheck();\n return;\n }\n producerIds.add(asyncId);\n }\n if (producerIds.size > 0) this.mixedPromiseProducerGroups.add(producerIds);\n this.scheduleCheck();\n }\n\n trackPromiseSettlement(\n promise: Promise<unknown>,\n onSettled: () => void,\n ): boolean {\n if (this.stopped) return false;\n const asyncId = this.promiseIds.get(promise);\n if (asyncId == null) return false;\n if (this.resources.get(asyncId)?.pending !== true) {\n onSettled();\n return true;\n }\n const observers = this.promiseSettlementObservers.get(asyncId) ?? new Set<() => void>();\n observers.add(onSettled);\n this.promiseSettlementObservers.set(asyncId, observers);\n return true;\n }\n\n trackDurablePromiseConsumption(promise: Promise<unknown>): void {\n if (this.stopped) return;\n const asyncId = this.promiseIds.get(promise);\n if (\n asyncId == null\n || this.resources.get(asyncId)?.pending !== true\n || this.nativeDurableAssimilations.has(asyncId)\n || this.explicitDurableAssimilations.has(asyncId)\n ) {\n return;\n }\n this.explicitDurableAssimilations.add(asyncId);\n this.promiseAggregateAssimilationScopes.at(-1)?.add(asyncId);\n this.suspendDurableAssimilation(asyncId);\n }\n\n runPromiseAggregateConstruction<T>(callback: () => T): T {\n const aggregateAssimilations = new Set<number>();\n this.promiseAggregateAssimilationScopes.push(aggregateAssimilations);\n try {\n return callback();\n } finally {\n this.promiseAggregateAssimilationScopes.pop();\n // Promise combinators install internal reactions while constructing the\n // aggregate. Those reactions do not prove that application code awaits\n // the aggregate; a later user reaction on the returned promise does.\n this.detachPromiseAggregateAssimilations(aggregateAssimilations);\n }\n }\n\n runWithoutOwnership<T>(callback: () => T): T {\n if (this.stopped) return callback();\n const previous = this.suppressOwnership;\n this.suppressOwnership = true;\n try {\n return callback();\n } finally {\n this.suppressOwnership = previous;\n }\n }\n\n stop(): void {\n if (this.stopped) return;\n this.stopped = true;\n this.hook.disable();\n if (this.checkHandle != null) clearImmediate(this.checkHandle);\n this.checkHandle = undefined;\n this.children.clear();\n this.resources.clear();\n this.owners.clear();\n this.provenance.clear();\n this.tokenResources.clear();\n this.tokenProducers.clear();\n this.durableAssimilations.clear();\n this.nativeDurableAssimilations.clear();\n this.explicitDurableAssimilations.clear();\n this.promiseAggregateAssimilationScopes.length = 0;\n this.promiseSettlementObservers.clear();\n this.mixedPromiseProducerGroups.clear();\n }\n\n private notifyPromiseSettlement(asyncId: number): void {\n const observers = this.promiseSettlementObservers.get(asyncId);\n if (observers == null) return;\n this.promiseSettlementObservers.delete(asyncId);\n for (const observer of observers) observer();\n }\n\n private settleMixedPromiseProducerGroups(asyncId: number): void {\n for (const group of [...this.mixedPromiseProducerGroups]) {\n if (group.has(asyncId)) this.mixedPromiseProducerGroups.delete(group);\n }\n }\n\n private detachPromiseAggregateAssimilations(assimilations: Set<number>): void {\n for (const asyncId of assimilations) {\n if (this.nativeDurableAssimilations.delete(asyncId)) {\n this.detachDurableAssimilation(asyncId);\n }\n if (this.explicitDurableAssimilations.delete(asyncId)) {\n this.detachDurableAssimilation(asyncId);\n }\n }\n assimilations.clear();\n }\n\n private addTokenToSubtree(asyncId: number, token: number): void {\n if (this.excludedRoots.has(asyncId)) return;\n const owners = this.owners.get(asyncId) ?? new Set<number>();\n if (!owners.has(token)) {\n owners.add(token);\n this.owners.set(asyncId, owners);\n const provenance = this.provenance.get(asyncId) ?? new Set<number>();\n provenance.add(token);\n this.provenance.set(asyncId, provenance);\n const tokenResources = this.tokenResources.get(token) ?? new Set<number>();\n tokenResources.add(asyncId);\n this.tokenResources.set(token, tokenResources);\n const resource = this.resources.get(asyncId);\n if (resource?.pending && this.isProducer(resource, token)) {\n const producers = this.tokenProducers.get(token) ?? new Set<number>();\n producers.add(asyncId);\n this.tokenProducers.set(token, producers);\n }\n }\n for (const child of this.children.get(asyncId) ?? []) {\n this.addTokenToSubtree(child, token);\n }\n }\n\n private isProducer(resource: TrackedAsyncResource, token: number): boolean {\n if (resource.type === \"PROMISE\") {\n return !(this.provenance.get(resource.triggerAsyncId)?.has(token) ?? false);\n }\n return !PASSIVE_ASYNC_RESOURCE_TYPES.has(resource.type);\n }\n\n private setResourcePending(asyncId: number, pending: boolean): void {\n const resource = this.resources.get(asyncId);\n if (resource == null || resource.pending === pending) return;\n resource.pending = pending;\n for (const token of this.owners.get(asyncId) ?? []) {\n const producers = this.tokenProducers.get(token);\n if (pending && this.isProducer(resource, token)) {\n const next = producers ?? new Set<number>();\n next.add(asyncId);\n this.tokenProducers.set(token, next);\n } else {\n producers?.delete(asyncId);\n }\n }\n }\n\n private removeOwnersFromSubtree(asyncId: number): void {\n this.removeResourceOwnership(asyncId);\n for (const child of this.children.get(asyncId) ?? []) {\n this.removeOwnersFromSubtree(child);\n }\n }\n\n private removeResourceOwnership(asyncId: number): void {\n const owners = this.owners.get(asyncId);\n if (owners == null) return;\n for (const token of owners) {\n const resources = this.tokenResources.get(token);\n resources?.delete(asyncId);\n if (resources?.size === 0) this.tokenResources.delete(token);\n const producers = this.tokenProducers.get(token);\n producers?.delete(asyncId);\n if (producers?.size === 0) this.tokenProducers.delete(token);\n }\n this.owners.delete(asyncId);\n }\n\n private releaseDestroyedResource(asyncId: number): void {\n const resource = this.resources.get(asyncId);\n if (resource == null) return;\n this.resources.delete(asyncId);\n this.excludedRoots.delete(asyncId);\n this.removeResourceOwnership(asyncId);\n this.provenance.delete(asyncId);\n const siblings = this.children.get(resource.triggerAsyncId);\n siblings?.delete(asyncId);\n if (siblings?.size === 0) this.children.delete(resource.triggerAsyncId);\n // A destroy hook is Node's guarantee that this resource cannot create\n // further descendants. Existing children already own independent copies\n // of their provenance and ownership sets.\n this.children.delete(asyncId);\n }\n\n private scheduleCheck(): void {\n if (this.stopped || this.checkScheduled) return;\n this.checkScheduled = true;\n const previous = this.suppressOwnership;\n this.suppressOwnership = true;\n try {\n this.checkHandle = setImmediate(() => {\n this.checkScheduled = false;\n this.checkHandle = undefined;\n this.onQuiescent();\n });\n } finally {\n this.suppressOwnership = previous;\n }\n }\n}\n\nclass ReplayAwarePromise<T> extends Promise<T> {\n private readonly causality: ReplayCausality;\n\n constructor(source: Promise<T>, causality: ReplayCausality) {\n let bridge: Promise<void> | undefined;\n super((resolve, reject) => {\n bridge = source.then(resolve, reject);\n });\n this.causality = causality;\n registerDurableThenable(this);\n causality.excludePromise(source);\n causality.excludePromise(this);\n if (bridge != null) causality.excludePromise(bridge);\n }\n\n static get [Symbol.species](): PromiseConstructor {\n return Promise;\n }\n\n override then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n ): Promise<TResult1 | TResult2> {\n const assimilationId = executionAsyncId();\n const assimilationSuspended =\n this.causality.suspendDurableAssimilation(assimilationId);\n let assimilationDetached = false;\n const aggregateAssimilation = registerDurableAssimilation(this, () => {\n if (!assimilationSuspended || assimilationDetached) return;\n assimilationDetached = true;\n this.causality.detachDurableAssimilation(assimilationId);\n });\n const continuation = super.then(\n (value) => {\n this.causality.beginCurrentContinuation();\n aggregateAssimilation.finish();\n if (assimilationSuspended && !assimilationDetached) {\n this.causality.resumeDurableAssimilation(assimilationId);\n }\n if (onfulfilled == null) return value as unknown as TResult1;\n return onfulfilled(value);\n },\n (reason) => {\n this.causality.beginCurrentContinuation();\n aggregateAssimilation.finish();\n if (assimilationSuspended && !assimilationDetached) {\n this.causality.resumeDurableAssimilation(assimilationId);\n }\n if (onrejected == null) throw reason;\n return onrejected(reason);\n },\n );\n aggregateAssimilation.link(continuation);\n this.causality.excludePromise(continuation);\n return continuation;\n }\n\n [DURABLE_PROMISE_INTERNAL_THEN]<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n ): Promise<TResult1 | TResult2> {\n const continuation = super.then(onfulfilled, onrejected);\n registerDurableThenable(continuation, this);\n this.causality.excludePromise(continuation);\n return continuation;\n }\n\n [DURABLE_PROMISE_OBSERVER](\n onfulfilled: (value: T) => void,\n onrejected: (reason: unknown) => void,\n ): void {\n const observation = super.then(onfulfilled, onrejected);\n this.causality.excludePromise(observation);\n void observation.catch(() => undefined);\n }\n}\n\nclass ReplayHistory {\n private readonly entries: ReplayEntry[];\n private readonly calls: ReplayEntry[] = [];\n private readonly watchers: ReplayEntry[] = [];\n private readonly availableResults = new Map<string, Message[]>();\n private readonly resultWaiters = new Map<string, Deferred<Message | undefined>[]>();\n private readonly endWaiters: Deferred<void>[] = [];\n private readonly createdWatcherIds = new Set<string>();\n private readonly releasedResultIds = new Set<string>();\n private readonly expectedCallIds = new Set<string>();\n private readonly expectedWatcherIds = new Set<string>();\n private readonly causality: ReplayCausality;\n // A replayed result may still be downloading before it can resume user code.\n private activeResultResolutions = 0;\n private callCursor = 0;\n private watcherCursor = 0;\n private prefixCursor = 0;\n private mismatch?: ReplayMismatchError;\n\n constructor(entries: Message[]) {\n this.causality = new ReplayCausality(() => this.failBlockedResultWithoutProducer());\n this.entries = entries.map((entry) => {\n if (entry.functionCallWatcherResult != null) {\n return { kind: \"result\", event: entry.functionCallWatcherResult, consumed: false };\n }\n if (entry.functionCallCreated != null) {\n const replayEntry: ReplayEntry = {\n kind: \"call\",\n event: entry.functionCallCreated,\n consumed: false,\n };\n this.calls.push(replayEntry);\n return replayEntry;\n }\n if (entry.functionCallWatcherCreated != null) {\n const replayEntry: ReplayEntry = {\n kind: \"watcher\",\n event: entry.functionCallWatcherCreated,\n consumed: false,\n };\n this.watchers.push(replayEntry);\n return replayEntry;\n }\n return { kind: \"unknown\", event: entry, consumed: false };\n });\n }\n\n async takeOrdered(kind: \"call\" | \"watcher\", id: string): Promise<Message | undefined> {\n this.advancePrefix();\n const entries = kind === \"call\" ? this.calls : this.watchers;\n const cursor = kind === \"call\" ? this.callCursor : this.watcherCursor;\n const expectedIds = kind === \"call\" ? this.expectedCallIds : this.expectedWatcherIds;\n if (cursor >= entries.length) {\n expectedIds.delete(id);\n if (this.prefixCursor === this.entries.length) return undefined;\n const blocked = this.entries[this.prefixCursor];\n // A new call may reach the live boundary before the watcher belonging to\n // an already-replayed call has finished being created. That watcher is a\n // known producer of replay progress, so wait for it without imposing a\n // wall-clock deadline. Every other cross-kind boundary is impossible for\n // the current execution order and must fail instead of hanging forever.\n if (\n kind !== \"call\"\n || blocked.kind !== \"watcher\"\n || !this.expectedWatcherIds.has(String(blocked.event.functionCallId ?? \"\"))\n ) {\n this.fail(\n `Unexpected ${kind} event for ${id} before replay ${blocked.kind}`\n + ` event ${String(blocked.event.functionCallId ?? \"\")}`,\n );\n }\n const waiter = deferred<void>();\n this.endWaiters.push(waiter);\n await waiter.promise;\n this.assertNoMismatch();\n return undefined;\n }\n const entry = entries[cursor];\n if (kind === \"call\") this.callCursor += 1;\n else this.watcherCursor += 1;\n if (entry.event.functionCallId !== id) {\n this.fail(`Expected replay ${kind} event for ${id}`);\n }\n expectedIds.delete(id);\n entry.consumed = true;\n if (kind === \"watcher\") {\n this.createdWatcherIds.add(id);\n }\n this.advancePrefix();\n return entry.event;\n }\n\n async takeResult(id: string): Promise<Message | undefined> {\n this.advancePrefix();\n const available = this.availableResults.get(id);\n if (available != null && available.length > 0) {\n const result = available.shift();\n if (result != null) this.activeResultResolutions += 1;\n return result;\n }\n if (this.prefixCursor === this.entries.length) return undefined;\n const blocked = this.entries[this.prefixCursor];\n const blockedId = String(blocked.event.functionCallId ?? \"\");\n const hasProducer = blocked.kind === \"call\"\n ? this.expectedCallIds.has(blockedId)\n : blocked.kind === \"watcher\"\n ? this.expectedWatcherIds.has(blockedId)\n : false;\n const waiter = deferred<Message | undefined>();\n const waiters = this.resultWaiters.get(id) ?? [];\n waiters.push(waiter);\n this.resultWaiters.set(id, waiters);\n if (!hasProducer) this.causality.requestCheck();\n const result = await waiter.promise;\n if (result != null) this.activeResultResolutions += 1;\n return result;\n }\n\n completeResultResolution(): void {\n if (this.activeResultResolutions === 0) return;\n this.activeResultResolutions -= 1;\n this.causality.requestCheck();\n }\n\n runCausalHandler<T>(callback: () => Promise<T>): Promise<T> {\n return this.causality.runRoot(callback);\n }\n\n wrapDurableResult<T>(source: Promise<T>): Promise<T> {\n return new ReplayAwarePromise(source, this.causality);\n }\n\n trackMixedPromiseRace(\n promise: Promise<unknown>,\n producers?: readonly Promise<unknown>[],\n ): void {\n this.causality.trackMixedPromiseRace(promise, producers);\n }\n\n trackPromiseSettlement(\n promise: Promise<unknown>,\n onSettled: () => void,\n ): boolean {\n return this.causality.trackPromiseSettlement(promise, onSettled);\n }\n\n trackDurablePromiseConsumption(promise: Promise<unknown>): void {\n this.causality.trackDurablePromiseConsumption(promise);\n }\n\n runPromiseAggregateConstruction<T>(callback: () => T): T {\n return this.causality.runPromiseAggregateConstruction(callback);\n }\n\n runWithoutCausalOwnership<T>(callback: () => T): T {\n return this.causality.runWithoutOwnership(callback);\n }\n\n dispose(): void {\n this.causality.stop();\n }\n\n expectCall(id: string): void {\n this.expectedCallIds.add(id);\n }\n\n expectWatcher(id: string): void {\n this.expectedWatcherIds.add(id);\n }\n\n abandonCall(id: string): void {\n this.abandonOrdered(\"call\", id);\n }\n\n abandonWatcher(id: string): void {\n this.abandonOrdered(\"watcher\", id);\n }\n\n private abandonOrdered(kind: \"call\" | \"watcher\", id: string): void {\n const expectedIds = kind === \"call\" ? this.expectedCallIds : this.expectedWatcherIds;\n expectedIds.delete(id);\n const hasWaiters = this.endWaiters.length > 0\n || [...this.resultWaiters.values()].some((waiters) => waiters.length > 0);\n if (this.prefixCursor >= this.entries.length || !hasWaiters) return;\n const blocked = this.entries[this.prefixCursor];\n if (blocked.kind === kind && blocked.event.functionCallId === id) {\n this.fail(`Replay ${kind} event for ${id} can no longer be created`);\n }\n }\n\n private failBlockedResultWithoutProducer(): void {\n if (this.activeResultResolutions > 0) return;\n // Quiescence is only evidence of a replay cycle while application code is\n // actually assimilating a durable result. Outside that state the handler\n // may legitimately be waiting for a callback owned by a module-initialized\n // timer, socket, or client which predates this allocation and is therefore\n // absent from the causal async-resource tree.\n if (!this.causality.hasPendingDurableAssimilation()) return;\n if (this.causality.hasPendingProducer()) return;\n if (this.prefixCursor >= this.entries.length) return;\n if (![...this.resultWaiters.values()].some((waiters) => waiters.length > 0)) return;\n const blocked = this.entries[this.prefixCursor];\n const blockedId = String(blocked.event.functionCallId ?? \"\");\n const hasProducer = blocked.kind === \"call\"\n ? this.expectedCallIds.has(blockedId)\n : blocked.kind === \"watcher\"\n ? this.expectedWatcherIds.has(blockedId)\n : false;\n if (!hasProducer) {\n this.recordMismatch(\n `Replay result is blocked behind unreachable ${blocked.kind}`\n + ` event ${blockedId}`,\n );\n }\n }\n\n hasAvailableResult(id: string): boolean {\n return (this.availableResults.get(id)?.length ?? 0) > 0;\n }\n\n assertNoMismatch(): void {\n if (this.mismatch != null) throw this.mismatch;\n }\n\n assertConsumed(): void {\n this.assertNoMismatch();\n this.advancePrefix();\n if (this.prefixCursor !== this.entries.length) {\n throw new ReplayMismatchError(\"Function completed before its durable event history was consumed\");\n }\n }\n\n private advancePrefix(): void {\n this.assertNoMismatch();\n while (this.prefixCursor < this.entries.length) {\n const entry = this.entries[this.prefixCursor];\n if (entry.kind === \"unknown\") {\n this.fail(\"Replay history contains an unknown allocation event\");\n }\n if (entry.kind === \"call\" || entry.kind === \"watcher\") {\n if (!entry.consumed) return;\n this.prefixCursor += 1;\n continue;\n }\n entry.consumed = true;\n this.prefixCursor += 1;\n this.releaseResult(entry.event);\n }\n for (const waiter of this.endWaiters.splice(0)) waiter.resolve();\n for (const waiters of this.resultWaiters.values()) {\n for (const waiter of waiters) waiter.resolve(undefined);\n }\n this.resultWaiters.clear();\n }\n\n private releaseResult(event: Message): void {\n const id = String(event.functionCallId ?? \"\");\n if (!this.createdWatcherIds.has(id)) {\n this.fail(`Replay watcher result for ${id} appeared before its watcher was created`);\n }\n if (this.releasedResultIds.has(id)) {\n this.fail(`Replay history contains duplicate watcher results for ${id}`);\n }\n this.releasedResultIds.add(id);\n const waiter = this.resultWaiters.get(id)?.shift();\n if (waiter != null) {\n waiter.resolve(event);\n if (this.resultWaiters.get(id)?.length === 0) this.resultWaiters.delete(id);\n return;\n }\n const available = this.availableResults.get(id) ?? [];\n available.push(event);\n this.availableResults.set(id, available);\n }\n\n private fail(message: string): never {\n throw this.recordMismatch(message);\n }\n\n private recordMismatch(message: string): ReplayMismatchError {\n this.mismatch ??= new ReplayMismatchError(message);\n this.causality.stop();\n for (const waiter of this.endWaiters.splice(0)) waiter.reject(this.mismatch);\n for (const waiters of this.resultWaiters.values()) {\n for (const waiter of waiters) waiter.reject(this.mismatch);\n }\n this.resultWaiters.clear();\n return this.mismatch;\n }\n}\n\ninterface EventWaiter {\n predicate(event: Message): boolean;\n result: Deferred<Message>;\n}\n\ninterface EmissionTurn {\n wait: Promise<void>;\n release(): void;\n}\n\ninterface StateStreamFlow {\n backpressured: boolean;\n pending?: Message;\n}\n\nclass AllocationProtocolError extends Error {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"AllocationProtocolError\";\n }\n}\n\nexport class AllocationRunner implements FunctionRuntime {\n readonly allocation: Message;\n private readonly functionRef: Message;\n private readonly definition: RegisteredDefinition;\n private readonly applicationDefinition: RegisteredDefinition;\n private readonly stateStreams = new Set<StreamCall>();\n private readonly stateStreamFlows = new Map<StreamCall, StateStreamFlow>();\n private readonly eventReadStreams = new Set<StreamCall>();\n private readonly outputBlobRequests = new Map<string, Deferred<Message>>();\n private readonly stateOperationRequests = new Map<string, Deferred<Message>>();\n private readonly executionBatches: Message[][] = [];\n private readonly executionBatchWaiters: Array<(events: Message[]) => void> = [];\n private readonly liveBacklog: Message[] = [];\n private readonly liveWaiters: EventWaiter[] = [];\n private readonly controller = new AbortController();\n private currentRead?: { request: Message; response: Deferred<Message> };\n private replay?: ReplayHistory;\n private protocolError?: AllocationProtocolError;\n private durableCallEmissionTail: Promise<void> = Promise.resolve();\n private durableWatcherEmissionTail: Promise<void> = Promise.resolve();\n private lastEventClock = 0;\n private previousDurableId: string;\n private livePump?: Promise<void>;\n private completion?: Promise<void>;\n private started = false;\n private terminalBatchQueued = false;\n private terminalBatchObserved = false;\n private readonly terminalBatchObservedWaiters: Array<() => void> = [];\n private finished = false;\n private state: Message = { outputBlobRequests: [], requestStateOperations: [] };\n private readonly startedAt = Date.now();\n\n constructor(\n allocation: Message,\n functionRef: Message,\n definition: RegisteredDefinition,\n applicationDefinition: RegisteredDefinition = definition,\n ) {\n this.allocation = allocation;\n this.functionRef = functionRef;\n this.definition = definition;\n this.applicationDefinition = applicationDefinition;\n this.previousDurableId = String(allocation.functionCallId);\n this.updateStateHash();\n this.log(\"debug\", \"allocation runner created\", {\n replay_mode: allocation.replayMode,\n input_count: allocation.inputs?.args?.length ?? 0,\n input_blob_count: allocation.inputs?.argBlobs?.length ?? 0,\n });\n }\n\n start(): void {\n if (this.started) {\n this.log(\"warn\", \"duplicate allocation runner start ignored\");\n return;\n }\n this.started = true;\n this.log(\"info\", \"allocation runner scheduled\");\n this.completion = this.run().catch((error) => {\n this.log(\"error\", \"allocation runner promise rejected\", {}, error);\n this.queueTerminalBatch({\n outcomeCode: \"ALLOCATION_OUTCOME_CODE_FAILURE\",\n failureReason: \"ALLOCATION_FAILURE_REASON_INTERNAL_ERROR\",\n });\n this.finish();\n });\n }\n\n waitForCompletion(): Promise<void> {\n return this.completion ?? Promise.resolve();\n }\n\n async waitForTerminalBatchObserved(timeoutMs: number): Promise<boolean> {\n if (this.terminalBatchObserved) return true;\n return new Promise<boolean>((resolve) => {\n let settled = false;\n const observed = () => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n resolve(true);\n };\n const timer = setTimeout(() => {\n if (settled) return;\n settled = true;\n const index = this.terminalBatchObservedWaiters.indexOf(observed);\n if (index >= 0) this.terminalBatchObservedWaiters.splice(index, 1);\n resolve(false);\n }, Math.max(timeoutMs, 0));\n this.terminalBatchObservedWaiters.push(observed);\n // Close the race where observation happens between the first check and\n // registering this waiter.\n if (this.terminalBatchObserved) observed();\n });\n }\n\n cancel(reason: unknown = new FunctionError(\"Allocation was cancelled\")): void {\n if (this.controller.signal.aborted) return;\n this.log(\"info\", \"allocation cancellation requested\", {\n reason: reason instanceof Error ? reason.message : String(reason),\n });\n this.abortExecution(reason);\n }\n\n private abortExecution(reason: unknown): void {\n if (!this.controller.signal.aborted) this.controller.abort(reason);\n const rejection = this.controller.signal.reason ?? reason;\n const outputBlobRequestCount = this.outputBlobRequests.size;\n const stateOperationRequestCount = this.stateOperationRequests.size;\n const liveWaiterCount = this.liveWaiters.length;\n const liveBacklogCount = this.liveBacklog.length;\n const hadCurrentRead = this.currentRead != null;\n for (const request of this.outputBlobRequests.values()) request.reject(rejection);\n for (const request of this.stateOperationRequests.values()) request.reject(rejection);\n for (const waiter of this.liveWaiters.splice(0)) waiter.result.reject(rejection);\n this.currentRead?.response.reject(rejection);\n this.outputBlobRequests.clear();\n this.stateOperationRequests.clear();\n this.liveBacklog.splice(0);\n this.currentRead = undefined;\n this.state.outputBlobRequests = [];\n this.state.requestStateOperations = [];\n this.log(\"debug\", \"pending allocation protocol work settled\", {\n output_blob_requests: outputBlobRequestCount,\n state_operation_requests: stateOperationRequestCount,\n durable_event_waiters: liveWaiterCount,\n durable_event_backlog_entries: liveBacklogCount,\n event_log_read: hadCurrentRead,\n });\n }\n\n invoke<T>(definition: RegisteredDefinition, args: readonly unknown[]): Promise<T> {\n this.log(\"debug\", \"durable function invocation requested\", {\n target_function: definition.name,\n argument_count: args.length,\n });\n const result = this.runChild<T>(definition, args, 0);\n return this.replay?.wrapDurableResult(result) ?? result;\n }\n\n runFuture<T>(future: FunctionFuture<T>): Promise<T> {\n this.log(\"debug\", \"durable future execution requested\", {\n target_function: future.definition.name,\n argument_count: future.args.length,\n delay_seconds: future.delaySeconds,\n });\n const result = this.runChild<T>(future.definition, future.args, future.delaySeconds);\n return this.replay?.wrapDurableResult(result) ?? result;\n }\n\n wrapFutureWait<T>(promise: Promise<T>): Promise<T> {\n return this.replay?.wrapDurableResult(promise) ?? promise;\n }\n\n trackMixedPromiseRace(\n promise: Promise<unknown>,\n producers?: readonly Promise<unknown>[],\n ): void {\n this.replay?.trackMixedPromiseRace(promise, producers);\n }\n\n trackPromiseSettlement(\n promise: Promise<unknown>,\n onSettled: () => void,\n ): boolean {\n return this.replay?.trackPromiseSettlement(promise, onSettled) ?? false;\n }\n\n trackDurablePromiseConsumption(promise: Promise<unknown>): void {\n this.replay?.trackDurablePromiseConsumption(promise);\n }\n\n runPromiseAggregateConstruction<T>(callback: () => T): T {\n return this.replay?.runPromiseAggregateConstruction(callback) ?? callback();\n }\n\n reduce<T>(\n definition: RegisteredDefinition,\n items: readonly unknown[],\n initial: unknown,\n hasInitial: boolean,\n ): Promise<T> {\n const result = this.runReduce<T>(definition, items, initial, hasInitial);\n return this.replay?.wrapDurableResult(result) ?? result;\n }\n\n private async runReduce<T>(\n definition: RegisteredDefinition,\n items: readonly unknown[],\n initial: unknown,\n hasInitial: boolean,\n ): Promise<T> {\n let reduceItems = items;\n let reduceInitial = initial;\n if (!hasInitial) {\n if (items.length === 0) {\n throw new SDKUsageError(\"reduce of empty iterable with no initial value\");\n }\n [reduceInitial, ...reduceItems] = items;\n }\n if (reduceItems.length === 0) return reduceInitial as T;\n const callTurn = this.reserveEmissionTurn(\"call\");\n const watcherTurn = this.reserveEmissionTurn(\"watcher\");\n const ids = reduceItems.map(() => this.nextDurableId(definition, \"ReduceStep\"));\n const id = ids[ids.length - 1];\n const startedAt = Date.now();\n this.log(\"info\", \"durable reduce starting\", {\n durable_id: id,\n target_function: definition.name,\n collection_size: reduceItems.length,\n plan_count: Math.ceil(reduceItems.length / MAX_REDUCE_CALLS_PER_PLAN),\n });\n const replayCallIds = ids.filter((_id, index) =>\n (index + 1) % MAX_REDUCE_CALLS_PER_PLAN === 0 || index === ids.length - 1\n );\n for (const replayCallId of replayCallIds) this.replay?.expectCall(replayCallId);\n this.replay?.expectWatcher(id);\n try {\n try {\n await this.createReduceChain(ids, definition, reduceItems, reduceInitial, callTurn);\n } catch (error) {\n for (const replayCallId of replayCallIds) this.replay?.abandonCall(replayCallId);\n this.replay?.abandonWatcher(id);\n throw error;\n }\n await this.createWatcher(id, watcherTurn);\n } finally {\n callTurn.release();\n watcherTurn.release();\n }\n const replayedResult = this.replay == null ? undefined : await this.replay.takeResult(id);\n const result = replayedResult ?? await this.waitForLiveEvent(\n (entry) => entry.functionCallWatcherResult?.functionCallId === id,\n ).then((entry) => entry.functionCallWatcherResult);\n let resolved: T;\n try {\n resolved = await this.resolveWatcherResult<T>(result);\n } finally {\n if (replayedResult != null) this.replay?.completeResultResolution();\n }\n this.log(\"info\", \"durable reduce completed\", {\n durable_id: id,\n target_function: definition.name,\n collection_size: reduceItems.length,\n duration_ms: Date.now() - startedAt,\n });\n return resolved;\n }\n\n private nextDurableId(definition: RegisteredDefinition, operation = \"FunctionCall\"): string {\n const id = durableHash([\n String(this.allocation.functionCallId),\n this.previousDurableId,\n operation,\n definition.name,\n ]);\n this.previousDurableId = id;\n return id;\n }\n\n private async runChild<T>(\n definition: RegisteredDefinition,\n args: readonly unknown[],\n delaySeconds: number,\n ): Promise<T> {\n const callTurn = this.reserveEmissionTurn(\"call\");\n const watcherTurn = this.reserveEmissionTurn(\"watcher\");\n const id = this.nextDurableId(definition);\n const startedAt = Date.now();\n const maxRetries = definition.options.retries?.maxRetries\n ?? this.applicationDefinition.application?.retries.maxRetries\n ?? 0;\n this.log(\"info\", \"durable function call starting\", {\n durable_id: id,\n target_function: definition.name,\n argument_count: args.length,\n delay_seconds: delaySeconds,\n max_retries: maxRetries,\n });\n this.replay?.expectCall(id);\n this.replay?.expectWatcher(id);\n try {\n try {\n await this.createChildCall(id, definition, args, delaySeconds, callTurn);\n } catch (error) {\n this.replay?.abandonCall(id);\n this.replay?.abandonWatcher(id);\n throw error;\n }\n await this.createWatcher(id, watcherTurn);\n } finally {\n callTurn.release();\n watcherTurn.release();\n }\n this.log(\"debug\", \"waiting for terminal durable function result\", {\n durable_id: id,\n target_function: definition.name,\n max_retries: maxRetries,\n replay_result_available: this.replay?.hasAvailableResult(id) ?? false,\n });\n // The server owns allocation retry policy and retains the watcher route\n // across retryable attempt failures. It emits exactly one result here:\n // the eventual success or terminal failure.\n const replayedResult = this.replay == null ? undefined : await this.replay.takeResult(id);\n const result = replayedResult ?? await this.waitForLiveEvent(\n (entry) => entry.functionCallWatcherResult?.functionCallId === id,\n ).then((entry) => entry.functionCallWatcherResult);\n let resolved: T;\n try {\n resolved = await this.resolveWatcherResult<T>(result);\n } finally {\n if (replayedResult != null) this.replay?.completeResultResolution();\n }\n this.log(\"info\", \"durable function call completed\", {\n durable_id: id,\n target_function: definition.name,\n max_retries: maxRetries,\n duration_ms: Date.now() - startedAt,\n });\n return resolved;\n }\n\n private async createChildCall(\n id: string,\n definition: RegisteredDefinition,\n args: readonly unknown[],\n delaySeconds: number,\n turn: EmissionTurn,\n ): Promise<void> {\n try {\n let turnAcquired = false;\n if (this.replay != null) {\n await turn.wait;\n turnAcquired = true;\n }\n const replayed = await this.replay?.takeOrdered(\"call\", id);\n if (replayed != null) {\n this.log(\"debug\", \"replaying durable function creation\", { durable_id: id });\n const error = statusError(replayed.status, \"Failed to start function call\");\n if (error != null) throw error;\n return;\n }\n const prepared: PreparedSerializedObject[] = [];\n let offset = 0;\n for (const arg of args) {\n const item = prepareSerializedObject(arg, offset);\n prepared.push(item);\n offset += item.bytes.byteLength;\n }\n let argsBlob: BlobValue | undefined;\n if (prepared.length > 0) {\n this.log(\"debug\", \"requesting durable function arguments blob\", {\n durable_id: id,\n argument_count: args.length,\n serialized_bytes: offset,\n });\n try {\n argsBlob = await this.requestOutputBlob(offset);\n argsBlob = await this.uploadBlob(\n argsBlob,\n joinPrepared(prepared),\n \"durable function arguments\",\n { durable_id: id },\n );\n } catch (error) {\n if (this.controller.signal.aborted) throw this.controller.signal.reason;\n throw this.latchProtocolError(\n `Failed to materialize durable function arguments for '${id}'`,\n error,\n );\n }\n }\n const metadata = Buffer.from(JSON.stringify({\n format: \"tensorlake.typescript.function-call.v1\",\n id,\n functionName: definition.name,\n argumentCount: args.length,\n }), \"utf8\");\n const updates: Message = {\n updates: [{ functionCall: {\n id,\n target: {\n namespace: this.functionRef.namespace,\n applicationName: this.functionRef.applicationName,\n applicationVersion: this.functionRef.applicationVersion,\n functionName: definition.name,\n },\n args: prepared.map((item) => ({ value: item.object })),\n callMetadata: metadata,\n } }],\n rootFunctionCallId: id,\n };\n if (delaySeconds > 0) updates.startAt = protocolTimestamp(new Date(Date.now() + delaySeconds * 1000));\n if (!turnAcquired) await turn.wait;\n this.log(\"debug\", \"queueing durable function creation event\", {\n durable_id: id,\n target_function: definition.name,\n delay_seconds: delaySeconds,\n });\n this.addBatch([{ createFunctionCall: { updates, argsBlob } }]);\n this.log(\"debug\", \"waiting for durable function creation acknowledgement\", { durable_id: id });\n const createdPromise = this.waitForLiveEvent((entry) => entry.functionCallCreated?.functionCallId === id);\n turn.release();\n const created = await createdPromise;\n const error = statusError(created.functionCallCreated?.status, \"Failed to start function call\");\n if (error != null) throw error;\n } finally {\n turn.release();\n }\n }\n\n private async createReduceChain(\n ids: readonly string[],\n definition: RegisteredDefinition,\n items: readonly unknown[],\n initial: unknown,\n turn: EmissionTurn,\n ): Promise<void> {\n try {\n let turnAcquired = false;\n if (this.replay != null) {\n await turn.wait;\n turnAcquired = true;\n }\n const livePlans: Message[] = [];\n const liveRoots: string[] = [];\n for (let start = 0; start < items.length; start += MAX_REDUCE_CALLS_PER_PLAN) {\n const end = Math.min(items.length, start + MAX_REDUCE_CALLS_PER_PLAN);\n const rootId = ids[end - 1];\n const replayed = await this.replay?.takeOrdered(\"call\", rootId);\n if (replayed != null) {\n this.log(\"debug\", \"replaying durable reduce plan creation\", {\n durable_id: rootId,\n reduce_step_start: start,\n reduce_step_end: end,\n });\n const error = statusError(replayed.status, \"Failed to start reduce operation\");\n if (error != null) throw error;\n continue;\n }\n\n const prepared: PreparedSerializedObject[] = [];\n let offset = 0;\n if (start === 0) {\n const value = prepareSerializedObject(initial, offset);\n prepared.push(value);\n offset += value.bytes.byteLength;\n }\n for (let index = start; index < end; index += 1) {\n const value = prepareSerializedObject(items[index], offset);\n prepared.push(value);\n offset += value.bytes.byteLength;\n }\n let argsBlob: BlobValue;\n try {\n const requested = await this.requestOutputBlob(offset);\n argsBlob = await this.uploadBlob(\n requested,\n joinPrepared(prepared),\n \"durable reduce arguments\",\n { durable_id: rootId, reduce_step_start: start, reduce_step_end: end },\n );\n } catch (error) {\n if (this.controller.signal.aborted) throw this.controller.signal.reason;\n throw this.latchProtocolError(\n `Failed to materialize durable reduce arguments for '${rootId}'`,\n error,\n );\n }\n const itemOffset = start === 0 ? 1 : 0;\n const updates = [];\n for (let index = start; index < end; index += 1) {\n const id = ids[index];\n const accumulator = index === 0\n ? { value: prepared[0].object }\n : { functionCallId: ids[index - 1] };\n const item = prepared[itemOffset + index - start];\n const metadata = Buffer.from(JSON.stringify({\n format: \"tensorlake.typescript.function-call.v1\",\n id,\n functionName: definition.name,\n argumentCount: 2,\n operation: \"reduce\",\n reduceRootId: ids[ids.length - 1],\n reduceStep: index,\n reduceStepCount: items.length,\n }), \"utf8\");\n updates.push({ functionCall: {\n id,\n target: {\n namespace: this.functionRef.namespace,\n applicationName: this.functionRef.applicationName,\n applicationVersion: this.functionRef.applicationVersion,\n functionName: definition.name,\n },\n args: [accumulator, { value: item.object }],\n callMetadata: metadata,\n } });\n }\n livePlans.push({\n createFunctionCall: {\n updates: { updates, rootFunctionCallId: rootId },\n argsBlob,\n },\n });\n liveRoots.push(rootId);\n }\n\n if (livePlans.length === 0) return;\n if (!turnAcquired) await turn.wait;\n this.log(\"debug\", \"queueing durable reduce function-call chains\", {\n durable_id: ids[ids.length - 1],\n target_function: definition.name,\n reduce_step_count: items.length,\n plan_count: livePlans.length,\n });\n this.addBatch(livePlans);\n const creationWaiters = liveRoots.map((rootId) => {\n const predicate = (entry: Message) =>\n entry.functionCallCreated?.functionCallId === rootId;\n return {\n predicate,\n promise: this.waitForLiveEvent(predicate),\n };\n });\n const createdPromises = creationWaiters.map(async ({ promise }) => {\n const created = await promise;\n const error = statusError(\n created.functionCallCreated?.status,\n \"Failed to start reduce operation\",\n );\n if (error != null) throw error;\n });\n turn.release();\n try {\n await Promise.all(createdPromises);\n } catch (error) {\n // One failed plan is terminal for the whole reduce. Remove and reject\n // sibling plan waiters immediately: the server is not required to\n // acknowledge plans after it has rejected the batch.\n for (const { predicate } of creationWaiters) {\n const index = this.liveWaiters.findIndex(\n (waiter) => waiter.predicate === predicate,\n );\n if (index >= 0) this.liveWaiters.splice(index, 1)[0].result.reject(error);\n }\n throw error;\n }\n } finally {\n turn.release();\n }\n }\n\n private async createWatcher(id: string, turn: EmissionTurn): Promise<void> {\n try {\n await turn.wait;\n const replayed = await this.replay?.takeOrdered(\"watcher\", id);\n if (replayed != null) {\n this.log(\"debug\", \"replaying durable function watcher creation\", { durable_id: id });\n const error = statusError(replayed.status, \"Failed to create function call watcher\");\n if (error != null) throw error;\n return;\n }\n this.log(\"debug\", \"queueing durable function watcher event\", { durable_id: id });\n this.addBatch([{ createFunctionCallWatcher: { functionCallId: id } }]);\n this.log(\"debug\", \"waiting for durable function watcher acknowledgement\", { durable_id: id });\n const createdPromise = this.waitForLiveEvent(\n (entry) => entry.functionCallWatcherCreated?.functionCallId === id,\n );\n turn.release();\n const created = await createdPromise;\n const error = statusError(created.functionCallWatcherCreated?.status, \"Failed to create function call watcher\");\n if (error != null) throw error;\n } finally {\n turn.release();\n }\n }\n\n private async resolveWatcherResult<T>(event: Message): Promise<T> {\n this.log(\"debug\", \"resolving durable function watcher result\", {\n durable_id: event.functionCallId,\n watcher_status: event.watcherStatus,\n outcome_code: event.outcomeCode,\n has_value_output: event.valueOutput != null,\n has_request_error_output: event.requestErrorOutput != null,\n });\n if (WATCHER_TIMED_OUT.has(event.watcherStatus)) throw new TimeoutError();\n if (OUTCOME_SUCCESS.has(event.outcomeCode)) {\n try {\n const downloaded = await this.downloadSerializedObject(\n event.valueOutput,\n event.valueBlob,\n \"durable function result\",\n { durable_id: event.functionCallId },\n );\n return deserializeValueFromProtocol(downloaded) as T;\n } catch (error) {\n if (this.controller.signal.aborted) throw this.controller.signal.reason;\n throw this.latchProtocolError(\n `Invalid successful function call watcher payload for '${String(event.functionCallId)}'`,\n error,\n );\n }\n }\n if (OUTCOME_FAILURE.has(event.outcomeCode)) {\n if (event.requestErrorOutput != null) {\n let message: string;\n try {\n const downloaded = await this.downloadSerializedObject(\n event.requestErrorOutput,\n event.requestErrorBlob,\n \"durable function request error\",\n { durable_id: event.functionCallId },\n );\n message = new TextDecoder(\"utf-8\", { fatal: true }).decode(downloaded.data);\n } catch (error) {\n if (this.controller.signal.aborted) throw this.controller.signal.reason;\n throw this.latchProtocolError(\n `Invalid request-error function call watcher payload for '${String(event.functionCallId)}'`,\n error,\n );\n }\n throw new RequestError(message);\n }\n throw new FunctionError(\"Function call failed\");\n }\n throw this.latchProtocolError(\n `Unexpected function call watcher outcome '${String(event.outcomeCode)}'`,\n );\n }\n\n private latchProtocolError(\n message: string | AllocationProtocolError,\n cause?: unknown,\n ): AllocationProtocolError {\n const protocolError = this.protocolError\n ?? (message instanceof AllocationProtocolError\n ? message\n : new AllocationProtocolError(\n message,\n cause === undefined ? undefined : { cause },\n ));\n // Protocol failures are executor invariants, not child-function failures.\n // Latch the first one so application code cannot turn corrupt event data\n // into a successful allocation or hang indefinitely after catching the\n // rejected child promise.\n this.protocolError = protocolError;\n this.abortExecution(protocolError);\n return protocolError;\n }\n\n private async startTailCall(tailCall: TailCall<unknown>): Promise<string> {\n const callTurn = this.reserveEmissionTurn(\"call\");\n const id = this.nextDurableId(tailCall.definition);\n this.log(\"info\", \"tail call starting\", {\n durable_id: id,\n target_function: tailCall.definition.name,\n argument_count: tailCall.args.length,\n });\n this.replay?.expectCall(id);\n try {\n await this.createChildCall(id, tailCall.definition, tailCall.args, 0, callTurn);\n } catch (error) {\n this.replay?.abandonCall(id);\n throw error;\n }\n return id;\n }\n\n private reserveEmissionTurn(kind: \"call\" | \"watcher\"): EmissionTurn {\n const previous = kind === \"call\" ? this.durableCallEmissionTail : this.durableWatcherEmissionTail;\n let signalRelease!: () => void;\n const released = new Promise<void>((resolve) => { signalRelease = resolve; });\n const tail = previous.then(() => released);\n if (kind === \"call\") this.durableCallEmissionTail = tail;\n else this.durableWatcherEmissionTail = tail;\n let didRelease = false;\n return {\n wait: previous,\n release: () => {\n if (didRelease) return;\n didRelease = true;\n signalRelease();\n },\n };\n }\n\n private async run(): Promise<void> {\n let handlerArgs: unknown[];\n this.log(\"info\", \"allocation execution started\", {\n replay_mode: this.allocation.replayMode,\n function: this.functionRef.functionName,\n });\n this.emitLifecycleEvent(\"allocations_started\", \"Starting allocations\");\n try {\n const inputs = this.allocation.inputs ?? {};\n const objects = inputs.args ?? [];\n const blobs = inputs.argBlobs ?? [];\n this.log(\"debug\", \"allocation inputs validated\", {\n object_count: objects.length,\n blob_count: blobs.length,\n function_call_metadata_bytes: inputs.functionCallMetadata?.length ?? 0,\n });\n if (objects.length !== blobs.length) throw new Error(\"Function argument and BLOB counts differ\");\n const values = await Promise.all(objects.map(\n (object: SerializedObjectInsideBlobValue, index: number) => this.downloadSerializedObject(\n object,\n blobs[index],\n \"function input\",\n { input_index: index },\n ),\n ));\n this.log(\"info\", \"all function inputs downloaded\", {\n input_count: values.length,\n total_data_bytes: values.reduce((total, value) => total + value.data.byteLength, 0),\n });\n const metadata = Buffer.from(inputs.functionCallMetadata ?? []);\n if (metadata.byteLength === 0) {\n this.log(\"debug\", \"deserializing application invocation input\", {\n content_type: values[0]?.contentType,\n });\n if (values.length !== 1) throw new Error(\"Application calls require exactly one input payload\");\n try {\n const parsed = await deserializeApplicationArguments(this.definition, values[0]);\n handlerArgs = parsed.args;\n } catch (error) {\n this.log(\"error\", \"application invocation input deserialization failed\", {}, error);\n await this.finishUserError(error);\n return;\n }\n this.log(\"debug\", \"application invocation input deserialized\", {\n handler_argument_count: handlerArgs.length,\n });\n } else {\n this.log(\"debug\", \"deserializing internal function invocation inputs\", {\n metadata_bytes: metadata.byteLength,\n });\n const call = JSON.parse(metadata.toString(\"utf8\")) as Message;\n if (call.format !== \"tensorlake.typescript.function-call.v1\") {\n throw new Error(\"Function call metadata was produced by a different SDK language\");\n }\n if (call.argumentCount !== values.length) throw new Error(\"Function call metadata argument count differs\");\n try {\n handlerArgs = values.map(deserializeValueFromProtocol);\n } catch (error) {\n this.log(\"error\", \"internal function argument deserialization failed\", {}, error);\n await this.finishUserError(error);\n return;\n }\n this.log(\"debug\", \"internal function invocation inputs deserialized\", {\n handler_argument_count: handlerArgs.length,\n metadata_function: call.functionName,\n });\n }\n\n if (REPLAY_STRICT.has(this.allocation.replayMode)) {\n this.log(\"info\", \"strict replay history loading\");\n await this.loadReplayHistory();\n } else {\n this.log(\"debug\", \"strict replay disabled\");\n }\n const requestContext = this.createRequestContext();\n let result: unknown | TailCall<unknown>;\n const handlerStartedAt = Date.now();\n this.log(\"info\", \"user function handler starting\", {\n handler_argument_count: handlerArgs.length,\n });\n try {\n const execute = () => executeHandlerResult(this.definition, handlerArgs);\n result = await runWithRequestContext(requestContext, () =>\n runWithFunctionRuntime(this, () => waitWithAbortSignal(\n this.replay?.runCausalHandler(execute) ?? execute(),\n this.controller.signal,\n )),\n );\n } catch (error) {\n if (error instanceof ReplayMismatchError || error instanceof AllocationProtocolError) {\n throw error;\n }\n // Promise combinators such as Promise.any can wrap the replay waiter's\n // ReplayMismatchError (for example in an AggregateError). Preserve the\n // allocation-level replay classification even when user-level promise\n // machinery changes the surfaced error object.\n this.replay?.assertNoMismatch();\n this.log(\"error\", \"user function handler failed\", {\n duration_ms: Date.now() - handlerStartedAt,\n }, error);\n await this.finishUserError(error);\n return;\n }\n this.log(\"info\", \"user function handler completed\", {\n duration_ms: Date.now() - handlerStartedAt,\n result_kind: isTailCall(result)\n ? \"tail_call\"\n : \"value\",\n result_type: result == null ? String(result) : typeof result,\n });\n if (this.protocolError != null) throw this.protocolError;\n this.replay?.assertNoMismatch();\n if (isTailCall(result)) {\n const id = await this.startTailCall(result);\n this.replay?.assertConsumed();\n this.controller.signal.throwIfAborted();\n this.log(\"info\", \"queueing successful tail-call allocation finish\", { tail_call_durable_id: id });\n this.queueTerminalBatch({\n outcomeCode: \"ALLOCATION_OUTCOME_CODE_SUCCESS\",\n tailCallDurableId: id,\n });\n } else {\n this.replay?.assertConsumed();\n let prepared: PreparedSerializedObject;\n try {\n prepared = prepareSerializedObject(result, 0, String(this.allocation.functionCallId));\n } catch (error) {\n this.log(\"error\", \"function output serialization failed\", {}, error);\n await this.finishUserError(error);\n return;\n }\n this.log(\"debug\", \"function output serialized\", {\n output_bytes: prepared.bytes.byteLength,\n output_encoding: prepared.object.manifest?.encoding,\n output_content_type: prepared.object.manifest?.contentType,\n });\n let outputBlob = await this.requestOutputBlob(prepared.bytes.byteLength);\n outputBlob = await this.uploadBlob(outputBlob, prepared.bytes, \"function output\");\n this.controller.signal.throwIfAborted();\n this.log(\"info\", \"queueing successful value allocation finish\", {\n output_blob_id: outputBlob.id,\n output_bytes: prepared.bytes.byteLength,\n });\n this.queueTerminalBatch({\n outcomeCode: \"ALLOCATION_OUTCOME_CODE_SUCCESS\",\n value: prepared.object,\n uploadedFunctionOutputsBlob: outputBlob,\n });\n }\n } catch (error) {\n const replayMismatch = error instanceof ReplayMismatchError;\n const protocolFailure =\n error instanceof AllocationProtocolError || this.protocolError != null;\n const cancelled = this.controller.signal.aborted && !protocolFailure;\n this.log(\n cancelled ? \"info\" : \"error\",\n cancelled\n ? \"allocation stopped after cancellation\"\n : replayMismatch\n ? \"durable replay mismatch\"\n : \"allocation internal failure\",\n {},\n error,\n );\n this.queueTerminalBatch({\n outcomeCode: \"ALLOCATION_OUTCOME_CODE_FAILURE\",\n failureReason: replayMismatch\n ? \"ALLOCATION_FAILURE_REASON_REPLAY_EVENT_HISTORY_MISMATCH\"\n : protocolFailure\n ? \"ALLOCATION_FAILURE_REASON_INTERNAL_ERROR\"\n : cancelled\n ? \"ALLOCATION_FAILURE_REASON_FUNCTION_ERROR\"\n : \"ALLOCATION_FAILURE_REASON_INTERNAL_ERROR\",\n });\n } finally {\n this.log(\"info\", \"allocation execution stopping\", {\n duration_ms: Date.now() - this.startedAt,\n pending_output_blob_requests: this.outputBlobRequests.size,\n pending_state_operations: this.stateOperationRequests.size,\n pending_event_waiters: this.liveWaiters.length,\n });\n this.emitLifecycleEvent(\"allocations_finished\", \"Allocations completed\");\n this.finish();\n this.replay?.dispose();\n }\n }\n\n private async finishUserError(error: unknown): Promise<void> {\n const rendered = error instanceof Error ? error.message : String(error);\n this.runWithoutReplayOwnership(() => {\n printCloudEvent({\n level: \"error\",\n event: \"function_call_failed\",\n message: rendered,\n namespace: this.functionRef.namespace,\n application: this.functionRef.applicationName,\n application_version: this.functionRef.applicationVersion,\n function: this.functionRef.functionName,\n request_id: this.allocation.requestId,\n function_call_id: this.allocation.functionCallId,\n allocation_id: this.allocation.allocationId,\n error: error instanceof Error ? error.stack?.split(\"\\n\") ?? [rendered] : [rendered],\n });\n });\n if (isRequestError(error)) {\n const output = prepareTextObject(error.message);\n const requestErrorBlob = this.allocation.inputs?.requestErrorBlob as BlobValue | undefined;\n if (requestErrorBlob == null) throw new Error(\"Allocation has no request error BLOB\");\n const uploaded = await this.uploadBlob(requestErrorBlob, output.bytes, \"request error output\");\n this.log(\"info\", \"queueing request-error allocation finish\", {\n request_error_bytes: output.bytes.byteLength,\n request_error_blob_id: uploaded.id,\n });\n this.queueTerminalBatch({\n outcomeCode: \"ALLOCATION_OUTCOME_CODE_FAILURE\",\n failureReason: \"ALLOCATION_FAILURE_REASON_REQUEST_ERROR\",\n requestErrorOutput: output.object,\n uploadedRequestErrorBlob: uploaded,\n });\n return;\n }\n this.log(\"info\", \"queueing function-error allocation finish\", {}, error);\n this.queueTerminalBatch({\n outcomeCode: \"ALLOCATION_OUTCOME_CODE_FAILURE\",\n failureReason: \"ALLOCATION_FAILURE_REASON_FUNCTION_ERROR\",\n });\n }\n\n private createRequestContext(): RequestContextValue {\n return {\n requestId: String(this.allocation.requestId),\n headers: new Headers(\n (this.allocation.inputs?.requestContext?.headers ?? []).map(\n (header: Message) => [\n String(header.name ?? \"\"),\n String(header.value ?? \"\"),\n ],\n ),\n ),\n signal: this.controller.signal,\n state: {\n get: async <T>(key: string, defaultValue?: T) => {\n validateRequestStateKey(key);\n const operationId = randomUUID();\n this.log(\"debug\", \"request state read starting\", {\n state_key: key,\n operation_id: operationId,\n has_default: defaultValue !== undefined,\n });\n const result = await this.requestStateOperation({ operationId, stateKey: key, prepareRead: {} });\n if (result.status?.code === NOT_FOUND) {\n this.log(\"debug\", \"request state key not found\", { state_key: key, operation_id: operationId });\n return defaultValue;\n }\n const error = statusError(result.status, `Failed to read request state '${key}'`);\n if (error != null) throw error;\n const data = await this.downloadBlob(result.prepareRead?.blob, \"request state value\", {\n state_key: key,\n operation_id: operationId,\n });\n const value = deserializeJSON(data) as T;\n this.log(\"debug\", \"request state read completed\", {\n state_key: key,\n operation_id: operationId,\n value_bytes: data.byteLength,\n });\n return value;\n },\n set: async (key: string, value: unknown) => {\n validateRequestStateKey(key);\n const serialized = serializeRequestStateValue(value);\n const prepareOperationId = randomUUID();\n this.log(\"debug\", \"request state write preparation starting\", {\n state_key: key,\n operation_id: prepareOperationId,\n value_bytes: serialized.byteLength,\n });\n const prepared = await this.requestStateOperation({\n operationId: prepareOperationId,\n stateKey: key,\n prepareWrite: { size: serialized.byteLength },\n });\n const error = statusError(prepared.status, `Failed to prepare request state '${key}'`);\n if (error != null) throw error;\n const blob = await this.uploadBlob(prepared.prepareWrite?.blob, serialized, \"request state value\", {\n state_key: key,\n operation_id: prepareOperationId,\n });\n const commitOperationId = randomUUID();\n this.log(\"debug\", \"request state write commit starting\", {\n state_key: key,\n operation_id: commitOperationId,\n blob_id: blob.id,\n });\n const committed = await this.requestStateOperation({\n operationId: commitOperationId,\n stateKey: key,\n commitWrite: { blob },\n });\n const commitError = statusError(committed.status, `Failed to commit request state '${key}'`);\n if (commitError != null) throw commitError;\n this.log(\"debug\", \"request state write completed\", {\n state_key: key,\n operation_id: commitOperationId,\n value_bytes: serialized.byteLength,\n });\n },\n },\n metrics: {\n counter: async (name, value = 1) => {\n validateCounterMetric(name, value);\n this.emitUserEvent(\"ai.tensorlake.metric.counter.inc\", {\n counter_name: name,\n counter_inc: value,\n });\n },\n timer: async (name, value) => {\n validateTimerMetric(name, value);\n this.emitUserEvent(\"ai.tensorlake.metric.timer\", {\n timer_name: name,\n timer_value: value,\n });\n },\n },\n progress: {\n update: async (current, total, options) => {\n validateProgressUpdate(current, total, options);\n this.log(\"debug\", \"request progress update\", {\n current,\n total,\n has_custom_message: options?.message != null,\n attribute_count: Object.keys(options?.attributes ?? {}).length,\n });\n this.state.progress = { current, total };\n this.publishState();\n const message = options?.message ?? `${this.functionRef.functionName}: executing step ${current} of ${total}`;\n this.runWithoutReplayOwnership(() => {\n printCloudEvent({ RequestProgressUpdated: {\n request_id: this.allocation.requestId,\n function_name: this.functionRef.functionName,\n function_run_id: this.allocation.functionCallId,\n allocation_id: this.allocation.allocationId,\n message,\n step: current,\n total,\n attributes: options?.attributes,\n created_at: new Date().toISOString(),\n } }, {\n type: \"ai.tensorlake.progress_update\",\n source: \"/tensorlake/applications/progress\",\n message,\n });\n });\n },\n },\n };\n }\n\n private emitUserEvent(type: string, data: Message): void {\n this.log(\"debug\", \"user metric event emitted\", {\n event_type: type,\n metric_name: data.counter_name ?? data.timer_name,\n });\n this.runWithoutReplayOwnership(() => {\n printCloudEvent({\n request_id: this.allocation.requestId,\n function_name: this.functionRef.functionName,\n function_run_id: this.allocation.functionCallId,\n allocation_id: this.allocation.allocationId,\n ...data,\n }, { type, source: \"/tensorlake/applications/metrics\" });\n });\n }\n\n private emitLifecycleEvent(event: string, message: string): void {\n this.runWithoutReplayOwnership(() => {\n printCloudEvent({\n event,\n message,\n allocations: [{\n namespace: this.functionRef.namespace,\n application: this.functionRef.applicationName,\n application_version: this.functionRef.applicationVersion,\n function: this.functionRef.functionName,\n request_id: this.allocation.requestId,\n function_call_id: this.allocation.functionCallId,\n allocation_id: this.allocation.allocationId,\n }],\n });\n });\n }\n\n private async loadReplayHistory(): Promise<void> {\n const entries: Message[] = [];\n let afterClock = 0;\n let page = 0;\n while (true) {\n page += 1;\n this.log(\"debug\", \"requesting replay history page\", { page, after_clock: afterClock });\n const requestedAfterClock = afterClock;\n const response = await this.readEvents(afterClock);\n entries.push(...(response.entries ?? []));\n this.log(\"debug\", \"replay history page received\", {\n page,\n entry_count: response.entries?.length ?? 0,\n last_clock: response.lastClock,\n has_more: response.hasMore,\n });\n const responseClock = validatedEventLogClock(\n response,\n requestedAfterClock,\n (message) => new ReplayMismatchError(message),\n );\n afterClock = responseClock;\n if (!response.hasMore) break;\n }\n this.lastEventClock = afterClock;\n this.replay = new ReplayHistory(entries);\n this.log(\"info\", \"strict replay history loaded\", {\n page_count: page,\n entry_count: entries.length,\n last_clock: afterClock,\n });\n }\n\n private waitForLiveEvent(predicate: (event: Message) => boolean): Promise<Message> {\n if (this.controller.signal.aborted) {\n return Promise.reject(this.controller.signal.reason);\n }\n const index = this.liveBacklog.findIndex(predicate);\n if (index >= 0) {\n this.log(\"debug\", \"durable event satisfied from backlog\", {\n backlog_size: this.liveBacklog.length,\n pending_waiters: this.liveWaiters.length,\n });\n return Promise.resolve(this.liveBacklog.splice(index, 1)[0]);\n }\n const result = deferred<Message>();\n this.liveWaiters.push({ predicate, result });\n this.log(\"debug\", \"waiting for durable event\", {\n backlog_size: this.liveBacklog.length,\n pending_waiters: this.liveWaiters.length,\n });\n this.ensureLivePump();\n return result.promise;\n }\n\n private ensureLivePump(): void {\n if (this.livePump != null) {\n this.log(\"debug\", \"durable event live pump already running\");\n return;\n }\n this.log(\"info\", \"durable event live pump starting\", { after_clock: this.lastEventClock });\n const pump = (async () => {\n // Only issue event-log reads while user code is blocked on a durable\n // event. This leaves no orphaned long poll after the final watcher result\n // and makes stream shutdown deterministic.\n while (!this.finished && this.liveWaiters.length > 0) {\n const requestedAfterClock = this.lastEventClock;\n const response = await this.readEvents(this.lastEventClock);\n this.log(\"debug\", \"durable event log page received\", {\n requested_after_clock: requestedAfterClock,\n entry_count: response.entries?.length ?? 0,\n last_clock: response.lastClock,\n has_more: response.hasMore,\n });\n const responseClock = validatedEventLogClock(\n response,\n requestedAfterClock,\n (message) => new AllocationProtocolError(message),\n );\n this.lastEventClock = responseClock;\n for (const entry of response.entries ?? []) this.dispatchLiveEvent(entry);\n }\n })();\n this.livePump = pump;\n void pump.then(() => {\n if (this.livePump !== pump) return;\n this.livePump = undefined;\n this.log(\"debug\", \"durable event live pump stopped\", {\n finished: this.finished,\n pending_waiters: this.liveWaiters.length,\n after_clock: this.lastEventClock,\n });\n // A waiter can be installed between the loop condition and this\n // continuation. Restart in that case so it cannot be stranded.\n if (!this.finished && this.liveWaiters.length > 0) this.ensureLivePump();\n }, (error) => {\n if (this.livePump === pump) this.livePump = undefined;\n if (!this.finished && !this.controller.signal.aborted) {\n const protocolError = error instanceof AllocationProtocolError\n ? error\n : new AllocationProtocolError(\n error instanceof Error ? error.message : String(error),\n { cause: error },\n );\n this.latchProtocolError(protocolError);\n this.log(\"error\", \"durable event live pump failed\", {\n pending_waiters: this.liveWaiters.length,\n }, protocolError);\n }\n });\n }\n\n private dispatchLiveEvent(entry: Message): void {\n const index = this.liveWaiters.findIndex((waiter) => waiter.predicate(entry));\n const eventKind = Object.keys(entry).find((key) => key !== \"clock\") ?? \"unknown\";\n if (index < 0) {\n this.liveBacklog.push(entry);\n this.log(\"debug\", \"durable event added to backlog\", {\n event_kind: eventKind,\n event_clock: entry.clock,\n backlog_size: this.liveBacklog.length,\n });\n } else {\n this.liveWaiters.splice(index, 1)[0].result.resolve(entry);\n this.log(\"debug\", \"durable event delivered to waiter\", {\n event_kind: eventKind,\n event_clock: entry.clock,\n pending_waiters: this.liveWaiters.length,\n });\n }\n }\n\n private readEvents(afterClock: number): Promise<Message> {\n if (this.currentRead != null) {\n throw new AllocationProtocolError(\"Allocation event log already has a pending read\");\n }\n const response = deferred<Message>();\n const request = {\n allocationId: this.allocation.allocationId,\n afterClock,\n maxEntries: 100,\n };\n this.currentRead = { request, response };\n this.log(\"debug\", \"event log read requested\", {\n after_clock: afterClock,\n max_entries: request.maxEntries,\n connected_streams: this.eventReadStreams.size,\n });\n for (const stream of [...this.eventReadStreams]) {\n try {\n stream.write(request);\n } catch (error) {\n this.dropEventReadStream(stream, \"write_failed\", error);\n }\n }\n return response.promise;\n }\n\n watchEventLogReads(stream: StreamCall): void {\n this.eventReadStreams.add(stream);\n this.log(\"info\", \"event log read stream connected\", {\n connected_streams: this.eventReadStreams.size,\n has_pending_read: this.currentRead != null,\n });\n try {\n stream.on(\"cancelled\", () => this.dropEventReadStream(stream, \"cancelled\"));\n stream.on(\"close\", () => this.dropEventReadStream(stream, \"closed\"));\n if (this.currentRead != null) {\n this.log(\"debug\", \"sending pending event log read to new stream\", {\n after_clock: this.currentRead.request.afterClock,\n max_entries: this.currentRead.request.maxEntries,\n });\n stream.write(this.currentRead.request);\n }\n if (this.finished && this.currentRead == null) stream.end();\n } catch (error) {\n this.dropEventReadStream(stream, \"setup_failed\", error);\n throw error;\n }\n }\n\n deliverEventLogResponse(response: Message): void {\n if (this.currentRead == null) {\n this.log(\"warn\", \"unexpected event log response ignored\", {\n entry_count: response.entries?.length ?? 0,\n last_clock: response.lastClock,\n });\n return;\n }\n const pending = this.currentRead;\n this.currentRead = undefined;\n this.log(\"debug\", \"event log response delivered\", {\n requested_after_clock: pending.request.afterClock,\n entry_count: response.entries?.length ?? 0,\n last_clock: response.lastClock,\n has_more: response.hasMore,\n });\n pending.response.resolve(response);\n }\n\n private requestOutputBlob(size: number): Promise<BlobValue> {\n if (this.controller.signal.aborted) {\n return Promise.reject(this.controller.signal.reason);\n }\n const id = randomUUID();\n const request = deferred<Message>();\n this.outputBlobRequests.set(id, request);\n this.state.outputBlobRequests.push({ id, size });\n this.log(\"debug\", \"output blob requested\", {\n blob_id: id,\n requested_bytes: size,\n pending_output_blob_requests: this.outputBlobRequests.size,\n });\n this.publishState();\n return request.promise.then((output) => {\n this.log(\"debug\", \"output blob response received\", {\n blob_id: id,\n status_code: output.status?.code,\n chunk_count: output.blob?.chunks?.length ?? 0,\n });\n const error = statusError(output.status, \"Failed to create output BLOB\");\n if (error != null) throw error;\n return output.blob as BlobValue;\n });\n }\n\n private requestStateOperation(operation: Message): Promise<Message> {\n if (this.controller.signal.aborted) {\n return Promise.reject(this.controller.signal.reason);\n }\n const request = deferred<Message>();\n this.stateOperationRequests.set(operation.operationId, request);\n this.state.requestStateOperations.push(operation);\n this.log(\"debug\", \"request state operation queued\", {\n operation_id: operation.operationId,\n state_key: operation.stateKey,\n operation_kind: this.stateOperationKind(operation),\n requested_bytes: operation.prepareWrite?.size,\n pending_state_operations: this.stateOperationRequests.size,\n });\n this.publishState();\n return request.promise;\n }\n\n deliverUpdate(update: Message): void {\n if (update.outputBlob != null) {\n let id = String(update.outputBlob.blob?.id ?? \"\");\n let matchedByOrder = false;\n if (!id) {\n // Error responses do not contain a BLOB, and therefore carry no BLOB ID.\n // The dataplane reconciles state requests and sends their responses in\n // state-list order, so match a BLOB-less response to the oldest request.\n id = String(this.state.outputBlobRequests[0]?.id ?? \"\");\n matchedByOrder = id !== \"\";\n }\n const request = this.outputBlobRequests.get(id);\n if (request == null) {\n this.log(\"warn\", \"unmatched output blob update ignored\", {\n blob_id: id || undefined,\n status_code: update.outputBlob.status?.code,\n pending_output_blob_requests: this.outputBlobRequests.size,\n });\n return;\n }\n this.outputBlobRequests.delete(id);\n this.state.outputBlobRequests = this.state.outputBlobRequests.filter((item: Message) => item.id !== id);\n this.log(\"debug\", \"output blob update matched\", {\n blob_id: id,\n status_code: update.outputBlob.status?.code,\n chunk_count: update.outputBlob.blob?.chunks?.length ?? 0,\n matched_by_order: matchedByOrder,\n pending_output_blob_requests: this.outputBlobRequests.size,\n });\n // Once a response is matched, settle its waiter before notifying state\n // streams. A broken stream writer must not strand the allocation after\n // the dataplane has already delivered the BLOB response.\n request.resolve(update.outputBlob);\n this.publishState();\n return;\n }\n const result = update.requestStateOperationResult;\n if (result != null) {\n if (typeof result.operationId !== \"string\" || result.operationId.length === 0) {\n throw this.latchProtocolError(\n \"Allocation received a request state operation result without an operation ID\",\n );\n }\n const id = result.operationId;\n const request = this.stateOperationRequests.get(id);\n if (request == null) {\n this.log(\"warn\", \"unmatched request state operation result ignored\", {\n operation_id: id,\n status_code: result.status?.code,\n pending_state_operations: this.stateOperationRequests.size,\n });\n return;\n }\n const operation = this.state.requestStateOperations.find((item: Message) => item.operationId === id);\n this.stateOperationRequests.delete(id);\n this.state.requestStateOperations = this.state.requestStateOperations.filter(\n (item: Message) => item.operationId !== id,\n );\n this.log(\"debug\", \"request state operation result matched\", {\n operation_id: id,\n state_key: operation?.stateKey,\n operation_kind: this.stateOperationKind(operation),\n status_code: result.status?.code,\n pending_state_operations: this.stateOperationRequests.size,\n });\n // State publication is downstream bookkeeping. Resolve the operation\n // first so a failing stream cannot turn a delivered result into a hang.\n request.resolve(result);\n this.publishState();\n return;\n }\n this.log(\"warn\", \"allocation update contained no recognized payload\");\n }\n\n watchState(stream: StreamCall): void {\n this.stateStreams.add(stream);\n this.stateStreamFlows.set(stream, { backpressured: false });\n this.log(\"info\", \"allocation state stream connected\", {\n connected_streams: this.stateStreams.size,\n state_hash: this.state.sha256Hash,\n pending_output_blob_requests: this.outputBlobRequests.size,\n pending_state_operations: this.stateOperationRequests.size,\n });\n try {\n stream.on(\"cancelled\", () => this.dropStateStream(stream, \"cancelled\"));\n stream.on(\"close\", () => this.dropStateStream(stream, \"closed\"));\n stream.on(\"drain\", () => this.drainStateStream(stream));\n this.writeStateSnapshot(stream, this.snapshotState());\n if (this.finished) stream.end();\n } catch (error) {\n this.dropStateStream(stream, \"setup_failed\", error);\n throw error;\n }\n }\n\n private updateStateHash(): void {\n const content = JSON.stringify({\n progress: this.state.progress,\n outputBlobRequests: this.state.outputBlobRequests,\n requestStateOperations: this.state.requestStateOperations,\n });\n this.state.sha256Hash = createHash(\"sha256\").update(content).digest(\"hex\");\n }\n\n private snapshotState(): Message {\n return nativeStructuredClone(this.state) as Message;\n }\n\n private publishState(): void {\n this.updateStateHash();\n this.log(\"debug\", \"allocation state published\", {\n state_hash: this.state.sha256Hash,\n connected_streams: this.stateStreams.size,\n pending_output_blob_requests: this.outputBlobRequests.size,\n pending_state_operations: this.stateOperationRequests.size,\n progress_current: this.state.progress?.current,\n progress_total: this.state.progress?.total,\n });\n for (const stream of [...this.stateStreams]) {\n // Allocation state is level-triggered: one current snapshot contains all\n // outstanding requests. Coalesce intermediate snapshots while grpc-js is\n // backpressured so progress-heavy functions cannot grow the transport\n // buffer without bound.\n this.writeStateSnapshot(stream, this.snapshotState());\n }\n }\n\n private writeStateSnapshot(stream: StreamCall, snapshot: Message): void {\n const flow = this.stateStreamFlows.get(stream);\n if (flow == null) return;\n if (flow.backpressured) {\n flow.pending = snapshot;\n return;\n }\n try {\n // grpc-js streams are object-mode writers and may retain a message\n // reference while backpressured. Every caller supplies a deep snapshot\n // so later reconciliation cannot rewrite transport-owned state.\n flow.backpressured = !stream.write(snapshot);\n } catch (error) {\n // A reconnect receives the complete current state. Drop a broken writer\n // so it cannot block healthy streams or allocation waiters.\n this.dropStateStream(stream, \"write_failed\", error);\n }\n }\n\n private drainStateStream(stream: StreamCall): void {\n const flow = this.stateStreamFlows.get(stream);\n if (flow == null) return;\n flow.backpressured = false;\n const pending = flow.pending;\n flow.pending = undefined;\n if (pending != null) this.writeStateSnapshot(stream, pending);\n }\n\n private addBatch(events: Message[]): void {\n if (this.terminalBatchQueued && events.every((event) => event.finishAllocation == null)) {\n this.log(\"error\", \"execution event rejected after terminal batch\", {\n event_count: events.length,\n event_kinds: events.map((event) => Object.keys(event)[0] ?? \"unknown\"),\n });\n return;\n }\n this.executionBatches.push(events);\n this.log(\"debug\", \"execution log batch queued\", {\n event_count: events.length,\n event_kinds: events.map((event) => Object.keys(event)[0] ?? \"unknown\"),\n queued_batches: this.executionBatches.length,\n waiting_consumers: this.executionBatchWaiters.length,\n });\n for (const waiter of this.executionBatchWaiters.splice(0)) {\n this.markTerminalBatchObserved(events);\n waiter(events);\n }\n }\n\n private queueTerminalBatch(finishAllocation: Message): void {\n if (this.terminalBatchQueued) {\n this.log(\"error\", \"duplicate terminal allocation batch rejected\", {\n outcome_code: finishAllocation.outcomeCode,\n failure_reason: finishAllocation.failureReason,\n });\n return;\n }\n this.terminalBatchQueued = true;\n this.addBatch([{ finishAllocation }]);\n }\n\n async getExecutionBatch(): Promise<Message[]> {\n if (this.executionBatches.length > 0) {\n this.log(\"debug\", \"returning queued execution log batch\", {\n event_count: this.executionBatches[0].length,\n queued_batches: this.executionBatches.length,\n });\n const events = this.executionBatches[0];\n this.markTerminalBatchObserved(events);\n return events;\n }\n if (this.finished) {\n this.log(\"debug\", \"returning empty execution log batch for finished allocation\");\n return [];\n }\n this.log(\"debug\", \"execution log batch consumer waiting\", {\n waiting_consumers: this.executionBatchWaiters.length + 1,\n });\n return new Promise((resolve) => this.executionBatchWaiters.push(resolve));\n }\n\n advanceExecutionBatch(): void {\n const advanced = this.executionBatches.shift();\n this.log(\"debug\", \"execution log batch advanced\", {\n advanced_event_count: advanced?.length ?? 0,\n queued_batches: this.executionBatches.length,\n });\n }\n\n private markTerminalBatchObserved(events: Message[]): void {\n if (\n this.terminalBatchObserved\n || !events.some((event) => event.finishAllocation != null)\n ) {\n return;\n }\n this.terminalBatchObserved = true;\n this.log(\"debug\", \"terminal execution log batch observed by consumer\");\n for (const waiter of this.terminalBatchObservedWaiters.splice(0)) waiter();\n }\n\n get isFinished(): boolean {\n return this.finished;\n }\n\n private finish(): void {\n if (this.finished) {\n this.log(\"debug\", \"allocation finish ignored because runner is already finished\");\n return;\n }\n this.finished = true;\n this.abortExecution(new FunctionError(\"Allocation finished\"));\n this.log(\"info\", \"allocation runner finished\", {\n duration_ms: Date.now() - this.startedAt,\n queued_execution_batches: this.executionBatches.length,\n state_streams: this.stateStreams.size,\n event_log_streams: this.eventReadStreams.size,\n });\n for (const stream of [...this.stateStreams]) {\n try {\n stream.end();\n } catch (error) {\n this.dropStateStream(stream, \"end_failed\", error);\n }\n }\n for (const stream of [...this.eventReadStreams]) {\n try {\n stream.end();\n } catch (error) {\n this.dropEventReadStream(stream, \"end_failed\", error);\n }\n }\n for (const waiter of this.executionBatchWaiters.splice(0)) waiter([]);\n }\n\n private dropStateStream(\n stream: StreamCall,\n reason: string,\n error?: unknown,\n ): void {\n if (!this.stateStreams.delete(stream)) return;\n this.stateStreamFlows.delete(stream);\n this.log(\"info\", \"allocation state stream disconnected\", {\n reason,\n connected_streams: this.stateStreams.size,\n }, error);\n }\n\n private dropEventReadStream(\n stream: StreamCall,\n reason: string,\n error?: unknown,\n ): void {\n if (!this.eventReadStreams.delete(stream)) return;\n this.log(\"info\", \"event log read stream disconnected\", {\n reason,\n connected_streams: this.eventReadStreams.size,\n has_pending_read: this.currentRead != null,\n }, error);\n }\n\n private stateOperationKind(operation: Message | undefined): string {\n if (operation?.prepareRead != null) return \"prepare_read\";\n if (operation?.prepareWrite != null) return \"prepare_write\";\n if (operation?.commitWrite != null) return \"commit_write\";\n return \"unknown\";\n }\n\n private blobLogFields(blob: BlobValue | undefined): Message {\n const chunks = blob?.chunks ?? [];\n return {\n blob_id: blob?.id,\n chunk_count: chunks.length,\n declared_bytes: chunks.reduce((total, chunk) => total + (chunk.size ?? 0), 0),\n };\n }\n\n private async downloadBlob(\n blob: BlobValue | undefined,\n purpose: string,\n fields: Message = {},\n ): Promise<Uint8Array> {\n if (blob == null) throw new Error(`Missing BLOB for ${purpose}`);\n const startedAt = Date.now();\n this.log(\"debug\", \"blob download starting\", {\n purpose,\n ...fields,\n ...this.blobLogFields(blob),\n });\n try {\n const data = await downloadBlobData(\n blob,\n (message, details) => this.log(\"debug\", `blob ${message}`, {\n purpose,\n ...fields,\n ...details,\n }),\n this.controller.signal,\n );\n this.log(\"debug\", \"blob download completed\", {\n purpose,\n ...fields,\n ...this.blobLogFields(blob),\n downloaded_bytes: data.byteLength,\n duration_ms: Date.now() - startedAt,\n });\n return data;\n } catch (error) {\n this.log(\"error\", \"blob download failed\", {\n purpose,\n ...fields,\n ...this.blobLogFields(blob),\n duration_ms: Date.now() - startedAt,\n }, error);\n throw error;\n }\n }\n\n private async downloadSerializedObject(\n object: SerializedObjectInsideBlobValue | undefined,\n blob: BlobValue | undefined,\n purpose: string,\n fields: Message = {},\n ): Promise<{ data: Uint8Array; metadata: Uint8Array; contentType?: string; encoding?: string | number }> {\n if (object == null) throw new Error(`Missing serialized object for ${purpose}`);\n if (blob == null) throw new Error(`Missing BLOB for ${purpose}`);\n const startedAt = Date.now();\n this.log(\"debug\", \"serialized object download starting\", {\n purpose,\n ...fields,\n ...this.blobLogFields(blob),\n object_offset: object.offset ?? 0,\n object_bytes: object.manifest?.size,\n metadata_bytes: object.manifest?.metadataSize,\n content_type: object.manifest?.contentType,\n encoding: object.manifest?.encoding,\n });\n try {\n const value = await downloadSerializedObjectData(\n object,\n blob,\n (message, details) => this.log(\n \"debug\",\n `blob ${message}`,\n { purpose, ...fields, ...details },\n ),\n this.controller.signal,\n );\n this.log(\"debug\", \"serialized object download completed\", {\n purpose,\n ...fields,\n ...this.blobLogFields(blob),\n object_bytes: value.data.byteLength + value.metadata.byteLength,\n data_bytes: value.data.byteLength,\n metadata_bytes: value.metadata.byteLength,\n duration_ms: Date.now() - startedAt,\n });\n return value;\n } catch (error) {\n this.log(\"error\", \"serialized object download failed\", {\n purpose,\n ...fields,\n ...this.blobLogFields(blob),\n duration_ms: Date.now() - startedAt,\n }, error);\n throw error;\n }\n }\n\n private async uploadBlob(\n blob: BlobValue | undefined,\n data: Uint8Array,\n purpose: string,\n fields: Message = {},\n ): Promise<BlobValue> {\n if (blob == null) throw new Error(`Missing BLOB for ${purpose}`);\n const startedAt = Date.now();\n this.log(\"debug\", \"blob upload starting\", {\n purpose,\n ...fields,\n ...this.blobLogFields(blob),\n upload_bytes: data.byteLength,\n });\n try {\n const uploaded = await uploadBlobData(\n blob,\n data,\n (message, details) => this.log(\"debug\", `blob ${message}`, {\n purpose,\n ...fields,\n ...details,\n }),\n this.controller.signal,\n );\n this.log(\"debug\", \"blob upload completed\", {\n purpose,\n ...fields,\n ...this.blobLogFields(uploaded),\n upload_bytes: data.byteLength,\n duration_ms: Date.now() - startedAt,\n });\n return uploaded;\n } catch (error) {\n this.log(\"error\", \"blob upload failed\", {\n purpose,\n ...fields,\n ...this.blobLogFields(blob),\n upload_bytes: data.byteLength,\n duration_ms: Date.now() - startedAt,\n }, error);\n throw error;\n }\n }\n\n private log(level: LogLevel, message: string, fields: Message = {}, error?: unknown): void {\n this.runWithoutReplayOwnership(() => {\n writeStructuredOutput(\"stderr\", () => {\n const rendered = error instanceof Error\n ? error.stack?.split(\"\\n\") ?? [`${error.name}: ${error.message}`]\n : error == null ? undefined : [String(error)];\n return {\n timestamp: new Date().toISOString(),\n level,\n component: \"typescript_function_executor_allocation\",\n message,\n allocation_id: this.allocation.allocationId,\n request_id: this.allocation.requestId,\n function_call_id: this.allocation.functionCallId,\n namespace: this.functionRef.namespace,\n application: this.functionRef.applicationName,\n application_version: this.functionRef.applicationVersion,\n function: this.functionRef.functionName,\n elapsed_ms: Date.now() - this.startedAt,\n ...fields,\n ...(rendered == null ? {} : { error: rendered }),\n };\n });\n });\n }\n\n private runWithoutReplayOwnership<T>(callback: () => T): T {\n return this.replay?.runWithoutCausalOwnership(callback) ?? callback();\n }\n}\n","import { AsyncLocalStorage, executionAsyncId } from \"node:async_hooks\";\nimport { randomUUID } from \"node:crypto\";\nimport type { Image } from \"../image.js\";\nimport { SDKUsageError } from \"./errors.js\";\nimport type { Parameter, ParameterValues, Schema } from \"./schema.js\";\nimport { schema, validateWithSchema } from \"./schema.js\";\nimport { registerDefinition } from \"./registry.js\";\n\nexport interface Retries {\n maxRetries: number;\n}\n\nexport function retries(options: Retries): Retries {\n if (\n typeof options !== \"object\"\n || options == null\n || !Number.isInteger(options.maxRetries)\n || options.maxRetries < 0\n || options.maxRetries > 10\n ) {\n throw new SDKUsageError(\"maxRetries must be an integer between 0 and 10\");\n }\n return Object.freeze({ ...options });\n}\n\nexport type Region = \"us-east-1\" | \"eu-west-1\";\n\nexport type ApplicationCapability = \"unauthenticated_requests\";\n\nexport interface FunctionOptions<\n P extends readonly Parameter<unknown>[],\n R,\n> {\n name?: string;\n parameters: P;\n returns: Schema<R>;\n description?: string;\n cpu?: number;\n memory?: number;\n ephemeralDisk?: number;\n gpu?: string | string[] | null;\n timeout?: number;\n image?: Image;\n secrets?: string[];\n retries?: Retries;\n region?: Region;\n warmContainers?: number;\n minContainers?: number;\n maxContainers?: number;\n}\n\nexport interface ApplicationOptions<\n P extends readonly Parameter<unknown>[],\n R,\n> extends FunctionOptions<P, R> {\n tags?: Record<string, string>;\n applicationRetries?: Retries;\n allow?: readonly ApplicationCapability[];\n}\n\n/** Options available when parameter and return schemas use the JSON defaults. */\nexport type SimpleFunctionOptions = Omit<\n FunctionOptions<readonly Parameter<unknown>[], unknown>,\n \"name\" | \"parameters\" | \"returns\"\n>;\n\n/** Application options available when parameter and return schemas use the JSON defaults. */\nexport type SimpleApplicationOptions = Omit<\n ApplicationOptions<readonly Parameter<unknown>[], unknown>,\n \"name\" | \"parameters\" | \"returns\"\n>;\n\nexport interface NormalizedFunctionOptions {\n description: string;\n cpu: number;\n memory: number;\n ephemeralDisk: number;\n gpu: string | string[] | null;\n timeout: number;\n image?: Image;\n secrets: string[];\n retries?: Retries;\n region?: Region;\n warmContainers?: number;\n minContainers?: number;\n maxContainers?: number;\n}\n\nexport interface ApplicationConfiguration {\n tags: Record<string, string>;\n retries: Retries;\n allow: ApplicationCapability[];\n version: string;\n}\n\nexport interface RegisteredDefinition {\n readonly name: string;\n readonly handler: (...args: unknown[]) => Promise<unknown>;\n readonly parameters: readonly Parameter<unknown>[];\n readonly returns: Schema<unknown>;\n readonly options: NormalizedFunctionOptions;\n readonly application?: ApplicationConfiguration;\n}\n\n// A string discriminator alone is valid user JSON and cannot safely identify\n// an SDK control-flow value. Symbol.for keeps the brand stable when the user\n// application and executor load separate copies of the SDK in one process.\nconst TAIL_CALL_BRAND: unique symbol = Symbol.for(\n \"tensorlake.applications.tail-call.v1\",\n);\n\nexport interface TailCall<T> {\n readonly [TAIL_CALL_BRAND]: true;\n readonly kind: \"tensorlake-tail-call\";\n readonly definition: RegisteredDefinition;\n readonly args: readonly unknown[];\n readonly _result?: T;\n}\n\nexport interface WaitOptions {\n timeout?: number;\n returnWhen?: \"all_completed\" | \"first_completed\" | \"first_failure\";\n}\n\nexport interface WaitResult<T> {\n done: FunctionFuture<T>[];\n notDone: FunctionFuture<T>[];\n}\n\nexport interface FunctionRuntime {\n invoke<T>(definition: RegisteredDefinition, args: readonly unknown[]): Promise<T>;\n runFuture<T>(future: FunctionFuture<T>): Promise<T>;\n wrapFutureWait?<T>(promise: Promise<T>): Promise<T>;\n trackMixedPromiseRace?(\n promise: Promise<unknown>,\n producers?: readonly Promise<unknown>[],\n ): void;\n trackPromiseSettlement?(\n promise: Promise<unknown>,\n onSettled: () => void,\n ): boolean;\n trackDurablePromiseConsumption?(promise: Promise<unknown>): void;\n runPromiseAggregateConstruction?<T>(callback: () => T): T;\n reduce<T>(\n definition: RegisteredDefinition,\n items: readonly unknown[],\n initial: unknown,\n hasInitial: boolean,\n ): Promise<T>;\n}\n\n// FunctionFuture observes durable promises to update its public completion\n// fields. That bookkeeping must not look like an application-level await to\n// the strict replay causality tracker. Symbol.for keeps the private observer\n// available when the application and executor use separate SDK bundles.\nexport const DURABLE_PROMISE_OBSERVER = Symbol.for(\n \"tensorlake.applications.durable-promise-observer.v1\",\n);\n\n// SDK combinators must be able to compose durable promises without making\n// their private bookkeeping look like a user continuation. The aggregate\n// returned to user code is wrapped separately.\nexport const DURABLE_PROMISE_INTERNAL_THEN = Symbol.for(\n \"tensorlake.applications.durable-promise-internal-then.v1\",\n);\n\ninterface ObservableDurablePromise<T> extends Promise<T> {\n [DURABLE_PROMISE_OBSERVER]?: (\n onfulfilled: (value: T) => void,\n onrejected: (reason: unknown) => void,\n ) => void;\n [DURABLE_PROMISE_INTERNAL_THEN]?: <TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n ) => Promise<TResult1 | TResult2>;\n}\n\n// The user application and function executor are separate bundles loaded into\n// one Node process. Store the runtime on globalThis so durable calls made by the\n// application SDK copy reach the executor SDK copy that installed the runtime.\nconst FUNCTION_RUNTIME_STORAGE_KEY = Symbol.for(\n \"tensorlake.applications.function-runtime-storage.v1\",\n);\n\nconst PROMISE_INSTRUMENTED_KEY = Symbol.for(\n \"tensorlake.applications.promise-instrumented.v3\",\n);\n\nconst PROMISE_THEN_INSTRUMENTED_KEY = Symbol.for(\n \"tensorlake.applications.promise-then-instrumented.v1\",\n);\n\nconst DURABLE_THENABLE_REGISTRY_KEY = Symbol.for(\n \"tensorlake.applications.durable-thenable-registry.v2\",\n);\n\nconst INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY = Symbol.for(\n \"tensorlake.applications.internal-promise-aggregate-depth.v1\",\n);\n\ninterface DurableAssimilationRegistration {\n active: boolean;\n readonly detach: () => void;\n}\n\ninterface DurableThenableMetadata {\n readonly aggregateExpectations: DurableAggregateExpectation[];\n readonly provenanceExpectations: DurableProvenanceExpectation[];\n}\n\ninterface DurableThenableProvenance {\n readonly metadata: DurableThenableMetadata;\n readonly assimilation?: DurableAssimilationRegistration;\n readonly detached?: true;\n}\n\ninterface DurableAggregateScope {\n settled: boolean;\n readonly metadata: Set<DurableThenableMetadata>;\n}\n\ninterface DurableAggregateExpectation {\n readonly scope: DurableAggregateScope;\n readonly creatorAsyncId: number;\n}\n\ninterface DurableProvenanceExpectation {\n readonly value: object;\n readonly creatorAsyncId: number;\n}\n\nexport interface DurableAssimilation {\n finish(): void;\n link<T extends object>(value: T): T;\n}\n\nlet futureCompletionCounter = 0;\n\nfunction runtimeStorage(): AsyncLocalStorage<FunctionRuntime> {\n const target = globalThis as typeof globalThis & {\n [FUNCTION_RUNTIME_STORAGE_KEY]?: AsyncLocalStorage<FunctionRuntime>;\n };\n target[FUNCTION_RUNTIME_STORAGE_KEY] ??= new AsyncLocalStorage<FunctionRuntime>();\n return target[FUNCTION_RUNTIME_STORAGE_KEY];\n}\n\nexport function currentFunctionRuntime(): FunctionRuntime | undefined {\n return runtimeStorage().getStore();\n}\n\nexport function runWithFunctionRuntime<T>(\n runtime: FunctionRuntime,\n callback: () => Promise<T>,\n): Promise<T> {\n return runtimeStorage().run(runtime, callback);\n}\n\nexport class FunctionFuture<T> implements PromiseLike<T> {\n readonly id = randomUUID();\n readonly definition: RegisteredDefinition;\n readonly args: readonly unknown[];\n private promise?: Promise<T>;\n private startDelaySeconds = 0;\n private completionOrder?: number;\n private failed = false;\n exception?: unknown;\n done = false;\n\n constructor(definition: RegisteredDefinition, args: readonly unknown[]) {\n this.definition = definition;\n this.args = args;\n registerDurableThenable(this);\n }\n\n run(): this {\n if (this.promise != null) throw new SDKUsageError(`Future ${this.id} is already running`);\n const runtime = currentFunctionRuntime();\n const promise = runtime == null\n ? executeHandler<T>(this.definition, this.args)\n : runtime.runFuture(this);\n // The future and its runtime promise are two views of the same durable\n // operation. Sharing provenance lets Promise.resolve/fan-in wrappers keep\n // the exact durable contender identity.\n registerDurableThenable(promise, this);\n this.promise = promise;\n const onfulfilled = (value: T) => {\n this.done = true;\n this.completionOrder = futureCompletionCounter;\n futureCompletionCounter += 1;\n return value;\n };\n const onrejected = (error: unknown) => {\n this.done = true;\n this.failed = true;\n this.exception = error;\n this.completionOrder = futureCompletionCounter;\n futureCompletionCounter += 1;\n };\n const observer = (promise as ObservableDurablePromise<T>)[DURABLE_PROMISE_OBSERVER];\n if (observer != null) {\n observer.call(promise, onfulfilled, onrejected);\n } else {\n void promise.then(\n (value) => {\n onfulfilled(value);\n },\n (error) => {\n onrejected(error);\n },\n );\n }\n // The completion observer handles rejection without changing `this.promise`,\n // so result()/await still receive the original rejection while Node does not\n // treat an intentionally unawaited future as an unhandled rejection.\n return this;\n }\n\n runLater(delaySeconds: number): this {\n if (!Number.isFinite(delaySeconds) || delaySeconds < 0) {\n throw new SDKUsageError(\"Future delay must be a non-negative finite number\");\n }\n if (this.promise != null) {\n throw new SDKUsageError(`Future ${this.id} is already running`);\n }\n this.startDelaySeconds = delaySeconds;\n return this.run();\n }\n\n get delaySeconds(): number {\n return this.startDelaySeconds;\n }\n\n result(): Promise<T> {\n if (this.promise == null) this.run();\n return this.promise as Promise<T>;\n }\n\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n ): PromiseLike<TResult1 | TResult2> {\n return this.result().then(onfulfilled, onrejected);\n }\n\n static wait<T>(futures: FunctionFuture<T>[], options: WaitOptions = {}): Promise<WaitResult<T>> {\n const completion = FunctionFuture.waitForFutures(futures, options);\n // Returning the runtime wrapper lets strict replay observe when user code\n // awaits this aggregate promise. Merely creating a Future.wait remains\n // fire-and-forget and must not trigger a mismatch.\n return currentFunctionRuntime()?.wrapFutureWait?.(completion) ?? completion;\n }\n\n private static async waitForFutures<T>(\n futures: FunctionFuture<T>[],\n options: WaitOptions,\n ): Promise<WaitResult<T>> {\n const returnWhen = options.returnWhen ?? \"all_completed\";\n if (![\"all_completed\", \"first_completed\", \"first_failure\"].includes(returnWhen)) {\n throw new SDKUsageError(`Unsupported Future.wait returnWhen value '${returnWhen}'`);\n }\n if (options.timeout != null && (!Number.isFinite(options.timeout) || options.timeout < 0)) {\n throw new SDKUsageError(\"Future.wait timeout must be a non-negative finite number\");\n }\n futures.forEach((future) => {\n if (future.promise == null) future.run();\n });\n const alreadyDone = futures.filter((future) => future.done);\n if (\n alreadyDone.length > 0\n && (\n returnWhen === \"first_completed\"\n || (\n returnWhen === \"first_failure\"\n && alreadyDone.some((future) => future.failed)\n )\n )\n ) {\n return {\n done: alreadyDone,\n notDone: futures.filter((future) => !future.done),\n };\n }\n const pending = futures.filter((future) => !future.done);\n if (pending.length === 0) {\n return { done: [...futures], notDone: [] };\n }\n let wait: Promise<FutureWaitOutcome<T>>;\n if (returnWhen === \"all_completed\") {\n wait = internalPromiseAll(\n pending.map((future) => internalDurableThen(future.result(),\n () => undefined,\n () => undefined,\n )),\n ).then(() => ({ kind: \"all_completed\" }));\n } else if (returnWhen === \"first_completed\") {\n wait = internalPromiseRace(\n pending.map((future) => internalDurableThen(future.result(),\n () => ({ kind: \"cutoff\", future } as const),\n () => ({ kind: \"cutoff\", future } as const),\n )),\n );\n } else {\n wait = new Promise((resolve) => {\n let remaining = pending.length;\n for (const future of pending) {\n void internalDurableThen(\n future.result(),\n () => {\n remaining -= 1;\n if (remaining === 0) resolve({ kind: \"all_completed\" });\n },\n () => resolve({ kind: \"cutoff\", future }),\n );\n }\n });\n }\n const outcome = await waitUntilOrTimeout(wait, options.timeout);\n if (outcome.kind === \"cutoff\") {\n const completionCutoff = outcome.future.completionOrder;\n if (completionCutoff == null) {\n throw new SDKUsageError(\"Future.wait winner has no completion order\");\n }\n const doneSet = new Set(alreadyDone);\n for (const future of pending) {\n if (\n future.done\n && future.completionOrder != null\n && future.completionOrder <= completionCutoff\n ) {\n doneSet.add(future);\n }\n }\n return {\n done: futures.filter((future) => doneSet.has(future)),\n notDone: futures.filter((future) => !doneSet.has(future)),\n };\n }\n return {\n done: futures.filter((future) => future.done),\n notDone: futures.filter((future) => !future.done),\n };\n }\n}\n\ntype FutureWaitOutcome<T> =\n | { kind: \"all_completed\" }\n | { kind: \"cutoff\"; future: FunctionFuture<T> };\n\nasync function waitUntilOrTimeout<T>(\n promise: Promise<T>,\n timeoutSeconds?: number,\n): Promise<T | { kind: \"timeout\" }> {\n if (timeoutSeconds == null) {\n return promise;\n }\n let timer: NodeJS.Timeout | undefined;\n try {\n return await internalPromiseRace<T | { kind: \"timeout\" }>([\n promise,\n new Promise<{ kind: \"timeout\" }>((resolve) => {\n timer = setTimeout(() => resolve({ kind: \"timeout\" }), timeoutSeconds * 1000);\n }),\n ]);\n } finally {\n if (timer != null) clearTimeout(timer);\n }\n}\n\ntype Awaitable<T> = T | PromiseLike<T>;\ntype AwaitableIterable<T> = Iterable<Awaitable<T>> | PromiseLike<Iterable<Awaitable<T>>>;\n\nfunction isDurableThenable(value: unknown): boolean {\n if ((typeof value !== \"object\" && typeof value !== \"function\") || value == null) {\n return false;\n }\n return durableThenableRegistry().has(value);\n}\n\nexport function isDetachedDurableThenable(value: unknown): boolean {\n const provenance = provenanceForDurableThenable(value);\n return provenance?.detached === true\n || (provenance?.assimilation != null && !provenance.assimilation.active);\n}\n\nfunction durableThenableRegistry(): WeakMap<object, DurableThenableProvenance> {\n const target = globalThis as typeof globalThis & {\n [DURABLE_THENABLE_REGISTRY_KEY]?: WeakMap<object, DurableThenableProvenance>;\n };\n target[DURABLE_THENABLE_REGISTRY_KEY] ??=\n new WeakMap<object, DurableThenableProvenance>();\n return target[DURABLE_THENABLE_REGISTRY_KEY];\n}\n\nfunction newDurableThenableMetadata(): DurableThenableMetadata {\n return {\n aggregateExpectations: [],\n provenanceExpectations: [],\n };\n}\n\nfunction metadataForDurableThenable(value: unknown): DurableThenableMetadata | undefined {\n return provenanceForDurableThenable(value)?.metadata;\n}\n\nfunction provenanceForDurableThenable(\n value: unknown,\n): DurableThenableProvenance | undefined {\n if ((typeof value !== \"object\" && typeof value !== \"function\") || value == null) {\n return undefined;\n }\n return durableThenableRegistry().get(value);\n}\n\nexport function registerDurableThenable<T extends object>(\n value: T,\n source?: object,\n): T {\n const registry = durableThenableRegistry();\n const metadata = source == null\n ? registry.get(value)?.metadata ?? newDurableThenableMetadata()\n : registry.get(source)?.metadata ?? newDurableThenableMetadata();\n registry.set(value, { metadata });\n if (source != null && !registry.has(source)) registry.set(source, { metadata });\n return value;\n}\n\nfunction registerDetachedDurableThenable<T extends object>(value: T): T {\n const registry = durableThenableRegistry();\n registry.set(value, {\n metadata: registry.get(value)?.metadata ?? newDurableThenableMetadata(),\n detached: true,\n });\n return value;\n}\n\nfunction inheritDurableThenable<T extends object>(value: T, source: object): T {\n const provenance = durableThenableRegistry().get(source);\n if (provenance == null) return value;\n durableThenableRegistry().set(value, provenance);\n if (provenance.assimilation == null) {\n provenance.metadata.provenanceExpectations.push({\n value,\n creatorAsyncId: executionAsyncId(),\n });\n }\n return value;\n}\n\n/**\n * Associates a replay-aware durable assimilation with its durable provenance.\n *\n * The returned handle marks normal settlement and links derived promises to\n * this exact assimilation. Promise aggregate construction can detach the\n * aggregate's internal reaction so it is not mistaken for application code\n * awaiting the returned aggregate.\n */\nexport function registerDurableAssimilation(\n value: object,\n detach: () => void,\n): DurableAssimilation {\n const metadata = metadataForDurableThenable(value);\n if (metadata == null) {\n return {\n finish: () => undefined,\n link: (linked) => linked,\n };\n }\n const registration: DurableAssimilationRegistration = {\n active: true,\n detach,\n };\n const provenanceIndex = metadata.provenanceExpectations.findIndex((expectation) =>\n expectation.creatorAsyncId !== executionAsyncId()\n );\n if (provenanceIndex >= 0) {\n const [expectation] = metadata.provenanceExpectations.splice(provenanceIndex, 1);\n durableThenableRegistry().set(expectation.value, {\n metadata,\n assimilation: registration,\n });\n }\n const expectationIndex = metadata.aggregateExpectations.findIndex((expectation) =>\n !expectation.scope.settled\n && expectation.creatorAsyncId !== executionAsyncId()\n );\n if (expectationIndex >= 0) {\n const [expectation] = metadata.aggregateExpectations.splice(expectationIndex, 1);\n associateAssimilationWithAggregate(registration, expectation.scope);\n }\n return {\n finish: () => finishDurableAssimilation(registration),\n link: <T extends object>(linked: T): T => {\n durableThenableRegistry().set(linked, {\n metadata,\n assimilation: registration,\n });\n return linked;\n },\n };\n}\n\nfunction associateAssimilationWithAggregate(\n registration: DurableAssimilationRegistration,\n scope: DurableAggregateScope,\n): void {\n if (!registration.active || scope.settled) return;\n finishDurableAssimilation(registration);\n registration.detach();\n}\n\nfunction finishDurableAssimilation(registration: DurableAssimilationRegistration): void {\n if (!registration.active) return;\n registration.active = false;\n}\n\nfunction trackDurableAggregate(\n runtime: FunctionRuntime,\n result: Promise<unknown>,\n durableContenders: readonly unknown[],\n markResult: boolean,\n): void {\n const scope: DurableAggregateScope = {\n settled: false,\n metadata: new Set<DurableThenableMetadata>(),\n };\n if (markResult) {\n // Constructing an aggregate attaches internal reactions to its durable\n // inputs, but that does not mean application code is awaiting the result.\n // Mark the aggregate itself as detached so a later user reaction becomes\n // the durable assimilation observed by strict replay.\n registerDetachedDurableThenable(result);\n }\n const creatorAsyncId = executionAsyncId();\n for (const contender of durableContenders) {\n const provenance = provenanceForDurableThenable(contender);\n if (provenance == null) continue;\n if (provenance.assimilation != null) {\n associateAssimilationWithAggregate(provenance.assimilation, scope);\n } else {\n provenance.metadata.aggregateExpectations.push({\n scope,\n creatorAsyncId,\n });\n }\n if (scope.metadata.has(provenance.metadata)) continue;\n const { metadata } = provenance;\n scope.metadata.add(metadata);\n }\n const settle = () => {\n if (scope.settled) return;\n scope.settled = true;\n for (const metadata of scope.metadata) {\n for (let index = metadata.aggregateExpectations.length - 1; index >= 0; index -= 1) {\n if (metadata.aggregateExpectations[index].scope === scope) {\n metadata.aggregateExpectations.splice(index, 1);\n }\n }\n }\n scope.metadata.clear();\n };\n // Promise.prototype.then still performs a user-observable Symbol.species\n // lookup even when invoked directly. The executor observes the native\n // promiseResolve async hook instead, so bookkeeping cannot call user code or\n // construct an extra subclass promise.\n if (runtime.trackPromiseSettlement?.(result, settle) !== true) settle();\n}\n\ninterface PromiseAggregateObservation {\n readonly ordinaryLifetime: Promise<void>;\n allOrdinaryValuesObservable: boolean;\n observeFulfillment(): void;\n observeRejection(): void;\n finishIteration(contenderCount: number): void;\n}\n\nfunction promiseAggregateObservation(\n kind: \"all\" | \"all_settled\" | \"any\",\n): PromiseAggregateObservation {\n let settleLifetime!: () => void;\n const ordinaryLifetime = new Promise<void>((resolve) => {\n settleLifetime = resolve;\n });\n let contenderCount: number | undefined;\n let fulfillmentCount = 0;\n let rejectionCount = 0;\n let settled = false;\n const maybeSettle = () => {\n if (settled) return;\n const canNoLongerAdvance = kind === \"any\"\n ? contenderCount != null && rejectionCount === contenderCount\n : kind === \"all\"\n ? rejectionCount > 0\n || (contenderCount != null && fulfillmentCount === contenderCount)\n : contenderCount != null\n && fulfillmentCount + rejectionCount === contenderCount;\n if (!canNoLongerAdvance) return;\n settled = true;\n settleLifetime();\n };\n return {\n ordinaryLifetime,\n allOrdinaryValuesObservable: true,\n observeFulfillment: () => {\n fulfillmentCount += 1;\n maybeSettle();\n },\n observeRejection: () => {\n rejectionCount += 1;\n maybeSettle();\n },\n finishIteration: (count) => {\n contenderCount = count;\n maybeSettle();\n },\n };\n}\n\nfunction observePromiseAggregateContender(\n normalized: unknown,\n observation: PromiseAggregateObservation,\n): unknown {\n if (\n (typeof normalized !== \"object\" && typeof normalized !== \"function\")\n || normalized == null\n ) {\n observation.allOrdinaryValuesObservable = false;\n return normalized;\n }\n let observedSettled = false;\n const observed = Object.create(null) as object;\n Object.defineProperty(observed, \"then\", {\n configurable: true,\n get: () => {\n const then = Reflect.get(normalized, \"then\", normalized) as unknown;\n if (typeof then !== \"function\") return then;\n return function observedThen(\n this: unknown,\n onfulfilled: unknown,\n onrejected: unknown,\n ): unknown {\n return Reflect.apply(then, normalized, [\n function observedFulfillment(this: unknown, value: unknown): unknown {\n if (!observedSettled) {\n observedSettled = true;\n observation.observeFulfillment();\n }\n return typeof onfulfilled === \"function\"\n ? Reflect.apply(onfulfilled, this, [value])\n : undefined;\n },\n function observedRejection(this: unknown, reason: unknown): unknown {\n if (!observedSettled) {\n observedSettled = true;\n observation.observeRejection();\n }\n if (typeof onrejected === \"function\") {\n return Reflect.apply(onrejected, this, [reason]);\n }\n throw reason;\n },\n ]);\n };\n },\n });\n return observed;\n}\n\n/**\n * Lets a native Promise aggregate algorithm retain control of iteration and\n * settlement while exposing each constructor-normalized contender.\n *\n * The facade constructs the real Promise subclass and delegates its `resolve`\n * lookup and calls back to that subclass. This preserves custom static resolve\n * behavior and the public result type without resolving an input twice.\n */\nfunction observedPromiseConstructor(\n constructor: PromiseConstructor,\n observeNormalized: (normalized: unknown) => unknown,\n): PromiseConstructor {\n const facade = function PromiseAggregateObservedConstructor(\n executor: (\n resolve: (value: unknown) => void,\n reject: (reason?: unknown) => void,\n ) => void,\n ): Promise<unknown> {\n return Reflect.construct(\n constructor,\n [executor],\n constructor,\n ) as Promise<unknown>;\n } as unknown as PromiseConstructor;\n Object.defineProperty(facade, \"resolve\", {\n configurable: true,\n get: () => {\n const promiseResolve = Reflect.get(constructor, \"resolve\", constructor) as unknown;\n if (typeof promiseResolve !== \"function\") return promiseResolve;\n return (value: unknown): unknown => {\n const normalized = Reflect.apply(promiseResolve, constructor, [value]) as unknown;\n return observeNormalized(normalized);\n };\n },\n });\n return facade;\n}\n\nfunction internalDurableThen<T, TResult1 = T, TResult2 = never>(\n promise: Promise<T>,\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n): Promise<TResult1 | TResult2> {\n const internalThen = (promise as ObservableDurablePromise<T>)[DURABLE_PROMISE_INTERNAL_THEN];\n if (internalThen != null) {\n return internalThen.call(\n promise,\n onfulfilled,\n onrejected,\n ) as Promise<TResult1 | TResult2>;\n }\n return promise.then(onfulfilled, onrejected);\n}\n\nfunction internalAwaitable<T>(value: Awaitable<T>): Promise<T> {\n if ((typeof value === \"object\" || typeof value === \"function\") && value != null) {\n const internalThen = (\n value as Partial<ObservableDurablePromise<T>>\n )[DURABLE_PROMISE_INTERNAL_THEN];\n if (internalThen != null) {\n return internalThen.call(\n value,\n (resolved) => resolved,\n (error) => {\n throw error;\n },\n ) as Promise<T>;\n }\n }\n return Promise.resolve(value);\n}\n\nasync function resolveAwaitableIterable<T>(\n items: AwaitableIterable<T>,\n): Promise<T[]> {\n const iterable = await internalAwaitable(items);\n return internalPromiseAll([...iterable].map((item) => internalAwaitable(item)));\n}\n\nfunction wrapDurableAggregate<T>(completion: Promise<T>): Promise<T> {\n return currentFunctionRuntime()?.wrapFutureWait?.(completion) ?? completion;\n}\n\nfunction runInternalPromiseAggregate<T>(callback: () => T): T {\n const target = globalThis as typeof globalThis & {\n [INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY]?: number;\n };\n target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] =\n (target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] ?? 0) + 1;\n try {\n return callback();\n } finally {\n const remaining = (target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] ?? 1) - 1;\n if (remaining === 0) delete target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY];\n else target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] = remaining;\n }\n}\n\nfunction isInternalPromiseAggregate(): boolean {\n const target = globalThis as typeof globalThis & {\n [INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY]?: number;\n };\n return (target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] ?? 0) > 0;\n}\n\nfunction internalPromiseAll<T>(\n values: Iterable<T | PromiseLike<T>>,\n): Promise<Awaited<T>[]> {\n return runInternalPromiseAggregate(() => Promise.all(values));\n}\n\nfunction internalPromiseRace<T>(\n values: Iterable<T | PromiseLike<T>>,\n): Promise<Awaited<T>> {\n return runInternalPromiseAggregate(() => Promise.race(values));\n}\n\nexport function installPromiseInstrumentation(): void {\n const target = globalThis as typeof globalThis & {\n [PROMISE_INSTRUMENTED_KEY]?: true;\n [PROMISE_THEN_INSTRUMENTED_KEY]?: true;\n };\n if (target[PROMISE_THEN_INSTRUMENTED_KEY] !== true) {\n const originalThen = Promise.prototype.then;\n Object.defineProperty(Promise.prototype, \"then\", {\n ...Object.getOwnPropertyDescriptor(Promise.prototype, \"then\"),\n value: function then(\n this: Promise<unknown>,\n onfulfilled?: ((value: unknown) => unknown) | null,\n onrejected?: ((reason: unknown) => unknown) | null,\n ): Promise<unknown> {\n const result = Reflect.apply(\n originalThen,\n this,\n [onfulfilled, onrejected],\n ) as Promise<unknown>;\n if (isDetachedDurableThenable(this)) {\n currentFunctionRuntime()?.trackDurablePromiseConsumption?.(result);\n }\n return result;\n },\n });\n target[PROMISE_THEN_INSTRUMENTED_KEY] = true;\n }\n if (target[PROMISE_INSTRUMENTED_KEY] === true) return;\n const originalRace = Promise.race;\n const originalAny = Promise.any;\n const originalAll = Promise.all;\n const originalAllSettled = Promise.allSettled;\n const originalResolve = Promise.resolve;\n\n // Promise.resolve normally hides a durable Promise subclass inside a native\n // Promise. Preserve the durable provenance on that wrapper so a subsequent\n // all/allSettled/race/any can still distinguish it from an independent\n // contender.\n Object.defineProperty(Promise, \"resolve\", {\n ...Object.getOwnPropertyDescriptor(Promise, \"resolve\"),\n value: function resolve<T>(\n this: PromiseConstructor,\n value: T | PromiseLike<T>,\n ): Promise<Awaited<T>> {\n const result = Reflect.apply(originalResolve, this, [value]) as Promise<Awaited<T>>;\n if (isDurableThenable(value)) inheritDurableThenable(result, value as object);\n return result;\n },\n });\n\n Object.defineProperty(Promise, \"race\", {\n ...Object.getOwnPropertyDescriptor(Promise, \"race\"),\n value: function race<T>(\n this: PromiseConstructor,\n values: Iterable<T | PromiseLike<T>>,\n ): Promise<Awaited<T>> {\n const runtime = currentFunctionRuntime();\n if (runtime?.trackMixedPromiseRace == null) {\n return Reflect.apply(originalRace, this, [values]) as Promise<Awaited<T>>;\n }\n const durableContenders: unknown[] = [];\n let ordinaryContenderCount = 0;\n const trackedValues = {\n *[Symbol.iterator](): Iterator<T | PromiseLike<T>> {\n for (const value of values) {\n yield value;\n }\n },\n };\n const observedConstructor = observedPromiseConstructor(\n this,\n (normalized) => {\n if (isDurableThenable(normalized)) {\n durableContenders.push(normalized);\n } else {\n ordinaryContenderCount += 1;\n }\n return normalized;\n },\n );\n const construct = () =>\n Reflect.apply(\n originalRace,\n observedConstructor,\n [trackedValues],\n ) as Promise<Awaited<T>>;\n const result = runtime.runPromiseAggregateConstruction?.(construct) ?? construct();\n if (durableContenders.length > 0) {\n trackDurableAggregate(\n runtime,\n result,\n durableContenders,\n !isInternalPromiseAggregate(),\n );\n }\n if (\n durableContenders.length > 0\n && ordinaryContenderCount > 0\n ) {\n runtime.trackMixedPromiseRace(result);\n }\n return result;\n },\n });\n\n Object.defineProperty(Promise, \"any\", {\n ...Object.getOwnPropertyDescriptor(Promise, \"any\"),\n value: function any<T>(\n this: PromiseConstructor,\n values: Iterable<T | PromiseLike<T>>,\n ): Promise<Awaited<T>> {\n const runtime = currentFunctionRuntime();\n if (runtime?.trackMixedPromiseRace == null) {\n return Reflect.apply(originalAny, this, [values]) as Promise<Awaited<T>>;\n }\n const durableContenders: unknown[] = [];\n let ordinaryContenderCount = 0;\n const observation = promiseAggregateObservation(\"any\");\n const trackedValues = {\n *[Symbol.iterator](): Iterator<T | PromiseLike<T>> {\n for (const value of values) {\n yield value;\n }\n },\n };\n const observedConstructor = observedPromiseConstructor(\n this,\n (normalized) => {\n if (isDurableThenable(normalized)) {\n durableContenders.push(normalized);\n return normalized;\n }\n ordinaryContenderCount += 1;\n return observePromiseAggregateContender(normalized, observation);\n },\n );\n const construct = () =>\n Reflect.apply(\n originalAny,\n observedConstructor,\n [trackedValues],\n ) as Promise<Awaited<T>>;\n const result = runtime.runPromiseAggregateConstruction?.(construct) ?? construct();\n observation.finishIteration(ordinaryContenderCount);\n if (durableContenders.length > 0) {\n trackDurableAggregate(\n runtime,\n result,\n durableContenders,\n !isInternalPromiseAggregate(),\n );\n }\n if (durableContenders.length > 0 && ordinaryContenderCount > 0) {\n if (\n observation.allOrdinaryValuesObservable\n ) {\n // Once every ordinary contender rejects, only a durable contender\n // can advance Promise.any. A fulfillment may itself be a pending\n // promise that the public aggregate adopts, so the ordinary gate\n // must not expire merely because its fulfillment callback ran.\n // Stop treating the ordinary path as a producer when either it or\n // the public aggregate settles. The latter covers a durable winner\n // as well as fulfilled-value adoption and abrupt iterator failures.\n runtime.trackMixedPromiseRace(result, [observation.ordinaryLifetime, result]);\n } else {\n // A non-object custom resolve result makes native Promise.any reject\n // the aggregate. Retain that aggregate as the producer until the\n // rejection becomes observable.\n runtime.trackMixedPromiseRace(result);\n }\n }\n return result;\n },\n });\n\n Object.defineProperty(Promise, \"all\", {\n ...Object.getOwnPropertyDescriptor(Promise, \"all\"),\n value: function all<T>(\n this: PromiseConstructor,\n values: Iterable<T | PromiseLike<T>>,\n ): Promise<Awaited<T>[]> {\n const runtime = currentFunctionRuntime();\n if (runtime?.trackMixedPromiseRace == null) {\n return Reflect.apply(originalAll, this, [values]) as Promise<Awaited<T>[]>;\n }\n const durableContenders: unknown[] = [];\n let ordinaryContenderCount = 0;\n const observation = promiseAggregateObservation(\"all\");\n const trackedValues = {\n *[Symbol.iterator](): Iterator<T | PromiseLike<T>> {\n for (const value of values) {\n yield value;\n }\n },\n };\n const observedConstructor = observedPromiseConstructor(\n this,\n (normalized) => {\n if (isDurableThenable(normalized)) {\n durableContenders.push(normalized);\n return normalized;\n }\n ordinaryContenderCount += 1;\n return observePromiseAggregateContender(normalized, observation);\n },\n );\n const construct = () =>\n Reflect.apply(\n originalAll,\n observedConstructor,\n [trackedValues],\n ) as Promise<Awaited<T>[]>;\n const result = runtime.runPromiseAggregateConstruction?.(construct) ?? construct();\n observation.finishIteration(ordinaryContenderCount);\n if (durableContenders.length > 0) {\n trackDurableAggregate(\n runtime,\n result,\n durableContenders,\n !isInternalPromiseAggregate(),\n );\n }\n if (durableContenders.length > 0 && ordinaryContenderCount > 0) {\n if (\n observation.allOrdinaryValuesObservable\n ) {\n // Ordinary inputs can advance Promise.all until one rejects or all\n // fulfill. The non-rejecting lifetime gate models that boundary\n // without observing the public result or invoking a thenable twice.\n runtime.trackMixedPromiseRace(result, [observation.ordinaryLifetime, result]);\n } else {\n // A custom resolve result that is not thenable makes the public\n // aggregate reject. Its own settlement is the only observable\n // producer boundary available.\n runtime.trackMixedPromiseRace(result);\n }\n }\n return result;\n },\n });\n\n Object.defineProperty(Promise, \"allSettled\", {\n ...Object.getOwnPropertyDescriptor(Promise, \"allSettled\"),\n value: function allSettled<T>(\n this: PromiseConstructor,\n values: Iterable<T | PromiseLike<T>>,\n ): Promise<PromiseSettledResult<Awaited<T>>[]> {\n const runtime = currentFunctionRuntime();\n if (runtime?.trackMixedPromiseRace == null) {\n return Reflect.apply(\n originalAllSettled,\n this,\n [values],\n ) as Promise<PromiseSettledResult<Awaited<T>>[]>;\n }\n const durableContenders: unknown[] = [];\n let ordinaryContenderCount = 0;\n const observation = promiseAggregateObservation(\"all_settled\");\n const trackedValues = {\n *[Symbol.iterator](): Iterator<T | PromiseLike<T>> {\n for (const value of values) yield value;\n },\n };\n const observedConstructor = observedPromiseConstructor(\n this,\n (normalized) => {\n if (isDurableThenable(normalized)) {\n durableContenders.push(normalized);\n return normalized;\n }\n ordinaryContenderCount += 1;\n return observePromiseAggregateContender(normalized, observation);\n },\n );\n const construct = () =>\n Reflect.apply(\n originalAllSettled,\n observedConstructor,\n [trackedValues],\n ) as Promise<PromiseSettledResult<Awaited<T>>[]>;\n const result = runtime.runPromiseAggregateConstruction?.(construct) ?? construct();\n observation.finishIteration(ordinaryContenderCount);\n if (durableContenders.length > 0) {\n trackDurableAggregate(\n runtime,\n result,\n durableContenders,\n !isInternalPromiseAggregate(),\n );\n }\n if (durableContenders.length > 0 && ordinaryContenderCount > 0) {\n if (observation.allOrdinaryValuesObservable) {\n // Ordinary inputs can advance Promise.allSettled until every one has\n // settled. The aggregate itself covers abrupt iterator/resolve\n // failures and durable completion.\n runtime.trackMixedPromiseRace(result, [observation.ordinaryLifetime, result]);\n } else {\n runtime.trackMixedPromiseRace(result);\n }\n }\n return result;\n },\n });\n target[PROMISE_INSTRUMENTED_KEY] = true;\n}\n\nexport interface RegisteredFunction<Args extends readonly unknown[], Result> {\n (...args: Args): Promise<Result>;\n readonly definition: RegisteredDefinition;\n future(...args: Args): FunctionFuture<Result>;\n map(items: AwaitableIterable<Args[0]>): Promise<Result[]>;\n reduce(\n items: AwaitableIterable<Args[1]>,\n initial?: Args[0],\n ): Promise<Result>;\n tailCall(...args: Args): TailCall<Result>;\n}\n\nfunction normalizeOptions(options: FunctionOptions<readonly Parameter<unknown>[], unknown>): NormalizedFunctionOptions {\n validateGPUOption(options.gpu);\n if (options.secrets != null && !Array.isArray(options.secrets)) {\n throw new SDKUsageError(\"secrets must be an array of non-empty strings\");\n }\n const normalizedRetries = options.retries == null\n ? undefined\n : retries(options.retries);\n const result: NormalizedFunctionOptions = {\n description: options.description ?? \"\",\n cpu: options.cpu ?? 1,\n memory: options.memory ?? 1,\n ephemeralDisk: options.ephemeralDisk ?? 10,\n gpu: Array.isArray(options.gpu) ? [...options.gpu] : options.gpu ?? null,\n timeout: options.timeout ?? 300,\n image: options.image,\n secrets: [...(options.secrets ?? [])],\n retries: normalizedRetries,\n region: options.region,\n warmContainers: options.warmContainers,\n minContainers: options.minContainers,\n maxContainers: options.maxContainers,\n };\n if (!Number.isFinite(result.cpu) || result.cpu <= 0) throw new SDKUsageError(\"cpu must be greater than zero\");\n if (!Number.isFinite(result.memory) || result.memory <= 0) throw new SDKUsageError(\"memory must be greater than zero\");\n if (!Number.isFinite(result.ephemeralDisk) || result.ephemeralDisk <= 0) throw new SDKUsageError(\"ephemeralDisk must be greater than zero\");\n if (!Number.isInteger(result.timeout) || result.timeout <= 0 || result.timeout > 86_400) {\n throw new SDKUsageError(\"timeout must be an integer between 1 and 86400 seconds\");\n }\n for (const [label, value] of [\n [\"warmContainers\", result.warmContainers],\n [\"minContainers\", result.minContainers],\n [\"maxContainers\", result.maxContainers],\n ] as const) {\n if (value != null && (!Number.isInteger(value) || value < 0)) {\n throw new SDKUsageError(`${label} must be a non-negative integer`);\n }\n }\n if (result.minContainers != null && result.maxContainers != null && result.minContainers > result.maxContainers) {\n throw new SDKUsageError(\"minContainers cannot exceed maxContainers\");\n }\n if (result.warmContainers != null && result.maxContainers != null && result.warmContainers > result.maxContainers) {\n throw new SDKUsageError(\"warmContainers cannot exceed maxContainers\");\n }\n if (result.region != null && ![\"us-east-1\", \"eu-west-1\"].includes(result.region)) {\n throw new SDKUsageError(`Unsupported region '${result.region}'`);\n }\n if (result.secrets.some((secret) => typeof secret !== \"string\" || secret.length === 0)) {\n throw new SDKUsageError(\"secrets must contain non-empty strings\");\n }\n return result;\n}\n\nfunction validateGPUOption(value: unknown): void {\n if (value == null) return;\n const values = Array.isArray(value) ? value : [value];\n for (const setting of values) {\n if (typeof setting !== \"string\") {\n throw new SDKUsageError(\"gpu must be a GPU model or an array of GPU models\");\n }\n const [model, countText, ...extra] = setting.split(\":\");\n const count = countText == null ? 1 : Number(countText);\n if (\n !model\n || extra.length > 0\n || !Number.isInteger(count)\n || count <= 0\n || (countText != null && String(count) !== countText)\n ) {\n throw new SDKUsageError(`Invalid GPU setting '${setting}'`);\n }\n }\n}\n\nfunction validateArguments(definition: RegisteredDefinition, supplied: readonly unknown[]): unknown[] {\n const args = [...supplied];\n if (args.length > definition.parameters.length) {\n throw new SDKUsageError(`${definition.name} expected at most ${definition.parameters.length} arguments, received ${args.length}`);\n }\n definition.parameters.forEach((parameter, index) => {\n if (index >= args.length || args[index] === undefined) {\n if (parameter.hasDefault) args[index] = parameter.defaultValue;\n else if (parameter.required) throw new SDKUsageError(`${definition.name} is missing argument '${parameter.name}'`);\n return;\n }\n validateWithSchema(parameter.schema, args[index], `${definition.name}.${parameter.name}`);\n });\n return args;\n}\n\nexport async function executeHandler<T>(\n definition: RegisteredDefinition,\n suppliedArgs: readonly unknown[],\n): Promise<T> {\n const output = await executeHandlerResult<T>(definition, suppliedArgs);\n if (isTailCall(output)) {\n const runtime = currentFunctionRuntime();\n if (runtime == null) return executeHandler<T>(output.definition, output.args);\n return runtime.invoke<T>(output.definition, output.args);\n }\n return output;\n}\n\n/** Runs one handler frame without resolving a tail call. Used by language executors. */\nexport async function executeHandlerResult<T>(\n definition: RegisteredDefinition,\n suppliedArgs: readonly unknown[],\n): Promise<T | TailCall<T>> {\n const args = validateArguments(definition, suppliedArgs);\n const result = definition.handler(...args);\n if (result == null || typeof (result as PromiseLike<unknown>).then !== \"function\") {\n throw new SDKUsageError(`Tensorlake handler '${definition.name}' must be async and return a Promise`);\n }\n const output = await result;\n if (isTailCall(output)) {\n return output as TailCall<T>;\n }\n validateWithSchema(definition.returns, output, `${definition.name} return value`);\n return output as T;\n}\n\nexport function isTailCall(value: unknown): value is TailCall<unknown> {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Partial<TailCall<unknown>>;\n return candidate[TAIL_CALL_BRAND] === true\n && candidate.kind === \"tensorlake-tail-call\"\n && typeof candidate.definition === \"object\"\n && candidate.definition != null\n && Array.isArray(candidate.args);\n}\n\nfunction createRegisteredFunction<Args extends readonly unknown[], Result>(\n definition: RegisteredDefinition,\n): RegisteredFunction<Args, Result> {\n const callable = ((...args: Args): Promise<Result> => {\n const runtime = currentFunctionRuntime();\n return runtime == null\n ? executeHandler<Result>(definition, args)\n : runtime.invoke<Result>(definition, args);\n }) as RegisteredFunction<Args, Result>;\n Object.defineProperties(callable, {\n definition: { value: definition, enumerable: true },\n future: { value: (...args: Args) => new FunctionFuture<Result>(definition, args) },\n map: {\n value: (items: AwaitableIterable<Args[0]>) => {\n // Resolve inputs before assigning durable IDs. Awaiting each input inside\n // the invocation loop would make call order depend on promise timing,\n // allowing strict replay to associate a recorded result with a different\n // input while still matching the durable event sequence.\n const completion = (async () => {\n const resolvedItems = await resolveAwaitableIterable(items);\n return internalPromiseAll(\n resolvedItems.map((item) =>\n internalAwaitable(callable(...([item] as unknown as Args)))\n ),\n );\n })();\n return wrapDurableAggregate(completion);\n },\n },\n reduce: {\n value: (\n items: AwaitableIterable<Args[1]>,\n ...initialValues: [] | [Args[0]]\n ) => {\n const completion = (async () => {\n let values = await resolveAwaitableIterable(items);\n const hasInitial = initialValues.length > 0;\n let initial: unknown = initialValues[0];\n const runtime = currentFunctionRuntime();\n if (runtime != null) {\n return internalAwaitable(\n runtime.reduce<Result>(definition, values, initial, hasInitial),\n );\n }\n if (!hasInitial) {\n if (values.length === 0) {\n throw new SDKUsageError(\"reduce of empty iterable with no initial value\");\n }\n [initial, ...values] = values;\n }\n let accumulator = initial as Result | Args[0];\n for (const item of values) {\n accumulator = await internalAwaitable(\n callable(...([accumulator, item] as unknown as Args)),\n );\n }\n return accumulator as Result;\n })();\n return wrapDurableAggregate(completion);\n },\n },\n tailCall: {\n value: (...args: Args): TailCall<Result> => ({\n [TAIL_CALL_BRAND]: true,\n kind: \"tensorlake-tail-call\",\n definition,\n args,\n }),\n },\n });\n return callable;\n}\n\nfunction register<\n const P extends readonly Parameter<unknown>[],\n Result,\n>(\n handler: (...args: ParameterValues<P>) => Promise<Result | TailCall<Result>>,\n options: FunctionOptions<P, Result> | ApplicationOptions<P, Result>,\n application: boolean,\n): RegisteredFunction<ParameterValues<P>, Result> {\n const name = options.name ?? handler.name;\n if (!name) throw new SDKUsageError(\"Anonymous Tensorlake handlers require an explicit name\");\n if (!/^[A-Za-z_$][\\w$]*$/.test(name)) throw new SDKUsageError(`Invalid Tensorlake function name '${name}'`);\n let applicationRetries: Retries | undefined;\n if (application) {\n const appOptions = options as ApplicationOptions<P, Result>;\n applicationRetries = retries(appOptions.applicationRetries ?? { maxRetries: 0 });\n if (\n appOptions.allow != null\n && (\n !Array.isArray(appOptions.allow)\n || appOptions.allow.some((capability) =>\n capability !== \"unauthenticated_requests\"\n )\n )\n ) {\n throw new SDKUsageError(\n \"Application allow must contain only 'unauthenticated_requests'\",\n );\n }\n const tags = appOptions.tags;\n const tagsPrototype = tags == null || typeof tags !== \"object\"\n ? undefined\n : Object.getPrototypeOf(tags);\n if (\n tags != null\n && (\n typeof tags !== \"object\"\n || Array.isArray(tags)\n || (tagsPrototype !== Object.prototype && tagsPrototype !== null)\n || Reflect.ownKeys(tags).some((key) =>\n typeof key !== \"string\"\n || !key\n || typeof (tags as Record<PropertyKey, unknown>)[key] !== \"string\"\n )\n )\n ) {\n throw new SDKUsageError(\"Application tags require non-empty string keys and string values\");\n }\n }\n if (!Array.isArray(options.parameters)) {\n throw new SDKUsageError(\"Tensorlake registration parameters must be an array\");\n }\n if (\n typeof options.returns !== \"object\"\n || options.returns == null\n || typeof options.returns.jsonSchema !== \"object\"\n || options.returns.jsonSchema == null\n ) {\n throw new SDKUsageError(\"Tensorlake registration returns must be a schema\");\n }\n const parameterNames = new Set<string>();\n for (const parameter of options.parameters) {\n if (\n typeof parameter !== \"object\"\n || parameter == null\n || typeof parameter.name !== \"string\"\n || typeof parameter.schema !== \"object\"\n || parameter.schema == null\n || typeof parameter.schema.jsonSchema !== \"object\"\n || parameter.schema.jsonSchema == null\n || typeof parameter.required !== \"boolean\"\n || typeof parameter.hasDefault !== \"boolean\"\n ) {\n throw new SDKUsageError(\n \"Tensorlake registration parameters must be created with schema.parameter()\",\n );\n }\n if (parameterNames.has(parameter.name)) {\n throw new SDKUsageError(`Duplicate Tensorlake parameter name '${parameter.name}'`);\n }\n parameterNames.add(parameter.name);\n }\n const httpBodyParameter = options.parameters.find(\n (parameter) => parameter.schema._httpBody,\n );\n if (httpBodyParameter != null && !application) {\n throw new SDKUsageError(\n \"HttpBody is only supported for application parameters\",\n );\n }\n if (options.returns._httpBody) {\n throw new SDKUsageError(\n \"HttpBody is only supported for application parameters; \"\n + \"use schema.file() or a JSON-compatible return schema instead\",\n );\n }\n const definition: RegisteredDefinition = {\n name,\n handler: handler as (...args: unknown[]) => Promise<unknown>,\n parameters: [...options.parameters],\n returns: options.returns as Schema<unknown>,\n options: normalizeOptions(options as FunctionOptions<readonly Parameter<unknown>[], unknown>),\n application: application\n ? {\n tags: { ...((options as ApplicationOptions<P, Result>).tags ?? {}) },\n retries: applicationRetries as Retries,\n allow: [...((options as ApplicationOptions<P, Result>).allow ?? [])],\n version: randomUUID().replaceAll(\"-\", \"\"),\n }\n : undefined,\n };\n registerDefinition(definition, application);\n return createRegisteredFunction(definition);\n}\n\ntype SimpleResult<Output> = Output extends TailCall<infer Result> ? Result : Output;\ntype RuntimeHandler = (...args: never[]) => Promise<unknown>;\n\nfunction hasExplicitSchemas(\n value: unknown,\n): value is FunctionOptions<readonly Parameter<unknown>[], unknown> {\n if (typeof value !== \"object\" || value == null) return false;\n const hasParameters = Object.prototype.hasOwnProperty.call(value, \"parameters\");\n const hasReturns = Object.prototype.hasOwnProperty.call(value, \"returns\");\n if (hasParameters !== hasReturns) {\n throw new SDKUsageError(\"Tensorlake registrations must specify both parameters and returns\");\n }\n return hasParameters;\n}\n\nfunction skipJavaScriptLiteral(source: string, start: number): number {\n const quote = source[start];\n let escaped = false;\n for (let index = start + 1; index < source.length; index += 1) {\n const character = source[index];\n if (escaped) {\n escaped = false;\n } else if (character === \"\\\\\") {\n escaped = true;\n } else if (character === quote) {\n return index;\n }\n }\n return source.length - 1;\n}\n\nfunction skipJavaScriptComment(source: string, start: number): number | undefined {\n if (source[start] !== \"/\") return undefined;\n if (source[start + 1] === \"/\") {\n const newline = source.indexOf(\"\\n\", start + 2);\n return newline < 0 ? source.length - 1 : newline;\n }\n if (source[start + 1] === \"*\") {\n const end = source.indexOf(\"*/\", start + 2);\n return end < 0 ? source.length - 1 : end + 1;\n }\n return undefined;\n}\n\nfunction skipJavaScriptTrivia(source: string, start: number): number {\n let index = start;\n while (index < source.length) {\n while (index < source.length && /\\s/.test(source[index])) index += 1;\n const commentEnd = skipJavaScriptComment(source, index);\n if (commentEnd == null) break;\n index = commentEnd + 1;\n }\n return index;\n}\n\nconst REGEX_PREFIX_KEYWORDS = new Set([\n \"await\",\n \"case\",\n \"delete\",\n \"in\",\n \"instanceof\",\n \"new\",\n \"return\",\n \"throw\",\n \"typeof\",\n \"void\",\n \"yield\",\n]);\n\nfunction regexLiteralStartsAt(source: string, start: number): boolean {\n let expectsExpression = true;\n for (let index = 0; index < start; index += 1) {\n const character = source[index];\n if (/\\s/.test(character)) continue;\n if (character === \"\\\"\" || character === \"'\" || character === \"`\") {\n index = skipJavaScriptLiteral(source, index);\n expectsExpression = false;\n continue;\n }\n const commentEnd = skipJavaScriptComment(source, index);\n if (commentEnd != null) {\n index = commentEnd;\n continue;\n }\n if (/[A-Za-z_$]/.test(character)) {\n let tokenEnd = index + 1;\n while (tokenEnd < start && /[A-Za-z0-9_$]/.test(source[tokenEnd])) tokenEnd += 1;\n expectsExpression = REGEX_PREFIX_KEYWORDS.has(source.slice(index, tokenEnd));\n index = tokenEnd - 1;\n continue;\n }\n if (/[0-9]/.test(character) || (character === \".\" && /[0-9]/.test(source[index + 1]))) {\n while (index + 1 < start && /[A-Za-z0-9_.]/.test(source[index + 1])) index += 1;\n expectsExpression = false;\n continue;\n }\n if (character === \"/\") {\n if (expectsExpression) {\n index = skipJavaScriptRegex(source, index);\n expectsExpression = false;\n } else {\n if (source[index + 1] === \"=\") index += 1;\n expectsExpression = true;\n }\n continue;\n }\n if (character === \")\" || character === \"]\" || character === \"}\") {\n expectsExpression = false;\n continue;\n }\n if (character === \".\") {\n if (source.slice(index, index + 3) === \"...\") {\n index += 2;\n expectsExpression = true;\n } else {\n expectsExpression = false;\n }\n continue;\n }\n if ((character === \"+\" || character === \"-\") && source[index + 1] === character) {\n index += 1;\n continue;\n }\n expectsExpression = true;\n }\n return expectsExpression;\n}\n\nfunction skipJavaScriptRegex(source: string, start: number): number {\n let escaped = false;\n let characterClass = false;\n for (let index = start + 1; index < source.length; index += 1) {\n const character = source[index];\n if (escaped) {\n escaped = false;\n } else if (character === \"\\\\\") {\n escaped = true;\n } else if (character === \"[\") {\n characterClass = true;\n } else if (character === \"]\") {\n characterClass = false;\n } else if (character === \"/\" && !characterClass) {\n while (index + 1 < source.length && /[A-Za-z]/.test(source[index + 1])) index += 1;\n return index;\n }\n }\n return source.length - 1;\n}\n\nfunction skipJavaScriptValue(source: string, index: number): number | undefined {\n const character = source[index];\n if (character === \"\\\"\" || character === \"'\" || character === \"`\") {\n return skipJavaScriptLiteral(source, index);\n }\n const commentEnd = skipJavaScriptComment(source, index);\n if (commentEnd != null) return commentEnd;\n if (character === \"/\" && regexLiteralStartsAt(source, index)) {\n return skipJavaScriptRegex(source, index);\n }\n return undefined;\n}\n\nfunction findTopLevelArrow(source: string): number {\n let parentheses = 0;\n let brackets = 0;\n let braces = 0;\n for (let index = 0; index < source.length - 1; index += 1) {\n const character = source[index];\n const valueEnd = skipJavaScriptValue(source, index);\n if (valueEnd != null) {\n index = valueEnd;\n continue;\n }\n if (character === \"(\") parentheses += 1;\n else if (character === \")\") parentheses -= 1;\n else if (character === \"[\") brackets += 1;\n else if (character === \"]\") brackets -= 1;\n else if (character === \"{\") {\n // A top-level block before an arrow is a classic function or method\n // body. Its nested arrows cannot describe the handler parameters.\n if (parentheses === 0 && brackets === 0 && braces === 0) return -1;\n braces += 1;\n }\n else if (character === \"}\") braces -= 1;\n else if (character === \"=\" && source[index + 1] === \">\" && parentheses === 0 && brackets === 0 && braces === 0) {\n return index;\n }\n }\n return -1;\n}\n\nfunction findClosingParenthesis(source: string, open: number): number {\n let depth = 0;\n for (let index = open; index < source.length; index += 1) {\n const character = source[index];\n const valueEnd = skipJavaScriptValue(source, index);\n if (valueEnd != null) {\n index = valueEnd;\n continue;\n }\n if (character === \"(\") depth += 1;\n else if (character === \")\" && --depth === 0) return index;\n }\n return -1;\n}\n\nfunction findOpeningParenthesis(source: string): number {\n for (let index = 0; index < source.length; index += 1) {\n const valueEnd = skipJavaScriptValue(source, index);\n if (valueEnd != null) {\n index = valueEnd;\n continue;\n }\n if (source[index] === \"(\") return index;\n }\n return -1;\n}\n\nfunction splitTopLevelParameters(source: string): string[] {\n if (source.trim() === \"\") return [];\n const result: string[] = [];\n let start = 0;\n let parentheses = 0;\n let brackets = 0;\n let braces = 0;\n for (let index = 0; index < source.length; index += 1) {\n const character = source[index];\n const valueEnd = skipJavaScriptValue(source, index);\n if (valueEnd != null) {\n index = valueEnd;\n continue;\n }\n if (character === \"(\") parentheses += 1;\n else if (character === \")\") parentheses -= 1;\n else if (character === \"[\") brackets += 1;\n else if (character === \"]\") brackets -= 1;\n else if (character === \"{\") braces += 1;\n else if (character === \"}\") braces -= 1;\n else if (character === \",\" && parentheses === 0 && brackets === 0 && braces === 0) {\n result.push(source.slice(start, index).trim());\n start = index + 1;\n }\n }\n const final = source.slice(start).trim();\n if (final !== \"\") result.push(final);\n return result;\n}\n\nfunction hasTopLevelDefault(source: string): boolean {\n let parentheses = 0;\n let brackets = 0;\n let braces = 0;\n for (let index = 0; index < source.length; index += 1) {\n const character = source[index];\n const valueEnd = skipJavaScriptValue(source, index);\n if (valueEnd != null) {\n index = valueEnd;\n continue;\n }\n if (character === \"(\") parentheses += 1;\n else if (character === \")\") parentheses -= 1;\n else if (character === \"[\") brackets += 1;\n else if (character === \"]\") brackets -= 1;\n else if (character === \"{\") braces += 1;\n else if (character === \"}\") braces -= 1;\n else if (character === \"=\" && parentheses === 0 && brackets === 0 && braces === 0) return true;\n }\n return false;\n}\n\nfunction declaredHandlerParameters(handler: RuntimeHandler): string[] {\n const source = Function.prototype.toString.call(handler).trim();\n if (source.includes(\"[native code]\")) {\n throw new SDKUsageError(\"Schema-free registration cannot inspect a native or bound handler; specify parameters and returns\");\n }\n const arrow = findTopLevelArrow(source);\n if (arrow >= 0) {\n let header = source.slice(0, arrow).trim();\n if (\n header.startsWith(\"async\")\n && !/[A-Za-z0-9_$]/.test(header[\"async\".length] ?? \"\")\n ) {\n header = header.slice(skipJavaScriptTrivia(header, \"async\".length));\n }\n if (!header.startsWith(\"(\")) return [header];\n const close = findClosingParenthesis(header, 0);\n if (close < 0) throw new SDKUsageError(\"Schema-free registration could not inspect handler parameters\");\n return splitTopLevelParameters(header.slice(1, close));\n }\n const open = findOpeningParenthesis(source);\n const close = open < 0 ? -1 : findClosingParenthesis(source, open);\n if (open < 0 || close < 0) {\n throw new SDKUsageError(\"Schema-free registration could not inspect handler parameters\");\n }\n return splitTopLevelParameters(source.slice(open + 1, close));\n}\n\nfunction inferredJSONParameters(handler: RuntimeHandler): readonly Parameter<unknown>[] {\n const parameters = declaredHandlerParameters(handler);\n if (parameters.some((parameter) => {\n let index = 0;\n while (index < parameter.length) {\n while (index < parameter.length && /\\s/.test(parameter[index])) index += 1;\n const commentEnd = skipJavaScriptComment(parameter, index);\n if (commentEnd == null) break;\n index = commentEnd + 1;\n }\n return parameter.slice(index).startsWith(\"...\");\n })) {\n throw new SDKUsageError(\n \"Schema-free registration does not support rest parameters; specify explicit parameters and returns\",\n );\n }\n return parameters.map((parameter, index) => schema.parameter(\n parameters.length === 1 ? \"input\" : `arg${index}`,\n schema.json(),\n hasTopLevelDefault(parameter) ? { optional: true } : {},\n ));\n}\n\nfunction registerWithDefaults(\n name: string,\n handler: RuntimeHandler,\n options: SimpleFunctionOptions | SimpleApplicationOptions,\n application: boolean,\n): RegisteredFunction<readonly unknown[], unknown> {\n return register(\n handler as (...args: readonly unknown[]) => Promise<unknown>,\n {\n ...options,\n name,\n parameters: inferredJSONParameters(handler),\n returns: schema.json(),\n },\n application,\n );\n}\n\nexport function registerFunction<\n const P extends readonly Parameter<unknown>[],\n Result,\n>(\n handler: (...args: ParameterValues<P>) => Promise<Result | TailCall<Result>>,\n options: FunctionOptions<P, Result>,\n): RegisteredFunction<ParameterValues<P>, Result>;\n\nexport function registerFunction<\n const Args extends readonly unknown[],\n Output,\n>(\n name: string,\n handler: (...args: Args) => Promise<Output>,\n options?: SimpleFunctionOptions,\n): RegisteredFunction<Args, SimpleResult<Output>>;\nexport function registerFunction(\n handlerOrName: unknown,\n handlerOrOptions?: unknown,\n options: SimpleFunctionOptions = {},\n): RegisteredFunction<readonly unknown[], unknown> {\n if (typeof handlerOrName === \"string\") {\n if (typeof handlerOrOptions !== \"function\") {\n throw new SDKUsageError(\"registerFunction(name, handler) requires an async handler\");\n }\n return registerWithDefaults(\n handlerOrName,\n handlerOrOptions as RuntimeHandler,\n options,\n false,\n );\n }\n if (typeof handlerOrName !== \"function\") {\n throw new SDKUsageError(\"registerFunction requires an async handler\");\n }\n const handler = handlerOrName as RuntimeHandler;\n if (typeof handlerOrOptions === \"function\") {\n throw new SDKUsageError(\"registerFunction received an unexpected second handler\");\n }\n if (hasExplicitSchemas(handlerOrOptions)) {\n return register(\n handler as (...args: readonly unknown[]) => Promise<unknown>,\n handlerOrOptions,\n false,\n );\n }\n throw new SDKUsageError(\n \"Schema-free functions require an explicit stable name: registerFunction(name, handler)\",\n );\n}\n\nexport function registerApplication<\n const P extends readonly Parameter<unknown>[],\n Result,\n>(\n handler: (...args: ParameterValues<P>) => Promise<Result | TailCall<Result>>,\n options: ApplicationOptions<P, Result>,\n): RegisteredFunction<ParameterValues<P>, Result>;\nexport function registerApplication<\n const Args extends readonly unknown[],\n Output,\n>(\n name: string,\n handler: (...args: Args) => Promise<Output>,\n options?: SimpleApplicationOptions,\n): RegisteredFunction<Args, SimpleResult<Output>>;\nexport function registerApplication(\n handlerOrName: unknown,\n handlerOrOptions?: unknown,\n options: SimpleApplicationOptions = {},\n): RegisteredFunction<readonly unknown[], unknown> {\n if (typeof handlerOrName === \"string\") {\n if (typeof handlerOrOptions !== \"function\") {\n throw new SDKUsageError(\"registerApplication(name, handler) requires an async handler\");\n }\n return registerWithDefaults(\n handlerOrName,\n handlerOrOptions as RuntimeHandler,\n options,\n true,\n );\n }\n if (typeof handlerOrName !== \"function\") {\n throw new SDKUsageError(\"registerApplication requires an async handler\");\n }\n const handler = handlerOrName as RuntimeHandler;\n if (typeof handlerOrOptions === \"function\") {\n throw new SDKUsageError(\"registerApplication received an unexpected second handler\");\n }\n if (hasExplicitSchemas(handlerOrOptions)) {\n return register(\n handler as (...args: readonly unknown[]) => Promise<unknown>,\n handlerOrOptions,\n true,\n );\n }\n throw new SDKUsageError(\n \"Schema-free applications require an explicit stable name: registerApplication(name, handler)\",\n );\n}\n","import Ajv, { type ValidateFunction } from \"ajv\";\nimport Ajv2020 from \"ajv/dist/2020.js\";\nimport { File, isFile } from \"./file.js\";\nimport { HttpBody, isHttpBody } from \"./http-body.js\";\nimport { SDKUsageError } from \"./errors.js\";\n\nexport type JSONSchema = Record<string, unknown>;\n\nconst TYPE = Symbol(\"tensorlake.schema.type\");\n// SDK-generated schemas use JSON Schema 2020-12 features such as prefixItems.\n// Validate with the same dialect that we emit into application manifests so\n// local/executor checks cannot silently accept values the public schema rejects.\nconst ajvDraft7 = new Ajv({ allErrors: true, strict: false });\nconst ajv2020 = new Ajv2020({ allErrors: true, strict: false });\n\nexport interface Schema<T> {\n readonly jsonSchema: JSONSchema;\n readonly [TYPE]?: T;\n readonly _file?: boolean;\n readonly _httpBody?: boolean;\n}\n\nexport type Infer<S extends Schema<unknown>> = S extends Schema<infer T> ? T : never;\n\nexport interface ParameterOptions<T> {\n description?: string;\n optional?: boolean;\n default?: T;\n}\n\nexport interface Parameter<T> {\n readonly name: string;\n readonly schema: Schema<T>;\n readonly description?: string;\n readonly required: boolean;\n readonly hasDefault: boolean;\n readonly defaultValue?: T;\n}\n\nexport type ParameterValues<P extends readonly Parameter<unknown>[]> = {\n [K in keyof P]: P[K] extends Parameter<infer T> ? T : never;\n};\n\nfunction snapshotJSONValue(\n value: unknown,\n label: string,\n ancestors: Set<object>,\n freeze: boolean,\n): unknown {\n if (\n value == null\n || typeof value === \"string\"\n || typeof value === \"boolean\"\n ) {\n return value;\n }\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new SDKUsageError(`${label} contains a non-finite number`);\n }\n return value;\n }\n if (typeof value !== \"object\") {\n throw new SDKUsageError(`${label} contains unsupported ${typeof value}`);\n }\n if (ancestors.has(value)) {\n throw new SDKUsageError(`${label} contains a cycle`);\n }\n if (!Array.isArray(value) && Object.getPrototypeOf(value) !== Object.prototype) {\n throw new SDKUsageError(\n `${label} contains unsupported ${value.constructor?.name ?? \"object\"}`,\n );\n }\n\n ancestors.add(value);\n let result: unknown[] | Record<string, unknown>;\n if (Array.isArray(value)) {\n result = [];\n for (let index = 0; index < value.length; index += 1) {\n if (!Object.prototype.hasOwnProperty.call(value, index)) {\n throw new SDKUsageError(`${label} contains a sparse array entry at index ${index}`);\n }\n result.push(snapshotJSONValue(\n value[index],\n `${label}[${index}]`,\n ancestors,\n freeze,\n ));\n }\n } else {\n result = Object.fromEntries(\n Object.entries(value).map(([key, item]) => [\n key,\n snapshotJSONValue(item, `${label}.${key}`, ancestors, freeze),\n ]),\n );\n }\n ancestors.delete(value);\n return freeze ? Object.freeze(result) : result;\n}\n\nfunction snapshotJSONSchema(jsonSchema: JSONSchema): JSONSchema {\n return snapshotJSONValue(\n jsonSchema,\n \"JSON schema\",\n new Set(),\n true,\n ) as JSONSchema;\n}\n\nfunction snapshotDefault<T>(valueSchema: Schema<T>, value: T): T {\n if (valueSchema._file) {\n if (!isFile(value)) {\n throw new SDKUsageError(\"parameter default must be a Tensorlake File\");\n }\n return new File(new Uint8Array(value.content), value.contentType) as T;\n }\n if (valueSchema._httpBody) {\n if (!isHttpBody(value)) {\n throw new SDKUsageError(\"parameter default must be a Tensorlake HttpBody\");\n }\n return new HttpBody(new Uint8Array(value.content), value.contentType) as T;\n }\n return snapshotJSONValue(\n value,\n \"parameter default\",\n new Set(),\n false,\n ) as T;\n}\n\nfunction makeSchema<T>(\n jsonSchema: JSONSchema,\n rawBody?: \"file\" | \"httpBody\",\n): Schema<T> {\n return Object.freeze({\n jsonSchema: snapshotJSONSchema(jsonSchema),\n _file: rawBody === \"file\",\n _httpBody: rawBody === \"httpBody\",\n });\n}\n\nfunction rejectRawBodyComposition(\n operation: string,\n values: readonly Schema<unknown>[],\n): void {\n const rawBody = values.find((value) => value._file || value._httpBody);\n if (rawBody != null) {\n const factory = rawBody._httpBody ? \"httpBody\" : \"file\";\n const type = rawBody._httpBody ? \"HttpBody\" : \"File\";\n const supportedPosition = rawBody._httpBody\n ? \"as a direct application parameter\"\n : \"as a direct parameter or return value\";\n throw new SDKUsageError(\n `schema.${operation} cannot contain schema.${factory}(); ${type} is only supported`\n + ` ${supportedPosition}`,\n );\n }\n}\n\nfunction parameter<T>(\n name: string,\n valueSchema: Schema<T>,\n options: ParameterOptions<T> = {},\n): Parameter<T> {\n if (!/^[A-Za-z_$][\\w$]*$/.test(name)) {\n throw new SDKUsageError(`Invalid parameter name '${name}'`);\n }\n const hasDefault = Object.prototype.hasOwnProperty.call(options, \"default\");\n if (hasDefault) validateWithSchema(valueSchema, options.default, `default for '${name}'`);\n const defaultSnapshot = hasDefault\n ? snapshotDefault(valueSchema, options.default as T)\n : undefined;\n return Object.freeze({\n name,\n schema: valueSchema,\n description: options.description,\n required: options.optional !== true && !hasDefault,\n hasDefault,\n // Defaults cross two public boundaries: callers can inspect the registered\n // definition, and every invocation receives the default when an argument is\n // omitted. Return a fresh boundary copy so neither path can mutate the\n // registration snapshot, later invocations, or generated manifests.\n get defaultValue(): T | undefined {\n return hasDefault\n ? snapshotDefault(valueSchema, defaultSnapshot as T)\n : undefined;\n },\n });\n}\n\nexport const schema = {\n /** Any JSON-serializable value. Useful when strict runtime validation is not needed. */\n json: <T = unknown>() => makeSchema<T>({}),\n string: (options: Omit<JSONSchema, \"type\"> = {}) =>\n makeSchema<string>({ ...options, type: \"string\" }),\n number: (options: Omit<JSONSchema, \"type\"> = {}) =>\n makeSchema<number>({ ...options, type: \"number\" }),\n integer: (options: Omit<JSONSchema, \"type\"> = {}) =>\n makeSchema<number>({ ...options, type: \"integer\" }),\n boolean: () => makeSchema<boolean>({ type: \"boolean\" }),\n null: () => makeSchema<null>({ type: \"null\" }),\n literal: <T extends string | number | boolean | null>(value: T) =>\n makeSchema<T>({ const: value }),\n enum: <const T extends readonly (string | number)[]>(values: T) =>\n makeSchema<T[number]>({ enum: [...values] }),\n array: <S extends Schema<unknown>>(item: S, options: Omit<JSONSchema, \"type\" | \"items\"> = {}) => {\n rejectRawBodyComposition(\"array\", [item]);\n return makeSchema<Infer<S>[]>({ ...options, type: \"array\", items: item.jsonSchema });\n },\n tuple: <const S extends readonly Schema<unknown>[]>(items: S) => {\n rejectRawBodyComposition(\"tuple\", items);\n return makeSchema<{ [K in keyof S]: S[K] extends Schema<infer T> ? T : never }>({\n type: \"array\",\n prefixItems: items.map((item) => item.jsonSchema),\n minItems: items.length,\n maxItems: items.length,\n });\n },\n record: <S extends Schema<unknown>>(value: S) => {\n rejectRawBodyComposition(\"record\", [value]);\n return makeSchema<Record<string, Infer<S>>>({\n type: \"object\",\n additionalProperties: value.jsonSchema,\n });\n },\n object: <const P extends Record<string, Schema<unknown>>>(properties: P) => {\n rejectRawBodyComposition(\"object\", Object.values(properties));\n return makeSchema<{ [K in keyof P]: P[K] extends Schema<infer T> ? T : never }>({\n type: \"object\",\n properties: Object.fromEntries(\n Object.entries(properties).map(([key, item]) => [key, item.jsonSchema]),\n ),\n required: Object.keys(properties),\n additionalProperties: false,\n });\n },\n union: <const S extends readonly Schema<unknown>[]>(...choices: S) => {\n rejectRawBodyComposition(\"union\", choices);\n return makeSchema<Infer<S[number]>>({ anyOf: choices.map((choice) => choice.jsonSchema) });\n },\n nullable: <S extends Schema<unknown>>(value: S) => {\n rejectRawBodyComposition(\"nullable\", [value]);\n return makeSchema<Infer<S> | null>({ anyOf: [value.jsonSchema, { type: \"null\" }] });\n },\n file: () => makeSchema<File>({ type: \"tensorlake_file\" }, \"file\"),\n httpBody: () =>\n makeSchema<HttpBody>({ type: \"tensorlake_http_body\" }, \"httpBody\"),\n custom: <T>(jsonSchema: JSONSchema) => makeSchema<T>({ ...jsonSchema }),\n parameter,\n};\n\ninterface CachedValidator {\n readonly validate: ValidateFunction;\n readonly errorsText: (errors: ValidateFunction[\"errors\"]) => string;\n}\n\nconst validatorCache = new WeakMap<object, CachedValidator>();\n\nfunction compileValidator(jsonSchema: JSONSchema): CachedValidator {\n // Earlier SDK versions validated custom schemas with Ajv's draft-07\n // default. Preserve that behavior for explicitly declared draft-07 schemas\n // while using 2020-12 for SDK-generated schemas and custom schemas without a\n // dialect declaration.\n const dialect = jsonSchema.$schema;\n const engine = typeof dialect === \"string\" && /\\/draft-07\\/schema#?$/.test(dialect)\n ? ajvDraft7\n : ajv2020;\n const validate = engine.compile(jsonSchema);\n return {\n validate,\n errorsText: (errors) => engine.errorsText(errors, { separator: \"; \" }),\n };\n}\n\nexport function validateWithSchema<T>(valueSchema: Schema<T>, value: unknown, label: string): T {\n if (valueSchema._file) {\n if (!isFile(value)) {\n throw new SDKUsageError(`${label} must be a Tensorlake File`);\n }\n return value as T;\n }\n if (valueSchema._httpBody) {\n if (!isHttpBody(value)) {\n throw new SDKUsageError(`${label} must be a Tensorlake HttpBody`);\n }\n return value as T;\n }\n if (isFile(value)) {\n throw new SDKUsageError(`${label} must use schema.file() for a Tensorlake File`);\n }\n if (isHttpBody(value)) {\n throw new SDKUsageError(\n `${label} must use schema.httpBody() for a Tensorlake HttpBody`,\n );\n }\n let cached = validatorCache.get(valueSchema as object);\n if (cached == null) {\n try {\n cached = compileValidator(valueSchema.jsonSchema);\n } catch (error) {\n const details = error instanceof Error ? error.message : String(error);\n throw new SDKUsageError(`${label} uses an invalid JSON schema: ${details}`);\n }\n validatorCache.set(valueSchema as object, cached);\n }\n if (!cached.validate(value)) {\n const details = cached.errorsText(cached.validate.errors);\n throw new SDKUsageError(`${label} does not match its schema: ${details}`);\n }\n return value as T;\n}\n\nexport function parameterJSONSchema(parameter: Parameter<unknown>): JSONSchema {\n const result: JSONSchema = {\n ...parameter.schema.jsonSchema,\n title: parameter.name,\n parameter_kind: \"POSITIONAL_OR_KEYWORD\",\n };\n if (parameter.description != null) result.description = parameter.description;\n if (parameter.hasDefault) {\n result.default = parameter.schema._file || parameter.schema._httpBody\n ? true\n : parameter.defaultValue;\n }\n return result;\n}\n","import { SDKUsageError } from \"./errors.js\";\n\nconst FILE_BRAND = Symbol.for(\"tensorlake.applications.file.v1\");\n\nexport class File {\n readonly [FILE_BRAND] = true;\n readonly content: Uint8Array;\n readonly contentType: string;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== File) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isFile(value);\n }\n\n constructor(content: Uint8Array | ArrayBuffer, contentType: string) {\n if (!contentType.trim()) {\n throw new SDKUsageError(\"File contentType cannot be empty\");\n }\n this.content = content instanceof Uint8Array ? content : new Uint8Array(content);\n this.contentType = contentType;\n }\n}\n\n/**\n * Recognizes Tensorlake Files across independently bundled SDK copies.\n *\n * Deployed application code and the function executor are separate bundles\n * loaded into one Node process, so their `File` constructors are not\n * referentially equal. The shared brand and `Symbol.hasInstance` keep\n * `instanceof File` useful across that boundary.\n */\nexport function isFile(value: unknown): value is File {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[FILE_BRAND] === true\n && candidate.content instanceof Uint8Array\n && typeof candidate.contentType === \"string\"\n && candidate.contentType.trim().length > 0;\n}\n","const HTTP_BODY_BRAND = Symbol.for(\"tensorlake.applications.http-body.v1\");\n\nexport class HttpBody {\n readonly [HTTP_BODY_BRAND] = true;\n readonly content: Uint8Array;\n readonly contentType?: string;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== HttpBody) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isHttpBody(value);\n }\n\n constructor(\n content: Uint8Array | ArrayBuffer,\n contentType?: string,\n ) {\n this.content = content instanceof Uint8Array\n ? content\n : new Uint8Array(content);\n this.contentType = contentType;\n }\n\n text(encoding = \"utf-8\"): string {\n return new TextDecoder(encoding, { fatal: true }).decode(this.content);\n }\n\n json<T = unknown>(): T {\n return JSON.parse(this.text()) as T;\n }\n}\n\n/**\n * Recognizes Tensorlake HTTP bodies across independently bundled SDK copies.\n *\n * Deployed application code and the function executor are separate bundles\n * loaded into one Node process, so their `HttpBody` constructors are not\n * referentially equal.\n */\nexport function isHttpBody(value: unknown): value is HttpBody {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[HTTP_BODY_BRAND] === true\n && candidate.content instanceof Uint8Array\n && (\n candidate.contentType === undefined\n || typeof candidate.contentType === \"string\"\n );\n}\n","export type HeadersInit =\n | Headers\n | Record<string, string>\n | Iterable<readonly [string, string]>;\n\nconst HEADERS_BRAND = Symbol.for(\"tensorlake.applications.headers.v1\");\n\n/** Immutable, case-insensitive application request headers. */\nexport class Headers implements Iterable<readonly [string, string]> {\n readonly [HEADERS_BRAND] = true;\n readonly #items: readonly (readonly [string, string])[];\n readonly #lookup: ReadonlyMap<string, readonly string[]>;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== Headers) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isHeaders(value);\n }\n\n constructor(headers: HeadersInit = []) {\n const entries = headers instanceof Headers\n ? [...headers]\n : Symbol.iterator in Object(headers)\n ? [...headers as Iterable<readonly [string, string]>]\n : Object.entries(headers);\n const lookup = new Map<string, string[]>();\n this.#items = Object.freeze(entries.map(([name, value]) => {\n if (typeof name !== \"string\" || typeof value !== \"string\") {\n throw new TypeError(\"Headers require string names and values\");\n }\n const item = Object.freeze([name, value] as const);\n const key = name.toLowerCase();\n lookup.set(key, [...(lookup.get(key) ?? []), value]);\n return item;\n }));\n this.#lookup = lookup;\n Object.freeze(this);\n }\n\n get(name: string): string | undefined {\n return this.#lookup.get(name.toLowerCase())?.at(-1);\n }\n\n getAll(name: string): readonly string[] {\n return Object.freeze([...(this.#lookup.get(name.toLowerCase()) ?? [])]);\n }\n\n has(name: string): boolean {\n return this.#lookup.has(name.toLowerCase());\n }\n\n entries(): IterableIterator<readonly [string, string]> {\n return this.#items[Symbol.iterator]();\n }\n\n [Symbol.iterator](): IterableIterator<readonly [string, string]> {\n return this.entries();\n }\n}\n\n/** Recognizes immutable request headers across independently bundled SDK copies. */\nexport function isHeaders(value: unknown): value is Headers {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[HEADERS_BRAND] === true\n && typeof candidate.get === \"function\"\n && typeof candidate.getAll === \"function\"\n && typeof candidate.has === \"function\"\n && typeof candidate[Symbol.iterator] === \"function\";\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { SDKUsageError } from \"./errors.js\";\nimport { Headers, type HeadersInit } from \"./headers.js\";\nimport { deserializeJSON, serializeValue } from \"./serialization.js\";\n\nexport interface ProgressOptions {\n message?: string;\n attributes?: Record<string, string>;\n}\n\nexport interface RequestState {\n set(key: string, value: unknown): Promise<void>;\n get<T>(key: string, defaultValue?: T): Promise<T | undefined>;\n}\n\nexport interface RequestMetrics {\n timer(name: string, value: number): Promise<void>;\n counter(name: string, value?: number): Promise<void>;\n}\n\nexport interface FunctionProgress {\n update(current: number, total: number, options?: ProgressOptions): Promise<void>;\n}\n\nexport function validateRequestStateKey(key: unknown): asserts key is string {\n if (typeof key !== \"string\") {\n throw new SDKUsageError(`State key must be a string, got: ${String(key)}`);\n }\n}\n\nexport function serializeRequestStateValue(value: unknown): Uint8Array {\n const serialized = serializeValue(value);\n if (serialized.encoding !== \"json\") {\n throw new SDKUsageError(\"Request state values must be JSON values\");\n }\n return serialized.data;\n}\n\nexport function validateCounterMetric(name: unknown, value: unknown): void {\n if (typeof name !== \"string\") {\n throw new SDKUsageError(`Counter name must be a string, got: ${String(name)}`);\n }\n if (typeof value !== \"number\" || !Number.isInteger(value)) {\n throw new SDKUsageError(`Counter value must be an int, got: ${String(value)}`);\n }\n if (!Number.isSafeInteger(value)) {\n throw new SDKUsageError(`Counter value must be a safe int, got: ${String(value)}`);\n }\n}\n\nexport function validateTimerMetric(name: unknown, value: unknown): void {\n if (typeof name !== \"string\") {\n throw new SDKUsageError(`Timer name must be a string, got: ${String(name)}`);\n }\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n throw new SDKUsageError(`Timer value must be a finite number, got: ${String(value)}`);\n }\n}\n\nfunction isPlainRecord(value: unknown): value is Record<PropertyKey, unknown> {\n if (value == null || typeof value !== \"object\" || Array.isArray(value)) return false;\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nexport function validateProgressUpdate(\n current: number,\n total: number,\n options?: ProgressOptions,\n): void {\n if (!Number.isFinite(current) || !Number.isFinite(total) || total < 0 || current < 0) {\n throw new SDKUsageError(\"Progress current and total must be non-negative finite numbers\");\n }\n if (options != null && !isPlainRecord(options)) {\n throw new SDKUsageError(\"Progress options must be an object\");\n }\n if (options?.message != null && typeof options.message !== \"string\") {\n throw new SDKUsageError(\"Progress message must be a string\");\n }\n if (options?.attributes != null) {\n if (!isPlainRecord(options.attributes)) {\n throw new SDKUsageError(\"Progress attributes must be an object of string key/value pairs\");\n }\n for (const key of Reflect.ownKeys(options.attributes)) {\n if (typeof key !== \"string\") {\n throw new SDKUsageError(\"Progress attributes must contain only string keys and values\");\n }\n const value = options.attributes[key];\n if (typeof value !== \"string\") {\n throw new SDKUsageError(\"Progress attributes must contain only string keys and values\");\n }\n }\n }\n}\n\nexport interface RequestContextValue {\n readonly requestId: string;\n readonly headers: Headers;\n readonly signal: AbortSignal;\n readonly state: RequestState;\n readonly metrics: RequestMetrics;\n readonly progress: FunctionProgress;\n}\n\n// A deployed application bundle contains its own copy of the applications SDK,\n// while the function executor has another copy in its runtime capsule. Both\n// copies execute in the same Node process and must observe the same context.\n// Symbol.for keeps the AsyncLocalStorage process-global without exposing it as\n// public API or coupling the application bundle to the executor package.\nconst REQUEST_CONTEXT_STORAGE_KEY = Symbol.for(\n \"tensorlake.applications.request-context-storage.v1\",\n);\n\nfunction requestContextStorage(): AsyncLocalStorage<RequestContextValue> {\n const target = globalThis as typeof globalThis & {\n [REQUEST_CONTEXT_STORAGE_KEY]?: AsyncLocalStorage<RequestContextValue>;\n };\n target[REQUEST_CONTEXT_STORAGE_KEY] ??= new AsyncLocalStorage<RequestContextValue>();\n return target[REQUEST_CONTEXT_STORAGE_KEY];\n}\n\nexport class RequestContext {\n static get(): RequestContextValue {\n const context = requestContextStorage().getStore();\n if (context == null) {\n throw new SDKUsageError(\"RequestContext.get() can only be called from a running Tensorlake function\");\n }\n return context;\n }\n}\n\nexport function runWithRequestContext<T>(\n context: RequestContextValue,\n callback: () => Promise<T>,\n): Promise<T> {\n return requestContextStorage().run(context, callback);\n}\n\nexport async function waitWithAbortSignal<T>(\n value: Promise<T>,\n signal: AbortSignal,\n): Promise<T> {\n if (signal.aborted) throw signal.reason;\n let onAbort: (() => void) | undefined;\n try {\n return await Promise.race([\n value,\n new Promise<never>((_resolve, reject) => {\n onAbort = () => reject(signal.reason);\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }),\n ]);\n } finally {\n if (onAbort != null) signal.removeEventListener(\"abort\", onAbort);\n }\n}\n\nexport class MemoryRequestContext implements RequestContextValue {\n readonly headers: Headers;\n readonly signal: AbortSignal;\n private readonly values = new Map<string, Uint8Array>();\n private readonly counters = new Map<string, number>();\n private readonly timers = new Map<string, number[]>();\n private lastProgress?: { current: number; total: number; options?: ProgressOptions };\n\n constructor(\n readonly requestId: string,\n options: { signal?: AbortSignal; headers?: HeadersInit } = {},\n ) {\n this.headers = new Headers(options.headers);\n this.signal = options.signal ?? new AbortController().signal;\n }\n\n readonly state: RequestState = {\n set: async (key, value) => {\n validateRequestStateKey(key);\n this.values.set(key, serializeRequestStateValue(value).slice());\n },\n get: async <T>(key: string, defaultValue?: T) => {\n validateRequestStateKey(key);\n const value = this.values.get(key);\n return value == null ? defaultValue : deserializeJSON(value) as T;\n },\n };\n\n readonly metrics: RequestMetrics = {\n counter: async (name, value = 1) => {\n validateCounterMetric(name, value);\n this.counters.set(name, (this.counters.get(name) ?? 0) + value);\n },\n timer: async (name, value) => {\n validateTimerMetric(name, value);\n const values = this.timers.get(name) ?? [];\n values.push(value);\n this.timers.set(name, values);\n },\n };\n\n readonly progress: FunctionProgress = {\n update: async (current, total, options) => {\n validateProgressUpdate(current, total, options);\n this.lastProgress = { current, total, options };\n },\n };\n}\n","import { createHash } from \"node:crypto\";\nimport { DeserializationError, SerializationError } from \"./errors.js\";\nimport { isFile } from \"./file.js\";\nimport { isHttpBody } from \"./http-body.js\";\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder(\"utf-8\", { fatal: true });\n\nexport interface SerializedValue {\n data: Uint8Array;\n contentType: string;\n encoding: \"json\" | \"raw\";\n}\n\nfunction assertJSONValue(value: unknown, path: string, seen: Set<object>): void {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return;\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) throw new SerializationError(`${path} contains a non-finite number`);\n return;\n }\n if (typeof value !== \"object\") {\n throw new SerializationError(`${path} contains unsupported ${typeof value}`);\n }\n if (isFile(value)) {\n throw new SerializationError(`${path} contains a nested File; File is only supported as a direct value`);\n }\n if (isHttpBody(value)) {\n throw new SerializationError(\n `${path} contains a nested HttpBody; HttpBody is only supported as a direct value`,\n );\n }\n if (seen.has(value)) throw new SerializationError(`${path} contains a cycle`);\n if (Object.getPrototypeOf(value) !== Object.prototype && !Array.isArray(value)) {\n throw new SerializationError(`${path} contains unsupported ${value.constructor?.name ?? \"object\"}`);\n }\n seen.add(value);\n if (Array.isArray(value)) {\n for (let index = 0; index < value.length; index += 1) {\n if (!Object.prototype.hasOwnProperty.call(value, index)) {\n throw new SerializationError(`${path} contains a sparse array entry at index ${index}`);\n }\n assertJSONValue(value[index], `${path}[${index}]`, seen);\n }\n } else {\n for (const [key, item] of Object.entries(value)) {\n assertJSONValue(item, `${path}.${key}`, seen);\n }\n }\n seen.delete(value);\n}\n\nexport function serializeValue(value: unknown): SerializedValue {\n if (isFile(value)) {\n return { data: value.content, contentType: value.contentType, encoding: \"raw\" };\n }\n if (isHttpBody(value)) {\n return {\n data: value.content,\n contentType: value.contentType ?? \"\",\n encoding: \"raw\",\n };\n }\n try {\n assertJSONValue(value, \"value\", new Set());\n return {\n data: textEncoder.encode(JSON.stringify(value)),\n contentType: \"application/json; charset=UTF-8\",\n encoding: \"json\",\n };\n } catch (error) {\n if (error instanceof SerializationError) throw error;\n throw new SerializationError(\"Failed to serialize JSON value\", { cause: error });\n }\n}\n\nexport function deserializeJSON(data: Uint8Array): unknown {\n try {\n return JSON.parse(textDecoder.decode(data));\n } catch (error) {\n throw new DeserializationError(\"Failed to deserialize JSON value\", { cause: error });\n }\n}\n\nexport function jsonRoundTrip<T>(value: T): T {\n const serialized = serializeValue(value);\n if (serialized.encoding !== \"json\") return value;\n return deserializeJSON(serialized.data) as T;\n}\n\nexport function canonicalJSON(value: unknown): string {\n if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(canonicalJSON).join(\",\")}]`;\n const entries = Object.entries(value as Record<string, unknown>).sort(([a], [b]) => a.localeCompare(b));\n return `{${entries.map(([key, item]) => `${JSON.stringify(key)}:${canonicalJSON(item)}`).join(\",\")}}`;\n}\n\nexport function sha256(data: Uint8Array): string {\n return createHash(\"sha256\").update(data).digest(\"hex\");\n}\n","export class AsyncQueue<T> {\n private readonly values: T[] = [];\n private readonly readers: Array<(value: T | undefined) => void> = [];\n private closed = false;\n\n push(value: T): void {\n if (this.closed) return;\n const reader = this.readers.shift();\n if (reader == null) this.values.push(value);\n else reader(value);\n }\n\n async next(): Promise<T | undefined> {\n const value = this.values.shift();\n if (value != null) return value;\n if (this.closed) return undefined;\n return new Promise((resolve) => this.readers.push(resolve));\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n for (const reader of this.readers.splice(0)) reader(undefined);\n }\n}\n\nexport interface Deferred<T> {\n promise: Promise<T>;\n resolve(value: T): void;\n reject(error: unknown): void;\n}\n\nexport function deferred<T>(): Deferred<T> {\n let resolve!: (value: T) => void;\n let reject!: (error: unknown) => void;\n const promise = new Promise<T>((ok, fail) => {\n resolve = ok;\n reject = fail;\n });\n return { promise, resolve, reject };\n}\n","import { createHash } from \"node:crypto\";\nimport { open } from \"node:fs/promises\";\nimport { fileURLToPath } from \"node:url\";\nimport { File } from \"../applications/file.js\";\nimport { deserializeJSON, serializeValue } from \"../applications/serialization.js\";\n\nexport interface BlobChunk {\n uri?: string;\n size?: number;\n etag?: string;\n}\n\nexport interface BlobValue {\n id?: string;\n chunks?: BlobChunk[];\n}\n\nexport interface SerializedObjectManifestValue {\n encoding?: string | number;\n encodingVersion?: number;\n size?: number;\n metadataSize?: number;\n sha256Hash?: string;\n contentType?: string;\n sourceFunctionCallId?: string;\n}\n\nexport interface SerializedObjectInsideBlobValue {\n manifest?: SerializedObjectManifestValue;\n offset?: number;\n}\n\nexport interface PreparedSerializedObject {\n object: SerializedObjectInsideBlobValue;\n bytes: Uint8Array;\n}\n\nexport type BlobLog = (message: string, fields?: Record<string, unknown>) => void;\n\nfunction enumIs(value: string | number | undefined, name: string, numberValue: number): boolean {\n return value === name || value === numberValue;\n}\n\nfunction concatenate(parts: Uint8Array[]): Uint8Array {\n const result = new Uint8Array(parts.reduce((total, part) => total + part.byteLength, 0));\n let offset = 0;\n for (const part of parts) {\n result.set(part, offset);\n offset += part.byteLength;\n }\n return result;\n}\n\nfunction networkURI(uri: string): string {\n if (uri.startsWith(\"s3://\")) return `https://${uri.slice(\"s3://\".length)}`;\n if (uri.startsWith(\"gs://\")) return `https://${uri.slice(\"gs://\".length)}`;\n return uri;\n}\n\nclass BlobHTTPError extends Error {\n constructor(readonly status: number) {\n super(`BLOB operation failed with HTTP ${status}`);\n }\n}\n\nfunction uriKind(uri: string): string {\n if (uri.startsWith(\"file://\")) return \"file\";\n if (uri.startsWith(\"s3://\")) return \"s3\";\n if (uri.startsWith(\"gs://\")) return \"gcs\";\n try {\n return new URL(uri).protocol.replace(\":\", \"\") || \"unknown\";\n } catch {\n return \"unknown\";\n }\n}\n\nfunction throwIfAborted(signal?: AbortSignal): void {\n signal?.throwIfAborted();\n}\n\nasync function abortableDelay(delayMs: number, signal?: AbortSignal): Promise<void> {\n throwIfAborted(signal);\n if (signal == null) {\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n return;\n }\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, delayMs);\n const onAbort = () => {\n clearTimeout(timer);\n reject(signal.reason);\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\nasync function fetchWithRetries(\n uri: string,\n init?: RequestInit,\n log?: BlobLog,\n fields: Record<string, unknown> = {},\n signal?: AbortSignal,\n): Promise<Response> {\n let lastError: unknown;\n for (let attempt = 0; attempt < 4; attempt += 1) {\n throwIfAborted(signal);\n const startedAt = Date.now();\n log?.(\"HTTP attempt starting\", {\n ...fields,\n attempt: attempt + 1,\n method: init?.method ?? \"GET\",\n uri_kind: uriKind(uri),\n has_range: new Headers(init?.headers).has(\"range\"),\n });\n try {\n const response = await fetch(networkURI(uri), {\n ...init,\n signal,\n });\n log?.(\"HTTP attempt completed\", {\n ...fields,\n attempt: attempt + 1,\n method: init?.method ?? \"GET\",\n status_code: response.status,\n duration_ms: Date.now() - startedAt,\n });\n throwIfAborted(signal);\n if (response.ok) return response;\n if ([400, 403, 404].includes(response.status) || attempt === 3) {\n throw new BlobHTTPError(response.status);\n }\n lastError = new BlobHTTPError(response.status);\n } catch (error) {\n log?.(\"HTTP attempt failed\", {\n ...fields,\n attempt: attempt + 1,\n method: init?.method ?? \"GET\",\n duration_ms: Date.now() - startedAt,\n error: error instanceof Error ? `${error.name}: ${error.message}` : String(error),\n });\n throwIfAborted(signal);\n if (error instanceof BlobHTTPError && [400, 403, 404].includes(error.status)) throw error;\n lastError = error;\n if (attempt === 3) break;\n }\n const retryDelayMs = 100 * (2 ** attempt);\n log?.(\"HTTP attempt scheduled for retry\", {\n ...fields,\n next_attempt: attempt + 2,\n retry_delay_ms: retryDelayMs,\n });\n await abortableDelay(retryDelayMs, signal);\n }\n throw new Error(\"BLOB operation failed after retries\", { cause: lastError });\n}\n\nasync function readChunkRange(\n chunk: BlobChunk,\n index: number,\n logicalChunkOffset: number,\n offsetWithinChunk: number,\n size: number,\n sharedURI: boolean,\n log?: BlobLog,\n signal?: AbortSignal,\n): Promise<Uint8Array> {\n throwIfAborted(signal);\n if (!chunk.uri) throw new Error(\"BLOB chunk has no URI\");\n const physicalOffset = sharedURI ? logicalChunkOffset + offsetWithinChunk : offsetWithinChunk;\n const fields = {\n chunk_index: index,\n chunk_offset: logicalChunkOffset,\n read_offset: physicalOffset,\n read_bytes: size,\n uri_kind: uriKind(chunk.uri),\n shared_uri: sharedURI,\n };\n const startedAt = Date.now();\n log?.(\"download chunk starting\", fields);\n if (chunk.uri.startsWith(\"file://\")) {\n const file = await open(fileURLToPath(chunk.uri), \"r\");\n try {\n throwIfAborted(signal);\n const data = new Uint8Array(size);\n const { bytesRead } = await file.read(data, 0, size, physicalOffset);\n throwIfAborted(signal);\n if (bytesRead !== size) {\n throw new Error(`BLOB chunk ended after ${bytesRead} bytes; expected ${size}`);\n }\n log?.(\"download chunk completed\", {\n ...fields,\n downloaded_bytes: data.byteLength,\n duration_ms: Date.now() - startedAt,\n });\n return data;\n } finally {\n await file.close();\n }\n }\n const headers = { range: `bytes=${physicalOffset}-${physicalOffset + size - 1}` };\n const response = await fetchWithRetries(chunk.uri, { headers }, log, fields, signal);\n let data = new Uint8Array(await response.arrayBuffer());\n throwIfAborted(signal);\n // A server may ignore Range and return the complete object with HTTP 200.\n if (response.status === 200 && (physicalOffset !== 0 || data.byteLength !== size)) {\n data = data.subarray(physicalOffset, physicalOffset + size);\n }\n if (data.byteLength !== size) {\n throw new Error(`BLOB chunk returned ${data.byteLength} bytes; expected ${size}`);\n }\n log?.(\"download chunk completed\", {\n ...fields,\n status_code: response.status,\n downloaded_bytes: data.byteLength,\n duration_ms: Date.now() - startedAt,\n });\n return data;\n}\n\nexport async function downloadBlobRange(\n blob: BlobValue,\n offset: number,\n size: number,\n log?: BlobLog,\n signal?: AbortSignal,\n): Promise<Uint8Array> {\n throwIfAborted(signal);\n if (!Number.isSafeInteger(offset) || offset < 0 || !Number.isSafeInteger(size) || size < 0) {\n throw new Error(\"BLOB range offset and size must be non-negative safe integers\");\n }\n const chunks = blob.chunks ?? [];\n const totalSize = chunks.reduce((total, chunk) => total + (chunk.size ?? 0), 0);\n if (offset + size > totalSize) {\n throw new Error(`BLOB range ${offset}..${offset + size} exceeds declared size ${totalSize}`);\n }\n if (size === 0) return new Uint8Array();\n const uriCounts = new Map<string, number>();\n for (const chunk of chunks) {\n if (chunk.uri != null) uriCounts.set(chunk.uri, (uriCounts.get(chunk.uri) ?? 0) + 1);\n }\n const rangeEnd = offset + size;\n let chunkOffset = 0;\n const reads: Array<Promise<Uint8Array>> = [];\n for (const [index, chunk] of chunks.entries()) {\n const chunkSize = chunk.size ?? 0;\n const chunkEnd = chunkOffset + chunkSize;\n const overlapStart = Math.max(offset, chunkOffset);\n const overlapEnd = Math.min(rangeEnd, chunkEnd);\n if (overlapStart < overlapEnd) {\n reads.push(readChunkRange(\n chunk,\n index,\n chunkOffset,\n overlapStart - chunkOffset,\n overlapEnd - overlapStart,\n (uriCounts.get(chunk.uri ?? \"\") ?? 0) > 1,\n log,\n signal,\n ));\n }\n chunkOffset = chunkEnd;\n }\n const data = concatenate(await Promise.all(reads));\n throwIfAborted(signal);\n if (data.byteLength !== size) throw new Error(\"BLOB does not contain the complete requested range\");\n log?.(\"download blob completed\", {\n blob_id: blob.id,\n chunk_count: chunks.length,\n downloaded_bytes: data.byteLength,\n range_offset: offset,\n range_size: size,\n });\n return data;\n}\n\nexport async function downloadBlob(\n blob: BlobValue,\n log?: BlobLog,\n signal?: AbortSignal,\n): Promise<Uint8Array> {\n const size = (blob.chunks ?? []).reduce((total, chunk) => total + (chunk.size ?? 0), 0);\n return downloadBlobRange(blob, 0, size, log, signal);\n}\n\nexport async function downloadSerializedObject(\n object: SerializedObjectInsideBlobValue,\n blob: BlobValue,\n log?: BlobLog,\n signal?: AbortSignal,\n): Promise<{ data: Uint8Array; metadata: Uint8Array; contentType?: string; encoding?: string | number }> {\n throwIfAborted(signal);\n const manifest = object.manifest;\n if (manifest?.size == null || manifest.metadataSize == null) {\n throw new Error(\"Serialized object manifest is missing size or metadata_size\");\n }\n if (!Number.isSafeInteger(manifest.size) || manifest.size < 0) {\n throw new Error(\"Serialized object size must be a non-negative safe integer\");\n }\n if (!Number.isSafeInteger(manifest.metadataSize) || manifest.metadataSize < 0) {\n throw new Error(\"Serialized object metadata_size must be a non-negative safe integer\");\n }\n if (manifest.metadataSize > manifest.size) {\n throw new Error(\"Serialized object metadata_size cannot exceed size\");\n }\n if (typeof manifest.sha256Hash !== \"string\" || manifest.sha256Hash.length === 0) {\n throw new Error(\"Serialized object manifest is missing sha256_hash\");\n }\n const start = object.offset ?? 0;\n const bytes = await downloadBlobRange(blob, start, manifest.size, log, signal);\n throwIfAborted(signal);\n const hash = createHash(\"sha256\").update(bytes).digest(\"hex\");\n if (hash !== manifest.sha256Hash) {\n throw new Error(`Serialized object hash mismatch: expected ${manifest.sha256Hash}, got ${hash}`);\n }\n return {\n metadata: bytes.subarray(0, manifest.metadataSize),\n data: bytes.subarray(manifest.metadataSize),\n contentType: manifest.contentType,\n encoding: manifest.encoding,\n };\n}\n\nexport function deserializeValueFromProtocol(\n value: { data: Uint8Array; contentType?: string; encoding?: string | number },\n): unknown {\n if (enumIs(value.encoding, \"SERIALIZED_OBJECT_ENCODING_RAW\", 5)) {\n return new File(value.data, value.contentType ?? \"application/octet-stream\");\n }\n if (enumIs(value.encoding, \"SERIALIZED_OBJECT_ENCODING_UTF8_TEXT\", 2)) {\n return new TextDecoder(\"utf-8\", { fatal: true }).decode(value.data);\n }\n if (\n enumIs(value.encoding, \"SERIALIZED_OBJECT_ENCODING_UTF8_JSON\", 1) ||\n value.contentType?.toLowerCase().includes(\"json\")\n ) {\n return deserializeJSON(value.data);\n }\n throw new Error(`Unsupported serialized object encoding '${String(value.encoding)}'`);\n}\n\nexport function prepareSerializedObject(\n value: unknown,\n offset = 0,\n sourceFunctionCallId?: string,\n): PreparedSerializedObject {\n const serialized = serializeValue(value);\n const metadata = new TextEncoder().encode(JSON.stringify({\n format: \"tensorlake.typescript.value.v1\",\n }));\n const bytes = concatenate([metadata, serialized.data]);\n return {\n bytes,\n object: {\n offset,\n manifest: {\n encoding: serialized.encoding === \"json\"\n ? \"SERIALIZED_OBJECT_ENCODING_UTF8_JSON\"\n : \"SERIALIZED_OBJECT_ENCODING_RAW\",\n encodingVersion: 0,\n size: bytes.byteLength,\n metadataSize: metadata.byteLength,\n sha256Hash: createHash(\"sha256\").update(bytes).digest(\"hex\"),\n ...(serialized.encoding === \"raw\" ? { contentType: serialized.contentType } : {}),\n sourceFunctionCallId,\n },\n },\n };\n}\n\nexport function prepareTextObject(value: string): PreparedSerializedObject {\n const bytes = new TextEncoder().encode(value);\n return {\n bytes,\n object: {\n offset: 0,\n manifest: {\n encoding: \"SERIALIZED_OBJECT_ENCODING_UTF8_TEXT\",\n encodingVersion: 0,\n size: bytes.byteLength,\n metadataSize: 0,\n sha256Hash: createHash(\"sha256\").update(bytes).digest(\"hex\"),\n },\n },\n };\n}\n\nasync function uploadChunk(\n chunk: BlobChunk,\n data: Uint8Array,\n index: number,\n offset: number,\n log?: BlobLog,\n signal?: AbortSignal,\n): Promise<BlobChunk> {\n throwIfAborted(signal);\n if (!chunk.uri) throw new Error(\"Writable BLOB chunk has no URI\");\n const fields = {\n chunk_index: index,\n chunk_offset: offset,\n upload_bytes: data.byteLength,\n chunk_capacity: chunk.size ?? 0,\n uri_kind: uriKind(chunk.uri),\n };\n const startedAt = Date.now();\n log?.(\"upload chunk starting\", fields);\n if (chunk.uri.startsWith(\"file://\")) {\n const filePath = fileURLToPath(chunk.uri);\n let file;\n try {\n file = await open(filePath, \"r+\");\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n file = await open(filePath, \"w+\");\n }\n try {\n throwIfAborted(signal);\n await file.write(data, 0, data.byteLength, offset);\n throwIfAborted(signal);\n } finally {\n await file.close();\n }\n log?.(\"upload chunk completed\", { ...fields, duration_ms: Date.now() - startedAt });\n return { ...chunk, size: data.byteLength };\n }\n const response = await fetchWithRetries(chunk.uri, {\n method: \"PUT\",\n ...(data.byteLength === 0 ? {} : {\n body: Uint8Array.from(data).buffer,\n }),\n }, log, fields, signal);\n throwIfAborted(signal);\n const uploaded = {\n ...chunk,\n size: data.byteLength,\n etag: response.headers.get(\"etag\") ?? undefined,\n };\n log?.(\"upload chunk completed\", {\n ...fields,\n status_code: response.status,\n has_etag: uploaded.etag != null,\n duration_ms: Date.now() - startedAt,\n });\n return uploaded;\n}\n\nexport async function uploadBlob(\n blob: BlobValue,\n data: Uint8Array,\n log?: BlobLog,\n signal?: AbortSignal,\n): Promise<BlobValue> {\n throwIfAborted(signal);\n const chunks = blob.chunks ?? [];\n const capacity = chunks.reduce((total, chunk) => total + (chunk.size ?? 0), 0);\n if (data.byteLength > capacity) throw new Error(`BLOB capacity ${capacity} is smaller than ${data.byteLength}`);\n let offset = 0;\n const uploaded: BlobChunk[] = [];\n for (const [index, chunk] of chunks.entries()) {\n const size = Math.min(chunk.size ?? 0, data.byteLength - offset);\n if (size <= 0) break;\n uploaded.push(await uploadChunk(\n chunk,\n data.subarray(offset, offset + size),\n index,\n offset,\n log,\n signal,\n ));\n offset += size;\n }\n if (data.byteLength === 0 && chunks.length > 0) {\n uploaded.push(await uploadChunk(chunks[0], data, 0, 0, log, signal));\n }\n throwIfAborted(signal);\n if (offset !== data.byteLength) throw new Error(`Only uploaded ${offset} of ${data.byteLength} bytes`);\n log?.(\"upload blob completed\", {\n blob_id: blob.id,\n chunk_count: uploaded.length,\n uploaded_bytes: data.byteLength,\n });\n return { ...blob, chunks: uploaded };\n}\n\nexport function joinPrepared(values: PreparedSerializedObject[]): Uint8Array {\n return concatenate(values.map((value) => value.bytes));\n}\n","import { randomUUID } from \"node:crypto\";\nimport { writeStructuredOutput } from \"./safe-output.js\";\n\nexport function printCloudEvent(\n data: Record<string, unknown>,\n options: { type?: string; source?: string; message?: string } = {},\n): void {\n writeStructuredOutput(\"stdout\", () => ({\n specversion: \"1.0\",\n id: randomUUID(),\n timestamp: new Date().toISOString(),\n type: options.type ?? \"ai.tensorlake.event\",\n source: options.source ?? \"/tensorlake/function_executor/events\",\n data,\n ...(options.message == null ? {} : { message: options.message }),\n }));\n}\n"],"mappings":"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","names":["path","fileURLToPath","grpc","executionAsyncId","createHash","randomUUID","registry","Headers","AsyncLocalStorage","path","AsyncLocalStorage","createHash","status","data","createHash","randomUUID","randomUUID","status","createHash","executionAsyncId","result","error","Headers","randomUUID","path","fileURLToPath"]}
1
+ {"version":3,"sources":["../../src/function-executor/main.ts","../../src/native-worker-client.ts","../../src/native-worker-protocol.ts","../../src/defaults.ts","../../src/url.ts","../../src/function-executor/safe-output.ts","../../src/function-executor/service.ts","../../src/applications/errors.ts","../../src/applications/registry.ts","../../src/function-executor/allocation.ts","../../src/applications/function.ts","../../src/applications/schema.ts","../../src/applications/file.ts","../../src/applications/http-body.ts","../../src/applications/headers.ts","../../src/applications/context.ts","../../src/applications/serialization.ts","../../src/function-executor/async-queue.ts","../../src/function-executor/blob.ts","../../src/function-executor/user-events.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport { configureNativeWorker } from \"../native-worker-client.js\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport * as grpc from \"@grpc/grpc-js\";\nimport { loadSync } from \"@grpc/proto-loader\";\nimport { getProtoPath } from \"google-proto-files\";\nimport { writeStructuredOutput } from \"./safe-output.js\";\nimport { FunctionExecutorService } from \"./service.js\";\n\ninterface Arguments {\n address?: string;\n executorId?: string;\n functionExecutorId: string;\n}\n\nconst SHUTDOWN_GRACE_PERIOD_MS = 10_000;\nconst IPV4_LOOPBACK_ADDRESS = \"127.0.0.1\";\n\nexport function functionExecutorBindAddress(address: string): string {\n if (address === \"localhost\") return IPV4_LOOPBACK_ADDRESS;\n if (address.startsWith(\"localhost:\")) {\n return `${IPV4_LOOPBACK_ADDRESS}${address.slice(\"localhost\".length)}`;\n }\n return address;\n}\n\nfunction parseArguments(argv: string[]): Arguments {\n const result: Arguments = { functionExecutorId: \"\" };\n for (let index = 0; index < argv.length; index += 1) {\n const argument = argv[index];\n const [key, inline] = argument.split(\"=\", 2);\n const value = inline ?? argv[index + 1];\n if (key === \"--address\") result.address = value;\n else if (key === \"--executor-id\") result.executorId = value;\n else if (key === \"--function-executor-id\") result.functionExecutorId = value ?? \"\";\n else continue;\n if (inline == null) index += 1;\n }\n return result;\n}\n\nfunction serviceDefinition(): grpc.ServiceDefinition {\n const protoRoot = functionExecutorProtoRoot();\n const protoPath = path.join(protoRoot, \"tensorlake/function_executor/proto/function_executor.proto\");\n const packageDefinition = loadSync(protoPath, {\n includeDirs: [path.dirname(protoPath), protoRoot, getProtoPath()],\n keepCase: false,\n longs: Number,\n enums: String,\n defaults: false,\n oneofs: true,\n });\n const loaded = grpc.loadPackageDefinition(packageDefinition) as Record<string, any>;\n return loaded.function_executor_service.FunctionExecutor.service as grpc.ServiceDefinition;\n}\n\nfunction functionExecutorProtoRoot(): string {\n const relativeRoots = [\n // Standalone function-executor capsule.\n \"../../proto/\",\n // Function executor launched directly from the published SDK package.\n \"../../runtime/function-executor/package/proto/\",\n // Development checkout: both language runtimes use the repository source.\n \"../../../proto/\",\n ];\n for (const relativeRoot of relativeRoots) {\n const protoRoot = fileURLToPath(new URL(relativeRoot, import.meta.url));\n const protoPath = path.join(protoRoot, \"tensorlake/function_executor/proto/function_executor.proto\");\n if (existsSync(protoPath)) return protoRoot;\n }\n throw new Error(\"Cannot find the shared Tensorlake function-executor protobuf definition\");\n}\n\nexport async function main(argv = process.argv.slice(2)): Promise<void> {\n configureNativeWorker(() => new URL(\"../native-worker.cjs\", import.meta.url));\n const nodeMajor = Number(process.versions.node.split(\".\")[0]);\n if (nodeMajor < 24) throw new Error(`Tensorlake TypeScript functions require Node 24 or newer; got ${process.versions.node}`);\n const args = parseArguments(argv);\n if (!args.address) throw new Error(\"--address argument is required\");\n if (!args.executorId) throw new Error(\"--executor-id argument is required\");\n const address = functionExecutorBindAddress(args.address);\n\n writeStructuredOutput(\"stderr\", () => ({\n timestamp: new Date().toISOString(),\n level: \"info\",\n component: \"typescript_function_executor_main\",\n message: \"starting TypeScript function executor\",\n address,\n executor_id: args.executorId,\n fn_executor_id: args.functionExecutorId,\n node_version: process.versions.node,\n pid: process.pid,\n }));\n\n const server = new grpc.Server({\n \"grpc.max_receive_message_length\": -1,\n \"grpc.max_send_message_length\": -1,\n \"grpc.so_reuseport\": 0,\n });\n const service = new FunctionExecutorService();\n server.addService(serviceDefinition(), service.implementation);\n await new Promise<void>((resolve, reject) => {\n server.bindAsync(address, grpc.ServerCredentials.createInsecure(), (error) => {\n if (error != null) reject(error);\n else resolve();\n });\n });\n writeStructuredOutput(\"stderr\", () => ({\n timestamp: new Date().toISOString(),\n level: \"info\",\n component: \"typescript_function_executor_main\",\n message: \"started TypeScript function executor\",\n address,\n executor_id: args.executorId,\n fn_executor_id: args.functionExecutorId,\n node_version: process.versions.node,\n }));\n let stopping = false;\n const shutdown = (signal: string) => {\n if (stopping) return;\n stopping = true;\n writeStructuredOutput(\"stderr\", () => ({\n timestamp: new Date().toISOString(),\n level: \"info\",\n component: \"typescript_function_executor_main\",\n message: \"stopping TypeScript function executor\",\n signal,\n executor_id: args.executorId,\n fn_executor_id: args.functionExecutorId,\n pid: process.pid,\n }));\n const forceShutdownTimer = setTimeout(() => {\n writeStructuredOutput(\"stderr\", () => ({\n timestamp: new Date().toISOString(),\n level: \"error\",\n component: \"typescript_function_executor_main\",\n message: \"forcing TypeScript function executor shutdown after grace period\",\n signal,\n executor_id: args.executorId,\n fn_executor_id: args.functionExecutorId,\n pid: process.pid,\n grace_period_ms: SHUTDOWN_GRACE_PERIOD_MS,\n }));\n server.forceShutdown();\n process.exit(1);\n }, SHUTDOWN_GRACE_PERIOD_MS);\n const gracefulShutdown = service\n .shutdown(new Error(`Function executor received ${signal}`))\n .then(() => new Promise<void>((resolve, reject) => {\n server.tryShutdown((error) => {\n if (error != null) reject(error);\n else resolve();\n });\n }));\n void gracefulShutdown.then(\n () => {\n clearTimeout(forceShutdownTimer);\n writeStructuredOutput(\"stderr\", () => ({\n timestamp: new Date().toISOString(),\n level: \"info\",\n component: \"typescript_function_executor_main\",\n message: \"stopped TypeScript function executor\",\n signal,\n executor_id: args.executorId,\n fn_executor_id: args.functionExecutorId,\n pid: process.pid,\n }));\n process.exit(0);\n },\n (error: unknown) => {\n clearTimeout(forceShutdownTimer);\n writeStructuredOutput(\"stderr\", () => ({\n timestamp: new Date().toISOString(),\n level: \"error\",\n component: \"typescript_function_executor_main\",\n message: \"TypeScript function executor shutdown failed\",\n signal,\n executor_id: args.executorId,\n fn_executor_id: args.functionExecutorId,\n pid: process.pid,\n error: error instanceof Error ? `${error.name}: ${error.message}` : String(error),\n }));\n server.forceShutdown();\n process.exit(1);\n },\n );\n };\n process.once(\"SIGINT\", () => shutdown(\"SIGINT\"));\n process.once(\"SIGTERM\", () => shutdown(\"SIGTERM\"));\n}\n","import { createRequire } from \"node:module\";\nimport { Worker } from \"node:worker_threads\";\nimport type { NativeEmit, NativeSandboxBinding } from \"./native-sandbox.js\";\nimport {\n cancelNativeCall,\n closeNativeHandle,\n type NativeCall,\n type NativeHandle,\n type WorkerRequest,\n type WorkerResponse,\n} from \"./native-worker-protocol.js\";\nimport { resolveProxyTarget } from \"./url.js\";\n\ninterface PendingCall {\n resolve: (value: any) => void;\n reject: (error: Error) => void;\n emit?: NativeEmit;\n // Keep descriptors (and their parents) alive until the operation settles.\n handle?: NativeHandle;\n}\n\n/** One persistent worker per SDK installation and calling isolate. */\nexport class NativeWorkerClient {\n private worker?: Worker;\n private nextId = 1;\n private registered = new Set<number>();\n private pending = new Map<number, PendingCall>();\n private finalizers = new FinalizationRegistry<number>((id) =>\n this.release(id),\n );\n\n constructor(\n private readonly workerPath: () => string | URL = () =>\n createRequire(import.meta.url).resolve(\n \"tensorlake/internal/native-worker\",\n ),\n ) {}\n\n handle(\n kind: NativeHandle[\"kind\"],\n args: unknown[],\n parent?: NativeHandle,\n ): object {\n const handle: NativeHandle = { id: this.nextId++, kind, args, parent };\n this.finalizers.register(handle, handle.id);\n let closed = false;\n return new Proxy(\n {},\n {\n get: (_target, method) => {\n if (method === \"then\") return undefined;\n if (method === closeNativeHandle)\n return () => {\n closed = true;\n this.release(handle.id);\n };\n if (method === \"connectProxy\")\n return (...proxyArgs: unknown[]) => {\n if (closed) throw new Error(\"Tensorlake native client is closed\");\n return this.handle(\"NativeSandboxProxyClient\", proxyArgs, handle);\n };\n if (method === \"baseUrl\")\n return () =>\n resolveProxyTarget(String(args[0]), String(args[1])).baseUrl;\n if (typeof method !== \"string\") return undefined;\n return (...callArgs: unknown[]) => {\n if (closed)\n return Promise.reject(\n new Error(\"Tensorlake native client is closed\"),\n );\n const emit =\n typeof callArgs.at(-1) === \"function\"\n ? (callArgs.pop() as NativeEmit)\n : undefined;\n return this.call(handle, method, callArgs, emit);\n };\n },\n },\n );\n }\n\n call(\n handle: NativeHandle | undefined,\n method: string,\n args: unknown[],\n emit?: NativeEmit,\n ): NativeCall<any> {\n const id = this.nextId++;\n let worker: Worker | undefined;\n const promise: NativeCall<any> = new Promise((resolve, reject) => {\n try {\n worker = this.getWorker();\n this.pending.set(id, { resolve, reject, emit, handle });\n worker.ref();\n if (handle) this.register(handle, worker);\n this.send(worker, {\n type: \"call\",\n id,\n handleId: handle?.id,\n method,\n args,\n stream: !!emit,\n });\n } catch (error) {\n this.pending.delete(id);\n this.unrefIfIdle();\n reject(error);\n }\n });\n promise[cancelNativeCall] = () => {\n const pending = this.pending.get(id);\n if (pending && worker) {\n pending.emit = undefined;\n this.send(worker, { type: \"cancel\", id });\n }\n };\n return promise;\n }\n\n private getWorker(): Worker {\n if (this.worker) return this.worker;\n const worker = new Worker(this.workerPath(), {\n // The bundled worker needs no application loaders or telemetry preloads.\n // NODE_OPTIONS is parsed independently of execArgv by Node.\n execArgv: [],\n env: { ...process.env, NODE_OPTIONS: \"\" },\n name: \"tensorlake-native\",\n });\n this.worker = worker;\n worker.on(\"message\", (message: WorkerResponse) => {\n const pending = this.pending.get(message.id);\n if (!pending || this.worker !== worker) return;\n if (message.type === \"event\") {\n // Acknowledge only when the consumer asks for the next event. At most\n // one event per stream is outstanding across Rust, worker and caller.\n Promise.resolve()\n .then(() => pending.emit?.(message.value))\n .then(\n () => {\n if (this.worker === worker)\n this.send(worker, { type: \"ack\", id: message.id });\n },\n (error: Error) => {\n this.send(worker, { type: \"cancel\", id: message.id });\n pending.reject(error);\n },\n );\n return;\n }\n this.pending.delete(message.id);\n if (message.type === \"error\") {\n const error = new Error(message.error.message);\n error.name = message.error.name;\n error.stack = message.error.stack ?? error.stack;\n pending.reject(error);\n } else {\n pending.resolve(message.value);\n }\n this.unrefIfIdle();\n });\n const fail = (error: Error) => {\n if (this.worker !== worker) return;\n this.worker = undefined;\n this.registered.clear();\n for (const pending of this.pending.values()) pending.reject(error);\n this.pending.clear();\n // Never replay an in-flight request: it may already have taken effect.\n // A subsequent explicit call starts a fresh worker from descriptors.\n void worker.terminate();\n };\n worker.on(\"error\", fail);\n worker.on(\"messageerror\", fail);\n worker.on(\"exit\", (code) =>\n fail(\n new Error(\n `Tensorlake native worker exited (${code}); in-flight operations were not retried`,\n ),\n ),\n );\n worker.unref();\n return worker;\n }\n\n private register(handle: NativeHandle, worker: Worker): void {\n if (this.registered.has(handle.id)) return;\n if (handle.parent) this.register(handle.parent, worker);\n this.send(worker, {\n type: \"create\",\n handle: { id: handle.id, kind: handle.kind, args: handle.args },\n parentId: handle.parent?.id,\n });\n this.registered.add(handle.id);\n }\n\n private release(handleId: number): void {\n if (this.worker && this.registered.delete(handleId))\n this.send(this.worker, { type: \"release\", handleId });\n }\n\n private send(worker: Worker, message: WorkerRequest): void {\n worker.postMessage(message);\n }\n private unrefIfIdle(): void {\n if (this.pending.size === 0) this.worker?.unref();\n }\n}\n\nexport function createWorkerBinding(\n runtime: NativeWorkerClient,\n): NativeSandboxBinding {\n return {\n NativeCloudClient: class {\n constructor(...args: unknown[]) {\n return runtime.handle(\"NativeCloudClient\", args);\n }\n },\n NativeSandboxClient: class {\n constructor(...args: unknown[]) {\n return runtime.handle(\"NativeSandboxClient\", args);\n }\n },\n NativeSandboxProxyClient: class {\n constructor(...args: unknown[]) {\n return runtime.handle(\"NativeSandboxProxyClient\", args);\n }\n },\n NativeRepositoryClient: class {\n constructor(...args: unknown[]) {\n return runtime.handle(\"NativeRepositoryClient\", args);\n }\n },\n validateManagedName: (name: string) =>\n runtime.call(undefined, \"validateManagedName\", [name]),\n } as unknown as NativeSandboxBinding;\n}\n\n// ESM and CJS can coexist in one application. Share the worker across bundles\n// of this SDK version, while keeping incompatible installed versions separate.\ndeclare const __SDK_VERSION__: string;\nconst runtimeKey = Symbol.for(\n `tensorlake.native.worker.${typeof __SDK_VERSION__ === \"undefined\" ? \"source\" : __SDK_VERSION__}.v1`,\n);\nconst runtimes = globalThis as typeof globalThis & {\n [runtimeKey]?: NativeWorkerClient;\n};\nexport function workerBinding(): NativeSandboxBinding {\n return createWorkerBinding(\n (runtimes[runtimeKey] ??= new NativeWorkerClient()),\n );\n}\n\n/** Runtime capsules supply the worker alongside their bundled application SDK. */\nexport function configureNativeWorker(workerPath: () => string | URL): void {\n runtimes[runtimeKey] ??= new NativeWorkerClient(workerPath);\n}\n\nexport function releaseNativeHandle(handle: object | null): void {\n (handle as { [closeNativeHandle]?: () => void } | null)?.[\n closeNativeHandle\n ]?.();\n}\n","/** Internal protocol. Native objects never cross an isolate boundary. */\nexport type NativeClientKind =\n | \"NativeCloudClient\"\n | \"NativeSandboxClient\"\n | \"NativeSandboxProxyClient\"\n | \"NativeRepositoryClient\";\n\nexport interface NativeHandle {\n id: number;\n kind: NativeClientKind;\n args: unknown[];\n parent?: NativeHandle;\n}\n\nexport type WorkerRequest =\n | { type: \"create\"; handle: Omit<NativeHandle, \"parent\">; parentId?: number }\n | {\n type: \"call\";\n id: number;\n handleId?: number;\n method: string;\n args: unknown[];\n stream: boolean;\n }\n | { type: \"release\"; handleId: number }\n | { type: \"ack\" | \"cancel\"; id: number };\n\nexport type WorkerResponse =\n | { type: \"result\"; id: number; value: unknown }\n | {\n type: \"error\";\n id: number;\n error: { name: string; message: string; stack?: string };\n }\n | { type: \"event\"; id: number; value: string };\n\nexport const cancelNativeCall = Symbol.for(\"tensorlake.native.cancel.v1\");\nexport const closeNativeHandle = Symbol.for(\"tensorlake.native.close.v1\");\nexport type NativeCall<T> = Promise<T> & { [cancelNativeCall]?: () => void };\n","declare const __SDK_VERSION__: string;\nexport const SDK_VERSION: string = __SDK_VERSION__;\n\nexport const API_URL =\n process.env.TENSORLAKE_API_URL ?? \"https://api.tensorlake.ai\";\nexport const API_KEY = process.env.TENSORLAKE_API_KEY ?? undefined;\nexport const NAMESPACE = process.env.INDEXIFY_NAMESPACE ?? \"default\";\nexport const SANDBOX_PROXY_URL =\n process.env.TENSORLAKE_SANDBOX_PROXY_URL ?? \"https://sandbox.tensorlake.ai\";\n\nexport const DEFAULT_HTTP_TIMEOUT_MS = 300_000;\nexport const MAX_RETRIES = 3;\nexport const RETRY_BACKOFF_MS = 500;\n","import * as defaults from \"./defaults.js\";\n\n/** Remove a trailing slash from a URL string if present. */\nfunction trimTrailingSlashes(url: string): string {\n return url.endsWith(\"/\") ? url.slice(0, -1) : url;\n}\n\n/** Check whether a URL points to localhost. */\nexport function isLocalhost(apiUrl: string): boolean {\n try {\n const parsed = new URL(apiUrl);\n return parsed.hostname === \"localhost\" || parsed.hostname === \"127.0.0.1\";\n } catch {\n return false;\n }\n}\n\n/** Return the explicit sandbox proxy env override, if the user set one. */\nexport function explicitProxyUrlOverride(): string | undefined {\n const explicit = process.env.TENSORLAKE_SANDBOX_PROXY_URL?.trim();\n return explicit && explicit.length > 0 ? explicit : undefined;\n}\n\n/**\n * Resolve the legacy default proxy URL for direct sandbox handles.\n *\n * Normal client connect/create flows use the server-returned `sandboxUrl`.\n * This helper keeps the old direct-handle behavior and treats the env var as\n * an explicit override.\n *\n * Legacy priority:\n * 1. TENSORLAKE_SANDBOX_PROXY_URL env var\n * 2. `http://localhost:9443` for localhost API URLs\n * 3. Transform `api.X` → `sandbox.X`\n * 4. Default fallback\n */\nexport function resolveProxyUrl(apiUrl: string): string {\n const explicit = explicitProxyUrlOverride();\n if (explicit) return explicit;\n\n if (isLocalhost(apiUrl)) return \"http://localhost:9443\";\n\n try {\n const parsed = new URL(apiUrl);\n const host = parsed.hostname;\n if (host.startsWith(\"api.\")) {\n const proxyHost = \"sandbox.\" + host.slice(4);\n return `${parsed.protocol}//${proxyHost}`;\n }\n } catch {\n // fall through to default\n }\n\n return defaults.SANDBOX_PROXY_URL;\n}\n\n/**\n * Resolve the proxy target for a specific sandbox.\n *\n * - Localhost: base URL stays the same, Host header set to `{sandboxId}.local`\n * - Cloud: selected proxy domain with `X-Tensorlake-Sandbox-Id` header\n *\n * Returns `{ baseUrl, hostHeader, sandboxIdHeader }`.\n */\nexport function resolveProxyTarget(\n proxyUrl: string,\n sandboxId: string,\n): { baseUrl: string; hostHeader: string | undefined; sandboxIdHeader: string | undefined } {\n try {\n const parsed = new URL(proxyUrl);\n const host = parsed.hostname;\n\n if (host === \"localhost\" || host === \"127.0.0.1\") {\n return {\n baseUrl: trimTrailingSlashes(proxyUrl),\n hostHeader: `${sandboxId}.local`,\n sandboxIdHeader: undefined,\n };\n }\n\n const port = parsed.port ? `:${parsed.port}` : \"\";\n return {\n baseUrl: `${parsed.protocol}//${host}${port}`,\n hostHeader: undefined,\n sandboxIdHeader: sandboxId,\n };\n } catch {\n return {\n baseUrl: `${trimTrailingSlashes(proxyUrl)}/${sandboxId}`,\n hostHeader: undefined,\n sandboxIdHeader: undefined,\n };\n }\n}\n\n/**\n * Build a public sandbox URL from a server-provided ingress endpoint.\n *\n * `port` omitted or `9501` returns the management URL:\n * `https://<sandbox-id>.<ingress-host>`. User ports use the public\n * `<port>-<sandbox-id>.<ingress-host>` form.\n */\nexport function sandboxUrlFromIngressEndpoint(\n ingressEndpoint: string,\n sandboxId: string,\n port = 9501,\n): string {\n const parsed = new URL(ingressEndpoint);\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(\"ingressEndpoint must be an absolute http(s) URL\");\n }\n const label = port === 9501 ? sandboxId : `${port}-${sandboxId}`;\n return `${parsed.protocol}//${label}.${parsed.host}`;\n}\n\n/**\n * Derive the sandbox lifecycle URL from the API URL.\n *\n * Transforms `api.X` → `sandbox.X` for cloud. Returns the URL unchanged for\n * localhost or unrecognised patterns.\n */\nexport function resolveSandboxLifecycleUrl(apiUrl: string): string {\n if (isLocalhost(apiUrl)) return apiUrl;\n\n try {\n const parsed = new URL(apiUrl);\n if (parsed.hostname.startsWith(\"api.\")) {\n parsed.hostname = \"sandbox.\" + parsed.hostname.slice(4);\n return parsed.toString().replace(/\\/$/, \"\");\n }\n } catch {\n // fall through\n }\n\n return apiUrl;\n}\n\n/**\n * Build a lifecycle API path.\n *\n * - Localhost (namespaced): `/v1/namespaces/{namespace}/{path}`\n * - Cloud (flat): `/{path}`\n */\nexport function lifecyclePath(\n path: string,\n isLocal: boolean,\n namespace: string,\n): string {\n if (isLocal) {\n return `/v1/namespaces/${namespace}/${path}`;\n }\n return `/${path}`;\n}\n","type OutputDestination = \"stdout\" | \"stderr\";\n\ninterface CapturedStream {\n readonly write: (\n chunk: string,\n callback: (error?: Error | null) => void,\n ) => boolean;\n}\n\ninterface ExecutorOutput {\n readonly stdout: CapturedStream;\n readonly stderr: CapturedStream;\n}\n\nconst nativeJSONStringify = JSON.stringify;\n\nfunction captureStream(stream: NodeJS.WriteStream): CapturedStream {\n // A closed descriptor reports its failure through the stream's error event.\n // The executor owns these output streams, so logging failures must not become\n // uncaught exceptions in an allocation or initialization path.\n stream.on(\"error\", () => undefined);\n return {\n // Deployed code runs in this process and can replace stream.write. Capture\n // the executor's writer before application modules are imported.\n write: stream.write.bind(stream) as CapturedStream[\"write\"],\n };\n}\n\nconst executorOutput: ExecutorOutput = {\n stdout: captureStream(process.stdout),\n stderr: captureStream(process.stderr),\n};\n\n/**\n * Writes one JSON log record without allowing serialization or stream failures\n * to affect executor control flow.\n */\nexport function writeStructuredOutput(\n destination: OutputDestination,\n createRecord: () => Record<string, unknown>,\n): void {\n try {\n const serialized = nativeJSONStringify(createRecord());\n if (serialized == null) return;\n executorOutput[destination].write(`${serialized}\\n`, () => undefined);\n } catch {\n // Logging is best-effort. In particular, terminal allocation and\n // initialization callbacks must still run after user code damages stdio.\n }\n}\n","import { mkdir, mkdtemp, readFile, rm, writeFile } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { compileFunction, constants as vmConstants } from \"node:vm\";\nimport * as grpc from \"@grpc/grpc-js\";\nimport { unzipSync } from \"fflate\";\nimport { SDK_VERSION } from \"../defaults.js\";\nimport type { RegisteredDefinition } from \"../applications/function.js\";\nimport { restoreRegistry, snapshotRegistry } from \"../applications/registry.js\";\nimport { AllocationRunner } from \"./allocation.js\";\nimport { writeStructuredOutput } from \"./safe-output.js\";\nimport { printCloudEvent } from \"./user-events.js\";\n\ntype Message = Record<string, any>;\ntype UnaryCall = grpc.ServerUnaryCall<Message, Message>;\ntype Callback = grpc.sendUnaryData<Message>;\ntype WritableCall = grpc.ServerWritableStream<Message, Message>;\ntype LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\nconst SHUTDOWN_TERMINAL_DRAIN_TIMEOUT_MS = 1_000;\n\ninterface CodeManifest {\n format_version?: number;\n runtime?: string;\n minimum_node_major?: number;\n module?: string;\n functions?: Record<string, { name?: string }>;\n}\n\ninterface RuntimeModule {\n __tensorlakeGetFunction?(name: string): RegisteredDefinition;\n}\n\nconst nativeImport = compileFunction(\n \"return import(specifier)\",\n [\"specifier\"],\n { importModuleDynamically: vmConstants.USE_MAIN_CONTEXT_DEFAULT_LOADER },\n) as (specifier: string) => Promise<unknown>;\n\nfunction rpcError(code: grpc.status, details: string): grpc.ServiceError {\n return Object.assign(new Error(details), { code, details, metadata: new grpc.Metadata() });\n}\n\nfunction requireSafeSize(value: unknown, field: string): number {\n if (!Number.isSafeInteger(value) || Number(value) < 0) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, `${field} must be a non-negative safe integer`);\n }\n return Number(value);\n}\n\nfunction validateSerializedObjectManifest(manifest: Message | undefined, field: string): void {\n if (manifest == null) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, `${field}.manifest is required`);\n }\n if (manifest.encoding == null) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, `${field}.manifest.encoding is required`);\n }\n if (manifest.encodingVersion == null) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, `${field}.manifest.encoding_version is required`);\n }\n requireSafeSize(manifest.encodingVersion, `${field}.manifest.encoding_version`);\n requireSafeSize(manifest.size, `${field}.manifest.size`);\n if (manifest.metadataSize == null) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, `${field}.manifest.metadata_size is required`);\n }\n const metadataSize = requireSafeSize(manifest.metadataSize, `${field}.manifest.metadata_size`);\n if (metadataSize > Number(manifest.size)) {\n throw rpcError(\n grpc.status.INVALID_ARGUMENT,\n `${field}.manifest.metadata_size cannot exceed size`,\n );\n }\n if (typeof manifest.sha256Hash !== \"string\" || manifest.sha256Hash.length === 0) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, `${field}.manifest.sha256_hash is required`);\n }\n}\n\nfunction validateBlob(blob: Message | undefined, field: string): void {\n if (blob == null) throw rpcError(grpc.status.INVALID_ARGUMENT, `${field} is required`);\n if (!Array.isArray(blob.chunks)) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, `${field}.chunks must be an array`);\n }\n blob.chunks.forEach((chunk: Message | undefined, index: number) => {\n if (chunk == null || typeof chunk.uri !== \"string\" || chunk.uri.length === 0) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, `${field}.chunks[${index}].uri is required`);\n }\n requireSafeSize(chunk.size, `${field}.chunks[${index}].size`);\n });\n}\n\nfunction validateNewAllocation(allocation: Message | undefined): asserts allocation is Message {\n if (allocation == null) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, \"CreateAllocationRequest.allocation is required\");\n }\n for (const [field, value] of [\n [\"request_id\", allocation.requestId],\n [\"function_call_id\", allocation.functionCallId],\n [\"allocation_id\", allocation.allocationId],\n ] as const) {\n if (typeof value !== \"string\" || value.length === 0) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, `Allocation.${field} is required`);\n }\n }\n const inputs = allocation.inputs;\n if (inputs == null) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, \"Allocation.inputs is required\");\n }\n if (!Array.isArray(inputs.args) || !Array.isArray(inputs.argBlobs)) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, \"Allocation input args and arg_blobs must be arrays\");\n }\n if (inputs.args.length !== inputs.argBlobs.length) {\n throw rpcError(\n grpc.status.INVALID_ARGUMENT,\n `Mismatched function arguments and argument blobs lengths, ${inputs.args.length} != ${inputs.argBlobs.length}`,\n );\n }\n inputs.args.forEach((argument: Message | undefined, index: number) => {\n if (argument == null) {\n throw rpcError(grpc.status.INVALID_ARGUMENT, `Allocation.inputs.args[${index}] is required`);\n }\n requireSafeSize(argument.offset, `Allocation.inputs.args[${index}].offset`);\n validateSerializedObjectManifest(argument.manifest, `Allocation.inputs.args[${index}]`);\n validateBlob(inputs.argBlobs[index], `Allocation.inputs.arg_blobs[${index}]`);\n });\n validateBlob(inputs.requestErrorBlob, \"Allocation.inputs.request_error_blob\");\n}\n\nfunction safeArchivePath(root: string, archivePath: string): string {\n const output = path.resolve(root, archivePath);\n if (output !== root && !output.startsWith(`${root}${path.sep}`)) {\n throw new Error(`Application archive contains unsafe path '${archivePath}'`);\n }\n return output;\n}\n\nasync function unpackApplicationCode(data: Uint8Array): Promise<{ root: string; manifest: CodeManifest }> {\n const root = await mkdtemp(path.join(os.tmpdir(), \"tensorlake-typescript-app-\"));\n try {\n const files = unzipSync(data);\n for (const [name, content] of Object.entries(files)) {\n const destination = safeArchivePath(root, name);\n await mkdir(path.dirname(destination), { recursive: true });\n await writeFile(destination, content, { mode: 0o600 });\n }\n const manifest = JSON.parse(\n await readFile(path.join(root, \".tensorlake_code_manifest.json\"), \"utf8\"),\n ) as CodeManifest;\n return { root, manifest };\n } catch (error) {\n await rm(root, { recursive: true, force: true });\n throw error;\n }\n}\n\nexport class FunctionExecutorService {\n private readonly allocations = new Map<string, AllocationRunner>();\n private functionRef?: Message;\n private definition?: RegisteredDefinition;\n private applicationDefinition?: RegisteredDefinition;\n private initialization?: Promise<void>;\n private stopping = false;\n private shutdownPromise?: Promise<void>;\n\n readonly implementation: grpc.UntypedServiceImplementation = {\n initialize: this.initialize.bind(this),\n listAllocations: this.listAllocations.bind(this),\n createAllocation: this.createAllocation.bind(this),\n deleteAllocation: this.deleteAllocation.bind(this),\n watchAllocationState: this.watchAllocationState.bind(this),\n sendAllocationUpdate: this.sendAllocationUpdate.bind(this),\n getAllocationExecutionLogBatch: this.getAllocationExecutionLogBatch.bind(this),\n advanceAllocationExecutionLogBatch: this.advanceAllocationExecutionLogBatch.bind(this),\n watchAllocationEventLogReads: this.watchAllocationEventLogReads.bind(this),\n sendAllocationEventLogReadResponse: this.sendAllocationEventLogReadResponse.bind(this),\n checkHealth: this.checkHealth.bind(this),\n getInfo: this.getInfo.bind(this),\n };\n\n shutdown(reason: unknown = new Error(\"Function executor is shutting down\")): Promise<void> {\n if (this.shutdownPromise != null) return this.shutdownPromise;\n this.stopping = true;\n const shutdown = (async () => {\n this.log(\"info\", \"function executor service shutdown requested\", {\n allocation_count: this.allocations.size,\n });\n const allocations = [...this.allocations.values()];\n for (const allocation of allocations) allocation.cancel(reason);\n await Promise.all(allocations.map((allocation) => allocation.waitForCompletion()));\n const terminalObservations = await Promise.all(\n allocations.map((allocation) =>\n allocation.waitForTerminalBatchObserved(SHUTDOWN_TERMINAL_DRAIN_TIMEOUT_MS)\n ),\n );\n const unobservedCount = terminalObservations.filter((observed) => !observed).length;\n if (unobservedCount > 0) {\n this.log(\n \"warn\",\n \"shutdown terminal execution batches were not observed before drain deadline\",\n { unobserved_allocation_count: unobservedCount },\n );\n }\n this.log(\"info\", \"function executor service shutdown completed\", {\n allocation_count: allocations.length,\n });\n })();\n this.shutdownPromise = shutdown;\n return shutdown;\n }\n\n private initialize(call: UnaryCall, callback: Callback): void {\n if (this.stopping) {\n callback(rpcError(grpc.status.UNAVAILABLE, \"Function Executor is shutting down\"));\n return;\n }\n const startedAt = Date.now();\n this.log(\"info\", \"initialize RPC received\", {\n ...this.functionLogFields(call.request.function),\n application_code_bytes: call.request.applicationCode?.data?.length,\n });\n this.emitInitializationEvent(call.request.function, \"function_executor_initialization_started\", \"Initializing function executor\");\n void this.initializeAsync(call.request).then(\n () => {\n this.log(\"info\", \"initialize RPC completed\", {\n ...this.functionLogFields(call.request.function),\n duration_ms: Date.now() - startedAt,\n outcome: \"success\",\n });\n this.emitInitializationEvent(call.request.function, \"function_executor_initialization_finished\", \"Function executor initialization completed\");\n callback(null, { outcomeCode: \"INITIALIZATION_OUTCOME_CODE_SUCCESS\" });\n },\n (error: unknown) => {\n const message = error instanceof Error ? `${error.name}: ${error.message}` : String(error);\n this.log(\"error\", \"initialize RPC failed\", {\n ...this.functionLogFields(call.request.function),\n duration_ms: Date.now() - startedAt,\n outcome: \"failure\",\n }, error);\n this.emitInitializationEvent(\n call.request.function,\n \"function_executor_initialization_failed\",\n \"Function executor initialization failed\",\n error,\n );\n callback(null, {\n outcomeCode: \"INITIALIZATION_OUTCOME_CODE_FAILURE\",\n failureReason: \"INITIALIZATION_FAILURE_REASON_FUNCTION_ERROR\",\n errorMessage: message,\n });\n },\n );\n }\n\n private emitInitializationEvent(\n functionRef: Message | undefined,\n event: string,\n message: string,\n error?: unknown,\n ): void {\n const rendered = error instanceof Error ? error.stack?.split(\"\\n\") : error == null ? undefined : [String(error)];\n printCloudEvent({\n ...(error == null ? {} : { level: \"error\" }),\n event,\n message,\n namespace: functionRef?.namespace,\n application: functionRef?.applicationName,\n application_version: functionRef?.applicationVersion,\n function: functionRef?.functionName,\n ...(rendered == null ? {} : { error: rendered }),\n });\n }\n\n private async initializeAsync(request: Message): Promise<void> {\n if (this.definition != null) throw new Error(\"Function Executor is already initialized\");\n if (this.initialization != null) throw new Error(\"Function Executor initialization is already in progress\");\n const initialization = this.initializeAttempt(request);\n this.initialization = initialization;\n try {\n await initialization;\n } finally {\n if (this.initialization === initialization) this.initialization = undefined;\n }\n }\n\n private async initializeAttempt(request: Message): Promise<void> {\n if (request.function == null) throw new Error(\"InitializeRequest.function is required\");\n for (const [field, value] of [\n [\"namespace\", request.function.namespace],\n [\"application_name\", request.function.applicationName],\n [\"function_name\", request.function.functionName],\n [\"application_version\", request.function.applicationVersion],\n ] as const) {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`InitializeRequest.function.${field} is required`);\n }\n }\n if (request.applicationCode == null) throw new Error(\"InitializeRequest.application_code is required\");\n if (request.applicationCode.manifest == null) throw new Error(\"InitializeRequest.application_code.manifest is required\");\n if (request.applicationCode.data == null) throw new Error(\"InitializeRequest.application_code.data is required\");\n const codeManifest = request.applicationCode.manifest;\n if (codeManifest.encoding == null) throw new Error(\"InitializeRequest.application_code.manifest.encoding is required\");\n if (codeManifest.encodingVersion == null) throw new Error(\"InitializeRequest.application_code.manifest.encoding_version is required\");\n if (codeManifest.size == null) throw new Error(\"InitializeRequest.application_code.manifest.size is required\");\n if (codeManifest.sha256Hash == null) throw new Error(\"InitializeRequest.application_code.manifest.sha256_hash is required\");\n if (!new Set([\"SERIALIZED_OBJECT_ENCODING_BINARY_ZIP\", 4]).has(codeManifest.encoding)) {\n throw new Error(\n `Invalid application code encoding: ${String(codeManifest.encoding)}. Expected: BINARY_ZIP`,\n );\n }\n // Match the Python executor: the manifest describes dataplane transport,\n // while initialization consumes the archive bytes that were delivered.\n const declaredSize = requireSafeSize(\n codeManifest.size,\n \"InitializeRequest.application_code.manifest.size\",\n );\n const metadataSize = codeManifest.metadataSize == null\n ? 0\n : requireSafeSize(\n codeManifest.metadataSize,\n \"InitializeRequest.application_code.manifest.metadata_size\",\n );\n if (metadataSize > declaredSize) {\n throw new Error(\n \"InitializeRequest.application_code.manifest.metadata_size cannot exceed size\",\n );\n }\n const archive = new Uint8Array(request.applicationCode.data);\n this.log(\"debug\", \"unpacking application code\", {\n ...this.functionLogFields(request.function),\n application_code_bytes: archive.byteLength,\n });\n const unpackStartedAt = Date.now();\n const { root, manifest } = await unpackApplicationCode(archive);\n let registrySnapshot: ReturnType<typeof snapshotRegistry> | undefined;\n try {\n this.log(\"debug\", \"application code unpacked\", {\n ...this.functionLogFields(request.function),\n duration_ms: Date.now() - unpackStartedAt,\n manifest_format_version: manifest.format_version,\n manifest_runtime: manifest.runtime,\n manifest_function_count: Object.keys(manifest.functions ?? {}).length,\n });\n if (manifest.format_version !== 2 || manifest.runtime !== \"typescript\") {\n throw new Error(\"Application code is not a Tensorlake TypeScript bundle\");\n }\n const nodeMajor = Number(process.versions.node.split(\".\")[0]);\n if ((manifest.minimum_node_major ?? 24) > nodeMajor) {\n throw new Error(`Application requires Node ${manifest.minimum_node_major} or newer; executor has ${nodeMajor}`);\n }\n const moduleName = manifest.module;\n if (!moduleName) throw new Error(\"Application code manifest does not name a runtime module\");\n const functionName = String(request.function.functionName);\n if (manifest.functions?.[functionName] == null) {\n throw new Error(`Function '${functionName}' is not present in the application bundle`);\n }\n const modulePath = safeArchivePath(root, moduleName);\n this.log(\"debug\", \"importing application runtime module\", {\n ...this.functionLogFields(request.function),\n module: moduleName,\n });\n const importStartedAt = Date.now();\n registrySnapshot = snapshotRegistry();\n const runtime = await nativeImport(`${pathToFileURL(modulePath).href}?executor=${Date.now()}`) as RuntimeModule;\n if (typeof runtime.__tensorlakeGetFunction !== \"function\") {\n throw new Error(\"Application runtime does not export __tensorlakeGetFunction\");\n }\n const definition = runtime.__tensorlakeGetFunction(functionName);\n if (definition?.name !== functionName) {\n throw new Error(\n `Application runtime resolved function '${functionName}' as '${String(definition?.name)}'`,\n );\n }\n const applicationName = String(request.function.applicationName);\n const applicationDefinition = runtime.__tensorlakeGetFunction(applicationName);\n if (applicationDefinition?.name !== applicationName) {\n throw new Error(\n `Application runtime resolved application '${applicationName}' as '${String(applicationDefinition?.name)}'`,\n );\n }\n if (applicationDefinition.application == null) {\n throw new Error(`'${applicationName}' is not a Tensorlake application`);\n }\n this.functionRef = request.function;\n this.definition = definition;\n this.applicationDefinition = applicationDefinition;\n this.log(\"debug\", \"application function resolved\", {\n ...this.functionLogFields(request.function),\n duration_ms: Date.now() - importStartedAt,\n parameter_count: definition.parameters.length,\n application_max_retries: applicationDefinition.application.retries.maxRetries,\n });\n registrySnapshot = undefined;\n } catch (error) {\n if (registrySnapshot != null) restoreRegistry(registrySnapshot);\n this.functionRef = undefined;\n this.definition = undefined;\n this.applicationDefinition = undefined;\n await rm(root, { recursive: true, force: true });\n throw error;\n }\n }\n\n private getAllocation(id: string): AllocationRunner {\n const allocation = this.allocations.get(id);\n if (allocation == null) throw rpcError(grpc.status.NOT_FOUND, `Allocation ${id} not found`);\n return allocation;\n }\n\n private listAllocations(_call: UnaryCall, callback: Callback): void {\n this.log(\"debug\", \"list allocations RPC received\", { allocation_count: this.allocations.size });\n callback(null, { allocations: [...this.allocations.values()].map((runner) => runner.allocation) });\n }\n\n private createAllocation(call: UnaryCall, callback: Callback): void {\n void this.createAllocationAsync(call).then(\n () => callback(null, {}),\n (error: unknown) => {\n this.log(\n \"error\",\n \"create allocation RPC failed\",\n this.allocationLogFields(call.request.allocation),\n error,\n );\n callback(error as grpc.ServiceError);\n },\n );\n }\n\n private async createAllocationAsync(call: UnaryCall): Promise<void> {\n if (this.stopping) {\n throw rpcError(grpc.status.UNAVAILABLE, \"Function Executor is shutting down\");\n }\n const initialization = this.initialization;\n if (initialization != null) {\n this.log(\"info\", \"create allocation RPC waiting for initialization\", {\n ...this.allocationLogFields(call.request.allocation),\n });\n await this.waitForInitialization(call, initialization);\n this.log(\"info\", \"create allocation RPC resumed after initialization\", {\n ...this.allocationLogFields(call.request.allocation),\n });\n }\n this.assertAllocationAdmissionActive(call);\n if (this.stopping) {\n throw rpcError(grpc.status.UNAVAILABLE, \"Function Executor is shutting down\");\n }\n if (this.definition == null || this.applicationDefinition == null || this.functionRef == null) {\n throw rpcError(grpc.status.FAILED_PRECONDITION, \"Function Executor is not initialized\");\n }\n const allocation = call.request.allocation;\n validateNewAllocation(allocation);\n const id = String(allocation.allocationId);\n this.log(\"info\", \"create allocation RPC received\", {\n ...this.allocationLogFields(allocation),\n replay_mode: allocation?.replayMode,\n input_count: allocation?.inputs?.args?.length ?? 0,\n });\n if (this.allocations.has(id)) throw rpcError(grpc.status.ALREADY_EXISTS, `Allocation ${id} already exists`);\n const runner = new AllocationRunner(\n allocation,\n this.functionRef,\n this.definition,\n this.applicationDefinition,\n );\n this.allocations.set(id, runner);\n runner.start();\n this.log(\"info\", \"allocation runner started\", this.allocationLogFields(allocation));\n }\n\n private waitForInitialization(call: UnaryCall, initialization: Promise<void>): Promise<void> {\n return new Promise((resolve, reject) => {\n let timer: NodeJS.Timeout | undefined;\n let settled = false;\n const deadline = typeof call.getDeadline === \"function\" ? call.getDeadline() : Infinity;\n const deadlineMs = deadline instanceof Date ? deadline.getTime() : Number(deadline);\n const cancellationError = () =>\n Number.isFinite(deadlineMs) && deadlineMs <= Date.now()\n ? rpcError(\n grpc.status.DEADLINE_EXCEEDED,\n \"Initialization did not finish before the allocation deadline\",\n )\n : rpcError(\n grpc.status.CANCELLED,\n \"Create allocation RPC was cancelled during initialization\",\n );\n const onCancelled = () => finish(cancellationError());\n const finish = (error?: unknown) => {\n if (settled) return;\n settled = true;\n if (timer != null) clearTimeout(timer);\n if (typeof call.off === \"function\") call.off(\"cancelled\", onCancelled);\n if (error == null) resolve();\n else reject(error);\n };\n\n if (\n call.cancelled\n || (Number.isFinite(deadlineMs) && deadlineMs <= Date.now())\n ) {\n finish(cancellationError());\n return;\n }\n if (typeof call.once === \"function\") call.once(\"cancelled\", onCancelled);\n\n if (Number.isFinite(deadlineMs)) {\n const remainingMs = deadlineMs - Date.now();\n if (remainingMs <= 0) {\n finish(rpcError(grpc.status.DEADLINE_EXCEEDED, \"Initialization did not finish before the allocation deadline\"));\n return;\n }\n timer = setTimeout(() => {\n finish(rpcError(\n grpc.status.DEADLINE_EXCEEDED,\n \"Initialization did not finish before the allocation deadline\",\n ));\n }, remainingMs);\n }\n\n initialization.then(\n () => finish(\n call.cancelled || (Number.isFinite(deadlineMs) && deadlineMs <= Date.now())\n ? cancellationError()\n : undefined,\n ),\n () => finish(rpcError(\n grpc.status.FAILED_PRECONDITION,\n \"Function Executor initialization failed\",\n )),\n );\n });\n }\n\n private assertAllocationAdmissionActive(call: UnaryCall): void {\n const deadline = typeof call.getDeadline === \"function\" ? call.getDeadline() : Infinity;\n const deadlineMs = deadline instanceof Date ? deadline.getTime() : Number(deadline);\n if (Number.isFinite(deadlineMs) && deadlineMs <= Date.now()) {\n throw rpcError(grpc.status.DEADLINE_EXCEEDED, \"Create allocation RPC deadline exceeded\");\n }\n if (call.cancelled) {\n throw rpcError(grpc.status.CANCELLED, \"Create allocation RPC was cancelled before allocation start\");\n }\n }\n\n private deleteAllocation(call: UnaryCall, callback: Callback): void {\n try {\n const id = String(call.request.allocationId ?? \"\");\n const allocation = this.getAllocation(id);\n this.log(\"debug\", \"delete allocation RPC received\", {\n allocation_id: id,\n finished: allocation.isFinished,\n });\n if (!allocation.isFinished) {\n throw rpcError(grpc.status.FAILED_PRECONDITION, `Allocation ${id} is still running`);\n }\n this.allocations.delete(id);\n this.log(\"info\", \"allocation deleted\", { allocation_id: id });\n callback(null, {});\n } catch (error) {\n this.log(\"error\", \"delete allocation RPC failed\", { allocation_id: call.request.allocationId }, error);\n callback(error as grpc.ServiceError);\n }\n }\n\n private watchAllocationState(call: WritableCall): void {\n try {\n const allocationId = String(call.request.allocationId ?? \"\");\n this.log(\"debug\", \"allocation state stream opening\", { allocation_id: allocationId });\n this.getAllocation(allocationId).watchState(call);\n } catch (error) {\n this.log(\"error\", \"allocation state stream failed to open\", { allocation_id: call.request.allocationId }, error);\n call.destroy(error as Error);\n }\n }\n\n private sendAllocationUpdate(call: UnaryCall, callback: Callback): void {\n try {\n const allocationId = String(call.request.allocationId ?? \"\");\n this.log(\"debug\", \"allocation update RPC received\", {\n allocation_id: allocationId,\n update_kind: call.request.outputBlob != null\n ? \"output_blob\"\n : call.request.requestStateOperationResult != null\n ? \"request_state_operation_result\"\n : \"unknown\",\n });\n if (\n call.request.outputBlob == null\n && call.request.requestStateOperationResult == null\n ) {\n throw rpcError(\n grpc.status.INVALID_ARGUMENT,\n `Unknown update type in AllocationUpdate for allocation ${allocationId}`,\n );\n }\n const allocation = this.getAllocation(allocationId);\n if (allocation.isFinished) throw rpcError(grpc.status.FAILED_PRECONDITION, \"Allocation is already finished\");\n allocation.deliverUpdate(call.request);\n callback(null, {});\n } catch (error) {\n this.log(\"error\", \"allocation update RPC failed\", { allocation_id: call.request.allocationId }, error);\n callback(error as grpc.ServiceError);\n }\n }\n\n private getAllocationExecutionLogBatch(call: UnaryCall, callback: Callback): void {\n try {\n const allocationId = String(call.request.allocationId ?? \"\");\n this.log(\"debug\", \"execution log batch RPC waiting\", { allocation_id: allocationId });\n const allocation = this.getAllocation(allocationId);\n void allocation.getExecutionBatch().then(\n (events) => {\n this.log(\"debug\", \"execution log batch RPC completed\", {\n allocation_id: allocationId,\n event_count: events.length,\n });\n callback(null, { events });\n },\n (error) => {\n this.log(\"error\", \"execution log batch RPC failed\", { allocation_id: allocationId }, error);\n callback(error as grpc.ServiceError);\n },\n );\n } catch (error) {\n this.log(\"error\", \"execution log batch RPC failed\", { allocation_id: call.request.allocationId }, error);\n callback(error as grpc.ServiceError);\n }\n }\n\n private advanceAllocationExecutionLogBatch(call: UnaryCall, callback: Callback): void {\n try {\n const allocationId = String(call.request.allocationId ?? \"\");\n this.log(\"debug\", \"advance execution log batch RPC received\", { allocation_id: allocationId });\n this.getAllocation(allocationId).advanceExecutionBatch();\n callback(null, {});\n } catch (error) {\n this.log(\"error\", \"advance execution log batch RPC failed\", { allocation_id: call.request.allocationId }, error);\n callback(error as grpc.ServiceError);\n }\n }\n\n private watchAllocationEventLogReads(call: WritableCall): void {\n try {\n const allocationId = String(call.request.allocationId ?? \"\");\n const allocation = this.getAllocation(allocationId);\n this.log(\"debug\", \"event log read stream opening\", { allocation_id: allocationId });\n\n // grpc-js sends response metadata lazily on the first message. EventLog\n // streams normally have no message until user code starts a durable call,\n // while the dataplane waits for response metadata before it starts polling\n // execution batches. Send headers explicitly to break that startup cycle.\n call.sendMetadata(new grpc.Metadata());\n this.log(\"debug\", \"event log read stream established\", { allocation_id: allocationId });\n allocation.watchEventLogReads(call);\n } catch (error) {\n this.log(\"error\", \"event log read stream failed to open\", { allocation_id: call.request.allocationId }, error);\n call.destroy(error as Error);\n }\n }\n\n private sendAllocationEventLogReadResponse(call: UnaryCall, callback: Callback): void {\n try {\n const allocationId = String(call.request.allocationId ?? \"\");\n this.log(\"debug\", \"event log read response RPC received\", {\n allocation_id: allocationId,\n entry_count: call.request.entries?.length ?? 0,\n last_clock: call.request.lastClock,\n has_more: call.request.hasMore,\n });\n this.getAllocation(allocationId).deliverEventLogResponse(call.request);\n callback(null, {});\n } catch (error) {\n this.log(\"error\", \"event log read response RPC failed\", { allocation_id: call.request.allocationId }, error);\n callback(error as grpc.ServiceError);\n }\n }\n\n private checkHealth(_call: UnaryCall, callback: Callback): void {\n this.log(\"debug\", \"health check RPC received\", { initialized: this.definition != null });\n if (this.definition == null) {\n callback(rpcError(grpc.status.UNAVAILABLE, \"Function Executor is not initialized\"));\n } else {\n callback(null, { healthy: true, statusMessage: \"ok\" });\n }\n }\n\n private getInfo(_call: UnaryCall, callback: Callback): void {\n this.log(\"debug\", \"executor info RPC received\", { protocol_version: \"0.1.3\" });\n callback(null, {\n version: \"0.1.3\",\n sdkVersion: SDK_VERSION,\n sdkLanguage: \"typescript\",\n sdkLanguageVersion: process.versions.node,\n });\n }\n\n private functionLogFields(functionRef: Message | undefined): Message {\n return {\n namespace: functionRef?.namespace,\n application: functionRef?.applicationName,\n application_version: functionRef?.applicationVersion,\n function: functionRef?.functionName,\n };\n }\n\n private allocationLogFields(allocation: Message | undefined): Message {\n return {\n allocation_id: allocation?.allocationId,\n request_id: allocation?.requestId,\n function_call_id: allocation?.functionCallId,\n };\n }\n\n private log(level: LogLevel, message: string, fields: Message = {}, error?: unknown): void {\n writeStructuredOutput(\"stderr\", () => {\n const rendered = error instanceof Error\n ? error.stack?.split(\"\\n\") ?? [`${error.name}: ${error.message}`]\n : error == null ? undefined : [String(error)];\n return {\n timestamp: new Date().toISOString(),\n level,\n component: \"typescript_function_executor_service\",\n message,\n ...fields,\n ...(rendered == null ? {} : { error: rendered }),\n };\n });\n }\n}\n","const SDK_USAGE_ERROR_BRAND = Symbol.for(\"tensorlake.applications.sdk-usage-error.v1\");\nconst REQUEST_ERROR_BRAND = Symbol.for(\"tensorlake.applications.request-error.v1\");\nconst FUNCTION_ERROR_BRAND = Symbol.for(\"tensorlake.applications.function-error.v1\");\nconst TIMEOUT_ERROR_BRAND = Symbol.for(\"tensorlake.applications.timeout-error.v1\");\n\nexport class TensorlakeApplicationError extends Error {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"TensorlakeApplicationError\";\n }\n}\n\nexport class SDKUsageError extends TensorlakeApplicationError {\n readonly [SDK_USAGE_ERROR_BRAND] = true;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== SDKUsageError) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isSDKUsageError(value);\n }\n\n constructor(message: string) {\n super(message);\n this.name = \"SDKUsageError\";\n }\n}\n\n/** Recognizes SDKUsageError instances thrown by independently bundled SDK copies. */\nfunction isSDKUsageError(value: unknown): value is SDKUsageError {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[SDK_USAGE_ERROR_BRAND] === true && typeof candidate.message === \"string\";\n}\n\nexport class SerializationError extends TensorlakeApplicationError {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"SerializationError\";\n }\n}\n\nexport class DeserializationError extends TensorlakeApplicationError {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"DeserializationError\";\n }\n}\n\nexport class FunctionError extends TensorlakeApplicationError {\n readonly [FUNCTION_ERROR_BRAND] = true;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== FunctionError) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isFunctionError(value);\n }\n\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"FunctionError\";\n }\n}\n\nexport class TimeoutError extends TensorlakeApplicationError {\n readonly [TIMEOUT_ERROR_BRAND] = true;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== TimeoutError) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isTimeoutError(value);\n }\n\n constructor() {\n super(\"Timed out.\");\n this.name = \"TimeoutError\";\n }\n}\n\n/** Recognizes TimeoutError instances thrown by independently bundled SDK copies. */\nfunction isTimeoutError(value: unknown): value is TimeoutError {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[TIMEOUT_ERROR_BRAND] === true && typeof candidate.message === \"string\";\n}\n\n/** Recognizes FunctionError instances thrown by independently bundled SDK copies. */\nfunction isFunctionError(value: unknown): value is FunctionError {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[FUNCTION_ERROR_BRAND] === true && typeof candidate.message === \"string\";\n}\n\nexport class RequestError extends TensorlakeApplicationError {\n readonly [REQUEST_ERROR_BRAND] = true;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== RequestError) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isRequestError(value);\n }\n\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"RequestError\";\n }\n}\n\n/** Recognizes RequestError instances thrown by independently bundled SDK copies. */\nexport function isRequestError(value: unknown): value is RequestError {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[REQUEST_ERROR_BRAND] === true && typeof candidate.message === \"string\";\n}\n\nexport class ReplayMismatchError extends TensorlakeApplicationError {\n constructor(message = \"Function execution diverged from its durable event history\") {\n super(message);\n this.name = \"ReplayMismatchError\";\n }\n}\n","import type { RegisteredDefinition } from \"./function.js\";\nimport { SDKUsageError } from \"./errors.js\";\n\ninterface RegistryState {\n functions: Map<string, RegisteredDefinition>;\n applications: Map<string, RegisteredDefinition>;\n}\n\nexport interface RegistrySnapshot {\n functions: Map<string, RegisteredDefinition>;\n applications: Map<string, RegisteredDefinition>;\n}\n\nconst REGISTRY_KEY = Symbol.for(\"tensorlake.applications.registry.v1\");\n\nfunction registry(): RegistryState {\n const target = globalThis as typeof globalThis & { [REGISTRY_KEY]?: RegistryState };\n target[REGISTRY_KEY] ??= { functions: new Map(), applications: new Map() };\n return target[REGISTRY_KEY];\n}\n\nexport function registerDefinition(definition: RegisteredDefinition, isApplication: boolean): void {\n const state = registry();\n const existing = state.functions.get(definition.name);\n if (existing != null && existing !== definition) {\n throw new SDKUsageError(`Multiple Tensorlake functions are named '${definition.name}'`);\n }\n state.functions.set(definition.name, definition);\n if (isApplication) {\n const app = state.applications.get(definition.name);\n if (app != null && app !== definition) {\n throw new SDKUsageError(`Multiple Tensorlake applications are named '${definition.name}'`);\n }\n state.applications.set(definition.name, definition);\n }\n}\n\nexport function getFunction(name: string): RegisteredDefinition {\n const result = registry().functions.get(name);\n if (result == null) throw new SDKUsageError(`Tensorlake function '${name}' is not registered`);\n return result;\n}\n\nexport function getFunctions(): RegisteredDefinition[] {\n return [...registry().functions.values()];\n}\n\nexport function getApplications(): RegisteredDefinition[] {\n return [...registry().applications.values()];\n}\n\nexport function snapshotRegistry(): RegistrySnapshot {\n const state = registry();\n return {\n functions: new Map(state.functions),\n applications: new Map(state.applications),\n };\n}\n\nexport function restoreRegistry(snapshot: RegistrySnapshot): void {\n const state = registry();\n state.functions.clear();\n state.applications.clear();\n for (const [name, definition] of snapshot.functions) state.functions.set(name, definition);\n for (const [name, definition] of snapshot.applications) state.applications.set(name, definition);\n}\n\nexport function clearRegistryForTest(): void {\n registry().functions.clear();\n registry().applications.clear();\n}\n","import { AsyncResource, createHook, executionAsyncId } from \"node:async_hooks\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport type { RegisteredDefinition, FunctionRuntime, FunctionFuture, TailCall } from \"../applications/function.js\";\nimport {\n DURABLE_PROMISE_INTERNAL_THEN,\n DURABLE_PROMISE_OBSERVER,\n executeHandlerResult,\n installPromiseInstrumentation,\n isDetachedDurableThenable,\n isTailCall,\n registerDurableAssimilation,\n registerDurableThenable,\n runWithFunctionRuntime,\n} from \"../applications/function.js\";\nimport { File } from \"../applications/file.js\";\nimport { Headers } from \"../applications/headers.js\";\nimport { HttpBody } from \"../applications/http-body.js\";\nimport {\n DeserializationError,\n FunctionError,\n ReplayMismatchError,\n RequestError,\n SDKUsageError,\n TimeoutError,\n isRequestError,\n} from \"../applications/errors.js\";\nimport type { RequestContextValue } from \"../applications/context.js\";\nimport {\n runWithRequestContext,\n serializeRequestStateValue,\n validateCounterMetric,\n validateProgressUpdate,\n validateRequestStateKey,\n validateTimerMetric,\n waitWithAbortSignal,\n} from \"../applications/context.js\";\nimport { deserializeJSON } from \"../applications/serialization.js\";\nimport { deferred, type Deferred } from \"./async-queue.js\";\nimport {\n deserializeValueFromProtocol,\n downloadBlob as downloadBlobData,\n downloadSerializedObject as downloadSerializedObjectData,\n joinPrepared,\n prepareSerializedObject,\n prepareTextObject,\n uploadBlob as uploadBlobData,\n type BlobValue,\n type PreparedSerializedObject,\n type SerializedObjectInsideBlobValue,\n} from \"./blob.js\";\nimport { writeStructuredOutput } from \"./safe-output.js\";\nimport { printCloudEvent } from \"./user-events.js\";\n\n// The executor imports this module before deployed application modules and\n// their dependencies, so module-level captures retain the instrumented\n// Promise implementations used during allocation execution.\ninstallPromiseInstrumentation();\n\ntype Message = Record<string, any>;\ntype StreamCall = { write(value: Message): boolean; end(): void; on(event: string, listener: () => void): void };\ntype LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nconst OK = 0;\nconst NOT_FOUND = 5;\nconst REPLAY_STRICT = new Set([\"REPLAY_MODE_STRICT\", 1]);\nconst OUTCOME_SUCCESS = new Set([\"ALLOCATION_OUTCOME_CODE_SUCCESS\", 1]);\nconst OUTCOME_FAILURE = new Set([\"ALLOCATION_OUTCOME_CODE_FAILURE\", 2]);\nconst WATCHER_TIMED_OUT = new Set([\"FUNCTION_CALL_WATCHER_STATUS_TIMEDOUT\", 2]);\nconst MAX_REDUCE_CALLS_PER_PLAN = 512;\nconst nativeStructuredClone = globalThis.structuredClone;\n\nfunction statusError(status: Message | undefined, fallback: string): Error | undefined {\n if (status == null || (status.code ?? OK) === OK) return undefined;\n return new FunctionError(status.message || fallback);\n}\n\nfunction validatedEventLogClock<E extends Error>(\n response: Message,\n requestedAfterClock: number,\n createError: (message: string) => E,\n): number {\n if (response.entries != null && !Array.isArray(response.entries)) {\n throw createError(\"Allocation event log returned a non-array entries field\");\n }\n const responseClock = Number(response.lastClock ?? requestedAfterClock);\n if (\n !Number.isFinite(responseClock)\n || !Number.isSafeInteger(responseClock)\n || responseClock < 0\n ) {\n throw createError(\n `Allocation event log returned invalid clock '${String(response.lastClock)}'`,\n );\n }\n if (responseClock < requestedAfterClock) {\n throw createError(\n `Allocation event log moved backwards from clock ${requestedAfterClock} to ${responseClock}`,\n );\n }\n if (response.hasMore && responseClock === requestedAfterClock) {\n throw createError(\n `Allocation event log reported more entries without advancing clock ${requestedAfterClock}`,\n );\n }\n if ((response.entries?.length ?? 0) > 0 && responseClock === requestedAfterClock) {\n throw createError(\n `Allocation event log returned entries without advancing clock ${requestedAfterClock}`,\n );\n }\n const eventFields = [\n \"functionCallCreated\",\n \"functionCallWatcherCreated\",\n \"functionCallWatcherResult\",\n ];\n let previousEntryClock = requestedAfterClock;\n for (const [index, entry] of (response.entries ?? []).entries()) {\n if (entry == null || typeof entry !== \"object\") {\n throw createError(`Allocation event log entry ${index} is not an object`);\n }\n const presentFields = eventFields.filter((field) => entry[field] != null);\n if (presentFields.length !== 1) {\n throw createError(\n `Allocation event log entry ${index} has ${presentFields.length} recognized payloads; expected exactly one`,\n );\n }\n const entryClock = Number(entry.clock);\n if (\n !Number.isSafeInteger(entryClock)\n || entryClock <= previousEntryClock\n || entryClock > responseClock\n ) {\n throw createError(\n `Allocation event log entry ${index} has invalid clock '${String(entry.clock)}'`\n + ` after ${previousEntryClock} with page clock ${responseClock}`,\n );\n }\n previousEntryClock = entryClock;\n }\n return responseClock;\n}\n\nfunction durableHash(values: string[]): string {\n const hash = createHash(\"sha256\");\n for (const value of values) {\n const bytes = Buffer.from(value, \"utf8\");\n const length = Buffer.alloc(8);\n length.writeBigUInt64BE(BigInt(bytes.byteLength));\n hash.update(length);\n hash.update(bytes);\n hash.update(\"|\");\n }\n return hash.digest(\"hex\");\n}\n\nfunction protocolTimestamp(date: Date): { seconds: number; nanos: number } {\n const milliseconds = date.getTime();\n return { seconds: Math.floor(milliseconds / 1000), nanos: (milliseconds % 1000) * 1_000_000 };\n}\n\nfunction parseHTTPMessage(data: Uint8Array): { headers: Record<string, string>; body: Uint8Array } {\n const marker = Buffer.from(\"\\r\\n\\r\\n\");\n const bytes = Buffer.from(data);\n const split = bytes.indexOf(marker);\n if (split < 0) throw new DeserializationError(\"Invalid message/http application input\");\n const lines = bytes.subarray(0, split).toString(\"utf8\").split(\"\\r\\n\");\n lines.shift();\n const headers: Record<string, string> = {};\n for (const line of lines) {\n const colon = line.indexOf(\":\");\n if (colon > 0) headers[line.slice(0, colon).trim().toLowerCase()] = line.slice(colon + 1).trim();\n }\n return { headers, body: new Uint8Array(bytes.subarray(split + marker.byteLength)) };\n}\n\nexport async function deserializeApplicationArguments(\n definition: RegisteredDefinition,\n payload: { data: Uint8Array; contentType?: string; encoding?: string | number },\n): Promise<{ args: unknown[] }> {\n let data = payload.data;\n let suppliedContentType = payload.contentType;\n let hasExplicitContentType = payload.contentType != null;\n if (suppliedContentType?.toLowerCase().startsWith(\"message/http\")) {\n const parsed = parseHTTPMessage(data);\n data = parsed.body;\n const bodyContentType = parsed.headers[\"content-type\"];\n hasExplicitContentType = bodyContentType != null;\n suppliedContentType = bodyContentType;\n }\n if (definition.parameters.length === 0) return { args: [] };\n const firstParameter = definition.parameters[0];\n if (\n definition.parameters.length === 1\n && firstParameter?.schema._httpBody\n ) {\n return { args: [new HttpBody(data, suppliedContentType)] };\n }\n const contentType = suppliedContentType ?? \"application/json\";\n if (contentType.toLowerCase().startsWith(\"multipart/form-data\")) {\n let form: FormData;\n try {\n form = await new Response(Uint8Array.from(data).buffer, {\n headers: { \"content-type\": contentType },\n }).formData();\n } catch (error) {\n throw new DeserializationError(\"Failed to deserialize multipart application input\", { cause: error });\n }\n const args: unknown[] = [];\n for (const [index, parameter] of definition.parameters.entries()) {\n const part = form.get(parameter.name) ?? form.get(String(index));\n if (part == null) {\n args.push(undefined);\n } else if (parameter.schema._file || parameter.schema._httpBody) {\n const bytes = typeof part === \"string\"\n ? new TextEncoder().encode(part)\n : new Uint8Array(await part.arrayBuffer());\n const partContentType = typeof part === \"string\"\n ? \"application/octet-stream\"\n : part.type || \"application/octet-stream\";\n args.push(parameter.schema._httpBody\n ? new HttpBody(bytes, partContentType)\n : new File(bytes, partContentType));\n } else {\n try {\n const bytes = typeof part === \"string\"\n ? new TextEncoder().encode(part)\n : new Uint8Array(await part.arrayBuffer());\n args.push(deserializeJSON(bytes));\n } catch (error) {\n if (error instanceof DeserializationError) throw error;\n throw new DeserializationError(\n `Failed to deserialize multipart argument '${parameter.name}' as JSON`,\n { cause: error },\n );\n }\n }\n }\n return { args };\n }\n // An invocation without a request body supplies no arguments. This lets the\n // normal argument validator apply JavaScript defaults (or report a required\n // argument) instead of attempting to parse an empty JSON document. An\n // explicitly typed empty file remains a real File input.\n if (data.byteLength === 0 && (!firstParameter?.schema._file || !hasExplicitContentType)) {\n return { args: [] };\n }\n if (firstParameter?.schema._file) return { args: [new File(data, contentType)] };\n if (!contentType.toLowerCase().includes(\"json\")) {\n throw new DeserializationError(\n `Expected application/json input for '${firstParameter?.name ?? \"argument\"}', got ${contentType}`,\n );\n }\n return { args: [deserializeJSON(data)] };\n}\n\ntype ReplayEntryKind = \"call\" | \"watcher\" | \"result\" | \"unknown\";\n\ninterface ReplayEntry {\n readonly kind: ReplayEntryKind;\n readonly event: Message;\n consumed: boolean;\n}\n\n// Handles that can remain alive without representing a pending callback which\n// could resume application code. Request resources, timers, immediates, and\n// promises are deliberately not in this set.\nconst PASSIVE_ASYNC_RESOURCE_TYPES = new Set([\n \"PIPEWRAP\",\n \"PIPESERVERWRAP\",\n \"SIGNALWRAP\",\n \"TCPSERVERWRAP\",\n \"TCPWRAP\",\n \"TLSWRAP\",\n \"TTYWRAP\",\n \"UDPWRAP\",\n]);\n\ninterface TrackedAsyncResource {\n readonly type: string;\n readonly triggerAsyncId: number;\n // Promise destroy hooks are GC-driven. A strong reference here would keep\n // every Promise alive until the allocation ends and prevent that cleanup\n // hook from ever running.\n readonly promise?: WeakRef<object>;\n pending: boolean;\n}\n\n/**\n * Tracks asynchronous work which is causally capable of producing the next\n * durable event during strict replay.\n *\n * Promise frames created by async functions are not producers by themselves:\n * they can be waiting on another durable result and form a replay cycle.\n * Timers and I/O request resources are producers. Promise ownership is still\n * propagated when one promise is resolved by a causal continuation, which\n * carries causality through Promise.all/race and pre-created await reactions.\n */\nexport class ReplayCausality {\n private readonly hook: ReturnType<typeof createHook>;\n private readonly children = new Map<number, Set<number>>();\n private readonly resources = new Map<number, TrackedAsyncResource>();\n private readonly owners = new Map<number, Set<number>>();\n private readonly provenance = new Map<number, Set<number>>();\n private readonly tokenResources = new Map<number, Set<number>>();\n private readonly tokenProducers = new Map<number, Set<number>>();\n private readonly promiseIds = new WeakMap<object, number>();\n private readonly excludedRoots = new Set<number>();\n private readonly durableAssimilations = new Map<number, number>();\n private readonly nativeDurableAssimilations = new Set<number>();\n private readonly explicitDurableAssimilations = new Set<number>();\n private readonly promiseAggregateAssimilationScopes: Set<number>[] = [];\n private readonly promiseSettlementObservers = new Map<number, Set<() => void>>();\n private readonly mixedPromiseProducerGroups = new Set<Set<number>>();\n private nextToken = 1;\n private checkScheduled = false;\n private checkHandle?: NodeJS.Immediate;\n private suppressOwnership = false;\n private stopped = false;\n\n constructor(private readonly onQuiescent: () => void) {\n this.hook = createHook({\n init: (asyncId, type, triggerAsyncId, resource) => {\n if (this.stopped) return;\n const triggerPromise = this.resources.get(triggerAsyncId)?.promise?.deref();\n const resumesDetachedDurable =\n type === \"PROMISE\"\n && triggerPromise != null\n && isDetachedDurableThenable(triggerPromise);\n const children = this.children.get(triggerAsyncId) ?? new Set<number>();\n children.add(asyncId);\n this.children.set(triggerAsyncId, children);\n if (type === \"PROMISE\" && typeof resource === \"object\" && resource != null) {\n this.promiseIds.set(resource, asyncId);\n }\n const triggerOwners = new Set(this.owners.get(triggerAsyncId) ?? []);\n this.resources.set(asyncId, {\n type,\n triggerAsyncId,\n promise: type === \"PROMISE\" && typeof resource === \"object\" && resource != null\n ? new WeakRef(resource)\n : undefined,\n pending: true,\n });\n if (resumesDetachedDurable) {\n this.nativeDurableAssimilations.add(asyncId);\n this.promiseAggregateAssimilationScopes.at(-1)?.add(asyncId);\n this.suspendDurableAssimilation(asyncId);\n }\n if (this.suppressOwnership) return;\n const inherited = new Set([\n ...(this.owners.get(executionAsyncId()) ?? []),\n ...triggerOwners,\n ]);\n for (const token of inherited) this.addTokenToSubtree(asyncId, token);\n },\n promiseResolve: (asyncId) => {\n if (this.stopped) return;\n this.notifyPromiseSettlement(asyncId);\n if (this.nativeDurableAssimilations.delete(asyncId)) {\n this.resumeDurableAssimilation(asyncId);\n }\n if (this.explicitDurableAssimilations.delete(asyncId)) {\n this.resumeDurableAssimilation(asyncId);\n }\n this.settleMixedPromiseProducerGroups(asyncId);\n const currentOwners = this.owners.get(executionAsyncId());\n if (currentOwners != null) {\n for (const token of currentOwners) this.addTokenToSubtree(asyncId, token);\n }\n this.setResourcePending(asyncId, false);\n this.scheduleCheck();\n },\n destroy: (asyncId) => {\n if (this.stopped) return;\n this.notifyPromiseSettlement(asyncId);\n if (this.nativeDurableAssimilations.delete(asyncId)) {\n this.detachDurableAssimilation(asyncId);\n }\n if (this.explicitDurableAssimilations.delete(asyncId)) {\n this.detachDurableAssimilation(asyncId);\n }\n this.settleMixedPromiseProducerGroups(asyncId);\n this.setResourcePending(asyncId, false);\n this.releaseDestroyedResource(asyncId);\n this.scheduleCheck();\n },\n });\n this.hook.enable();\n }\n\n runRoot<T>(callback: () => Promise<T>): Promise<T> {\n const resource = new AsyncResource(\"TensorlakeReplayCausality\");\n let result!: Promise<T>;\n resource.runInAsyncScope(() => {\n this.beginCurrentContinuation();\n result = callback();\n // The async handler's own result promise is pending for the handler's\n // entire lifetime, so it cannot prove that application code can advance\n // replay. Concrete promises created by the handler remain tracked.\n this.excludePromise(result);\n });\n resource.emitDestroy();\n return result;\n }\n\n beginCurrentContinuation(): void {\n if (this.stopped) return;\n const asyncId = executionAsyncId();\n this.excludedRoots.delete(asyncId);\n this.addTokenToSubtree(asyncId, this.nextToken);\n this.nextToken += 1;\n this.scheduleCheck();\n }\n\n excludePromise(promise: Promise<unknown>): void {\n const asyncId = this.promiseIds.get(promise);\n if (asyncId == null) return;\n this.excludedRoots.add(asyncId);\n this.removeOwnersFromSubtree(asyncId);\n this.scheduleCheck();\n }\n\n suspendDurableAssimilation(asyncId: number): boolean {\n if (this.stopped) return false;\n const count = this.durableAssimilations.get(asyncId) ?? 0;\n this.durableAssimilations.set(asyncId, count + 1);\n if (count === 0) {\n this.excludedRoots.add(asyncId);\n this.removeOwnersFromSubtree(asyncId);\n }\n this.scheduleCheck();\n return true;\n }\n\n resumeDurableAssimilation(asyncId: number): void {\n if (this.stopped) return;\n const count = this.durableAssimilations.get(asyncId);\n if (count == null) return;\n if (count > 1) {\n this.durableAssimilations.set(asyncId, count - 1);\n return;\n }\n this.durableAssimilations.delete(asyncId);\n this.excludedRoots.delete(asyncId);\n const currentOwners = this.owners.get(executionAsyncId());\n if (currentOwners != null) {\n for (const token of currentOwners) this.addTokenToSubtree(asyncId, token);\n }\n }\n\n detachDurableAssimilation(asyncId: number): void {\n if (this.stopped) return;\n const count = this.durableAssimilations.get(asyncId);\n if (count == null) return;\n if (count > 1) {\n this.durableAssimilations.set(asyncId, count - 1);\n return;\n }\n this.durableAssimilations.delete(asyncId);\n this.excludedRoots.delete(asyncId);\n // This reaction belongs to aggregate construction rather than an\n // application-level await. Do not restore its old ownership: a pending\n // durable input would otherwise mask a genuinely blocked durable await\n // created when user code later consumes the aggregate.\n this.scheduleCheck();\n }\n\n hasPendingDurableAssimilation(): boolean {\n return this.durableAssimilations.size > 0;\n }\n\n hasPendingProducer(): boolean {\n if (this.mixedPromiseProducerGroups.size > 0) return true;\n for (const producers of this.tokenProducers.values()) {\n if (producers.size > 0) return true;\n }\n return false;\n }\n\n requestCheck(): void {\n this.scheduleCheck();\n }\n\n trackMixedPromiseRace(\n promise: Promise<unknown>,\n producers: readonly Promise<unknown>[] = [promise],\n ): void {\n if (this.stopped) return;\n const producerIds = new Set<number>();\n for (const producer of producers) {\n const asyncId = this.promiseIds.get(producer);\n if (asyncId == null) continue;\n // A producer in this race has already settled, so the \"first producer\n // settles\" lifetime has already ended and the other producers must not\n // keep replay alive.\n if (this.resources.get(asyncId)?.pending !== true) {\n this.scheduleCheck();\n return;\n }\n producerIds.add(asyncId);\n }\n if (producerIds.size > 0) this.mixedPromiseProducerGroups.add(producerIds);\n this.scheduleCheck();\n }\n\n trackPromiseSettlement(\n promise: Promise<unknown>,\n onSettled: () => void,\n ): boolean {\n if (this.stopped) return false;\n const asyncId = this.promiseIds.get(promise);\n if (asyncId == null) return false;\n if (this.resources.get(asyncId)?.pending !== true) {\n onSettled();\n return true;\n }\n const observers = this.promiseSettlementObservers.get(asyncId) ?? new Set<() => void>();\n observers.add(onSettled);\n this.promiseSettlementObservers.set(asyncId, observers);\n return true;\n }\n\n trackDurablePromiseConsumption(promise: Promise<unknown>): void {\n if (this.stopped) return;\n const asyncId = this.promiseIds.get(promise);\n if (\n asyncId == null\n || this.resources.get(asyncId)?.pending !== true\n || this.nativeDurableAssimilations.has(asyncId)\n || this.explicitDurableAssimilations.has(asyncId)\n ) {\n return;\n }\n this.explicitDurableAssimilations.add(asyncId);\n this.promiseAggregateAssimilationScopes.at(-1)?.add(asyncId);\n this.suspendDurableAssimilation(asyncId);\n }\n\n runPromiseAggregateConstruction<T>(callback: () => T): T {\n const aggregateAssimilations = new Set<number>();\n this.promiseAggregateAssimilationScopes.push(aggregateAssimilations);\n try {\n return callback();\n } finally {\n this.promiseAggregateAssimilationScopes.pop();\n // Promise combinators install internal reactions while constructing the\n // aggregate. Those reactions do not prove that application code awaits\n // the aggregate; a later user reaction on the returned promise does.\n this.detachPromiseAggregateAssimilations(aggregateAssimilations);\n }\n }\n\n runWithoutOwnership<T>(callback: () => T): T {\n if (this.stopped) return callback();\n const previous = this.suppressOwnership;\n this.suppressOwnership = true;\n try {\n return callback();\n } finally {\n this.suppressOwnership = previous;\n }\n }\n\n stop(): void {\n if (this.stopped) return;\n this.stopped = true;\n this.hook.disable();\n if (this.checkHandle != null) clearImmediate(this.checkHandle);\n this.checkHandle = undefined;\n this.children.clear();\n this.resources.clear();\n this.owners.clear();\n this.provenance.clear();\n this.tokenResources.clear();\n this.tokenProducers.clear();\n this.durableAssimilations.clear();\n this.nativeDurableAssimilations.clear();\n this.explicitDurableAssimilations.clear();\n this.promiseAggregateAssimilationScopes.length = 0;\n this.promiseSettlementObservers.clear();\n this.mixedPromiseProducerGroups.clear();\n }\n\n private notifyPromiseSettlement(asyncId: number): void {\n const observers = this.promiseSettlementObservers.get(asyncId);\n if (observers == null) return;\n this.promiseSettlementObservers.delete(asyncId);\n for (const observer of observers) observer();\n }\n\n private settleMixedPromiseProducerGroups(asyncId: number): void {\n for (const group of [...this.mixedPromiseProducerGroups]) {\n if (group.has(asyncId)) this.mixedPromiseProducerGroups.delete(group);\n }\n }\n\n private detachPromiseAggregateAssimilations(assimilations: Set<number>): void {\n for (const asyncId of assimilations) {\n if (this.nativeDurableAssimilations.delete(asyncId)) {\n this.detachDurableAssimilation(asyncId);\n }\n if (this.explicitDurableAssimilations.delete(asyncId)) {\n this.detachDurableAssimilation(asyncId);\n }\n }\n assimilations.clear();\n }\n\n private addTokenToSubtree(asyncId: number, token: number): void {\n if (this.excludedRoots.has(asyncId)) return;\n const owners = this.owners.get(asyncId) ?? new Set<number>();\n if (!owners.has(token)) {\n owners.add(token);\n this.owners.set(asyncId, owners);\n const provenance = this.provenance.get(asyncId) ?? new Set<number>();\n provenance.add(token);\n this.provenance.set(asyncId, provenance);\n const tokenResources = this.tokenResources.get(token) ?? new Set<number>();\n tokenResources.add(asyncId);\n this.tokenResources.set(token, tokenResources);\n const resource = this.resources.get(asyncId);\n if (resource?.pending && this.isProducer(resource, token)) {\n const producers = this.tokenProducers.get(token) ?? new Set<number>();\n producers.add(asyncId);\n this.tokenProducers.set(token, producers);\n }\n }\n for (const child of this.children.get(asyncId) ?? []) {\n this.addTokenToSubtree(child, token);\n }\n }\n\n private isProducer(resource: TrackedAsyncResource, token: number): boolean {\n if (resource.type === \"PROMISE\") {\n return !(this.provenance.get(resource.triggerAsyncId)?.has(token) ?? false);\n }\n return !PASSIVE_ASYNC_RESOURCE_TYPES.has(resource.type);\n }\n\n private setResourcePending(asyncId: number, pending: boolean): void {\n const resource = this.resources.get(asyncId);\n if (resource == null || resource.pending === pending) return;\n resource.pending = pending;\n for (const token of this.owners.get(asyncId) ?? []) {\n const producers = this.tokenProducers.get(token);\n if (pending && this.isProducer(resource, token)) {\n const next = producers ?? new Set<number>();\n next.add(asyncId);\n this.tokenProducers.set(token, next);\n } else {\n producers?.delete(asyncId);\n }\n }\n }\n\n private removeOwnersFromSubtree(asyncId: number): void {\n this.removeResourceOwnership(asyncId);\n for (const child of this.children.get(asyncId) ?? []) {\n this.removeOwnersFromSubtree(child);\n }\n }\n\n private removeResourceOwnership(asyncId: number): void {\n const owners = this.owners.get(asyncId);\n if (owners == null) return;\n for (const token of owners) {\n const resources = this.tokenResources.get(token);\n resources?.delete(asyncId);\n if (resources?.size === 0) this.tokenResources.delete(token);\n const producers = this.tokenProducers.get(token);\n producers?.delete(asyncId);\n if (producers?.size === 0) this.tokenProducers.delete(token);\n }\n this.owners.delete(asyncId);\n }\n\n private releaseDestroyedResource(asyncId: number): void {\n const resource = this.resources.get(asyncId);\n if (resource == null) return;\n this.resources.delete(asyncId);\n this.excludedRoots.delete(asyncId);\n this.removeResourceOwnership(asyncId);\n this.provenance.delete(asyncId);\n const siblings = this.children.get(resource.triggerAsyncId);\n siblings?.delete(asyncId);\n if (siblings?.size === 0) this.children.delete(resource.triggerAsyncId);\n // A destroy hook is Node's guarantee that this resource cannot create\n // further descendants. Existing children already own independent copies\n // of their provenance and ownership sets.\n this.children.delete(asyncId);\n }\n\n private scheduleCheck(): void {\n if (this.stopped || this.checkScheduled) return;\n this.checkScheduled = true;\n const previous = this.suppressOwnership;\n this.suppressOwnership = true;\n try {\n this.checkHandle = setImmediate(() => {\n this.checkScheduled = false;\n this.checkHandle = undefined;\n this.onQuiescent();\n });\n } finally {\n this.suppressOwnership = previous;\n }\n }\n}\n\nclass ReplayAwarePromise<T> extends Promise<T> {\n private readonly causality: ReplayCausality;\n\n constructor(source: Promise<T>, causality: ReplayCausality) {\n let bridge: Promise<void> | undefined;\n super((resolve, reject) => {\n bridge = source.then(resolve, reject);\n });\n this.causality = causality;\n registerDurableThenable(this);\n causality.excludePromise(source);\n causality.excludePromise(this);\n if (bridge != null) causality.excludePromise(bridge);\n }\n\n static get [Symbol.species](): PromiseConstructor {\n return Promise;\n }\n\n override then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n ): Promise<TResult1 | TResult2> {\n const assimilationId = executionAsyncId();\n const assimilationSuspended =\n this.causality.suspendDurableAssimilation(assimilationId);\n let assimilationDetached = false;\n const aggregateAssimilation = registerDurableAssimilation(this, () => {\n if (!assimilationSuspended || assimilationDetached) return;\n assimilationDetached = true;\n this.causality.detachDurableAssimilation(assimilationId);\n });\n const continuation = super.then(\n (value) => {\n this.causality.beginCurrentContinuation();\n aggregateAssimilation.finish();\n if (assimilationSuspended && !assimilationDetached) {\n this.causality.resumeDurableAssimilation(assimilationId);\n }\n if (onfulfilled == null) return value as unknown as TResult1;\n return onfulfilled(value);\n },\n (reason) => {\n this.causality.beginCurrentContinuation();\n aggregateAssimilation.finish();\n if (assimilationSuspended && !assimilationDetached) {\n this.causality.resumeDurableAssimilation(assimilationId);\n }\n if (onrejected == null) throw reason;\n return onrejected(reason);\n },\n );\n aggregateAssimilation.link(continuation);\n this.causality.excludePromise(continuation);\n return continuation;\n }\n\n [DURABLE_PROMISE_INTERNAL_THEN]<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n ): Promise<TResult1 | TResult2> {\n const continuation = super.then(onfulfilled, onrejected);\n registerDurableThenable(continuation, this);\n this.causality.excludePromise(continuation);\n return continuation;\n }\n\n [DURABLE_PROMISE_OBSERVER](\n onfulfilled: (value: T) => void,\n onrejected: (reason: unknown) => void,\n ): void {\n const observation = super.then(onfulfilled, onrejected);\n this.causality.excludePromise(observation);\n void observation.catch(() => undefined);\n }\n}\n\nclass ReplayHistory {\n private readonly entries: ReplayEntry[];\n private readonly calls: ReplayEntry[] = [];\n private readonly watchers: ReplayEntry[] = [];\n private readonly availableResults = new Map<string, Message[]>();\n private readonly resultWaiters = new Map<string, Deferred<Message | undefined>[]>();\n private readonly endWaiters: Deferred<void>[] = [];\n private readonly createdWatcherIds = new Set<string>();\n private readonly releasedResultIds = new Set<string>();\n private readonly expectedCallIds = new Set<string>();\n private readonly expectedWatcherIds = new Set<string>();\n private readonly causality: ReplayCausality;\n // A replayed result may still be downloading before it can resume user code.\n private activeResultResolutions = 0;\n private callCursor = 0;\n private watcherCursor = 0;\n private prefixCursor = 0;\n private mismatch?: ReplayMismatchError;\n\n constructor(entries: Message[]) {\n this.causality = new ReplayCausality(() => this.failBlockedResultWithoutProducer());\n this.entries = entries.map((entry) => {\n if (entry.functionCallWatcherResult != null) {\n return { kind: \"result\", event: entry.functionCallWatcherResult, consumed: false };\n }\n if (entry.functionCallCreated != null) {\n const replayEntry: ReplayEntry = {\n kind: \"call\",\n event: entry.functionCallCreated,\n consumed: false,\n };\n this.calls.push(replayEntry);\n return replayEntry;\n }\n if (entry.functionCallWatcherCreated != null) {\n const replayEntry: ReplayEntry = {\n kind: \"watcher\",\n event: entry.functionCallWatcherCreated,\n consumed: false,\n };\n this.watchers.push(replayEntry);\n return replayEntry;\n }\n return { kind: \"unknown\", event: entry, consumed: false };\n });\n }\n\n async takeOrdered(kind: \"call\" | \"watcher\", id: string): Promise<Message | undefined> {\n this.advancePrefix();\n const entries = kind === \"call\" ? this.calls : this.watchers;\n const cursor = kind === \"call\" ? this.callCursor : this.watcherCursor;\n const expectedIds = kind === \"call\" ? this.expectedCallIds : this.expectedWatcherIds;\n if (cursor >= entries.length) {\n expectedIds.delete(id);\n if (this.prefixCursor === this.entries.length) return undefined;\n const blocked = this.entries[this.prefixCursor];\n // A new call may reach the live boundary before the watcher belonging to\n // an already-replayed call has finished being created. That watcher is a\n // known producer of replay progress, so wait for it without imposing a\n // wall-clock deadline. Every other cross-kind boundary is impossible for\n // the current execution order and must fail instead of hanging forever.\n if (\n kind !== \"call\"\n || blocked.kind !== \"watcher\"\n || !this.expectedWatcherIds.has(String(blocked.event.functionCallId ?? \"\"))\n ) {\n this.fail(\n `Unexpected ${kind} event for ${id} before replay ${blocked.kind}`\n + ` event ${String(blocked.event.functionCallId ?? \"\")}`,\n );\n }\n const waiter = deferred<void>();\n this.endWaiters.push(waiter);\n await waiter.promise;\n this.assertNoMismatch();\n return undefined;\n }\n const entry = entries[cursor];\n if (kind === \"call\") this.callCursor += 1;\n else this.watcherCursor += 1;\n if (entry.event.functionCallId !== id) {\n this.fail(`Expected replay ${kind} event for ${id}`);\n }\n expectedIds.delete(id);\n entry.consumed = true;\n if (kind === \"watcher\") {\n this.createdWatcherIds.add(id);\n }\n this.advancePrefix();\n return entry.event;\n }\n\n async takeResult(id: string): Promise<Message | undefined> {\n this.advancePrefix();\n const available = this.availableResults.get(id);\n if (available != null && available.length > 0) {\n const result = available.shift();\n if (result != null) this.activeResultResolutions += 1;\n return result;\n }\n if (this.prefixCursor === this.entries.length) return undefined;\n const blocked = this.entries[this.prefixCursor];\n const blockedId = String(blocked.event.functionCallId ?? \"\");\n const hasProducer = blocked.kind === \"call\"\n ? this.expectedCallIds.has(blockedId)\n : blocked.kind === \"watcher\"\n ? this.expectedWatcherIds.has(blockedId)\n : false;\n const waiter = deferred<Message | undefined>();\n const waiters = this.resultWaiters.get(id) ?? [];\n waiters.push(waiter);\n this.resultWaiters.set(id, waiters);\n if (!hasProducer) this.causality.requestCheck();\n const result = await waiter.promise;\n if (result != null) this.activeResultResolutions += 1;\n return result;\n }\n\n completeResultResolution(): void {\n if (this.activeResultResolutions === 0) return;\n this.activeResultResolutions -= 1;\n this.causality.requestCheck();\n }\n\n runCausalHandler<T>(callback: () => Promise<T>): Promise<T> {\n return this.causality.runRoot(callback);\n }\n\n wrapDurableResult<T>(source: Promise<T>): Promise<T> {\n return new ReplayAwarePromise(source, this.causality);\n }\n\n trackMixedPromiseRace(\n promise: Promise<unknown>,\n producers?: readonly Promise<unknown>[],\n ): void {\n this.causality.trackMixedPromiseRace(promise, producers);\n }\n\n trackPromiseSettlement(\n promise: Promise<unknown>,\n onSettled: () => void,\n ): boolean {\n return this.causality.trackPromiseSettlement(promise, onSettled);\n }\n\n trackDurablePromiseConsumption(promise: Promise<unknown>): void {\n this.causality.trackDurablePromiseConsumption(promise);\n }\n\n runPromiseAggregateConstruction<T>(callback: () => T): T {\n return this.causality.runPromiseAggregateConstruction(callback);\n }\n\n runWithoutCausalOwnership<T>(callback: () => T): T {\n return this.causality.runWithoutOwnership(callback);\n }\n\n dispose(): void {\n this.causality.stop();\n }\n\n expectCall(id: string): void {\n this.expectedCallIds.add(id);\n }\n\n expectWatcher(id: string): void {\n this.expectedWatcherIds.add(id);\n }\n\n abandonCall(id: string): void {\n this.abandonOrdered(\"call\", id);\n }\n\n abandonWatcher(id: string): void {\n this.abandonOrdered(\"watcher\", id);\n }\n\n private abandonOrdered(kind: \"call\" | \"watcher\", id: string): void {\n const expectedIds = kind === \"call\" ? this.expectedCallIds : this.expectedWatcherIds;\n expectedIds.delete(id);\n const hasWaiters = this.endWaiters.length > 0\n || [...this.resultWaiters.values()].some((waiters) => waiters.length > 0);\n if (this.prefixCursor >= this.entries.length || !hasWaiters) return;\n const blocked = this.entries[this.prefixCursor];\n if (blocked.kind === kind && blocked.event.functionCallId === id) {\n this.fail(`Replay ${kind} event for ${id} can no longer be created`);\n }\n }\n\n private failBlockedResultWithoutProducer(): void {\n if (this.activeResultResolutions > 0) return;\n // Quiescence is only evidence of a replay cycle while application code is\n // actually assimilating a durable result. Outside that state the handler\n // may legitimately be waiting for a callback owned by a module-initialized\n // timer, socket, or client which predates this allocation and is therefore\n // absent from the causal async-resource tree.\n if (!this.causality.hasPendingDurableAssimilation()) return;\n if (this.causality.hasPendingProducer()) return;\n if (this.prefixCursor >= this.entries.length) return;\n if (![...this.resultWaiters.values()].some((waiters) => waiters.length > 0)) return;\n const blocked = this.entries[this.prefixCursor];\n const blockedId = String(blocked.event.functionCallId ?? \"\");\n const hasProducer = blocked.kind === \"call\"\n ? this.expectedCallIds.has(blockedId)\n : blocked.kind === \"watcher\"\n ? this.expectedWatcherIds.has(blockedId)\n : false;\n if (!hasProducer) {\n this.recordMismatch(\n `Replay result is blocked behind unreachable ${blocked.kind}`\n + ` event ${blockedId}`,\n );\n }\n }\n\n hasAvailableResult(id: string): boolean {\n return (this.availableResults.get(id)?.length ?? 0) > 0;\n }\n\n assertNoMismatch(): void {\n if (this.mismatch != null) throw this.mismatch;\n }\n\n assertConsumed(): void {\n this.assertNoMismatch();\n this.advancePrefix();\n if (this.prefixCursor !== this.entries.length) {\n throw new ReplayMismatchError(\"Function completed before its durable event history was consumed\");\n }\n }\n\n private advancePrefix(): void {\n this.assertNoMismatch();\n while (this.prefixCursor < this.entries.length) {\n const entry = this.entries[this.prefixCursor];\n if (entry.kind === \"unknown\") {\n this.fail(\"Replay history contains an unknown allocation event\");\n }\n if (entry.kind === \"call\" || entry.kind === \"watcher\") {\n if (!entry.consumed) return;\n this.prefixCursor += 1;\n continue;\n }\n entry.consumed = true;\n this.prefixCursor += 1;\n this.releaseResult(entry.event);\n }\n for (const waiter of this.endWaiters.splice(0)) waiter.resolve();\n for (const waiters of this.resultWaiters.values()) {\n for (const waiter of waiters) waiter.resolve(undefined);\n }\n this.resultWaiters.clear();\n }\n\n private releaseResult(event: Message): void {\n const id = String(event.functionCallId ?? \"\");\n if (!this.createdWatcherIds.has(id)) {\n this.fail(`Replay watcher result for ${id} appeared before its watcher was created`);\n }\n if (this.releasedResultIds.has(id)) {\n this.fail(`Replay history contains duplicate watcher results for ${id}`);\n }\n this.releasedResultIds.add(id);\n const waiter = this.resultWaiters.get(id)?.shift();\n if (waiter != null) {\n waiter.resolve(event);\n if (this.resultWaiters.get(id)?.length === 0) this.resultWaiters.delete(id);\n return;\n }\n const available = this.availableResults.get(id) ?? [];\n available.push(event);\n this.availableResults.set(id, available);\n }\n\n private fail(message: string): never {\n throw this.recordMismatch(message);\n }\n\n private recordMismatch(message: string): ReplayMismatchError {\n this.mismatch ??= new ReplayMismatchError(message);\n this.causality.stop();\n for (const waiter of this.endWaiters.splice(0)) waiter.reject(this.mismatch);\n for (const waiters of this.resultWaiters.values()) {\n for (const waiter of waiters) waiter.reject(this.mismatch);\n }\n this.resultWaiters.clear();\n return this.mismatch;\n }\n}\n\ninterface EventWaiter {\n predicate(event: Message): boolean;\n result: Deferred<Message>;\n}\n\ninterface EmissionTurn {\n wait: Promise<void>;\n release(): void;\n}\n\ninterface StateStreamFlow {\n backpressured: boolean;\n pending?: Message;\n}\n\nclass AllocationProtocolError extends Error {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"AllocationProtocolError\";\n }\n}\n\nexport class AllocationRunner implements FunctionRuntime {\n readonly allocation: Message;\n private readonly functionRef: Message;\n private readonly definition: RegisteredDefinition;\n private readonly applicationDefinition: RegisteredDefinition;\n private readonly stateStreams = new Set<StreamCall>();\n private readonly stateStreamFlows = new Map<StreamCall, StateStreamFlow>();\n private readonly eventReadStreams = new Set<StreamCall>();\n private readonly outputBlobRequests = new Map<string, Deferred<Message>>();\n private readonly stateOperationRequests = new Map<string, Deferred<Message>>();\n private readonly executionBatches: Message[][] = [];\n private readonly executionBatchWaiters: Array<(events: Message[]) => void> = [];\n private readonly liveBacklog: Message[] = [];\n private readonly liveWaiters: EventWaiter[] = [];\n private readonly controller = new AbortController();\n private currentRead?: { request: Message; response: Deferred<Message> };\n private replay?: ReplayHistory;\n private protocolError?: AllocationProtocolError;\n private durableCallEmissionTail: Promise<void> = Promise.resolve();\n private durableWatcherEmissionTail: Promise<void> = Promise.resolve();\n private lastEventClock = 0;\n private previousDurableId: string;\n private livePump?: Promise<void>;\n private completion?: Promise<void>;\n private started = false;\n private terminalBatchQueued = false;\n private terminalBatchObserved = false;\n private readonly terminalBatchObservedWaiters: Array<() => void> = [];\n private finished = false;\n private state: Message = { outputBlobRequests: [], requestStateOperations: [] };\n private readonly startedAt = Date.now();\n\n constructor(\n allocation: Message,\n functionRef: Message,\n definition: RegisteredDefinition,\n applicationDefinition: RegisteredDefinition = definition,\n ) {\n this.allocation = allocation;\n this.functionRef = functionRef;\n this.definition = definition;\n this.applicationDefinition = applicationDefinition;\n this.previousDurableId = String(allocation.functionCallId);\n this.updateStateHash();\n this.log(\"debug\", \"allocation runner created\", {\n replay_mode: allocation.replayMode,\n input_count: allocation.inputs?.args?.length ?? 0,\n input_blob_count: allocation.inputs?.argBlobs?.length ?? 0,\n });\n }\n\n start(): void {\n if (this.started) {\n this.log(\"warn\", \"duplicate allocation runner start ignored\");\n return;\n }\n this.started = true;\n this.log(\"info\", \"allocation runner scheduled\");\n this.completion = this.run().catch((error) => {\n this.log(\"error\", \"allocation runner promise rejected\", {}, error);\n this.queueTerminalBatch({\n outcomeCode: \"ALLOCATION_OUTCOME_CODE_FAILURE\",\n failureReason: \"ALLOCATION_FAILURE_REASON_INTERNAL_ERROR\",\n });\n this.finish();\n });\n }\n\n waitForCompletion(): Promise<void> {\n return this.completion ?? Promise.resolve();\n }\n\n async waitForTerminalBatchObserved(timeoutMs: number): Promise<boolean> {\n if (this.terminalBatchObserved) return true;\n return new Promise<boolean>((resolve) => {\n let settled = false;\n const observed = () => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n resolve(true);\n };\n const timer = setTimeout(() => {\n if (settled) return;\n settled = true;\n const index = this.terminalBatchObservedWaiters.indexOf(observed);\n if (index >= 0) this.terminalBatchObservedWaiters.splice(index, 1);\n resolve(false);\n }, Math.max(timeoutMs, 0));\n this.terminalBatchObservedWaiters.push(observed);\n // Close the race where observation happens between the first check and\n // registering this waiter.\n if (this.terminalBatchObserved) observed();\n });\n }\n\n cancel(reason: unknown = new FunctionError(\"Allocation was cancelled\")): void {\n if (this.controller.signal.aborted) return;\n this.log(\"info\", \"allocation cancellation requested\", {\n reason: reason instanceof Error ? reason.message : String(reason),\n });\n this.abortExecution(reason);\n }\n\n private abortExecution(reason: unknown): void {\n if (!this.controller.signal.aborted) this.controller.abort(reason);\n const rejection = this.controller.signal.reason ?? reason;\n const outputBlobRequestCount = this.outputBlobRequests.size;\n const stateOperationRequestCount = this.stateOperationRequests.size;\n const liveWaiterCount = this.liveWaiters.length;\n const liveBacklogCount = this.liveBacklog.length;\n const hadCurrentRead = this.currentRead != null;\n for (const request of this.outputBlobRequests.values()) request.reject(rejection);\n for (const request of this.stateOperationRequests.values()) request.reject(rejection);\n for (const waiter of this.liveWaiters.splice(0)) waiter.result.reject(rejection);\n this.currentRead?.response.reject(rejection);\n this.outputBlobRequests.clear();\n this.stateOperationRequests.clear();\n this.liveBacklog.splice(0);\n this.currentRead = undefined;\n this.state.outputBlobRequests = [];\n this.state.requestStateOperations = [];\n this.log(\"debug\", \"pending allocation protocol work settled\", {\n output_blob_requests: outputBlobRequestCount,\n state_operation_requests: stateOperationRequestCount,\n durable_event_waiters: liveWaiterCount,\n durable_event_backlog_entries: liveBacklogCount,\n event_log_read: hadCurrentRead,\n });\n }\n\n invoke<T>(definition: RegisteredDefinition, args: readonly unknown[]): Promise<T> {\n this.log(\"debug\", \"durable function invocation requested\", {\n target_function: definition.name,\n argument_count: args.length,\n });\n const result = this.runChild<T>(definition, args, 0);\n return this.replay?.wrapDurableResult(result) ?? result;\n }\n\n runFuture<T>(future: FunctionFuture<T>): Promise<T> {\n this.log(\"debug\", \"durable future execution requested\", {\n target_function: future.definition.name,\n argument_count: future.args.length,\n delay_seconds: future.delaySeconds,\n });\n const result = this.runChild<T>(future.definition, future.args, future.delaySeconds);\n return this.replay?.wrapDurableResult(result) ?? result;\n }\n\n wrapFutureWait<T>(promise: Promise<T>): Promise<T> {\n return this.replay?.wrapDurableResult(promise) ?? promise;\n }\n\n trackMixedPromiseRace(\n promise: Promise<unknown>,\n producers?: readonly Promise<unknown>[],\n ): void {\n this.replay?.trackMixedPromiseRace(promise, producers);\n }\n\n trackPromiseSettlement(\n promise: Promise<unknown>,\n onSettled: () => void,\n ): boolean {\n return this.replay?.trackPromiseSettlement(promise, onSettled) ?? false;\n }\n\n trackDurablePromiseConsumption(promise: Promise<unknown>): void {\n this.replay?.trackDurablePromiseConsumption(promise);\n }\n\n runPromiseAggregateConstruction<T>(callback: () => T): T {\n return this.replay?.runPromiseAggregateConstruction(callback) ?? callback();\n }\n\n reduce<T>(\n definition: RegisteredDefinition,\n items: readonly unknown[],\n initial: unknown,\n hasInitial: boolean,\n ): Promise<T> {\n const result = this.runReduce<T>(definition, items, initial, hasInitial);\n return this.replay?.wrapDurableResult(result) ?? result;\n }\n\n private async runReduce<T>(\n definition: RegisteredDefinition,\n items: readonly unknown[],\n initial: unknown,\n hasInitial: boolean,\n ): Promise<T> {\n let reduceItems = items;\n let reduceInitial = initial;\n if (!hasInitial) {\n if (items.length === 0) {\n throw new SDKUsageError(\"reduce of empty iterable with no initial value\");\n }\n [reduceInitial, ...reduceItems] = items;\n }\n if (reduceItems.length === 0) return reduceInitial as T;\n const callTurn = this.reserveEmissionTurn(\"call\");\n const watcherTurn = this.reserveEmissionTurn(\"watcher\");\n const ids = reduceItems.map(() => this.nextDurableId(definition, \"ReduceStep\"));\n const id = ids[ids.length - 1];\n const startedAt = Date.now();\n this.log(\"info\", \"durable reduce starting\", {\n durable_id: id,\n target_function: definition.name,\n collection_size: reduceItems.length,\n plan_count: Math.ceil(reduceItems.length / MAX_REDUCE_CALLS_PER_PLAN),\n });\n const replayCallIds = ids.filter((_id, index) =>\n (index + 1) % MAX_REDUCE_CALLS_PER_PLAN === 0 || index === ids.length - 1\n );\n for (const replayCallId of replayCallIds) this.replay?.expectCall(replayCallId);\n this.replay?.expectWatcher(id);\n try {\n try {\n await this.createReduceChain(ids, definition, reduceItems, reduceInitial, callTurn);\n } catch (error) {\n for (const replayCallId of replayCallIds) this.replay?.abandonCall(replayCallId);\n this.replay?.abandonWatcher(id);\n throw error;\n }\n await this.createWatcher(id, watcherTurn);\n } finally {\n callTurn.release();\n watcherTurn.release();\n }\n const replayedResult = this.replay == null ? undefined : await this.replay.takeResult(id);\n const result = replayedResult ?? await this.waitForLiveEvent(\n (entry) => entry.functionCallWatcherResult?.functionCallId === id,\n ).then((entry) => entry.functionCallWatcherResult);\n let resolved: T;\n try {\n resolved = await this.resolveWatcherResult<T>(result);\n } finally {\n if (replayedResult != null) this.replay?.completeResultResolution();\n }\n this.log(\"info\", \"durable reduce completed\", {\n durable_id: id,\n target_function: definition.name,\n collection_size: reduceItems.length,\n duration_ms: Date.now() - startedAt,\n });\n return resolved;\n }\n\n private nextDurableId(definition: RegisteredDefinition, operation = \"FunctionCall\"): string {\n const id = durableHash([\n String(this.allocation.functionCallId),\n this.previousDurableId,\n operation,\n definition.name,\n ]);\n this.previousDurableId = id;\n return id;\n }\n\n private async runChild<T>(\n definition: RegisteredDefinition,\n args: readonly unknown[],\n delaySeconds: number,\n ): Promise<T> {\n const callTurn = this.reserveEmissionTurn(\"call\");\n const watcherTurn = this.reserveEmissionTurn(\"watcher\");\n const id = this.nextDurableId(definition);\n const startedAt = Date.now();\n const maxRetries = definition.options.retries?.maxRetries\n ?? this.applicationDefinition.application?.retries.maxRetries\n ?? 0;\n this.log(\"info\", \"durable function call starting\", {\n durable_id: id,\n target_function: definition.name,\n argument_count: args.length,\n delay_seconds: delaySeconds,\n max_retries: maxRetries,\n });\n this.replay?.expectCall(id);\n this.replay?.expectWatcher(id);\n try {\n try {\n await this.createChildCall(id, definition, args, delaySeconds, callTurn);\n } catch (error) {\n this.replay?.abandonCall(id);\n this.replay?.abandonWatcher(id);\n throw error;\n }\n await this.createWatcher(id, watcherTurn);\n } finally {\n callTurn.release();\n watcherTurn.release();\n }\n this.log(\"debug\", \"waiting for terminal durable function result\", {\n durable_id: id,\n target_function: definition.name,\n max_retries: maxRetries,\n replay_result_available: this.replay?.hasAvailableResult(id) ?? false,\n });\n // The server owns allocation retry policy and retains the watcher route\n // across retryable attempt failures. It emits exactly one result here:\n // the eventual success or terminal failure.\n const replayedResult = this.replay == null ? undefined : await this.replay.takeResult(id);\n const result = replayedResult ?? await this.waitForLiveEvent(\n (entry) => entry.functionCallWatcherResult?.functionCallId === id,\n ).then((entry) => entry.functionCallWatcherResult);\n let resolved: T;\n try {\n resolved = await this.resolveWatcherResult<T>(result);\n } finally {\n if (replayedResult != null) this.replay?.completeResultResolution();\n }\n this.log(\"info\", \"durable function call completed\", {\n durable_id: id,\n target_function: definition.name,\n max_retries: maxRetries,\n duration_ms: Date.now() - startedAt,\n });\n return resolved;\n }\n\n private async createChildCall(\n id: string,\n definition: RegisteredDefinition,\n args: readonly unknown[],\n delaySeconds: number,\n turn: EmissionTurn,\n ): Promise<void> {\n try {\n let turnAcquired = false;\n if (this.replay != null) {\n await turn.wait;\n turnAcquired = true;\n }\n const replayed = await this.replay?.takeOrdered(\"call\", id);\n if (replayed != null) {\n this.log(\"debug\", \"replaying durable function creation\", { durable_id: id });\n const error = statusError(replayed.status, \"Failed to start function call\");\n if (error != null) throw error;\n return;\n }\n const prepared: PreparedSerializedObject[] = [];\n let offset = 0;\n for (const arg of args) {\n const item = prepareSerializedObject(arg, offset);\n prepared.push(item);\n offset += item.bytes.byteLength;\n }\n let argsBlob: BlobValue | undefined;\n if (prepared.length > 0) {\n this.log(\"debug\", \"requesting durable function arguments blob\", {\n durable_id: id,\n argument_count: args.length,\n serialized_bytes: offset,\n });\n try {\n argsBlob = await this.requestOutputBlob(offset);\n argsBlob = await this.uploadBlob(\n argsBlob,\n joinPrepared(prepared),\n \"durable function arguments\",\n { durable_id: id },\n );\n } catch (error) {\n if (this.controller.signal.aborted) throw this.controller.signal.reason;\n throw this.latchProtocolError(\n `Failed to materialize durable function arguments for '${id}'`,\n error,\n );\n }\n }\n const metadata = Buffer.from(JSON.stringify({\n format: \"tensorlake.typescript.function-call.v1\",\n id,\n functionName: definition.name,\n argumentCount: args.length,\n }), \"utf8\");\n const updates: Message = {\n updates: [{ functionCall: {\n id,\n target: {\n namespace: this.functionRef.namespace,\n applicationName: this.functionRef.applicationName,\n applicationVersion: this.functionRef.applicationVersion,\n functionName: definition.name,\n },\n args: prepared.map((item) => ({ value: item.object })),\n callMetadata: metadata,\n } }],\n rootFunctionCallId: id,\n };\n if (delaySeconds > 0) updates.startAt = protocolTimestamp(new Date(Date.now() + delaySeconds * 1000));\n if (!turnAcquired) await turn.wait;\n this.log(\"debug\", \"queueing durable function creation event\", {\n durable_id: id,\n target_function: definition.name,\n delay_seconds: delaySeconds,\n });\n this.addBatch([{ createFunctionCall: { updates, argsBlob } }]);\n this.log(\"debug\", \"waiting for durable function creation acknowledgement\", { durable_id: id });\n const createdPromise = this.waitForLiveEvent((entry) => entry.functionCallCreated?.functionCallId === id);\n turn.release();\n const created = await createdPromise;\n const error = statusError(created.functionCallCreated?.status, \"Failed to start function call\");\n if (error != null) throw error;\n } finally {\n turn.release();\n }\n }\n\n private async createReduceChain(\n ids: readonly string[],\n definition: RegisteredDefinition,\n items: readonly unknown[],\n initial: unknown,\n turn: EmissionTurn,\n ): Promise<void> {\n try {\n let turnAcquired = false;\n if (this.replay != null) {\n await turn.wait;\n turnAcquired = true;\n }\n const livePlans: Message[] = [];\n const liveRoots: string[] = [];\n for (let start = 0; start < items.length; start += MAX_REDUCE_CALLS_PER_PLAN) {\n const end = Math.min(items.length, start + MAX_REDUCE_CALLS_PER_PLAN);\n const rootId = ids[end - 1];\n const replayed = await this.replay?.takeOrdered(\"call\", rootId);\n if (replayed != null) {\n this.log(\"debug\", \"replaying durable reduce plan creation\", {\n durable_id: rootId,\n reduce_step_start: start,\n reduce_step_end: end,\n });\n const error = statusError(replayed.status, \"Failed to start reduce operation\");\n if (error != null) throw error;\n continue;\n }\n\n const prepared: PreparedSerializedObject[] = [];\n let offset = 0;\n if (start === 0) {\n const value = prepareSerializedObject(initial, offset);\n prepared.push(value);\n offset += value.bytes.byteLength;\n }\n for (let index = start; index < end; index += 1) {\n const value = prepareSerializedObject(items[index], offset);\n prepared.push(value);\n offset += value.bytes.byteLength;\n }\n let argsBlob: BlobValue;\n try {\n const requested = await this.requestOutputBlob(offset);\n argsBlob = await this.uploadBlob(\n requested,\n joinPrepared(prepared),\n \"durable reduce arguments\",\n { durable_id: rootId, reduce_step_start: start, reduce_step_end: end },\n );\n } catch (error) {\n if (this.controller.signal.aborted) throw this.controller.signal.reason;\n throw this.latchProtocolError(\n `Failed to materialize durable reduce arguments for '${rootId}'`,\n error,\n );\n }\n const itemOffset = start === 0 ? 1 : 0;\n const updates = [];\n for (let index = start; index < end; index += 1) {\n const id = ids[index];\n const accumulator = index === 0\n ? { value: prepared[0].object }\n : { functionCallId: ids[index - 1] };\n const item = prepared[itemOffset + index - start];\n const metadata = Buffer.from(JSON.stringify({\n format: \"tensorlake.typescript.function-call.v1\",\n id,\n functionName: definition.name,\n argumentCount: 2,\n operation: \"reduce\",\n reduceRootId: ids[ids.length - 1],\n reduceStep: index,\n reduceStepCount: items.length,\n }), \"utf8\");\n updates.push({ functionCall: {\n id,\n target: {\n namespace: this.functionRef.namespace,\n applicationName: this.functionRef.applicationName,\n applicationVersion: this.functionRef.applicationVersion,\n functionName: definition.name,\n },\n args: [accumulator, { value: item.object }],\n callMetadata: metadata,\n } });\n }\n livePlans.push({\n createFunctionCall: {\n updates: { updates, rootFunctionCallId: rootId },\n argsBlob,\n },\n });\n liveRoots.push(rootId);\n }\n\n if (livePlans.length === 0) return;\n if (!turnAcquired) await turn.wait;\n this.log(\"debug\", \"queueing durable reduce function-call chains\", {\n durable_id: ids[ids.length - 1],\n target_function: definition.name,\n reduce_step_count: items.length,\n plan_count: livePlans.length,\n });\n this.addBatch(livePlans);\n const creationWaiters = liveRoots.map((rootId) => {\n const predicate = (entry: Message) =>\n entry.functionCallCreated?.functionCallId === rootId;\n return {\n predicate,\n promise: this.waitForLiveEvent(predicate),\n };\n });\n const createdPromises = creationWaiters.map(async ({ promise }) => {\n const created = await promise;\n const error = statusError(\n created.functionCallCreated?.status,\n \"Failed to start reduce operation\",\n );\n if (error != null) throw error;\n });\n turn.release();\n try {\n await Promise.all(createdPromises);\n } catch (error) {\n // One failed plan is terminal for the whole reduce. Remove and reject\n // sibling plan waiters immediately: the server is not required to\n // acknowledge plans after it has rejected the batch.\n for (const { predicate } of creationWaiters) {\n const index = this.liveWaiters.findIndex(\n (waiter) => waiter.predicate === predicate,\n );\n if (index >= 0) this.liveWaiters.splice(index, 1)[0].result.reject(error);\n }\n throw error;\n }\n } finally {\n turn.release();\n }\n }\n\n private async createWatcher(id: string, turn: EmissionTurn): Promise<void> {\n try {\n await turn.wait;\n const replayed = await this.replay?.takeOrdered(\"watcher\", id);\n if (replayed != null) {\n this.log(\"debug\", \"replaying durable function watcher creation\", { durable_id: id });\n const error = statusError(replayed.status, \"Failed to create function call watcher\");\n if (error != null) throw error;\n return;\n }\n this.log(\"debug\", \"queueing durable function watcher event\", { durable_id: id });\n this.addBatch([{ createFunctionCallWatcher: { functionCallId: id } }]);\n this.log(\"debug\", \"waiting for durable function watcher acknowledgement\", { durable_id: id });\n const createdPromise = this.waitForLiveEvent(\n (entry) => entry.functionCallWatcherCreated?.functionCallId === id,\n );\n turn.release();\n const created = await createdPromise;\n const error = statusError(created.functionCallWatcherCreated?.status, \"Failed to create function call watcher\");\n if (error != null) throw error;\n } finally {\n turn.release();\n }\n }\n\n private async resolveWatcherResult<T>(event: Message): Promise<T> {\n this.log(\"debug\", \"resolving durable function watcher result\", {\n durable_id: event.functionCallId,\n watcher_status: event.watcherStatus,\n outcome_code: event.outcomeCode,\n has_value_output: event.valueOutput != null,\n has_request_error_output: event.requestErrorOutput != null,\n });\n if (WATCHER_TIMED_OUT.has(event.watcherStatus)) throw new TimeoutError();\n if (OUTCOME_SUCCESS.has(event.outcomeCode)) {\n try {\n const downloaded = await this.downloadSerializedObject(\n event.valueOutput,\n event.valueBlob,\n \"durable function result\",\n { durable_id: event.functionCallId },\n );\n return deserializeValueFromProtocol(downloaded) as T;\n } catch (error) {\n if (this.controller.signal.aborted) throw this.controller.signal.reason;\n throw this.latchProtocolError(\n `Invalid successful function call watcher payload for '${String(event.functionCallId)}'`,\n error,\n );\n }\n }\n if (OUTCOME_FAILURE.has(event.outcomeCode)) {\n if (event.requestErrorOutput != null) {\n let message: string;\n try {\n const downloaded = await this.downloadSerializedObject(\n event.requestErrorOutput,\n event.requestErrorBlob,\n \"durable function request error\",\n { durable_id: event.functionCallId },\n );\n message = new TextDecoder(\"utf-8\", { fatal: true }).decode(downloaded.data);\n } catch (error) {\n if (this.controller.signal.aborted) throw this.controller.signal.reason;\n throw this.latchProtocolError(\n `Invalid request-error function call watcher payload for '${String(event.functionCallId)}'`,\n error,\n );\n }\n throw new RequestError(message);\n }\n throw new FunctionError(\"Function call failed\");\n }\n throw this.latchProtocolError(\n `Unexpected function call watcher outcome '${String(event.outcomeCode)}'`,\n );\n }\n\n private latchProtocolError(\n message: string | AllocationProtocolError,\n cause?: unknown,\n ): AllocationProtocolError {\n const protocolError = this.protocolError\n ?? (message instanceof AllocationProtocolError\n ? message\n : new AllocationProtocolError(\n message,\n cause === undefined ? undefined : { cause },\n ));\n // Protocol failures are executor invariants, not child-function failures.\n // Latch the first one so application code cannot turn corrupt event data\n // into a successful allocation or hang indefinitely after catching the\n // rejected child promise.\n this.protocolError = protocolError;\n this.abortExecution(protocolError);\n return protocolError;\n }\n\n private async startTailCall(tailCall: TailCall<unknown>): Promise<string> {\n const callTurn = this.reserveEmissionTurn(\"call\");\n const id = this.nextDurableId(tailCall.definition);\n this.log(\"info\", \"tail call starting\", {\n durable_id: id,\n target_function: tailCall.definition.name,\n argument_count: tailCall.args.length,\n });\n this.replay?.expectCall(id);\n try {\n await this.createChildCall(id, tailCall.definition, tailCall.args, 0, callTurn);\n } catch (error) {\n this.replay?.abandonCall(id);\n throw error;\n }\n return id;\n }\n\n private reserveEmissionTurn(kind: \"call\" | \"watcher\"): EmissionTurn {\n const previous = kind === \"call\" ? this.durableCallEmissionTail : this.durableWatcherEmissionTail;\n let signalRelease!: () => void;\n const released = new Promise<void>((resolve) => { signalRelease = resolve; });\n const tail = previous.then(() => released);\n if (kind === \"call\") this.durableCallEmissionTail = tail;\n else this.durableWatcherEmissionTail = tail;\n let didRelease = false;\n return {\n wait: previous,\n release: () => {\n if (didRelease) return;\n didRelease = true;\n signalRelease();\n },\n };\n }\n\n private async run(): Promise<void> {\n let handlerArgs: unknown[];\n this.log(\"info\", \"allocation execution started\", {\n replay_mode: this.allocation.replayMode,\n function: this.functionRef.functionName,\n });\n this.emitLifecycleEvent(\"allocations_started\", \"Starting allocations\");\n try {\n const inputs = this.allocation.inputs ?? {};\n const objects = inputs.args ?? [];\n const blobs = inputs.argBlobs ?? [];\n this.log(\"debug\", \"allocation inputs validated\", {\n object_count: objects.length,\n blob_count: blobs.length,\n function_call_metadata_bytes: inputs.functionCallMetadata?.length ?? 0,\n });\n if (objects.length !== blobs.length) throw new Error(\"Function argument and BLOB counts differ\");\n const values = await Promise.all(objects.map(\n (object: SerializedObjectInsideBlobValue, index: number) => this.downloadSerializedObject(\n object,\n blobs[index],\n \"function input\",\n { input_index: index },\n ),\n ));\n this.log(\"info\", \"all function inputs downloaded\", {\n input_count: values.length,\n total_data_bytes: values.reduce((total, value) => total + value.data.byteLength, 0),\n });\n const metadata = Buffer.from(inputs.functionCallMetadata ?? []);\n if (metadata.byteLength === 0) {\n this.log(\"debug\", \"deserializing application invocation input\", {\n content_type: values[0]?.contentType,\n });\n if (values.length !== 1) throw new Error(\"Application calls require exactly one input payload\");\n try {\n const parsed = await deserializeApplicationArguments(this.definition, values[0]);\n handlerArgs = parsed.args;\n } catch (error) {\n this.log(\"error\", \"application invocation input deserialization failed\", {}, error);\n await this.finishUserError(error);\n return;\n }\n this.log(\"debug\", \"application invocation input deserialized\", {\n handler_argument_count: handlerArgs.length,\n });\n } else {\n this.log(\"debug\", \"deserializing internal function invocation inputs\", {\n metadata_bytes: metadata.byteLength,\n });\n const call = JSON.parse(metadata.toString(\"utf8\")) as Message;\n if (call.format !== \"tensorlake.typescript.function-call.v1\") {\n throw new Error(\"Function call metadata was produced by a different SDK language\");\n }\n if (call.argumentCount !== values.length) throw new Error(\"Function call metadata argument count differs\");\n try {\n handlerArgs = values.map(deserializeValueFromProtocol);\n } catch (error) {\n this.log(\"error\", \"internal function argument deserialization failed\", {}, error);\n await this.finishUserError(error);\n return;\n }\n this.log(\"debug\", \"internal function invocation inputs deserialized\", {\n handler_argument_count: handlerArgs.length,\n metadata_function: call.functionName,\n });\n }\n\n if (REPLAY_STRICT.has(this.allocation.replayMode)) {\n this.log(\"info\", \"strict replay history loading\");\n await this.loadReplayHistory();\n } else {\n this.log(\"debug\", \"strict replay disabled\");\n }\n const requestContext = this.createRequestContext();\n let result: unknown | TailCall<unknown>;\n const handlerStartedAt = Date.now();\n this.log(\"info\", \"user function handler starting\", {\n handler_argument_count: handlerArgs.length,\n });\n try {\n const execute = () => executeHandlerResult(this.definition, handlerArgs);\n result = await runWithRequestContext(requestContext, () =>\n runWithFunctionRuntime(this, () => waitWithAbortSignal(\n this.replay?.runCausalHandler(execute) ?? execute(),\n this.controller.signal,\n )),\n );\n } catch (error) {\n if (error instanceof ReplayMismatchError || error instanceof AllocationProtocolError) {\n throw error;\n }\n // Promise combinators such as Promise.any can wrap the replay waiter's\n // ReplayMismatchError (for example in an AggregateError). Preserve the\n // allocation-level replay classification even when user-level promise\n // machinery changes the surfaced error object.\n this.replay?.assertNoMismatch();\n this.log(\"error\", \"user function handler failed\", {\n duration_ms: Date.now() - handlerStartedAt,\n }, error);\n await this.finishUserError(error);\n return;\n }\n this.log(\"info\", \"user function handler completed\", {\n duration_ms: Date.now() - handlerStartedAt,\n result_kind: isTailCall(result)\n ? \"tail_call\"\n : \"value\",\n result_type: result == null ? String(result) : typeof result,\n });\n if (this.protocolError != null) throw this.protocolError;\n this.replay?.assertNoMismatch();\n if (isTailCall(result)) {\n const id = await this.startTailCall(result);\n this.replay?.assertConsumed();\n this.controller.signal.throwIfAborted();\n this.log(\"info\", \"queueing successful tail-call allocation finish\", { tail_call_durable_id: id });\n this.queueTerminalBatch({\n outcomeCode: \"ALLOCATION_OUTCOME_CODE_SUCCESS\",\n tailCallDurableId: id,\n });\n } else {\n this.replay?.assertConsumed();\n let prepared: PreparedSerializedObject;\n try {\n prepared = prepareSerializedObject(result, 0, String(this.allocation.functionCallId));\n } catch (error) {\n this.log(\"error\", \"function output serialization failed\", {}, error);\n await this.finishUserError(error);\n return;\n }\n this.log(\"debug\", \"function output serialized\", {\n output_bytes: prepared.bytes.byteLength,\n output_encoding: prepared.object.manifest?.encoding,\n output_content_type: prepared.object.manifest?.contentType,\n });\n let outputBlob = await this.requestOutputBlob(prepared.bytes.byteLength);\n outputBlob = await this.uploadBlob(outputBlob, prepared.bytes, \"function output\");\n this.controller.signal.throwIfAborted();\n this.log(\"info\", \"queueing successful value allocation finish\", {\n output_blob_id: outputBlob.id,\n output_bytes: prepared.bytes.byteLength,\n });\n this.queueTerminalBatch({\n outcomeCode: \"ALLOCATION_OUTCOME_CODE_SUCCESS\",\n value: prepared.object,\n uploadedFunctionOutputsBlob: outputBlob,\n });\n }\n } catch (error) {\n const replayMismatch = error instanceof ReplayMismatchError;\n const protocolFailure =\n error instanceof AllocationProtocolError || this.protocolError != null;\n const cancelled = this.controller.signal.aborted && !protocolFailure;\n this.log(\n cancelled ? \"info\" : \"error\",\n cancelled\n ? \"allocation stopped after cancellation\"\n : replayMismatch\n ? \"durable replay mismatch\"\n : \"allocation internal failure\",\n {},\n error,\n );\n this.queueTerminalBatch({\n outcomeCode: \"ALLOCATION_OUTCOME_CODE_FAILURE\",\n failureReason: replayMismatch\n ? \"ALLOCATION_FAILURE_REASON_REPLAY_EVENT_HISTORY_MISMATCH\"\n : protocolFailure\n ? \"ALLOCATION_FAILURE_REASON_INTERNAL_ERROR\"\n : cancelled\n ? \"ALLOCATION_FAILURE_REASON_FUNCTION_ERROR\"\n : \"ALLOCATION_FAILURE_REASON_INTERNAL_ERROR\",\n });\n } finally {\n this.log(\"info\", \"allocation execution stopping\", {\n duration_ms: Date.now() - this.startedAt,\n pending_output_blob_requests: this.outputBlobRequests.size,\n pending_state_operations: this.stateOperationRequests.size,\n pending_event_waiters: this.liveWaiters.length,\n });\n this.emitLifecycleEvent(\"allocations_finished\", \"Allocations completed\");\n this.finish();\n this.replay?.dispose();\n }\n }\n\n private async finishUserError(error: unknown): Promise<void> {\n const rendered = error instanceof Error ? error.message : String(error);\n this.runWithoutReplayOwnership(() => {\n printCloudEvent({\n level: \"error\",\n event: \"function_call_failed\",\n message: rendered,\n namespace: this.functionRef.namespace,\n application: this.functionRef.applicationName,\n application_version: this.functionRef.applicationVersion,\n function: this.functionRef.functionName,\n request_id: this.allocation.requestId,\n function_call_id: this.allocation.functionCallId,\n allocation_id: this.allocation.allocationId,\n error: error instanceof Error ? error.stack?.split(\"\\n\") ?? [rendered] : [rendered],\n });\n });\n if (isRequestError(error)) {\n const output = prepareTextObject(error.message);\n const requestErrorBlob = this.allocation.inputs?.requestErrorBlob as BlobValue | undefined;\n if (requestErrorBlob == null) throw new Error(\"Allocation has no request error BLOB\");\n const uploaded = await this.uploadBlob(requestErrorBlob, output.bytes, \"request error output\");\n this.log(\"info\", \"queueing request-error allocation finish\", {\n request_error_bytes: output.bytes.byteLength,\n request_error_blob_id: uploaded.id,\n });\n this.queueTerminalBatch({\n outcomeCode: \"ALLOCATION_OUTCOME_CODE_FAILURE\",\n failureReason: \"ALLOCATION_FAILURE_REASON_REQUEST_ERROR\",\n requestErrorOutput: output.object,\n uploadedRequestErrorBlob: uploaded,\n });\n return;\n }\n this.log(\"info\", \"queueing function-error allocation finish\", {}, error);\n this.queueTerminalBatch({\n outcomeCode: \"ALLOCATION_OUTCOME_CODE_FAILURE\",\n failureReason: \"ALLOCATION_FAILURE_REASON_FUNCTION_ERROR\",\n });\n }\n\n private createRequestContext(): RequestContextValue {\n return {\n requestId: String(this.allocation.requestId),\n headers: new Headers(\n (this.allocation.inputs?.requestContext?.headers ?? []).map(\n (header: Message) => [\n String(header.name ?? \"\"),\n String(header.value ?? \"\"),\n ],\n ),\n ),\n signal: this.controller.signal,\n state: {\n get: async <T>(key: string, defaultValue?: T) => {\n validateRequestStateKey(key);\n const operationId = randomUUID();\n this.log(\"debug\", \"request state read starting\", {\n state_key: key,\n operation_id: operationId,\n has_default: defaultValue !== undefined,\n });\n const result = await this.requestStateOperation({ operationId, stateKey: key, prepareRead: {} });\n if (result.status?.code === NOT_FOUND) {\n this.log(\"debug\", \"request state key not found\", { state_key: key, operation_id: operationId });\n return defaultValue;\n }\n const error = statusError(result.status, `Failed to read request state '${key}'`);\n if (error != null) throw error;\n const data = await this.downloadBlob(result.prepareRead?.blob, \"request state value\", {\n state_key: key,\n operation_id: operationId,\n });\n const value = deserializeJSON(data) as T;\n this.log(\"debug\", \"request state read completed\", {\n state_key: key,\n operation_id: operationId,\n value_bytes: data.byteLength,\n });\n return value;\n },\n set: async (key: string, value: unknown) => {\n validateRequestStateKey(key);\n const serialized = serializeRequestStateValue(value);\n const prepareOperationId = randomUUID();\n this.log(\"debug\", \"request state write preparation starting\", {\n state_key: key,\n operation_id: prepareOperationId,\n value_bytes: serialized.byteLength,\n });\n const prepared = await this.requestStateOperation({\n operationId: prepareOperationId,\n stateKey: key,\n prepareWrite: { size: serialized.byteLength },\n });\n const error = statusError(prepared.status, `Failed to prepare request state '${key}'`);\n if (error != null) throw error;\n const blob = await this.uploadBlob(prepared.prepareWrite?.blob, serialized, \"request state value\", {\n state_key: key,\n operation_id: prepareOperationId,\n });\n const commitOperationId = randomUUID();\n this.log(\"debug\", \"request state write commit starting\", {\n state_key: key,\n operation_id: commitOperationId,\n blob_id: blob.id,\n });\n const committed = await this.requestStateOperation({\n operationId: commitOperationId,\n stateKey: key,\n commitWrite: { blob },\n });\n const commitError = statusError(committed.status, `Failed to commit request state '${key}'`);\n if (commitError != null) throw commitError;\n this.log(\"debug\", \"request state write completed\", {\n state_key: key,\n operation_id: commitOperationId,\n value_bytes: serialized.byteLength,\n });\n },\n },\n metrics: {\n counter: async (name, value = 1) => {\n validateCounterMetric(name, value);\n this.emitUserEvent(\"ai.tensorlake.metric.counter.inc\", {\n counter_name: name,\n counter_inc: value,\n });\n },\n timer: async (name, value) => {\n validateTimerMetric(name, value);\n this.emitUserEvent(\"ai.tensorlake.metric.timer\", {\n timer_name: name,\n timer_value: value,\n });\n },\n },\n progress: {\n update: async (current, total, options) => {\n validateProgressUpdate(current, total, options);\n this.log(\"debug\", \"request progress update\", {\n current,\n total,\n has_custom_message: options?.message != null,\n attribute_count: Object.keys(options?.attributes ?? {}).length,\n });\n this.state.progress = { current, total };\n this.publishState();\n const message = options?.message ?? `${this.functionRef.functionName}: executing step ${current} of ${total}`;\n this.runWithoutReplayOwnership(() => {\n printCloudEvent({ RequestProgressUpdated: {\n request_id: this.allocation.requestId,\n function_name: this.functionRef.functionName,\n function_run_id: this.allocation.functionCallId,\n allocation_id: this.allocation.allocationId,\n message,\n step: current,\n total,\n attributes: options?.attributes,\n created_at: new Date().toISOString(),\n } }, {\n type: \"ai.tensorlake.progress_update\",\n source: \"/tensorlake/applications/progress\",\n message,\n });\n });\n },\n },\n };\n }\n\n private emitUserEvent(type: string, data: Message): void {\n this.log(\"debug\", \"user metric event emitted\", {\n event_type: type,\n metric_name: data.counter_name ?? data.timer_name,\n });\n this.runWithoutReplayOwnership(() => {\n printCloudEvent({\n request_id: this.allocation.requestId,\n function_name: this.functionRef.functionName,\n function_run_id: this.allocation.functionCallId,\n allocation_id: this.allocation.allocationId,\n ...data,\n }, { type, source: \"/tensorlake/applications/metrics\" });\n });\n }\n\n private emitLifecycleEvent(event: string, message: string): void {\n this.runWithoutReplayOwnership(() => {\n printCloudEvent({\n event,\n message,\n allocations: [{\n namespace: this.functionRef.namespace,\n application: this.functionRef.applicationName,\n application_version: this.functionRef.applicationVersion,\n function: this.functionRef.functionName,\n request_id: this.allocation.requestId,\n function_call_id: this.allocation.functionCallId,\n allocation_id: this.allocation.allocationId,\n }],\n });\n });\n }\n\n private async loadReplayHistory(): Promise<void> {\n const entries: Message[] = [];\n let afterClock = 0;\n let page = 0;\n while (true) {\n page += 1;\n this.log(\"debug\", \"requesting replay history page\", { page, after_clock: afterClock });\n const requestedAfterClock = afterClock;\n const response = await this.readEvents(afterClock);\n entries.push(...(response.entries ?? []));\n this.log(\"debug\", \"replay history page received\", {\n page,\n entry_count: response.entries?.length ?? 0,\n last_clock: response.lastClock,\n has_more: response.hasMore,\n });\n const responseClock = validatedEventLogClock(\n response,\n requestedAfterClock,\n (message) => new ReplayMismatchError(message),\n );\n afterClock = responseClock;\n if (!response.hasMore) break;\n }\n this.lastEventClock = afterClock;\n this.replay = new ReplayHistory(entries);\n this.log(\"info\", \"strict replay history loaded\", {\n page_count: page,\n entry_count: entries.length,\n last_clock: afterClock,\n });\n }\n\n private waitForLiveEvent(predicate: (event: Message) => boolean): Promise<Message> {\n if (this.controller.signal.aborted) {\n return Promise.reject(this.controller.signal.reason);\n }\n const index = this.liveBacklog.findIndex(predicate);\n if (index >= 0) {\n this.log(\"debug\", \"durable event satisfied from backlog\", {\n backlog_size: this.liveBacklog.length,\n pending_waiters: this.liveWaiters.length,\n });\n return Promise.resolve(this.liveBacklog.splice(index, 1)[0]);\n }\n const result = deferred<Message>();\n this.liveWaiters.push({ predicate, result });\n this.log(\"debug\", \"waiting for durable event\", {\n backlog_size: this.liveBacklog.length,\n pending_waiters: this.liveWaiters.length,\n });\n this.ensureLivePump();\n return result.promise;\n }\n\n private ensureLivePump(): void {\n if (this.livePump != null) {\n this.log(\"debug\", \"durable event live pump already running\");\n return;\n }\n this.log(\"info\", \"durable event live pump starting\", { after_clock: this.lastEventClock });\n const pump = (async () => {\n // Only issue event-log reads while user code is blocked on a durable\n // event. This leaves no orphaned long poll after the final watcher result\n // and makes stream shutdown deterministic.\n while (!this.finished && this.liveWaiters.length > 0) {\n const requestedAfterClock = this.lastEventClock;\n const response = await this.readEvents(this.lastEventClock);\n this.log(\"debug\", \"durable event log page received\", {\n requested_after_clock: requestedAfterClock,\n entry_count: response.entries?.length ?? 0,\n last_clock: response.lastClock,\n has_more: response.hasMore,\n });\n const responseClock = validatedEventLogClock(\n response,\n requestedAfterClock,\n (message) => new AllocationProtocolError(message),\n );\n this.lastEventClock = responseClock;\n for (const entry of response.entries ?? []) this.dispatchLiveEvent(entry);\n }\n })();\n this.livePump = pump;\n void pump.then(() => {\n if (this.livePump !== pump) return;\n this.livePump = undefined;\n this.log(\"debug\", \"durable event live pump stopped\", {\n finished: this.finished,\n pending_waiters: this.liveWaiters.length,\n after_clock: this.lastEventClock,\n });\n // A waiter can be installed between the loop condition and this\n // continuation. Restart in that case so it cannot be stranded.\n if (!this.finished && this.liveWaiters.length > 0) this.ensureLivePump();\n }, (error) => {\n if (this.livePump === pump) this.livePump = undefined;\n if (!this.finished && !this.controller.signal.aborted) {\n const protocolError = error instanceof AllocationProtocolError\n ? error\n : new AllocationProtocolError(\n error instanceof Error ? error.message : String(error),\n { cause: error },\n );\n this.latchProtocolError(protocolError);\n this.log(\"error\", \"durable event live pump failed\", {\n pending_waiters: this.liveWaiters.length,\n }, protocolError);\n }\n });\n }\n\n private dispatchLiveEvent(entry: Message): void {\n const index = this.liveWaiters.findIndex((waiter) => waiter.predicate(entry));\n const eventKind = Object.keys(entry).find((key) => key !== \"clock\") ?? \"unknown\";\n if (index < 0) {\n this.liveBacklog.push(entry);\n this.log(\"debug\", \"durable event added to backlog\", {\n event_kind: eventKind,\n event_clock: entry.clock,\n backlog_size: this.liveBacklog.length,\n });\n } else {\n this.liveWaiters.splice(index, 1)[0].result.resolve(entry);\n this.log(\"debug\", \"durable event delivered to waiter\", {\n event_kind: eventKind,\n event_clock: entry.clock,\n pending_waiters: this.liveWaiters.length,\n });\n }\n }\n\n private readEvents(afterClock: number): Promise<Message> {\n if (this.currentRead != null) {\n throw new AllocationProtocolError(\"Allocation event log already has a pending read\");\n }\n const response = deferred<Message>();\n const request = {\n allocationId: this.allocation.allocationId,\n afterClock,\n maxEntries: 100,\n };\n this.currentRead = { request, response };\n this.log(\"debug\", \"event log read requested\", {\n after_clock: afterClock,\n max_entries: request.maxEntries,\n connected_streams: this.eventReadStreams.size,\n });\n for (const stream of [...this.eventReadStreams]) {\n try {\n stream.write(request);\n } catch (error) {\n this.dropEventReadStream(stream, \"write_failed\", error);\n }\n }\n return response.promise;\n }\n\n watchEventLogReads(stream: StreamCall): void {\n this.eventReadStreams.add(stream);\n this.log(\"info\", \"event log read stream connected\", {\n connected_streams: this.eventReadStreams.size,\n has_pending_read: this.currentRead != null,\n });\n try {\n stream.on(\"cancelled\", () => this.dropEventReadStream(stream, \"cancelled\"));\n stream.on(\"close\", () => this.dropEventReadStream(stream, \"closed\"));\n if (this.currentRead != null) {\n this.log(\"debug\", \"sending pending event log read to new stream\", {\n after_clock: this.currentRead.request.afterClock,\n max_entries: this.currentRead.request.maxEntries,\n });\n stream.write(this.currentRead.request);\n }\n if (this.finished && this.currentRead == null) stream.end();\n } catch (error) {\n this.dropEventReadStream(stream, \"setup_failed\", error);\n throw error;\n }\n }\n\n deliverEventLogResponse(response: Message): void {\n if (this.currentRead == null) {\n this.log(\"warn\", \"unexpected event log response ignored\", {\n entry_count: response.entries?.length ?? 0,\n last_clock: response.lastClock,\n });\n return;\n }\n const pending = this.currentRead;\n this.currentRead = undefined;\n this.log(\"debug\", \"event log response delivered\", {\n requested_after_clock: pending.request.afterClock,\n entry_count: response.entries?.length ?? 0,\n last_clock: response.lastClock,\n has_more: response.hasMore,\n });\n pending.response.resolve(response);\n }\n\n private requestOutputBlob(size: number): Promise<BlobValue> {\n if (this.controller.signal.aborted) {\n return Promise.reject(this.controller.signal.reason);\n }\n const id = randomUUID();\n const request = deferred<Message>();\n this.outputBlobRequests.set(id, request);\n this.state.outputBlobRequests.push({ id, size });\n this.log(\"debug\", \"output blob requested\", {\n blob_id: id,\n requested_bytes: size,\n pending_output_blob_requests: this.outputBlobRequests.size,\n });\n this.publishState();\n return request.promise.then((output) => {\n this.log(\"debug\", \"output blob response received\", {\n blob_id: id,\n status_code: output.status?.code,\n chunk_count: output.blob?.chunks?.length ?? 0,\n });\n const error = statusError(output.status, \"Failed to create output BLOB\");\n if (error != null) throw error;\n return output.blob as BlobValue;\n });\n }\n\n private requestStateOperation(operation: Message): Promise<Message> {\n if (this.controller.signal.aborted) {\n return Promise.reject(this.controller.signal.reason);\n }\n const request = deferred<Message>();\n this.stateOperationRequests.set(operation.operationId, request);\n this.state.requestStateOperations.push(operation);\n this.log(\"debug\", \"request state operation queued\", {\n operation_id: operation.operationId,\n state_key: operation.stateKey,\n operation_kind: this.stateOperationKind(operation),\n requested_bytes: operation.prepareWrite?.size,\n pending_state_operations: this.stateOperationRequests.size,\n });\n this.publishState();\n return request.promise;\n }\n\n deliverUpdate(update: Message): void {\n if (update.outputBlob != null) {\n let id = String(update.outputBlob.blob?.id ?? \"\");\n let matchedByOrder = false;\n if (!id) {\n // Error responses do not contain a BLOB, and therefore carry no BLOB ID.\n // The dataplane reconciles state requests and sends their responses in\n // state-list order, so match a BLOB-less response to the oldest request.\n id = String(this.state.outputBlobRequests[0]?.id ?? \"\");\n matchedByOrder = id !== \"\";\n }\n const request = this.outputBlobRequests.get(id);\n if (request == null) {\n this.log(\"warn\", \"unmatched output blob update ignored\", {\n blob_id: id || undefined,\n status_code: update.outputBlob.status?.code,\n pending_output_blob_requests: this.outputBlobRequests.size,\n });\n return;\n }\n this.outputBlobRequests.delete(id);\n this.state.outputBlobRequests = this.state.outputBlobRequests.filter((item: Message) => item.id !== id);\n this.log(\"debug\", \"output blob update matched\", {\n blob_id: id,\n status_code: update.outputBlob.status?.code,\n chunk_count: update.outputBlob.blob?.chunks?.length ?? 0,\n matched_by_order: matchedByOrder,\n pending_output_blob_requests: this.outputBlobRequests.size,\n });\n // Once a response is matched, settle its waiter before notifying state\n // streams. A broken stream writer must not strand the allocation after\n // the dataplane has already delivered the BLOB response.\n request.resolve(update.outputBlob);\n this.publishState();\n return;\n }\n const result = update.requestStateOperationResult;\n if (result != null) {\n if (typeof result.operationId !== \"string\" || result.operationId.length === 0) {\n throw this.latchProtocolError(\n \"Allocation received a request state operation result without an operation ID\",\n );\n }\n const id = result.operationId;\n const request = this.stateOperationRequests.get(id);\n if (request == null) {\n this.log(\"warn\", \"unmatched request state operation result ignored\", {\n operation_id: id,\n status_code: result.status?.code,\n pending_state_operations: this.stateOperationRequests.size,\n });\n return;\n }\n const operation = this.state.requestStateOperations.find((item: Message) => item.operationId === id);\n this.stateOperationRequests.delete(id);\n this.state.requestStateOperations = this.state.requestStateOperations.filter(\n (item: Message) => item.operationId !== id,\n );\n this.log(\"debug\", \"request state operation result matched\", {\n operation_id: id,\n state_key: operation?.stateKey,\n operation_kind: this.stateOperationKind(operation),\n status_code: result.status?.code,\n pending_state_operations: this.stateOperationRequests.size,\n });\n // State publication is downstream bookkeeping. Resolve the operation\n // first so a failing stream cannot turn a delivered result into a hang.\n request.resolve(result);\n this.publishState();\n return;\n }\n this.log(\"warn\", \"allocation update contained no recognized payload\");\n }\n\n watchState(stream: StreamCall): void {\n this.stateStreams.add(stream);\n this.stateStreamFlows.set(stream, { backpressured: false });\n this.log(\"info\", \"allocation state stream connected\", {\n connected_streams: this.stateStreams.size,\n state_hash: this.state.sha256Hash,\n pending_output_blob_requests: this.outputBlobRequests.size,\n pending_state_operations: this.stateOperationRequests.size,\n });\n try {\n stream.on(\"cancelled\", () => this.dropStateStream(stream, \"cancelled\"));\n stream.on(\"close\", () => this.dropStateStream(stream, \"closed\"));\n stream.on(\"drain\", () => this.drainStateStream(stream));\n this.writeStateSnapshot(stream, this.snapshotState());\n if (this.finished) stream.end();\n } catch (error) {\n this.dropStateStream(stream, \"setup_failed\", error);\n throw error;\n }\n }\n\n private updateStateHash(): void {\n const content = JSON.stringify({\n progress: this.state.progress,\n outputBlobRequests: this.state.outputBlobRequests,\n requestStateOperations: this.state.requestStateOperations,\n });\n this.state.sha256Hash = createHash(\"sha256\").update(content).digest(\"hex\");\n }\n\n private snapshotState(): Message {\n return nativeStructuredClone(this.state) as Message;\n }\n\n private publishState(): void {\n this.updateStateHash();\n this.log(\"debug\", \"allocation state published\", {\n state_hash: this.state.sha256Hash,\n connected_streams: this.stateStreams.size,\n pending_output_blob_requests: this.outputBlobRequests.size,\n pending_state_operations: this.stateOperationRequests.size,\n progress_current: this.state.progress?.current,\n progress_total: this.state.progress?.total,\n });\n for (const stream of [...this.stateStreams]) {\n // Allocation state is level-triggered: one current snapshot contains all\n // outstanding requests. Coalesce intermediate snapshots while grpc-js is\n // backpressured so progress-heavy functions cannot grow the transport\n // buffer without bound.\n this.writeStateSnapshot(stream, this.snapshotState());\n }\n }\n\n private writeStateSnapshot(stream: StreamCall, snapshot: Message): void {\n const flow = this.stateStreamFlows.get(stream);\n if (flow == null) return;\n if (flow.backpressured) {\n flow.pending = snapshot;\n return;\n }\n try {\n // grpc-js streams are object-mode writers and may retain a message\n // reference while backpressured. Every caller supplies a deep snapshot\n // so later reconciliation cannot rewrite transport-owned state.\n flow.backpressured = !stream.write(snapshot);\n } catch (error) {\n // A reconnect receives the complete current state. Drop a broken writer\n // so it cannot block healthy streams or allocation waiters.\n this.dropStateStream(stream, \"write_failed\", error);\n }\n }\n\n private drainStateStream(stream: StreamCall): void {\n const flow = this.stateStreamFlows.get(stream);\n if (flow == null) return;\n flow.backpressured = false;\n const pending = flow.pending;\n flow.pending = undefined;\n if (pending != null) this.writeStateSnapshot(stream, pending);\n }\n\n private addBatch(events: Message[]): void {\n if (this.terminalBatchQueued && events.every((event) => event.finishAllocation == null)) {\n this.log(\"error\", \"execution event rejected after terminal batch\", {\n event_count: events.length,\n event_kinds: events.map((event) => Object.keys(event)[0] ?? \"unknown\"),\n });\n return;\n }\n this.executionBatches.push(events);\n this.log(\"debug\", \"execution log batch queued\", {\n event_count: events.length,\n event_kinds: events.map((event) => Object.keys(event)[0] ?? \"unknown\"),\n queued_batches: this.executionBatches.length,\n waiting_consumers: this.executionBatchWaiters.length,\n });\n for (const waiter of this.executionBatchWaiters.splice(0)) {\n this.markTerminalBatchObserved(events);\n waiter(events);\n }\n }\n\n private queueTerminalBatch(finishAllocation: Message): void {\n if (this.terminalBatchQueued) {\n this.log(\"error\", \"duplicate terminal allocation batch rejected\", {\n outcome_code: finishAllocation.outcomeCode,\n failure_reason: finishAllocation.failureReason,\n });\n return;\n }\n this.terminalBatchQueued = true;\n this.addBatch([{ finishAllocation }]);\n }\n\n async getExecutionBatch(): Promise<Message[]> {\n if (this.executionBatches.length > 0) {\n this.log(\"debug\", \"returning queued execution log batch\", {\n event_count: this.executionBatches[0].length,\n queued_batches: this.executionBatches.length,\n });\n const events = this.executionBatches[0];\n this.markTerminalBatchObserved(events);\n return events;\n }\n if (this.finished) {\n this.log(\"debug\", \"returning empty execution log batch for finished allocation\");\n return [];\n }\n this.log(\"debug\", \"execution log batch consumer waiting\", {\n waiting_consumers: this.executionBatchWaiters.length + 1,\n });\n return new Promise((resolve) => this.executionBatchWaiters.push(resolve));\n }\n\n advanceExecutionBatch(): void {\n const advanced = this.executionBatches.shift();\n this.log(\"debug\", \"execution log batch advanced\", {\n advanced_event_count: advanced?.length ?? 0,\n queued_batches: this.executionBatches.length,\n });\n }\n\n private markTerminalBatchObserved(events: Message[]): void {\n if (\n this.terminalBatchObserved\n || !events.some((event) => event.finishAllocation != null)\n ) {\n return;\n }\n this.terminalBatchObserved = true;\n this.log(\"debug\", \"terminal execution log batch observed by consumer\");\n for (const waiter of this.terminalBatchObservedWaiters.splice(0)) waiter();\n }\n\n get isFinished(): boolean {\n return this.finished;\n }\n\n private finish(): void {\n if (this.finished) {\n this.log(\"debug\", \"allocation finish ignored because runner is already finished\");\n return;\n }\n this.finished = true;\n this.abortExecution(new FunctionError(\"Allocation finished\"));\n this.log(\"info\", \"allocation runner finished\", {\n duration_ms: Date.now() - this.startedAt,\n queued_execution_batches: this.executionBatches.length,\n state_streams: this.stateStreams.size,\n event_log_streams: this.eventReadStreams.size,\n });\n for (const stream of [...this.stateStreams]) {\n try {\n stream.end();\n } catch (error) {\n this.dropStateStream(stream, \"end_failed\", error);\n }\n }\n for (const stream of [...this.eventReadStreams]) {\n try {\n stream.end();\n } catch (error) {\n this.dropEventReadStream(stream, \"end_failed\", error);\n }\n }\n for (const waiter of this.executionBatchWaiters.splice(0)) waiter([]);\n }\n\n private dropStateStream(\n stream: StreamCall,\n reason: string,\n error?: unknown,\n ): void {\n if (!this.stateStreams.delete(stream)) return;\n this.stateStreamFlows.delete(stream);\n this.log(\"info\", \"allocation state stream disconnected\", {\n reason,\n connected_streams: this.stateStreams.size,\n }, error);\n }\n\n private dropEventReadStream(\n stream: StreamCall,\n reason: string,\n error?: unknown,\n ): void {\n if (!this.eventReadStreams.delete(stream)) return;\n this.log(\"info\", \"event log read stream disconnected\", {\n reason,\n connected_streams: this.eventReadStreams.size,\n has_pending_read: this.currentRead != null,\n }, error);\n }\n\n private stateOperationKind(operation: Message | undefined): string {\n if (operation?.prepareRead != null) return \"prepare_read\";\n if (operation?.prepareWrite != null) return \"prepare_write\";\n if (operation?.commitWrite != null) return \"commit_write\";\n return \"unknown\";\n }\n\n private blobLogFields(blob: BlobValue | undefined): Message {\n const chunks = blob?.chunks ?? [];\n return {\n blob_id: blob?.id,\n chunk_count: chunks.length,\n declared_bytes: chunks.reduce((total, chunk) => total + (chunk.size ?? 0), 0),\n };\n }\n\n private async downloadBlob(\n blob: BlobValue | undefined,\n purpose: string,\n fields: Message = {},\n ): Promise<Uint8Array> {\n if (blob == null) throw new Error(`Missing BLOB for ${purpose}`);\n const startedAt = Date.now();\n this.log(\"debug\", \"blob download starting\", {\n purpose,\n ...fields,\n ...this.blobLogFields(blob),\n });\n try {\n const data = await downloadBlobData(\n blob,\n (message, details) => this.log(\"debug\", `blob ${message}`, {\n purpose,\n ...fields,\n ...details,\n }),\n this.controller.signal,\n );\n this.log(\"debug\", \"blob download completed\", {\n purpose,\n ...fields,\n ...this.blobLogFields(blob),\n downloaded_bytes: data.byteLength,\n duration_ms: Date.now() - startedAt,\n });\n return data;\n } catch (error) {\n this.log(\"error\", \"blob download failed\", {\n purpose,\n ...fields,\n ...this.blobLogFields(blob),\n duration_ms: Date.now() - startedAt,\n }, error);\n throw error;\n }\n }\n\n private async downloadSerializedObject(\n object: SerializedObjectInsideBlobValue | undefined,\n blob: BlobValue | undefined,\n purpose: string,\n fields: Message = {},\n ): Promise<{ data: Uint8Array; metadata: Uint8Array; contentType?: string; encoding?: string | number }> {\n if (object == null) throw new Error(`Missing serialized object for ${purpose}`);\n if (blob == null) throw new Error(`Missing BLOB for ${purpose}`);\n const startedAt = Date.now();\n this.log(\"debug\", \"serialized object download starting\", {\n purpose,\n ...fields,\n ...this.blobLogFields(blob),\n object_offset: object.offset ?? 0,\n object_bytes: object.manifest?.size,\n metadata_bytes: object.manifest?.metadataSize,\n content_type: object.manifest?.contentType,\n encoding: object.manifest?.encoding,\n });\n try {\n const value = await downloadSerializedObjectData(\n object,\n blob,\n (message, details) => this.log(\n \"debug\",\n `blob ${message}`,\n { purpose, ...fields, ...details },\n ),\n this.controller.signal,\n );\n this.log(\"debug\", \"serialized object download completed\", {\n purpose,\n ...fields,\n ...this.blobLogFields(blob),\n object_bytes: value.data.byteLength + value.metadata.byteLength,\n data_bytes: value.data.byteLength,\n metadata_bytes: value.metadata.byteLength,\n duration_ms: Date.now() - startedAt,\n });\n return value;\n } catch (error) {\n this.log(\"error\", \"serialized object download failed\", {\n purpose,\n ...fields,\n ...this.blobLogFields(blob),\n duration_ms: Date.now() - startedAt,\n }, error);\n throw error;\n }\n }\n\n private async uploadBlob(\n blob: BlobValue | undefined,\n data: Uint8Array,\n purpose: string,\n fields: Message = {},\n ): Promise<BlobValue> {\n if (blob == null) throw new Error(`Missing BLOB for ${purpose}`);\n const startedAt = Date.now();\n this.log(\"debug\", \"blob upload starting\", {\n purpose,\n ...fields,\n ...this.blobLogFields(blob),\n upload_bytes: data.byteLength,\n });\n try {\n const uploaded = await uploadBlobData(\n blob,\n data,\n (message, details) => this.log(\"debug\", `blob ${message}`, {\n purpose,\n ...fields,\n ...details,\n }),\n this.controller.signal,\n );\n this.log(\"debug\", \"blob upload completed\", {\n purpose,\n ...fields,\n ...this.blobLogFields(uploaded),\n upload_bytes: data.byteLength,\n duration_ms: Date.now() - startedAt,\n });\n return uploaded;\n } catch (error) {\n this.log(\"error\", \"blob upload failed\", {\n purpose,\n ...fields,\n ...this.blobLogFields(blob),\n upload_bytes: data.byteLength,\n duration_ms: Date.now() - startedAt,\n }, error);\n throw error;\n }\n }\n\n private log(level: LogLevel, message: string, fields: Message = {}, error?: unknown): void {\n this.runWithoutReplayOwnership(() => {\n writeStructuredOutput(\"stderr\", () => {\n const rendered = error instanceof Error\n ? error.stack?.split(\"\\n\") ?? [`${error.name}: ${error.message}`]\n : error == null ? undefined : [String(error)];\n return {\n timestamp: new Date().toISOString(),\n level,\n component: \"typescript_function_executor_allocation\",\n message,\n allocation_id: this.allocation.allocationId,\n request_id: this.allocation.requestId,\n function_call_id: this.allocation.functionCallId,\n namespace: this.functionRef.namespace,\n application: this.functionRef.applicationName,\n application_version: this.functionRef.applicationVersion,\n function: this.functionRef.functionName,\n elapsed_ms: Date.now() - this.startedAt,\n ...fields,\n ...(rendered == null ? {} : { error: rendered }),\n };\n });\n });\n }\n\n private runWithoutReplayOwnership<T>(callback: () => T): T {\n return this.replay?.runWithoutCausalOwnership(callback) ?? callback();\n }\n}\n","import { AsyncLocalStorage, executionAsyncId } from \"node:async_hooks\";\nimport { randomUUID } from \"node:crypto\";\nimport type { Image } from \"../image.js\";\nimport { SDKUsageError } from \"./errors.js\";\nimport type { Parameter, ParameterValues, Schema } from \"./schema.js\";\nimport { schema, validateWithSchema } from \"./schema.js\";\nimport { registerDefinition } from \"./registry.js\";\n\nexport interface Retries {\n maxRetries: number;\n}\n\nexport function retries(options: Retries): Retries {\n if (\n typeof options !== \"object\"\n || options == null\n || !Number.isInteger(options.maxRetries)\n || options.maxRetries < 0\n || options.maxRetries > 10\n ) {\n throw new SDKUsageError(\"maxRetries must be an integer between 0 and 10\");\n }\n return Object.freeze({ ...options });\n}\n\nexport type Region = \"us-east-1\" | \"eu-west-1\";\n\nexport type ApplicationCapability = \"unauthenticated_requests\";\n\nexport interface FunctionOptions<\n P extends readonly Parameter<unknown>[],\n R,\n> {\n name?: string;\n parameters: P;\n returns: Schema<R>;\n description?: string;\n cpu?: number;\n memory?: number;\n ephemeralDisk?: number;\n gpu?: string | string[] | null;\n timeout?: number;\n image?: Image;\n secrets?: string[];\n retries?: Retries;\n region?: Region;\n warmContainers?: number;\n minContainers?: number;\n maxContainers?: number;\n}\n\nexport interface ApplicationOptions<\n P extends readonly Parameter<unknown>[],\n R,\n> extends FunctionOptions<P, R> {\n tags?: Record<string, string>;\n applicationRetries?: Retries;\n allow?: readonly ApplicationCapability[];\n}\n\n/** Options available when parameter and return schemas use the JSON defaults. */\nexport type SimpleFunctionOptions = Omit<\n FunctionOptions<readonly Parameter<unknown>[], unknown>,\n \"name\" | \"parameters\" | \"returns\"\n>;\n\n/** Application options available when parameter and return schemas use the JSON defaults. */\nexport type SimpleApplicationOptions = Omit<\n ApplicationOptions<readonly Parameter<unknown>[], unknown>,\n \"name\" | \"parameters\" | \"returns\"\n>;\n\nexport interface NormalizedFunctionOptions {\n description: string;\n cpu: number;\n memory: number;\n ephemeralDisk: number;\n gpu: string | string[] | null;\n timeout: number;\n image?: Image;\n secrets: string[];\n retries?: Retries;\n region?: Region;\n warmContainers?: number;\n minContainers?: number;\n maxContainers?: number;\n}\n\nexport interface ApplicationConfiguration {\n tags: Record<string, string>;\n retries: Retries;\n allow: ApplicationCapability[];\n version: string;\n}\n\nexport interface RegisteredDefinition {\n readonly name: string;\n readonly handler: (...args: unknown[]) => Promise<unknown>;\n readonly parameters: readonly Parameter<unknown>[];\n readonly returns: Schema<unknown>;\n readonly options: NormalizedFunctionOptions;\n readonly application?: ApplicationConfiguration;\n}\n\n// A string discriminator alone is valid user JSON and cannot safely identify\n// an SDK control-flow value. Symbol.for keeps the brand stable when the user\n// application and executor load separate copies of the SDK in one process.\nconst TAIL_CALL_BRAND: unique symbol = Symbol.for(\n \"tensorlake.applications.tail-call.v1\",\n);\n\nexport interface TailCall<T> {\n readonly [TAIL_CALL_BRAND]: true;\n readonly kind: \"tensorlake-tail-call\";\n readonly definition: RegisteredDefinition;\n readonly args: readonly unknown[];\n readonly _result?: T;\n}\n\nexport interface WaitOptions {\n timeout?: number;\n returnWhen?: \"all_completed\" | \"first_completed\" | \"first_failure\";\n}\n\nexport interface WaitResult<T> {\n done: FunctionFuture<T>[];\n notDone: FunctionFuture<T>[];\n}\n\nexport interface FunctionRuntime {\n invoke<T>(definition: RegisteredDefinition, args: readonly unknown[]): Promise<T>;\n runFuture<T>(future: FunctionFuture<T>): Promise<T>;\n wrapFutureWait?<T>(promise: Promise<T>): Promise<T>;\n trackMixedPromiseRace?(\n promise: Promise<unknown>,\n producers?: readonly Promise<unknown>[],\n ): void;\n trackPromiseSettlement?(\n promise: Promise<unknown>,\n onSettled: () => void,\n ): boolean;\n trackDurablePromiseConsumption?(promise: Promise<unknown>): void;\n runPromiseAggregateConstruction?<T>(callback: () => T): T;\n reduce<T>(\n definition: RegisteredDefinition,\n items: readonly unknown[],\n initial: unknown,\n hasInitial: boolean,\n ): Promise<T>;\n}\n\n// FunctionFuture observes durable promises to update its public completion\n// fields. That bookkeeping must not look like an application-level await to\n// the strict replay causality tracker. Symbol.for keeps the private observer\n// available when the application and executor use separate SDK bundles.\nexport const DURABLE_PROMISE_OBSERVER = Symbol.for(\n \"tensorlake.applications.durable-promise-observer.v1\",\n);\n\n// SDK combinators must be able to compose durable promises without making\n// their private bookkeeping look like a user continuation. The aggregate\n// returned to user code is wrapped separately.\nexport const DURABLE_PROMISE_INTERNAL_THEN = Symbol.for(\n \"tensorlake.applications.durable-promise-internal-then.v1\",\n);\n\ninterface ObservableDurablePromise<T> extends Promise<T> {\n [DURABLE_PROMISE_OBSERVER]?: (\n onfulfilled: (value: T) => void,\n onrejected: (reason: unknown) => void,\n ) => void;\n [DURABLE_PROMISE_INTERNAL_THEN]?: <TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n ) => Promise<TResult1 | TResult2>;\n}\n\n// The user application and function executor are separate bundles loaded into\n// one Node process. Store the runtime on globalThis so durable calls made by the\n// application SDK copy reach the executor SDK copy that installed the runtime.\nconst FUNCTION_RUNTIME_STORAGE_KEY = Symbol.for(\n \"tensorlake.applications.function-runtime-storage.v1\",\n);\n\nconst PROMISE_INSTRUMENTED_KEY = Symbol.for(\n \"tensorlake.applications.promise-instrumented.v3\",\n);\n\nconst PROMISE_THEN_INSTRUMENTED_KEY = Symbol.for(\n \"tensorlake.applications.promise-then-instrumented.v1\",\n);\n\nconst DURABLE_THENABLE_REGISTRY_KEY = Symbol.for(\n \"tensorlake.applications.durable-thenable-registry.v2\",\n);\n\nconst INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY = Symbol.for(\n \"tensorlake.applications.internal-promise-aggregate-depth.v1\",\n);\n\ninterface DurableAssimilationRegistration {\n active: boolean;\n readonly detach: () => void;\n}\n\ninterface DurableThenableMetadata {\n readonly aggregateExpectations: DurableAggregateExpectation[];\n readonly provenanceExpectations: DurableProvenanceExpectation[];\n}\n\ninterface DurableThenableProvenance {\n readonly metadata: DurableThenableMetadata;\n readonly assimilation?: DurableAssimilationRegistration;\n readonly detached?: true;\n}\n\ninterface DurableAggregateScope {\n settled: boolean;\n readonly metadata: Set<DurableThenableMetadata>;\n}\n\ninterface DurableAggregateExpectation {\n readonly scope: DurableAggregateScope;\n readonly creatorAsyncId: number;\n}\n\ninterface DurableProvenanceExpectation {\n readonly value: object;\n readonly creatorAsyncId: number;\n}\n\nexport interface DurableAssimilation {\n finish(): void;\n link<T extends object>(value: T): T;\n}\n\nlet futureCompletionCounter = 0;\n\nfunction runtimeStorage(): AsyncLocalStorage<FunctionRuntime> {\n const target = globalThis as typeof globalThis & {\n [FUNCTION_RUNTIME_STORAGE_KEY]?: AsyncLocalStorage<FunctionRuntime>;\n };\n target[FUNCTION_RUNTIME_STORAGE_KEY] ??= new AsyncLocalStorage<FunctionRuntime>();\n return target[FUNCTION_RUNTIME_STORAGE_KEY];\n}\n\nexport function currentFunctionRuntime(): FunctionRuntime | undefined {\n return runtimeStorage().getStore();\n}\n\nexport function runWithFunctionRuntime<T>(\n runtime: FunctionRuntime,\n callback: () => Promise<T>,\n): Promise<T> {\n return runtimeStorage().run(runtime, callback);\n}\n\nexport class FunctionFuture<T> implements PromiseLike<T> {\n readonly id = randomUUID();\n readonly definition: RegisteredDefinition;\n readonly args: readonly unknown[];\n private promise?: Promise<T>;\n private startDelaySeconds = 0;\n private completionOrder?: number;\n private failed = false;\n exception?: unknown;\n done = false;\n\n constructor(definition: RegisteredDefinition, args: readonly unknown[]) {\n this.definition = definition;\n this.args = args;\n registerDurableThenable(this);\n }\n\n run(): this {\n if (this.promise != null) throw new SDKUsageError(`Future ${this.id} is already running`);\n const runtime = currentFunctionRuntime();\n const promise = runtime == null\n ? executeHandler<T>(this.definition, this.args)\n : runtime.runFuture(this);\n // The future and its runtime promise are two views of the same durable\n // operation. Sharing provenance lets Promise.resolve/fan-in wrappers keep\n // the exact durable contender identity.\n registerDurableThenable(promise, this);\n this.promise = promise;\n const onfulfilled = (value: T) => {\n this.done = true;\n this.completionOrder = futureCompletionCounter;\n futureCompletionCounter += 1;\n return value;\n };\n const onrejected = (error: unknown) => {\n this.done = true;\n this.failed = true;\n this.exception = error;\n this.completionOrder = futureCompletionCounter;\n futureCompletionCounter += 1;\n };\n const observer = (promise as ObservableDurablePromise<T>)[DURABLE_PROMISE_OBSERVER];\n if (observer != null) {\n observer.call(promise, onfulfilled, onrejected);\n } else {\n void promise.then(\n (value) => {\n onfulfilled(value);\n },\n (error) => {\n onrejected(error);\n },\n );\n }\n // The completion observer handles rejection without changing `this.promise`,\n // so result()/await still receive the original rejection while Node does not\n // treat an intentionally unawaited future as an unhandled rejection.\n return this;\n }\n\n runLater(delaySeconds: number): this {\n if (!Number.isFinite(delaySeconds) || delaySeconds < 0) {\n throw new SDKUsageError(\"Future delay must be a non-negative finite number\");\n }\n if (this.promise != null) {\n throw new SDKUsageError(`Future ${this.id} is already running`);\n }\n this.startDelaySeconds = delaySeconds;\n return this.run();\n }\n\n get delaySeconds(): number {\n return this.startDelaySeconds;\n }\n\n result(): Promise<T> {\n if (this.promise == null) this.run();\n return this.promise as Promise<T>;\n }\n\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n ): PromiseLike<TResult1 | TResult2> {\n return this.result().then(onfulfilled, onrejected);\n }\n\n static wait<T>(futures: FunctionFuture<T>[], options: WaitOptions = {}): Promise<WaitResult<T>> {\n const completion = FunctionFuture.waitForFutures(futures, options);\n // Returning the runtime wrapper lets strict replay observe when user code\n // awaits this aggregate promise. Merely creating a Future.wait remains\n // fire-and-forget and must not trigger a mismatch.\n return currentFunctionRuntime()?.wrapFutureWait?.(completion) ?? completion;\n }\n\n private static async waitForFutures<T>(\n futures: FunctionFuture<T>[],\n options: WaitOptions,\n ): Promise<WaitResult<T>> {\n const returnWhen = options.returnWhen ?? \"all_completed\";\n if (![\"all_completed\", \"first_completed\", \"first_failure\"].includes(returnWhen)) {\n throw new SDKUsageError(`Unsupported Future.wait returnWhen value '${returnWhen}'`);\n }\n if (options.timeout != null && (!Number.isFinite(options.timeout) || options.timeout < 0)) {\n throw new SDKUsageError(\"Future.wait timeout must be a non-negative finite number\");\n }\n futures.forEach((future) => {\n if (future.promise == null) future.run();\n });\n const alreadyDone = futures.filter((future) => future.done);\n if (\n alreadyDone.length > 0\n && (\n returnWhen === \"first_completed\"\n || (\n returnWhen === \"first_failure\"\n && alreadyDone.some((future) => future.failed)\n )\n )\n ) {\n return {\n done: alreadyDone,\n notDone: futures.filter((future) => !future.done),\n };\n }\n const pending = futures.filter((future) => !future.done);\n if (pending.length === 0) {\n return { done: [...futures], notDone: [] };\n }\n let wait: Promise<FutureWaitOutcome<T>>;\n if (returnWhen === \"all_completed\") {\n wait = internalPromiseAll(\n pending.map((future) => internalDurableThen(future.result(),\n () => undefined,\n () => undefined,\n )),\n ).then(() => ({ kind: \"all_completed\" }));\n } else if (returnWhen === \"first_completed\") {\n wait = internalPromiseRace(\n pending.map((future) => internalDurableThen(future.result(),\n () => ({ kind: \"cutoff\", future } as const),\n () => ({ kind: \"cutoff\", future } as const),\n )),\n );\n } else {\n wait = new Promise((resolve) => {\n let remaining = pending.length;\n for (const future of pending) {\n void internalDurableThen(\n future.result(),\n () => {\n remaining -= 1;\n if (remaining === 0) resolve({ kind: \"all_completed\" });\n },\n () => resolve({ kind: \"cutoff\", future }),\n );\n }\n });\n }\n const outcome = await waitUntilOrTimeout(wait, options.timeout);\n if (outcome.kind === \"cutoff\") {\n const completionCutoff = outcome.future.completionOrder;\n if (completionCutoff == null) {\n throw new SDKUsageError(\"Future.wait winner has no completion order\");\n }\n const doneSet = new Set(alreadyDone);\n for (const future of pending) {\n if (\n future.done\n && future.completionOrder != null\n && future.completionOrder <= completionCutoff\n ) {\n doneSet.add(future);\n }\n }\n return {\n done: futures.filter((future) => doneSet.has(future)),\n notDone: futures.filter((future) => !doneSet.has(future)),\n };\n }\n return {\n done: futures.filter((future) => future.done),\n notDone: futures.filter((future) => !future.done),\n };\n }\n}\n\ntype FutureWaitOutcome<T> =\n | { kind: \"all_completed\" }\n | { kind: \"cutoff\"; future: FunctionFuture<T> };\n\nasync function waitUntilOrTimeout<T>(\n promise: Promise<T>,\n timeoutSeconds?: number,\n): Promise<T | { kind: \"timeout\" }> {\n if (timeoutSeconds == null) {\n return promise;\n }\n let timer: NodeJS.Timeout | undefined;\n try {\n return await internalPromiseRace<T | { kind: \"timeout\" }>([\n promise,\n new Promise<{ kind: \"timeout\" }>((resolve) => {\n timer = setTimeout(() => resolve({ kind: \"timeout\" }), timeoutSeconds * 1000);\n }),\n ]);\n } finally {\n if (timer != null) clearTimeout(timer);\n }\n}\n\ntype Awaitable<T> = T | PromiseLike<T>;\ntype AwaitableIterable<T> = Iterable<Awaitable<T>> | PromiseLike<Iterable<Awaitable<T>>>;\n\nfunction isDurableThenable(value: unknown): boolean {\n if ((typeof value !== \"object\" && typeof value !== \"function\") || value == null) {\n return false;\n }\n return durableThenableRegistry().has(value);\n}\n\nexport function isDetachedDurableThenable(value: unknown): boolean {\n const provenance = provenanceForDurableThenable(value);\n return provenance?.detached === true\n || (provenance?.assimilation != null && !provenance.assimilation.active);\n}\n\nfunction durableThenableRegistry(): WeakMap<object, DurableThenableProvenance> {\n const target = globalThis as typeof globalThis & {\n [DURABLE_THENABLE_REGISTRY_KEY]?: WeakMap<object, DurableThenableProvenance>;\n };\n target[DURABLE_THENABLE_REGISTRY_KEY] ??=\n new WeakMap<object, DurableThenableProvenance>();\n return target[DURABLE_THENABLE_REGISTRY_KEY];\n}\n\nfunction newDurableThenableMetadata(): DurableThenableMetadata {\n return {\n aggregateExpectations: [],\n provenanceExpectations: [],\n };\n}\n\nfunction metadataForDurableThenable(value: unknown): DurableThenableMetadata | undefined {\n return provenanceForDurableThenable(value)?.metadata;\n}\n\nfunction provenanceForDurableThenable(\n value: unknown,\n): DurableThenableProvenance | undefined {\n if ((typeof value !== \"object\" && typeof value !== \"function\") || value == null) {\n return undefined;\n }\n return durableThenableRegistry().get(value);\n}\n\nexport function registerDurableThenable<T extends object>(\n value: T,\n source?: object,\n): T {\n const registry = durableThenableRegistry();\n const metadata = source == null\n ? registry.get(value)?.metadata ?? newDurableThenableMetadata()\n : registry.get(source)?.metadata ?? newDurableThenableMetadata();\n registry.set(value, { metadata });\n if (source != null && !registry.has(source)) registry.set(source, { metadata });\n return value;\n}\n\nfunction registerDetachedDurableThenable<T extends object>(value: T): T {\n const registry = durableThenableRegistry();\n registry.set(value, {\n metadata: registry.get(value)?.metadata ?? newDurableThenableMetadata(),\n detached: true,\n });\n return value;\n}\n\nfunction inheritDurableThenable<T extends object>(value: T, source: object): T {\n const provenance = durableThenableRegistry().get(source);\n if (provenance == null) return value;\n durableThenableRegistry().set(value, provenance);\n if (provenance.assimilation == null) {\n provenance.metadata.provenanceExpectations.push({\n value,\n creatorAsyncId: executionAsyncId(),\n });\n }\n return value;\n}\n\n/**\n * Associates a replay-aware durable assimilation with its durable provenance.\n *\n * The returned handle marks normal settlement and links derived promises to\n * this exact assimilation. Promise aggregate construction can detach the\n * aggregate's internal reaction so it is not mistaken for application code\n * awaiting the returned aggregate.\n */\nexport function registerDurableAssimilation(\n value: object,\n detach: () => void,\n): DurableAssimilation {\n const metadata = metadataForDurableThenable(value);\n if (metadata == null) {\n return {\n finish: () => undefined,\n link: (linked) => linked,\n };\n }\n const registration: DurableAssimilationRegistration = {\n active: true,\n detach,\n };\n const provenanceIndex = metadata.provenanceExpectations.findIndex((expectation) =>\n expectation.creatorAsyncId !== executionAsyncId()\n );\n if (provenanceIndex >= 0) {\n const [expectation] = metadata.provenanceExpectations.splice(provenanceIndex, 1);\n durableThenableRegistry().set(expectation.value, {\n metadata,\n assimilation: registration,\n });\n }\n const expectationIndex = metadata.aggregateExpectations.findIndex((expectation) =>\n !expectation.scope.settled\n && expectation.creatorAsyncId !== executionAsyncId()\n );\n if (expectationIndex >= 0) {\n const [expectation] = metadata.aggregateExpectations.splice(expectationIndex, 1);\n associateAssimilationWithAggregate(registration, expectation.scope);\n }\n return {\n finish: () => finishDurableAssimilation(registration),\n link: <T extends object>(linked: T): T => {\n durableThenableRegistry().set(linked, {\n metadata,\n assimilation: registration,\n });\n return linked;\n },\n };\n}\n\nfunction associateAssimilationWithAggregate(\n registration: DurableAssimilationRegistration,\n scope: DurableAggregateScope,\n): void {\n if (!registration.active || scope.settled) return;\n finishDurableAssimilation(registration);\n registration.detach();\n}\n\nfunction finishDurableAssimilation(registration: DurableAssimilationRegistration): void {\n if (!registration.active) return;\n registration.active = false;\n}\n\nfunction trackDurableAggregate(\n runtime: FunctionRuntime,\n result: Promise<unknown>,\n durableContenders: readonly unknown[],\n markResult: boolean,\n): void {\n const scope: DurableAggregateScope = {\n settled: false,\n metadata: new Set<DurableThenableMetadata>(),\n };\n if (markResult) {\n // Constructing an aggregate attaches internal reactions to its durable\n // inputs, but that does not mean application code is awaiting the result.\n // Mark the aggregate itself as detached so a later user reaction becomes\n // the durable assimilation observed by strict replay.\n registerDetachedDurableThenable(result);\n }\n const creatorAsyncId = executionAsyncId();\n for (const contender of durableContenders) {\n const provenance = provenanceForDurableThenable(contender);\n if (provenance == null) continue;\n if (provenance.assimilation != null) {\n associateAssimilationWithAggregate(provenance.assimilation, scope);\n } else {\n provenance.metadata.aggregateExpectations.push({\n scope,\n creatorAsyncId,\n });\n }\n if (scope.metadata.has(provenance.metadata)) continue;\n const { metadata } = provenance;\n scope.metadata.add(metadata);\n }\n const settle = () => {\n if (scope.settled) return;\n scope.settled = true;\n for (const metadata of scope.metadata) {\n for (let index = metadata.aggregateExpectations.length - 1; index >= 0; index -= 1) {\n if (metadata.aggregateExpectations[index].scope === scope) {\n metadata.aggregateExpectations.splice(index, 1);\n }\n }\n }\n scope.metadata.clear();\n };\n // Promise.prototype.then still performs a user-observable Symbol.species\n // lookup even when invoked directly. The executor observes the native\n // promiseResolve async hook instead, so bookkeeping cannot call user code or\n // construct an extra subclass promise.\n if (runtime.trackPromiseSettlement?.(result, settle) !== true) settle();\n}\n\ninterface PromiseAggregateObservation {\n readonly ordinaryLifetime: Promise<void>;\n allOrdinaryValuesObservable: boolean;\n observeFulfillment(): void;\n observeRejection(): void;\n finishIteration(contenderCount: number): void;\n}\n\nfunction promiseAggregateObservation(\n kind: \"all\" | \"all_settled\" | \"any\",\n): PromiseAggregateObservation {\n let settleLifetime!: () => void;\n const ordinaryLifetime = new Promise<void>((resolve) => {\n settleLifetime = resolve;\n });\n let contenderCount: number | undefined;\n let fulfillmentCount = 0;\n let rejectionCount = 0;\n let settled = false;\n const maybeSettle = () => {\n if (settled) return;\n const canNoLongerAdvance = kind === \"any\"\n ? contenderCount != null && rejectionCount === contenderCount\n : kind === \"all\"\n ? rejectionCount > 0\n || (contenderCount != null && fulfillmentCount === contenderCount)\n : contenderCount != null\n && fulfillmentCount + rejectionCount === contenderCount;\n if (!canNoLongerAdvance) return;\n settled = true;\n settleLifetime();\n };\n return {\n ordinaryLifetime,\n allOrdinaryValuesObservable: true,\n observeFulfillment: () => {\n fulfillmentCount += 1;\n maybeSettle();\n },\n observeRejection: () => {\n rejectionCount += 1;\n maybeSettle();\n },\n finishIteration: (count) => {\n contenderCount = count;\n maybeSettle();\n },\n };\n}\n\nfunction observePromiseAggregateContender(\n normalized: unknown,\n observation: PromiseAggregateObservation,\n): unknown {\n if (\n (typeof normalized !== \"object\" && typeof normalized !== \"function\")\n || normalized == null\n ) {\n observation.allOrdinaryValuesObservable = false;\n return normalized;\n }\n let observedSettled = false;\n const observed = Object.create(null) as object;\n Object.defineProperty(observed, \"then\", {\n configurable: true,\n get: () => {\n const then = Reflect.get(normalized, \"then\", normalized) as unknown;\n if (typeof then !== \"function\") return then;\n return function observedThen(\n this: unknown,\n onfulfilled: unknown,\n onrejected: unknown,\n ): unknown {\n return Reflect.apply(then, normalized, [\n function observedFulfillment(this: unknown, value: unknown): unknown {\n if (!observedSettled) {\n observedSettled = true;\n observation.observeFulfillment();\n }\n return typeof onfulfilled === \"function\"\n ? Reflect.apply(onfulfilled, this, [value])\n : undefined;\n },\n function observedRejection(this: unknown, reason: unknown): unknown {\n if (!observedSettled) {\n observedSettled = true;\n observation.observeRejection();\n }\n if (typeof onrejected === \"function\") {\n return Reflect.apply(onrejected, this, [reason]);\n }\n throw reason;\n },\n ]);\n };\n },\n });\n return observed;\n}\n\n/**\n * Lets a native Promise aggregate algorithm retain control of iteration and\n * settlement while exposing each constructor-normalized contender.\n *\n * The facade constructs the real Promise subclass and delegates its `resolve`\n * lookup and calls back to that subclass. This preserves custom static resolve\n * behavior and the public result type without resolving an input twice.\n */\nfunction observedPromiseConstructor(\n constructor: PromiseConstructor,\n observeNormalized: (normalized: unknown) => unknown,\n): PromiseConstructor {\n const facade = function PromiseAggregateObservedConstructor(\n executor: (\n resolve: (value: unknown) => void,\n reject: (reason?: unknown) => void,\n ) => void,\n ): Promise<unknown> {\n return Reflect.construct(\n constructor,\n [executor],\n constructor,\n ) as Promise<unknown>;\n } as unknown as PromiseConstructor;\n Object.defineProperty(facade, \"resolve\", {\n configurable: true,\n get: () => {\n const promiseResolve = Reflect.get(constructor, \"resolve\", constructor) as unknown;\n if (typeof promiseResolve !== \"function\") return promiseResolve;\n return (value: unknown): unknown => {\n const normalized = Reflect.apply(promiseResolve, constructor, [value]) as unknown;\n return observeNormalized(normalized);\n };\n },\n });\n return facade;\n}\n\nfunction internalDurableThen<T, TResult1 = T, TResult2 = never>(\n promise: Promise<T>,\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n): Promise<TResult1 | TResult2> {\n const internalThen = (promise as ObservableDurablePromise<T>)[DURABLE_PROMISE_INTERNAL_THEN];\n if (internalThen != null) {\n return internalThen.call(\n promise,\n onfulfilled,\n onrejected,\n ) as Promise<TResult1 | TResult2>;\n }\n return promise.then(onfulfilled, onrejected);\n}\n\nfunction internalAwaitable<T>(value: Awaitable<T>): Promise<T> {\n if ((typeof value === \"object\" || typeof value === \"function\") && value != null) {\n const internalThen = (\n value as Partial<ObservableDurablePromise<T>>\n )[DURABLE_PROMISE_INTERNAL_THEN];\n if (internalThen != null) {\n return internalThen.call(\n value,\n (resolved) => resolved,\n (error) => {\n throw error;\n },\n ) as Promise<T>;\n }\n }\n return Promise.resolve(value);\n}\n\nasync function resolveAwaitableIterable<T>(\n items: AwaitableIterable<T>,\n): Promise<T[]> {\n const iterable = await internalAwaitable(items);\n return internalPromiseAll([...iterable].map((item) => internalAwaitable(item)));\n}\n\nfunction wrapDurableAggregate<T>(completion: Promise<T>): Promise<T> {\n return currentFunctionRuntime()?.wrapFutureWait?.(completion) ?? completion;\n}\n\nfunction runInternalPromiseAggregate<T>(callback: () => T): T {\n const target = globalThis as typeof globalThis & {\n [INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY]?: number;\n };\n target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] =\n (target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] ?? 0) + 1;\n try {\n return callback();\n } finally {\n const remaining = (target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] ?? 1) - 1;\n if (remaining === 0) delete target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY];\n else target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] = remaining;\n }\n}\n\nfunction isInternalPromiseAggregate(): boolean {\n const target = globalThis as typeof globalThis & {\n [INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY]?: number;\n };\n return (target[INTERNAL_PROMISE_AGGREGATE_DEPTH_KEY] ?? 0) > 0;\n}\n\nfunction internalPromiseAll<T>(\n values: Iterable<T | PromiseLike<T>>,\n): Promise<Awaited<T>[]> {\n return runInternalPromiseAggregate(() => Promise.all(values));\n}\n\nfunction internalPromiseRace<T>(\n values: Iterable<T | PromiseLike<T>>,\n): Promise<Awaited<T>> {\n return runInternalPromiseAggregate(() => Promise.race(values));\n}\n\nexport function installPromiseInstrumentation(): void {\n const target = globalThis as typeof globalThis & {\n [PROMISE_INSTRUMENTED_KEY]?: true;\n [PROMISE_THEN_INSTRUMENTED_KEY]?: true;\n };\n if (target[PROMISE_THEN_INSTRUMENTED_KEY] !== true) {\n const originalThen = Promise.prototype.then;\n Object.defineProperty(Promise.prototype, \"then\", {\n ...Object.getOwnPropertyDescriptor(Promise.prototype, \"then\"),\n value: function then(\n this: Promise<unknown>,\n onfulfilled?: ((value: unknown) => unknown) | null,\n onrejected?: ((reason: unknown) => unknown) | null,\n ): Promise<unknown> {\n const result = Reflect.apply(\n originalThen,\n this,\n [onfulfilled, onrejected],\n ) as Promise<unknown>;\n if (isDetachedDurableThenable(this)) {\n currentFunctionRuntime()?.trackDurablePromiseConsumption?.(result);\n }\n return result;\n },\n });\n target[PROMISE_THEN_INSTRUMENTED_KEY] = true;\n }\n if (target[PROMISE_INSTRUMENTED_KEY] === true) return;\n const originalRace = Promise.race;\n const originalAny = Promise.any;\n const originalAll = Promise.all;\n const originalAllSettled = Promise.allSettled;\n const originalResolve = Promise.resolve;\n\n // Promise.resolve normally hides a durable Promise subclass inside a native\n // Promise. Preserve the durable provenance on that wrapper so a subsequent\n // all/allSettled/race/any can still distinguish it from an independent\n // contender.\n Object.defineProperty(Promise, \"resolve\", {\n ...Object.getOwnPropertyDescriptor(Promise, \"resolve\"),\n value: function resolve<T>(\n this: PromiseConstructor,\n value: T | PromiseLike<T>,\n ): Promise<Awaited<T>> {\n const result = Reflect.apply(originalResolve, this, [value]) as Promise<Awaited<T>>;\n if (isDurableThenable(value)) inheritDurableThenable(result, value as object);\n return result;\n },\n });\n\n Object.defineProperty(Promise, \"race\", {\n ...Object.getOwnPropertyDescriptor(Promise, \"race\"),\n value: function race<T>(\n this: PromiseConstructor,\n values: Iterable<T | PromiseLike<T>>,\n ): Promise<Awaited<T>> {\n const runtime = currentFunctionRuntime();\n if (runtime?.trackMixedPromiseRace == null) {\n return Reflect.apply(originalRace, this, [values]) as Promise<Awaited<T>>;\n }\n const durableContenders: unknown[] = [];\n let ordinaryContenderCount = 0;\n const trackedValues = {\n *[Symbol.iterator](): Iterator<T | PromiseLike<T>> {\n for (const value of values) {\n yield value;\n }\n },\n };\n const observedConstructor = observedPromiseConstructor(\n this,\n (normalized) => {\n if (isDurableThenable(normalized)) {\n durableContenders.push(normalized);\n } else {\n ordinaryContenderCount += 1;\n }\n return normalized;\n },\n );\n const construct = () =>\n Reflect.apply(\n originalRace,\n observedConstructor,\n [trackedValues],\n ) as Promise<Awaited<T>>;\n const result = runtime.runPromiseAggregateConstruction?.(construct) ?? construct();\n if (durableContenders.length > 0) {\n trackDurableAggregate(\n runtime,\n result,\n durableContenders,\n !isInternalPromiseAggregate(),\n );\n }\n if (\n durableContenders.length > 0\n && ordinaryContenderCount > 0\n ) {\n runtime.trackMixedPromiseRace(result);\n }\n return result;\n },\n });\n\n Object.defineProperty(Promise, \"any\", {\n ...Object.getOwnPropertyDescriptor(Promise, \"any\"),\n value: function any<T>(\n this: PromiseConstructor,\n values: Iterable<T | PromiseLike<T>>,\n ): Promise<Awaited<T>> {\n const runtime = currentFunctionRuntime();\n if (runtime?.trackMixedPromiseRace == null) {\n return Reflect.apply(originalAny, this, [values]) as Promise<Awaited<T>>;\n }\n const durableContenders: unknown[] = [];\n let ordinaryContenderCount = 0;\n const observation = promiseAggregateObservation(\"any\");\n const trackedValues = {\n *[Symbol.iterator](): Iterator<T | PromiseLike<T>> {\n for (const value of values) {\n yield value;\n }\n },\n };\n const observedConstructor = observedPromiseConstructor(\n this,\n (normalized) => {\n if (isDurableThenable(normalized)) {\n durableContenders.push(normalized);\n return normalized;\n }\n ordinaryContenderCount += 1;\n return observePromiseAggregateContender(normalized, observation);\n },\n );\n const construct = () =>\n Reflect.apply(\n originalAny,\n observedConstructor,\n [trackedValues],\n ) as Promise<Awaited<T>>;\n const result = runtime.runPromiseAggregateConstruction?.(construct) ?? construct();\n observation.finishIteration(ordinaryContenderCount);\n if (durableContenders.length > 0) {\n trackDurableAggregate(\n runtime,\n result,\n durableContenders,\n !isInternalPromiseAggregate(),\n );\n }\n if (durableContenders.length > 0 && ordinaryContenderCount > 0) {\n if (\n observation.allOrdinaryValuesObservable\n ) {\n // Once every ordinary contender rejects, only a durable contender\n // can advance Promise.any. A fulfillment may itself be a pending\n // promise that the public aggregate adopts, so the ordinary gate\n // must not expire merely because its fulfillment callback ran.\n // Stop treating the ordinary path as a producer when either it or\n // the public aggregate settles. The latter covers a durable winner\n // as well as fulfilled-value adoption and abrupt iterator failures.\n runtime.trackMixedPromiseRace(result, [observation.ordinaryLifetime, result]);\n } else {\n // A non-object custom resolve result makes native Promise.any reject\n // the aggregate. Retain that aggregate as the producer until the\n // rejection becomes observable.\n runtime.trackMixedPromiseRace(result);\n }\n }\n return result;\n },\n });\n\n Object.defineProperty(Promise, \"all\", {\n ...Object.getOwnPropertyDescriptor(Promise, \"all\"),\n value: function all<T>(\n this: PromiseConstructor,\n values: Iterable<T | PromiseLike<T>>,\n ): Promise<Awaited<T>[]> {\n const runtime = currentFunctionRuntime();\n if (runtime?.trackMixedPromiseRace == null) {\n return Reflect.apply(originalAll, this, [values]) as Promise<Awaited<T>[]>;\n }\n const durableContenders: unknown[] = [];\n let ordinaryContenderCount = 0;\n const observation = promiseAggregateObservation(\"all\");\n const trackedValues = {\n *[Symbol.iterator](): Iterator<T | PromiseLike<T>> {\n for (const value of values) {\n yield value;\n }\n },\n };\n const observedConstructor = observedPromiseConstructor(\n this,\n (normalized) => {\n if (isDurableThenable(normalized)) {\n durableContenders.push(normalized);\n return normalized;\n }\n ordinaryContenderCount += 1;\n return observePromiseAggregateContender(normalized, observation);\n },\n );\n const construct = () =>\n Reflect.apply(\n originalAll,\n observedConstructor,\n [trackedValues],\n ) as Promise<Awaited<T>[]>;\n const result = runtime.runPromiseAggregateConstruction?.(construct) ?? construct();\n observation.finishIteration(ordinaryContenderCount);\n if (durableContenders.length > 0) {\n trackDurableAggregate(\n runtime,\n result,\n durableContenders,\n !isInternalPromiseAggregate(),\n );\n }\n if (durableContenders.length > 0 && ordinaryContenderCount > 0) {\n if (\n observation.allOrdinaryValuesObservable\n ) {\n // Ordinary inputs can advance Promise.all until one rejects or all\n // fulfill. The non-rejecting lifetime gate models that boundary\n // without observing the public result or invoking a thenable twice.\n runtime.trackMixedPromiseRace(result, [observation.ordinaryLifetime, result]);\n } else {\n // A custom resolve result that is not thenable makes the public\n // aggregate reject. Its own settlement is the only observable\n // producer boundary available.\n runtime.trackMixedPromiseRace(result);\n }\n }\n return result;\n },\n });\n\n Object.defineProperty(Promise, \"allSettled\", {\n ...Object.getOwnPropertyDescriptor(Promise, \"allSettled\"),\n value: function allSettled<T>(\n this: PromiseConstructor,\n values: Iterable<T | PromiseLike<T>>,\n ): Promise<PromiseSettledResult<Awaited<T>>[]> {\n const runtime = currentFunctionRuntime();\n if (runtime?.trackMixedPromiseRace == null) {\n return Reflect.apply(\n originalAllSettled,\n this,\n [values],\n ) as Promise<PromiseSettledResult<Awaited<T>>[]>;\n }\n const durableContenders: unknown[] = [];\n let ordinaryContenderCount = 0;\n const observation = promiseAggregateObservation(\"all_settled\");\n const trackedValues = {\n *[Symbol.iterator](): Iterator<T | PromiseLike<T>> {\n for (const value of values) yield value;\n },\n };\n const observedConstructor = observedPromiseConstructor(\n this,\n (normalized) => {\n if (isDurableThenable(normalized)) {\n durableContenders.push(normalized);\n return normalized;\n }\n ordinaryContenderCount += 1;\n return observePromiseAggregateContender(normalized, observation);\n },\n );\n const construct = () =>\n Reflect.apply(\n originalAllSettled,\n observedConstructor,\n [trackedValues],\n ) as Promise<PromiseSettledResult<Awaited<T>>[]>;\n const result = runtime.runPromiseAggregateConstruction?.(construct) ?? construct();\n observation.finishIteration(ordinaryContenderCount);\n if (durableContenders.length > 0) {\n trackDurableAggregate(\n runtime,\n result,\n durableContenders,\n !isInternalPromiseAggregate(),\n );\n }\n if (durableContenders.length > 0 && ordinaryContenderCount > 0) {\n if (observation.allOrdinaryValuesObservable) {\n // Ordinary inputs can advance Promise.allSettled until every one has\n // settled. The aggregate itself covers abrupt iterator/resolve\n // failures and durable completion.\n runtime.trackMixedPromiseRace(result, [observation.ordinaryLifetime, result]);\n } else {\n runtime.trackMixedPromiseRace(result);\n }\n }\n return result;\n },\n });\n target[PROMISE_INSTRUMENTED_KEY] = true;\n}\n\nexport interface RegisteredFunction<Args extends readonly unknown[], Result> {\n (...args: Args): Promise<Result>;\n readonly definition: RegisteredDefinition;\n future(...args: Args): FunctionFuture<Result>;\n map(items: AwaitableIterable<Args[0]>): Promise<Result[]>;\n reduce(\n items: AwaitableIterable<Args[1]>,\n initial?: Args[0],\n ): Promise<Result>;\n tailCall(...args: Args): TailCall<Result>;\n}\n\nfunction normalizeOptions(options: FunctionOptions<readonly Parameter<unknown>[], unknown>): NormalizedFunctionOptions {\n validateGPUOption(options.gpu);\n if (options.secrets != null && !Array.isArray(options.secrets)) {\n throw new SDKUsageError(\"secrets must be an array of non-empty strings\");\n }\n const normalizedRetries = options.retries == null\n ? undefined\n : retries(options.retries);\n const result: NormalizedFunctionOptions = {\n description: options.description ?? \"\",\n cpu: options.cpu ?? 1,\n memory: options.memory ?? 1,\n ephemeralDisk: options.ephemeralDisk ?? 10,\n gpu: Array.isArray(options.gpu) ? [...options.gpu] : options.gpu ?? null,\n timeout: options.timeout ?? 300,\n image: options.image,\n secrets: [...(options.secrets ?? [])],\n retries: normalizedRetries,\n region: options.region,\n warmContainers: options.warmContainers,\n minContainers: options.minContainers,\n maxContainers: options.maxContainers,\n };\n if (!Number.isFinite(result.cpu) || result.cpu <= 0) throw new SDKUsageError(\"cpu must be greater than zero\");\n if (!Number.isFinite(result.memory) || result.memory <= 0) throw new SDKUsageError(\"memory must be greater than zero\");\n if (!Number.isFinite(result.ephemeralDisk) || result.ephemeralDisk <= 0) throw new SDKUsageError(\"ephemeralDisk must be greater than zero\");\n if (!Number.isInteger(result.timeout) || result.timeout <= 0 || result.timeout > 86_400) {\n throw new SDKUsageError(\"timeout must be an integer between 1 and 86400 seconds\");\n }\n for (const [label, value] of [\n [\"warmContainers\", result.warmContainers],\n [\"minContainers\", result.minContainers],\n [\"maxContainers\", result.maxContainers],\n ] as const) {\n if (value != null && (!Number.isInteger(value) || value < 0)) {\n throw new SDKUsageError(`${label} must be a non-negative integer`);\n }\n }\n if (result.minContainers != null && result.maxContainers != null && result.minContainers > result.maxContainers) {\n throw new SDKUsageError(\"minContainers cannot exceed maxContainers\");\n }\n if (result.warmContainers != null && result.maxContainers != null && result.warmContainers > result.maxContainers) {\n throw new SDKUsageError(\"warmContainers cannot exceed maxContainers\");\n }\n if (result.region != null && ![\"us-east-1\", \"eu-west-1\"].includes(result.region)) {\n throw new SDKUsageError(`Unsupported region '${result.region}'`);\n }\n if (result.secrets.some((secret) => typeof secret !== \"string\" || secret.length === 0)) {\n throw new SDKUsageError(\"secrets must contain non-empty strings\");\n }\n return result;\n}\n\nfunction validateGPUOption(value: unknown): void {\n if (value == null) return;\n const values = Array.isArray(value) ? value : [value];\n for (const setting of values) {\n if (typeof setting !== \"string\") {\n throw new SDKUsageError(\"gpu must be a GPU model or an array of GPU models\");\n }\n const [model, countText, ...extra] = setting.split(\":\");\n const count = countText == null ? 1 : Number(countText);\n if (\n !model\n || extra.length > 0\n || !Number.isInteger(count)\n || count <= 0\n || (countText != null && String(count) !== countText)\n ) {\n throw new SDKUsageError(`Invalid GPU setting '${setting}'`);\n }\n }\n}\n\nfunction validateArguments(definition: RegisteredDefinition, supplied: readonly unknown[]): unknown[] {\n const args = [...supplied];\n if (args.length > definition.parameters.length) {\n throw new SDKUsageError(`${definition.name} expected at most ${definition.parameters.length} arguments, received ${args.length}`);\n }\n definition.parameters.forEach((parameter, index) => {\n if (index >= args.length || args[index] === undefined) {\n if (parameter.hasDefault) args[index] = parameter.defaultValue;\n else if (parameter.required) throw new SDKUsageError(`${definition.name} is missing argument '${parameter.name}'`);\n return;\n }\n validateWithSchema(parameter.schema, args[index], `${definition.name}.${parameter.name}`);\n });\n return args;\n}\n\nexport async function executeHandler<T>(\n definition: RegisteredDefinition,\n suppliedArgs: readonly unknown[],\n): Promise<T> {\n const output = await executeHandlerResult<T>(definition, suppliedArgs);\n if (isTailCall(output)) {\n const runtime = currentFunctionRuntime();\n if (runtime == null) return executeHandler<T>(output.definition, output.args);\n return runtime.invoke<T>(output.definition, output.args);\n }\n return output;\n}\n\n/** Runs one handler frame without resolving a tail call. Used by language executors. */\nexport async function executeHandlerResult<T>(\n definition: RegisteredDefinition,\n suppliedArgs: readonly unknown[],\n): Promise<T | TailCall<T>> {\n const args = validateArguments(definition, suppliedArgs);\n const result = definition.handler(...args);\n if (result == null || typeof (result as PromiseLike<unknown>).then !== \"function\") {\n throw new SDKUsageError(`Tensorlake handler '${definition.name}' must be async and return a Promise`);\n }\n const output = await result;\n if (isTailCall(output)) {\n return output as TailCall<T>;\n }\n validateWithSchema(definition.returns, output, `${definition.name} return value`);\n return output as T;\n}\n\nexport function isTailCall(value: unknown): value is TailCall<unknown> {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Partial<TailCall<unknown>>;\n return candidate[TAIL_CALL_BRAND] === true\n && candidate.kind === \"tensorlake-tail-call\"\n && typeof candidate.definition === \"object\"\n && candidate.definition != null\n && Array.isArray(candidate.args);\n}\n\nfunction createRegisteredFunction<Args extends readonly unknown[], Result>(\n definition: RegisteredDefinition,\n): RegisteredFunction<Args, Result> {\n const callable = ((...args: Args): Promise<Result> => {\n const runtime = currentFunctionRuntime();\n return runtime == null\n ? executeHandler<Result>(definition, args)\n : runtime.invoke<Result>(definition, args);\n }) as RegisteredFunction<Args, Result>;\n Object.defineProperties(callable, {\n definition: { value: definition, enumerable: true },\n future: { value: (...args: Args) => new FunctionFuture<Result>(definition, args) },\n map: {\n value: (items: AwaitableIterable<Args[0]>) => {\n // Resolve inputs before assigning durable IDs. Awaiting each input inside\n // the invocation loop would make call order depend on promise timing,\n // allowing strict replay to associate a recorded result with a different\n // input while still matching the durable event sequence.\n const completion = (async () => {\n const resolvedItems = await resolveAwaitableIterable(items);\n return internalPromiseAll(\n resolvedItems.map((item) =>\n internalAwaitable(callable(...([item] as unknown as Args)))\n ),\n );\n })();\n return wrapDurableAggregate(completion);\n },\n },\n reduce: {\n value: (\n items: AwaitableIterable<Args[1]>,\n ...initialValues: [] | [Args[0]]\n ) => {\n const completion = (async () => {\n let values = await resolveAwaitableIterable(items);\n const hasInitial = initialValues.length > 0;\n let initial: unknown = initialValues[0];\n const runtime = currentFunctionRuntime();\n if (runtime != null) {\n return internalAwaitable(\n runtime.reduce<Result>(definition, values, initial, hasInitial),\n );\n }\n if (!hasInitial) {\n if (values.length === 0) {\n throw new SDKUsageError(\"reduce of empty iterable with no initial value\");\n }\n [initial, ...values] = values;\n }\n let accumulator = initial as Result | Args[0];\n for (const item of values) {\n accumulator = await internalAwaitable(\n callable(...([accumulator, item] as unknown as Args)),\n );\n }\n return accumulator as Result;\n })();\n return wrapDurableAggregate(completion);\n },\n },\n tailCall: {\n value: (...args: Args): TailCall<Result> => ({\n [TAIL_CALL_BRAND]: true,\n kind: \"tensorlake-tail-call\",\n definition,\n args,\n }),\n },\n });\n return callable;\n}\n\nfunction register<\n const P extends readonly Parameter<unknown>[],\n Result,\n>(\n handler: (...args: ParameterValues<P>) => Promise<Result | TailCall<Result>>,\n options: FunctionOptions<P, Result> | ApplicationOptions<P, Result>,\n application: boolean,\n): RegisteredFunction<ParameterValues<P>, Result> {\n const name = options.name ?? handler.name;\n if (!name) throw new SDKUsageError(\"Anonymous Tensorlake handlers require an explicit name\");\n if (!/^[A-Za-z_$][\\w$]*$/.test(name)) throw new SDKUsageError(`Invalid Tensorlake function name '${name}'`);\n let applicationRetries: Retries | undefined;\n if (application) {\n const appOptions = options as ApplicationOptions<P, Result>;\n applicationRetries = retries(appOptions.applicationRetries ?? { maxRetries: 0 });\n if (\n appOptions.allow != null\n && (\n !Array.isArray(appOptions.allow)\n || appOptions.allow.some((capability) =>\n capability !== \"unauthenticated_requests\"\n )\n )\n ) {\n throw new SDKUsageError(\n \"Application allow must contain only 'unauthenticated_requests'\",\n );\n }\n const tags = appOptions.tags;\n const tagsPrototype = tags == null || typeof tags !== \"object\"\n ? undefined\n : Object.getPrototypeOf(tags);\n if (\n tags != null\n && (\n typeof tags !== \"object\"\n || Array.isArray(tags)\n || (tagsPrototype !== Object.prototype && tagsPrototype !== null)\n || Reflect.ownKeys(tags).some((key) =>\n typeof key !== \"string\"\n || !key\n || typeof (tags as Record<PropertyKey, unknown>)[key] !== \"string\"\n )\n )\n ) {\n throw new SDKUsageError(\"Application tags require non-empty string keys and string values\");\n }\n }\n if (!Array.isArray(options.parameters)) {\n throw new SDKUsageError(\"Tensorlake registration parameters must be an array\");\n }\n if (\n typeof options.returns !== \"object\"\n || options.returns == null\n || typeof options.returns.jsonSchema !== \"object\"\n || options.returns.jsonSchema == null\n ) {\n throw new SDKUsageError(\"Tensorlake registration returns must be a schema\");\n }\n const parameterNames = new Set<string>();\n for (const parameter of options.parameters) {\n if (\n typeof parameter !== \"object\"\n || parameter == null\n || typeof parameter.name !== \"string\"\n || typeof parameter.schema !== \"object\"\n || parameter.schema == null\n || typeof parameter.schema.jsonSchema !== \"object\"\n || parameter.schema.jsonSchema == null\n || typeof parameter.required !== \"boolean\"\n || typeof parameter.hasDefault !== \"boolean\"\n ) {\n throw new SDKUsageError(\n \"Tensorlake registration parameters must be created with schema.parameter()\",\n );\n }\n if (parameterNames.has(parameter.name)) {\n throw new SDKUsageError(`Duplicate Tensorlake parameter name '${parameter.name}'`);\n }\n parameterNames.add(parameter.name);\n }\n const httpBodyParameter = options.parameters.find(\n (parameter) => parameter.schema._httpBody,\n );\n if (httpBodyParameter != null && !application) {\n throw new SDKUsageError(\n \"HttpBody is only supported for application parameters\",\n );\n }\n if (options.returns._httpBody) {\n throw new SDKUsageError(\n \"HttpBody is only supported for application parameters; \"\n + \"use schema.file() or a JSON-compatible return schema instead\",\n );\n }\n const definition: RegisteredDefinition = {\n name,\n handler: handler as (...args: unknown[]) => Promise<unknown>,\n parameters: [...options.parameters],\n returns: options.returns as Schema<unknown>,\n options: normalizeOptions(options as FunctionOptions<readonly Parameter<unknown>[], unknown>),\n application: application\n ? {\n tags: { ...((options as ApplicationOptions<P, Result>).tags ?? {}) },\n retries: applicationRetries as Retries,\n allow: [...((options as ApplicationOptions<P, Result>).allow ?? [])],\n version: randomUUID().replaceAll(\"-\", \"\"),\n }\n : undefined,\n };\n registerDefinition(definition, application);\n return createRegisteredFunction(definition);\n}\n\ntype SimpleResult<Output> = Output extends TailCall<infer Result> ? Result : Output;\ntype RuntimeHandler = (...args: never[]) => Promise<unknown>;\n\nfunction hasExplicitSchemas(\n value: unknown,\n): value is FunctionOptions<readonly Parameter<unknown>[], unknown> {\n if (typeof value !== \"object\" || value == null) return false;\n const hasParameters = Object.prototype.hasOwnProperty.call(value, \"parameters\");\n const hasReturns = Object.prototype.hasOwnProperty.call(value, \"returns\");\n if (hasParameters !== hasReturns) {\n throw new SDKUsageError(\"Tensorlake registrations must specify both parameters and returns\");\n }\n return hasParameters;\n}\n\nfunction skipJavaScriptLiteral(source: string, start: number): number {\n const quote = source[start];\n let escaped = false;\n for (let index = start + 1; index < source.length; index += 1) {\n const character = source[index];\n if (escaped) {\n escaped = false;\n } else if (character === \"\\\\\") {\n escaped = true;\n } else if (character === quote) {\n return index;\n }\n }\n return source.length - 1;\n}\n\nfunction skipJavaScriptComment(source: string, start: number): number | undefined {\n if (source[start] !== \"/\") return undefined;\n if (source[start + 1] === \"/\") {\n const newline = source.indexOf(\"\\n\", start + 2);\n return newline < 0 ? source.length - 1 : newline;\n }\n if (source[start + 1] === \"*\") {\n const end = source.indexOf(\"*/\", start + 2);\n return end < 0 ? source.length - 1 : end + 1;\n }\n return undefined;\n}\n\nfunction skipJavaScriptTrivia(source: string, start: number): number {\n let index = start;\n while (index < source.length) {\n while (index < source.length && /\\s/.test(source[index])) index += 1;\n const commentEnd = skipJavaScriptComment(source, index);\n if (commentEnd == null) break;\n index = commentEnd + 1;\n }\n return index;\n}\n\nconst REGEX_PREFIX_KEYWORDS = new Set([\n \"await\",\n \"case\",\n \"delete\",\n \"in\",\n \"instanceof\",\n \"new\",\n \"return\",\n \"throw\",\n \"typeof\",\n \"void\",\n \"yield\",\n]);\n\nfunction regexLiteralStartsAt(source: string, start: number): boolean {\n let expectsExpression = true;\n for (let index = 0; index < start; index += 1) {\n const character = source[index];\n if (/\\s/.test(character)) continue;\n if (character === \"\\\"\" || character === \"'\" || character === \"`\") {\n index = skipJavaScriptLiteral(source, index);\n expectsExpression = false;\n continue;\n }\n const commentEnd = skipJavaScriptComment(source, index);\n if (commentEnd != null) {\n index = commentEnd;\n continue;\n }\n if (/[A-Za-z_$]/.test(character)) {\n let tokenEnd = index + 1;\n while (tokenEnd < start && /[A-Za-z0-9_$]/.test(source[tokenEnd])) tokenEnd += 1;\n expectsExpression = REGEX_PREFIX_KEYWORDS.has(source.slice(index, tokenEnd));\n index = tokenEnd - 1;\n continue;\n }\n if (/[0-9]/.test(character) || (character === \".\" && /[0-9]/.test(source[index + 1]))) {\n while (index + 1 < start && /[A-Za-z0-9_.]/.test(source[index + 1])) index += 1;\n expectsExpression = false;\n continue;\n }\n if (character === \"/\") {\n if (expectsExpression) {\n index = skipJavaScriptRegex(source, index);\n expectsExpression = false;\n } else {\n if (source[index + 1] === \"=\") index += 1;\n expectsExpression = true;\n }\n continue;\n }\n if (character === \")\" || character === \"]\" || character === \"}\") {\n expectsExpression = false;\n continue;\n }\n if (character === \".\") {\n if (source.slice(index, index + 3) === \"...\") {\n index += 2;\n expectsExpression = true;\n } else {\n expectsExpression = false;\n }\n continue;\n }\n if ((character === \"+\" || character === \"-\") && source[index + 1] === character) {\n index += 1;\n continue;\n }\n expectsExpression = true;\n }\n return expectsExpression;\n}\n\nfunction skipJavaScriptRegex(source: string, start: number): number {\n let escaped = false;\n let characterClass = false;\n for (let index = start + 1; index < source.length; index += 1) {\n const character = source[index];\n if (escaped) {\n escaped = false;\n } else if (character === \"\\\\\") {\n escaped = true;\n } else if (character === \"[\") {\n characterClass = true;\n } else if (character === \"]\") {\n characterClass = false;\n } else if (character === \"/\" && !characterClass) {\n while (index + 1 < source.length && /[A-Za-z]/.test(source[index + 1])) index += 1;\n return index;\n }\n }\n return source.length - 1;\n}\n\nfunction skipJavaScriptValue(source: string, index: number): number | undefined {\n const character = source[index];\n if (character === \"\\\"\" || character === \"'\" || character === \"`\") {\n return skipJavaScriptLiteral(source, index);\n }\n const commentEnd = skipJavaScriptComment(source, index);\n if (commentEnd != null) return commentEnd;\n if (character === \"/\" && regexLiteralStartsAt(source, index)) {\n return skipJavaScriptRegex(source, index);\n }\n return undefined;\n}\n\nfunction findTopLevelArrow(source: string): number {\n let parentheses = 0;\n let brackets = 0;\n let braces = 0;\n for (let index = 0; index < source.length - 1; index += 1) {\n const character = source[index];\n const valueEnd = skipJavaScriptValue(source, index);\n if (valueEnd != null) {\n index = valueEnd;\n continue;\n }\n if (character === \"(\") parentheses += 1;\n else if (character === \")\") parentheses -= 1;\n else if (character === \"[\") brackets += 1;\n else if (character === \"]\") brackets -= 1;\n else if (character === \"{\") {\n // A top-level block before an arrow is a classic function or method\n // body. Its nested arrows cannot describe the handler parameters.\n if (parentheses === 0 && brackets === 0 && braces === 0) return -1;\n braces += 1;\n }\n else if (character === \"}\") braces -= 1;\n else if (character === \"=\" && source[index + 1] === \">\" && parentheses === 0 && brackets === 0 && braces === 0) {\n return index;\n }\n }\n return -1;\n}\n\nfunction findClosingParenthesis(source: string, open: number): number {\n let depth = 0;\n for (let index = open; index < source.length; index += 1) {\n const character = source[index];\n const valueEnd = skipJavaScriptValue(source, index);\n if (valueEnd != null) {\n index = valueEnd;\n continue;\n }\n if (character === \"(\") depth += 1;\n else if (character === \")\" && --depth === 0) return index;\n }\n return -1;\n}\n\nfunction findOpeningParenthesis(source: string): number {\n for (let index = 0; index < source.length; index += 1) {\n const valueEnd = skipJavaScriptValue(source, index);\n if (valueEnd != null) {\n index = valueEnd;\n continue;\n }\n if (source[index] === \"(\") return index;\n }\n return -1;\n}\n\nfunction splitTopLevelParameters(source: string): string[] {\n if (source.trim() === \"\") return [];\n const result: string[] = [];\n let start = 0;\n let parentheses = 0;\n let brackets = 0;\n let braces = 0;\n for (let index = 0; index < source.length; index += 1) {\n const character = source[index];\n const valueEnd = skipJavaScriptValue(source, index);\n if (valueEnd != null) {\n index = valueEnd;\n continue;\n }\n if (character === \"(\") parentheses += 1;\n else if (character === \")\") parentheses -= 1;\n else if (character === \"[\") brackets += 1;\n else if (character === \"]\") brackets -= 1;\n else if (character === \"{\") braces += 1;\n else if (character === \"}\") braces -= 1;\n else if (character === \",\" && parentheses === 0 && brackets === 0 && braces === 0) {\n result.push(source.slice(start, index).trim());\n start = index + 1;\n }\n }\n const final = source.slice(start).trim();\n if (final !== \"\") result.push(final);\n return result;\n}\n\nfunction hasTopLevelDefault(source: string): boolean {\n let parentheses = 0;\n let brackets = 0;\n let braces = 0;\n for (let index = 0; index < source.length; index += 1) {\n const character = source[index];\n const valueEnd = skipJavaScriptValue(source, index);\n if (valueEnd != null) {\n index = valueEnd;\n continue;\n }\n if (character === \"(\") parentheses += 1;\n else if (character === \")\") parentheses -= 1;\n else if (character === \"[\") brackets += 1;\n else if (character === \"]\") brackets -= 1;\n else if (character === \"{\") braces += 1;\n else if (character === \"}\") braces -= 1;\n else if (character === \"=\" && parentheses === 0 && brackets === 0 && braces === 0) return true;\n }\n return false;\n}\n\nfunction declaredHandlerParameters(handler: RuntimeHandler): string[] {\n const source = Function.prototype.toString.call(handler).trim();\n if (source.includes(\"[native code]\")) {\n throw new SDKUsageError(\"Schema-free registration cannot inspect a native or bound handler; specify parameters and returns\");\n }\n const arrow = findTopLevelArrow(source);\n if (arrow >= 0) {\n let header = source.slice(0, arrow).trim();\n if (\n header.startsWith(\"async\")\n && !/[A-Za-z0-9_$]/.test(header[\"async\".length] ?? \"\")\n ) {\n header = header.slice(skipJavaScriptTrivia(header, \"async\".length));\n }\n if (!header.startsWith(\"(\")) return [header];\n const close = findClosingParenthesis(header, 0);\n if (close < 0) throw new SDKUsageError(\"Schema-free registration could not inspect handler parameters\");\n return splitTopLevelParameters(header.slice(1, close));\n }\n const open = findOpeningParenthesis(source);\n const close = open < 0 ? -1 : findClosingParenthesis(source, open);\n if (open < 0 || close < 0) {\n throw new SDKUsageError(\"Schema-free registration could not inspect handler parameters\");\n }\n return splitTopLevelParameters(source.slice(open + 1, close));\n}\n\nfunction inferredJSONParameters(handler: RuntimeHandler): readonly Parameter<unknown>[] {\n const parameters = declaredHandlerParameters(handler);\n if (parameters.some((parameter) => {\n let index = 0;\n while (index < parameter.length) {\n while (index < parameter.length && /\\s/.test(parameter[index])) index += 1;\n const commentEnd = skipJavaScriptComment(parameter, index);\n if (commentEnd == null) break;\n index = commentEnd + 1;\n }\n return parameter.slice(index).startsWith(\"...\");\n })) {\n throw new SDKUsageError(\n \"Schema-free registration does not support rest parameters; specify explicit parameters and returns\",\n );\n }\n return parameters.map((parameter, index) => schema.parameter(\n parameters.length === 1 ? \"input\" : `arg${index}`,\n schema.json(),\n hasTopLevelDefault(parameter) ? { optional: true } : {},\n ));\n}\n\nfunction registerWithDefaults(\n name: string,\n handler: RuntimeHandler,\n options: SimpleFunctionOptions | SimpleApplicationOptions,\n application: boolean,\n): RegisteredFunction<readonly unknown[], unknown> {\n return register(\n handler as (...args: readonly unknown[]) => Promise<unknown>,\n {\n ...options,\n name,\n parameters: inferredJSONParameters(handler),\n returns: schema.json(),\n },\n application,\n );\n}\n\nexport function registerFunction<\n const P extends readonly Parameter<unknown>[],\n Result,\n>(\n handler: (...args: ParameterValues<P>) => Promise<Result | TailCall<Result>>,\n options: FunctionOptions<P, Result>,\n): RegisteredFunction<ParameterValues<P>, Result>;\n\nexport function registerFunction<\n const Args extends readonly unknown[],\n Output,\n>(\n name: string,\n handler: (...args: Args) => Promise<Output>,\n options?: SimpleFunctionOptions,\n): RegisteredFunction<Args, SimpleResult<Output>>;\nexport function registerFunction(\n handlerOrName: unknown,\n handlerOrOptions?: unknown,\n options: SimpleFunctionOptions = {},\n): RegisteredFunction<readonly unknown[], unknown> {\n if (typeof handlerOrName === \"string\") {\n if (typeof handlerOrOptions !== \"function\") {\n throw new SDKUsageError(\"registerFunction(name, handler) requires an async handler\");\n }\n return registerWithDefaults(\n handlerOrName,\n handlerOrOptions as RuntimeHandler,\n options,\n false,\n );\n }\n if (typeof handlerOrName !== \"function\") {\n throw new SDKUsageError(\"registerFunction requires an async handler\");\n }\n const handler = handlerOrName as RuntimeHandler;\n if (typeof handlerOrOptions === \"function\") {\n throw new SDKUsageError(\"registerFunction received an unexpected second handler\");\n }\n if (hasExplicitSchemas(handlerOrOptions)) {\n return register(\n handler as (...args: readonly unknown[]) => Promise<unknown>,\n handlerOrOptions,\n false,\n );\n }\n throw new SDKUsageError(\n \"Schema-free functions require an explicit stable name: registerFunction(name, handler)\",\n );\n}\n\nexport function registerApplication<\n const P extends readonly Parameter<unknown>[],\n Result,\n>(\n handler: (...args: ParameterValues<P>) => Promise<Result | TailCall<Result>>,\n options: ApplicationOptions<P, Result>,\n): RegisteredFunction<ParameterValues<P>, Result>;\nexport function registerApplication<\n const Args extends readonly unknown[],\n Output,\n>(\n name: string,\n handler: (...args: Args) => Promise<Output>,\n options?: SimpleApplicationOptions,\n): RegisteredFunction<Args, SimpleResult<Output>>;\nexport function registerApplication(\n handlerOrName: unknown,\n handlerOrOptions?: unknown,\n options: SimpleApplicationOptions = {},\n): RegisteredFunction<readonly unknown[], unknown> {\n if (typeof handlerOrName === \"string\") {\n if (typeof handlerOrOptions !== \"function\") {\n throw new SDKUsageError(\"registerApplication(name, handler) requires an async handler\");\n }\n return registerWithDefaults(\n handlerOrName,\n handlerOrOptions as RuntimeHandler,\n options,\n true,\n );\n }\n if (typeof handlerOrName !== \"function\") {\n throw new SDKUsageError(\"registerApplication requires an async handler\");\n }\n const handler = handlerOrName as RuntimeHandler;\n if (typeof handlerOrOptions === \"function\") {\n throw new SDKUsageError(\"registerApplication received an unexpected second handler\");\n }\n if (hasExplicitSchemas(handlerOrOptions)) {\n return register(\n handler as (...args: readonly unknown[]) => Promise<unknown>,\n handlerOrOptions,\n true,\n );\n }\n throw new SDKUsageError(\n \"Schema-free applications require an explicit stable name: registerApplication(name, handler)\",\n );\n}\n","import Ajv, { type ValidateFunction } from \"ajv\";\nimport Ajv2020 from \"ajv/dist/2020.js\";\nimport { File, isFile } from \"./file.js\";\nimport { HttpBody, isHttpBody } from \"./http-body.js\";\nimport { SDKUsageError } from \"./errors.js\";\n\nexport type JSONSchema = Record<string, unknown>;\n\nconst TYPE = Symbol(\"tensorlake.schema.type\");\n// SDK-generated schemas use JSON Schema 2020-12 features such as prefixItems.\n// Validate with the same dialect that we emit into application manifests so\n// local/executor checks cannot silently accept values the public schema rejects.\nconst ajvDraft7 = new Ajv({ allErrors: true, strict: false });\nconst ajv2020 = new Ajv2020({ allErrors: true, strict: false });\n\nexport interface Schema<T> {\n readonly jsonSchema: JSONSchema;\n readonly [TYPE]?: T;\n readonly _file?: boolean;\n readonly _httpBody?: boolean;\n}\n\nexport type Infer<S extends Schema<unknown>> = S extends Schema<infer T> ? T : never;\n\nexport interface ParameterOptions<T> {\n description?: string;\n optional?: boolean;\n default?: T;\n}\n\nexport interface Parameter<T> {\n readonly name: string;\n readonly schema: Schema<T>;\n readonly description?: string;\n readonly required: boolean;\n readonly hasDefault: boolean;\n readonly defaultValue?: T;\n}\n\nexport type ParameterValues<P extends readonly Parameter<unknown>[]> = {\n [K in keyof P]: P[K] extends Parameter<infer T> ? T : never;\n};\n\nfunction snapshotJSONValue(\n value: unknown,\n label: string,\n ancestors: Set<object>,\n freeze: boolean,\n): unknown {\n if (\n value == null\n || typeof value === \"string\"\n || typeof value === \"boolean\"\n ) {\n return value;\n }\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new SDKUsageError(`${label} contains a non-finite number`);\n }\n return value;\n }\n if (typeof value !== \"object\") {\n throw new SDKUsageError(`${label} contains unsupported ${typeof value}`);\n }\n if (ancestors.has(value)) {\n throw new SDKUsageError(`${label} contains a cycle`);\n }\n if (!Array.isArray(value) && Object.getPrototypeOf(value) !== Object.prototype) {\n throw new SDKUsageError(\n `${label} contains unsupported ${value.constructor?.name ?? \"object\"}`,\n );\n }\n\n ancestors.add(value);\n let result: unknown[] | Record<string, unknown>;\n if (Array.isArray(value)) {\n result = [];\n for (let index = 0; index < value.length; index += 1) {\n if (!Object.prototype.hasOwnProperty.call(value, index)) {\n throw new SDKUsageError(`${label} contains a sparse array entry at index ${index}`);\n }\n result.push(snapshotJSONValue(\n value[index],\n `${label}[${index}]`,\n ancestors,\n freeze,\n ));\n }\n } else {\n result = Object.fromEntries(\n Object.entries(value).map(([key, item]) => [\n key,\n snapshotJSONValue(item, `${label}.${key}`, ancestors, freeze),\n ]),\n );\n }\n ancestors.delete(value);\n return freeze ? Object.freeze(result) : result;\n}\n\nfunction snapshotJSONSchema(jsonSchema: JSONSchema): JSONSchema {\n return snapshotJSONValue(\n jsonSchema,\n \"JSON schema\",\n new Set(),\n true,\n ) as JSONSchema;\n}\n\nfunction snapshotDefault<T>(valueSchema: Schema<T>, value: T): T {\n if (valueSchema._file) {\n if (!isFile(value)) {\n throw new SDKUsageError(\"parameter default must be a Tensorlake File\");\n }\n return new File(new Uint8Array(value.content), value.contentType) as T;\n }\n if (valueSchema._httpBody) {\n if (!isHttpBody(value)) {\n throw new SDKUsageError(\"parameter default must be a Tensorlake HttpBody\");\n }\n return new HttpBody(new Uint8Array(value.content), value.contentType) as T;\n }\n return snapshotJSONValue(\n value,\n \"parameter default\",\n new Set(),\n false,\n ) as T;\n}\n\nfunction makeSchema<T>(\n jsonSchema: JSONSchema,\n rawBody?: \"file\" | \"httpBody\",\n): Schema<T> {\n return Object.freeze({\n jsonSchema: snapshotJSONSchema(jsonSchema),\n _file: rawBody === \"file\",\n _httpBody: rawBody === \"httpBody\",\n });\n}\n\nfunction rejectRawBodyComposition(\n operation: string,\n values: readonly Schema<unknown>[],\n): void {\n const rawBody = values.find((value) => value._file || value._httpBody);\n if (rawBody != null) {\n const factory = rawBody._httpBody ? \"httpBody\" : \"file\";\n const type = rawBody._httpBody ? \"HttpBody\" : \"File\";\n const supportedPosition = rawBody._httpBody\n ? \"as a direct application parameter\"\n : \"as a direct parameter or return value\";\n throw new SDKUsageError(\n `schema.${operation} cannot contain schema.${factory}(); ${type} is only supported`\n + ` ${supportedPosition}`,\n );\n }\n}\n\nfunction parameter<T>(\n name: string,\n valueSchema: Schema<T>,\n options: ParameterOptions<T> = {},\n): Parameter<T> {\n if (!/^[A-Za-z_$][\\w$]*$/.test(name)) {\n throw new SDKUsageError(`Invalid parameter name '${name}'`);\n }\n const hasDefault = Object.prototype.hasOwnProperty.call(options, \"default\");\n if (hasDefault) validateWithSchema(valueSchema, options.default, `default for '${name}'`);\n const defaultSnapshot = hasDefault\n ? snapshotDefault(valueSchema, options.default as T)\n : undefined;\n return Object.freeze({\n name,\n schema: valueSchema,\n description: options.description,\n required: options.optional !== true && !hasDefault,\n hasDefault,\n // Defaults cross two public boundaries: callers can inspect the registered\n // definition, and every invocation receives the default when an argument is\n // omitted. Return a fresh boundary copy so neither path can mutate the\n // registration snapshot, later invocations, or generated manifests.\n get defaultValue(): T | undefined {\n return hasDefault\n ? snapshotDefault(valueSchema, defaultSnapshot as T)\n : undefined;\n },\n });\n}\n\nexport const schema = {\n /** Any JSON-serializable value. Useful when strict runtime validation is not needed. */\n json: <T = unknown>() => makeSchema<T>({}),\n string: (options: Omit<JSONSchema, \"type\"> = {}) =>\n makeSchema<string>({ ...options, type: \"string\" }),\n number: (options: Omit<JSONSchema, \"type\"> = {}) =>\n makeSchema<number>({ ...options, type: \"number\" }),\n integer: (options: Omit<JSONSchema, \"type\"> = {}) =>\n makeSchema<number>({ ...options, type: \"integer\" }),\n boolean: () => makeSchema<boolean>({ type: \"boolean\" }),\n null: () => makeSchema<null>({ type: \"null\" }),\n literal: <T extends string | number | boolean | null>(value: T) =>\n makeSchema<T>({ const: value }),\n enum: <const T extends readonly (string | number)[]>(values: T) =>\n makeSchema<T[number]>({ enum: [...values] }),\n array: <S extends Schema<unknown>>(item: S, options: Omit<JSONSchema, \"type\" | \"items\"> = {}) => {\n rejectRawBodyComposition(\"array\", [item]);\n return makeSchema<Infer<S>[]>({ ...options, type: \"array\", items: item.jsonSchema });\n },\n tuple: <const S extends readonly Schema<unknown>[]>(items: S) => {\n rejectRawBodyComposition(\"tuple\", items);\n return makeSchema<{ [K in keyof S]: S[K] extends Schema<infer T> ? T : never }>({\n type: \"array\",\n prefixItems: items.map((item) => item.jsonSchema),\n minItems: items.length,\n maxItems: items.length,\n });\n },\n record: <S extends Schema<unknown>>(value: S) => {\n rejectRawBodyComposition(\"record\", [value]);\n return makeSchema<Record<string, Infer<S>>>({\n type: \"object\",\n additionalProperties: value.jsonSchema,\n });\n },\n object: <const P extends Record<string, Schema<unknown>>>(properties: P) => {\n rejectRawBodyComposition(\"object\", Object.values(properties));\n return makeSchema<{ [K in keyof P]: P[K] extends Schema<infer T> ? T : never }>({\n type: \"object\",\n properties: Object.fromEntries(\n Object.entries(properties).map(([key, item]) => [key, item.jsonSchema]),\n ),\n required: Object.keys(properties),\n additionalProperties: false,\n });\n },\n union: <const S extends readonly Schema<unknown>[]>(...choices: S) => {\n rejectRawBodyComposition(\"union\", choices);\n return makeSchema<Infer<S[number]>>({ anyOf: choices.map((choice) => choice.jsonSchema) });\n },\n nullable: <S extends Schema<unknown>>(value: S) => {\n rejectRawBodyComposition(\"nullable\", [value]);\n return makeSchema<Infer<S> | null>({ anyOf: [value.jsonSchema, { type: \"null\" }] });\n },\n file: () => makeSchema<File>({ type: \"tensorlake_file\" }, \"file\"),\n httpBody: () =>\n makeSchema<HttpBody>({ type: \"tensorlake_http_body\" }, \"httpBody\"),\n custom: <T>(jsonSchema: JSONSchema) => makeSchema<T>({ ...jsonSchema }),\n parameter,\n};\n\ninterface CachedValidator {\n readonly validate: ValidateFunction;\n readonly errorsText: (errors: ValidateFunction[\"errors\"]) => string;\n}\n\nconst validatorCache = new WeakMap<object, CachedValidator>();\n\nfunction compileValidator(jsonSchema: JSONSchema): CachedValidator {\n // Earlier SDK versions validated custom schemas with Ajv's draft-07\n // default. Preserve that behavior for explicitly declared draft-07 schemas\n // while using 2020-12 for SDK-generated schemas and custom schemas without a\n // dialect declaration.\n const dialect = jsonSchema.$schema;\n const engine = typeof dialect === \"string\" && /\\/draft-07\\/schema#?$/.test(dialect)\n ? ajvDraft7\n : ajv2020;\n const validate = engine.compile(jsonSchema);\n return {\n validate,\n errorsText: (errors) => engine.errorsText(errors, { separator: \"; \" }),\n };\n}\n\nexport function validateWithSchema<T>(valueSchema: Schema<T>, value: unknown, label: string): T {\n if (valueSchema._file) {\n if (!isFile(value)) {\n throw new SDKUsageError(`${label} must be a Tensorlake File`);\n }\n return value as T;\n }\n if (valueSchema._httpBody) {\n if (!isHttpBody(value)) {\n throw new SDKUsageError(`${label} must be a Tensorlake HttpBody`);\n }\n return value as T;\n }\n if (isFile(value)) {\n throw new SDKUsageError(`${label} must use schema.file() for a Tensorlake File`);\n }\n if (isHttpBody(value)) {\n throw new SDKUsageError(\n `${label} must use schema.httpBody() for a Tensorlake HttpBody`,\n );\n }\n let cached = validatorCache.get(valueSchema as object);\n if (cached == null) {\n try {\n cached = compileValidator(valueSchema.jsonSchema);\n } catch (error) {\n const details = error instanceof Error ? error.message : String(error);\n throw new SDKUsageError(`${label} uses an invalid JSON schema: ${details}`);\n }\n validatorCache.set(valueSchema as object, cached);\n }\n if (!cached.validate(value)) {\n const details = cached.errorsText(cached.validate.errors);\n throw new SDKUsageError(`${label} does not match its schema: ${details}`);\n }\n return value as T;\n}\n\nexport function parameterJSONSchema(parameter: Parameter<unknown>): JSONSchema {\n const result: JSONSchema = {\n ...parameter.schema.jsonSchema,\n title: parameter.name,\n parameter_kind: \"POSITIONAL_OR_KEYWORD\",\n };\n if (parameter.description != null) result.description = parameter.description;\n if (parameter.hasDefault) {\n result.default = parameter.schema._file || parameter.schema._httpBody\n ? true\n : parameter.defaultValue;\n }\n return result;\n}\n","import { SDKUsageError } from \"./errors.js\";\n\nconst FILE_BRAND = Symbol.for(\"tensorlake.applications.file.v1\");\n\nexport class File {\n readonly [FILE_BRAND] = true;\n readonly content: Uint8Array;\n readonly contentType: string;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== File) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isFile(value);\n }\n\n constructor(content: Uint8Array | ArrayBuffer, contentType: string) {\n if (!contentType.trim()) {\n throw new SDKUsageError(\"File contentType cannot be empty\");\n }\n this.content = content instanceof Uint8Array ? content : new Uint8Array(content);\n this.contentType = contentType;\n }\n}\n\n/**\n * Recognizes Tensorlake Files across independently bundled SDK copies.\n *\n * Deployed application code and the function executor are separate bundles\n * loaded into one Node process, so their `File` constructors are not\n * referentially equal. The shared brand and `Symbol.hasInstance` keep\n * `instanceof File` useful across that boundary.\n */\nexport function isFile(value: unknown): value is File {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[FILE_BRAND] === true\n && candidate.content instanceof Uint8Array\n && typeof candidate.contentType === \"string\"\n && candidate.contentType.trim().length > 0;\n}\n","const HTTP_BODY_BRAND = Symbol.for(\"tensorlake.applications.http-body.v1\");\n\nexport class HttpBody {\n readonly [HTTP_BODY_BRAND] = true;\n readonly content: Uint8Array;\n readonly contentType?: string;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== HttpBody) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isHttpBody(value);\n }\n\n constructor(\n content: Uint8Array | ArrayBuffer,\n contentType?: string,\n ) {\n this.content = content instanceof Uint8Array\n ? content\n : new Uint8Array(content);\n this.contentType = contentType;\n }\n\n text(encoding = \"utf-8\"): string {\n return new TextDecoder(encoding, { fatal: true }).decode(this.content);\n }\n\n json<T = unknown>(): T {\n return JSON.parse(this.text()) as T;\n }\n}\n\n/**\n * Recognizes Tensorlake HTTP bodies across independently bundled SDK copies.\n *\n * Deployed application code and the function executor are separate bundles\n * loaded into one Node process, so their `HttpBody` constructors are not\n * referentially equal.\n */\nexport function isHttpBody(value: unknown): value is HttpBody {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[HTTP_BODY_BRAND] === true\n && candidate.content instanceof Uint8Array\n && (\n candidate.contentType === undefined\n || typeof candidate.contentType === \"string\"\n );\n}\n","export type HeadersInit =\n | Headers\n | Record<string, string>\n | Iterable<readonly [string, string]>;\n\nconst HEADERS_BRAND = Symbol.for(\"tensorlake.applications.headers.v1\");\n\n/** Immutable, case-insensitive application request headers. */\nexport class Headers implements Iterable<readonly [string, string]> {\n readonly [HEADERS_BRAND] = true;\n readonly #items: readonly (readonly [string, string])[];\n readonly #lookup: ReadonlyMap<string, readonly string[]>;\n\n static [Symbol.hasInstance](value: unknown): boolean {\n if (this !== Headers) {\n return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n return isHeaders(value);\n }\n\n constructor(headers: HeadersInit = []) {\n const entries = headers instanceof Headers\n ? [...headers]\n : Symbol.iterator in Object(headers)\n ? [...headers as Iterable<readonly [string, string]>]\n : Object.entries(headers);\n const lookup = new Map<string, string[]>();\n this.#items = Object.freeze(entries.map(([name, value]) => {\n if (typeof name !== \"string\" || typeof value !== \"string\") {\n throw new TypeError(\"Headers require string names and values\");\n }\n const item = Object.freeze([name, value] as const);\n const key = name.toLowerCase();\n lookup.set(key, [...(lookup.get(key) ?? []), value]);\n return item;\n }));\n this.#lookup = lookup;\n Object.freeze(this);\n }\n\n get(name: string): string | undefined {\n return this.#lookup.get(name.toLowerCase())?.at(-1);\n }\n\n getAll(name: string): readonly string[] {\n return Object.freeze([...(this.#lookup.get(name.toLowerCase()) ?? [])]);\n }\n\n has(name: string): boolean {\n return this.#lookup.has(name.toLowerCase());\n }\n\n entries(): IterableIterator<readonly [string, string]> {\n return this.#items[Symbol.iterator]();\n }\n\n [Symbol.iterator](): IterableIterator<readonly [string, string]> {\n return this.entries();\n }\n}\n\n/** Recognizes immutable request headers across independently bundled SDK copies. */\nexport function isHeaders(value: unknown): value is Headers {\n if (typeof value !== \"object\" || value == null) return false;\n const candidate = value as Record<PropertyKey, unknown>;\n return candidate[HEADERS_BRAND] === true\n && typeof candidate.get === \"function\"\n && typeof candidate.getAll === \"function\"\n && typeof candidate.has === \"function\"\n && typeof candidate[Symbol.iterator] === \"function\";\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { SDKUsageError } from \"./errors.js\";\nimport { Headers, type HeadersInit } from \"./headers.js\";\nimport { deserializeJSON, serializeValue } from \"./serialization.js\";\n\nexport interface ProgressOptions {\n message?: string;\n attributes?: Record<string, string>;\n}\n\nexport interface RequestState {\n set(key: string, value: unknown): Promise<void>;\n get<T>(key: string, defaultValue?: T): Promise<T | undefined>;\n}\n\nexport interface RequestMetrics {\n timer(name: string, value: number): Promise<void>;\n counter(name: string, value?: number): Promise<void>;\n}\n\nexport interface FunctionProgress {\n update(current: number, total: number, options?: ProgressOptions): Promise<void>;\n}\n\nexport function validateRequestStateKey(key: unknown): asserts key is string {\n if (typeof key !== \"string\") {\n throw new SDKUsageError(`State key must be a string, got: ${String(key)}`);\n }\n}\n\nexport function serializeRequestStateValue(value: unknown): Uint8Array {\n const serialized = serializeValue(value);\n if (serialized.encoding !== \"json\") {\n throw new SDKUsageError(\"Request state values must be JSON values\");\n }\n return serialized.data;\n}\n\nexport function validateCounterMetric(name: unknown, value: unknown): void {\n if (typeof name !== \"string\") {\n throw new SDKUsageError(`Counter name must be a string, got: ${String(name)}`);\n }\n if (typeof value !== \"number\" || !Number.isInteger(value)) {\n throw new SDKUsageError(`Counter value must be an int, got: ${String(value)}`);\n }\n if (!Number.isSafeInteger(value)) {\n throw new SDKUsageError(`Counter value must be a safe int, got: ${String(value)}`);\n }\n}\n\nexport function validateTimerMetric(name: unknown, value: unknown): void {\n if (typeof name !== \"string\") {\n throw new SDKUsageError(`Timer name must be a string, got: ${String(name)}`);\n }\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n throw new SDKUsageError(`Timer value must be a finite number, got: ${String(value)}`);\n }\n}\n\nfunction isPlainRecord(value: unknown): value is Record<PropertyKey, unknown> {\n if (value == null || typeof value !== \"object\" || Array.isArray(value)) return false;\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nexport function validateProgressUpdate(\n current: number,\n total: number,\n options?: ProgressOptions,\n): void {\n if (!Number.isFinite(current) || !Number.isFinite(total) || total < 0 || current < 0) {\n throw new SDKUsageError(\"Progress current and total must be non-negative finite numbers\");\n }\n if (options != null && !isPlainRecord(options)) {\n throw new SDKUsageError(\"Progress options must be an object\");\n }\n if (options?.message != null && typeof options.message !== \"string\") {\n throw new SDKUsageError(\"Progress message must be a string\");\n }\n if (options?.attributes != null) {\n if (!isPlainRecord(options.attributes)) {\n throw new SDKUsageError(\"Progress attributes must be an object of string key/value pairs\");\n }\n for (const key of Reflect.ownKeys(options.attributes)) {\n if (typeof key !== \"string\") {\n throw new SDKUsageError(\"Progress attributes must contain only string keys and values\");\n }\n const value = options.attributes[key];\n if (typeof value !== \"string\") {\n throw new SDKUsageError(\"Progress attributes must contain only string keys and values\");\n }\n }\n }\n}\n\nexport interface RequestContextValue {\n readonly requestId: string;\n readonly headers: Headers;\n readonly signal: AbortSignal;\n readonly state: RequestState;\n readonly metrics: RequestMetrics;\n readonly progress: FunctionProgress;\n}\n\n// A deployed application bundle contains its own copy of the applications SDK,\n// while the function executor has another copy in its runtime capsule. Both\n// copies execute in the same Node process and must observe the same context.\n// Symbol.for keeps the AsyncLocalStorage process-global without exposing it as\n// public API or coupling the application bundle to the executor package.\nconst REQUEST_CONTEXT_STORAGE_KEY = Symbol.for(\n \"tensorlake.applications.request-context-storage.v1\",\n);\n\nfunction requestContextStorage(): AsyncLocalStorage<RequestContextValue> {\n const target = globalThis as typeof globalThis & {\n [REQUEST_CONTEXT_STORAGE_KEY]?: AsyncLocalStorage<RequestContextValue>;\n };\n target[REQUEST_CONTEXT_STORAGE_KEY] ??= new AsyncLocalStorage<RequestContextValue>();\n return target[REQUEST_CONTEXT_STORAGE_KEY];\n}\n\nexport class RequestContext {\n static get(): RequestContextValue {\n const context = requestContextStorage().getStore();\n if (context == null) {\n throw new SDKUsageError(\"RequestContext.get() can only be called from a running Tensorlake function\");\n }\n return context;\n }\n}\n\nexport function runWithRequestContext<T>(\n context: RequestContextValue,\n callback: () => Promise<T>,\n): Promise<T> {\n return requestContextStorage().run(context, callback);\n}\n\nexport async function waitWithAbortSignal<T>(\n value: Promise<T>,\n signal: AbortSignal,\n): Promise<T> {\n if (signal.aborted) throw signal.reason;\n let onAbort: (() => void) | undefined;\n try {\n return await Promise.race([\n value,\n new Promise<never>((_resolve, reject) => {\n onAbort = () => reject(signal.reason);\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }),\n ]);\n } finally {\n if (onAbort != null) signal.removeEventListener(\"abort\", onAbort);\n }\n}\n\nexport class MemoryRequestContext implements RequestContextValue {\n readonly headers: Headers;\n readonly signal: AbortSignal;\n private readonly values = new Map<string, Uint8Array>();\n private readonly counters = new Map<string, number>();\n private readonly timers = new Map<string, number[]>();\n private lastProgress?: { current: number; total: number; options?: ProgressOptions };\n\n constructor(\n readonly requestId: string,\n options: { signal?: AbortSignal; headers?: HeadersInit } = {},\n ) {\n this.headers = new Headers(options.headers);\n this.signal = options.signal ?? new AbortController().signal;\n }\n\n readonly state: RequestState = {\n set: async (key, value) => {\n validateRequestStateKey(key);\n this.values.set(key, serializeRequestStateValue(value).slice());\n },\n get: async <T>(key: string, defaultValue?: T) => {\n validateRequestStateKey(key);\n const value = this.values.get(key);\n return value == null ? defaultValue : deserializeJSON(value) as T;\n },\n };\n\n readonly metrics: RequestMetrics = {\n counter: async (name, value = 1) => {\n validateCounterMetric(name, value);\n this.counters.set(name, (this.counters.get(name) ?? 0) + value);\n },\n timer: async (name, value) => {\n validateTimerMetric(name, value);\n const values = this.timers.get(name) ?? [];\n values.push(value);\n this.timers.set(name, values);\n },\n };\n\n readonly progress: FunctionProgress = {\n update: async (current, total, options) => {\n validateProgressUpdate(current, total, options);\n this.lastProgress = { current, total, options };\n },\n };\n}\n","import { createHash } from \"node:crypto\";\nimport { DeserializationError, SerializationError } from \"./errors.js\";\nimport { isFile } from \"./file.js\";\nimport { isHttpBody } from \"./http-body.js\";\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder(\"utf-8\", { fatal: true });\n\nexport interface SerializedValue {\n data: Uint8Array;\n contentType: string;\n encoding: \"json\" | \"raw\";\n}\n\nfunction assertJSONValue(value: unknown, path: string, seen: Set<object>): void {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return;\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) throw new SerializationError(`${path} contains a non-finite number`);\n return;\n }\n if (typeof value !== \"object\") {\n throw new SerializationError(`${path} contains unsupported ${typeof value}`);\n }\n if (isFile(value)) {\n throw new SerializationError(`${path} contains a nested File; File is only supported as a direct value`);\n }\n if (isHttpBody(value)) {\n throw new SerializationError(\n `${path} contains a nested HttpBody; HttpBody is only supported as a direct value`,\n );\n }\n if (seen.has(value)) throw new SerializationError(`${path} contains a cycle`);\n if (Object.getPrototypeOf(value) !== Object.prototype && !Array.isArray(value)) {\n throw new SerializationError(`${path} contains unsupported ${value.constructor?.name ?? \"object\"}`);\n }\n seen.add(value);\n if (Array.isArray(value)) {\n for (let index = 0; index < value.length; index += 1) {\n if (!Object.prototype.hasOwnProperty.call(value, index)) {\n throw new SerializationError(`${path} contains a sparse array entry at index ${index}`);\n }\n assertJSONValue(value[index], `${path}[${index}]`, seen);\n }\n } else {\n for (const [key, item] of Object.entries(value)) {\n assertJSONValue(item, `${path}.${key}`, seen);\n }\n }\n seen.delete(value);\n}\n\nexport function serializeValue(value: unknown): SerializedValue {\n if (isFile(value)) {\n return { data: value.content, contentType: value.contentType, encoding: \"raw\" };\n }\n if (isHttpBody(value)) {\n return {\n data: value.content,\n contentType: value.contentType ?? \"\",\n encoding: \"raw\",\n };\n }\n try {\n assertJSONValue(value, \"value\", new Set());\n return {\n data: textEncoder.encode(JSON.stringify(value)),\n contentType: \"application/json; charset=UTF-8\",\n encoding: \"json\",\n };\n } catch (error) {\n if (error instanceof SerializationError) throw error;\n throw new SerializationError(\"Failed to serialize JSON value\", { cause: error });\n }\n}\n\nexport function deserializeJSON(data: Uint8Array): unknown {\n try {\n return JSON.parse(textDecoder.decode(data));\n } catch (error) {\n throw new DeserializationError(\"Failed to deserialize JSON value\", { cause: error });\n }\n}\n\nexport function jsonRoundTrip<T>(value: T): T {\n const serialized = serializeValue(value);\n if (serialized.encoding !== \"json\") return value;\n return deserializeJSON(serialized.data) as T;\n}\n\nexport function canonicalJSON(value: unknown): string {\n if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(canonicalJSON).join(\",\")}]`;\n const entries = Object.entries(value as Record<string, unknown>).sort(([a], [b]) => a.localeCompare(b));\n return `{${entries.map(([key, item]) => `${JSON.stringify(key)}:${canonicalJSON(item)}`).join(\",\")}}`;\n}\n\nexport function sha256(data: Uint8Array): string {\n return createHash(\"sha256\").update(data).digest(\"hex\");\n}\n","export class AsyncQueue<T> {\n private readonly values: T[] = [];\n private readonly readers: Array<(value: T | undefined) => void> = [];\n private closed = false;\n\n push(value: T): void {\n if (this.closed) return;\n const reader = this.readers.shift();\n if (reader == null) this.values.push(value);\n else reader(value);\n }\n\n async next(): Promise<T | undefined> {\n const value = this.values.shift();\n if (value != null) return value;\n if (this.closed) return undefined;\n return new Promise((resolve) => this.readers.push(resolve));\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n for (const reader of this.readers.splice(0)) reader(undefined);\n }\n}\n\nexport interface Deferred<T> {\n promise: Promise<T>;\n resolve(value: T): void;\n reject(error: unknown): void;\n}\n\nexport function deferred<T>(): Deferred<T> {\n let resolve!: (value: T) => void;\n let reject!: (error: unknown) => void;\n const promise = new Promise<T>((ok, fail) => {\n resolve = ok;\n reject = fail;\n });\n return { promise, resolve, reject };\n}\n","import { createHash } from \"node:crypto\";\nimport { open } from \"node:fs/promises\";\nimport { fileURLToPath } from \"node:url\";\nimport { File } from \"../applications/file.js\";\nimport { deserializeJSON, serializeValue } from \"../applications/serialization.js\";\n\nexport interface BlobChunk {\n uri?: string;\n size?: number;\n etag?: string;\n}\n\nexport interface BlobValue {\n id?: string;\n chunks?: BlobChunk[];\n}\n\nexport interface SerializedObjectManifestValue {\n encoding?: string | number;\n encodingVersion?: number;\n size?: number;\n metadataSize?: number;\n sha256Hash?: string;\n contentType?: string;\n sourceFunctionCallId?: string;\n}\n\nexport interface SerializedObjectInsideBlobValue {\n manifest?: SerializedObjectManifestValue;\n offset?: number;\n}\n\nexport interface PreparedSerializedObject {\n object: SerializedObjectInsideBlobValue;\n bytes: Uint8Array;\n}\n\nexport type BlobLog = (message: string, fields?: Record<string, unknown>) => void;\n\nfunction enumIs(value: string | number | undefined, name: string, numberValue: number): boolean {\n return value === name || value === numberValue;\n}\n\nfunction concatenate(parts: Uint8Array[]): Uint8Array {\n const result = new Uint8Array(parts.reduce((total, part) => total + part.byteLength, 0));\n let offset = 0;\n for (const part of parts) {\n result.set(part, offset);\n offset += part.byteLength;\n }\n return result;\n}\n\nfunction networkURI(uri: string): string {\n if (uri.startsWith(\"s3://\")) return `https://${uri.slice(\"s3://\".length)}`;\n if (uri.startsWith(\"gs://\")) return `https://${uri.slice(\"gs://\".length)}`;\n return uri;\n}\n\nclass BlobHTTPError extends Error {\n constructor(readonly status: number) {\n super(`BLOB operation failed with HTTP ${status}`);\n }\n}\n\nfunction uriKind(uri: string): string {\n if (uri.startsWith(\"file://\")) return \"file\";\n if (uri.startsWith(\"s3://\")) return \"s3\";\n if (uri.startsWith(\"gs://\")) return \"gcs\";\n try {\n return new URL(uri).protocol.replace(\":\", \"\") || \"unknown\";\n } catch {\n return \"unknown\";\n }\n}\n\nfunction throwIfAborted(signal?: AbortSignal): void {\n signal?.throwIfAborted();\n}\n\nasync function abortableDelay(delayMs: number, signal?: AbortSignal): Promise<void> {\n throwIfAborted(signal);\n if (signal == null) {\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n return;\n }\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, delayMs);\n const onAbort = () => {\n clearTimeout(timer);\n reject(signal.reason);\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\nasync function fetchWithRetries(\n uri: string,\n init?: RequestInit,\n log?: BlobLog,\n fields: Record<string, unknown> = {},\n signal?: AbortSignal,\n): Promise<Response> {\n let lastError: unknown;\n for (let attempt = 0; attempt < 4; attempt += 1) {\n throwIfAborted(signal);\n const startedAt = Date.now();\n log?.(\"HTTP attempt starting\", {\n ...fields,\n attempt: attempt + 1,\n method: init?.method ?? \"GET\",\n uri_kind: uriKind(uri),\n has_range: new Headers(init?.headers).has(\"range\"),\n });\n try {\n const response = await fetch(networkURI(uri), {\n ...init,\n signal,\n });\n log?.(\"HTTP attempt completed\", {\n ...fields,\n attempt: attempt + 1,\n method: init?.method ?? \"GET\",\n status_code: response.status,\n duration_ms: Date.now() - startedAt,\n });\n throwIfAborted(signal);\n if (response.ok) return response;\n if ([400, 403, 404].includes(response.status) || attempt === 3) {\n throw new BlobHTTPError(response.status);\n }\n lastError = new BlobHTTPError(response.status);\n } catch (error) {\n log?.(\"HTTP attempt failed\", {\n ...fields,\n attempt: attempt + 1,\n method: init?.method ?? \"GET\",\n duration_ms: Date.now() - startedAt,\n error: error instanceof Error ? `${error.name}: ${error.message}` : String(error),\n });\n throwIfAborted(signal);\n if (error instanceof BlobHTTPError && [400, 403, 404].includes(error.status)) throw error;\n lastError = error;\n if (attempt === 3) break;\n }\n const retryDelayMs = 100 * (2 ** attempt);\n log?.(\"HTTP attempt scheduled for retry\", {\n ...fields,\n next_attempt: attempt + 2,\n retry_delay_ms: retryDelayMs,\n });\n await abortableDelay(retryDelayMs, signal);\n }\n throw new Error(\"BLOB operation failed after retries\", { cause: lastError });\n}\n\nasync function readChunkRange(\n chunk: BlobChunk,\n index: number,\n logicalChunkOffset: number,\n offsetWithinChunk: number,\n size: number,\n sharedURI: boolean,\n log?: BlobLog,\n signal?: AbortSignal,\n): Promise<Uint8Array> {\n throwIfAborted(signal);\n if (!chunk.uri) throw new Error(\"BLOB chunk has no URI\");\n const physicalOffset = sharedURI ? logicalChunkOffset + offsetWithinChunk : offsetWithinChunk;\n const fields = {\n chunk_index: index,\n chunk_offset: logicalChunkOffset,\n read_offset: physicalOffset,\n read_bytes: size,\n uri_kind: uriKind(chunk.uri),\n shared_uri: sharedURI,\n };\n const startedAt = Date.now();\n log?.(\"download chunk starting\", fields);\n if (chunk.uri.startsWith(\"file://\")) {\n const file = await open(fileURLToPath(chunk.uri), \"r\");\n try {\n throwIfAborted(signal);\n const data = new Uint8Array(size);\n const { bytesRead } = await file.read(data, 0, size, physicalOffset);\n throwIfAborted(signal);\n if (bytesRead !== size) {\n throw new Error(`BLOB chunk ended after ${bytesRead} bytes; expected ${size}`);\n }\n log?.(\"download chunk completed\", {\n ...fields,\n downloaded_bytes: data.byteLength,\n duration_ms: Date.now() - startedAt,\n });\n return data;\n } finally {\n await file.close();\n }\n }\n const headers = { range: `bytes=${physicalOffset}-${physicalOffset + size - 1}` };\n const response = await fetchWithRetries(chunk.uri, { headers }, log, fields, signal);\n let data = new Uint8Array(await response.arrayBuffer());\n throwIfAborted(signal);\n // A server may ignore Range and return the complete object with HTTP 200.\n if (response.status === 200 && (physicalOffset !== 0 || data.byteLength !== size)) {\n data = data.subarray(physicalOffset, physicalOffset + size);\n }\n if (data.byteLength !== size) {\n throw new Error(`BLOB chunk returned ${data.byteLength} bytes; expected ${size}`);\n }\n log?.(\"download chunk completed\", {\n ...fields,\n status_code: response.status,\n downloaded_bytes: data.byteLength,\n duration_ms: Date.now() - startedAt,\n });\n return data;\n}\n\nexport async function downloadBlobRange(\n blob: BlobValue,\n offset: number,\n size: number,\n log?: BlobLog,\n signal?: AbortSignal,\n): Promise<Uint8Array> {\n throwIfAborted(signal);\n if (!Number.isSafeInteger(offset) || offset < 0 || !Number.isSafeInteger(size) || size < 0) {\n throw new Error(\"BLOB range offset and size must be non-negative safe integers\");\n }\n const chunks = blob.chunks ?? [];\n const totalSize = chunks.reduce((total, chunk) => total + (chunk.size ?? 0), 0);\n if (offset + size > totalSize) {\n throw new Error(`BLOB range ${offset}..${offset + size} exceeds declared size ${totalSize}`);\n }\n if (size === 0) return new Uint8Array();\n const uriCounts = new Map<string, number>();\n for (const chunk of chunks) {\n if (chunk.uri != null) uriCounts.set(chunk.uri, (uriCounts.get(chunk.uri) ?? 0) + 1);\n }\n const rangeEnd = offset + size;\n let chunkOffset = 0;\n const reads: Array<Promise<Uint8Array>> = [];\n for (const [index, chunk] of chunks.entries()) {\n const chunkSize = chunk.size ?? 0;\n const chunkEnd = chunkOffset + chunkSize;\n const overlapStart = Math.max(offset, chunkOffset);\n const overlapEnd = Math.min(rangeEnd, chunkEnd);\n if (overlapStart < overlapEnd) {\n reads.push(readChunkRange(\n chunk,\n index,\n chunkOffset,\n overlapStart - chunkOffset,\n overlapEnd - overlapStart,\n (uriCounts.get(chunk.uri ?? \"\") ?? 0) > 1,\n log,\n signal,\n ));\n }\n chunkOffset = chunkEnd;\n }\n const data = concatenate(await Promise.all(reads));\n throwIfAborted(signal);\n if (data.byteLength !== size) throw new Error(\"BLOB does not contain the complete requested range\");\n log?.(\"download blob completed\", {\n blob_id: blob.id,\n chunk_count: chunks.length,\n downloaded_bytes: data.byteLength,\n range_offset: offset,\n range_size: size,\n });\n return data;\n}\n\nexport async function downloadBlob(\n blob: BlobValue,\n log?: BlobLog,\n signal?: AbortSignal,\n): Promise<Uint8Array> {\n const size = (blob.chunks ?? []).reduce((total, chunk) => total + (chunk.size ?? 0), 0);\n return downloadBlobRange(blob, 0, size, log, signal);\n}\n\nexport async function downloadSerializedObject(\n object: SerializedObjectInsideBlobValue,\n blob: BlobValue,\n log?: BlobLog,\n signal?: AbortSignal,\n): Promise<{ data: Uint8Array; metadata: Uint8Array; contentType?: string; encoding?: string | number }> {\n throwIfAborted(signal);\n const manifest = object.manifest;\n if (manifest?.size == null || manifest.metadataSize == null) {\n throw new Error(\"Serialized object manifest is missing size or metadata_size\");\n }\n if (!Number.isSafeInteger(manifest.size) || manifest.size < 0) {\n throw new Error(\"Serialized object size must be a non-negative safe integer\");\n }\n if (!Number.isSafeInteger(manifest.metadataSize) || manifest.metadataSize < 0) {\n throw new Error(\"Serialized object metadata_size must be a non-negative safe integer\");\n }\n if (manifest.metadataSize > manifest.size) {\n throw new Error(\"Serialized object metadata_size cannot exceed size\");\n }\n if (typeof manifest.sha256Hash !== \"string\" || manifest.sha256Hash.length === 0) {\n throw new Error(\"Serialized object manifest is missing sha256_hash\");\n }\n const start = object.offset ?? 0;\n const bytes = await downloadBlobRange(blob, start, manifest.size, log, signal);\n throwIfAborted(signal);\n const hash = createHash(\"sha256\").update(bytes).digest(\"hex\");\n if (hash !== manifest.sha256Hash) {\n throw new Error(`Serialized object hash mismatch: expected ${manifest.sha256Hash}, got ${hash}`);\n }\n return {\n metadata: bytes.subarray(0, manifest.metadataSize),\n data: bytes.subarray(manifest.metadataSize),\n contentType: manifest.contentType,\n encoding: manifest.encoding,\n };\n}\n\nexport function deserializeValueFromProtocol(\n value: { data: Uint8Array; contentType?: string; encoding?: string | number },\n): unknown {\n if (enumIs(value.encoding, \"SERIALIZED_OBJECT_ENCODING_RAW\", 5)) {\n return new File(value.data, value.contentType ?? \"application/octet-stream\");\n }\n if (enumIs(value.encoding, \"SERIALIZED_OBJECT_ENCODING_UTF8_TEXT\", 2)) {\n return new TextDecoder(\"utf-8\", { fatal: true }).decode(value.data);\n }\n if (\n enumIs(value.encoding, \"SERIALIZED_OBJECT_ENCODING_UTF8_JSON\", 1) ||\n value.contentType?.toLowerCase().includes(\"json\")\n ) {\n return deserializeJSON(value.data);\n }\n throw new Error(`Unsupported serialized object encoding '${String(value.encoding)}'`);\n}\n\nexport function prepareSerializedObject(\n value: unknown,\n offset = 0,\n sourceFunctionCallId?: string,\n): PreparedSerializedObject {\n const serialized = serializeValue(value);\n const metadata = new TextEncoder().encode(JSON.stringify({\n format: \"tensorlake.typescript.value.v1\",\n }));\n const bytes = concatenate([metadata, serialized.data]);\n return {\n bytes,\n object: {\n offset,\n manifest: {\n encoding: serialized.encoding === \"json\"\n ? \"SERIALIZED_OBJECT_ENCODING_UTF8_JSON\"\n : \"SERIALIZED_OBJECT_ENCODING_RAW\",\n encodingVersion: 0,\n size: bytes.byteLength,\n metadataSize: metadata.byteLength,\n sha256Hash: createHash(\"sha256\").update(bytes).digest(\"hex\"),\n ...(serialized.encoding === \"raw\" ? { contentType: serialized.contentType } : {}),\n sourceFunctionCallId,\n },\n },\n };\n}\n\nexport function prepareTextObject(value: string): PreparedSerializedObject {\n const bytes = new TextEncoder().encode(value);\n return {\n bytes,\n object: {\n offset: 0,\n manifest: {\n encoding: \"SERIALIZED_OBJECT_ENCODING_UTF8_TEXT\",\n encodingVersion: 0,\n size: bytes.byteLength,\n metadataSize: 0,\n sha256Hash: createHash(\"sha256\").update(bytes).digest(\"hex\"),\n },\n },\n };\n}\n\nasync function uploadChunk(\n chunk: BlobChunk,\n data: Uint8Array,\n index: number,\n offset: number,\n log?: BlobLog,\n signal?: AbortSignal,\n): Promise<BlobChunk> {\n throwIfAborted(signal);\n if (!chunk.uri) throw new Error(\"Writable BLOB chunk has no URI\");\n const fields = {\n chunk_index: index,\n chunk_offset: offset,\n upload_bytes: data.byteLength,\n chunk_capacity: chunk.size ?? 0,\n uri_kind: uriKind(chunk.uri),\n };\n const startedAt = Date.now();\n log?.(\"upload chunk starting\", fields);\n if (chunk.uri.startsWith(\"file://\")) {\n const filePath = fileURLToPath(chunk.uri);\n let file;\n try {\n file = await open(filePath, \"r+\");\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n file = await open(filePath, \"w+\");\n }\n try {\n throwIfAborted(signal);\n await file.write(data, 0, data.byteLength, offset);\n throwIfAborted(signal);\n } finally {\n await file.close();\n }\n log?.(\"upload chunk completed\", { ...fields, duration_ms: Date.now() - startedAt });\n return { ...chunk, size: data.byteLength };\n }\n const response = await fetchWithRetries(chunk.uri, {\n method: \"PUT\",\n ...(data.byteLength === 0 ? {} : {\n body: Uint8Array.from(data).buffer,\n }),\n }, log, fields, signal);\n throwIfAborted(signal);\n const uploaded = {\n ...chunk,\n size: data.byteLength,\n etag: response.headers.get(\"etag\") ?? undefined,\n };\n log?.(\"upload chunk completed\", {\n ...fields,\n status_code: response.status,\n has_etag: uploaded.etag != null,\n duration_ms: Date.now() - startedAt,\n });\n return uploaded;\n}\n\nexport async function uploadBlob(\n blob: BlobValue,\n data: Uint8Array,\n log?: BlobLog,\n signal?: AbortSignal,\n): Promise<BlobValue> {\n throwIfAborted(signal);\n const chunks = blob.chunks ?? [];\n const capacity = chunks.reduce((total, chunk) => total + (chunk.size ?? 0), 0);\n if (data.byteLength > capacity) throw new Error(`BLOB capacity ${capacity} is smaller than ${data.byteLength}`);\n let offset = 0;\n const uploaded: BlobChunk[] = [];\n for (const [index, chunk] of chunks.entries()) {\n const size = Math.min(chunk.size ?? 0, data.byteLength - offset);\n if (size <= 0) break;\n uploaded.push(await uploadChunk(\n chunk,\n data.subarray(offset, offset + size),\n index,\n offset,\n log,\n signal,\n ));\n offset += size;\n }\n if (data.byteLength === 0 && chunks.length > 0) {\n uploaded.push(await uploadChunk(chunks[0], data, 0, 0, log, signal));\n }\n throwIfAborted(signal);\n if (offset !== data.byteLength) throw new Error(`Only uploaded ${offset} of ${data.byteLength} bytes`);\n log?.(\"upload blob completed\", {\n blob_id: blob.id,\n chunk_count: uploaded.length,\n uploaded_bytes: data.byteLength,\n });\n return { ...blob, chunks: uploaded };\n}\n\nexport function joinPrepared(values: PreparedSerializedObject[]): Uint8Array {\n return concatenate(values.map((value) => value.bytes));\n}\n","import { randomUUID } from \"node:crypto\";\nimport { writeStructuredOutput } from \"./safe-output.js\";\n\nexport function printCloudEvent(\n data: Record<string, unknown>,\n options: { type?: string; source?: string; message?: string } = {},\n): void {\n writeStructuredOutput(\"stdout\", () => ({\n specversion: \"1.0\",\n id: randomUUID(),\n timestamp: new Date().toISOString(),\n type: options.type ?? \"ai.tensorlake.event\",\n source: options.source ?? \"/tensorlake/function_executor/events\",\n data,\n ...(options.message == null ? {} : { message: options.message }),\n }));\n}\n"],"mappings":";AAAA,SAAS,kBAAkB;;;ACA3B,SAAS,qBAAqB;AAC9B,SAAS,cAAc;;;ACmChB,IAAM,mBAAmB,uBAAO,IAAI,6BAA6B;AACjE,IAAM,oBAAoB,uBAAO,IAAI,4BAA4B;;;ACpCjE,IAAM,cAAsB;AAE5B,IAAM,UACX,QAAQ,IAAI,sBAAsB;AAC7B,IAAM,UAAU,QAAQ,IAAI,sBAAsB;AAClD,IAAM,YAAY,QAAQ,IAAI,sBAAsB;AACpD,IAAM,oBACX,QAAQ,IAAI,gCAAgC;;;ACL9C,SAAS,oBAAoB,KAAqB;AAChD,SAAO,IAAI,SAAS,GAAG,IAAI,IAAI,MAAM,GAAG,EAAE,IAAI;AAChD;AA2DO,SAAS,mBACd,UACA,WAC0F;AAC1F,MAAI;AACF,UAAM,SAAS,IAAI,IAAI,QAAQ;AAC/B,UAAM,OAAO,OAAO;AAEpB,QAAI,SAAS,eAAe,SAAS,aAAa;AAChD,aAAO;AAAA,QACL,SAAS,oBAAoB,QAAQ;AAAA,QACrC,YAAY,GAAG,SAAS;AAAA,QACxB,iBAAiB;AAAA,MACnB;AAAA,IACF;AAEA,UAAM,OAAO,OAAO,OAAO,IAAI,OAAO,IAAI,KAAK;AAC/C,WAAO;AAAA,MACL,SAAS,GAAG,OAAO,QAAQ,KAAK,IAAI,GAAG,IAAI;AAAA,MAC3C,YAAY;AAAA,MACZ,iBAAiB;AAAA,IACnB;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,MACL,SAAS,GAAG,oBAAoB,QAAQ,CAAC,IAAI,SAAS;AAAA,MACtD,YAAY;AAAA,MACZ,iBAAiB;AAAA,IACnB;AAAA,EACF;AACF;;;AHvEO,IAAM,qBAAN,MAAyB;AAAA,EAS9B,YACmB,aAAiC,MAChD,cAAc,YAAY,GAAG,EAAE;AAAA,IAC7B;AAAA,EACF,GACF;AAJiB;AAAA,EAIhB;AAAA,EAbK;AAAA,EACA,SAAS;AAAA,EACT,aAAa,oBAAI,IAAY;AAAA,EAC7B,UAAU,oBAAI,IAAyB;AAAA,EACvC,aAAa,IAAI;AAAA,IAA6B,CAAC,OACrD,KAAK,QAAQ,EAAE;AAAA,EACjB;AAAA,EASA,OACE,MACA,MACA,QACQ;AACR,UAAM,SAAuB,EAAE,IAAI,KAAK,UAAU,MAAM,MAAM,OAAO;AACrE,SAAK,WAAW,SAAS,QAAQ,OAAO,EAAE;AAC1C,QAAI,SAAS;AACb,WAAO,IAAI;AAAA,MACT,CAAC;AAAA,MACD;AAAA,QACE,KAAK,CAAC,SAAS,WAAW;AACxB,cAAI,WAAW,OAAQ,QAAO;AAC9B,cAAI,WAAW;AACb,mBAAO,MAAM;AACX,uBAAS;AACT,mBAAK,QAAQ,OAAO,EAAE;AAAA,YACxB;AACF,cAAI,WAAW;AACb,mBAAO,IAAI,cAAyB;AAClC,kBAAI,OAAQ,OAAM,IAAI,MAAM,oCAAoC;AAChE,qBAAO,KAAK,OAAO,4BAA4B,WAAW,MAAM;AAAA,YAClE;AACF,cAAI,WAAW;AACb,mBAAO,MACL,mBAAmB,OAAO,KAAK,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE;AACzD,cAAI,OAAO,WAAW,SAAU,QAAO;AACvC,iBAAO,IAAI,aAAwB;AACjC,gBAAI;AACF,qBAAO,QAAQ;AAAA,gBACb,IAAI,MAAM,oCAAoC;AAAA,cAChD;AACF,kBAAM,OACJ,OAAO,SAAS,GAAG,EAAE,MAAM,aACtB,SAAS,IAAI,IACd;AACN,mBAAO,KAAK,KAAK,QAAQ,QAAQ,UAAU,IAAI;AAAA,UACjD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,KACE,QACA,QACA,MACA,MACiB;AACjB,UAAM,KAAK,KAAK;AAChB,QAAI;AACJ,UAAM,UAA2B,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChE,UAAI;AACF,iBAAS,KAAK,UAAU;AACxB,aAAK,QAAQ,IAAI,IAAI,EAAE,SAAS,QAAQ,MAAM,OAAO,CAAC;AACtD,eAAO,IAAI;AACX,YAAI,OAAQ,MAAK,SAAS,QAAQ,MAAM;AACxC,aAAK,KAAK,QAAQ;AAAA,UAChB,MAAM;AAAA,UACN;AAAA,UACA,UAAU,QAAQ;AAAA,UAClB;AAAA,UACA;AAAA,UACA,QAAQ,CAAC,CAAC;AAAA,QACZ,CAAC;AAAA,MACH,SAAS,OAAO;AACd,aAAK,QAAQ,OAAO,EAAE;AACtB,aAAK,YAAY;AACjB,eAAO,KAAK;AAAA,MACd;AAAA,IACF,CAAC;AACD,YAAQ,gBAAgB,IAAI,MAAM;AAChC,YAAM,UAAU,KAAK,QAAQ,IAAI,EAAE;AACnC,UAAI,WAAW,QAAQ;AACrB,gBAAQ,OAAO;AACf,aAAK,KAAK,QAAQ,EAAE,MAAM,UAAU,GAAG,CAAC;AAAA,MAC1C;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,YAAoB;AAC1B,QAAI,KAAK,OAAQ,QAAO,KAAK;AAC7B,UAAM,SAAS,IAAI,OAAO,KAAK,WAAW,GAAG;AAAA;AAAA;AAAA,MAG3C,UAAU,CAAC;AAAA,MACX,KAAK,EAAE,GAAG,QAAQ,KAAK,cAAc,GAAG;AAAA,MACxC,MAAM;AAAA,IACR,CAAC;AACD,SAAK,SAAS;AACd,WAAO,GAAG,WAAW,CAAC,YAA4B;AAChD,YAAM,UAAU,KAAK,QAAQ,IAAI,QAAQ,EAAE;AAC3C,UAAI,CAAC,WAAW,KAAK,WAAW,OAAQ;AACxC,UAAI,QAAQ,SAAS,SAAS;AAG5B,gBAAQ,QAAQ,EACb,KAAK,MAAM,QAAQ,OAAO,QAAQ,KAAK,CAAC,EACxC;AAAA,UACC,MAAM;AACJ,gBAAI,KAAK,WAAW;AAClB,mBAAK,KAAK,QAAQ,EAAE,MAAM,OAAO,IAAI,QAAQ,GAAG,CAAC;AAAA,UACrD;AAAA,UACA,CAAC,UAAiB;AAChB,iBAAK,KAAK,QAAQ,EAAE,MAAM,UAAU,IAAI,QAAQ,GAAG,CAAC;AACpD,oBAAQ,OAAO,KAAK;AAAA,UACtB;AAAA,QACF;AACF;AAAA,MACF;AACA,WAAK,QAAQ,OAAO,QAAQ,EAAE;AAC9B,UAAI,QAAQ,SAAS,SAAS;AAC5B,cAAM,QAAQ,IAAI,MAAM,QAAQ,MAAM,OAAO;AAC7C,cAAM,OAAO,QAAQ,MAAM;AAC3B,cAAM,QAAQ,QAAQ,MAAM,SAAS,MAAM;AAC3C,gBAAQ,OAAO,KAAK;AAAA,MACtB,OAAO;AACL,gBAAQ,QAAQ,QAAQ,KAAK;AAAA,MAC/B;AACA,WAAK,YAAY;AAAA,IACnB,CAAC;AACD,UAAM,OAAO,CAAC,UAAiB;AAC7B,UAAI,KAAK,WAAW,OAAQ;AAC5B,WAAK,SAAS;AACd,WAAK,WAAW,MAAM;AACtB,iBAAW,WAAW,KAAK,QAAQ,OAAO,EAAG,SAAQ,OAAO,KAAK;AACjE,WAAK,QAAQ,MAAM;AAGnB,WAAK,OAAO,UAAU;AAAA,IACxB;AACA,WAAO,GAAG,SAAS,IAAI;AACvB,WAAO,GAAG,gBAAgB,IAAI;AAC9B,WAAO;AAAA,MAAG;AAAA,MAAQ,CAAC,SACjB;AAAA,QACE,IAAI;AAAA,UACF,oCAAoC,IAAI;AAAA,QAC1C;AAAA,MACF;AAAA,IACF;AACA,WAAO,MAAM;AACb,WAAO;AAAA,EACT;AAAA,EAEQ,SAAS,QAAsB,QAAsB;AAC3D,QAAI,KAAK,WAAW,IAAI,OAAO,EAAE,EAAG;AACpC,QAAI,OAAO,OAAQ,MAAK,SAAS,OAAO,QAAQ,MAAM;AACtD,SAAK,KAAK,QAAQ;AAAA,MAChB,MAAM;AAAA,MACN,QAAQ,EAAE,IAAI,OAAO,IAAI,MAAM,OAAO,MAAM,MAAM,OAAO,KAAK;AAAA,MAC9D,UAAU,OAAO,QAAQ;AAAA,IAC3B,CAAC;AACD,SAAK,WAAW,IAAI,OAAO,EAAE;AAAA,EAC/B;AAAA,EAEQ,QAAQ,UAAwB;AACtC,QAAI,KAAK,UAAU,KAAK,WAAW,OAAO,QAAQ;AAChD,WAAK,KAAK,KAAK,QAAQ,EAAE,MAAM,WAAW,SAAS,CAAC;AAAA,EACxD;AAAA,EAEQ,KAAK,QAAgB,SAA8B;AACzD,WAAO,YAAY,OAAO;AAAA,EAC5B;AAAA,EACQ,cAAoB;AAC1B,QAAI,KAAK,QAAQ,SAAS,EAAG,MAAK,QAAQ,MAAM;AAAA,EAClD;AACF;AAkCA,IAAM,aAAa,uBAAO;AAAA,EACxB,4BAA4B,QAAyC,WAAW,SAAe;AACjG;AACA,IAAM,WAAW;AAUV,SAAS,sBAAsB,YAAsC;AAC1E,WAAS,UAAU,MAAM,IAAI,mBAAmB,UAAU;AAC5D;;;AD5PA,OAAOA,WAAU;AACjB,SAAS,iBAAAC,sBAAqB;AAC9B,YAAYC,WAAU;AACtB,SAAS,gBAAgB;AACzB,SAAS,oBAAoB;;;AKQ7B,IAAM,sBAAsB,KAAK;AAEjC,SAAS,cAAc,QAA4C;AAIjE,SAAO,GAAG,SAAS,MAAM,MAAS;AAClC,SAAO;AAAA;AAAA;AAAA,IAGL,OAAO,OAAO,MAAM,KAAK,MAAM;AAAA,EACjC;AACF;AAEA,IAAM,iBAAiC;AAAA,EACrC,QAAQ,cAAc,QAAQ,MAAM;AAAA,EACpC,QAAQ,cAAc,QAAQ,MAAM;AACtC;AAMO,SAAS,sBACd,aACA,cACM;AACN,MAAI;AACF,UAAM,aAAa,oBAAoB,aAAa,CAAC;AACrD,QAAI,cAAc,KAAM;AACxB,mBAAe,WAAW,EAAE,MAAM,GAAG,UAAU;AAAA,GAAM,MAAM,MAAS;AAAA,EACtE,QAAQ;AAAA,EAGR;AACF;;;ACjDA,SAAS,OAAO,SAAS,UAAU,IAAI,iBAAiB;AACxD,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB,aAAa,mBAAmB;AAC1D,YAAY,UAAU;AACtB,SAAS,iBAAiB;;;ACN1B,IAAM,wBAAwB,uBAAO,IAAI,4CAA4C;AACrF,IAAM,sBAAsB,uBAAO,IAAI,0CAA0C;AACjF,IAAM,uBAAuB,uBAAO,IAAI,2CAA2C;AACnF,IAAM,sBAAsB,uBAAO,IAAI,0CAA0C;AAE1E,IAAM,6BAAN,cAAyC,MAAM;AAAA,EACpD,YAAY,SAAiB,SAA+B;AAC1D,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,gBAAN,MAAM,uBAAsB,2BAA2B;AAAA,EAC5D,CAAU,qBAAqB,IAAI;AAAA,EAEnC,QAAQ,OAAO,WAAW,EAAE,OAAyB;AACnD,QAAI,SAAS,gBAAe;AAC1B,aAAO,SAAS,UAAU,OAAO,WAAW,EAAE,KAAK,MAAM,KAAK;AAAA,IAChE;AACA,WAAO,gBAAgB,KAAK;AAAA,EAC9B;AAAA,EAEA,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAGA,SAAS,gBAAgB,OAAwC;AAC/D,MAAI,OAAO,UAAU,YAAY,SAAS,KAAM,QAAO;AACvD,QAAM,YAAY;AAClB,SAAO,UAAU,qBAAqB,MAAM,QAAQ,OAAO,UAAU,YAAY;AACnF;AAEO,IAAM,qBAAN,cAAiC,2BAA2B;AAAA,EACjE,YAAY,SAAiB,SAA+B;AAC1D,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,uBAAN,cAAmC,2BAA2B;AAAA,EACnE,YAAY,SAAiB,SAA+B;AAC1D,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,gBAAN,MAAM,uBAAsB,2BAA2B;AAAA,EAC5D,CAAU,oBAAoB,IAAI;AAAA,EAElC,QAAQ,OAAO,WAAW,EAAE,OAAyB;AACnD,QAAI,SAAS,gBAAe;AAC1B,aAAO,SAAS,UAAU,OAAO,WAAW,EAAE,KAAK,MAAM,KAAK;AAAA,IAChE;AACA,WAAO,gBAAgB,KAAK;AAAA,EAC9B;AAAA,EAEA,YAAY,SAAiB,SAA+B;AAC1D,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,eAAN,MAAM,sBAAqB,2BAA2B;AAAA,EAC3D,CAAU,mBAAmB,IAAI;AAAA,EAEjC,QAAQ,OAAO,WAAW,EAAE,OAAyB;AACnD,QAAI,SAAS,eAAc;AACzB,aAAO,SAAS,UAAU,OAAO,WAAW,EAAE,KAAK,MAAM,KAAK;AAAA,IAChE;AACA,WAAO,eAAe,KAAK;AAAA,EAC7B;AAAA,EAEA,cAAc;AACZ,UAAM,YAAY;AAClB,SAAK,OAAO;AAAA,EACd;AACF;AAGA,SAAS,eAAe,OAAuC;AAC7D,MAAI,OAAO,UAAU,YAAY,SAAS,KAAM,QAAO;AACvD,QAAM,YAAY;AAClB,SAAO,UAAU,mBAAmB,MAAM,QAAQ,OAAO,UAAU,YAAY;AACjF;AAGA,SAAS,gBAAgB,OAAwC;AAC/D,MAAI,OAAO,UAAU,YAAY,SAAS,KAAM,QAAO;AACvD,QAAM,YAAY;AAClB,SAAO,UAAU,oBAAoB,MAAM,QAAQ,OAAO,UAAU,YAAY;AAClF;AAEO,IAAM,eAAN,MAAM,sBAAqB,2BAA2B;AAAA,EAC3D,CAAU,mBAAmB,IAAI;AAAA,EAEjC,QAAQ,OAAO,WAAW,EAAE,OAAyB;AACnD,QAAI,SAAS,eAAc;AACzB,aAAO,SAAS,UAAU,OAAO,WAAW,EAAE,KAAK,MAAM,KAAK;AAAA,IAChE;AACA,WAAO,eAAe,KAAK;AAAA,EAC7B;AAAA,EAEA,YAAY,SAAiB,SAA+B;AAC1D,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EACd;AACF;AAGO,SAAS,eAAe,OAAuC;AACpE,MAAI,OAAO,UAAU,YAAY,SAAS,KAAM,QAAO;AACvD,QAAM,YAAY;AAClB,SAAO,UAAU,mBAAmB,MAAM,QAAQ,OAAO,UAAU,YAAY;AACjF;AAEO,IAAM,sBAAN,cAAkC,2BAA2B;AAAA,EAClE,YAAY,UAAU,8DAA8D;AAClF,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;;;AC9GA,IAAM,eAAe,uBAAO,IAAI,qCAAqC;AAErE,SAAS,WAA0B;AACjC,QAAM,SAAS;AACf,SAAO,YAAY,MAAM,EAAE,WAAW,oBAAI,IAAI,GAAG,cAAc,oBAAI,IAAI,EAAE;AACzE,SAAO,OAAO,YAAY;AAC5B;AAgCO,SAAS,mBAAqC;AACnD,QAAM,QAAQ,SAAS;AACvB,SAAO;AAAA,IACL,WAAW,IAAI,IAAI,MAAM,SAAS;AAAA,IAClC,cAAc,IAAI,IAAI,MAAM,YAAY;AAAA,EAC1C;AACF;AAEO,SAAS,gBAAgB,UAAkC;AAChE,QAAM,QAAQ,SAAS;AACvB,QAAM,UAAU,MAAM;AACtB,QAAM,aAAa,MAAM;AACzB,aAAW,CAAC,MAAM,UAAU,KAAK,SAAS,UAAW,OAAM,UAAU,IAAI,MAAM,UAAU;AACzF,aAAW,CAAC,MAAM,UAAU,KAAK,SAAS,aAAc,OAAM,aAAa,IAAI,MAAM,UAAU;AACjG;;;ACjEA,SAAS,eAAe,YAAY,oBAAAC,yBAAwB;AAC5D,SAAS,cAAAC,aAAY,cAAAC,mBAAkB;;;ACDvC,SAAS,mBAAmB,wBAAwB;AACpD,SAAS,kBAAkB;;;ACD3B,OAAO,SAAoC;AAC3C,OAAO,aAAa;;;ACCpB,IAAM,aAAa,uBAAO,IAAI,iCAAiC;AAExD,IAAM,OAAN,MAAM,MAAK;AAAA,EAChB,CAAU,UAAU,IAAI;AAAA,EACf;AAAA,EACA;AAAA,EAET,QAAQ,OAAO,WAAW,EAAE,OAAyB;AACnD,QAAI,SAAS,OAAM;AACjB,aAAO,SAAS,UAAU,OAAO,WAAW,EAAE,KAAK,MAAM,KAAK;AAAA,IAChE;AACA,WAAO,OAAO,KAAK;AAAA,EACrB;AAAA,EAEA,YAAY,SAAmC,aAAqB;AAClE,QAAI,CAAC,YAAY,KAAK,GAAG;AACvB,YAAM,IAAI,cAAc,kCAAkC;AAAA,IAC5D;AACA,SAAK,UAAU,mBAAmB,aAAa,UAAU,IAAI,WAAW,OAAO;AAC/E,SAAK,cAAc;AAAA,EACrB;AACF;AAUO,SAAS,OAAO,OAA+B;AACpD,MAAI,OAAO,UAAU,YAAY,SAAS,KAAM,QAAO;AACvD,QAAM,YAAY;AAClB,SAAO,UAAU,UAAU,MAAM,QAC5B,UAAU,mBAAmB,cAC7B,OAAO,UAAU,gBAAgB,YACjC,UAAU,YAAY,KAAK,EAAE,SAAS;AAC7C;;;ACxCA,IAAM,kBAAkB,uBAAO,IAAI,sCAAsC;AAElE,IAAM,WAAN,MAAM,UAAS;AAAA,EACpB,CAAU,eAAe,IAAI;AAAA,EACpB;AAAA,EACA;AAAA,EAET,QAAQ,OAAO,WAAW,EAAE,OAAyB;AACnD,QAAI,SAAS,WAAU;AACrB,aAAO,SAAS,UAAU,OAAO,WAAW,EAAE,KAAK,MAAM,KAAK;AAAA,IAChE;AACA,WAAO,WAAW,KAAK;AAAA,EACzB;AAAA,EAEA,YACE,SACA,aACA;AACA,SAAK,UAAU,mBAAmB,aAC9B,UACA,IAAI,WAAW,OAAO;AAC1B,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,KAAK,WAAW,SAAiB;AAC/B,WAAO,IAAI,YAAY,UAAU,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,KAAK,OAAO;AAAA,EACvE;AAAA,EAEA,OAAuB;AACrB,WAAO,KAAK,MAAM,KAAK,KAAK,CAAC;AAAA,EAC/B;AACF;AASO,SAAS,WAAW,OAAmC;AAC5D,MAAI,OAAO,UAAU,YAAY,SAAS,KAAM,QAAO;AACvD,QAAM,YAAY;AAClB,SAAO,UAAU,eAAe,MAAM,QACjC,UAAU,mBAAmB,eAE9B,UAAU,gBAAgB,UACvB,OAAO,UAAU,gBAAgB;AAE1C;;;AFrCA,IAAM,YAAY,IAAI,IAAI,EAAE,WAAW,MAAM,QAAQ,MAAM,CAAC;AAC5D,IAAM,UAAU,IAAI,QAAQ,EAAE,WAAW,MAAM,QAAQ,MAAM,CAAC;AAoP9D,IAAM,iBAAiB,oBAAI,QAAiC;AAE5D,SAAS,iBAAiB,YAAyC;AAKjE,QAAM,UAAU,WAAW;AAC3B,QAAM,SAAS,OAAO,YAAY,YAAY,wBAAwB,KAAK,OAAO,IAC9E,YACA;AACJ,QAAM,WAAW,OAAO,QAAQ,UAAU;AAC1C,SAAO;AAAA,IACL;AAAA,IACA,YAAY,CAAC,WAAW,OAAO,WAAW,QAAQ,EAAE,WAAW,KAAK,CAAC;AAAA,EACvE;AACF;AAEO,SAAS,mBAAsB,aAAwB,OAAgB,OAAkB;AAC9F,MAAI,YAAY,OAAO;AACrB,QAAI,CAAC,OAAO,KAAK,GAAG;AAClB,YAAM,IAAI,cAAc,GAAG,KAAK,4BAA4B;AAAA,IAC9D;AACA,WAAO;AAAA,EACT;AACA,MAAI,YAAY,WAAW;AACzB,QAAI,CAAC,WAAW,KAAK,GAAG;AACtB,YAAM,IAAI,cAAc,GAAG,KAAK,gCAAgC;AAAA,IAClE;AACA,WAAO;AAAA,EACT;AACA,MAAI,OAAO,KAAK,GAAG;AACjB,UAAM,IAAI,cAAc,GAAG,KAAK,+CAA+C;AAAA,EACjF;AACA,MAAI,WAAW,KAAK,GAAG;AACrB,UAAM,IAAI;AAAA,MACR,GAAG,KAAK;AAAA,IACV;AAAA,EACF;AACA,MAAI,SAAS,eAAe,IAAI,WAAqB;AACrD,MAAI,UAAU,MAAM;AAClB,QAAI;AACF,eAAS,iBAAiB,YAAY,UAAU;AAAA,IAClD,SAAS,OAAO;AACd,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,YAAM,IAAI,cAAc,GAAG,KAAK,iCAAiC,OAAO,EAAE;AAAA,IAC5E;AACA,mBAAe,IAAI,aAAuB,MAAM;AAAA,EAClD;AACA,MAAI,CAAC,OAAO,SAAS,KAAK,GAAG;AAC3B,UAAM,UAAU,OAAO,WAAW,OAAO,SAAS,MAAM;AACxD,UAAM,IAAI,cAAc,GAAG,KAAK,+BAA+B,OAAO,EAAE;AAAA,EAC1E;AACA,SAAO;AACT;;;AD5MA,IAAM,kBAAiC,uBAAO;AAAA,EAC5C;AACF;AA8CO,IAAM,2BAA2B,uBAAO;AAAA,EAC7C;AACF;AAKO,IAAM,gCAAgC,uBAAO;AAAA,EAClD;AACF;AAgBA,IAAM,+BAA+B,uBAAO;AAAA,EAC1C;AACF;AAEA,IAAM,2BAA2B,uBAAO;AAAA,EACtC;AACF;AAEA,IAAM,gCAAgC,uBAAO;AAAA,EAC3C;AACF;AAEA,IAAM,gCAAgC,uBAAO;AAAA,EAC3C;AACF;AAEA,IAAM,uCAAuC,uBAAO;AAAA,EAClD;AACF;AAwCA,SAAS,iBAAqD;AAC5D,QAAM,SAAS;AAGf,SAAO,4BAA4B,MAAM,IAAI,kBAAmC;AAChF,SAAO,OAAO,4BAA4B;AAC5C;AAEO,SAAS,yBAAsD;AACpE,SAAO,eAAe,EAAE,SAAS;AACnC;AAEO,SAAS,uBACd,SACA,UACY;AACZ,SAAO,eAAe,EAAE,IAAI,SAAS,QAAQ;AAC/C;AAwNA,SAAS,kBAAkB,OAAyB;AAClD,MAAK,OAAO,UAAU,YAAY,OAAO,UAAU,cAAe,SAAS,MAAM;AAC/E,WAAO;AAAA,EACT;AACA,SAAO,wBAAwB,EAAE,IAAI,KAAK;AAC5C;AAEO,SAAS,0BAA0B,OAAyB;AACjE,QAAM,aAAa,6BAA6B,KAAK;AACrD,SAAO,YAAY,aAAa,QAC1B,YAAY,gBAAgB,QAAQ,CAAC,WAAW,aAAa;AACrE;AAEA,SAAS,0BAAsE;AAC7E,QAAM,SAAS;AAGf,SAAO,6BAA6B,MAClC,oBAAI,QAA2C;AACjD,SAAO,OAAO,6BAA6B;AAC7C;AAEA,SAAS,6BAAsD;AAC7D,SAAO;AAAA,IACL,uBAAuB,CAAC;AAAA,IACxB,wBAAwB,CAAC;AAAA,EAC3B;AACF;AAEA,SAAS,2BAA2B,OAAqD;AACvF,SAAO,6BAA6B,KAAK,GAAG;AAC9C;AAEA,SAAS,6BACP,OACuC;AACvC,MAAK,OAAO,UAAU,YAAY,OAAO,UAAU,cAAe,SAAS,MAAM;AAC/E,WAAO;AAAA,EACT;AACA,SAAO,wBAAwB,EAAE,IAAI,KAAK;AAC5C;AAEO,SAAS,wBACd,OACA,QACG;AACH,QAAMC,YAAW,wBAAwB;AACzC,QAAM,WAAW,UAAU,OACvBA,UAAS,IAAI,KAAK,GAAG,YAAY,2BAA2B,IAC5DA,UAAS,IAAI,MAAM,GAAG,YAAY,2BAA2B;AACjE,EAAAA,UAAS,IAAI,OAAO,EAAE,SAAS,CAAC;AAChC,MAAI,UAAU,QAAQ,CAACA,UAAS,IAAI,MAAM,EAAG,CAAAA,UAAS,IAAI,QAAQ,EAAE,SAAS,CAAC;AAC9E,SAAO;AACT;AAEA,SAAS,gCAAkD,OAAa;AACtE,QAAMA,YAAW,wBAAwB;AACzC,EAAAA,UAAS,IAAI,OAAO;AAAA,IAClB,UAAUA,UAAS,IAAI,KAAK,GAAG,YAAY,2BAA2B;AAAA,IACtE,UAAU;AAAA,EACZ,CAAC;AACD,SAAO;AACT;AAEA,SAAS,uBAAyC,OAAU,QAAmB;AAC7E,QAAM,aAAa,wBAAwB,EAAE,IAAI,MAAM;AACvD,MAAI,cAAc,KAAM,QAAO;AAC/B,0BAAwB,EAAE,IAAI,OAAO,UAAU;AAC/C,MAAI,WAAW,gBAAgB,MAAM;AACnC,eAAW,SAAS,uBAAuB,KAAK;AAAA,MAC9C;AAAA,MACA,gBAAgB,iBAAiB;AAAA,IACnC,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAUO,SAAS,4BACd,OACA,QACqB;AACrB,QAAM,WAAW,2BAA2B,KAAK;AACjD,MAAI,YAAY,MAAM;AACpB,WAAO;AAAA,MACL,QAAQ,MAAM;AAAA,MACd,MAAM,CAAC,WAAW;AAAA,IACpB;AAAA,EACF;AACA,QAAM,eAAgD;AAAA,IACpD,QAAQ;AAAA,IACR;AAAA,EACF;AACA,QAAM,kBAAkB,SAAS,uBAAuB;AAAA,IAAU,CAAC,gBACjE,YAAY,mBAAmB,iBAAiB;AAAA,EAClD;AACA,MAAI,mBAAmB,GAAG;AACxB,UAAM,CAAC,WAAW,IAAI,SAAS,uBAAuB,OAAO,iBAAiB,CAAC;AAC/E,4BAAwB,EAAE,IAAI,YAAY,OAAO;AAAA,MAC/C;AAAA,MACA,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AACA,QAAM,mBAAmB,SAAS,sBAAsB;AAAA,IAAU,CAAC,gBACjE,CAAC,YAAY,MAAM,WAChB,YAAY,mBAAmB,iBAAiB;AAAA,EACrD;AACA,MAAI,oBAAoB,GAAG;AACzB,UAAM,CAAC,WAAW,IAAI,SAAS,sBAAsB,OAAO,kBAAkB,CAAC;AAC/E,uCAAmC,cAAc,YAAY,KAAK;AAAA,EACpE;AACA,SAAO;AAAA,IACL,QAAQ,MAAM,0BAA0B,YAAY;AAAA,IACpD,MAAM,CAAmB,WAAiB;AACxC,8BAAwB,EAAE,IAAI,QAAQ;AAAA,QACpC;AAAA,QACA,cAAc;AAAA,MAChB,CAAC;AACD,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,mCACP,cACA,OACM;AACN,MAAI,CAAC,aAAa,UAAU,MAAM,QAAS;AAC3C,4BAA0B,YAAY;AACtC,eAAa,OAAO;AACtB;AAEA,SAAS,0BAA0B,cAAqD;AACtF,MAAI,CAAC,aAAa,OAAQ;AAC1B,eAAa,SAAS;AACxB;AAEA,SAAS,sBACP,SACA,QACA,mBACA,YACM;AACN,QAAM,QAA+B;AAAA,IACnC,SAAS;AAAA,IACT,UAAU,oBAAI,IAA6B;AAAA,EAC7C;AACA,MAAI,YAAY;AAKd,oCAAgC,MAAM;AAAA,EACxC;AACA,QAAM,iBAAiB,iBAAiB;AACxC,aAAW,aAAa,mBAAmB;AACzC,UAAM,aAAa,6BAA6B,SAAS;AACzD,QAAI,cAAc,KAAM;AACxB,QAAI,WAAW,gBAAgB,MAAM;AACnC,yCAAmC,WAAW,cAAc,KAAK;AAAA,IACnE,OAAO;AACL,iBAAW,SAAS,sBAAsB,KAAK;AAAA,QAC7C;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AACA,QAAI,MAAM,SAAS,IAAI,WAAW,QAAQ,EAAG;AAC7C,UAAM,EAAE,SAAS,IAAI;AACrB,UAAM,SAAS,IAAI,QAAQ;AAAA,EAC7B;AACA,QAAM,SAAS,MAAM;AACnB,QAAI,MAAM,QAAS;AACnB,UAAM,UAAU;AAChB,eAAW,YAAY,MAAM,UAAU;AACrC,eAAS,QAAQ,SAAS,sBAAsB,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AAClF,YAAI,SAAS,sBAAsB,KAAK,EAAE,UAAU,OAAO;AACzD,mBAAS,sBAAsB,OAAO,OAAO,CAAC;AAAA,QAChD;AAAA,MACF;AAAA,IACF;AACA,UAAM,SAAS,MAAM;AAAA,EACvB;AAKA,MAAI,QAAQ,yBAAyB,QAAQ,MAAM,MAAM,KAAM,QAAO;AACxE;AAUA,SAAS,4BACP,MAC6B;AAC7B,MAAI;AACJ,QAAM,mBAAmB,IAAI,QAAc,CAAC,YAAY;AACtD,qBAAiB;AAAA,EACnB,CAAC;AACD,MAAI;AACJ,MAAI,mBAAmB;AACvB,MAAI,iBAAiB;AACrB,MAAI,UAAU;AACd,QAAM,cAAc,MAAM;AACxB,QAAI,QAAS;AACb,UAAM,qBAAqB,SAAS,QAChC,kBAAkB,QAAQ,mBAAmB,iBAC7C,SAAS,QACP,iBAAiB,KACb,kBAAkB,QAAQ,qBAAqB,iBACnD,kBAAkB,QACf,mBAAmB,mBAAmB;AAC/C,QAAI,CAAC,mBAAoB;AACzB,cAAU;AACV,mBAAe;AAAA,EACjB;AACA,SAAO;AAAA,IACL;AAAA,IACA,6BAA6B;AAAA,IAC7B,oBAAoB,MAAM;AACxB,0BAAoB;AACpB,kBAAY;AAAA,IACd;AAAA,IACA,kBAAkB,MAAM;AACtB,wBAAkB;AAClB,kBAAY;AAAA,IACd;AAAA,IACA,iBAAiB,CAAC,UAAU;AAC1B,uBAAiB;AACjB,kBAAY;AAAA,IACd;AAAA,EACF;AACF;AAEA,SAAS,iCACP,YACA,aACS;AACT,MACG,OAAO,eAAe,YAAY,OAAO,eAAe,cACtD,cAAc,MACjB;AACA,gBAAY,8BAA8B;AAC1C,WAAO;AAAA,EACT;AACA,MAAI,kBAAkB;AACtB,QAAM,WAAW,uBAAO,OAAO,IAAI;AACnC,SAAO,eAAe,UAAU,QAAQ;AAAA,IACtC,cAAc;AAAA,IACd,KAAK,MAAM;AACT,YAAM,OAAO,QAAQ,IAAI,YAAY,QAAQ,UAAU;AACvD,UAAI,OAAO,SAAS,WAAY,QAAO;AACvC,aAAO,SAAS,aAEd,aACA,YACS;AACT,eAAO,QAAQ,MAAM,MAAM,YAAY;AAAA,UACrC,SAAS,oBAAmC,OAAyB;AACnE,gBAAI,CAAC,iBAAiB;AACpB,gCAAkB;AAClB,0BAAY,mBAAmB;AAAA,YACjC;AACA,mBAAO,OAAO,gBAAgB,aAC1B,QAAQ,MAAM,aAAa,MAAM,CAAC,KAAK,CAAC,IACxC;AAAA,UACN;AAAA,UACA,SAAS,kBAAiC,QAA0B;AAClE,gBAAI,CAAC,iBAAiB;AACpB,gCAAkB;AAClB,0BAAY,iBAAiB;AAAA,YAC/B;AACA,gBAAI,OAAO,eAAe,YAAY;AACpC,qBAAO,QAAQ,MAAM,YAAY,MAAM,CAAC,MAAM,CAAC;AAAA,YACjD;AACA,kBAAM;AAAA,UACR;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAUA,SAAS,2BACP,aACA,mBACoB;AACpB,QAAM,SAAS,SAAS,oCACtB,UAIkB;AAClB,WAAO,QAAQ;AAAA,MACb;AAAA,MACA,CAAC,QAAQ;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,SAAO,eAAe,QAAQ,WAAW;AAAA,IACvC,cAAc;AAAA,IACd,KAAK,MAAM;AACT,YAAM,iBAAiB,QAAQ,IAAI,aAAa,WAAW,WAAW;AACtE,UAAI,OAAO,mBAAmB,WAAY,QAAO;AACjD,aAAO,CAAC,UAA4B;AAClC,cAAM,aAAa,QAAQ,MAAM,gBAAgB,aAAa,CAAC,KAAK,CAAC;AACrE,eAAO,kBAAkB,UAAU;AAAA,MACrC;AAAA,IACF;AAAA,EACF,CAAC;AACD,SAAO;AACT;AA8DA,SAAS,6BAAsC;AAC7C,QAAM,SAAS;AAGf,UAAQ,OAAO,oCAAoC,KAAK,KAAK;AAC/D;AAcO,SAAS,gCAAsC;AACpD,QAAM,SAAS;AAIf,MAAI,OAAO,6BAA6B,MAAM,MAAM;AAClD,UAAM,eAAe,QAAQ,UAAU;AACvC,WAAO,eAAe,QAAQ,WAAW,QAAQ;AAAA,MAC/C,GAAG,OAAO,yBAAyB,QAAQ,WAAW,MAAM;AAAA,MAC5D,OAAO,SAAS,KAEd,aACA,YACkB;AAClB,cAAM,SAAS,QAAQ;AAAA,UACrB;AAAA,UACA;AAAA,UACA,CAAC,aAAa,UAAU;AAAA,QAC1B;AACA,YAAI,0BAA0B,IAAI,GAAG;AACnC,iCAAuB,GAAG,iCAAiC,MAAM;AAAA,QACnE;AACA,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AACD,WAAO,6BAA6B,IAAI;AAAA,EAC1C;AACA,MAAI,OAAO,wBAAwB,MAAM,KAAM;AAC/C,QAAM,eAAe,QAAQ;AAC7B,QAAM,cAAc,QAAQ;AAC5B,QAAM,cAAc,QAAQ;AAC5B,QAAM,qBAAqB,QAAQ;AACnC,QAAM,kBAAkB,QAAQ;AAMhC,SAAO,eAAe,SAAS,WAAW;AAAA,IACxC,GAAG,OAAO,yBAAyB,SAAS,SAAS;AAAA,IACrD,OAAO,SAAS,QAEd,OACqB;AACrB,YAAM,SAAS,QAAQ,MAAM,iBAAiB,MAAM,CAAC,KAAK,CAAC;AAC3D,UAAI,kBAAkB,KAAK,EAAG,wBAAuB,QAAQ,KAAe;AAC5E,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,SAAO,eAAe,SAAS,QAAQ;AAAA,IACrC,GAAG,OAAO,yBAAyB,SAAS,MAAM;AAAA,IAClD,OAAO,SAAS,KAEd,QACqB;AACrB,YAAM,UAAU,uBAAuB;AACvC,UAAI,SAAS,yBAAyB,MAAM;AAC1C,eAAO,QAAQ,MAAM,cAAc,MAAM,CAAC,MAAM,CAAC;AAAA,MACnD;AACA,YAAM,oBAA+B,CAAC;AACtC,UAAI,yBAAyB;AAC7B,YAAM,gBAAgB;AAAA,QACpB,EAAE,OAAO,QAAQ,IAAkC;AACjD,qBAAW,SAAS,QAAQ;AAC1B,kBAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,YAAM,sBAAsB;AAAA,QAC1B;AAAA,QACA,CAAC,eAAe;AACd,cAAI,kBAAkB,UAAU,GAAG;AACjC,8BAAkB,KAAK,UAAU;AAAA,UACnC,OAAO;AACL,sCAA0B;AAAA,UAC5B;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AACA,YAAM,YAAY,MAChB,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,QACA,CAAC,aAAa;AAAA,MAChB;AACF,YAAM,SAAS,QAAQ,kCAAkC,SAAS,KAAK,UAAU;AACjF,UAAI,kBAAkB,SAAS,GAAG;AAChC;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,2BAA2B;AAAA,QAC9B;AAAA,MACF;AACA,UACE,kBAAkB,SAAS,KACxB,yBAAyB,GAC5B;AACA,gBAAQ,sBAAsB,MAAM;AAAA,MACtC;AACA,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,SAAO,eAAe,SAAS,OAAO;AAAA,IACpC,GAAG,OAAO,yBAAyB,SAAS,KAAK;AAAA,IACjD,OAAO,SAAS,IAEd,QACqB;AACrB,YAAM,UAAU,uBAAuB;AACvC,UAAI,SAAS,yBAAyB,MAAM;AAC1C,eAAO,QAAQ,MAAM,aAAa,MAAM,CAAC,MAAM,CAAC;AAAA,MAClD;AACA,YAAM,oBAA+B,CAAC;AACtC,UAAI,yBAAyB;AAC7B,YAAM,cAAc,4BAA4B,KAAK;AACrD,YAAM,gBAAgB;AAAA,QACpB,EAAE,OAAO,QAAQ,IAAkC;AACjD,qBAAW,SAAS,QAAQ;AAC1B,kBAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,YAAM,sBAAsB;AAAA,QAC1B;AAAA,QACA,CAAC,eAAe;AACd,cAAI,kBAAkB,UAAU,GAAG;AACjC,8BAAkB,KAAK,UAAU;AACjC,mBAAO;AAAA,UACT;AACA,oCAA0B;AAC1B,iBAAO,iCAAiC,YAAY,WAAW;AAAA,QACjE;AAAA,MACF;AACA,YAAM,YAAY,MAChB,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,QACA,CAAC,aAAa;AAAA,MAChB;AACF,YAAM,SAAS,QAAQ,kCAAkC,SAAS,KAAK,UAAU;AACjF,kBAAY,gBAAgB,sBAAsB;AAClD,UAAI,kBAAkB,SAAS,GAAG;AAChC;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,2BAA2B;AAAA,QAC9B;AAAA,MACF;AACA,UAAI,kBAAkB,SAAS,KAAK,yBAAyB,GAAG;AAC9D,YACE,YAAY,6BACZ;AAQA,kBAAQ,sBAAsB,QAAQ,CAAC,YAAY,kBAAkB,MAAM,CAAC;AAAA,QAC9E,OAAO;AAIL,kBAAQ,sBAAsB,MAAM;AAAA,QACtC;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,SAAO,eAAe,SAAS,OAAO;AAAA,IACpC,GAAG,OAAO,yBAAyB,SAAS,KAAK;AAAA,IACjD,OAAO,SAAS,IAEd,QACuB;AACvB,YAAM,UAAU,uBAAuB;AACvC,UAAI,SAAS,yBAAyB,MAAM;AAC1C,eAAO,QAAQ,MAAM,aAAa,MAAM,CAAC,MAAM,CAAC;AAAA,MAClD;AACA,YAAM,oBAA+B,CAAC;AACtC,UAAI,yBAAyB;AAC7B,YAAM,cAAc,4BAA4B,KAAK;AACrD,YAAM,gBAAgB;AAAA,QACpB,EAAE,OAAO,QAAQ,IAAkC;AACjD,qBAAW,SAAS,QAAQ;AAC1B,kBAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,YAAM,sBAAsB;AAAA,QAC1B;AAAA,QACA,CAAC,eAAe;AACd,cAAI,kBAAkB,UAAU,GAAG;AACjC,8BAAkB,KAAK,UAAU;AACjC,mBAAO;AAAA,UACT;AACA,oCAA0B;AAC1B,iBAAO,iCAAiC,YAAY,WAAW;AAAA,QACjE;AAAA,MACF;AACA,YAAM,YAAY,MAChB,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,QACA,CAAC,aAAa;AAAA,MAChB;AACF,YAAM,SAAS,QAAQ,kCAAkC,SAAS,KAAK,UAAU;AACjF,kBAAY,gBAAgB,sBAAsB;AAClD,UAAI,kBAAkB,SAAS,GAAG;AAChC;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,2BAA2B;AAAA,QAC9B;AAAA,MACF;AACA,UAAI,kBAAkB,SAAS,KAAK,yBAAyB,GAAG;AAC9D,YACE,YAAY,6BACZ;AAIA,kBAAQ,sBAAsB,QAAQ,CAAC,YAAY,kBAAkB,MAAM,CAAC;AAAA,QAC9E,OAAO;AAIL,kBAAQ,sBAAsB,MAAM;AAAA,QACtC;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,SAAO,eAAe,SAAS,cAAc;AAAA,IAC3C,GAAG,OAAO,yBAAyB,SAAS,YAAY;AAAA,IACxD,OAAO,SAAS,WAEd,QAC6C;AAC7C,YAAM,UAAU,uBAAuB;AACvC,UAAI,SAAS,yBAAyB,MAAM;AAC1C,eAAO,QAAQ;AAAA,UACb;AAAA,UACA;AAAA,UACA,CAAC,MAAM;AAAA,QACT;AAAA,MACF;AACA,YAAM,oBAA+B,CAAC;AACtC,UAAI,yBAAyB;AAC7B,YAAM,cAAc,4BAA4B,aAAa;AAC7D,YAAM,gBAAgB;AAAA,QACpB,EAAE,OAAO,QAAQ,IAAkC;AACjD,qBAAW,SAAS,OAAQ,OAAM;AAAA,QACpC;AAAA,MACF;AACA,YAAM,sBAAsB;AAAA,QAC1B;AAAA,QACA,CAAC,eAAe;AACd,cAAI,kBAAkB,UAAU,GAAG;AACjC,8BAAkB,KAAK,UAAU;AACjC,mBAAO;AAAA,UACT;AACA,oCAA0B;AAC1B,iBAAO,iCAAiC,YAAY,WAAW;AAAA,QACjE;AAAA,MACF;AACA,YAAM,YAAY,MAChB,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,QACA,CAAC,aAAa;AAAA,MAChB;AACF,YAAM,SAAS,QAAQ,kCAAkC,SAAS,KAAK,UAAU;AACjF,kBAAY,gBAAgB,sBAAsB;AAClD,UAAI,kBAAkB,SAAS,GAAG;AAChC;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,2BAA2B;AAAA,QAC9B;AAAA,MACF;AACA,UAAI,kBAAkB,SAAS,KAAK,yBAAyB,GAAG;AAC9D,YAAI,YAAY,6BAA6B;AAI3C,kBAAQ,sBAAsB,QAAQ,CAAC,YAAY,kBAAkB,MAAM,CAAC;AAAA,QAC9E,OAAO;AACL,kBAAQ,sBAAsB,MAAM;AAAA,QACtC;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACD,SAAO,wBAAwB,IAAI;AACrC;AAwFA,SAAS,kBAAkB,YAAkC,UAAyC;AACpG,QAAM,OAAO,CAAC,GAAG,QAAQ;AACzB,MAAI,KAAK,SAAS,WAAW,WAAW,QAAQ;AAC9C,UAAM,IAAI,cAAc,GAAG,WAAW,IAAI,qBAAqB,WAAW,WAAW,MAAM,wBAAwB,KAAK,MAAM,EAAE;AAAA,EAClI;AACA,aAAW,WAAW,QAAQ,CAAC,WAAW,UAAU;AAClD,QAAI,SAAS,KAAK,UAAU,KAAK,KAAK,MAAM,QAAW;AACrD,UAAI,UAAU,WAAY,MAAK,KAAK,IAAI,UAAU;AAAA,eACzC,UAAU,SAAU,OAAM,IAAI,cAAc,GAAG,WAAW,IAAI,yBAAyB,UAAU,IAAI,GAAG;AACjH;AAAA,IACF;AACA,uBAAmB,UAAU,QAAQ,KAAK,KAAK,GAAG,GAAG,WAAW,IAAI,IAAI,UAAU,IAAI,EAAE;AAAA,EAC1F,CAAC;AACD,SAAO;AACT;AAgBA,eAAsB,qBACpB,YACA,cAC0B;AAC1B,QAAM,OAAO,kBAAkB,YAAY,YAAY;AACvD,QAAM,SAAS,WAAW,QAAQ,GAAG,IAAI;AACzC,MAAI,UAAU,QAAQ,OAAQ,OAAgC,SAAS,YAAY;AACjF,UAAM,IAAI,cAAc,uBAAuB,WAAW,IAAI,sCAAsC;AAAA,EACtG;AACA,QAAM,SAAS,MAAM;AACrB,MAAI,WAAW,MAAM,GAAG;AACtB,WAAO;AAAA,EACT;AACA,qBAAmB,WAAW,SAAS,QAAQ,GAAG,WAAW,IAAI,eAAe;AAChF,SAAO;AACT;AAEO,SAAS,WAAW,OAA4C;AACrE,MAAI,OAAO,UAAU,YAAY,SAAS,KAAM,QAAO;AACvD,QAAM,YAAY;AAClB,SAAO,UAAU,eAAe,MAAM,QACjC,UAAU,SAAS,0BACnB,OAAO,UAAU,eAAe,YAChC,UAAU,cAAc,QACxB,MAAM,QAAQ,UAAU,IAAI;AACnC;;;AI9yCA,IAAM,gBAAgB,uBAAO,IAAI,oCAAoC;AAG9D,IAAMC,WAAN,MAAM,SAAuD;AAAA,EAClE,CAAU,aAAa,IAAI;AAAA,EAClB;AAAA,EACA;AAAA,EAET,QAAQ,OAAO,WAAW,EAAE,OAAyB;AACnD,QAAI,SAAS,UAAS;AACpB,aAAO,SAAS,UAAU,OAAO,WAAW,EAAE,KAAK,MAAM,KAAK;AAAA,IAChE;AACA,WAAO,UAAU,KAAK;AAAA,EACxB;AAAA,EAEA,YAAY,UAAuB,CAAC,GAAG;AACrC,UAAM,UAAU,mBAAmB,WAC/B,CAAC,GAAG,OAAO,IACX,OAAO,YAAY,OAAO,OAAO,IAC/B,CAAC,GAAG,OAA8C,IAClD,OAAO,QAAQ,OAAO;AAC5B,UAAM,SAAS,oBAAI,IAAsB;AACzC,SAAK,SAAS,OAAO,OAAO,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;AACzD,UAAI,OAAO,SAAS,YAAY,OAAO,UAAU,UAAU;AACzD,cAAM,IAAI,UAAU,yCAAyC;AAAA,MAC/D;AACA,YAAM,OAAO,OAAO,OAAO,CAAC,MAAM,KAAK,CAAU;AACjD,YAAM,MAAM,KAAK,YAAY;AAC7B,aAAO,IAAI,KAAK,CAAC,GAAI,OAAO,IAAI,GAAG,KAAK,CAAC,GAAI,KAAK,CAAC;AACnD,aAAO;AAAA,IACT,CAAC,CAAC;AACF,SAAK,UAAU;AACf,WAAO,OAAO,IAAI;AAAA,EACpB;AAAA,EAEA,IAAI,MAAkC;AACpC,WAAO,KAAK,QAAQ,IAAI,KAAK,YAAY,CAAC,GAAG,GAAG,EAAE;AAAA,EACpD;AAAA,EAEA,OAAO,MAAiC;AACtC,WAAO,OAAO,OAAO,CAAC,GAAI,KAAK,QAAQ,IAAI,KAAK,YAAY,CAAC,KAAK,CAAC,CAAE,CAAC;AAAA,EACxE;AAAA,EAEA,IAAI,MAAuB;AACzB,WAAO,KAAK,QAAQ,IAAI,KAAK,YAAY,CAAC;AAAA,EAC5C;AAAA,EAEA,UAAuD;AACrD,WAAO,KAAK,OAAO,OAAO,QAAQ,EAAE;AAAA,EACtC;AAAA,EAEA,CAAC,OAAO,QAAQ,IAAiD;AAC/D,WAAO,KAAK,QAAQ;AAAA,EACtB;AACF;AAGO,SAAS,UAAU,OAAkC;AAC1D,MAAI,OAAO,UAAU,YAAY,SAAS,KAAM,QAAO;AACvD,QAAM,YAAY;AAClB,SAAO,UAAU,aAAa,MAAM,QAC/B,OAAO,UAAU,QAAQ,cACzB,OAAO,UAAU,WAAW,cAC5B,OAAO,UAAU,QAAQ,cACzB,OAAO,UAAU,OAAO,QAAQ,MAAM;AAC7C;;;ACtEA,SAAS,qBAAAC,0BAAyB;;;ACAlC,SAAS,kBAAkB;AAK3B,IAAM,cAAc,IAAI,YAAY;AACpC,IAAM,cAAc,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC;AAQ5D,SAAS,gBAAgB,OAAgBC,OAAc,MAAyB;AAC9E,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,OAAO,UAAU,UAAW;AAC/E,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI,CAAC,OAAO,SAAS,KAAK,EAAG,OAAM,IAAI,mBAAmB,GAAGA,KAAI,+BAA+B;AAChG;AAAA,EACF;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,IAAI,mBAAmB,GAAGA,KAAI,yBAAyB,OAAO,KAAK,EAAE;AAAA,EAC7E;AACA,MAAI,OAAO,KAAK,GAAG;AACjB,UAAM,IAAI,mBAAmB,GAAGA,KAAI,mEAAmE;AAAA,EACzG;AACA,MAAI,WAAW,KAAK,GAAG;AACrB,UAAM,IAAI;AAAA,MACR,GAAGA,KAAI;AAAA,IACT;AAAA,EACF;AACA,MAAI,KAAK,IAAI,KAAK,EAAG,OAAM,IAAI,mBAAmB,GAAGA,KAAI,mBAAmB;AAC5E,MAAI,OAAO,eAAe,KAAK,MAAM,OAAO,aAAa,CAAC,MAAM,QAAQ,KAAK,GAAG;AAC9E,UAAM,IAAI,mBAAmB,GAAGA,KAAI,yBAAyB,MAAM,aAAa,QAAQ,QAAQ,EAAE;AAAA,EACpG;AACA,OAAK,IAAI,KAAK;AACd,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,aAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACpD,UAAI,CAAC,OAAO,UAAU,eAAe,KAAK,OAAO,KAAK,GAAG;AACvD,cAAM,IAAI,mBAAmB,GAAGA,KAAI,2CAA2C,KAAK,EAAE;AAAA,MACxF;AACA,sBAAgB,MAAM,KAAK,GAAG,GAAGA,KAAI,IAAI,KAAK,KAAK,IAAI;AAAA,IACzD;AAAA,EACF,OAAO;AACL,eAAW,CAAC,KAAK,IAAI,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC/C,sBAAgB,MAAM,GAAGA,KAAI,IAAI,GAAG,IAAI,IAAI;AAAA,IAC9C;AAAA,EACF;AACA,OAAK,OAAO,KAAK;AACnB;AAEO,SAAS,eAAe,OAAiC;AAC9D,MAAI,OAAO,KAAK,GAAG;AACjB,WAAO,EAAE,MAAM,MAAM,SAAS,aAAa,MAAM,aAAa,UAAU,MAAM;AAAA,EAChF;AACA,MAAI,WAAW,KAAK,GAAG;AACrB,WAAO;AAAA,MACL,MAAM,MAAM;AAAA,MACZ,aAAa,MAAM,eAAe;AAAA,MAClC,UAAU;AAAA,IACZ;AAAA,EACF;AACA,MAAI;AACF,oBAAgB,OAAO,SAAS,oBAAI,IAAI,CAAC;AACzC,WAAO;AAAA,MACL,MAAM,YAAY,OAAO,KAAK,UAAU,KAAK,CAAC;AAAA,MAC9C,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,EACF,SAAS,OAAO;AACd,QAAI,iBAAiB,mBAAoB,OAAM;AAC/C,UAAM,IAAI,mBAAmB,kCAAkC,EAAE,OAAO,MAAM,CAAC;AAAA,EACjF;AACF;AAEO,SAAS,gBAAgB,MAA2B;AACzD,MAAI;AACF,WAAO,KAAK,MAAM,YAAY,OAAO,IAAI,CAAC;AAAA,EAC5C,SAAS,OAAO;AACd,UAAM,IAAI,qBAAqB,oCAAoC,EAAE,OAAO,MAAM,CAAC;AAAA,EACrF;AACF;;;ADzDO,SAAS,wBAAwB,KAAqC;AAC3E,MAAI,OAAO,QAAQ,UAAU;AAC3B,UAAM,IAAI,cAAc,oCAAoC,OAAO,GAAG,CAAC,EAAE;AAAA,EAC3E;AACF;AAEO,SAAS,2BAA2B,OAA4B;AACrE,QAAM,aAAa,eAAe,KAAK;AACvC,MAAI,WAAW,aAAa,QAAQ;AAClC,UAAM,IAAI,cAAc,0CAA0C;AAAA,EACpE;AACA,SAAO,WAAW;AACpB;AAEO,SAAS,sBAAsB,MAAe,OAAsB;AACzE,MAAI,OAAO,SAAS,UAAU;AAC5B,UAAM,IAAI,cAAc,uCAAuC,OAAO,IAAI,CAAC,EAAE;AAAA,EAC/E;AACA,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,UAAU,KAAK,GAAG;AACzD,UAAM,IAAI,cAAc,sCAAsC,OAAO,KAAK,CAAC,EAAE;AAAA,EAC/E;AACA,MAAI,CAAC,OAAO,cAAc,KAAK,GAAG;AAChC,UAAM,IAAI,cAAc,0CAA0C,OAAO,KAAK,CAAC,EAAE;AAAA,EACnF;AACF;AAEO,SAAS,oBAAoB,MAAe,OAAsB;AACvE,MAAI,OAAO,SAAS,UAAU;AAC5B,UAAM,IAAI,cAAc,qCAAqC,OAAO,IAAI,CAAC,EAAE;AAAA,EAC7E;AACA,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK,GAAG;AACxD,UAAM,IAAI,cAAc,6CAA6C,OAAO,KAAK,CAAC,EAAE;AAAA,EACtF;AACF;AAEA,SAAS,cAAc,OAAuD;AAC5E,MAAI,SAAS,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AAC/E,QAAM,YAAY,OAAO,eAAe,KAAK;AAC7C,SAAO,cAAc,OAAO,aAAa,cAAc;AACzD;AAEO,SAAS,uBACd,SACA,OACA,SACM;AACN,MAAI,CAAC,OAAO,SAAS,OAAO,KAAK,CAAC,OAAO,SAAS,KAAK,KAAK,QAAQ,KAAK,UAAU,GAAG;AACpF,UAAM,IAAI,cAAc,gEAAgE;AAAA,EAC1F;AACA,MAAI,WAAW,QAAQ,CAAC,cAAc,OAAO,GAAG;AAC9C,UAAM,IAAI,cAAc,oCAAoC;AAAA,EAC9D;AACA,MAAI,SAAS,WAAW,QAAQ,OAAO,QAAQ,YAAY,UAAU;AACnE,UAAM,IAAI,cAAc,mCAAmC;AAAA,EAC7D;AACA,MAAI,SAAS,cAAc,MAAM;AAC/B,QAAI,CAAC,cAAc,QAAQ,UAAU,GAAG;AACtC,YAAM,IAAI,cAAc,iEAAiE;AAAA,IAC3F;AACA,eAAW,OAAO,QAAQ,QAAQ,QAAQ,UAAU,GAAG;AACrD,UAAI,OAAO,QAAQ,UAAU;AAC3B,cAAM,IAAI,cAAc,8DAA8D;AAAA,MACxF;AACA,YAAM,QAAQ,QAAQ,WAAW,GAAG;AACpC,UAAI,OAAO,UAAU,UAAU;AAC7B,cAAM,IAAI,cAAc,8DAA8D;AAAA,MACxF;AAAA,IACF;AAAA,EACF;AACF;AAgBA,IAAM,8BAA8B,uBAAO;AAAA,EACzC;AACF;AAEA,SAAS,wBAAgE;AACvE,QAAM,SAAS;AAGf,SAAO,2BAA2B,MAAM,IAAIC,mBAAuC;AACnF,SAAO,OAAO,2BAA2B;AAC3C;AAYO,SAAS,sBACd,SACA,UACY;AACZ,SAAO,sBAAsB,EAAE,IAAI,SAAS,QAAQ;AACtD;AAEA,eAAsB,oBACpB,OACA,QACY;AACZ,MAAI,OAAO,QAAS,OAAM,OAAO;AACjC,MAAI;AACJ,MAAI;AACF,WAAO,MAAM,QAAQ,KAAK;AAAA,MACxB;AAAA,MACA,IAAI,QAAe,CAAC,UAAU,WAAW;AACvC,kBAAU,MAAM,OAAO,OAAO,MAAM;AACpC,eAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,MAC1D,CAAC;AAAA,IACH,CAAC;AAAA,EACH,UAAE;AACA,QAAI,WAAW,KAAM,QAAO,oBAAoB,SAAS,OAAO;AAAA,EAClE;AACF;;;AE3HO,SAAS,WAA2B;AACzC,MAAI;AACJ,MAAI;AACJ,QAAM,UAAU,IAAI,QAAW,CAAC,IAAI,SAAS;AAC3C,cAAU;AACV,aAAS;AAAA,EACX,CAAC;AACD,SAAO,EAAE,SAAS,SAAS,OAAO;AACpC;;;ACxCA,SAAS,cAAAC,mBAAkB;AAC3B,SAAS,YAAY;AACrB,SAAS,qBAAqB;AAqC9B,SAAS,OAAO,OAAoC,MAAc,aAA8B;AAC9F,SAAO,UAAU,QAAQ,UAAU;AACrC;AAEA,SAAS,YAAY,OAAiC;AACpD,QAAM,SAAS,IAAI,WAAW,MAAM,OAAO,CAAC,OAAO,SAAS,QAAQ,KAAK,YAAY,CAAC,CAAC;AACvF,MAAI,SAAS;AACb,aAAW,QAAQ,OAAO;AACxB,WAAO,IAAI,MAAM,MAAM;AACvB,cAAU,KAAK;AAAA,EACjB;AACA,SAAO;AACT;AAEA,SAAS,WAAW,KAAqB;AACvC,MAAI,IAAI,WAAW,OAAO,EAAG,QAAO,WAAW,IAAI,MAAM,QAAQ,MAAM,CAAC;AACxE,MAAI,IAAI,WAAW,OAAO,EAAG,QAAO,WAAW,IAAI,MAAM,QAAQ,MAAM,CAAC;AACxE,SAAO;AACT;AAEA,IAAM,gBAAN,cAA4B,MAAM;AAAA,EAChC,YAAqBC,SAAgB;AACnC,UAAM,mCAAmCA,OAAM,EAAE;AAD9B,kBAAAA;AAAA,EAErB;AACF;AAEA,SAAS,QAAQ,KAAqB;AACpC,MAAI,IAAI,WAAW,SAAS,EAAG,QAAO;AACtC,MAAI,IAAI,WAAW,OAAO,EAAG,QAAO;AACpC,MAAI,IAAI,WAAW,OAAO,EAAG,QAAO;AACpC,MAAI;AACF,WAAO,IAAI,IAAI,GAAG,EAAE,SAAS,QAAQ,KAAK,EAAE,KAAK;AAAA,EACnD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,eAAe,QAA4B;AAClD,UAAQ,eAAe;AACzB;AAEA,eAAe,eAAe,SAAiB,QAAqC;AAClF,iBAAe,MAAM;AACrB,MAAI,UAAU,MAAM;AAClB,UAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,OAAO,CAAC;AAC3D;AAAA,EACF;AACA,QAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,UAAM,QAAQ,WAAW,MAAM;AAC7B,aAAO,oBAAoB,SAAS,OAAO;AAC3C,cAAQ;AAAA,IACV,GAAG,OAAO;AACV,UAAM,UAAU,MAAM;AACpB,mBAAa,KAAK;AAClB,aAAO,OAAO,MAAM;AAAA,IACtB;AACA,WAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,EAC1D,CAAC;AACH;AAEA,eAAe,iBACb,KACA,MACA,KACA,SAAkC,CAAC,GACnC,QACmB;AACnB,MAAI;AACJ,WAAS,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG;AAC/C,mBAAe,MAAM;AACrB,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,yBAAyB;AAAA,MAC7B,GAAG;AAAA,MACH,SAAS,UAAU;AAAA,MACnB,QAAQ,MAAM,UAAU;AAAA,MACxB,UAAU,QAAQ,GAAG;AAAA,MACrB,WAAW,IAAI,QAAQ,MAAM,OAAO,EAAE,IAAI,OAAO;AAAA,IACnD,CAAC;AACD,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,WAAW,GAAG,GAAG;AAAA,QAC5C,GAAG;AAAA,QACH;AAAA,MACF,CAAC;AACD,YAAM,0BAA0B;AAAA,QAC9B,GAAG;AAAA,QACH,SAAS,UAAU;AAAA,QACnB,QAAQ,MAAM,UAAU;AAAA,QACxB,aAAa,SAAS;AAAA,QACtB,aAAa,KAAK,IAAI,IAAI;AAAA,MAC5B,CAAC;AACD,qBAAe,MAAM;AACrB,UAAI,SAAS,GAAI,QAAO;AACxB,UAAI,CAAC,KAAK,KAAK,GAAG,EAAE,SAAS,SAAS,MAAM,KAAK,YAAY,GAAG;AAC9D,cAAM,IAAI,cAAc,SAAS,MAAM;AAAA,MACzC;AACA,kBAAY,IAAI,cAAc,SAAS,MAAM;AAAA,IAC/C,SAAS,OAAO;AACd,YAAM,uBAAuB;AAAA,QAC3B,GAAG;AAAA,QACH,SAAS,UAAU;AAAA,QACnB,QAAQ,MAAM,UAAU;AAAA,QACxB,aAAa,KAAK,IAAI,IAAI;AAAA,QAC1B,OAAO,iBAAiB,QAAQ,GAAG,MAAM,IAAI,KAAK,MAAM,OAAO,KAAK,OAAO,KAAK;AAAA,MAClF,CAAC;AACD,qBAAe,MAAM;AACrB,UAAI,iBAAiB,iBAAiB,CAAC,KAAK,KAAK,GAAG,EAAE,SAAS,MAAM,MAAM,EAAG,OAAM;AACpF,kBAAY;AACZ,UAAI,YAAY,EAAG;AAAA,IACrB;AACA,UAAM,eAAe,MAAO,KAAK;AACjC,UAAM,oCAAoC;AAAA,MACxC,GAAG;AAAA,MACH,cAAc,UAAU;AAAA,MACxB,gBAAgB;AAAA,IAClB,CAAC;AACD,UAAM,eAAe,cAAc,MAAM;AAAA,EAC3C;AACA,QAAM,IAAI,MAAM,uCAAuC,EAAE,OAAO,UAAU,CAAC;AAC7E;AAEA,eAAe,eACb,OACA,OACA,oBACA,mBACA,MACA,WACA,KACA,QACqB;AACrB,iBAAe,MAAM;AACrB,MAAI,CAAC,MAAM,IAAK,OAAM,IAAI,MAAM,uBAAuB;AACvD,QAAM,iBAAiB,YAAY,qBAAqB,oBAAoB;AAC5E,QAAM,SAAS;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU,QAAQ,MAAM,GAAG;AAAA,IAC3B,YAAY;AAAA,EACd;AACA,QAAM,YAAY,KAAK,IAAI;AAC3B,QAAM,2BAA2B,MAAM;AACvC,MAAI,MAAM,IAAI,WAAW,SAAS,GAAG;AACnC,UAAM,OAAO,MAAM,KAAK,cAAc,MAAM,GAAG,GAAG,GAAG;AACrD,QAAI;AACF,qBAAe,MAAM;AACrB,YAAMC,QAAO,IAAI,WAAW,IAAI;AAChC,YAAM,EAAE,UAAU,IAAI,MAAM,KAAK,KAAKA,OAAM,GAAG,MAAM,cAAc;AACnE,qBAAe,MAAM;AACrB,UAAI,cAAc,MAAM;AACtB,cAAM,IAAI,MAAM,0BAA0B,SAAS,oBAAoB,IAAI,EAAE;AAAA,MAC/E;AACA,YAAM,4BAA4B;AAAA,QAChC,GAAG;AAAA,QACH,kBAAkBA,MAAK;AAAA,QACvB,aAAa,KAAK,IAAI,IAAI;AAAA,MAC5B,CAAC;AACD,aAAOA;AAAA,IACT,UAAE;AACA,YAAM,KAAK,MAAM;AAAA,IACnB;AAAA,EACF;AACA,QAAM,UAAU,EAAE,OAAO,SAAS,cAAc,IAAI,iBAAiB,OAAO,CAAC,GAAG;AAChF,QAAM,WAAW,MAAM,iBAAiB,MAAM,KAAK,EAAE,QAAQ,GAAG,KAAK,QAAQ,MAAM;AACnF,MAAI,OAAO,IAAI,WAAW,MAAM,SAAS,YAAY,CAAC;AACtD,iBAAe,MAAM;AAErB,MAAI,SAAS,WAAW,QAAQ,mBAAmB,KAAK,KAAK,eAAe,OAAO;AACjF,WAAO,KAAK,SAAS,gBAAgB,iBAAiB,IAAI;AAAA,EAC5D;AACA,MAAI,KAAK,eAAe,MAAM;AAC5B,UAAM,IAAI,MAAM,uBAAuB,KAAK,UAAU,oBAAoB,IAAI,EAAE;AAAA,EAClF;AACA,QAAM,4BAA4B;AAAA,IAChC,GAAG;AAAA,IACH,aAAa,SAAS;AAAA,IACtB,kBAAkB,KAAK;AAAA,IACvB,aAAa,KAAK,IAAI,IAAI;AAAA,EAC5B,CAAC;AACD,SAAO;AACT;AAEA,eAAsB,kBACpB,MACA,QACA,MACA,KACA,QACqB;AACrB,iBAAe,MAAM;AACrB,MAAI,CAAC,OAAO,cAAc,MAAM,KAAK,SAAS,KAAK,CAAC,OAAO,cAAc,IAAI,KAAK,OAAO,GAAG;AAC1F,UAAM,IAAI,MAAM,+DAA+D;AAAA,EACjF;AACA,QAAM,SAAS,KAAK,UAAU,CAAC;AAC/B,QAAM,YAAY,OAAO,OAAO,CAAC,OAAO,UAAU,SAAS,MAAM,QAAQ,IAAI,CAAC;AAC9E,MAAI,SAAS,OAAO,WAAW;AAC7B,UAAM,IAAI,MAAM,cAAc,MAAM,KAAK,SAAS,IAAI,0BAA0B,SAAS,EAAE;AAAA,EAC7F;AACA,MAAI,SAAS,EAAG,QAAO,IAAI,WAAW;AACtC,QAAM,YAAY,oBAAI,IAAoB;AAC1C,aAAW,SAAS,QAAQ;AAC1B,QAAI,MAAM,OAAO,KAAM,WAAU,IAAI,MAAM,MAAM,UAAU,IAAI,MAAM,GAAG,KAAK,KAAK,CAAC;AAAA,EACrF;AACA,QAAM,WAAW,SAAS;AAC1B,MAAI,cAAc;AAClB,QAAM,QAAoC,CAAC;AAC3C,aAAW,CAAC,OAAO,KAAK,KAAK,OAAO,QAAQ,GAAG;AAC7C,UAAM,YAAY,MAAM,QAAQ;AAChC,UAAM,WAAW,cAAc;AAC/B,UAAM,eAAe,KAAK,IAAI,QAAQ,WAAW;AACjD,UAAM,aAAa,KAAK,IAAI,UAAU,QAAQ;AAC9C,QAAI,eAAe,YAAY;AAC7B,YAAM,KAAK;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAe;AAAA,QACf,aAAa;AAAA,SACZ,UAAU,IAAI,MAAM,OAAO,EAAE,KAAK,KAAK;AAAA,QACxC;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AACA,kBAAc;AAAA,EAChB;AACA,QAAM,OAAO,YAAY,MAAM,QAAQ,IAAI,KAAK,CAAC;AACjD,iBAAe,MAAM;AACrB,MAAI,KAAK,eAAe,KAAM,OAAM,IAAI,MAAM,oDAAoD;AAClG,QAAM,2BAA2B;AAAA,IAC/B,SAAS,KAAK;AAAA,IACd,aAAa,OAAO;AAAA,IACpB,kBAAkB,KAAK;AAAA,IACvB,cAAc;AAAA,IACd,YAAY;AAAA,EACd,CAAC;AACD,SAAO;AACT;AAEA,eAAsB,aACpB,MACA,KACA,QACqB;AACrB,QAAM,QAAQ,KAAK,UAAU,CAAC,GAAG,OAAO,CAAC,OAAO,UAAU,SAAS,MAAM,QAAQ,IAAI,CAAC;AACtF,SAAO,kBAAkB,MAAM,GAAG,MAAM,KAAK,MAAM;AACrD;AAEA,eAAsB,yBACpB,QACA,MACA,KACA,QACuG;AACvG,iBAAe,MAAM;AACrB,QAAM,WAAW,OAAO;AACxB,MAAI,UAAU,QAAQ,QAAQ,SAAS,gBAAgB,MAAM;AAC3D,UAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AACA,MAAI,CAAC,OAAO,cAAc,SAAS,IAAI,KAAK,SAAS,OAAO,GAAG;AAC7D,UAAM,IAAI,MAAM,4DAA4D;AAAA,EAC9E;AACA,MAAI,CAAC,OAAO,cAAc,SAAS,YAAY,KAAK,SAAS,eAAe,GAAG;AAC7E,UAAM,IAAI,MAAM,qEAAqE;AAAA,EACvF;AACA,MAAI,SAAS,eAAe,SAAS,MAAM;AACzC,UAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AACA,MAAI,OAAO,SAAS,eAAe,YAAY,SAAS,WAAW,WAAW,GAAG;AAC/E,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AACA,QAAM,QAAQ,OAAO,UAAU;AAC/B,QAAM,QAAQ,MAAM,kBAAkB,MAAM,OAAO,SAAS,MAAM,KAAK,MAAM;AAC7E,iBAAe,MAAM;AACrB,QAAM,OAAOC,YAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AAC5D,MAAI,SAAS,SAAS,YAAY;AAChC,UAAM,IAAI,MAAM,6CAA6C,SAAS,UAAU,SAAS,IAAI,EAAE;AAAA,EACjG;AACA,SAAO;AAAA,IACL,UAAU,MAAM,SAAS,GAAG,SAAS,YAAY;AAAA,IACjD,MAAM,MAAM,SAAS,SAAS,YAAY;AAAA,IAC1C,aAAa,SAAS;AAAA,IACtB,UAAU,SAAS;AAAA,EACrB;AACF;AAEO,SAAS,6BACd,OACS;AACT,MAAI,OAAO,MAAM,UAAU,kCAAkC,CAAC,GAAG;AAC/D,WAAO,IAAI,KAAK,MAAM,MAAM,MAAM,eAAe,0BAA0B;AAAA,EAC7E;AACA,MAAI,OAAO,MAAM,UAAU,wCAAwC,CAAC,GAAG;AACrE,WAAO,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,MAAM,IAAI;AAAA,EACpE;AACA,MACE,OAAO,MAAM,UAAU,wCAAwC,CAAC,KAChE,MAAM,aAAa,YAAY,EAAE,SAAS,MAAM,GAChD;AACA,WAAO,gBAAgB,MAAM,IAAI;AAAA,EACnC;AACA,QAAM,IAAI,MAAM,2CAA2C,OAAO,MAAM,QAAQ,CAAC,GAAG;AACtF;AAEO,SAAS,wBACd,OACA,SAAS,GACT,sBAC0B;AAC1B,QAAM,aAAa,eAAe,KAAK;AACvC,QAAM,WAAW,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU;AAAA,IACvD,QAAQ;AAAA,EACV,CAAC,CAAC;AACF,QAAM,QAAQ,YAAY,CAAC,UAAU,WAAW,IAAI,CAAC;AACrD,SAAO;AAAA,IACL;AAAA,IACA,QAAQ;AAAA,MACN;AAAA,MACA,UAAU;AAAA,QACR,UAAU,WAAW,aAAa,SAC9B,yCACA;AAAA,QACJ,iBAAiB;AAAA,QACjB,MAAM,MAAM;AAAA,QACZ,cAAc,SAAS;AAAA,QACvB,YAAYA,YAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AAAA,QAC3D,GAAI,WAAW,aAAa,QAAQ,EAAE,aAAa,WAAW,YAAY,IAAI,CAAC;AAAA,QAC/E;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,kBAAkB,OAAyC;AACzE,QAAM,QAAQ,IAAI,YAAY,EAAE,OAAO,KAAK;AAC5C,SAAO;AAAA,IACL;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,QACR,UAAU;AAAA,QACV,iBAAiB;AAAA,QACjB,MAAM,MAAM;AAAA,QACZ,cAAc;AAAA,QACd,YAAYA,YAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AAAA,MAC7D;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAe,YACb,OACA,MACA,OACA,QACA,KACA,QACoB;AACpB,iBAAe,MAAM;AACrB,MAAI,CAAC,MAAM,IAAK,OAAM,IAAI,MAAM,gCAAgC;AAChE,QAAM,SAAS;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,cAAc,KAAK;AAAA,IACnB,gBAAgB,MAAM,QAAQ;AAAA,IAC9B,UAAU,QAAQ,MAAM,GAAG;AAAA,EAC7B;AACA,QAAM,YAAY,KAAK,IAAI;AAC3B,QAAM,yBAAyB,MAAM;AACrC,MAAI,MAAM,IAAI,WAAW,SAAS,GAAG;AACnC,UAAM,WAAW,cAAc,MAAM,GAAG;AACxC,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,KAAK,UAAU,IAAI;AAAA,IAClC,SAAS,OAAO;AACd,UAAK,MAAgC,SAAS,SAAU,OAAM;AAC9D,aAAO,MAAM,KAAK,UAAU,IAAI;AAAA,IAClC;AACA,QAAI;AACF,qBAAe,MAAM;AACrB,YAAM,KAAK,MAAM,MAAM,GAAG,KAAK,YAAY,MAAM;AACjD,qBAAe,MAAM;AAAA,IACvB,UAAE;AACA,YAAM,KAAK,MAAM;AAAA,IACnB;AACA,UAAM,0BAA0B,EAAE,GAAG,QAAQ,aAAa,KAAK,IAAI,IAAI,UAAU,CAAC;AAClF,WAAO,EAAE,GAAG,OAAO,MAAM,KAAK,WAAW;AAAA,EAC3C;AACA,QAAM,WAAW,MAAM,iBAAiB,MAAM,KAAK;AAAA,IACjD,QAAQ;AAAA,IACR,GAAI,KAAK,eAAe,IAAI,CAAC,IAAI;AAAA,MAC/B,MAAM,WAAW,KAAK,IAAI,EAAE;AAAA,IAC9B;AAAA,EACF,GAAG,KAAK,QAAQ,MAAM;AACtB,iBAAe,MAAM;AACrB,QAAM,WAAW;AAAA,IACf,GAAG;AAAA,IACH,MAAM,KAAK;AAAA,IACX,MAAM,SAAS,QAAQ,IAAI,MAAM,KAAK;AAAA,EACxC;AACA,QAAM,0BAA0B;AAAA,IAC9B,GAAG;AAAA,IACH,aAAa,SAAS;AAAA,IACtB,UAAU,SAAS,QAAQ;AAAA,IAC3B,aAAa,KAAK,IAAI,IAAI;AAAA,EAC5B,CAAC;AACD,SAAO;AACT;AAEA,eAAsB,WACpB,MACA,MACA,KACA,QACoB;AACpB,iBAAe,MAAM;AACrB,QAAM,SAAS,KAAK,UAAU,CAAC;AAC/B,QAAM,WAAW,OAAO,OAAO,CAAC,OAAO,UAAU,SAAS,MAAM,QAAQ,IAAI,CAAC;AAC7E,MAAI,KAAK,aAAa,SAAU,OAAM,IAAI,MAAM,iBAAiB,QAAQ,oBAAoB,KAAK,UAAU,EAAE;AAC9G,MAAI,SAAS;AACb,QAAM,WAAwB,CAAC;AAC/B,aAAW,CAAC,OAAO,KAAK,KAAK,OAAO,QAAQ,GAAG;AAC7C,UAAM,OAAO,KAAK,IAAI,MAAM,QAAQ,GAAG,KAAK,aAAa,MAAM;AAC/D,QAAI,QAAQ,EAAG;AACf,aAAS,KAAK,MAAM;AAAA,MAClB;AAAA,MACA,KAAK,SAAS,QAAQ,SAAS,IAAI;AAAA,MACnC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AACD,cAAU;AAAA,EACZ;AACA,MAAI,KAAK,eAAe,KAAK,OAAO,SAAS,GAAG;AAC9C,aAAS,KAAK,MAAM,YAAY,OAAO,CAAC,GAAG,MAAM,GAAG,GAAG,KAAK,MAAM,CAAC;AAAA,EACrE;AACA,iBAAe,MAAM;AACrB,MAAI,WAAW,KAAK,WAAY,OAAM,IAAI,MAAM,iBAAiB,MAAM,OAAO,KAAK,UAAU,QAAQ;AACrG,QAAM,yBAAyB;AAAA,IAC7B,SAAS,KAAK;AAAA,IACd,aAAa,SAAS;AAAA,IACtB,gBAAgB,KAAK;AAAA,EACvB,CAAC;AACD,SAAO,EAAE,GAAG,MAAM,QAAQ,SAAS;AACrC;AAEO,SAAS,aAAa,QAAgD;AAC3E,SAAO,YAAY,OAAO,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC;AACvD;;;ACxeA,SAAS,cAAAC,mBAAkB;AAGpB,SAAS,gBACd,MACA,UAAgE,CAAC,GAC3D;AACN,wBAAsB,UAAU,OAAO;AAAA,IACrC,aAAa;AAAA,IACb,IAAIC,YAAW;AAAA,IACf,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IAClC,MAAM,QAAQ,QAAQ;AAAA,IACtB,QAAQ,QAAQ,UAAU;AAAA,IAC1B;AAAA,IACA,GAAI,QAAQ,WAAW,OAAO,CAAC,IAAI,EAAE,SAAS,QAAQ,QAAQ;AAAA,EAChE,EAAE;AACJ;;;AVwCA,8BAA8B;AAM9B,IAAM,KAAK;AACX,IAAM,YAAY;AAClB,IAAM,gBAAgB,oBAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;AACvD,IAAM,kBAAkB,oBAAI,IAAI,CAAC,mCAAmC,CAAC,CAAC;AACtE,IAAM,kBAAkB,oBAAI,IAAI,CAAC,mCAAmC,CAAC,CAAC;AACtE,IAAM,oBAAoB,oBAAI,IAAI,CAAC,yCAAyC,CAAC,CAAC;AAC9E,IAAM,4BAA4B;AAClC,IAAM,wBAAwB,WAAW;AAEzC,SAAS,YAAYC,SAA6B,UAAqC;AACrF,MAAIA,WAAU,SAASA,QAAO,QAAQ,QAAQ,GAAI,QAAO;AACzD,SAAO,IAAI,cAAcA,QAAO,WAAW,QAAQ;AACrD;AAEA,SAAS,uBACP,UACA,qBACA,aACQ;AACR,MAAI,SAAS,WAAW,QAAQ,CAAC,MAAM,QAAQ,SAAS,OAAO,GAAG;AAChE,UAAM,YAAY,yDAAyD;AAAA,EAC7E;AACA,QAAM,gBAAgB,OAAO,SAAS,aAAa,mBAAmB;AACtE,MACE,CAAC,OAAO,SAAS,aAAa,KAC3B,CAAC,OAAO,cAAc,aAAa,KACnC,gBAAgB,GACnB;AACA,UAAM;AAAA,MACJ,gDAAgD,OAAO,SAAS,SAAS,CAAC;AAAA,IAC5E;AAAA,EACF;AACA,MAAI,gBAAgB,qBAAqB;AACvC,UAAM;AAAA,MACJ,mDAAmD,mBAAmB,OAAO,aAAa;AAAA,IAC5F;AAAA,EACF;AACA,MAAI,SAAS,WAAW,kBAAkB,qBAAqB;AAC7D,UAAM;AAAA,MACJ,sEAAsE,mBAAmB;AAAA,IAC3F;AAAA,EACF;AACA,OAAK,SAAS,SAAS,UAAU,KAAK,KAAK,kBAAkB,qBAAqB;AAChF,UAAM;AAAA,MACJ,iEAAiE,mBAAmB;AAAA,IACtF;AAAA,EACF;AACA,QAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,MAAI,qBAAqB;AACzB,aAAW,CAAC,OAAO,KAAK,MAAM,SAAS,WAAW,CAAC,GAAG,QAAQ,GAAG;AAC/D,QAAI,SAAS,QAAQ,OAAO,UAAU,UAAU;AAC9C,YAAM,YAAY,8BAA8B,KAAK,mBAAmB;AAAA,IAC1E;AACA,UAAM,gBAAgB,YAAY,OAAO,CAAC,UAAU,MAAM,KAAK,KAAK,IAAI;AACxE,QAAI,cAAc,WAAW,GAAG;AAC9B,YAAM;AAAA,QACJ,8BAA8B,KAAK,QAAQ,cAAc,MAAM;AAAA,MACjE;AAAA,IACF;AACA,UAAM,aAAa,OAAO,MAAM,KAAK;AACrC,QACE,CAAC,OAAO,cAAc,UAAU,KAC7B,cAAc,sBACd,aAAa,eAChB;AACA,YAAM;AAAA,QACJ,8BAA8B,KAAK,uBAAuB,OAAO,MAAM,KAAK,CAAC,WACjE,kBAAkB,oBAAoB,aAAa;AAAA,MACjE;AAAA,IACF;AACA,yBAAqB;AAAA,EACvB;AACA,SAAO;AACT;AAEA,SAAS,YAAY,QAA0B;AAC7C,QAAM,OAAOC,YAAW,QAAQ;AAChC,aAAW,SAAS,QAAQ;AAC1B,UAAM,QAAQ,OAAO,KAAK,OAAO,MAAM;AACvC,UAAM,SAAS,OAAO,MAAM,CAAC;AAC7B,WAAO,iBAAiB,OAAO,MAAM,UAAU,CAAC;AAChD,SAAK,OAAO,MAAM;AAClB,SAAK,OAAO,KAAK;AACjB,SAAK,OAAO,GAAG;AAAA,EACjB;AACA,SAAO,KAAK,OAAO,KAAK;AAC1B;AAEA,SAAS,kBAAkB,MAAgD;AACzE,QAAM,eAAe,KAAK,QAAQ;AAClC,SAAO,EAAE,SAAS,KAAK,MAAM,eAAe,GAAI,GAAG,OAAQ,eAAe,MAAQ,IAAU;AAC9F;AAEA,SAAS,iBAAiB,MAAyE;AACjG,QAAM,SAAS,OAAO,KAAK,UAAU;AACrC,QAAM,QAAQ,OAAO,KAAK,IAAI;AAC9B,QAAM,QAAQ,MAAM,QAAQ,MAAM;AAClC,MAAI,QAAQ,EAAG,OAAM,IAAI,qBAAqB,wCAAwC;AACtF,QAAM,QAAQ,MAAM,SAAS,GAAG,KAAK,EAAE,SAAS,MAAM,EAAE,MAAM,MAAM;AACpE,QAAM,MAAM;AACZ,QAAM,UAAkC,CAAC;AACzC,aAAW,QAAQ,OAAO;AACxB,UAAM,QAAQ,KAAK,QAAQ,GAAG;AAC9B,QAAI,QAAQ,EAAG,SAAQ,KAAK,MAAM,GAAG,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,KAAK,MAAM,QAAQ,CAAC,EAAE,KAAK;AAAA,EACjG;AACA,SAAO,EAAE,SAAS,MAAM,IAAI,WAAW,MAAM,SAAS,QAAQ,OAAO,UAAU,CAAC,EAAE;AACpF;AAEA,eAAsB,gCACpB,YACA,SAC8B;AAC9B,MAAI,OAAO,QAAQ;AACnB,MAAI,sBAAsB,QAAQ;AAClC,MAAI,yBAAyB,QAAQ,eAAe;AACpD,MAAI,qBAAqB,YAAY,EAAE,WAAW,cAAc,GAAG;AACjE,UAAM,SAAS,iBAAiB,IAAI;AACpC,WAAO,OAAO;AACd,UAAM,kBAAkB,OAAO,QAAQ,cAAc;AACrD,6BAAyB,mBAAmB;AAC5C,0BAAsB;AAAA,EACxB;AACA,MAAI,WAAW,WAAW,WAAW,EAAG,QAAO,EAAE,MAAM,CAAC,EAAE;AAC1D,QAAM,iBAAiB,WAAW,WAAW,CAAC;AAC9C,MACE,WAAW,WAAW,WAAW,KAC9B,gBAAgB,OAAO,WAC1B;AACA,WAAO,EAAE,MAAM,CAAC,IAAI,SAAS,MAAM,mBAAmB,CAAC,EAAE;AAAA,EAC3D;AACA,QAAM,cAAc,uBAAuB;AAC3C,MAAI,YAAY,YAAY,EAAE,WAAW,qBAAqB,GAAG;AAC/D,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,IAAI,SAAS,WAAW,KAAK,IAAI,EAAE,QAAQ;AAAA,QACtD,SAAS,EAAE,gBAAgB,YAAY;AAAA,MACzC,CAAC,EAAE,SAAS;AAAA,IACd,SAAS,OAAO;AACd,YAAM,IAAI,qBAAqB,qDAAqD,EAAE,OAAO,MAAM,CAAC;AAAA,IACtG;AACA,UAAM,OAAkB,CAAC;AACzB,eAAW,CAAC,OAAO,SAAS,KAAK,WAAW,WAAW,QAAQ,GAAG;AAChE,YAAM,OAAO,KAAK,IAAI,UAAU,IAAI,KAAK,KAAK,IAAI,OAAO,KAAK,CAAC;AAC/D,UAAI,QAAQ,MAAM;AAChB,aAAK,KAAK,MAAS;AAAA,MACrB,WAAW,UAAU,OAAO,SAAS,UAAU,OAAO,WAAW;AAC/D,cAAM,QAAQ,OAAO,SAAS,WAC1B,IAAI,YAAY,EAAE,OAAO,IAAI,IAC7B,IAAI,WAAW,MAAM,KAAK,YAAY,CAAC;AAC3C,cAAM,kBAAkB,OAAO,SAAS,WACpC,6BACA,KAAK,QAAQ;AACjB,aAAK,KAAK,UAAU,OAAO,YACvB,IAAI,SAAS,OAAO,eAAe,IACnC,IAAI,KAAK,OAAO,eAAe,CAAC;AAAA,MACtC,OAAO;AACL,YAAI;AACF,gBAAM,QAAQ,OAAO,SAAS,WAC1B,IAAI,YAAY,EAAE,OAAO,IAAI,IAC7B,IAAI,WAAW,MAAM,KAAK,YAAY,CAAC;AAC3C,eAAK,KAAK,gBAAgB,KAAK,CAAC;AAAA,QAClC,SAAS,OAAO;AACd,cAAI,iBAAiB,qBAAsB,OAAM;AACjD,gBAAM,IAAI;AAAA,YACR,6CAA6C,UAAU,IAAI;AAAA,YAC3D,EAAE,OAAO,MAAM;AAAA,UACjB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO,EAAE,KAAK;AAAA,EAChB;AAKA,MAAI,KAAK,eAAe,MAAM,CAAC,gBAAgB,OAAO,SAAS,CAAC,yBAAyB;AACvF,WAAO,EAAE,MAAM,CAAC,EAAE;AAAA,EACpB;AACA,MAAI,gBAAgB,OAAO,MAAO,QAAO,EAAE,MAAM,CAAC,IAAI,KAAK,MAAM,WAAW,CAAC,EAAE;AAC/E,MAAI,CAAC,YAAY,YAAY,EAAE,SAAS,MAAM,GAAG;AAC/C,UAAM,IAAI;AAAA,MACR,wCAAwC,gBAAgB,QAAQ,UAAU,UAAU,WAAW;AAAA,IACjG;AAAA,EACF;AACA,SAAO,EAAE,MAAM,CAAC,gBAAgB,IAAI,CAAC,EAAE;AACzC;AAaA,IAAM,+BAA+B,oBAAI,IAAI;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAsBM,IAAM,kBAAN,MAAsB;AAAA,EAsB3B,YAA6B,aAAyB;AAAzB;AAC3B,SAAK,OAAO,WAAW;AAAA,MACrB,MAAM,CAAC,SAAS,MAAM,gBAAgB,aAAa;AACjD,YAAI,KAAK,QAAS;AAClB,cAAM,iBAAiB,KAAK,UAAU,IAAI,cAAc,GAAG,SAAS,MAAM;AAC1E,cAAM,yBACJ,SAAS,aACN,kBAAkB,QAClB,0BAA0B,cAAc;AAC7C,cAAM,WAAW,KAAK,SAAS,IAAI,cAAc,KAAK,oBAAI,IAAY;AACtE,iBAAS,IAAI,OAAO;AACpB,aAAK,SAAS,IAAI,gBAAgB,QAAQ;AAC1C,YAAI,SAAS,aAAa,OAAO,aAAa,YAAY,YAAY,MAAM;AAC1E,eAAK,WAAW,IAAI,UAAU,OAAO;AAAA,QACvC;AACA,cAAM,gBAAgB,IAAI,IAAI,KAAK,OAAO,IAAI,cAAc,KAAK,CAAC,CAAC;AACnE,aAAK,UAAU,IAAI,SAAS;AAAA,UAC1B;AAAA,UACA;AAAA,UACA,SAAS,SAAS,aAAa,OAAO,aAAa,YAAY,YAAY,OACvE,IAAI,QAAQ,QAAQ,IACpB;AAAA,UACJ,SAAS;AAAA,QACX,CAAC;AACD,YAAI,wBAAwB;AAC1B,eAAK,2BAA2B,IAAI,OAAO;AAC3C,eAAK,mCAAmC,GAAG,EAAE,GAAG,IAAI,OAAO;AAC3D,eAAK,2BAA2B,OAAO;AAAA,QACzC;AACA,YAAI,KAAK,kBAAmB;AAC5B,cAAM,YAAY,oBAAI,IAAI;AAAA,UACxB,GAAI,KAAK,OAAO,IAAIC,kBAAiB,CAAC,KAAK,CAAC;AAAA,UAC5C,GAAG;AAAA,QACL,CAAC;AACD,mBAAW,SAAS,UAAW,MAAK,kBAAkB,SAAS,KAAK;AAAA,MACtE;AAAA,MACA,gBAAgB,CAAC,YAAY;AAC3B,YAAI,KAAK,QAAS;AAClB,aAAK,wBAAwB,OAAO;AACpC,YAAI,KAAK,2BAA2B,OAAO,OAAO,GAAG;AACnD,eAAK,0BAA0B,OAAO;AAAA,QACxC;AACA,YAAI,KAAK,6BAA6B,OAAO,OAAO,GAAG;AACrD,eAAK,0BAA0B,OAAO;AAAA,QACxC;AACA,aAAK,iCAAiC,OAAO;AAC7C,cAAM,gBAAgB,KAAK,OAAO,IAAIA,kBAAiB,CAAC;AACxD,YAAI,iBAAiB,MAAM;AACzB,qBAAW,SAAS,cAAe,MAAK,kBAAkB,SAAS,KAAK;AAAA,QAC1E;AACA,aAAK,mBAAmB,SAAS,KAAK;AACtC,aAAK,cAAc;AAAA,MACrB;AAAA,MACA,SAAS,CAAC,YAAY;AACpB,YAAI,KAAK,QAAS;AAClB,aAAK,wBAAwB,OAAO;AACpC,YAAI,KAAK,2BAA2B,OAAO,OAAO,GAAG;AACnD,eAAK,0BAA0B,OAAO;AAAA,QACxC;AACA,YAAI,KAAK,6BAA6B,OAAO,OAAO,GAAG;AACrD,eAAK,0BAA0B,OAAO;AAAA,QACxC;AACA,aAAK,iCAAiC,OAAO;AAC7C,aAAK,mBAAmB,SAAS,KAAK;AACtC,aAAK,yBAAyB,OAAO;AACrC,aAAK,cAAc;AAAA,MACrB;AAAA,IACF,CAAC;AACD,SAAK,KAAK,OAAO;AAAA,EACnB;AAAA,EA1FiB;AAAA,EACA,WAAW,oBAAI,IAAyB;AAAA,EACxC,YAAY,oBAAI,IAAkC;AAAA,EAClD,SAAS,oBAAI,IAAyB;AAAA,EACtC,aAAa,oBAAI,IAAyB;AAAA,EAC1C,iBAAiB,oBAAI,IAAyB;AAAA,EAC9C,iBAAiB,oBAAI,IAAyB;AAAA,EAC9C,aAAa,oBAAI,QAAwB;AAAA,EACzC,gBAAgB,oBAAI,IAAY;AAAA,EAChC,uBAAuB,oBAAI,IAAoB;AAAA,EAC/C,6BAA6B,oBAAI,IAAY;AAAA,EAC7C,+BAA+B,oBAAI,IAAY;AAAA,EAC/C,qCAAoD,CAAC;AAAA,EACrD,6BAA6B,oBAAI,IAA6B;AAAA,EAC9D,6BAA6B,oBAAI,IAAiB;AAAA,EAC3D,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB;AAAA,EACA,oBAAoB;AAAA,EACpB,UAAU;AAAA,EAyElB,QAAW,UAAwC;AACjD,UAAM,WAAW,IAAI,cAAc,2BAA2B;AAC9D,QAAI;AACJ,aAAS,gBAAgB,MAAM;AAC7B,WAAK,yBAAyB;AAC9B,eAAS,SAAS;AAIlB,WAAK,eAAe,MAAM;AAAA,IAC5B,CAAC;AACD,aAAS,YAAY;AACrB,WAAO;AAAA,EACT;AAAA,EAEA,2BAAiC;AAC/B,QAAI,KAAK,QAAS;AAClB,UAAM,UAAUA,kBAAiB;AACjC,SAAK,cAAc,OAAO,OAAO;AACjC,SAAK,kBAAkB,SAAS,KAAK,SAAS;AAC9C,SAAK,aAAa;AAClB,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,eAAe,SAAiC;AAC9C,UAAM,UAAU,KAAK,WAAW,IAAI,OAAO;AAC3C,QAAI,WAAW,KAAM;AACrB,SAAK,cAAc,IAAI,OAAO;AAC9B,SAAK,wBAAwB,OAAO;AACpC,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,2BAA2B,SAA0B;AACnD,QAAI,KAAK,QAAS,QAAO;AACzB,UAAM,QAAQ,KAAK,qBAAqB,IAAI,OAAO,KAAK;AACxD,SAAK,qBAAqB,IAAI,SAAS,QAAQ,CAAC;AAChD,QAAI,UAAU,GAAG;AACf,WAAK,cAAc,IAAI,OAAO;AAC9B,WAAK,wBAAwB,OAAO;AAAA,IACtC;AACA,SAAK,cAAc;AACnB,WAAO;AAAA,EACT;AAAA,EAEA,0BAA0B,SAAuB;AAC/C,QAAI,KAAK,QAAS;AAClB,UAAM,QAAQ,KAAK,qBAAqB,IAAI,OAAO;AACnD,QAAI,SAAS,KAAM;AACnB,QAAI,QAAQ,GAAG;AACb,WAAK,qBAAqB,IAAI,SAAS,QAAQ,CAAC;AAChD;AAAA,IACF;AACA,SAAK,qBAAqB,OAAO,OAAO;AACxC,SAAK,cAAc,OAAO,OAAO;AACjC,UAAM,gBAAgB,KAAK,OAAO,IAAIA,kBAAiB,CAAC;AACxD,QAAI,iBAAiB,MAAM;AACzB,iBAAW,SAAS,cAAe,MAAK,kBAAkB,SAAS,KAAK;AAAA,IAC1E;AAAA,EACF;AAAA,EAEA,0BAA0B,SAAuB;AAC/C,QAAI,KAAK,QAAS;AAClB,UAAM,QAAQ,KAAK,qBAAqB,IAAI,OAAO;AACnD,QAAI,SAAS,KAAM;AACnB,QAAI,QAAQ,GAAG;AACb,WAAK,qBAAqB,IAAI,SAAS,QAAQ,CAAC;AAChD;AAAA,IACF;AACA,SAAK,qBAAqB,OAAO,OAAO;AACxC,SAAK,cAAc,OAAO,OAAO;AAKjC,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,gCAAyC;AACvC,WAAO,KAAK,qBAAqB,OAAO;AAAA,EAC1C;AAAA,EAEA,qBAA8B;AAC5B,QAAI,KAAK,2BAA2B,OAAO,EAAG,QAAO;AACrD,eAAW,aAAa,KAAK,eAAe,OAAO,GAAG;AACpD,UAAI,UAAU,OAAO,EAAG,QAAO;AAAA,IACjC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,eAAqB;AACnB,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,sBACE,SACA,YAAyC,CAAC,OAAO,GAC3C;AACN,QAAI,KAAK,QAAS;AAClB,UAAM,cAAc,oBAAI,IAAY;AACpC,eAAW,YAAY,WAAW;AAChC,YAAM,UAAU,KAAK,WAAW,IAAI,QAAQ;AAC5C,UAAI,WAAW,KAAM;AAIrB,UAAI,KAAK,UAAU,IAAI,OAAO,GAAG,YAAY,MAAM;AACjD,aAAK,cAAc;AACnB;AAAA,MACF;AACA,kBAAY,IAAI,OAAO;AAAA,IACzB;AACA,QAAI,YAAY,OAAO,EAAG,MAAK,2BAA2B,IAAI,WAAW;AACzE,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,uBACE,SACA,WACS;AACT,QAAI,KAAK,QAAS,QAAO;AACzB,UAAM,UAAU,KAAK,WAAW,IAAI,OAAO;AAC3C,QAAI,WAAW,KAAM,QAAO;AAC5B,QAAI,KAAK,UAAU,IAAI,OAAO,GAAG,YAAY,MAAM;AACjD,gBAAU;AACV,aAAO;AAAA,IACT;AACA,UAAM,YAAY,KAAK,2BAA2B,IAAI,OAAO,KAAK,oBAAI,IAAgB;AACtF,cAAU,IAAI,SAAS;AACvB,SAAK,2BAA2B,IAAI,SAAS,SAAS;AACtD,WAAO;AAAA,EACT;AAAA,EAEA,+BAA+B,SAAiC;AAC9D,QAAI,KAAK,QAAS;AAClB,UAAM,UAAU,KAAK,WAAW,IAAI,OAAO;AAC3C,QACE,WAAW,QACR,KAAK,UAAU,IAAI,OAAO,GAAG,YAAY,QACzC,KAAK,2BAA2B,IAAI,OAAO,KAC3C,KAAK,6BAA6B,IAAI,OAAO,GAChD;AACA;AAAA,IACF;AACA,SAAK,6BAA6B,IAAI,OAAO;AAC7C,SAAK,mCAAmC,GAAG,EAAE,GAAG,IAAI,OAAO;AAC3D,SAAK,2BAA2B,OAAO;AAAA,EACzC;AAAA,EAEA,gCAAmC,UAAsB;AACvD,UAAM,yBAAyB,oBAAI,IAAY;AAC/C,SAAK,mCAAmC,KAAK,sBAAsB;AACnE,QAAI;AACF,aAAO,SAAS;AAAA,IAClB,UAAE;AACA,WAAK,mCAAmC,IAAI;AAI5C,WAAK,oCAAoC,sBAAsB;AAAA,IACjE;AAAA,EACF;AAAA,EAEA,oBAAuB,UAAsB;AAC3C,QAAI,KAAK,QAAS,QAAO,SAAS;AAClC,UAAM,WAAW,KAAK;AACtB,SAAK,oBAAoB;AACzB,QAAI;AACF,aAAO,SAAS;AAAA,IAClB,UAAE;AACA,WAAK,oBAAoB;AAAA,IAC3B;AAAA,EACF;AAAA,EAEA,OAAa;AACX,QAAI,KAAK,QAAS;AAClB,SAAK,UAAU;AACf,SAAK,KAAK,QAAQ;AAClB,QAAI,KAAK,eAAe,KAAM,gBAAe,KAAK,WAAW;AAC7D,SAAK,cAAc;AACnB,SAAK,SAAS,MAAM;AACpB,SAAK,UAAU,MAAM;AACrB,SAAK,OAAO,MAAM;AAClB,SAAK,WAAW,MAAM;AACtB,SAAK,eAAe,MAAM;AAC1B,SAAK,eAAe,MAAM;AAC1B,SAAK,qBAAqB,MAAM;AAChC,SAAK,2BAA2B,MAAM;AACtC,SAAK,6BAA6B,MAAM;AACxC,SAAK,mCAAmC,SAAS;AACjD,SAAK,2BAA2B,MAAM;AACtC,SAAK,2BAA2B,MAAM;AAAA,EACxC;AAAA,EAEQ,wBAAwB,SAAuB;AACrD,UAAM,YAAY,KAAK,2BAA2B,IAAI,OAAO;AAC7D,QAAI,aAAa,KAAM;AACvB,SAAK,2BAA2B,OAAO,OAAO;AAC9C,eAAW,YAAY,UAAW,UAAS;AAAA,EAC7C;AAAA,EAEQ,iCAAiC,SAAuB;AAC9D,eAAW,SAAS,CAAC,GAAG,KAAK,0BAA0B,GAAG;AACxD,UAAI,MAAM,IAAI,OAAO,EAAG,MAAK,2BAA2B,OAAO,KAAK;AAAA,IACtE;AAAA,EACF;AAAA,EAEQ,oCAAoC,eAAkC;AAC5E,eAAW,WAAW,eAAe;AACnC,UAAI,KAAK,2BAA2B,OAAO,OAAO,GAAG;AACnD,aAAK,0BAA0B,OAAO;AAAA,MACxC;AACA,UAAI,KAAK,6BAA6B,OAAO,OAAO,GAAG;AACrD,aAAK,0BAA0B,OAAO;AAAA,MACxC;AAAA,IACF;AACA,kBAAc,MAAM;AAAA,EACtB;AAAA,EAEQ,kBAAkB,SAAiB,OAAqB;AAC9D,QAAI,KAAK,cAAc,IAAI,OAAO,EAAG;AACrC,UAAM,SAAS,KAAK,OAAO,IAAI,OAAO,KAAK,oBAAI,IAAY;AAC3D,QAAI,CAAC,OAAO,IAAI,KAAK,GAAG;AACtB,aAAO,IAAI,KAAK;AAChB,WAAK,OAAO,IAAI,SAAS,MAAM;AAC/B,YAAM,aAAa,KAAK,WAAW,IAAI,OAAO,KAAK,oBAAI,IAAY;AACnE,iBAAW,IAAI,KAAK;AACpB,WAAK,WAAW,IAAI,SAAS,UAAU;AACvC,YAAM,iBAAiB,KAAK,eAAe,IAAI,KAAK,KAAK,oBAAI,IAAY;AACzE,qBAAe,IAAI,OAAO;AAC1B,WAAK,eAAe,IAAI,OAAO,cAAc;AAC7C,YAAM,WAAW,KAAK,UAAU,IAAI,OAAO;AAC3C,UAAI,UAAU,WAAW,KAAK,WAAW,UAAU,KAAK,GAAG;AACzD,cAAM,YAAY,KAAK,eAAe,IAAI,KAAK,KAAK,oBAAI,IAAY;AACpE,kBAAU,IAAI,OAAO;AACrB,aAAK,eAAe,IAAI,OAAO,SAAS;AAAA,MAC1C;AAAA,IACF;AACA,eAAW,SAAS,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,GAAG;AACpD,WAAK,kBAAkB,OAAO,KAAK;AAAA,IACrC;AAAA,EACF;AAAA,EAEQ,WAAW,UAAgC,OAAwB;AACzE,QAAI,SAAS,SAAS,WAAW;AAC/B,aAAO,EAAE,KAAK,WAAW,IAAI,SAAS,cAAc,GAAG,IAAI,KAAK,KAAK;AAAA,IACvE;AACA,WAAO,CAAC,6BAA6B,IAAI,SAAS,IAAI;AAAA,EACxD;AAAA,EAEQ,mBAAmB,SAAiB,SAAwB;AAClE,UAAM,WAAW,KAAK,UAAU,IAAI,OAAO;AAC3C,QAAI,YAAY,QAAQ,SAAS,YAAY,QAAS;AACtD,aAAS,UAAU;AACnB,eAAW,SAAS,KAAK,OAAO,IAAI,OAAO,KAAK,CAAC,GAAG;AAClD,YAAM,YAAY,KAAK,eAAe,IAAI,KAAK;AAC/C,UAAI,WAAW,KAAK,WAAW,UAAU,KAAK,GAAG;AAC/C,cAAM,OAAO,aAAa,oBAAI,IAAY;AAC1C,aAAK,IAAI,OAAO;AAChB,aAAK,eAAe,IAAI,OAAO,IAAI;AAAA,MACrC,OAAO;AACL,mBAAW,OAAO,OAAO;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,wBAAwB,SAAuB;AACrD,SAAK,wBAAwB,OAAO;AACpC,eAAW,SAAS,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,GAAG;AACpD,WAAK,wBAAwB,KAAK;AAAA,IACpC;AAAA,EACF;AAAA,EAEQ,wBAAwB,SAAuB;AACrD,UAAM,SAAS,KAAK,OAAO,IAAI,OAAO;AACtC,QAAI,UAAU,KAAM;AACpB,eAAW,SAAS,QAAQ;AAC1B,YAAM,YAAY,KAAK,eAAe,IAAI,KAAK;AAC/C,iBAAW,OAAO,OAAO;AACzB,UAAI,WAAW,SAAS,EAAG,MAAK,eAAe,OAAO,KAAK;AAC3D,YAAM,YAAY,KAAK,eAAe,IAAI,KAAK;AAC/C,iBAAW,OAAO,OAAO;AACzB,UAAI,WAAW,SAAS,EAAG,MAAK,eAAe,OAAO,KAAK;AAAA,IAC7D;AACA,SAAK,OAAO,OAAO,OAAO;AAAA,EAC5B;AAAA,EAEQ,yBAAyB,SAAuB;AACtD,UAAM,WAAW,KAAK,UAAU,IAAI,OAAO;AAC3C,QAAI,YAAY,KAAM;AACtB,SAAK,UAAU,OAAO,OAAO;AAC7B,SAAK,cAAc,OAAO,OAAO;AACjC,SAAK,wBAAwB,OAAO;AACpC,SAAK,WAAW,OAAO,OAAO;AAC9B,UAAM,WAAW,KAAK,SAAS,IAAI,SAAS,cAAc;AAC1D,cAAU,OAAO,OAAO;AACxB,QAAI,UAAU,SAAS,EAAG,MAAK,SAAS,OAAO,SAAS,cAAc;AAItE,SAAK,SAAS,OAAO,OAAO;AAAA,EAC9B;AAAA,EAEQ,gBAAsB;AAC5B,QAAI,KAAK,WAAW,KAAK,eAAgB;AACzC,SAAK,iBAAiB;AACtB,UAAM,WAAW,KAAK;AACtB,SAAK,oBAAoB;AACzB,QAAI;AACF,WAAK,cAAc,aAAa,MAAM;AACpC,aAAK,iBAAiB;AACtB,aAAK,cAAc;AACnB,aAAK,YAAY;AAAA,MACnB,CAAC;AAAA,IACH,UAAE;AACA,WAAK,oBAAoB;AAAA,IAC3B;AAAA,EACF;AACF;AAEA,IAAM,qBAAN,cAAoC,QAAW;AAAA,EAC5B;AAAA,EAEjB,YAAY,QAAoB,WAA4B;AAC1D,QAAI;AACJ,UAAM,CAAC,SAAS,WAAW;AACzB,eAAS,OAAO,KAAK,SAAS,MAAM;AAAA,IACtC,CAAC;AACD,SAAK,YAAY;AACjB,4BAAwB,IAAI;AAC5B,cAAU,eAAe,MAAM;AAC/B,cAAU,eAAe,IAAI;AAC7B,QAAI,UAAU,KAAM,WAAU,eAAe,MAAM;AAAA,EACrD;AAAA,EAEA,YAAY,OAAO,OAAO,IAAwB;AAChD,WAAO;AAAA,EACT;AAAA,EAES,KACP,aACA,YAC8B;AAC9B,UAAM,iBAAiBA,kBAAiB;AACxC,UAAM,wBACJ,KAAK,UAAU,2BAA2B,cAAc;AAC1D,QAAI,uBAAuB;AAC3B,UAAM,wBAAwB,4BAA4B,MAAM,MAAM;AACpE,UAAI,CAAC,yBAAyB,qBAAsB;AACpD,6BAAuB;AACvB,WAAK,UAAU,0BAA0B,cAAc;AAAA,IACzD,CAAC;AACD,UAAM,eAAe,MAAM;AAAA,MACzB,CAAC,UAAU;AACT,aAAK,UAAU,yBAAyB;AACxC,8BAAsB,OAAO;AAC7B,YAAI,yBAAyB,CAAC,sBAAsB;AAClD,eAAK,UAAU,0BAA0B,cAAc;AAAA,QACzD;AACA,YAAI,eAAe,KAAM,QAAO;AAChC,eAAO,YAAY,KAAK;AAAA,MAC1B;AAAA,MACA,CAAC,WAAW;AACV,aAAK,UAAU,yBAAyB;AACxC,8BAAsB,OAAO;AAC7B,YAAI,yBAAyB,CAAC,sBAAsB;AAClD,eAAK,UAAU,0BAA0B,cAAc;AAAA,QACzD;AACA,YAAI,cAAc,KAAM,OAAM;AAC9B,eAAO,WAAW,MAAM;AAAA,MAC1B;AAAA,IACF;AACA,0BAAsB,KAAK,YAAY;AACvC,SAAK,UAAU,eAAe,YAAY;AAC1C,WAAO;AAAA,EACT;AAAA,EAEA,CAAC,6BAA6B,EAC5B,aACA,YAC8B;AAC9B,UAAM,eAAe,MAAM,KAAK,aAAa,UAAU;AACvD,4BAAwB,cAAc,IAAI;AAC1C,SAAK,UAAU,eAAe,YAAY;AAC1C,WAAO;AAAA,EACT;AAAA,EAEA,CAAC,wBAAwB,EACvB,aACA,YACM;AACN,UAAM,cAAc,MAAM,KAAK,aAAa,UAAU;AACtD,SAAK,UAAU,eAAe,WAAW;AACzC,SAAK,YAAY,MAAM,MAAM,MAAS;AAAA,EACxC;AACF;AAEA,IAAM,gBAAN,MAAoB;AAAA,EACD;AAAA,EACA,QAAuB,CAAC;AAAA,EACxB,WAA0B,CAAC;AAAA,EAC3B,mBAAmB,oBAAI,IAAuB;AAAA,EAC9C,gBAAgB,oBAAI,IAA6C;AAAA,EACjE,aAA+B,CAAC;AAAA,EAChC,oBAAoB,oBAAI,IAAY;AAAA,EACpC,oBAAoB,oBAAI,IAAY;AAAA,EACpC,kBAAkB,oBAAI,IAAY;AAAA,EAClC,qBAAqB,oBAAI,IAAY;AAAA,EACrC;AAAA;AAAA,EAET,0BAA0B;AAAA,EAC1B,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf;AAAA,EAER,YAAY,SAAoB;AAC9B,SAAK,YAAY,IAAI,gBAAgB,MAAM,KAAK,iCAAiC,CAAC;AAClF,SAAK,UAAU,QAAQ,IAAI,CAAC,UAAU;AACpC,UAAI,MAAM,6BAA6B,MAAM;AAC3C,eAAO,EAAE,MAAM,UAAU,OAAO,MAAM,2BAA2B,UAAU,MAAM;AAAA,MACnF;AACA,UAAI,MAAM,uBAAuB,MAAM;AACrC,cAAM,cAA2B;AAAA,UAC/B,MAAM;AAAA,UACN,OAAO,MAAM;AAAA,UACb,UAAU;AAAA,QACZ;AACA,aAAK,MAAM,KAAK,WAAW;AAC3B,eAAO;AAAA,MACT;AACA,UAAI,MAAM,8BAA8B,MAAM;AAC5C,cAAM,cAA2B;AAAA,UAC/B,MAAM;AAAA,UACN,OAAO,MAAM;AAAA,UACb,UAAU;AAAA,QACZ;AACA,aAAK,SAAS,KAAK,WAAW;AAC9B,eAAO;AAAA,MACT;AACA,aAAO,EAAE,MAAM,WAAW,OAAO,OAAO,UAAU,MAAM;AAAA,IAC1D,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,MAA0B,IAA0C;AACpF,SAAK,cAAc;AACnB,UAAM,UAAU,SAAS,SAAS,KAAK,QAAQ,KAAK;AACpD,UAAM,SAAS,SAAS,SAAS,KAAK,aAAa,KAAK;AACxD,UAAM,cAAc,SAAS,SAAS,KAAK,kBAAkB,KAAK;AAClE,QAAI,UAAU,QAAQ,QAAQ;AAC5B,kBAAY,OAAO,EAAE;AACrB,UAAI,KAAK,iBAAiB,KAAK,QAAQ,OAAQ,QAAO;AACtD,YAAM,UAAU,KAAK,QAAQ,KAAK,YAAY;AAM9C,UACE,SAAS,UACN,QAAQ,SAAS,aACjB,CAAC,KAAK,mBAAmB,IAAI,OAAO,QAAQ,MAAM,kBAAkB,EAAE,CAAC,GAC1E;AACA,aAAK;AAAA,UACH,cAAc,IAAI,cAAc,EAAE,kBAAkB,QAAQ,IAAI,UACpD,OAAO,QAAQ,MAAM,kBAAkB,EAAE,CAAC;AAAA,QACxD;AAAA,MACF;AACA,YAAM,SAAS,SAAe;AAC9B,WAAK,WAAW,KAAK,MAAM;AAC3B,YAAM,OAAO;AACb,WAAK,iBAAiB;AACtB,aAAO;AAAA,IACT;AACA,UAAM,QAAQ,QAAQ,MAAM;AAC5B,QAAI,SAAS,OAAQ,MAAK,cAAc;AAAA,QACnC,MAAK,iBAAiB;AAC3B,QAAI,MAAM,MAAM,mBAAmB,IAAI;AACrC,WAAK,KAAK,mBAAmB,IAAI,cAAc,EAAE,EAAE;AAAA,IACrD;AACA,gBAAY,OAAO,EAAE;AACrB,UAAM,WAAW;AACjB,QAAI,SAAS,WAAW;AACtB,WAAK,kBAAkB,IAAI,EAAE;AAAA,IAC/B;AACA,SAAK,cAAc;AACnB,WAAO,MAAM;AAAA,EACf;AAAA,EAEA,MAAM,WAAW,IAA0C;AACzD,SAAK,cAAc;AACnB,UAAM,YAAY,KAAK,iBAAiB,IAAI,EAAE;AAC9C,QAAI,aAAa,QAAQ,UAAU,SAAS,GAAG;AAC7C,YAAMC,UAAS,UAAU,MAAM;AAC/B,UAAIA,WAAU,KAAM,MAAK,2BAA2B;AACpD,aAAOA;AAAA,IACT;AACA,QAAI,KAAK,iBAAiB,KAAK,QAAQ,OAAQ,QAAO;AACtD,UAAM,UAAU,KAAK,QAAQ,KAAK,YAAY;AAC9C,UAAM,YAAY,OAAO,QAAQ,MAAM,kBAAkB,EAAE;AAC3D,UAAM,cAAc,QAAQ,SAAS,SACjC,KAAK,gBAAgB,IAAI,SAAS,IAClC,QAAQ,SAAS,YACf,KAAK,mBAAmB,IAAI,SAAS,IACrC;AACN,UAAM,SAAS,SAA8B;AAC7C,UAAM,UAAU,KAAK,cAAc,IAAI,EAAE,KAAK,CAAC;AAC/C,YAAQ,KAAK,MAAM;AACnB,SAAK,cAAc,IAAI,IAAI,OAAO;AAClC,QAAI,CAAC,YAAa,MAAK,UAAU,aAAa;AAC9C,UAAM,SAAS,MAAM,OAAO;AAC5B,QAAI,UAAU,KAAM,MAAK,2BAA2B;AACpD,WAAO;AAAA,EACT;AAAA,EAEA,2BAAiC;AAC/B,QAAI,KAAK,4BAA4B,EAAG;AACxC,SAAK,2BAA2B;AAChC,SAAK,UAAU,aAAa;AAAA,EAC9B;AAAA,EAEA,iBAAoB,UAAwC;AAC1D,WAAO,KAAK,UAAU,QAAQ,QAAQ;AAAA,EACxC;AAAA,EAEA,kBAAqB,QAAgC;AACnD,WAAO,IAAI,mBAAmB,QAAQ,KAAK,SAAS;AAAA,EACtD;AAAA,EAEA,sBACE,SACA,WACM;AACN,SAAK,UAAU,sBAAsB,SAAS,SAAS;AAAA,EACzD;AAAA,EAEA,uBACE,SACA,WACS;AACT,WAAO,KAAK,UAAU,uBAAuB,SAAS,SAAS;AAAA,EACjE;AAAA,EAEA,+BAA+B,SAAiC;AAC9D,SAAK,UAAU,+BAA+B,OAAO;AAAA,EACvD;AAAA,EAEA,gCAAmC,UAAsB;AACvD,WAAO,KAAK,UAAU,gCAAgC,QAAQ;AAAA,EAChE;AAAA,EAEA,0BAA6B,UAAsB;AACjD,WAAO,KAAK,UAAU,oBAAoB,QAAQ;AAAA,EACpD;AAAA,EAEA,UAAgB;AACd,SAAK,UAAU,KAAK;AAAA,EACtB;AAAA,EAEA,WAAW,IAAkB;AAC3B,SAAK,gBAAgB,IAAI,EAAE;AAAA,EAC7B;AAAA,EAEA,cAAc,IAAkB;AAC9B,SAAK,mBAAmB,IAAI,EAAE;AAAA,EAChC;AAAA,EAEA,YAAY,IAAkB;AAC5B,SAAK,eAAe,QAAQ,EAAE;AAAA,EAChC;AAAA,EAEA,eAAe,IAAkB;AAC/B,SAAK,eAAe,WAAW,EAAE;AAAA,EACnC;AAAA,EAEQ,eAAe,MAA0B,IAAkB;AACjE,UAAM,cAAc,SAAS,SAAS,KAAK,kBAAkB,KAAK;AAClE,gBAAY,OAAO,EAAE;AACrB,UAAM,aAAa,KAAK,WAAW,SAAS,KACvC,CAAC,GAAG,KAAK,cAAc,OAAO,CAAC,EAAE,KAAK,CAAC,YAAY,QAAQ,SAAS,CAAC;AAC1E,QAAI,KAAK,gBAAgB,KAAK,QAAQ,UAAU,CAAC,WAAY;AAC7D,UAAM,UAAU,KAAK,QAAQ,KAAK,YAAY;AAC9C,QAAI,QAAQ,SAAS,QAAQ,QAAQ,MAAM,mBAAmB,IAAI;AAChE,WAAK,KAAK,UAAU,IAAI,cAAc,EAAE,2BAA2B;AAAA,IACrE;AAAA,EACF;AAAA,EAEQ,mCAAyC;AAC/C,QAAI,KAAK,0BAA0B,EAAG;AAMtC,QAAI,CAAC,KAAK,UAAU,8BAA8B,EAAG;AACrD,QAAI,KAAK,UAAU,mBAAmB,EAAG;AACzC,QAAI,KAAK,gBAAgB,KAAK,QAAQ,OAAQ;AAC9C,QAAI,CAAC,CAAC,GAAG,KAAK,cAAc,OAAO,CAAC,EAAE,KAAK,CAAC,YAAY,QAAQ,SAAS,CAAC,EAAG;AAC7E,UAAM,UAAU,KAAK,QAAQ,KAAK,YAAY;AAC9C,UAAM,YAAY,OAAO,QAAQ,MAAM,kBAAkB,EAAE;AAC3D,UAAM,cAAc,QAAQ,SAAS,SACjC,KAAK,gBAAgB,IAAI,SAAS,IAClC,QAAQ,SAAS,YACf,KAAK,mBAAmB,IAAI,SAAS,IACrC;AACN,QAAI,CAAC,aAAa;AAChB,WAAK;AAAA,QACH,+CAA+C,QAAQ,IAAI,UAC/C,SAAS;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,mBAAmB,IAAqB;AACtC,YAAQ,KAAK,iBAAiB,IAAI,EAAE,GAAG,UAAU,KAAK;AAAA,EACxD;AAAA,EAEA,mBAAyB;AACvB,QAAI,KAAK,YAAY,KAAM,OAAM,KAAK;AAAA,EACxC;AAAA,EAEA,iBAAuB;AACrB,SAAK,iBAAiB;AACtB,SAAK,cAAc;AACnB,QAAI,KAAK,iBAAiB,KAAK,QAAQ,QAAQ;AAC7C,YAAM,IAAI,oBAAoB,kEAAkE;AAAA,IAClG;AAAA,EACF;AAAA,EAEQ,gBAAsB;AAC5B,SAAK,iBAAiB;AACtB,WAAO,KAAK,eAAe,KAAK,QAAQ,QAAQ;AAC9C,YAAM,QAAQ,KAAK,QAAQ,KAAK,YAAY;AAC5C,UAAI,MAAM,SAAS,WAAW;AAC5B,aAAK,KAAK,qDAAqD;AAAA,MACjE;AACA,UAAI,MAAM,SAAS,UAAU,MAAM,SAAS,WAAW;AACrD,YAAI,CAAC,MAAM,SAAU;AACrB,aAAK,gBAAgB;AACrB;AAAA,MACF;AACA,YAAM,WAAW;AACjB,WAAK,gBAAgB;AACrB,WAAK,cAAc,MAAM,KAAK;AAAA,IAChC;AACA,eAAW,UAAU,KAAK,WAAW,OAAO,CAAC,EAAG,QAAO,QAAQ;AAC/D,eAAW,WAAW,KAAK,cAAc,OAAO,GAAG;AACjD,iBAAW,UAAU,QAAS,QAAO,QAAQ,MAAS;AAAA,IACxD;AACA,SAAK,cAAc,MAAM;AAAA,EAC3B;AAAA,EAEQ,cAAc,OAAsB;AAC1C,UAAM,KAAK,OAAO,MAAM,kBAAkB,EAAE;AAC5C,QAAI,CAAC,KAAK,kBAAkB,IAAI,EAAE,GAAG;AACnC,WAAK,KAAK,6BAA6B,EAAE,0CAA0C;AAAA,IACrF;AACA,QAAI,KAAK,kBAAkB,IAAI,EAAE,GAAG;AAClC,WAAK,KAAK,yDAAyD,EAAE,EAAE;AAAA,IACzE;AACA,SAAK,kBAAkB,IAAI,EAAE;AAC7B,UAAM,SAAS,KAAK,cAAc,IAAI,EAAE,GAAG,MAAM;AACjD,QAAI,UAAU,MAAM;AAClB,aAAO,QAAQ,KAAK;AACpB,UAAI,KAAK,cAAc,IAAI,EAAE,GAAG,WAAW,EAAG,MAAK,cAAc,OAAO,EAAE;AAC1E;AAAA,IACF;AACA,UAAM,YAAY,KAAK,iBAAiB,IAAI,EAAE,KAAK,CAAC;AACpD,cAAU,KAAK,KAAK;AACpB,SAAK,iBAAiB,IAAI,IAAI,SAAS;AAAA,EACzC;AAAA,EAEQ,KAAK,SAAwB;AACnC,UAAM,KAAK,eAAe,OAAO;AAAA,EACnC;AAAA,EAEQ,eAAe,SAAsC;AAC3D,SAAK,aAAa,IAAI,oBAAoB,OAAO;AACjD,SAAK,UAAU,KAAK;AACpB,eAAW,UAAU,KAAK,WAAW,OAAO,CAAC,EAAG,QAAO,OAAO,KAAK,QAAQ;AAC3E,eAAW,WAAW,KAAK,cAAc,OAAO,GAAG;AACjD,iBAAW,UAAU,QAAS,QAAO,OAAO,KAAK,QAAQ;AAAA,IAC3D;AACA,SAAK,cAAc,MAAM;AACzB,WAAO,KAAK;AAAA,EACd;AACF;AAiBA,IAAM,0BAAN,cAAsC,MAAM;AAAA,EAC1C,YAAY,SAAiB,SAA+B;AAC1D,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,mBAAN,MAAkD;AAAA,EAC9C;AAAA,EACQ;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe,oBAAI,IAAgB;AAAA,EACnC,mBAAmB,oBAAI,IAAiC;AAAA,EACxD,mBAAmB,oBAAI,IAAgB;AAAA,EACvC,qBAAqB,oBAAI,IAA+B;AAAA,EACxD,yBAAyB,oBAAI,IAA+B;AAAA,EAC5D,mBAAgC,CAAC;AAAA,EACjC,wBAA4D,CAAC;AAAA,EAC7D,cAAyB,CAAC;AAAA,EAC1B,cAA6B,CAAC;AAAA,EAC9B,aAAa,IAAI,gBAAgB;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA,0BAAyC,QAAQ,QAAQ;AAAA,EACzD,6BAA4C,QAAQ,QAAQ;AAAA,EAC5D,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,sBAAsB;AAAA,EACtB,wBAAwB;AAAA,EACf,+BAAkD,CAAC;AAAA,EAC5D,WAAW;AAAA,EACX,QAAiB,EAAE,oBAAoB,CAAC,GAAG,wBAAwB,CAAC,EAAE;AAAA,EAC7D,YAAY,KAAK,IAAI;AAAA,EAEtC,YACE,YACA,aACA,YACA,wBAA8C,YAC9C;AACA,SAAK,aAAa;AAClB,SAAK,cAAc;AACnB,SAAK,aAAa;AAClB,SAAK,wBAAwB;AAC7B,SAAK,oBAAoB,OAAO,WAAW,cAAc;AACzD,SAAK,gBAAgB;AACrB,SAAK,IAAI,SAAS,6BAA6B;AAAA,MAC7C,aAAa,WAAW;AAAA,MACxB,aAAa,WAAW,QAAQ,MAAM,UAAU;AAAA,MAChD,kBAAkB,WAAW,QAAQ,UAAU,UAAU;AAAA,IAC3D,CAAC;AAAA,EACH;AAAA,EAEA,QAAc;AACZ,QAAI,KAAK,SAAS;AAChB,WAAK,IAAI,QAAQ,2CAA2C;AAC5D;AAAA,IACF;AACA,SAAK,UAAU;AACf,SAAK,IAAI,QAAQ,6BAA6B;AAC9C,SAAK,aAAa,KAAK,IAAI,EAAE,MAAM,CAAC,UAAU;AAC5C,WAAK,IAAI,SAAS,sCAAsC,CAAC,GAAG,KAAK;AACjE,WAAK,mBAAmB;AAAA,QACtB,aAAa;AAAA,QACb,eAAe;AAAA,MACjB,CAAC;AACD,WAAK,OAAO;AAAA,IACd,CAAC;AAAA,EACH;AAAA,EAEA,oBAAmC;AACjC,WAAO,KAAK,cAAc,QAAQ,QAAQ;AAAA,EAC5C;AAAA,EAEA,MAAM,6BAA6B,WAAqC;AACtE,QAAI,KAAK,sBAAuB,QAAO;AACvC,WAAO,IAAI,QAAiB,CAAC,YAAY;AACvC,UAAI,UAAU;AACd,YAAM,WAAW,MAAM;AACrB,YAAI,QAAS;AACb,kBAAU;AACV,qBAAa,KAAK;AAClB,gBAAQ,IAAI;AAAA,MACd;AACA,YAAM,QAAQ,WAAW,MAAM;AAC7B,YAAI,QAAS;AACb,kBAAU;AACV,cAAM,QAAQ,KAAK,6BAA6B,QAAQ,QAAQ;AAChE,YAAI,SAAS,EAAG,MAAK,6BAA6B,OAAO,OAAO,CAAC;AACjE,gBAAQ,KAAK;AAAA,MACf,GAAG,KAAK,IAAI,WAAW,CAAC,CAAC;AACzB,WAAK,6BAA6B,KAAK,QAAQ;AAG/C,UAAI,KAAK,sBAAuB,UAAS;AAAA,IAC3C,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,SAAkB,IAAI,cAAc,0BAA0B,GAAS;AAC5E,QAAI,KAAK,WAAW,OAAO,QAAS;AACpC,SAAK,IAAI,QAAQ,qCAAqC;AAAA,MACpD,QAAQ,kBAAkB,QAAQ,OAAO,UAAU,OAAO,MAAM;AAAA,IAClE,CAAC;AACD,SAAK,eAAe,MAAM;AAAA,EAC5B;AAAA,EAEQ,eAAe,QAAuB;AAC5C,QAAI,CAAC,KAAK,WAAW,OAAO,QAAS,MAAK,WAAW,MAAM,MAAM;AACjE,UAAM,YAAY,KAAK,WAAW,OAAO,UAAU;AACnD,UAAM,yBAAyB,KAAK,mBAAmB;AACvD,UAAM,6BAA6B,KAAK,uBAAuB;AAC/D,UAAM,kBAAkB,KAAK,YAAY;AACzC,UAAM,mBAAmB,KAAK,YAAY;AAC1C,UAAM,iBAAiB,KAAK,eAAe;AAC3C,eAAW,WAAW,KAAK,mBAAmB,OAAO,EAAG,SAAQ,OAAO,SAAS;AAChF,eAAW,WAAW,KAAK,uBAAuB,OAAO,EAAG,SAAQ,OAAO,SAAS;AACpF,eAAW,UAAU,KAAK,YAAY,OAAO,CAAC,EAAG,QAAO,OAAO,OAAO,SAAS;AAC/E,SAAK,aAAa,SAAS,OAAO,SAAS;AAC3C,SAAK,mBAAmB,MAAM;AAC9B,SAAK,uBAAuB,MAAM;AAClC,SAAK,YAAY,OAAO,CAAC;AACzB,SAAK,cAAc;AACnB,SAAK,MAAM,qBAAqB,CAAC;AACjC,SAAK,MAAM,yBAAyB,CAAC;AACrC,SAAK,IAAI,SAAS,4CAA4C;AAAA,MAC5D,sBAAsB;AAAA,MACtB,0BAA0B;AAAA,MAC1B,uBAAuB;AAAA,MACvB,+BAA+B;AAAA,MAC/B,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,OAAU,YAAkC,MAAsC;AAChF,SAAK,IAAI,SAAS,yCAAyC;AAAA,MACzD,iBAAiB,WAAW;AAAA,MAC5B,gBAAgB,KAAK;AAAA,IACvB,CAAC;AACD,UAAM,SAAS,KAAK,SAAY,YAAY,MAAM,CAAC;AACnD,WAAO,KAAK,QAAQ,kBAAkB,MAAM,KAAK;AAAA,EACnD;AAAA,EAEA,UAAa,QAAuC;AAClD,SAAK,IAAI,SAAS,sCAAsC;AAAA,MACtD,iBAAiB,OAAO,WAAW;AAAA,MACnC,gBAAgB,OAAO,KAAK;AAAA,MAC5B,eAAe,OAAO;AAAA,IACxB,CAAC;AACD,UAAM,SAAS,KAAK,SAAY,OAAO,YAAY,OAAO,MAAM,OAAO,YAAY;AACnF,WAAO,KAAK,QAAQ,kBAAkB,MAAM,KAAK;AAAA,EACnD;AAAA,EAEA,eAAkB,SAAiC;AACjD,WAAO,KAAK,QAAQ,kBAAkB,OAAO,KAAK;AAAA,EACpD;AAAA,EAEA,sBACE,SACA,WACM;AACN,SAAK,QAAQ,sBAAsB,SAAS,SAAS;AAAA,EACvD;AAAA,EAEA,uBACE,SACA,WACS;AACT,WAAO,KAAK,QAAQ,uBAAuB,SAAS,SAAS,KAAK;AAAA,EACpE;AAAA,EAEA,+BAA+B,SAAiC;AAC9D,SAAK,QAAQ,+BAA+B,OAAO;AAAA,EACrD;AAAA,EAEA,gCAAmC,UAAsB;AACvD,WAAO,KAAK,QAAQ,gCAAgC,QAAQ,KAAK,SAAS;AAAA,EAC5E;AAAA,EAEA,OACE,YACA,OACA,SACA,YACY;AACZ,UAAM,SAAS,KAAK,UAAa,YAAY,OAAO,SAAS,UAAU;AACvE,WAAO,KAAK,QAAQ,kBAAkB,MAAM,KAAK;AAAA,EACnD;AAAA,EAEA,MAAc,UACZ,YACA,OACA,SACA,YACY;AACZ,QAAI,cAAc;AAClB,QAAI,gBAAgB;AACpB,QAAI,CAAC,YAAY;AACf,UAAI,MAAM,WAAW,GAAG;AACtB,cAAM,IAAI,cAAc,gDAAgD;AAAA,MAC1E;AACA,OAAC,eAAe,GAAG,WAAW,IAAI;AAAA,IACpC;AACA,QAAI,YAAY,WAAW,EAAG,QAAO;AACrC,UAAM,WAAW,KAAK,oBAAoB,MAAM;AAChD,UAAM,cAAc,KAAK,oBAAoB,SAAS;AACtD,UAAM,MAAM,YAAY,IAAI,MAAM,KAAK,cAAc,YAAY,YAAY,CAAC;AAC9E,UAAM,KAAK,IAAI,IAAI,SAAS,CAAC;AAC7B,UAAM,YAAY,KAAK,IAAI;AAC3B,SAAK,IAAI,QAAQ,2BAA2B;AAAA,MAC1C,YAAY;AAAA,MACZ,iBAAiB,WAAW;AAAA,MAC5B,iBAAiB,YAAY;AAAA,MAC7B,YAAY,KAAK,KAAK,YAAY,SAAS,yBAAyB;AAAA,IACtE,CAAC;AACD,UAAM,gBAAgB,IAAI;AAAA,MAAO,CAAC,KAAK,WACpC,QAAQ,KAAK,8BAA8B,KAAK,UAAU,IAAI,SAAS;AAAA,IAC1E;AACA,eAAW,gBAAgB,cAAe,MAAK,QAAQ,WAAW,YAAY;AAC9E,SAAK,QAAQ,cAAc,EAAE;AAC7B,QAAI;AACF,UAAI;AACF,cAAM,KAAK,kBAAkB,KAAK,YAAY,aAAa,eAAe,QAAQ;AAAA,MACpF,SAAS,OAAO;AACd,mBAAW,gBAAgB,cAAe,MAAK,QAAQ,YAAY,YAAY;AAC/E,aAAK,QAAQ,eAAe,EAAE;AAC9B,cAAM;AAAA,MACR;AACA,YAAM,KAAK,cAAc,IAAI,WAAW;AAAA,IAC1C,UAAE;AACA,eAAS,QAAQ;AACjB,kBAAY,QAAQ;AAAA,IACtB;AACA,UAAM,iBAAiB,KAAK,UAAU,OAAO,SAAY,MAAM,KAAK,OAAO,WAAW,EAAE;AACxF,UAAM,SAAS,kBAAkB,MAAM,KAAK;AAAA,MAC1C,CAAC,UAAU,MAAM,2BAA2B,mBAAmB;AAAA,IACjE,EAAE,KAAK,CAAC,UAAU,MAAM,yBAAyB;AACjD,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,KAAK,qBAAwB,MAAM;AAAA,IACtD,UAAE;AACA,UAAI,kBAAkB,KAAM,MAAK,QAAQ,yBAAyB;AAAA,IACpE;AACA,SAAK,IAAI,QAAQ,4BAA4B;AAAA,MAC3C,YAAY;AAAA,MACZ,iBAAiB,WAAW;AAAA,MAC5B,iBAAiB,YAAY;AAAA,MAC7B,aAAa,KAAK,IAAI,IAAI;AAAA,IAC5B,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEQ,cAAc,YAAkC,YAAY,gBAAwB;AAC1F,UAAM,KAAK,YAAY;AAAA,MACrB,OAAO,KAAK,WAAW,cAAc;AAAA,MACrC,KAAK;AAAA,MACL;AAAA,MACA,WAAW;AAAA,IACb,CAAC;AACD,SAAK,oBAAoB;AACzB,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,SACZ,YACA,MACA,cACY;AACZ,UAAM,WAAW,KAAK,oBAAoB,MAAM;AAChD,UAAM,cAAc,KAAK,oBAAoB,SAAS;AACtD,UAAM,KAAK,KAAK,cAAc,UAAU;AACxC,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,aAAa,WAAW,QAAQ,SAAS,cAC1C,KAAK,sBAAsB,aAAa,QAAQ,cAChD;AACL,SAAK,IAAI,QAAQ,kCAAkC;AAAA,MACjD,YAAY;AAAA,MACZ,iBAAiB,WAAW;AAAA,MAC5B,gBAAgB,KAAK;AAAA,MACrB,eAAe;AAAA,MACf,aAAa;AAAA,IACf,CAAC;AACD,SAAK,QAAQ,WAAW,EAAE;AAC1B,SAAK,QAAQ,cAAc,EAAE;AAC7B,QAAI;AACF,UAAI;AACF,cAAM,KAAK,gBAAgB,IAAI,YAAY,MAAM,cAAc,QAAQ;AAAA,MACzE,SAAS,OAAO;AACd,aAAK,QAAQ,YAAY,EAAE;AAC3B,aAAK,QAAQ,eAAe,EAAE;AAC9B,cAAM;AAAA,MACR;AACA,YAAM,KAAK,cAAc,IAAI,WAAW;AAAA,IAC1C,UAAE;AACA,eAAS,QAAQ;AACjB,kBAAY,QAAQ;AAAA,IACtB;AACA,SAAK,IAAI,SAAS,gDAAgD;AAAA,MAChE,YAAY;AAAA,MACZ,iBAAiB,WAAW;AAAA,MAC5B,aAAa;AAAA,MACb,yBAAyB,KAAK,QAAQ,mBAAmB,EAAE,KAAK;AAAA,IAClE,CAAC;AAID,UAAM,iBAAiB,KAAK,UAAU,OAAO,SAAY,MAAM,KAAK,OAAO,WAAW,EAAE;AACxF,UAAM,SAAS,kBAAkB,MAAM,KAAK;AAAA,MAC1C,CAAC,UAAU,MAAM,2BAA2B,mBAAmB;AAAA,IACjE,EAAE,KAAK,CAAC,UAAU,MAAM,yBAAyB;AACjD,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,KAAK,qBAAwB,MAAM;AAAA,IACtD,UAAE;AACA,UAAI,kBAAkB,KAAM,MAAK,QAAQ,yBAAyB;AAAA,IACpE;AACA,SAAK,IAAI,QAAQ,mCAAmC;AAAA,MAClD,YAAY;AAAA,MACZ,iBAAiB,WAAW;AAAA,MAC5B,aAAa;AAAA,MACb,aAAa,KAAK,IAAI,IAAI;AAAA,IAC5B,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,gBACZ,IACA,YACA,MACA,cACA,MACe;AACf,QAAI;AACF,UAAI,eAAe;AACnB,UAAI,KAAK,UAAU,MAAM;AACvB,cAAM,KAAK;AACX,uBAAe;AAAA,MACjB;AACA,YAAM,WAAW,MAAM,KAAK,QAAQ,YAAY,QAAQ,EAAE;AAC1D,UAAI,YAAY,MAAM;AACpB,aAAK,IAAI,SAAS,uCAAuC,EAAE,YAAY,GAAG,CAAC;AAC3E,cAAMC,SAAQ,YAAY,SAAS,QAAQ,+BAA+B;AAC1E,YAAIA,UAAS,KAAM,OAAMA;AACzB;AAAA,MACF;AACA,YAAM,WAAuC,CAAC;AAC9C,UAAI,SAAS;AACb,iBAAW,OAAO,MAAM;AACtB,cAAM,OAAO,wBAAwB,KAAK,MAAM;AAChD,iBAAS,KAAK,IAAI;AAClB,kBAAU,KAAK,MAAM;AAAA,MACvB;AACA,UAAI;AACJ,UAAI,SAAS,SAAS,GAAG;AACvB,aAAK,IAAI,SAAS,8CAA8C;AAAA,UAC9D,YAAY;AAAA,UACZ,gBAAgB,KAAK;AAAA,UACrB,kBAAkB;AAAA,QACpB,CAAC;AACD,YAAI;AACF,qBAAW,MAAM,KAAK,kBAAkB,MAAM;AAC9C,qBAAW,MAAM,KAAK;AAAA,YACpB;AAAA,YACA,aAAa,QAAQ;AAAA,YACrB;AAAA,YACA,EAAE,YAAY,GAAG;AAAA,UACnB;AAAA,QACF,SAASA,QAAO;AACd,cAAI,KAAK,WAAW,OAAO,QAAS,OAAM,KAAK,WAAW,OAAO;AACjE,gBAAM,KAAK;AAAA,YACT,yDAAyD,EAAE;AAAA,YAC3DA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,YAAM,WAAW,OAAO,KAAK,KAAK,UAAU;AAAA,QAC1C,QAAQ;AAAA,QACR;AAAA,QACA,cAAc,WAAW;AAAA,QACzB,eAAe,KAAK;AAAA,MACtB,CAAC,GAAG,MAAM;AACV,YAAM,UAAmB;AAAA,QACvB,SAAS,CAAC,EAAE,cAAc;AAAA,UACxB;AAAA,UACA,QAAQ;AAAA,YACN,WAAW,KAAK,YAAY;AAAA,YAC5B,iBAAiB,KAAK,YAAY;AAAA,YAClC,oBAAoB,KAAK,YAAY;AAAA,YACrC,cAAc,WAAW;AAAA,UAC3B;AAAA,UACA,MAAM,SAAS,IAAI,CAAC,UAAU,EAAE,OAAO,KAAK,OAAO,EAAE;AAAA,UACrD,cAAc;AAAA,QAChB,EAAE,CAAC;AAAA,QACH,oBAAoB;AAAA,MACtB;AACA,UAAI,eAAe,EAAG,SAAQ,UAAU,kBAAkB,IAAI,KAAK,KAAK,IAAI,IAAI,eAAe,GAAI,CAAC;AACpG,UAAI,CAAC,aAAc,OAAM,KAAK;AAC9B,WAAK,IAAI,SAAS,4CAA4C;AAAA,QAC5D,YAAY;AAAA,QACZ,iBAAiB,WAAW;AAAA,QAC5B,eAAe;AAAA,MACjB,CAAC;AACD,WAAK,SAAS,CAAC,EAAE,oBAAoB,EAAE,SAAS,SAAS,EAAE,CAAC,CAAC;AAC7D,WAAK,IAAI,SAAS,yDAAyD,EAAE,YAAY,GAAG,CAAC;AAC7F,YAAM,iBAAiB,KAAK,iBAAiB,CAAC,UAAU,MAAM,qBAAqB,mBAAmB,EAAE;AACxG,WAAK,QAAQ;AACb,YAAM,UAAU,MAAM;AACtB,YAAM,QAAQ,YAAY,QAAQ,qBAAqB,QAAQ,+BAA+B;AAC9F,UAAI,SAAS,KAAM,OAAM;AAAA,IAC3B,UAAE;AACA,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AAAA,EAEA,MAAc,kBACZ,KACA,YACA,OACA,SACA,MACe;AACf,QAAI;AACF,UAAI,eAAe;AACnB,UAAI,KAAK,UAAU,MAAM;AACvB,cAAM,KAAK;AACX,uBAAe;AAAA,MACjB;AACA,YAAM,YAAuB,CAAC;AAC9B,YAAM,YAAsB,CAAC;AAC7B,eAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,2BAA2B;AAC5E,cAAM,MAAM,KAAK,IAAI,MAAM,QAAQ,QAAQ,yBAAyB;AACpE,cAAM,SAAS,IAAI,MAAM,CAAC;AAC1B,cAAM,WAAW,MAAM,KAAK,QAAQ,YAAY,QAAQ,MAAM;AAC9D,YAAI,YAAY,MAAM;AACpB,eAAK,IAAI,SAAS,0CAA0C;AAAA,YAC1D,YAAY;AAAA,YACZ,mBAAmB;AAAA,YACnB,iBAAiB;AAAA,UACnB,CAAC;AACD,gBAAM,QAAQ,YAAY,SAAS,QAAQ,kCAAkC;AAC7E,cAAI,SAAS,KAAM,OAAM;AACzB;AAAA,QACF;AAEA,cAAM,WAAuC,CAAC;AAC9C,YAAI,SAAS;AACb,YAAI,UAAU,GAAG;AACf,gBAAM,QAAQ,wBAAwB,SAAS,MAAM;AACrD,mBAAS,KAAK,KAAK;AACnB,oBAAU,MAAM,MAAM;AAAA,QACxB;AACA,iBAAS,QAAQ,OAAO,QAAQ,KAAK,SAAS,GAAG;AAC/C,gBAAM,QAAQ,wBAAwB,MAAM,KAAK,GAAG,MAAM;AAC1D,mBAAS,KAAK,KAAK;AACnB,oBAAU,MAAM,MAAM;AAAA,QACxB;AACA,YAAI;AACJ,YAAI;AACF,gBAAM,YAAY,MAAM,KAAK,kBAAkB,MAAM;AACrD,qBAAW,MAAM,KAAK;AAAA,YACpB;AAAA,YACA,aAAa,QAAQ;AAAA,YACrB;AAAA,YACA,EAAE,YAAY,QAAQ,mBAAmB,OAAO,iBAAiB,IAAI;AAAA,UACvE;AAAA,QACF,SAAS,OAAO;AACd,cAAI,KAAK,WAAW,OAAO,QAAS,OAAM,KAAK,WAAW,OAAO;AACjE,gBAAM,KAAK;AAAA,YACT,uDAAuD,MAAM;AAAA,YAC7D;AAAA,UACF;AAAA,QACF;AACA,cAAM,aAAa,UAAU,IAAI,IAAI;AACrC,cAAM,UAAU,CAAC;AACjB,iBAAS,QAAQ,OAAO,QAAQ,KAAK,SAAS,GAAG;AAC/C,gBAAM,KAAK,IAAI,KAAK;AACpB,gBAAM,cAAc,UAAU,IAC1B,EAAE,OAAO,SAAS,CAAC,EAAE,OAAO,IAC5B,EAAE,gBAAgB,IAAI,QAAQ,CAAC,EAAE;AACrC,gBAAM,OAAO,SAAS,aAAa,QAAQ,KAAK;AAChD,gBAAM,WAAW,OAAO,KAAK,KAAK,UAAU;AAAA,YAC1C,QAAQ;AAAA,YACR;AAAA,YACA,cAAc,WAAW;AAAA,YACzB,eAAe;AAAA,YACf,WAAW;AAAA,YACX,cAAc,IAAI,IAAI,SAAS,CAAC;AAAA,YAChC,YAAY;AAAA,YACZ,iBAAiB,MAAM;AAAA,UACzB,CAAC,GAAG,MAAM;AACV,kBAAQ,KAAK,EAAE,cAAc;AAAA,YAC3B;AAAA,YACA,QAAQ;AAAA,cACN,WAAW,KAAK,YAAY;AAAA,cAC5B,iBAAiB,KAAK,YAAY;AAAA,cAClC,oBAAoB,KAAK,YAAY;AAAA,cACrC,cAAc,WAAW;AAAA,YAC3B;AAAA,YACA,MAAM,CAAC,aAAa,EAAE,OAAO,KAAK,OAAO,CAAC;AAAA,YAC1C,cAAc;AAAA,UAChB,EAAE,CAAC;AAAA,QACL;AACA,kBAAU,KAAK;AAAA,UACb,oBAAoB;AAAA,YAClB,SAAS,EAAE,SAAS,oBAAoB,OAAO;AAAA,YAC/C;AAAA,UACF;AAAA,QACF,CAAC;AACD,kBAAU,KAAK,MAAM;AAAA,MACvB;AAEA,UAAI,UAAU,WAAW,EAAG;AAC5B,UAAI,CAAC,aAAc,OAAM,KAAK;AAC9B,WAAK,IAAI,SAAS,gDAAgD;AAAA,QAChE,YAAY,IAAI,IAAI,SAAS,CAAC;AAAA,QAC9B,iBAAiB,WAAW;AAAA,QAC5B,mBAAmB,MAAM;AAAA,QACzB,YAAY,UAAU;AAAA,MACxB,CAAC;AACD,WAAK,SAAS,SAAS;AACvB,YAAM,kBAAkB,UAAU,IAAI,CAAC,WAAW;AAChD,cAAM,YAAY,CAAC,UACjB,MAAM,qBAAqB,mBAAmB;AAChD,eAAO;AAAA,UACL;AAAA,UACA,SAAS,KAAK,iBAAiB,SAAS;AAAA,QAC1C;AAAA,MACF,CAAC;AACD,YAAM,kBAAkB,gBAAgB,IAAI,OAAO,EAAE,QAAQ,MAAM;AACjE,cAAM,UAAU,MAAM;AACtB,cAAM,QAAQ;AAAA,UACZ,QAAQ,qBAAqB;AAAA,UAC7B;AAAA,QACF;AACA,YAAI,SAAS,KAAM,OAAM;AAAA,MAC3B,CAAC;AACD,WAAK,QAAQ;AACb,UAAI;AACF,cAAM,QAAQ,IAAI,eAAe;AAAA,MACnC,SAAS,OAAO;AAId,mBAAW,EAAE,UAAU,KAAK,iBAAiB;AAC3C,gBAAM,QAAQ,KAAK,YAAY;AAAA,YAC7B,CAAC,WAAW,OAAO,cAAc;AAAA,UACnC;AACA,cAAI,SAAS,EAAG,MAAK,YAAY,OAAO,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,OAAO,KAAK;AAAA,QAC1E;AACA,cAAM;AAAA,MACR;AAAA,IACF,UAAE;AACA,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AAAA,EAEA,MAAc,cAAc,IAAY,MAAmC;AACzE,QAAI;AACF,YAAM,KAAK;AACX,YAAM,WAAW,MAAM,KAAK,QAAQ,YAAY,WAAW,EAAE;AAC7D,UAAI,YAAY,MAAM;AACpB,aAAK,IAAI,SAAS,+CAA+C,EAAE,YAAY,GAAG,CAAC;AACnF,cAAMA,SAAQ,YAAY,SAAS,QAAQ,wCAAwC;AACnF,YAAIA,UAAS,KAAM,OAAMA;AACzB;AAAA,MACF;AACA,WAAK,IAAI,SAAS,2CAA2C,EAAE,YAAY,GAAG,CAAC;AAC/E,WAAK,SAAS,CAAC,EAAE,2BAA2B,EAAE,gBAAgB,GAAG,EAAE,CAAC,CAAC;AACrE,WAAK,IAAI,SAAS,wDAAwD,EAAE,YAAY,GAAG,CAAC;AAC5F,YAAM,iBAAiB,KAAK;AAAA,QAC1B,CAAC,UAAU,MAAM,4BAA4B,mBAAmB;AAAA,MAClE;AACA,WAAK,QAAQ;AACb,YAAM,UAAU,MAAM;AACtB,YAAM,QAAQ,YAAY,QAAQ,4BAA4B,QAAQ,wCAAwC;AAC9G,UAAI,SAAS,KAAM,OAAM;AAAA,IAC3B,UAAE;AACA,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AAAA,EAEA,MAAc,qBAAwB,OAA4B;AAChE,SAAK,IAAI,SAAS,6CAA6C;AAAA,MAC7D,YAAY,MAAM;AAAA,MAClB,gBAAgB,MAAM;AAAA,MACtB,cAAc,MAAM;AAAA,MACpB,kBAAkB,MAAM,eAAe;AAAA,MACvC,0BAA0B,MAAM,sBAAsB;AAAA,IACxD,CAAC;AACD,QAAI,kBAAkB,IAAI,MAAM,aAAa,EAAG,OAAM,IAAI,aAAa;AACvE,QAAI,gBAAgB,IAAI,MAAM,WAAW,GAAG;AAC1C,UAAI;AACF,cAAM,aAAa,MAAM,KAAK;AAAA,UAC5B,MAAM;AAAA,UACN,MAAM;AAAA,UACN;AAAA,UACA,EAAE,YAAY,MAAM,eAAe;AAAA,QACrC;AACA,eAAO,6BAA6B,UAAU;AAAA,MAChD,SAAS,OAAO;AACd,YAAI,KAAK,WAAW,OAAO,QAAS,OAAM,KAAK,WAAW,OAAO;AACjE,cAAM,KAAK;AAAA,UACT,yDAAyD,OAAO,MAAM,cAAc,CAAC;AAAA,UACrF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,QAAI,gBAAgB,IAAI,MAAM,WAAW,GAAG;AAC1C,UAAI,MAAM,sBAAsB,MAAM;AACpC,YAAI;AACJ,YAAI;AACF,gBAAM,aAAa,MAAM,KAAK;AAAA,YAC5B,MAAM;AAAA,YACN,MAAM;AAAA,YACN;AAAA,YACA,EAAE,YAAY,MAAM,eAAe;AAAA,UACrC;AACA,oBAAU,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,WAAW,IAAI;AAAA,QAC5E,SAAS,OAAO;AACd,cAAI,KAAK,WAAW,OAAO,QAAS,OAAM,KAAK,WAAW,OAAO;AACjE,gBAAM,KAAK;AAAA,YACT,4DAA4D,OAAO,MAAM,cAAc,CAAC;AAAA,YACxF;AAAA,UACF;AAAA,QACF;AACA,cAAM,IAAI,aAAa,OAAO;AAAA,MAChC;AACA,YAAM,IAAI,cAAc,sBAAsB;AAAA,IAChD;AACA,UAAM,KAAK;AAAA,MACT,6CAA6C,OAAO,MAAM,WAAW,CAAC;AAAA,IACxE;AAAA,EACF;AAAA,EAEQ,mBACN,SACA,OACyB;AACzB,UAAM,gBAAgB,KAAK,kBACrB,mBAAmB,0BACnB,UACA,IAAI;AAAA,MACJ;AAAA,MACA,UAAU,SAAY,SAAY,EAAE,MAAM;AAAA,IAC5C;AAKJ,SAAK,gBAAgB;AACrB,SAAK,eAAe,aAAa;AACjC,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,cAAc,UAA8C;AACxE,UAAM,WAAW,KAAK,oBAAoB,MAAM;AAChD,UAAM,KAAK,KAAK,cAAc,SAAS,UAAU;AACjD,SAAK,IAAI,QAAQ,sBAAsB;AAAA,MACrC,YAAY;AAAA,MACZ,iBAAiB,SAAS,WAAW;AAAA,MACrC,gBAAgB,SAAS,KAAK;AAAA,IAChC,CAAC;AACD,SAAK,QAAQ,WAAW,EAAE;AAC1B,QAAI;AACF,YAAM,KAAK,gBAAgB,IAAI,SAAS,YAAY,SAAS,MAAM,GAAG,QAAQ;AAAA,IAChF,SAAS,OAAO;AACd,WAAK,QAAQ,YAAY,EAAE;AAC3B,YAAM;AAAA,IACR;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,oBAAoB,MAAwC;AAClE,UAAM,WAAW,SAAS,SAAS,KAAK,0BAA0B,KAAK;AACvE,QAAI;AACJ,UAAM,WAAW,IAAI,QAAc,CAAC,YAAY;AAAE,sBAAgB;AAAA,IAAS,CAAC;AAC5E,UAAM,OAAO,SAAS,KAAK,MAAM,QAAQ;AACzC,QAAI,SAAS,OAAQ,MAAK,0BAA0B;AAAA,QAC/C,MAAK,6BAA6B;AACvC,QAAI,aAAa;AACjB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS,MAAM;AACb,YAAI,WAAY;AAChB,qBAAa;AACb,sBAAc;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,MAAqB;AACjC,QAAI;AACJ,SAAK,IAAI,QAAQ,gCAAgC;AAAA,MAC/C,aAAa,KAAK,WAAW;AAAA,MAC7B,UAAU,KAAK,YAAY;AAAA,IAC7B,CAAC;AACD,SAAK,mBAAmB,uBAAuB,sBAAsB;AACrE,QAAI;AACF,YAAM,SAAS,KAAK,WAAW,UAAU,CAAC;AAC1C,YAAM,UAAU,OAAO,QAAQ,CAAC;AAChC,YAAM,QAAQ,OAAO,YAAY,CAAC;AAClC,WAAK,IAAI,SAAS,+BAA+B;AAAA,QAC/C,cAAc,QAAQ;AAAA,QACtB,YAAY,MAAM;AAAA,QAClB,8BAA8B,OAAO,sBAAsB,UAAU;AAAA,MACvE,CAAC;AACD,UAAI,QAAQ,WAAW,MAAM,OAAQ,OAAM,IAAI,MAAM,0CAA0C;AAC/F,YAAM,SAAS,MAAM,QAAQ,IAAI,QAAQ;AAAA,QACvC,CAAC,QAAyC,UAAkB,KAAK;AAAA,UAC/D;AAAA,UACA,MAAM,KAAK;AAAA,UACX;AAAA,UACA,EAAE,aAAa,MAAM;AAAA,QACvB;AAAA,MACF,CAAC;AACD,WAAK,IAAI,QAAQ,kCAAkC;AAAA,QACjD,aAAa,OAAO;AAAA,QACpB,kBAAkB,OAAO,OAAO,CAAC,OAAO,UAAU,QAAQ,MAAM,KAAK,YAAY,CAAC;AAAA,MACpF,CAAC;AACD,YAAM,WAAW,OAAO,KAAK,OAAO,wBAAwB,CAAC,CAAC;AAC9D,UAAI,SAAS,eAAe,GAAG;AAC7B,aAAK,IAAI,SAAS,8CAA8C;AAAA,UAC9D,cAAc,OAAO,CAAC,GAAG;AAAA,QAC3B,CAAC;AACD,YAAI,OAAO,WAAW,EAAG,OAAM,IAAI,MAAM,qDAAqD;AAC9F,YAAI;AACF,gBAAM,SAAS,MAAM,gCAAgC,KAAK,YAAY,OAAO,CAAC,CAAC;AAC/E,wBAAc,OAAO;AAAA,QACvB,SAAS,OAAO;AACd,eAAK,IAAI,SAAS,uDAAuD,CAAC,GAAG,KAAK;AAClF,gBAAM,KAAK,gBAAgB,KAAK;AAChC;AAAA,QACF;AACA,aAAK,IAAI,SAAS,6CAA6C;AAAA,UAC7D,wBAAwB,YAAY;AAAA,QACtC,CAAC;AAAA,MACH,OAAO;AACL,aAAK,IAAI,SAAS,qDAAqD;AAAA,UACrE,gBAAgB,SAAS;AAAA,QAC3B,CAAC;AACD,cAAM,OAAO,KAAK,MAAM,SAAS,SAAS,MAAM,CAAC;AACjD,YAAI,KAAK,WAAW,0CAA0C;AAC5D,gBAAM,IAAI,MAAM,iEAAiE;AAAA,QACnF;AACA,YAAI,KAAK,kBAAkB,OAAO,OAAQ,OAAM,IAAI,MAAM,+CAA+C;AACzG,YAAI;AACF,wBAAc,OAAO,IAAI,4BAA4B;AAAA,QACvD,SAAS,OAAO;AACd,eAAK,IAAI,SAAS,qDAAqD,CAAC,GAAG,KAAK;AAChF,gBAAM,KAAK,gBAAgB,KAAK;AAChC;AAAA,QACF;AACA,aAAK,IAAI,SAAS,oDAAoD;AAAA,UACpE,wBAAwB,YAAY;AAAA,UACpC,mBAAmB,KAAK;AAAA,QAC1B,CAAC;AAAA,MACH;AAEA,UAAI,cAAc,IAAI,KAAK,WAAW,UAAU,GAAG;AACjD,aAAK,IAAI,QAAQ,+BAA+B;AAChD,cAAM,KAAK,kBAAkB;AAAA,MAC/B,OAAO;AACL,aAAK,IAAI,SAAS,wBAAwB;AAAA,MAC5C;AACA,YAAM,iBAAiB,KAAK,qBAAqB;AACjD,UAAI;AACJ,YAAM,mBAAmB,KAAK,IAAI;AAClC,WAAK,IAAI,QAAQ,kCAAkC;AAAA,QACjD,wBAAwB,YAAY;AAAA,MACtC,CAAC;AACD,UAAI;AACF,cAAM,UAAU,MAAM,qBAAqB,KAAK,YAAY,WAAW;AACvE,iBAAS,MAAM;AAAA,UAAsB;AAAA,UAAgB,MACnD,uBAAuB,MAAM,MAAM;AAAA,YACjC,KAAK,QAAQ,iBAAiB,OAAO,KAAK,QAAQ;AAAA,YAClD,KAAK,WAAW;AAAA,UAClB,CAAC;AAAA,QACH;AAAA,MACF,SAAS,OAAO;AACd,YAAI,iBAAiB,uBAAuB,iBAAiB,yBAAyB;AACpF,gBAAM;AAAA,QACR;AAKA,aAAK,QAAQ,iBAAiB;AAC9B,aAAK,IAAI,SAAS,gCAAgC;AAAA,UAChD,aAAa,KAAK,IAAI,IAAI;AAAA,QAC5B,GAAG,KAAK;AACR,cAAM,KAAK,gBAAgB,KAAK;AAChC;AAAA,MACF;AACA,WAAK,IAAI,QAAQ,mCAAmC;AAAA,QAClD,aAAa,KAAK,IAAI,IAAI;AAAA,QAC1B,aAAa,WAAW,MAAM,IAC1B,cACA;AAAA,QACJ,aAAa,UAAU,OAAO,OAAO,MAAM,IAAI,OAAO;AAAA,MACxD,CAAC;AACD,UAAI,KAAK,iBAAiB,KAAM,OAAM,KAAK;AAC3C,WAAK,QAAQ,iBAAiB;AAC9B,UAAI,WAAW,MAAM,GAAG;AACtB,cAAM,KAAK,MAAM,KAAK,cAAc,MAAM;AAC1C,aAAK,QAAQ,eAAe;AAC5B,aAAK,WAAW,OAAO,eAAe;AACtC,aAAK,IAAI,QAAQ,mDAAmD,EAAE,sBAAsB,GAAG,CAAC;AAChG,aAAK,mBAAmB;AAAA,UACtB,aAAa;AAAA,UACb,mBAAmB;AAAA,QACrB,CAAC;AAAA,MACH,OAAO;AACL,aAAK,QAAQ,eAAe;AAC5B,YAAI;AACJ,YAAI;AACF,qBAAW,wBAAwB,QAAQ,GAAG,OAAO,KAAK,WAAW,cAAc,CAAC;AAAA,QACtF,SAAS,OAAO;AACd,eAAK,IAAI,SAAS,wCAAwC,CAAC,GAAG,KAAK;AACnE,gBAAM,KAAK,gBAAgB,KAAK;AAChC;AAAA,QACF;AACA,aAAK,IAAI,SAAS,8BAA8B;AAAA,UAC9C,cAAc,SAAS,MAAM;AAAA,UAC7B,iBAAiB,SAAS,OAAO,UAAU;AAAA,UAC3C,qBAAqB,SAAS,OAAO,UAAU;AAAA,QACjD,CAAC;AACD,YAAI,aAAa,MAAM,KAAK,kBAAkB,SAAS,MAAM,UAAU;AACvE,qBAAa,MAAM,KAAK,WAAW,YAAY,SAAS,OAAO,iBAAiB;AAChF,aAAK,WAAW,OAAO,eAAe;AACtC,aAAK,IAAI,QAAQ,+CAA+C;AAAA,UAC9D,gBAAgB,WAAW;AAAA,UAC3B,cAAc,SAAS,MAAM;AAAA,QAC/B,CAAC;AACD,aAAK,mBAAmB;AAAA,UACtB,aAAa;AAAA,UACb,OAAO,SAAS;AAAA,UAChB,6BAA6B;AAAA,QAC/B,CAAC;AAAA,MACH;AAAA,IACF,SAAS,OAAO;AACd,YAAM,iBAAiB,iBAAiB;AACxC,YAAM,kBACJ,iBAAiB,2BAA2B,KAAK,iBAAiB;AACpE,YAAM,YAAY,KAAK,WAAW,OAAO,WAAW,CAAC;AACrD,WAAK;AAAA,QACH,YAAY,SAAS;AAAA,QACrB,YACI,0CACA,iBACE,4BACA;AAAA,QACN,CAAC;AAAA,QACD;AAAA,MACF;AACA,WAAK,mBAAmB;AAAA,QACtB,aAAa;AAAA,QACb,eAAe,iBACX,4DACA,kBACA,6CACA,YACA,6CACA;AAAA,MACN,CAAC;AAAA,IACH,UAAE;AACA,WAAK,IAAI,QAAQ,iCAAiC;AAAA,QAChD,aAAa,KAAK,IAAI,IAAI,KAAK;AAAA,QAC/B,8BAA8B,KAAK,mBAAmB;AAAA,QACtD,0BAA0B,KAAK,uBAAuB;AAAA,QACtD,uBAAuB,KAAK,YAAY;AAAA,MAC1C,CAAC;AACD,WAAK,mBAAmB,wBAAwB,uBAAuB;AACvE,WAAK,OAAO;AACZ,WAAK,QAAQ,QAAQ;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,MAAc,gBAAgB,OAA+B;AAC3D,UAAM,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACtE,SAAK,0BAA0B,MAAM;AACnC,sBAAgB;AAAA,QACd,OAAO;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,QACT,WAAW,KAAK,YAAY;AAAA,QAC5B,aAAa,KAAK,YAAY;AAAA,QAC9B,qBAAqB,KAAK,YAAY;AAAA,QACtC,UAAU,KAAK,YAAY;AAAA,QAC3B,YAAY,KAAK,WAAW;AAAA,QAC5B,kBAAkB,KAAK,WAAW;AAAA,QAClC,eAAe,KAAK,WAAW;AAAA,QAC/B,OAAO,iBAAiB,QAAQ,MAAM,OAAO,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,QAAQ;AAAA,MACpF,CAAC;AAAA,IACH,CAAC;AACD,QAAI,eAAe,KAAK,GAAG;AACzB,YAAM,SAAS,kBAAkB,MAAM,OAAO;AAC9C,YAAM,mBAAmB,KAAK,WAAW,QAAQ;AACjD,UAAI,oBAAoB,KAAM,OAAM,IAAI,MAAM,sCAAsC;AACpF,YAAM,WAAW,MAAM,KAAK,WAAW,kBAAkB,OAAO,OAAO,sBAAsB;AAC7F,WAAK,IAAI,QAAQ,4CAA4C;AAAA,QAC3D,qBAAqB,OAAO,MAAM;AAAA,QAClC,uBAAuB,SAAS;AAAA,MAClC,CAAC;AACD,WAAK,mBAAmB;AAAA,QACtB,aAAa;AAAA,QACb,eAAe;AAAA,QACf,oBAAoB,OAAO;AAAA,QAC3B,0BAA0B;AAAA,MAC5B,CAAC;AACD;AAAA,IACF;AACA,SAAK,IAAI,QAAQ,6CAA6C,CAAC,GAAG,KAAK;AACvE,SAAK,mBAAmB;AAAA,MACtB,aAAa;AAAA,MACb,eAAe;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EAEQ,uBAA4C;AAClD,WAAO;AAAA,MACL,WAAW,OAAO,KAAK,WAAW,SAAS;AAAA,MAC3C,SAAS,IAAIC;AAAA,SACV,KAAK,WAAW,QAAQ,gBAAgB,WAAW,CAAC,GAAG;AAAA,UACtD,CAAC,WAAoB;AAAA,YACnB,OAAO,OAAO,QAAQ,EAAE;AAAA,YACxB,OAAO,OAAO,SAAS,EAAE;AAAA,UAC3B;AAAA,QACF;AAAA,MACF;AAAA,MACA,QAAQ,KAAK,WAAW;AAAA,MACxB,OAAO;AAAA,QACL,KAAK,OAAU,KAAa,iBAAqB;AAC/C,kCAAwB,GAAG;AAC3B,gBAAM,cAAcC,YAAW;AAC/B,eAAK,IAAI,SAAS,+BAA+B;AAAA,YAC/C,WAAW;AAAA,YACX,cAAc;AAAA,YACd,aAAa,iBAAiB;AAAA,UAChC,CAAC;AACD,gBAAM,SAAS,MAAM,KAAK,sBAAsB,EAAE,aAAa,UAAU,KAAK,aAAa,CAAC,EAAE,CAAC;AAC/F,cAAI,OAAO,QAAQ,SAAS,WAAW;AACrC,iBAAK,IAAI,SAAS,+BAA+B,EAAE,WAAW,KAAK,cAAc,YAAY,CAAC;AAC9F,mBAAO;AAAA,UACT;AACA,gBAAM,QAAQ,YAAY,OAAO,QAAQ,iCAAiC,GAAG,GAAG;AAChF,cAAI,SAAS,KAAM,OAAM;AACzB,gBAAM,OAAO,MAAM,KAAK,aAAa,OAAO,aAAa,MAAM,uBAAuB;AAAA,YACpF,WAAW;AAAA,YACX,cAAc;AAAA,UAChB,CAAC;AACD,gBAAM,QAAQ,gBAAgB,IAAI;AAClC,eAAK,IAAI,SAAS,gCAAgC;AAAA,YAChD,WAAW;AAAA,YACX,cAAc;AAAA,YACd,aAAa,KAAK;AAAA,UACpB,CAAC;AACD,iBAAO;AAAA,QACT;AAAA,QACA,KAAK,OAAO,KAAa,UAAmB;AAC1C,kCAAwB,GAAG;AAC3B,gBAAM,aAAa,2BAA2B,KAAK;AACnD,gBAAM,qBAAqBA,YAAW;AACtC,eAAK,IAAI,SAAS,4CAA4C;AAAA,YAC5D,WAAW;AAAA,YACX,cAAc;AAAA,YACd,aAAa,WAAW;AAAA,UAC1B,CAAC;AACD,gBAAM,WAAW,MAAM,KAAK,sBAAsB;AAAA,YAChD,aAAa;AAAA,YACb,UAAU;AAAA,YACV,cAAc,EAAE,MAAM,WAAW,WAAW;AAAA,UAC9C,CAAC;AACD,gBAAM,QAAQ,YAAY,SAAS,QAAQ,oCAAoC,GAAG,GAAG;AACrF,cAAI,SAAS,KAAM,OAAM;AACzB,gBAAM,OAAO,MAAM,KAAK,WAAW,SAAS,cAAc,MAAM,YAAY,uBAAuB;AAAA,YACjG,WAAW;AAAA,YACX,cAAc;AAAA,UAChB,CAAC;AACD,gBAAM,oBAAoBA,YAAW;AACrC,eAAK,IAAI,SAAS,uCAAuC;AAAA,YACvD,WAAW;AAAA,YACX,cAAc;AAAA,YACd,SAAS,KAAK;AAAA,UAChB,CAAC;AACD,gBAAM,YAAY,MAAM,KAAK,sBAAsB;AAAA,YACjD,aAAa;AAAA,YACb,UAAU;AAAA,YACV,aAAa,EAAE,KAAK;AAAA,UACtB,CAAC;AACD,gBAAM,cAAc,YAAY,UAAU,QAAQ,mCAAmC,GAAG,GAAG;AAC3F,cAAI,eAAe,KAAM,OAAM;AAC/B,eAAK,IAAI,SAAS,iCAAiC;AAAA,YACjD,WAAW;AAAA,YACX,cAAc;AAAA,YACd,aAAa,WAAW;AAAA,UAC1B,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,SAAS,OAAO,MAAM,QAAQ,MAAM;AAClC,gCAAsB,MAAM,KAAK;AACjC,eAAK,cAAc,oCAAoC;AAAA,YACrD,cAAc;AAAA,YACd,aAAa;AAAA,UACf,CAAC;AAAA,QACH;AAAA,QACA,OAAO,OAAO,MAAM,UAAU;AAC5B,8BAAoB,MAAM,KAAK;AAC/B,eAAK,cAAc,8BAA8B;AAAA,YAC/C,YAAY;AAAA,YACZ,aAAa;AAAA,UACf,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR,QAAQ,OAAO,SAAS,OAAO,YAAY;AACzC,iCAAuB,SAAS,OAAO,OAAO;AAC9C,eAAK,IAAI,SAAS,2BAA2B;AAAA,YAC3C;AAAA,YACA;AAAA,YACA,oBAAoB,SAAS,WAAW;AAAA,YACxC,iBAAiB,OAAO,KAAK,SAAS,cAAc,CAAC,CAAC,EAAE;AAAA,UAC1D,CAAC;AACD,eAAK,MAAM,WAAW,EAAE,SAAS,MAAM;AACvC,eAAK,aAAa;AAClB,gBAAM,UAAU,SAAS,WAAW,GAAG,KAAK,YAAY,YAAY,oBAAoB,OAAO,OAAO,KAAK;AAC3G,eAAK,0BAA0B,MAAM;AACnC,4BAAgB,EAAE,wBAAwB;AAAA,cACxC,YAAY,KAAK,WAAW;AAAA,cAC5B,eAAe,KAAK,YAAY;AAAA,cAChC,iBAAiB,KAAK,WAAW;AAAA,cACjC,eAAe,KAAK,WAAW;AAAA,cAC/B;AAAA,cACA,MAAM;AAAA,cACN;AAAA,cACA,YAAY,SAAS;AAAA,cACrB,aAAY,oBAAI,KAAK,GAAE,YAAY;AAAA,YACrC,EAAE,GAAG;AAAA,cACH,MAAM;AAAA,cACN,QAAQ;AAAA,cACR;AAAA,YACF,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,cAAc,MAAc,MAAqB;AACvD,SAAK,IAAI,SAAS,6BAA6B;AAAA,MAC7C,YAAY;AAAA,MACZ,aAAa,KAAK,gBAAgB,KAAK;AAAA,IACzC,CAAC;AACD,SAAK,0BAA0B,MAAM;AACnC,sBAAgB;AAAA,QACd,YAAY,KAAK,WAAW;AAAA,QAC5B,eAAe,KAAK,YAAY;AAAA,QAChC,iBAAiB,KAAK,WAAW;AAAA,QACjC,eAAe,KAAK,WAAW;AAAA,QAC/B,GAAG;AAAA,MACL,GAAG,EAAE,MAAM,QAAQ,mCAAmC,CAAC;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EAEQ,mBAAmB,OAAe,SAAuB;AAC/D,SAAK,0BAA0B,MAAM;AACnC,sBAAgB;AAAA,QACd;AAAA,QACA;AAAA,QACA,aAAa,CAAC;AAAA,UACZ,WAAW,KAAK,YAAY;AAAA,UAC5B,aAAa,KAAK,YAAY;AAAA,UAC9B,qBAAqB,KAAK,YAAY;AAAA,UACtC,UAAU,KAAK,YAAY;AAAA,UAC3B,YAAY,KAAK,WAAW;AAAA,UAC5B,kBAAkB,KAAK,WAAW;AAAA,UAClC,eAAe,KAAK,WAAW;AAAA,QACjC,CAAC;AAAA,MACH,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,oBAAmC;AAC/C,UAAM,UAAqB,CAAC;AAC5B,QAAI,aAAa;AACjB,QAAI,OAAO;AACX,WAAO,MAAM;AACX,cAAQ;AACR,WAAK,IAAI,SAAS,kCAAkC,EAAE,MAAM,aAAa,WAAW,CAAC;AACrF,YAAM,sBAAsB;AAC5B,YAAM,WAAW,MAAM,KAAK,WAAW,UAAU;AACjD,cAAQ,KAAK,GAAI,SAAS,WAAW,CAAC,CAAE;AACxC,WAAK,IAAI,SAAS,gCAAgC;AAAA,QAChD;AAAA,QACA,aAAa,SAAS,SAAS,UAAU;AAAA,QACzC,YAAY,SAAS;AAAA,QACrB,UAAU,SAAS;AAAA,MACrB,CAAC;AACD,YAAM,gBAAgB;AAAA,QACpB;AAAA,QACA;AAAA,QACA,CAAC,YAAY,IAAI,oBAAoB,OAAO;AAAA,MAC9C;AACA,mBAAa;AACb,UAAI,CAAC,SAAS,QAAS;AAAA,IACzB;AACA,SAAK,iBAAiB;AACtB,SAAK,SAAS,IAAI,cAAc,OAAO;AACvC,SAAK,IAAI,QAAQ,gCAAgC;AAAA,MAC/C,YAAY;AAAA,MACZ,aAAa,QAAQ;AAAA,MACrB,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AAAA,EAEQ,iBAAiB,WAA0D;AACjF,QAAI,KAAK,WAAW,OAAO,SAAS;AAClC,aAAO,QAAQ,OAAO,KAAK,WAAW,OAAO,MAAM;AAAA,IACrD;AACA,UAAM,QAAQ,KAAK,YAAY,UAAU,SAAS;AAClD,QAAI,SAAS,GAAG;AACd,WAAK,IAAI,SAAS,wCAAwC;AAAA,QACxD,cAAc,KAAK,YAAY;AAAA,QAC/B,iBAAiB,KAAK,YAAY;AAAA,MACpC,CAAC;AACD,aAAO,QAAQ,QAAQ,KAAK,YAAY,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;AAAA,IAC7D;AACA,UAAM,SAAS,SAAkB;AACjC,SAAK,YAAY,KAAK,EAAE,WAAW,OAAO,CAAC;AAC3C,SAAK,IAAI,SAAS,6BAA6B;AAAA,MAC7C,cAAc,KAAK,YAAY;AAAA,MAC/B,iBAAiB,KAAK,YAAY;AAAA,IACpC,CAAC;AACD,SAAK,eAAe;AACpB,WAAO,OAAO;AAAA,EAChB;AAAA,EAEQ,iBAAuB;AAC7B,QAAI,KAAK,YAAY,MAAM;AACzB,WAAK,IAAI,SAAS,yCAAyC;AAC3D;AAAA,IACF;AACA,SAAK,IAAI,QAAQ,oCAAoC,EAAE,aAAa,KAAK,eAAe,CAAC;AACzF,UAAM,QAAQ,YAAY;AAIxB,aAAO,CAAC,KAAK,YAAY,KAAK,YAAY,SAAS,GAAG;AACpD,cAAM,sBAAsB,KAAK;AACjC,cAAM,WAAW,MAAM,KAAK,WAAW,KAAK,cAAc;AAC1D,aAAK,IAAI,SAAS,mCAAmC;AAAA,UACnD,uBAAuB;AAAA,UACvB,aAAa,SAAS,SAAS,UAAU;AAAA,UACzC,YAAY,SAAS;AAAA,UACrB,UAAU,SAAS;AAAA,QACrB,CAAC;AACD,cAAM,gBAAgB;AAAA,UACpB;AAAA,UACA;AAAA,UACA,CAAC,YAAY,IAAI,wBAAwB,OAAO;AAAA,QAClD;AACA,aAAK,iBAAiB;AACtB,mBAAW,SAAS,SAAS,WAAW,CAAC,EAAG,MAAK,kBAAkB,KAAK;AAAA,MAC1E;AAAA,IACF,GAAG;AACH,SAAK,WAAW;AAChB,SAAK,KAAK,KAAK,MAAM;AACnB,UAAI,KAAK,aAAa,KAAM;AAC5B,WAAK,WAAW;AAChB,WAAK,IAAI,SAAS,mCAAmC;AAAA,QACnD,UAAU,KAAK;AAAA,QACf,iBAAiB,KAAK,YAAY;AAAA,QAClC,aAAa,KAAK;AAAA,MACpB,CAAC;AAGD,UAAI,CAAC,KAAK,YAAY,KAAK,YAAY,SAAS,EAAG,MAAK,eAAe;AAAA,IACzE,GAAG,CAAC,UAAU;AACZ,UAAI,KAAK,aAAa,KAAM,MAAK,WAAW;AAC5C,UAAI,CAAC,KAAK,YAAY,CAAC,KAAK,WAAW,OAAO,SAAS;AACrD,cAAM,gBAAgB,iBAAiB,0BACnC,QACA,IAAI;AAAA,UACJ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UACrD,EAAE,OAAO,MAAM;AAAA,QACjB;AACF,aAAK,mBAAmB,aAAa;AACrC,aAAK,IAAI,SAAS,kCAAkC;AAAA,UAClD,iBAAiB,KAAK,YAAY;AAAA,QACpC,GAAG,aAAa;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,kBAAkB,OAAsB;AAC9C,UAAM,QAAQ,KAAK,YAAY,UAAU,CAAC,WAAW,OAAO,UAAU,KAAK,CAAC;AAC5E,UAAM,YAAY,OAAO,KAAK,KAAK,EAAE,KAAK,CAAC,QAAQ,QAAQ,OAAO,KAAK;AACvE,QAAI,QAAQ,GAAG;AACb,WAAK,YAAY,KAAK,KAAK;AAC3B,WAAK,IAAI,SAAS,kCAAkC;AAAA,QAClD,YAAY;AAAA,QACZ,aAAa,MAAM;AAAA,QACnB,cAAc,KAAK,YAAY;AAAA,MACjC,CAAC;AAAA,IACH,OAAO;AACL,WAAK,YAAY,OAAO,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,QAAQ,KAAK;AACzD,WAAK,IAAI,SAAS,qCAAqC;AAAA,QACrD,YAAY;AAAA,QACZ,aAAa,MAAM;AAAA,QACnB,iBAAiB,KAAK,YAAY;AAAA,MACpC,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEQ,WAAW,YAAsC;AACvD,QAAI,KAAK,eAAe,MAAM;AAC5B,YAAM,IAAI,wBAAwB,iDAAiD;AAAA,IACrF;AACA,UAAM,WAAW,SAAkB;AACnC,UAAM,UAAU;AAAA,MACd,cAAc,KAAK,WAAW;AAAA,MAC9B;AAAA,MACA,YAAY;AAAA,IACd;AACA,SAAK,cAAc,EAAE,SAAS,SAAS;AACvC,SAAK,IAAI,SAAS,4BAA4B;AAAA,MAC5C,aAAa;AAAA,MACb,aAAa,QAAQ;AAAA,MACrB,mBAAmB,KAAK,iBAAiB;AAAA,IAC3C,CAAC;AACD,eAAW,UAAU,CAAC,GAAG,KAAK,gBAAgB,GAAG;AAC/C,UAAI;AACF,eAAO,MAAM,OAAO;AAAA,MACtB,SAAS,OAAO;AACd,aAAK,oBAAoB,QAAQ,gBAAgB,KAAK;AAAA,MACxD;AAAA,IACF;AACA,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,mBAAmB,QAA0B;AAC3C,SAAK,iBAAiB,IAAI,MAAM;AAChC,SAAK,IAAI,QAAQ,mCAAmC;AAAA,MAClD,mBAAmB,KAAK,iBAAiB;AAAA,MACzC,kBAAkB,KAAK,eAAe;AAAA,IACxC,CAAC;AACD,QAAI;AACF,aAAO,GAAG,aAAa,MAAM,KAAK,oBAAoB,QAAQ,WAAW,CAAC;AAC1E,aAAO,GAAG,SAAS,MAAM,KAAK,oBAAoB,QAAQ,QAAQ,CAAC;AACnE,UAAI,KAAK,eAAe,MAAM;AAC5B,aAAK,IAAI,SAAS,gDAAgD;AAAA,UAChE,aAAa,KAAK,YAAY,QAAQ;AAAA,UACtC,aAAa,KAAK,YAAY,QAAQ;AAAA,QACxC,CAAC;AACD,eAAO,MAAM,KAAK,YAAY,OAAO;AAAA,MACvC;AACA,UAAI,KAAK,YAAY,KAAK,eAAe,KAAM,QAAO,IAAI;AAAA,IAC5D,SAAS,OAAO;AACd,WAAK,oBAAoB,QAAQ,gBAAgB,KAAK;AACtD,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,wBAAwB,UAAyB;AAC/C,QAAI,KAAK,eAAe,MAAM;AAC5B,WAAK,IAAI,QAAQ,yCAAyC;AAAA,QACxD,aAAa,SAAS,SAAS,UAAU;AAAA,QACzC,YAAY,SAAS;AAAA,MACvB,CAAC;AACD;AAAA,IACF;AACA,UAAM,UAAU,KAAK;AACrB,SAAK,cAAc;AACnB,SAAK,IAAI,SAAS,gCAAgC;AAAA,MAChD,uBAAuB,QAAQ,QAAQ;AAAA,MACvC,aAAa,SAAS,SAAS,UAAU;AAAA,MACzC,YAAY,SAAS;AAAA,MACrB,UAAU,SAAS;AAAA,IACrB,CAAC;AACD,YAAQ,SAAS,QAAQ,QAAQ;AAAA,EACnC;AAAA,EAEQ,kBAAkB,MAAkC;AAC1D,QAAI,KAAK,WAAW,OAAO,SAAS;AAClC,aAAO,QAAQ,OAAO,KAAK,WAAW,OAAO,MAAM;AAAA,IACrD;AACA,UAAM,KAAKA,YAAW;AACtB,UAAM,UAAU,SAAkB;AAClC,SAAK,mBAAmB,IAAI,IAAI,OAAO;AACvC,SAAK,MAAM,mBAAmB,KAAK,EAAE,IAAI,KAAK,CAAC;AAC/C,SAAK,IAAI,SAAS,yBAAyB;AAAA,MACzC,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,8BAA8B,KAAK,mBAAmB;AAAA,IACxD,CAAC;AACD,SAAK,aAAa;AAClB,WAAO,QAAQ,QAAQ,KAAK,CAAC,WAAW;AACtC,WAAK,IAAI,SAAS,iCAAiC;AAAA,QACjD,SAAS;AAAA,QACT,aAAa,OAAO,QAAQ;AAAA,QAC5B,aAAa,OAAO,MAAM,QAAQ,UAAU;AAAA,MAC9C,CAAC;AACD,YAAM,QAAQ,YAAY,OAAO,QAAQ,8BAA8B;AACvE,UAAI,SAAS,KAAM,OAAM;AACzB,aAAO,OAAO;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEQ,sBAAsB,WAAsC;AAClE,QAAI,KAAK,WAAW,OAAO,SAAS;AAClC,aAAO,QAAQ,OAAO,KAAK,WAAW,OAAO,MAAM;AAAA,IACrD;AACA,UAAM,UAAU,SAAkB;AAClC,SAAK,uBAAuB,IAAI,UAAU,aAAa,OAAO;AAC9D,SAAK,MAAM,uBAAuB,KAAK,SAAS;AAChD,SAAK,IAAI,SAAS,kCAAkC;AAAA,MAClD,cAAc,UAAU;AAAA,MACxB,WAAW,UAAU;AAAA,MACrB,gBAAgB,KAAK,mBAAmB,SAAS;AAAA,MACjD,iBAAiB,UAAU,cAAc;AAAA,MACzC,0BAA0B,KAAK,uBAAuB;AAAA,IACxD,CAAC;AACD,SAAK,aAAa;AAClB,WAAO,QAAQ;AAAA,EACjB;AAAA,EAEA,cAAc,QAAuB;AACnC,QAAI,OAAO,cAAc,MAAM;AAC7B,UAAI,KAAK,OAAO,OAAO,WAAW,MAAM,MAAM,EAAE;AAChD,UAAI,iBAAiB;AACrB,UAAI,CAAC,IAAI;AAIP,aAAK,OAAO,KAAK,MAAM,mBAAmB,CAAC,GAAG,MAAM,EAAE;AACtD,yBAAiB,OAAO;AAAA,MAC1B;AACA,YAAM,UAAU,KAAK,mBAAmB,IAAI,EAAE;AAC9C,UAAI,WAAW,MAAM;AACnB,aAAK,IAAI,QAAQ,wCAAwC;AAAA,UACvD,SAAS,MAAM;AAAA,UACf,aAAa,OAAO,WAAW,QAAQ;AAAA,UACvC,8BAA8B,KAAK,mBAAmB;AAAA,QACxD,CAAC;AACD;AAAA,MACF;AACA,WAAK,mBAAmB,OAAO,EAAE;AACjC,WAAK,MAAM,qBAAqB,KAAK,MAAM,mBAAmB,OAAO,CAAC,SAAkB,KAAK,OAAO,EAAE;AACtG,WAAK,IAAI,SAAS,8BAA8B;AAAA,QAC9C,SAAS;AAAA,QACT,aAAa,OAAO,WAAW,QAAQ;AAAA,QACvC,aAAa,OAAO,WAAW,MAAM,QAAQ,UAAU;AAAA,QACvD,kBAAkB;AAAA,QAClB,8BAA8B,KAAK,mBAAmB;AAAA,MACxD,CAAC;AAID,cAAQ,QAAQ,OAAO,UAAU;AACjC,WAAK,aAAa;AAClB;AAAA,IACF;AACA,UAAM,SAAS,OAAO;AACtB,QAAI,UAAU,MAAM;AAClB,UAAI,OAAO,OAAO,gBAAgB,YAAY,OAAO,YAAY,WAAW,GAAG;AAC7E,cAAM,KAAK;AAAA,UACT;AAAA,QACF;AAAA,MACF;AACA,YAAM,KAAK,OAAO;AAClB,YAAM,UAAU,KAAK,uBAAuB,IAAI,EAAE;AAClD,UAAI,WAAW,MAAM;AACnB,aAAK,IAAI,QAAQ,oDAAoD;AAAA,UACnE,cAAc;AAAA,UACd,aAAa,OAAO,QAAQ;AAAA,UAC5B,0BAA0B,KAAK,uBAAuB;AAAA,QACxD,CAAC;AACD;AAAA,MACF;AACA,YAAM,YAAY,KAAK,MAAM,uBAAuB,KAAK,CAAC,SAAkB,KAAK,gBAAgB,EAAE;AACnG,WAAK,uBAAuB,OAAO,EAAE;AACrC,WAAK,MAAM,yBAAyB,KAAK,MAAM,uBAAuB;AAAA,QACpE,CAAC,SAAkB,KAAK,gBAAgB;AAAA,MAC1C;AACA,WAAK,IAAI,SAAS,0CAA0C;AAAA,QAC1D,cAAc;AAAA,QACd,WAAW,WAAW;AAAA,QACtB,gBAAgB,KAAK,mBAAmB,SAAS;AAAA,QACjD,aAAa,OAAO,QAAQ;AAAA,QAC5B,0BAA0B,KAAK,uBAAuB;AAAA,MACxD,CAAC;AAGD,cAAQ,QAAQ,MAAM;AACtB,WAAK,aAAa;AAClB;AAAA,IACF;AACA,SAAK,IAAI,QAAQ,mDAAmD;AAAA,EACtE;AAAA,EAEA,WAAW,QAA0B;AACnC,SAAK,aAAa,IAAI,MAAM;AAC5B,SAAK,iBAAiB,IAAI,QAAQ,EAAE,eAAe,MAAM,CAAC;AAC1D,SAAK,IAAI,QAAQ,qCAAqC;AAAA,MACpD,mBAAmB,KAAK,aAAa;AAAA,MACrC,YAAY,KAAK,MAAM;AAAA,MACvB,8BAA8B,KAAK,mBAAmB;AAAA,MACtD,0BAA0B,KAAK,uBAAuB;AAAA,IACxD,CAAC;AACD,QAAI;AACF,aAAO,GAAG,aAAa,MAAM,KAAK,gBAAgB,QAAQ,WAAW,CAAC;AACtE,aAAO,GAAG,SAAS,MAAM,KAAK,gBAAgB,QAAQ,QAAQ,CAAC;AAC/D,aAAO,GAAG,SAAS,MAAM,KAAK,iBAAiB,MAAM,CAAC;AACtD,WAAK,mBAAmB,QAAQ,KAAK,cAAc,CAAC;AACpD,UAAI,KAAK,SAAU,QAAO,IAAI;AAAA,IAChC,SAAS,OAAO;AACd,WAAK,gBAAgB,QAAQ,gBAAgB,KAAK;AAClD,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,kBAAwB;AAC9B,UAAM,UAAU,KAAK,UAAU;AAAA,MAC7B,UAAU,KAAK,MAAM;AAAA,MACrB,oBAAoB,KAAK,MAAM;AAAA,MAC/B,wBAAwB,KAAK,MAAM;AAAA,IACrC,CAAC;AACD,SAAK,MAAM,aAAaL,YAAW,QAAQ,EAAE,OAAO,OAAO,EAAE,OAAO,KAAK;AAAA,EAC3E;AAAA,EAEQ,gBAAyB;AAC/B,WAAO,sBAAsB,KAAK,KAAK;AAAA,EACzC;AAAA,EAEQ,eAAqB;AAC3B,SAAK,gBAAgB;AACrB,SAAK,IAAI,SAAS,8BAA8B;AAAA,MAC9C,YAAY,KAAK,MAAM;AAAA,MACvB,mBAAmB,KAAK,aAAa;AAAA,MACrC,8BAA8B,KAAK,mBAAmB;AAAA,MACtD,0BAA0B,KAAK,uBAAuB;AAAA,MACtD,kBAAkB,KAAK,MAAM,UAAU;AAAA,MACvC,gBAAgB,KAAK,MAAM,UAAU;AAAA,IACvC,CAAC;AACD,eAAW,UAAU,CAAC,GAAG,KAAK,YAAY,GAAG;AAK3C,WAAK,mBAAmB,QAAQ,KAAK,cAAc,CAAC;AAAA,IACtD;AAAA,EACF;AAAA,EAEQ,mBAAmB,QAAoB,UAAyB;AACtE,UAAM,OAAO,KAAK,iBAAiB,IAAI,MAAM;AAC7C,QAAI,QAAQ,KAAM;AAClB,QAAI,KAAK,eAAe;AACtB,WAAK,UAAU;AACf;AAAA,IACF;AACA,QAAI;AAIF,WAAK,gBAAgB,CAAC,OAAO,MAAM,QAAQ;AAAA,IAC7C,SAAS,OAAO;AAGd,WAAK,gBAAgB,QAAQ,gBAAgB,KAAK;AAAA,IACpD;AAAA,EACF;AAAA,EAEQ,iBAAiB,QAA0B;AACjD,UAAM,OAAO,KAAK,iBAAiB,IAAI,MAAM;AAC7C,QAAI,QAAQ,KAAM;AAClB,SAAK,gBAAgB;AACrB,UAAM,UAAU,KAAK;AACrB,SAAK,UAAU;AACf,QAAI,WAAW,KAAM,MAAK,mBAAmB,QAAQ,OAAO;AAAA,EAC9D;AAAA,EAEQ,SAAS,QAAyB;AACxC,QAAI,KAAK,uBAAuB,OAAO,MAAM,CAAC,UAAU,MAAM,oBAAoB,IAAI,GAAG;AACvF,WAAK,IAAI,SAAS,iDAAiD;AAAA,QACjE,aAAa,OAAO;AAAA,QACpB,aAAa,OAAO,IAAI,CAAC,UAAU,OAAO,KAAK,KAAK,EAAE,CAAC,KAAK,SAAS;AAAA,MACvE,CAAC;AACD;AAAA,IACF;AACA,SAAK,iBAAiB,KAAK,MAAM;AACjC,SAAK,IAAI,SAAS,8BAA8B;AAAA,MAC9C,aAAa,OAAO;AAAA,MACpB,aAAa,OAAO,IAAI,CAAC,UAAU,OAAO,KAAK,KAAK,EAAE,CAAC,KAAK,SAAS;AAAA,MACrE,gBAAgB,KAAK,iBAAiB;AAAA,MACtC,mBAAmB,KAAK,sBAAsB;AAAA,IAChD,CAAC;AACD,eAAW,UAAU,KAAK,sBAAsB,OAAO,CAAC,GAAG;AACzD,WAAK,0BAA0B,MAAM;AACrC,aAAO,MAAM;AAAA,IACf;AAAA,EACF;AAAA,EAEQ,mBAAmB,kBAAiC;AAC1D,QAAI,KAAK,qBAAqB;AAC5B,WAAK,IAAI,SAAS,gDAAgD;AAAA,QAChE,cAAc,iBAAiB;AAAA,QAC/B,gBAAgB,iBAAiB;AAAA,MACnC,CAAC;AACD;AAAA,IACF;AACA,SAAK,sBAAsB;AAC3B,SAAK,SAAS,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAAA,EACtC;AAAA,EAEA,MAAM,oBAAwC;AAC5C,QAAI,KAAK,iBAAiB,SAAS,GAAG;AACpC,WAAK,IAAI,SAAS,wCAAwC;AAAA,QACxD,aAAa,KAAK,iBAAiB,CAAC,EAAE;AAAA,QACtC,gBAAgB,KAAK,iBAAiB;AAAA,MACxC,CAAC;AACD,YAAM,SAAS,KAAK,iBAAiB,CAAC;AACtC,WAAK,0BAA0B,MAAM;AACrC,aAAO;AAAA,IACT;AACA,QAAI,KAAK,UAAU;AACjB,WAAK,IAAI,SAAS,6DAA6D;AAC/E,aAAO,CAAC;AAAA,IACV;AACA,SAAK,IAAI,SAAS,wCAAwC;AAAA,MACxD,mBAAmB,KAAK,sBAAsB,SAAS;AAAA,IACzD,CAAC;AACD,WAAO,IAAI,QAAQ,CAAC,YAAY,KAAK,sBAAsB,KAAK,OAAO,CAAC;AAAA,EAC1E;AAAA,EAEA,wBAA8B;AAC5B,UAAM,WAAW,KAAK,iBAAiB,MAAM;AAC7C,SAAK,IAAI,SAAS,gCAAgC;AAAA,MAChD,sBAAsB,UAAU,UAAU;AAAA,MAC1C,gBAAgB,KAAK,iBAAiB;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEQ,0BAA0B,QAAyB;AACzD,QACE,KAAK,yBACF,CAAC,OAAO,KAAK,CAAC,UAAU,MAAM,oBAAoB,IAAI,GACzD;AACA;AAAA,IACF;AACA,SAAK,wBAAwB;AAC7B,SAAK,IAAI,SAAS,mDAAmD;AACrE,eAAW,UAAU,KAAK,6BAA6B,OAAO,CAAC,EAAG,QAAO;AAAA,EAC3E;AAAA,EAEA,IAAI,aAAsB;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,SAAe;AACrB,QAAI,KAAK,UAAU;AACjB,WAAK,IAAI,SAAS,8DAA8D;AAChF;AAAA,IACF;AACA,SAAK,WAAW;AAChB,SAAK,eAAe,IAAI,cAAc,qBAAqB,CAAC;AAC5D,SAAK,IAAI,QAAQ,8BAA8B;AAAA,MAC7C,aAAa,KAAK,IAAI,IAAI,KAAK;AAAA,MAC/B,0BAA0B,KAAK,iBAAiB;AAAA,MAChD,eAAe,KAAK,aAAa;AAAA,MACjC,mBAAmB,KAAK,iBAAiB;AAAA,IAC3C,CAAC;AACD,eAAW,UAAU,CAAC,GAAG,KAAK,YAAY,GAAG;AAC3C,UAAI;AACF,eAAO,IAAI;AAAA,MACb,SAAS,OAAO;AACd,aAAK,gBAAgB,QAAQ,cAAc,KAAK;AAAA,MAClD;AAAA,IACF;AACA,eAAW,UAAU,CAAC,GAAG,KAAK,gBAAgB,GAAG;AAC/C,UAAI;AACF,eAAO,IAAI;AAAA,MACb,SAAS,OAAO;AACd,aAAK,oBAAoB,QAAQ,cAAc,KAAK;AAAA,MACtD;AAAA,IACF;AACA,eAAW,UAAU,KAAK,sBAAsB,OAAO,CAAC,EAAG,QAAO,CAAC,CAAC;AAAA,EACtE;AAAA,EAEQ,gBACN,QACA,QACA,OACM;AACN,QAAI,CAAC,KAAK,aAAa,OAAO,MAAM,EAAG;AACvC,SAAK,iBAAiB,OAAO,MAAM;AACnC,SAAK,IAAI,QAAQ,wCAAwC;AAAA,MACvD;AAAA,MACA,mBAAmB,KAAK,aAAa;AAAA,IACvC,GAAG,KAAK;AAAA,EACV;AAAA,EAEQ,oBACN,QACA,QACA,OACM;AACN,QAAI,CAAC,KAAK,iBAAiB,OAAO,MAAM,EAAG;AAC3C,SAAK,IAAI,QAAQ,sCAAsC;AAAA,MACrD;AAAA,MACA,mBAAmB,KAAK,iBAAiB;AAAA,MACzC,kBAAkB,KAAK,eAAe;AAAA,IACxC,GAAG,KAAK;AAAA,EACV;AAAA,EAEQ,mBAAmB,WAAwC;AACjE,QAAI,WAAW,eAAe,KAAM,QAAO;AAC3C,QAAI,WAAW,gBAAgB,KAAM,QAAO;AAC5C,QAAI,WAAW,eAAe,KAAM,QAAO;AAC3C,WAAO;AAAA,EACT;AAAA,EAEQ,cAAc,MAAsC;AAC1D,UAAM,SAAS,MAAM,UAAU,CAAC;AAChC,WAAO;AAAA,MACL,SAAS,MAAM;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,gBAAgB,OAAO,OAAO,CAAC,OAAO,UAAU,SAAS,MAAM,QAAQ,IAAI,CAAC;AAAA,IAC9E;AAAA,EACF;AAAA,EAEA,MAAc,aACZ,MACA,SACA,SAAkB,CAAC,GACE;AACrB,QAAI,QAAQ,KAAM,OAAM,IAAI,MAAM,oBAAoB,OAAO,EAAE;AAC/D,UAAM,YAAY,KAAK,IAAI;AAC3B,SAAK,IAAI,SAAS,0BAA0B;AAAA,MAC1C;AAAA,MACA,GAAG;AAAA,MACH,GAAG,KAAK,cAAc,IAAI;AAAA,IAC5B,CAAC;AACD,QAAI;AACF,YAAM,OAAO,MAAM;AAAA,QACjB;AAAA,QACA,CAAC,SAAS,YAAY,KAAK,IAAI,SAAS,QAAQ,OAAO,IAAI;AAAA,UACzD;AAAA,UACA,GAAG;AAAA,UACH,GAAG;AAAA,QACL,CAAC;AAAA,QACD,KAAK,WAAW;AAAA,MAClB;AACA,WAAK,IAAI,SAAS,2BAA2B;AAAA,QAC3C;AAAA,QACA,GAAG;AAAA,QACH,GAAG,KAAK,cAAc,IAAI;AAAA,QAC1B,kBAAkB,KAAK;AAAA,QACvB,aAAa,KAAK,IAAI,IAAI;AAAA,MAC5B,CAAC;AACD,aAAO;AAAA,IACT,SAAS,OAAO;AACd,WAAK,IAAI,SAAS,wBAAwB;AAAA,QACxC;AAAA,QACA,GAAG;AAAA,QACH,GAAG,KAAK,cAAc,IAAI;AAAA,QAC1B,aAAa,KAAK,IAAI,IAAI;AAAA,MAC5B,GAAG,KAAK;AACR,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAc,yBACZ,QACA,MACA,SACA,SAAkB,CAAC,GACoF;AACvG,QAAI,UAAU,KAAM,OAAM,IAAI,MAAM,iCAAiC,OAAO,EAAE;AAC9E,QAAI,QAAQ,KAAM,OAAM,IAAI,MAAM,oBAAoB,OAAO,EAAE;AAC/D,UAAM,YAAY,KAAK,IAAI;AAC3B,SAAK,IAAI,SAAS,uCAAuC;AAAA,MACvD;AAAA,MACA,GAAG;AAAA,MACH,GAAG,KAAK,cAAc,IAAI;AAAA,MAC1B,eAAe,OAAO,UAAU;AAAA,MAChC,cAAc,OAAO,UAAU;AAAA,MAC/B,gBAAgB,OAAO,UAAU;AAAA,MACjC,cAAc,OAAO,UAAU;AAAA,MAC/B,UAAU,OAAO,UAAU;AAAA,IAC7B,CAAC;AACD,QAAI;AACF,YAAM,QAAQ,MAAM;AAAA,QAClB;AAAA,QACA;AAAA,QACA,CAAC,SAAS,YAAY,KAAK;AAAA,UACzB;AAAA,UACA,QAAQ,OAAO;AAAA,UACf,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ;AAAA,QACnC;AAAA,QACA,KAAK,WAAW;AAAA,MAClB;AACA,WAAK,IAAI,SAAS,wCAAwC;AAAA,QACxD;AAAA,QACA,GAAG;AAAA,QACH,GAAG,KAAK,cAAc,IAAI;AAAA,QAC1B,cAAc,MAAM,KAAK,aAAa,MAAM,SAAS;AAAA,QACrD,YAAY,MAAM,KAAK;AAAA,QACvB,gBAAgB,MAAM,SAAS;AAAA,QAC/B,aAAa,KAAK,IAAI,IAAI;AAAA,MAC5B,CAAC;AACD,aAAO;AAAA,IACT,SAAS,OAAO;AACd,WAAK,IAAI,SAAS,qCAAqC;AAAA,QACrD;AAAA,QACA,GAAG;AAAA,QACH,GAAG,KAAK,cAAc,IAAI;AAAA,QAC1B,aAAa,KAAK,IAAI,IAAI;AAAA,MAC5B,GAAG,KAAK;AACR,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAc,WACZ,MACA,MACA,SACA,SAAkB,CAAC,GACC;AACpB,QAAI,QAAQ,KAAM,OAAM,IAAI,MAAM,oBAAoB,OAAO,EAAE;AAC/D,UAAM,YAAY,KAAK,IAAI;AAC3B,SAAK,IAAI,SAAS,wBAAwB;AAAA,MACxC;AAAA,MACA,GAAG;AAAA,MACH,GAAG,KAAK,cAAc,IAAI;AAAA,MAC1B,cAAc,KAAK;AAAA,IACrB,CAAC;AACD,QAAI;AACF,YAAM,WAAW,MAAM;AAAA,QACrB;AAAA,QACA;AAAA,QACA,CAAC,SAAS,YAAY,KAAK,IAAI,SAAS,QAAQ,OAAO,IAAI;AAAA,UACzD;AAAA,UACA,GAAG;AAAA,UACH,GAAG;AAAA,QACL,CAAC;AAAA,QACD,KAAK,WAAW;AAAA,MAClB;AACA,WAAK,IAAI,SAAS,yBAAyB;AAAA,QACzC;AAAA,QACA,GAAG;AAAA,QACH,GAAG,KAAK,cAAc,QAAQ;AAAA,QAC9B,cAAc,KAAK;AAAA,QACnB,aAAa,KAAK,IAAI,IAAI;AAAA,MAC5B,CAAC;AACD,aAAO;AAAA,IACT,SAAS,OAAO;AACd,WAAK,IAAI,SAAS,sBAAsB;AAAA,QACtC;AAAA,QACA,GAAG;AAAA,QACH,GAAG,KAAK,cAAc,IAAI;AAAA,QAC1B,cAAc,KAAK;AAAA,QACnB,aAAa,KAAK,IAAI,IAAI;AAAA,MAC5B,GAAG,KAAK;AACR,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,IAAI,OAAiB,SAAiB,SAAkB,CAAC,GAAG,OAAuB;AACzF,SAAK,0BAA0B,MAAM;AACnC,4BAAsB,UAAU,MAAM;AACpC,cAAM,WAAW,iBAAiB,QAC9B,MAAM,OAAO,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,IAAI,KAAK,MAAM,OAAO,EAAE,IAC9D,SAAS,OAAO,SAAY,CAAC,OAAO,KAAK,CAAC;AAC9C,eAAO;AAAA,UACL,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,UAClC;AAAA,UACA,WAAW;AAAA,UACX;AAAA,UACA,eAAe,KAAK,WAAW;AAAA,UAC/B,YAAY,KAAK,WAAW;AAAA,UAC5B,kBAAkB,KAAK,WAAW;AAAA,UAClC,WAAW,KAAK,YAAY;AAAA,UAC5B,aAAa,KAAK,YAAY;AAAA,UAC9B,qBAAqB,KAAK,YAAY;AAAA,UACtC,UAAU,KAAK,YAAY;AAAA,UAC3B,YAAY,KAAK,IAAI,IAAI,KAAK;AAAA,UAC9B,GAAG;AAAA,UACH,GAAI,YAAY,OAAO,CAAC,IAAI,EAAE,OAAO,SAAS;AAAA,QAChD;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEQ,0BAA6B,UAAsB;AACzD,WAAO,KAAK,QAAQ,0BAA0B,QAAQ,KAAK,SAAS;AAAA,EACtE;AACF;;;AHxzFA,IAAM,qCAAqC;AAc3C,IAAM,eAAe;AAAA,EACnB;AAAA,EACA,CAAC,WAAW;AAAA,EACZ,EAAE,yBAAyB,YAAY,gCAAgC;AACzE;AAEA,SAAS,SAAS,MAAmB,SAAoC;AACvE,SAAO,OAAO,OAAO,IAAI,MAAM,OAAO,GAAG,EAAE,MAAM,SAAS,UAAU,IAAS,cAAS,EAAE,CAAC;AAC3F;AAEA,SAAS,gBAAgB,OAAgB,OAAuB;AAC9D,MAAI,CAAC,OAAO,cAAc,KAAK,KAAK,OAAO,KAAK,IAAI,GAAG;AACrD,UAAM,SAAc,YAAO,kBAAkB,GAAG,KAAK,sCAAsC;AAAA,EAC7F;AACA,SAAO,OAAO,KAAK;AACrB;AAEA,SAAS,iCAAiC,UAA+B,OAAqB;AAC5F,MAAI,YAAY,MAAM;AACpB,UAAM,SAAc,YAAO,kBAAkB,GAAG,KAAK,uBAAuB;AAAA,EAC9E;AACA,MAAI,SAAS,YAAY,MAAM;AAC7B,UAAM,SAAc,YAAO,kBAAkB,GAAG,KAAK,gCAAgC;AAAA,EACvF;AACA,MAAI,SAAS,mBAAmB,MAAM;AACpC,UAAM,SAAc,YAAO,kBAAkB,GAAG,KAAK,wCAAwC;AAAA,EAC/F;AACA,kBAAgB,SAAS,iBAAiB,GAAG,KAAK,4BAA4B;AAC9E,kBAAgB,SAAS,MAAM,GAAG,KAAK,gBAAgB;AACvD,MAAI,SAAS,gBAAgB,MAAM;AACjC,UAAM,SAAc,YAAO,kBAAkB,GAAG,KAAK,qCAAqC;AAAA,EAC5F;AACA,QAAM,eAAe,gBAAgB,SAAS,cAAc,GAAG,KAAK,yBAAyB;AAC7F,MAAI,eAAe,OAAO,SAAS,IAAI,GAAG;AACxC,UAAM;AAAA,MACC,YAAO;AAAA,MACZ,GAAG,KAAK;AAAA,IACV;AAAA,EACF;AACA,MAAI,OAAO,SAAS,eAAe,YAAY,SAAS,WAAW,WAAW,GAAG;AAC/E,UAAM,SAAc,YAAO,kBAAkB,GAAG,KAAK,mCAAmC;AAAA,EAC1F;AACF;AAEA,SAAS,aAAa,MAA2B,OAAqB;AACpE,MAAI,QAAQ,KAAM,OAAM,SAAc,YAAO,kBAAkB,GAAG,KAAK,cAAc;AACrF,MAAI,CAAC,MAAM,QAAQ,KAAK,MAAM,GAAG;AAC/B,UAAM,SAAc,YAAO,kBAAkB,GAAG,KAAK,0BAA0B;AAAA,EACjF;AACA,OAAK,OAAO,QAAQ,CAAC,OAA4B,UAAkB;AACjE,QAAI,SAAS,QAAQ,OAAO,MAAM,QAAQ,YAAY,MAAM,IAAI,WAAW,GAAG;AAC5E,YAAM,SAAc,YAAO,kBAAkB,GAAG,KAAK,WAAW,KAAK,mBAAmB;AAAA,IAC1F;AACA,oBAAgB,MAAM,MAAM,GAAG,KAAK,WAAW,KAAK,QAAQ;AAAA,EAC9D,CAAC;AACH;AAEA,SAAS,sBAAsB,YAAgE;AAC7F,MAAI,cAAc,MAAM;AACtB,UAAM,SAAc,YAAO,kBAAkB,gDAAgD;AAAA,EAC/F;AACA,aAAW,CAAC,OAAO,KAAK,KAAK;AAAA,IAC3B,CAAC,cAAc,WAAW,SAAS;AAAA,IACnC,CAAC,oBAAoB,WAAW,cAAc;AAAA,IAC9C,CAAC,iBAAiB,WAAW,YAAY;AAAA,EAC3C,GAAY;AACV,QAAI,OAAO,UAAU,YAAY,MAAM,WAAW,GAAG;AACnD,YAAM,SAAc,YAAO,kBAAkB,cAAc,KAAK,cAAc;AAAA,IAChF;AAAA,EACF;AACA,QAAM,SAAS,WAAW;AAC1B,MAAI,UAAU,MAAM;AAClB,UAAM,SAAc,YAAO,kBAAkB,+BAA+B;AAAA,EAC9E;AACA,MAAI,CAAC,MAAM,QAAQ,OAAO,IAAI,KAAK,CAAC,MAAM,QAAQ,OAAO,QAAQ,GAAG;AAClE,UAAM,SAAc,YAAO,kBAAkB,oDAAoD;AAAA,EACnG;AACA,MAAI,OAAO,KAAK,WAAW,OAAO,SAAS,QAAQ;AACjD,UAAM;AAAA,MACC,YAAO;AAAA,MACZ,6DAA6D,OAAO,KAAK,MAAM,OAAO,OAAO,SAAS,MAAM;AAAA,IAC9G;AAAA,EACF;AACA,SAAO,KAAK,QAAQ,CAAC,UAA+B,UAAkB;AACpE,QAAI,YAAY,MAAM;AACpB,YAAM,SAAc,YAAO,kBAAkB,0BAA0B,KAAK,eAAe;AAAA,IAC7F;AACA,oBAAgB,SAAS,QAAQ,0BAA0B,KAAK,UAAU;AAC1E,qCAAiC,SAAS,UAAU,0BAA0B,KAAK,GAAG;AACtF,iBAAa,OAAO,SAAS,KAAK,GAAG,+BAA+B,KAAK,GAAG;AAAA,EAC9E,CAAC;AACD,eAAa,OAAO,kBAAkB,sCAAsC;AAC9E;AAEA,SAAS,gBAAgB,MAAc,aAA6B;AAClE,QAAM,SAAS,KAAK,QAAQ,MAAM,WAAW;AAC7C,MAAI,WAAW,QAAQ,CAAC,OAAO,WAAW,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE,GAAG;AAC/D,UAAM,IAAI,MAAM,6CAA6C,WAAW,GAAG;AAAA,EAC7E;AACA,SAAO;AACT;AAEA,eAAe,sBAAsB,MAAqE;AACxG,QAAM,OAAO,MAAM,QAAQ,KAAK,KAAK,GAAG,OAAO,GAAG,4BAA4B,CAAC;AAC/E,MAAI;AACF,UAAM,QAAQ,UAAU,IAAI;AAC5B,eAAW,CAAC,MAAM,OAAO,KAAK,OAAO,QAAQ,KAAK,GAAG;AACnD,YAAM,cAAc,gBAAgB,MAAM,IAAI;AAC9C,YAAM,MAAM,KAAK,QAAQ,WAAW,GAAG,EAAE,WAAW,KAAK,CAAC;AAC1D,YAAM,UAAU,aAAa,SAAS,EAAE,MAAM,IAAM,CAAC;AAAA,IACvD;AACA,UAAM,WAAW,KAAK;AAAA,MACpB,MAAM,SAAS,KAAK,KAAK,MAAM,gCAAgC,GAAG,MAAM;AAAA,IAC1E;AACA,WAAO,EAAE,MAAM,SAAS;AAAA,EAC1B,SAAS,OAAO;AACd,UAAM,GAAG,MAAM,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAC/C,UAAM;AAAA,EACR;AACF;AAEO,IAAM,0BAAN,MAA8B;AAAA,EAClB,cAAc,oBAAI,IAA8B;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EAEC,iBAAoD;AAAA,IAC3D,YAAY,KAAK,WAAW,KAAK,IAAI;AAAA,IACrC,iBAAiB,KAAK,gBAAgB,KAAK,IAAI;AAAA,IAC/C,kBAAkB,KAAK,iBAAiB,KAAK,IAAI;AAAA,IACjD,kBAAkB,KAAK,iBAAiB,KAAK,IAAI;AAAA,IACjD,sBAAsB,KAAK,qBAAqB,KAAK,IAAI;AAAA,IACzD,sBAAsB,KAAK,qBAAqB,KAAK,IAAI;AAAA,IACzD,gCAAgC,KAAK,+BAA+B,KAAK,IAAI;AAAA,IAC7E,oCAAoC,KAAK,mCAAmC,KAAK,IAAI;AAAA,IACrF,8BAA8B,KAAK,6BAA6B,KAAK,IAAI;AAAA,IACzE,oCAAoC,KAAK,mCAAmC,KAAK,IAAI;AAAA,IACrF,aAAa,KAAK,YAAY,KAAK,IAAI;AAAA,IACvC,SAAS,KAAK,QAAQ,KAAK,IAAI;AAAA,EACjC;AAAA,EAEA,SAAS,SAAkB,IAAI,MAAM,oCAAoC,GAAkB;AACzF,QAAI,KAAK,mBAAmB,KAAM,QAAO,KAAK;AAC9C,SAAK,WAAW;AAChB,UAAM,YAAY,YAAY;AAC5B,WAAK,IAAI,QAAQ,gDAAgD;AAAA,QAC/D,kBAAkB,KAAK,YAAY;AAAA,MACrC,CAAC;AACD,YAAM,cAAc,CAAC,GAAG,KAAK,YAAY,OAAO,CAAC;AACjD,iBAAW,cAAc,YAAa,YAAW,OAAO,MAAM;AAC9D,YAAM,QAAQ,IAAI,YAAY,IAAI,CAAC,eAAe,WAAW,kBAAkB,CAAC,CAAC;AACjF,YAAM,uBAAuB,MAAM,QAAQ;AAAA,QACzC,YAAY;AAAA,UAAI,CAAC,eACf,WAAW,6BAA6B,kCAAkC;AAAA,QAC5E;AAAA,MACF;AACA,YAAM,kBAAkB,qBAAqB,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC7E,UAAI,kBAAkB,GAAG;AACvB,aAAK;AAAA,UACH;AAAA,UACA;AAAA,UACA,EAAE,6BAA6B,gBAAgB;AAAA,QACjD;AAAA,MACF;AACA,WAAK,IAAI,QAAQ,gDAAgD;AAAA,QAC/D,kBAAkB,YAAY;AAAA,MAChC,CAAC;AAAA,IACH,GAAG;AACH,SAAK,kBAAkB;AACvB,WAAO;AAAA,EACT;AAAA,EAEQ,WAAW,MAAiB,UAA0B;AAC5D,QAAI,KAAK,UAAU;AACjB,eAAS,SAAc,YAAO,aAAa,oCAAoC,CAAC;AAChF;AAAA,IACF;AACA,UAAM,YAAY,KAAK,IAAI;AAC3B,SAAK,IAAI,QAAQ,2BAA2B;AAAA,MAC1C,GAAG,KAAK,kBAAkB,KAAK,QAAQ,QAAQ;AAAA,MAC/C,wBAAwB,KAAK,QAAQ,iBAAiB,MAAM;AAAA,IAC9D,CAAC;AACD,SAAK,wBAAwB,KAAK,QAAQ,UAAU,4CAA4C,gCAAgC;AAChI,SAAK,KAAK,gBAAgB,KAAK,OAAO,EAAE;AAAA,MACtC,MAAM;AACJ,aAAK,IAAI,QAAQ,4BAA4B;AAAA,UAC3C,GAAG,KAAK,kBAAkB,KAAK,QAAQ,QAAQ;AAAA,UAC/C,aAAa,KAAK,IAAI,IAAI;AAAA,UAC1B,SAAS;AAAA,QACX,CAAC;AACD,aAAK,wBAAwB,KAAK,QAAQ,UAAU,6CAA6C,4CAA4C;AAC7I,iBAAS,MAAM,EAAE,aAAa,sCAAsC,CAAC;AAAA,MACvE;AAAA,MACA,CAAC,UAAmB;AAClB,cAAM,UAAU,iBAAiB,QAAQ,GAAG,MAAM,IAAI,KAAK,MAAM,OAAO,KAAK,OAAO,KAAK;AACzF,aAAK,IAAI,SAAS,yBAAyB;AAAA,UACzC,GAAG,KAAK,kBAAkB,KAAK,QAAQ,QAAQ;AAAA,UAC/C,aAAa,KAAK,IAAI,IAAI;AAAA,UAC1B,SAAS;AAAA,QACX,GAAG,KAAK;AACR,aAAK;AAAA,UACH,KAAK,QAAQ;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA,iBAAS,MAAM;AAAA,UACb,aAAa;AAAA,UACb,eAAe;AAAA,UACf,cAAc;AAAA,QAChB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,wBACN,aACA,OACA,SACA,OACM;AACN,UAAM,WAAW,iBAAiB,QAAQ,MAAM,OAAO,MAAM,IAAI,IAAI,SAAS,OAAO,SAAY,CAAC,OAAO,KAAK,CAAC;AAC/G,oBAAgB;AAAA,MACd,GAAI,SAAS,OAAO,CAAC,IAAI,EAAE,OAAO,QAAQ;AAAA,MAC1C;AAAA,MACA;AAAA,MACA,WAAW,aAAa;AAAA,MACxB,aAAa,aAAa;AAAA,MAC1B,qBAAqB,aAAa;AAAA,MAClC,UAAU,aAAa;AAAA,MACvB,GAAI,YAAY,OAAO,CAAC,IAAI,EAAE,OAAO,SAAS;AAAA,IAChD,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,gBAAgB,SAAiC;AAC7D,QAAI,KAAK,cAAc,KAAM,OAAM,IAAI,MAAM,0CAA0C;AACvF,QAAI,KAAK,kBAAkB,KAAM,OAAM,IAAI,MAAM,yDAAyD;AAC1G,UAAM,iBAAiB,KAAK,kBAAkB,OAAO;AACrD,SAAK,iBAAiB;AACtB,QAAI;AACF,YAAM;AAAA,IACR,UAAE;AACA,UAAI,KAAK,mBAAmB,eAAgB,MAAK,iBAAiB;AAAA,IACpE;AAAA,EACF;AAAA,EAEA,MAAc,kBAAkB,SAAiC;AAC/D,QAAI,QAAQ,YAAY,KAAM,OAAM,IAAI,MAAM,wCAAwC;AACtF,eAAW,CAAC,OAAO,KAAK,KAAK;AAAA,MAC3B,CAAC,aAAa,QAAQ,SAAS,SAAS;AAAA,MACxC,CAAC,oBAAoB,QAAQ,SAAS,eAAe;AAAA,MACrD,CAAC,iBAAiB,QAAQ,SAAS,YAAY;AAAA,MAC/C,CAAC,uBAAuB,QAAQ,SAAS,kBAAkB;AAAA,IAC7D,GAAY;AACV,UAAI,OAAO,UAAU,YAAY,MAAM,WAAW,GAAG;AACnD,cAAM,IAAI,MAAM,8BAA8B,KAAK,cAAc;AAAA,MACnE;AAAA,IACF;AACA,QAAI,QAAQ,mBAAmB,KAAM,OAAM,IAAI,MAAM,gDAAgD;AACrG,QAAI,QAAQ,gBAAgB,YAAY,KAAM,OAAM,IAAI,MAAM,yDAAyD;AACvH,QAAI,QAAQ,gBAAgB,QAAQ,KAAM,OAAM,IAAI,MAAM,qDAAqD;AAC/G,UAAM,eAAe,QAAQ,gBAAgB;AAC7C,QAAI,aAAa,YAAY,KAAM,OAAM,IAAI,MAAM,kEAAkE;AACrH,QAAI,aAAa,mBAAmB,KAAM,OAAM,IAAI,MAAM,0EAA0E;AACpI,QAAI,aAAa,QAAQ,KAAM,OAAM,IAAI,MAAM,8DAA8D;AAC7G,QAAI,aAAa,cAAc,KAAM,OAAM,IAAI,MAAM,qEAAqE;AAC1H,QAAI,EAAC,oBAAI,IAAI,CAAC,yCAAyC,CAAC,CAAC,GAAE,IAAI,aAAa,QAAQ,GAAG;AACrF,YAAM,IAAI;AAAA,QACR,sCAAsC,OAAO,aAAa,QAAQ,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,UAAM,eAAe;AAAA,MACnB,aAAa;AAAA,MACb;AAAA,IACF;AACA,UAAM,eAAe,aAAa,gBAAgB,OAC9C,IACA;AAAA,MACA,aAAa;AAAA,MACb;AAAA,IACF;AACF,QAAI,eAAe,cAAc;AAC/B,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,UAAM,UAAU,IAAI,WAAW,QAAQ,gBAAgB,IAAI;AAC3D,SAAK,IAAI,SAAS,8BAA8B;AAAA,MAC9C,GAAG,KAAK,kBAAkB,QAAQ,QAAQ;AAAA,MAC1C,wBAAwB,QAAQ;AAAA,IAClC,CAAC;AACD,UAAM,kBAAkB,KAAK,IAAI;AACjC,UAAM,EAAE,MAAM,SAAS,IAAI,MAAM,sBAAsB,OAAO;AAC9D,QAAI;AACJ,QAAI;AACF,WAAK,IAAI,SAAS,6BAA6B;AAAA,QAC7C,GAAG,KAAK,kBAAkB,QAAQ,QAAQ;AAAA,QAC1C,aAAa,KAAK,IAAI,IAAI;AAAA,QAC1B,yBAAyB,SAAS;AAAA,QAClC,kBAAkB,SAAS;AAAA,QAC3B,yBAAyB,OAAO,KAAK,SAAS,aAAa,CAAC,CAAC,EAAE;AAAA,MACjE,CAAC;AACD,UAAI,SAAS,mBAAmB,KAAK,SAAS,YAAY,cAAc;AACtE,cAAM,IAAI,MAAM,wDAAwD;AAAA,MAC1E;AACA,YAAM,YAAY,OAAO,QAAQ,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC;AAC5D,WAAK,SAAS,sBAAsB,MAAM,WAAW;AACnD,cAAM,IAAI,MAAM,6BAA6B,SAAS,kBAAkB,2BAA2B,SAAS,EAAE;AAAA,MAChH;AACA,YAAM,aAAa,SAAS;AAC5B,UAAI,CAAC,WAAY,OAAM,IAAI,MAAM,0DAA0D;AAC3F,YAAM,eAAe,OAAO,QAAQ,SAAS,YAAY;AACzD,UAAI,SAAS,YAAY,YAAY,KAAK,MAAM;AAC9C,cAAM,IAAI,MAAM,aAAa,YAAY,4CAA4C;AAAA,MACvF;AACA,YAAM,aAAa,gBAAgB,MAAM,UAAU;AACnD,WAAK,IAAI,SAAS,wCAAwC;AAAA,QACxD,GAAG,KAAK,kBAAkB,QAAQ,QAAQ;AAAA,QAC1C,QAAQ;AAAA,MACV,CAAC;AACD,YAAM,kBAAkB,KAAK,IAAI;AACjC,yBAAmB,iBAAiB;AACpC,YAAM,UAAU,MAAM,aAAa,GAAG,cAAc,UAAU,EAAE,IAAI,aAAa,KAAK,IAAI,CAAC,EAAE;AAC7F,UAAI,OAAO,QAAQ,4BAA4B,YAAY;AACzD,cAAM,IAAI,MAAM,6DAA6D;AAAA,MAC/E;AACA,YAAM,aAAa,QAAQ,wBAAwB,YAAY;AAC/D,UAAI,YAAY,SAAS,cAAc;AACrC,cAAM,IAAI;AAAA,UACR,0CAA0C,YAAY,SAAS,OAAO,YAAY,IAAI,CAAC;AAAA,QACzF;AAAA,MACF;AACA,YAAM,kBAAkB,OAAO,QAAQ,SAAS,eAAe;AAC/D,YAAM,wBAAwB,QAAQ,wBAAwB,eAAe;AAC7E,UAAI,uBAAuB,SAAS,iBAAiB;AACnD,cAAM,IAAI;AAAA,UACR,6CAA6C,eAAe,SAAS,OAAO,uBAAuB,IAAI,CAAC;AAAA,QAC1G;AAAA,MACF;AACA,UAAI,sBAAsB,eAAe,MAAM;AAC7C,cAAM,IAAI,MAAM,IAAI,eAAe,mCAAmC;AAAA,MACxE;AACA,WAAK,cAAc,QAAQ;AAC3B,WAAK,aAAa;AAClB,WAAK,wBAAwB;AAC7B,WAAK,IAAI,SAAS,iCAAiC;AAAA,QACjD,GAAG,KAAK,kBAAkB,QAAQ,QAAQ;AAAA,QAC1C,aAAa,KAAK,IAAI,IAAI;AAAA,QAC1B,iBAAiB,WAAW,WAAW;AAAA,QACvC,yBAAyB,sBAAsB,YAAY,QAAQ;AAAA,MACrE,CAAC;AACD,yBAAmB;AAAA,IACrB,SAAS,OAAO;AACd,UAAI,oBAAoB,KAAM,iBAAgB,gBAAgB;AAC9D,WAAK,cAAc;AACnB,WAAK,aAAa;AAClB,WAAK,wBAAwB;AAC7B,YAAM,GAAG,MAAM,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAC/C,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,cAAc,IAA8B;AAClD,UAAM,aAAa,KAAK,YAAY,IAAI,EAAE;AAC1C,QAAI,cAAc,KAAM,OAAM,SAAc,YAAO,WAAW,cAAc,EAAE,YAAY;AAC1F,WAAO;AAAA,EACT;AAAA,EAEQ,gBAAgB,OAAkB,UAA0B;AAClE,SAAK,IAAI,SAAS,iCAAiC,EAAE,kBAAkB,KAAK,YAAY,KAAK,CAAC;AAC9F,aAAS,MAAM,EAAE,aAAa,CAAC,GAAG,KAAK,YAAY,OAAO,CAAC,EAAE,IAAI,CAAC,WAAW,OAAO,UAAU,EAAE,CAAC;AAAA,EACnG;AAAA,EAEQ,iBAAiB,MAAiB,UAA0B;AAClE,SAAK,KAAK,sBAAsB,IAAI,EAAE;AAAA,MACpC,MAAM,SAAS,MAAM,CAAC,CAAC;AAAA,MACvB,CAAC,UAAmB;AAClB,aAAK;AAAA,UACH;AAAA,UACA;AAAA,UACA,KAAK,oBAAoB,KAAK,QAAQ,UAAU;AAAA,UAChD;AAAA,QACF;AACA,iBAAS,KAA0B;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,sBAAsB,MAAgC;AAClE,QAAI,KAAK,UAAU;AACjB,YAAM,SAAc,YAAO,aAAa,oCAAoC;AAAA,IAC9E;AACA,UAAM,iBAAiB,KAAK;AAC5B,QAAI,kBAAkB,MAAM;AAC1B,WAAK,IAAI,QAAQ,oDAAoD;AAAA,QACnE,GAAG,KAAK,oBAAoB,KAAK,QAAQ,UAAU;AAAA,MACrD,CAAC;AACD,YAAM,KAAK,sBAAsB,MAAM,cAAc;AACrD,WAAK,IAAI,QAAQ,sDAAsD;AAAA,QACrE,GAAG,KAAK,oBAAoB,KAAK,QAAQ,UAAU;AAAA,MACrD,CAAC;AAAA,IACH;AACA,SAAK,gCAAgC,IAAI;AACzC,QAAI,KAAK,UAAU;AACjB,YAAM,SAAc,YAAO,aAAa,oCAAoC;AAAA,IAC9E;AACA,QAAI,KAAK,cAAc,QAAQ,KAAK,yBAAyB,QAAQ,KAAK,eAAe,MAAM;AAC7F,YAAM,SAAc,YAAO,qBAAqB,sCAAsC;AAAA,IACxF;AACA,UAAM,aAAa,KAAK,QAAQ;AAChC,0BAAsB,UAAU;AAChC,UAAM,KAAK,OAAO,WAAW,YAAY;AACzC,SAAK,IAAI,QAAQ,kCAAkC;AAAA,MACjD,GAAG,KAAK,oBAAoB,UAAU;AAAA,MACtC,aAAa,YAAY;AAAA,MACzB,aAAa,YAAY,QAAQ,MAAM,UAAU;AAAA,IACnD,CAAC;AACD,QAAI,KAAK,YAAY,IAAI,EAAE,EAAG,OAAM,SAAc,YAAO,gBAAgB,cAAc,EAAE,iBAAiB;AAC1G,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AACA,SAAK,YAAY,IAAI,IAAI,MAAM;AAC/B,WAAO,MAAM;AACb,SAAK,IAAI,QAAQ,6BAA6B,KAAK,oBAAoB,UAAU,CAAC;AAAA,EACpF;AAAA,EAEQ,sBAAsB,MAAiB,gBAA8C;AAC3F,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAI;AACJ,UAAI,UAAU;AACd,YAAM,WAAW,OAAO,KAAK,gBAAgB,aAAa,KAAK,YAAY,IAAI;AAC/E,YAAM,aAAa,oBAAoB,OAAO,SAAS,QAAQ,IAAI,OAAO,QAAQ;AAClF,YAAM,oBAAoB,MACxB,OAAO,SAAS,UAAU,KAAK,cAAc,KAAK,IAAI,IAClD;AAAA,QACK,YAAO;AAAA,QACZ;AAAA,MACF,IACE;AAAA,QACK,YAAO;AAAA,QACZ;AAAA,MACF;AACJ,YAAM,cAAc,MAAM,OAAO,kBAAkB,CAAC;AACpD,YAAM,SAAS,CAAC,UAAoB;AAClC,YAAI,QAAS;AACb,kBAAU;AACV,YAAI,SAAS,KAAM,cAAa,KAAK;AACrC,YAAI,OAAO,KAAK,QAAQ,WAAY,MAAK,IAAI,aAAa,WAAW;AACrE,YAAI,SAAS,KAAM,SAAQ;AAAA,YACtB,QAAO,KAAK;AAAA,MACnB;AAEA,UACE,KAAK,aACD,OAAO,SAAS,UAAU,KAAK,cAAc,KAAK,IAAI,GAC1D;AACA,eAAO,kBAAkB,CAAC;AAC1B;AAAA,MACF;AACA,UAAI,OAAO,KAAK,SAAS,WAAY,MAAK,KAAK,aAAa,WAAW;AAEvE,UAAI,OAAO,SAAS,UAAU,GAAG;AAC/B,cAAM,cAAc,aAAa,KAAK,IAAI;AAC1C,YAAI,eAAe,GAAG;AACpB,iBAAO,SAAc,YAAO,mBAAmB,8DAA8D,CAAC;AAC9G;AAAA,QACF;AACA,gBAAQ,WAAW,MAAM;AACvB,iBAAO;AAAA,YACA,YAAO;AAAA,YACZ;AAAA,UACF,CAAC;AAAA,QACH,GAAG,WAAW;AAAA,MAChB;AAEA,qBAAe;AAAA,QACb,MAAM;AAAA,UACJ,KAAK,aAAc,OAAO,SAAS,UAAU,KAAK,cAAc,KAAK,IAAI,IACrE,kBAAkB,IAClB;AAAA,QACN;AAAA,QACA,MAAM,OAAO;AAAA,UACN,YAAO;AAAA,UACZ;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,gCAAgC,MAAuB;AAC7D,UAAM,WAAW,OAAO,KAAK,gBAAgB,aAAa,KAAK,YAAY,IAAI;AAC/E,UAAM,aAAa,oBAAoB,OAAO,SAAS,QAAQ,IAAI,OAAO,QAAQ;AAClF,QAAI,OAAO,SAAS,UAAU,KAAK,cAAc,KAAK,IAAI,GAAG;AAC3D,YAAM,SAAc,YAAO,mBAAmB,yCAAyC;AAAA,IACzF;AACA,QAAI,KAAK,WAAW;AAClB,YAAM,SAAc,YAAO,WAAW,6DAA6D;AAAA,IACrG;AAAA,EACF;AAAA,EAEQ,iBAAiB,MAAiB,UAA0B;AAClE,QAAI;AACF,YAAM,KAAK,OAAO,KAAK,QAAQ,gBAAgB,EAAE;AACjD,YAAM,aAAa,KAAK,cAAc,EAAE;AACxC,WAAK,IAAI,SAAS,kCAAkC;AAAA,QAClD,eAAe;AAAA,QACf,UAAU,WAAW;AAAA,MACvB,CAAC;AACD,UAAI,CAAC,WAAW,YAAY;AAC1B,cAAM,SAAc,YAAO,qBAAqB,cAAc,EAAE,mBAAmB;AAAA,MACrF;AACA,WAAK,YAAY,OAAO,EAAE;AAC1B,WAAK,IAAI,QAAQ,sBAAsB,EAAE,eAAe,GAAG,CAAC;AAC5D,eAAS,MAAM,CAAC,CAAC;AAAA,IACnB,SAAS,OAAO;AACd,WAAK,IAAI,SAAS,gCAAgC,EAAE,eAAe,KAAK,QAAQ,aAAa,GAAG,KAAK;AACrG,eAAS,KAA0B;AAAA,IACrC;AAAA,EACF;AAAA,EAEQ,qBAAqB,MAA0B;AACrD,QAAI;AACF,YAAM,eAAe,OAAO,KAAK,QAAQ,gBAAgB,EAAE;AAC3D,WAAK,IAAI,SAAS,mCAAmC,EAAE,eAAe,aAAa,CAAC;AACpF,WAAK,cAAc,YAAY,EAAE,WAAW,IAAI;AAAA,IAClD,SAAS,OAAO;AACd,WAAK,IAAI,SAAS,0CAA0C,EAAE,eAAe,KAAK,QAAQ,aAAa,GAAG,KAAK;AAC/G,WAAK,QAAQ,KAAc;AAAA,IAC7B;AAAA,EACF;AAAA,EAEQ,qBAAqB,MAAiB,UAA0B;AACtE,QAAI;AACF,YAAM,eAAe,OAAO,KAAK,QAAQ,gBAAgB,EAAE;AAC3D,WAAK,IAAI,SAAS,kCAAkC;AAAA,QAClD,eAAe;AAAA,QACf,aAAa,KAAK,QAAQ,cAAc,OACpC,gBACA,KAAK,QAAQ,+BAA+B,OAC1C,mCACA;AAAA,MACR,CAAC;AACD,UACE,KAAK,QAAQ,cAAc,QACxB,KAAK,QAAQ,+BAA+B,MAC/C;AACA,cAAM;AAAA,UACC,YAAO;AAAA,UACZ,0DAA0D,YAAY;AAAA,QACxE;AAAA,MACF;AACA,YAAM,aAAa,KAAK,cAAc,YAAY;AAClD,UAAI,WAAW,WAAY,OAAM,SAAc,YAAO,qBAAqB,gCAAgC;AAC3G,iBAAW,cAAc,KAAK,OAAO;AACrC,eAAS,MAAM,CAAC,CAAC;AAAA,IACnB,SAAS,OAAO;AACd,WAAK,IAAI,SAAS,gCAAgC,EAAE,eAAe,KAAK,QAAQ,aAAa,GAAG,KAAK;AACrG,eAAS,KAA0B;AAAA,IACrC;AAAA,EACF;AAAA,EAEQ,+BAA+B,MAAiB,UAA0B;AAChF,QAAI;AACF,YAAM,eAAe,OAAO,KAAK,QAAQ,gBAAgB,EAAE;AAC3D,WAAK,IAAI,SAAS,mCAAmC,EAAE,eAAe,aAAa,CAAC;AACpF,YAAM,aAAa,KAAK,cAAc,YAAY;AAClD,WAAK,WAAW,kBAAkB,EAAE;AAAA,QAClC,CAAC,WAAW;AACV,eAAK,IAAI,SAAS,qCAAqC;AAAA,YACrD,eAAe;AAAA,YACf,aAAa,OAAO;AAAA,UACtB,CAAC;AACD,mBAAS,MAAM,EAAE,OAAO,CAAC;AAAA,QAC3B;AAAA,QACA,CAAC,UAAU;AACT,eAAK,IAAI,SAAS,kCAAkC,EAAE,eAAe,aAAa,GAAG,KAAK;AAC1F,mBAAS,KAA0B;AAAA,QACrC;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,WAAK,IAAI,SAAS,kCAAkC,EAAE,eAAe,KAAK,QAAQ,aAAa,GAAG,KAAK;AACvG,eAAS,KAA0B;AAAA,IACrC;AAAA,EACF;AAAA,EAEQ,mCAAmC,MAAiB,UAA0B;AACpF,QAAI;AACF,YAAM,eAAe,OAAO,KAAK,QAAQ,gBAAgB,EAAE;AAC3D,WAAK,IAAI,SAAS,4CAA4C,EAAE,eAAe,aAAa,CAAC;AAC7F,WAAK,cAAc,YAAY,EAAE,sBAAsB;AACvD,eAAS,MAAM,CAAC,CAAC;AAAA,IACnB,SAAS,OAAO;AACd,WAAK,IAAI,SAAS,0CAA0C,EAAE,eAAe,KAAK,QAAQ,aAAa,GAAG,KAAK;AAC/G,eAAS,KAA0B;AAAA,IACrC;AAAA,EACF;AAAA,EAEQ,6BAA6B,MAA0B;AAC7D,QAAI;AACF,YAAM,eAAe,OAAO,KAAK,QAAQ,gBAAgB,EAAE;AAC3D,YAAM,aAAa,KAAK,cAAc,YAAY;AAClD,WAAK,IAAI,SAAS,iCAAiC,EAAE,eAAe,aAAa,CAAC;AAMlF,WAAK,aAAa,IAAS,cAAS,CAAC;AACrC,WAAK,IAAI,SAAS,qCAAqC,EAAE,eAAe,aAAa,CAAC;AACtF,iBAAW,mBAAmB,IAAI;AAAA,IACpC,SAAS,OAAO;AACd,WAAK,IAAI,SAAS,wCAAwC,EAAE,eAAe,KAAK,QAAQ,aAAa,GAAG,KAAK;AAC7G,WAAK,QAAQ,KAAc;AAAA,IAC7B;AAAA,EACF;AAAA,EAEQ,mCAAmC,MAAiB,UAA0B;AACpF,QAAI;AACF,YAAM,eAAe,OAAO,KAAK,QAAQ,gBAAgB,EAAE;AAC3D,WAAK,IAAI,SAAS,wCAAwC;AAAA,QACxD,eAAe;AAAA,QACf,aAAa,KAAK,QAAQ,SAAS,UAAU;AAAA,QAC7C,YAAY,KAAK,QAAQ;AAAA,QACzB,UAAU,KAAK,QAAQ;AAAA,MACzB,CAAC;AACD,WAAK,cAAc,YAAY,EAAE,wBAAwB,KAAK,OAAO;AACrE,eAAS,MAAM,CAAC,CAAC;AAAA,IACnB,SAAS,OAAO;AACd,WAAK,IAAI,SAAS,sCAAsC,EAAE,eAAe,KAAK,QAAQ,aAAa,GAAG,KAAK;AAC3G,eAAS,KAA0B;AAAA,IACrC;AAAA,EACF;AAAA,EAEQ,YAAY,OAAkB,UAA0B;AAC9D,SAAK,IAAI,SAAS,6BAA6B,EAAE,aAAa,KAAK,cAAc,KAAK,CAAC;AACvF,QAAI,KAAK,cAAc,MAAM;AAC3B,eAAS,SAAc,YAAO,aAAa,sCAAsC,CAAC;AAAA,IACpF,OAAO;AACL,eAAS,MAAM,EAAE,SAAS,MAAM,eAAe,KAAK,CAAC;AAAA,IACvD;AAAA,EACF;AAAA,EAEQ,QAAQ,OAAkB,UAA0B;AAC1D,SAAK,IAAI,SAAS,8BAA8B,EAAE,kBAAkB,QAAQ,CAAC;AAC7E,aAAS,MAAM;AAAA,MACb,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,oBAAoB,QAAQ,SAAS;AAAA,IACvC,CAAC;AAAA,EACH;AAAA,EAEQ,kBAAkB,aAA2C;AACnE,WAAO;AAAA,MACL,WAAW,aAAa;AAAA,MACxB,aAAa,aAAa;AAAA,MAC1B,qBAAqB,aAAa;AAAA,MAClC,UAAU,aAAa;AAAA,IACzB;AAAA,EACF;AAAA,EAEQ,oBAAoB,YAA0C;AACpE,WAAO;AAAA,MACL,eAAe,YAAY;AAAA,MAC3B,YAAY,YAAY;AAAA,MACxB,kBAAkB,YAAY;AAAA,IAChC;AAAA,EACF;AAAA,EAEQ,IAAI,OAAiB,SAAiB,SAAkB,CAAC,GAAG,OAAuB;AACzF,0BAAsB,UAAU,MAAM;AACpC,YAAM,WAAW,iBAAiB,QAC9B,MAAM,OAAO,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,IAAI,KAAK,MAAM,OAAO,EAAE,IAC9D,SAAS,OAAO,SAAY,CAAC,OAAO,KAAK,CAAC;AAC9C,aAAO;AAAA,QACL,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,QAClC;AAAA,QACA,WAAW;AAAA,QACX;AAAA,QACA,GAAG;AAAA,QACH,GAAI,YAAY,OAAO,CAAC,IAAI,EAAE,OAAO,SAAS;AAAA,MAChD;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ANtsBA,IAAM,2BAA2B;AACjC,IAAM,wBAAwB;AAEvB,SAAS,4BAA4B,SAAyB;AACnE,MAAI,YAAY,YAAa,QAAO;AACpC,MAAI,QAAQ,WAAW,YAAY,GAAG;AACpC,WAAO,GAAG,qBAAqB,GAAG,QAAQ,MAAM,YAAY,MAAM,CAAC;AAAA,EACrE;AACA,SAAO;AACT;AAEA,SAAS,eAAe,MAA2B;AACjD,QAAM,SAAoB,EAAE,oBAAoB,GAAG;AACnD,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;AACnD,UAAM,WAAW,KAAK,KAAK;AAC3B,UAAM,CAAC,KAAK,MAAM,IAAI,SAAS,MAAM,KAAK,CAAC;AAC3C,UAAM,QAAQ,UAAU,KAAK,QAAQ,CAAC;AACtC,QAAI,QAAQ,YAAa,QAAO,UAAU;AAAA,aACjC,QAAQ,gBAAiB,QAAO,aAAa;AAAA,aAC7C,QAAQ,yBAA0B,QAAO,qBAAqB,SAAS;AAAA,QAC3E;AACL,QAAI,UAAU,KAAM,UAAS;AAAA,EAC/B;AACA,SAAO;AACT;AAEA,SAAS,oBAA4C;AACnD,QAAM,YAAY,0BAA0B;AAC5C,QAAM,YAAYM,MAAK,KAAK,WAAW,4DAA4D;AACnG,QAAM,oBAAoB,SAAS,WAAW;AAAA,IAC5C,aAAa,CAACA,MAAK,QAAQ,SAAS,GAAG,WAAW,aAAa,CAAC;AAAA,IAChE,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ;AAAA,EACV,CAAC;AACD,QAAM,SAAc,4BAAsB,iBAAiB;AAC3D,SAAO,OAAO,0BAA0B,iBAAiB;AAC3D;AAEA,SAAS,4BAAoC;AAC3C,QAAM,gBAAgB;AAAA;AAAA,IAEpB;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA,EACF;AACA,aAAW,gBAAgB,eAAe;AACxC,UAAM,YAAYC,eAAc,IAAI,IAAI,cAAc,YAAY,GAAG,CAAC;AACtE,UAAM,YAAYD,MAAK,KAAK,WAAW,4DAA4D;AACnG,QAAI,WAAW,SAAS,EAAG,QAAO;AAAA,EACpC;AACA,QAAM,IAAI,MAAM,yEAAyE;AAC3F;AAEA,eAAsB,KAAK,OAAO,QAAQ,KAAK,MAAM,CAAC,GAAkB;AACtE,wBAAsB,MAAM,IAAI,IAAI,wBAAwB,YAAY,GAAG,CAAC;AAC5E,QAAM,YAAY,OAAO,QAAQ,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC;AAC5D,MAAI,YAAY,GAAI,OAAM,IAAI,MAAM,iEAAiE,QAAQ,SAAS,IAAI,EAAE;AAC5H,QAAM,OAAO,eAAe,IAAI;AAChC,MAAI,CAAC,KAAK,QAAS,OAAM,IAAI,MAAM,gCAAgC;AACnE,MAAI,CAAC,KAAK,WAAY,OAAM,IAAI,MAAM,oCAAoC;AAC1E,QAAM,UAAU,4BAA4B,KAAK,OAAO;AAExD,wBAAsB,UAAU,OAAO;AAAA,IACrC,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IAClC,OAAO;AAAA,IACP,WAAW;AAAA,IACX,SAAS;AAAA,IACT;AAAA,IACA,aAAa,KAAK;AAAA,IAClB,gBAAgB,KAAK;AAAA,IACrB,cAAc,QAAQ,SAAS;AAAA,IAC/B,KAAK,QAAQ;AAAA,EACf,EAAE;AAEF,QAAM,SAAS,IAAS,aAAO;AAAA,IAC7B,mCAAmC;AAAA,IACnC,gCAAgC;AAAA,IAChC,qBAAqB;AAAA,EACvB,CAAC;AACD,QAAM,UAAU,IAAI,wBAAwB;AAC5C,SAAO,WAAW,kBAAkB,GAAG,QAAQ,cAAc;AAC7D,QAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,WAAO,UAAU,SAAc,wBAAkB,eAAe,GAAG,CAAC,UAAU;AAC5E,UAAI,SAAS,KAAM,QAAO,KAAK;AAAA,UAC1B,SAAQ;AAAA,IACf,CAAC;AAAA,EACH,CAAC;AACD,wBAAsB,UAAU,OAAO;AAAA,IACrC,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IAClC,OAAO;AAAA,IACP,WAAW;AAAA,IACX,SAAS;AAAA,IACT;AAAA,IACA,aAAa,KAAK;AAAA,IAClB,gBAAgB,KAAK;AAAA,IACrB,cAAc,QAAQ,SAAS;AAAA,EACjC,EAAE;AACF,MAAI,WAAW;AACf,QAAM,WAAW,CAAC,WAAmB;AACnC,QAAI,SAAU;AACd,eAAW;AACX,0BAAsB,UAAU,OAAO;AAAA,MACrC,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,MAClC,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS;AAAA,MACT;AAAA,MACA,aAAa,KAAK;AAAA,MAClB,gBAAgB,KAAK;AAAA,MACrB,KAAK,QAAQ;AAAA,IACf,EAAE;AACF,UAAM,qBAAqB,WAAW,MAAM;AAC1C,4BAAsB,UAAU,OAAO;AAAA,QACrC,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,QAClC,OAAO;AAAA,QACP,WAAW;AAAA,QACX,SAAS;AAAA,QACT;AAAA,QACA,aAAa,KAAK;AAAA,QAClB,gBAAgB,KAAK;AAAA,QACrB,KAAK,QAAQ;AAAA,QACb,iBAAiB;AAAA,MACnB,EAAE;AACF,aAAO,cAAc;AACrB,cAAQ,KAAK,CAAC;AAAA,IAChB,GAAG,wBAAwB;AAC3B,UAAM,mBAAmB,QACtB,SAAS,IAAI,MAAM,8BAA8B,MAAM,EAAE,CAAC,EAC1D,KAAK,MAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AACjD,aAAO,YAAY,CAAC,UAAU;AAC5B,YAAI,SAAS,KAAM,QAAO,KAAK;AAAA,YAC1B,SAAQ;AAAA,MACf,CAAC;AAAA,IACH,CAAC,CAAC;AACJ,SAAK,iBAAiB;AAAA,MACpB,MAAM;AACJ,qBAAa,kBAAkB;AAC/B,8BAAsB,UAAU,OAAO;AAAA,UACrC,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,UAClC,OAAO;AAAA,UACP,WAAW;AAAA,UACX,SAAS;AAAA,UACT;AAAA,UACA,aAAa,KAAK;AAAA,UAClB,gBAAgB,KAAK;AAAA,UACrB,KAAK,QAAQ;AAAA,QACf,EAAE;AACF,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,MACA,CAAC,UAAmB;AAClB,qBAAa,kBAAkB;AAC/B,8BAAsB,UAAU,OAAO;AAAA,UACrC,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,UAClC,OAAO;AAAA,UACP,WAAW;AAAA,UACX,SAAS;AAAA,UACT;AAAA,UACA,aAAa,KAAK;AAAA,UAClB,gBAAgB,KAAK;AAAA,UACrB,KAAK,QAAQ;AAAA,UACb,OAAO,iBAAiB,QAAQ,GAAG,MAAM,IAAI,KAAK,MAAM,OAAO,KAAK,OAAO,KAAK;AAAA,QAClF,EAAE;AACF,eAAO,cAAc;AACrB,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACA,UAAQ,KAAK,UAAU,MAAM,SAAS,QAAQ,CAAC;AAC/C,UAAQ,KAAK,WAAW,MAAM,SAAS,SAAS,CAAC;AACnD;","names":["path","fileURLToPath","grpc","executionAsyncId","createHash","randomUUID","registry","Headers","AsyncLocalStorage","path","AsyncLocalStorage","createHash","status","data","createHash","randomUUID","randomUUID","status","createHash","executionAsyncId","result","error","Headers","randomUUID","path","fileURLToPath"]}