doxum 0.1.12 → 0.1.13

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 (64) hide show
  1. package/README.md +44 -39
  2. package/dist/advanced.cjs +116 -0
  3. package/dist/advanced.cjs.map +1 -0
  4. package/dist/advanced.d.cts +42 -0
  5. package/dist/advanced.d.ts +42 -0
  6. package/dist/advanced.js +115 -0
  7. package/dist/advanced.js.map +1 -0
  8. package/dist/{contract-CeAnEPBA.d.ts → contract-BT53Gg94.d.ts} +5 -4
  9. package/dist/{contract-DtGVSXSK.d.cts → contract-XmKnroJq.d.cts} +5 -4
  10. package/dist/definition-177L4Amk.cjs +898 -0
  11. package/dist/definition-177L4Amk.cjs.map +1 -0
  12. package/dist/definition-BlMeHwdz.d.ts +98 -0
  13. package/dist/definition-DXrKMVs7.js +785 -0
  14. package/dist/definition-DXrKMVs7.js.map +1 -0
  15. package/dist/definition-kxnWUvX9.d.cts +98 -0
  16. package/dist/{driver-xOIkwrB8.cjs → driver-BCyfqxsl.cjs} +1 -1
  17. package/dist/{driver-xOIkwrB8.cjs.map → driver-BCyfqxsl.cjs.map} +1 -1
  18. package/dist/{driver-BlR81Dqg.js → driver-CSnhMjbP.js} +1 -1
  19. package/dist/{driver-BlR81Dqg.js.map → driver-CSnhMjbP.js.map} +1 -1
  20. package/dist/index.cjs +31 -29
  21. package/dist/index.cjs.map +1 -1
  22. package/dist/index.d.cts +5 -4
  23. package/dist/index.d.ts +5 -4
  24. package/dist/index.js +7 -6
  25. package/dist/index.js.map +1 -1
  26. package/dist/{integration-CWjttg7H.js → integration-Bco8ZB16.js} +7 -3
  27. package/dist/integration-Bco8ZB16.js.map +1 -0
  28. package/dist/integration-CEUn96tx.cjs +52 -0
  29. package/dist/integration-CEUn96tx.cjs.map +1 -0
  30. package/dist/integration.cjs +7 -3
  31. package/dist/integration.d.cts +7 -3
  32. package/dist/integration.d.ts +7 -3
  33. package/dist/integration.js +3 -3
  34. package/dist/local-sync.cjs +1 -1
  35. package/dist/local-sync.d.cts +1 -1
  36. package/dist/local-sync.d.ts +1 -1
  37. package/dist/local-sync.js +1 -1
  38. package/dist/react.cjs +63 -36
  39. package/dist/react.cjs.map +1 -1
  40. package/dist/react.d.cts +8 -7
  41. package/dist/react.d.ts +8 -7
  42. package/dist/react.js +63 -35
  43. package/dist/react.js.map +1 -1
  44. package/dist/store-CDeqZEE3.d.cts +28 -0
  45. package/dist/{store-7XBEcR8s.js → store-CtgvCVFg.js} +585 -922
  46. package/dist/store-CtgvCVFg.js.map +1 -0
  47. package/dist/{store-DBv58dns.cjs → store-DcDpDgjk.cjs} +595 -992
  48. package/dist/store-DcDpDgjk.cjs.map +1 -0
  49. package/dist/store-P5dJ7TVe.d.ts +28 -0
  50. package/package.json +6 -1
  51. package/skills/doxum-runtime/SKILL.md +5 -7
  52. package/skills/doxum-runtime/references/guide.en.md +12 -16
  53. package/skills/doxum-runtime/references/guide.zh-CN.md +9 -14
  54. package/skills/doxum-runtime/references/patterns.en.md +12 -20
  55. package/skills/doxum-runtime/references/patterns.zh-CN.md +12 -18
  56. package/skills/doxum-runtime/references/projections.en.md +56 -199
  57. package/skills/doxum-runtime/references/projections.zh-CN.md +50 -180
  58. package/dist/integration-BShL68Nc.cjs +0 -30
  59. package/dist/integration-BShL68Nc.cjs.map +0 -1
  60. package/dist/integration-CWjttg7H.js.map +0 -1
  61. package/dist/store-2i8pYXqa.d.ts +0 -263
  62. package/dist/store-7XBEcR8s.js.map +0 -1
  63. package/dist/store-DBv58dns.cjs.map +0 -1
  64. package/dist/store-Ks80xWS_.d.cts +0 -263
