@workglow/util 0.0.120 → 0.0.122

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 (62) hide show
  1. package/dist/browser.js +337 -1250
  2. package/dist/browser.js.map +6 -11
  3. package/dist/bun.js +334 -1260
  4. package/dist/bun.js.map +6 -11
  5. package/dist/common.d.ts +0 -5
  6. package/dist/common.d.ts.map +1 -1
  7. package/dist/credentials/ChainedCredentialStore.d.ts.map +1 -1
  8. package/dist/credentials/EnvCredentialStore.d.ts.map +1 -1
  9. package/dist/credentials/InMemoryCredentialStore.d.ts.map +1 -1
  10. package/dist/di/Container.d.ts.map +1 -1
  11. package/dist/di/ServiceRegistry.d.ts.map +1 -1
  12. package/dist/events/EventEmitter.d.ts.map +1 -1
  13. package/dist/graph/directedAcyclicGraph.d.ts.map +1 -1
  14. package/dist/graph/directedGraph.d.ts.map +1 -1
  15. package/dist/graph/errors.d.ts.map +1 -1
  16. package/dist/graph/graph.d.ts.map +1 -1
  17. package/dist/logging/ConsoleLogger.d.ts.map +1 -1
  18. package/dist/logging/NullLogger.d.ts.map +1 -1
  19. package/dist/node.js +335 -1260
  20. package/dist/node.js.map +6 -11
  21. package/dist/telemetry/ConsoleTelemetryProvider.d.ts.map +1 -1
  22. package/dist/telemetry/NoopTelemetryProvider.d.ts.map +1 -1
  23. package/dist/telemetry/OTelTelemetryProvider.d.ts.map +1 -1
  24. package/dist/types.d.ts +0 -1
  25. package/dist/types.d.ts.map +1 -1
  26. package/dist/utilities/BaseError.d.ts.map +1 -1
  27. package/dist/vector/Tensor.d.ts +1 -1
  28. package/dist/vector/Tensor.d.ts.map +1 -1
  29. package/dist/vector/TypedArray.d.ts +4 -4
  30. package/dist/vector/TypedArray.d.ts.map +1 -1
  31. package/dist/worker/Worker.browser.d.ts +6 -1
  32. package/dist/worker/Worker.browser.d.ts.map +1 -1
  33. package/dist/worker/Worker.bun.d.ts +6 -1
  34. package/dist/worker/Worker.bun.d.ts.map +1 -1
  35. package/dist/worker/Worker.node.d.ts +6 -1
  36. package/dist/worker/Worker.node.d.ts.map +1 -1
  37. package/dist/worker/WorkerManager.d.ts +7 -1
  38. package/dist/worker/WorkerManager.d.ts.map +1 -1
  39. package/dist/worker/{WorkerServer.d.ts → WorkerServerBase.d.ts} +5 -4
  40. package/dist/worker/WorkerServerBase.d.ts.map +1 -0
  41. package/dist/worker-browser.js +894 -0
  42. package/dist/worker-browser.js.map +19 -0
  43. package/dist/worker-bun.js +895 -0
  44. package/dist/worker-bun.js.map +19 -0
  45. package/dist/worker-entry.d.ts +25 -0
  46. package/dist/worker-entry.d.ts.map +1 -0
  47. package/dist/worker-node.js +914 -0
  48. package/dist/worker-node.js.map +19 -0
  49. package/package.json +23 -20
  50. package/dist/json-schema/SchemaUtils.d.ts +0 -58
  51. package/dist/json-schema/SchemaUtils.d.ts.map +0 -1
  52. package/dist/json-schema/SchemaValidation.d.ts +0 -8
  53. package/dist/json-schema/SchemaValidation.d.ts.map +0 -1
  54. package/dist/mcp/McpAuthProvider.d.ts +0 -70
  55. package/dist/mcp/McpAuthProvider.d.ts.map +0 -1
  56. package/dist/mcp/McpAuthTypes.d.ts +0 -218
  57. package/dist/mcp/McpAuthTypes.d.ts.map +0 -1
  58. package/dist/mcp/McpClientUtil.browser.d.ts +0 -198
  59. package/dist/mcp/McpClientUtil.browser.d.ts.map +0 -1
  60. package/dist/mcp/McpClientUtil.node.d.ts +0 -222
  61. package/dist/mcp/McpClientUtil.node.d.ts.map +0 -1
  62. package/dist/worker/WorkerServer.d.ts.map +0 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/utilities/Misc.ts", "../src/crypto/Crypto.ts", "../src/di/Container.ts", "../src/di/ServiceRegistry.ts", "../src/di/InputResolverRegistry.ts", "../src/events/EventEmitter.ts", "../src/logging/ConsoleLogger.ts", "../src/logging/NullLogger.ts", "../src/logging/LoggerRegistry.ts", "../src/utilities/BaseError.ts", "../src/graph/errors.ts", "../src/graph/graph.ts", "../src/graph/directedGraph.ts", "../src/graph/directedAcyclicGraph.ts", "../src/json-schema/FromSchema.ts", "../src/json-schema/SchemaUtils.ts", "../src/json-schema/SchemaValidation.ts", "../src/json-schema/parsePartialJson.ts", "../src/utilities/objectOfArraysAsArrayOfObjects.ts", "../src/vector/TypedArray.ts", "../src/vector/Tensor.ts", "../src/vector/TypedArrayUtils.ts", "../src/vector/VectorSimilarityUtils.ts", "../src/vector/VectorUtils.ts", "../src/worker/WorkerManager.ts", "../src/worker/WorkerServer.ts", "../src/credentials/ICredentialStore.ts", "../src/credentials/InMemoryCredentialStore.ts", "../src/credentials/EnvCredentialStore.ts", "../src/credentials/ChainedCredentialStore.ts", "../src/credentials/CredentialStoreRegistry.ts", "../src/crypto/WebCrypto.ts", "../src/mcp/McpAuthTypes.ts", "../src/mcp/McpAuthProvider.ts", "../src/telemetry/ITelemetryProvider.ts", "../src/telemetry/ConsoleTelemetryProvider.ts", "../src/telemetry/NoopTelemetryProvider.ts", "../src/telemetry/OTelTelemetryProvider.ts", "../src/telemetry/TelemetryRegistry.ts", "../src/compress/compress.browser.ts", "../src/mcp/McpClientUtil.browser.ts", "../src/media/image.ts", "../src/media/image.browser.ts", "../src/worker/Worker.browser.ts"],
3
+ "sources": ["../src/utilities/Misc.ts", "../src/crypto/Crypto.ts", "../src/di/Container.ts", "../src/di/ServiceRegistry.ts", "../src/di/InputResolverRegistry.ts", "../src/events/EventEmitter.ts", "../src/logging/ConsoleLogger.ts", "../src/logging/NullLogger.ts", "../src/logging/LoggerRegistry.ts", "../src/utilities/BaseError.ts", "../src/graph/errors.ts", "../src/graph/graph.ts", "../src/graph/directedGraph.ts", "../src/graph/directedAcyclicGraph.ts", "../src/json-schema/FromSchema.ts", "../src/json-schema/parsePartialJson.ts", "../src/utilities/objectOfArraysAsArrayOfObjects.ts", "../src/vector/TypedArray.ts", "../src/vector/Tensor.ts", "../src/vector/TypedArrayUtils.ts", "../src/vector/VectorSimilarityUtils.ts", "../src/vector/VectorUtils.ts", "../src/worker/WorkerManager.ts", "../src/credentials/ICredentialStore.ts", "../src/credentials/InMemoryCredentialStore.ts", "../src/credentials/EnvCredentialStore.ts", "../src/credentials/ChainedCredentialStore.ts", "../src/credentials/CredentialStoreRegistry.ts", "../src/crypto/WebCrypto.ts", "../src/telemetry/ITelemetryProvider.ts", "../src/telemetry/ConsoleTelemetryProvider.ts", "../src/telemetry/NoopTelemetryProvider.ts", "../src/telemetry/OTelTelemetryProvider.ts", "../src/telemetry/TelemetryRegistry.ts", "../src/compress/compress.browser.ts", "../src/media/image.ts", "../src/media/image.browser.ts", "../src/worker/WorkerServerBase.ts", "../src/worker/Worker.browser.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport function forceArray<T = any>(input: T | T[]): T[] {\n if (Array.isArray(input)) return input;\n return [input];\n}\n\nexport async function sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Takes an array of objects and collects values for each property into arrays\n * @param input Array of objects to process\n * @returns Object with arrays of values for each property\n */\nexport function collectPropertyValues<Input>(input: Input[]): { [K in keyof Input]: Input[K][] } {\n const output = {} as { [K in keyof Input]: Input[K][] };\n\n (input || []).forEach((item) => {\n Object.keys(item as object).forEach((key) => {\n const value = item[key as keyof Input];\n if (output[key as keyof Input]) {\n output[key as keyof Input].push(value);\n } else {\n output[key as keyof Input] = [value];\n }\n });\n });\n\n return output;\n}\n\nexport function toSQLiteTimestamp(date: Date | null | undefined) {\n if (!date) return null;\n const pad = (number: number) => (number < 10 ? \"0\" + number : number);\n\n const year = date.getUTCFullYear();\n const month = pad(date.getUTCMonth() + 1); // getUTCMonth() returns months from 0-11\n const day = pad(date.getUTCDate());\n const hours = pad(date.getUTCHours());\n const minutes = pad(date.getUTCMinutes());\n const seconds = pad(date.getUTCSeconds());\n\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n}\n\nexport function deepEqual(a: any, b: any): boolean {\n if (a === b) {\n return true;\n }\n\n if (typeof a !== \"object\" || typeof b !== \"object\" || a == null || b == null) {\n return false;\n }\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n for (const key of keysA) {\n if (!keysB.includes(key)) {\n return false;\n }\n\n if (!deepEqual(a[key], b[key])) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function sortObject(obj: Record<string, any>): Record<string, any> {\n return Object.keys(obj)\n .sort()\n .reduce(\n (result, key) => {\n result[key] = obj[key];\n return result;\n },\n {} as Record<string, any>\n );\n}\n\nexport function serialize(obj: Record<string, any>): string {\n const sortedObj = sortObject(obj);\n return JSON.stringify(sortedObj);\n}\n",
6
6
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { serialize } from \"../utilities/Misc\";\n\nexport async function sha256(data: string): Promise<string> {\n const encoder = new TextEncoder();\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", encoder.encode(data));\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return hashArray.map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nexport async function makeFingerprint(input: any): Promise<string> {\n const serializedObj = serialize(input);\n const hash = await sha256(serializedObj);\n return hash;\n}\n\nexport type uuid4 = `${string}-${string}-${string}-${string}-${string}`;\n\nexport function uuid4(): uuid4 {\n return crypto.randomUUID() as uuid4;\n}\n",
@@ -17,8 +17,6 @@
17
17
  "// original source: https://github.com/SegFaultx64/typescript-graph\n// previous fork: https://github.com/sroussey/typescript-graph\n// license: MIT\n\nimport { NodeDoesntExistError } from \"./errors\";\nimport { type AdjacencyMatrix, Graph } from \"./graph\";\n\n/**\n * # DirectedGraph\n *\n * A DirectedGraph is similar a [[`Graph`]] but with additional functionality.\n *\n * @typeParam Node `Node` is the node type of the graph. Nodes can be anything in all the included examples they are simple objects.\n * @typeParam Edge `Edge` is the edge type of the graph. Edges can be of any type, but must be truethy and by default they are `true` which is a simple boolean.\n * @typeParam NodeId `NodeId` is the identity type of the node, by default it is a `unknown`, though most will use `string` or `number`.\n * @typeParam EdgeId `EdgeId` is the identity type of the edge, by default it is a `unknown`, though most will use `string` or `number`.\n */\nexport class DirectedGraph<Node, Edge = true, NodeId = unknown, EdgeId = unknown> extends Graph<\n Node,\n Edge,\n NodeId,\n EdgeId\n> {\n /** Caches if the graph contains a cycle. If `undefined` then it is unknown. */\n protected hasCycle: boolean | undefined = false;\n\n /**\n * Returns `true` if there are no cycles in the graph.\n * This relies on a cached value so calling it multiple times without adding edges to the graph should be O(1) after the first call.\n * Non-cached calls are potentially expensive, the implementation is based on Kahn's algorithim which is O(|EdgeCount| + |NodeCount|).\n */\n isAcyclic(): boolean {\n if (this.hasCycle !== undefined) {\n return !this.hasCycle;\n }\n\n const nodeIndices = Array.from(this.nodes.keys());\n const nodeInDegrees = new Map(\n Array.from(this.nodes.keys()).map((n) => [n, this.indegreeOfNode(n)])\n );\n\n const toSearch = Array.from(nodeInDegrees).filter((pair) => pair[1] === 0);\n\n let visitedNodes = 0;\n\n while (toSearch.length > 0) {\n const cur = toSearch.pop();\n if (cur === undefined) {\n continue;\n }\n\n const nodeIndex = nodeIndices.indexOf(cur[0]);\n this.adjacency[nodeIndex].forEach((hasAdj, index) => {\n if (hasAdj !== null) {\n const currentInDegree = nodeInDegrees.get(nodeIndices[index]);\n if (currentInDegree !== undefined) {\n nodeInDegrees.set(nodeIndices[index], currentInDegree - 1);\n if (currentInDegree - 1 === 0) {\n toSearch.push([nodeIndices[index], currentInDegree - 1]);\n }\n }\n }\n });\n\n visitedNodes++;\n }\n\n this.hasCycle = !(visitedNodes === this.nodes.size);\n\n return visitedNodes === this.nodes.size;\n }\n\n /**\n * The indegree of a node is the number of edges that point to it. This will always be an integer.\n *\n * Throws a [[`NodeDoesntExistError`]] the node does not exist.\n *\n * @param nodeID The string of the node identity of the node to calculate indegree for.\n */\n indegreeOfNode(nodeID: NodeId): number {\n const nodeIdentities = Array.from(this.nodes.keys());\n const indexOfNode = nodeIdentities.indexOf(nodeID);\n\n if (indexOfNode === -1) {\n throw new NodeDoesntExistError(nodeID);\n }\n\n return this.adjacency.reduce<number>((carry, row) => {\n return carry + (row[indexOfNode] == null ? 0 : 1);\n }, 0);\n }\n\n /**\n * Add a directed edge to the graph.\n *\n * @param sourceNodeIdentity The identity string of the node the edge should run from.\n * @param targetNodeIdentity The identity string of the node the edge should run to.\n * @param edge The edge to add to the graph. If not provided it defaults to `true`.\n * @param skipUpdatingCyclicality This boolean indicates if the cache of the cyclicality of the graph should be updated.\n * If `false` is passed the cycle cache will be invalidated because we can not assure that a cycle has not been created.\n */\n addEdge(\n sourceNodeIdentity: NodeId,\n targetNodeIdentity: NodeId,\n edge?: Edge,\n skipUpdatingCyclicality: boolean = false\n ): EdgeId {\n if (edge === undefined) {\n edge = true as Edge;\n }\n if (this.hasCycle === false && !skipUpdatingCyclicality) {\n this.hasCycle = this.wouldAddingEdgeCreateCycle(sourceNodeIdentity, targetNodeIdentity);\n } else if (skipUpdatingCyclicality) {\n this.hasCycle = undefined;\n }\n\n return super.addEdge(sourceNodeIdentity, targetNodeIdentity, edge);\n }\n\n /**\n * Depth first search to see if one node is reachable from another following the directed edges.\n *\n * __Caveat:__ This will return false if `startNode` and `endNode` are the same node and there is not a cycle or a loop edge connecting them.\n *\n * @param startNode The string identity of the node to start at.\n * @param endNode The string identity of the node we are attempting to reach.\n */\n canReachFrom(startNode: NodeId, endNode: NodeId): boolean {\n const nodeIdentities = Array.from(this.nodes.keys());\n const startNodeIndex = nodeIdentities.indexOf(startNode);\n const endNodeIndex = nodeIdentities.indexOf(endNode);\n\n if (this.adjacency[startNodeIndex][endNodeIndex] != null) {\n return true;\n }\n\n return this.adjacency[startNodeIndex].reduce<boolean>((carry, edge, index) => {\n if (carry || edge === null) {\n return carry;\n }\n\n return this.canReachFrom(nodeIdentities[index], endNode);\n }, false);\n }\n\n /**\n * Checks if adding the specified edge would create a cycle.\n * Returns true in O(1) if the graph already contains a known cycle, or if `sourceNodeIdentity` and `targetNodeIdentity` are the same.\n *\n * @param sourceNodeIdentity The string identity of the node the edge is from.\n * @param targetNodeIdentity The string identity of the node the edge is to.\n */\n wouldAddingEdgeCreateCycle(sourceNodeIdentity: NodeId, targetNodeIdentity: NodeId): boolean {\n return (\n this.hasCycle ||\n sourceNodeIdentity === targetNodeIdentity ||\n this.canReachFrom(targetNodeIdentity, sourceNodeIdentity)\n );\n }\n\n /**\n * Given a starting node this returns a new [[`DirectedGraph`]] containing all the nodes that can be reached.\n * Throws a [[`NodeDoesntExistError`]] if the start node does not exist.\n *\n * @param startNodeIdentity The string identity of the node from which the subgraph search should start.\n */\n getSubGraphStartingFrom(startNodeIdentity: NodeId): DirectedGraph<Node, Edge, NodeId, EdgeId> {\n const nodeIndices = Array.from(this.nodes.keys());\n const initalNode = this.nodes.get(startNodeIdentity);\n\n if (initalNode == null) {\n throw new NodeDoesntExistError(startNodeIdentity);\n }\n\n const recur = (startNodeIdentity: NodeId, nodesToInclude: Node[]): Node[] => {\n let toReturn = [...nodesToInclude];\n const nodeIndex = nodeIndices.indexOf(startNodeIdentity);\n this.adjacency[nodeIndex].forEach((hasAdj, index) => {\n if (\n hasAdj !== null &&\n nodesToInclude.find((n) => this.nodeIdentity(n) === nodeIndices[index]) == null\n ) {\n const newNode = this.nodes.get(nodeIndices[index]);\n\n if (newNode != null) {\n toReturn = [...recur(nodeIndices[index], toReturn), newNode];\n }\n }\n });\n\n return toReturn;\n };\n\n const newGraph = new DirectedGraph<Node, Edge, NodeId, EdgeId>(\n this.nodeIdentity,\n this.edgeIdentity\n );\n const nodeList = recur(startNodeIdentity, [initalNode]);\n const includeIdents = nodeList.map((t) => this.nodeIdentity(t));\n Array.from(this.nodes.values()).forEach((n) => {\n if (includeIdents.includes(this.nodeIdentity(n))) {\n newGraph.insert(n);\n }\n });\n newGraph.adjacency = this.subAdj(nodeList);\n return newGraph;\n }\n\n private subAdj(include: Node[]): AdjacencyMatrix<Edge> {\n const includeIdents = include.map((t) => this.nodeIdentity(t));\n const nodeIndices = Array.from(this.nodes.keys());\n\n return this.adjacency.reduce<AdjacencyMatrix<Edge>>((carry, cur, index) => {\n if (includeIdents.includes(nodeIndices[index])) {\n return [...carry, cur.filter((_, index) => includeIdents.includes(nodeIndices[index]))];\n } else {\n return carry;\n }\n }, []);\n }\n\n /**\n * Returns all edges in the graph as an array of tuples.\n */\n getEdges(): Array<[sourceNodeIdentity: NodeId, targetNodeIdentity: NodeId, edge: Edge]> {\n return super.getEdges();\n }\n\n /**\n * Deletes an edge between two nodes in the graph.\n * Throws a [[`NodeDoesNotExistsError`]] if either of the nodes do not exist.\n *\n * @param sourceNodeIdentity The identity of the source node\n * @param targetNodeIdentity The identity of the target node\n * @param edgeIdentity The identity of the edge to be deleted. If not provided, all edges between the two nodes will be deleted.\n */\n removeEdge(sourceNodeIdentity: NodeId, targetNodeIdentity: NodeId, edgeIdentity?: EdgeId): void {\n super.removeEdge(sourceNodeIdentity, targetNodeIdentity, edgeIdentity);\n\n // Invalidate the cycle cache as the graph structure has changed\n this.hasCycle = undefined;\n }\n\n /**\n * Deletes a node from the graph, along with any edges associated with it.\n * Throws a [[`NodeDoesNotExistsError`]] if the node does not exist.\n *\n * @param nodeIdentity The identity of the node to be deleted.\n */\n remove(nodeIdentity: NodeId): void {\n super.remove(nodeIdentity);\n\n // Invalidate the cycle cache as the graph structure has changed\n this.hasCycle = undefined;\n }\n\n /**\n * Add edges\n * @param edges An array of tuples, each tuple containing the identity of the source node, the identity of the target node, and the edge to add.\n */\n addEdges(\n edges: Array<[sourceNodeIdentity: NodeId, targetNodeIdentity: NodeId, edge?: Edge | undefined]>\n ): EdgeId[] {\n return super.addEdges(edges);\n }\n}\n",
18
18
  "// original source: https://github.com/SegFaultx64/typescript-graph\n// previous fork: https://github.com/sroussey/typescript-graph\n// license: MIT\n\nimport { DirectedGraph } from \"./directedGraph\";\nimport { CycleError } from \"./errors\";\n\n/**\n * # DirectedAcyclicGraph\n *\n * A DirectedAcyclicGraph is builds on a [[`DirectedGraph`]] but enforces acyclicality. You cannot add an edge to a DirectedAcyclicGraph that would create a cycle.\n *\n * @typeParam Node `Node` is the node type of the graph. Nodes can be anything in all the included examples they are simple objects.\n * @typeParam Edge `Edge` is the edge type of the graph. Edges can be of any type, but must be truethy and by default they are `true` which is a simple boolean.\n * @typeParam NodeId `NodeId` is the identity type of the node, by default it is a `unknown`, though most will use `string` or `number`.\n * @typeParam EdgeId `EdgeId` is the identity type of the edge, by default it is a `unknown`, though most will use `string` or `number`.\n */\nexport class DirectedAcyclicGraph<\n Node,\n Edge = true,\n NodeId = unknown,\n EdgeId = unknown,\n> extends DirectedGraph<Node, Edge, NodeId, EdgeId> {\n private _topologicallySortedNodes?: Node[];\n\n /**\n * Converts an existing directed graph into a directed acyclic graph.\n * Throws a {@linkcode CycleError} if the graph attempting to be converted contains a cycle.\n * @param graph The source directed graph to convert into a DAG\n */\n static fromDirectedGraph<Node, Edge, NodeId, EdgeId>(\n graph: DirectedGraph<Node, Edge, NodeId, EdgeId>\n ): DirectedAcyclicGraph<Node, Edge, NodeId, EdgeId> {\n if (!graph.isAcyclic()) {\n throw new CycleError(\"Can't convert that graph to a DAG because it contains a cycle\");\n }\n const toRet = new DirectedAcyclicGraph<Node, Edge, NodeId, EdgeId>(\n // @ts-expect-error\n graph.nodeIdentity,\n // @ts-expect-error\n graph.edgeIdentity\n );\n\n toRet.nodes = (graph as any).nodes;\n toRet.adjacency = (graph as any).adjacency;\n\n return toRet;\n }\n\n /**\n * Adds an edge to the graph similarly to [[`DirectedGraph.addEdge`]] but maintains correctness of the acyclic graph.\n * Thows a [[`CycleError`]] if adding the requested edge would create a cycle.\n * Adding an edge invalidates the cache of topologically sorted nodes, rather than updating it.\n *\n * @param sourceNodeIdentity The identity string of the node the edge should run from.\n * @param targetNodeIdentity The identity string of the node the edge should run to.\n * @param edge The edge to add to the graph. If not provided it defaults to `true`.\n */\n addEdge(sourceNodeIdentity: NodeId, targetNodeIdentity: NodeId, edge?: Edge): EdgeId {\n if (edge === undefined) {\n edge = true as Edge;\n }\n if (this.wouldAddingEdgeCreateCycle(sourceNodeIdentity, targetNodeIdentity)) {\n throw new CycleError(\n `Can't add edge from ${String(sourceNodeIdentity)} to ${String(\n targetNodeIdentity\n )} it would create a cycle`\n );\n }\n\n // Invalidate cache of toposorted nodes\n this._topologicallySortedNodes = undefined;\n return super.addEdge(sourceNodeIdentity, targetNodeIdentity, edge, true);\n }\n\n /**\n * Inserts a node into the graph and maintains topologic sort cache by prepending the node\n * (since all newly created nodes have an [[ indegreeOfNode | indegree ]] of zero.)\n *\n * @param node The node to insert\n */\n insert(node: Node): NodeId {\n if (this._topologicallySortedNodes !== undefined) {\n this._topologicallySortedNodes = [node, ...this._topologicallySortedNodes];\n }\n\n return super.insert(node);\n }\n\n /**\n * Topologically sort the nodes using Kahn's algorithm. Uses a cache which means that repeated calls should be O(1) after the first call.\n * Non-cached calls are potentially expensive, Kahn's algorithim is O(|EdgeCount| + |NodeCount|).\n * There may be more than one valid topological sort order for a single graph,\n * so just because two graphs are the same does not mean that order of the resultant arrays will be.\n *\n * @returns An array of nodes sorted by the topological order.\n */\n topologicallySortedNodes(): Node[] {\n if (this._topologicallySortedNodes !== undefined) {\n return this._topologicallySortedNodes;\n }\n\n const nodeIndices = Array.from(this.nodes.keys());\n const nodeInDegrees = new Map(\n Array.from(this.nodes.keys()).map((n) => [n, this.indegreeOfNode(n)])\n );\n\n const adjCopy = this.adjacency.map((a) => [...a]);\n\n const toSearch = Array.from(nodeInDegrees).filter((pair) => pair[1] === 0);\n\n if (toSearch.length === this.nodes.size) {\n const arrayOfNodes = Array.from(this.nodes.values());\n this._topologicallySortedNodes = arrayOfNodes;\n return arrayOfNodes;\n }\n\n const toReturn: Node[] = [];\n\n while (toSearch.length > 0) {\n const n = toSearch.pop();\n if (n === undefined) {\n throw new Error(\"Unexpected empty array\");\n }\n const curNode = this.nodes.get(n[0]);\n if (curNode == null) {\n throw new Error(\"This should never happen\");\n }\n toReturn.push(curNode);\n\n adjCopy[nodeIndices.indexOf(n[0])]?.forEach((edge, index) => {\n if (edge !== null) {\n adjCopy[nodeIndices.indexOf(n[0])][index] = null;\n const target = nodeInDegrees.get(nodeIndices[index]);\n if (target !== undefined) {\n nodeInDegrees.set(nodeIndices[index], target - 1);\n if (target - 1 === 0) {\n toSearch.push([nodeIndices[index], 0]);\n }\n } else {\n throw new Error(\"This should never happen\");\n }\n }\n });\n }\n\n // Update cache\n this._topologicallySortedNodes = toReturn;\n\n // we shouldn't need to account for the error case of there being a cycle because it shouldn't\n // be possible to instantiate this class in a state (or put it in a state) where there is a cycle.\n\n return toReturn;\n }\n\n /**\n * Given a starting node this returns a new [[`DirectedA`]] containing all the nodes that can be reached.\n * Throws a [[`NodeDoesntExistError`]] if the start node does not exist.\n *\n * @param startNodeIdentity The string identity of the node from which the subgraph search should start.\n */\n getSubGraphStartingFrom(\n startNodeIdentity: NodeId\n ): DirectedAcyclicGraph<Node, Edge, NodeId, EdgeId> {\n return DirectedAcyclicGraph.fromDirectedGraph(super.getSubGraphStartingFrom(startNodeIdentity));\n }\n\n /**\n * Deletes an edge between two nodes in the graph.\n * Throws a [[`NodeDoesNotExistsError`]] if either of the nodes do not exist.\n *\n * @param sourceNodeIdentity The identity of the source node\n * @param targetNodeIdentity The identity of the target node\n * @param edgeIdentity The identity of the edge to be deleted. If not provided, all edges between the two nodes will be deleted.\n */\n removeEdge(sourceNodeIdentity: NodeId, targetNodeIdentity: NodeId, edgeIdentity?: EdgeId): void {\n super.removeEdge(sourceNodeIdentity, targetNodeIdentity, edgeIdentity);\n\n // Invalidate the topologically sorted nodes cache\n this._topologicallySortedNodes = undefined;\n }\n\n /**\n * Deletes a node from the graph, along with any edges associated with it.\n * Throws a [[`NodeDoesNotExistsError`]] if the node does not exist.\n *\n * @param nodeIdentity The identity of the node to be deleted.\n */\n remove(nodeIdentity: NodeId): void {\n super.remove(nodeIdentity);\n\n // Invalidate the topologically sorted nodes cache\n this._topologicallySortedNodes = undefined;\n }\n}\n",