@@ -1 +0,0 @@
1
- {"version":3,"file":"store-DBv58dns.cjs","names":["isRecord","isPlainObject","compiledShape","validTree","node","fail","remove","fail","index","remove","replace","insert","fail","keys","replace","remove","fail","contains","replace","move","fail","keys","resolveChild","resolveLocated","nodeAt","compiledShape","children","AddressIndex","AddressIndex","target.belongs","target.affected","contains","target.SubscriptionIndex","target.belongs","target.same"],"sources":["../core/src/schema-value.ts","../core/src/schema.ts","../core/src/mutation/operations/map.ts","../core/src/mutation/operations/table.ts","../core/src/mutation/operations/list.ts","../core/src/mutation/operations/tree.ts","../core/src/mutation/operations/order.ts","../core/src/access/scope.ts","../core/src/impact-target.ts","../core/src/impact.ts","../core/src/runtime/contract.ts","../core/src/runtime/access.ts","../core/src/runtime/notification.ts","../core/src/projection/definition.ts","../core/src/projection/contract.ts","../core/src/projection/scheduler.ts","../core/src/projection/node.ts","../core/src/projection/collection.ts","../core/src/projection/source.ts","../core/src/projection/value.ts","../core/src/projection/runtime.ts","../core/src/projection/store.ts"],"sourcesContent":["import type { DocumentAddress, DocumentNode, Infer } from './schema';\nimport { compiledShape } from './address';\nimport { isPlainObject, isRecord } from './value/ownership';\nimport { validate as validTree } from './mutation/tree';\nimport * as anchor from './mutation/anchor';\nimport { profile } from './profile';\n\n/** Pure synchronous validation. Successful output is ignored; input is never transformed. */\nexport type Validator<T> =\n | ((value: unknown) => T)\n | {\n readonly '~standard': {\n readonly version: 1;\n readonly vendor: string;\n readonly types?: { readonly input: unknown; readonly output: T };\n validate(value: unknown):\n | { readonly value: T; readonly issues?: undefined }\n | {\n readonly issues: readonly {\n readonly message: string;\n readonly path?: readonly (PropertyKey | { readonly key: PropertyKey })[];\n }[];\n }\n | PromiseLike<unknown>;\n };\n };\n\nexport type ParseIssue = {\n readonly address: DocumentAddress;\n readonly code: 'invalid-value' | 'invalid-key' | 'missing-validator' | 'invalid-tree';\n readonly message: string;\n};\nexport class ParseError extends TypeError {\n readonly issues: readonly ParseIssue[];\n constructor(issue: ParseIssue) {\n super(`${issue.message} at ${JSON.stringify(issue.address)}`);\n this.name = 'ParseError';\n this.issues = Object.freeze([\n Object.freeze({ ...issue, address: Object.freeze([...issue.address]) }),\n ]);\n }\n}\n\nconst issue = (\n address: DocumentAddress,\n message: string,\n code: ParseIssue['code'] = 'invalid-value'\n): ParseIssue => ({ address, message, code });\n\nexport const checkScalar = (\n validator: Validator<unknown> | undefined,\n value: unknown,\n address: DocumentAddress,\n strict: boolean\n): ParseIssue | undefined => {\n if (!validator)\n return strict\n ? issue(address, 'A validator is required to parse an opaque value.', 'missing-validator')\n : undefined;\n try {\n const result =\n typeof validator === 'function' ? validator(value) : validator['~standard'].validate(value);\n if (\n result &&\n (typeof result === 'object' || typeof result === 'function') &&\n 'then' in result &&\n typeof result.then === 'function'\n )\n return issue(address, 'Validators must be synchronous.');\n if (typeof validator !== 'function') {\n if (!isRecord(result)) return issue(address, 'Malformed validator result.');\n if (Array.isArray(result.issues)) {\n const first = result.issues[0];\n return issue(\n [\n ...address,\n ...(first?.path ?? []).map((part: PropertyKey | { key: PropertyKey }) =>\n String(typeof part === 'object' ? part.key : part)\n ),\n ],\n first?.message ?? 'Value validation failed.'\n );\n }\n if (!Object.hasOwn(result, 'value')) return issue(address, 'Malformed validator result.');\n }\n return undefined;\n } catch (error) {\n return issue(address, error instanceof Error ? error.message : 'Value validation failed.');\n }\n};\n\nexport const checkKey = (\n validator: Validator<string> | undefined,\n value: unknown,\n address: DocumentAddress\n): ParseIssue | undefined => {\n if (typeof value !== 'string')\n return issue(address, 'Collection keys must be strings.', 'invalid-key');\n const failure = checkScalar(validator, value, address, false);\n return failure ? { ...failure, code: 'invalid-key' } : undefined;\n};\n\nexport const checkValue = (\n node: DocumentNode,\n value: unknown,\n address: DocumentAddress = [],\n strict = false\n): ParseIssue | undefined => {\n if (node.optional && value === undefined) return undefined;\n if (node.kind === 'field') return checkScalar(node.validator, value, address, strict);\n if (node.kind === 'object' || node.kind === 'variant') {\n if (!isPlainObject(value)) return issue(address, 'Expected an object.');\n if (node.kind === 'variant') {\n const tag = value[node.tag];\n if (\n !Object.hasOwn(value, node.tag) ||\n typeof tag !== 'string' ||\n !Object.hasOwn(node.variants, tag)\n )\n return issue([...address, node.tag], 'Unknown variant tag.');\n }\n const { members } = compiledShape(node, value)!;\n for (const key of Reflect.ownKeys(value)) {\n if (node.kind === 'variant' && key === node.tag) continue;\n if (typeof key !== 'string' || !members.has(key))\n return issue([...address, String(key)], 'Property is not declared in the object schema.');\n }\n for (const [key, member] of members) {\n const child = member.node;\n if (!Object.prototype.hasOwnProperty.call(value, key) && !child.optional)\n return issue([...address, key], 'Required property is missing.');\n const failure = checkValue(child, value[key], [...address, key], strict);\n if (failure) return failure;\n }\n return undefined;\n }\n if (node.kind === 'table' || node.kind === 'map') {\n if (!isPlainObject(value)) return issue(address, 'Expected a collection object.');\n const entries = node.kind === 'table' ? value.byId : value;\n if (!isPlainObject(entries)) return issue(address, 'Expected a byId object.');\n if (node.kind === 'table') {\n if (!Array.isArray(value.ids) || value.ids.length !== Object.keys(entries).length)\n return issue(address, 'Table ids and entries must agree.');\n const seen = new Set<string>();\n for (const id of value.ids) {\n const failure = checkKey(node.key, id, address);\n if (failure) return failure;\n if (seen.has(id) || !Object.prototype.hasOwnProperty.call(entries, id))\n return issue(address, 'Table ids must be unique and reference existing entries.');\n seen.add(id);\n }\n }\n for (const id of Object.keys(entries)) {\n const failure =\n checkKey(node.key, id, [...address, id]) ??\n checkValue(node.value, entries[id], [...address, id], strict);\n if (failure) return failure;\n }\n return undefined;\n }\n if (node.kind === 'list') {\n if (!Array.isArray(value)) return issue(address, 'Expected a list.');\n const seen = new Set<string>();\n const order = anchor.keys(value, node.keyOf);\n for (let i = 0; i < value.length; i++) {\n const failure = checkValue(node.value, value[i], [...address, String(i)], strict);\n if (failure) return failure;\n let key: unknown;\n try {\n key = order.at(i);\n } catch {\n return issue(address, 'List keyOf failed.');\n }\n if (typeof key !== 'string' || seen.has(key))\n return issue(address, 'List keys must be unique strings.', 'invalid-key');\n seen.add(key);\n }\n return undefined;\n }\n if (!validTree(value)) return issue(address, 'Invalid tree structure.', 'invalid-tree');\n if (isRecord(value) && isRecord(value.nodes)) {\n for (const id of Object.keys(value.nodes)) {\n const entry = value.nodes[id];\n if (isRecord(entry) && Object.prototype.hasOwnProperty.call(entry, 'value')) {\n const failure = checkValue(node.value, entry.value, [...address, id], strict);\n if (failure) return failure;\n }\n }\n }\n return undefined;\n};\n\n/** Copy editable structure; atomic payloads retain their immutable ownership contract. */\nexport const copyValue = (node: DocumentNode, value: unknown): unknown => {\n if (value === undefined || node.kind === 'field') return value;\n profile.copy.structure();\n if ((node.kind === 'object' || node.kind === 'variant') && isRecord(value)) {\n const result = Object.create(Object.getPrototypeOf(value));\n const { members } = compiledShape(node, value)!;\n for (const key of Object.getOwnPropertyNames(value)) {\n Object.defineProperty(result, key, {\n value:\n node.kind === 'variant' && key === node.tag\n ? value[key]\n : copyValue(members.get(key)!.node, value[key]),\n writable: true,\n enumerable: Object.getOwnPropertyDescriptor(value, key)?.enumerable,\n configurable: true,\n });\n }\n return result;\n }\n if ((node.kind === 'table' || node.kind === 'map') && isRecord(value)) {\n const entries = (node.kind === 'table' ? value.byId : value) as Record<string, unknown>;\n const result = Object.fromEntries(\n Object.keys(entries).map(id => [id, copyValue(node.value, entries[id])])\n );\n return node.kind === 'table' ? { ids: [...(value.ids as string[])], byId: result } : result;\n }\n if (node.kind === 'list') return [...(value as unknown[])];\n if (node.kind === 'tree' && isRecord(value)) {\n const entries = value.nodes as Record<string, { children: readonly string[] }>;\n return {\n ...value,\n nodes: Object.fromEntries(\n Object.entries(entries).map(([id, n]) => [id, { ...n, children: [...n.children] }])\n ),\n };\n }\n return value;\n};\n\nexport const equalValue = (node: DocumentNode, left: unknown, right: unknown): boolean => {\n if (Object.is(left, right)) return true;\n if (node.kind === 'field' || left === undefined || right === undefined) return false;\n if ((node.kind === 'object' || node.kind === 'variant') && isRecord(left) && isRecord(right)) {\n if (node.kind === 'variant' && left[node.tag] !== right[node.tag]) return false;\n for (const [key, member] of compiledShape(node, left)!.members) {\n if (Object.hasOwn(left, key) !== Object.hasOwn(right, key)) return false;\n if (!equalValue(member.node, left[key], right[key])) return false;\n }\n return true;\n }\n if (node.kind === 'list' && Array.isArray(left) && Array.isArray(right))\n return (\n left.length === right.length && left.every((v, i) => equalValue(node.value, v, right[i]))\n );\n if (node.kind === 'table' && isRecord(left) && isRecord(right))\n return (\n anchor.equal(left.ids as string[], right.ids as string[]) &&\n equalValue({ kind: 'map', value: node.value }, left.byId, right.byId)\n );\n if (node.kind === 'tree' && isRecord(left) && isRecord(right)) {\n if (left.rootId !== right.rootId) return false;\n const a = left.nodes as Record<\n string,\n { parentId?: string; children: string[]; value?: unknown }\n >,\n b = right.nodes as typeof a;\n return (\n Object.keys(a).length === Object.keys(b).length &&\n Object.keys(a).every(\n id =>\n Object.hasOwn(b, id) &&\n a[id].parentId === b[id].parentId &&\n anchor.equal(a[id].children, b[id].children) &&\n Object.hasOwn(a[id], 'value') === Object.hasOwn(b[id], 'value') &&\n equalValue(node.value, a[id].value, b[id].value)\n )\n );\n }\n if (node.kind === 'map' && isRecord(left) && isRecord(right)) {\n const keys = Object.keys(left);\n return (\n keys.length === Object.keys(right).length &&\n keys.every(key => Object.hasOwn(right, key) && equalValue(node.value, left[key], right[key]))\n );\n }\n return false;\n};\n\nexport const parse = <N extends DocumentNode>(node: N, input: unknown): Infer<N> => {\n const valueNode: DocumentNode = node;\n const failure = checkValue(valueNode, input, [], true);\n if (failure) throw new ParseError(failure);\n return copyValue(valueNode, input) as Infer<N>;\n};\n","import type { Validator } from './schema-value';\nimport { checkKey } from './schema-value';\nexport type DocumentAddress = readonly string[];\n\n/** Shared payloads are immutable through every alias, including builtin methods. */\nexport type ReadonlyValue<T> = T extends (...args: never[]) => unknown\n ? T\n : T extends ReadonlyMap<infer K, infer V>\n ? ReadonlyMap<ReadonlyValue<K>, ReadonlyValue<V>>\n : T extends ReadonlySet<infer V>\n ? ReadonlySet<ReadonlyValue<V>>\n : T extends Date\n ? Omit<Date, `set${string}`>\n : T extends object\n ? { readonly [K in keyof T]: ReadonlyValue<T[K]> }\n : T;\n\nexport type DocumentListConfig<TItem> = {\n readonly keyOf: (item: ReadonlyValue<TItem>) => string;\n};\nexport type DocumentTreeNode<TValue> = {\n readonly parentId?: string;\n readonly children: readonly string[];\n readonly value?: ReadonlyValue<TValue>;\n};\nexport type DocumentTreeValue<TValue> = {\n readonly rootId?: string;\n readonly nodes: Readonly<Record<string, DocumentTreeNode<TValue>>>;\n};\n\ntype BaseNode<K extends string> = {\n readonly kind: K;\n readonly optional?: boolean;\n};\nexport type FieldNode<T, Optional extends boolean = false> = BaseNode<'field'> & {\n readonly __value?: T;\n readonly validator?: Validator<T>;\n} & (Optional extends true ? { readonly optional: true } : { readonly optional?: false });\n/** A node with optional presence. The marker replaces, rather than intersects, a field marker. */\nexport type OptionalNode<TNode extends DocumentNode> =\n TNode extends FieldNode<infer TValue, boolean>\n ? FieldNode<TValue, true>\n : TNode & { readonly optional: true };\nexport interface ObjectShape {\n readonly [key: string]: DocumentNode;\n}\nexport type ObjectNode<TShape extends ObjectShape = ObjectShape> = BaseNode<'object'> & {\n readonly shape: TShape;\n};\nexport interface VariantShape {\n readonly [key: string]: ObjectNode<ObjectShape>;\n}\nexport type VariantNode<\n TTag extends string,\n TVariants extends VariantShape,\n> = BaseNode<'variant'> & {\n readonly tag: TTag;\n readonly variants: TVariants;\n};\nexport type TableNode<\n TValue extends ObjectNode<ObjectShape> | VariantNode<string, VariantShape>,\n TKey extends string = string,\n> = BaseNode<'table'> & {\n readonly value: TValue;\n readonly key?: Validator<TKey>;\n};\nexport type MapNode<\n TValue extends ValueSchemaNode,\n TKey extends string = string,\n> = BaseNode<'map'> & {\n readonly value: TValue;\n readonly key?: Validator<TKey>;\n};\nexport type ListNode<TItem> = BaseNode<'list'> & {\n readonly value: FieldNode<TItem, boolean>;\n keyOf(item: ReadonlyValue<TItem>): string;\n};\nexport type TreeNode<TValue> = BaseNode<'tree'> & {\n readonly value: FieldNode<TValue, boolean>;\n};\n\nexport type DocumentNode =\n | FieldNode<unknown, false>\n | FieldNode<unknown, true>\n | ObjectNode<ObjectShape>\n | VariantNode<string, VariantShape>\n | TableNode<ObjectNode<ObjectShape> | VariantNode<string, VariantShape>>\n | MapNode<ValueSchemaNode>\n | ListNode<unknown>\n | TreeNode<unknown>;\n\n// Flatten only schema-generated objects; user-supplied field values stay opaque.\ntype SchemaObject<T> = { [K in keyof T]: T[K] } & {};\n\n/** Infer a document or node value, including optional node presence. */\nexport type Infer<T extends DocumentNode> = T extends { readonly optional: true }\n ? NodeValue<T> | undefined\n : NodeValue<T>;\n\ntype NodeValue<N> =\n N extends FieldNode<infer T, infer O>\n ? O extends true\n ? ReadonlyValue<T> | undefined\n : ReadonlyValue<T>\n : N extends ObjectNode<infer S>\n ? ShapeValue<S>\n : N extends VariantNode<infer T, infer V>\n ? {\n [K in keyof V & string]: SchemaObject<{ readonly [P in T]: K } & NodeValue<V[K]>>;\n }[keyof V & string]\n : N extends TableNode<infer V, infer K>\n ? {\n readonly ids: readonly K[];\n readonly byId: Readonly<Record<K, NodeValue<V>>>;\n }\n : N extends MapNode<infer V, infer K>\n ? Readonly<Record<K, NodeValue<V>>>\n : N extends ListNode<infer I>\n ? readonly ReadonlyValue<I>[]\n : N extends TreeNode<infer T>\n ? DocumentTreeValue<T>\n : never;\n\ntype OptionalKeys<S extends ObjectShape> = {\n [K in keyof S]: S[K] extends { readonly optional: true } ? K : never;\n}[keyof S];\ntype RequiredKeys<S extends ObjectShape> = Exclude<keyof S, OptionalKeys<S>>;\ntype ShapeValue<S extends ObjectShape> = SchemaObject<\n { readonly [K in RequiredKeys<S>]: NodeValue<S[K]> } & {\n readonly [K in OptionalKeys<S>]?: NodeValue<S[K]>;\n }\n>;\n\nexport type EntitySchemaNode = ObjectNode<ObjectShape> | VariantNode<string, VariantShape>;\nexport type ValueSchemaNode = EntitySchemaNode | FieldNode<unknown, boolean>;\nexport type DocumentAnchor<K extends string = string> =\n { readonly at: 'start' | 'end' } | { readonly before: K } | { readonly after: K };\n\nexport type CollectionSelector<\n TId extends string = string,\n TNode extends ValueSchemaNode = ValueSchemaNode,\n> = {\n readonly kind: 'collection';\n readonly schema: ObjectNode;\n readonly address: DocumentAddress;\n readonly __id?: TId;\n /** Compile-time entry schema carried by schema selectors. */\n readonly __node?: TNode;\n};\nexport type ValueSelector<TResult = unknown> = {\n readonly kind: 'value';\n readonly schema: ObjectNode;\n readonly address: DocumentAddress;\n readonly __value?: TResult;\n};\nexport type ImpactTarget<T = unknown> =\n | { readonly kind: 'value'; readonly at: DocumentAddress }\n | ValueSelector<T>\n | {\n readonly kind: 'collection';\n readonly at: DocumentAddress;\n readonly id?: string;\n }\n | CollectionSelector<string>;\ndeclare const pathValue: unique symbol;\ndeclare const collectionNode: unique symbol;\ndeclare const collectionKey: unique symbol;\ntype PathMarker<TValue> = { readonly [pathValue]: TValue };\n\ntype SchemaPathFor<S extends ObjectShape = ObjectShape, TValue = unknown> = {\n readonly [K in keyof S]: PathValue<S[K]>;\n} & PathMarker<TValue>;\n\nexport type SchemaPath<S extends ObjectShape = ObjectShape> = SchemaPathFor<S, ShapeValue<S>>;\nexport type PathPick<S extends ObjectNode = ObjectNode> = (\n path: SchemaPath<S['shape']>\n) => PathMarker<unknown>;\n\ntype VariantKeys<V extends VariantShape> = {\n [K in keyof V & string]: keyof (V[K] extends ObjectNode<infer S> ? S : {});\n}[keyof V & string] &\n string;\ntype VariantFieldPath<V extends VariantShape, K extends string> = {\n [P in keyof V & string]: V[P] extends ObjectNode<infer S>\n ? K extends keyof S\n ? PathValue<S[K]>\n : never\n : never;\n}[keyof V & string];\ntype VariantPath<T extends string, V extends VariantShape, TValue> = {\n readonly [K in VariantKeys<V>]: VariantFieldPath<V, K>;\n} & { readonly [K in T]: PathMarker<keyof V & string> } & PathMarker<TValue>;\nexport type CollectionPath<\n N extends ValueSchemaNode = ValueSchemaNode,\n TValue = unknown,\n K extends string = string,\n> = PathMarker<TValue> & {\n item(id: K): PathValue<N>;\n readonly [collectionNode]: N;\n readonly [collectionKey]: K;\n};\n\ntype PathValue<N extends DocumentNode> =\n N extends ObjectNode<infer S>\n ? SchemaPathFor<S, Infer<N>>\n : N extends VariantNode<infer TTag, infer V>\n ? VariantPath<TTag, V, Infer<N>>\n : N extends TableNode<infer V, infer K>\n ? CollectionPath<V, Infer<N>, K>\n : N extends MapNode<infer V, infer K>\n ? CollectionPath<V, Infer<N>, K>\n : PathMarker<Infer<N>>;\ntype CollectionInfo<T> = T extends {\n readonly [collectionNode]: infer TNode extends ValueSchemaNode;\n readonly [collectionKey]: infer K extends string;\n}\n ? { readonly id: K; readonly node: TNode }\n : never;\nexport type CollectionId<T> =\n CollectionInfo<T> extends { readonly id: infer TId extends string } ? TId : string;\nexport type CollectionNode<T> =\n CollectionInfo<T> extends { readonly node: infer TNode extends ValueSchemaNode }\n ? TNode\n : ValueSchemaNode;\n\nconst node = <T extends DocumentNode>(value: T): T => Object.freeze(value);\nexport const field = <T>(validator?: Validator<T>): FieldNode<T> =>\n node({ kind: 'field', ...(validator ? { validator } : {}) });\ntype OptionalLeaf =\n | FieldNode<unknown, boolean>\n | VariantNode<string, VariantShape>\n | MapNode<ValueSchemaNode>\n | ListNode<unknown>\n | TreeNode<unknown>;\nexport const optional = <T extends OptionalLeaf>(value: T): OptionalNode<T> => {\n if (!['field', 'variant', 'map', 'list', 'tree'].includes(value.kind))\n throw new TypeError('Only field, variant, map, list and tree nodes support optional presence.');\n return node({ ...value, optional: true } as OptionalNode<T>);\n};\nexport const object = <S extends ObjectShape>(shape: S): ObjectNode<S> =>\n node({ kind: 'object', shape: Object.freeze({ ...shape }) });\nexport const variant = <T extends string, V extends VariantShape>(\n tag: T,\n variants: V\n): VariantNode<T, V> => node({ kind: 'variant', tag, variants: Object.freeze({ ...variants }) });\nexport const table = <V extends EntitySchemaNode, K extends string = string>(\n value: V,\n options?: { readonly key: Validator<K> }\n): TableNode<V, K> => node({ kind: 'table', value, ...options });\nexport const map = <V extends ValueSchemaNode, K extends string = string>(\n value: V,\n options?: { readonly key: Validator<K> }\n): MapNode<V, K> => node({ kind: 'map', value, ...options });\nexport const list = <TItem>(\n value: FieldNode<TItem, boolean>,\n config: DocumentListConfig<TItem>\n): ListNode<TItem> => node({ kind: 'list', keyOf: config.keyOf, value });\nexport const tree = <TValue>(value: FieldNode<TValue, boolean>): TreeNode<TValue> =>\n node({ kind: 'tree', value });\n\nconst paths = new WeakMap<\n object,\n {\n readonly address: DocumentAddress;\n readonly nodes: readonly DocumentNode[];\n readonly owner: object;\n }\n>();\n\nconst pathProxy = (\n nodes: readonly DocumentNode[],\n address: DocumentAddress,\n owner: object\n): object => {\n const proxy = new Proxy(\n {},\n {\n get: (_target, property: string | symbol) => {\n if (typeof property !== 'string') return undefined;\n const collection = nodes.every(node => node.kind === 'table' || node.kind === 'map');\n if (collection && property === 'item')\n return (id: string) => {\n if (typeof id !== 'string') throw new TypeError('Collection keys must be strings.');\n for (const node of nodes)\n if (node.kind === 'table' || node.kind === 'map') {\n const invalid = checkKey(node.key, id, [...address, id]);\n if (invalid) throw new TypeError(invalid.message);\n }\n return pathProxy(\n nodes.map(node => (node as TableNode<EntitySchemaNode>).value),\n [...address, id],\n owner\n );\n };\n const children = nodes.flatMap(node => {\n if (node.kind === 'object')\n return Object.hasOwn(node.shape, property) ? [node.shape[property]] : [];\n if (node.kind !== 'variant') return [];\n if (property === node.tag) return [field<string>()];\n return Object.values(node.variants).flatMap(branch =>\n Object.hasOwn(branch.shape, property) ? [branch.shape[property]] : []\n );\n });\n if (!children.length) throw new TypeError(`Invalid schema path segment: ${property}`);\n return pathProxy(children, [...address, property], owner);\n },\n }\n );\n paths.set(proxy, { nodes, address, owner });\n return proxy;\n};\n\nexport const compilePath = <S extends ObjectShape>(\n owner: ObjectNode<S>,\n kind: 'collection' | 'value',\n pick: (path: SchemaPath<S>) => unknown\n): CollectionSelector | ValueSelector => {\n const scope = {};\n const value = pick(pathProxy([owner], [], scope) as SchemaPath<S>);\n const selected = typeof value === 'object' && value !== null ? paths.get(value) : undefined;\n if (!selected || selected.owner !== scope)\n throw new TypeError('Selector must return a path from its callback.');\n if (\n kind === 'collection' &&\n !selected.nodes.every(node => node.kind === 'table' || node.kind === 'map')\n )\n throw new TypeError('Collection selectors require a table or map path.');\n const result = Object.freeze({\n kind,\n schema: owner,\n address: Object.freeze([...selected.address]),\n }) as CollectionSelector | ValueSelector;\n return result;\n};\n","import type { MutationSession } from '../session';\nimport type { ResolvedContainer } from '../../address';\nimport { fail } from '../issue';\n\nexport function put(\n session: MutationSession,\n container: ResolvedContainer,\n id: string,\n value: unknown\n): void {\n if (container.node.kind !== 'map')\n return fail(container.at, 'invalid-collection', 'Expected a map.');\n session.writeMember(container, id, value, 'set');\n}\n\nexport function remove(session: MutationSession, container: ResolvedContainer, id: string): void {\n if (container.node.kind !== 'map')\n return fail(container.at, 'invalid-collection', 'Expected a map.');\n session.writeMember(container, id, undefined, 'remove');\n}\n","import type { DocumentAnchor } from '../../schema';\nimport type { MutationSession } from '../session';\nimport type { ResolvedContainer } from '../../address';\nimport * as anchor from '../anchor';\nimport { fail } from '../issue';\nexport function create(\n session: MutationSession,\n container: ResolvedContainer,\n entries: readonly { id: string; value: unknown }[],\n position?: DocumentAnchor\n): void {\n const { at, node, value } = container;\n if (node.kind !== 'table') return fail(at, 'invalid-collection', 'Expected a table.');\n const table = value as { ids: string[]; byId: Record<string, unknown> };\n if (!anchor.valid(table.ids, position))\n return fail(at, 'invalid-anchor', 'Unknown table anchor.');\n const ids = new Set<string>();\n for (const entry of entries) {\n if (Object.hasOwn(table.byId, entry.id) || ids.has(entry.id))\n return fail(at, 'duplicate-entity', 'Table key already exists.');\n ids.add(entry.id);\n }\n if (!entries.length) return;\n const index = anchor.index(table.ids, position);\n for (const entry of entries) session.writeMember(container, entry.id, entry.value, 'set');\n const length = table.ids.length;\n table.ids.length += entries.length;\n table.ids.copyWithin(index + entries.length, index, length);\n for (let i = 0; i < entries.length; i++) table.ids[index + i] = entries[i].id;\n}\nexport function remove(\n session: MutationSession,\n container: ResolvedContainer,\n ids: readonly string[]\n): void {\n const { at, node, value } = container;\n if (node.kind !== 'table') return fail(at, 'invalid-collection', 'Expected a table.');\n const table = value as { ids: string[]; byId: Record<string, unknown> };\n for (const id of ids)\n if (!Object.hasOwn(table.byId, id))\n return fail(at, 'missing-entity', 'Table key does not exist.');\n if (!ids.length) return;\n const removed = new Set(ids);\n for (const id of removed) session.writeMember(container, id, undefined, 'remove');\n table.ids = table.ids.filter(id => !removed.has(id));\n}\n\nexport function replace(\n session: MutationSession,\n container: ResolvedContainer,\n id: string,\n value: unknown\n): void {\n const { at, node, value: tableValue } = container;\n if (node.kind !== 'table') return fail(at, 'invalid-collection', 'Expected a table.');\n const table = tableValue as { byId: Record<string, unknown> };\n if (!Object.hasOwn(table.byId, id))\n return fail(at.concat(id), 'missing-entity', 'Table key does not exist.');\n session.writeMember(container, id, value, 'set');\n}\n","import type { DocumentAnchor } from '../../schema';\nimport type { MutationSession } from '../session';\nimport type { ResolvedContainer } from '../../address';\nimport * as anchor from '../anchor';\nimport { fail } from '../issue';\nexport function insert(\n session: MutationSession,\n container: ResolvedContainer,\n value: unknown,\n position?: DocumentAnchor\n): void {\n const { at, node, value: current } = container;\n if (node.kind !== 'list') return fail(at, 'invalid-list-key', 'Expected a list.');\n session.validate(node.value, value, at);\n const id = node.keyOf(value);\n if (typeof id !== 'string') return fail(at, 'invalid-list-key', 'List key must be a string.');\n const items = current as unknown[],\n keys = anchor.keys(items, node.keyOf);\n if (keys.index(id) >= 0) return fail(at, 'duplicate-list-item', 'List key already exists.');\n if (!anchor.valid(keys, position)) return fail(at, 'invalid-anchor', 'Unknown list anchor.');\n session.recorder.order(container);\n session.recorder.member(container, id, session.definition(container, id), -1);\n anchor.insert(items, anchor.index(keys, position), value);\n session.invalidate();\n}\nexport function replace(\n session: MutationSession,\n container: ResolvedContainer,\n id: string,\n value: unknown\n): void {\n const { at, node, value: items } = container;\n if (node.kind !== 'list') return fail(at, 'invalid-list-key', 'Expected a list.');\n const index = anchor.indexedKeys(items as unknown[], node.keyOf).index(id);\n if (index < 0) return fail(at, 'missing-list-item', 'List key does not exist.');\n session.writeMember(container, id, value, 'set', index);\n}\nexport function remove(session: MutationSession, container: ResolvedContainer, id: string): void {\n const { at, node, value } = container;\n if (node.kind !== 'list') return fail(at, 'missing-list-item', 'List key does not exist.');\n const index = anchor.keys(value as unknown[], node.keyOf).index(id);\n if (index < 0) return fail(at, 'missing-list-item', 'List key does not exist.');\n session.writeMember(container, id, undefined, 'remove', index);\n}\n","import type { DocumentAddress } from '../../schema';\nimport type { ResolvedTreeContainer } from '../../address';\nimport type { MutationSession } from '../session';\nimport { contains, type MutableTree, type TreePosition } from '../tree';\nimport { fail } from '../issue';\nconst node = (tree: MutableTree, id: string) =>\n Object.hasOwn(tree.nodes, id) ? tree.nodes[id] : undefined;\nconst positionIndex = (index: number | undefined, length: number, at: DocumentAddress): number => {\n if (index !== undefined && (!Number.isInteger(index) || index < 0))\n return fail(at, 'invalid-tree-index', 'Tree index must be nonnegative.');\n return Math.min(index ?? length, length);\n};\nexport const insert = (\n session: MutationSession,\n container: ResolvedTreeContainer,\n id: string,\n value: unknown,\n position: TreePosition | undefined\n): void => {\n const { at, node: schema, value: tree } = container;\n if (typeof id !== 'string') return fail(at, 'invalid-key', 'Tree keys must be strings.');\n if (contains(tree, id)) return fail(at, 'duplicate-tree-node', 'Tree node already exists.');\n const parentId = position?.parentId;\n const parent = parentId === undefined ? undefined : node(tree, parentId);\n if (\n (tree.rootId !== undefined && !parent) ||\n (tree.rootId === undefined && parentId !== undefined)\n )\n return fail(at, 'missing-tree-parent', 'A nonempty tree requires an existing parent.');\n const index = positionIndex(position?.index, parent?.children.length ?? 0, at);\n session.validate(schema.value, value, at.concat(id));\n session.recorder.tree(container, id);\n if (parentId !== undefined) session.recorder.tree(container, parentId);\n Object.defineProperty(tree.nodes, id, {\n value: { ...(parentId === undefined ? {} : { parentId }), children: [], value },\n writable: true,\n configurable: true,\n enumerable: true,\n });\n if (parent) parent.children.splice(index, 0, id);\n else tree.rootId = id;\n session.invalidate();\n};\nexport const replace = (\n session: MutationSession,\n container: ResolvedTreeContainer,\n id: string,\n value: unknown\n): void => {\n const { at, node: schema, value: tree } = container;\n const entry = node(tree, id);\n if (!entry) return fail(at, 'missing-tree-node', 'Tree node does not exist.');\n if (Object.is(entry.value, value) && Object.hasOwn(entry, 'value')) return;\n session.validate(schema.value, value, at.concat(id));\n session.recorder.tree(container, id);\n entry.value = value;\n};\nexport const remove = (\n session: MutationSession,\n container: ResolvedTreeContainer,\n id: string\n): void => {\n const { at, value: tree } = container;\n const entry = node(tree, id);\n if (!entry) return fail(at, 'missing-tree-node', 'Tree node does not exist.');\n const ids: string[] = [],\n stack = [id];\n while (stack.length) {\n const current = stack.pop()!;\n ids.push(current);\n for (const child of tree.nodes[current].children) stack.push(child);\n }\n for (const key of ids) session.recorder.tree(container, key);\n if (entry.parentId !== undefined) session.recorder.tree(container, entry.parentId);\n if (entry.parentId === undefined) delete tree.rootId;\n else {\n const children = tree.nodes[entry.parentId].children;\n children.splice(children.indexOf(id), 1);\n }\n for (const key of ids) delete tree.nodes[key];\n session.invalidate();\n};\nexport const move = (\n session: MutationSession,\n container: ResolvedTreeContainer,\n id: string,\n position: TreePosition | undefined\n): void => {\n const { at, value: tree } = container;\n const entry = node(tree, id),\n parentId = position?.parentId;\n if (!entry) return fail(at, 'missing-tree-node', 'Tree node does not exist.');\n if (entry.parentId === undefined || parentId === undefined || !contains(tree, parentId))\n return fail(\n at,\n 'missing-tree-parent',\n 'Moving requires a non-root node and an existing parent.'\n );\n for (\n let ancestor: string | undefined = parentId;\n ancestor !== undefined;\n ancestor = tree.nodes[ancestor].parentId\n )\n if (ancestor === id) return fail(at, 'tree-cycle', 'Cannot move a node under its descendant.');\n const old = tree.nodes[entry.parentId],\n next = tree.nodes[parentId];\n const index = positionIndex(position?.index, next.children.length - (old === next ? 1 : 0), at);\n const previous = old.children.indexOf(id);\n if (old === next && previous === index) return;\n session.recorder.tree(container, id);\n session.recorder.tree(container, entry.parentId);\n session.recorder.tree(container, parentId);\n old.children.splice(previous, 1);\n next.children.splice(index, 0, id);\n entry.parentId = parentId;\n session.invalidate();\n};\n","import type { DocumentAnchor } from '../../schema';\nimport type { MutationSession } from '../session';\nimport type { ResolvedContainer } from '../../address';\nimport * as anchor from '../anchor';\nimport { fail } from '../issue';\nexport function move(\n session: MutationSession,\n container: ResolvedContainer,\n id: string,\n position?: DocumentAnchor\n): void {\n const { at, node, value } = container;\n if (node.kind !== 'table' && node.kind !== 'list')\n return fail(at, 'invalid-collection', 'Expected an ordered container.');\n const items = node.kind === 'table' ? (value as { ids: string[] }).ids : (value as unknown[]);\n const keys = node.kind === 'table' ? (items as string[]) : anchor.keys(items, node.keyOf);\n const index =\n node.kind === 'table' ? (items as string[]).indexOf(id) : (keys as anchor.KeyOrder).index(id);\n if (index < 0) return fail(at, 'missing-entity', 'Ordered key does not exist.');\n if (!anchor.valid(keys, position)) return fail(at, 'invalid-anchor', 'Unknown order anchor.');\n const next = anchor.afterRemove(keys, index, position);\n if (next === index) return;\n session.recorder.order(container);\n anchor.move(items, index, next);\n session.invalidate();\n}\n","import type {\n DocumentAddress,\n DocumentAnchor,\n DocumentNode,\n DocumentTreeValue,\n FieldNode,\n Infer,\n ListNode,\n MapNode,\n ObjectNode,\n ObjectShape,\n ReadonlyValue,\n TableNode,\n TreeNode,\n ValueSchemaNode,\n VariantNode,\n} from '../schema';\nimport {\n nodeAt,\n resolveChild,\n resolveLocated,\n compiledShape,\n type FixedMember,\n type ResolvedContainer,\n type ResolvedTreeContainer,\n} from '../address';\nimport { copyValue } from '../schema-value';\nimport type { DependencyTracker } from './dependency';\nimport type { CanonicalState } from '../mutation/state';\nimport type { MutationSession } from '../mutation/session';\nimport * as mapOperations from '../mutation/operations/map';\nimport * as tableOperations from '../mutation/operations/table';\nimport * as listOperations from '../mutation/operations/list';\nimport * as treeOperations from '../mutation/operations/tree';\nimport * as orderOperations from '../mutation/operations/order';\nimport * as tree from '../mutation/tree';\nimport * as anchor from '../mutation/anchor';\nimport { profile } from '../profile';\n\ndeclare const scopeValue: unique symbol;\ntype Scoped<N extends DocumentNode, W extends boolean, V = Infer<N>> = {\n readonly [scopeValue]?: readonly [node: N, writable: W, value: V];\n};\ntype ShapeAccess<S extends ObjectShape, W extends boolean> = W extends true\n ? { -readonly [K in keyof S]: Access<S[K], W> }\n : { readonly [K in keyof S]: Access<S[K], W> };\ntype MapAccess<K extends string, N extends ValueSchemaNode, W extends boolean> = {\n get(id: K): Access<N, W> | undefined;\n has(id: K): boolean;\n ids(): readonly K[];\n} & (W extends true\n ? {\n put(id: K, value: Infer<N>): void;\n remove(id: K): void;\n replace(value: Readonly<Record<K, Infer<N>>>): void;\n }\n : {});\ntype TableAccess<K extends string, N extends ValueSchemaNode, W extends boolean> = {\n get(id: K): Access<N, W> | undefined;\n has(id: K): boolean;\n ids(): readonly K[];\n} & (W extends true\n ? {\n create(id: K, value: Infer<N>, anchor?: DocumentAnchor<K>): void;\n create(\n entries: readonly { readonly id: K; readonly value: Infer<N> }[],\n anchor?: DocumentAnchor<K>\n ): void;\n remove(ids: K | readonly K[]): void;\n move(id: K, anchor?: DocumentAnchor<K>): void;\n replace(value: {\n readonly ids: readonly K[];\n readonly byId: Readonly<Record<K, Infer<N>>>;\n }): void;\n replace(id: K, value: Infer<N>): void;\n }\n : {});\ntype ListAccess<T, W extends boolean> = {\n get(key: string): ReadonlyValue<T> | undefined;\n has(key: string): boolean;\n ids(): readonly string[];\n} & (W extends true\n ? {\n insert(value: ReadonlyValue<T>, anchor?: DocumentAnchor): void;\n remove(key: string): void;\n move(key: string, anchor?: DocumentAnchor): void;\n replace(value: readonly ReadonlyValue<T>[]): void;\n replace(key: string, value: ReadonlyValue<T>): void;\n }\n : {});\ntype TreeAccess<T, W extends boolean> = {\n rootId(): string | undefined;\n get(id: string): ReadonlyValue<T> | undefined;\n has(id: string): boolean;\n parent(id: string): string | undefined;\n children(id: string): readonly string[] | undefined;\n} & (W extends true\n ? {\n insert(id: string, value: ReadonlyValue<T>, position?: tree.TreePosition): void;\n move(id: string, position?: tree.TreePosition): void;\n remove(id: string): void;\n replace(value: DocumentTreeValue<T>): void;\n replace(id: string, value: ReadonlyValue<T>): void;\n }\n : {});\ntype NodeAccess<N extends DocumentNode, W extends boolean> =\n N extends FieldNode<infer T, boolean>\n ? ReadonlyValue<T>\n : N extends ObjectNode<infer S>\n ? ShapeAccess<S, W> & Scoped<N, W>\n : N extends VariantNode<infer Tag, infer V>\n ? {\n [K in keyof V & string]: ShapeAccess<V[K]['shape'], W> & {\n readonly [P in Tag]: K;\n } & Scoped<N, W, Extract<Infer<N>, Record<Tag, K>>>;\n }[keyof V & string]\n : N extends MapNode<infer V, infer K>\n ? MapAccess<K, V, W> & Scoped<N, W>\n : N extends TableNode<infer V, infer K>\n ? TableAccess<K, V, W> & Scoped<N, W>\n : N extends ListNode<infer T>\n ? ListAccess<T, W> & Scoped<N, W>\n : N extends TreeNode<infer T>\n ? TreeAccess<T, W> & Scoped<N, W>\n : never;\ntype Access<N extends DocumentNode, W extends boolean> = N extends { readonly optional: true }\n ? NodeAccess<N, W> | undefined\n : NodeAccess<N, W>;\nexport type Read<N extends DocumentNode> = Access<N, false>;\nexport type Draft<N extends DocumentNode> = Access<N, true>;\ntype Snapshot<T> = T extends {\n readonly [scopeValue]?: readonly [DocumentNode, boolean, infer V];\n}\n ? V\n : ReadonlyValue<T>;\ntype Target = {\n at?: DocumentAddress;\n parent?: Target;\n key: string;\n node: DocumentNode | undefined;\n value: unknown;\n generation: number;\n children:\n | { kind: 'fixed'; schema: DocumentNode; slots: (Target | undefined)[] }\n | { kind: 'dynamic'; keys: Map<string, Target> }\n | undefined;\n proxy: object | undefined;\n container?: ResolvedContainer | ResolvedTreeContainer;\n};\ntype Location = { readonly context: AccessContext; readonly target: Target };\nconst locations = new WeakMap<object, Location>();\nconst locationOf = (value: object): Location | undefined => locations.get(value);\nconst addressOf = (target: Target): DocumentAddress => {\n if (target.at) return target.at;\n profile.access('addresses');\n return (target.at = addressOf(target.parent!).concat(target.key));\n};\nexport type AccessContext = {\n readonly state: CanonicalState;\n /** Omitted for borrowed synchronous Draft and readers that must not escape. */\n readonly active?: () => boolean;\n readonly dependencies?: DependencyTracker;\n readonly session?: MutationSession;\n};\nconst assertActive = (context: AccessContext) => {\n if (context.active && !context.active()) throw new Error('Document access scope has expired.');\n};\nconst collect = (\n context: AccessContext,\n at: DocumentAddress,\n kind: 'value' | 'collection' = 'value',\n id?: string\n) => {\n context.dependencies?.record(\n kind === 'value' ? { kind, at } : { kind, at, ...(id === undefined ? {} : { id }) }\n );\n};\nexport const snapshot = <T>(value: T): Snapshot<T> => {\n const location = value && typeof value === 'object' ? locationOf(value) : undefined;\n if (!location) return value as Snapshot<T>;\n const { context } = location;\n const at = addressOf(location.target);\n profile.access('snapshots');\n collect(context, at);\n const resolved = resolve(context, location.target);\n if (!resolved.node) throw new Error('The selected schema address no longer exists.');\n return copyValue(resolved.node, resolved.value) as Snapshot<T>;\n};\n/** Replace a member with its plain Infer value through the owning draft session. */\ntype ReplaceParentAccess = {\n readonly [scopeValue]?: readonly [\n Extract<DocumentNode, { readonly kind: 'object' | 'variant' }>,\n true,\n unknown,\n ];\n};\nexport const replace = <T extends object & ReplaceParentAccess, K extends keyof Snapshot<T>>(\n container: T,\n key: K,\n value: NoInfer<Snapshot<T>[K]>\n): void => {\n const location = locationOf(container);\n if (!location) throw new TypeError('replace requires scoped document access.');\n if (typeof key !== 'string') throw new TypeError('Document keys must be strings.');\n Reflect.set(container, key, value);\n};\n/** Projection collection contexts use the same scoped access, with explicit collection tools. */\nexport type CollectionAccess<K extends string, N extends ValueSchemaNode> = TableAccess<\n K,\n N,\n false\n>;\nconst resolve = (context: AccessContext, target: Target): Target => {\n assertActive(context);\n const generation = context.session?.generation ?? 0;\n if (target.generation !== generation) {\n profile.access('resolutions');\n if (!target.parent && !target.at!.length) {\n target.node = context.state.schema;\n target.value = context.state.document;\n } else {\n const parent = target.parent && resolve(context, target.parent);\n const location = parent\n ? resolveChild(parent.node, parent.value, target.key)\n : resolveLocated(context.state.schema, context.state.document, target.at!);\n target.node =\n location?.node ?? nodeAt(context.state.schema, addressOf(target), context.state.document);\n target.value =\n location && Object.hasOwn(location.parent, location.key)\n ? (location.parent as Record<string | number, unknown>)[location.key]\n : undefined;\n }\n target.generation = generation;\n }\n return target;\n};\n\nexport const createAccess = (context: AccessContext, initial: DocumentAddress = []): unknown => {\n profile.access('scopes');\n const mutable = (): MutationSession => {\n assertActive(context);\n if (!context.session) throw new TypeError('Cannot modify read-only document access.');\n return context.session;\n };\n const writableContainer = (target: Target, session: MutationSession): ResolvedContainer => {\n if (target.container?.generation === session.generation && 'layout' in target.container)\n return target.container;\n return (target.container = session.bind(addressOf(target), target.node, target.value));\n };\n const childAt = (target: Target, key: string): DocumentAddress => {\n profile.access('addresses');\n return addressOf(target).concat(key);\n };\n const access = (target: Target): unknown => {\n if (target.proxy) return target.proxy;\n const proxy = new Proxy(target, handler);\n profile.access('proxies');\n locations.set(proxy, { context, target });\n target.proxy = proxy;\n return proxy;\n };\n const createTarget = (\n at: DocumentAddress | undefined,\n parent: Target | undefined,\n key: string\n ): Target => ({\n at,\n parent,\n key,\n node: undefined,\n value: undefined,\n generation: -1,\n children: undefined,\n proxy: undefined,\n });\n const childAccess = (\n target: Target,\n member: string | FixedMember,\n node: DocumentNode,\n value: unknown\n ) => {\n const key = typeof member === 'string' ? member : member.key;\n if (node.kind === 'field' || value === undefined) {\n if (context.dependencies) collect(context, childAt(target, key));\n return value;\n }\n let children = target.children;\n let child: Target;\n if (typeof member !== 'string') {\n if (children?.kind !== 'fixed' || children.schema !== target.node)\n children = {\n kind: 'fixed',\n schema: target.node!,\n slots: new Array(compiledShape(target.node!, target.value)!.members.size),\n };\n child = children.slots[member.slot] ??= createTarget(undefined, target, key);\n } else {\n if (children?.kind !== 'dynamic') children = { kind: 'dynamic', keys: new Map() };\n const retained = children.keys.get(key);\n child = retained ?? createTarget(undefined, target, key);\n if (!retained) children.keys.set(key, child);\n }\n target.children = children;\n if (child.generation === target.generation) return child.proxy;\n child.node = node;\n child.value = value;\n child.generation = target.generation;\n return access(child);\n };\n const collectionValue = (target: Target, node: DocumentNode) => {\n const current = resolve(context, target);\n if (current.node !== node || current.value === undefined)\n throw new TypeError('The collection method belongs to a replaced schema branch.');\n return current.value;\n };\n const writableCollection = (target: Target, node: DocumentNode): ResolvedContainer => {\n const session = mutable();\n collectionValue(target, node);\n return writableContainer(target, session);\n };\n const writableTree = (target: Target, node: DocumentNode): ResolvedTreeContainer => {\n const session = mutable();\n collectionValue(target, node);\n if (target.container?.generation === session.generation && !('layout' in target.container))\n return target.container;\n return (target.container = session.bindTree(addressOf(target), target.node, target.value));\n };\n const replaceCollection = (target: Target, node: DocumentNode, value: unknown) => {\n const session = mutable();\n collectionValue(target, node);\n session.replace(addressOf(target), value);\n };\n const mapMethod = (\n target: Target,\n property: string,\n node: Extract<DocumentNode, { kind: 'map' }>\n ): unknown => {\n if (property === 'ids')\n return () => {\n const current = collectionValue(target, node) as Record<string, unknown>;\n if (context.dependencies) collect(context, addressOf(target), 'collection');\n return Object.keys(current);\n };\n if (property === 'has')\n return (id: string) => {\n const current = collectionValue(target, node) as Record<string, unknown>;\n if (context.dependencies) collect(context, addressOf(target), 'collection', id);\n return Object.hasOwn(current, id);\n };\n if (property === 'get')\n return (id: string) => {\n const current = collectionValue(target, node) as Record<string, unknown>;\n if (context.dependencies) collect(context, addressOf(target), 'collection', id);\n if (!Object.hasOwn(current, id)) return undefined;\n if (node.value.kind === 'field') {\n if (context.dependencies) collect(context, childAt(target, id));\n return current[id];\n }\n return childAccess(target, id, node.value, current[id]);\n };\n if (property === 'put')\n return (id: string, value: unknown) => {\n const writable = writableCollection(target, node);\n mapOperations.put(context.session!, writable, id, value);\n };\n if (property === 'remove')\n return (id: string) => {\n const writable = writableCollection(target, node);\n mapOperations.remove(context.session!, writable, id);\n };\n if (property === 'replace') return (value: unknown) => replaceCollection(target, node, value);\n return undefined;\n };\n const orderedMethod = (\n target: Target,\n property: string,\n node: Extract<DocumentNode, { kind: 'table' | 'list' }>\n ): unknown => {\n const at = addressOf(target);\n if (property === 'ids')\n return () => {\n const current = collectionValue(target, node);\n collect(context, at, 'collection');\n return node.kind === 'table'\n ? [...(current as { ids: string[] }).ids]\n : (current as unknown[]).map(node.keyOf);\n };\n if (property === 'has')\n return (id: string) => {\n const current = collectionValue(target, node);\n collect(context, at, 'collection', id);\n return node.kind === 'table'\n ? Object.hasOwn((current as { byId: object }).byId, id)\n : anchor.indexedKeys(current as unknown[], node.keyOf).index(id) >= 0;\n };\n if (property === 'get')\n return (id: string) => {\n const current = collectionValue(target, node);\n collect(context, at, 'collection', id);\n const location = resolveChild(node, current, id);\n if (!location || !Object.hasOwn(location.parent, location.key)) return undefined;\n return childAccess(\n target,\n id,\n location.node,\n (location.parent as Record<string | number, unknown>)[location.key]\n );\n };\n if (property === 'move')\n return (id: string, position?: DocumentAnchor) => {\n const writable = writableCollection(target, node);\n orderOperations.move(context.session!, writable, id, position);\n };\n return undefined;\n };\n const tableMethod = (\n target: Target,\n property: string,\n node: Extract<DocumentNode, { kind: 'table' }>\n ): unknown => {\n if (property === 'create')\n return (\n input: string | readonly { id: string; value: unknown }[],\n valueOrPosition?: unknown,\n position?: DocumentAnchor\n ) => {\n const writable = writableCollection(target, node);\n tableOperations.create(\n context.session!,\n writable,\n Array.isArray(input) ? input : [{ id: input as string, value: valueOrPosition }],\n Array.isArray(input) ? (valueOrPosition as DocumentAnchor | undefined) : position\n );\n };\n if (property === 'remove')\n return (ids: string | readonly string[]) => {\n const writable = writableCollection(target, node);\n tableOperations.remove(context.session!, writable, typeof ids === 'string' ? [ids] : ids);\n };\n if (property === 'replace')\n return (...args: [unknown, unknown?]) => {\n const [valueOrId, value] = args;\n if (args.length === 1) return replaceCollection(target, node, valueOrId);\n const writable = writableCollection(target, node);\n tableOperations.replace(context.session!, writable, valueOrId as string, value);\n };\n return orderedMethod(target, property, node);\n };\n const listMethod = (\n target: Target,\n property: string,\n node: Extract<DocumentNode, { kind: 'list' }>\n ): unknown => {\n if (property === 'insert')\n return (value: unknown, position?: DocumentAnchor) => {\n const writable = writableCollection(target, node);\n listOperations.insert(context.session!, writable, value, position);\n };\n if (property === 'remove')\n return (id: string) => {\n const writable = writableCollection(target, node);\n listOperations.remove(context.session!, writable, id);\n };\n if (property === 'replace')\n return (...args: [unknown, unknown?]) => {\n const [valueOrId, value] = args;\n if (args.length === 1) return replaceCollection(target, node, valueOrId);\n const writable = writableCollection(target, node);\n listOperations.replace(context.session!, writable, valueOrId as string, value);\n };\n return orderedMethod(target, property, node);\n };\n const treeMethod = (\n target: Target,\n property: string,\n node: Extract<DocumentNode, { kind: 'tree' }>\n ): unknown => {\n const at = addressOf(target);\n if (property === 'insert')\n return (id: string, value: unknown, position?: tree.TreePosition) => {\n const writable = writableTree(target, node);\n treeOperations.insert(context.session!, writable, id, value, position);\n };\n if (property === 'remove')\n return (id: string) => {\n const writable = writableTree(target, node);\n treeOperations.remove(context.session!, writable, id);\n };\n if (property === 'move')\n return (id: string, position?: tree.TreePosition) => {\n const writable = writableTree(target, node);\n treeOperations.move(context.session!, writable, id, position);\n };\n if (property === 'replace')\n return (...args: [unknown, unknown?]) => {\n const [valueOrId, value] = args;\n if (args.length === 1) return replaceCollection(target, node, valueOrId);\n const writable = writableTree(target, node);\n treeOperations.replace(context.session!, writable, valueOrId as string, value);\n };\n const current = () => {\n collect(context, at);\n return collectionValue(target, node) as tree.MutableTree;\n };\n if (property === 'rootId') return () => current().rootId;\n if (property === 'get')\n return (id: string) => {\n const value = current();\n return tree.contains(value, id) ? value.nodes[id].value : undefined;\n };\n if (property === 'has') return (id: string) => tree.contains(current(), id);\n if (property === 'parent') return (id: string) => tree.parent(current(), id);\n if (property === 'children')\n return (id: string) => {\n const children = tree.children(current(), id);\n return children ? [...children] : undefined;\n };\n return undefined;\n };\n const handler: ProxyHandler<Target> = {\n get: (target, property) => {\n const { node, value } = resolve(context, target);\n if (!node || value === undefined) return undefined;\n if (typeof property !== 'string') return undefined;\n if (node.kind === 'map') return mapMethod(target, property, node);\n if (node.kind === 'table') return tableMethod(target, property, node);\n if (node.kind === 'list') return listMethod(target, property, node);\n if (node.kind === 'tree') return treeMethod(target, property, node);\n if (node.kind === 'variant' && property === node.tag) {\n collect(context, childAt(target, property));\n return (value as Record<string, unknown>)[property];\n }\n const member = compiledShape(node, value)?.members.get(property);\n if (!member) return undefined;\n if (member.field) {\n if (context.dependencies) collect(context, childAt(target, property));\n return (value as Record<string, unknown>)[property];\n }\n return childAccess(\n target,\n node.kind === 'object' ? member : property,\n member.node,\n (value as Record<string, unknown>)[property]\n );\n },\n set: (target, property, value) => {\n const session = mutable(),\n { node } = resolve(context, target);\n if (\n typeof property !== 'string' ||\n !node ||\n (node.kind !== 'object' && node.kind !== 'variant')\n )\n throw new TypeError('Invalid structural assignment.');\n if (node.kind === 'variant' && node.tag === property)\n throw new TypeError('Variant discriminants are read-only.');\n session.assignMember(writableContainer(target, session), property, value);\n return true;\n },\n deleteProperty: (target, property) => {\n const session = mutable(),\n { node } = resolve(context, target);\n if (\n typeof property !== 'string' ||\n node?.kind === 'map' ||\n (node?.kind === 'variant' && node.tag === property)\n )\n throw new TypeError('Invalid structural deletion.');\n session.removeMember(writableContainer(target, session), property);\n return true;\n },\n has: (target, property) => {\n const { node, value } = resolve(context, target);\n if (typeof property !== 'string') return false;\n if (node?.kind === 'map') return false;\n collect(context, addressOf(target));\n return value !== undefined && Object.hasOwn(value as object, property);\n },\n ownKeys: target => {\n const { node, value } = resolve(context, target);\n if (node?.kind === 'map') return [];\n if (context.dependencies) collect(context, addressOf(target));\n return value && typeof value === 'object' ? Object.keys(value) : [];\n },\n getOwnPropertyDescriptor: (target, property) => {\n const { node, value } = resolve(context, target);\n if (node?.kind === 'map') return undefined;\n return value && Object.hasOwn(value as object, property)\n ? { enumerable: true, configurable: true }\n : undefined;\n },\n defineProperty: () => {\n assertActive(context);\n throw new TypeError('Use schema assignments.');\n },\n setPrototypeOf: () => {\n assertActive(context);\n throw new TypeError('Document prototypes are immutable.');\n },\n preventExtensions: () => {\n assertActive(context);\n throw new TypeError('Document access cannot be frozen.');\n },\n };\n const root = resolve(context, createTarget(initial, undefined, ''));\n if (!root.node || root.node.kind === 'field' || root.value === undefined) {\n if (context.dependencies) collect(context, initial);\n return root.value;\n }\n return access(root);\n};\nexport const collectionAccess = (\n context: AccessContext,\n at: DocumentAddress\n): CollectionAccess<string, ValueSchemaNode> => {\n const value = createAccess(context, at);\n if (value === undefined)\n return {\n get: () => {\n assertActive(context);\n return undefined;\n },\n has: () => {\n assertActive(context);\n return false;\n },\n ids: () => {\n assertActive(context);\n return [];\n },\n };\n return value as CollectionAccess<string, ValueSchemaNode>;\n};\n","import type { DocumentAddress, ObjectNode, ImpactTarget } from './schema';\nimport type { ChangeSet } from './changes';\nimport { AddressIndex } from './address';\n\nexport const address = (target: ImpactTarget<unknown>): DocumentAddress =>\n 'at' in target ? target.at : target.address;\n\nexport const id = (target: ImpactTarget<unknown>): string | undefined =>\n target.kind === 'collection' && 'id' in target ? target.id : undefined;\n\nexport const belongs = (target: ImpactTarget<unknown>, schema: ObjectNode): boolean =>\n !('schema' in target) || target.schema === schema;\n\nexport const same = (left: ImpactTarget<unknown>, right: ImpactTarget<unknown>): boolean => {\n if (left.kind !== right.kind) return false;\n if ('schema' in left && 'schema' in right && left.schema !== right.schema) return false;\n const leftAddress = address(left);\n const rightAddress = address(right);\n if (leftAddress.length !== rightAddress.length) return false;\n for (let index = 0; index < leftAddress.length; index += 1)\n if (leftAddress[index] !== rightAddress[index]) return false;\n return left.kind !== 'collection' || id(left) === id(right);\n};\n\nexport const indexedAddress = (target: ImpactTarget<unknown>): DocumentAddress => {\n const key = id(target);\n return key === undefined ? address(target) : [...address(target), key];\n};\n\nexport const affected = (\n target: ImpactTarget,\n values: AddressIndex<true>,\n orders: AddressIndex<true>\n): boolean => {\n const at = indexedAddress(target);\n return id(target) !== undefined\n ? values.hasAncestor(at)\n : values.overlaps(at) || orders.hasDescendant(at);\n};\n\n/** Targets are classified once; commit matching never builds a reverse impact index. */\nexport class SubscriptionIndex<T> {\n private readonly ordinary = new AddressIndex<T>();\n private readonly membership = new AddressIndex<T>();\n constructor(private readonly schema: ObjectNode) {}\n add(target: ImpactTarget, value: T): void {\n if (belongs(target, this.schema))\n (id(target) === undefined ? this.ordinary : this.membership).add(\n indexedAddress(target),\n value\n );\n }\n delete(target: ImpactTarget, value: T): void {\n if (belongs(target, this.schema))\n (id(target) === undefined ? this.ordinary : this.membership).delete(\n indexedAddress(target),\n value\n );\n }\n collect(changes: ChangeSet, visit: (value: T) => void): void {\n const values = this.ordinary.query(visit);\n const members = this.membership.query(visit, 'descendants');\n const orders = this.ordinary.query(visit, 'ancestors');\n for (const change of changes.changes) {\n if (change.kind === 'reset') {\n values([]);\n members([]);\n } else if (change.kind === 'members') {\n values(change.at, change.members);\n members(change.at, change.members);\n if (change.order) orders(change.at);\n } else {\n values(change.at);\n members(change.at);\n }\n }\n }\n clear(): void {\n this.ordinary.clear();\n this.membership.clear();\n }\n}\n","import type {\n CollectionId,\n CollectionPath,\n CollectionSelector,\n ObjectNode,\n ImpactTarget,\n PathPick,\n SchemaPath,\n} from './schema';\nimport { compilePath } from './schema';\nimport type { ChangeSet } from './changes';\nimport { AddressIndex, contains } from './address';\nimport * as target from './impact-target';\nimport { profile } from './profile';\n\nexport type CollectionImpact<K> =\n | { readonly kind: 'reset' }\n | {\n readonly kind: 'incremental';\n readonly added: ReadonlySet<K>;\n readonly removed: ReadonlySet<K>;\n readonly updated: ReadonlySet<K>;\n readonly orderChanged: boolean;\n };\nexport type DocumentImpact<S extends ObjectNode> = {\n readonly kind: 'incremental' | 'reset';\n affects(pick: PathPick<S>): boolean;\n collection<P extends CollectionPath>(\n pick: (path: SchemaPath<S['shape']>) => P\n ): CollectionImpact<CollectionId<P>>;\n};\ntype ImpactQueries = {\n affects(value: ImpactTarget): boolean;\n collection(selector: CollectionSelector): CollectionImpact<string>;\n};\nconst queries = new WeakMap<object, ImpactQueries>();\nexport const affectsTarget = (impact: object, value: ImpactTarget): boolean =>\n queries.get(impact)!.affects(value);\nexport const collectionImpact = <K extends string>(\n impact: object,\n selector: CollectionSelector<K>\n): CollectionImpact<K> => queries.get(impact)!.collection(selector) as CollectionImpact<K>;\nexport const createImpact = <S extends ObjectNode>(\n schema: S,\n changes: ChangeSet\n): DocumentImpact<S> => {\n const reset = changes.changes.some(change => change.kind === 'reset');\n let values: AddressIndex<true> | undefined;\n let orders: AddressIndex<true> | undefined;\n const index = () => {\n if (!values) {\n profile.impact.index();\n values = new AddressIndex();\n orders = new AddressIndex();\n for (const change of changes.changes) {\n if (change.kind === 'members') {\n for (const member of change.members) values.add(change.at, true, member.key);\n if (change.order) orders.add(change.at, true);\n } else if (change.kind === 'tree') values.add(change.at, true);\n }\n }\n return values;\n };\n const cache = new Map<string, CollectionImpact<string>>();\n const implementation: ImpactQueries = {\n affects(value) {\n profile.impact.affects();\n if (!target.belongs(value, schema)) return false;\n if (reset) return true;\n return target.affected(value, index(), orders!);\n },\n collection(selector) {\n if (selector.schema !== schema)\n throw new TypeError('Collection belongs to another root model.');\n const key = JSON.stringify(selector.address),\n cached = cache.get(key);\n if (cached) return cached;\n if (reset) {\n const result = { kind: 'reset' } as const;\n cache.set(key, result);\n return result;\n }\n const at = selector.address;\n const added = new Set<string>(),\n removed = new Set<string>(),\n updated = new Set<string>();\n let orderChanged = false;\n for (const change of changes.changes) {\n if (change.kind === 'reset') continue;\n if (change.kind === 'members') {\n if (change.at.length < at.length && contains(change.at, at)) {\n if (change.members.some(member => member.key === at[change.at.length])) {\n const result = { kind: 'reset' } as const;\n cache.set(key, result);\n return result;\n }\n } else if (contains(at, change.at)) {\n if (change.at.length === at.length) {\n if (change.order) {\n const positions = new Map(change.order.after.map((id, i) => [id, i]));\n let previous = -1;\n for (const id of change.order.before) {\n const position = positions.get(id);\n if (position === undefined) continue;\n if (position < previous) orderChanged = true;\n previous = position;\n }\n }\n for (const member of change.members) {\n if (member.kind === 'added') added.add(member.key);\n else if (member.kind === 'removed') removed.add(member.key);\n else updated.add(member.key);\n }\n } else updated.add(change.at[at.length]);\n }\n continue;\n }\n if (change.kind === 'tree' && contains(change.at, at)) {\n const result = { kind: 'reset' } as const;\n cache.set(key, result);\n return result;\n }\n if (!contains(at, change.at)) continue;\n if (change.at.length === at.length) continue;\n const id = change.at[at.length];\n updated.add(id);\n }\n added.forEach(id => updated.delete(id));\n removed.forEach(id => updated.delete(id));\n const result = { kind: 'incremental', added, removed, updated, orderChanged } as const;\n cache.set(key, result);\n return result;\n },\n };\n const impact: DocumentImpact<S> = Object.freeze({\n kind: reset ? 'reset' : 'incremental',\n affects: (pick: PathPick<S>) =>\n implementation.affects(compilePath<S['shape']>(schema, 'value', pick)),\n collection: <P extends CollectionPath>(pick: (path: SchemaPath<S['shape']>) => P) =>\n implementation.collection(\n compilePath<S['shape']>(schema, 'collection', pick) as CollectionSelector\n ) as CollectionImpact<CollectionId<P>>,\n });\n queries.set(impact, implementation);\n return impact;\n};\n","import type { DocumentAddress, ObjectNode, PathPick, Infer } from '../schema';\nimport type { AddressRef } from '../address';\nimport type { ChangeSet } from '../changes';\nimport type { DocumentImpact } from '../impact';\nimport type { Draft } from '../access/scope';\nimport type { MutationIssue } from '../mutation/issue';\nimport type { Readable } from '../projection/readable';\nexport type Unsubscribe = () => void;\nexport type Synchronous<T> = T extends PromiseLike<unknown> ? never : T;\nexport type CommitSource = 'local' | 'system' | 'history' | 'remote';\nexport class DocumentReentrancyError extends Error {\n constructor() {\n super('Document writes cannot be re-entered during an update or notification.');\n this.name = 'DocumentReentrancyError';\n }\n}\nexport class DocumentDisposedError extends Error {\n constructor() {\n super('Doxum runtime has been disposed.');\n this.name = 'DocumentDisposedError';\n }\n}\nexport type DiagnosticInput = {\n readonly code: string;\n readonly message: string;\n readonly address?: DocumentAddress;\n};\nexport type DocumentDiagnostic = DiagnosticInput & { readonly source: 'application' };\nexport type DocumentProblem = DocumentDiagnostic | MutationIssue;\nexport class TransactionRejected extends Error {\n readonly issues: readonly DocumentDiagnostic[];\n constructor(input: DiagnosticInput | readonly DiagnosticInput[]) {\n super('Document update rejected.');\n this.name = 'TransactionRejected';\n const issues: readonly DiagnosticInput[] = Array.isArray(input)\n ? input\n : [input as DiagnosticInput];\n this.issues = Object.freeze(\n issues.map(issue =>\n Object.freeze({\n code: issue.code,\n message: issue.message,\n source: 'application' as const,\n ...(issue.address === undefined ? {} : { address: Object.freeze([...issue.address]) }),\n })\n )\n );\n }\n}\nexport type DocumentCommit<S extends ObjectNode> = {\n readonly revision: number;\n readonly source: CommitSource;\n readonly changes: ChangeSet;\n readonly impact: DocumentImpact<S>;\n};\nexport type ObserverError = {\n readonly phase: 'processor' | 'flush' | 'listener';\n readonly error: unknown;\n};\nexport type TransactionResult<V, C> =\n | {\n readonly status: 'committed';\n readonly value: V;\n readonly commit: C;\n readonly observerErrors: readonly ObserverError[];\n }\n | { readonly status: 'unchanged'; readonly value: V; readonly revision: number }\n | {\n readonly status: 'rejected';\n readonly issues: readonly DocumentProblem[];\n readonly revision: number;\n };\nexport type OperationResult<C> =\n | {\n readonly status: 'committed';\n readonly commit: C;\n readonly observerErrors: readonly ObserverError[];\n }\n | { readonly status: 'unchanged'; readonly revision: number }\n | {\n readonly status: 'rejected';\n readonly issues: readonly MutationIssue[];\n readonly revision: number;\n };\nexport type HistoryState = { readonly undoDepth: number; readonly redoDepth: number };\nexport type LocalHistory<C> = Readable<HistoryState> & {\n undo(): OperationResult<C>;\n redo(): OperationResult<C>;\n clear(): void;\n group(): { end(): void; cancel(): OperationResult<C> };\n};\nexport type CommitListener<S extends ObjectNode> = (commit: DocumentCommit<S>) => void;\nexport type DocumentReadable<S extends ObjectNode> = {\n readonly address: {\n resolve(address: DocumentAddress): AddressRef | undefined;\n read(address: DocumentAddress): unknown;\n contains(parent: DocumentAddress, child: DocumentAddress): boolean;\n overlaps(left: DocumentAddress, right: DocumentAddress): boolean;\n debugKey(address: DocumentAddress): string;\n };\n revision(): number;\n subscribe(listener: CommitListener<S>): Unsubscribe;\n subscribe(\n pick: PathPick<S> | readonly [PathPick<S>, ...PathPick<S>[]],\n listener: CommitListener<S>\n ): Unsubscribe;\n};\nexport type DocumentRuntime<S extends ObjectNode> = DocumentReadable<S> & {\n readonly schema: S;\n update<V>(\n run: (draft: Draft<S>) => Synchronous<V>,\n options?: {\n readonly source?: Extract<CommitSource, 'local' | 'system'>;\n readonly history?: boolean;\n }\n ): TransactionResult<V, DocumentCommit<S>>;\n apply(\n changes: unknown,\n options: {\n readonly expectedRevision: number;\n readonly source?: Exclude<CommitSource, 'history'>;\n readonly history?: boolean;\n }\n ): OperationResult<DocumentCommit<S>>;\n replace(\n value: Infer<S>,\n options?: { readonly source?: Extract<CommitSource, 'system' | 'remote'> }\n ): OperationResult<DocumentCommit<S>>;\n snapshot(): Infer<S>;\n readonly history: LocalHistory<DocumentCommit<S>>;\n dispose(): void;\n};\n","import type { ObjectNode, Infer } from '../schema';\nimport { createAccess, type Read } from '../access/scope';\nimport type { DependencyTracker } from '../access/dependency';\nimport { DocumentDisposedError } from './contract';\nimport type { DocumentReadable } from './contract';\n\nexport type RuntimeAccessState<TSchema extends ObjectNode> = {\n readonly schema: TSchema;\n document: Infer<TSchema>;\n disposed: boolean;\n projectionLocks?: number;\n};\n\nconst states = new WeakMap<object, RuntimeAccessState<ObjectNode>>();\n\nexport const bindRuntimeAccess = <TSchema extends ObjectNode>(\n runtime: DocumentReadable<TSchema>,\n state: RuntimeAccessState<TSchema>\n): void => {\n states.set(runtime as object, state as RuntimeAccessState<ObjectNode>);\n};\n\nexport const accessOf = <TSchema extends ObjectNode>(\n runtime: DocumentReadable<TSchema>\n): RuntimeAccessState<TSchema> => {\n const state = states.get(runtime as object);\n if (!state) throw new Error('Unknown Doxum runtime.');\n return state as RuntimeAccessState<TSchema>;\n};\n\nexport const readWith = <TSchema extends ObjectNode, TResult>(\n runtime: DocumentReadable<TSchema>,\n run: (read: Read<TSchema>) => TResult,\n dependencies?: DependencyTracker\n): TResult => {\n const state = accessOf(runtime);\n if (state.disposed) throw new DocumentDisposedError();\n state.projectionLocks = (state.projectionLocks ?? 0) + 1;\n try {\n const reader = createAccess({\n state,\n dependencies,\n }) as Read<TSchema>;\n return run(reader);\n } finally {\n // readWith is an internal borrowed-reader boundary. Retaining its reader or\n // collection methods after this callback is undefined behavior.\n state.projectionLocks!--;\n }\n};\n","import type { ObjectNode, ImpactTarget } from '../schema';\nimport type {\n CommitListener,\n DocumentCommit,\n DocumentReadable,\n DocumentRuntime,\n Unsubscribe,\n ObserverError,\n} from './contract';\nimport * as target from '../impact-target';\n\nexport type ProjectionAttachment<TSchema extends ObjectNode> = {\n capture(commit: DocumentCommit<TSchema>): void;\n settle(): void;\n flush(): readonly ObserverError[];\n dispose(): void;\n};\ntype ProcessorEntry<TSchema extends ObjectNode> = {\n readonly processor: ProjectionAttachment<TSchema>;\n active: boolean;\n};\ntype RootEntry<TSchema extends ObjectNode> = {\n readonly listener: CommitListener<TSchema>;\n active: boolean;\n};\ntype FilteredEntry<TSchema extends ObjectNode> = {\n readonly targets: readonly ImpactTarget<unknown>[];\n readonly listener: CommitListener<TSchema>;\n active: boolean;\n};\nexport type RuntimeNotification<TSchema extends ObjectNode> = {\n readonly root: Set<RootEntry<TSchema>>;\n readonly filtered: Set<FilteredEntry<TSchema>>;\n readonly index: target.SubscriptionIndex<FilteredEntry<TSchema>>;\n readonly cleanups: Set<() => void>;\n readonly processors: ProcessorEntry<TSchema>[];\n readonly candidates: Set<FilteredEntry<TSchema>>;\n readonly rootSnapshot: RootEntry<TSchema>[];\n notifying: boolean;\n};\n\nconst notifications = new WeakMap<object, RuntimeNotification<ObjectNode>>();\nconst readableOwners = new WeakMap<object, DocumentReadable<ObjectNode>>();\n\nexport const bindDocumentReadable = (\n readable: object,\n runtime: DocumentReadable<ObjectNode>\n): void => {\n readableOwners.set(readable, runtime);\n};\nexport const documentReadableOwner = (readable: object): DocumentReadable<ObjectNode> | undefined =>\n readableOwners.get(readable);\n\nexport const createNotification = <TSchema extends ObjectNode>(\n runtime: DocumentRuntime<TSchema>\n): RuntimeNotification<TSchema> => {\n const notification: RuntimeNotification<TSchema> = {\n root: new Set(),\n filtered: new Set(),\n index: new target.SubscriptionIndex(runtime.schema),\n cleanups: new Set(),\n processors: [],\n candidates: new Set(),\n rootSnapshot: [],\n notifying: false,\n };\n notifications.set(runtime as object, notification as RuntimeNotification<ObjectNode>);\n return notification;\n};\n\nconst notificationOf = <TSchema extends ObjectNode>(\n runtime: DocumentReadable<TSchema>\n): RuntimeNotification<TSchema> => {\n const value = notifications.get(runtime as object);\n if (!value) throw new Error('Unknown Doxum runtime.');\n return value as RuntimeNotification<TSchema>;\n};\n\nexport const shareNotification = <TSchema extends ObjectNode>(\n source: DocumentRuntime<TSchema>,\n target: DocumentReadable<TSchema>\n): void => {\n notifications.set(target as object, notificationOf(source) as RuntimeNotification<ObjectNode>);\n};\n\nexport const attachProjection = <TSchema extends ObjectNode>(\n runtime: DocumentReadable<TSchema>,\n processor: ProjectionAttachment<TSchema>\n): Unsubscribe => {\n const notification = notificationOf(runtime);\n const entry: ProcessorEntry<TSchema> = { processor, active: true };\n notification.processors.push(entry);\n return () => {\n if (!entry.active) return;\n entry.active = false;\n if (!notification.notifying) {\n const index = notification.processors.indexOf(entry);\n if (index >= 0) notification.processors.splice(index, 1);\n }\n };\n};\n\nexport const subscribeRoot = <TSchema extends ObjectNode>(\n notification: RuntimeNotification<TSchema>,\n listener: CommitListener<TSchema>\n): Unsubscribe => {\n const entry: RootEntry<TSchema> = { listener, active: true };\n notification.root.add(entry);\n return () => {\n entry.active = false;\n if (!notification.notifying) notification.root.delete(entry);\n else\n notification.cleanups.add(() => {\n notification.root.delete(entry);\n });\n };\n};\n\nexport const subscribeTargets = <TSchema extends ObjectNode>(\n notification: RuntimeNotification<TSchema>,\n targets: readonly ImpactTarget<unknown>[],\n listener: CommitListener<TSchema>\n): Unsubscribe => {\n const entry: FilteredEntry<TSchema> = {\n targets: Object.freeze(targets.slice()),\n listener,\n active: true,\n };\n notification.filtered.add(entry);\n entry.targets.forEach(value => notification.index.add(value, entry));\n const remove = () => {\n notification.filtered.delete(entry);\n entry.targets.forEach(value => notification.index.delete(value, entry));\n };\n return () => {\n if (!entry.active) return;\n entry.active = false;\n if (notification.notifying) notification.cleanups.add(remove);\n else remove();\n };\n};\n\nexport const notify = <TSchema extends ObjectNode>(\n notification: RuntimeNotification<TSchema>,\n commit: DocumentCommit<TSchema>,\n afterSettle?: () => readonly ObserverError[]\n): readonly ObserverError[] => {\n notification.notifying = true;\n const errors: ObserverError[] = [];\n const call = (listener: CommitListener<TSchema>): void => {\n try {\n listener(commit);\n } catch (error) {\n errors.push(Object.freeze({ phase: 'listener', error }));\n }\n };\n try {\n const processorCount = notification.processors.length;\n for (let index = 0; index < processorCount; index += 1) {\n const entry = notification.processors[index];\n if (!entry?.active) continue;\n try {\n entry.processor.capture(commit);\n } catch (error) {\n errors.push(Object.freeze({ phase: 'processor', error }));\n }\n }\n for (let index = 0; index < processorCount; index += 1) {\n const entry = notification.processors[index];\n if (!entry?.active) continue;\n try {\n entry.processor.settle();\n } catch (error) {\n errors.push(Object.freeze({ phase: 'processor', error }));\n }\n }\n for (let index = 0; index < processorCount; index += 1) {\n const entry = notification.processors[index];\n if (!entry?.active) continue;\n try {\n errors.push(...entry.processor.flush());\n } catch (error) {\n errors.push(Object.freeze({ phase: 'flush', error }));\n }\n }\n\n if (afterSettle) errors.push(...afterSettle());\n const candidates = notification.candidates;\n candidates.clear();\n if (notification.filtered.size)\n notification.index.collect(commit.changes, entry => candidates.add(entry));\n candidates.forEach(entry => {\n if (entry.active) call(entry.listener);\n });\n const rootSnapshot = notification.rootSnapshot;\n rootSnapshot.length = 0;\n notification.root.forEach(entry => rootSnapshot.push(entry));\n for (const entry of rootSnapshot) if (entry.active) call(entry.listener);\n } finally {\n notification.notifying = false;\n let writeIndex = 0;\n for (const entry of notification.processors)\n if (entry.active) notification.processors[writeIndex++] = entry;\n notification.processors.length = writeIndex;\n notification.cleanups.forEach(cleanup => cleanup());\n notification.cleanups.clear();\n }\n return Object.freeze(errors);\n};\n\nexport const subscribeDependencies = <S extends ObjectNode>(\n runtime: DocumentReadable<S>,\n targets: readonly ImpactTarget[],\n listener: CommitListener<S>\n): Unsubscribe => subscribeTargets(notificationOf(runtime), targets, listener);\n\nexport const disposeNotification = <TSchema extends ObjectNode>(\n notification: RuntimeNotification<TSchema>\n): void => {\n const attachments = notification.processors.slice();\n notification.root.clear();\n notification.filtered.clear();\n notification.index.clear();\n notification.cleanups.clear();\n notification.processors.length = 0;\n notification.candidates.clear();\n notification.rootSnapshot.length = 0;\n const errors: unknown[] = [];\n attachments.forEach(entry => {\n if (!entry.active) return;\n try {\n entry.processor.dispose();\n } catch (error) {\n errors.push(error);\n }\n });\n if (errors.length) throw new AggregateError(errors, 'Projection disposal notification failed.');\n};\n","import type { CollectionAccess, Read } from '../access/scope';\nimport type { CollectionImpact } from '../impact';\nimport type { DocumentCommit, DocumentReadable, Synchronous } from '../runtime/contract';\nimport type {\n CollectionId,\n CollectionNode,\n CollectionPath,\n ObjectNode,\n PathPick,\n SchemaPath,\n ValueSchemaNode,\n} from '../schema';\nimport type { Readable } from './readable';\nimport type { CollectionRead, MaterializedCollectionWriter, ValueUpdate } from './contract';\n\ndeclare const projectionDefinition: unique symbol;\ndeclare const writableInput: unique symbol;\n\nexport type Projection<\n T,\n E = T,\n K extends 'source' | 'value' | 'collection' = 'source' | 'value' | 'collection',\n> = {\n readonly [projectionDefinition]: { readonly value: T; readonly event: E; readonly kind: K };\n};\nexport type ProjectionSources = Readonly<\n Record<string, Projection<unknown, unknown, 'source' | 'value' | 'collection'>>\n>;\nexport type ProjectionValues<S extends ProjectionSources> = {\n readonly [K in keyof S]: S[K] extends Projection<\n infer T,\n unknown,\n 'source' | 'value' | 'collection'\n >\n ? T\n : never;\n};\nexport type ProjectionEvents<S extends ProjectionSources> = {\n readonly [K in keyof S]: S[K] extends Projection<\n unknown,\n infer E,\n 'source' | 'value' | 'collection'\n >\n ? E\n : never;\n};\n\nexport type ValueProjection<T, E = ValueEvent<T>> = Projection<T, E, 'value'>;\nexport type InputProjection<T> = ValueProjection<T> & { readonly [writableInput]: true };\nexport type CollectionProjection<K extends string, V, E = CollectionEvent<K, V>> = Projection<\n CollectionRead<K, V>,\n E,\n 'collection'\n>;\nexport type CollectionSource<K extends string, V, E> = Projection<\n CollectionRead<K, V>,\n E,\n 'source'\n>;\nexport type DocumentProjection<S extends ObjectNode> = Projection<\n Read<S>,\n DocumentEvent<S>,\n 'source'\n>;\nexport type DocumentCollectionProjection<\n S extends ObjectNode,\n N extends ValueSchemaNode,\n K extends string = string,\n> = CollectionSource<K, Read<N>, DocumentCollectionEvent<S, N, K>>;\n\nexport type ValueEvent<T> = {\n readonly value: T;\n readonly previous: T;\n readonly changed: boolean;\n readonly revision: number;\n readonly reset: boolean;\n};\nexport type DocumentEvent<S extends ObjectNode> = {\n readonly read: Read<S>;\n readonly revision: number;\n readonly commits: readonly DocumentCommit<S>[];\n readonly reset: boolean;\n};\nexport type DocumentCollectionEvent<\n S extends ObjectNode,\n N extends ValueSchemaNode,\n K extends string = string,\n> = {\n readonly read: CollectionAccess<K, N>;\n readonly revision: number;\n readonly commits: readonly DocumentCommit<S>[];\n readonly reset: boolean;\n readonly candidates: { readonly keys: readonly K[]; readonly orderDirty: boolean };\n};\nexport type CollectionEvent<K extends string, V> = CollectionRead<K, V> & {\n readonly change: CollectionImpact<K> | undefined;\n readonly revision: number;\n readonly reset: boolean;\n};\n\ntype Definition =\n | { readonly kind: 'input'; readonly initial: unknown; readonly isEqual?: Equality }\n | { readonly kind: 'readable'; readonly readable: Readable<unknown>; readonly isEqual?: Equality }\n | {\n readonly kind: 'document';\n readonly document: DocumentReadable<ObjectNode>;\n readonly targets?: readonly PathPick<ObjectNode>[];\n }\n | {\n readonly kind: 'document-collection';\n readonly document: DocumentReadable<ObjectNode>;\n readonly pick: Callback;\n }\n | {\n readonly kind: 'map';\n readonly source: Projection<unknown, unknown>;\n readonly mapper: Callback;\n readonly isEqual?: Equality;\n }\n | {\n readonly kind: 'value';\n readonly sources: ProjectionSources;\n readonly compute: Callback;\n readonly isEqual?: Equality;\n }\n | {\n readonly kind: 'advanced-value';\n readonly sources: ProjectionSources;\n readonly build: Callback;\n readonly isEqual?: Equality;\n readonly name?: string;\n }\n | {\n readonly kind: 'advanced-collection';\n readonly sources: ProjectionSources;\n readonly build: Callback;\n readonly isEqual?: Equality;\n readonly name?: string;\n };\n\ntype Equality = (a: unknown, b: unknown) => boolean;\ntype Callback = (...args: never[]) => unknown;\n\nconst definitions = new WeakMap<object, Definition>();\nconst freezeSources = <S extends ProjectionSources>(sources: S): S =>\n Object.freeze({ ...sources }) as S;\nconst define = <\n T,\n E = T,\n K extends 'source' | 'value' | 'collection' = 'source' | 'value' | 'collection',\n>(\n definition: Definition\n): Projection<T, E, K> => {\n const handle = Object.freeze({}) as Projection<T, E, K>;\n definitions.set(handle, definition);\n return handle;\n};\n\nexport const definitionOf = (\n projection: Projection<unknown, unknown, 'source' | 'value' | 'collection'>\n): Definition => {\n const definition = definitions.get(projection);\n if (!definition) throw new TypeError('Unknown projection definition.');\n return definition;\n};\n\nexport const input = <T>(\n initial: T,\n options?: { readonly isEqual?: (a: T, b: T) => boolean }\n): InputProjection<T> =>\n define<T, ValueEvent<T>, 'value'>({\n kind: 'input',\n initial,\n isEqual: options?.isEqual as Equality | undefined,\n }) as InputProjection<T>;\n\nexport type AdvancedValueSpec<S extends ProjectionSources, T> = {\n readonly kind: 'value';\n readonly name?: string;\n readonly sources: S;\n readonly build: (sources: ProjectionEvents<S>) => {\n readonly value: T;\n readonly update: (sources: ProjectionEvents<S>) => ValueUpdate<NoInfer<T>>;\n };\n readonly isEqual?: (previous: T, next: T) => boolean;\n};\n\nexport type AdvancedCollectionSpec<S extends ProjectionSources, K extends string, V> = {\n readonly kind: 'collection';\n readonly name?: string;\n readonly sources: S;\n readonly build: (input: AdvancedCollectionProcess<S, K, V>) => {\n readonly update: (\n input: AdvancedCollectionProcess<S, K, V>\n ) => void | { readonly kind: 'rebuild' };\n };\n readonly isEqual?: (previous: V, next: V) => boolean;\n};\n\nexport type AdvancedCollectionProcess<S extends ProjectionSources, K extends string, V> = {\n readonly sources: ProjectionEvents<S>;\n readonly previous: CollectionRead<K, V>;\n readonly next: CollectionRead<K, V>;\n readonly writer: MaterializedCollectionWriter<K, V>;\n};\n\nexport function project<T>(readable: Readable<T>): ValueProjection<T>;\nexport function project<S extends ObjectNode>(document: DocumentReadable<S>): DocumentProjection<S>;\nexport function project<S extends ObjectNode>(\n document: DocumentReadable<S>,\n targets: readonly [PathPick<S>, ...PathPick<S>[]]\n): DocumentProjection<S>;\nexport function project<S extends ObjectNode, P extends CollectionPath>(\n document: DocumentReadable<S>,\n pick: (path: SchemaPath<S['shape']>) => P\n): DocumentCollectionProjection<S, CollectionNode<P>, CollectionId<P>>;\nexport function project<S extends ObjectNode, P extends CollectionPath, V>(\n document: DocumentReadable<S>,\n pick: (path: SchemaPath<S['shape']>) => P,\n mapper: (id: CollectionId<P>, entry: Read<CollectionNode<P>>) => Synchronous<V>,\n options?: { readonly isEqual?: (a: V, b: V) => boolean }\n): CollectionProjection<CollectionId<P>, V>;\nexport function project<K extends string, V, E, R>(\n source: Projection<CollectionRead<K, V>, E, 'source' | 'collection'>,\n mapper: (id: K, entry: V) => Synchronous<R>,\n options?: { readonly isEqual?: (a: R, b: R) => boolean }\n): CollectionProjection<K, R>;\nexport function project<S extends ProjectionSources, T>(\n sources: S,\n compute: (sources: ProjectionValues<S>) => Synchronous<T>,\n options?: { readonly isEqual?: (a: T, b: T) => boolean }\n): ValueProjection<T>;\nexport function project<S extends ProjectionSources, T>(\n spec: AdvancedValueSpec<S, T>\n): ValueProjection<T>;\nexport function project<\n V,\n K extends string = string,\n S extends ProjectionSources = ProjectionSources,\n>(spec: AdvancedCollectionSpec<S, K, V>): CollectionProjection<K, V>;\nexport function project(\n first: unknown,\n second?: Callback | readonly unknown[],\n third?: Callback | object,\n fourth?: object\n): Projection<unknown, unknown, 'source' | 'value' | 'collection'> {\n if (\n first &&\n typeof first === 'object' &&\n 'kind' in first &&\n ((first as { kind?: unknown }).kind === 'value' ||\n (first as { kind?: unknown }).kind === 'collection')\n ) {\n const spec = first as {\n kind: 'value' | 'collection';\n sources: ProjectionSources;\n build: Callback;\n isEqual?: Equality;\n name?: string;\n };\n return define({\n kind: spec.kind === 'value' ? 'advanced-value' : 'advanced-collection',\n sources: freezeSources(spec.sources),\n build: spec.build as Callback,\n isEqual: spec.isEqual as Equality | undefined,\n name: spec.name,\n });\n }\n if (first && typeof first === 'object' && 'revision' in first && 'subscribe' in first) {\n if ('address' in first) {\n const document = first as DocumentReadable<ObjectNode>;\n if (!second) return define({ kind: 'document', document });\n if (Array.isArray(second))\n return define({\n kind: 'document',\n document,\n targets: Object.freeze([...second]) as readonly PathPick<ObjectNode>[],\n });\n if (typeof second !== 'function') throw new TypeError('Invalid document projection.');\n const source = define<unknown>({\n kind: 'document-collection',\n document,\n pick: second as Callback,\n });\n if (!third || typeof third !== 'function') return source;\n return define({\n kind: 'map',\n source,\n mapper: third as Callback,\n isEqual: (fourth as { isEqual?: Equality } | undefined)?.isEqual,\n });\n }\n return define({ kind: 'readable', readable: first as Readable<unknown> });\n }\n if (second) {\n if (typeof second !== 'function') throw new TypeError('Invalid project declaration.');\n if (definitions.has(first as object))\n return define({\n kind: 'map',\n source: first as Projection<unknown, unknown, 'source' | 'collection'>,\n mapper: second as Callback,\n isEqual: (third as { isEqual?: Equality } | undefined)?.isEqual,\n });\n return define({\n kind: 'value',\n sources: freezeSources(first as ProjectionSources),\n compute: second as Callback,\n isEqual: (third as { isEqual?: Equality } | undefined)?.isEqual,\n });\n }\n throw new TypeError('Invalid project declaration.');\n}\n","import type { CollectionAccess, Read } from '../access/scope';\nimport type { CollectionImpact } from '../impact';\nimport type {\n DocumentCommit,\n DocumentReadable,\n Synchronous,\n Unsubscribe,\n} from '../runtime/contract';\nimport type {\n CollectionNode,\n CollectionId,\n CollectionPath,\n ObjectNode,\n ValueSchemaNode,\n PathPick,\n SchemaPath,\n} from '../schema';\nimport type { Readable } from './readable';\n\ndeclare const sourceContext: unique symbol;\nexport type EngineSource<T> = { readonly [sourceContext]: T };\nexport type EngineSources = Readonly<Record<string, EngineSource<unknown>>>;\nexport type EngineInputs<S extends EngineSources> = {\n readonly [K in keyof S]: S[K] extends EngineSource<infer T> ? T : never;\n};\nexport type DocumentInput<S extends ObjectNode> = {\n readonly read: Read<S>;\n readonly revision: number;\n readonly commits: readonly DocumentCommit<S>[];\n readonly reset: boolean;\n};\nexport type DocumentCollectionInput<\n S extends ObjectNode,\n N extends ValueSchemaNode,\n K extends string = string,\n> = {\n readonly read: CollectionAccess<K, N>;\n readonly revision: number;\n readonly commits: readonly DocumentCommit<S>[];\n readonly reset: boolean;\n readonly candidates: { readonly keys: readonly K[]; readonly orderDirty: boolean };\n};\nexport type DocumentSource<S extends ObjectNode> = EngineSource<DocumentInput<S>> & {\n collection<P extends CollectionPath>(\n pick: (path: SchemaPath<S['shape']>) => P\n ): DocumentCollectionSource<S, CollectionNode<P>, CollectionId<P>>;\n targets(...targets: readonly [PathPick<S>, ...PathPick<S>[]]): EngineSource<DocumentInput<S>>;\n};\nexport type DocumentCollectionSource<\n S extends ObjectNode,\n N extends ValueSchemaNode,\n K extends string = string,\n> = EngineSource<DocumentCollectionInput<S, N, K>>;\nexport type ValueInput<T> = {\n readonly value: T;\n readonly previous: T;\n readonly changed: boolean;\n readonly revision: number;\n readonly reset: boolean;\n};\nexport type EngineInput<T> = {\n readonly source: EngineSource<ValueInput<T>>;\n set(value: T): void;\n};\nexport type ValueUpdate<T> =\n | { readonly kind: 'unchanged' }\n | { readonly kind: 'changed'; readonly value: T }\n | { readonly kind: 'rebuild' };\nexport type EngineValueSpec<S extends EngineSources, T> = {\n readonly name?: string;\n readonly sources: S;\n readonly build: (sources: EngineInputs<S>) => {\n readonly value: T;\n readonly update: (sources: EngineInputs<S>) => ValueUpdate<NoInfer<T>>;\n };\n};\nexport type MaterializedValue<T> = Readable<T> &\n EngineSource<ValueInput<T>> & { rebuild(): void; dispose(): void };\nexport type CollectionRead<K extends string, V> = {\n get(key: K): V | undefined;\n has(key: K): boolean;\n ids(): readonly K[];\n};\nexport type CollectionInput<K extends string, V> = CollectionRead<K, V> & {\n readonly change: CollectionImpact<K> | undefined;\n readonly revision: number;\n readonly reset: boolean;\n};\nexport type MaterializedCollection<K extends string, V> = EngineSource<CollectionInput<K, V>> & {\n current(): CollectionRead<K, V>;\n readonly ids: Readable<readonly K[]>;\n readonly all: Readable<readonly V[]>;\n item(key: K): Readable<V | undefined>;\n revision(): number;\n subscribe(listener: (change: CollectionImpact<K>) => void): Unsubscribe;\n rebuild(): void;\n dispose(): void;\n};\nexport type MaterializedCollectionWriter<K extends string, V> = {\n set(key: K, value: V): void;\n remove(key: K): void;\n order(ids: readonly K[]): void;\n replace(entries: readonly (readonly [K, V])[]): void;\n};\nexport type EngineCollectionProcess<S extends EngineSources, K extends string, V> = {\n readonly sources: EngineInputs<S>;\n readonly previous: CollectionRead<K, V>;\n readonly next: CollectionRead<K, V>;\n readonly writer: MaterializedCollectionWriter<K, V>;\n};\nexport type EngineCollectionSpec<S extends EngineSources, K extends string, V> = {\n readonly name?: string;\n readonly sources: S;\n readonly isEqual?: (previous: V, next: V) => boolean;\n readonly build: (input: EngineCollectionProcess<S, K, V>) => {\n readonly update: (\n input: EngineCollectionProcess<S, K, V>\n ) => void | { readonly kind: 'rebuild' };\n };\n};\nexport class ProjectionError extends Error {\n constructor(\n readonly phase: 'processor' | 'listener' | 'source' | 'blocked',\n readonly identity: string,\n readonly revisions: readonly number[],\n cause: unknown\n ) {\n super(`Projection ${phase} failed: ${identity}`, { cause });\n this.name = 'ProjectionError';\n }\n}\nexport class ProjectionDisposedError extends Error {\n constructor() {\n super('Projection has been disposed.');\n this.name = 'ProjectionDisposedError';\n }\n}\nexport type ProjectionEngine = {\n document<S extends ObjectNode>(runtime: DocumentReadable<S>): DocumentSource<S>;\n fromReadable<T>(\n readable: Readable<T>,\n options?: { readonly isEqual?: (a: T, b: T) => boolean }\n ): EngineSource<ValueInput<T>>;\n input<T>(initial: T, options?: { readonly isEqual?: (a: T, b: T) => boolean }): EngineInput<T>;\n value<S extends EngineSources, T>(\n sources: S,\n compute: (sources: EngineInputs<S>) => Synchronous<T>,\n options?: { readonly isEqual?: (a: NoInfer<T>, b: NoInfer<T>) => boolean }\n ): MaterializedValue<T>;\n value<S extends EngineSources, T>(\n spec: EngineValueSpec<S, T>,\n options?: { readonly isEqual?: (a: NoInfer<T>, b: NoInfer<T>) => boolean }\n ): MaterializedValue<T>;\n collection<V, K extends string = string>(): <S extends EngineSources>(\n spec: EngineCollectionSpec<S, K, V>\n ) => MaterializedCollection<K, V>;\n map<S extends ObjectNode, N extends ValueSchemaNode, K extends string, V>(\n source: DocumentCollectionSource<S, N, K>,\n mapper: (id: K, entry: Read<N>) => Synchronous<V>,\n options?: { readonly isEqual?: (a: V, b: V) => boolean }\n ): MaterializedCollection<K, V>;\n map<K extends string, V, R>(\n source: MaterializedCollection<K, V>,\n mapper: (id: K, entry: V) => Synchronous<R>,\n options?: { readonly isEqual?: (a: NoInfer<R>, b: NoInfer<R>) => boolean }\n ): MaterializedCollection<K, R>;\n batch<T>(run: () => Synchronous<T>): T;\n dispose(): void;\n};\n","import type { ObserverError } from '../runtime/contract';\nimport { ProjectionDisposedError, ProjectionError } from './contract';\nimport { profile } from '../profile';\n\nexport type SourceRecord = {\n readonly consumers: Set<NodeRecord>;\n context(active: () => boolean): unknown;\n revision(): number;\n reset(): boolean;\n fault: ProjectionError | undefined;\n disposed: boolean;\n clear(): void;\n};\nexport type NodeRecord = SourceRecord & {\n readonly order: number;\n readonly name: string;\n readonly sources: readonly SourceRecord[];\n forced: boolean;\n statusChanged: boolean;\n evaluate(build: boolean): boolean;\n publish(): void;\n emit(call: (listener: () => void) => void): void;\n release(): void;\n};\n\n// Sources and nodes share one registry. Public structural lookalikes are never accepted.\nexport const projectionHandles = new WeakSet<object>();\nexport const createScheduler = (onError: (error: ProjectionError) => void) => {\n let disposed = false;\n let depth = 0;\n let phase: 'idle' | 'compute' | 'notify' = 'idle';\n let sequence = 0;\n const records = new Map<object, SourceRecord>();\n const nodes = new Set<NodeRecord>();\n const pending = new Set<SourceRecord>();\n const heap: NodeRecord[] = [];\n const queued = new Set<NodeRecord>();\n const completed: NodeRecord[] = [];\n const emissions = new Set<NodeRecord>();\n const errors: ProjectionError[] = [];\n let reportingFailures: unknown[] = [];\n const guards = new Set<(locked: boolean) => void>();\n const cleanups = new Set<() => void>();\n const assertActive = () => {\n if (disposed) throw new ProjectionDisposedError();\n };\n const assertIdle = () => {\n assertActive();\n if (phase !== 'idle')\n throw new Error('Projection cannot be re-entered during processing or notification.');\n };\n const lock = (value: boolean) => guards.forEach(guard => guard(value));\n const enqueue = (node: NodeRecord) => {\n if (node.disposed || queued.has(node)) return;\n queued.add(node);\n profile.projection('scheduledNodes');\n let i = heap.length;\n heap.push(node);\n while (i > 0) {\n const p = (i - 1) >> 1;\n if (heap[p].order < node.order) break;\n heap[i] = heap[p];\n i = p;\n }\n heap[i] = node;\n };\n const pop = () => {\n const first = heap[0];\n const last = heap.pop()!;\n if (heap.length) {\n let i = 0;\n while (i * 2 + 1 < heap.length) {\n let c = i * 2 + 1;\n if (c + 1 < heap.length && heap[c + 1].order < heap[c].order) c++;\n if (last.order < heap[c].order) break;\n heap[i] = heap[c];\n i = c;\n }\n heap[i] = last;\n }\n return first;\n };\n const errorFor = (\n node: NodeRecord,\n cause: unknown,\n kind: ProjectionError['phase'] = 'processor'\n ) =>\n new ProjectionError(\n kind,\n node.name,\n node.sources.map(source => source.revision()),\n cause\n );\n const capture = (source: SourceRecord) => {\n if (disposed) return;\n if (phase !== 'idle') {\n source.fault = new ProjectionError(\n 'source',\n 'reentrant source',\n [source.revision()],\n new Error('Source changed while projection was running.')\n );\n errors.push(source.fault);\n throw source.fault;\n }\n pending.add(source);\n profile.projection('sourceEvents');\n if (source.fault) errors.push(source.fault);\n };\n const settle = () => {\n if (disposed || depth || phase !== 'idle') return;\n phase = 'compute';\n lock(true);\n try {\n pending.forEach(source => source.consumers.forEach(enqueue));\n while (heap.length) {\n const node = pop();\n if (node.disposed) continue;\n const wasFaulted = node.fault !== undefined;\n profile.projection('processedNodes');\n let changed = false;\n const blocked = node.sources.find(source => source.fault || source.disposed);\n if (blocked) {\n node.fault = errorFor(node, blocked.fault ?? new ProjectionDisposedError(), 'blocked');\n } else {\n const build = node.forced || wasFaulted || node.sources.some(source => source.reset());\n try {\n changed = node.evaluate(build);\n const failure = node.sources.find(source => source.fault)?.fault;\n if (failure) throw failure;\n node.fault = undefined;\n } catch (cause) {\n const error = errorFor(node, cause);\n errors.push(error);\n node.fault = error;\n if (!build) {\n try {\n changed = node.evaluate(true);\n const failure = node.sources.find(source => source.fault)?.fault;\n if (failure) throw failure;\n node.fault = undefined;\n } catch (cause) {\n node.fault = errorFor(node, cause);\n errors.push(node.fault);\n }\n }\n }\n }\n node.forced = false;\n node.statusChanged = wasFaulted !== (node.fault !== undefined);\n completed.push(node);\n if (changed || wasFaulted || node.fault) {\n profile.projection('publishedNodes');\n emissions.add(node);\n node.consumers.forEach(enqueue);\n }\n }\n completed.forEach(node => node.publish());\n } finally {\n lock(false);\n phase = 'idle';\n }\n };\n const flush = (): readonly ObserverError[] => {\n if (disposed || depth) return [];\n if (pending.size || completed.length) profile.projection('flushes');\n phase = 'notify';\n lock(true);\n const reportFailures: unknown[] = [];\n try {\n emissions.forEach(node =>\n node.emit(listener => {\n try {\n listener();\n } catch (cause) {\n errors.push(errorFor(node, cause, 'listener'));\n }\n })\n );\n for (const error of errors.slice()) {\n try {\n onError(error);\n } catch (cause) {\n reportFailures.push(cause);\n }\n }\n return Object.freeze([\n ...errors.map(error =>\n Object.freeze({\n phase: error.phase === 'listener' ? ('listener' as const) : ('processor' as const),\n error,\n })\n ),\n ...reportFailures.map(error => Object.freeze({ phase: 'listener' as const, error })),\n ]);\n } finally {\n pending.forEach(source => source.clear());\n completed.forEach(node => node.clear());\n pending.clear();\n queued.clear();\n completed.length = 0;\n emissions.clear();\n errors.length = 0;\n reportingFailures = reportFailures;\n lock(false);\n phase = 'idle';\n }\n };\n const run = () => {\n settle();\n const result = flush();\n const failures = reportingFailures;\n reportingFailures = [];\n if (failures.length) throw new AggregateError(failures, 'Projection error reporter failed.');\n return result;\n };\n return {\n assertActive,\n assertIdle,\n capture,\n settle,\n flush,\n run,\n records,\n guards,\n cleanups,\n get active() {\n return !disposed;\n },\n register(handle: object, record: SourceRecord) {\n assertIdle();\n records.set(handle, record);\n projectionHandles.add(handle);\n },\n unregisterSource(handle: object) {\n const record = records.get(handle);\n if (record) {\n record.disposed = true;\n pending.delete(record);\n record.clear();\n records.delete(handle);\n }\n },\n source(handle: object) {\n assertActive();\n const source = records.get(handle);\n if (!source || source.disposed)\n throw new Error('Unknown, disposed, or foreign projection source.');\n return source;\n },\n addNode(node: NodeRecord) {\n nodes.add(node);\n node.sources.forEach(source => source.consumers.add(node));\n },\n order: () => sequence++,\n initialize<T>(run: () => T): T {\n assertIdle();\n phase = 'compute';\n lock(true);\n try {\n return run();\n } finally {\n lock(false);\n phase = 'idle';\n }\n },\n rebuild(node: NodeRecord) {\n assertIdle();\n if (node.disposed) throw new ProjectionDisposedError();\n node.forced = true;\n enqueue(node);\n run();\n },\n disposeNode(node: NodeRecord) {\n if (node.disposed) return;\n assertIdle();\n if (node.consumers.size)\n throw new Error('Cannot dispose a projection node with downstream consumers.');\n node.disposed = true;\n node.sources.forEach(source => source.consumers.delete(node));\n nodes.delete(node);\n node.release();\n for (const [handle, record] of records) if (record === node) records.delete(handle);\n },\n batch<T>(callback: () => T): T {\n assertIdle();\n depth++;\n let failed = false;\n try {\n const value = callback();\n assertSynchronous(value);\n return value;\n } catch (error) {\n failed = true;\n throw error;\n } finally {\n depth--;\n if (!depth) {\n if (failed) {\n try {\n run();\n } catch {\n /* The original application error retains priority. */\n }\n } else run();\n }\n }\n },\n dispose() {\n if (disposed) return;\n assertIdle();\n disposed = true;\n const failures: unknown[] = [];\n cleanups.forEach(cleanup => {\n try {\n cleanup();\n } catch (error) {\n failures.push(error);\n }\n });\n cleanups.clear();\n nodes.forEach(node => {\n node.disposed = true;\n node.release();\n node.consumers.clear();\n });\n records.forEach(source => {\n source.disposed = true;\n source.consumers.clear();\n source.clear();\n });\n nodes.clear();\n records.clear();\n pending.clear();\n heap.length = 0;\n completed.length = 0;\n queued.clear();\n emissions.clear();\n guards.clear();\n errors.length = 0;\n reportingFailures = [];\n if (failures.length) throw new AggregateError(failures, 'Projection cleanup failed.');\n },\n debug: () => ({\n nodes: nodes.size,\n sources: records.size - nodes.size,\n subscriptions: cleanups.size,\n pending: pending.size + heap.length,\n }),\n };\n};\nexport type Scheduler = ReturnType<typeof createScheduler>;\nexport const assertSynchronous = (value: unknown): void => {\n if (\n value != null &&\n (typeof value === 'object' || typeof value === 'function') &&\n 'then' in value &&\n typeof value.then === 'function'\n )\n throw new TypeError('Projection callbacks must be synchronous.');\n};\nexport const assertScope = (active: () => boolean) => {\n if (!active()) throw new Error('Projection reader or writer is no longer active.');\n};\n","import type { EngineInputs, EngineSources } from './contract';\nimport { ProjectionDisposedError } from './contract';\nimport type { NodeRecord, Scheduler } from './scheduler';\n\nexport const createNode = <S extends EngineSources>(\n scheduler: Scheduler,\n spec: { name?: string; sources: S },\n behavior: {\n evaluate(sources: EngineInputs<S>, build: boolean, active: () => boolean): boolean;\n context(active: () => boolean): unknown;\n revision(): number;\n reset(): boolean;\n publish(): void;\n emit(call: (listener: () => void) => void): void;\n clear(): void;\n release(): void;\n }\n) => {\n scheduler.assertIdle();\n const entries = Object.entries(spec.sources).map(\n ([key, handle]) => [key, scheduler.source(handle)] as const\n );\n const order = scheduler.order();\n const node: NodeRecord = {\n ...behavior,\n publish: () => {\n if (node.fault) behavior.clear();\n else behavior.publish();\n },\n order,\n name: spec.name ? `${spec.name} (${order})` : `projection-${order}`,\n sources: entries.map(([, source]) => source),\n consumers: new Set(),\n disposed: false,\n fault: undefined,\n forced: false,\n statusChanged: false,\n evaluate: build => {\n let active = true;\n try {\n const scopeActive = () => active;\n // Heterogeneous source contexts are typed at the registered capability boundary.\n const inputs = Object.fromEntries(\n entries.map(([key, source]) => [key, source.context(scopeActive)])\n ) as EngineInputs<S>;\n return behavior.evaluate(inputs, build, scopeActive);\n } finally {\n active = false;\n }\n },\n };\n scheduler.initialize(() => {\n const invalid = node.sources.find(source => source.fault || source.disposed);\n if (invalid) throw invalid.fault ?? new ProjectionDisposedError();\n node.evaluate(true);\n node.publish();\n node.clear();\n });\n const check = () => {\n if (node.disposed || !scheduler.active) throw new ProjectionDisposedError();\n if (node.fault) throw node.fault;\n };\n return {\n node,\n check,\n install(handle: object) {\n scheduler.register(handle, node);\n scheduler.addNode(node);\n },\n rebuild: () => scheduler.rebuild(node),\n dispose: () => scheduler.disposeNode(node),\n };\n};\n","import type { CollectionImpact } from '../impact';\nimport { profile } from '../profile';\nimport type {\n CollectionInput,\n CollectionRead,\n EngineCollectionSpec,\n MaterializedCollectionWriter,\n MaterializedCollection,\n EngineSources,\n} from './contract';\nimport type { Readable } from './readable';\nimport { createNode } from './node';\nimport { assertScope, assertSynchronous, projectionHandles, type Scheduler } from './scheduler';\n\nexport const collectionHandles = new WeakSet<object>();\n\nconst readonlySet = <T>(values: Iterable<T>): ReadonlySet<T> => {\n const set = new Set(values);\n const view: ReadonlySet<T> = Object.freeze({\n get size() {\n return set.size;\n },\n has: (value: T) => set.has(value),\n entries: () => set.entries(),\n keys: () => set.keys(),\n values: () => set.values(),\n [Symbol.iterator]: () => set.values(),\n forEach: (callback: (value: T, key: T, set: ReadonlySet<T>) => void, thisArg?: unknown) =>\n set.forEach(value => callback.call(thisArg, value, value, view)),\n });\n return view;\n};\ntype Entry<V> = { present: true; value: V } | { present: false };\nexport const createCollection = <S extends EngineSources, K extends string, V>(\n scheduler: Scheduler,\n spec: EngineCollectionSpec<S, K, V>\n): MaterializedCollection<K, V> => {\n const values = new Map<K, V>();\n let ids: readonly K[] = Object.freeze([]);\n let staged = new Map<K, Entry<V>>();\n let nextIds = ids;\n let change: CollectionImpact<K> | undefined;\n let instance: ReturnType<typeof spec.build> | undefined;\n let initialized = false;\n let reset = false;\n let revision = 0;\n let idsRevision = 0;\n let all: readonly V[] | undefined;\n type Item = { readable: Readable<V | undefined>; revision: number; listeners?: Set<() => void> };\n const items = new Map<K, Item>();\n const subscribedItems = new Set<Item>();\n const idsListeners = new Set<() => void>();\n const allListeners = new Set<() => void>();\n const listeners = new Set<(change: CollectionImpact<K>) => void>();\n const changedKeys = new Set<K>();\n let orderChanged = false;\n const current: CollectionRead<K, V> = Object.freeze({\n get: (key: K) => {\n owner.check();\n return values.get(key);\n },\n has: (key: K) => {\n owner.check();\n return values.has(key);\n },\n ids: () => {\n owner.check();\n return ids;\n },\n });\n const hasNext = (key: K) => (staged.has(key) ? staged.get(key)!.present : values.has(key));\n const getNext = (key: K) => {\n const entry = staged.get(key);\n return entry ? (entry.present ? entry.value : undefined) : values.get(key);\n };\n const owner = createNode(scheduler, spec, {\n evaluate: (sources, build, active) => {\n staged = new Map();\n nextIds = ids;\n change = undefined;\n changedKeys.clear();\n let explicitOrder: readonly K[] | undefined;\n let cleared = false;\n const nextHas = (key: K) =>\n staged.has(key) ? staged.get(key)!.present : !cleared && values.has(key);\n const nextGet = (key: K) => {\n const entry = staged.get(key);\n return entry\n ? entry.present\n ? entry.value\n : undefined\n : cleared\n ? undefined\n : values.get(key);\n };\n const deriveIds = () => {\n const result = cleared ? [] : ids.filter(nextHas);\n for (const [key, entry] of staged)\n if (entry.present && (cleared || !values.has(key))) result.push(key);\n return result;\n };\n const read = (next: boolean): CollectionRead<K, V> => ({\n get: key => {\n assertScope(active);\n return next ? nextGet(key) : values.get(key);\n },\n has: key => {\n assertScope(active);\n return next ? nextHas(key) : values.has(key);\n },\n ids: () => {\n assertScope(active);\n return next ? Object.freeze(explicitOrder ? explicitOrder.slice() : deriveIds()) : ids;\n },\n });\n const writer: MaterializedCollectionWriter<K, V> = {\n set: (key, value) => {\n assertScope(active);\n if (typeof key !== 'string') throw new TypeError('Projection keys must be strings.');\n staged.set(key, { present: true, value });\n },\n remove: key => {\n assertScope(active);\n staged.set(key, { present: false });\n },\n order: order => {\n assertScope(active);\n explicitOrder = order.slice();\n },\n replace: entries => {\n assertScope(active);\n staged.clear();\n cleared = true;\n const order: K[] = [];\n for (const [key, value] of entries) {\n if (staged.has(key)) throw new TypeError('Duplicate projection key.');\n writer.set(key, value);\n order.push(key);\n }\n explicitOrder = order;\n },\n };\n const input = { sources, previous: read(false), next: read(true), writer };\n if (build || !instance) {\n profile.materialized.rebuilt();\n instance = undefined;\n cleared = true;\n const built = spec.build(input);\n assertSynchronous(built);\n instance = built;\n } else {\n profile.materialized.updated();\n const result = instance.update(input);\n assertSynchronous(result);\n if (result?.kind === 'rebuild') {\n staged.clear();\n cleared = true;\n explicitOrder = undefined;\n instance = undefined;\n const built = spec.build(input);\n assertSynchronous(built);\n instance = built;\n build = true;\n }\n }\n if (cleared)\n for (const key of values.keys()) if (!staged.has(key)) staged.set(key, { present: false });\n const added = new Set<K>();\n const removed = new Set<K>();\n const updated = new Set<K>();\n profile.projection('touchedKeys', staged.size);\n for (const [key, entry] of staged) {\n const existed = values.has(key);\n if (entry.present) {\n if (!existed) added.add(key);\n else if (!(spec.isEqual ?? Object.is)(values.get(key) as V, entry.value))\n updated.add(key);\n else staged.delete(key);\n } else if (existed) removed.add(key);\n else staged.delete(key);\n }\n if (explicitOrder || added.size || removed.size) {\n const order = explicitOrder ?? [...ids.filter(key => !removed.has(key)), ...added];\n const seen = new Set(order);\n if (\n seen.size !== order.length ||\n order.length !== values.size + added.size - removed.size ||\n order.some(key => !hasNext(key))\n )\n throw new TypeError('Projection order must contain every key exactly once.');\n nextIds =\n ids.length === order.length && ids.every((key, i) => key === order[i])\n ? ids\n : Object.freeze(order.slice());\n }\n orderChanged = nextIds !== ids;\n if (added.size || removed.size || updated.size || orderChanged) {\n let commonOrderChanged = false;\n if (orderChanged) {\n const before = ids.filter(key => !removed.has(key));\n const after = nextIds.filter(key => !added.has(key));\n commonOrderChanged = before.some((key, i) => after[i] !== key);\n }\n change = Object.freeze({\n kind: 'incremental',\n added: readonlySet(added),\n removed: readonlySet(removed),\n updated: readonlySet(updated),\n orderChanged: commonOrderChanged,\n });\n [...added, ...removed, ...updated].forEach(key => changedKeys.add(key));\n profile.projection('changedKeys', changedKeys.size);\n }\n reset = build;\n return change !== undefined;\n },\n context: active => {\n const input: CollectionInput<K, V> = {\n get: key => {\n assertScope(active);\n return getNext(key);\n },\n has: key => {\n assertScope(active);\n return hasNext(key);\n },\n ids: () => {\n assertScope(active);\n return nextIds;\n },\n change,\n revision: revision + (change ? 1 : 0),\n reset,\n };\n return Object.freeze(input);\n },\n revision: () => revision,\n reset: () => reset,\n publish: () => {\n for (const [key, entry] of staged) {\n if (entry.present) values.set(key, entry.value);\n else values.delete(key);\n }\n if (change) {\n if (initialized) revision++;\n if (orderChanged && initialized) idsRevision++;\n all = undefined;\n changedKeys.forEach(key => {\n const item = items.get(key);\n if (item && initialized) item.revision++;\n });\n }\n ids = nextIds;\n initialized = true;\n },\n emit: call => {\n profile.materialized.notification();\n const fault = owner.node.fault !== undefined;\n const resetEvent = Object.freeze({ kind: 'reset' as const });\n Array.from(listeners).forEach(listener => call(() => listener(change ?? resetEvent)));\n if (orderChanged || !change || fault || owner.node.statusChanged)\n Array.from(idsListeners).forEach(listener => call(listener));\n Array.from(allListeners).forEach(listener => call(listener));\n if (!change || fault || owner.node.statusChanged) {\n for (const item of subscribedItems)\n Array.from(item.listeners ?? []).forEach(listener => call(listener));\n } else {\n for (const key of changedKeys)\n Array.from(items.get(key)?.listeners ?? []).forEach(listener => call(listener));\n }\n },\n clear: () => {\n staged.clear();\n nextIds = ids;\n change = undefined;\n reset = false;\n changedKeys.clear();\n orderChanged = false;\n },\n release: () => {\n values.clear();\n staged.clear();\n items.clear();\n subscribedItems.clear();\n idsListeners.clear();\n allListeners.clear();\n listeners.clear();\n ids = nextIds = Object.freeze([]);\n all = undefined;\n instance = undefined;\n },\n });\n const handle = {\n current: () => {\n owner.check();\n return current;\n },\n ids: {\n current: () => {\n owner.check();\n return ids;\n },\n revision: () => {\n owner.check();\n return idsRevision;\n },\n subscribe: (listener: () => void) => {\n owner.check();\n idsListeners.add(listener);\n return () => {\n idsListeners.delete(listener);\n };\n },\n },\n all: {\n current: () => {\n owner.check();\n if (!all) {\n profile.collectionView.arrayCopied();\n all = Object.freeze(ids.map(key => values.get(key) as V));\n }\n return all;\n },\n revision: () => {\n owner.check();\n return revision;\n },\n subscribe: (listener: () => void) => {\n owner.check();\n allListeners.add(listener);\n return () => {\n allListeners.delete(listener);\n };\n },\n },\n item: (key: K) => {\n owner.check();\n const old = items.get(key);\n if (old) return old.readable;\n const readable: Readable<V | undefined> = Object.freeze({\n current: () => {\n owner.check();\n return values.get(key);\n },\n revision: () => {\n owner.check();\n return item.revision;\n },\n subscribe: (listener: () => void) => {\n owner.check();\n const set = (item.listeners ??= new Set());\n set.add(listener);\n subscribedItems.add(item);\n return () => {\n set.delete(listener);\n if (!set.size) subscribedItems.delete(item);\n };\n },\n });\n const item: Item = { readable, revision: 0 };\n projectionHandles.add(readable);\n items.set(key, item);\n return readable;\n },\n revision: () => {\n owner.check();\n return revision;\n },\n subscribe: (listener: (change: CollectionImpact<K>) => void) => {\n owner.check();\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n rebuild: owner.rebuild,\n dispose: owner.dispose,\n } as MaterializedCollection<K, V>;\n projectionHandles.add(handle.ids);\n projectionHandles.add(handle.all);\n collectionHandles.add(handle);\n owner.install(handle);\n return Object.freeze(handle);\n};\n","import { createAccess, collectionAccess } from '../access/scope';\nimport { affectsTarget, collectionImpact } from '../impact';\nimport * as target from '../impact-target';\nimport { accessOf } from '../runtime/access';\nimport { attachProjection, documentReadableOwner } from '../runtime/notification';\nimport type { DocumentCommit, DocumentReadable } from '../runtime/contract';\nimport type { ObjectNode, ImpactTarget, CollectionSelector, PathPick } from '../schema';\nimport { compilePath } from '../schema';\nimport type { DocumentSource, EngineSource, ValueInput } from './contract';\nimport { ProjectionError } from './contract';\nimport { collectionHandles } from './collection';\nimport type { Readable } from './readable';\nimport { assertScope, projectionHandles, type Scheduler, type SourceRecord } from './scheduler';\n\nexport const createSources = (scheduler: Scheduler) => {\n const documents = new Map<object, object>();\n const readables = new Map<\n object,\n Map<\n object,\n {\n readonly source: object;\n readonly accept: (value: unknown) => void;\n }\n >\n >();\n const collections = new WeakSet<object>();\n const document = <S extends ObjectNode>(runtime: DocumentReadable<S>): DocumentSource<S> => {\n scheduler.assertIdle();\n const state = accessOf(runtime);\n if (state.disposed) throw new Error('Document has been disposed.');\n const existing = documents.get(state);\n if (existing) return existing as DocumentSource<S>;\n const bindings: {\n handle: object;\n targets: readonly ImpactTarget[];\n record: SourceRecord;\n receive: (commit: DocumentCommit<S>) => void;\n }[] = [];\n const make = (\n input:\n { readonly targets: readonly ImpactTarget[] } | { readonly collection: CollectionSelector }\n ): object => {\n const collection = 'collection' in input ? input.collection : undefined;\n const targets = 'targets' in input ? input.targets : [input.collection];\n if (state.disposed) throw new Error('Document has been disposed.');\n targets.forEach(value => {\n if (!target.belongs(value, state.schema))\n throw new Error('Projection target belongs to another schema.');\n });\n const old = bindings.find(\n entry =>\n Boolean(collection) === collections.has(entry.handle) &&\n entry.targets.length === targets.length &&\n entry.targets.every((value, i) => target.same(value, targets[i]))\n );\n if (old) return old.handle;\n let commits: DocumentCommit<S>[] = [];\n let reset = false;\n let orderDirty = false;\n const keys = new Set<string>();\n let candidates:\n { readonly keys: readonly string[]; readonly orderDirty: boolean } | undefined;\n const record: SourceRecord = {\n consumers: new Set(),\n disposed: false,\n fault: undefined,\n revision: runtime.revision,\n reset: () => reset,\n clear: () => {\n commits = [];\n reset = orderDirty = false;\n keys.clear();\n candidates = undefined;\n },\n context: active => {\n assertScope(active);\n if (state.disposed) throw new Error('Document has been disposed.');\n const context = { state, active };\n const read = collection\n ? collectionAccess(context, collection.address)\n : createAccess(context);\n return Object.freeze({\n read,\n revision: runtime.revision(),\n commits: Object.freeze(commits.slice()),\n reset: record.reset(),\n ...(collection\n ? {\n candidates: (candidates ??= Object.freeze({\n keys: Object.freeze([...keys]),\n orderDirty,\n })),\n }\n : {}),\n });\n },\n };\n const handle = collection\n ? {}\n : {\n collection: (pick: PathPick<S>) => {\n scheduler.assertIdle();\n const selector = compilePath<S['shape']>(\n state.schema,\n 'collection',\n pick\n ) as CollectionSelector;\n return make({ collection: selector });\n },\n targets: (...selected: PathPick<S>[]) => {\n scheduler.assertIdle();\n if (!selected.length) throw new TypeError('Expected at least one target.');\n return make({\n targets: selected.map(pick => compilePath<S['shape']>(state.schema, 'value', pick)),\n });\n },\n };\n Object.freeze(handle);\n if (collection) collections.add(handle);\n scheduler.register(handle, record);\n // The attachment delivers to all local bindings without extra document subscriptions.\n const receive = (commit: DocumentCommit<S>) => {\n commits.push(commit);\n reset ||= commit.impact.kind === 'reset';\n if (collection) {\n const change = collectionImpact(commit.impact, collection);\n if (change.kind === 'reset') reset = true;\n else {\n change.added.forEach(key => keys.add(key));\n change.removed.forEach(key => keys.add(key));\n change.updated.forEach(key => keys.add(key));\n orderDirty ||= Boolean(change.added.size || change.removed.size || change.orderChanged);\n }\n candidates = undefined;\n }\n };\n bindings.push({ handle, targets, record, receive });\n return handle;\n };\n const handle = make({ targets: [] }) as DocumentSource<S>;\n const guard = (locked: boolean) => {\n state.projectionLocks = (state.projectionLocks ?? 0) + (locked ? 1 : -1);\n };\n scheduler.guards.add(guard);\n const unsubscribe = attachProjection(runtime, {\n capture: commit => {\n for (const binding of bindings) {\n if (\n !binding.targets.length ||\n binding.targets.some(value => affectsTarget(commit.impact, value))\n ) {\n binding.receive(commit);\n scheduler.capture(binding.record);\n }\n }\n },\n settle: scheduler.settle,\n flush: scheduler.flush,\n dispose: () => {\n bindings.forEach(({ record }) => {\n record.fault = new ProjectionError(\n 'source',\n 'document disposed',\n [runtime.revision()],\n new Error('Document has been disposed.')\n );\n scheduler.capture(record);\n });\n scheduler.run();\n },\n });\n scheduler.cleanups.add(() => {\n unsubscribe();\n scheduler.guards.delete(guard);\n });\n documents.set(state, handle);\n return handle;\n };\n const valueSource = <T>(initial: T, equal: (a: T, b: T) => boolean) => {\n let value = initial;\n let previous = initial;\n let revision = 0;\n const handle = Object.freeze({}) as EngineSource<ValueInput<T>>;\n const record: SourceRecord = {\n consumers: new Set(),\n disposed: false,\n fault: undefined,\n revision: () => revision,\n reset: () => false,\n clear: () => {\n previous = value;\n },\n context: active => {\n assertScope(active);\n return Object.freeze({\n value,\n previous,\n revision,\n changed: !equal(previous, value),\n reset: false,\n });\n },\n };\n scheduler.register(handle, record);\n const accept = (next: T) => {\n scheduler.assertIdle();\n const recovering = record.fault !== undefined;\n if (equal(value, next) && !recovering) return;\n record.fault = undefined;\n value = next;\n revision++;\n scheduler.capture(record);\n };\n return {\n source: handle,\n accept,\n set(next: T) {\n accept(next);\n scheduler.run();\n },\n };\n };\n return {\n dispose: () => {\n documents.clear();\n readables.clear();\n },\n document,\n input: <T>(initial: T, options?: { readonly isEqual?: (a: T, b: T) => boolean }) => {\n const { source, set } = valueSource(initial, options?.isEqual ?? Object.is);\n return Object.freeze({ source, set });\n },\n fromReadable: <T>(\n readable: Readable<T>,\n options?: { readonly isEqual?: (a: T, b: T) => boolean }\n ): EngineSource<ValueInput<T>> => {\n scheduler.assertIdle();\n if (projectionHandles.has(readable))\n throw new Error('Projection nodes must be declared directly as sources.');\n const equal = options?.isEqual ?? Object.is;\n let bindings = readables.get(readable);\n const old = bindings?.get(equal);\n if (old) return old.source as EngineSource<ValueInput<T>>;\n const input = valueSource(readable.current(), equal);\n if (bindings) {\n bindings.set(equal, { source: input.source, accept: value => input.accept(value as T) });\n return input.source;\n }\n bindings = new Map([\n [equal, { source: input.source, accept: (value: unknown) => input.accept(value as T) }],\n ]);\n const members = bindings;\n const receive = (settle = true) => {\n if (!scheduler.active) return;\n let value: T;\n try {\n value = readable.current();\n } catch (cause) {\n for (const member of members.values()) {\n const record = scheduler.source(member.source);\n record.fault = new ProjectionError(\n 'source',\n 'external readable',\n [record.revision()],\n cause\n );\n scheduler.capture(record);\n }\n if (settle) scheduler.run();\n return;\n }\n for (const member of members.values()) {\n try {\n member.accept(value);\n } catch (cause) {\n const record = scheduler.source(member.source);\n record.fault = new ProjectionError(\n 'source',\n 'external readable',\n [record.revision()],\n cause\n );\n scheduler.capture(record);\n }\n }\n if (settle) scheduler.run();\n };\n let unsubscribe: (() => void) | undefined;\n let detach: (() => void) | undefined;\n try {\n const owner = documentReadableOwner(readable);\n if (owner) {\n document(owner);\n detach = attachProjection(owner, {\n capture: () => receive(false),\n settle: scheduler.settle,\n flush: scheduler.flush,\n dispose: () => {\n for (const member of members.values()) {\n const record = scheduler.source(member.source);\n record.fault = new ProjectionError(\n 'source',\n 'document readable disposed',\n [record.revision()],\n new Error('Document has been disposed.')\n );\n scheduler.capture(record);\n }\n scheduler.run();\n },\n });\n }\n unsubscribe = readable.subscribe(() => receive());\n input.accept(readable.current());\n } catch (error) {\n try {\n unsubscribe?.();\n detach?.();\n } finally {\n scheduler.unregisterSource(input.source);\n }\n throw error;\n }\n scheduler.cleanups.add(unsubscribe);\n if (detach) scheduler.cleanups.add(detach);\n readables.set(readable, bindings);\n scheduler.run();\n return input.source;\n },\n assertCollection: (handle: object) => {\n scheduler.source(handle);\n if (!collections.has(handle) && !collectionHandles.has(handle))\n throw new Error('map requires a collection source.');\n },\n };\n};\n","import type { EngineSources, MaterializedValue, EngineValueSpec } from './contract';\nimport { createNode } from './node';\nimport { assertScope, assertSynchronous, type Scheduler } from './scheduler';\nimport { profile } from '../profile';\n\nexport const createValue = <S extends EngineSources, T>(\n scheduler: Scheduler,\n spec: EngineValueSpec<S, T>,\n options?: { readonly isEqual?: (a: T, b: T) => boolean }\n): MaterializedValue<T> => {\n let instance: ReturnType<typeof spec.build> | undefined;\n let value!: T;\n let next!: T;\n let previous!: T;\n let initialized = false;\n let revision = 0;\n let changed = false;\n let reset = false;\n const listeners = new Set<() => void>();\n const owner = createNode(scheduler, spec, {\n evaluate: (sources, build) => {\n let candidate: T;\n if (build || !instance) {\n profile.materialized.rebuilt();\n instance = undefined;\n const built = spec.build(sources);\n assertSynchronous(built);\n instance = built;\n candidate = built.value;\n } else {\n profile.materialized.updated();\n const result = instance.update(sources);\n assertSynchronous(result);\n if (result.kind === 'rebuild') {\n instance = undefined;\n const built = spec.build(sources);\n assertSynchronous(built);\n instance = built;\n candidate = built.value;\n build = true;\n } else candidate = result.kind === 'changed' ? result.value : value;\n }\n previous = value;\n changed = !initialized || !(options?.isEqual ?? Object.is)(value, candidate);\n next = changed ? candidate : value;\n reset = build;\n return changed;\n },\n context: active => {\n assertScope(active);\n return Object.freeze({\n value: next,\n previous,\n changed,\n revision: revision + (changed ? 1 : 0),\n reset,\n });\n },\n revision: () => revision,\n reset: () => reset,\n publish: () => {\n if (changed && initialized) revision++;\n value = next;\n initialized = true;\n },\n emit: call => {\n profile.materialized.notification();\n Array.from(listeners).forEach(listener => call(listener));\n },\n clear: () => {\n next = value;\n previous = value;\n changed = false;\n reset = false;\n },\n release: () => {\n listeners.clear();\n instance = undefined;\n value = next = previous = undefined as T;\n },\n });\n const handle = Object.freeze({\n current: () => {\n owner.check();\n return value;\n },\n revision: () => {\n owner.check();\n return revision;\n },\n subscribe: (listener: () => void) => {\n owner.check();\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n rebuild: owner.rebuild,\n dispose: owner.dispose,\n }) as MaterializedValue<T>;\n owner.install(handle);\n return handle;\n};\n","import type {\n CollectionInput,\n CollectionRead,\n EngineInputs,\n ProjectionEngine,\n EngineSource,\n EngineSources,\n MaterializedValue,\n EngineValueSpec,\n} from './contract';\nimport type { Synchronous } from '../runtime/contract';\nimport { assertSynchronous, createScheduler } from './scheduler';\nimport { createSources } from './source';\nimport { createValue } from './value';\nimport { createCollection } from './collection';\nimport type { ProjectionError } from './contract';\nimport { profile } from '../profile';\n\nconst debug = new WeakMap<\n object,\n () => { nodes: number; sources: number; subscriptions: number; pending: number }\n>();\nexport const projectionEngineDebug = (runtime: ProjectionEngine) => {\n const read = debug.get(runtime);\n if (!read) throw new Error('Unknown projection engine.');\n return Object.freeze(read());\n};\nexport const createProjectionEngine = (options: {\n readonly onError: (error: ProjectionError) => void;\n}): ProjectionEngine => {\n const scheduler = createScheduler(options.onError);\n const sources = createSources(scheduler);\n function value<S extends EngineSources, T>(\n sources: S,\n compute: (sources: EngineInputs<S>) => Synchronous<T>,\n options?: { readonly isEqual?: (a: NoInfer<T>, b: NoInfer<T>) => boolean }\n ): MaterializedValue<T>;\n function value<S extends EngineSources, T>(\n spec: EngineValueSpec<S, T>,\n options?: { readonly isEqual?: (a: NoInfer<T>, b: NoInfer<T>) => boolean }\n ): MaterializedValue<T>;\n function value<S extends EngineSources, T>(\n input: S | EngineValueSpec<S, T>,\n computeOrOptions?:\n ((sources: EngineInputs<S>) => T) | { readonly isEqual?: (a: T, b: T) => boolean },\n options?: { readonly isEqual?: (a: T, b: T) => boolean }\n ): MaterializedValue<T> {\n if (typeof computeOrOptions !== 'function')\n return createValue(scheduler, input as EngineValueSpec<S, T>, computeOrOptions);\n const compute = (input: EngineInputs<S>) => {\n const result = computeOrOptions(input);\n assertSynchronous(result);\n return result;\n };\n return createValue(\n scheduler,\n {\n sources: input as S,\n build: input => ({\n value: compute(input),\n update: input => ({ kind: 'changed', value: compute(input) }),\n }),\n },\n options\n );\n }\n const map = <K extends string, V, R>(\n source: EngineSource<\n | CollectionInput<K, V>\n | {\n readonly read: CollectionRead<K, V>;\n readonly reset: boolean;\n readonly candidates: { readonly keys: readonly K[]; readonly orderDirty: boolean };\n }\n >,\n mapper: (id: K, entry: V) => R,\n options?: { readonly isEqual?: (a: R, b: R) => boolean }\n ) => {\n sources.assertCollection(source);\n const calculate = (id: K, entry: V): R => {\n const value = mapper(id, entry);\n assertSynchronous(value);\n return value;\n };\n return createCollection(scheduler, {\n sources: { source },\n isEqual: options?.isEqual,\n build: ({ sources, writer }) => {\n const input = sources.source;\n const read = 'read' in input ? input.read : input;\n const ids = read.ids();\n profile.collectionView.idsScanned(ids.length);\n for (const id of ids) {\n profile.collectionView.mapped();\n writer.set(id, calculate(id, read.get(id)!));\n }\n writer.order(ids);\n return {\n update: ({ sources, writer }) => {\n const input = sources.source;\n if (input.reset) return { kind: 'rebuild' };\n const read = 'read' in input ? input.read : input;\n let keys: Iterable<K>;\n let structural: boolean;\n if ('candidates' in input) {\n keys = input.candidates.keys;\n structural = input.candidates.orderDirty;\n } else {\n const change = input.change;\n if (!change) return;\n if (change.kind === 'reset') return { kind: 'rebuild' };\n keys = new Set([...change.added, ...change.removed, ...change.updated]);\n structural = Boolean(change.added.size || change.removed.size || change.orderChanged);\n }\n for (const key of keys) {\n if (!read.has(key)) writer.remove(key);\n else {\n profile.collectionView.mapped();\n writer.set(key, calculate(key, read.get(key)!));\n }\n }\n if (structural) {\n const ids = read.ids();\n profile.collectionView.idsScanned(ids.length);\n writer.order(ids);\n }\n },\n };\n },\n });\n };\n const runtime: ProjectionEngine = {\n document: sources.document,\n input: sources.input,\n fromReadable: sources.fromReadable,\n value,\n collection: () => spec => createCollection(scheduler, spec),\n map,\n batch: scheduler.batch,\n dispose: () => {\n try {\n scheduler.dispose();\n } finally {\n if (!scheduler.active) sources.dispose();\n }\n },\n };\n debug.set(runtime, scheduler.debug);\n return Object.freeze(runtime);\n};\n","import type { Unsubscribe } from '../runtime/contract';\nimport type { CollectionImpact } from '../impact';\nimport type {\n CollectionRead,\n MaterializedCollection,\n ProjectionEngine,\n MaterializedValue,\n} from './contract';\nimport type { Readable } from './readable';\nimport {\n definitionOf,\n type CollectionProjection,\n type InputProjection,\n type Projection,\n type ValueProjection,\n} from './definition';\nimport { createProjectionEngine, projectionEngineDebug } from './runtime';\n\ntype Materialized = MaterializedValue<unknown> | MaterializedCollection<string, unknown> | object;\n\nexport type ProjectionStore = {\n get<K extends string, V>(projection: CollectionProjection<K, V>): CollectionRead<K, V>;\n get<T>(projection: ValueProjection<T>): T;\n item<K extends string, V>(\n projection: CollectionProjection<K, V>,\n key: K\n ): Readable<V | undefined>;\n set<T>(projection: InputProjection<T>, value: T): void;\n subscribe<K extends string, V>(\n projection: CollectionProjection<K, V>,\n listener: (change: CollectionImpact<K>) => void\n ): Unsubscribe;\n subscribe<T>(projection: ValueProjection<T>, listener: () => void): Unsubscribe;\n revision(projection: ValueProjection<unknown> | CollectionProjection<string, unknown>): number;\n rebuild(projection: ValueProjection<unknown> | CollectionProjection<string, unknown>): void;\n release(projection: ValueProjection<unknown> | CollectionProjection<string, unknown>): void;\n batch<T>(run: () => T): T;\n dispose(): void;\n};\n\nconst stores = new WeakMap<object, ProjectionEngine>();\nexport const projectionStoreDebug = (store: ProjectionStore) => {\n const runtime = stores.get(store);\n if (!runtime) throw new Error('Unknown projection store.');\n return projectionEngineDebug(runtime);\n};\n\nexport const createProjectionStore = (options: {\n readonly onError: Parameters<typeof createProjectionEngine>[0]['onError'];\n}): ProjectionStore => {\n const runtime = createProjectionEngine(options);\n const instances = new WeakMap<object, Materialized>();\n const inputs = new WeakMap<object, { readonly source: object; set(value: unknown): void }>();\n const materialize = (\n projection: Projection<unknown, unknown, 'source' | 'value' | 'collection'>\n ): Materialized => {\n const old = instances.get(projection);\n if (old) return old;\n const definition = definitionOf(projection);\n let instance: Materialized;\n if (definition.kind === 'input') {\n const input = runtime.input(definition.initial, { isEqual: definition.isEqual as never });\n inputs.set(projection, input);\n instance = runtime.value({ input: input.source }, ({ input }) => input.value);\n } else if (definition.kind === 'readable') {\n const source = runtime.fromReadable(definition.readable, {\n isEqual: definition.isEqual as never,\n });\n instance = runtime.value({ source }, ({ source }) => source.value);\n } else if (definition.kind === 'document') {\n const document = runtime.document(definition.document);\n instance = definition.targets?.length\n ? document.targets(...(definition.targets as [never, ...never[]]))\n : document;\n } else if (definition.kind === 'document-collection')\n instance = runtime.document(definition.document).collection(definition.pick as never);\n else if (definition.kind === 'map')\n instance = runtime.map(materialize(definition.source) as never, definition.mapper as never, {\n isEqual: definition.isEqual as never,\n });\n else {\n const sources = Object.fromEntries(\n Object.entries(definition.sources).map(([key, source]) => [key, materialize(source)])\n );\n if (definition.kind === 'value') {\n instance = runtime.value(\n sources as never,\n (events: Record<string, unknown>) => {\n const values = Object.fromEntries(\n Object.entries(events).map(([key, event]) => [key, current(event)])\n );\n return definition.compute(values as never);\n },\n { isEqual: definition.isEqual as never }\n );\n } else if (definition.kind === 'advanced-value')\n instance = runtime.value(\n { sources: sources as never, build: definition.build as never, name: definition.name },\n { isEqual: definition.isEqual as never }\n );\n else\n instance = runtime.collection<unknown>()({\n sources: sources as never,\n build: definition.build as never,\n isEqual: definition.isEqual as never,\n name: definition.name,\n });\n }\n instances.set(projection, instance);\n return instance;\n };\n const current = (event: unknown): unknown => {\n if (event && typeof event === 'object') {\n if ('value' in event) return (event as { value: unknown }).value;\n if ('read' in event) return (event as { read: unknown }).read;\n }\n return event;\n };\n const store: ProjectionStore = {\n get: ((projection: Projection<unknown, unknown, 'source' | 'value' | 'collection'>) => {\n const instance = materialize(projection);\n if ('current' in instance && typeof instance.current === 'function')\n return instance.current();\n throw new TypeError('Projection is a source and has no published value.');\n }) as ProjectionStore['get'],\n item: ((projection, key) => {\n const instance = materialize(projection);\n if (!('item' in instance) || typeof instance.item !== 'function')\n throw new TypeError('Projection is not a materialized collection.');\n return instance.item(key);\n }) as ProjectionStore['item'],\n set: (projection, value) => {\n materialize(projection);\n const target = inputs.get(projection);\n if (!target) throw new TypeError('Projection is not an input.');\n target.set(value);\n },\n subscribe: ((\n projection: Projection<unknown, unknown, 'source' | 'value' | 'collection'>,\n listener: Function\n ) => {\n const instance = materialize(projection);\n if (!('subscribe' in instance))\n throw new TypeError('Projection is a source and cannot be subscribed.');\n return instance.subscribe(listener as never);\n }) as ProjectionStore['subscribe'],\n revision: projection => {\n const instance = materialize(projection);\n if (!('revision' in instance) || typeof instance.revision !== 'function')\n throw new TypeError('Projection has no published revision.');\n return instance.revision();\n },\n rebuild: projection => {\n const instance = materialize(projection);\n if (!('rebuild' in instance) || typeof instance.rebuild !== 'function')\n throw new TypeError('Projection cannot be rebuilt.');\n instance.rebuild();\n },\n release: projection => {\n const instance = instances.get(projection);\n if (!instance) return;\n if ('dispose' in instance && typeof instance.dispose === 'function') instance.dispose();\n instances.delete(projection);\n inputs.delete(projection);\n },\n batch: runtime.batch,\n dispose: runtime.dispose,\n };\n stores.set(store, runtime);\n return Object.freeze(store);\n};\n"],"mappings":";;AAgCA,IAAa,aAAb,cAAgC,UAAU;CACxC;CACA,YAAY,OAAmB;AAC7B,QAAM,GAAG,MAAM,QAAQ,MAAM,KAAK,UAAU,MAAM,QAAQ,GAAG;AAC7D,OAAK,OAAO;AACZ,OAAK,SAAS,OAAO,OAAO,CAC1B,OAAO,OAAO;GAAE,GAAG;GAAO,SAAS,OAAO,OAAO,CAAC,GAAG,MAAM,QAAQ,CAAC;GAAE,CAAC,CACxE,CAAC;;;AAIN,MAAM,SACJ,SACA,SACA,OAA2B,qBACX;CAAE;CAAS;CAAS;CAAM;AAE5C,MAAa,eACX,WACA,OACA,SACA,WAC2B;AAC3B,KAAI,CAAC,UACH,QAAO,SACH,MAAM,SAAS,qDAAqD,oBAAoB,GACxF,KAAA;AACN,KAAI;EACF,MAAM,SACJ,OAAO,cAAc,aAAa,UAAU,MAAM,GAAG,UAAU,aAAa,SAAS,MAAM;AAC7F,MACE,WACC,OAAO,WAAW,YAAY,OAAO,WAAW,eACjD,UAAU,UACV,OAAO,OAAO,SAAS,WAEvB,QAAO,MAAM,SAAS,kCAAkC;AAC1D,MAAI,OAAO,cAAc,YAAY;AACnC,OAAI,CAACA,cAAAA,SAAS,OAAO,CAAE,QAAO,MAAM,SAAS,8BAA8B;AAC3E,OAAI,MAAM,QAAQ,OAAO,OAAO,EAAE;IAChC,MAAM,QAAQ,OAAO,OAAO;AAC5B,WAAO,MACL,CACE,GAAG,SACH,IAAI,OAAO,QAAQ,EAAE,EAAE,KAAK,SAC1B,OAAO,OAAO,SAAS,WAAW,KAAK,MAAM,KAAK,CACnD,CACF,EACD,OAAO,WAAW,2BACnB;;AAEH,OAAI,CAAC,OAAO,OAAO,QAAQ,QAAQ,CAAE,QAAO,MAAM,SAAS,8BAA8B;;AAE3F;UACO,OAAO;AACd,SAAO,MAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU,2BAA2B;;;AAI9F,MAAa,YACX,WACA,OACA,YAC2B;AAC3B,KAAI,OAAO,UAAU,SACnB,QAAO,MAAM,SAAS,oCAAoC,cAAc;CAC1E,MAAM,UAAU,YAAY,WAAW,OAAO,SAAS,MAAM;AAC7D,QAAO,UAAU;EAAE,GAAG;EAAS,MAAM;EAAe,GAAG,KAAA;;AAGzD,MAAa,cACX,MACA,OACA,UAA2B,EAAE,EAC7B,SAAS,UACkB;AAC3B,KAAI,KAAK,YAAY,UAAU,KAAA,EAAW,QAAO,KAAA;AACjD,KAAI,KAAK,SAAS,QAAS,QAAO,YAAY,KAAK,WAAW,OAAO,SAAS,OAAO;AACrF,KAAI,KAAK,SAAS,YAAY,KAAK,SAAS,WAAW;AACrD,MAAI,CAACC,cAAAA,cAAc,MAAM,CAAE,QAAO,MAAM,SAAS,sBAAsB;AACvE,MAAI,KAAK,SAAS,WAAW;GAC3B,MAAM,MAAM,MAAM,KAAK;AACvB,OACE,CAAC,OAAO,OAAO,OAAO,KAAK,IAAI,IAC/B,OAAO,QAAQ,YACf,CAAC,OAAO,OAAO,KAAK,UAAU,IAAI,CAElC,QAAO,MAAM,CAAC,GAAG,SAAS,KAAK,IAAI,EAAE,uBAAuB;;EAEhE,MAAM,EAAE,YAAYC,cAAAA,cAAc,MAAM,MAAM;AAC9C,OAAK,MAAM,OAAO,QAAQ,QAAQ,MAAM,EAAE;AACxC,OAAI,KAAK,SAAS,aAAa,QAAQ,KAAK,IAAK;AACjD,OAAI,OAAO,QAAQ,YAAY,CAAC,QAAQ,IAAI,IAAI,CAC9C,QAAO,MAAM,CAAC,GAAG,SAAS,OAAO,IAAI,CAAC,EAAE,iDAAiD;;AAE7F,OAAK,MAAM,CAAC,KAAK,WAAW,SAAS;GACnC,MAAM,QAAQ,OAAO;AACrB,OAAI,CAAC,OAAO,UAAU,eAAe,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,SAC9D,QAAO,MAAM,CAAC,GAAG,SAAS,IAAI,EAAE,gCAAgC;GAClE,MAAM,UAAU,WAAW,OAAO,MAAM,MAAM,CAAC,GAAG,SAAS,IAAI,EAAE,OAAO;AACxE,OAAI,QAAS,QAAO;;AAEtB;;AAEF,KAAI,KAAK,SAAS,WAAW,KAAK,SAAS,OAAO;AAChD,MAAI,CAACD,cAAAA,cAAc,MAAM,CAAE,QAAO,MAAM,SAAS,gCAAgC;EACjF,MAAM,UAAU,KAAK,SAAS,UAAU,MAAM,OAAO;AACrD,MAAI,CAACA,cAAAA,cAAc,QAAQ,CAAE,QAAO,MAAM,SAAS,0BAA0B;AAC7E,MAAI,KAAK,SAAS,SAAS;AACzB,OAAI,CAAC,MAAM,QAAQ,MAAM,IAAI,IAAI,MAAM,IAAI,WAAW,OAAO,KAAK,QAAQ,CAAC,OACzE,QAAO,MAAM,SAAS,oCAAoC;GAC5D,MAAM,uBAAO,IAAI,KAAa;AAC9B,QAAK,MAAM,MAAM,MAAM,KAAK;IAC1B,MAAM,UAAU,SAAS,KAAK,KAAK,IAAI,QAAQ;AAC/C,QAAI,QAAS,QAAO;AACpB,QAAI,KAAK,IAAI,GAAG,IAAI,CAAC,OAAO,UAAU,eAAe,KAAK,SAAS,GAAG,CACpE,QAAO,MAAM,SAAS,2DAA2D;AACnF,SAAK,IAAI,GAAG;;;AAGhB,OAAK,MAAM,MAAM,OAAO,KAAK,QAAQ,EAAE;GACrC,MAAM,UACJ,SAAS,KAAK,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,IACxC,WAAW,KAAK,OAAO,QAAQ,KAAK,CAAC,GAAG,SAAS,GAAG,EAAE,OAAO;AAC/D,OAAI,QAAS,QAAO;;AAEtB;;AAEF,KAAI,KAAK,SAAS,QAAQ;AACxB,MAAI,CAAC,MAAM,QAAQ,MAAM,CAAE,QAAO,MAAM,SAAS,mBAAmB;EACpE,MAAM,uBAAO,IAAI,KAAa;EAC9B,MAAM,QAAA,cAAA,KAAoB,OAAO,KAAK,MAAM;AAC5C,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GACrC,MAAM,UAAU,WAAW,KAAK,OAAO,MAAM,IAAI,CAAC,GAAG,SAAS,OAAO,EAAE,CAAC,EAAE,OAAO;AACjF,OAAI,QAAS,QAAO;GACpB,IAAI;AACJ,OAAI;AACF,UAAM,MAAM,GAAG,EAAE;WACX;AACN,WAAO,MAAM,SAAS,qBAAqB;;AAE7C,OAAI,OAAO,QAAQ,YAAY,KAAK,IAAI,IAAI,CAC1C,QAAO,MAAM,SAAS,qCAAqC,cAAc;AAC3E,QAAK,IAAI,IAAI;;AAEf;;AAEF,KAAI,CAACE,cAAAA,SAAU,MAAM,CAAE,QAAO,MAAM,SAAS,2BAA2B,eAAe;AACvF,KAAIH,cAAAA,SAAS,MAAM,IAAIA,cAAAA,SAAS,MAAM,MAAM,CAC1C,MAAK,MAAM,MAAM,OAAO,KAAK,MAAM,MAAM,EAAE;EACzC,MAAM,QAAQ,MAAM,MAAM;AAC1B,MAAIA,cAAAA,SAAS,MAAM,IAAI,OAAO,UAAU,eAAe,KAAK,OAAO,QAAQ,EAAE;GAC3E,MAAM,UAAU,WAAW,KAAK,OAAO,MAAM,OAAO,CAAC,GAAG,SAAS,GAAG,EAAE,OAAO;AAC7E,OAAI,QAAS,QAAO;;;;;AAQ5B,MAAa,aAAa,MAAoB,UAA4B;AACxE,KAAI,UAAU,KAAA,KAAa,KAAK,SAAS,QAAS,QAAO;AACzD,eAAA,QAAQ,KAAK,WAAW;AACxB,MAAK,KAAK,SAAS,YAAY,KAAK,SAAS,cAAcA,cAAAA,SAAS,MAAM,EAAE;EAC1E,MAAM,SAAS,OAAO,OAAO,OAAO,eAAe,MAAM,CAAC;EAC1D,MAAM,EAAE,YAAYE,cAAAA,cAAc,MAAM,MAAM;AAC9C,OAAK,MAAM,OAAO,OAAO,oBAAoB,MAAM,CACjD,QAAO,eAAe,QAAQ,KAAK;GACjC,OACE,KAAK,SAAS,aAAa,QAAQ,KAAK,MACpC,MAAM,OACN,UAAU,QAAQ,IAAI,IAAI,CAAE,MAAM,MAAM,KAAK;GACnD,UAAU;GACV,YAAY,OAAO,yBAAyB,OAAO,IAAI,EAAE;GACzD,cAAc;GACf,CAAC;AAEJ,SAAO;;AAET,MAAK,KAAK,SAAS,WAAW,KAAK,SAAS,UAAUF,cAAAA,SAAS,MAAM,EAAE;EACrE,MAAM,UAAW,KAAK,SAAS,UAAU,MAAM,OAAO;EACtD,MAAM,SAAS,OAAO,YACpB,OAAO,KAAK,QAAQ,CAAC,KAAI,OAAM,CAAC,IAAI,UAAU,KAAK,OAAO,QAAQ,IAAI,CAAC,CAAC,CACzE;AACD,SAAO,KAAK,SAAS,UAAU;GAAE,KAAK,CAAC,GAAI,MAAM,IAAiB;GAAE,MAAM;GAAQ,GAAG;;AAEvF,KAAI,KAAK,SAAS,OAAQ,QAAO,CAAC,GAAI,MAAoB;AAC1D,KAAI,KAAK,SAAS,UAAUA,cAAAA,SAAS,MAAM,EAAE;EAC3C,MAAM,UAAU,MAAM;AACtB,SAAO;GACL,GAAG;GACH,OAAO,OAAO,YACZ,OAAO,QAAQ,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI;IAAE,GAAG;IAAG,UAAU,CAAC,GAAG,EAAE,SAAS;IAAE,CAAC,CAAC,CACpF;GACF;;AAEH,QAAO;;AAGT,MAAa,cAAc,MAAoB,MAAe,UAA4B;AACxF,KAAI,OAAO,GAAG,MAAM,MAAM,CAAE,QAAO;AACnC,KAAI,KAAK,SAAS,WAAW,SAAS,KAAA,KAAa,UAAU,KAAA,EAAW,QAAO;AAC/E,MAAK,KAAK,SAAS,YAAY,KAAK,SAAS,cAAcA,cAAAA,SAAS,KAAK,IAAIA,cAAAA,SAAS,MAAM,EAAE;AAC5F,MAAI,KAAK,SAAS,aAAa,KAAK,KAAK,SAAS,MAAM,KAAK,KAAM,QAAO;AAC1E,OAAK,MAAM,CAAC,KAAK,WAAWE,cAAAA,cAAc,MAAM,KAAK,CAAE,SAAS;AAC9D,OAAI,OAAO,OAAO,MAAM,IAAI,KAAK,OAAO,OAAO,OAAO,IAAI,CAAE,QAAO;AACnE,OAAI,CAAC,WAAW,OAAO,MAAM,KAAK,MAAM,MAAM,KAAK,CAAE,QAAO;;AAE9D,SAAO;;AAET,KAAI,KAAK,SAAS,UAAU,MAAM,QAAQ,KAAK,IAAI,MAAM,QAAQ,MAAM,CACrE,QACE,KAAK,WAAW,MAAM,UAAU,KAAK,OAAO,GAAG,MAAM,WAAW,KAAK,OAAO,GAAG,MAAM,GAAG,CAAC;AAE7F,KAAI,KAAK,SAAS,WAAWF,cAAAA,SAAS,KAAK,IAAIA,cAAAA,SAAS,MAAM,CAC5D,QAAA,cAAA,MACe,KAAK,KAAiB,MAAM,IAAgB,IACzD,WAAW;EAAE,MAAM;EAAO,OAAO,KAAK;EAAO,EAAE,KAAK,MAAM,MAAM,KAAK;AAEzE,KAAI,KAAK,SAAS,UAAUA,cAAAA,SAAS,KAAK,IAAIA,cAAAA,SAAS,MAAM,EAAE;AAC7D,MAAI,KAAK,WAAW,MAAM,OAAQ,QAAO;EACzC,MAAM,IAAI,KAAK,OAIb,IAAI,MAAM;AACZ,SACE,OAAO,KAAK,EAAE,CAAC,WAAW,OAAO,KAAK,EAAE,CAAC,UACzC,OAAO,KAAK,EAAE,CAAC,OACb,OACE,OAAO,OAAO,GAAG,GAAG,IACpB,EAAE,IAAI,aAAa,EAAE,IAAI,YAAA,cAAA,MACZ,EAAE,IAAI,UAAU,EAAE,IAAI,SAAS,IAC5C,OAAO,OAAO,EAAE,KAAK,QAAQ,KAAK,OAAO,OAAO,EAAE,KAAK,QAAQ,IAC/D,WAAW,KAAK,OAAO,EAAE,IAAI,OAAO,EAAE,IAAI,MAAM,CACnD;;AAGL,KAAI,KAAK,SAAS,SAASA,cAAAA,SAAS,KAAK,IAAIA,cAAAA,SAAS,MAAM,EAAE;EAC5D,MAAM,OAAO,OAAO,KAAK,KAAK;AAC9B,SACE,KAAK,WAAW,OAAO,KAAK,MAAM,CAAC,UACnC,KAAK,OAAM,QAAO,OAAO,OAAO,OAAO,IAAI,IAAI,WAAW,KAAK,OAAO,KAAK,MAAM,MAAM,KAAK,CAAC;;AAGjG,QAAO;;AAGT,MAAa,SAAiC,MAAS,UAA6B;CAClF,MAAM,YAA0B;CAChC,MAAM,UAAU,WAAW,WAAW,OAAO,EAAE,EAAE,KAAK;AACtD,KAAI,QAAS,OAAM,IAAI,WAAW,QAAQ;AAC1C,QAAO,UAAU,WAAW,MAAM;;;;AC5DpC,MAAMI,UAAgC,UAAgB,OAAO,OAAO,MAAM;AAC1E,MAAa,SAAY,cACvBA,OAAK;CAAE,MAAM;CAAS,GAAI,YAAY,EAAE,WAAW,GAAG,EAAE;CAAG,CAAC;AAO9D,MAAa,YAAoC,UAA8B;AAC7E,KAAI,CAAC;EAAC;EAAS;EAAW;EAAO;EAAQ;EAAO,CAAC,SAAS,MAAM,KAAK,CACnE,OAAM,IAAI,UAAU,2EAA2E;AACjG,QAAOA,OAAK;EAAE,GAAG;EAAO,UAAU;EAAM,CAAoB;;AAE9D,MAAa,UAAiC,UAC5CA,OAAK;CAAE,MAAM;CAAU,OAAO,OAAO,OAAO,EAAE,GAAG,OAAO,CAAC;CAAE,CAAC;AAC9D,MAAa,WACX,KACA,aACsBA,OAAK;CAAE,MAAM;CAAW;CAAK,UAAU,OAAO,OAAO,EAAE,GAAG,UAAU,CAAC;CAAE,CAAC;AAChG,MAAa,SACX,OACA,YACoBA,OAAK;CAAE,MAAM;CAAS;CAAO,GAAG;CAAS,CAAC;AAChE,MAAa,OACX,OACA,YACkBA,OAAK;CAAE,MAAM;CAAO;CAAO,GAAG;CAAS,CAAC;AAC5D,MAAa,QACX,OACA,WACoBA,OAAK;CAAE,MAAM;CAAQ,OAAO,OAAO;CAAO;CAAO,CAAC;AACxE,MAAa,QAAgB,UAC3BA,OAAK;CAAE,MAAM;CAAQ;CAAO,CAAC;AAE/B,MAAM,wBAAQ,IAAI,SAOf;AAEH,MAAM,aACJ,OACA,SACA,UACW;CACX,MAAM,QAAQ,IAAI,MAChB,EAAE,EACF,EACE,MAAM,SAAS,aAA8B;AAC3C,MAAI,OAAO,aAAa,SAAU,QAAO,KAAA;AAEzC,MADmB,MAAM,OAAM,SAAQ,KAAK,SAAS,WAAW,KAAK,SAAS,MAChE,IAAI,aAAa,OAC7B,SAAQ,OAAe;AACrB,OAAI,OAAO,OAAO,SAAU,OAAM,IAAI,UAAU,mCAAmC;AACnF,QAAK,MAAM,QAAQ,MACjB,KAAI,KAAK,SAAS,WAAW,KAAK,SAAS,OAAO;IAChD,MAAM,UAAU,SAAS,KAAK,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC;AACxD,QAAI,QAAS,OAAM,IAAI,UAAU,QAAQ,QAAQ;;AAErD,UAAO,UACL,MAAM,KAAI,SAAS,KAAqC,MAAM,EAC9D,CAAC,GAAG,SAAS,GAAG,EAChB,MACD;;EAEL,MAAM,WAAW,MAAM,SAAQ,SAAQ;AACrC,OAAI,KAAK,SAAS,SAChB,QAAO,OAAO,OAAO,KAAK,OAAO,SAAS,GAAG,CAAC,KAAK,MAAM,UAAU,GAAG,EAAE;AAC1E,OAAI,KAAK,SAAS,UAAW,QAAO,EAAE;AACtC,OAAI,aAAa,KAAK,IAAK,QAAO,CAAC,OAAe,CAAC;AACnD,UAAO,OAAO,OAAO,KAAK,SAAS,CAAC,SAAQ,WAC1C,OAAO,OAAO,OAAO,OAAO,SAAS,GAAG,CAAC,OAAO,MAAM,UAAU,GAAG,EAAE,CACtE;IACD;AACF,MAAI,CAAC,SAAS,OAAQ,OAAM,IAAI,UAAU,gCAAgC,WAAW;AACrF,SAAO,UAAU,UAAU,CAAC,GAAG,SAAS,SAAS,EAAE,MAAM;IAE5D,CACF;AACD,OAAM,IAAI,OAAO;EAAE;EAAO;EAAS;EAAO,CAAC;AAC3C,QAAO;;AAGT,MAAa,eACX,OACA,MACA,SACuC;CACvC,MAAM,QAAQ,EAAE;CAChB,MAAM,QAAQ,KAAK,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAkB;CAClE,MAAM,WAAW,OAAO,UAAU,YAAY,UAAU,OAAO,MAAM,IAAI,MAAM,GAAG,KAAA;AAClF,KAAI,CAAC,YAAY,SAAS,UAAU,MAClC,OAAM,IAAI,UAAU,iDAAiD;AACvE,KACE,SAAS,gBACT,CAAC,SAAS,MAAM,OAAM,SAAQ,KAAK,SAAS,WAAW,KAAK,SAAS,MAAM,CAE3E,OAAM,IAAI,UAAU,oDAAoD;AAM1E,QALe,OAAO,OAAO;EAC3B;EACA,QAAQ;EACR,SAAS,OAAO,OAAO,CAAC,GAAG,SAAS,QAAQ,CAAC;EAC9C,CACY;;;;ACxUf,SAAgB,IACd,SACA,WACA,IACA,OACM;AACN,KAAI,UAAU,KAAK,SAAS,MAC1B,QAAOC,cAAAA,KAAK,UAAU,IAAI,sBAAsB,kBAAkB;AACpE,SAAQ,YAAY,WAAW,IAAI,OAAO,MAAM;;AAGlD,SAAgBC,SAAO,SAA0B,WAA8B,IAAkB;AAC/F,KAAI,UAAU,KAAK,SAAS,MAC1B,QAAOD,cAAAA,KAAK,UAAU,IAAI,sBAAsB,kBAAkB;AACpE,SAAQ,YAAY,WAAW,IAAI,KAAA,GAAW,SAAS;;;;ACbzD,SAAgB,OACd,SACA,WACA,SACA,UACM;CACN,MAAM,EAAE,IAAI,MAAM,UAAU;AAC5B,KAAI,KAAK,SAAS,QAAS,QAAOE,cAAAA,KAAK,IAAI,sBAAsB,oBAAoB;CACrF,MAAM,QAAQ;AACd,KAAI,CAAA,cAAA,MAAc,MAAM,KAAK,SAAS,CACpC,QAAOA,cAAAA,KAAK,IAAI,kBAAkB,wBAAwB;CAC5D,MAAM,sBAAM,IAAI,KAAa;AAC7B,MAAK,MAAM,SAAS,SAAS;AAC3B,MAAI,OAAO,OAAO,MAAM,MAAM,MAAM,GAAG,IAAI,IAAI,IAAI,MAAM,GAAG,CAC1D,QAAOA,cAAAA,KAAK,IAAI,oBAAoB,4BAA4B;AAClE,MAAI,IAAI,MAAM,GAAG;;AAEnB,KAAI,CAAC,QAAQ,OAAQ;CACrB,MAAMC,UAAAA,cAAAA,MAAqB,MAAM,KAAK,SAAS;AAC/C,MAAK,MAAM,SAAS,QAAS,SAAQ,YAAY,WAAW,MAAM,IAAI,MAAM,OAAO,MAAM;CACzF,MAAM,SAAS,MAAM,IAAI;AACzB,OAAM,IAAI,UAAU,QAAQ;AAC5B,OAAM,IAAI,WAAWA,UAAQ,QAAQ,QAAQA,SAAO,OAAO;AAC3D,MAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,IAAK,OAAM,IAAIA,UAAQ,KAAK,QAAQ,GAAG;;AAE7E,SAAgBC,SACd,SACA,WACA,KACM;CACN,MAAM,EAAE,IAAI,MAAM,UAAU;AAC5B,KAAI,KAAK,SAAS,QAAS,QAAOF,cAAAA,KAAK,IAAI,sBAAsB,oBAAoB;CACrF,MAAM,QAAQ;AACd,MAAK,MAAM,MAAM,IACf,KAAI,CAAC,OAAO,OAAO,MAAM,MAAM,GAAG,CAChC,QAAOA,cAAAA,KAAK,IAAI,kBAAkB,4BAA4B;AAClE,KAAI,CAAC,IAAI,OAAQ;CACjB,MAAM,UAAU,IAAI,IAAI,IAAI;AAC5B,MAAK,MAAM,MAAM,QAAS,SAAQ,YAAY,WAAW,IAAI,KAAA,GAAW,SAAS;AACjF,OAAM,MAAM,MAAM,IAAI,QAAO,OAAM,CAAC,QAAQ,IAAI,GAAG,CAAC;;AAGtD,SAAgBG,UACd,SACA,WACA,IACA,OACM;CACN,MAAM,EAAE,IAAI,MAAM,OAAO,eAAe;AACxC,KAAI,KAAK,SAAS,QAAS,QAAOH,cAAAA,KAAK,IAAI,sBAAsB,oBAAoB;CACrF,MAAM,QAAQ;AACd,KAAI,CAAC,OAAO,OAAO,MAAM,MAAM,GAAG,CAChC,QAAOA,cAAAA,KAAK,GAAG,OAAO,GAAG,EAAE,kBAAkB,4BAA4B;AAC3E,SAAQ,YAAY,WAAW,IAAI,OAAO,MAAM;;;;ACrDlD,SAAgBI,SACd,SACA,WACA,OACA,UACM;CACN,MAAM,EAAE,IAAI,MAAM,OAAO,YAAY;AACrC,KAAI,KAAK,SAAS,OAAQ,QAAOC,cAAAA,KAAK,IAAI,oBAAoB,mBAAmB;AACjF,SAAQ,SAAS,KAAK,OAAO,OAAO,GAAG;CACvC,MAAM,KAAK,KAAK,MAAM,MAAM;AAC5B,KAAI,OAAO,OAAO,SAAU,QAAOA,cAAAA,KAAK,IAAI,oBAAoB,6BAA6B;CAC7F,MAAM,QAAQ,SACZC,SAAAA,cAAAA,KAAmB,OAAO,KAAK,MAAM;AACvC,KAAIA,OAAK,MAAM,GAAG,IAAI,EAAG,QAAOD,cAAAA,KAAK,IAAI,uBAAuB,2BAA2B;AAC3F,KAAI,CAAA,cAAA,MAAcC,QAAM,SAAS,CAAE,QAAOD,cAAAA,KAAK,IAAI,kBAAkB,uBAAuB;AAC5F,SAAQ,SAAS,MAAM,UAAU;AACjC,SAAQ,SAAS,OAAO,WAAW,IAAI,QAAQ,WAAW,WAAW,GAAG,EAAE,GAAG;AAC7E,eAAA,OAAc,OAAA,cAAA,MAAoBC,QAAM,SAAS,EAAE,MAAM;AACzD,SAAQ,YAAY;;AAEtB,SAAgBC,UACd,SACA,WACA,IACA,OACM;CACN,MAAM,EAAE,IAAI,MAAM,OAAO,UAAU;AACnC,KAAI,KAAK,SAAS,OAAQ,QAAOF,cAAAA,KAAK,IAAI,oBAAoB,mBAAmB;CACjF,MAAM,QAAA,cAAA,YAA2B,OAAoB,KAAK,MAAM,CAAC,MAAM,GAAG;AAC1E,KAAI,QAAQ,EAAG,QAAOA,cAAAA,KAAK,IAAI,qBAAqB,2BAA2B;AAC/E,SAAQ,YAAY,WAAW,IAAI,OAAO,OAAO,MAAM;;AAEzD,SAAgBG,SAAO,SAA0B,WAA8B,IAAkB;CAC/F,MAAM,EAAE,IAAI,MAAM,UAAU;AAC5B,KAAI,KAAK,SAAS,OAAQ,QAAOH,cAAAA,KAAK,IAAI,qBAAqB,2BAA2B;CAC1F,MAAM,QAAA,cAAA,KAAoB,OAAoB,KAAK,MAAM,CAAC,MAAM,GAAG;AACnE,KAAI,QAAQ,EAAG,QAAOA,cAAAA,KAAK,IAAI,qBAAqB,2BAA2B;AAC/E,SAAQ,YAAY,WAAW,IAAI,KAAA,GAAW,UAAU,MAAM;;;;ACrChE,MAAM,QAAQ,MAAmB,OAC/B,OAAO,OAAO,KAAK,OAAO,GAAG,GAAG,KAAK,MAAM,MAAM,KAAA;AACnD,MAAM,iBAAiB,OAA2B,QAAgB,OAAgC;AAChG,KAAI,UAAU,KAAA,MAAc,CAAC,OAAO,UAAU,MAAM,IAAI,QAAQ,GAC9D,QAAOI,cAAAA,KAAK,IAAI,sBAAsB,kCAAkC;AAC1E,QAAO,KAAK,IAAI,SAAS,QAAQ,OAAO;;AAE1C,MAAa,UACX,SACA,WACA,IACA,OACA,aACS;CACT,MAAM,EAAE,IAAI,MAAM,QAAQ,OAAO,SAAS;AAC1C,KAAI,OAAO,OAAO,SAAU,QAAOA,cAAAA,KAAK,IAAI,eAAe,6BAA6B;AACxF,KAAIC,cAAAA,WAAS,MAAM,GAAG,CAAE,QAAOD,cAAAA,KAAK,IAAI,uBAAuB,4BAA4B;CAC3F,MAAM,WAAW,UAAU;CAC3B,MAAM,SAAS,aAAa,KAAA,IAAY,KAAA,IAAY,KAAK,MAAM,SAAS;AACxE,KACG,KAAK,WAAW,KAAA,KAAa,CAAC,UAC9B,KAAK,WAAW,KAAA,KAAa,aAAa,KAAA,EAE3C,QAAOA,cAAAA,KAAK,IAAI,uBAAuB,+CAA+C;CACxF,MAAM,QAAQ,cAAc,UAAU,OAAO,QAAQ,SAAS,UAAU,GAAG,GAAG;AAC9E,SAAQ,SAAS,OAAO,OAAO,OAAO,GAAG,OAAO,GAAG,CAAC;AACpD,SAAQ,SAAS,KAAK,WAAW,GAAG;AACpC,KAAI,aAAa,KAAA,EAAW,SAAQ,SAAS,KAAK,WAAW,SAAS;AACtE,QAAO,eAAe,KAAK,OAAO,IAAI;EACpC,OAAO;GAAE,GAAI,aAAa,KAAA,IAAY,EAAE,GAAG,EAAE,UAAU;GAAG,UAAU,EAAE;GAAE;GAAO;EAC/E,UAAU;EACV,cAAc;EACd,YAAY;EACb,CAAC;AACF,KAAI,OAAQ,QAAO,SAAS,OAAO,OAAO,GAAG,GAAG;KAC3C,MAAK,SAAS;AACnB,SAAQ,YAAY;;AAEtB,MAAaE,aACX,SACA,WACA,IACA,UACS;CACT,MAAM,EAAE,IAAI,MAAM,QAAQ,OAAO,SAAS;CAC1C,MAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,KAAI,CAAC,MAAO,QAAOF,cAAAA,KAAK,IAAI,qBAAqB,4BAA4B;AAC7E,KAAI,OAAO,GAAG,MAAM,OAAO,MAAM,IAAI,OAAO,OAAO,OAAO,QAAQ,CAAE;AACpE,SAAQ,SAAS,OAAO,OAAO,OAAO,GAAG,OAAO,GAAG,CAAC;AACpD,SAAQ,SAAS,KAAK,WAAW,GAAG;AACpC,OAAM,QAAQ;;AAEhB,MAAa,UACX,SACA,WACA,OACS;CACT,MAAM,EAAE,IAAI,OAAO,SAAS;CAC5B,MAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,KAAI,CAAC,MAAO,QAAOA,cAAAA,KAAK,IAAI,qBAAqB,4BAA4B;CAC7E,MAAM,MAAgB,EAAE,EACtB,QAAQ,CAAC,GAAG;AACd,QAAO,MAAM,QAAQ;EACnB,MAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,KAAK,QAAQ;AACjB,OAAK,MAAM,SAAS,KAAK,MAAM,SAAS,SAAU,OAAM,KAAK,MAAM;;AAErE,MAAK,MAAM,OAAO,IAAK,SAAQ,SAAS,KAAK,WAAW,IAAI;AAC5D,KAAI,MAAM,aAAa,KAAA,EAAW,SAAQ,SAAS,KAAK,WAAW,MAAM,SAAS;AAClF,KAAI,MAAM,aAAa,KAAA,EAAW,QAAO,KAAK;MACzC;EACH,MAAM,WAAW,KAAK,MAAM,MAAM,UAAU;AAC5C,WAAS,OAAO,SAAS,QAAQ,GAAG,EAAE,EAAE;;AAE1C,MAAK,MAAM,OAAO,IAAK,QAAO,KAAK,MAAM;AACzC,SAAQ,YAAY;;AAEtB,MAAaG,UACX,SACA,WACA,IACA,aACS;CACT,MAAM,EAAE,IAAI,OAAO,SAAS;CAC5B,MAAM,QAAQ,KAAK,MAAM,GAAG,EAC1B,WAAW,UAAU;AACvB,KAAI,CAAC,MAAO,QAAOH,cAAAA,KAAK,IAAI,qBAAqB,4BAA4B;AAC7E,KAAI,MAAM,aAAa,KAAA,KAAa,aAAa,KAAA,KAAa,CAACC,cAAAA,WAAS,MAAM,SAAS,CACrF,QAAOD,cAAAA,KACL,IACA,uBACA,0DACD;AACH,MACE,IAAI,WAA+B,UACnC,aAAa,KAAA,GACb,WAAW,KAAK,MAAM,UAAU,SAEhC,KAAI,aAAa,GAAI,QAAOA,cAAAA,KAAK,IAAI,cAAc,2CAA2C;CAChG,MAAM,MAAM,KAAK,MAAM,MAAM,WAC3B,OAAO,KAAK,MAAM;CACpB,MAAM,QAAQ,cAAc,UAAU,OAAO,KAAK,SAAS,UAAU,QAAQ,OAAO,IAAI,IAAI,GAAG;CAC/F,MAAM,WAAW,IAAI,SAAS,QAAQ,GAAG;AACzC,KAAI,QAAQ,QAAQ,aAAa,MAAO;AACxC,SAAQ,SAAS,KAAK,WAAW,GAAG;AACpC,SAAQ,SAAS,KAAK,WAAW,MAAM,SAAS;AAChD,SAAQ,SAAS,KAAK,WAAW,SAAS;AAC1C,KAAI,SAAS,OAAO,UAAU,EAAE;AAChC,MAAK,SAAS,OAAO,OAAO,GAAG,GAAG;AAClC,OAAM,WAAW;AACjB,SAAQ,YAAY;;;;AC9GtB,SAAgB,KACd,SACA,WACA,IACA,UACM;CACN,MAAM,EAAE,IAAI,MAAM,UAAU;AAC5B,KAAI,KAAK,SAAS,WAAW,KAAK,SAAS,OACzC,QAAOI,cAAAA,KAAK,IAAI,sBAAsB,iCAAiC;CACzE,MAAM,QAAQ,KAAK,SAAS,UAAW,MAA4B,MAAO;CAC1E,MAAMC,SAAO,KAAK,SAAS,UAAW,QAAA,cAAA,KAAiC,OAAO,KAAK,MAAM;CACzF,MAAM,QACJ,KAAK,SAAS,UAAW,MAAmB,QAAQ,GAAG,GAAIA,OAAyB,MAAM,GAAG;AAC/F,KAAI,QAAQ,EAAG,QAAOD,cAAAA,KAAK,IAAI,kBAAkB,8BAA8B;AAC/E,KAAI,CAAA,cAAA,MAAcC,QAAM,SAAS,CAAE,QAAOD,cAAAA,KAAK,IAAI,kBAAkB,wBAAwB;CAC7F,MAAM,OAAA,cAAA,YAA0BC,QAAM,OAAO,SAAS;AACtD,KAAI,SAAS,MAAO;AACpB,SAAQ,SAAS,MAAM,UAAU;AACjC,eAAA,KAAY,OAAO,OAAO,KAAK;AAC/B,SAAQ,YAAY;;;;AC8HtB,MAAM,4BAAY,IAAI,SAA2B;AACjD,MAAM,cAAc,UAAwC,UAAU,IAAI,MAAM;AAChF,MAAM,aAAa,WAAoC;AACrD,KAAI,OAAO,GAAI,QAAO,OAAO;AAC7B,eAAA,QAAQ,OAAO,YAAY;AAC3B,QAAQ,OAAO,KAAK,UAAU,OAAO,OAAQ,CAAC,OAAO,OAAO,IAAI;;AASlE,MAAM,gBAAgB,YAA2B;AAC/C,KAAI,QAAQ,UAAU,CAAC,QAAQ,QAAQ,CAAE,OAAM,IAAI,MAAM,qCAAqC;;AAEhG,MAAM,WACJ,SACA,IACA,OAA+B,SAC/B,OACG;AACH,SAAQ,cAAc,OACpB,SAAS,UAAU;EAAE;EAAM;EAAI,GAAG;EAAE;EAAM;EAAI,GAAI,OAAO,KAAA,IAAY,EAAE,GAAG,EAAE,IAAI;EAAG,CACpF;;AAEH,MAAa,YAAe,UAA0B;CACpD,MAAM,WAAW,SAAS,OAAO,UAAU,WAAW,WAAW,MAAM,GAAG,KAAA;AAC1E,KAAI,CAAC,SAAU,QAAO;CACtB,MAAM,EAAE,YAAY;CACpB,MAAM,KAAK,UAAU,SAAS,OAAO;AACrC,eAAA,QAAQ,OAAO,YAAY;AAC3B,SAAQ,SAAS,GAAG;CACpB,MAAM,WAAW,QAAQ,SAAS,SAAS,OAAO;AAClD,KAAI,CAAC,SAAS,KAAM,OAAM,IAAI,MAAM,gDAAgD;AACpF,QAAO,UAAU,SAAS,MAAM,SAAS,MAAM;;AAUjD,MAAa,WACX,WACA,KACA,UACS;AAET,KAAI,CADa,WAAW,UACf,CAAE,OAAM,IAAI,UAAU,2CAA2C;AAC9E,KAAI,OAAO,QAAQ,SAAU,OAAM,IAAI,UAAU,iCAAiC;AAClF,SAAQ,IAAI,WAAW,KAAK,MAAM;;AAQpC,MAAM,WAAW,SAAwB,WAA2B;AAClE,cAAa,QAAQ;CACrB,MAAM,aAAa,QAAQ,SAAS,cAAc;AAClD,KAAI,OAAO,eAAe,YAAY;AACpC,gBAAA,QAAQ,OAAO,cAAc;AAC7B,MAAI,CAAC,OAAO,UAAU,CAAC,OAAO,GAAI,QAAQ;AACxC,UAAO,OAAO,QAAQ,MAAM;AAC5B,UAAO,QAAQ,QAAQ,MAAM;SACxB;GACL,MAAM,SAAS,OAAO,UAAU,QAAQ,SAAS,OAAO,OAAO;GAC/D,MAAM,WAAW,SACbC,cAAAA,aAAa,OAAO,MAAM,OAAO,OAAO,OAAO,IAAI,GACnDC,cAAAA,eAAe,QAAQ,MAAM,QAAQ,QAAQ,MAAM,UAAU,OAAO,GAAI;AAC5E,UAAO,OACL,UAAU,QAAQC,cAAAA,OAAO,QAAQ,MAAM,QAAQ,UAAU,OAAO,EAAE,QAAQ,MAAM,SAAS;AAC3F,UAAO,QACL,YAAY,OAAO,OAAO,SAAS,QAAQ,SAAS,IAAI,GACnD,SAAS,OAA4C,SAAS,OAC/D,KAAA;;AAER,SAAO,aAAa;;AAEtB,QAAO;;AAGT,MAAa,gBAAgB,SAAwB,UAA2B,EAAE,KAAc;AAC9F,eAAA,QAAQ,OAAO,SAAS;CACxB,MAAM,gBAAiC;AACrC,eAAa,QAAQ;AACrB,MAAI,CAAC,QAAQ,QAAS,OAAM,IAAI,UAAU,2CAA2C;AACrF,SAAO,QAAQ;;CAEjB,MAAM,qBAAqB,QAAgB,YAAgD;AACzF,MAAI,OAAO,WAAW,eAAe,QAAQ,cAAc,YAAY,OAAO,UAC5E,QAAO,OAAO;AAChB,SAAQ,OAAO,YAAY,QAAQ,KAAK,UAAU,OAAO,EAAE,OAAO,MAAM,OAAO,MAAM;;CAEvF,MAAM,WAAW,QAAgB,QAAiC;AAChE,gBAAA,QAAQ,OAAO,YAAY;AAC3B,SAAO,UAAU,OAAO,CAAC,OAAO,IAAI;;CAEtC,MAAM,UAAU,WAA4B;AAC1C,MAAI,OAAO,MAAO,QAAO,OAAO;EAChC,MAAM,QAAQ,IAAI,MAAM,QAAQ,QAAQ;AACxC,gBAAA,QAAQ,OAAO,UAAU;AACzB,YAAU,IAAI,OAAO;GAAE;GAAS;GAAQ,CAAC;AACzC,SAAO,QAAQ;AACf,SAAO;;CAET,MAAM,gBACJ,IACA,QACA,SACY;EACZ;EACA;EACA;EACA,MAAM,KAAA;EACN,OAAO,KAAA;EACP,YAAY;EACZ,UAAU,KAAA;EACV,OAAO,KAAA;EACR;CACD,MAAM,eACJ,QACA,QACA,MACA,UACG;EACH,MAAM,MAAM,OAAO,WAAW,WAAW,SAAS,OAAO;AACzD,MAAI,KAAK,SAAS,WAAW,UAAU,KAAA,GAAW;AAChD,OAAI,QAAQ,aAAc,SAAQ,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAChE,UAAO;;EAET,IAAI,WAAW,OAAO;EACtB,IAAI;AACJ,MAAI,OAAO,WAAW,UAAU;AAC9B,OAAI,UAAU,SAAS,WAAW,SAAS,WAAW,OAAO,KAC3D,YAAW;IACT,MAAM;IACN,QAAQ,OAAO;IACf,OAAO,IAAI,MAAMC,cAAAA,cAAc,OAAO,MAAO,OAAO,MAAM,CAAE,QAAQ,KAAK;IAC1E;AACH,WAAQ,SAAS,MAAM,OAAO,UAAU,aAAa,KAAA,GAAW,QAAQ,IAAI;SACvE;AACL,OAAI,UAAU,SAAS,UAAW,YAAW;IAAE,MAAM;IAAW,sBAAM,IAAI,KAAK;IAAE;GACjF,MAAM,WAAW,SAAS,KAAK,IAAI,IAAI;AACvC,WAAQ,YAAY,aAAa,KAAA,GAAW,QAAQ,IAAI;AACxD,OAAI,CAAC,SAAU,UAAS,KAAK,IAAI,KAAK,MAAM;;AAE9C,SAAO,WAAW;AAClB,MAAI,MAAM,eAAe,OAAO,WAAY,QAAO,MAAM;AACzD,QAAM,OAAO;AACb,QAAM,QAAQ;AACd,QAAM,aAAa,OAAO;AAC1B,SAAO,OAAO,MAAM;;CAEtB,MAAM,mBAAmB,QAAgB,SAAuB;EAC9D,MAAM,UAAU,QAAQ,SAAS,OAAO;AACxC,MAAI,QAAQ,SAAS,QAAQ,QAAQ,UAAU,KAAA,EAC7C,OAAM,IAAI,UAAU,6DAA6D;AACnF,SAAO,QAAQ;;CAEjB,MAAM,sBAAsB,QAAgB,SAA0C;EACpF,MAAM,UAAU,SAAS;AACzB,kBAAgB,QAAQ,KAAK;AAC7B,SAAO,kBAAkB,QAAQ,QAAQ;;CAE3C,MAAM,gBAAgB,QAAgB,SAA8C;EAClF,MAAM,UAAU,SAAS;AACzB,kBAAgB,QAAQ,KAAK;AAC7B,MAAI,OAAO,WAAW,eAAe,QAAQ,cAAc,EAAE,YAAY,OAAO,WAC9E,QAAO,OAAO;AAChB,SAAQ,OAAO,YAAY,QAAQ,SAAS,UAAU,OAAO,EAAE,OAAO,MAAM,OAAO,MAAM;;CAE3F,MAAM,qBAAqB,QAAgB,MAAoB,UAAmB;EAChF,MAAM,UAAU,SAAS;AACzB,kBAAgB,QAAQ,KAAK;AAC7B,UAAQ,QAAQ,UAAU,OAAO,EAAE,MAAM;;CAE3C,MAAM,aACJ,QACA,UACA,SACY;AACZ,MAAI,aAAa,MACf,cAAa;GACX,MAAM,UAAU,gBAAgB,QAAQ,KAAK;AAC7C,OAAI,QAAQ,aAAc,SAAQ,SAAS,UAAU,OAAO,EAAE,aAAa;AAC3E,UAAO,OAAO,KAAK,QAAQ;;AAE/B,MAAI,aAAa,MACf,SAAQ,OAAe;GACrB,MAAM,UAAU,gBAAgB,QAAQ,KAAK;AAC7C,OAAI,QAAQ,aAAc,SAAQ,SAAS,UAAU,OAAO,EAAE,cAAc,GAAG;AAC/E,UAAO,OAAO,OAAO,SAAS,GAAG;;AAErC,MAAI,aAAa,MACf,SAAQ,OAAe;GACrB,MAAM,UAAU,gBAAgB,QAAQ,KAAK;AAC7C,OAAI,QAAQ,aAAc,SAAQ,SAAS,UAAU,OAAO,EAAE,cAAc,GAAG;AAC/E,OAAI,CAAC,OAAO,OAAO,SAAS,GAAG,CAAE,QAAO,KAAA;AACxC,OAAI,KAAK,MAAM,SAAS,SAAS;AAC/B,QAAI,QAAQ,aAAc,SAAQ,SAAS,QAAQ,QAAQ,GAAG,CAAC;AAC/D,WAAO,QAAQ;;AAEjB,UAAO,YAAY,QAAQ,IAAI,KAAK,OAAO,QAAQ,IAAI;;AAE3D,MAAI,aAAa,MACf,SAAQ,IAAY,UAAmB;GACrC,MAAM,WAAW,mBAAmB,QAAQ,KAAK;AACjD,OAAkB,QAAQ,SAAU,UAAU,IAAI,MAAM;;AAE5D,MAAI,aAAa,SACf,SAAQ,OAAe;GACrB,MAAM,WAAW,mBAAmB,QAAQ,KAAK;AACjD,YAAqB,QAAQ,SAAU,UAAU,GAAG;;AAExD,MAAI,aAAa,UAAW,SAAQ,UAAmB,kBAAkB,QAAQ,MAAM,MAAM;;CAG/F,MAAM,iBACJ,QACA,UACA,SACY;EACZ,MAAM,KAAK,UAAU,OAAO;AAC5B,MAAI,aAAa,MACf,cAAa;GACX,MAAM,UAAU,gBAAgB,QAAQ,KAAK;AAC7C,WAAQ,SAAS,IAAI,aAAa;AAClC,UAAO,KAAK,SAAS,UACjB,CAAC,GAAI,QAA8B,IAAI,GACtC,QAAsB,IAAI,KAAK,MAAM;;AAE9C,MAAI,aAAa,MACf,SAAQ,OAAe;GACrB,MAAM,UAAU,gBAAgB,QAAQ,KAAK;AAC7C,WAAQ,SAAS,IAAI,cAAc,GAAG;AACtC,UAAO,KAAK,SAAS,UACjB,OAAO,OAAQ,QAA6B,MAAM,GAAG,GAAA,cAAA,YAClC,SAAsB,KAAK,MAAM,CAAC,MAAM,GAAG,IAAI;;AAE1E,MAAI,aAAa,MACf,SAAQ,OAAe;GACrB,MAAM,UAAU,gBAAgB,QAAQ,KAAK;AAC7C,WAAQ,SAAS,IAAI,cAAc,GAAG;GACtC,MAAM,WAAWH,cAAAA,aAAa,MAAM,SAAS,GAAG;AAChD,OAAI,CAAC,YAAY,CAAC,OAAO,OAAO,SAAS,QAAQ,SAAS,IAAI,CAAE,QAAO,KAAA;AACvE,UAAO,YACL,QACA,IACA,SAAS,MACR,SAAS,OAA4C,SAAS,KAChE;;AAEL,MAAI,aAAa,OACf,SAAQ,IAAY,aAA8B;GAChD,MAAM,WAAW,mBAAmB,QAAQ,KAAK;AACjD,QAAqB,QAAQ,SAAU,UAAU,IAAI,SAAS;;;CAIpE,MAAM,eACJ,QACA,UACA,SACY;AACZ,MAAI,aAAa,SACf,SACE,OACA,iBACA,aACG;GACH,MAAM,WAAW,mBAAmB,QAAQ,KAAK;AACjD,UACE,QAAQ,SACR,UACA,MAAM,QAAQ,MAAM,GAAG,QAAQ,CAAC;IAAE,IAAI;IAAiB,OAAO;IAAiB,CAAC,EAChF,MAAM,QAAQ,MAAM,GAAI,kBAAiD,SAC1E;;AAEL,MAAI,aAAa,SACf,SAAQ,QAAoC;GAC1C,MAAM,WAAW,mBAAmB,QAAQ,KAAK;AACjD,YAAuB,QAAQ,SAAU,UAAU,OAAO,QAAQ,WAAW,CAAC,IAAI,GAAG,IAAI;;AAE7F,MAAI,aAAa,UACf,SAAQ,GAAG,SAA8B;GACvC,MAAM,CAAC,WAAW,SAAS;AAC3B,OAAI,KAAK,WAAW,EAAG,QAAO,kBAAkB,QAAQ,MAAM,UAAU;GACxE,MAAM,WAAW,mBAAmB,QAAQ,KAAK;AACjD,aAAwB,QAAQ,SAAU,UAAU,WAAqB,MAAM;;AAEnF,SAAO,cAAc,QAAQ,UAAU,KAAK;;CAE9C,MAAM,cACJ,QACA,UACA,SACY;AACZ,MAAI,aAAa,SACf,SAAQ,OAAgB,aAA8B;GACpD,MAAM,WAAW,mBAAmB,QAAQ,KAAK;AACjD,YAAsB,QAAQ,SAAU,UAAU,OAAO,SAAS;;AAEtE,MAAI,aAAa,SACf,SAAQ,OAAe;GACrB,MAAM,WAAW,mBAAmB,QAAQ,KAAK;AACjD,YAAsB,QAAQ,SAAU,UAAU,GAAG;;AAEzD,MAAI,aAAa,UACf,SAAQ,GAAG,SAA8B;GACvC,MAAM,CAAC,WAAW,SAAS;AAC3B,OAAI,KAAK,WAAW,EAAG,QAAO,kBAAkB,QAAQ,MAAM,UAAU;GACxE,MAAM,WAAW,mBAAmB,QAAQ,KAAK;AACjD,aAAuB,QAAQ,SAAU,UAAU,WAAqB,MAAM;;AAElF,SAAO,cAAc,QAAQ,UAAU,KAAK;;CAE9C,MAAM,cACJ,QACA,UACA,SACY;EACZ,MAAM,KAAK,UAAU,OAAO;AAC5B,MAAI,aAAa,SACf,SAAQ,IAAY,OAAgB,aAAiC;GACnE,MAAM,WAAW,aAAa,QAAQ,KAAK;AAC3C,UAAsB,QAAQ,SAAU,UAAU,IAAI,OAAO,SAAS;;AAE1E,MAAI,aAAa,SACf,SAAQ,OAAe;GACrB,MAAM,WAAW,aAAa,QAAQ,KAAK;AAC3C,UAAsB,QAAQ,SAAU,UAAU,GAAG;;AAEzD,MAAI,aAAa,OACf,SAAQ,IAAY,aAAiC;GACnD,MAAM,WAAW,aAAa,QAAQ,KAAK;AAC3C,UAAoB,QAAQ,SAAU,UAAU,IAAI,SAAS;;AAEjE,MAAI,aAAa,UACf,SAAQ,GAAG,SAA8B;GACvC,MAAM,CAAC,WAAW,SAAS;AAC3B,OAAI,KAAK,WAAW,EAAG,QAAO,kBAAkB,QAAQ,MAAM,UAAU;GACxE,MAAM,WAAW,aAAa,QAAQ,KAAK;AAC3C,aAAuB,QAAQ,SAAU,UAAU,WAAqB,MAAM;;EAElF,MAAM,gBAAgB;AACpB,WAAQ,SAAS,GAAG;AACpB,UAAO,gBAAgB,QAAQ,KAAK;;AAEtC,MAAI,aAAa,SAAU,cAAa,SAAS,CAAC;AAClD,MAAI,aAAa,MACf,SAAQ,OAAe;GACrB,MAAM,QAAQ,SAAS;AACvB,UAAA,cAAA,WAAqB,OAAO,GAAG,GAAG,MAAM,MAAM,IAAI,QAAQ,KAAA;;AAE9D,MAAI,aAAa,MAAO,SAAQ,OAAA,cAAA,WAA6B,SAAS,EAAE,GAAG;AAC3E,MAAI,aAAa,SAAU,SAAQ,OAAA,cAAA,OAA2B,SAAS,EAAE,GAAG;AAC5E,MAAI,aAAa,WACf,SAAQ,OAAe;GACrB,MAAMI,aAAAA,cAAAA,SAAyB,SAAS,EAAE,GAAG;AAC7C,UAAOA,aAAW,CAAC,GAAGA,WAAS,GAAG,KAAA;;;CAIxC,MAAM,UAAgC;EACpC,MAAM,QAAQ,aAAa;GACzB,MAAM,EAAE,MAAM,UAAU,QAAQ,SAAS,OAAO;AAChD,OAAI,CAAC,QAAQ,UAAU,KAAA,EAAW,QAAO,KAAA;AACzC,OAAI,OAAO,aAAa,SAAU,QAAO,KAAA;AACzC,OAAI,KAAK,SAAS,MAAO,QAAO,UAAU,QAAQ,UAAU,KAAK;AACjE,OAAI,KAAK,SAAS,QAAS,QAAO,YAAY,QAAQ,UAAU,KAAK;AACrE,OAAI,KAAK,SAAS,OAAQ,QAAO,WAAW,QAAQ,UAAU,KAAK;AACnE,OAAI,KAAK,SAAS,OAAQ,QAAO,WAAW,QAAQ,UAAU,KAAK;AACnE,OAAI,KAAK,SAAS,aAAa,aAAa,KAAK,KAAK;AACpD,YAAQ,SAAS,QAAQ,QAAQ,SAAS,CAAC;AAC3C,WAAQ,MAAkC;;GAE5C,MAAM,SAASD,cAAAA,cAAc,MAAM,MAAM,EAAE,QAAQ,IAAI,SAAS;AAChE,OAAI,CAAC,OAAQ,QAAO,KAAA;AACpB,OAAI,OAAO,OAAO;AAChB,QAAI,QAAQ,aAAc,SAAQ,SAAS,QAAQ,QAAQ,SAAS,CAAC;AACrE,WAAQ,MAAkC;;AAE5C,UAAO,YACL,QACA,KAAK,SAAS,WAAW,SAAS,UAClC,OAAO,MACN,MAAkC,UACpC;;EAEH,MAAM,QAAQ,UAAU,UAAU;GAChC,MAAM,UAAU,SAAS,EACvB,EAAE,SAAS,QAAQ,SAAS,OAAO;AACrC,OACE,OAAO,aAAa,YACpB,CAAC,QACA,KAAK,SAAS,YAAY,KAAK,SAAS,UAEzC,OAAM,IAAI,UAAU,iCAAiC;AACvD,OAAI,KAAK,SAAS,aAAa,KAAK,QAAQ,SAC1C,OAAM,IAAI,UAAU,uCAAuC;AAC7D,WAAQ,aAAa,kBAAkB,QAAQ,QAAQ,EAAE,UAAU,MAAM;AACzE,UAAO;;EAET,iBAAiB,QAAQ,aAAa;GACpC,MAAM,UAAU,SAAS,EACvB,EAAE,SAAS,QAAQ,SAAS,OAAO;AACrC,OACE,OAAO,aAAa,YACpB,MAAM,SAAS,SACd,MAAM,SAAS,aAAa,KAAK,QAAQ,SAE1C,OAAM,IAAI,UAAU,+BAA+B;AACrD,WAAQ,aAAa,kBAAkB,QAAQ,QAAQ,EAAE,SAAS;AAClE,UAAO;;EAET,MAAM,QAAQ,aAAa;GACzB,MAAM,EAAE,MAAM,UAAU,QAAQ,SAAS,OAAO;AAChD,OAAI,OAAO,aAAa,SAAU,QAAO;AACzC,OAAI,MAAM,SAAS,MAAO,QAAO;AACjC,WAAQ,SAAS,UAAU,OAAO,CAAC;AACnC,UAAO,UAAU,KAAA,KAAa,OAAO,OAAO,OAAiB,SAAS;;EAExE,UAAS,WAAU;GACjB,MAAM,EAAE,MAAM,UAAU,QAAQ,SAAS,OAAO;AAChD,OAAI,MAAM,SAAS,MAAO,QAAO,EAAE;AACnC,OAAI,QAAQ,aAAc,SAAQ,SAAS,UAAU,OAAO,CAAC;AAC7D,UAAO,SAAS,OAAO,UAAU,WAAW,OAAO,KAAK,MAAM,GAAG,EAAE;;EAErE,2BAA2B,QAAQ,aAAa;GAC9C,MAAM,EAAE,MAAM,UAAU,QAAQ,SAAS,OAAO;AAChD,OAAI,MAAM,SAAS,MAAO,QAAO,KAAA;AACjC,UAAO,SAAS,OAAO,OAAO,OAAiB,SAAS,GACpD;IAAE,YAAY;IAAM,cAAc;IAAM,GACxC,KAAA;;EAEN,sBAAsB;AACpB,gBAAa,QAAQ;AACrB,SAAM,IAAI,UAAU,0BAA0B;;EAEhD,sBAAsB;AACpB,gBAAa,QAAQ;AACrB,SAAM,IAAI,UAAU,qCAAqC;;EAE3D,yBAAyB;AACvB,gBAAa,QAAQ;AACrB,SAAM,IAAI,UAAU,oCAAoC;;EAE3D;CACD,MAAM,OAAO,QAAQ,SAAS,aAAa,SAAS,KAAA,GAAW,GAAG,CAAC;AACnE,KAAI,CAAC,KAAK,QAAQ,KAAK,KAAK,SAAS,WAAW,KAAK,UAAU,KAAA,GAAW;AACxE,MAAI,QAAQ,aAAc,SAAQ,SAAS,QAAQ;AACnD,SAAO,KAAK;;AAEd,QAAO,OAAO,KAAK;;AAErB,MAAa,oBACX,SACA,OAC8C;CAC9C,MAAM,QAAQ,aAAa,SAAS,GAAG;AACvC,KAAI,UAAU,KAAA,EACZ,QAAO;EACL,WAAW;AACT,gBAAa,QAAQ;;EAGvB,WAAW;AACT,gBAAa,QAAQ;AACrB,UAAO;;EAET,WAAW;AACT,gBAAa,QAAQ;AACrB,UAAO,EAAE;;EAEZ;AACH,QAAO;;;;ACnnBT,MAAa,WAAW,WACtB,QAAQ,SAAS,OAAO,KAAK,OAAO;AAEtC,MAAa,MAAM,WACjB,OAAO,SAAS,gBAAgB,QAAQ,SAAS,OAAO,KAAK,KAAA;AAE/D,MAAa,WAAW,QAA+B,WACrD,EAAE,YAAY,WAAW,OAAO,WAAW;AAE7C,MAAa,QAAQ,MAA6B,UAA0C;AAC1F,KAAI,KAAK,SAAS,MAAM,KAAM,QAAO;AACrC,KAAI,YAAY,QAAQ,YAAY,SAAS,KAAK,WAAW,MAAM,OAAQ,QAAO;CAClF,MAAM,cAAc,QAAQ,KAAK;CACjC,MAAM,eAAe,QAAQ,MAAM;AACnC,KAAI,YAAY,WAAW,aAAa,OAAQ,QAAO;AACvD,MAAK,IAAI,QAAQ,GAAG,QAAQ,YAAY,QAAQ,SAAS,EACvD,KAAI,YAAY,WAAW,aAAa,OAAQ,QAAO;AACzD,QAAO,KAAK,SAAS,gBAAgB,GAAG,KAAK,KAAK,GAAG,MAAM;;AAG7D,MAAa,kBAAkB,WAAmD;CAChF,MAAM,MAAM,GAAG,OAAO;AACtB,QAAO,QAAQ,KAAA,IAAY,QAAQ,OAAO,GAAG,CAAC,GAAG,QAAQ,OAAO,EAAE,IAAI;;AAGxE,MAAa,YACX,QACA,QACA,WACY;CACZ,MAAM,KAAK,eAAe,OAAO;AACjC,QAAO,GAAG,OAAO,KAAK,KAAA,IAClB,OAAO,YAAY,GAAG,GACtB,OAAO,SAAS,GAAG,IAAI,OAAO,cAAc,GAAG;;;AAIrD,IAAa,oBAAb,MAAkC;CAChC,WAA4B,IAAIE,cAAAA,cAAiB;CACjD,aAA8B,IAAIA,cAAAA,cAAiB;CACnD,YAAY,QAAqC;AAApB,OAAA,SAAA;;CAC7B,IAAI,QAAsB,OAAgB;AACxC,MAAI,QAAQ,QAAQ,KAAK,OAAO,CAC9B,EAAC,GAAG,OAAO,KAAK,KAAA,IAAY,KAAK,WAAW,KAAK,YAAY,IAC3D,eAAe,OAAO,EACtB,MACD;;CAEL,OAAO,QAAsB,OAAgB;AAC3C,MAAI,QAAQ,QAAQ,KAAK,OAAO,CAC9B,EAAC,GAAG,OAAO,KAAK,KAAA,IAAY,KAAK,WAAW,KAAK,YAAY,OAC3D,eAAe,OAAO,EACtB,MACD;;CAEL,QAAQ,SAAoB,OAAiC;EAC3D,MAAM,SAAS,KAAK,SAAS,MAAM,MAAM;EACzC,MAAM,UAAU,KAAK,WAAW,MAAM,OAAO,cAAc;EAC3D,MAAM,SAAS,KAAK,SAAS,MAAM,OAAO,YAAY;AACtD,OAAK,MAAM,UAAU,QAAQ,QAC3B,KAAI,OAAO,SAAS,SAAS;AAC3B,UAAO,EAAE,CAAC;AACV,WAAQ,EAAE,CAAC;aACF,OAAO,SAAS,WAAW;AACpC,UAAO,OAAO,IAAI,OAAO,QAAQ;AACjC,WAAQ,OAAO,IAAI,OAAO,QAAQ;AAClC,OAAI,OAAO,MAAO,QAAO,OAAO,GAAG;SAC9B;AACL,UAAO,OAAO,GAAG;AACjB,WAAQ,OAAO,GAAG;;;CAIxB,QAAc;AACZ,OAAK,SAAS,OAAO;AACrB,OAAK,WAAW,OAAO;;;;;AC5C3B,MAAM,0BAAU,IAAI,SAAgC;AACpD,MAAa,iBAAiB,QAAgB,UAC5C,QAAQ,IAAI,OAAO,CAAE,QAAQ,MAAM;AACrC,MAAa,oBACX,QACA,aACwB,QAAQ,IAAI,OAAO,CAAE,WAAW,SAAS;AACnE,MAAa,gBACX,QACA,YACsB;CACtB,MAAM,QAAQ,QAAQ,QAAQ,MAAK,WAAU,OAAO,SAAS,QAAQ;CACrE,IAAI;CACJ,IAAI;CACJ,MAAM,cAAc;AAClB,MAAI,CAAC,QAAQ;AACX,iBAAA,QAAQ,OAAO,OAAO;AACtB,YAAS,IAAIC,cAAAA,cAAc;AAC3B,YAAS,IAAIA,cAAAA,cAAc;AAC3B,QAAK,MAAM,UAAU,QAAQ,QAC3B,KAAI,OAAO,SAAS,WAAW;AAC7B,SAAK,MAAM,UAAU,OAAO,QAAS,QAAO,IAAI,OAAO,IAAI,MAAM,OAAO,IAAI;AAC5E,QAAI,OAAO,MAAO,QAAO,IAAI,OAAO,IAAI,KAAK;cACpC,OAAO,SAAS,OAAQ,QAAO,IAAI,OAAO,IAAI,KAAK;;AAGlE,SAAO;;CAET,MAAM,wBAAQ,IAAI,KAAuC;CACzD,MAAM,iBAAgC;EACpC,QAAQ,OAAO;AACb,iBAAA,QAAQ,OAAO,SAAS;AACxB,OAAI,CAACC,QAAe,OAAO,OAAO,CAAE,QAAO;AAC3C,OAAI,MAAO,QAAO;AAClB,UAAOC,SAAgB,OAAO,OAAO,EAAE,OAAQ;;EAEjD,WAAW,UAAU;AACnB,OAAI,SAAS,WAAW,OACtB,OAAM,IAAI,UAAU,4CAA4C;GAClE,MAAM,MAAM,KAAK,UAAU,SAAS,QAAQ,EAC1C,SAAS,MAAM,IAAI,IAAI;AACzB,OAAI,OAAQ,QAAO;AACnB,OAAI,OAAO;IACT,MAAM,SAAS,EAAE,MAAM,SAAS;AAChC,UAAM,IAAI,KAAK,OAAO;AACtB,WAAO;;GAET,MAAM,KAAK,SAAS;GACpB,MAAM,wBAAQ,IAAI,KAAa,EAC7B,0BAAU,IAAI,KAAa,EAC3B,0BAAU,IAAI,KAAa;GAC7B,IAAI,eAAe;AACnB,QAAK,MAAM,UAAU,QAAQ,SAAS;AACpC,QAAI,OAAO,SAAS,QAAS;AAC7B,QAAI,OAAO,SAAS,WAAW;AAC7B,SAAI,OAAO,GAAG,SAAS,GAAG,UAAUC,cAAAA,SAAS,OAAO,IAAI,GAAG;UACrD,OAAO,QAAQ,MAAK,WAAU,OAAO,QAAQ,GAAG,OAAO,GAAG,QAAQ,EAAE;OACtE,MAAM,SAAS,EAAE,MAAM,SAAS;AAChC,aAAM,IAAI,KAAK,OAAO;AACtB,cAAO;;gBAEAA,cAAAA,SAAS,IAAI,OAAO,GAAG,CAChC,KAAI,OAAO,GAAG,WAAW,GAAG,QAAQ;AAClC,UAAI,OAAO,OAAO;OAChB,MAAM,YAAY,IAAI,IAAI,OAAO,MAAM,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;OACrE,IAAI,WAAW;AACf,YAAK,MAAM,MAAM,OAAO,MAAM,QAAQ;QACpC,MAAM,WAAW,UAAU,IAAI,GAAG;AAClC,YAAI,aAAa,KAAA,EAAW;AAC5B,YAAI,WAAW,SAAU,gBAAe;AACxC,mBAAW;;;AAGf,WAAK,MAAM,UAAU,OAAO,QAC1B,KAAI,OAAO,SAAS,QAAS,OAAM,IAAI,OAAO,IAAI;eACzC,OAAO,SAAS,UAAW,SAAQ,IAAI,OAAO,IAAI;UACtD,SAAQ,IAAI,OAAO,IAAI;WAEzB,SAAQ,IAAI,OAAO,GAAG,GAAG,QAAQ;AAE1C;;AAEF,QAAI,OAAO,SAAS,UAAUA,cAAAA,SAAS,OAAO,IAAI,GAAG,EAAE;KACrD,MAAM,SAAS,EAAE,MAAM,SAAS;AAChC,WAAM,IAAI,KAAK,OAAO;AACtB,YAAO;;AAET,QAAI,CAACA,cAAAA,SAAS,IAAI,OAAO,GAAG,CAAE;AAC9B,QAAI,OAAO,GAAG,WAAW,GAAG,OAAQ;IACpC,MAAM,KAAK,OAAO,GAAG,GAAG;AACxB,YAAQ,IAAI,GAAG;;AAEjB,SAAM,SAAQ,OAAM,QAAQ,OAAO,GAAG,CAAC;AACvC,WAAQ,SAAQ,OAAM,QAAQ,OAAO,GAAG,CAAC;GACzC,MAAM,SAAS;IAAE,MAAM;IAAe;IAAO;IAAS;IAAS;IAAc;AAC7E,SAAM,IAAI,KAAK,OAAO;AACtB,UAAO;;EAEV;CACD,MAAM,SAA4B,OAAO,OAAO;EAC9C,MAAM,QAAQ,UAAU;EACxB,UAAU,SACR,eAAe,QAAQ,YAAwB,QAAQ,SAAS,KAAK,CAAC;EACxE,aAAuC,SACrC,eAAe,WACb,YAAwB,QAAQ,cAAc,KAAK,CACpD;EACJ,CAAC;AACF,SAAQ,IAAI,QAAQ,eAAe;AACnC,QAAO;;;;ACtIT,IAAa,0BAAb,cAA6C,MAAM;CACjD,cAAc;AACZ,QAAM,yEAAyE;AAC/E,OAAK,OAAO;;;AAGhB,IAAa,wBAAb,cAA2C,MAAM;CAC/C,cAAc;AACZ,QAAM,mCAAmC;AACzC,OAAK,OAAO;;;AAUhB,IAAa,sBAAb,cAAyC,MAAM;CAC7C;CACA,YAAY,OAAqD;AAC/D,QAAM,4BAA4B;AAClC,OAAK,OAAO;EACZ,MAAM,SAAqC,MAAM,QAAQ,MAAM,GAC3D,QACA,CAAC,MAAyB;AAC9B,OAAK,SAAS,OAAO,OACnB,OAAO,KAAI,UACT,OAAO,OAAO;GACZ,MAAM,MAAM;GACZ,SAAS,MAAM;GACf,QAAQ;GACR,GAAI,MAAM,YAAY,KAAA,IAAY,EAAE,GAAG,EAAE,SAAS,OAAO,OAAO,CAAC,GAAG,MAAM,QAAQ,CAAC,EAAE;GACtF,CAAC,CACH,CACF;;;;;ACjCL,MAAM,yBAAS,IAAI,SAAiD;AAEpE,MAAa,qBACX,SACA,UACS;AACT,QAAO,IAAI,SAAmB,MAAwC;;AAGxE,MAAa,YACX,YACgC;CAChC,MAAM,QAAQ,OAAO,IAAI,QAAkB;AAC3C,KAAI,CAAC,MAAO,OAAM,IAAI,MAAM,yBAAyB;AACrD,QAAO;;AAGT,MAAa,YACX,SACA,KACA,iBACY;CACZ,MAAM,QAAQ,SAAS,QAAQ;AAC/B,KAAI,MAAM,SAAU,OAAM,IAAI,uBAAuB;AACrD,OAAM,mBAAmB,MAAM,mBAAmB,KAAK;AACvD,KAAI;AAKF,SAAO,IAJQ,aAAa;GAC1B;GACA;GACD,CACgB,CAAC;WACV;AAGR,QAAM;;;;;ACNV,MAAM,gCAAgB,IAAI,SAAkD;AAC5E,MAAM,iCAAiB,IAAI,SAA+C;AAE1E,MAAa,wBACX,UACA,YACS;AACT,gBAAe,IAAI,UAAU,QAAQ;;AAEvC,MAAa,yBAAyB,aACpC,eAAe,IAAI,SAAS;AAE9B,MAAa,sBACX,YACiC;CACjC,MAAM,eAA6C;EACjD,sBAAM,IAAI,KAAK;EACf,0BAAU,IAAI,KAAK;EACnB,OAAO,IAAIC,kBAAyB,QAAQ,OAAO;EACnD,0BAAU,IAAI,KAAK;EACnB,YAAY,EAAE;EACd,4BAAY,IAAI,KAAK;EACrB,cAAc,EAAE;EAChB,WAAW;EACZ;AACD,eAAc,IAAI,SAAmB,aAAgD;AACrF,QAAO;;AAGT,MAAM,kBACJ,YACiC;CACjC,MAAM,QAAQ,cAAc,IAAI,QAAkB;AAClD,KAAI,CAAC,MAAO,OAAM,IAAI,MAAM,yBAAyB;AACrD,QAAO;;AAGT,MAAa,qBACX,QACA,WACS;AACT,eAAc,IAAI,QAAkB,eAAe,OAAO,CAAoC;;AAGhG,MAAa,oBACX,SACA,cACgB;CAChB,MAAM,eAAe,eAAe,QAAQ;CAC5C,MAAM,QAAiC;EAAE;EAAW,QAAQ;EAAM;AAClE,cAAa,WAAW,KAAK,MAAM;AACnC,cAAa;AACX,MAAI,CAAC,MAAM,OAAQ;AACnB,QAAM,SAAS;AACf,MAAI,CAAC,aAAa,WAAW;GAC3B,MAAM,QAAQ,aAAa,WAAW,QAAQ,MAAM;AACpD,OAAI,SAAS,EAAG,cAAa,WAAW,OAAO,OAAO,EAAE;;;;AAK9D,MAAa,iBACX,cACA,aACgB;CAChB,MAAM,QAA4B;EAAE;EAAU,QAAQ;EAAM;AAC5D,cAAa,KAAK,IAAI,MAAM;AAC5B,cAAa;AACX,QAAM,SAAS;AACf,MAAI,CAAC,aAAa,UAAW,cAAa,KAAK,OAAO,MAAM;MAE1D,cAAa,SAAS,UAAU;AAC9B,gBAAa,KAAK,OAAO,MAAM;IAC/B;;;AAIR,MAAa,oBACX,cACA,SACA,aACgB;CAChB,MAAM,QAAgC;EACpC,SAAS,OAAO,OAAO,QAAQ,OAAO,CAAC;EACvC;EACA,QAAQ;EACT;AACD,cAAa,SAAS,IAAI,MAAM;AAChC,OAAM,QAAQ,SAAQ,UAAS,aAAa,MAAM,IAAI,OAAO,MAAM,CAAC;CACpE,MAAM,eAAe;AACnB,eAAa,SAAS,OAAO,MAAM;AACnC,QAAM,QAAQ,SAAQ,UAAS,aAAa,MAAM,OAAO,OAAO,MAAM,CAAC;;AAEzE,cAAa;AACX,MAAI,CAAC,MAAM,OAAQ;AACnB,QAAM,SAAS;AACf,MAAI,aAAa,UAAW,cAAa,SAAS,IAAI,OAAO;MACxD,SAAQ;;;AAIjB,MAAa,UACX,cACA,QACA,gBAC6B;AAC7B,cAAa,YAAY;CACzB,MAAM,SAA0B,EAAE;CAClC,MAAM,QAAQ,aAA4C;AACxD,MAAI;AACF,YAAS,OAAO;WACT,OAAO;AACd,UAAO,KAAK,OAAO,OAAO;IAAE,OAAO;IAAY;IAAO,CAAC,CAAC;;;AAG5D,KAAI;EACF,MAAM,iBAAiB,aAAa,WAAW;AAC/C,OAAK,IAAI,QAAQ,GAAG,QAAQ,gBAAgB,SAAS,GAAG;GACtD,MAAM,QAAQ,aAAa,WAAW;AACtC,OAAI,CAAC,OAAO,OAAQ;AACpB,OAAI;AACF,UAAM,UAAU,QAAQ,OAAO;YACxB,OAAO;AACd,WAAO,KAAK,OAAO,OAAO;KAAE,OAAO;KAAa;KAAO,CAAC,CAAC;;;AAG7D,OAAK,IAAI,QAAQ,GAAG,QAAQ,gBAAgB,SAAS,GAAG;GACtD,MAAM,QAAQ,aAAa,WAAW;AACtC,OAAI,CAAC,OAAO,OAAQ;AACpB,OAAI;AACF,UAAM,UAAU,QAAQ;YACjB,OAAO;AACd,WAAO,KAAK,OAAO,OAAO;KAAE,OAAO;KAAa;KAAO,CAAC,CAAC;;;AAG7D,OAAK,IAAI,QAAQ,GAAG,QAAQ,gBAAgB,SAAS,GAAG;GACtD,MAAM,QAAQ,aAAa,WAAW;AACtC,OAAI,CAAC,OAAO,OAAQ;AACpB,OAAI;AACF,WAAO,KAAK,GAAG,MAAM,UAAU,OAAO,CAAC;YAChC,OAAO;AACd,WAAO,KAAK,OAAO,OAAO;KAAE,OAAO;KAAS;KAAO,CAAC,CAAC;;;AAIzD,MAAI,YAAa,QAAO,KAAK,GAAG,aAAa,CAAC;EAC9C,MAAM,aAAa,aAAa;AAChC,aAAW,OAAO;AAClB,MAAI,aAAa,SAAS,KACxB,cAAa,MAAM,QAAQ,OAAO,UAAS,UAAS,WAAW,IAAI,MAAM,CAAC;AAC5E,aAAW,SAAQ,UAAS;AAC1B,OAAI,MAAM,OAAQ,MAAK,MAAM,SAAS;IACtC;EACF,MAAM,eAAe,aAAa;AAClC,eAAa,SAAS;AACtB,eAAa,KAAK,SAAQ,UAAS,aAAa,KAAK,MAAM,CAAC;AAC5D,OAAK,MAAM,SAAS,aAAc,KAAI,MAAM,OAAQ,MAAK,MAAM,SAAS;WAChE;AACR,eAAa,YAAY;EACzB,IAAI,aAAa;AACjB,OAAK,MAAM,SAAS,aAAa,WAC/B,KAAI,MAAM,OAAQ,cAAa,WAAW,gBAAgB;AAC5D,eAAa,WAAW,SAAS;AACjC,eAAa,SAAS,SAAQ,YAAW,SAAS,CAAC;AACnD,eAAa,SAAS,OAAO;;AAE/B,QAAO,OAAO,OAAO,OAAO;;AAG9B,MAAa,yBACX,SACA,SACA,aACgB,iBAAiB,eAAe,QAAQ,EAAE,SAAS,SAAS;AAE9E,MAAa,uBACX,iBACS;CACT,MAAM,cAAc,aAAa,WAAW,OAAO;AACnD,cAAa,KAAK,OAAO;AACzB,cAAa,SAAS,OAAO;AAC7B,cAAa,MAAM,OAAO;AAC1B,cAAa,SAAS,OAAO;AAC7B,cAAa,WAAW,SAAS;AACjC,cAAa,WAAW,OAAO;AAC/B,cAAa,aAAa,SAAS;CACnC,MAAM,SAAoB,EAAE;AAC5B,aAAY,SAAQ,UAAS;AAC3B,MAAI,CAAC,MAAM,OAAQ;AACnB,MAAI;AACF,SAAM,UAAU,SAAS;WAClB,OAAO;AACd,UAAO,KAAK,MAAM;;GAEpB;AACF,KAAI,OAAO,OAAQ,OAAM,IAAI,eAAe,QAAQ,2CAA2C;;;;AC7FjG,MAAM,8BAAc,IAAI,SAA6B;AACrD,MAAM,iBAA8C,YAClD,OAAO,OAAO,EAAE,GAAG,SAAS,CAAC;AAC/B,MAAM,UAKJ,eACwB;CACxB,MAAM,SAAS,OAAO,OAAO,EAAE,CAAC;AAChC,aAAY,IAAI,QAAQ,WAAW;AACnC,QAAO;;AAGT,MAAa,gBACX,eACe;CACf,MAAM,aAAa,YAAY,IAAI,WAAW;AAC9C,KAAI,CAAC,WAAY,OAAM,IAAI,UAAU,iCAAiC;AACtE,QAAO;;AAGT,MAAa,SACX,SACA,YAEA,OAAkC;CAChC,MAAM;CACN;CACA,SAAS,SAAS;CACnB,CAAC;AAkEJ,SAAgB,QACd,OACA,QACA,OACA,QACiE;AACjE,KACE,SACA,OAAO,UAAU,YACjB,UAAU,UACR,MAA6B,SAAS,WACrC,MAA6B,SAAS,eACzC;EACA,MAAM,OAAO;AAOb,SAAO,OAAO;GACZ,MAAM,KAAK,SAAS,UAAU,mBAAmB;GACjD,SAAS,cAAc,KAAK,QAAQ;GACpC,OAAO,KAAK;GACZ,SAAS,KAAK;GACd,MAAM,KAAK;GACZ,CAAC;;AAEJ,KAAI,SAAS,OAAO,UAAU,YAAY,cAAc,SAAS,eAAe,OAAO;AACrF,MAAI,aAAa,OAAO;GACtB,MAAM,WAAW;AACjB,OAAI,CAAC,OAAQ,QAAO,OAAO;IAAE,MAAM;IAAY;IAAU,CAAC;AAC1D,OAAI,MAAM,QAAQ,OAAO,CACvB,QAAO,OAAO;IACZ,MAAM;IACN;IACA,SAAS,OAAO,OAAO,CAAC,GAAG,OAAO,CAAC;IACpC,CAAC;AACJ,OAAI,OAAO,WAAW,WAAY,OAAM,IAAI,UAAU,+BAA+B;GACrF,MAAM,SAAS,OAAgB;IAC7B,MAAM;IACN;IACA,MAAM;IACP,CAAC;AACF,OAAI,CAAC,SAAS,OAAO,UAAU,WAAY,QAAO;AAClD,UAAO,OAAO;IACZ,MAAM;IACN;IACA,QAAQ;IACR,SAAU,QAA+C;IAC1D,CAAC;;AAEJ,SAAO,OAAO;GAAE,MAAM;GAAY,UAAU;GAA4B,CAAC;;AAE3E,KAAI,QAAQ;AACV,MAAI,OAAO,WAAW,WAAY,OAAM,IAAI,UAAU,+BAA+B;AACrF,MAAI,YAAY,IAAI,MAAgB,CAClC,QAAO,OAAO;GACZ,MAAM;GACN,QAAQ;GACR,QAAQ;GACR,SAAU,OAA8C;GACzD,CAAC;AACJ,SAAO,OAAO;GACZ,MAAM;GACN,SAAS,cAAc,MAA2B;GAClD,SAAS;GACT,SAAU,OAA8C;GACzD,CAAC;;AAEJ,OAAM,IAAI,UAAU,+BAA+B;;;;AC9LrD,IAAa,kBAAb,cAAqC,MAAM;CACzC,YACE,OACA,UACA,WACA,OACA;AACA,QAAM,cAAc,MAAM,WAAW,YAAY,EAAE,OAAO,CAAC;AALlD,OAAA,QAAA;AACA,OAAA,WAAA;AACA,OAAA,YAAA;AAIT,OAAK,OAAO;;;AAGhB,IAAa,0BAAb,cAA6C,MAAM;CACjD,cAAc;AACZ,QAAM,gCAAgC;AACtC,OAAK,OAAO;;;;;AC5GhB,MAAa,oCAAoB,IAAI,SAAiB;AACtD,MAAa,mBAAmB,YAA8C;CAC5E,IAAI,WAAW;CACf,IAAI,QAAQ;CACZ,IAAI,QAAuC;CAC3C,IAAI,WAAW;CACf,MAAM,0BAAU,IAAI,KAA2B;CAC/C,MAAM,wBAAQ,IAAI,KAAiB;CACnC,MAAM,0BAAU,IAAI,KAAmB;CACvC,MAAM,OAAqB,EAAE;CAC7B,MAAM,yBAAS,IAAI,KAAiB;CACpC,MAAM,YAA0B,EAAE;CAClC,MAAM,4BAAY,IAAI,KAAiB;CACvC,MAAM,SAA4B,EAAE;CACpC,IAAI,oBAA+B,EAAE;CACrC,MAAM,yBAAS,IAAI,KAAgC;CACnD,MAAM,2BAAW,IAAI,KAAiB;CACtC,MAAM,qBAAqB;AACzB,MAAI,SAAU,OAAM,IAAI,yBAAyB;;CAEnD,MAAM,mBAAmB;AACvB,gBAAc;AACd,MAAI,UAAU,OACZ,OAAM,IAAI,MAAM,qEAAqE;;CAEzF,MAAM,QAAQ,UAAmB,OAAO,SAAQ,UAAS,MAAM,MAAM,CAAC;CACtE,MAAM,WAAW,SAAqB;AACpC,MAAI,KAAK,YAAY,OAAO,IAAI,KAAK,CAAE;AACvC,SAAO,IAAI,KAAK;AAChB,gBAAA,QAAQ,WAAW,iBAAiB;EACpC,IAAI,IAAI,KAAK;AACb,OAAK,KAAK,KAAK;AACf,SAAO,IAAI,GAAG;GACZ,MAAM,IAAK,IAAI,KAAM;AACrB,OAAI,KAAK,GAAG,QAAQ,KAAK,MAAO;AAChC,QAAK,KAAK,KAAK;AACf,OAAI;;AAEN,OAAK,KAAK;;CAEZ,MAAM,YAAY;EAChB,MAAM,QAAQ,KAAK;EACnB,MAAM,OAAO,KAAK,KAAK;AACvB,MAAI,KAAK,QAAQ;GACf,IAAI,IAAI;AACR,UAAO,IAAI,IAAI,IAAI,KAAK,QAAQ;IAC9B,IAAI,IAAI,IAAI,IAAI;AAChB,QAAI,IAAI,IAAI,KAAK,UAAU,KAAK,IAAI,GAAG,QAAQ,KAAK,GAAG,MAAO;AAC9D,QAAI,KAAK,QAAQ,KAAK,GAAG,MAAO;AAChC,SAAK,KAAK,KAAK;AACf,QAAI;;AAEN,QAAK,KAAK;;AAEZ,SAAO;;CAET,MAAM,YACJ,MACA,OACA,OAAiC,gBAEjC,IAAI,gBACF,MACA,KAAK,MACL,KAAK,QAAQ,KAAI,WAAU,OAAO,UAAU,CAAC,EAC7C,MACD;CACH,MAAM,WAAW,WAAyB;AACxC,MAAI,SAAU;AACd,MAAI,UAAU,QAAQ;AACpB,UAAO,QAAQ,IAAI,gBACjB,UACA,oBACA,CAAC,OAAO,UAAU,CAAC,kBACnB,IAAI,MAAM,+CAA+C,CAC1D;AACD,UAAO,KAAK,OAAO,MAAM;AACzB,SAAM,OAAO;;AAEf,UAAQ,IAAI,OAAO;AACnB,gBAAA,QAAQ,WAAW,eAAe;AAClC,MAAI,OAAO,MAAO,QAAO,KAAK,OAAO,MAAM;;CAE7C,MAAM,eAAe;AACnB,MAAI,YAAY,SAAS,UAAU,OAAQ;AAC3C,UAAQ;AACR,OAAK,KAAK;AACV,MAAI;AACF,WAAQ,SAAQ,WAAU,OAAO,UAAU,QAAQ,QAAQ,CAAC;AAC5D,UAAO,KAAK,QAAQ;IAClB,MAAM,OAAO,KAAK;AAClB,QAAI,KAAK,SAAU;IACnB,MAAM,aAAa,KAAK,UAAU,KAAA;AAClC,kBAAA,QAAQ,WAAW,iBAAiB;IACpC,IAAI,UAAU;IACd,MAAM,UAAU,KAAK,QAAQ,MAAK,WAAU,OAAO,SAAS,OAAO,SAAS;AAC5E,QAAI,QACF,MAAK,QAAQ,SAAS,MAAM,QAAQ,SAAS,IAAI,yBAAyB,EAAE,UAAU;SACjF;KACL,MAAM,QAAQ,KAAK,UAAU,cAAc,KAAK,QAAQ,MAAK,WAAU,OAAO,OAAO,CAAC;AACtF,SAAI;AACF,gBAAU,KAAK,SAAS,MAAM;MAC9B,MAAM,UAAU,KAAK,QAAQ,MAAK,WAAU,OAAO,MAAM,EAAE;AAC3D,UAAI,QAAS,OAAM;AACnB,WAAK,QAAQ,KAAA;cACN,OAAO;MACd,MAAM,QAAQ,SAAS,MAAM,MAAM;AACnC,aAAO,KAAK,MAAM;AAClB,WAAK,QAAQ;AACb,UAAI,CAAC,MACH,KAAI;AACF,iBAAU,KAAK,SAAS,KAAK;OAC7B,MAAM,UAAU,KAAK,QAAQ,MAAK,WAAU,OAAO,MAAM,EAAE;AAC3D,WAAI,QAAS,OAAM;AACnB,YAAK,QAAQ,KAAA;eACN,OAAO;AACd,YAAK,QAAQ,SAAS,MAAM,MAAM;AAClC,cAAO,KAAK,KAAK,MAAM;;;;AAK/B,SAAK,SAAS;AACd,SAAK,gBAAgB,gBAAgB,KAAK,UAAU,KAAA;AACpD,cAAU,KAAK,KAAK;AACpB,QAAI,WAAW,cAAc,KAAK,OAAO;AACvC,mBAAA,QAAQ,WAAW,iBAAiB;AACpC,eAAU,IAAI,KAAK;AACnB,UAAK,UAAU,QAAQ,QAAQ;;;AAGnC,aAAU,SAAQ,SAAQ,KAAK,SAAS,CAAC;YACjC;AACR,QAAK,MAAM;AACX,WAAQ;;;CAGZ,MAAM,cAAwC;AAC5C,MAAI,YAAY,MAAO,QAAO,EAAE;AAChC,MAAI,QAAQ,QAAQ,UAAU,OAAQ,eAAA,QAAQ,WAAW,UAAU;AACnE,UAAQ;AACR,OAAK,KAAK;EACV,MAAM,iBAA4B,EAAE;AACpC,MAAI;AACF,aAAU,SAAQ,SAChB,KAAK,MAAK,aAAY;AACpB,QAAI;AACF,eAAU;aACH,OAAO;AACd,YAAO,KAAK,SAAS,MAAM,OAAO,WAAW,CAAC;;KAEhD,CACH;AACD,QAAK,MAAM,SAAS,OAAO,OAAO,CAChC,KAAI;AACF,YAAQ,MAAM;YACP,OAAO;AACd,mBAAe,KAAK,MAAM;;AAG9B,UAAO,OAAO,OAAO,CACnB,GAAG,OAAO,KAAI,UACZ,OAAO,OAAO;IACZ,OAAO,MAAM,UAAU,aAAc,aAAwB;IAC7D;IACD,CAAC,CACH,EACD,GAAG,eAAe,KAAI,UAAS,OAAO,OAAO;IAAE,OAAO;IAAqB;IAAO,CAAC,CAAC,CACrF,CAAC;YACM;AACR,WAAQ,SAAQ,WAAU,OAAO,OAAO,CAAC;AACzC,aAAU,SAAQ,SAAQ,KAAK,OAAO,CAAC;AACvC,WAAQ,OAAO;AACf,UAAO,OAAO;AACd,aAAU,SAAS;AACnB,aAAU,OAAO;AACjB,UAAO,SAAS;AAChB,uBAAoB;AACpB,QAAK,MAAM;AACX,WAAQ;;;CAGZ,MAAM,YAAY;AAChB,UAAQ;EACR,MAAM,SAAS,OAAO;EACtB,MAAM,WAAW;AACjB,sBAAoB,EAAE;AACtB,MAAI,SAAS,OAAQ,OAAM,IAAI,eAAe,UAAU,oCAAoC;AAC5F,SAAO;;AAET,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,SAAS;AACX,UAAO,CAAC;;EAEV,SAAS,QAAgB,QAAsB;AAC7C,eAAY;AACZ,WAAQ,IAAI,QAAQ,OAAO;AAC3B,qBAAkB,IAAI,OAAO;;EAE/B,iBAAiB,QAAgB;GAC/B,MAAM,SAAS,QAAQ,IAAI,OAAO;AAClC,OAAI,QAAQ;AACV,WAAO,WAAW;AAClB,YAAQ,OAAO,OAAO;AACtB,WAAO,OAAO;AACd,YAAQ,OAAO,OAAO;;;EAG1B,OAAO,QAAgB;AACrB,iBAAc;GACd,MAAM,SAAS,QAAQ,IAAI,OAAO;AAClC,OAAI,CAAC,UAAU,OAAO,SACpB,OAAM,IAAI,MAAM,mDAAmD;AACrE,UAAO;;EAET,QAAQ,MAAkB;AACxB,SAAM,IAAI,KAAK;AACf,QAAK,QAAQ,SAAQ,WAAU,OAAO,UAAU,IAAI,KAAK,CAAC;;EAE5D,aAAa;EACb,WAAc,KAAiB;AAC7B,eAAY;AACZ,WAAQ;AACR,QAAK,KAAK;AACV,OAAI;AACF,WAAO,KAAK;aACJ;AACR,SAAK,MAAM;AACX,YAAQ;;;EAGZ,QAAQ,MAAkB;AACxB,eAAY;AACZ,OAAI,KAAK,SAAU,OAAM,IAAI,yBAAyB;AACtD,QAAK,SAAS;AACd,WAAQ,KAAK;AACb,QAAK;;EAEP,YAAY,MAAkB;AAC5B,OAAI,KAAK,SAAU;AACnB,eAAY;AACZ,OAAI,KAAK,UAAU,KACjB,OAAM,IAAI,MAAM,8DAA8D;AAChF,QAAK,WAAW;AAChB,QAAK,QAAQ,SAAQ,WAAU,OAAO,UAAU,OAAO,KAAK,CAAC;AAC7D,SAAM,OAAO,KAAK;AAClB,QAAK,SAAS;AACd,QAAK,MAAM,CAAC,QAAQ,WAAW,QAAS,KAAI,WAAW,KAAM,SAAQ,OAAO,OAAO;;EAErF,MAAS,UAAsB;AAC7B,eAAY;AACZ;GACA,IAAI,SAAS;AACb,OAAI;IACF,MAAM,QAAQ,UAAU;AACxB,sBAAkB,MAAM;AACxB,WAAO;YACA,OAAO;AACd,aAAS;AACT,UAAM;aACE;AACR;AACA,QAAI,CAAC,MACH,KAAI,OACF,KAAI;AACF,UAAK;YACC;QAGH,MAAK;;;EAIlB,UAAU;AACR,OAAI,SAAU;AACd,eAAY;AACZ,cAAW;GACX,MAAM,WAAsB,EAAE;AAC9B,YAAS,SAAQ,YAAW;AAC1B,QAAI;AACF,cAAS;aACF,OAAO;AACd,cAAS,KAAK,MAAM;;KAEtB;AACF,YAAS,OAAO;AAChB,SAAM,SAAQ,SAAQ;AACpB,SAAK,WAAW;AAChB,SAAK,SAAS;AACd,SAAK,UAAU,OAAO;KACtB;AACF,WAAQ,SAAQ,WAAU;AACxB,WAAO,WAAW;AAClB,WAAO,UAAU,OAAO;AACxB,WAAO,OAAO;KACd;AACF,SAAM,OAAO;AACb,WAAQ,OAAO;AACf,WAAQ,OAAO;AACf,QAAK,SAAS;AACd,aAAU,SAAS;AACnB,UAAO,OAAO;AACd,aAAU,OAAO;AACjB,UAAO,OAAO;AACd,UAAO,SAAS;AAChB,uBAAoB,EAAE;AACtB,OAAI,SAAS,OAAQ,OAAM,IAAI,eAAe,UAAU,6BAA6B;;EAEvF,cAAc;GACZ,OAAO,MAAM;GACb,SAAS,QAAQ,OAAO,MAAM;GAC9B,eAAe,SAAS;GACxB,SAAS,QAAQ,OAAO,KAAK;GAC9B;EACF;;AAGH,MAAa,qBAAqB,UAAyB;AACzD,KACE,SAAS,SACR,OAAO,UAAU,YAAY,OAAO,UAAU,eAC/C,UAAU,SACV,OAAO,MAAM,SAAS,WAEtB,OAAM,IAAI,UAAU,4CAA4C;;AAEpE,MAAa,eAAe,WAA0B;AACpD,KAAI,CAAC,QAAQ,CAAE,OAAM,IAAI,MAAM,mDAAmD;;;;ACtWpF,MAAa,cACX,WACA,MACA,aAUG;AACH,WAAU,YAAY;CACtB,MAAM,UAAU,OAAO,QAAQ,KAAK,QAAQ,CAAC,KAC1C,CAAC,KAAK,YAAY,CAAC,KAAK,UAAU,OAAO,OAAO,CAAC,CACnD;CACD,MAAM,QAAQ,UAAU,OAAO;CAC/B,MAAM,OAAmB;EACvB,GAAG;EACH,eAAe;AACb,OAAI,KAAK,MAAO,UAAS,OAAO;OAC3B,UAAS,SAAS;;EAEzB;EACA,MAAM,KAAK,OAAO,GAAG,KAAK,KAAK,IAAI,MAAM,KAAK,cAAc;EAC5D,SAAS,QAAQ,KAAK,GAAG,YAAY,OAAO;EAC5C,2BAAW,IAAI,KAAK;EACpB,UAAU;EACV,OAAO,KAAA;EACP,QAAQ;EACR,eAAe;EACf,WAAU,UAAS;GACjB,IAAI,SAAS;AACb,OAAI;IACF,MAAM,oBAAoB;IAE1B,MAAM,SAAS,OAAO,YACpB,QAAQ,KAAK,CAAC,KAAK,YAAY,CAAC,KAAK,OAAO,QAAQ,YAAY,CAAC,CAAC,CACnE;AACD,WAAO,SAAS,SAAS,QAAQ,OAAO,YAAY;aAC5C;AACR,aAAS;;;EAGd;AACD,WAAU,iBAAiB;EACzB,MAAM,UAAU,KAAK,QAAQ,MAAK,WAAU,OAAO,SAAS,OAAO,SAAS;AAC5E,MAAI,QAAS,OAAM,QAAQ,SAAS,IAAI,yBAAyB;AACjE,OAAK,SAAS,KAAK;AACnB,OAAK,SAAS;AACd,OAAK,OAAO;GACZ;CACF,MAAM,cAAc;AAClB,MAAI,KAAK,YAAY,CAAC,UAAU,OAAQ,OAAM,IAAI,yBAAyB;AAC3E,MAAI,KAAK,MAAO,OAAM,KAAK;;AAE7B,QAAO;EACL;EACA;EACA,QAAQ,QAAgB;AACtB,aAAU,SAAS,QAAQ,KAAK;AAChC,aAAU,QAAQ,KAAK;;EAEzB,eAAe,UAAU,QAAQ,KAAK;EACtC,eAAe,UAAU,YAAY,KAAK;EAC3C;;;;ACzDH,MAAa,oCAAoB,IAAI,SAAiB;AAEtD,MAAM,eAAkB,WAAwC;CAC9D,MAAM,MAAM,IAAI,IAAI,OAAO;CAC3B,MAAM,OAAuB,OAAO,OAAO;EACzC,IAAI,OAAO;AACT,UAAO,IAAI;;EAEb,MAAM,UAAa,IAAI,IAAI,MAAM;EACjC,eAAe,IAAI,SAAS;EAC5B,YAAY,IAAI,MAAM;EACtB,cAAc,IAAI,QAAQ;GACzB,OAAO,iBAAiB,IAAI,QAAQ;EACrC,UAAU,UAA2D,YACnE,IAAI,SAAQ,UAAS,SAAS,KAAK,SAAS,OAAO,OAAO,KAAK,CAAC;EACnE,CAAC;AACF,QAAO;;AAGT,MAAa,oBACX,WACA,SACiC;CACjC,MAAM,yBAAS,IAAI,KAAW;CAC9B,IAAI,MAAoB,OAAO,OAAO,EAAE,CAAC;CACzC,IAAI,yBAAS,IAAI,KAAkB;CACnC,IAAI,UAAU;CACd,IAAI;CACJ,IAAI;CACJ,IAAI,cAAc;CAClB,IAAI,QAAQ;CACZ,IAAI,WAAW;CACf,IAAI,cAAc;CAClB,IAAI;CAEJ,MAAM,wBAAQ,IAAI,KAAc;CAChC,MAAM,kCAAkB,IAAI,KAAW;CACvC,MAAM,+BAAe,IAAI,KAAiB;CAC1C,MAAM,+BAAe,IAAI,KAAiB;CAC1C,MAAM,4BAAY,IAAI,KAA4C;CAClE,MAAM,8BAAc,IAAI,KAAQ;CAChC,IAAI,eAAe;CACnB,MAAM,UAAgC,OAAO,OAAO;EAClD,MAAM,QAAW;AACf,SAAM,OAAO;AACb,UAAO,OAAO,IAAI,IAAI;;EAExB,MAAM,QAAW;AACf,SAAM,OAAO;AACb,UAAO,OAAO,IAAI,IAAI;;EAExB,WAAW;AACT,SAAM,OAAO;AACb,UAAO;;EAEV,CAAC;CACF,MAAM,WAAW,QAAY,OAAO,IAAI,IAAI,GAAG,OAAO,IAAI,IAAI,CAAE,UAAU,OAAO,IAAI,IAAI;CACzF,MAAM,WAAW,QAAW;EAC1B,MAAM,QAAQ,OAAO,IAAI,IAAI;AAC7B,SAAO,QAAS,MAAM,UAAU,MAAM,QAAQ,KAAA,IAAa,OAAO,IAAI,IAAI;;CAE5E,MAAM,QAAQ,WAAW,WAAW,MAAM;EACxC,WAAW,SAAS,OAAO,WAAW;AACpC,4BAAS,IAAI,KAAK;AAClB,aAAU;AACV,YAAS,KAAA;AACT,eAAY,OAAO;GACnB,IAAI;GACJ,IAAI,UAAU;GACd,MAAM,WAAW,QACf,OAAO,IAAI,IAAI,GAAG,OAAO,IAAI,IAAI,CAAE,UAAU,CAAC,WAAW,OAAO,IAAI,IAAI;GAC1E,MAAM,WAAW,QAAW;IAC1B,MAAM,QAAQ,OAAO,IAAI,IAAI;AAC7B,WAAO,QACH,MAAM,UACJ,MAAM,QACN,KAAA,IACF,UACE,KAAA,IACA,OAAO,IAAI,IAAI;;GAEvB,MAAM,kBAAkB;IACtB,MAAM,SAAS,UAAU,EAAE,GAAG,IAAI,OAAO,QAAQ;AACjD,SAAK,MAAM,CAAC,KAAK,UAAU,OACzB,KAAI,MAAM,YAAY,WAAW,CAAC,OAAO,IAAI,IAAI,EAAG,QAAO,KAAK,IAAI;AACtE,WAAO;;GAET,MAAM,QAAQ,UAAyC;IACrD,MAAK,QAAO;AACV,iBAAY,OAAO;AACnB,YAAO,OAAO,QAAQ,IAAI,GAAG,OAAO,IAAI,IAAI;;IAE9C,MAAK,QAAO;AACV,iBAAY,OAAO;AACnB,YAAO,OAAO,QAAQ,IAAI,GAAG,OAAO,IAAI,IAAI;;IAE9C,WAAW;AACT,iBAAY,OAAO;AACnB,YAAO,OAAO,OAAO,OAAO,gBAAgB,cAAc,OAAO,GAAG,WAAW,CAAC,GAAG;;IAEtF;GACD,MAAM,SAA6C;IACjD,MAAM,KAAK,UAAU;AACnB,iBAAY,OAAO;AACnB,SAAI,OAAO,QAAQ,SAAU,OAAM,IAAI,UAAU,mCAAmC;AACpF,YAAO,IAAI,KAAK;MAAE,SAAS;MAAM;MAAO,CAAC;;IAE3C,SAAQ,QAAO;AACb,iBAAY,OAAO;AACnB,YAAO,IAAI,KAAK,EAAE,SAAS,OAAO,CAAC;;IAErC,QAAO,UAAS;AACd,iBAAY,OAAO;AACnB,qBAAgB,MAAM,OAAO;;IAE/B,UAAS,YAAW;AAClB,iBAAY,OAAO;AACnB,YAAO,OAAO;AACd,eAAU;KACV,MAAM,QAAa,EAAE;AACrB,UAAK,MAAM,CAAC,KAAK,UAAU,SAAS;AAClC,UAAI,OAAO,IAAI,IAAI,CAAE,OAAM,IAAI,UAAU,4BAA4B;AACrE,aAAO,IAAI,KAAK,MAAM;AACtB,YAAM,KAAK,IAAI;;AAEjB,qBAAgB;;IAEnB;GACD,MAAM,QAAQ;IAAE;IAAS,UAAU,KAAK,MAAM;IAAE,MAAM,KAAK,KAAK;IAAE;IAAQ;AAC1E,OAAI,SAAS,CAAC,UAAU;AACtB,kBAAA,QAAQ,aAAa,SAAS;AAC9B,eAAW,KAAA;AACX,cAAU;IACV,MAAM,QAAQ,KAAK,MAAM,MAAM;AAC/B,sBAAkB,MAAM;AACxB,eAAW;UACN;AACL,kBAAA,QAAQ,aAAa,SAAS;IAC9B,MAAM,SAAS,SAAS,OAAO,MAAM;AACrC,sBAAkB,OAAO;AACzB,QAAI,QAAQ,SAAS,WAAW;AAC9B,YAAO,OAAO;AACd,eAAU;AACV,qBAAgB,KAAA;AAChB,gBAAW,KAAA;KACX,MAAM,QAAQ,KAAK,MAAM,MAAM;AAC/B,uBAAkB,MAAM;AACxB,gBAAW;AACX,aAAQ;;;AAGZ,OAAI;SACG,MAAM,OAAO,OAAO,MAAM,CAAE,KAAI,CAAC,OAAO,IAAI,IAAI,CAAE,QAAO,IAAI,KAAK,EAAE,SAAS,OAAO,CAAC;;GAC5F,MAAM,wBAAQ,IAAI,KAAQ;GAC1B,MAAM,0BAAU,IAAI,KAAQ;GAC5B,MAAM,0BAAU,IAAI,KAAQ;AAC5B,iBAAA,QAAQ,WAAW,eAAe,OAAO,KAAK;AAC9C,QAAK,MAAM,CAAC,KAAK,UAAU,QAAQ;IACjC,MAAM,UAAU,OAAO,IAAI,IAAI;AAC/B,QAAI,MAAM,QACR,KAAI,CAAC,QAAS,OAAM,IAAI,IAAI;aACnB,EAAE,KAAK,WAAW,OAAO,IAAI,OAAO,IAAI,IAAI,EAAO,MAAM,MAAM,CACtE,SAAQ,IAAI,IAAI;QACb,QAAO,OAAO,IAAI;aACd,QAAS,SAAQ,IAAI,IAAI;QAC/B,QAAO,OAAO,IAAI;;AAEzB,OAAI,iBAAiB,MAAM,QAAQ,QAAQ,MAAM;IAC/C,MAAM,QAAQ,iBAAiB,CAAC,GAAG,IAAI,QAAO,QAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,EAAE,GAAG,MAAM;AAElF,QACE,IAFe,IAAI,MAEf,CAAC,SAAS,MAAM,UACpB,MAAM,WAAW,OAAO,OAAO,MAAM,OAAO,QAAQ,QACpD,MAAM,MAAK,QAAO,CAAC,QAAQ,IAAI,CAAC,CAEhC,OAAM,IAAI,UAAU,wDAAwD;AAC9E,cACE,IAAI,WAAW,MAAM,UAAU,IAAI,OAAO,KAAK,MAAM,QAAQ,MAAM,GAAG,GAClE,MACA,OAAO,OAAO,MAAM,OAAO,CAAC;;AAEpC,kBAAe,YAAY;AAC3B,OAAI,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,cAAc;IAC9D,IAAI,qBAAqB;AACzB,QAAI,cAAc;KAChB,MAAM,SAAS,IAAI,QAAO,QAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;KACnD,MAAM,QAAQ,QAAQ,QAAO,QAAO,CAAC,MAAM,IAAI,IAAI,CAAC;AACpD,0BAAqB,OAAO,MAAM,KAAK,MAAM,MAAM,OAAO,IAAI;;AAEhE,aAAS,OAAO,OAAO;KACrB,MAAM;KACN,OAAO,YAAY,MAAM;KACzB,SAAS,YAAY,QAAQ;KAC7B,SAAS,YAAY,QAAQ;KAC7B,cAAc;KACf,CAAC;AACF;KAAC,GAAG;KAAO,GAAG;KAAS,GAAG;KAAQ,CAAC,SAAQ,QAAO,YAAY,IAAI,IAAI,CAAC;AACvE,kBAAA,QAAQ,WAAW,eAAe,YAAY,KAAK;;AAErD,WAAQ;AACR,UAAO,WAAW,KAAA;;EAEpB,UAAS,WAAU;GACjB,MAAM,QAA+B;IACnC,MAAK,QAAO;AACV,iBAAY,OAAO;AACnB,YAAO,QAAQ,IAAI;;IAErB,MAAK,QAAO;AACV,iBAAY,OAAO;AACnB,YAAO,QAAQ,IAAI;;IAErB,WAAW;AACT,iBAAY,OAAO;AACnB,YAAO;;IAET;IACA,UAAU,YAAY,SAAS,IAAI;IACnC;IACD;AACD,UAAO,OAAO,OAAO,MAAM;;EAE7B,gBAAgB;EAChB,aAAa;EACb,eAAe;AACb,QAAK,MAAM,CAAC,KAAK,UAAU,OACzB,KAAI,MAAM,QAAS,QAAO,IAAI,KAAK,MAAM,MAAM;OAC1C,QAAO,OAAO,IAAI;AAEzB,OAAI,QAAQ;AACV,QAAI,YAAa;AACjB,QAAI,gBAAgB,YAAa;AACjC,UAAM,KAAA;AACN,gBAAY,SAAQ,QAAO;KACzB,MAAM,OAAO,MAAM,IAAI,IAAI;AAC3B,SAAI,QAAQ,YAAa,MAAK;MAC9B;;AAEJ,SAAM;AACN,iBAAc;;EAEhB,OAAM,SAAQ;AACZ,iBAAA,QAAQ,aAAa,cAAc;GACnC,MAAM,QAAQ,MAAM,KAAK,UAAU,KAAA;GACnC,MAAM,aAAa,OAAO,OAAO,EAAE,MAAM,SAAkB,CAAC;AAC5D,SAAM,KAAK,UAAU,CAAC,SAAQ,aAAY,WAAW,SAAS,UAAU,WAAW,CAAC,CAAC;AACrF,OAAI,gBAAgB,CAAC,UAAU,SAAS,MAAM,KAAK,cACjD,OAAM,KAAK,aAAa,CAAC,SAAQ,aAAY,KAAK,SAAS,CAAC;AAC9D,SAAM,KAAK,aAAa,CAAC,SAAQ,aAAY,KAAK,SAAS,CAAC;AAC5D,OAAI,CAAC,UAAU,SAAS,MAAM,KAAK,cACjC,MAAK,MAAM,QAAQ,gBACjB,OAAM,KAAK,KAAK,aAAa,EAAE,CAAC,CAAC,SAAQ,aAAY,KAAK,SAAS,CAAC;OAEtE,MAAK,MAAM,OAAO,YAChB,OAAM,KAAK,MAAM,IAAI,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,SAAQ,aAAY,KAAK,SAAS,CAAC;;EAGrF,aAAa;AACX,UAAO,OAAO;AACd,aAAU;AACV,YAAS,KAAA;AACT,WAAQ;AACR,eAAY,OAAO;AACnB,kBAAe;;EAEjB,eAAe;AACb,UAAO,OAAO;AACd,UAAO,OAAO;AACd,SAAM,OAAO;AACb,mBAAgB,OAAO;AACvB,gBAAa,OAAO;AACpB,gBAAa,OAAO;AACpB,aAAU,OAAO;AACjB,SAAM,UAAU,OAAO,OAAO,EAAE,CAAC;AACjC,SAAM,KAAA;AACN,cAAW,KAAA;;EAEd,CAAC;CACF,MAAM,SAAS;EACb,eAAe;AACb,SAAM,OAAO;AACb,UAAO;;EAET,KAAK;GACH,eAAe;AACb,UAAM,OAAO;AACb,WAAO;;GAET,gBAAgB;AACd,UAAM,OAAO;AACb,WAAO;;GAET,YAAY,aAAyB;AACnC,UAAM,OAAO;AACb,iBAAa,IAAI,SAAS;AAC1B,iBAAa;AACX,kBAAa,OAAO,SAAS;;;GAGlC;EACD,KAAK;GACH,eAAe;AACb,UAAM,OAAO;AACb,QAAI,CAAC,KAAK;AACR,mBAAA,QAAQ,eAAe,aAAa;AACpC,WAAM,OAAO,OAAO,IAAI,KAAI,QAAO,OAAO,IAAI,IAAI,CAAM,CAAC;;AAE3D,WAAO;;GAET,gBAAgB;AACd,UAAM,OAAO;AACb,WAAO;;GAET,YAAY,aAAyB;AACnC,UAAM,OAAO;AACb,iBAAa,IAAI,SAAS;AAC1B,iBAAa;AACX,kBAAa,OAAO,SAAS;;;GAGlC;EACD,OAAO,QAAW;AAChB,SAAM,OAAO;GACb,MAAM,MAAM,MAAM,IAAI,IAAI;AAC1B,OAAI,IAAK,QAAO,IAAI;GACpB,MAAM,WAAoC,OAAO,OAAO;IACtD,eAAe;AACb,WAAM,OAAO;AACb,YAAO,OAAO,IAAI,IAAI;;IAExB,gBAAgB;AACd,WAAM,OAAO;AACb,YAAO,KAAK;;IAEd,YAAY,aAAyB;AACnC,WAAM,OAAO;KACb,MAAM,MAAO,KAAK,8BAAc,IAAI,KAAK;AACzC,SAAI,IAAI,SAAS;AACjB,qBAAgB,IAAI,KAAK;AACzB,kBAAa;AACX,UAAI,OAAO,SAAS;AACpB,UAAI,CAAC,IAAI,KAAM,iBAAgB,OAAO,KAAK;;;IAGhD,CAAC;GACF,MAAM,OAAa;IAAE;IAAU,UAAU;IAAG;AAC5C,qBAAkB,IAAI,SAAS;AAC/B,SAAM,IAAI,KAAK,KAAK;AACpB,UAAO;;EAET,gBAAgB;AACd,SAAM,OAAO;AACb,UAAO;;EAET,YAAY,aAAoD;AAC9D,SAAM,OAAO;AACb,aAAU,IAAI,SAAS;AACvB,gBAAa;AACX,cAAU,OAAO,SAAS;;;EAG9B,SAAS,MAAM;EACf,SAAS,MAAM;EAChB;AACD,mBAAkB,IAAI,OAAO,IAAI;AACjC,mBAAkB,IAAI,OAAO,IAAI;AACjC,mBAAkB,IAAI,OAAO;AAC7B,OAAM,QAAQ,OAAO;AACrB,QAAO,OAAO,OAAO,OAAO;;;;AChX9B,MAAa,iBAAiB,cAAyB;CACrD,MAAM,4BAAY,IAAI,KAAqB;CAC3C,MAAM,4BAAY,IAAI,KASnB;CACH,MAAM,8BAAc,IAAI,SAAiB;CACzC,MAAM,YAAkC,YAAoD;AAC1F,YAAU,YAAY;EACtB,MAAM,QAAQ,SAAS,QAAQ;AAC/B,MAAI,MAAM,SAAU,OAAM,IAAI,MAAM,8BAA8B;EAClE,MAAM,WAAW,UAAU,IAAI,MAAM;AACrC,MAAI,SAAU,QAAO;EACrB,MAAM,WAKA,EAAE;EACR,MAAM,QACJ,UAEW;GACX,MAAM,aAAa,gBAAgB,QAAQ,MAAM,aAAa,KAAA;GAC9D,MAAM,UAAU,aAAa,QAAQ,MAAM,UAAU,CAAC,MAAM,WAAW;AACvE,OAAI,MAAM,SAAU,OAAM,IAAI,MAAM,8BAA8B;AAClE,WAAQ,SAAQ,UAAS;AACvB,QAAI,CAACC,QAAe,OAAO,MAAM,OAAO,CACtC,OAAM,IAAI,MAAM,+CAA+C;KACjE;GACF,MAAM,MAAM,SAAS,MACnB,UACE,QAAQ,WAAW,KAAK,YAAY,IAAI,MAAM,OAAO,IACrD,MAAM,QAAQ,WAAW,QAAQ,UACjC,MAAM,QAAQ,OAAO,OAAO,MAAMC,KAAY,OAAO,QAAQ,GAAG,CAAC,CACpE;AACD,OAAI,IAAK,QAAO,IAAI;GACpB,IAAI,UAA+B,EAAE;GACrC,IAAI,QAAQ;GACZ,IAAI,aAAa;GACjB,MAAM,uBAAO,IAAI,KAAa;GAC9B,IAAI;GAEJ,MAAM,SAAuB;IAC3B,2BAAW,IAAI,KAAK;IACpB,UAAU;IACV,OAAO,KAAA;IACP,UAAU,QAAQ;IAClB,aAAa;IACb,aAAa;AACX,eAAU,EAAE;AACZ,aAAQ,aAAa;AACrB,UAAK,OAAO;AACZ,kBAAa,KAAA;;IAEf,UAAS,WAAU;AACjB,iBAAY,OAAO;AACnB,SAAI,MAAM,SAAU,OAAM,IAAI,MAAM,8BAA8B;KAClE,MAAM,UAAU;MAAE;MAAO;MAAQ;KACjC,MAAM,OAAO,aACT,iBAAiB,SAAS,WAAW,QAAQ,GAC7C,aAAa,QAAQ;AACzB,YAAO,OAAO,OAAO;MACnB;MACA,UAAU,QAAQ,UAAU;MAC5B,SAAS,OAAO,OAAO,QAAQ,OAAO,CAAC;MACvC,OAAO,OAAO,OAAO;MACrB,GAAI,aACA,EACE,YAAa,eAAe,OAAO,OAAO;OACxC,MAAM,OAAO,OAAO,CAAC,GAAG,KAAK,CAAC;OAC9B;OACD,CAAC,EACH,GACD,EAAE;MACP,CAAC;;IAEL;GACD,MAAM,SAAS,aACX,EAAE,GACF;IACE,aAAa,SAAsB;AACjC,eAAU,YAAY;AAMtB,YAAO,KAAK,EAAE,YALG,YACf,MAAM,QACN,cACA,KAEgC,EAAE,CAAC;;IAEvC,UAAU,GAAG,aAA4B;AACvC,eAAU,YAAY;AACtB,SAAI,CAAC,SAAS,OAAQ,OAAM,IAAI,UAAU,gCAAgC;AAC1E,YAAO,KAAK,EACV,SAAS,SAAS,KAAI,SAAQ,YAAwB,MAAM,QAAQ,SAAS,KAAK,CAAC,EACpF,CAAC;;IAEL;AACL,UAAO,OAAO,OAAO;AACrB,OAAI,WAAY,aAAY,IAAI,OAAO;AACvC,aAAU,SAAS,QAAQ,OAAO;GAElC,MAAM,WAAW,WAA8B;AAC7C,YAAQ,KAAK,OAAO;AACpB,cAAU,OAAO,OAAO,SAAS;AACjC,QAAI,YAAY;KACd,MAAM,SAAS,iBAAiB,OAAO,QAAQ,WAAW;AAC1D,SAAI,OAAO,SAAS,QAAS,SAAQ;UAChC;AACH,aAAO,MAAM,SAAQ,QAAO,KAAK,IAAI,IAAI,CAAC;AAC1C,aAAO,QAAQ,SAAQ,QAAO,KAAK,IAAI,IAAI,CAAC;AAC5C,aAAO,QAAQ,SAAQ,QAAO,KAAK,IAAI,IAAI,CAAC;AAC5C,qBAAe,QAAQ,OAAO,MAAM,QAAQ,OAAO,QAAQ,QAAQ,OAAO,aAAa;;AAEzF,kBAAa,KAAA;;;AAGjB,YAAS,KAAK;IAAE;IAAQ;IAAS;IAAQ;IAAS,CAAC;AACnD,UAAO;;EAET,MAAM,SAAS,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC;EACpC,MAAM,SAAS,WAAoB;AACjC,SAAM,mBAAmB,MAAM,mBAAmB,MAAM,SAAS,IAAI;;AAEvE,YAAU,OAAO,IAAI,MAAM;EAC3B,MAAM,cAAc,iBAAiB,SAAS;GAC5C,UAAS,WAAU;AACjB,SAAK,MAAM,WAAW,SACpB,KACE,CAAC,QAAQ,QAAQ,UACjB,QAAQ,QAAQ,MAAK,UAAS,cAAc,OAAO,QAAQ,MAAM,CAAC,EAClE;AACA,aAAQ,QAAQ,OAAO;AACvB,eAAU,QAAQ,QAAQ,OAAO;;;GAIvC,QAAQ,UAAU;GAClB,OAAO,UAAU;GACjB,eAAe;AACb,aAAS,SAAS,EAAE,aAAa;AAC/B,YAAO,QAAQ,IAAI,gBACjB,UACA,qBACA,CAAC,QAAQ,UAAU,CAAC,kBACpB,IAAI,MAAM,8BAA8B,CACzC;AACD,eAAU,QAAQ,OAAO;MACzB;AACF,cAAU,KAAK;;GAElB,CAAC;AACF,YAAU,SAAS,UAAU;AAC3B,gBAAa;AACb,aAAU,OAAO,OAAO,MAAM;IAC9B;AACF,YAAU,IAAI,OAAO,OAAO;AAC5B,SAAO;;CAET,MAAM,eAAkB,SAAY,UAAmC;EACrE,IAAI,QAAQ;EACZ,IAAI,WAAW;EACf,IAAI,WAAW;EACf,MAAM,SAAS,OAAO,OAAO,EAAE,CAAC;EAChC,MAAM,SAAuB;GAC3B,2BAAW,IAAI,KAAK;GACpB,UAAU;GACV,OAAO,KAAA;GACP,gBAAgB;GAChB,aAAa;GACb,aAAa;AACX,eAAW;;GAEb,UAAS,WAAU;AACjB,gBAAY,OAAO;AACnB,WAAO,OAAO,OAAO;KACnB;KACA;KACA;KACA,SAAS,CAAC,MAAM,UAAU,MAAM;KAChC,OAAO;KACR,CAAC;;GAEL;AACD,YAAU,SAAS,QAAQ,OAAO;EAClC,MAAM,UAAU,SAAY;AAC1B,aAAU,YAAY;GACtB,MAAM,aAAa,OAAO,UAAU,KAAA;AACpC,OAAI,MAAM,OAAO,KAAK,IAAI,CAAC,WAAY;AACvC,UAAO,QAAQ,KAAA;AACf,WAAQ;AACR;AACA,aAAU,QAAQ,OAAO;;AAE3B,SAAO;GACL,QAAQ;GACR;GACA,IAAI,MAAS;AACX,WAAO,KAAK;AACZ,cAAU,KAAK;;GAElB;;AAEH,QAAO;EACL,eAAe;AACb,aAAU,OAAO;AACjB,aAAU,OAAO;;EAEnB;EACA,QAAW,SAAY,YAA6D;GAClF,MAAM,EAAE,QAAQ,QAAQ,YAAY,SAAS,SAAS,WAAW,OAAO,GAAG;AAC3E,UAAO,OAAO,OAAO;IAAE;IAAQ;IAAK,CAAC;;EAEvC,eACE,UACA,YACgC;AAChC,aAAU,YAAY;AACtB,OAAI,kBAAkB,IAAI,SAAS,CACjC,OAAM,IAAI,MAAM,yDAAyD;GAC3E,MAAM,QAAQ,SAAS,WAAW,OAAO;GACzC,IAAI,WAAW,UAAU,IAAI,SAAS;GACtC,MAAM,MAAM,UAAU,IAAI,MAAM;AAChC,OAAI,IAAK,QAAO,IAAI;GACpB,MAAM,QAAQ,YAAY,SAAS,SAAS,EAAE,MAAM;AACpD,OAAI,UAAU;AACZ,aAAS,IAAI,OAAO;KAAE,QAAQ,MAAM;KAAQ,SAAQ,UAAS,MAAM,OAAO,MAAW;KAAE,CAAC;AACxF,WAAO,MAAM;;AAEf,cAAW,IAAI,IAAI,CACjB,CAAC,OAAO;IAAE,QAAQ,MAAM;IAAQ,SAAS,UAAmB,MAAM,OAAO,MAAW;IAAE,CAAC,CACxF,CAAC;GACF,MAAM,UAAU;GAChB,MAAM,WAAW,SAAS,SAAS;AACjC,QAAI,CAAC,UAAU,OAAQ;IACvB,IAAI;AACJ,QAAI;AACF,aAAQ,SAAS,SAAS;aACnB,OAAO;AACd,UAAK,MAAM,UAAU,QAAQ,QAAQ,EAAE;MACrC,MAAM,SAAS,UAAU,OAAO,OAAO,OAAO;AAC9C,aAAO,QAAQ,IAAI,gBACjB,UACA,qBACA,CAAC,OAAO,UAAU,CAAC,EACnB,MACD;AACD,gBAAU,QAAQ,OAAO;;AAE3B,SAAI,OAAQ,WAAU,KAAK;AAC3B;;AAEF,SAAK,MAAM,UAAU,QAAQ,QAAQ,CACnC,KAAI;AACF,YAAO,OAAO,MAAM;aACb,OAAO;KACd,MAAM,SAAS,UAAU,OAAO,OAAO,OAAO;AAC9C,YAAO,QAAQ,IAAI,gBACjB,UACA,qBACA,CAAC,OAAO,UAAU,CAAC,EACnB,MACD;AACD,eAAU,QAAQ,OAAO;;AAG7B,QAAI,OAAQ,WAAU,KAAK;;GAE7B,IAAI;GACJ,IAAI;AACJ,OAAI;IACF,MAAM,QAAQ,sBAAsB,SAAS;AAC7C,QAAI,OAAO;AACT,cAAS,MAAM;AACf,cAAS,iBAAiB,OAAO;MAC/B,eAAe,QAAQ,MAAM;MAC7B,QAAQ,UAAU;MAClB,OAAO,UAAU;MACjB,eAAe;AACb,YAAK,MAAM,UAAU,QAAQ,QAAQ,EAAE;QACrC,MAAM,SAAS,UAAU,OAAO,OAAO,OAAO;AAC9C,eAAO,QAAQ,IAAI,gBACjB,UACA,8BACA,CAAC,OAAO,UAAU,CAAC,kBACnB,IAAI,MAAM,8BAA8B,CACzC;AACD,kBAAU,QAAQ,OAAO;;AAE3B,iBAAU,KAAK;;MAElB,CAAC;;AAEJ,kBAAc,SAAS,gBAAgB,SAAS,CAAC;AACjD,UAAM,OAAO,SAAS,SAAS,CAAC;YACzB,OAAO;AACd,QAAI;AACF,oBAAe;AACf,eAAU;cACF;AACR,eAAU,iBAAiB,MAAM,OAAO;;AAE1C,UAAM;;AAER,aAAU,SAAS,IAAI,YAAY;AACnC,OAAI,OAAQ,WAAU,SAAS,IAAI,OAAO;AAC1C,aAAU,IAAI,UAAU,SAAS;AACjC,aAAU,KAAK;AACf,UAAO,MAAM;;EAEf,mBAAmB,WAAmB;AACpC,aAAU,OAAO,OAAO;AACxB,OAAI,CAAC,YAAY,IAAI,OAAO,IAAI,CAAC,kBAAkB,IAAI,OAAO,CAC5D,OAAM,IAAI,MAAM,oCAAoC;;EAEzD;;;;AC1UH,MAAa,eACX,WACA,MACA,YACyB;CACzB,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI,cAAc;CAClB,IAAI,WAAW;CACf,IAAI,UAAU;CACd,IAAI,QAAQ;CACZ,MAAM,4BAAY,IAAI,KAAiB;CACvC,MAAM,QAAQ,WAAW,WAAW,MAAM;EACxC,WAAW,SAAS,UAAU;GAC5B,IAAI;AACJ,OAAI,SAAS,CAAC,UAAU;AACtB,kBAAA,QAAQ,aAAa,SAAS;AAC9B,eAAW,KAAA;IACX,MAAM,QAAQ,KAAK,MAAM,QAAQ;AACjC,sBAAkB,MAAM;AACxB,eAAW;AACX,gBAAY,MAAM;UACb;AACL,kBAAA,QAAQ,aAAa,SAAS;IAC9B,MAAM,SAAS,SAAS,OAAO,QAAQ;AACvC,sBAAkB,OAAO;AACzB,QAAI,OAAO,SAAS,WAAW;AAC7B,gBAAW,KAAA;KACX,MAAM,QAAQ,KAAK,MAAM,QAAQ;AACjC,uBAAkB,MAAM;AACxB,gBAAW;AACX,iBAAY,MAAM;AAClB,aAAQ;UACH,aAAY,OAAO,SAAS,YAAY,OAAO,QAAQ;;AAEhE,cAAW;AACX,aAAU,CAAC,eAAe,EAAE,SAAS,WAAW,OAAO,IAAI,OAAO,UAAU;AAC5E,UAAO,UAAU,YAAY;AAC7B,WAAQ;AACR,UAAO;;EAET,UAAS,WAAU;AACjB,eAAY,OAAO;AACnB,UAAO,OAAO,OAAO;IACnB,OAAO;IACP;IACA;IACA,UAAU,YAAY,UAAU,IAAI;IACpC;IACD,CAAC;;EAEJ,gBAAgB;EAChB,aAAa;EACb,eAAe;AACb,OAAI,WAAW,YAAa;AAC5B,WAAQ;AACR,iBAAc;;EAEhB,OAAM,SAAQ;AACZ,iBAAA,QAAQ,aAAa,cAAc;AACnC,SAAM,KAAK,UAAU,CAAC,SAAQ,aAAY,KAAK,SAAS,CAAC;;EAE3D,aAAa;AACX,UAAO;AACP,cAAW;AACX,aAAU;AACV,WAAQ;;EAEV,eAAe;AACb,aAAU,OAAO;AACjB,cAAW,KAAA;AACX,WAAQ,OAAO,WAAW,KAAA;;EAE7B,CAAC;CACF,MAAM,SAAS,OAAO,OAAO;EAC3B,eAAe;AACb,SAAM,OAAO;AACb,UAAO;;EAET,gBAAgB;AACd,SAAM,OAAO;AACb,UAAO;;EAET,YAAY,aAAyB;AACnC,SAAM,OAAO;AACb,aAAU,IAAI,SAAS;AACvB,gBAAa;AACX,cAAU,OAAO,SAAS;;;EAG9B,SAAS,MAAM;EACf,SAAS,MAAM;EAChB,CAAC;AACF,OAAM,QAAQ,OAAO;AACrB,QAAO;;;;ACnFT,MAAM,wBAAQ,IAAI,SAGf;AACH,MAAa,yBAAyB,YAA8B;CAClE,MAAM,OAAO,MAAM,IAAI,QAAQ;AAC/B,KAAI,CAAC,KAAM,OAAM,IAAI,MAAM,6BAA6B;AACxD,QAAO,OAAO,OAAO,MAAM,CAAC;;AAE9B,MAAa,0BAA0B,YAEf;CACtB,MAAM,YAAY,gBAAgB,QAAQ,QAAQ;CAClD,MAAM,UAAU,cAAc,UAAU;CAUxC,SAAS,MACP,OACA,kBAEA,SACsB;AACtB,MAAI,OAAO,qBAAqB,WAC9B,QAAO,YAAY,WAAW,OAAgC,iBAAiB;EACjF,MAAM,WAAW,UAA2B;GAC1C,MAAM,SAAS,iBAAiB,MAAM;AACtC,qBAAkB,OAAO;AACzB,UAAO;;AAET,SAAO,YACL,WACA;GACE,SAAS;GACT,QAAO,WAAU;IACf,OAAO,QAAQ,MAAM;IACrB,SAAQ,WAAU;KAAE,MAAM;KAAW,OAAO,QAAQ,MAAM;KAAE;IAC7D;GACF,EACD,QACD;;CAEH,MAAM,OACJ,QAQA,QACA,YACG;AACH,UAAQ,iBAAiB,OAAO;EAChC,MAAM,aAAa,IAAO,UAAgB;GACxC,MAAM,QAAQ,OAAO,IAAI,MAAM;AAC/B,qBAAkB,MAAM;AACxB,UAAO;;AAET,SAAO,iBAAiB,WAAW;GACjC,SAAS,EAAE,QAAQ;GACnB,SAAS,SAAS;GAClB,QAAQ,EAAE,SAAS,aAAa;IAC9B,MAAM,QAAQ,QAAQ;IACtB,MAAM,OAAO,UAAU,QAAQ,MAAM,OAAO;IAC5C,MAAM,MAAM,KAAK,KAAK;AACtB,kBAAA,QAAQ,eAAe,WAAW,IAAI,OAAO;AAC7C,SAAK,MAAM,MAAM,KAAK;AACpB,mBAAA,QAAQ,eAAe,QAAQ;AAC/B,YAAO,IAAI,IAAI,UAAU,IAAI,KAAK,IAAI,GAAG,CAAE,CAAC;;AAE9C,WAAO,MAAM,IAAI;AACjB,WAAO,EACL,SAAS,EAAE,SAAS,aAAa;KAC/B,MAAM,QAAQ,QAAQ;AACtB,SAAI,MAAM,MAAO,QAAO,EAAE,MAAM,WAAW;KAC3C,MAAM,OAAO,UAAU,QAAQ,MAAM,OAAO;KAC5C,IAAI;KACJ,IAAI;AACJ,SAAI,gBAAgB,OAAO;AACzB,aAAO,MAAM,WAAW;AACxB,mBAAa,MAAM,WAAW;YACzB;MACL,MAAM,SAAS,MAAM;AACrB,UAAI,CAAC,OAAQ;AACb,UAAI,OAAO,SAAS,QAAS,QAAO,EAAE,MAAM,WAAW;AACvD,aAAO,IAAI,IAAI;OAAC,GAAG,OAAO;OAAO,GAAG,OAAO;OAAS,GAAG,OAAO;OAAQ,CAAC;AACvE,mBAAa,QAAQ,OAAO,MAAM,QAAQ,OAAO,QAAQ,QAAQ,OAAO,aAAa;;AAEvF,UAAK,MAAM,OAAO,KAChB,KAAI,CAAC,KAAK,IAAI,IAAI,CAAE,QAAO,OAAO,IAAI;UACjC;AACH,oBAAA,QAAQ,eAAe,QAAQ;AAC/B,aAAO,IAAI,KAAK,UAAU,KAAK,KAAK,IAAI,IAAI,CAAE,CAAC;;AAGnD,SAAI,YAAY;MACd,MAAM,MAAM,KAAK,KAAK;AACtB,oBAAA,QAAQ,eAAe,WAAW,IAAI,OAAO;AAC7C,aAAO,MAAM,IAAI;;OAGtB;;GAEJ,CAAC;;CAEJ,MAAM,UAA4B;EAChC,UAAU,QAAQ;EAClB,OAAO,QAAQ;EACf,cAAc,QAAQ;EACtB;EACA,mBAAkB,SAAQ,iBAAiB,WAAW,KAAK;EAC3D;EACA,OAAO,UAAU;EACjB,eAAe;AACb,OAAI;AACF,cAAU,SAAS;aACX;AACR,QAAI,CAAC,UAAU,OAAQ,SAAQ,SAAS;;;EAG7C;AACD,OAAM,IAAI,SAAS,UAAU,MAAM;AACnC,QAAO,OAAO,OAAO,QAAQ;;;;AC5G/B,MAAM,yBAAS,IAAI,SAAmC;AACtD,MAAa,wBAAwB,UAA2B;CAC9D,MAAM,UAAU,OAAO,IAAI,MAAM;AACjC,KAAI,CAAC,QAAS,OAAM,IAAI,MAAM,4BAA4B;AAC1D,QAAO,sBAAsB,QAAQ;;AAGvC,MAAa,yBAAyB,YAEf;CACrB,MAAM,UAAU,uBAAuB,QAAQ;CAC/C,MAAM,4BAAY,IAAI,SAA+B;CACrD,MAAM,yBAAS,IAAI,SAAyE;CAC5F,MAAM,eACJ,eACiB;EACjB,MAAM,MAAM,UAAU,IAAI,WAAW;AACrC,MAAI,IAAK,QAAO;EAChB,MAAM,aAAa,aAAa,WAAW;EAC3C,IAAI;AACJ,MAAI,WAAW,SAAS,SAAS;GAC/B,MAAM,QAAQ,QAAQ,MAAM,WAAW,SAAS,EAAE,SAAS,WAAW,SAAkB,CAAC;AACzF,UAAO,IAAI,YAAY,MAAM;AAC7B,cAAW,QAAQ,MAAM,EAAE,OAAO,MAAM,QAAQ,GAAG,EAAE,YAAY,MAAM,MAAM;aACpE,WAAW,SAAS,YAAY;GACzC,MAAM,SAAS,QAAQ,aAAa,WAAW,UAAU,EACvD,SAAS,WAAW,SACrB,CAAC;AACF,cAAW,QAAQ,MAAM,EAAE,QAAQ,GAAG,EAAE,aAAa,OAAO,MAAM;aACzD,WAAW,SAAS,YAAY;GACzC,MAAM,WAAW,QAAQ,SAAS,WAAW,SAAS;AACtD,cAAW,WAAW,SAAS,SAC3B,SAAS,QAAQ,GAAI,WAAW,QAAgC,GAChE;aACK,WAAW,SAAS,sBAC7B,YAAW,QAAQ,SAAS,WAAW,SAAS,CAAC,WAAW,WAAW,KAAc;WAC9E,WAAW,SAAS,MAC3B,YAAW,QAAQ,IAAI,YAAY,WAAW,OAAO,EAAW,WAAW,QAAiB,EAC1F,SAAS,WAAW,SACrB,CAAC;OACC;GACH,MAAM,UAAU,OAAO,YACrB,OAAO,QAAQ,WAAW,QAAQ,CAAC,KAAK,CAAC,KAAK,YAAY,CAAC,KAAK,YAAY,OAAO,CAAC,CAAC,CACtF;AACD,OAAI,WAAW,SAAS,QACtB,YAAW,QAAQ,MACjB,UACC,WAAoC;IACnC,MAAM,SAAS,OAAO,YACpB,OAAO,QAAQ,OAAO,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,QAAQ,MAAM,CAAC,CAAC,CACpE;AACD,WAAO,WAAW,QAAQ,OAAgB;MAE5C,EAAE,SAAS,WAAW,SAAkB,CACzC;YACQ,WAAW,SAAS,iBAC7B,YAAW,QAAQ,MACjB;IAAW;IAAkB,OAAO,WAAW;IAAgB,MAAM,WAAW;IAAM,EACtF,EAAE,SAAS,WAAW,SAAkB,CACzC;OAED,YAAW,QAAQ,YAAqB,CAAC;IAC9B;IACT,OAAO,WAAW;IAClB,SAAS,WAAW;IACpB,MAAM,WAAW;IAClB,CAAC;;AAEN,YAAU,IAAI,YAAY,SAAS;AACnC,SAAO;;CAET,MAAM,WAAW,UAA4B;AAC3C,MAAI,SAAS,OAAO,UAAU,UAAU;AACtC,OAAI,WAAW,MAAO,QAAQ,MAA6B;AAC3D,OAAI,UAAU,MAAO,QAAQ,MAA4B;;AAE3D,SAAO;;CAET,MAAM,QAAyB;EAC7B,OAAO,eAAgF;GACrF,MAAM,WAAW,YAAY,WAAW;AACxC,OAAI,aAAa,YAAY,OAAO,SAAS,YAAY,WACvD,QAAO,SAAS,SAAS;AAC3B,SAAM,IAAI,UAAU,qDAAqD;;EAE3E,QAAQ,YAAY,QAAQ;GAC1B,MAAM,WAAW,YAAY,WAAW;AACxC,OAAI,EAAE,UAAU,aAAa,OAAO,SAAS,SAAS,WACpD,OAAM,IAAI,UAAU,+CAA+C;AACrE,UAAO,SAAS,KAAK,IAAI;;EAE3B,MAAM,YAAY,UAAU;AAC1B,eAAY,WAAW;GACvB,MAAM,SAAS,OAAO,IAAI,WAAW;AACrC,OAAI,CAAC,OAAQ,OAAM,IAAI,UAAU,8BAA8B;AAC/D,UAAO,IAAI,MAAM;;EAEnB,aACE,YACA,aACG;GACH,MAAM,WAAW,YAAY,WAAW;AACxC,OAAI,EAAE,eAAe,UACnB,OAAM,IAAI,UAAU,mDAAmD;AACzE,UAAO,SAAS,UAAU,SAAkB;;EAE9C,WAAU,eAAc;GACtB,MAAM,WAAW,YAAY,WAAW;AACxC,OAAI,EAAE,cAAc,aAAa,OAAO,SAAS,aAAa,WAC5D,OAAM,IAAI,UAAU,wCAAwC;AAC9D,UAAO,SAAS,UAAU;;EAE5B,UAAS,eAAc;GACrB,MAAM,WAAW,YAAY,WAAW;AACxC,OAAI,EAAE,aAAa,aAAa,OAAO,SAAS,YAAY,WAC1D,OAAM,IAAI,UAAU,gCAAgC;AACtD,YAAS,SAAS;;EAEpB,UAAS,eAAc;GACrB,MAAM,WAAW,UAAU,IAAI,WAAW;AAC1C,OAAI,CAAC,SAAU;AACf,OAAI,aAAa,YAAY,OAAO,SAAS,YAAY,WAAY,UAAS,SAAS;AACvF,aAAU,OAAO,WAAW;AAC5B,UAAO,OAAO,WAAW;;EAE3B,OAAO,QAAQ;EACf,SAAS,QAAQ;EAClB;AACD,QAAO,IAAI,OAAO,QAAQ;AAC1B,QAAO,OAAO,OAAO,MAAM"}