19
19
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n FromExtendedSchema,\n FromExtendedSchemaOptions,\n FromSchemaOptions,\n} from \"@sroussey/json-schema-to-ts\";\nimport type { JsonSchema, JsonSchemaCustomProps } from \"./JsonSchema\";\n\nexport { FromSchemaOptions };\n\n/**\n * Removes the [$JSONSchema] symbol property from a type\n * This is needed because json-schema-to-ts adds this property which cannot be serialized\n */\nexport type StripJSONSchema<T> = T extends object\n ? {\n [K in keyof T as K extends symbol ? never : K]: T[K];\n }\n : T;\n\nexport const FromSchemaDefaultOptions = {\n parseNotKeyword: true,\n parseIfThenElseKeywords: true,\n keepDefaultedPropertiesOptional: true,\n references: false,\n deserialize: false,\n} as const satisfies FromSchemaOptions;\n\nexport type FromSchema<\n SCHEMA extends JsonSchema<EXTENSION>,\n OPTIONS extends FromExtendedSchemaOptions<EXTENSION> = typeof FromSchemaDefaultOptions,\n EXTENSION extends JsonSchemaCustomProps = JsonSchemaCustomProps,\n> = StripJSONSchema<FromExtendedSchema<EXTENSION, SCHEMA, OPTIONS>>;\n\n/**\n * IncludeProps - Returns a new schema with only the specified properties\n *\n * This is a schema transformer that returns a new schema object.\n * Use with FromSchema like: FromSchema<IncludeProps<typeof schema, typeof [\"prop1\", \"prop2\"]>>\n *\n * @template Schema - The JSON schema object (with 'as const')\n * @template Keys - Readonly array type of property keys to include (use typeof [\"key1\", \"key2\"] as const)\n *\n * @example\n * const schema = {\n * type: \"object\",\n * properties: {\n * name: { type: \"string\" },\n * age: { type: \"number\" },\n * email: { type: \"string\" }\n * },\n * required: [\"name\"],\n * additionalProperties: false\n * } as const;\n *\n * type Filtered = FromSchema<IncludeProps<typeof schema, typeof [\"name\", \"age\"]>>;\n * // => { name: string, age?: number }\n */\nexport type IncludeProps<\n Schema extends { readonly type: \"object\"; readonly properties: Record<string, unknown> },\n Keys extends readonly (keyof Schema[\"properties\"])[],\n> = Omit<Schema, \"properties\" | \"required\"> & {\n readonly properties: {\n readonly [K in Extract<keyof Schema[\"properties\"], Keys[number]>]: Schema[\"properties\"][K];\n };\n} & (Schema extends { readonly required: readonly (infer R extends string)[] }\n ? { readonly required: readonly Extract<R, Keys[number]>[] }\n : {});\n\n/**\n * ExcludeProps - Returns a new schema without the specified properties\n *\n * This is a schema transformer that returns a new schema object.\n * Use with FromSchema like: FromSchema<ExcludeProps<typeof schema, typeof [\"prop1\", \"prop2\"]>>\n *\n * @template Schema - The JSON schema object (with 'as const')\n * @template Keys - Readonly array type of property keys to exclude (use typeof [\"key1\", \"key2\"] as const)\n *\n * @example\n * const schema = {\n * type: \"object\",\n * properties: {\n * name: { type: \"string\" },\n * age: { type: \"number\" },\n * email: { type: \"string\" }\n * },\n * required: [\"name\"],\n * additionalProperties: false\n * } as const;\n *\n * type Filtered = FromSchema<ExcludeProps<typeof schema, typeof [\"email\"]>>;\n * // => { name: string, age?: number }\n */\nexport type ExcludeProps<\n Schema extends { readonly type: \"object\"; readonly properties: Record<string, unknown> },\n Keys extends readonly (keyof Schema[\"properties\"])[],\n> = Omit<Schema, \"properties\" | \"required\"> & {\n readonly properties: {\n readonly [K in Exclude<keyof Schema[\"properties\"], Keys[number]>]: Schema[\"properties\"][K];\n };\n} & (Schema extends { readonly required: readonly (infer R extends string)[] }\n ? { readonly required: readonly Exclude<R, Keys[number]>[] }\n : {});\n",
20
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Semantic Compatibility Utilities for Task Graph Dataflows\n *\n * In this project, task graphs have connections between tasks called dataflows.\n * These dataflows have different kinds of compatibility checks:\n *\n * **Static Compatibility:**\n * Static rules help decide if an edge should be connected at all. A connection\n * is statically compatible if:\n * - The source and target are the same exact type\n * - The source connects to the equivalent of \"any\" (target accepts anything)\n * - The source type is acceptable to the target (e.g., a string to something\n * that accepts oneOf[string[], string])\n *\n * **Runtime Compatibility:**\n * Assuming the connection is allowed at design time (passes static check),\n * runtime rules determine if they are compatible during execution.\n *\n * Currently, there is one runtime compatibility check:\n * - If both input and output schemas have 'format' annotations attached,\n * the format annotation has the format /\\w+(:\\w+)?/ where the first part\n * is the \"name\" and if alone matches any other with the same \"name\".\n * If there is a second part, then that narrows the type.\n * - Format checks apply to all types (strings, arrays, etc.), not just strings\n * - A schema with format can connect to a schema with no format (source has format, target doesn't)\n * - A schema with no format cannot connect to a schema with format (source doesn't have format, target does)\n *\n * Example: In the AI package, 'format':'model' and 'format': 'model:EmbeddingTask'\n * are used on string types. An input with property `model` and 'format':'model'\n * connects to a target with property `model` and 'format':'model:EmbeddingTask' --\n * this compatibility is called \"runtime\". It first passes the static check as\n * compatible and then notices a difference in format runtime.\n *\n * Format is also used on array types, e.g., 'format':'Float64Array' on arrays\n * containing Float64 numbers.\n *\n * Only connections that pass the runtime check will pass data at runtime.\n */\n\nimport type { JsonSchema } from \"./JsonSchema\";\n\n/**\n * Checks if two format strings are compatible.\n * Format: /\\w+(:\\w+)?/ where first part is the \"name\" and optional second part narrows the type.\n * - Same name without narrowing: static compatible\n * - Source name matches target narrowed name: runtime compatible\n * - Different names or incompatible narrowing: incompatible\n */\nfunction areFormatStringsCompatible(\n sourceFormat: string,\n targetFormat: string\n): \"static\" | \"runtime\" | \"incompatible\" {\n // Allow letters (must start), numbers, underscore, and dash; e.g., my-type:another_type\n const formatPattern = /^[a-zA-Z][a-zA-Z0-9_-]*(?::[a-zA-Z][a-zA-Z0-9_-]*)?$/;\n if (!formatPattern.test(sourceFormat) || !formatPattern.test(targetFormat)) {\n return \"incompatible\";\n }\n\n const [sourceName, sourceNarrow] = sourceFormat.split(\":\");\n const [targetName, targetNarrow] = targetFormat.split(\":\");\n\n // Different base names are incompatible\n if (sourceName !== targetName) {\n return \"incompatible\";\n }\n\n // Same name, no narrowing on either: static compatible\n if (!sourceNarrow && !targetNarrow) {\n return \"static\";\n }\n\n // Source has narrowing, target doesn't: static compatible (source is more specific)\n if (sourceNarrow && !targetNarrow) {\n return \"static\";\n }\n\n // Target has narrowing, source doesn't: runtime compatible (target is more specific)\n if (!sourceNarrow && targetNarrow) {\n return \"runtime\";\n }\n\n // Both have narrowing: must match exactly for static, otherwise incompatible\n if (sourceNarrow === targetNarrow) {\n return \"static\";\n }\n\n return \"incompatible\";\n}\n\n/**\n * Checks if a source type is statically compatible with a target type.\n * Handles cases like string to oneOf[string[], string] or string to any.\n */\nfunction isTypeStaticallyCompatible(sourceType: unknown, targetType: unknown): boolean {\n // Target accepts any type (no type constraint)\n if (!targetType) {\n return true;\n }\n\n // Source has no type constraint\n if (!sourceType) {\n return false;\n }\n\n // Convert to arrays for comparison\n const sourceTypes = Array.isArray(sourceType) ? sourceType : [sourceType];\n const targetTypes = Array.isArray(targetType) ? targetType : [targetType];\n\n // Check if any source type matches any target type\n return sourceTypes.some((st) => targetTypes.includes(st as any));\n}\n\n/**\n * Merges allOf schemas into a single schema representing their intersection.\n * For example: allOf: [{ type: \"string\", format: \"model\" }, { type: \"string\" }]\n * becomes: { type: \"string\", format: \"model\" }\n */\nfunction mergeAllOfSchemas(schemas: JsonSchema[]): JsonSchema | null {\n if (schemas.length === 0) return null;\n if (schemas.length === 1) return schemas[0] as JsonSchema;\n\n let merged: Record<string, unknown> = {};\n\n for (const schema of schemas) {\n if (typeof schema === \"boolean\") {\n if (schema === false) return false; // false in allOf makes the whole thing false\n // true in allOf doesn't add constraints, so we can skip it\n continue;\n }\n\n // At this point, schema is an object\n const schemaObj = schema as Record<string, unknown>;\n\n // Merge type\n if (schemaObj.type !== undefined) {\n if (merged.type === undefined) {\n merged.type = schemaObj.type;\n } else if (merged.type !== schemaObj.type) {\n // Types must be compatible - if they're different primitives, it's incompatible\n const mergedTypes = Array.isArray(merged.type) ? merged.type : [merged.type];\n const schemaTypes = Array.isArray(schemaObj.type) ? schemaObj.type : [schemaObj.type];\n const commonTypes = mergedTypes.filter((t: unknown) => schemaTypes.includes(t));\n if (commonTypes.length === 0) {\n return false; // Incompatible types\n }\n merged.type = commonTypes.length === 1 ? commonTypes[0] : commonTypes;\n }\n }\n\n // Merge format - use the most specific one (the one with narrowing if any)\n const schemaFormat = schemaObj.format as string | undefined;\n const mergedFormat = merged.format as string | undefined;\n if (schemaFormat) {\n if (!mergedFormat) {\n merged.format = schemaFormat;\n } else {\n // Both have formats - check if they're compatible\n const formatCompat = areFormatStringsCompatible(mergedFormat, schemaFormat);\n if (formatCompat === \"incompatible\") {\n return false; // Incompatible formats\n }\n // Use the more specific format (the one with narrowing, or either if both same)\n const mergedHasNarrow = mergedFormat.includes(\":\");\n const schemaHasNarrow = schemaFormat.includes(\":\");\n if (schemaHasNarrow && !mergedHasNarrow) {\n merged.format = schemaFormat;\n } else if (!schemaHasNarrow && mergedHasNarrow) {\n // Keep merged format (it's more specific)\n } else if (mergedFormat !== schemaFormat) {\n // Both have narrowing and they're different - should be caught by areFormatStringsCompatible\n return false;\n }\n }\n }\n\n // Merge properties for objects\n if (schemaObj.properties && typeof schemaObj.properties === \"object\") {\n if (!merged.properties) {\n merged.properties = {};\n }\n const mergedProps = merged.properties as Record<string, JsonSchema>;\n const schemaProps = schemaObj.properties as Record<string, JsonSchema>;\n for (const [key, value] of Object.entries(schemaProps)) {\n if (mergedProps[key]) {\n // Recursively merge nested schemas\n const nestedMerged = mergeAllOfSchemas([mergedProps[key], value]);\n if (nestedMerged === null || nestedMerged === false) {\n return false;\n }\n mergedProps[key] = nestedMerged as JsonSchema;\n } else {\n mergedProps[key] = value;\n }\n }\n }\n\n // Merge required arrays\n if (schemaObj.required && Array.isArray(schemaObj.required)) {\n if (!merged.required) {\n merged.required = [];\n }\n const mergedRequired = merged.required as string[];\n const schemaRequired = schemaObj.required as string[];\n // Intersection of required arrays\n merged.required = mergedRequired.filter((r) => schemaRequired.includes(r));\n }\n\n // Merge additionalProperties - most restrictive wins\n if (schemaObj.additionalProperties !== undefined) {\n if (merged.additionalProperties === undefined) {\n merged.additionalProperties = schemaObj.additionalProperties;\n } else if (merged.additionalProperties === true && schemaObj.additionalProperties === false) {\n merged.additionalProperties = false; // false is more restrictive\n }\n }\n\n // Merge items for arrays\n if (schemaObj.items !== undefined) {\n if (merged.items === undefined) {\n merged.items = schemaObj.items;\n } else {\n // Recursively merge item schemas\n const mergedItems = mergeAllOfSchemas([\n merged.items as JsonSchema,\n schemaObj.items as JsonSchema,\n ]);\n if (mergedItems === null || mergedItems === false) {\n return false;\n }\n merged.items = mergedItems;\n }\n }\n }\n\n return merged as JsonSchema;\n}\n\n/**\n * Checks if a source schema is compatible with a target schema in a oneOf/anyOf union.\n */\nfunction isCompatibleWithUnion(\n sourceSchema: JsonSchema,\n unionSchemas: JsonSchema[]\n): \"static\" | \"runtime\" | \"incompatible\" {\n let hasStatic = false;\n let hasRuntime = false;\n\n for (const unionSchema of unionSchemas) {\n const compatibility = areSemanticallyCompatible(sourceSchema, unionSchema);\n if (compatibility === \"static\") {\n hasStatic = true;\n } else if (compatibility === \"runtime\") {\n hasRuntime = true;\n }\n }\n\n if (hasStatic) return \"static\";\n if (hasRuntime) return \"runtime\";\n return \"incompatible\";\n}\n\n/**\n * Checks if two JSON schemas are semantically compatible.\n * Returns:\n * - \"static\": Compatible at design time, no runtime check needed\n * - \"runtime\": Compatible at design time, but needs runtime semantic check\n * - \"incompatible\": Not compatible\n */\nexport function areSemanticallyCompatible(\n sourceSchema: JsonSchema,\n targetSchema: JsonSchema\n): \"static\" | \"runtime\" | \"incompatible\" {\n // Handle undefined schemas (non-existent ports)\n if (sourceSchema === undefined || targetSchema === undefined) {\n return \"incompatible\";\n }\n\n // Handle boolean schemas\n if (typeof targetSchema === \"boolean\") {\n if (targetSchema === false) return \"incompatible\";\n if (targetSchema === true) return \"static\"; // target accepts anything\n return \"incompatible\";\n }\n\n if (typeof sourceSchema === \"boolean\") {\n if (sourceSchema === false) return \"incompatible\";\n // sourceSchema === true means source can be anything, which is compatible with any target, but may not be at runtime\n if (sourceSchema === true) return \"runtime\";\n }\n\n // Handle allOf in source (intersection types - merge all schemas first)\n if (sourceSchema.allOf && Array.isArray(sourceSchema.allOf)) {\n const mergedSchema = mergeAllOfSchemas(sourceSchema.allOf);\n if (mergedSchema === null || mergedSchema === false) {\n return \"incompatible\";\n }\n // Check compatibility of the merged schema against the target\n return areSemanticallyCompatible(mergedSchema, targetSchema);\n }\n\n // Check type compatibility first\n const sourceType = sourceSchema.type;\n const targetType = targetSchema.type;\n\n // Handle oneOf/anyOf in source first\n if (sourceSchema.oneOf && Array.isArray(sourceSchema.oneOf)) {\n let hasStatic = false;\n let hasRuntime = false;\n\n for (const sourceOption of sourceSchema.oneOf) {\n const compatibility = areSemanticallyCompatible(sourceOption as JsonSchema, targetSchema);\n if (compatibility === \"static\") {\n hasStatic = true;\n } else if (compatibility === \"runtime\") {\n hasRuntime = true;\n }\n }\n\n // If any option requires runtime check, the whole thing requires runtime check\n if (hasRuntime) return \"runtime\";\n if (hasStatic) return \"static\";\n return \"incompatible\";\n }\n\n if (sourceSchema.anyOf && Array.isArray(sourceSchema.anyOf)) {\n let hasStatic = false;\n let hasRuntime = false;\n\n for (const sourceOption of sourceSchema.anyOf) {\n const compatibility = areSemanticallyCompatible(sourceOption as JsonSchema, targetSchema);\n if (compatibility === \"static\") {\n hasStatic = true;\n } else if (compatibility === \"runtime\") {\n hasRuntime = true;\n }\n }\n\n // If any option requires runtime check, the whole thing requires runtime check\n if (hasRuntime) return \"runtime\";\n if (hasStatic) return \"static\";\n return \"incompatible\";\n }\n\n // Handle oneOf/anyOf in target (e.g., oneOf[string[], string])\n if (targetSchema.oneOf && Array.isArray(targetSchema.oneOf)) {\n return isCompatibleWithUnion(sourceSchema, targetSchema.oneOf);\n }\n\n if (targetSchema.anyOf && Array.isArray(targetSchema.anyOf)) {\n return isCompatibleWithUnion(sourceSchema, targetSchema.anyOf);\n }\n\n // Handle allOf in target (intersection types - source must be compatible with all)\n if (targetSchema.allOf && Array.isArray(targetSchema.allOf)) {\n let hasStatic = false;\n let hasRuntime = false;\n\n for (const allOfSchema of targetSchema.allOf) {\n const compatibility = areSemanticallyCompatible(sourceSchema, allOfSchema as JsonSchema);\n if (compatibility === \"incompatible\") {\n return \"incompatible\";\n } else if (compatibility === \"static\") {\n hasStatic = true;\n } else if (compatibility === \"runtime\") {\n hasRuntime = true;\n }\n }\n\n if (hasRuntime) return \"runtime\";\n if (hasStatic) return \"static\";\n return \"incompatible\";\n }\n\n // Handle object types - check if properties are compatible\n if (sourceType === \"object\" && targetType === \"object\") {\n const sourceProperties = sourceSchema.properties;\n const targetProperties = targetSchema.properties;\n\n // If target has no properties constraint, it accepts any object\n if (!targetProperties) {\n return \"static\";\n }\n\n // If source has no properties but target does, check if target allows additional properties\n if (!sourceProperties) {\n // If target doesn't allow additional properties, incompatible\n if (targetSchema.additionalProperties === false) {\n return \"incompatible\";\n }\n // Otherwise, source (any object) is compatible with target that allows additional properties\n return \"static\";\n }\n\n // Check if all required target properties are present and compatible in source\n const targetRequired = targetSchema.required || [];\n let hasStatic = true;\n let hasRuntime = false;\n\n for (const propName of targetRequired) {\n const targetProp = (targetProperties as Record<string, JsonSchema>)?.[propName];\n const sourceProp = (sourceProperties as Record<string, JsonSchema>)?.[propName];\n\n // If target requires a property that source doesn't have, incompatible\n if (!sourceProp) {\n return \"incompatible\";\n }\n\n // Check compatibility of the property\n if (targetProp) {\n const propCompatibility = areSemanticallyCompatible(sourceProp, targetProp);\n if (propCompatibility === \"incompatible\") {\n return \"incompatible\";\n } else if (propCompatibility === \"runtime\") {\n hasRuntime = true;\n hasStatic = false;\n }\n }\n }\n\n // Check if target allows additional properties\n if (targetSchema.additionalProperties === false) {\n // Target doesn't allow additional properties, so source can't have extra properties\n const sourcePropNames = Object.keys(sourceProperties as Record<string, JsonSchema>);\n const targetPropNames = Object.keys(targetProperties as Record<string, JsonSchema>);\n const extraProps = sourcePropNames.filter((name) => !targetPropNames.includes(name));\n if (extraProps.length > 0) {\n return \"incompatible\";\n }\n }\n\n if (hasRuntime) return \"runtime\";\n return \"static\";\n }\n\n // Handle array types - check compatibility of array items and array format\n if (sourceType === \"array\" && targetType === \"array\") {\n // First check format on the array schema itself (e.g., format: \"Float64Array\")\n const sourceFormat = (sourceSchema as any)?.format;\n const targetFormat = (targetSchema as any)?.format;\n\n let formatCompatibility: \"static\" | \"runtime\" | \"incompatible\" | null = null;\n\n // Both have format: check compatibility using prefix matching\n if (sourceFormat && targetFormat) {\n formatCompatibility = areFormatStringsCompatible(sourceFormat, targetFormat);\n // If formats are incompatible, the arrays are incompatible\n if (formatCompatibility === \"incompatible\") {\n return \"incompatible\";\n }\n }\n\n // Source has format, target doesn't: static compatible (source is more specific)\n if (sourceFormat && !targetFormat) {\n return \"static\";\n }\n\n // Source doesn't have format, target does: incompatible (target requires format)\n if (!sourceFormat && targetFormat) {\n return \"incompatible\";\n }\n\n // Now check array items compatibility\n const sourceItems = sourceSchema.items;\n const targetItems = targetSchema.items;\n\n // If both have items schemas, recursively check compatibility\n if (\n sourceItems &&\n typeof sourceItems === \"object\" &&\n !Array.isArray(sourceItems) &&\n targetItems &&\n typeof targetItems === \"object\" &&\n !Array.isArray(targetItems)\n ) {\n const itemsCompatibility = areSemanticallyCompatible(\n sourceItems as JsonSchema,\n targetItems as JsonSchema\n );\n // If format requires runtime check, return runtime (more restrictive)\n if (formatCompatibility === \"runtime\") {\n return \"runtime\";\n }\n return itemsCompatibility;\n }\n\n // If target accepts any array items, it's statically compatible\n if (!targetItems) {\n return \"static\";\n }\n\n // If source has no items but target does, incompatible\n if (!sourceItems) {\n return \"incompatible\";\n }\n\n // If target items is an array (tuple), check if source is compatible with any item\n if (Array.isArray(targetItems)) {\n return isCompatibleWithUnion(sourceItems as JsonSchema, targetItems as JsonSchema[]);\n }\n\n // Fallback to static if we can't determine\n return \"static\";\n }\n\n // If source has no type constraint, it can be anything (compatible with any target)\n // But we need to check if target has constraints that might require runtime checks\n if (!sourceType) {\n // Source accepts any type, but target might have format requiring runtime check\n const targetFormat = (targetSchema as any)?.format;\n if (targetFormat) {\n return \"runtime\";\n }\n return \"static\";\n }\n\n // Check if types are statically compatible\n if (!targetType) {\n // Target has no type constraint, it accepts anything\n // But we still need to check format - if target requires format, source must have it\n const targetFormat = (targetSchema as any)?.format;\n if (targetFormat) {\n // Target requires format, check if source has it\n const sourceFormat = (sourceSchema as any)?.format;\n if (!sourceFormat) {\n return \"incompatible\";\n }\n // Both have format, check compatibility\n return areFormatStringsCompatible(sourceFormat, targetFormat);\n }\n return \"static\";\n }\n\n if (!isTypeStaticallyCompatible(sourceType, targetType)) {\n return \"incompatible\";\n }\n\n // If types are compatible, check format compatibility\n // Format checks apply to all types, not just strings\n // Access format field directly (it's a standard JSON Schema field)\n const sourceFormat = (sourceSchema as any)?.format;\n const targetFormat = (targetSchema as any)?.format;\n\n // Both have format: check compatibility using prefix matching\n if (sourceFormat && targetFormat) {\n return areFormatStringsCompatible(sourceFormat, targetFormat);\n }\n\n // Source has format, target doesn't: static compatible (source is more specific)\n if (sourceFormat && !targetFormat) {\n return \"static\";\n }\n\n // Source doesn't have format, target does: incompatible (target requires format)\n if (!sourceFormat && targetFormat) {\n return \"incompatible\";\n }\n\n // Neither has format: static compatible\n return \"static\";\n}\n\n/**\n * Checks if two object schemas are semantically compatible.\n * This is a helper function for checking object-level schema compatibility.\n */\nexport function areObjectSchemasSemanticallyCompatible(\n sourceSchema: JsonSchema,\n targetSchema: JsonSchema\n): \"static\" | \"runtime\" | \"incompatible\" {\n return areSemanticallyCompatible(sourceSchema, targetSchema);\n}\n",
21
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport { compileSchema } from \"@sroussey/json-schema-library\";\nexport type { SchemaNode } from \"@sroussey/json-schema-library\";\n",
22
20
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Attempts to parse a potentially incomplete JSON string into a partial object.\n *\n * Useful for progressive rendering of streamed JSON output from AI providers.\n * Each call returns the most complete object that can be parsed from the\n * accumulated text so far.\n *\n * Strategy:\n * 1. Try JSON.parse directly (handles complete JSON)\n * 2. If that fails, attempt to close open delimiters and re-parse\n *\n * @param text - The (possibly incomplete) JSON string\n * @returns The parsed partial object, or undefined if text is too incomplete\n */\nexport function parsePartialJson(text: string): Record<string, unknown> | undefined {\n const trimmed = text.trim();\n if (!trimmed) return undefined;\n\n // Fast path: try parsing as-is\n try {\n const result = JSON.parse(trimmed);\n if (typeof result === \"object\" && result !== null && !Array.isArray(result)) {\n return result as Record<string, unknown>;\n }\n return undefined;\n } catch {\n // Fall through to repair logic\n }\n\n // Must start with '{' for an object\n if (trimmed[0] !== \"{\") return undefined;\n\n const repaired = repairJson(trimmed);\n if (repaired === undefined) return undefined;\n\n try {\n const result = JSON.parse(repaired);\n if (typeof result === \"object\" && result !== null && !Array.isArray(result)) {\n return result as Record<string, unknown>;\n }\n return undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Attempts to repair incomplete JSON by closing open structures.\n * Returns the repaired string, or undefined if the text is too malformed.\n */\nfunction repairJson(text: string): string | undefined {\n let result = \"\";\n let i = 0;\n const len = text.length;\n\n // Track open delimiters for closing\n const stack: string[] = [];\n let inString = false;\n let escaped = false;\n // Track position of last structurally complete point\n let lastSafeEnd = 0;\n\n while (i < len) {\n const ch = text[i];\n\n if (escaped) {\n escaped = false;\n result += ch;\n i++;\n continue;\n }\n\n if (ch === \"\\\\\") {\n escaped = true;\n result += ch;\n i++;\n continue;\n }\n\n if (inString) {\n if (ch === '\"') {\n inString = false;\n result += ch;\n i++;\n lastSafeEnd = result.length;\n continue;\n }\n result += ch;\n i++;\n continue;\n }\n\n // Not in a string\n switch (ch) {\n case '\"':\n inString = true;\n result += ch;\n i++;\n break;\n case \"{\":\n stack.push(\"}\");\n result += ch;\n i++;\n break;\n case \"[\":\n stack.push(\"]\");\n result += ch;\n i++;\n break;\n case \"}\":\n if (stack.length > 0 && stack[stack.length - 1] === \"}\") {\n stack.pop();\n result += ch;\n i++;\n lastSafeEnd = result.length;\n } else {\n // Mismatched brace, truncate here\n return closeStack(result, stack);\n }\n break;\n case \"]\":\n if (stack.length > 0 && stack[stack.length - 1] === \"]\") {\n stack.pop();\n result += ch;\n i++;\n lastSafeEnd = result.length;\n } else {\n return closeStack(result, stack);\n }\n break;\n default:\n result += ch;\n i++;\n break;\n }\n }\n\n // Reached the end with unclosed structures\n if (inString) {\n // Close the unclosed string, then close the stack\n result += '\"';\n }\n\n if (stack.length === 0) {\n // Already valid\n return result;\n }\n\n return closeStack(cleanTrailing(result), stack);\n}\n\n/**\n * Removes trailing incomplete tokens that would prevent JSON parsing.\n * Strips trailing commas, colons, and incomplete key/value fragments.\n */\nfunction cleanTrailing(text: string): string {\n // Remove trailing whitespace\n let s = text.trimEnd();\n\n // Repeatedly strip trailing problematic characters\n let changed = true;\n while (changed) {\n changed = false;\n const trimmed = s.trimEnd();\n\n // Trailing comma\n if (trimmed.endsWith(\",\")) {\n s = trimmed.slice(0, -1);\n changed = true;\n continue;\n }\n\n // Trailing colon (incomplete key-value pair)\n if (trimmed.endsWith(\":\")) {\n // Remove the colon and the preceding key\n const withoutColon = trimmed.slice(0, -1).trimEnd();\n // Remove the key (should be a string ending with \")\n if (withoutColon.endsWith('\"')) {\n const keyStart = withoutColon.lastIndexOf('\"', withoutColon.length - 2);\n if (keyStart >= 0) {\n // Also remove any preceding comma\n let before = withoutColon.slice(0, keyStart).trimEnd();\n if (before.endsWith(\",\")) {\n before = before.slice(0, -1);\n }\n s = before;\n changed = true;\n continue;\n }\n }\n // Can't find the key, just remove the colon\n s = withoutColon;\n changed = true;\n continue;\n }\n\n // Trailing incomplete value after a colon (e.g., `\"key\": tru` or `\"key\": 12`)\n // Check if there's an incomplete bare token at the end\n const bareTokenMatch = trimmed.match(\n /,\\s*\"[^\"]*\"\\s*:\\s*(?:tru|fal|nul|true|false|null|[\\d.eE+-]+)$/\n );\n if (bareTokenMatch) {\n // Check if the bare value is complete\n const valueStr = trimmed.slice(trimmed.lastIndexOf(\":\") + 1).trim();\n try {\n JSON.parse(valueStr);\n // Value is complete, keep it\n } catch {\n // Value is incomplete, remove the whole key-value pair\n s = trimmed.slice(0, bareTokenMatch.index!).trimEnd();\n if (s.endsWith(\",\")) s = s.slice(0, -1);\n changed = true;\n continue;\n }\n }\n }\n\n return s;\n}\n\n/**\n * Closes all open delimiters in the stack.\n */\nfunction closeStack(text: string, stack: string[]): string {\n let result = text;\n for (let i = stack.length - 1; i >= 0; i--) {\n result += stack[i];\n }\n return result;\n}\n",
23
21
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport type Cursor<T> = {\n length: number;\n next: () => IteratorResult<T>;\n [Symbol.iterator]: () => Iterator<T>;\n};\n/**\n * Creates a proxy that treats an object-of-arrays as an array-of-objects.\n * It lazily computes each row when accessed and lets you update or add new rows.\n *\n * When adding a new object (either via .push or assignment to the next index),\n * the underlying arrays are updated accordingly.\n *\n * @param data An object whose properties are arrays (assumed to have equal lengths)\n * @returns A proxy that behaves like an array of objects backed by the input arrays\n */\nexport function objectOfArraysAsArrayOfObjects<T extends Record<string, any>>(data: {\n [K in keyof T]: T[K][];\n}): Array<T> & { cursor: () => Cursor<T> } {\n // Get all keys from the object-of-arrays.\n const keys = Object.keys(data) as (keyof T)[];\n // confirm that all arrays have the same length\n const length = data[keys[0]].length;\n for (const key of keys) {\n if (data[key].length !== length) {\n console.error(\"All arrays must have the same length\", key, data[key].length, length, data);\n throw new Error(\"All arrays must have the same length\");\n }\n }\n\n const indexSymbol = Symbol(\"index\");\n\n /**\n * Creates a live row proxy for the given index.\n * The proxy intercepts get/set operations so that reads and writes\n * go directly to data[key][index].\n */\n function createRowProxy(index: number): T & { [indexSymbol]: number } {\n let currentIndex = index;\n return new Proxy({} as T & { [indexSymbol]: number }, {\n get(_target, prop, receiver) {\n if (currentIndex < 0 || currentIndex >= data[keys[0]].length) {\n return undefined;\n }\n if (typeof prop === \"string\" && keys.includes(prop as keyof T)) {\n return data[prop as keyof T][currentIndex];\n }\n if (prop === indexSymbol) {\n return currentIndex;\n }\n return Reflect.get(_target, prop, receiver);\n },\n set(_target, prop, value, receiver) {\n if (currentIndex < 0 || currentIndex >= data[keys[0]].length) {\n return false;\n }\n if (typeof prop === \"string\" && keys.includes(prop as keyof T)) {\n data[prop as keyof T][currentIndex] = value;\n return true;\n }\n if (prop === indexSymbol) {\n currentIndex = value;\n return true;\n }\n return Reflect.set(_target, prop, value, receiver);\n },\n ownKeys(_target) {\n return keys as string[];\n },\n getOwnPropertyDescriptor(_target, prop) {\n if (typeof prop === \"string\" && keys.includes(prop as keyof T)) {\n return { enumerable: true, configurable: true };\n }\n return undefined;\n },\n });\n }\n\n function createCursor(): Cursor<T> {\n // Determine the keys and the effective number of rows.\n let currentIndex = 0;\n\n // The cursor object that will be updated for each row.\n const cursor = createRowProxy(0);\n\n const obj = {\n get length() {\n return data[keys[0]].length;\n },\n /**\n * Returns the next row via the cursor.\n */\n next(): IteratorResult<T> {\n if (currentIndex < length) {\n cursor[indexSymbol] = currentIndex;\n currentIndex++;\n return { done: false, value: cursor };\n } else {\n return { done: true, value: undefined as any };\n }\n },\n /**\n * Makes the object iterable.\n */\n [Symbol.iterator](): Iterator<T> {\n // Reset the cursor for a fresh iteration.\n currentIndex = 0;\n cursor[indexSymbol] = currentIndex;\n return obj;\n },\n };\n return obj as Cursor<T>;\n }\n\n // Helper: shallow equality comparison between two rows.\n function shallowEqual(index: number, row: T): boolean {\n for (const key of keys) {\n if (data[key][index] !== row[key]) return false;\n }\n return true;\n }\n\n return new Proxy([] as Array<T>, {\n get(target, prop, receiver) {\n // Always return the current length dynamically.\n if (prop === \"length\") {\n return data[keys[0]].length;\n }\n\n // Create a cursor iterator.\n if (prop === \"cursor\") {\n return function () {\n return createCursor();\n };\n }\n\n // Override reverse to reverse the underlying arrays.\n if (prop === \"reverse\") {\n return function () {\n for (const key of keys) {\n data[key].reverse();\n }\n return receiver;\n };\n }\n\n // Override push to add a new object to the underlying arrays.\n if (prop === \"push\") {\n return function (...args: T[]) {\n for (const item of args) {\n for (const key of keys) {\n data[key].push(item[key]);\n }\n }\n return data[keys[0]].length;\n };\n }\n\n // Override pop to remove the last row from the underlying arrays and return it.\n if (prop === \"pop\") {\n return function () {\n const len = data[keys[0]].length;\n if (len === 0) return undefined;\n const poppedRow = {} as T;\n // Remove last element from each array and assemble the row to return.\n for (const key of keys) {\n poppedRow[key] = data[key].pop() as T[keyof T];\n }\n return poppedRow;\n };\n }\n\n // Override unshift to add a new row (or rows) at the beginning.\n if (prop === \"unshift\") {\n return function (...args: T[]) {\n // To preserve order, iterate from the last argument to the first.\n for (let i = args.length - 1; i >= 0; i--) {\n const item = args[i];\n for (const key of keys) {\n data[key].unshift(item[key]);\n }\n }\n return data[keys[0]].length;\n };\n }\n\n // Override shift to remove the first row from the underlying arrays and return it.\n if (prop === \"shift\") {\n return function () {\n if (data[keys[0]].length === 0) return undefined;\n const shiftedRow = {} as T;\n for (const key of keys) {\n shiftedRow[key] = data[key].shift() as T[keyof T];\n }\n return shiftedRow;\n };\n }\n\n // Override splice to remove or replace elements at a specific index.\n if (prop === \"splice\") {\n return function (start: number, deleteCount?: number, ...items: T[]) {\n const len = data[keys[0]].length;\n // Normalize start index.\n if (start < 0) {\n start = len + start;\n if (start < 0) start = 0;\n }\n if (deleteCount === undefined) {\n deleteCount = len - start;\n }\n // For each key, perform splice and capture removed elements.\n const removedByKey: { [K in keyof T]: T[K][] } = {} as any;\n for (const key of keys) {\n removedByKey[key] = data[key].splice(\n start,\n deleteCount,\n ...items.map((item) => item[key])\n );\n }\n // Combine removed elements into an array of objects.\n const removed: T[] = [];\n for (let i = 0; i < deleteCount; i++) {\n const row = {} as T;\n for (const key of keys) {\n row[key] = removedByKey[key][i];\n }\n removed.push(row);\n }\n return removed;\n };\n }\n\n // Override sort to sort the underlying arrays.\n // TODO(str): This is a bit of a hack. We should probably use a more efficient\n // way to do this.\n if (prop === \"sort\") {\n return function (compareFn?: (a: T, b: T) => number) {\n // Build an array of rows.\n const rows = [...receiver];\n // Sort rows.\n rows.sort(compareFn);\n // Write back sorted rows.\n for (const key of keys) {\n data[key] = rows.map((row) => row[key]);\n }\n return receiver;\n };\n }\n\n // Non-mutating Methods: now rewritten as follows.\n if (prop === \"includes\") {\n return function (searchElement: T, fromIndex?: number) {\n const len = data[keys[0]].length;\n let start = fromIndex ?? 0;\n if (start < 0) {\n start = Math.max(0, len + start);\n }\n for (let i = start; i < len; i++) {\n if (shallowEqual(i, searchElement)) return true;\n }\n return false;\n };\n }\n if (prop === \"indexOf\") {\n return function (searchElement: T, fromIndex?: number) {\n const len = data[keys[0]].length;\n let start = fromIndex ?? 0;\n if (start < 0) {\n start = Math.max(0, len + start);\n }\n for (let i = start; i < len; i++) {\n if (shallowEqual(i, searchElement)) return i;\n }\n return -1;\n };\n }\n if (prop === \"lastIndexOf\") {\n return function (searchElement: T, fromIndex?: number) {\n const len = data[keys[0]].length;\n // Default start index is the last element.\n let start = fromIndex ?? len - 1;\n if (start < 0) {\n start = len + start;\n }\n for (let i = start; i >= 0; i--) {\n if (shallowEqual(i, searchElement)) return i;\n }\n return -1;\n };\n }\n\n // Non-mutating methods implemented via an array of object row proxies.\n if (prop === \"forEach\") {\n return function (callback: (value: T, index: number, array: T[]) => void, thisArg?: any) {\n return [...receiver].forEach(callback, thisArg);\n };\n }\n if (prop === \"map\") {\n return function (callback: (value: T, index: number, array: T[]) => any, thisArg?: any) {\n return [...receiver].map(callback, thisArg);\n };\n }\n if (prop === \"filter\") {\n return function (\n callback: (value: T, index: number, array: T[]) => boolean,\n thisArg?: any\n ) {\n return [...receiver].filter(callback, thisArg);\n };\n }\n if (prop === \"reduce\") {\n return function (\n callback: (accumulator: any, currentValue: T, currentIndex: number, array: T[]) => any,\n initialValue?: any\n ) {\n return [...receiver].reduce(callback, initialValue);\n };\n }\n if (prop === \"find\") {\n return function (\n callback: (value: T, index: number, array: T[]) => boolean,\n thisArg?: any\n ) {\n return [...receiver].find(callback, thisArg);\n };\n }\n if (prop === \"every\") {\n return function (\n callback: (value: T, index: number, array: T[]) => boolean,\n thisArg?: any\n ) {\n return [...receiver].every(callback, thisArg);\n };\n }\n if (prop === \"some\") {\n return function (\n callback: (value: T, index: number, array: T[]) => boolean,\n thisArg?: any\n ) {\n return [...receiver].some(callback, thisArg);\n };\n }\n\n // When a numeric index is accessed, build and return the corresponding row.\n if (typeof prop === \"string\" && !isNaN(Number(prop))) {\n const index = Number(prop);\n if (index < 0 || index >= data[keys[0]].length) {\n return undefined;\n }\n return createRowProxy(index);\n }\n\n // Allow iteration over the rows.\n if (prop === Symbol.iterator) {\n return function* () {\n for (let i = 0; i < data[keys[0]].length; i++) {\n yield createRowProxy(i);\n }\n };\n }\n\n // Delegate any other property access.\n return Reflect.get(target, prop, receiver);\n },\n set(target, prop, value, receiver) {\n // Intercept numeric index assignments.\n if (typeof prop === \"string\" && !isNaN(Number(prop))) {\n const index = Number(prop);\n if (index === data[keys[0]].length) {\n // Appending a new row.\n for (const key of keys) {\n data[key].push(value[key]);\n }\n return true;\n } else if (index < data[keys[0]].length) {\n // Updating an existing row.\n for (const key of keys) {\n if (value.hasOwnProperty(key)) {\n data[key][index] = value[key];\n }\n }\n return true;\n }\n }\n return Reflect.set(target, prop, value, receiver);\n },\n // Intercept deletion of properties to remove a row from each underlying array.\n deleteProperty(target, prop) {\n if (typeof prop === \"string\" && !isNaN(Number(prop))) {\n const index = Number(prop);\n if (index >= 0 && index < data[keys[0]].length) {\n // Remove the element at this index from every underlying array.\n for (const key of keys) {\n // slice mutates the array in place\n data[key].splice(index, 1);\n }\n return true;\n }\n }\n return Reflect.deleteProperty(target, prop);\n },\n }) as Array<T> & { cursor: () => Cursor<T> };\n}\n",
24
22
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { FromSchema, FromSchemaDefaultOptions, FromSchemaOptions } from \"../json-schema/FromSchema\";\nimport { JsonSchema } from \"../json-schema/JsonSchema\";\n\n/**\n * Supported typed array types\n * - Float16Array: 16-bit floating point (medium precision)\n * - Float32Array: Standard 32-bit floating point (most common)\n * - Float64Array: 64-bit floating point (high precision)\n * - Int8Array: 8-bit signed integer (binary quantization)\n * - Uint8Array: 8-bit unsigned integer (quantization)\n * - Int16Array: 16-bit signed integer (quantization)\n * - Uint16Array: 16-bit unsigned integer (quantization)\n */\nexport type TypedArray =\n | Float32Array\n | Float16Array\n | Float64Array\n | Int8Array\n | Uint8Array\n | Int16Array\n | Uint16Array;\n\nexport type TypedArrayString =\n | \"TypedArray\"\n | \"TypedArray:Float16Array\"\n | \"TypedArray:Float32Array\"\n | \"TypedArray:Float64Array\"\n | \"TypedArray:Int8Array\"\n | \"TypedArray:Uint8Array\"\n | \"TypedArray:Int16Array\"\n | \"TypedArray:Uint16Array\";\n\nexport function isTypedArray(value: unknown): value is TypedArray {\n return ArrayBuffer.isView(value) && !(value instanceof DataView);\n}\n\n// Type-only value for use in deserialize patterns\nconst TypedArrayType = null as any as TypedArray;\n\nconst TypedArraySchemaOptions = {\n ...FromSchemaDefaultOptions,\n deserialize: [\n {\n pattern: { type: \"array\", format: \"TypedArray:Float64Array\" },\n output: Float64Array,\n },\n {\n pattern: { type: \"array\", format: \"TypedArray:Float32Array\" },\n output: Float32Array,\n },\n {\n pattern: { type: \"array\", format: \"TypedArray:Float16Array\" },\n output: Float16Array,\n },\n {\n pattern: { type: \"array\", format: \"TypedArray:Int16Array\" },\n output: Int16Array,\n },\n {\n pattern: { type: \"array\", format: \"TypedArray:Int8Array\" },\n output: Int8Array,\n },\n {\n pattern: { type: \"array\", format: \"TypedArray:Uint8Array\" },\n output: Uint8Array,\n },\n {\n pattern: { type: \"array\", format: \"TypedArray:Uint16Array\" },\n output: Uint16Array,\n },\n {\n pattern: { type: \"array\", format: \"TypedArray\" },\n output: TypedArrayType,\n },\n ],\n} as const satisfies FromSchemaOptions;\n\nexport type TypedArraySchemaOptions = typeof TypedArraySchemaOptions;\n\nexport type VectorFromSchema<SCHEMA extends JsonSchema> = FromSchema<\n SCHEMA,\n TypedArraySchemaOptions\n>;\n\nexport const TypedArraySchema = (annotations: Record<string, unknown> = {}) => {\n return {\n type: \"array\",\n format: \"TypedArray\",\n title: \"Typed Array\",\n description: \"A typed array (Float32Array, Int8Array, etc.)\",\n ...annotations,\n } as const satisfies JsonSchema;\n};\n",
@@ -26,28 +24,25 @@
26
24
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { TypedArray } from \"./TypedArray\";\n\n/** Width ranking: higher = wider type (more precision). Float64 > Float32 > Float16 > Int16 > Int8. */\nconst WIDTH_RANK: Record<string, number> = {\n Float64Array: 6,\n Float32Array: 5,\n Float16Array: 4,\n Int16Array: 3,\n Uint16Array: 3,\n Int8Array: 2,\n Uint8Array: 2,\n};\n\nfunction getWidthRank(arr: TypedArray): number {\n return WIDTH_RANK[arr.constructor.name] ?? 0;\n}\n\n/**\n * Returns the widest (highest-precision) TypedArray constructor among the given sources.\n * E.g. Int8Array × Float32Array → Float32Array.\n */\nfunction widestConstructor(sources: TypedArray[]): new (len: number) => TypedArray {\n let best = sources[0];\n for (let i = 1; i < sources.length; i++) {\n if (getWidthRank(sources[i]) > getWidthRank(best)) best = sources[i];\n }\n return best.constructor as new (len: number) => TypedArray;\n}\n\n/**\n * Creates a new TypedArray with the widest type among the given sources,\n * filled with the provided values. Use when combining multiple vectors\n * (e.g. a * b) so output precision matches the widest input.\n */\nexport function createTypedArrayFrom(sources: TypedArray[], values: number[]): TypedArray {\n const Ctor = widestConstructor(sources);\n const result = new Ctor(values.length);\n for (let i = 0; i < values.length; i++) result[i] = values[i];\n return result;\n}\n",
27
25
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { TypedArray } from \"./TypedArray\";\n\n/**\n * Calculates cosine similarity between two vectors\n * Returns a value between -1 and 1, where 1 means identical direction\n */\nexport function cosineSimilarity(a: TypedArray, b: TypedArray): number {\n if (a.length !== b.length) {\n throw new Error(\"Vectors must have the same length\");\n }\n let dotProduct = 0;\n let normA = 0;\n let normB = 0;\n for (let i = 0; i < a.length; i++) {\n dotProduct += a[i] * b[i];\n normA += a[i] * a[i];\n normB += b[i] * b[i];\n }\n const denominator = Math.sqrt(normA) * Math.sqrt(normB);\n if (denominator === 0) {\n return 0;\n }\n return dotProduct / denominator;\n}\n\n/**\n * Calculates Jaccard similarity between two vectors\n * Uses the formula: sum(min(a[i], b[i])) / sum(max(a[i], b[i]))\n * Returns a value between 0 and 1\n * For negative values, normalizes by finding the global min and shifting to non-negative range\n */\nexport function jaccardSimilarity(a: TypedArray, b: TypedArray): number {\n if (a.length !== b.length) {\n throw new Error(\"Vectors must have the same length\");\n }\n\n // Find global min across both vectors to handle negative values\n let globalMin = a[0];\n for (let i = 0; i < a.length; i++) {\n globalMin = Math.min(globalMin, a[i], b[i]);\n }\n\n // Shift values to non-negative range if needed\n const shift = globalMin < 0 ? -globalMin : 0;\n\n let minSum = 0;\n let maxSum = 0;\n\n for (let i = 0; i < a.length; i++) {\n const shiftedA = a[i] + shift;\n const shiftedB = b[i] + shift;\n minSum += Math.min(shiftedA, shiftedB);\n maxSum += Math.max(shiftedA, shiftedB);\n }\n\n return maxSum === 0 ? 0 : minSum / maxSum;\n}\n\n/**\n * Calculates Hamming distance between two vectors (normalized)\n * Counts the number of positions where vectors differ\n * Returns a value between 0 and 1 (0 = identical, 1 = completely different)\n */\nexport function hammingDistance(a: TypedArray, b: TypedArray): number {\n if (a.length !== b.length) {\n throw new Error(\"Vectors must have the same length\");\n }\n\n let differences = 0;\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n differences++;\n }\n }\n\n return differences / a.length;\n}\n\n/**\n * Calculates Hamming similarity (inverse of distance)\n * Returns a value between 0 and 1 (1 = identical, 0 = completely different)\n */\nexport function hammingSimilarity(a: TypedArray, b: TypedArray): number {\n return 1 - hammingDistance(a, b);\n}\n",
28
26
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { TypedArray } from \"./TypedArray\";\n\n/**\n * Calculates the magnitude (L2 norm) of a vector\n */\nexport function magnitude(arr: TypedArray | number[]): number {\n // @ts-ignore - Vector reduce works but TS doesn't recognize it\n return Math.sqrt(arr.reduce((acc, val) => acc + val * val, 0));\n}\n\n/**\n * Calculates the inner (dot) product of two vectors\n */\nexport function inner(arr1: TypedArray, arr2: TypedArray): number {\n if (arr1.length !== arr2.length) {\n throw new Error(\"Vectors must have the same length to compute inner product.\");\n }\n // @ts-ignore - Vector reduce works but TS doesn't recognize it\n return arr1.reduce((acc, val, i) => acc + val * arr2[i], 0);\n}\n\n/**\n * Normalizes a vector to unit length (L2 normalization)\n *\n * @param vector - The vector to normalize\n * @param throwOnZero - If true, throws an error for zero vectors. If false, returns the original vector.\n * @returns Normalized vector with the same type as input\n */\nexport function normalize(vector: TypedArray, throwOnZero = true, float32 = false): TypedArray {\n const mag = magnitude(vector);\n\n if (mag === 0) {\n if (throwOnZero) {\n throw new Error(\"Cannot normalize a zero vector.\");\n }\n return vector;\n }\n\n const normalized = Array.from(vector).map((val) => Number(val) / mag);\n\n if (float32) {\n return new Float32Array(normalized);\n }\n\n // Preserve the original Vector type\n if (vector instanceof Float64Array) {\n return new Float64Array(normalized);\n }\n if (vector instanceof Float16Array) {\n return new Float16Array(normalized);\n }\n if (vector instanceof Float32Array) {\n return new Float32Array(normalized);\n }\n if (vector instanceof Int8Array) {\n return new Int8Array(normalized);\n }\n if (vector instanceof Uint8Array) {\n return new Uint8Array(normalized);\n }\n if (vector instanceof Int16Array) {\n return new Int16Array(normalized);\n }\n if (vector instanceof Uint16Array) {\n return new Uint16Array(normalized);\n }\n // For other integer arrays, use Float32Array since normalization produces floats\n return new Float32Array(normalized);\n}\n\n/**\n * Normalizes an array of numbers to unit length (L2 normalization)\n *\n * @param values - The array of numbers to normalize\n * @param throwOnZero - If true, throws an error for zero vectors. If false, returns the original array.\n * @returns Normalized array of numbers\n */\nexport function normalizeNumberArray(values: number[], throwOnZero = false): number[] {\n const norm = magnitude(values);\n\n if (norm === 0) {\n if (throwOnZero) {\n throw new Error(\"Cannot normalize a zero vector.\");\n }\n return values;\n }\n\n return values.map((v) => v / norm);\n}\n",
29
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken, globalServiceRegistry } from \"../di\";\nimport { getLogger } from \"../logging\";\n\nexport class WorkerManager {\n private workers: Map<string, Worker> = new Map();\n private readyWorkers: Map<string, Promise<void>> = new Map();\n /** Function names registered on each worker, populated from the ready message. */\n private workerFunctions: Map<string, Set<string>> = new Map();\n private workerStreamFunctions: Map<string, Set<string>> = new Map();\n private workerReactiveFunctions: Map<string, Set<string>> = new Map();\n\n registerWorker(name: string, worker: Worker) {\n if (this.workers.has(name)) throw new Error(`Worker ${name} is already registered.`);\n this.workers.set(name, worker);\n\n this.workers.set(name, worker);\n worker.addEventListener(\"error\", (event) => {\n console.error(\"Worker Error:\", event.message, \"at\", event.filename, \"line:\", event.lineno);\n });\n worker.addEventListener(\"messageerror\", (event) => {\n console.error(\"Worker message error:\", event);\n });\n\n const readyPromise = new Promise<void>((resolve) => {\n const handleReady = (event: MessageEvent) => {\n if (event.data?.type === \"ready\") {\n worker.removeEventListener(\"message\", handleReady);\n this.workerFunctions.set(name, new Set(event.data.functions ?? []));\n this.workerStreamFunctions.set(name, new Set(event.data.streamFunctions ?? []));\n this.workerReactiveFunctions.set(name, new Set(event.data.reactiveFunctions ?? []));\n resolve();\n }\n };\n\n worker.addEventListener(\"message\", handleReady);\n });\n\n this.readyWorkers.set(name, readyPromise);\n }\n\n getWorker(name: string): Worker {\n const worker = this.workers.get(name);\n if (!worker) throw new Error(`Worker ${name} not found.`);\n return worker;\n }\n\n async callWorkerFunction<T>(\n workerName: string,\n functionName: string,\n args: any[],\n options?: {\n signal?: AbortSignal;\n onProgress?: (progress: number, message?: string, details?: any) => void;\n }\n ): Promise<T> {\n const worker = this.workers.get(workerName);\n if (!worker) throw new Error(`Worker ${workerName} not found.`);\n await this.readyWorkers.get(workerName);\n\n const knownFunctions = this.workerFunctions.get(workerName);\n if (knownFunctions && !knownFunctions.has(functionName)) {\n throw new Error(`Function \"${functionName}\" is not registered on worker \"${workerName}\".`);\n }\n\n return new Promise((resolve, reject) => {\n const requestId = crypto.randomUUID();\n\n const handleMessage = (event: MessageEvent) => {\n const { id, type, data } = event.data;\n if (id !== requestId) return;\n if (type === \"progress\" && options?.onProgress) {\n options.onProgress(data.progress, data.message, data.details);\n getLogger().debug(\n `Worker ${workerName} function ${functionName} progress: ${data.progress}, `,\n { data }\n );\n } else if (type === \"complete\") {\n cleanup();\n getLogger().debug(`Worker ${workerName} function ${functionName} complete.`, { data });\n resolve(data);\n } else if (type === \"error\") {\n cleanup();\n getLogger().debug(`Worker ${workerName} function ${functionName} error.`, { data });\n reject(new Error(data));\n }\n };\n\n const handleAbort = () => {\n worker.postMessage({ id: requestId, type: \"abort\" });\n getLogger().info(`Worker ${workerName} function ${functionName} aborted.`);\n };\n\n const cleanup = () => {\n worker.removeEventListener(\"message\", handleMessage);\n options?.signal?.removeEventListener(\"abort\", handleAbort);\n };\n\n worker.addEventListener(\"message\", handleMessage);\n\n if (options?.signal) {\n options.signal.addEventListener(\"abort\", handleAbort, { once: true });\n }\n\n // Note: We intentionally do NOT transfer TypedArrays from the main thread to the worker.\n // Transferring detaches the buffers on the main thread, which breaks downstream tasks\n // that still need those TypedArrays (e.g., the embedding vectors flowing through the\n // task graph). Workers send results back with transferables (zero-copy), but the\n // main thread always clones data going to workers to preserve its own references.\n const message = { id: requestId, type: \"call\", functionName, args };\n worker.postMessage(message);\n getLogger().info(`Worker ${workerName} function ${functionName} called.`);\n });\n }\n\n /**\n * Call a reactive function on a worker. Returns undefined (rather than throwing)\n * if the worker has no reactive function registered for the given name, so callers\n * can treat the result as an optional preview.\n *\n * @param workerName - Registered worker name\n * @param functionName - Name of the reactive function registered on the worker\n * @param args - Arguments to pass: [input, output, model]\n * @returns The reactive result, or undefined if not registered / on error\n */\n async callWorkerReactiveFunction<T>(\n workerName: string,\n functionName: string,\n args: any[]\n ): Promise<T | undefined> {\n const worker = this.workers.get(workerName);\n if (!worker) return undefined;\n await this.readyWorkers.get(workerName);\n\n // Skip the roundtrip if the worker didn't register a reactive function for this name.\n const knownReactive = this.workerReactiveFunctions.get(workerName);\n if (knownReactive && !knownReactive.has(functionName)) return undefined;\n\n return new Promise((resolve) => {\n const requestId = crypto.randomUUID();\n\n const handleMessage = (event: MessageEvent) => {\n const { id, type, data } = event.data;\n if (id !== requestId) return;\n if (type === \"complete\") {\n cleanup();\n resolve(data as T | undefined);\n } else if (type === \"error\") {\n cleanup();\n resolve(undefined);\n }\n };\n\n const cleanup = () => {\n worker.removeEventListener(\"message\", handleMessage);\n };\n\n worker.addEventListener(\"message\", handleMessage);\n\n const message = { id: requestId, type: \"call\", functionName, args, reactive: true };\n // Note: No transferables — same reasoning as callWorkerFunction above.\n worker.postMessage(message);\n getLogger().info(`Worker ${workerName} reactive function ${functionName} called.`);\n });\n }\n\n /**\n * Call a streaming function on a worker and return an AsyncGenerator that\n * yields each stream chunk sent by the worker. The worker sends `stream_chunk`\n * messages for each yielded event and a `complete` message when the generator\n * finishes. An `error` message from the worker causes the iterator to throw.\n *\n * @param workerName - Registered worker name\n * @param functionName - Name of the stream function registered on the worker\n * @param args - Arguments to pass to the stream function\n * @param options - Optional abort signal\n * @returns AsyncGenerator yielding stream events from the worker\n */\n async *callWorkerStreamFunction<T>(\n workerName: string,\n functionName: string,\n args: any[],\n options?: { signal?: AbortSignal }\n ): AsyncGenerator<T> {\n const worker = this.workers.get(workerName);\n if (!worker) throw new Error(`Worker ${workerName} not found.`);\n await this.readyWorkers.get(workerName);\n\n // The worker falls back to regular functions for stream calls, so either counts.\n const knownStream = this.workerStreamFunctions.get(workerName);\n const knownFns = this.workerFunctions.get(workerName);\n if (knownStream && knownFns && !knownStream.has(functionName) && !knownFns.has(functionName)) {\n throw new Error(`Function \"${functionName}\" is not registered on worker \"${workerName}\".`);\n }\n\n const requestId = crypto.randomUUID();\n\n // Push-queue pattern: messages push items, async generator pulls them\n type QueueItem =\n | { kind: \"event\"; data: T }\n | { kind: \"done\" }\n | { kind: \"error\"; error: Error };\n\n const queue: QueueItem[] = [];\n let waiting: ((value: void) => void) | null = null;\n\n const notify = () => {\n if (waiting) {\n const resolve = waiting;\n waiting = null;\n resolve();\n }\n };\n\n const handleMessage = (event: MessageEvent) => {\n const { id, type, data } = event.data;\n if (id !== requestId) return;\n\n if (type === \"stream_chunk\") {\n queue.push({ kind: \"event\", data });\n notify();\n } else if (type === \"complete\") {\n queue.push({ kind: \"done\" });\n notify();\n } else if (type === \"error\") {\n queue.push({ kind: \"error\", error: new Error(data) });\n notify();\n }\n };\n\n const handleAbort = () => {\n worker.postMessage({ id: requestId, type: \"abort\" });\n getLogger().info(`Worker ${workerName} stream function ${functionName} aborted.`);\n };\n\n const cleanup = () => {\n worker.removeEventListener(\"message\", handleMessage);\n options?.signal?.removeEventListener(\"abort\", handleAbort);\n };\n\n worker.addEventListener(\"message\", handleMessage);\n\n if (options?.signal) {\n if (options.signal.aborted) {\n cleanup();\n throw new Error(\"Operation aborted\");\n }\n options.signal.addEventListener(\"abort\", handleAbort, { once: true });\n }\n\n // Send call message with stream flag\n // Note: No transferables — same reasoning as callWorkerFunction above.\n const message = { id: requestId, type: \"call\", functionName, args, stream: true };\n worker.postMessage(message);\n getLogger().info(`Worker ${workerName} stream function ${functionName} called.`);\n\n let completedNormally = false;\n try {\n while (true) {\n while (queue.length > 0) {\n const item = queue.shift()!;\n if (item.kind === \"event\") {\n yield item.data;\n } else if (item.kind === \"done\") {\n completedNormally = true;\n return;\n } else if (item.kind === \"error\") {\n completedNormally = true;\n throw item.error;\n }\n }\n\n // Wait for the next message to arrive\n await new Promise<void>((resolve) => {\n waiting = resolve;\n });\n }\n } finally {\n // If the consumer stopped iterating early (break/return), notify\n // the worker to abort so it doesn't continue generating tokens.\n if (!completedNormally) {\n worker.postMessage({ id: requestId, type: \"abort\" });\n getLogger().info(`Worker ${workerName} stream function ${functionName} aborted.`);\n }\n cleanup();\n }\n }\n}\n\nexport const WORKER_MANAGER = createServiceToken<WorkerManager>(\"worker.manager\");\n\nglobalServiceRegistry.register(WORKER_MANAGER, () => new WorkerManager(), true);\n",
30
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { parentPort } from \"@workglow/util\";\nimport { createServiceToken, globalServiceRegistry } from \"../di\";\n\n/**\n * Extracts transferables from an object.\n * @param obj - The object to extract transferables from.\n * @returns An array of transferables.\n */\nfunction extractTransferables(obj: any) {\n const transferables: Transferable[] = [];\n const seen = new WeakSet();\n\n function findTransferables(value: any) {\n // Avoid infinite recursion\n if (value && typeof value === \"object\" && seen.has(value)) {\n return;\n }\n if (value && typeof value === \"object\") {\n seen.add(value);\n }\n\n // Handle TypedArrays\n if (value instanceof Float32Array || value instanceof Int16Array) {\n transferables.push(value.buffer);\n }\n // Handle other TypedArrays\n else if (\n value instanceof Uint8Array ||\n value instanceof Uint8ClampedArray ||\n value instanceof Int8Array ||\n value instanceof Uint16Array ||\n value instanceof Int32Array ||\n value instanceof Uint32Array ||\n value instanceof Float64Array ||\n value instanceof BigInt64Array ||\n value instanceof BigUint64Array\n ) {\n transferables.push(value.buffer);\n }\n // Handle OffscreenCanvas\n else if (typeof OffscreenCanvas !== \"undefined\" && value instanceof OffscreenCanvas) {\n transferables.push(value);\n }\n // Handle ImageBitmap\n else if (typeof ImageBitmap !== \"undefined\" && value instanceof ImageBitmap) {\n transferables.push(value);\n }\n // Handle VideoFrame\n else if (typeof VideoFrame !== \"undefined\" && value instanceof VideoFrame) {\n transferables.push(value);\n }\n // Handle MessagePort\n else if (typeof MessagePort !== \"undefined\" && value instanceof MessagePort) {\n transferables.push(value);\n }\n // Handle ArrayBuffer\n else if (value instanceof ArrayBuffer) {\n transferables.push(value);\n }\n // Recursively search arrays and objects\n else if (Array.isArray(value)) {\n value.forEach(findTransferables);\n } else if (value && typeof value === \"object\") {\n Object.values(value).forEach(findTransferables);\n }\n }\n\n findTransferables(obj);\n return transferables;\n}\n\n/**\n * WorkerServer is a class that handles messages from the main thread to the worker.\n * It is used to register functions that can be called from the main thread.\n * It also handles the transfer of transferables to the main thread.\n */\nexport class WorkerServer {\n constructor() {\n parentPort?.addEventListener(\"message\", async (event) => {\n const msg = {\n type: event.type,\n // @ts-ignore - Ignore type mismatch between standard MessageEvent and our message type\n data: event.data,\n };\n await this.handleMessage(msg);\n });\n }\n\n private functions: Record<string, (...args: any[]) => Promise<any>> = {};\n private streamFunctions: Record<string, (...args: any[]) => AsyncIterable<any>> = {};\n private reactiveFunctions: Record<string, (input: any, output: any, model: any) => Promise<any>> =\n {};\n\n // Keep track of each request's AbortController\n private requestControllers = new Map<string, AbortController>();\n // Keep track of requests that have already been responded to\n private completedRequests = new Set<string>();\n\n private postResult = (id: string, result: any) => {\n if (this.completedRequests.has(id)) {\n return; // Already responded to this request\n }\n this.completedRequests.add(id);\n const transferables = extractTransferables(result);\n const uniqueTransferables = [...new Set(transferables)];\n // @ts-ignore - Ignore type mismatch between standard Transferable and Bun.Transferable\n postMessage({ id, type: \"complete\", data: result }, uniqueTransferables);\n };\n\n private postError = (id: string, errorMessage: string) => {\n if (this.completedRequests.has(id)) {\n return; // Already responded to this request\n }\n this.completedRequests.add(id);\n postMessage({ id, type: \"error\", data: errorMessage });\n };\n\n private postStreamChunk = (id: string, event: any) => {\n if (this.completedRequests.has(id)) {\n return;\n }\n postMessage({ id, type: \"stream_chunk\", data: event });\n };\n\n /**\n * Send the ready message to the main thread, advertising which functions are\n * registered in each category. Call this after all functions have been registered\n * so WorkerManager can skip unnecessary roundtrips for unregistered calls.\n */\n sendReady() {\n // @ts-ignore\n postMessage({\n type: \"ready\",\n functions: Object.keys(this.functions),\n streamFunctions: Object.keys(this.streamFunctions),\n reactiveFunctions: Object.keys(this.reactiveFunctions),\n });\n }\n\n registerFunction(name: string, fn: (...args: any[]) => Promise<any>) {\n this.functions[name] = fn;\n }\n\n /**\n * Register a reactive function for lightweight preview execution.\n * Reactive functions receive (input, output, model) and return a fast preview\n * without progress tracking or abort signals.\n *\n * @param name - The function name (e.g., task type identifier)\n * @param fn - Async function: (input, output, model) => Promise<output | undefined>\n */\n registerReactiveFunction(\n name: string,\n fn: (input: any, output: any, model: any) => Promise<any>\n ) {\n this.reactiveFunctions[name] = fn;\n }\n\n /**\n * Register an async generator function for streaming execution.\n * When called via the worker protocol with `stream: true`, the server\n * iterates the generator and sends each yielded value as a `stream_chunk`\n * message, followed by a `complete` message when the generator finishes.\n *\n * @param name - The function name (e.g., task type identifier)\n * @param fn - Async generator function: (input, model, signal) => AsyncIterable\n */\n registerStreamFunction(name: string, fn: (...args: any[]) => AsyncIterable<any>) {\n this.streamFunctions[name] = fn;\n }\n\n // Handle messages from the main thread\n async handleMessage(event: { type: string; data: any }) {\n const { id, type, functionName, args, stream, reactive } = event.data;\n if (type === \"abort\") {\n return await this.handleAbort(id);\n }\n if (type === \"call\") {\n if (stream) {\n return await this.handleStreamCall(id, functionName, args);\n }\n if (reactive) {\n return await this.handleReactiveCall(id, functionName, args);\n }\n return await this.handleCall(id, functionName, args);\n }\n }\n\n async handleAbort(id: string) {\n if (this.requestControllers.has(id)) {\n const controller = this.requestControllers.get(id);\n controller?.abort();\n this.requestControllers.delete(id);\n // Send error response back to main thread so the promise rejects\n this.postError(id, \"Operation aborted\");\n }\n }\n\n /**\n * Handle a reactive call. Returns undefined (non-error) if the reactive\n * function is not registered, since not all task types expose a reactive fn.\n */\n async handleReactiveCall(\n id: string,\n functionName: string,\n [input, output, model]: [any, any, any]\n ) {\n if (!(functionName in this.reactiveFunctions)) {\n this.postResult(id, undefined);\n return;\n }\n try {\n const fn = this.reactiveFunctions[functionName];\n const result = await fn(input, output, model);\n this.postResult(id, result);\n } catch (error: any) {\n this.postError(id, error.message);\n }\n }\n\n async handleCall(id: string, functionName: string, [input, model]: [any, any]) {\n if (!(functionName in this.functions)) {\n this.postError(id, `Function ${functionName} not found`);\n return;\n }\n\n try {\n const abortController = new AbortController();\n this.requestControllers.set(id, abortController);\n\n const fn = this.functions[functionName];\n const postProgress = (progress: number, message?: string, details?: any) => {\n // Don't send progress updates after the request is completed/aborted\n if (!this.completedRequests.has(id)) {\n postMessage({ id, type: \"progress\", data: { progress, message, details } });\n }\n };\n const result = await fn(input, model, postProgress, abortController.signal);\n this.postResult(id, result);\n } catch (error: any) {\n this.postError(id, error.message);\n } finally {\n this.requestControllers.delete(id);\n // Clean up completed requests set after a delay to handle any race conditions\n // where abort message might arrive shortly after completion\n setTimeout(() => {\n this.completedRequests.delete(id);\n }, 1000);\n }\n }\n\n /**\n * Handle a streaming call. If a stream function is registered for the given name,\n * iterate it and send each yielded event as a `stream_chunk` message. If only a\n * regular function is registered, run it and wrap the result as a single `finish`\n * stream event (graceful fallback for providers that don't implement streaming).\n */\n async handleStreamCall(id: string, functionName: string, [input, model]: [any, any]) {\n if (functionName in this.streamFunctions) {\n try {\n const abortController = new AbortController();\n this.requestControllers.set(id, abortController);\n\n const fn = this.streamFunctions[functionName];\n const iterable = fn(input, model, abortController.signal);\n\n for await (const event of iterable) {\n if (this.completedRequests.has(id)) break;\n this.postStreamChunk(id, event);\n }\n\n this.postResult(id, undefined);\n } catch (error: any) {\n this.postError(id, error.message);\n } finally {\n this.requestControllers.delete(id);\n setTimeout(() => {\n this.completedRequests.delete(id);\n }, 1000);\n }\n } else if (functionName in this.functions) {\n // Fallback: run regular function and wrap result as a finish stream event\n try {\n const abortController = new AbortController();\n this.requestControllers.set(id, abortController);\n\n const fn = this.functions[functionName];\n const noopProgress = () => {};\n const result = await fn(input, model, noopProgress, abortController.signal);\n\n this.postStreamChunk(id, { type: \"finish\", data: result });\n this.postResult(id, undefined);\n } catch (error: any) {\n this.postError(id, error.message);\n } finally {\n this.requestControllers.delete(id);\n setTimeout(() => {\n this.completedRequests.delete(id);\n }, 1000);\n }\n } else {\n this.postError(id, `Function ${functionName} not found`);\n }\n }\n}\n\nexport const WORKER_SERVER = createServiceToken<WorkerServer>(\"worker.server\");\n\nglobalServiceRegistry.register(WORKER_SERVER, () => new WorkerServer(), true);\n",
27
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken, globalServiceRegistry } from \"../di\";\nimport { getLogger } from \"../logging\";\n\nexport class WorkerManager {\n private workers: Map<string, Worker> = new Map();\n private readyWorkers: Map<string, Promise<void>> = new Map();\n /** Function names registered on each worker, populated from the ready message. */\n private workerFunctions: Map<string, Set<string>> = new Map();\n private workerStreamFunctions: Map<string, Set<string>> = new Map();\n private workerReactiveFunctions: Map<string, Set<string>> = new Map();\n /** Pending lazy factories (worker not yet constructed). */\n private lazyFactories: Map<string, () => Worker> = new Map();\n /** Single-flight init promise per name (lazy path). */\n private lazyInitPromises: Map<string, Promise<void>> = new Map();\n\n registerWorker(name: string, workerOrFactory: Worker | (() => Worker)): void {\n if (this.workers.has(name)) {\n throw new Error(`Worker ${name} is already registered.`);\n }\n if (this.lazyFactories.has(name)) {\n throw new Error(`Worker ${name} is already registered.`);\n }\n if (typeof workerOrFactory === \"function\") {\n this.lazyFactories.set(name, workerOrFactory);\n } else {\n this.attachWorkerInstance(name, workerOrFactory);\n }\n }\n\n private attachWorkerInstance(name: string, worker: Worker): void {\n this.workers.set(name, worker);\n worker.addEventListener(\"error\", (event) => {\n console.error(\"Worker Error:\", event.message, \"at\", event.filename, \"line:\", event.lineno);\n });\n worker.addEventListener(\"messageerror\", (event) => {\n console.error(\"Worker message error:\", event);\n });\n\n const readyPromise = new Promise<void>((resolve) => {\n const handleReady = (event: MessageEvent) => {\n if (event.data?.type === \"ready\") {\n worker.removeEventListener(\"message\", handleReady);\n this.workerFunctions.set(name, new Set(event.data.functions ?? []));\n this.workerStreamFunctions.set(name, new Set(event.data.streamFunctions ?? []));\n this.workerReactiveFunctions.set(name, new Set(event.data.reactiveFunctions ?? []));\n resolve();\n }\n };\n\n worker.addEventListener(\"message\", handleReady);\n });\n\n this.readyWorkers.set(name, readyPromise);\n }\n\n /**\n * Ensures a lazy worker is constructed and ready. No-op if already\n * registered eagerly.\n */\n private async ensureWorkerReady(name: string): Promise<void> {\n if (this.workers.has(name)) {\n await this.readyWorkers.get(name)!;\n return;\n }\n const factory = this.lazyFactories.get(name);\n if (!factory) {\n throw new Error(`Worker ${name} not found.`);\n }\n let init = this.lazyInitPromises.get(name);\n if (!init) {\n init = (async () => {\n const f = this.lazyFactories.get(name)!;\n this.lazyFactories.delete(name);\n const worker = f();\n this.attachWorkerInstance(name, worker);\n })();\n this.lazyInitPromises.set(name, init);\n }\n await init;\n await this.readyWorkers.get(name)!;\n this.lazyInitPromises.delete(name);\n }\n\n getWorker(name: string): Worker {\n const worker = this.workers.get(name);\n if (!worker) throw new Error(`Worker ${name} not found.`);\n return worker;\n }\n\n async callWorkerFunction<T>(\n workerName: string,\n functionName: string,\n args: any[],\n options?: {\n signal?: AbortSignal;\n onProgress?: (progress: number, message?: string, details?: any) => void;\n }\n ): Promise<T> {\n await this.ensureWorkerReady(workerName);\n const worker = this.workers.get(workerName);\n if (!worker) throw new Error(`Worker ${workerName} not found.`);\n await this.readyWorkers.get(workerName);\n\n const knownFunctions = this.workerFunctions.get(workerName);\n if (knownFunctions && !knownFunctions.has(functionName)) {\n throw new Error(`Function \"${functionName}\" is not registered on worker \"${workerName}\".`);\n }\n\n return new Promise((resolve, reject) => {\n const requestId = crypto.randomUUID();\n\n const handleMessage = (event: MessageEvent) => {\n const { id, type, data } = event.data;\n if (id !== requestId) return;\n if (type === \"progress\" && options?.onProgress) {\n options.onProgress(data.progress, data.message, data.details);\n getLogger().debug(\n `Worker ${workerName} function ${functionName} progress: ${data.progress}, `,\n { data }\n );\n } else if (type === \"complete\") {\n cleanup();\n getLogger().debug(`Worker ${workerName} function ${functionName} complete.`, { data });\n resolve(data);\n } else if (type === \"error\") {\n cleanup();\n getLogger().debug(`Worker ${workerName} function ${functionName} error.`, { data });\n reject(new Error(data));\n }\n };\n\n const handleAbort = () => {\n worker.postMessage({ id: requestId, type: \"abort\" });\n getLogger().info(`Worker ${workerName} function ${functionName} aborted.`);\n };\n\n const cleanup = () => {\n worker.removeEventListener(\"message\", handleMessage);\n options?.signal?.removeEventListener(\"abort\", handleAbort);\n };\n\n worker.addEventListener(\"message\", handleMessage);\n\n if (options?.signal) {\n options.signal.addEventListener(\"abort\", handleAbort, { once: true });\n }\n\n // Note: We intentionally do NOT transfer TypedArrays from the main thread to the worker.\n // Transferring detaches the buffers on the main thread, which breaks downstream tasks\n // that still need those TypedArrays (e.g., the embedding vectors flowing through the\n // task graph). Workers send results back with transferables (zero-copy), but the\n // main thread always clones data going to workers to preserve its own references.\n const message = { id: requestId, type: \"call\", functionName, args };\n worker.postMessage(message);\n getLogger().info(`Worker ${workerName} function ${functionName} called.`);\n });\n }\n\n /**\n * Call a reactive function on a worker. Returns undefined (rather than throwing)\n * if the worker has no reactive function registered for the given name, so callers\n * can treat the result as an optional preview.\n *\n * @param workerName - Registered worker name\n * @param functionName - Name of the reactive function registered on the worker\n * @param args - Arguments to pass: [input, output, model]\n * @returns The reactive result, or undefined if not registered / on error\n */\n async callWorkerReactiveFunction<T>(\n workerName: string,\n functionName: string,\n args: any[]\n ): Promise<T | undefined> {\n await this.ensureWorkerReady(workerName);\n const worker = this.workers.get(workerName);\n if (!worker) return undefined;\n await this.readyWorkers.get(workerName);\n\n // Skip the roundtrip if the worker didn't register a reactive function for this name.\n const knownReactive = this.workerReactiveFunctions.get(workerName);\n if (knownReactive && !knownReactive.has(functionName)) return undefined;\n\n return new Promise((resolve) => {\n const requestId = crypto.randomUUID();\n\n const handleMessage = (event: MessageEvent) => {\n const { id, type, data } = event.data;\n if (id !== requestId) return;\n if (type === \"complete\") {\n cleanup();\n resolve(data as T | undefined);\n } else if (type === \"error\") {\n cleanup();\n resolve(undefined);\n }\n };\n\n const cleanup = () => {\n worker.removeEventListener(\"message\", handleMessage);\n };\n\n worker.addEventListener(\"message\", handleMessage);\n\n const message = { id: requestId, type: \"call\", functionName, args, reactive: true };\n // Note: No transferables — same reasoning as callWorkerFunction above.\n worker.postMessage(message);\n getLogger().info(`Worker ${workerName} reactive function ${functionName} called.`);\n });\n }\n\n /**\n * Call a streaming function on a worker and return an AsyncGenerator that\n * yields each stream chunk sent by the worker. The worker sends `stream_chunk`\n * messages for each yielded event and a `complete` message when the generator\n * finishes. An `error` message from the worker causes the iterator to throw.\n *\n * @param workerName - Registered worker name\n * @param functionName - Name of the stream function registered on the worker\n * @param args - Arguments to pass to the stream function\n * @param options - Optional abort signal\n * @returns AsyncGenerator yielding stream events from the worker\n */\n async *callWorkerStreamFunction<T>(\n workerName: string,\n functionName: string,\n args: any[],\n options?: { signal?: AbortSignal }\n ): AsyncGenerator<T> {\n await this.ensureWorkerReady(workerName);\n const worker = this.workers.get(workerName);\n if (!worker) throw new Error(`Worker ${workerName} not found.`);\n await this.readyWorkers.get(workerName);\n\n // The worker falls back to regular functions for stream calls, so either counts.\n const knownStream = this.workerStreamFunctions.get(workerName);\n const knownFns = this.workerFunctions.get(workerName);\n if (knownStream && knownFns && !knownStream.has(functionName) && !knownFns.has(functionName)) {\n throw new Error(`Function \"${functionName}\" is not registered on worker \"${workerName}\".`);\n }\n\n const requestId = crypto.randomUUID();\n\n // Push-queue pattern: messages push items, async generator pulls them\n type QueueItem =\n | { kind: \"event\"; data: T }\n | { kind: \"done\" }\n | { kind: \"error\"; error: Error };\n\n const queue: QueueItem[] = [];\n let waiting: ((value: void) => void) | null = null;\n\n const notify = () => {\n if (waiting) {\n const resolve = waiting;\n waiting = null;\n resolve();\n }\n };\n\n const handleMessage = (event: MessageEvent) => {\n const { id, type, data } = event.data;\n if (id !== requestId) return;\n\n if (type === \"stream_chunk\") {\n queue.push({ kind: \"event\", data });\n notify();\n } else if (type === \"complete\") {\n queue.push({ kind: \"done\" });\n notify();\n } else if (type === \"error\") {\n queue.push({ kind: \"error\", error: new Error(data) });\n notify();\n }\n };\n\n const handleAbort = () => {\n worker.postMessage({ id: requestId, type: \"abort\" });\n getLogger().info(`Worker ${workerName} stream function ${functionName} aborted.`);\n };\n\n const cleanup = () => {\n worker.removeEventListener(\"message\", handleMessage);\n options?.signal?.removeEventListener(\"abort\", handleAbort);\n };\n\n worker.addEventListener(\"message\", handleMessage);\n\n if (options?.signal) {\n if (options.signal.aborted) {\n cleanup();\n throw new Error(\"Operation aborted\");\n }\n options.signal.addEventListener(\"abort\", handleAbort, { once: true });\n }\n\n // Send call message with stream flag\n // Note: No transferables — same reasoning as callWorkerFunction above.\n const message = { id: requestId, type: \"call\", functionName, args, stream: true };\n worker.postMessage(message);\n getLogger().info(`Worker ${workerName} stream function ${functionName} called.`);\n\n let completedNormally = false;\n try {\n while (true) {\n while (queue.length > 0) {\n const item = queue.shift()!;\n if (item.kind === \"event\") {\n yield item.data;\n } else if (item.kind === \"done\") {\n completedNormally = true;\n return;\n } else if (item.kind === \"error\") {\n completedNormally = true;\n throw item.error;\n }\n }\n\n // Wait for the next message to arrive\n await new Promise<void>((resolve) => {\n waiting = resolve;\n });\n }\n } finally {\n // If the consumer stopped iterating early (break/return), notify\n // the worker to abort so it doesn't continue generating tokens.\n if (!completedNormally) {\n worker.postMessage({ id: requestId, type: \"abort\" });\n getLogger().info(`Worker ${workerName} stream function ${functionName} aborted.`);\n }\n cleanup();\n }\n }\n}\n\nexport const WORKER_MANAGER = createServiceToken<WorkerManager>(\"worker.manager\");\n\nglobalServiceRegistry.register(WORKER_MANAGER, () => new WorkerManager(), true);\n",
31
28
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken } from \"../di/ServiceRegistry\";\n\n/**\n * Metadata associated with a stored credential\n */\nexport interface CredentialMetadata {\n /** Human-readable label for the credential */\n readonly label: string | undefined;\n /** The provider this credential is associated with (e.g., \"anthropic\", \"openai\") */\n readonly provider: string | undefined;\n /** When the credential was created */\n readonly createdAt: Date;\n /** When the credential was last updated */\n readonly updatedAt: Date;\n /** When the credential expires (undefined = never) */\n readonly expiresAt: Date | undefined;\n}\n\n/**\n * A stored credential entry combining the secret value with its metadata\n */\nexport interface CredentialEntry {\n /** The credential key/name */\n readonly key: string;\n /** The secret value */\n readonly value: string;\n /** Associated metadata */\n readonly metadata: CredentialMetadata;\n}\n\n/**\n * Options for storing a credential\n */\nexport interface CredentialPutOptions {\n /** Human-readable label */\n readonly label?: string;\n /** Associated provider name */\n readonly provider?: string;\n /** Expiration date */\n readonly expiresAt?: Date;\n}\n\n/**\n * Interface defining the contract for credential/secret storage.\n *\n * Provides a unified abstraction for storing and retrieving sensitive values\n * (API keys, tokens, passwords) across different backends: in-memory,\n * environment variables, encrypted KV stores, or external secret managers\n * (AWS Secrets Manager, HashiCorp Vault, GCP Secret Manager).\n *\n * Implementations MUST NOT log or expose credential values in error messages.\n */\nexport interface ICredentialStore {\n /**\n * Retrieve a credential value by key.\n *\n * Returns the secret value if found and not expired, or `undefined` if the\n * credential does not exist or is expired.\n *\n * Implementations MAY reject the returned promise on backend, storage, or\n * cryptographic errors (e.g., I/O failure, decryption failure, corrupt data).\n * Such errors MUST NOT include credential secret values in their messages or\n * metadata.\n */\n get(key: string): Promise<string | undefined>;\n\n /**\n * Store a credential value.\n * @param key Unique identifier for the credential\n * @param value The secret value to store\n * @param options Optional metadata\n */\n put(key: string, value: string, options?: CredentialPutOptions): Promise<void>;\n\n /**\n * Delete a credential by key.\n * @returns true if the credential existed and was deleted, false otherwise.\n */\n delete(key: string): Promise<boolean>;\n\n /**\n * Check whether a credential exists (and is not expired).\n */\n has(key: string): Promise<boolean>;\n\n /**\n * List all credential keys (does NOT expose values).\n */\n keys(): Promise<readonly string[]>;\n\n /**\n * Delete all credentials.\n */\n deleteAll(): Promise<void>;\n}\n\n/**\n * Service token for the global credential store\n */\nexport const CREDENTIAL_STORE = createServiceToken<ICredentialStore>(\"credential.store\");\n",
32
29
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n CredentialEntry,\n CredentialMetadata,\n CredentialPutOptions,\n ICredentialStore,\n} from \"./ICredentialStore\";\n\n/**\n * In-memory credential store for development and testing.\n *\n * Credentials are stored in a plain Map and lost when the process exits.\n * NOT suitable for production use — use {@link EncryptedKvCredentialStore}\n * or an external secret manager integration instead.\n */\nexport class InMemoryCredentialStore implements ICredentialStore {\n private readonly store = new Map<string, CredentialEntry>();\n\n async get(key: string): Promise<string | undefined> {\n const entry = this.store.get(key);\n if (!entry) return undefined;\n if (entry.metadata.expiresAt && entry.metadata.expiresAt <= new Date()) {\n this.store.delete(key);\n return undefined;\n }\n return entry.value;\n }\n\n async put(key: string, value: string, options?: CredentialPutOptions): Promise<void> {\n const now = new Date();\n const existing = this.store.get(key);\n const metadata: CredentialMetadata = {\n label: options?.label ?? existing?.metadata.label,\n provider: options?.provider ?? existing?.metadata.provider,\n createdAt: existing?.metadata.createdAt ?? now,\n updatedAt: now,\n expiresAt: options?.expiresAt ?? existing?.metadata.expiresAt,\n };\n this.store.set(key, { key, value, metadata });\n }\n\n async delete(key: string): Promise<boolean> {\n return this.store.delete(key);\n }\n\n async has(key: string): Promise<boolean> {\n const entry = this.store.get(key);\n if (!entry) return false;\n if (entry.metadata.expiresAt && entry.metadata.expiresAt <= new Date()) {\n this.store.delete(key);\n return false;\n }\n return true;\n }\n\n async keys(): Promise<readonly string[]> {\n const now = new Date();\n const result: string[] = [];\n for (const [key, entry] of this.store) {\n if (entry.metadata.expiresAt && entry.metadata.expiresAt <= now) {\n this.store.delete(key);\n continue;\n }\n result.push(key);\n }\n return result;\n }\n\n async deleteAll(): Promise<void> {\n this.store.clear();\n }\n}\n",
33
30
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { CredentialPutOptions, ICredentialStore } from \"./ICredentialStore\";\n\n/**\n * Credential store backed by environment variables.\n *\n * Keys are mapped to environment variable names via an explicit mapping\n * or an optional prefix convention. This store is read-only for env vars\n * that already exist, but `put` can be used to set them for the current\n * process lifetime.\n *\n * @example\n * ```ts\n * const store = new EnvCredentialStore({\n * \"anthropic-api-key\": \"ANTHROPIC_API_KEY\",\n * \"openai-api-key\": \"OPENAI_API_KEY\",\n * });\n * const key = await store.get(\"anthropic-api-key\"); // reads process.env.ANTHROPIC_API_KEY\n * ```\n */\nexport class EnvCredentialStore implements ICredentialStore {\n private readonly keyToEnvVar: Map<string, string>;\n private readonly prefix: string | undefined;\n\n /**\n * @param mapping Explicit credential-key → env-var-name mapping\n * @param prefix Optional prefix: if a key has no explicit mapping, try `PREFIX_KEY` (uppercased, hyphens → underscores)\n */\n constructor(mapping: Record<string, string> = {}, prefix?: string) {\n this.keyToEnvVar = new Map(Object.entries(mapping));\n this.prefix = prefix;\n }\n\n private resolveEnvVar(key: string): string {\n const explicit = this.keyToEnvVar.get(key);\n if (explicit) return explicit;\n\n if (this.prefix) {\n return `${this.prefix}_${key.toUpperCase().replace(/-/g, \"_\")}`;\n }\n\n return key.toUpperCase().replace(/-/g, \"_\");\n }\n\n private getEnv(envVar: string): string | undefined {\n if (typeof process !== \"undefined\" && process.env) {\n return process.env[envVar];\n }\n return undefined;\n }\n\n async get(key: string): Promise<string | undefined> {\n const envVar = this.resolveEnvVar(key);\n return this.getEnv(envVar);\n }\n\n async put(key: string, value: string, _options?: CredentialPutOptions): Promise<void> {\n const envVar = this.resolveEnvVar(key);\n if (typeof process !== \"undefined\" && process.env) {\n process.env[envVar] = value;\n }\n if (!this.keyToEnvVar.has(key)) {\n this.keyToEnvVar.set(key, envVar);\n }\n }\n\n async delete(key: string): Promise<boolean> {\n const envVar = this.resolveEnvVar(key);\n if (typeof process !== \"undefined\" && process.env && envVar in process.env) {\n delete process.env[envVar];\n return true;\n }\n return false;\n }\n\n async has(key: string): Promise<boolean> {\n const envVar = this.resolveEnvVar(key);\n return this.getEnv(envVar) !== undefined;\n }\n\n async keys(): Promise<readonly string[]> {\n const result: string[] = [];\n for (const [credKey] of this.keyToEnvVar) {\n if (await this.has(credKey)) {\n result.push(credKey);\n }\n }\n return result;\n }\n\n async deleteAll(): Promise<void> {\n for (const [credKey] of this.keyToEnvVar) {\n await this.delete(credKey);\n }\n }\n}\n",
34
31
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { CredentialPutOptions, ICredentialStore } from \"./ICredentialStore\";\n\n/**\n * A credential store that chains multiple stores together, trying each\n * in order until a value is found.\n *\n * Writes always go to the first (primary) store. Reads cascade through\n * the chain, returning the first match. This enables layered resolution:\n * explicit config → encrypted store → environment variables.\n *\n * @example\n * ```ts\n * const store = new ChainedCredentialStore([\n * new InMemoryCredentialStore(), // runtime overrides\n * new EncryptedKvCredentialStore(kv, passphrase), // persistent encrypted\n * new EnvCredentialStore({ ... }), // environment fallback\n * ]);\n * ```\n */\nexport class ChainedCredentialStore implements ICredentialStore {\n constructor(private readonly stores: readonly ICredentialStore[]) {\n if (stores.length === 0) {\n throw new Error(\"ChainedCredentialStore requires at least one store.\");\n }\n }\n\n async get(key: string): Promise<string | undefined> {\n for (const store of this.stores) {\n const value = await store.get(key);\n if (value !== undefined) return value;\n }\n return undefined;\n }\n\n async put(key: string, value: string, options?: CredentialPutOptions): Promise<void> {\n await this.stores[0].put(key, value, options);\n }\n\n async delete(key: string): Promise<boolean> {\n let deleted = false;\n for (const store of this.stores) {\n if (await store.delete(key)) {\n deleted = true;\n }\n }\n return deleted;\n }\n\n async has(key: string): Promise<boolean> {\n for (const store of this.stores) {\n if (await store.has(key)) return true;\n }\n return false;\n }\n\n async keys(): Promise<readonly string[]> {\n const seen = new Set<string>();\n for (const store of this.stores) {\n for (const key of await store.keys()) {\n seen.add(key);\n }\n }\n return [...seen];\n }\n\n async deleteAll(): Promise<void> {\n await Promise.all(this.stores.map((s) => s.deleteAll()));\n }\n}\n",
35
32
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { globalServiceRegistry } from \"../di/ServiceRegistry\";\nimport type { ServiceRegistry } from \"../di/ServiceRegistry\";\nimport { registerInputResolver } from \"../di/InputResolverRegistry\";\nimport { CREDENTIAL_STORE } from \"./ICredentialStore\";\nimport type { ICredentialStore } from \"./ICredentialStore\";\nimport { InMemoryCredentialStore } from \"./InMemoryCredentialStore\";\n\n// Register default in-memory factory if not already registered\nif (!globalServiceRegistry.has(CREDENTIAL_STORE)) {\n globalServiceRegistry.register(\n CREDENTIAL_STORE,\n (): ICredentialStore => new InMemoryCredentialStore(),\n true\n );\n}\n\n/**\n * Gets the global credential store instance\n */\nexport function getGlobalCredentialStore(): ICredentialStore {\n return globalServiceRegistry.get(CREDENTIAL_STORE);\n}\n\n/**\n * Sets the global credential store instance\n */\nexport function setGlobalCredentialStore(store: ICredentialStore): void {\n globalServiceRegistry.registerInstance(CREDENTIAL_STORE, store);\n}\n\n/**\n * Resolves a credential from the store registered in the given registry,\n * falling back to the global credential store.\n *\n * Intended for use in provider `getClient` functions and tasks.\n *\n * @param key The credential key to resolve\n * @param registry Optional service registry (e.g., from task context)\n * @returns The credential value, or undefined if not found\n */\nexport async function resolveCredential(\n key: string,\n registry?: ServiceRegistry\n): Promise<string | undefined> {\n const store =\n registry && registry.has(CREDENTIAL_STORE)\n ? registry.get<ICredentialStore>(CREDENTIAL_STORE)\n : getGlobalCredentialStore();\n\n return store.get(key);\n}\n\n// Register \"credential\" input resolver so resolveSchemaInputs can resolve\n// credential_key properties annotated with format: \"credential\" automatically.\n// Returns undefined (rather than throwing) when the key isn't found, so\n// downstream code (e.g., provider getClient) can fall back to env vars.\nregisterInputResolver(\"credential\", async (id, _format, registry) => {\n return (await resolveCredential(id, registry)) ?? id;\n});\n",
36
33
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/** Number of bytes used for the PBKDF2 salt prepended to each ciphertext. */\nconst SALT_LENGTH = 16;\n\n/**\n * Derives a 256-bit AES-GCM key from a passphrase using PBKDF2.\n */\nexport async function deriveKey(passphrase: string, salt: Uint8Array): Promise<CryptoKey> {\n const enc = new TextEncoder();\n const keyMaterial = await crypto.subtle.importKey(\n \"raw\",\n enc.encode(passphrase),\n \"PBKDF2\",\n false,\n [\"deriveKey\"]\n );\n return crypto.subtle.deriveKey(\n { name: \"PBKDF2\", salt: salt as unknown as ArrayBuffer, iterations: 100_000, hash: \"SHA-256\" },\n keyMaterial,\n { name: \"AES-GCM\", length: 256 },\n false,\n [\"encrypt\", \"decrypt\"]\n );\n}\n\n/**\n * Encrypts plaintext using AES-256-GCM with a random salt and IV.\n * The salt is prepended to the ciphertext bytes and stored in the `encrypted` field\n * so that decryption can reconstruct the same key.\n *\n * @param keyCache - Per-store cache of derived CryptoKey instances keyed by base64(salt).\n */\nexport async function encrypt(\n plaintext: string,\n passphrase: string,\n keyCache: Map<string, CryptoKey>\n): Promise<{ encrypted: string; iv: string }> {\n const enc = new TextEncoder();\n const salt = crypto.getRandomValues(new Uint8Array(SALT_LENGTH));\n const saltB64 = bufToBase64(salt);\n let key = keyCache.get(saltB64);\n if (!key) {\n key = await deriveKey(passphrase, salt);\n keyCache.set(saltB64, key);\n }\n const iv = crypto.getRandomValues(new Uint8Array(12));\n const rawCiphertext = await crypto.subtle.encrypt(\n { name: \"AES-GCM\", iv },\n key,\n enc.encode(plaintext)\n );\n // Prepend the salt to the ciphertext so decrypt can recover it.\n const ciphertextBytes = new Uint8Array(rawCiphertext);\n const combined = new Uint8Array(SALT_LENGTH + ciphertextBytes.length);\n combined.set(salt, 0);\n combined.set(ciphertextBytes, SALT_LENGTH);\n return {\n encrypted: bufToBase64(combined),\n iv: bufToBase64(iv),\n };\n}\n\n/**\n * Decrypts ciphertext encrypted with {@link encrypt}.\n *\n * @param keyCache - Per-store cache of derived CryptoKey instances keyed by base64(salt).\n */\nexport async function decrypt(\n encrypted: string,\n iv: string,\n passphrase: string,\n keyCache: Map<string, CryptoKey>\n): Promise<string> {\n const encryptedBuf = base64ToBuf(encrypted);\n const salt = encryptedBuf.subarray(0, SALT_LENGTH);\n const ciphertextBytes = encryptedBuf.subarray(SALT_LENGTH);\n const saltB64 = bufToBase64(salt);\n let key = keyCache.get(saltB64);\n if (!key) {\n key = await deriveKey(passphrase, salt);\n keyCache.set(saltB64, key);\n }\n const plainBuf = await crypto.subtle.decrypt(\n { name: \"AES-GCM\", iv: base64ToBuf(iv) as unknown as ArrayBuffer },\n key,\n ciphertextBytes as unknown as ArrayBuffer\n );\n return new TextDecoder().decode(plainBuf);\n}\n\nexport function bufToBase64(buf: Uint8Array): string {\n let binary = \"\";\n for (let i = 0; i < buf.length; i++) {\n binary += String.fromCharCode(buf[i]);\n }\n return btoa(binary);\n}\n\nexport function base64ToBuf(b64: string): Uint8Array {\n const binary = atob(b64);\n const buf = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n buf[i] = binary.charCodeAt(i);\n }\n return buf;\n}\n",
37
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n *\n * Shared MCP authentication type definitions and JSON Schema.\n */\n\n\n/**\n * Supported MCP authentication types.\n */\nexport const mcpAuthTypes = [\n \"none\",\n \"bearer\",\n \"client_credentials\",\n \"private_key_jwt\",\n \"static_private_key_jwt\",\n \"authorization_code\",\n] as const;\n\nexport type McpAuthType = (typeof mcpAuthTypes)[number];\n\n// ── Discriminated union on `type` ──────────────────────────────────────\n\nexport interface McpAuthNone {\n readonly type: \"none\";\n}\n\nexport interface McpAuthBearer {\n readonly type: \"bearer\";\n /** Static token or credential-store key (format: \"credential\"). */\n readonly token: string;\n}\n\nexport interface McpAuthClientCredentials {\n readonly type: \"client_credentials\";\n readonly client_id: string;\n /** Client secret or credential-store key (format: \"credential\"). */\n readonly client_secret: string;\n readonly client_name?: string;\n readonly scope?: string;\n}\n\nexport interface McpAuthPrivateKeyJwt {\n readonly type: \"private_key_jwt\";\n readonly client_id: string;\n /** PEM / JWK private key or credential-store key (format: \"credential\"). */\n readonly private_key: string;\n readonly algorithm: string;\n readonly client_name?: string;\n readonly jwt_lifetime_seconds?: number;\n readonly scope?: string;\n}\n\nexport interface McpAuthStaticPrivateKeyJwt {\n readonly type: \"static_private_key_jwt\";\n readonly client_id: string;\n /** Pre-built JWT assertion or credential-store key (format: \"credential\"). */\n readonly jwt_bearer_assertion: string;\n readonly client_name?: string;\n readonly scope?: string;\n}\n\nexport interface McpAuthAuthorizationCode {\n readonly type: \"authorization_code\";\n readonly client_id: string;\n readonly client_secret?: string;\n readonly redirect_url: string;\n readonly scope?: string;\n}\n\nexport type McpAuthConfig =\n | McpAuthNone\n | McpAuthBearer\n | McpAuthClientCredentials\n | McpAuthPrivateKeyJwt\n | McpAuthStaticPrivateKeyJwt\n | McpAuthAuthorizationCode;\n\n// ── JSON Schema for auth config (discriminated union on auth_type) ─────\n\nexport const mcpAuthConfigSchema = {\n properties: {\n auth_type: {\n type: \"string\",\n enum: mcpAuthTypes,\n title: \"Auth Type\",\n description: \"Authentication method for connecting to the MCP server\",\n default: \"none\",\n },\n auth_token: {\n type: \"string\",\n format: \"credential\",\n title: \"Bearer Token\",\n description: \"Static bearer token or API key (for bearer auth)\",\n },\n auth_client_id: {\n type: \"string\",\n title: \"Client ID\",\n description: \"OAuth client ID (for OAuth auth types)\",\n },\n auth_client_secret: {\n type: \"string\",\n format: \"credential\",\n title: \"Client Secret\",\n description: \"OAuth client secret (for client_credentials auth)\",\n },\n auth_private_key: {\n type: \"string\",\n format: \"credential\",\n title: \"Private Key\",\n description: \"PEM or JWK private key (for private_key_jwt auth)\",\n },\n auth_algorithm: {\n type: \"string\",\n title: \"Algorithm\",\n description: \"JWT signing algorithm, e.g. RS256, ES256 (for private_key_jwt auth)\",\n },\n auth_jwt_bearer_assertion: {\n type: \"string\",\n format: \"credential\",\n title: \"JWT Assertion\",\n description: \"Pre-built JWT assertion (for static_private_key_jwt auth)\",\n },\n auth_redirect_url: {\n type: \"string\",\n format: \"uri\",\n title: \"Redirect URL\",\n description: \"OAuth redirect URL (for authorization_code auth)\",\n },\n auth_scope: {\n type: \"string\",\n title: \"Scope\",\n description: \"OAuth scope (space-separated)\",\n },\n auth_client_name: {\n type: \"string\",\n title: \"Client Name\",\n description: \"Optional OAuth client display name\",\n },\n auth_jwt_lifetime_seconds: {\n type: \"number\",\n title: \"JWT Lifetime\",\n description: \"JWT lifetime in seconds (default: 300)\",\n minimum: 1,\n },\n },\n allOf: [\n {\n if: { properties: { auth_type: { const: \"bearer\" } }, required: [\"auth_type\"] },\n then: {\n required: [\"auth_token\"],\n properties: { auth_token: true },\n },\n },\n {\n if: {\n properties: { auth_type: { const: \"client_credentials\" } },\n required: [\"auth_type\"],\n },\n then: {\n required: [\"auth_client_id\", \"auth_client_secret\"],\n properties: {\n auth_client_id: true,\n auth_client_secret: true,\n auth_client_name: true,\n auth_scope: true,\n },\n },\n },\n {\n if: { properties: { auth_type: { const: \"private_key_jwt\" } }, required: [\"auth_type\"] },\n then: {\n required: [\"auth_client_id\", \"auth_private_key\", \"auth_algorithm\"],\n properties: {\n auth_client_id: true,\n auth_private_key: true,\n auth_algorithm: true,\n auth_client_name: true,\n auth_jwt_lifetime_seconds: true,\n auth_scope: true,\n },\n },\n },\n {\n if: {\n properties: { auth_type: { const: \"static_private_key_jwt\" } },\n required: [\"auth_type\"],\n },\n then: {\n required: [\"auth_client_id\", \"auth_jwt_bearer_assertion\"],\n properties: {\n auth_client_id: true,\n auth_jwt_bearer_assertion: true,\n auth_client_name: true,\n auth_scope: true,\n },\n },\n },\n {\n if: { properties: { auth_type: { const: \"authorization_code\" } }, required: [\"auth_type\"] },\n then: {\n required: [\"auth_client_id\", \"auth_redirect_url\"],\n properties: {\n auth_client_id: true,\n auth_client_secret: true,\n auth_redirect_url: true,\n auth_scope: true,\n },\n },\n },\n ],\n} as const;\n\n/**\n * Runtime type guard for McpAuthType.\n */\nfunction isMcpAuthType(value: unknown): value is McpAuthType {\n return typeof value === \"string\" && (mcpAuthTypes as readonly string[]).includes(value);\n}\n\nfunction asNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n return trimmed === \"\" ? undefined : trimmed;\n}\n\nfunction asNumber(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n\n/**\n * Constructs a typed McpAuthConfig from flat schema properties.\n * Used by `createMcpClient()` to normalize the config.\n * Returns `undefined` if required fields for the selected auth type are missing.\n */\nexport function buildAuthConfig(flat: Record<string, unknown>): McpAuthConfig | undefined {\n const rawAuthType = flat.auth_type;\n\n if (!isMcpAuthType(rawAuthType) || rawAuthType === \"none\") {\n return undefined;\n }\n\n const authType: McpAuthType = rawAuthType;\n\n switch (authType) {\n case \"bearer\": {\n const token = asNonEmptyString(flat.auth_token);\n if (!token) return undefined;\n return { type: \"bearer\", token };\n }\n case \"client_credentials\": {\n const client_id = asNonEmptyString(flat.auth_client_id);\n const client_secret = asNonEmptyString(flat.auth_client_secret);\n if (!client_id || !client_secret) return undefined;\n return {\n type: \"client_credentials\",\n client_id,\n client_secret,\n client_name: asNonEmptyString(flat.auth_client_name),\n scope: asNonEmptyString(flat.auth_scope),\n };\n }\n case \"private_key_jwt\": {\n const client_id = asNonEmptyString(flat.auth_client_id);\n const private_key = asNonEmptyString(flat.auth_private_key);\n const algorithm = asNonEmptyString(flat.auth_algorithm);\n if (!client_id || !private_key || !algorithm) return undefined;\n return {\n type: \"private_key_jwt\",\n client_id,\n private_key,\n algorithm,\n client_name: asNonEmptyString(flat.auth_client_name),\n jwt_lifetime_seconds: asNumber(flat.auth_jwt_lifetime_seconds),\n scope: asNonEmptyString(flat.auth_scope),\n };\n }\n case \"static_private_key_jwt\": {\n const client_id = asNonEmptyString(flat.auth_client_id);\n const jwt_bearer_assertion = asNonEmptyString(flat.auth_jwt_bearer_assertion);\n if (!client_id || !jwt_bearer_assertion) return undefined;\n return {\n type: \"static_private_key_jwt\",\n client_id,\n jwt_bearer_assertion,\n client_name: asNonEmptyString(flat.auth_client_name),\n scope: asNonEmptyString(flat.auth_scope),\n };\n }\n case \"authorization_code\": {\n const client_id = asNonEmptyString(flat.auth_client_id);\n const redirect_url = asNonEmptyString(flat.auth_redirect_url);\n if (!client_id || !redirect_url) return undefined;\n return {\n type: \"authorization_code\",\n client_id,\n client_secret: asNonEmptyString(flat.auth_client_secret),\n redirect_url,\n scope: asNonEmptyString(flat.auth_scope),\n };\n }\n default:\n return undefined;\n }\n}\n",
38
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n *\n * MCP OAuth provider adapter backed by ICredentialStore, and factory function.\n */\n\nimport {\n ClientCredentialsProvider,\n PrivateKeyJwtProvider,\n StaticPrivateKeyJwtProvider,\n createPrivateKeyJwtAuth,\n} from \"@modelcontextprotocol/sdk/client/auth-extensions.js\";\nimport { UnauthorizedError } from \"@modelcontextprotocol/sdk/client/auth.js\";\nimport type {\n AddClientAuthentication,\n OAuthClientProvider,\n OAuthDiscoveryState,\n} from \"@modelcontextprotocol/sdk/client/auth.js\";\n\nexport { UnauthorizedError };\nexport type { OAuthClientProvider };\nimport type {\n OAuthClientInformationMixed,\n OAuthClientMetadata,\n OAuthTokens,\n} from \"@modelcontextprotocol/sdk/shared/auth.js\";\nimport { getGlobalCredentialStore } from \"../credentials/CredentialStoreRegistry\";\nimport type { ICredentialStore } from \"../credentials/ICredentialStore\";\nimport type { McpAuthConfig } from \"./McpAuthTypes\";\n\n// ── Key helpers ────────────────────────────────────────────────────────\n\nfunction normalizeServerUrl(serverUrl: string): string {\n try {\n const u = new URL(serverUrl);\n // Strip trailing slash for consistent keying\n return u.origin + u.pathname.replace(/\\/+$/, \"\");\n } catch {\n return serverUrl;\n }\n}\n\nfunction storeKey(serverUrl: string, suffix: string): string {\n return `mcp:oauth:${normalizeServerUrl(serverUrl)}:${suffix}`;\n}\n\n// ── CredentialStoreOAuthProvider ────────────────────────────────────────\n\n/**\n * OAuthClientProvider backed by ICredentialStore.\n *\n * Stores tokens, client info, code verifiers, and discovery state as JSON\n * strings under namespaced keys. Enables token persistence across\n * short-lived MCP connections that share the same server URL.\n */\nexport class CredentialStoreOAuthProvider implements OAuthClientProvider {\n private readonly store: ICredentialStore;\n private readonly serverUrl: string;\n private readonly _clientMetadata: OAuthClientMetadata;\n private readonly _redirectUrl: string | URL | undefined;\n private readonly _initialClientInfo: OAuthClientInformationMixed | undefined;\n\n /** Optional override for grant-specific token request preparation. */\n prepareTokenRequest?: (\n scope?: string\n ) => URLSearchParams | Promise<URLSearchParams | undefined> | undefined;\n\n /** Optional override for custom client authentication on token requests. */\n addClientAuthentication?: AddClientAuthentication;\n\n constructor(options: {\n store: ICredentialStore;\n serverUrl: string;\n clientMetadata: OAuthClientMetadata;\n redirectUrl?: string | URL;\n initialClientInfo?: OAuthClientInformationMixed;\n prepareTokenRequest?: OAuthClientProvider[\"prepareTokenRequest\"];\n addClientAuthentication?: AddClientAuthentication;\n }) {\n this.store = options.store;\n this.serverUrl = options.serverUrl;\n this._clientMetadata = options.clientMetadata;\n this._redirectUrl = options.redirectUrl;\n this._initialClientInfo = options.initialClientInfo;\n if (options.prepareTokenRequest) {\n this.prepareTokenRequest = options.prepareTokenRequest;\n }\n if (options.addClientAuthentication) {\n this.addClientAuthentication = options.addClientAuthentication;\n }\n }\n\n // ── Properties ─────────────────────────────────────────────────────\n\n get redirectUrl(): string | URL | undefined {\n return this._redirectUrl;\n }\n\n get clientMetadata(): OAuthClientMetadata {\n return this._clientMetadata;\n }\n\n // ── Client information ─────────────────────────────────────────────\n\n async clientInformation(): Promise<OAuthClientInformationMixed | undefined> {\n const raw = await this.store.get(storeKey(this.serverUrl, \"client_info\"));\n if (!raw) return this._initialClientInfo;\n return JSON.parse(raw) as OAuthClientInformationMixed;\n }\n\n async saveClientInformation(info: OAuthClientInformationMixed): Promise<void> {\n await this.store.put(storeKey(this.serverUrl, \"client_info\"), JSON.stringify(info));\n }\n\n // ── Tokens ─────────────────────────────────────────────────────────\n\n async tokens(): Promise<OAuthTokens | undefined> {\n const raw = await this.store.get(storeKey(this.serverUrl, \"tokens\"));\n if (!raw) return undefined;\n return JSON.parse(raw) as OAuthTokens;\n }\n\n async saveTokens(tokens: OAuthTokens): Promise<void> {\n const expiresAt =\n tokens.expires_in != null ? new Date(Date.now() + tokens.expires_in * 1000) : undefined;\n await this.store.put(storeKey(this.serverUrl, \"tokens\"), JSON.stringify(tokens), {\n expiresAt,\n });\n }\n\n // ── Authorization redirect ─────────────────────────────────────────\n\n async redirectToAuthorization(authorizationUrl: URL): Promise<void> {\n // Non-interactive environments cannot redirect a browser. Throw with\n // the URL so the host application can handle it (e.g., open a browser).\n throw new Error(\n `MCP OAuth authorization required. ` +\n `Open this URL to authorize: ${authorizationUrl.toString()}`\n );\n }\n\n // ── PKCE code verifier ─────────────────────────────────────────────\n\n async saveCodeVerifier(codeVerifier: string): Promise<void> {\n await this.store.put(storeKey(this.serverUrl, \"code_verifier\"), codeVerifier);\n }\n\n async codeVerifier(): Promise<string> {\n const v = await this.store.get(storeKey(this.serverUrl, \"code_verifier\"));\n if (!v) throw new Error(\"No code verifier saved for this session\");\n return v;\n }\n\n // ── Discovery state ────────────────────────────────────────────────\n\n async saveDiscoveryState(state: OAuthDiscoveryState): Promise<void> {\n await this.store.put(storeKey(this.serverUrl, \"discovery\"), JSON.stringify(state));\n }\n\n async discoveryState(): Promise<OAuthDiscoveryState | undefined> {\n const raw = await this.store.get(storeKey(this.serverUrl, \"discovery\"));\n if (!raw) return undefined;\n return JSON.parse(raw) as OAuthDiscoveryState;\n }\n\n // ── Credential invalidation ────────────────────────────────────────\n\n async invalidateCredentials(\n scope: \"all\" | \"client\" | \"tokens\" | \"verifier\" | \"discovery\"\n ): Promise<void> {\n const deleteKey = async (suffix: string) => {\n await this.store.delete(storeKey(this.serverUrl, suffix));\n };\n\n switch (scope) {\n case \"all\":\n await deleteKey(\"tokens\");\n await deleteKey(\"client_info\");\n await deleteKey(\"code_verifier\");\n await deleteKey(\"discovery\");\n break;\n case \"client\":\n await deleteKey(\"client_info\");\n break;\n case \"tokens\":\n await deleteKey(\"tokens\");\n break;\n case \"verifier\":\n await deleteKey(\"code_verifier\");\n break;\n case \"discovery\":\n await deleteKey(\"discovery\");\n break;\n }\n }\n}\n\n// ── Factory ────────────────────────────────────────────────────────────\n\n/**\n * Creates an OAuthClientProvider for the given auth config, or returns\n * `undefined` when no provider is needed (none / bearer).\n *\n * Bearer auth is handled at the transport level via request headers,\n * so this function returns `undefined` for it.\n */\nexport function createAuthProvider(\n auth: McpAuthConfig,\n serverUrl: string,\n credentialStore?: ICredentialStore\n): OAuthClientProvider | undefined {\n switch (auth.type) {\n case \"none\":\n case \"bearer\":\n return undefined;\n\n case \"client_credentials\": {\n if (!credentialStore) {\n // Fallback to SDK's built-in provider (no persistence)\n return new ClientCredentialsProvider({\n clientId: auth.client_id,\n clientSecret: auth.client_secret,\n clientName: auth.client_name,\n scope: auth.scope,\n });\n }\n\n const prepareTokenRequest = (scope?: string): URLSearchParams => {\n const params = new URLSearchParams({ grant_type: \"client_credentials\" });\n const effectiveScope = scope ?? auth.scope;\n if (effectiveScope) params.set(\"scope\", effectiveScope);\n return params;\n };\n\n return new CredentialStoreOAuthProvider({\n store: credentialStore,\n serverUrl,\n clientMetadata: {\n redirect_uris: [],\n grant_types: [\"client_credentials\"],\n token_endpoint_auth_method: \"client_secret_basic\",\n client_name: auth.client_name,\n },\n initialClientInfo: {\n client_id: auth.client_id,\n client_secret: auth.client_secret,\n },\n prepareTokenRequest,\n });\n }\n\n case \"private_key_jwt\": {\n if (!credentialStore) {\n return new PrivateKeyJwtProvider({\n clientId: auth.client_id,\n privateKey: auth.private_key,\n algorithm: auth.algorithm,\n clientName: auth.client_name,\n jwtLifetimeSeconds: auth.jwt_lifetime_seconds,\n scope: auth.scope,\n });\n }\n\n const addClientAuth = createPrivateKeyJwtAuth({\n issuer: auth.client_id,\n subject: auth.client_id,\n privateKey: auth.private_key,\n alg: auth.algorithm,\n lifetimeSeconds: auth.jwt_lifetime_seconds,\n });\n\n const prepareTokenRequest = (scope?: string): URLSearchParams => {\n const params = new URLSearchParams({ grant_type: \"client_credentials\" });\n const effectiveScope = scope ?? auth.scope;\n if (effectiveScope) params.set(\"scope\", effectiveScope);\n return params;\n };\n\n return new CredentialStoreOAuthProvider({\n store: credentialStore,\n serverUrl,\n clientMetadata: {\n redirect_uris: [],\n grant_types: [\"client_credentials\"],\n token_endpoint_auth_method: \"private_key_jwt\",\n client_name: auth.client_name,\n },\n initialClientInfo: { client_id: auth.client_id },\n prepareTokenRequest,\n addClientAuthentication: addClientAuth,\n });\n }\n\n case \"static_private_key_jwt\": {\n if (!credentialStore) {\n return new StaticPrivateKeyJwtProvider({\n clientId: auth.client_id,\n jwtBearerAssertion: auth.jwt_bearer_assertion,\n clientName: auth.client_name,\n scope: auth.scope,\n });\n }\n\n const assertion = auth.jwt_bearer_assertion;\n const addClientAuth: AddClientAuthentication = (_headers, params) => {\n params.set(\n \"client_assertion_type\",\n \"urn:ietf:params:oauth:client-assertion-type:jwt-bearer\"\n );\n params.set(\"client_assertion\", assertion);\n };\n\n const prepareTokenRequest = (scope?: string): URLSearchParams => {\n const params = new URLSearchParams({ grant_type: \"client_credentials\" });\n const effectiveScope = scope ?? auth.scope;\n if (effectiveScope) params.set(\"scope\", effectiveScope);\n return params;\n };\n\n return new CredentialStoreOAuthProvider({\n store: credentialStore,\n serverUrl,\n clientMetadata: {\n redirect_uris: [],\n grant_types: [\"client_credentials\"],\n token_endpoint_auth_method: \"private_key_jwt\",\n client_name: auth.client_name,\n },\n initialClientInfo: { client_id: auth.client_id },\n prepareTokenRequest,\n addClientAuthentication: addClientAuth,\n });\n }\n\n case \"authorization_code\": {\n if (!credentialStore) {\n throw new Error(\n \"authorization_code auth requires a credential store for token persistence\"\n );\n }\n\n return new CredentialStoreOAuthProvider({\n store: credentialStore,\n serverUrl,\n clientMetadata: {\n redirect_uris: [auth.redirect_url] as string[],\n grant_types: [\"authorization_code\", \"refresh_token\"],\n token_endpoint_auth_method: auth.client_secret ? \"client_secret_basic\" : \"none\",\n scope: auth.scope,\n },\n initialClientInfo: {\n client_id: auth.client_id,\n ...(auth.client_secret ? { client_secret: auth.client_secret } : {}),\n },\n redirectUrl: auth.redirect_url,\n });\n }\n\n default:\n return undefined;\n }\n}\n\n// ── Credential resolution ──────────────────────────────────────────────\n\n/**\n * Resolves credential-store keys in auth config to actual secret values.\n *\n * This is needed for the standalone MCP task path where config properties\n * are NOT auto-resolved by `resolveSchemaInputs`. For the AgentTask path,\n * credential resolution happens automatically via `format: \"credential\"`.\n */\nexport async function resolveAuthSecrets(\n auth: McpAuthConfig,\n credentialStore?: ICredentialStore\n): Promise<McpAuthConfig> {\n if (auth.type === \"none\") return auth;\n\n const store = credentialStore ?? getGlobalCredentialStore();\n\n async function resolve(value: string | undefined): Promise<string | undefined> {\n if (!value) return value;\n const resolved = await store.get(value);\n // If the store returns a value, use it; otherwise keep the original\n // (it may be a literal secret, not a key).\n return resolved ?? value;\n }\n\n switch (auth.type) {\n case \"bearer\":\n return { ...auth, token: (await resolve(auth.token)) ?? auth.token };\n\n case \"client_credentials\":\n return {\n ...auth,\n client_secret: (await resolve(auth.client_secret)) ?? auth.client_secret,\n };\n\n case \"private_key_jwt\":\n return {\n ...auth,\n private_key: (await resolve(auth.private_key)) ?? auth.private_key,\n };\n\n case \"static_private_key_jwt\":\n return {\n ...auth,\n jwt_bearer_assertion:\n (await resolve(auth.jwt_bearer_assertion)) ?? auth.jwt_bearer_assertion,\n };\n\n case \"authorization_code\":\n return {\n ...auth,\n client_secret: await resolve(auth.client_secret),\n };\n\n default:\n return auth;\n }\n}\n",
39
34
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Attributes that can be attached to a span.\n * Values follow OpenTelemetry attribute value conventions.\n */\nexport type SpanAttributes = Record<string, string | number | boolean | undefined>;\n\n/**\n * Status codes for a span, matching OpenTelemetry conventions.\n */\nexport const SpanStatusCode = {\n UNSET: 0,\n OK: 1,\n ERROR: 2,\n} as const;\nexport type SpanStatusCode = (typeof SpanStatusCode)[keyof typeof SpanStatusCode];\n\n/**\n * A handle to an active span. Call `end()` when the operation completes.\n */\nexport interface ISpan {\n /** Record key-value attributes on the span. */\n setAttributes(attributes: SpanAttributes): void;\n /** Record a timestamped event (log) on the span. */\n addEvent(name: string, attributes?: SpanAttributes): void;\n /** Mark the span with a status code and optional message. */\n setStatus(code: SpanStatusCode, message?: string): void;\n /** End the span. Must be called exactly once. */\n end(): void;\n}\n\n/**\n * Options for starting a new span.\n */\nexport interface SpanOptions {\n /** Attributes to set on the span at creation. */\n attributes?: SpanAttributes;\n}\n\n/**\n * Provider interface for telemetry instrumentation.\n * Implementations bridge to OpenTelemetry, Datadog, or any APM backend.\n *\n * Register a provider via {@link setTelemetryProvider} to enable tracing\n * across task-graph, job-queue, and ai-provider packages.\n */\nexport interface ITelemetryProvider {\n /**\n * Start a new span for the given operation.\n *\n * @param name - Dot-separated operation name, e.g. `\"workglow.task.run\"`\n * @param options - Optional span configuration\n * @returns A handle to the active span\n */\n startSpan(name: string, options?: SpanOptions): ISpan;\n\n /**\n * Whether the provider is actively collecting traces.\n * When false, callers may skip expensive attribute computation.\n */\n readonly isEnabled: boolean;\n}\n",
40
35
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ISpan, ITelemetryProvider, SpanAttributes, SpanOptions } from \"./ITelemetryProvider\";\nimport { SpanStatusCode } from \"./ITelemetryProvider\";\n\ninterface SpanEvent {\n readonly name: string;\n readonly attributes: SpanAttributes | undefined;\n}\n\n/**\n * A span that prints a formatted summary to console when ended.\n */\nclass ConsoleSpan implements ISpan {\n private readonly name: string;\n private readonly startTime: number;\n private attributes: SpanAttributes = {};\n private readonly events: SpanEvent[] = [];\n private statusCode: SpanStatusCode = SpanStatusCode.UNSET;\n private statusMessage: string | undefined;\n\n constructor(name: string, options?: SpanOptions) {\n this.name = name;\n this.startTime = performance.now();\n if (options?.attributes) {\n this.attributes = { ...options.attributes };\n }\n }\n\n setAttributes(attributes: SpanAttributes): void {\n Object.assign(this.attributes, attributes);\n }\n\n addEvent(name: string, attributes?: SpanAttributes): void {\n this.events.push({ name, attributes });\n }\n\n setStatus(code: SpanStatusCode, message?: string): void {\n this.statusCode = code;\n this.statusMessage = message;\n }\n\n end(): void {\n const duration = performance.now() - this.startTime;\n const parts: string[] = [`[telemetry] ${this.name} (${duration.toFixed(2)}ms)`];\n\n const attrKeys = Object.keys(this.attributes);\n if (attrKeys.length > 0) {\n parts.push(` attributes: ${JSON.stringify(this.attributes)}`);\n }\n\n for (const event of this.events) {\n const eventStr = event.attributes\n ? `${event.name} ${JSON.stringify(event.attributes)}`\n : event.name;\n parts.push(` event: ${eventStr}`);\n }\n\n if (this.statusCode === SpanStatusCode.OK) {\n parts.push(\" status: OK\");\n } else if (this.statusCode === SpanStatusCode.ERROR) {\n parts.push(` status: ERROR${this.statusMessage ? ` - ${this.statusMessage}` : \"\"}`);\n }\n\n const message = parts.join(\"\\n\");\n\n if (this.statusCode === SpanStatusCode.ERROR) {\n console.error(message);\n } else {\n console.debug(message);\n }\n }\n}\n\n/**\n * Lightweight telemetry provider that prints span summaries to console.\n * Useful for local development without requiring a full OpenTelemetry stack.\n */\nexport class ConsoleTelemetryProvider implements ITelemetryProvider {\n readonly isEnabled = true;\n\n startSpan(name: string, options?: SpanOptions): ISpan {\n return new ConsoleSpan(name, options);\n }\n}\n",
41
36
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ISpan, ITelemetryProvider, SpanAttributes, SpanOptions } from \"./ITelemetryProvider\";\nimport { SpanStatusCode } from \"./ITelemetryProvider\";\n\n/**\n * A no-op span that does nothing. Used when telemetry is disabled.\n */\nconst NOOP_SPAN: ISpan = {\n setAttributes(_attributes: SpanAttributes): void {},\n addEvent(_name: string, _attributes?: SpanAttributes): void {},\n setStatus(_code: SpanStatusCode, _message?: string): void {},\n end(): void {},\n};\n\n/**\n * Default no-op telemetry provider. All methods are zero-cost stubs.\n * This is the default provider when no telemetry backend is configured.\n */\nexport class NoopTelemetryProvider implements ITelemetryProvider {\n readonly isEnabled = false;\n\n startSpan(_name: string, _options?: SpanOptions): ISpan {\n return NOOP_SPAN;\n }\n}\n",
42
37
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ISpan, ITelemetryProvider, SpanAttributes, SpanOptions } from \"./ITelemetryProvider\";\nimport { SpanStatusCode } from \"./ITelemetryProvider\";\n\n/**\n * Minimal subset of the OpenTelemetry `Tracer` interface that we depend on.\n * This avoids a hard dependency on `@opentelemetry/api` while still being\n * fully compatible with `trace.getTracer()`.\n */\nexport interface OTelTracer {\n startSpan(name: string, options?: any, context?: any): OTelSpan;\n}\n\n/**\n * Minimal subset of the OpenTelemetry `Span` interface.\n */\nexport interface OTelSpan {\n setAttribute(key: string, value: string | number | boolean): any;\n addEvent(name: string, attributes?: Record<string, any>): any;\n setStatus(status: { code: number; message?: string }): any;\n end(): void;\n}\n\n/** Maps our SpanStatusCode to the OTel StatusCode numeric values. */\nconst STATUS_MAP: Record<SpanStatusCode, number> = {\n [SpanStatusCode.UNSET]: 0,\n [SpanStatusCode.OK]: 1,\n [SpanStatusCode.ERROR]: 2,\n};\n\n/**\n * Wraps an OTel Span to implement our ISpan interface.\n */\nclass OTelSpanWrapper implements ISpan {\n constructor(private readonly otelSpan: OTelSpan) {}\n\n setAttributes(attributes: SpanAttributes): void {\n for (const [key, value] of Object.entries(attributes)) {\n if (value !== undefined) {\n this.otelSpan.setAttribute(key, value);\n }\n }\n }\n\n addEvent(name: string, attributes?: SpanAttributes): void {\n const filtered = attributes\n ? Object.fromEntries(Object.entries(attributes).filter(([, v]) => v !== undefined))\n : undefined;\n this.otelSpan.addEvent(name, filtered);\n }\n\n setStatus(code: SpanStatusCode, message?: string): void {\n this.otelSpan.setStatus({ code: STATUS_MAP[code], message });\n }\n\n end(): void {\n this.otelSpan.end();\n }\n}\n\n/**\n * Telemetry provider backed by a real OpenTelemetry tracer.\n *\n * @example\n * ```ts\n * import { trace } from \"@opentelemetry/api\";\n * import { OTelTelemetryProvider, setTelemetryProvider } from \"@workglow/util\";\n *\n * const tracer = trace.getTracer(\"my-app\", \"1.0.0\");\n * setTelemetryProvider(new OTelTelemetryProvider(tracer));\n * ```\n */\nexport class OTelTelemetryProvider implements ITelemetryProvider {\n readonly isEnabled = true;\n\n constructor(private readonly tracer: OTelTracer) {}\n\n startSpan(name: string, options?: SpanOptions): ISpan {\n const otelOptions: Record<string, any> = {};\n if (options?.attributes) {\n otelOptions.attributes = Object.fromEntries(\n Object.entries(options.attributes).filter(([, v]) => v !== undefined)\n );\n }\n const otelSpan = this.tracer.startSpan(name, otelOptions);\n return new OTelSpanWrapper(otelSpan);\n }\n}\n",
43
38
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken, globalServiceRegistry } from \"../di/ServiceRegistry\";\nimport { ConsoleTelemetryProvider } from \"./ConsoleTelemetryProvider\";\nimport type { ITelemetryProvider } from \"./ITelemetryProvider\";\nimport { NoopTelemetryProvider } from \"./NoopTelemetryProvider\";\n\n/**\n * Service token for the global telemetry provider instance.\n */\nexport const TELEMETRY_PROVIDER = createServiceToken<ITelemetryProvider>(\"telemetry\");\n\nfunction getEnv(name: string): string | undefined {\n if (typeof process !== \"undefined\" && process.env) {\n return process.env[name];\n }\n return import.meta.env[name];\n}\n\nfunction isTruthy(value: string | undefined): boolean {\n return value !== undefined && value !== \"\" && value !== \"0\" && value !== \"false\";\n}\n\nfunction createDefaultTelemetryProvider(): ITelemetryProvider {\n if (getEnv(\"TELEMETRY\")?.toLowerCase() === \"console\") {\n return new ConsoleTelemetryProvider();\n }\n if (\n isTruthy(getEnv(\"DEV\")) &&\n getEnv(\"NODE_ENV\") !== \"test\" &&\n !isTruthy(getEnv(\"VITEST\")) &&\n !isTruthy(getEnv(\"CI\"))\n ) {\n return new ConsoleTelemetryProvider();\n }\n return new NoopTelemetryProvider();\n}\n\n// Register the default provider based on environment configuration.\nif (!globalServiceRegistry.has(TELEMETRY_PROVIDER)) {\n globalServiceRegistry.register(TELEMETRY_PROVIDER, createDefaultTelemetryProvider, true);\n}\n\n/**\n * Returns the current global telemetry provider.\n */\nexport function getTelemetryProvider(): ITelemetryProvider {\n return globalServiceRegistry.get(TELEMETRY_PROVIDER);\n}\n\n/**\n * Replaces the global telemetry provider instance.\n *\n * @example\n * ```ts\n * import { OTelTelemetryProvider } from \"@workglow/util\";\n * import { trace } from \"@opentelemetry/api\";\n *\n * setTelemetryProvider(new OTelTelemetryProvider(trace.getTracer(\"my-app\")));\n * ```\n */\nexport function setTelemetryProvider(provider: ITelemetryProvider): void {\n globalServiceRegistry.registerInstance(TELEMETRY_PROVIDER, provider);\n}\n",
44
39
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Browser environment\n\nexport async function compress(\n input: string | Uint8Array,\n algorithm: \"gzip\" | \"br\" = \"gzip\"\n): Promise<Uint8Array> {\n const sourceBlob = new Blob([typeof input === \"string\" ? input : new Uint8Array(input)]);\n const compressedStream = sourceBlob\n .stream()\n .pipeThrough(new CompressionStream(algorithm as CompressionFormat));\n const compressedBuffer = await new Response(compressedStream).arrayBuffer();\n return new Uint8Array(compressedBuffer);\n}\n\nexport async function decompress(\n input: Uint8Array,\n algorithm: \"gzip\" | \"br\" = \"gzip\"\n): Promise<string> {\n const sourceBlob = new Blob([new Uint8Array(input)]);\n const decompressedStream = sourceBlob\n .stream()\n .pipeThrough(new DecompressionStream(algorithm as CompressionFormat));\n return await new Response(decompressedStream).text();\n}\n",
45
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n *\n * Browser-only MCP client util. Supports streamable-http only.\n * stdio is not available in the browser.\n */\n\nimport { Client } from \"@modelcontextprotocol/sdk/client\";\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { Transport } from \"@modelcontextprotocol/sdk/shared/transport.js\";\nimport { getGlobalCredentialStore } from \"../credentials/CredentialStoreRegistry\";\nimport { createAuthProvider, resolveAuthSecrets } from \"./McpAuthProvider\";\nimport { buildAuthConfig, mcpAuthConfigSchema } from \"./McpAuthTypes\";\nimport type { McpAuthConfig } from \"./McpAuthTypes\";\nimport type { OAuthClientProvider } from \"@modelcontextprotocol/sdk/client/auth.js\";\n\nexport const mcpTransportTypes = [\"streamable-http\", \"sse\"] as const;\n\nexport const mcpServerConfigSchema = {\n properties: {\n transport: {\n type: \"string\",\n enum: mcpTransportTypes,\n title: \"Transport\",\n description: \"The transport type to use for connecting to the MCP server\",\n },\n server_url: {\n type: \"string\",\n format: \"uri\",\n title: \"Server URL\",\n description: \"The URL of the MCP server (for streamable-http transport)\",\n },\n ...mcpAuthConfigSchema.properties,\n },\n allOf: mcpAuthConfigSchema.allOf,\n} as const;\n\nexport type McpTransportType = (typeof mcpTransportTypes)[number];\n\nexport interface McpServerConfig {\n transport: McpTransportType;\n server_url?: string;\n auth?: McpAuthConfig;\n // Flat auth properties from schema (used when config comes from JSON Schema forms)\n auth_type?: string;\n // External auth provider — when set, bypasses internal auth resolution for OAuth flows\n authProvider?: OAuthClientProvider;\n}\n\nexport async function createMcpClient(\n config: McpServerConfig,\n signal?: AbortSignal\n): Promise<{ client: Client; transport: Transport }> {\n let transport: Transport;\n\n // Resolve auth config: prefer structured `auth` object, fall back to flat props\n let auth: McpAuthConfig | undefined = config.auth ?? buildAuthConfig({ ...config });\n\n // Resolve credential store keys to actual secret values\n if (auth && auth.type !== \"none\") {\n auth = await resolveAuthSecrets(auth, getGlobalCredentialStore());\n }\n\n // Build auth provider for OAuth flows (external provider takes precedence)\n const authProvider =\n config.authProvider ??\n (auth && auth.type !== \"none\" && auth.type !== \"bearer\"\n ? createAuthProvider(auth, config.server_url ?? \"\", getGlobalCredentialStore())\n : undefined);\n\n // Build request headers (SDK sets MCP-Protocol-Version automatically)\n const headers: Record<string, string> = {\n ...(auth?.type === \"bearer\" ? { Authorization: `Bearer ${auth.token}` } : {}),\n };\n const requestInit = { headers };\n\n switch (config.transport) {\n case \"sse\": {\n transport = new SSEClientTransport(new URL(config.server_url!), {\n authProvider,\n requestInit,\n });\n break;\n }\n case \"streamable-http\": {\n transport = new StreamableHTTPClientTransport(new URL(config.server_url!), {\n authProvider,\n requestInit,\n });\n break;\n }\n default:\n throw new Error(`Unsupported transport type: ${config.transport}`);\n }\n\n const client = new Client({ name: \"workglow-mcp-client\", version: \"1.0.0\" });\n\n if (signal) {\n signal.addEventListener(\n \"abort\",\n () => {\n client.close().catch(() => {});\n },\n { once: true }\n );\n }\n\n try {\n await client.connect(transport);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n const url = config.server_url ?? \"\";\n const is405 =\n message.includes(\"405\") ||\n message.includes(\"Method Not Allowed\") ||\n (typeof err === \"object\" &&\n err !== null &&\n \"status\" in err &&\n (err as { status: number }).status === 405);\n if (is405) {\n throw new Error(\n `MCP connection failed with 405 Method Not Allowed for ${url}. ` +\n `This usually means the server does not accept GET requests. `,\n { cause: err }\n );\n }\n const is406 =\n message.includes(\"406\") ||\n message.includes(\"Not Acceptable\") ||\n (typeof err === \"object\" &&\n err !== null &&\n \"code\" in err &&\n (err as { code: number }).code === 406);\n if (is406) {\n throw new Error(\n `MCP connection failed with 406 Not Acceptable for ${url}. ` +\n `Try using transport \"sse\" instead of \"streamable-http\", or ensure the server accepts the request format (Accept: application/json, text/event-stream and MCP-Protocol-Version).`,\n { cause: err }\n );\n }\n throw err;\n }\n return { client, transport };\n}\n\nexport const mcpClientFactory = {\n create: createMcpClient,\n};\n",
46
40
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport type ImageChannels = 1 | 3 | 4; // grayscale, rgb, rgba\n\nexport type ImageDataSupport =\n | \"Blob\"\n | \"ImageBinary\"\n | \"ImageBitmap\"\n | \"OffscreenCanvas\"\n | \"VideoFrame\"\n | \"RawImage\"\n | \"DataUri\"\n | \"Sharp\";\n\nexport interface ImageBinary {\n data: Uint8ClampedArray;\n width: number;\n height: number;\n channels: ImageChannels;\n rawChannels?: number | undefined;\n}\n\nexport function parseDataUri(dataUri: string): {\n mimeType: string;\n base64: string;\n} {\n const match = dataUri.match(/^data:([^;]+);base64,(.+)$/);\n if (!match) {\n throw new Error(\"Invalid base64 data URI\");\n }\n\n return {\n mimeType: match[1], // e.g. \"image/png\"\n base64: match[2],\n };\n}\n",
47
41
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ImageBinary, ImageChannels, ImageDataSupport } from \"./image\";\nimport { parseDataUri } from \"./image\";\n\nexport { parseDataUri };\nexport type { ImageBinary, ImageChannels, ImageDataSupport };\n\nconst convertBlobToOffscreenCanvas = async (blob: Blob): Promise<OffscreenCanvas> => {\n const img = await createImageBitmap(blob);\n const ctx = new OffscreenCanvas(img.width, img.height).getContext(\"2d\");\n if (!ctx) {\n throw new Error(\"Failed to get context.\");\n }\n ctx.drawImage(img, 0, 0);\n return ctx.canvas;\n};\n\nfunction dataUriToBlob(dataUri: string): Blob {\n const { mimeType, base64 } = parseDataUri(dataUri);\n\n const binary = atob(base64);\n const bytes = Uint8Array.from(binary, (char) => char.charCodeAt(0));\n\n const blob = new Blob([bytes], { type: mimeType });\n return blob;\n}\n\nexport async function convertImageDataToUseableForm(\n imageData: unknown,\n supports: ImageDataSupport[]\n): Promise<unknown> {\n if (imageData === null || imageData === undefined) {\n throw new Error(\"Image data is null or undefined\");\n }\n\n // first check if the image data is already in the supported format\n if (supports.includes(\"ImageBitmap\") && imageData instanceof ImageBitmap) {\n return imageData;\n }\n if (supports.includes(\"VideoFrame\") && imageData instanceof VideoFrame) {\n return imageData;\n }\n if (supports.includes(\"Blob\") && imageData instanceof Blob) {\n return imageData;\n }\n if (\n supports.includes(\"ImageBinary\") &&\n typeof imageData === \"object\" &&\n \"data\" in imageData &&\n \"width\" in imageData &&\n \"height\" in imageData &&\n \"channels\" in imageData\n ) {\n return imageData;\n }\n\n // if not, convert it to the first supported format\n if (supports.includes(\"ImageBitmap\") && imageData instanceof Blob) {\n return createImageBitmap(imageData);\n }\n if (supports.includes(\"OffscreenCanvas\") && imageData instanceof Blob) {\n return await convertBlobToOffscreenCanvas(imageData);\n }\n if (supports.includes(\"ImageBitmap\") && imageData instanceof OffscreenCanvas) {\n return imageData.transferToImageBitmap();\n }\n // if not, convert it to the first supported format\n if (supports.includes(\"ImageBitmap\") && typeof imageData === \"string\") {\n return createImageBitmap(dataUriToBlob(imageData));\n }\n if (supports.includes(\"OffscreenCanvas\") && typeof imageData === \"string\") {\n return convertBlobToOffscreenCanvas(dataUriToBlob(imageData));\n }\n if (supports.includes(\"Blob\") && typeof imageData === \"string\") {\n return dataUriToBlob(imageData);\n }\n if (\n supports.includes(\"DataUri\") &&\n typeof imageData === \"string\" &&\n imageData.startsWith(\"data:\")\n ) {\n return imageData;\n }\n throw new Error(`Unsupported image data type: ${typeof imageData} `);\n}\n",
48
- "const Worker = globalThis.Worker;\nconst parentPort = self;\nexport { Worker, parentPort };\n"
42
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createServiceToken } from \"../di\";\n\n/** Service token for the platform-specific WorkerServer instance. */\nexport const WORKER_SERVER = createServiceToken<WorkerServerBase>(\"worker.server\");\n\n/**\n * Extracts transferables from an object.\n * @param obj - The object to extract transferables from.\n * @returns An array of transferables.\n */\nfunction extractTransferables(obj: any) {\n const transferables: Transferable[] = [];\n const seen = new WeakSet();\n\n function findTransferables(value: any) {\n // Avoid infinite recursion\n if (value && typeof value === \"object\" && seen.has(value)) {\n return;\n }\n if (value && typeof value === \"object\") {\n seen.add(value);\n }\n\n // Handle TypedArrays\n if (value instanceof Float32Array || value instanceof Int16Array) {\n transferables.push(value.buffer);\n }\n // Handle other TypedArrays\n else if (\n value instanceof Uint8Array ||\n value instanceof Uint8ClampedArray ||\n value instanceof Int8Array ||\n value instanceof Uint16Array ||\n value instanceof Int32Array ||\n value instanceof Uint32Array ||\n value instanceof Float64Array ||\n value instanceof BigInt64Array ||\n value instanceof BigUint64Array\n ) {\n transferables.push(value.buffer);\n }\n // Handle OffscreenCanvas\n else if (typeof OffscreenCanvas !== \"undefined\" && value instanceof OffscreenCanvas) {\n transferables.push(value);\n }\n // Handle ImageBitmap\n else if (typeof ImageBitmap !== \"undefined\" && value instanceof ImageBitmap) {\n transferables.push(value);\n }\n // Handle VideoFrame\n else if (typeof VideoFrame !== \"undefined\" && value instanceof VideoFrame) {\n transferables.push(value);\n }\n // Handle MessagePort\n else if (typeof MessagePort !== \"undefined\" && value instanceof MessagePort) {\n transferables.push(value);\n }\n // Handle ArrayBuffer\n else if (value instanceof ArrayBuffer) {\n transferables.push(value);\n }\n // Recursively search arrays and objects\n else if (Array.isArray(value)) {\n value.forEach(findTransferables);\n } else if (value && typeof value === \"object\") {\n Object.values(value).forEach(findTransferables);\n }\n }\n\n findTransferables(obj);\n return transferables;\n}\n\n/**\n * WorkerServerBase is a class that handles messages from the main thread to the worker.\n * It is used to register functions that can be called from the main thread.\n * It also handles the transfer of transferables to the main thread.\n */\nexport class WorkerServerBase {\n constructor() {} // overridden in subclasses\n\n private functions: Record<string, (...args: any[]) => Promise<any>> = {};\n private streamFunctions: Record<string, (...args: any[]) => AsyncIterable<any>> = {};\n private reactiveFunctions: Record<string, (input: any, output: any, model: any) => Promise<any>> =\n {};\n\n // Keep track of each request's AbortController\n private requestControllers = new Map<string, AbortController>();\n // Keep track of requests that have already been responded to\n private completedRequests = new Set<string>();\n\n private postResult = (id: string, result: any) => {\n if (this.completedRequests.has(id)) {\n return; // Already responded to this request\n }\n this.completedRequests.add(id);\n const transferables = extractTransferables(result);\n const uniqueTransferables = [...new Set(transferables)];\n // @ts-ignore - Ignore type mismatch between standard Transferable and Bun.Transferable\n postMessage({ id, type: \"complete\", data: result }, uniqueTransferables);\n };\n\n private postError = (id: string, errorMessage: string) => {\n if (this.completedRequests.has(id)) {\n return; // Already responded to this request\n }\n this.completedRequests.add(id);\n postMessage({ id, type: \"error\", data: errorMessage });\n };\n\n private postStreamChunk = (id: string, event: any) => {\n if (this.completedRequests.has(id)) {\n return;\n }\n postMessage({ id, type: \"stream_chunk\", data: event });\n };\n\n /**\n * Send the ready message to the main thread, advertising which functions are\n * registered in each category. Call this after all functions have been registered\n * so WorkerManager can skip unnecessary roundtrips for unregistered calls.\n */\n sendReady() {\n // @ts-ignore\n postMessage({\n type: \"ready\",\n functions: Object.keys(this.functions),\n streamFunctions: Object.keys(this.streamFunctions),\n reactiveFunctions: Object.keys(this.reactiveFunctions),\n });\n }\n\n registerFunction(name: string, fn: (...args: any[]) => Promise<any>) {\n this.functions[name] = fn;\n }\n\n /**\n * Register a reactive function for lightweight preview execution.\n * Reactive functions receive (input, output, model) and return a fast preview\n * without progress tracking or abort signals.\n *\n * @param name - The function name (e.g., task type identifier)\n * @param fn - Async function: (input, output, model) => Promise<output | undefined>\n */\n registerReactiveFunction(\n name: string,\n fn: (input: any, output: any, model: any) => Promise<any>\n ) {\n this.reactiveFunctions[name] = fn;\n }\n\n /**\n * Register an async generator function for streaming execution.\n * When called via the worker protocol with `stream: true`, the server\n * iterates the generator and sends each yielded value as a `stream_chunk`\n * message, followed by a `complete` message when the generator finishes.\n *\n * @param name - The function name (e.g., task type identifier)\n * @param fn - Async generator function: (input, model, signal) => AsyncIterable\n */\n registerStreamFunction(name: string, fn: (...args: any[]) => AsyncIterable<any>) {\n this.streamFunctions[name] = fn;\n }\n\n // Handle messages from the main thread\n async handleMessage(event: { type: string; data: any }) {\n const { id, type, functionName, args, stream, reactive } = event.data;\n if (type === \"abort\") {\n return await this.handleAbort(id);\n }\n if (type === \"call\") {\n if (stream) {\n return await this.handleStreamCall(id, functionName, args);\n }\n if (reactive) {\n return await this.handleReactiveCall(id, functionName, args);\n }\n return await this.handleCall(id, functionName, args);\n }\n }\n\n async handleAbort(id: string) {\n if (this.requestControllers.has(id)) {\n const controller = this.requestControllers.get(id);\n controller?.abort();\n this.requestControllers.delete(id);\n // Send error response back to main thread so the promise rejects\n this.postError(id, \"Operation aborted\");\n }\n }\n\n /**\n * Handle a reactive call. Returns undefined (non-error) if the reactive\n * function is not registered, since not all task types expose a reactive fn.\n */\n async handleReactiveCall(\n id: string,\n functionName: string,\n [input, output, model]: [any, any, any]\n ) {\n if (!(functionName in this.reactiveFunctions)) {\n this.postResult(id, undefined);\n return;\n }\n try {\n const fn = this.reactiveFunctions[functionName];\n const result = await fn(input, output, model);\n this.postResult(id, result);\n } catch (error: any) {\n this.postError(id, error.message);\n }\n }\n\n async handleCall(id: string, functionName: string, [input, model]: [any, any]) {\n if (!(functionName in this.functions)) {\n this.postError(id, `Function ${functionName} not found`);\n return;\n }\n\n try {\n const abortController = new AbortController();\n this.requestControllers.set(id, abortController);\n\n const fn = this.functions[functionName];\n const postProgress = (progress: number, message?: string, details?: any) => {\n // Don't send progress updates after the request is completed/aborted\n if (!this.completedRequests.has(id)) {\n postMessage({ id, type: \"progress\", data: { progress, message, details } });\n }\n };\n const result = await fn(input, model, postProgress, abortController.signal);\n this.postResult(id, result);\n } catch (error: any) {\n this.postError(id, error.message);\n } finally {\n this.requestControllers.delete(id);\n // Clean up completed requests set after a delay to handle any race conditions\n // where abort message might arrive shortly after completion\n setTimeout(() => {\n this.completedRequests.delete(id);\n }, 1000);\n }\n }\n\n /**\n * Handle a streaming call. If a stream function is registered for the given name,\n * iterate it and send each yielded event as a `stream_chunk` message. If only a\n * regular function is registered, run it and wrap the result as a single `finish`\n * stream event (graceful fallback for providers that don't implement streaming).\n */\n async handleStreamCall(id: string, functionName: string, [input, model]: [any, any]) {\n if (functionName in this.streamFunctions) {\n try {\n const abortController = new AbortController();\n this.requestControllers.set(id, abortController);\n\n const fn = this.streamFunctions[functionName];\n const iterable = fn(input, model, abortController.signal);\n\n for await (const event of iterable) {\n if (this.completedRequests.has(id)) break;\n this.postStreamChunk(id, event);\n }\n\n this.postResult(id, undefined);\n } catch (error: any) {\n this.postError(id, error.message);\n } finally {\n this.requestControllers.delete(id);\n setTimeout(() => {\n this.completedRequests.delete(id);\n }, 1000);\n }\n } else if (functionName in this.functions) {\n // Fallback: run regular function and wrap result as a finish stream event\n try {\n const abortController = new AbortController();\n this.requestControllers.set(id, abortController);\n\n const fn = this.functions[functionName];\n const noopProgress = () => {};\n const result = await fn(input, model, noopProgress, abortController.signal);\n\n this.postStreamChunk(id, { type: \"finish\", data: result });\n this.postResult(id, undefined);\n } catch (error: any) {\n this.postError(id, error.message);\n } finally {\n this.requestControllers.delete(id);\n setTimeout(() => {\n this.completedRequests.delete(id);\n }, 1000);\n }\n } else {\n this.postError(id, `Function ${functionName} not found`);\n }\n }\n}\n",
43
+ "const Worker = globalThis.Worker;\nconst parentPort = self;\nexport { Worker, parentPort };\n\nimport { WorkerServerBase, WORKER_SERVER } from \"./WorkerServerBase\";\nimport { globalServiceRegistry } from \"../di\";\nexport { WORKER_SERVER };\nexport class WorkerServer extends WorkerServerBase {\n constructor() {\n parentPort?.addEventListener(\"message\", async (event) => {\n const msg = {\n type: event.type,\n // @ts-ignore - Ignore type mismatch between standard MessageEvent and our message type\n data: event.data,\n };\n await this.handleMessage(msg);\n });\n super();\n }\n}\n\nglobalServiceRegistry.register(WORKER_SERVER, () => new WorkerServer(), true);\n"
49
44
  ],
50
- "mappings": "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",
51
- "debugId": "F92FC9473BBE2EE764756E2164756E21",
45
+ "mappings": ";AAMO,SAAS,UAAmB,CAAC,OAAqB;AAAA,EACvD,IAAI,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO;AAAA,EACjC,OAAO,CAAC,KAAK;AAAA;AAGf,eAAsB,KAAK,CAAC,IAAY;AAAA,EACtC,OAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AAAA;AAQlD,SAAS,qBAA4B,CAAC,OAAoD;AAAA,EAC/F,MAAM,SAAS,CAAC;AAAA,GAEf,SAAS,CAAC,GAAG,QAAQ,CAAC,SAAS;AAAA,IAC9B,OAAO,KAAK,IAAc,EAAE,QAAQ,CAAC,QAAQ;AAAA,MAC3C,MAAM,QAAQ,KAAK;AAAA,MACnB,IAAI,OAAO,MAAqB;AAAA,QAC9B,OAAO,KAAoB,KAAK,KAAK;AAAA,MACvC,EAAO;AAAA,QACL,OAAO,OAAsB,CAAC,KAAK;AAAA;AAAA,KAEtC;AAAA,GACF;AAAA,EAED,OAAO;AAAA;AAGF,SAAS,iBAAiB,CAAC,MAA+B;AAAA,EAC/D,IAAI,CAAC;AAAA,IAAM,OAAO;AAAA,EAClB,MAAM,MAAM,CAAC,WAAoB,SAAS,KAAK,MAAM,SAAS;AAAA,EAE9D,MAAM,OAAO,KAAK,eAAe;AAAA,EACjC,MAAM,QAAQ,IAAI,KAAK,YAAY,IAAI,CAAC;AAAA,EACxC,MAAM,MAAM,IAAI,KAAK,WAAW,CAAC;AAAA,EACjC,MAAM,QAAQ,IAAI,KAAK,YAAY,CAAC;AAAA,EACpC,MAAM,UAAU,IAAI,KAAK,cAAc,CAAC;AAAA,EACxC,MAAM,UAAU,IAAI,KAAK,cAAc,CAAC;AAAA,EAExC,OAAO,GAAG,QAAQ,SAAS,OAAO,SAAS,WAAW;AAAA;AAGjD,SAAS,SAAS,CAAC,GAAQ,GAAiB;AAAA,EACjD,IAAI,MAAM,GAAG;AAAA,IACX,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,OAAO,MAAM,YAAY,OAAO,MAAM,YAAY,KAAK,QAAQ,KAAK,MAAM;AAAA,IAC5E,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,QAAQ,OAAO,KAAK,CAAC;AAAA,EAC3B,MAAM,QAAQ,OAAO,KAAK,CAAC;AAAA,EAE3B,IAAI,MAAM,WAAW,MAAM,QAAQ;AAAA,IACjC,OAAO;AAAA,EACT;AAAA,EAEA,WAAW,OAAO,OAAO;AAAA,IACvB,IAAI,CAAC,MAAM,SAAS,GAAG,GAAG;AAAA,MACxB,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,GAAG;AAAA,MAC9B,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,UAAU,CAAC,KAA+C;AAAA,EACxE,OAAO,OAAO,KAAK,GAAG,EACnB,KAAK,EACL,OACC,CAAC,QAAQ,QAAQ;AAAA,IACf,OAAO,OAAO,IAAI;AAAA,IAClB,OAAO;AAAA,KAET,CAAC,CACH;AAAA;AAGG,SAAS,SAAS,CAAC,KAAkC;AAAA,EAC1D,MAAM,YAAY,WAAW,GAAG;AAAA,EAChC,OAAO,KAAK,UAAU,SAAS;AAAA;;;ACtFjC,eAAsB,MAAM,CAAC,MAA+B;AAAA,EAC1D,MAAM,UAAU,IAAI;AAAA,EACpB,MAAM,aAAa,MAAM,OAAO,OAAO,OAAO,WAAW,QAAQ,OAAO,IAAI,CAAC;AAAA,EAC7E,MAAM,YAAY,MAAM,KAAK,IAAI,WAAW,UAAU,CAAC;AAAA,EACvD,OAAO,UAAU,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAAA;AAGtE,eAAsB,eAAe,CAAC,OAA6B;AAAA,EACjE,MAAM,gBAAgB,UAAU,KAAK;AAAA,EACrC,MAAM,OAAO,MAAM,OAAO,aAAa;AAAA,EACvC,OAAO;AAAA;AAKF,SAAS,KAAK,GAAU;AAAA,EAC7B,OAAO,OAAO,WAAW;AAAA;;ACfpB,MAAM,UAAU;AAAA,EACb,WAA6B,IAAI;AAAA,EACjC,YAAoC,IAAI;AAAA,EACxC,aAA0B,IAAI;AAAA,EAQtC,QAAW,CAAC,OAAe,SAAkB,YAAY,MAAY;AAAA,IACnE,KAAK,UAAU,IAAI,OAAO,OAAO;AAAA,IACjC,IAAI,WAAW;AAAA,MACb,KAAK,WAAW,IAAI,KAAK;AAAA,IAC3B;AAAA;AAAA,EAQF,gBAAmB,CAAC,OAAe,UAAmB;AAAA,IACpD,KAAK,SAAS,IAAI,OAAO,QAAQ;AAAA,IACjC,KAAK,WAAW,IAAI,KAAK;AAAA;AAAA,EAQ3B,GAAM,CAAC,OAAkB;AAAA,IAEvB,IAAI,KAAK,SAAS,IAAI,KAAK,GAAG;AAAA,MAC5B,OAAO,KAAK,SAAS,IAAI,KAAK;AAAA,IAChC;AAAA,IAGA,MAAM,UAAU,KAAK,UAAU,IAAI,KAAK;AAAA,IACxC,IAAI,CAAC,SAAS;AAAA,MACZ,MAAM,IAAI,MAAM,2BAA2B,OAAO,KAAK,GAAG;AAAA,IAC5D;AAAA,IAEA,MAAM,WAAW,QAAQ;AAAA,IAGzB,IAAI,KAAK,WAAW,IAAI,KAAK,GAAG;AAAA,MAC9B,KAAK,SAAS,IAAI,OAAO,QAAQ;AAAA,IACnC;AAAA,IAEA,OAAO;AAAA;AAAA,EAQT,GAAG,CAAC,OAAwB;AAAA,IAC1B,OAAO,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK,UAAU,IAAI,KAAK;AAAA;AAAA,EAO7D,MAAM,CAAC,OAAqB;AAAA,IAC1B,KAAK,SAAS,OAAO,KAAK;AAAA,IAC1B,KAAK,UAAU,OAAO,KAAK;AAAA,IAC3B,KAAK,WAAW,OAAO,KAAK;AAAA;AAAA,EAO9B,oBAAoB,GAAc;AAAA,IAChC,MAAM,QAAQ,IAAI;AAAA,IAGlB,KAAK,UAAU,QAAQ,CAAC,SAAS,UAAU;AAAA,MACzC,MAAM,UAAU,IAAI,OAAO,OAAO;AAAA,MAClC,IAAI,KAAK,WAAW,IAAI,KAAK,GAAG;AAAA,QAC9B,MAAM,WAAW,IAAI,KAAK;AAAA,MAC5B;AAAA,KACD;AAAA,IAGD,KAAK,SAAS,QAAQ,CAAC,SAAS,UAAU;AAAA,MACxC,IAAI,KAAK,WAAW,IAAI,KAAK,GAAG;AAAA,QAC9B,MAAM,SAAS,IAAI,OAAO,OAAO;AAAA,QACjC,MAAM,WAAW,IAAI,KAAK;AAAA,MAC5B;AAAA,KACD;AAAA,IAED,OAAO;AAAA;AAEX;AAKO,IAAM,kBAAkB,IAAI;;AC5F5B,SAAS,kBAAqB,CAAC,IAA6B;AAAA,EACjE,OAAO,EAAE,IAAI,OAAO,KAAY;AAAA;AAAA;AAM3B,MAAM,gBAAgB;AAAA,EACpB;AAAA,EAMP,WAAW,CAAC,YAAuB,iBAAiB;AAAA,IAClD,KAAK,YAAY;AAAA;AAAA,EASnB,QAAW,CAAC,OAAwB,SAAkB,YAAY,MAAY;AAAA,IAC5E,KAAK,UAAU,SAAS,MAAM,IAAI,SAAS,SAAS;AAAA;AAAA,EAQtD,gBAAmB,CAAC,OAAwB,UAAmB;AAAA,IAC7D,KAAK,UAAU,iBAAiB,MAAM,IAAI,QAAQ;AAAA;AAAA,EAQpD,GAAM,CAAC,OAA2B;AAAA,IAChC,OAAO,KAAK,UAAU,IAAO,MAAM,EAAE;AAAA;AAAA,EAQvC,GAAM,CAAC,OAAiC;AAAA,IACtC,OAAO,KAAK,UAAU,IAAI,MAAM,EAAE;AAAA;AAEtC;AAKO,IAAM,wBAAwB,IAAI,gBAAgB,eAAe;;;ACpDjE,IAAM,kBACX,mBAAiD,sBAAsB;AAGzE,IAAI,CAAC,sBAAsB,IAAI,eAAe,GAAG;AAAA,EAC/C,sBAAsB,SACpB,iBACA,MAAoC,IAAI,KACxC,IACF;AACF;AAMO,SAAS,iBAAiB,GAAiC;AAAA,EAChE,OAAO,sBAAsB,IAAI,eAAe;AAAA;AAiC3C,SAAS,qBAAqB,CAAC,cAAsB,UAAiC;AAAA,EAC3F,MAAM,YAAY,kBAAkB;AAAA,EACpC,UAAU,IAAI,cAAc,QAAQ;AAAA;;AChC/B,MAAM,aAA+E;AAAA,EAClF,YAEJ,CAAC;AAAA,EAOL,kBAA0D,CAAC,OAAqB;AAAA,IAC9E,IAAI,OAAO;AAAA,MACT,OAAO,KAAK,UAAU;AAAA,IACxB,EAAO;AAAA,MACL,KAAK,YAAY,CAAC;AAAA;AAAA,IAEpB,OAAO;AAAA;AAAA,EAST,EAA0C,CACxC,OACA,UACM;AAAA,IACN,MAAM,YACJ,KAAK,UAAU,WAAW,KAAK,UAAU,SAAS,CAAC;AAAA,IACrD,UAAU,KAAK,EAAE,SAAS,CAAC;AAAA,IAC3B,OAAO;AAAA;AAAA,EAST,GAA2C,CACzC,OACA,UACM;AAAA,IACN,MAAM,YAAY,KAAK,UAAU;AAAA,IACjC,IAAI,CAAC;AAAA,MAAW,OAAO;AAAA,IAEvB,MAAM,QAAQ,UAAU,UAAU,CAAC,MAAM,EAAE,aAAa,QAAQ;AAAA,IAChE,IAAI,SAAS,GAAG;AAAA,MACd,UAAU,OAAO,OAAO,CAAC;AAAA,IAC3B;AAAA,IACA,OAAO;AAAA;AAAA,EAST,IAA4C,CAC1C,OACA,UACM;AAAA,IACN,MAAM,YACJ,KAAK,UAAU,WAAW,KAAK,UAAU,SAAS,CAAC;AAAA,IACrD,UAAU,KAAK,EAAE,UAAU,MAAM,KAAK,CAAC;AAAA,IACvC,OAAO;AAAA;AAAA,EAQT,MAA8C,CAC5C,OACuD;AAAA,IACvD,OAAO,IAAI,QAAQ,CAAC,YAAY;AAAA,MAE9B,MAAM,WAAY,IAAI,SAAgB;AAAA,QAEpC,QAAQ,IAAW;AAAA;AAAA,MAGrB,KAAK,KAAK,OAAO,QAAQ;AAAA,KAC1B;AAAA;AAAA,EAQI,IAA4C,CAEjD,UACG,MACH;AAAA,IACA,MAAM,YAAmE,KAAK,UAAU;AAAA,IACxF,IAAI,WAAW;AAAA,MACb,UAAU,QAAQ,GAAG,eAAe;AAAA,QAClC,SAAS,GAAG,IAAI;AAAA,OACjB;AAAA,MAED,KAAK,UAAU,SAAS,UAAU,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI;AAAA,IACzD;AAAA;AAAA,EASK,SAAiD,CACtD,OACA,UACY;AAAA,IACZ,KAAK,GAAG,OAAO,QAAQ;AAAA,IACvB,OAAO,MAAM,KAAK,IAAI,OAAO,QAAQ;AAAA;AAEzC;;AC9JA,IAAM,kBAA4C;AAAA,EAChD,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AACT;AAAA;AAiBO,MAAM,cAAiC;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,UAAgC,CAAC,GAAG;AAAA,IAC9C,KAAK,WAAW,QAAQ,YAAY,CAAC;AAAA,IACrC,KAAK,QAAQ,QAAQ,SAAS;AAAA,IAC9B,KAAK,UAAU,QAAQ,WAAW;AAAA;AAAA,EAG5B,OAAO,CAAC,OAA0B;AAAA,IACxC,OAAO,gBAAgB,UAAU,gBAAgB,KAAK;AAAA;AAAA,EAGxD,IAAI,CAAC,SAAiB,MAAsC;AAAA,IAC1D,IAAI,CAAC,KAAK,QAAQ,MAAM;AAAA,MAAG;AAAA,IAC3B,MAAM,SAAS,KAAK,MAAM,IAAI;AAAA,IAC9B,IAAI,QAAQ;AAAA,MACV,QAAQ,KAAK,SAAS,MAAM;AAAA,IAC9B,EAAO;AAAA,MACL,QAAQ,KAAK,OAAO;AAAA;AAAA;AAAA,EAIxB,IAAI,CAAC,SAAiB,MAAsC;AAAA,IAC1D,IAAI,CAAC,KAAK,QAAQ,MAAM;AAAA,MAAG;AAAA,IAC3B,MAAM,SAAS,KAAK,MAAM,IAAI;AAAA,IAC9B,IAAI,QAAQ;AAAA,MACV,QAAQ,KAAK,SAAS,MAAM;AAAA,IAC9B,EAAO;AAAA,MACL,QAAQ,KAAK,OAAO;AAAA;AAAA;AAAA,EAIxB,KAAK,CAAC,SAAiB,MAAsC;AAAA,IAC3D,IAAI,CAAC,KAAK,QAAQ,OAAO;AAAA,MAAG;AAAA,IAC5B,MAAM,SAAS,KAAK,MAAM,IAAI;AAAA,IAC9B,IAAI,QAAQ;AAAA,MACV,QAAQ,MAAM,SAAS,MAAM;AAAA,IAC/B,EAAO;AAAA,MACL,QAAQ,MAAM,OAAO;AAAA;AAAA;AAAA,EAIzB,KAAK,CAAC,SAAiB,MAAsC;AAAA,IAC3D,IAAI,CAAC,KAAK,QAAQ,OAAO;AAAA,MAAG;AAAA,IAC5B,MAAM,SAAS,KAAK,MAAM,IAAI;AAAA,IAC9B,IAAI,QAAQ;AAAA,MACV,QAAQ,MAAM,SAAS,MAAM;AAAA,IAC/B,EAAO;AAAA,MACL,QAAQ,MAAM,OAAO;AAAA;AAAA;AAAA,EAIzB,KAAK,CAAC,KAAY,SAAiB,MAAsC;AAAA,IACvE,IAAI,CAAC,KAAK,QAAQ,OAAO;AAAA,MAAG;AAAA,IAC5B,MAAM,SAAS,KAAK,MAAM,IAAI;AAAA,IAC9B,IAAI,QAAQ;AAAA,MACV,QAAQ,MAAM,SAAS,KAAK,QAAQ,OAAO,IAAI,CAAC;AAAA,IAClD,EAAO;AAAA,MACL,QAAQ,MAAM,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA;AAAA;AAAA,EAIzC,IAAI,CAAC,OAAe,MAAsC;AAAA,IACxD,IAAI,CAAC,KAAK;AAAA,MAAS;AAAA,IACnB,MAAM,SAAS,KAAK,MAAM,IAAI;AAAA,IAC9B,IAAI,QAAQ;AAAA,MACV,QAAQ,KAAK,UAAU,SAAS,MAAM;AAAA,IACxC;AAAA,IACA,QAAQ,KAAK,KAAK;AAAA;AAAA,EAGpB,OAAO,CAAC,OAAe,MAAsC;AAAA,IAC3D,IAAI,CAAC,KAAK;AAAA,MAAS;AAAA,IACnB,QAAQ,QAAQ,KAAK;AAAA,IACrB,MAAM,SAAS,KAAK,MAAM,IAAI;AAAA,IAC9B,IAAI,QAAQ;AAAA,MACV,QAAQ,KAAK,aAAa,SAAS,MAAM;AAAA,IAC3C;AAAA;AAAA,EAGF,KAAK,CAAC,OAAe,MAAsC;AAAA,IACzD,MAAM,SAAS,KAAK,MAAM,IAAI;AAAA,IAC9B,IAAI,QAAQ;AAAA,MACV,QAAQ,MAAM,OAAO,MAAM;AAAA,IAC7B,EAAO;AAAA,MACL,QAAQ,MAAM,KAAK;AAAA;AAAA;AAAA,EAIvB,QAAQ,GAAS;AAAA,IACf,QAAQ,SAAS;AAAA;AAAA,EAGnB,KAAK,CAAC,UAA4C;AAAA,IAChD,OAAO,IAAI,cAAc;AAAA,MACvB,UAAU,KAAK,KAAK,aAAa,SAAS;AAAA,MAC1C,OAAO,KAAK;AAAA,MACZ,SAAS,KAAK;AAAA,IAChB,CAAC;AAAA;AAAA,EAGK,KAAK,CAAC,MAAgF;AAAA,IAC5F,MAAM,cAAc,OAAO,KAAK,KAAK,QAAQ,EAAE,SAAS;AAAA,IACxD,IAAI,CAAC,eAAe,CAAC;AAAA,MAAM;AAAA,IAC3B,IAAI,CAAC;AAAA,MAAa,OAAO;AAAA,IACzB,IAAI,CAAC;AAAA,MAAM,OAAO,KAAK;AAAA,IACvB,OAAO,KAAK,KAAK,aAAa,KAAK;AAAA;AAEvC;;ACvIO,MAAM,WAA8B;AAAA,EACzC,IAAI,CAAC,UAAkB,OAAuC;AAAA,EAC9D,KAAK,CAAC,UAAkB,OAAuC;AAAA,EAC/D,IAAI,CAAC,UAAkB,OAAuC;AAAA,EAC9D,KAAK,CAAC,UAAkB,OAAuC;AAAA,EAC/D,KAAK,CAAC,MAAa,UAAkB,OAAuC;AAAA,EAC5E,IAAI,CAAC,QAAgB,OAAuC;AAAA,EAC5D,OAAO,CAAC,QAAgB,OAAuC;AAAA,EAC/D,KAAK,CAAC,QAAgB,OAAuC;AAAA,EAC7D,QAAQ,GAAS;AAAA,EACjB,KAAK,CAAC,WAA6C;AAAA,IACjD,OAAO;AAAA;AAEX;;ACVO,IAAM,SAAS,mBAA4B,QAAQ;AAE1D,IAAM,mBAAwC,IAAI,IAAY;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,SAAS,MAAM,CAAC,MAAkC;AAAA,EAChD,IAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAA,IACjD,OAAO,QAAQ,IAAI;AAAA,EACrB;AAAA,EACA,OAAO,YAAY,IAAI;AAAA;AAGzB,SAAS,QAAQ,CAAC,OAAoC;AAAA,EACpD,OAAO,UAAU,aAAa,UAAU,MAAM,UAAU,OAAO,UAAU;AAAA;AAG3E,SAAS,mBAAmB,GAAY;AAAA,EACtC,MAAM,WAAW,OAAO,cAAc,GAAG,YAAY;AAAA,EACrD,IAAI,YAAY,iBAAiB,IAAI,QAAQ,GAAG;AAAA,IAC9C,OAAO,IAAI,cAAc;AAAA,MACvB,OAAO;AAAA,MACP,SAAS,SAAS,OAAO,gBAAgB,CAAC;AAAA,IAC5C,CAAC;AAAA,EACH;AAAA,EACA,IAAI,OAAO,KAAK,GAAG;AAAA,IACjB,OAAO,IAAI,cAAc;AAAA,MACvB,OAAO;AAAA,MACP,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA,EACA,OAAO,IAAI;AAAA;AAIb,IAAI,CAAC,sBAAsB,IAAI,MAAM,GAAG;AAAA,EACtC,sBAAsB,SAAS,QAAQ,qBAAqB,IAAI;AAClE;AAKO,SAAS,SAAS,GAAY;AAAA,EACnC,OAAO,sBAAsB,IAAI,MAAM;AAAA;AAMlC,SAAS,SAAS,CAAC,QAAuB;AAAA,EAC/C,sBAAsB,iBAAiB,QAAQ,MAAM;AAAA;;AC/DhD,MAAM,UAAU;AAAA,SACP,OAAe;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAEP,WAAW,CAAC,UAAkB,IAAI;AAAA,IAChC,KAAK,UAAU;AAAA,IACf,MAAM,cAAc,KAAK;AAAA,IACzB,KAAK,OAAO,YAAY,QAAQ,KAAK,YAAY;AAAA,IAGjD,IAAI,OAAO,UAAU,eAAe,MAAM,mBAAmB;AAAA,MAC3D,MAAM,OAAO,EAAE,OAAO,GAAG;AAAA,MACzB,MAAM,kBAAkB,MAAM,KAAK,WAAW;AAAA,MAC9C,KAAK,QAAQ,KAAK;AAAA,IACpB,EAAO;AAAA,MACL,IAAI;AAAA,QACF,MAAM,IAAI,MAAM,OAAO;AAAA,QACvB,OAAO,KAAK;AAAA,QACZ,IAAI,eAAe,OAAO;AAAA,UACxB,KAAK,QAAQ,IAAI;AAAA,QACnB;AAAA;AAAA;AAAA;AAAA,EAKN,QAAQ,GAAW;AAAA,IACjB,OAAO,GAAG,KAAK,SAAS,KAAK;AAAA;AAEjC;;;ACvBO,MAAM,+BAAkC,UAAU;AAAA,SACzC,OAAe;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAEP,WAAW,CAAC,SAAY,SAAY,UAAmB;AAAA,IACrD,MACE,GAAG,KAAK,UAAU,OAAO,yBAAyB,OAAO,QAAQ,WAAW,KAAK,UAC/E,OACF,GACF;AAAA,IACA,KAAK,UAAU;AAAA,IACf,KAAK,UAAU;AAAA,IACf,KAAK,WAAW;AAAA,IAChB,KAAK,OAAO;AAAA,IAGZ,OAAO,eAAe,MAAM,uBAAuB,SAAS;AAAA;AAEhE;AAAA;AAQO,MAAM,6BAA6B,UAAU;AAAA,SACpC,OAAe;AAAA,EACtB;AAAA,EAEP,WAAW,CAAC,UAAmB;AAAA,IAC7B,MAAM,wBAAwB,OAAO,QAAQ,8BAA8B;AAAA,IAC3E,KAAK,WAAW;AAAA,IAChB,KAAK,OAAO;AAAA,IAGZ,OAAO,eAAe,MAAM,qBAAqB,SAAS;AAAA;AAE9D;AAAA;AASO,MAAM,mBAAmB,UAAU;AAAA,SAC1B,OAAe;AAAA,EAC7B,WAAW,CAAC,SAAiB;AAAA,IAC3B,MAAM,OAAO;AAAA,IACb,KAAK,OAAO;AAAA,IAGZ,OAAO,eAAe,MAAM,WAAW,SAAS;AAAA;AAEpD;;;AC2DO,MAAM,MAA6D;AAAA,EAC9D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEV,WAAW,CACT,cACA,cACA;AAAA,IACA,KAAK,QAAQ,IAAI;AAAA,IACjB,KAAK,YAAY,CAAC;AAAA,IAClB,KAAK,eAAe;AAAA,IACpB,KAAK,eAAe;AAAA;AAAA,EAGtB,SAAS,IAAI;AAAA,EACb,EAA6C,CAC3C,MACA,IACA;AAAA,IACA,KAAK,OAAO,GAAG,KAAK,KAAK,QAAQ,MAAM,EAAE;AAAA;AAAA,EAE3C,GAA8C,CAC5C,MACA,IACA;AAAA,IACA,KAAK,OAAO,IAAI,KAAK,KAAK,QAAQ,MAAM,EAAE;AAAA;AAAA,EAE5C,IAA+C,CAC7C,SACG,MACH;AAAA,IACA,KAAK,OAAO,KAAY,MAAM,GAAG,IAAI;AAAA;AAAA,EASvC,MAAM,CAAC,MAAoB;AAAA,IACzB,MAAM,KAAK,KAAK,aAAa,IAAI;AAAA,IACjC,MAAM,cAAc,KAAK,MAAM,IAAI,EAAE;AAAA,IAErC,IAAI,aAAa;AAAA,MACf,MAAM,IAAI,uBAAuB,MAAM,KAAK,MAAM,IAAI,EAAE,GAAG,EAAE;AAAA,IAC/D;AAAA,IAEA,KAAK,MAAM,IAAI,IAAI,IAAI;AAAA,IACvB,KAAK,UAAU,IAAI,CAAC,QAAQ,IAAI,KAAK,IAAI,CAAC;AAAA,IAC1C,KAAK,UAAU,KAAK,IAAI,MAA4B,KAAK,UAAU,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,IAEzF,KAAK,KAAK,cAAc,EAAE;AAAA,IAE1B,OAAO;AAAA;AAAA,EAWT,OAAO,CAAC,MAAkB;AAAA,IACxB,MAAM,KAAK,KAAK,aAAa,IAAI;AAAA,IACjC,MAAM,cAAc,KAAK,MAAM,IAAI,EAAE;AAAA,IAErC,IAAI,CAAC,aAAa;AAAA,MAChB,MAAM,IAAI,qBAAqB,EAAE;AAAA,IACnC;AAAA,IAEA,KAAK,MAAM,IAAI,IAAI,IAAI;AAAA,IAEvB,KAAK,KAAK,iBAAiB,EAAE;AAAA;AAAA,EAU/B,MAAM,CAAC,MAAoB;AAAA,IACzB,MAAM,KAAK,KAAK,aAAa,IAAI;AAAA,IACjC,MAAM,cAAc,KAAK,MAAM,IAAI,EAAE;AAAA,IAErC,KAAK,MAAM,IAAI,IAAI,IAAI;AAAA,IAEvB,IAAI,CAAC,aAAa;AAAA,MAChB,KAAK,UAAU,IAAI,CAAC,QAAQ,IAAI,KAAK,IAAI,CAAC;AAAA,MAC1C,KAAK,UAAU,KAAK,IAAI,MAA4B,KAAK,UAAU,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,MACzF,KAAK,KAAK,cAAc,EAAE;AAAA,IAC5B,EAAO;AAAA,MACL,KAAK,KAAK,iBAAiB,EAAE;AAAA;AAAA,IAG/B,OAAO;AAAA;AAAA,EAWT,OAAO,CAAC,eAAuB,eAAuB,MAAqB;AAAA,IACzE,IAAI,SAAS,WAAW;AAAA,MACtB,OAAO;AAAA,IACT;AAAA,IACA,MAAM,cAAc,KAAK,MAAM,IAAI,aAAa;AAAA,IAChD,MAAM,cAAc,KAAK,MAAM,IAAI,aAAa;AAAA,IAEhD,IAAI,CAAC,aAAa;AAAA,MAChB,MAAM,IAAI,qBAAqB,aAAa;AAAA,IAC9C;AAAA,IAEA,IAAI,CAAC,aAAa;AAAA,MAChB,MAAM,IAAI,qBAAqB,aAAa;AAAA,IAC9C;AAAA,IAEA,MAAM,aAAa,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC,EAAE,QAAQ,aAAa;AAAA,IACtE,MAAM,aAAa,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC,EAAE,QAAQ,aAAa;AAAA,IAEtE,IAAI,KAAK,UAAU,YAAY,gBAAgB,MAAM;AAAA,MACnD,KAAK,UAAU,YAAY,cAAc,CAAC,IAAI;AAAA,IAChD,EAAO;AAAA,MACL,IAAI,CAAC,KAAK,UAAU,YAAY,YAAa,SAAS,IAAI,GAAG;AAAA,QAC3D,KAAK,UAAU,YAAY,YAAa,KAAK,IAAI;AAAA,MACnD;AAAA;AAAA,IAGF,MAAM,KAAK,KAAK,aAAa,MAAM,eAAe,aAAa;AAAA,IAC/D,KAAK,KAAK,cAAc,EAAE;AAAA,IAE1B,OAAO;AAAA;AAAA,EAQT,QAAQ,CAAC,aAAoD;AAAA,IAC3D,MAAM,OAAO,MAAM,KAAK,KAAK,MAAM,OAAO,CAAC;AAAA,IAE3C,IAAI,gBAAgB,WAAW;AAAA,MAC7B,OAAO,KAAK,KAAK,WAAW;AAAA,IAC9B;AAAA,IAEA,OAAO;AAAA;AAAA,EAMT,OAAO,CAAC,cAAwC;AAAA,IAC9C,OAAO,KAAK,MAAM,IAAI,YAAY;AAAA;AAAA,EAMpC,OAAO,CAAC,cAA+B;AAAA,IACrC,OAAO,KAAK,MAAM,IAAI,YAAY;AAAA;AAAA,EAMpC,QAAQ,GAAsE;AAAA,IAC5E,MAAM,WAA8E,CAAC;AAAA,IAErF,MAAM,WAAW,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC;AAAA,IAC7C,KAAK,UAAU,QAAQ,CAAC,KAAK,aAAa;AAAA,MACxC,MAAM,gBAAgB,SAAS;AAAA,MAC/B,IAAI,iBAAiB,MAAM;AAAA,QACzB,IAAI,QAAQ,CAAC,OAAO,aAAa;AAAA,UAC/B,IAAI,UAAU,MAAM;AAAA,YAClB,MAAM,gBAAgB,SAAS;AAAA,YAC/B,IAAI,iBAAiB,MAAM;AAAA,cACzB,WAAW,QAAQ,OAAO;AAAA,gBACxB,SAAS,KAAK,CAAC,eAAe,eAAe,IAAI,CAAC;AAAA,cACpD;AAAA,YACF;AAAA,UACF;AAAA,SACD;AAAA,MACH;AAAA,KACD;AAAA,IAED,OAAO;AAAA;AAAA,EAMT,QAAQ,CACN,eACmE;AAAA,IACnE,MAAM,WAAW,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC;AAAA,IAC7C,MAAM,YAAY,SAAS,QAAQ,aAAa;AAAA,IAEhD,MAAM,WAA8E,CAAC;AAAA,IAErF,KAAK,UAAU,WAAW,QAAQ,CAAC,OAAO,aAAa;AAAA,MACrD,IAAI,UAAU,MAAM;AAAA,QAClB,MAAM,gBAAgB,SAAS;AAAA,QAC/B,IAAI,iBAAiB,MAAM;AAAA,UACzB,WAAW,QAAQ,OAAO;AAAA,YACxB,SAAS,KAAK,CAAC,eAAe,eAAe,IAAI,CAAC;AAAA,UACpD;AAAA,QACF;AAAA,MACF;AAAA,KACD;AAAA,IAED,OAAO;AAAA;AAAA,EAMT,OAAO,CACL,eACmE;AAAA,IACnE,MAAM,WAAW,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC;AAAA,IAC7C,MAAM,aAAa,SAAS,QAAQ,aAAa;AAAA,IAEjD,MAAM,WAA8E,CAAC;AAAA,IAErF,KAAK,UAAU,QAAQ,CAAC,KAAK,aAAa;AAAA,MACxC,MAAM,gBAAgB,SAAS;AAAA,MAC/B,MAAM,QAAQ,IAAI;AAAA,MAClB,IAAI,UAAU,MAAM;AAAA,QAClB,WAAW,QAAQ,OAAO;AAAA,UACxB,SAAS,KAAK,CAAC,eAAe,eAAe,IAAI,CAAC;AAAA,QACpD;AAAA,MACF;AAAA,KACD;AAAA,IAED,OAAO;AAAA;AAAA,EAMT,SAAS,CACP,cACmE;AAAA,IACnE,OAAO,CAAC,GAAG,KAAK,SAAS,YAAY,GAAG,GAAG,KAAK,QAAQ,YAAY,CAAC;AAAA;AAAA,EAWvE,UAAU,CAAC,eAAuB,eAAuB,cAA6B;AAAA,IACpF,MAAM,cAAc,KAAK,MAAM,IAAI,aAAa;AAAA,IAChD,MAAM,cAAc,KAAK,MAAM,IAAI,aAAa;AAAA,IAEhD,IAAI,CAAC,aAAa;AAAA,MAChB,MAAM,IAAI,qBAAqB,aAAa;AAAA,IAC9C;AAAA,IAEA,IAAI,CAAC,aAAa;AAAA,MAChB,MAAM,IAAI,qBAAqB,aAAa;AAAA,IAC9C;AAAA,IAEA,MAAM,aAAa,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC,EAAE,QAAQ,aAAa;AAAA,IACtE,MAAM,aAAa,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC,EAAE,QAAQ,aAAa;AAAA,IAEtE,IAAI,iBAAiB,WAAW;AAAA,MAC9B,KAAK,UAAU,YAAY,cAAc;AAAA,IAC3C,EAAO;AAAA,MAGL,WAAW,OAAO,KAAK,WAAW;AAAA,QAChC,WAAW,YAAY,KAAK;AAAA,UAC1B,IAAI,aAAa,MAAM;AAAA,YACrB,SAAS,YAAY,EAAG,YAAY,SAAS,QAAQ,aAAa;AAAA,cAChE,IACE,KAAK,aAAa,SAAS,YAAY,eAAe,aAAa,MACnE,cACA;AAAA,gBACA,SAAS,OAAO,WAAW,CAAC;AAAA,cAC9B;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA;AAAA,IAEF,KAAK,KAAK,gBAAgB,YAAsB;AAAA;AAAA,EASlD,MAAM,CAAC,cAA4B;AAAA,IACjC,IAAI,CAAC,KAAK,MAAM,IAAI,YAAY,GAAG;AAAA,MACjC,MAAM,IAAI,qBAAqB,YAAY;AAAA,IAC7C;AAAA,IAGA,KAAK,MAAM,OAAO,YAAY;AAAA,IAG9B,MAAM,YAAY,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC,EAAE,QAAQ,YAAY;AAAA,IAGpE,KAAK,UAAU,OAAO,WAAW,CAAC;AAAA,IAGlC,KAAK,UAAU,QAAQ,CAAC,QAAQ,IAAI,OAAO,WAAW,CAAC,CAAC;AAAA,IAExD,KAAK,KAAK,gBAAgB,YAAY;AAAA;AAAA,EAMxC,UAAU,CAAC,cAA4B;AAAA,IACrC,OAAO,KAAK,OAAO,YAAY;AAAA;AAAA,EAMjC,OAAO,CAAC,MAAoB;AAAA,IAC1B,OAAO,KAAK,OAAO,IAAI;AAAA;AAAA,EAMzB,QAAQ,CAAC,OAAyB;AAAA,IAChC,OAAO,MAAM,IAAI,CAAC,SAAS,KAAK,OAAO,IAAI,CAAC;AAAA;AAAA,EAO9C,QAAQ,CACN,OACU;AAAA,IACV,OAAO,MAAM,IAAI,EAAE,eAAe,eAAe,UAC/C,KAAK,QAAQ,eAAe,eAAe,IAAI,CACjD;AAAA;AAEJ;;;AC1dO,MAAM,sBAA6E,MAKxF;AAAA,EAEU,WAAgC;AAAA,EAO1C,SAAS,GAAY;AAAA,IACnB,IAAI,KAAK,aAAa,WAAW;AAAA,MAC/B,OAAO,CAAC,KAAK;AAAA,IACf;AAAA,IAEA,MAAM,cAAc,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC;AAAA,IAChD,MAAM,gBAAgB,IAAI,IACxB,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,eAAe,CAAC,CAAC,CAAC,CACtE;AAAA,IAEA,MAAM,WAAW,MAAM,KAAK,aAAa,EAAE,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC;AAAA,IAEzE,IAAI,eAAe;AAAA,IAEnB,OAAO,SAAS,SAAS,GAAG;AAAA,MAC1B,MAAM,MAAM,SAAS,IAAI;AAAA,MACzB,IAAI,QAAQ,WAAW;AAAA,QACrB;AAAA,MACF;AAAA,MAEA,MAAM,YAAY,YAAY,QAAQ,IAAI,EAAE;AAAA,MAC5C,KAAK,UAAU,WAAW,QAAQ,CAAC,QAAQ,UAAU;AAAA,QACnD,IAAI,WAAW,MAAM;AAAA,UACnB,MAAM,kBAAkB,cAAc,IAAI,YAAY,MAAM;AAAA,UAC5D,IAAI,oBAAoB,WAAW;AAAA,YACjC,cAAc,IAAI,YAAY,QAAQ,kBAAkB,CAAC;AAAA,YACzD,IAAI,kBAAkB,MAAM,GAAG;AAAA,cAC7B,SAAS,KAAK,CAAC,YAAY,QAAQ,kBAAkB,CAAC,CAAC;AAAA,YACzD;AAAA,UACF;AAAA,QACF;AAAA,OACD;AAAA,MAED;AAAA,IACF;AAAA,IAEA,KAAK,WAAW,EAAE,iBAAiB,KAAK,MAAM;AAAA,IAE9C,OAAO,iBAAiB,KAAK,MAAM;AAAA;AAAA,EAUrC,cAAc,CAAC,QAAwB;AAAA,IACrC,MAAM,iBAAiB,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC;AAAA,IACnD,MAAM,cAAc,eAAe,QAAQ,MAAM;AAAA,IAEjD,IAAI,gBAAgB,IAAI;AAAA,MACtB,MAAM,IAAI,qBAAqB,MAAM;AAAA,IACvC;AAAA,IAEA,OAAO,KAAK,UAAU,OAAe,CAAC,OAAO,QAAQ;AAAA,MACnD,OAAO,SAAS,IAAI,gBAAgB,OAAO,IAAI;AAAA,OAC9C,CAAC;AAAA;AAAA,EAYN,OAAO,CACL,oBACA,oBACA,MACA,0BAAmC,OAC3B;AAAA,IACR,IAAI,SAAS,WAAW;AAAA,MACtB,OAAO;AAAA,IACT;AAAA,IACA,IAAI,KAAK,aAAa,SAAS,CAAC,yBAAyB;AAAA,MACvD,KAAK,WAAW,KAAK,2BAA2B,oBAAoB,kBAAkB;AAAA,IACxF,EAAO,SAAI,yBAAyB;AAAA,MAClC,KAAK,WAAW;AAAA,IAClB;AAAA,IAEA,OAAO,MAAM,QAAQ,oBAAoB,oBAAoB,IAAI;AAAA;AAAA,EAWnE,YAAY,CAAC,WAAmB,SAA0B;AAAA,IACxD,MAAM,iBAAiB,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC;AAAA,IACnD,MAAM,iBAAiB,eAAe,QAAQ,SAAS;AAAA,IACvD,MAAM,eAAe,eAAe,QAAQ,OAAO;AAAA,IAEnD,IAAI,KAAK,UAAU,gBAAgB,iBAAiB,MAAM;AAAA,MACxD,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,KAAK,UAAU,gBAAgB,OAAgB,CAAC,OAAO,MAAM,UAAU;AAAA,MAC5E,IAAI,SAAS,SAAS,MAAM;AAAA,QAC1B,OAAO;AAAA,MACT;AAAA,MAEA,OAAO,KAAK,aAAa,eAAe,QAAQ,OAAO;AAAA,OACtD,KAAK;AAAA;AAAA,EAUV,0BAA0B,CAAC,oBAA4B,oBAAqC;AAAA,IAC1F,OACE,KAAK,YACL,uBAAuB,sBACvB,KAAK,aAAa,oBAAoB,kBAAkB;AAAA;AAAA,EAU5D,uBAAuB,CAAC,mBAAsE;AAAA,IAC5F,MAAM,cAAc,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC;AAAA,IAChD,MAAM,aAAa,KAAK,MAAM,IAAI,iBAAiB;AAAA,IAEnD,IAAI,cAAc,MAAM;AAAA,MACtB,MAAM,IAAI,qBAAqB,iBAAiB;AAAA,IAClD;AAAA,IAEA,MAAM,QAAQ,CAAC,oBAA2B,mBAAmC;AAAA,MAC3E,IAAI,WAAW,CAAC,GAAG,cAAc;AAAA,MACjC,MAAM,YAAY,YAAY,QAAQ,kBAAiB;AAAA,MACvD,KAAK,UAAU,WAAW,QAAQ,CAAC,QAAQ,UAAU;AAAA,QACnD,IACE,WAAW,QACX,eAAe,KAAK,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,YAAY,MAAM,KAAK,MAC3E;AAAA,UACA,MAAM,UAAU,KAAK,MAAM,IAAI,YAAY,MAAM;AAAA,UAEjD,IAAI,WAAW,MAAM;AAAA,YACnB,WAAW,CAAC,GAAG,MAAM,YAAY,QAAQ,QAAQ,GAAG,OAAO;AAAA,UAC7D;AAAA,QACF;AAAA,OACD;AAAA,MAED,OAAO;AAAA;AAAA,IAGT,MAAM,WAAW,IAAI,cACnB,KAAK,cACL,KAAK,YACP;AAAA,IACA,MAAM,WAAW,MAAM,mBAAmB,CAAC,UAAU,CAAC;AAAA,IACtD,MAAM,gBAAgB,SAAS,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;AAAA,IAC9D,MAAM,KAAK,KAAK,MAAM,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM;AAAA,MAC7C,IAAI,cAAc,SAAS,KAAK,aAAa,CAAC,CAAC,GAAG;AAAA,QAChD,SAAS,OAAO,CAAC;AAAA,MACnB;AAAA,KACD;AAAA,IACD,SAAS,YAAY,KAAK,OAAO,QAAQ;AAAA,IACzC,OAAO;AAAA;AAAA,EAGD,MAAM,CAAC,SAAwC;AAAA,IACrD,MAAM,gBAAgB,QAAQ,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;AAAA,IAC7D,MAAM,cAAc,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC;AAAA,IAEhD,OAAO,KAAK,UAAU,OAA8B,CAAC,OAAO,KAAK,UAAU;AAAA,MACzE,IAAI,cAAc,SAAS,YAAY,MAAM,GAAG;AAAA,QAC9C,OAAO,CAAC,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,WAAU,cAAc,SAAS,YAAY,OAAM,CAAC,CAAC;AAAA,MACxF,EAAO;AAAA,QACL,OAAO;AAAA;AAAA,OAER,CAAC,CAAC;AAAA;AAAA,EAMP,QAAQ,GAAgF;AAAA,IACtF,OAAO,MAAM,SAAS;AAAA;AAAA,EAWxB,UAAU,CAAC,oBAA4B,oBAA4B,cAA6B;AAAA,IAC9F,MAAM,WAAW,oBAAoB,oBAAoB,YAAY;AAAA,IAGrE,KAAK,WAAW;AAAA;AAAA,EASlB,MAAM,CAAC,cAA4B;AAAA,IACjC,MAAM,OAAO,YAAY;AAAA,IAGzB,KAAK,WAAW;AAAA;AAAA,EAOlB,QAAQ,CACN,OACU;AAAA,IACV,OAAO,MAAM,SAAS,KAAK;AAAA;AAE/B;;;ACxPO,MAAM,6BAKH,cAA0C;AAAA,EAC1C;AAAA,SAOD,iBAA6C,CAClD,OACkD;AAAA,IAClD,IAAI,CAAC,MAAM,UAAU,GAAG;AAAA,MACtB,MAAM,IAAI,WAAW,+DAA+D;AAAA,IACtF;AAAA,IACA,MAAM,QAAQ,IAAI,qBAEhB,MAAM,cAEN,MAAM,YACR;AAAA,IAEA,MAAM,QAAS,MAAc;AAAA,IAC7B,MAAM,YAAa,MAAc;AAAA,IAEjC,OAAO;AAAA;AAAA,EAYT,OAAO,CAAC,oBAA4B,oBAA4B,MAAqB;AAAA,IACnF,IAAI,SAAS,WAAW;AAAA,MACtB,OAAO;AAAA,IACT;AAAA,IACA,IAAI,KAAK,2BAA2B,oBAAoB,kBAAkB,GAAG;AAAA,MAC3E,MAAM,IAAI,WACR,uBAAuB,OAAO,kBAAkB,QAAQ,OACtD,kBACF,2BACF;AAAA,IACF;AAAA,IAGA,KAAK,4BAA4B;AAAA,IACjC,OAAO,MAAM,QAAQ,oBAAoB,oBAAoB,MAAM,IAAI;AAAA;AAAA,EASzE,MAAM,CAAC,MAAoB;AAAA,IACzB,IAAI,KAAK,8BAA8B,WAAW;AAAA,MAChD,KAAK,4BAA4B,CAAC,MAAM,GAAG,KAAK,yBAAyB;AAAA,IAC3E;AAAA,IAEA,OAAO,MAAM,OAAO,IAAI;AAAA;AAAA,EAW1B,wBAAwB,GAAW;AAAA,IACjC,IAAI,KAAK,8BAA8B,WAAW;AAAA,MAChD,OAAO,KAAK;AAAA,IACd;AAAA,IAEA,MAAM,cAAc,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC;AAAA,IAChD,MAAM,gBAAgB,IAAI,IACxB,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,eAAe,CAAC,CAAC,CAAC,CACtE;AAAA,IAEA,MAAM,UAAU,KAAK,UAAU,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAAA,IAEhD,MAAM,WAAW,MAAM,KAAK,aAAa,EAAE,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC;AAAA,IAEzE,IAAI,SAAS,WAAW,KAAK,MAAM,MAAM;AAAA,MACvC,MAAM,eAAe,MAAM,KAAK,KAAK,MAAM,OAAO,CAAC;AAAA,MACnD,KAAK,4BAA4B;AAAA,MACjC,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,WAAmB,CAAC;AAAA,IAE1B,OAAO,SAAS,SAAS,GAAG;AAAA,MAC1B,MAAM,IAAI,SAAS,IAAI;AAAA,MACvB,IAAI,MAAM,WAAW;AAAA,QACnB,MAAM,IAAI,MAAM,wBAAwB;AAAA,MAC1C;AAAA,MACA,MAAM,UAAU,KAAK,MAAM,IAAI,EAAE,EAAE;AAAA,MACnC,IAAI,WAAW,MAAM;AAAA,QACnB,MAAM,IAAI,MAAM,0BAA0B;AAAA,MAC5C;AAAA,MACA,SAAS,KAAK,OAAO;AAAA,MAErB,QAAQ,YAAY,QAAQ,EAAE,EAAE,IAAI,QAAQ,CAAC,MAAM,UAAU;AAAA,QAC3D,IAAI,SAAS,MAAM;AAAA,UACjB,QAAQ,YAAY,QAAQ,EAAE,EAAE,GAAG,SAAS;AAAA,UAC5C,MAAM,SAAS,cAAc,IAAI,YAAY,MAAM;AAAA,UACnD,IAAI,WAAW,WAAW;AAAA,YACxB,cAAc,IAAI,YAAY,QAAQ,SAAS,CAAC;AAAA,YAChD,IAAI,SAAS,MAAM,GAAG;AAAA,cACpB,SAAS,KAAK,CAAC,YAAY,QAAQ,CAAC,CAAC;AAAA,YACvC;AAAA,UACF,EAAO;AAAA,YACL,MAAM,IAAI,MAAM,0BAA0B;AAAA;AAAA,QAE9C;AAAA,OACD;AAAA,IACH;AAAA,IAGA,KAAK,4BAA4B;AAAA,IAKjC,OAAO;AAAA;AAAA,EAST,uBAAuB,CACrB,mBACkD;AAAA,IAClD,OAAO,qBAAqB,kBAAkB,MAAM,wBAAwB,iBAAiB,CAAC;AAAA;AAAA,EAWhG,UAAU,CAAC,oBAA4B,oBAA4B,cAA6B;AAAA,IAC9F,MAAM,WAAW,oBAAoB,oBAAoB,YAAY;AAAA,IAGrE,KAAK,4BAA4B;AAAA;AAAA,EASnC,MAAM,CAAC,cAA4B;AAAA,IACjC,MAAM,OAAO,YAAY;AAAA,IAGzB,KAAK,4BAA4B;AAAA;AAErC;;ACzKO,IAAM,2BAA2B;AAAA,EACtC,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,iCAAiC;AAAA,EACjC,YAAY;AAAA,EACZ,aAAa;AACf;;ACXO,SAAS,gBAAgB,CAAC,MAAmD;AAAA,EAClF,MAAM,UAAU,KAAK,KAAK;AAAA,EAC1B,IAAI,CAAC;AAAA,IAAS;AAAA,EAGd,IAAI;AAAA,IACF,MAAM,SAAS,KAAK,MAAM,OAAO;AAAA,IACjC,IAAI,OAAO,WAAW,YAAY,WAAW,QAAQ,CAAC,MAAM,QAAQ,MAAM,GAAG;AAAA,MAC3E,OAAO;AAAA,IACT;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EAKR,IAAI,QAAQ,OAAO;AAAA,IAAK;AAAA,EAExB,MAAM,WAAW,WAAW,OAAO;AAAA,EACnC,IAAI,aAAa;AAAA,IAAW;AAAA,EAE5B,IAAI;AAAA,IACF,MAAM,SAAS,KAAK,MAAM,QAAQ;AAAA,IAClC,IAAI,OAAO,WAAW,YAAY,WAAW,QAAQ,CAAC,MAAM,QAAQ,MAAM,GAAG;AAAA,MAC3E,OAAO;AAAA,IACT;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA;AAAA;AAQJ,SAAS,UAAU,CAAC,MAAkC;AAAA,EACpD,IAAI,SAAS;AAAA,EACb,IAAI,IAAI;AAAA,EACR,MAAM,MAAM,KAAK;AAAA,EAGjB,MAAM,QAAkB,CAAC;AAAA,EACzB,IAAI,WAAW;AAAA,EACf,IAAI,UAAU;AAAA,EAEd,IAAI,cAAc;AAAA,EAElB,OAAO,IAAI,KAAK;AAAA,IACd,MAAM,KAAK,KAAK;AAAA,IAEhB,IAAI,SAAS;AAAA,MACX,UAAU;AAAA,MACV,UAAU;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,IAEA,IAAI,OAAO,MAAM;AAAA,MACf,UAAU;AAAA,MACV,UAAU;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,IAEA,IAAI,UAAU;AAAA,MACZ,IAAI,OAAO,KAAK;AAAA,QACd,WAAW;AAAA,QACX,UAAU;AAAA,QACV;AAAA,QACA,cAAc,OAAO;AAAA,QACrB;AAAA,MACF;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,IAGA,QAAQ;AAAA,WACD;AAAA,QACH,WAAW;AAAA,QACX,UAAU;AAAA,QACV;AAAA,QACA;AAAA,WACG;AAAA,QACH,MAAM,KAAK,GAAG;AAAA,QACd,UAAU;AAAA,QACV;AAAA,QACA;AAAA,WACG;AAAA,QACH,MAAM,KAAK,GAAG;AAAA,QACd,UAAU;AAAA,QACV;AAAA,QACA;AAAA,WACG;AAAA,QACH,IAAI,MAAM,SAAS,KAAK,MAAM,MAAM,SAAS,OAAO,KAAK;AAAA,UACvD,MAAM,IAAI;AAAA,UACV,UAAU;AAAA,UACV;AAAA,UACA,cAAc,OAAO;AAAA,QACvB,EAAO;AAAA,UAEL,OAAO,WAAW,QAAQ,KAAK;AAAA;AAAA,QAEjC;AAAA,WACG;AAAA,QACH,IAAI,MAAM,SAAS,KAAK,MAAM,MAAM,SAAS,OAAO,KAAK;AAAA,UACvD,MAAM,IAAI;AAAA,UACV,UAAU;AAAA,UACV;AAAA,UACA,cAAc,OAAO;AAAA,QACvB,EAAO;AAAA,UACL,OAAO,WAAW,QAAQ,KAAK;AAAA;AAAA,QAEjC;AAAA;AAAA,QAEA,UAAU;AAAA,QACV;AAAA,QACA;AAAA;AAAA,EAEN;AAAA,EAGA,IAAI,UAAU;AAAA,IAEZ,UAAU;AAAA,EACZ;AAAA,EAEA,IAAI,MAAM,WAAW,GAAG;AAAA,IAEtB,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,WAAW,cAAc,MAAM,GAAG,KAAK;AAAA;AAOhD,SAAS,aAAa,CAAC,MAAsB;AAAA,EAE3C,IAAI,IAAI,KAAK,QAAQ;AAAA,EAGrB,IAAI,UAAU;AAAA,EACd,OAAO,SAAS;AAAA,IACd,UAAU;AAAA,IACV,MAAM,UAAU,EAAE,QAAQ;AAAA,IAG1B,IAAI,QAAQ,SAAS,GAAG,GAAG;AAAA,MACzB,IAAI,QAAQ,MAAM,GAAG,EAAE;AAAA,MACvB,UAAU;AAAA,MACV;AAAA,IACF;AAAA,IAGA,IAAI,QAAQ,SAAS,GAAG,GAAG;AAAA,MAEzB,MAAM,eAAe,QAAQ,MAAM,GAAG,EAAE,EAAE,QAAQ;AAAA,MAElD,IAAI,aAAa,SAAS,GAAG,GAAG;AAAA,QAC9B,MAAM,WAAW,aAAa,YAAY,KAAK,aAAa,SAAS,CAAC;AAAA,QACtE,IAAI,YAAY,GAAG;AAAA,UAEjB,IAAI,SAAS,aAAa,MAAM,GAAG,QAAQ,EAAE,QAAQ;AAAA,UACrD,IAAI,OAAO,SAAS,GAAG,GAAG;AAAA,YACxB,SAAS,OAAO,MAAM,GAAG,EAAE;AAAA,UAC7B;AAAA,UACA,IAAI;AAAA,UACJ,UAAU;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,MAEA,IAAI;AAAA,MACJ,UAAU;AAAA,MACV;AAAA,IACF;AAAA,IAIA,MAAM,iBAAiB,QAAQ,MAC7B,+DACF;AAAA,IACA,IAAI,gBAAgB;AAAA,MAElB,MAAM,WAAW,QAAQ,MAAM,QAAQ,YAAY,GAAG,IAAI,CAAC,EAAE,KAAK;AAAA,MAClE,IAAI;AAAA,QACF,KAAK,MAAM,QAAQ;AAAA,QAEnB,MAAM;AAAA,QAEN,IAAI,QAAQ,MAAM,GAAG,eAAe,KAAM,EAAE,QAAQ;AAAA,QACpD,IAAI,EAAE,SAAS,GAAG;AAAA,UAAG,IAAI,EAAE,MAAM,GAAG,EAAE;AAAA,QACtC,UAAU;AAAA,QACV;AAAA;AAAA,IAEJ;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAMT,SAAS,UAAU,CAAC,MAAc,OAAyB;AAAA,EACzD,IAAI,SAAS;AAAA,EACb,SAAS,IAAI,MAAM,SAAS,EAAG,KAAK,GAAG,KAAK;AAAA,IAC1C,UAAU,MAAM;AAAA,EAClB;AAAA,EACA,OAAO;AAAA;;ACrNF,SAAS,8BAA6D,CAAC,MAEnC;AAAA,EAEzC,MAAM,OAAO,OAAO,KAAK,IAAI;AAAA,EAE7B,MAAM,SAAS,KAAK,KAAK,IAAI;AAAA,EAC7B,WAAW,OAAO,MAAM;AAAA,IACtB,IAAI,KAAK,KAAK,WAAW,QAAQ;AAAA,MAC/B,QAAQ,MAAM,wCAAwC,KAAK,KAAK,KAAK,QAAQ,QAAQ,IAAI;AAAA,MACzF,MAAM,IAAI,MAAM,sCAAsC;AAAA,IACxD;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,OAAO,OAAO;AAAA,EAOlC,SAAS,cAAc,CAAC,OAA8C;AAAA,IACpE,IAAI,eAAe;AAAA,IACnB,OAAO,IAAI,MAAM,CAAC,GAAoC;AAAA,MACpD,GAAG,CAAC,SAAS,MAAM,UAAU;AAAA,QAC3B,IAAI,eAAe,KAAK,gBAAgB,KAAK,KAAK,IAAI,QAAQ;AAAA,UAC5D;AAAA,QACF;AAAA,QACA,IAAI,OAAO,SAAS,YAAY,KAAK,SAAS,IAAe,GAAG;AAAA,UAC9D,OAAO,KAAK,MAAiB;AAAA,QAC/B;AAAA,QACA,IAAI,SAAS,aAAa;AAAA,UACxB,OAAO;AAAA,QACT;AAAA,QACA,OAAO,QAAQ,IAAI,SAAS,MAAM,QAAQ;AAAA;AAAA,MAE5C,GAAG,CAAC,SAAS,MAAM,OAAO,UAAU;AAAA,QAClC,IAAI,eAAe,KAAK,gBAAgB,KAAK,KAAK,IAAI,QAAQ;AAAA,UAC5D,OAAO;AAAA,QACT;AAAA,QACA,IAAI,OAAO,SAAS,YAAY,KAAK,SAAS,IAAe,GAAG;AAAA,UAC9D,KAAK,MAAiB,gBAAgB;AAAA,UACtC,OAAO;AAAA,QACT;AAAA,QACA,IAAI,SAAS,aAAa;AAAA,UACxB,eAAe;AAAA,UACf,OAAO;AAAA,QACT;AAAA,QACA,OAAO,QAAQ,IAAI,SAAS,MAAM,OAAO,QAAQ;AAAA;AAAA,MAEnD,OAAO,CAAC,SAAS;AAAA,QACf,OAAO;AAAA;AAAA,MAET,wBAAwB,CAAC,SAAS,MAAM;AAAA,QACtC,IAAI,OAAO,SAAS,YAAY,KAAK,SAAS,IAAe,GAAG;AAAA,UAC9D,OAAO,EAAE,YAAY,MAAM,cAAc,KAAK;AAAA,QAChD;AAAA,QACA;AAAA;AAAA,IAEJ,CAAC;AAAA;AAAA,EAGH,SAAS,YAAY,GAAc;AAAA,IAEjC,IAAI,eAAe;AAAA,IAGnB,MAAM,SAAS,eAAe,CAAC;AAAA,IAE/B,MAAM,MAAM;AAAA,UACN,MAAM,GAAG;AAAA,QACX,OAAO,KAAK,KAAK,IAAI;AAAA;AAAA,MAKvB,IAAI,GAAsB;AAAA,QACxB,IAAI,eAAe,QAAQ;AAAA,UACzB,OAAO,eAAe;AAAA,UACtB;AAAA,UACA,OAAO,EAAE,MAAM,OAAO,OAAO,OAAO;AAAA,QACtC,EAAO;AAAA,UACL,OAAO,EAAE,MAAM,MAAM,OAAO,UAAiB;AAAA;AAAA;AAAA,OAMhD,OAAO,SAAS,GAAgB;AAAA,QAE/B,eAAe;AAAA,QACf,OAAO,eAAe;AAAA,QACtB,OAAO;AAAA;AAAA,IAEX;AAAA,IACA,OAAO;AAAA;AAAA,EAIT,SAAS,YAAY,CAAC,OAAe,KAAiB;AAAA,IACpD,WAAW,OAAO,MAAM;AAAA,MACtB,IAAI,KAAK,KAAK,WAAW,IAAI;AAAA,QAAM,OAAO;AAAA,IAC5C;AAAA,IACA,OAAO;AAAA;AAAA,EAGT,OAAO,IAAI,MAAM,CAAC,GAAe;AAAA,IAC/B,GAAG,CAAC,QAAQ,MAAM,UAAU;AAAA,MAE1B,IAAI,SAAS,UAAU;AAAA,QACrB,OAAO,KAAK,KAAK,IAAI;AAAA,MACvB;AAAA,MAGA,IAAI,SAAS,UAAU;AAAA,QACrB,OAAO,QAAS,GAAG;AAAA,UACjB,OAAO,aAAa;AAAA;AAAA,MAExB;AAAA,MAGA,IAAI,SAAS,WAAW;AAAA,QACtB,OAAO,QAAS,GAAG;AAAA,UACjB,WAAW,OAAO,MAAM;AAAA,YACtB,KAAK,KAAK,QAAQ;AAAA,UACpB;AAAA,UACA,OAAO;AAAA;AAAA,MAEX;AAAA,MAGA,IAAI,SAAS,QAAQ;AAAA,QACnB,OAAO,QAAS,IAAI,MAAW;AAAA,UAC7B,WAAW,QAAQ,MAAM;AAAA,YACvB,WAAW,OAAO,MAAM;AAAA,cACtB,KAAK,KAAK,KAAK,KAAK,IAAI;AAAA,YAC1B;AAAA,UACF;AAAA,UACA,OAAO,KAAK,KAAK,IAAI;AAAA;AAAA,MAEzB;AAAA,MAGA,IAAI,SAAS,OAAO;AAAA,QAClB,OAAO,QAAS,GAAG;AAAA,UACjB,MAAM,MAAM,KAAK,KAAK,IAAI;AAAA,UAC1B,IAAI,QAAQ;AAAA,YAAG;AAAA,UACf,MAAM,YAAY,CAAC;AAAA,UAEnB,WAAW,OAAO,MAAM;AAAA,YACtB,UAAU,OAAO,KAAK,KAAK,IAAI;AAAA,UACjC;AAAA,UACA,OAAO;AAAA;AAAA,MAEX;AAAA,MAGA,IAAI,SAAS,WAAW;AAAA,QACtB,OAAO,QAAS,IAAI,MAAW;AAAA,UAE7B,SAAS,IAAI,KAAK,SAAS,EAAG,KAAK,GAAG,KAAK;AAAA,YACzC,MAAM,OAAO,KAAK;AAAA,YAClB,WAAW,OAAO,MAAM;AAAA,cACtB,KAAK,KAAK,QAAQ,KAAK,IAAI;AAAA,YAC7B;AAAA,UACF;AAAA,UACA,OAAO,KAAK,KAAK,IAAI;AAAA;AAAA,MAEzB;AAAA,MAGA,IAAI,SAAS,SAAS;AAAA,QACpB,OAAO,QAAS,GAAG;AAAA,UACjB,IAAI,KAAK,KAAK,IAAI,WAAW;AAAA,YAAG;AAAA,UAChC,MAAM,aAAa,CAAC;AAAA,UACpB,WAAW,OAAO,MAAM;AAAA,YACtB,WAAW,OAAO,KAAK,KAAK,MAAM;AAAA,UACpC;AAAA,UACA,OAAO;AAAA;AAAA,MAEX;AAAA,MAGA,IAAI,SAAS,UAAU;AAAA,QACrB,OAAO,QAAS,CAAC,OAAe,gBAAyB,OAAY;AAAA,UACnE,MAAM,MAAM,KAAK,KAAK,IAAI;AAAA,UAE1B,IAAI,QAAQ,GAAG;AAAA,YACb,QAAQ,MAAM;AAAA,YACd,IAAI,QAAQ;AAAA,cAAG,QAAQ;AAAA,UACzB;AAAA,UACA,IAAI,gBAAgB,WAAW;AAAA,YAC7B,cAAc,MAAM;AAAA,UACtB;AAAA,UAEA,MAAM,eAA2C,CAAC;AAAA,UAClD,WAAW,OAAO,MAAM;AAAA,YACtB,aAAa,OAAO,KAAK,KAAK,OAC5B,OACA,aACA,GAAG,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,CAClC;AAAA,UACF;AAAA,UAEA,MAAM,UAAe,CAAC;AAAA,UACtB,SAAS,IAAI,EAAG,IAAI,aAAa,KAAK;AAAA,YACpC,MAAM,MAAM,CAAC;AAAA,YACb,WAAW,OAAO,MAAM;AAAA,cACtB,IAAI,OAAO,aAAa,KAAK;AAAA,YAC/B;AAAA,YACA,QAAQ,KAAK,GAAG;AAAA,UAClB;AAAA,UACA,OAAO;AAAA;AAAA,MAEX;AAAA,MAKA,IAAI,SAAS,QAAQ;AAAA,QACnB,OAAO,QAAS,CAAC,WAAoC;AAAA,UAEnD,MAAM,OAAO,CAAC,GAAG,QAAQ;AAAA,UAEzB,KAAK,KAAK,SAAS;AAAA,UAEnB,WAAW,OAAO,MAAM;AAAA,YACtB,KAAK,OAAO,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI;AAAA,UACxC;AAAA,UACA,OAAO;AAAA;AAAA,MAEX;AAAA,MAGA,IAAI,SAAS,YAAY;AAAA,QACvB,OAAO,QAAS,CAAC,eAAkB,WAAoB;AAAA,UACrD,MAAM,MAAM,KAAK,KAAK,IAAI;AAAA,UAC1B,IAAI,QAAQ,aAAa;AAAA,UACzB,IAAI,QAAQ,GAAG;AAAA,YACb,QAAQ,KAAK,IAAI,GAAG,MAAM,KAAK;AAAA,UACjC;AAAA,UACA,SAAS,IAAI,MAAO,IAAI,KAAK,KAAK;AAAA,YAChC,IAAI,aAAa,GAAG,aAAa;AAAA,cAAG,OAAO;AAAA,UAC7C;AAAA,UACA,OAAO;AAAA;AAAA,MAEX;AAAA,MACA,IAAI,SAAS,WAAW;AAAA,QACtB,OAAO,QAAS,CAAC,eAAkB,WAAoB;AAAA,UACrD,MAAM,MAAM,KAAK,KAAK,IAAI;AAAA,UAC1B,IAAI,QAAQ,aAAa;AAAA,UACzB,IAAI,QAAQ,GAAG;AAAA,YACb,QAAQ,KAAK,IAAI,GAAG,MAAM,KAAK;AAAA,UACjC;AAAA,UACA,SAAS,IAAI,MAAO,IAAI,KAAK,KAAK;AAAA,YAChC,IAAI,aAAa,GAAG,aAAa;AAAA,cAAG,OAAO;AAAA,UAC7C;AAAA,UACA,OAAO;AAAA;AAAA,MAEX;AAAA,MACA,IAAI,SAAS,eAAe;AAAA,QAC1B,OAAO,QAAS,CAAC,eAAkB,WAAoB;AAAA,UACrD,MAAM,MAAM,KAAK,KAAK,IAAI;AAAA,UAE1B,IAAI,QAAQ,aAAa,MAAM;AAAA,UAC/B,IAAI,QAAQ,GAAG;AAAA,YACb,QAAQ,MAAM;AAAA,UAChB;AAAA,UACA,SAAS,IAAI,MAAO,KAAK,GAAG,KAAK;AAAA,YAC/B,IAAI,aAAa,GAAG,aAAa;AAAA,cAAG,OAAO;AAAA,UAC7C;AAAA,UACA,OAAO;AAAA;AAAA,MAEX;AAAA,MAGA,IAAI,SAAS,WAAW;AAAA,QACtB,OAAO,QAAS,CAAC,UAAyD,SAAe;AAAA,UACvF,OAAO,CAAC,GAAG,QAAQ,EAAE,QAAQ,UAAU,OAAO;AAAA;AAAA,MAElD;AAAA,MACA,IAAI,SAAS,OAAO;AAAA,QAClB,OAAO,QAAS,CAAC,UAAwD,SAAe;AAAA,UACtF,OAAO,CAAC,GAAG,QAAQ,EAAE,IAAI,UAAU,OAAO;AAAA;AAAA,MAE9C;AAAA,MACA,IAAI,SAAS,UAAU;AAAA,QACrB,OAAO,QAAS,CACd,UACA,SACA;AAAA,UACA,OAAO,CAAC,GAAG,QAAQ,EAAE,OAAO,UAAU,OAAO;AAAA;AAAA,MAEjD;AAAA,MACA,IAAI,SAAS,UAAU;AAAA,QACrB,OAAO,QAAS,CACd,UACA,cACA;AAAA,UACA,OAAO,CAAC,GAAG,QAAQ,EAAE,OAAO,UAAU,YAAY;AAAA;AAAA,MAEtD;AAAA,MACA,IAAI,SAAS,QAAQ;AAAA,QACnB,OAAO,QAAS,CACd,UACA,SACA;AAAA,UACA,OAAO,CAAC,GAAG,QAAQ,EAAE,KAAK,UAAU,OAAO;AAAA;AAAA,MAE/C;AAAA,MACA,IAAI,SAAS,SAAS;AAAA,QACpB,OAAO,QAAS,CACd,UACA,SACA;AAAA,UACA,OAAO,CAAC,GAAG,QAAQ,EAAE,MAAM,UAAU,OAAO;AAAA;AAAA,MAEhD;AAAA,MACA,IAAI,SAAS,QAAQ;AAAA,QACnB,OAAO,QAAS,CACd,UACA,SACA;AAAA,UACA,OAAO,CAAC,GAAG,QAAQ,EAAE,KAAK,UAAU,OAAO;AAAA;AAAA,MAE/C;AAAA,MAGA,IAAI,OAAO,SAAS,YAAY,CAAC,MAAM,OAAO,IAAI,CAAC,GAAG;AAAA,QACpD,MAAM,QAAQ,OAAO,IAAI;AAAA,QACzB,IAAI,QAAQ,KAAK,SAAS,KAAK,KAAK,IAAI,QAAQ;AAAA,UAC9C;AAAA,QACF;AAAA,QACA,OAAO,eAAe,KAAK;AAAA,MAC7B;AAAA,MAGA,IAAI,SAAS,OAAO,UAAU;AAAA,QAC5B,OAAO,UAAU,GAAG;AAAA,UAClB,SAAS,IAAI,EAAG,IAAI,KAAK,KAAK,IAAI,QAAQ,KAAK;AAAA,YAC7C,MAAM,eAAe,CAAC;AAAA,UACxB;AAAA;AAAA,MAEJ;AAAA,MAGA,OAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAAA;AAAA,IAE3C,GAAG,CAAC,QAAQ,MAAM,OAAO,UAAU;AAAA,MAEjC,IAAI,OAAO,SAAS,YAAY,CAAC,MAAM,OAAO,IAAI,CAAC,GAAG;AAAA,QACpD,MAAM,QAAQ,OAAO,IAAI;AAAA,QACzB,IAAI,UAAU,KAAK,KAAK,IAAI,QAAQ;AAAA,UAElC,WAAW,OAAO,MAAM;AAAA,YACtB,KAAK,KAAK,KAAK,MAAM,IAAI;AAAA,UAC3B;AAAA,UACA,OAAO;AAAA,QACT,EAAO,SAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ;AAAA,UAEvC,WAAW,OAAO,MAAM;AAAA,YACtB,IAAI,MAAM,eAAe,GAAG,GAAG;AAAA,cAC7B,KAAK,KAAK,SAAS,MAAM;AAAA,YAC3B;AAAA,UACF;AAAA,UACA,OAAO;AAAA,QACT;AAAA,MACF;AAAA,MACA,OAAO,QAAQ,IAAI,QAAQ,MAAM,OAAO,QAAQ;AAAA;AAAA,IAGlD,cAAc,CAAC,QAAQ,MAAM;AAAA,MAC3B,IAAI,OAAO,SAAS,YAAY,CAAC,MAAM,OAAO,IAAI,CAAC,GAAG;AAAA,QACpD,MAAM,QAAQ,OAAO,IAAI;AAAA,QACzB,IAAI,SAAS,KAAK,QAAQ,KAAK,KAAK,IAAI,QAAQ;AAAA,UAE9C,WAAW,OAAO,MAAM;AAAA,YAEtB,KAAK,KAAK,OAAO,OAAO,CAAC;AAAA,UAC3B;AAAA,UACA,OAAO;AAAA,QACT;AAAA,MACF;AAAA,MACA,OAAO,QAAQ,eAAe,QAAQ,IAAI;AAAA;AAAA,EAE9C,CAAC;AAAA;;AChXI,SAAS,YAAY,CAAC,OAAqC;AAAA,EAChE,OAAO,YAAY,OAAO,KAAK,KAAK,EAAE,iBAAiB;AAAA;AAIzD,IAAM,iBAAiB;AAEvB,IAAM,0BAA0B;AAAA,KAC3B;AAAA,EACH,aAAa;AAAA,IACX;AAAA,MACE,SAAS,EAAE,MAAM,SAAS,QAAQ,0BAA0B;AAAA,MAC5D,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,SAAS,EAAE,MAAM,SAAS,QAAQ,0BAA0B;AAAA,MAC5D,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,SAAS,EAAE,MAAM,SAAS,QAAQ,0BAA0B;AAAA,MAC5D,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,SAAS,EAAE,MAAM,SAAS,QAAQ,wBAAwB;AAAA,MAC1D,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,SAAS,EAAE,MAAM,SAAS,QAAQ,uBAAuB;AAAA,MACzD,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,SAAS,EAAE,MAAM,SAAS,QAAQ,wBAAwB;AAAA,MAC1D,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,SAAS,EAAE,MAAM,SAAS,QAAQ,yBAAyB;AAAA,MAC3D,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,SAAS,EAAE,MAAM,SAAS,QAAQ,aAAa;AAAA,MAC/C,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AASO,IAAM,mBAAmB,CAAC,cAAuC,CAAC,MAAM;AAAA,EAC7E,OAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,aAAa;AAAA,OACV;AAAA,EACL;AAAA;;;ACvFK,IAAM,aAAa;AAAA,EACxB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AACV;AASO,IAAM,eAAe,CAAC,cAAuC,CAAC,OAClE;AAAA,EACC,MAAM;AAAA,EACN,YAAY;AAAA,IACV,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,MAAM,OAAO,OAAO,UAAU;AAAA,MAC9B,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,IACA,MAAM,iBAAiB;AAAA,MACrB,OAAO;AAAA,MACP,aAAa;AAAA,IACf,CAAC;AAAA,IACD,OAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO,EAAE,MAAM,SAAS;AAAA,MACxB,OAAO;AAAA,MACP,aAAa;AAAA,MACb,UAAU;AAAA,MACV,SAAS,CAAC,CAAC;AAAA,IACb;AAAA,IACA,YAAY;AAAA,MACV,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,UAAU,CAAC,MAAM;AAAA,EACjB,sBAAsB;AAAA,KACnB;AACL;;AClDF,IAAM,aAAqC;AAAA,EACzC,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,WAAW;AAAA,EACX,YAAY;AACd;AAEA,SAAS,YAAY,CAAC,KAAyB;AAAA,EAC7C,OAAO,WAAW,IAAI,YAAY,SAAS;AAAA;AAO7C,SAAS,iBAAiB,CAAC,SAAwD;AAAA,EACjF,IAAI,OAAO,QAAQ;AAAA,EACnB,SAAS,IAAI,EAAG,IAAI,QAAQ,QAAQ,KAAK;AAAA,IACvC,IAAI,aAAa,QAAQ,EAAE,IAAI,aAAa,IAAI;AAAA,MAAG,OAAO,QAAQ;AAAA,EACpE;AAAA,EACA,OAAO,KAAK;AAAA;AAQP,SAAS,oBAAoB,CAAC,SAAuB,QAA8B;AAAA,EACxF,MAAM,OAAO,kBAAkB,OAAO;AAAA,EACtC,MAAM,SAAS,IAAI,KAAK,OAAO,MAAM;AAAA,EACrC,SAAS,IAAI,EAAG,IAAI,OAAO,QAAQ;AAAA,IAAK,OAAO,KAAK,OAAO;AAAA,EAC3D,OAAO;AAAA;;AChCF,SAAS,gBAAgB,CAAC,GAAe,GAAuB;AAAA,EACrE,IAAI,EAAE,WAAW,EAAE,QAAQ;AAAA,IACzB,MAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAAA,EACA,IAAI,aAAa;AAAA,EACjB,IAAI,QAAQ;AAAA,EACZ,IAAI,QAAQ;AAAA,EACZ,SAAS,IAAI,EAAG,IAAI,EAAE,QAAQ,KAAK;AAAA,IACjC,cAAc,EAAE,KAAK,EAAE;AAAA,IACvB,SAAS,EAAE,KAAK,EAAE;AAAA,IAClB,SAAS,EAAE,KAAK,EAAE;AAAA,EACpB;AAAA,EACA,MAAM,cAAc,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK;AAAA,EACtD,IAAI,gBAAgB,GAAG;AAAA,IACrB,OAAO;AAAA,EACT;AAAA,EACA,OAAO,aAAa;AAAA;AASf,SAAS,iBAAiB,CAAC,GAAe,GAAuB;AAAA,EACtE,IAAI,EAAE,WAAW,EAAE,QAAQ;AAAA,IACzB,MAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAAA,EAGA,IAAI,YAAY,EAAE;AAAA,EAClB,SAAS,IAAI,EAAG,IAAI,EAAE,QAAQ,KAAK;AAAA,IACjC,YAAY,KAAK,IAAI,WAAW,EAAE,IAAI,EAAE,EAAE;AAAA,EAC5C;AAAA,EAGA,MAAM,QAAQ,YAAY,IAAI,CAAC,YAAY;AAAA,EAE3C,IAAI,SAAS;AAAA,EACb,IAAI,SAAS;AAAA,EAEb,SAAS,IAAI,EAAG,IAAI,EAAE,QAAQ,KAAK;AAAA,IACjC,MAAM,WAAW,EAAE,KAAK;AAAA,IACxB,MAAM,WAAW,EAAE,KAAK;AAAA,IACxB,UAAU,KAAK,IAAI,UAAU,QAAQ;AAAA,IACrC,UAAU,KAAK,IAAI,UAAU,QAAQ;AAAA,EACvC;AAAA,EAEA,OAAO,WAAW,IAAI,IAAI,SAAS;AAAA;AAQ9B,SAAS,eAAe,CAAC,GAAe,GAAuB;AAAA,EACpE,IAAI,EAAE,WAAW,EAAE,QAAQ;AAAA,IACzB,MAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAAA,EAEA,IAAI,cAAc;AAAA,EAElB,SAAS,IAAI,EAAG,IAAI,EAAE,QAAQ,KAAK;AAAA,IACjC,IAAI,EAAE,OAAO,EAAE,IAAI;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,cAAc,EAAE;AAAA;AAOlB,SAAS,iBAAiB,CAAC,GAAe,GAAuB;AAAA,EACtE,OAAO,IAAI,gBAAgB,GAAG,CAAC;AAAA;;AC/E1B,SAAS,SAAS,CAAC,KAAoC;AAAA,EAE5D,OAAO,KAAK,KAAK,IAAI,OAAO,CAAC,KAAK,QAAQ,MAAM,MAAM,KAAK,CAAC,CAAC;AAAA;AAMxD,SAAS,KAAK,CAAC,MAAkB,MAA0B;AAAA,EAChE,IAAI,KAAK,WAAW,KAAK,QAAQ;AAAA,IAC/B,MAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AAAA,EAEA,OAAO,KAAK,OAAO,CAAC,KAAK,KAAK,MAAM,MAAM,MAAM,KAAK,IAAI,CAAC;AAAA;AAUrD,SAAS,SAAS,CAAC,QAAoB,cAAc,MAAM,UAAU,OAAmB;AAAA,EAC7F,MAAM,MAAM,UAAU,MAAM;AAAA,EAE5B,IAAI,QAAQ,GAAG;AAAA,IACb,IAAI,aAAa;AAAA,MACf,MAAM,IAAI,MAAM,iCAAiC;AAAA,IACnD;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,aAAa,MAAM,KAAK,MAAM,EAAE,IAAI,CAAC,QAAQ,OAAO,GAAG,IAAI,GAAG;AAAA,EAEpE,IAAI,SAAS;AAAA,IACX,OAAO,IAAI,aAAa,UAAU;AAAA,EACpC;AAAA,EAGA,IAAI,kBAAkB,cAAc;AAAA,IAClC,OAAO,IAAI,aAAa,UAAU;AAAA,EACpC;AAAA,EACA,IAAI,kBAAkB,cAAc;AAAA,IAClC,OAAO,IAAI,aAAa,UAAU;AAAA,EACpC;AAAA,EACA,IAAI,kBAAkB,cAAc;AAAA,IAClC,OAAO,IAAI,aAAa,UAAU;AAAA,EACpC;AAAA,EACA,IAAI,kBAAkB,WAAW;AAAA,IAC/B,OAAO,IAAI,UAAU,UAAU;AAAA,EACjC;AAAA,EACA,IAAI,kBAAkB,YAAY;AAAA,IAChC,OAAO,IAAI,WAAW,UAAU;AAAA,EAClC;AAAA,EACA,IAAI,kBAAkB,YAAY;AAAA,IAChC,OAAO,IAAI,WAAW,UAAU;AAAA,EAClC;AAAA,EACA,IAAI,kBAAkB,aAAa;AAAA,IACjC,OAAO,IAAI,YAAY,UAAU;AAAA,EACnC;AAAA,EAEA,OAAO,IAAI,aAAa,UAAU;AAAA;AAU7B,SAAS,oBAAoB,CAAC,QAAkB,cAAc,OAAiB;AAAA,EACpF,MAAM,OAAO,UAAU,MAAM;AAAA,EAE7B,IAAI,SAAS,GAAG;AAAA,IACd,IAAI,aAAa;AAAA,MACf,MAAM,IAAI,MAAM,iCAAiC;AAAA,IACnD;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI;AAAA;;ACpF5B,MAAM,cAAc;AAAA,EACjB,UAA+B,IAAI;AAAA,EACnC,eAA2C,IAAI;AAAA,EAE/C,kBAA4C,IAAI;AAAA,EAChD,wBAAkD,IAAI;AAAA,EACtD,0BAAoD,IAAI;AAAA,EAExD,gBAA2C,IAAI;AAAA,EAE/C,mBAA+C,IAAI;AAAA,EAE3D,cAAc,CAAC,MAAc,iBAAgD;AAAA,IAC3E,IAAI,KAAK,QAAQ,IAAI,IAAI,GAAG;AAAA,MAC1B,MAAM,IAAI,MAAM,UAAU,6BAA6B;AAAA,IACzD;AAAA,IACA,IAAI,KAAK,cAAc,IAAI,IAAI,GAAG;AAAA,MAChC,MAAM,IAAI,MAAM,UAAU,6BAA6B;AAAA,IACzD;AAAA,IACA,IAAI,OAAO,oBAAoB,YAAY;AAAA,MACzC,KAAK,cAAc,IAAI,MAAM,eAAe;AAAA,IAC9C,EAAO;AAAA,MACL,KAAK,qBAAqB,MAAM,eAAe;AAAA;AAAA;AAAA,EAI3C,oBAAoB,CAAC,MAAc,QAAsB;AAAA,IAC/D,KAAK,QAAQ,IAAI,MAAM,MAAM;AAAA,IAC7B,OAAO,iBAAiB,SAAS,CAAC,UAAU;AAAA,MAC1C,QAAQ,MAAM,iBAAiB,MAAM,SAAS,MAAM,MAAM,UAAU,SAAS,MAAM,MAAM;AAAA,KAC1F;AAAA,IACD,OAAO,iBAAiB,gBAAgB,CAAC,UAAU;AAAA,MACjD,QAAQ,MAAM,yBAAyB,KAAK;AAAA,KAC7C;AAAA,IAED,MAAM,eAAe,IAAI,QAAc,CAAC,YAAY;AAAA,MAClD,MAAM,cAAc,CAAC,UAAwB;AAAA,QAC3C,IAAI,MAAM,MAAM,SAAS,SAAS;AAAA,UAChC,OAAO,oBAAoB,WAAW,WAAW;AAAA,UACjD,KAAK,gBAAgB,IAAI,MAAM,IAAI,IAAI,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC;AAAA,UAClE,KAAK,sBAAsB,IAAI,MAAM,IAAI,IAAI,MAAM,KAAK,mBAAmB,CAAC,CAAC,CAAC;AAAA,UAC9E,KAAK,wBAAwB,IAAI,MAAM,IAAI,IAAI,MAAM,KAAK,qBAAqB,CAAC,CAAC,CAAC;AAAA,UAClF,QAAQ;AAAA,QACV;AAAA;AAAA,MAGF,OAAO,iBAAiB,WAAW,WAAW;AAAA,KAC/C;AAAA,IAED,KAAK,aAAa,IAAI,MAAM,YAAY;AAAA;AAAA,OAO5B,kBAAiB,CAAC,MAA6B;AAAA,IAC3D,IAAI,KAAK,QAAQ,IAAI,IAAI,GAAG;AAAA,MAC1B,MAAM,KAAK,aAAa,IAAI,IAAI;AAAA,MAChC;AAAA,IACF;AAAA,IACA,MAAM,UAAU,KAAK,cAAc,IAAI,IAAI;AAAA,IAC3C,IAAI,CAAC,SAAS;AAAA,MACZ,MAAM,IAAI,MAAM,UAAU,iBAAiB;AAAA,IAC7C;AAAA,IACA,IAAI,OAAO,KAAK,iBAAiB,IAAI,IAAI;AAAA,IACzC,IAAI,CAAC,MAAM;AAAA,MACT,QAAQ,YAAY;AAAA,QAClB,MAAM,IAAI,KAAK,cAAc,IAAI,IAAI;AAAA,QACrC,KAAK,cAAc,OAAO,IAAI;AAAA,QAC9B,MAAM,SAAS,EAAE;AAAA,QACjB,KAAK,qBAAqB,MAAM,MAAM;AAAA,SACrC;AAAA,MACH,KAAK,iBAAiB,IAAI,MAAM,IAAI;AAAA,IACtC;AAAA,IACA,MAAM;AAAA,IACN,MAAM,KAAK,aAAa,IAAI,IAAI;AAAA,IAChC,KAAK,iBAAiB,OAAO,IAAI;AAAA;AAAA,EAGnC,SAAS,CAAC,MAAsB;AAAA,IAC9B,MAAM,SAAS,KAAK,QAAQ,IAAI,IAAI;AAAA,IACpC,IAAI,CAAC;AAAA,MAAQ,MAAM,IAAI,MAAM,UAAU,iBAAiB;AAAA,IACxD,OAAO;AAAA;AAAA,OAGH,mBAAqB,CACzB,YACA,cACA,MACA,SAIY;AAAA,IACZ,MAAM,KAAK,kBAAkB,UAAU;AAAA,IACvC,MAAM,SAAS,KAAK,QAAQ,IAAI,UAAU;AAAA,IAC1C,IAAI,CAAC;AAAA,MAAQ,MAAM,IAAI,MAAM,UAAU,uBAAuB;AAAA,IAC9D,MAAM,KAAK,aAAa,IAAI,UAAU;AAAA,IAEtC,MAAM,iBAAiB,KAAK,gBAAgB,IAAI,UAAU;AAAA,IAC1D,IAAI,kBAAkB,CAAC,eAAe,IAAI,YAAY,GAAG;AAAA,MACvD,MAAM,IAAI,MAAM,aAAa,8CAA8C,cAAc;AAAA,IAC3F;AAAA,IAEA,OAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAAA,MACtC,MAAM,YAAY,OAAO,WAAW;AAAA,MAEpC,MAAM,gBAAgB,CAAC,UAAwB;AAAA,QAC7C,QAAQ,IAAI,MAAM,SAAS,MAAM;AAAA,QACjC,IAAI,OAAO;AAAA,UAAW;AAAA,QACtB,IAAI,SAAS,cAAc,SAAS,YAAY;AAAA,UAC9C,QAAQ,WAAW,KAAK,UAAU,KAAK,SAAS,KAAK,OAAO;AAAA,UAC5D,UAAU,EAAE,MACV,UAAU,uBAAuB,0BAA0B,KAAK,cAChE,EAAE,KAAK,CACT;AAAA,QACF,EAAO,SAAI,SAAS,YAAY;AAAA,UAC9B,QAAQ;AAAA,UACR,UAAU,EAAE,MAAM,UAAU,uBAAuB,0BAA0B,EAAE,KAAK,CAAC;AAAA,UACrF,QAAQ,IAAI;AAAA,QACd,EAAO,SAAI,SAAS,SAAS;AAAA,UAC3B,QAAQ;AAAA,UACR,UAAU,EAAE,MAAM,UAAU,uBAAuB,uBAAuB,EAAE,KAAK,CAAC;AAAA,UAClF,OAAO,IAAI,MAAM,IAAI,CAAC;AAAA,QACxB;AAAA;AAAA,MAGF,MAAM,cAAc,MAAM;AAAA,QACxB,OAAO,YAAY,EAAE,IAAI,WAAW,MAAM,QAAQ,CAAC;AAAA,QACnD,UAAU,EAAE,KAAK,UAAU,uBAAuB,uBAAuB;AAAA;AAAA,MAG3E,MAAM,UAAU,MAAM;AAAA,QACpB,OAAO,oBAAoB,WAAW,aAAa;AAAA,QACnD,SAAS,QAAQ,oBAAoB,SAAS,WAAW;AAAA;AAAA,MAG3D,OAAO,iBAAiB,WAAW,aAAa;AAAA,MAEhD,IAAI,SAAS,QAAQ;AAAA,QACnB,QAAQ,OAAO,iBAAiB,SAAS,aAAa,EAAE,MAAM,KAAK,CAAC;AAAA,MACtE;AAAA,MAOA,MAAM,UAAU,EAAE,IAAI,WAAW,MAAM,QAAQ,cAAc,KAAK;AAAA,MAClE,OAAO,YAAY,OAAO;AAAA,MAC1B,UAAU,EAAE,KAAK,UAAU,uBAAuB,sBAAsB;AAAA,KACzE;AAAA;AAAA,OAaG,2BAA6B,CACjC,YACA,cACA,MACwB;AAAA,IACxB,MAAM,KAAK,kBAAkB,UAAU;AAAA,IACvC,MAAM,SAAS,KAAK,QAAQ,IAAI,UAAU;AAAA,IAC1C,IAAI,CAAC;AAAA,MAAQ;AAAA,IACb,MAAM,KAAK,aAAa,IAAI,UAAU;AAAA,IAGtC,MAAM,gBAAgB,KAAK,wBAAwB,IAAI,UAAU;AAAA,IACjE,IAAI,iBAAiB,CAAC,cAAc,IAAI,YAAY;AAAA,MAAG;AAAA,IAEvD,OAAO,IAAI,QAAQ,CAAC,YAAY;AAAA,MAC9B,MAAM,YAAY,OAAO,WAAW;AAAA,MAEpC,MAAM,gBAAgB,CAAC,UAAwB;AAAA,QAC7C,QAAQ,IAAI,MAAM,SAAS,MAAM;AAAA,QACjC,IAAI,OAAO;AAAA,UAAW;AAAA,QACtB,IAAI,SAAS,YAAY;AAAA,UACvB,QAAQ;AAAA,UACR,QAAQ,IAAqB;AAAA,QAC/B,EAAO,SAAI,SAAS,SAAS;AAAA,UAC3B,QAAQ;AAAA,UACR,QAAQ,SAAS;AAAA,QACnB;AAAA;AAAA,MAGF,MAAM,UAAU,MAAM;AAAA,QACpB,OAAO,oBAAoB,WAAW,aAAa;AAAA;AAAA,MAGrD,OAAO,iBAAiB,WAAW,aAAa;AAAA,MAEhD,MAAM,UAAU,EAAE,IAAI,WAAW,MAAM,QAAQ,cAAc,MAAM,UAAU,KAAK;AAAA,MAElF,OAAO,YAAY,OAAO;AAAA,MAC1B,UAAU,EAAE,KAAK,UAAU,gCAAgC,sBAAsB;AAAA,KAClF;AAAA;AAAA,SAeI,wBAA2B,CAChC,YACA,cACA,MACA,SACmB;AAAA,IACnB,MAAM,KAAK,kBAAkB,UAAU;AAAA,IACvC,MAAM,SAAS,KAAK,QAAQ,IAAI,UAAU;AAAA,IAC1C,IAAI,CAAC;AAAA,MAAQ,MAAM,IAAI,MAAM,UAAU,uBAAuB;AAAA,IAC9D,MAAM,KAAK,aAAa,IAAI,UAAU;AAAA,IAGtC,MAAM,cAAc,KAAK,sBAAsB,IAAI,UAAU;AAAA,IAC7D,MAAM,WAAW,KAAK,gBAAgB,IAAI,UAAU;AAAA,IACpD,IAAI,eAAe,YAAY,CAAC,YAAY,IAAI,YAAY,KAAK,CAAC,SAAS,IAAI,YAAY,GAAG;AAAA,MAC5F,MAAM,IAAI,MAAM,aAAa,8CAA8C,cAAc;AAAA,IAC3F;AAAA,IAEA,MAAM,YAAY,OAAO,WAAW;AAAA,IAQpC,MAAM,QAAqB,CAAC;AAAA,IAC5B,IAAI,UAA0C;AAAA,IAE9C,MAAM,SAAS,MAAM;AAAA,MACnB,IAAI,SAAS;AAAA,QACX,MAAM,UAAU;AAAA,QAChB,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA;AAAA,IAGF,MAAM,gBAAgB,CAAC,UAAwB;AAAA,MAC7C,QAAQ,IAAI,MAAM,SAAS,MAAM;AAAA,MACjC,IAAI,OAAO;AAAA,QAAW;AAAA,MAEtB,IAAI,SAAS,gBAAgB;AAAA,QAC3B,MAAM,KAAK,EAAE,MAAM,SAAS,KAAK,CAAC;AAAA,QAClC,OAAO;AAAA,MACT,EAAO,SAAI,SAAS,YAAY;AAAA,QAC9B,MAAM,KAAK,EAAE,MAAM,OAAO,CAAC;AAAA,QAC3B,OAAO;AAAA,MACT,EAAO,SAAI,SAAS,SAAS;AAAA,QAC3B,MAAM,KAAK,EAAE,MAAM,SAAS,OAAO,IAAI,MAAM,IAAI,EAAE,CAAC;AAAA,QACpD,OAAO;AAAA,MACT;AAAA;AAAA,IAGF,MAAM,cAAc,MAAM;AAAA,MACxB,OAAO,YAAY,EAAE,IAAI,WAAW,MAAM,QAAQ,CAAC;AAAA,MACnD,UAAU,EAAE,KAAK,UAAU,8BAA8B,uBAAuB;AAAA;AAAA,IAGlF,MAAM,UAAU,MAAM;AAAA,MACpB,OAAO,oBAAoB,WAAW,aAAa;AAAA,MACnD,SAAS,QAAQ,oBAAoB,SAAS,WAAW;AAAA;AAAA,IAG3D,OAAO,iBAAiB,WAAW,aAAa;AAAA,IAEhD,IAAI,SAAS,QAAQ;AAAA,MACnB,IAAI,QAAQ,OAAO,SAAS;AAAA,QAC1B,QAAQ;AAAA,QACR,MAAM,IAAI,MAAM,mBAAmB;AAAA,MACrC;AAAA,MACA,QAAQ,OAAO,iBAAiB,SAAS,aAAa,EAAE,MAAM,KAAK,CAAC;AAAA,IACtE;AAAA,IAIA,MAAM,UAAU,EAAE,IAAI,WAAW,MAAM,QAAQ,cAAc,MAAM,QAAQ,KAAK;AAAA,IAChF,OAAO,YAAY,OAAO;AAAA,IAC1B,UAAU,EAAE,KAAK,UAAU,8BAA8B,sBAAsB;AAAA,IAE/E,IAAI,oBAAoB;AAAA,IACxB,IAAI;AAAA,MACF,OAAO,MAAM;AAAA,QACX,OAAO,MAAM,SAAS,GAAG;AAAA,UACvB,MAAM,OAAO,MAAM,MAAM;AAAA,UACzB,IAAI,KAAK,SAAS,SAAS;AAAA,YACzB,MAAM,KAAK;AAAA,UACb,EAAO,SAAI,KAAK,SAAS,QAAQ;AAAA,YAC/B,oBAAoB;AAAA,YACpB;AAAA,UACF,EAAO,SAAI,KAAK,SAAS,SAAS;AAAA,YAChC,oBAAoB;AAAA,YACpB,MAAM,KAAK;AAAA,UACb;AAAA,QACF;AAAA,QAGA,MAAM,IAAI,QAAc,CAAC,YAAY;AAAA,UACnC,UAAU;AAAA,SACX;AAAA,MACH;AAAA,cACA;AAAA,MAGA,IAAI,CAAC,mBAAmB;AAAA,QACtB,OAAO,YAAY,EAAE,IAAI,WAAW,MAAM,QAAQ,CAAC;AAAA,QACnD,UAAU,EAAE,KAAK,UAAU,8BAA8B,uBAAuB;AAAA,MAClF;AAAA,MACA,QAAQ;AAAA;AAAA;AAGd;AAEO,IAAM,iBAAiB,mBAAkC,gBAAgB;AAEhF,sBAAsB,SAAS,gBAAgB,MAAM,IAAI,eAAiB,IAAI;;AC7OvE,IAAM,mBAAmB,mBAAqC,kBAAkB;;ACrFhF,MAAM,wBAAoD;AAAA,EAC9C,QAAQ,IAAI;AAAA,OAEvB,IAAG,CAAC,KAA0C;AAAA,IAClD,MAAM,QAAQ,KAAK,MAAM,IAAI,GAAG;AAAA,IAChC,IAAI,CAAC;AAAA,MAAO;AAAA,IACZ,IAAI,MAAM,SAAS,aAAa,MAAM,SAAS,aAAa,IAAI,MAAQ;AAAA,MACtE,KAAK,MAAM,OAAO,GAAG;AAAA,MACrB;AAAA,IACF;AAAA,IACA,OAAO,MAAM;AAAA;AAAA,OAGT,IAAG,CAAC,KAAa,OAAe,SAA+C;AAAA,IACnF,MAAM,MAAM,IAAI;AAAA,IAChB,MAAM,WAAW,KAAK,MAAM,IAAI,GAAG;AAAA,IACnC,MAAM,WAA+B;AAAA,MACnC,OAAO,SAAS,SAAS,UAAU,SAAS;AAAA,MAC5C,UAAU,SAAS,YAAY,UAAU,SAAS;AAAA,MAClD,WAAW,UAAU,SAAS,aAAa;AAAA,MAC3C,WAAW;AAAA,MACX,WAAW,SAAS,aAAa,UAAU,SAAS;AAAA,IACtD;AAAA,IACA,KAAK,MAAM,IAAI,KAAK,EAAE,KAAK,OAAO,SAAS,CAAC;AAAA;AAAA,OAGxC,OAAM,CAAC,KAA+B;AAAA,IAC1C,OAAO,KAAK,MAAM,OAAO,GAAG;AAAA;AAAA,OAGxB,IAAG,CAAC,KAA+B;AAAA,IACvC,MAAM,QAAQ,KAAK,MAAM,IAAI,GAAG;AAAA,IAChC,IAAI,CAAC;AAAA,MAAO,OAAO;AAAA,IACnB,IAAI,MAAM,SAAS,aAAa,MAAM,SAAS,aAAa,IAAI,MAAQ;AAAA,MACtE,KAAK,MAAM,OAAO,GAAG;AAAA,MACrB,OAAO;AAAA,IACT;AAAA,IACA,OAAO;AAAA;AAAA,OAGH,KAAI,GAA+B;AAAA,IACvC,MAAM,MAAM,IAAI;AAAA,IAChB,MAAM,SAAmB,CAAC;AAAA,IAC1B,YAAY,KAAK,UAAU,KAAK,OAAO;AAAA,MACrC,IAAI,MAAM,SAAS,aAAa,MAAM,SAAS,aAAa,KAAK;AAAA,QAC/D,KAAK,MAAM,OAAO,GAAG;AAAA,QACrB;AAAA,MACF;AAAA,MACA,OAAO,KAAK,GAAG;AAAA,IACjB;AAAA,IACA,OAAO;AAAA;AAAA,OAGH,UAAS,GAAkB;AAAA,IAC/B,KAAK,MAAM,MAAM;AAAA;AAErB;;ACnDO,MAAM,mBAA+C;AAAA,EACzC;AAAA,EACA;AAAA,EAMjB,WAAW,CAAC,UAAkC,CAAC,GAAG,QAAiB;AAAA,IACjE,KAAK,cAAc,IAAI,IAAI,OAAO,QAAQ,OAAO,CAAC;AAAA,IAClD,KAAK,SAAS;AAAA;AAAA,EAGR,aAAa,CAAC,KAAqB;AAAA,IACzC,MAAM,WAAW,KAAK,YAAY,IAAI,GAAG;AAAA,IACzC,IAAI;AAAA,MAAU,OAAO;AAAA,IAErB,IAAI,KAAK,QAAQ;AAAA,MACf,OAAO,GAAG,KAAK,UAAU,IAAI,YAAY,EAAE,QAAQ,MAAM,GAAG;AAAA,IAC9D;AAAA,IAEA,OAAO,IAAI,YAAY,EAAE,QAAQ,MAAM,GAAG;AAAA;AAAA,EAGpC,MAAM,CAAC,QAAoC;AAAA,IACjD,IAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAA,MACjD,OAAO,QAAQ,IAAI;AAAA,IACrB;AAAA,IACA;AAAA;AAAA,OAGI,IAAG,CAAC,KAA0C;AAAA,IAClD,MAAM,SAAS,KAAK,cAAc,GAAG;AAAA,IACrC,OAAO,KAAK,OAAO,MAAM;AAAA;AAAA,OAGrB,IAAG,CAAC,KAAa,OAAe,UAAgD;AAAA,IACpF,MAAM,SAAS,KAAK,cAAc,GAAG;AAAA,IACrC,IAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAA,MACjD,QAAQ,IAAI,UAAU;AAAA,IACxB;AAAA,IACA,IAAI,CAAC,KAAK,YAAY,IAAI,GAAG,GAAG;AAAA,MAC9B,KAAK,YAAY,IAAI,KAAK,MAAM;AAAA,IAClC;AAAA;AAAA,OAGI,OAAM,CAAC,KAA+B;AAAA,IAC1C,MAAM,SAAS,KAAK,cAAc,GAAG;AAAA,IACrC,IAAI,OAAO,YAAY,eAAe,QAAQ,OAAO,UAAU,QAAQ,KAAK;AAAA,MAC1E,OAAO,QAAQ,IAAI;AAAA,MACnB,OAAO;AAAA,IACT;AAAA,IACA,OAAO;AAAA;AAAA,OAGH,IAAG,CAAC,KAA+B;AAAA,IACvC,MAAM,SAAS,KAAK,cAAc,GAAG;AAAA,IACrC,OAAO,KAAK,OAAO,MAAM,MAAM;AAAA;AAAA,OAG3B,KAAI,GAA+B;AAAA,IACvC,MAAM,SAAmB,CAAC;AAAA,IAC1B,YAAY,YAAY,KAAK,aAAa;AAAA,MACxC,IAAI,MAAM,KAAK,IAAI,OAAO,GAAG;AAAA,QAC3B,OAAO,KAAK,OAAO;AAAA,MACrB;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,OAGH,UAAS,GAAkB;AAAA,IAC/B,YAAY,YAAY,KAAK,aAAa;AAAA,MACxC,MAAM,KAAK,OAAO,OAAO;AAAA,IAC3B;AAAA;AAEJ;;AC3EO,MAAM,uBAAmD;AAAA,EACjC;AAAA,EAA7B,WAAW,CAAkB,QAAqC;AAAA,IAArC;AAAA,IAC3B,IAAI,OAAO,WAAW,GAAG;AAAA,MACvB,MAAM,IAAI,MAAM,qDAAqD;AAAA,IACvE;AAAA;AAAA,OAGI,IAAG,CAAC,KAA0C;AAAA,IAClD,WAAW,SAAS,KAAK,QAAQ;AAAA,MAC/B,MAAM,QAAQ,MAAM,MAAM,IAAI,GAAG;AAAA,MACjC,IAAI,UAAU;AAAA,QAAW,OAAO;AAAA,IAClC;AAAA,IACA;AAAA;AAAA,OAGI,IAAG,CAAC,KAAa,OAAe,SAA+C;AAAA,IACnF,MAAM,KAAK,OAAO,GAAG,IAAI,KAAK,OAAO,OAAO;AAAA;AAAA,OAGxC,OAAM,CAAC,KAA+B;AAAA,IAC1C,IAAI,UAAU;AAAA,IACd,WAAW,SAAS,KAAK,QAAQ;AAAA,MAC/B,IAAI,MAAM,MAAM,OAAO,GAAG,GAAG;AAAA,QAC3B,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,OAGH,IAAG,CAAC,KAA+B;AAAA,IACvC,WAAW,SAAS,KAAK,QAAQ;AAAA,MAC/B,IAAI,MAAM,MAAM,IAAI,GAAG;AAAA,QAAG,OAAO;AAAA,IACnC;AAAA,IACA,OAAO;AAAA;AAAA,OAGH,KAAI,GAA+B;AAAA,IACvC,MAAM,OAAO,IAAI;AAAA,IACjB,WAAW,SAAS,KAAK,QAAQ;AAAA,MAC/B,WAAW,OAAO,MAAM,MAAM,KAAK,GAAG;AAAA,QACpC,KAAK,IAAI,GAAG;AAAA,MACd;AAAA,IACF;AAAA,IACA,OAAO,CAAC,GAAG,IAAI;AAAA;AAAA,OAGX,UAAS,GAAkB;AAAA,IAC/B,MAAM,QAAQ,IAAI,KAAK,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAAA;AAE3D;;AC5DA,IAAI,CAAC,sBAAsB,IAAI,gBAAgB,GAAG;AAAA,EAChD,sBAAsB,SACpB,kBACA,MAAwB,IAAI,yBAC5B,IACF;AACF;AAKO,SAAS,wBAAwB,GAAqB;AAAA,EAC3D,OAAO,sBAAsB,IAAI,gBAAgB;AAAA;AAM5C,SAAS,wBAAwB,CAAC,OAA+B;AAAA,EACtE,sBAAsB,iBAAiB,kBAAkB,KAAK;AAAA;AAahE,eAAsB,iBAAiB,CACrC,KACA,UAC6B;AAAA,EAC7B,MAAM,QACJ,YAAY,SAAS,IAAI,gBAAgB,IACrC,SAAS,IAAsB,gBAAgB,IAC/C,yBAAyB;AAAA,EAE/B,OAAO,MAAM,IAAI,GAAG;AAAA;AAOtB,sBAAsB,cAAc,OAAO,IAAI,SAAS,aAAa;AAAA,EACnE,OAAQ,MAAM,kBAAkB,IAAI,QAAQ,KAAM;AAAA,CACnD;;ACzDD,IAAM,cAAc;AAKpB,eAAsB,SAAS,CAAC,YAAoB,MAAsC;AAAA,EACxF,MAAM,MAAM,IAAI;AAAA,EAChB,MAAM,cAAc,MAAM,OAAO,OAAO,UACtC,OACA,IAAI,OAAO,UAAU,GACrB,UACA,OACA,CAAC,WAAW,CACd;AAAA,EACA,OAAO,OAAO,OAAO,UACnB,EAAE,MAAM,UAAU,MAAsC,YAAY,KAAS,MAAM,UAAU,GAC7F,aACA,EAAE,MAAM,WAAW,QAAQ,IAAI,GAC/B,OACA,CAAC,WAAW,SAAS,CACvB;AAAA;AAUF,eAAsB,OAAO,CAC3B,WACA,YACA,UAC4C;AAAA,EAC5C,MAAM,MAAM,IAAI;AAAA,EAChB,MAAM,OAAO,OAAO,gBAAgB,IAAI,WAAW,WAAW,CAAC;AAAA,EAC/D,MAAM,UAAU,YAAY,IAAI;AAAA,EAChC,IAAI,MAAM,SAAS,IAAI,OAAO;AAAA,EAC9B,IAAI,CAAC,KAAK;AAAA,IACR,MAAM,MAAM,UAAU,YAAY,IAAI;AAAA,IACtC,SAAS,IAAI,SAAS,GAAG;AAAA,EAC3B;AAAA,EACA,MAAM,KAAK,OAAO,gBAAgB,IAAI,WAAW,EAAE,CAAC;AAAA,EACpD,MAAM,gBAAgB,MAAM,OAAO,OAAO,QACxC,EAAE,MAAM,WAAW,GAAG,GACtB,KACA,IAAI,OAAO,SAAS,CACtB;AAAA,EAEA,MAAM,kBAAkB,IAAI,WAAW,aAAa;AAAA,EACpD,MAAM,WAAW,IAAI,WAAW,cAAc,gBAAgB,MAAM;AAAA,EACpE,SAAS,IAAI,MAAM,CAAC;AAAA,EACpB,SAAS,IAAI,iBAAiB,WAAW;AAAA,EACzC,OAAO;AAAA,IACL,WAAW,YAAY,QAAQ;AAAA,IAC/B,IAAI,YAAY,EAAE;AAAA,EACpB;AAAA;AAQF,eAAsB,OAAO,CAC3B,WACA,IACA,YACA,UACiB;AAAA,EACjB,MAAM,eAAe,YAAY,SAAS;AAAA,EAC1C,MAAM,OAAO,aAAa,SAAS,GAAG,WAAW;AAAA,EACjD,MAAM,kBAAkB,aAAa,SAAS,WAAW;AAAA,EACzD,MAAM,UAAU,YAAY,IAAI;AAAA,EAChC,IAAI,MAAM,SAAS,IAAI,OAAO;AAAA,EAC9B,IAAI,CAAC,KAAK;AAAA,IACR,MAAM,MAAM,UAAU,YAAY,IAAI;AAAA,IACtC,SAAS,IAAI,SAAS,GAAG;AAAA,EAC3B;AAAA,EACA,MAAM,WAAW,MAAM,OAAO,OAAO,QACnC,EAAE,MAAM,WAAW,IAAI,YAAY,EAAE,EAA4B,GACjE,KACA,eACF;AAAA,EACA,OAAO,IAAI,YAAY,EAAE,OAAO,QAAQ;AAAA;AAGnC,SAAS,WAAW,CAAC,KAAyB;AAAA,EACnD,IAAI,SAAS;AAAA,EACb,SAAS,IAAI,EAAG,IAAI,IAAI,QAAQ,KAAK;AAAA,IACnC,UAAU,OAAO,aAAa,IAAI,EAAE;AAAA,EACtC;AAAA,EACA,OAAO,KAAK,MAAM;AAAA;AAGb,SAAS,WAAW,CAAC,KAAyB;AAAA,EACnD,MAAM,SAAS,KAAK,GAAG;AAAA,EACvB,MAAM,MAAM,IAAI,WAAW,OAAO,MAAM;AAAA,EACxC,SAAS,IAAI,EAAG,IAAI,OAAO,QAAQ,KAAK;AAAA,IACtC,IAAI,KAAK,OAAO,WAAW,CAAC;AAAA,EAC9B;AAAA,EACA,OAAO;AAAA;;AC9FF,IAAM,iBAAiB;AAAA,EAC5B,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,OAAO;AACT;;;ACFA,MAAM,YAA6B;AAAA,EAChB;AAAA,EACA;AAAA,EACT,aAA6B,CAAC;AAAA,EACrB,SAAsB,CAAC;AAAA,EAChC,aAA6B,eAAe;AAAA,EAC5C;AAAA,EAER,WAAW,CAAC,MAAc,SAAuB;AAAA,IAC/C,KAAK,OAAO;AAAA,IACZ,KAAK,YAAY,YAAY,IAAI;AAAA,IACjC,IAAI,SAAS,YAAY;AAAA,MACvB,KAAK,aAAa,KAAK,QAAQ,WAAW;AAAA,IAC5C;AAAA;AAAA,EAGF,aAAa,CAAC,YAAkC;AAAA,IAC9C,OAAO,OAAO,KAAK,YAAY,UAAU;AAAA;AAAA,EAG3C,QAAQ,CAAC,MAAc,YAAmC;AAAA,IACxD,KAAK,OAAO,KAAK,EAAE,MAAM,WAAW,CAAC;AAAA;AAAA,EAGvC,SAAS,CAAC,MAAsB,SAAwB;AAAA,IACtD,KAAK,aAAa;AAAA,IAClB,KAAK,gBAAgB;AAAA;AAAA,EAGvB,GAAG,GAAS;AAAA,IACV,MAAM,WAAW,YAAY,IAAI,IAAI,KAAK;AAAA,IAC1C,MAAM,QAAkB,CAAC,eAAe,KAAK,SAAS,SAAS,QAAQ,CAAC,MAAM;AAAA,IAE9E,MAAM,WAAW,OAAO,KAAK,KAAK,UAAU;AAAA,IAC5C,IAAI,SAAS,SAAS,GAAG;AAAA,MACvB,MAAM,KAAK,iBAAiB,KAAK,UAAU,KAAK,UAAU,GAAG;AAAA,IAC/D;AAAA,IAEA,WAAW,SAAS,KAAK,QAAQ;AAAA,MAC/B,MAAM,WAAW,MAAM,aACnB,GAAG,MAAM,QAAQ,KAAK,UAAU,MAAM,UAAU,MAChD,MAAM;AAAA,MACV,MAAM,KAAK,YAAY,UAAU;AAAA,IACnC;AAAA,IAEA,IAAI,KAAK,eAAe,eAAe,IAAI;AAAA,MACzC,MAAM,KAAK,cAAc;AAAA,IAC3B,EAAO,SAAI,KAAK,eAAe,eAAe,OAAO;AAAA,MACnD,MAAM,KAAK,kBAAkB,KAAK,gBAAgB,MAAM,KAAK,kBAAkB,IAAI;AAAA,IACrF;AAAA,IAEA,MAAM,UAAU,MAAM,KAAK;AAAA,CAAI;AAAA,IAE/B,IAAI,KAAK,eAAe,eAAe,OAAO;AAAA,MAC5C,QAAQ,MAAM,OAAO;AAAA,IACvB,EAAO;AAAA,MACL,QAAQ,MAAM,OAAO;AAAA;AAAA;AAG3B;AAAA;AAMO,MAAM,yBAAuD;AAAA,EACzD,YAAY;AAAA,EAErB,SAAS,CAAC,MAAc,SAA8B;AAAA,IACpD,OAAO,IAAI,YAAY,MAAM,OAAO;AAAA;AAExC;;AC5EA,IAAM,YAAmB;AAAA,EACvB,aAAa,CAAC,aAAmC;AAAA,EACjD,QAAQ,CAAC,OAAe,aAAoC;AAAA,EAC5D,SAAS,CAAC,OAAuB,UAAyB;AAAA,EAC1D,GAAG,GAAS;AACd;AAAA;AAMO,MAAM,sBAAoD;AAAA,EACtD,YAAY;AAAA,EAErB,SAAS,CAAC,OAAe,UAA+B;AAAA,IACtD,OAAO;AAAA;AAEX;;ACAA,IAAM,aAA6C;AAAA,GAChD,eAAe,QAAQ;AAAA,GACvB,eAAe,KAAK;AAAA,GACpB,eAAe,QAAQ;AAC1B;AAAA;AAKA,MAAM,gBAAiC;AAAA,EACR;AAAA,EAA7B,WAAW,CAAkB,UAAoB;AAAA,IAApB;AAAA;AAAA,EAE7B,aAAa,CAAC,YAAkC;AAAA,IAC9C,YAAY,KAAK,UAAU,OAAO,QAAQ,UAAU,GAAG;AAAA,MACrD,IAAI,UAAU,WAAW;AAAA,QACvB,KAAK,SAAS,aAAa,KAAK,KAAK;AAAA,MACvC;AAAA,IACF;AAAA;AAAA,EAGF,QAAQ,CAAC,MAAc,YAAmC;AAAA,IACxD,MAAM,WAAW,aACb,OAAO,YAAY,OAAO,QAAQ,UAAU,EAAE,OAAO,IAAI,OAAO,MAAM,SAAS,CAAC,IAChF;AAAA,IACJ,KAAK,SAAS,SAAS,MAAM,QAAQ;AAAA;AAAA,EAGvC,SAAS,CAAC,MAAsB,SAAwB;AAAA,IACtD,KAAK,SAAS,UAAU,EAAE,MAAM,WAAW,OAAO,QAAQ,CAAC;AAAA;AAAA,EAG7D,GAAG,GAAS;AAAA,IACV,KAAK,SAAS,IAAI;AAAA;AAEtB;AAAA;AAcO,MAAM,sBAAoD;AAAA,EAGlC;AAAA,EAFpB,YAAY;AAAA,EAErB,WAAW,CAAkB,QAAoB;AAAA,IAApB;AAAA;AAAA,EAE7B,SAAS,CAAC,MAAc,SAA8B;AAAA,IACpD,MAAM,cAAmC,CAAC;AAAA,IAC1C,IAAI,SAAS,YAAY;AAAA,MACvB,YAAY,aAAa,OAAO,YAC9B,OAAO,QAAQ,QAAQ,UAAU,EAAE,OAAO,IAAI,OAAO,MAAM,SAAS,CACtE;AAAA,IACF;AAAA,IACA,MAAM,WAAW,KAAK,OAAO,UAAU,MAAM,WAAW;AAAA,IACxD,OAAO,IAAI,gBAAgB,QAAQ;AAAA;AAEvC;;AC9EO,IAAM,qBAAqB,mBAAuC,WAAW;AAEpF,SAAS,OAAM,CAAC,MAAkC;AAAA,EAChD,IAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAA,IACjD,OAAO,QAAQ,IAAI;AAAA,EACrB;AAAA,EACA,OAAO,YAAY,IAAI;AAAA;AAGzB,SAAS,SAAQ,CAAC,OAAoC;AAAA,EACpD,OAAO,UAAU,aAAa,UAAU,MAAM,UAAU,OAAO,UAAU;AAAA;AAG3E,SAAS,8BAA8B,GAAuB;AAAA,EAC5D,IAAI,QAAO,WAAW,GAAG,YAAY,MAAM,WAAW;AAAA,IACpD,OAAO,IAAI;AAAA,EACb;AAAA,EACA,IACE,UAAS,QAAO,KAAK,CAAC,KACtB,QAAO,UAAU,MAAM,UACvB,CAAC,UAAS,QAAO,QAAQ,CAAC,KAC1B,CAAC,UAAS,QAAO,IAAI,CAAC,GACtB;AAAA,IACA,OAAO,IAAI;AAAA,EACb;AAAA,EACA,OAAO,IAAI;AAAA;AAIb,IAAI,CAAC,sBAAsB,IAAI,kBAAkB,GAAG;AAAA,EAClD,sBAAsB,SAAS,oBAAoB,gCAAgC,IAAI;AACzF;AAKO,SAAS,oBAAoB,GAAuB;AAAA,EACzD,OAAO,sBAAsB,IAAI,kBAAkB;AAAA;AAc9C,SAAS,oBAAoB,CAAC,UAAoC;AAAA,EACvE,sBAAsB,iBAAiB,oBAAoB,QAAQ;AAAA;;AC1DrE,eAAsB,QAAQ,CAC5B,OACA,YAA2B,QACN;AAAA,EACrB,MAAM,aAAa,IAAI,KAAK,CAAC,OAAO,UAAU,WAAW,QAAQ,IAAI,WAAW,KAAK,CAAC,CAAC;AAAA,EACvF,MAAM,mBAAmB,WACtB,OAAO,EACP,YAAY,IAAI,kBAAkB,SAA8B,CAAC;AAAA,EACpE,MAAM,mBAAmB,MAAM,IAAI,SAAS,gBAAgB,EAAE,YAAY;AAAA,EAC1E,OAAO,IAAI,WAAW,gBAAgB;AAAA;AAGxC,eAAsB,UAAU,CAC9B,OACA,YAA2B,QACV;AAAA,EACjB,MAAM,aAAa,IAAI,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,CAAC;AAAA,EACnD,MAAM,qBAAqB,WACxB,OAAO,EACP,YAAY,IAAI,oBAAoB,SAA8B,CAAC;AAAA,EACtE,OAAO,MAAM,IAAI,SAAS,kBAAkB,EAAE,KAAK;AAAA;;ACF9C,SAAS,YAAY,CAAC,SAG3B;AAAA,EACA,MAAM,QAAQ,QAAQ,MAAM,4BAA4B;AAAA,EACxD,IAAI,CAAC,OAAO;AAAA,IACV,MAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEA,OAAO;AAAA,IACL,UAAU,MAAM;AAAA,IAChB,QAAQ,MAAM;AAAA,EAChB;AAAA;;;AC1BF,IAAM,+BAA+B,OAAO,SAAyC;AAAA,EACnF,MAAM,MAAM,MAAM,kBAAkB,IAAI;AAAA,EACxC,MAAM,MAAM,IAAI,gBAAgB,IAAI,OAAO,IAAI,MAAM,EAAE,WAAW,IAAI;AAAA,EACtE,IAAI,CAAC,KAAK;AAAA,IACR,MAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAAA,EACA,IAAI,UAAU,KAAK,GAAG,CAAC;AAAA,EACvB,OAAO,IAAI;AAAA;AAGb,SAAS,aAAa,CAAC,SAAuB;AAAA,EAC5C,QAAQ,UAAU,WAAW,aAAa,OAAO;AAAA,EAEjD,MAAM,SAAS,KAAK,MAAM;AAAA,EAC1B,MAAM,QAAQ,WAAW,KAAK,QAAQ,CAAC,SAAS,KAAK,WAAW,CAAC,CAAC;AAAA,EAElE,MAAM,OAAO,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,MAAM,SAAS,CAAC;AAAA,EACjD,OAAO;AAAA;AAGT,eAAsB,6BAA6B,CACjD,WACA,UACkB;AAAA,EAClB,IAAI,cAAc,QAAQ,cAAc,WAAW;AAAA,IACjD,MAAM,IAAI,MAAM,iCAAiC;AAAA,EACnD;AAAA,EAGA,IAAI,SAAS,SAAS,aAAa,KAAK,qBAAqB,aAAa;AAAA,IACxE,OAAO;AAAA,EACT;AAAA,EACA,IAAI,SAAS,SAAS,YAAY,KAAK,qBAAqB,YAAY;AAAA,IACtE,OAAO;AAAA,EACT;AAAA,EACA,IAAI,SAAS,SAAS,MAAM,KAAK,qBAAqB,MAAM;AAAA,IAC1D,OAAO;AAAA,EACT;AAAA,EACA,IACE,SAAS,SAAS,aAAa,KAC/B,OAAO,cAAc,YACrB,UAAU,aACV,WAAW,aACX,YAAY,aACZ,cAAc,WACd;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAGA,IAAI,SAAS,SAAS,aAAa,KAAK,qBAAqB,MAAM;AAAA,IACjE,OAAO,kBAAkB,SAAS;AAAA,EACpC;AAAA,EACA,IAAI,SAAS,SAAS,iBAAiB,KAAK,qBAAqB,MAAM;AAAA,IACrE,OAAO,MAAM,6BAA6B,SAAS;AAAA,EACrD;AAAA,EACA,IAAI,SAAS,SAAS,aAAa,KAAK,qBAAqB,iBAAiB;AAAA,IAC5E,OAAO,UAAU,sBAAsB;AAAA,EACzC;AAAA,EAEA,IAAI,SAAS,SAAS,aAAa,KAAK,OAAO,cAAc,UAAU;AAAA,IACrE,OAAO,kBAAkB,cAAc,SAAS,CAAC;AAAA,EACnD;AAAA,EACA,IAAI,SAAS,SAAS,iBAAiB,KAAK,OAAO,cAAc,UAAU;AAAA,IACzE,OAAO,6BAA6B,cAAc,SAAS,CAAC;AAAA,EAC9D;AAAA,EACA,IAAI,SAAS,SAAS,MAAM,KAAK,OAAO,cAAc,UAAU;AAAA,IAC9D,OAAO,cAAc,SAAS;AAAA,EAChC;AAAA,EACA,IACE,SAAS,SAAS,SAAS,KAC3B,OAAO,cAAc,YACrB,UAAU,WAAW,OAAO,GAC5B;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,MAAM,IAAI,MAAM,gCAAgC,OAAO,YAAY;AAAA;;AC/E9D,IAAM,gBAAgB,mBAAqC,eAAe;AAOjF,SAAS,oBAAoB,CAAC,KAAU;AAAA,EACtC,MAAM,gBAAgC,CAAC;AAAA,EACvC,MAAM,OAAO,IAAI;AAAA,EAEjB,SAAS,iBAAiB,CAAC,OAAY;AAAA,IAErC,IAAI,SAAS,OAAO,UAAU,YAAY,KAAK,IAAI,KAAK,GAAG;AAAA,MACzD;AAAA,IACF;AAAA,IACA,IAAI,SAAS,OAAO,UAAU,UAAU;AAAA,MACtC,KAAK,IAAI,KAAK;AAAA,IAChB;AAAA,IAGA,IAAI,iBAAiB,gBAAgB,iBAAiB,YAAY;AAAA,MAChE,cAAc,KAAK,MAAM,MAAM;AAAA,IACjC,EAEK,SACH,iBAAiB,cACjB,iBAAiB,qBACjB,iBAAiB,aACjB,iBAAiB,eACjB,iBAAiB,cACjB,iBAAiB,eACjB,iBAAiB,gBACjB,iBAAiB,iBACjB,iBAAiB,gBACjB;AAAA,MACA,cAAc,KAAK,MAAM,MAAM;AAAA,IACjC,EAEK,SAAI,OAAO,oBAAoB,eAAe,iBAAiB,iBAAiB;AAAA,MACnF,cAAc,KAAK,KAAK;AAAA,IAC1B,EAEK,SAAI,OAAO,gBAAgB,eAAe,iBAAiB,aAAa;AAAA,MAC3E,cAAc,KAAK,KAAK;AAAA,IAC1B,EAEK,SAAI,OAAO,eAAe,eAAe,iBAAiB,YAAY;AAAA,MACzE,cAAc,KAAK,KAAK;AAAA,IAC1B,EAEK,SAAI,OAAO,gBAAgB,eAAe,iBAAiB,aAAa;AAAA,MAC3E,cAAc,KAAK,KAAK;AAAA,IAC1B,EAEK,SAAI,iBAAiB,aAAa;AAAA,MACrC,cAAc,KAAK,KAAK;AAAA,IAC1B,EAEK,SAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,MAC7B,MAAM,QAAQ,iBAAiB;AAAA,IACjC,EAAO,SAAI,SAAS,OAAO,UAAU,UAAU;AAAA,MAC7C,OAAO,OAAO,KAAK,EAAE,QAAQ,iBAAiB;AAAA,IAChD;AAAA;AAAA,EAGF,kBAAkB,GAAG;AAAA,EACrB,OAAO;AAAA;AAAA;AAQF,MAAM,iBAAiB;AAAA,EAC5B,WAAW,GAAG;AAAA,EAEN,YAA8D,CAAC;AAAA,EAC/D,kBAA0E,CAAC;AAAA,EAC3E,oBACN,CAAC;AAAA,EAGK,qBAAqB,IAAI;AAAA,EAEzB,oBAAoB,IAAI;AAAA,EAExB,aAAa,CAAC,IAAY,WAAgB;AAAA,IAChD,IAAI,KAAK,kBAAkB,IAAI,EAAE,GAAG;AAAA,MAClC;AAAA,IACF;AAAA,IACA,KAAK,kBAAkB,IAAI,EAAE;AAAA,IAC7B,MAAM,gBAAgB,qBAAqB,MAAM;AAAA,IACjD,MAAM,sBAAsB,CAAC,GAAG,IAAI,IAAI,aAAa,CAAC;AAAA,IAEtD,YAAY,EAAE,IAAI,MAAM,YAAY,MAAM,OAAO,GAAG,mBAAmB;AAAA;AAAA,EAGjE,YAAY,CAAC,IAAY,iBAAyB;AAAA,IACxD,IAAI,KAAK,kBAAkB,IAAI,EAAE,GAAG;AAAA,MAClC;AAAA,IACF;AAAA,IACA,KAAK,kBAAkB,IAAI,EAAE;AAAA,IAC7B,YAAY,EAAE,IAAI,MAAM,SAAS,MAAM,aAAa,CAAC;AAAA;AAAA,EAG/C,kBAAkB,CAAC,IAAY,UAAe;AAAA,IACpD,IAAI,KAAK,kBAAkB,IAAI,EAAE,GAAG;AAAA,MAClC;AAAA,IACF;AAAA,IACA,YAAY,EAAE,IAAI,MAAM,gBAAgB,MAAM,MAAM,CAAC;AAAA;AAAA,EAQvD,SAAS,GAAG;AAAA,IAEV,YAAY;AAAA,MACV,MAAM;AAAA,MACN,WAAW,OAAO,KAAK,KAAK,SAAS;AAAA,MACrC,iBAAiB,OAAO,KAAK,KAAK,eAAe;AAAA,MACjD,mBAAmB,OAAO,KAAK,KAAK,iBAAiB;AAAA,IACvD,CAAC;AAAA;AAAA,EAGH,gBAAgB,CAAC,MAAc,IAAsC;AAAA,IACnE,KAAK,UAAU,QAAQ;AAAA;AAAA,EAWzB,wBAAwB,CACtB,MACA,IACA;AAAA,IACA,KAAK,kBAAkB,QAAQ;AAAA;AAAA,EAYjC,sBAAsB,CAAC,MAAc,IAA4C;AAAA,IAC/E,KAAK,gBAAgB,QAAQ;AAAA;AAAA,OAIzB,cAAa,CAAC,OAAoC;AAAA,IACtD,QAAQ,IAAI,MAAM,cAAc,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjE,IAAI,SAAS,SAAS;AAAA,MACpB,OAAO,MAAM,KAAK,YAAY,EAAE;AAAA,IAClC;AAAA,IACA,IAAI,SAAS,QAAQ;AAAA,MACnB,IAAI,QAAQ;AAAA,QACV,OAAO,MAAM,KAAK,iBAAiB,IAAI,cAAc,IAAI;AAAA,MAC3D;AAAA,MACA,IAAI,UAAU;AAAA,QACZ,OAAO,MAAM,KAAK,mBAAmB,IAAI,cAAc,IAAI;AAAA,MAC7D;AAAA,MACA,OAAO,MAAM,KAAK,WAAW,IAAI,cAAc,IAAI;AAAA,IACrD;AAAA;AAAA,OAGI,YAAW,CAAC,IAAY;AAAA,IAC5B,IAAI,KAAK,mBAAmB,IAAI,EAAE,GAAG;AAAA,MACnC,MAAM,aAAa,KAAK,mBAAmB,IAAI,EAAE;AAAA,MACjD,YAAY,MAAM;AAAA,MAClB,KAAK,mBAAmB,OAAO,EAAE;AAAA,MAEjC,KAAK,UAAU,IAAI,mBAAmB;AAAA,IACxC;AAAA;AAAA,OAOI,mBAAkB,CACtB,IACA,eACC,OAAO,QAAQ,QAChB;AAAA,IACA,IAAI,EAAE,gBAAgB,KAAK,oBAAoB;AAAA,MAC7C,KAAK,WAAW,IAAI,SAAS;AAAA,MAC7B;AAAA,IACF;AAAA,IACA,IAAI;AAAA,MACF,MAAM,KAAK,KAAK,kBAAkB;AAAA,MAClC,MAAM,SAAS,MAAM,GAAG,OAAO,QAAQ,KAAK;AAAA,MAC5C,KAAK,WAAW,IAAI,MAAM;AAAA,MAC1B,OAAO,OAAY;AAAA,MACnB,KAAK,UAAU,IAAI,MAAM,OAAO;AAAA;AAAA;AAAA,OAI9B,WAAU,CAAC,IAAY,eAAuB,OAAO,QAAoB;AAAA,IAC7E,IAAI,EAAE,gBAAgB,KAAK,YAAY;AAAA,MACrC,KAAK,UAAU,IAAI,YAAY,wBAAwB;AAAA,MACvD;AAAA,IACF;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,kBAAkB,IAAI;AAAA,MAC5B,KAAK,mBAAmB,IAAI,IAAI,eAAe;AAAA,MAE/C,MAAM,KAAK,KAAK,UAAU;AAAA,MAC1B,MAAM,eAAe,CAAC,UAAkB,SAAkB,YAAkB;AAAA,QAE1E,IAAI,CAAC,KAAK,kBAAkB,IAAI,EAAE,GAAG;AAAA,UACnC,YAAY,EAAE,IAAI,MAAM,YAAY,MAAM,EAAE,UAAU,SAAS,QAAQ,EAAE,CAAC;AAAA,QAC5E;AAAA;AAAA,MAEF,MAAM,SAAS,MAAM,GAAG,OAAO,OAAO,cAAc,gBAAgB,MAAM;AAAA,MAC1E,KAAK,WAAW,IAAI,MAAM;AAAA,MAC1B,OAAO,OAAY;AAAA,MACnB,KAAK,UAAU,IAAI,MAAM,OAAO;AAAA,cAChC;AAAA,MACA,KAAK,mBAAmB,OAAO,EAAE;AAAA,MAGjC,WAAW,MAAM;AAAA,QACf,KAAK,kBAAkB,OAAO,EAAE;AAAA,SAC/B,IAAI;AAAA;AAAA;AAAA,OAUL,iBAAgB,CAAC,IAAY,eAAuB,OAAO,QAAoB;AAAA,IACnF,IAAI,gBAAgB,KAAK,iBAAiB;AAAA,MACxC,IAAI;AAAA,QACF,MAAM,kBAAkB,IAAI;AAAA,QAC5B,KAAK,mBAAmB,IAAI,IAAI,eAAe;AAAA,QAE/C,MAAM,KAAK,KAAK,gBAAgB;AAAA,QAChC,MAAM,WAAW,GAAG,OAAO,OAAO,gBAAgB,MAAM;AAAA,QAExD,iBAAiB,SAAS,UAAU;AAAA,UAClC,IAAI,KAAK,kBAAkB,IAAI,EAAE;AAAA,YAAG;AAAA,UACpC,KAAK,gBAAgB,IAAI,KAAK;AAAA,QAChC;AAAA,QAEA,KAAK,WAAW,IAAI,SAAS;AAAA,QAC7B,OAAO,OAAY;AAAA,QACnB,KAAK,UAAU,IAAI,MAAM,OAAO;AAAA,gBAChC;AAAA,QACA,KAAK,mBAAmB,OAAO,EAAE;AAAA,QACjC,WAAW,MAAM;AAAA,UACf,KAAK,kBAAkB,OAAO,EAAE;AAAA,WAC/B,IAAI;AAAA;AAAA,IAEX,EAAO,SAAI,gBAAgB,KAAK,WAAW;AAAA,MAEzC,IAAI;AAAA,QACF,MAAM,kBAAkB,IAAI;AAAA,QAC5B,KAAK,mBAAmB,IAAI,IAAI,eAAe;AAAA,QAE/C,MAAM,KAAK,KAAK,UAAU;AAAA,QAC1B,MAAM,eAAe,MAAM;AAAA,QAC3B,MAAM,SAAS,MAAM,GAAG,OAAO,OAAO,cAAc,gBAAgB,MAAM;AAAA,QAE1E,KAAK,gBAAgB,IAAI,EAAE,MAAM,UAAU,MAAM,OAAO,CAAC;AAAA,QACzD,KAAK,WAAW,IAAI,SAAS;AAAA,QAC7B,OAAO,OAAY;AAAA,QACnB,KAAK,UAAU,IAAI,MAAM,OAAO;AAAA,gBAChC;AAAA,QACA,KAAK,mBAAmB,OAAO,EAAE;AAAA,QACjC,WAAW,MAAM;AAAA,UACf,KAAK,kBAAkB,OAAO,EAAE;AAAA,WAC/B,IAAI;AAAA;AAAA,IAEX,EAAO;AAAA,MACL,KAAK,UAAU,IAAI,YAAY,wBAAwB;AAAA;AAAA;AAG7D;;;AC/SA,IAAM,SAAS,WAAW;AAC1B,IAAM,aAAa;AAMZ,MAAM,qBAAqB,iBAAiB;AAAA,EACjD,WAAW,GAAG;AAAA,IACZ,YAAY,iBAAiB,WAAW,OAAO,UAAU;AAAA,MACvD,MAAM,MAAM;AAAA,QACV,MAAM,MAAM;AAAA,QAEZ,MAAM,MAAM;AAAA,MACd;AAAA,MACA,MAAM,KAAK,cAAc,GAAG;AAAA,KAC7B;AAAA,IACD,MAAM;AAAA;AAEV;AAEA,sBAAsB,SAAS,eAAe,MAAM,IAAI,cAAgB,IAAI;",
46
+ "debugId": "547A5F14C3BF7B1564756E2164756E21",
52
47
  "names": []
53
48
  }