doxum 0.1.13 → 0.1.14

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 (41) hide show
  1. package/README.md +4 -0
  2. package/dist/advanced.cjs +1 -1
  3. package/dist/advanced.d.cts +1 -1
  4. package/dist/advanced.d.ts +1 -1
  5. package/dist/advanced.js +1 -1
  6. package/dist/{definition-177L4Amk.cjs → definition-BDW6i7fp.cjs} +8 -20
  7. package/dist/{definition-177L4Amk.cjs.map → definition-BDW6i7fp.cjs.map} +1 -1
  8. package/dist/{definition-kxnWUvX9.d.cts → definition-DN6yW2vi.d.cts} +37 -36
  9. package/dist/{definition-BlMeHwdz.d.ts → definition-Dr8tHwTD.d.ts} +37 -36
  10. package/dist/{definition-DXrKMVs7.js → definition-wOvuklwp.js} +9 -3
  11. package/dist/{definition-DXrKMVs7.js.map → definition-wOvuklwp.js.map} +1 -1
  12. package/dist/index.cjs +2 -2
  13. package/dist/index.d.cts +3 -3
  14. package/dist/index.d.ts +3 -3
  15. package/dist/index.js +2 -2
  16. package/dist/integration-WniqaEPW.cjs +30 -0
  17. package/dist/integration-WniqaEPW.cjs.map +1 -0
  18. package/dist/{integration-Bco8ZB16.js → integration-zB8e-uNP.js} +3 -7
  19. package/dist/integration-zB8e-uNP.js.map +1 -0
  20. package/dist/integration.cjs +2 -5
  21. package/dist/integration.d.cts +3 -7
  22. package/dist/integration.d.ts +3 -7
  23. package/dist/integration.js +3 -3
  24. package/dist/react.cjs +2 -2
  25. package/dist/react.js +2 -2
  26. package/dist/{store-DcDpDgjk.cjs → store-6wMvZthf.cjs} +4 -6
  27. package/dist/store-6wMvZthf.cjs.map +1 -0
  28. package/dist/{store-P5dJ7TVe.d.ts → store-BCR20XSb.d.ts} +2 -2
  29. package/dist/{store-CtgvCVFg.js → store-PLKs1KnS.js} +4 -6
  30. package/dist/store-PLKs1KnS.js.map +1 -0
  31. package/dist/{store-CDeqZEE3.d.cts → store-jJ3SNYKH.d.cts} +2 -2
  32. package/package.json +1 -1
  33. package/skills/doxum-runtime/references/guide.en.md +2 -1
  34. package/skills/doxum-runtime/references/guide.zh-CN.md +2 -1
  35. package/skills/doxum-runtime/references/projections.en.md +8 -1
  36. package/skills/doxum-runtime/references/projections.zh-CN.md +7 -1
  37. package/dist/integration-Bco8ZB16.js.map +0 -1
  38. package/dist/integration-CEUn96tx.cjs +0 -52
  39. package/dist/integration-CEUn96tx.cjs.map +0 -1
  40. package/dist/store-CtgvCVFg.js.map +0 -1
  41. package/dist/store-DcDpDgjk.cjs.map +0 -1
@@ -1,6 +1,5 @@
1
- import { A as overlaps, D as AddressRef, M as resolveAddress, O as contains, Z as ObjectNode, _ as Unsubscribe, j as read, k as debugKey, q as ImpactTarget, s as DocumentReadable, t as CommitListener, v as Readable, w as Read } from "./contract-BT53Gg94.js";
2
- import { d as ExternalCollectionSource, f as ExternalValueSource, i as PublicCollection, n as Projection } from "./definition-BlMeHwdz.js";
3
- import { a as trackProjection, i as subscribeProjection, n as ProjectionSelection } from "./store-P5dJ7TVe.js";
1
+ import { A as overlaps, D as AddressRef, M as resolveAddress, O as contains, Z as ObjectNode, _ as Unsubscribe, j as read, k as debugKey, q as ImpactTarget, s as DocumentReadable, t as CommitListener, w as Read } from "./contract-BT53Gg94.js";
2
+ import { a as trackProjection, i as subscribeProjection, n as ProjectionSelection } from "./store-BCR20XSb.js";
4
3
 
5
4
  //#region core/src/impact-target.d.ts
6
5
  declare const same: (left: ImpactTarget<unknown>, right: ImpactTarget<unknown>) => boolean;
@@ -9,14 +8,11 @@ declare const same: (left: ImpactTarget<unknown>, right: ImpactTarget<unknown>)
9
8
  declare const subscribeDependencies: <S extends ObjectNode>(runtime: DocumentReadable<S>, targets: readonly ImpactTarget[], listener: CommitListener<S>) => Unsubscribe;
10
9
  //#endregion
11
10
  //#region core/src/integration.d.ts
12
- declare const observeReadable: <T>(readable: Readable<T>) => Projection<T>;
13
- declare const observeExternal: <T, D>(source: ExternalValueSource<T, D>) => Projection<T>;
14
- declare const observeExternalCollection: <K extends string, V, D>(source: ExternalCollectionSource<K, V, D>) => Projection<PublicCollection<K, V>>;
15
11
  type TrackedSelection<TValue> = {
16
12
  readonly value: TValue;
17
13
  readonly targets: readonly ImpactTarget<unknown>[];
18
14
  };
19
15
  declare const track: <TSchema extends ObjectNode, TValue>(runtime: DocumentReadable<TSchema>, selector: (read: Read<TSchema>) => TValue) => TrackedSelection<TValue>;
20
16
  //#endregion
21
- export { type AddressRef, type ImpactTarget, type ProjectionSelection, TrackedSelection, contains, debugKey, observeExternal, observeExternalCollection, observeReadable, overlaps, read as readAddress, resolveAddress, same as sameTarget, subscribeDependencies, subscribeProjection, track, trackProjection };
17
+ export { type AddressRef, type ImpactTarget, type ProjectionSelection, TrackedSelection, contains, debugKey, overlaps, read as readAddress, resolveAddress, same as sameTarget, subscribeDependencies, subscribeProjection, track, trackProjection };
22
18
  //# sourceMappingURL=integration.d.ts.map
@@ -1,4 +1,4 @@
1
1
  import { c as debugKey, d as overlaps, f as read, o as contains, p as resolveAddress } from "./issue-DVaGQGeP.js";
2
- import { d as subscribeDependencies, n as subscribeProjection, r as trackProjection, x as same } from "./store-CtgvCVFg.js";
3
- import { i as track, n as observeExternalCollection, r as observeReadable, t as observeExternal } from "./integration-Bco8ZB16.js";
4
- export { contains, debugKey, observeExternal, observeExternalCollection, observeReadable, overlaps, read as readAddress, resolveAddress, same as sameTarget, subscribeDependencies, subscribeProjection, track, trackProjection };
2
+ import { d as subscribeDependencies, n as subscribeProjection, r as trackProjection, x as same } from "./store-PLKs1KnS.js";
3
+ import { t as track } from "./integration-zB8e-uNP.js";
4
+ export { contains, debugKey, overlaps, read as readAddress, resolveAddress, same as sameTarget, subscribeDependencies, subscribeProjection, track, trackProjection };
package/dist/react.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_store = require("./store-DcDpDgjk.cjs");
3
- const require_integration = require("./integration-CEUn96tx.cjs");
2
+ const require_store = require("./store-6wMvZthf.cjs");
3
+ const require_integration = require("./integration-WniqaEPW.cjs");
4
4
  let react = require("react");
5
5
  //#region react/src/hooks.ts
6
6
  const ProjectionContext = (0, react.createContext)(void 0);
package/dist/react.js CHANGED
@@ -1,5 +1,5 @@
1
- import { d as subscribeDependencies, n as subscribeProjection, r as trackProjection, x as same } from "./store-CtgvCVFg.js";
2
- import { i as track } from "./integration-Bco8ZB16.js";
1
+ import { d as subscribeDependencies, n as subscribeProjection, r as trackProjection, x as same } from "./store-PLKs1KnS.js";
2
+ import { t as track } from "./integration-zB8e-uNP.js";
3
3
  import { createContext, useCallback, useContext, useMemo, useRef, useSyncExternalStore } from "react";
4
4
  //#region react/src/hooks.ts
5
5
  const ProjectionContext = createContext(void 0);
@@ -1,5 +1,5 @@
1
1
  const require_issue = require("./issue-DhrNdQNg.cjs");
2
- const require_definition = require("./definition-177L4Amk.cjs");
2
+ const require_definition = require("./definition-BDW6i7fp.cjs");
3
3
  //#region core/src/schema.ts
4
4
  const node = (value) => Object.freeze(value);
5
5
  const field = (validator) => node({
@@ -1566,9 +1566,7 @@ const createSources = (scheduler) => {
1566
1566
  record.fault = new ProjectionError("source", "external collection source", [revision], error);
1567
1567
  scheduler.capture(record);
1568
1568
  };
1569
- const addTransitionKeys = (event) => {
1570
- event.transitions().forEach((transition) => transitionKeys.add(transition.key));
1571
- const impact = event.change;
1569
+ const addTransitionKeys = (impact) => {
1572
1570
  if (impact?.kind === "incremental") {
1573
1571
  impact.added.forEach((key) => transitionKeys.add(key));
1574
1572
  impact.removed.forEach((key) => transitionKeys.add(key));
@@ -1624,7 +1622,7 @@ const createSources = (scheduler) => {
1624
1622
  if (!pending) previous = event.previous;
1625
1623
  read = port.current();
1626
1624
  revision = event.revision;
1627
- addTransitionKeys(event);
1625
+ addTransitionKeys(event.change);
1628
1626
  reset ||= event.reset || event.change?.kind === "reset";
1629
1627
  detail = event.detail;
1630
1628
  cause = event.cause ?? cause;
@@ -2398,4 +2396,4 @@ Object.defineProperty(exports, "variant", {
2398
2396
  }
2399
2397
  });
2400
2398
 
2401
- //# sourceMappingURL=store-DcDpDgjk.cjs.map
2399
+ //# sourceMappingURL=store-6wMvZthf.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-6wMvZthf.cjs","names":["checkKey","AddressIndex","AddressIndex","target.belongs","target.affected","contains","createAccess","target.SubscriptionIndex","target.belongs","target.same","collectionAccess","createAccess","snapshot","definitionOf","readAddress"],"sources":["../core/src/schema.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/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 { 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 };\nexport type PathValueOf<T> = T extends { readonly [pathValue]: infer TValue } ? TValue : never;\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 { 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 {\n DocumentCommit,\n DocumentReadable,\n Synchronous,\n Unsubscribe,\n} from '../runtime/contract';\nimport type {\n CollectionNode as SchemaCollectionNode,\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 GraphSource<T> = { readonly [sourceContext]: T };\nexport type GraphSources = Readonly<Record<string, GraphSource<unknown>>>;\nexport type InputHandles<S extends GraphSources> = {\n readonly [K in keyof S]: S[K] extends GraphSource<infer T> ? T : never;\n};\n/** Opaque application metadata identifying the action that produced a source event. */\nexport type Cause = unknown;\nexport type BatchContext = {\n readonly id: number;\n readonly cause?: Cause;\n};\nexport type BatchOptions = {\n readonly cause?: Cause;\n};\nexport type CollectionEntryTransition<K extends string, V> = {\n readonly key: K;\n readonly kind: 'added' | 'updated' | 'removed';\n readonly before: V | undefined;\n readonly after: V | undefined;\n};\nexport type DocumentContext<S extends ObjectNode> = {\n readonly read: Read<S>;\n readonly revision: number;\n readonly commits: readonly DocumentCommit<S>[];\n readonly reset: boolean;\n readonly cause?: Cause;\n readonly batch?: BatchContext;\n};\nexport type DocumentCollectionContext<\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 readonly cause?: Cause;\n readonly batch?: BatchContext;\n};\nexport type DocumentHandle<S extends ObjectNode> = GraphSource<DocumentContext<S>> & {\n collection<P extends CollectionPath>(\n pick: (path: SchemaPath<S['shape']>) => P\n ): DocumentCollectionSource<S, SchemaCollectionNode<P>, CollectionId<P>>;\n targets(...targets: readonly [PathPick<S>, ...PathPick<S>[]]): GraphSource<DocumentContext<S>>;\n};\nexport type DocumentCollectionSource<\n S extends ObjectNode,\n N extends ValueSchemaNode,\n K extends string = string,\n> = GraphSource<DocumentCollectionContext<S, N, K>>;\nexport type ValueContext<T, D = unknown> = {\n readonly value: T;\n readonly previous: T;\n readonly changed: boolean;\n readonly revision: number;\n readonly reset: boolean;\n readonly detail?: D;\n readonly cause?: Cause;\n readonly batch?: BatchContext;\n};\nexport type InputHandle<T> = {\n readonly source: GraphSource<ValueContext<T>>;\n set(value: T): void;\n};\nexport type NodeUpdate<T> =\n | { readonly kind: 'unchanged' }\n | { readonly kind: 'changed'; readonly value: T }\n | { readonly kind: 'rebuild' };\nexport type ValueNodeSpec<S extends GraphSources, T> = {\n readonly name?: string;\n readonly sources: S;\n readonly build: (sources: InputHandles<S>) => {\n readonly value: T;\n readonly update: (sources: InputHandles<S>) => NodeUpdate<NoInfer<T>>;\n };\n};\nexport type ValueNode<T> = Readable<T> &\n GraphSource<ValueContext<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 ExternalCollectionRead<K extends string, V> = {\n readonly get: (key: K) => V | undefined;\n readonly has: (key: K) => boolean;\n readonly ids: () => readonly K[];\n};\nexport type CollectionContext<K extends string, V, D = unknown> = CollectionRead<K, V> & {\n readonly previous: CollectionRead<K, V>;\n readonly change: CollectionImpact<K> | undefined;\n readonly revision: number;\n readonly reset: boolean;\n readonly transitions: (keys?: Iterable<K>) => readonly CollectionEntryTransition<K, V>[];\n readonly detail?: D;\n readonly cause?: Cause;\n readonly batch?: BatchContext;\n};\nexport type CollectionHandle<K extends string, 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};\nexport type CollectionNode<K extends string, V> = GraphSource<CollectionContext<K, V>> &\n CollectionHandle<K, V> & {\n rebuild(): void;\n dispose(): void;\n };\nexport type ExternalValueSource<T, D = unknown> = {\n readonly kind: 'value';\n current(): T;\n revision(): number;\n subscribe(listener: (event: ExternalValueEvent<T, D>) => void): Unsubscribe;\n};\nexport type ExternalCollectionSource<K extends string, V, D = unknown> = {\n readonly kind: 'collection';\n current(): ExternalCollectionRead<K, V>;\n revision(): number;\n subscribe(listener: (event: ExternalCollectionEvent<K, V, D>) => void): Unsubscribe;\n};\nexport type ExternalValueEvent<T, D = unknown> = {\n readonly value: T;\n readonly revision: number;\n readonly reset?: boolean;\n readonly detail?: D;\n readonly cause?: Cause;\n readonly batch?: { readonly id: number; readonly cause?: Cause };\n};\nexport type ExternalCollectionEvent<K extends string, V, D = unknown> = {\n readonly previous: ExternalCollectionRead<K, V>;\n readonly revision: number;\n readonly reset?: boolean;\n readonly change?: CollectionImpact<K>;\n readonly detail?: D;\n readonly cause?: Cause;\n readonly batch?: { readonly id: number; readonly cause?: Cause };\n};\nexport type CollectionDraft<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 CollectionProcess<S extends GraphSources, K extends string, V> = {\n readonly sources: InputHandles<S>;\n readonly previous: CollectionRead<K, V>;\n readonly next: CollectionRead<K, V>;\n readonly writer: CollectionDraft<K, V>;\n};\nexport type CollectionNodeSpec<S extends GraphSources, K extends string, V> = {\n readonly name?: string;\n readonly sources: S;\n readonly isEqual?: (previous: V, next: V) => boolean;\n readonly build: (input: CollectionProcess<S, K, V>) => {\n readonly update: (input: CollectionProcess<S, K, V>) => 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 RuntimeExecutor = {\n document<S extends ObjectNode>(runtime: DocumentReadable<S>): DocumentHandle<S>;\n fromSource<T, D = unknown>(\n source: ExternalValueSource<T, D>,\n options?: { readonly isEqual?: (a: T, b: T) => boolean }\n ): GraphSource<ValueContext<T, D>>;\n fromCollectionSource<K extends string, V, D = unknown>(\n source: ExternalCollectionSource<K, V, D>\n ): GraphSource<CollectionContext<K, V, D>>;\n fromReadable<T>(\n readable: Readable<T>,\n options?: { readonly isEqual?: (a: T, b: T) => boolean }\n ): GraphSource<ValueContext<T>>;\n input<T>(initial: T, options?: { readonly isEqual?: (a: T, b: T) => boolean }): InputHandle<T>;\n value<S extends GraphSources, T>(\n sources: S,\n compute: (sources: InputHandles<S>) => Synchronous<T>,\n options?: { readonly isEqual?: (a: NoInfer<T>, b: NoInfer<T>) => boolean }\n ): ValueNode<T>;\n value<S extends GraphSources, T>(\n spec: ValueNodeSpec<S, T>,\n options?: { readonly isEqual?: (a: NoInfer<T>, b: NoInfer<T>) => boolean }\n ): ValueNode<T>;\n collection<V, K extends string = string>(): <S extends GraphSources>(\n spec: CollectionNodeSpec<S, K, V>\n ) => CollectionNode<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 ): CollectionNode<K, V>;\n map<K extends string, V, R>(\n source: CollectionNode<K, V>,\n mapper: (id: K, entry: V) => Synchronous<R>,\n options?: { readonly isEqual?: (a: NoInfer<R>, b: NoInfer<R>) => boolean }\n ): CollectionNode<K, R>;\n batch<T>(run: () => Synchronous<T>): T;\n batch<T>(options: BatchOptions, run: () => Synchronous<T>): T;\n dispose(): void;\n};\n","import type { ObserverError } from '../runtime/contract';\nimport {\n ProjectionDisposedError,\n ProjectionError,\n type BatchContext,\n type BatchOptions,\n} 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 batchSequence = 0;\n let activeBatch: BatchContext | undefined;\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 const batch = <T>(optionsOrCallback: BatchOptions | (() => T), maybeCallback?: () => T): T => {\n assertIdle();\n const options = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : maybeCallback;\n if (!callback) throw new TypeError('Projection batch requires a callback.');\n const outer = depth === 0;\n if (outer)\n activeBatch = Object.freeze({\n id: ++batchSequence,\n ...(options?.cause === undefined ? {} : { cause: options.cause }),\n });\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 try {\n if (failed) {\n try {\n run();\n } catch {\n /* The original application error retains priority. */\n }\n } else run();\n } finally {\n activeBatch = undefined;\n }\n }\n }\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,\n batchContext: () => activeBatch,\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 { InputHandles, GraphSources } from './contract';\nimport { ProjectionDisposedError } from './contract';\nimport type { NodeRecord, Scheduler } from './scheduler';\n\nexport const createNode = <S extends GraphSources>(\n scheduler: Scheduler,\n spec: { name?: string; sources: S },\n behavior: {\n evaluate(sources: InputHandles<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 InputHandles<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 CollectionEntryTransition,\n CollectionContext,\n CollectionRead,\n CollectionNodeSpec,\n CollectionDraft,\n CollectionNode,\n GraphSources,\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 GraphSources, K extends string, V>(\n scheduler: Scheduler,\n spec: CollectionNodeSpec<S, K, V>\n): CollectionNode<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 batch: import('./contract').BatchContext | undefined;\n let cause: import('./contract').Cause | undefined;\n let publishedTransitions: readonly CollectionEntryTransition<K, V>[] = Object.freeze([]);\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 const metadata = Object.values(sources as Record<string, unknown>).find(\n value =>\n value &&\n typeof value === 'object' &&\n (('batch' in value && (value as { readonly batch?: unknown }).batch !== undefined) ||\n ('cause' in value && (value as { readonly cause?: unknown }).cause !== undefined))\n ) as\n | {\n readonly batch?: import('./contract').BatchContext;\n readonly cause?: import('./contract').Cause;\n }\n | undefined;\n batch = scheduler.batchContext() ?? metadata?.batch;\n cause = metadata?.cause ?? batch?.cause;\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: CollectionDraft<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 publishedTransitions = Object.freeze(\n [...changedKeys].flatMap(key => {\n const beforePresent = values.has(key);\n const afterPresent = hasNext(key);\n if (beforePresent === afterPresent) {\n if (!beforePresent) return [];\n if ((spec.isEqual ?? Object.is)(values.get(key) as V, getNext(key) as V)) return [];\n }\n return [\n {\n key,\n kind: !beforePresent ? 'added' : !afterPresent ? 'removed' : 'updated',\n before: beforePresent ? values.get(key) : undefined,\n after: afterPresent ? getNext(key) : undefined,\n } satisfies CollectionEntryTransition<K, V>,\n ];\n })\n );\n reset = build;\n return change !== undefined;\n },\n context: active => {\n const transitions = (keys?: Iterable<K>): readonly CollectionEntryTransition<K, V>[] => {\n assertScope(active);\n const selected = keys ? new Set(keys) : undefined;\n return Object.freeze(\n publishedTransitions.filter(transition => !selected || selected.has(transition.key))\n );\n };\n const previous: CollectionRead<K, V> = Object.freeze({\n get: key => {\n assertScope(active);\n return values.get(key);\n },\n has: key => {\n assertScope(active);\n return values.has(key);\n },\n ids: () => {\n assertScope(active);\n return ids;\n },\n });\n const input: CollectionContext<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 previous,\n change,\n revision: revision + (change ? 1 : 0),\n reset,\n transitions,\n batch,\n cause,\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 publishedTransitions = Object.freeze([]);\n batch = undefined;\n cause = undefined;\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 CollectionNode<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 type { 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 {\n CollectionContext,\n CollectionRead,\n DocumentHandle,\n GraphSource,\n ExternalCollectionSource,\n ExternalValueSource,\n ValueContext,\n} 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 externalSources = new WeakMap<object, object>();\n const document = <S extends ObjectNode>(runtime: DocumentReadable<S>): DocumentHandle<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 DocumentHandle<S>;\n const bindings: {\n handle: object;\n targets: readonly ImpactTarget[];\n record: SourceRecord;\n receive: (commit: DocumentCommit<S>) => void;\n }[] = [];\n let batch: import('./contract').BatchContext | undefined;\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 batch = undefined;\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 batch,\n cause: batch?.cause,\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 DocumentHandle<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 batch = scheduler.batchContext();\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, D = unknown>(initial: T, equal: (a: T, b: T) => boolean) => {\n let value = initial;\n let previous = initial;\n let revision = 0;\n let detail: D | undefined;\n let cause: import('./contract').Cause | undefined;\n let batch: import('./contract').BatchContext | undefined;\n let reset = false;\n let pending = false;\n const handle = Object.freeze({}) as GraphSource<ValueContext<T, D>>;\n const record: SourceRecord = {\n consumers: new Set(),\n disposed: false,\n fault: undefined,\n revision: () => revision,\n reset: () => reset,\n clear: () => {\n previous = value;\n pending = false;\n detail = undefined;\n cause = undefined;\n batch = undefined;\n reset = false;\n },\n context: active => {\n assertScope(active);\n return Object.freeze({\n value,\n previous,\n revision,\n changed: !equal(previous, value),\n reset,\n detail,\n cause,\n batch,\n });\n },\n };\n scheduler.register(handle, record);\n const accept = (next: T, metadata?: Partial<ValueContext<T, D>>) => {\n scheduler.assertIdle();\n const recovering = record.fault !== undefined;\n const eventful =\n metadata !== undefined &&\n (metadata.reset === true ||\n (metadata.revision !== undefined && metadata.revision !== revision) ||\n metadata.detail !== undefined ||\n metadata.cause !== undefined ||\n metadata.batch !== undefined);\n if (equal(value, next) && !recovering && !eventful) return;\n record.fault = undefined;\n if (!pending) previous = value;\n value = next;\n revision = metadata?.revision ?? revision + 1;\n detail = metadata?.detail;\n cause = metadata?.cause ?? cause;\n batch = scheduler.batchContext() ?? metadata?.batch ?? batch;\n reset ||= metadata?.reset ?? false;\n scheduler.capture(record);\n pending = true;\n };\n return {\n source: handle,\n accept,\n set(next: T) {\n accept(next);\n scheduler.run();\n },\n };\n };\n const externalValueSource = <T, D>(\n port: ExternalValueSource<T, D>,\n equal: (a: T, b: T) => boolean\n ): GraphSource<ValueContext<T, D>> => {\n scheduler.assertIdle();\n const old = externalSources.get(port);\n if (old) return old as GraphSource<ValueContext<T, D>>;\n const input = valueSource<T, D>(port.current(), equal);\n const fail = (cause: unknown) => {\n const record = scheduler.source(input.source);\n record.fault = new ProjectionError('source', 'external source', [record.revision()], cause);\n scheduler.capture(record);\n };\n let unsubscribe: (() => void) | undefined;\n try {\n unsubscribe = port.subscribe(event => {\n try {\n input.accept(event.value, {\n revision: event.revision,\n reset: event.reset,\n detail: event.detail,\n cause: event.cause,\n batch: event.batch,\n });\n } catch (cause) {\n fail(cause);\n }\n scheduler.run();\n });\n } catch (cause) {\n unsubscribe?.();\n scheduler.unregisterSource(input.source);\n throw cause;\n }\n scheduler.cleanups.add(() => unsubscribe?.());\n externalSources.set(port, input.source);\n return input.source;\n };\n const externalCollectionSource = <K extends string, V, D>(\n port: ExternalCollectionSource<K, V, D>\n ): GraphSource<CollectionContext<K, V, D>> => {\n scheduler.assertIdle();\n const old = externalSources.get(port);\n if (old) return old as GraphSource<CollectionContext<K, V, D>>;\n let read = port.current();\n let previous = read;\n let revision = port.revision();\n let change: CollectionContext<K, V, D>['change'];\n let reset = false;\n let detail: D | undefined;\n let cause: import('./contract').Cause | undefined;\n let batch: import('./contract').BatchContext | undefined;\n let publishedTransitions: readonly import('./contract').CollectionEntryTransition<K, V>[] =\n Object.freeze([]);\n let transitionKeys = new Set<K>();\n let pending = false;\n const handle = Object.freeze({}) as GraphSource<CollectionContext<K, V, D>>;\n const record: SourceRecord = {\n consumers: new Set(),\n disposed: false,\n fault: undefined,\n revision: () => revision,\n reset: () => reset,\n clear: () => {\n previous = read;\n pending = false;\n change = undefined;\n reset = false;\n detail = undefined;\n cause = undefined;\n batch = undefined;\n publishedTransitions = Object.freeze([]);\n transitionKeys.clear();\n },\n context: active => {\n assertScope(active);\n const currentRead: CollectionRead<K, V> = Object.freeze({\n get: key => {\n assertScope(active);\n return read.get(key);\n },\n has: key => {\n assertScope(active);\n return read.has(key);\n },\n ids: () => {\n assertScope(active);\n return read.ids();\n },\n });\n const previousRead: CollectionRead<K, V> = Object.freeze({\n get: key => {\n assertScope(active);\n return previous.get(key);\n },\n has: key => {\n assertScope(active);\n return previous.has(key);\n },\n ids: () => {\n assertScope(active);\n return previous.ids();\n },\n });\n return Object.freeze({\n ...currentRead,\n previous: previousRead,\n change,\n revision,\n reset,\n transitions: (keys?: Iterable<K>) => {\n assertScope(active);\n const selected = keys ? new Set(keys) : undefined;\n return Object.freeze(\n publishedTransitions.filter(transition => !selected || selected.has(transition.key))\n );\n },\n detail,\n cause,\n batch,\n });\n },\n };\n scheduler.register(handle, record);\n collections.add(handle);\n const fail = (error: unknown) => {\n record.fault = new ProjectionError('source', 'external collection source', [revision], error);\n scheduler.capture(record);\n };\n const addTransitionKeys = (impact: CollectionContext<K, V>['change']) => {\n if (impact?.kind === 'incremental') {\n impact.added.forEach(key => transitionKeys.add(key));\n impact.removed.forEach(key => transitionKeys.add(key));\n impact.updated.forEach(key => transitionKeys.add(key));\n }\n };\n const recomputeTransitions = () => {\n const transitions: import('./contract').CollectionEntryTransition<K, V>[] = [];\n for (const key of transitionKeys) {\n const beforePresent = previous.has(key);\n const afterPresent = read.has(key);\n const before = beforePresent ? previous.get(key) : undefined;\n const after = afterPresent ? read.get(key) : undefined;\n if (beforePresent === afterPresent && Object.is(before, after)) continue;\n transitions.push({\n key,\n kind: !beforePresent ? 'added' : !afterPresent ? 'removed' : 'updated',\n before,\n after,\n });\n }\n publishedTransitions = Object.freeze(transitions);\n };\n const deriveChange = (): CollectionImpact<K> | undefined => {\n if (reset) return Object.freeze({ kind: 'reset' as const });\n const added = new Set<K>();\n const removed = new Set<K>();\n const updated = new Set<K>();\n publishedTransitions.forEach(transition => {\n if (transition.kind === 'added') added.add(transition.key);\n else if (transition.kind === 'removed') removed.add(transition.key);\n else updated.add(transition.key);\n });\n const beforeIds = previous.ids();\n const afterIds = read.ids();\n const beforeCommon = beforeIds.filter(key => read.has(key));\n const afterCommon = afterIds.filter(key => previous.has(key));\n const orderChanged =\n beforeCommon.length !== afterCommon.length ||\n beforeCommon.some((key, index) => afterCommon[index] !== key);\n if (!added.size && !removed.size && !updated.size && !orderChanged) return undefined;\n return Object.freeze({\n kind: 'incremental' as const,\n added,\n removed,\n updated,\n orderChanged,\n });\n };\n let unsubscribe: (() => void) | undefined;\n try {\n unsubscribe = port.subscribe(event => {\n try {\n scheduler.assertIdle();\n if (!pending) previous = event.previous;\n read = port.current();\n revision = event.revision;\n addTransitionKeys(event.change);\n reset ||= event.reset || event.change?.kind === 'reset';\n detail = event.detail;\n cause = event.cause ?? cause;\n batch = scheduler.batchContext() ?? event.batch;\n recomputeTransitions();\n change = deriveChange();\n record.fault = undefined;\n scheduler.capture(record);\n pending = true;\n } catch (error) {\n fail(error);\n }\n scheduler.run();\n });\n } catch (error) {\n unsubscribe?.();\n scheduler.unregisterSource(handle);\n throw error;\n }\n scheduler.cleanups.add(() => unsubscribe?.());\n externalSources.set(port, handle);\n return handle;\n };\n return {\n dispose: () => {\n documents.clear();\n readables.clear();\n },\n document,\n fromSource: <T, D>(\n source: ExternalValueSource<T, D>,\n options?: { readonly isEqual?: (a: T, b: T) => boolean }\n ) => externalValueSource(source, options?.isEqual ?? Object.is),\n fromCollectionSource: <K extends string, V, D>(source: ExternalCollectionSource<K, V, D>) =>\n externalCollectionSource(source),\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 ): GraphSource<ValueContext<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 GraphSource<ValueContext<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 { GraphSources, ValueNode, ValueNodeSpec } from './contract';\nimport { createNode } from './node';\nimport { assertScope, assertSynchronous, type Scheduler } from './scheduler';\nimport { profile } from '../profile';\n\nexport const createValue = <S extends GraphSources, T>(\n scheduler: Scheduler,\n spec: ValueNodeSpec<S, T>,\n options?: { readonly isEqual?: (a: T, b: T) => boolean }\n): ValueNode<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 let batch: import('./contract').BatchContext | undefined;\n let cause: import('./contract').Cause | undefined;\n const listeners = new Set<() => void>();\n const owner = createNode(scheduler, spec, {\n evaluate: (sources, build) => {\n const metadata = Object.values(sources as Record<string, unknown>).find(\n value =>\n value &&\n typeof value === 'object' &&\n (('batch' in value && (value as { readonly batch?: unknown }).batch !== undefined) ||\n ('cause' in value && (value as { readonly cause?: unknown }).cause !== undefined))\n ) as\n | {\n readonly batch?: import('./contract').BatchContext;\n readonly cause?: import('./contract').Cause;\n }\n | undefined;\n batch = scheduler.batchContext() ?? metadata?.batch;\n cause = metadata?.cause ?? batch?.cause;\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 cause,\n batch,\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 batch = undefined;\n cause = undefined;\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 ValueNode<T>;\n owner.install(handle);\n return handle;\n};\n","import type {\n CollectionContext,\n CollectionRead,\n InputHandles,\n RuntimeExecutor,\n GraphSource,\n GraphSources,\n ValueNode,\n ValueNodeSpec,\n ExternalCollectionSource,\n ExternalValueSource,\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';\nexport const createRuntimeExecutor = (options: {\n readonly onError: (error: ProjectionError) => void;\n}): RuntimeExecutor => {\n const scheduler = createScheduler(options.onError);\n const sources = createSources(scheduler);\n function value<S extends GraphSources, T>(\n sources: S,\n compute: (sources: InputHandles<S>) => Synchronous<T>,\n options?: { readonly isEqual?: (a: NoInfer<T>, b: NoInfer<T>) => boolean }\n ): ValueNode<T>;\n function value<S extends GraphSources, T>(\n spec: ValueNodeSpec<S, T>,\n options?: { readonly isEqual?: (a: NoInfer<T>, b: NoInfer<T>) => boolean }\n ): ValueNode<T>;\n function value<S extends GraphSources, T>(\n input: S | ValueNodeSpec<S, T>,\n computeOrOptions?:\n ((sources: InputHandles<S>) => T) | { readonly isEqual?: (a: T, b: T) => boolean },\n options?: { readonly isEqual?: (a: T, b: T) => boolean }\n ): ValueNode<T> {\n if (typeof computeOrOptions !== 'function')\n return createValue(scheduler, input as ValueNodeSpec<S, T>, computeOrOptions);\n const compute = (input: InputHandles<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: GraphSource<\n | CollectionContext<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: RuntimeExecutor = {\n document: sources.document,\n fromSource: <T, D>(\n source: ExternalValueSource<T, D>,\n options?: { readonly isEqual?: (a: T, b: T) => boolean }\n ) => sources.fromSource(source, options),\n fromCollectionSource: <K extends string, V, D>(source: ExternalCollectionSource<K, V, D>) =>\n sources.fromCollectionSource(source),\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 return Object.freeze(runtime);\n};\n","import { read as readAddress } from '../address';\nimport { snapshot } from '../access/scope';\nimport { accessOf } from '../runtime/access';\nimport { compilePath } from '../schema';\nimport type { Unsubscribe } from '../runtime/contract';\nimport type { CollectionImpact } from '../impact';\nimport type {\n CollectionRead,\n CollectionNode,\n RuntimeExecutor,\n BatchOptions,\n ValueNode,\n GraphSource,\n} from './contract';\nimport type { Readable } from './readable';\nimport { definitionOf, type Input, type Projection, type PublicCollection } from './definition';\nimport { createRuntimeExecutor } from './runtime';\n\ntype RuntimeNode = ValueNode<unknown> | CollectionNode<string, unknown>;\ntype RuntimeValue = RuntimeNode;\ntype SelectionTracker = {\n readonly keys: Set<string>;\n all: boolean;\n structure: boolean;\n};\ntype RuntimeState = {\n readonly materialize: (projection: Projection<unknown>) => RuntimeValue;\n readonly get: <T>(projection: Projection<T>) => T;\n};\n\nexport type ProjectionRuntime = {\n get<T>(projection: Projection<T>): T;\n subscribe<T>(projection: Projection<T>, listener: () => void): Unsubscribe;\n set<T>(input: Input<T>, value: T): void;\n batch<T>(run: () => T): T;\n batch<T>(options: BatchOptions, run: () => T): T;\n dispose(): void;\n};\n\nconst runtimeStates = new WeakMap<object, RuntimeState>();\nlet activeTracker: SelectionTracker | undefined;\n\nconst trackKey = (key: string): void => {\n activeTracker?.keys.add(key);\n};\nconst trackAll = (structure = false): void => {\n if (!activeTracker) return;\n activeTracker.all = true;\n activeTracker.structure ||= structure;\n};\n\nconst mapView = <K extends string, V>(read: CollectionRead<K, V>): PublicCollection<K, V> => {\n const keys = read.ids();\n const source = new Map<K, V>();\n for (const key of keys) source.set(key, read.get(key) as V);\n const view: PublicCollection<K, V> = {\n get: key => {\n trackKey(key);\n return source.get(key);\n },\n has: key => {\n trackKey(key);\n return source.has(key);\n },\n get size() {\n trackAll(true);\n return source.size;\n },\n keys: () => {\n trackAll(true);\n return source.keys();\n },\n values: () => {\n trackAll(true);\n return source.values();\n },\n entries: () => {\n trackAll(true);\n return source.entries();\n },\n forEach: (callback, thisArg) => {\n trackAll(true);\n source.forEach((value, key) => callback.call(thisArg, value, key, view));\n },\n [Symbol.iterator]: () => {\n trackAll(true);\n return source[Symbol.iterator]();\n },\n };\n return Object.freeze(view);\n};\n\nconst isMapLike = (value: unknown): value is ReadonlyMap<string, unknown> =>\n value instanceof Map ||\n (value !== null &&\n typeof value === 'object' &&\n typeof (value as { get?: unknown }).get === 'function' &&\n typeof (value as { keys?: unknown }).keys === 'function' &&\n typeof (value as { entries?: unknown }).entries === 'function');\n\nconst mapRead = (value: ReadonlyMap<string, unknown>): CollectionRead<string, unknown> => ({\n get: key => value.get(key),\n has: key => value.has(key),\n ids: () => Object.freeze([...value.keys()]),\n});\n\nconst mapChange = (\n previous: ReadonlyMap<string, unknown>,\n current: ReadonlyMap<string, unknown>\n): CollectionImpact<string> | undefined => {\n const added = new Set<string>();\n const removed = new Set<string>();\n const updated = new Set<string>();\n for (const key of previous.keys()) {\n if (!current.has(key)) removed.add(key);\n else if (!Object.is(previous.get(key), current.get(key))) updated.add(key);\n }\n for (const key of current.keys()) if (!previous.has(key)) added.add(key);\n const before = [...previous.keys()].filter(key => current.has(key));\n const after = [...current.keys()].filter(key => previous.has(key));\n const orderChanged =\n before.length !== after.length || before.some((key, index) => key !== after[index]);\n if (!added.size && !removed.size && !updated.size && !orderChanged) return undefined;\n return { kind: 'incremental', added, removed, updated, orderChanged };\n};\n\nconst currentValue = (event: unknown): unknown => {\n if (!event || typeof event !== 'object') return event;\n if ('value' in event) return (event as { readonly value: unknown }).value;\n if ('read' in event) return snapshot((event as { readonly read: unknown }).read);\n if ('ids' in event && typeof (event as { ids?: unknown }).ids === 'function')\n return mapView(event as CollectionRead<string, unknown>);\n return event;\n};\n\nconst sourceOf = (instance: RuntimeNode): GraphSource<unknown> => instance as GraphSource<unknown>;\n\nexport const createProjectionRuntime = (options?: {\n readonly onError?: (error: import('./contract').ProjectionError) => void;\n}): ProjectionRuntime => {\n const runtime = createRuntimeExecutor({ onError: options?.onError ?? (() => undefined) });\n const instances = new WeakMap<object, RuntimeValue>();\n const inputs = new WeakMap<object, { readonly source: object; set(value: unknown): void }>();\n const collections = new WeakMap<\n object,\n { revision: number; value: PublicCollection<string, unknown> }\n >();\n\n const materialize = (projection: Projection<unknown>): RuntimeValue => {\n const old = instances.get(projection);\n if (old) return old;\n const definition = definitionOf(projection);\n let instance: RuntimeValue;\n switch (definition.kind) {\n case 'input': {\n const input = runtime.input(definition.initial, { isEqual: definition.isEqual });\n inputs.set(projection, input);\n instance = runtime.value({ input: input.source }, ({ input }) => input.value);\n break;\n }\n case 'readable': {\n const source = runtime.fromReadable(definition.readable, { isEqual: definition.isEqual });\n instance = runtime.value({ source }, ({ source }) => source.value);\n break;\n }\n case 'source-value':\n {\n const source = runtime.fromSource(definition.source);\n instance = runtime.value({ source }, ({ source }) => source.value);\n }\n break;\n case 'source-collection': {\n const source = runtime.fromCollectionSource(definition.source);\n instance = runtime.map(source as never, (_key, value) => value);\n break;\n }\n case 'document': {\n const document = runtime.document(definition.document);\n if (!definition.selector) {\n instance = runtime.value({ document }, ({ document }) => snapshot(document.read));\n break;\n }\n const state = accessOf(definition.document);\n try {\n const collection = document.collection(definition.selector as never);\n instance = runtime.map(collection, (_id, entry) => snapshot(entry));\n break;\n } catch {\n const selected = document.targets(definition.selector as never);\n const address = compilePath(state.schema, 'value', definition.selector as never).address;\n instance = runtime.value({ selected }, () => {\n const root = snapshot(state.document);\n return readAddress(root, address, state.schema);\n });\n }\n break;\n }\n case 'derive': {\n const sources = Object.fromEntries(\n definition.dependencies.map((dependency, index) => [\n `d${index}`,\n sourceOf(materialize(dependency)),\n ])\n );\n instance = runtime.value(\n sources,\n values => definition.compute(...Object.values(values).map(currentValue)),\n { isEqual: definition.isEqual }\n );\n break;\n }\n case 'incremental-value': {\n const sources = Object.fromEntries(\n Object.entries(definition.dependencies).map(([key, dependency]) => [\n key,\n sourceOf(materialize(dependency as never)),\n ])\n );\n instance = runtime.value(\n { sources, build: definition.build as never },\n { isEqual: definition.isEqual as never }\n );\n break;\n }\n case 'incremental-collection': {\n const sources = Object.fromEntries(\n Object.entries(definition.dependencies).map(([key, dependency]) => [\n key,\n sourceOf(materialize(dependency as never)),\n ])\n );\n instance = runtime.collection<unknown>()({\n sources,\n build: definition.build as never,\n isEqual: definition.isEqual as never,\n name: definition.name,\n });\n break;\n }\n }\n instances.set(projection, instance);\n return instance;\n };\n\n const get = <T>(projection: Projection<T>): T => {\n const instance = materialize(projection as Projection<unknown>);\n const current: unknown = instance.current();\n if (\n current &&\n typeof current === 'object' &&\n 'ids' in current &&\n typeof (current as { ids?: unknown }).ids === 'function'\n ) {\n const existing = collections.get(instance);\n const revision = instance.revision();\n if (existing?.revision === revision) return existing.value as T;\n const value = mapView(current as CollectionRead<string, unknown>);\n collections.set(instance, { revision, value });\n return value as T;\n }\n if (isMapLike(current)) {\n const existing = collections.get(instance);\n const revision = instance.revision();\n if (existing?.revision === revision) return existing.value as T;\n const value = mapView(mapRead(current));\n collections.set(instance, { revision, value });\n return value as T;\n }\n return current as T;\n };\n\n const store: ProjectionRuntime = {\n get,\n subscribe: ((projection: Projection<unknown>, listener: () => void) => {\n const instance = materialize(projection);\n return instance.subscribe(listener as never);\n }) as ProjectionRuntime['subscribe'],\n set: ((input: Input<unknown>, value: unknown) => {\n materialize(input);\n const target = inputs.get(input);\n if (!target) throw new TypeError('Projection is not an input.');\n target.set(value);\n }) as ProjectionRuntime['set'],\n batch: runtime.batch,\n dispose: runtime.dispose,\n };\n runtimeStates.set(store, { materialize, get });\n return Object.freeze(store);\n};\n\nexport type ProjectionSelection = {\n readonly keys: ReadonlySet<string>;\n readonly all: boolean;\n readonly structure: boolean;\n};\n\nexport const trackProjection = <T, R>(\n owner: ProjectionRuntime,\n projection: Projection<T>,\n selector: (value: T) => R\n): { readonly value: R; readonly selection: ProjectionSelection } => {\n const state = runtimeStates.get(owner);\n if (!state) throw new TypeError('Unknown projection runtime.');\n const tracker: SelectionTracker = { keys: new Set(), all: false, structure: false };\n const previous = activeTracker;\n activeTracker = tracker;\n try {\n const value = selector(state.get(projection));\n return {\n value,\n selection: Object.freeze({\n keys: new Set(tracker.keys),\n all: tracker.all,\n structure: tracker.structure,\n }),\n };\n } finally {\n activeTracker = previous;\n }\n};\n\nexport const subscribeProjection = (\n owner: ProjectionRuntime,\n projection: Projection<unknown>,\n selection: ProjectionSelection,\n listener: () => void\n): Unsubscribe => {\n const state = runtimeStates.get(owner);\n if (!state) throw new TypeError('Unknown projection runtime.');\n const instance = state.materialize(projection);\n let previousCollection: PublicCollection<string, unknown> | undefined;\n const initialValue = state.get(projection);\n if (isMapLike(initialValue)) previousCollection = initialValue;\n return instance.subscribe(((change: CollectionImpact<string> | undefined) => {\n if (!change && previousCollection) {\n const current = state.get(projection);\n if (isMapLike(current)) {\n change = mapChange(previousCollection, current);\n previousCollection = current;\n if (!change) return;\n } else previousCollection = undefined;\n }\n if (!change || change.kind === 'reset') {\n listener();\n return;\n }\n if (\n selection.all &&\n (selection.structure || change.added.size || change.removed.size || change.updated.size)\n ) {\n listener();\n return;\n }\n for (const key of selection.keys) {\n if (change.added.has(key) || change.removed.has(key) || change.updated.has(key)) {\n listener();\n return;\n }\n }\n }) as never);\n};\n"],"mappings":";;;AAkOA,MAAM,QAAgC,UAAgB,OAAO,OAAO,MAAM;AAC1E,MAAa,SAAY,cACvB,KAAK;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,QAAO,KAAK;EAAE,GAAG;EAAO,UAAU;EAAM,CAAoB;;AAE9D,MAAa,UAAiC,UAC5C,KAAK;CAAE,MAAM;CAAU,OAAO,OAAO,OAAO,EAAE,GAAG,OAAO,CAAC;CAAE,CAAC;AAC9D,MAAa,WACX,KACA,aACsB,KAAK;CAAE,MAAM;CAAW;CAAK,UAAU,OAAO,OAAO,EAAE,GAAG,UAAU,CAAC;CAAE,CAAC;AAChG,MAAa,SACX,OACA,YACoB,KAAK;CAAE,MAAM;CAAS;CAAO,GAAG;CAAS,CAAC;AAChE,MAAa,OACX,OACA,YACkB,KAAK;CAAE,MAAM;CAAO;CAAO,GAAG;CAAS,CAAC;AAC5D,MAAa,QACX,OACA,WACoB,KAAK;CAAE,MAAM;CAAQ,OAAO,OAAO;CAAO;CAAO,CAAC;AACxE,MAAa,QAAgB,UAC3B,KAAK;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,UAAUA,mBAAAA,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;;;;ACzUf,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,IAAIC,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,IAJQC,mBAAAA,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;;;;ACtDjG,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;;;;;ACrKhB,MAAa,oCAAoB,IAAI,SAAiB;AACtD,MAAa,mBAAmB,YAA8C;CAC5E,IAAI,WAAW;CACf,IAAI,QAAQ;CACZ,IAAI,gBAAgB;CACpB,IAAI;CACJ,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;;CAET,MAAM,SAAY,mBAA6C,kBAA+B;AAC5F,cAAY;EACZ,MAAM,UAAU,OAAO,sBAAsB,aAAa,KAAA,IAAY;EACtE,MAAM,WAAW,OAAO,sBAAsB,aAAa,oBAAoB;AAC/E,MAAI,CAAC,SAAU,OAAM,IAAI,UAAU,wCAAwC;AAE3E,MADc,UAAU,EAEtB,eAAc,OAAO,OAAO;GAC1B,IAAI,EAAE;GACN,GAAI,SAAS,UAAU,KAAA,IAAY,EAAE,GAAG,EAAE,OAAO,QAAQ,OAAO;GACjE,CAAC;AACJ;EACA,IAAI,SAAS;AACb,MAAI;GACF,MAAM,QAAQ,UAAU;AACxB,qBAAkB,MAAM;AACxB,UAAO;WACA,OAAO;AACd,YAAS;AACT,SAAM;YACE;AACR;AACA,OAAI,CAAC,MACH,KAAI;AACF,QAAI,OACF,KAAI;AACF,UAAK;YACC;QAGH,MAAK;aACJ;AACR,kBAAc,KAAA;;;;AAKtB,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;EACA,oBAAoB;EACpB,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;;;;AC5XpF,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;;;;ACxDH,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,SACyB;CACzB,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;CACJ,IAAI;CACJ,IAAI,uBAAmE,OAAO,OAAO,EAAE,CAAC;CACxF,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;GACpC,MAAM,WAAW,OAAO,OAAO,QAAmC,CAAC,MACjE,UACE,SACA,OAAO,UAAU,aACf,WAAW,SAAU,MAAuC,UAAU,KAAA,KACrE,WAAW,SAAU,MAAuC,UAAU,KAAA,GAC5E;AAMD,WAAQ,UAAU,cAAc,IAAI,UAAU;AAC9C,WAAQ,UAAU,SAAS,OAAO;AAClC,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,SAAgC;IACpC,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,0BAAuB,OAAO,OAC5B,CAAC,GAAG,YAAY,CAAC,SAAQ,QAAO;IAC9B,MAAM,gBAAgB,OAAO,IAAI,IAAI;IACrC,MAAM,eAAe,QAAQ,IAAI;AACjC,QAAI,kBAAkB,cAAc;AAClC,SAAI,CAAC,cAAe,QAAO,EAAE;AAC7B,UAAK,KAAK,WAAW,OAAO,IAAI,OAAO,IAAI,IAAI,EAAO,QAAQ,IAAI,CAAM,CAAE,QAAO,EAAE;;AAErF,WAAO,CACL;KACE;KACA,MAAM,CAAC,gBAAgB,UAAU,CAAC,eAAe,YAAY;KAC7D,QAAQ,gBAAgB,OAAO,IAAI,IAAI,GAAG,KAAA;KAC1C,OAAO,eAAe,QAAQ,IAAI,GAAG,KAAA;KACtC,CACF;KACD,CACH;AACD,WAAQ;AACR,UAAO,WAAW,KAAA;;EAEpB,UAAS,WAAU;GACjB,MAAM,eAAe,SAAmE;AACtF,gBAAY,OAAO;IACnB,MAAM,WAAW,OAAO,IAAI,IAAI,KAAK,GAAG,KAAA;AACxC,WAAO,OAAO,OACZ,qBAAqB,QAAO,eAAc,CAAC,YAAY,SAAS,IAAI,WAAW,IAAI,CAAC,CACrF;;GAgBH,MAAM,QAAiC;IACrC,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,UA3BqC,OAAO,OAAO;KACnD,MAAK,QAAO;AACV,kBAAY,OAAO;AACnB,aAAO,OAAO,IAAI,IAAI;;KAExB,MAAK,QAAO;AACV,kBAAY,OAAO;AACnB,aAAO,OAAO,IAAI,IAAI;;KAExB,WAAW;AACT,kBAAY,OAAO;AACnB,aAAO;;KAEV,CAcS;IACR;IACA,UAAU,YAAY,SAAS,IAAI;IACnC;IACA;IACA;IACA;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,0BAAuB,OAAO,OAAO,EAAE,CAAC;AACxC,WAAQ,KAAA;AACR,WAAQ,KAAA;AACR,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;;;;ACva9B,MAAa,iBAAiB,cAAyB;CACrD,MAAM,4BAAY,IAAI,KAAqB;CAC3C,MAAM,4BAAY,IAAI,KASnB;CACH,MAAM,8BAAc,IAAI,SAAiB;CACzC,MAAM,kCAAkB,IAAI,SAAyB;CACrD,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,IAAI;EACJ,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,aAAQ,KAAA;AACR,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,aACTC,mBAAAA,iBAAiB,SAAS,WAAW,QAAQ,GAC7CC,mBAAAA,aAAa,QAAQ;AACzB,YAAO,OAAO,OAAO;MACnB;MACA,UAAU,QAAQ,UAAU;MAC5B,SAAS,OAAO,OAAO,QAAQ,OAAO,CAAC;MACvC,OAAO,OAAO,OAAO;MACrB;MACA,OAAO,OAAO;MACd,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,aAAQ,UAAU,cAAc;AAChC,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,eAA+B,SAAY,UAAmC;EAClF,IAAI,QAAQ;EACZ,IAAI,WAAW;EACf,IAAI,WAAW;EACf,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI,QAAQ;EACZ,IAAI,UAAU;EACd,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;AACX,cAAU;AACV,aAAS,KAAA;AACT,YAAQ,KAAA;AACR,YAAQ,KAAA;AACR,YAAQ;;GAEV,UAAS,WAAU;AACjB,gBAAY,OAAO;AACnB,WAAO,OAAO,OAAO;KACnB;KACA;KACA;KACA,SAAS,CAAC,MAAM,UAAU,MAAM;KAChC;KACA;KACA;KACA;KACD,CAAC;;GAEL;AACD,YAAU,SAAS,QAAQ,OAAO;EAClC,MAAM,UAAU,MAAS,aAA2C;AAClE,aAAU,YAAY;GACtB,MAAM,aAAa,OAAO,UAAU,KAAA;GACpC,MAAM,WACJ,aAAa,KAAA,MACZ,SAAS,UAAU,QACjB,SAAS,aAAa,KAAA,KAAa,SAAS,aAAa,YAC1D,SAAS,WAAW,KAAA,KACpB,SAAS,UAAU,KAAA,KACnB,SAAS,UAAU,KAAA;AACvB,OAAI,MAAM,OAAO,KAAK,IAAI,CAAC,cAAc,CAAC,SAAU;AACpD,UAAO,QAAQ,KAAA;AACf,OAAI,CAAC,QAAS,YAAW;AACzB,WAAQ;AACR,cAAW,UAAU,YAAY,WAAW;AAC5C,YAAS,UAAU;AACnB,WAAQ,UAAU,SAAS;AAC3B,WAAQ,UAAU,cAAc,IAAI,UAAU,SAAS;AACvD,aAAU,UAAU,SAAS;AAC7B,aAAU,QAAQ,OAAO;AACzB,aAAU;;AAEZ,SAAO;GACL,QAAQ;GACR;GACA,IAAI,MAAS;AACX,WAAO,KAAK;AACZ,cAAU,KAAK;;GAElB;;CAEH,MAAM,uBACJ,MACA,UACoC;AACpC,YAAU,YAAY;EACtB,MAAM,MAAM,gBAAgB,IAAI,KAAK;AACrC,MAAI,IAAK,QAAO;EAChB,MAAM,QAAQ,YAAkB,KAAK,SAAS,EAAE,MAAM;EACtD,MAAM,QAAQ,UAAmB;GAC/B,MAAM,SAAS,UAAU,OAAO,MAAM,OAAO;AAC7C,UAAO,QAAQ,IAAI,gBAAgB,UAAU,mBAAmB,CAAC,OAAO,UAAU,CAAC,EAAE,MAAM;AAC3F,aAAU,QAAQ,OAAO;;EAE3B,IAAI;AACJ,MAAI;AACF,iBAAc,KAAK,WAAU,UAAS;AACpC,QAAI;AACF,WAAM,OAAO,MAAM,OAAO;MACxB,UAAU,MAAM;MAChB,OAAO,MAAM;MACb,QAAQ,MAAM;MACd,OAAO,MAAM;MACb,OAAO,MAAM;MACd,CAAC;aACK,OAAO;AACd,UAAK,MAAM;;AAEb,cAAU,KAAK;KACf;WACK,OAAO;AACd,kBAAe;AACf,aAAU,iBAAiB,MAAM,OAAO;AACxC,SAAM;;AAER,YAAU,SAAS,UAAU,eAAe,CAAC;AAC7C,kBAAgB,IAAI,MAAM,MAAM,OAAO;AACvC,SAAO,MAAM;;CAEf,MAAM,4BACJ,SAC4C;AAC5C,YAAU,YAAY;EACtB,MAAM,MAAM,gBAAgB,IAAI,KAAK;AACrC,MAAI,IAAK,QAAO;EAChB,IAAI,OAAO,KAAK,SAAS;EACzB,IAAI,WAAW;EACf,IAAI,WAAW,KAAK,UAAU;EAC9B,IAAI;EACJ,IAAI,QAAQ;EACZ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI,uBACF,OAAO,OAAO,EAAE,CAAC;EACnB,IAAI,iCAAiB,IAAI,KAAQ;EACjC,IAAI,UAAU;EACd,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;AACX,cAAU;AACV,aAAS,KAAA;AACT,YAAQ;AACR,aAAS,KAAA;AACT,YAAQ,KAAA;AACR,YAAQ,KAAA;AACR,2BAAuB,OAAO,OAAO,EAAE,CAAC;AACxC,mBAAe,OAAO;;GAExB,UAAS,WAAU;AACjB,gBAAY,OAAO;IACnB,MAAM,cAAoC,OAAO,OAAO;KACtD,MAAK,QAAO;AACV,kBAAY,OAAO;AACnB,aAAO,KAAK,IAAI,IAAI;;KAEtB,MAAK,QAAO;AACV,kBAAY,OAAO;AACnB,aAAO,KAAK,IAAI,IAAI;;KAEtB,WAAW;AACT,kBAAY,OAAO;AACnB,aAAO,KAAK,KAAK;;KAEpB,CAAC;IACF,MAAM,eAAqC,OAAO,OAAO;KACvD,MAAK,QAAO;AACV,kBAAY,OAAO;AACnB,aAAO,SAAS,IAAI,IAAI;;KAE1B,MAAK,QAAO;AACV,kBAAY,OAAO;AACnB,aAAO,SAAS,IAAI,IAAI;;KAE1B,WAAW;AACT,kBAAY,OAAO;AACnB,aAAO,SAAS,KAAK;;KAExB,CAAC;AACF,WAAO,OAAO,OAAO;KACnB,GAAG;KACH,UAAU;KACV;KACA;KACA;KACA,cAAc,SAAuB;AACnC,kBAAY,OAAO;MACnB,MAAM,WAAW,OAAO,IAAI,IAAI,KAAK,GAAG,KAAA;AACxC,aAAO,OAAO,OACZ,qBAAqB,QAAO,eAAc,CAAC,YAAY,SAAS,IAAI,WAAW,IAAI,CAAC,CACrF;;KAEH;KACA;KACA;KACD,CAAC;;GAEL;AACD,YAAU,SAAS,QAAQ,OAAO;AAClC,cAAY,IAAI,OAAO;EACvB,MAAM,QAAQ,UAAmB;AAC/B,UAAO,QAAQ,IAAI,gBAAgB,UAAU,8BAA8B,CAAC,SAAS,EAAE,MAAM;AAC7F,aAAU,QAAQ,OAAO;;EAE3B,MAAM,qBAAqB,WAA8C;AACvE,OAAI,QAAQ,SAAS,eAAe;AAClC,WAAO,MAAM,SAAQ,QAAO,eAAe,IAAI,IAAI,CAAC;AACpD,WAAO,QAAQ,SAAQ,QAAO,eAAe,IAAI,IAAI,CAAC;AACtD,WAAO,QAAQ,SAAQ,QAAO,eAAe,IAAI,IAAI,CAAC;;;EAG1D,MAAM,6BAA6B;GACjC,MAAM,cAAsE,EAAE;AAC9E,QAAK,MAAM,OAAO,gBAAgB;IAChC,MAAM,gBAAgB,SAAS,IAAI,IAAI;IACvC,MAAM,eAAe,KAAK,IAAI,IAAI;IAClC,MAAM,SAAS,gBAAgB,SAAS,IAAI,IAAI,GAAG,KAAA;IACnD,MAAM,QAAQ,eAAe,KAAK,IAAI,IAAI,GAAG,KAAA;AAC7C,QAAI,kBAAkB,gBAAgB,OAAO,GAAG,QAAQ,MAAM,CAAE;AAChE,gBAAY,KAAK;KACf;KACA,MAAM,CAAC,gBAAgB,UAAU,CAAC,eAAe,YAAY;KAC7D;KACA;KACD,CAAC;;AAEJ,0BAAuB,OAAO,OAAO,YAAY;;EAEnD,MAAM,qBAAsD;AAC1D,OAAI,MAAO,QAAO,OAAO,OAAO,EAAE,MAAM,SAAkB,CAAC;GAC3D,MAAM,wBAAQ,IAAI,KAAQ;GAC1B,MAAM,0BAAU,IAAI,KAAQ;GAC5B,MAAM,0BAAU,IAAI,KAAQ;AAC5B,wBAAqB,SAAQ,eAAc;AACzC,QAAI,WAAW,SAAS,QAAS,OAAM,IAAI,WAAW,IAAI;aACjD,WAAW,SAAS,UAAW,SAAQ,IAAI,WAAW,IAAI;QAC9D,SAAQ,IAAI,WAAW,IAAI;KAChC;GACF,MAAM,YAAY,SAAS,KAAK;GAChC,MAAM,WAAW,KAAK,KAAK;GAC3B,MAAM,eAAe,UAAU,QAAO,QAAO,KAAK,IAAI,IAAI,CAAC;GAC3D,MAAM,cAAc,SAAS,QAAO,QAAO,SAAS,IAAI,IAAI,CAAC;GAC7D,MAAM,eACJ,aAAa,WAAW,YAAY,UACpC,aAAa,MAAM,KAAK,UAAU,YAAY,WAAW,IAAI;AAC/D,OAAI,CAAC,MAAM,QAAQ,CAAC,QAAQ,QAAQ,CAAC,QAAQ,QAAQ,CAAC,aAAc,QAAO,KAAA;AAC3E,UAAO,OAAO,OAAO;IACnB,MAAM;IACN;IACA;IACA;IACA;IACD,CAAC;;EAEJ,IAAI;AACJ,MAAI;AACF,iBAAc,KAAK,WAAU,UAAS;AACpC,QAAI;AACF,eAAU,YAAY;AACtB,SAAI,CAAC,QAAS,YAAW,MAAM;AAC/B,YAAO,KAAK,SAAS;AACrB,gBAAW,MAAM;AACjB,uBAAkB,MAAM,OAAO;AAC/B,eAAU,MAAM,SAAS,MAAM,QAAQ,SAAS;AAChD,cAAS,MAAM;AACf,aAAQ,MAAM,SAAS;AACvB,aAAQ,UAAU,cAAc,IAAI,MAAM;AAC1C,2BAAsB;AACtB,cAAS,cAAc;AACvB,YAAO,QAAQ,KAAA;AACf,eAAU,QAAQ,OAAO;AACzB,eAAU;aACH,OAAO;AACd,UAAK,MAAM;;AAEb,cAAU,KAAK;KACf;WACK,OAAO;AACd,kBAAe;AACf,aAAU,iBAAiB,OAAO;AAClC,SAAM;;AAER,YAAU,SAAS,UAAU,eAAe,CAAC;AAC7C,kBAAgB,IAAI,MAAM,OAAO;AACjC,SAAO;;AAET,QAAO;EACL,eAAe;AACb,aAAU,OAAO;AACjB,aAAU,OAAO;;EAEnB;EACA,aACE,QACA,YACG,oBAAoB,QAAQ,SAAS,WAAW,OAAO,GAAG;EAC/D,uBAA+C,WAC7C,yBAAyB,OAAO;EAClC,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,YACiC;AACjC,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;;;;AC5kBH,MAAa,eACX,WACA,MACA,YACiB;CACjB,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI,cAAc;CAClB,IAAI,WAAW;CACf,IAAI,UAAU;CACd,IAAI,QAAQ;CACZ,IAAI;CACJ,IAAI;CACJ,MAAM,4BAAY,IAAI,KAAiB;CACvC,MAAM,QAAQ,WAAW,WAAW,MAAM;EACxC,WAAW,SAAS,UAAU;GAC5B,MAAM,WAAW,OAAO,OAAO,QAAmC,CAAC,MACjE,UACE,SACA,OAAO,UAAU,aACf,WAAW,SAAU,MAAuC,UAAU,KAAA,KACrE,WAAW,SAAU,MAAuC,UAAU,KAAA,GAC5E;AAMD,WAAQ,UAAU,cAAc,IAAI,UAAU;AAC9C,WAAQ,UAAU,SAAS,OAAO;GAClC,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;IACA;IACA;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;AACR,WAAQ,KAAA;AACR,WAAQ,KAAA;;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;;;;ACtGT,MAAa,yBAAyB,YAEf;CACrB,MAAM,YAAY,gBAAgB,QAAQ,QAAQ;CAClD,MAAM,UAAU,cAAc,UAAU;CAUxC,SAAS,MACP,OACA,kBAEA,SACc;AACd,MAAI,OAAO,qBAAqB,WAC9B,QAAO,YAAY,WAAW,OAA8B,iBAAiB;EAC/E,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,UAA2B;EAC/B,UAAU,QAAQ;EAClB,aACE,QACA,YACG,QAAQ,WAAW,QAAQ,QAAQ;EACxC,uBAA+C,WAC7C,QAAQ,qBAAqB,OAAO;EACtC,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,QAAO,OAAO,OAAO,QAAQ;;;;AC1G/B,MAAM,gCAAgB,IAAI,SAA+B;AACzD,IAAI;AAEJ,MAAM,YAAY,QAAsB;AACtC,gBAAe,KAAK,IAAI,IAAI;;AAE9B,MAAM,YAAY,YAAY,UAAgB;AAC5C,KAAI,CAAC,cAAe;AACpB,eAAc,MAAM;AACpB,eAAc,cAAc;;AAG9B,MAAM,WAAgC,SAAuD;CAC3F,MAAM,OAAO,KAAK,KAAK;CACvB,MAAM,yBAAS,IAAI,KAAW;AAC9B,MAAK,MAAM,OAAO,KAAM,QAAO,IAAI,KAAK,KAAK,IAAI,IAAI,CAAM;CAC3D,MAAM,OAA+B;EACnC,MAAK,QAAO;AACV,YAAS,IAAI;AACb,UAAO,OAAO,IAAI,IAAI;;EAExB,MAAK,QAAO;AACV,YAAS,IAAI;AACb,UAAO,OAAO,IAAI,IAAI;;EAExB,IAAI,OAAO;AACT,YAAS,KAAK;AACd,UAAO,OAAO;;EAEhB,YAAY;AACV,YAAS,KAAK;AACd,UAAO,OAAO,MAAM;;EAEtB,cAAc;AACZ,YAAS,KAAK;AACd,UAAO,OAAO,QAAQ;;EAExB,eAAe;AACb,YAAS,KAAK;AACd,UAAO,OAAO,SAAS;;EAEzB,UAAU,UAAU,YAAY;AAC9B,YAAS,KAAK;AACd,UAAO,SAAS,OAAO,QAAQ,SAAS,KAAK,SAAS,OAAO,KAAK,KAAK,CAAC;;GAEzE,OAAO,iBAAiB;AACvB,YAAS,KAAK;AACd,UAAO,OAAO,OAAO,WAAW;;EAEnC;AACD,QAAO,OAAO,OAAO,KAAK;;AAG5B,MAAM,aAAa,UACjB,iBAAiB,OAChB,UAAU,QACT,OAAO,UAAU,YACjB,OAAQ,MAA4B,QAAQ,cAC5C,OAAQ,MAA6B,SAAS,cAC9C,OAAQ,MAAgC,YAAY;AAExD,MAAM,WAAW,WAA0E;CACzF,MAAK,QAAO,MAAM,IAAI,IAAI;CAC1B,MAAK,QAAO,MAAM,IAAI,IAAI;CAC1B,WAAW,OAAO,OAAO,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC;CAC5C;AAED,MAAM,aACJ,UACA,YACyC;CACzC,MAAM,wBAAQ,IAAI,KAAa;CAC/B,MAAM,0BAAU,IAAI,KAAa;CACjC,MAAM,0BAAU,IAAI,KAAa;AACjC,MAAK,MAAM,OAAO,SAAS,MAAM,CAC/B,KAAI,CAAC,QAAQ,IAAI,IAAI,CAAE,SAAQ,IAAI,IAAI;UAC9B,CAAC,OAAO,GAAG,SAAS,IAAI,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC,CAAE,SAAQ,IAAI,IAAI;AAE5E,MAAK,MAAM,OAAO,QAAQ,MAAM,CAAE,KAAI,CAAC,SAAS,IAAI,IAAI,CAAE,OAAM,IAAI,IAAI;CACxE,MAAM,SAAS,CAAC,GAAG,SAAS,MAAM,CAAC,CAAC,QAAO,QAAO,QAAQ,IAAI,IAAI,CAAC;CACnE,MAAM,QAAQ,CAAC,GAAG,QAAQ,MAAM,CAAC,CAAC,QAAO,QAAO,SAAS,IAAI,IAAI,CAAC;CAClE,MAAM,eACJ,OAAO,WAAW,MAAM,UAAU,OAAO,MAAM,KAAK,UAAU,QAAQ,MAAM,OAAO;AACrF,KAAI,CAAC,MAAM,QAAQ,CAAC,QAAQ,QAAQ,CAAC,QAAQ,QAAQ,CAAC,aAAc,QAAO,KAAA;AAC3E,QAAO;EAAE,MAAM;EAAe;EAAO;EAAS;EAAS;EAAc;;AAGvE,MAAM,gBAAgB,UAA4B;AAChD,KAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,KAAI,WAAW,MAAO,QAAQ,MAAsC;AACpE,KAAI,UAAU,MAAO,QAAOC,mBAAAA,SAAU,MAAqC,KAAK;AAChF,KAAI,SAAS,SAAS,OAAQ,MAA4B,QAAQ,WAChE,QAAO,QAAQ,MAAyC;AAC1D,QAAO;;AAGT,MAAM,YAAY,aAAgD;AAElE,MAAa,2BAA2B,YAEf;CACvB,MAAM,UAAU,sBAAsB,EAAE,SAAS,SAAS,kBAAkB,KAAA,IAAY,CAAC;CACzF,MAAM,4BAAY,IAAI,SAA+B;CACrD,MAAM,yBAAS,IAAI,SAAyE;CAC5F,MAAM,8BAAc,IAAI,SAGrB;CAEH,MAAM,eAAe,eAAkD;EACrE,MAAM,MAAM,UAAU,IAAI,WAAW;AACrC,MAAI,IAAK,QAAO;EAChB,MAAM,aAAaC,mBAAAA,aAAa,WAAW;EAC3C,IAAI;AACJ,UAAQ,WAAW,MAAnB;GACE,KAAK,SAAS;IACZ,MAAM,QAAQ,QAAQ,MAAM,WAAW,SAAS,EAAE,SAAS,WAAW,SAAS,CAAC;AAChF,WAAO,IAAI,YAAY,MAAM;AAC7B,eAAW,QAAQ,MAAM,EAAE,OAAO,MAAM,QAAQ,GAAG,EAAE,YAAY,MAAM,MAAM;AAC7E;;GAEF,KAAK,YAAY;IACf,MAAM,SAAS,QAAQ,aAAa,WAAW,UAAU,EAAE,SAAS,WAAW,SAAS,CAAC;AACzF,eAAW,QAAQ,MAAM,EAAE,QAAQ,GAAG,EAAE,aAAa,OAAO,MAAM;AAClE;;GAEF,KAAK;IACH;KACE,MAAM,SAAS,QAAQ,WAAW,WAAW,OAAO;AACpD,gBAAW,QAAQ,MAAM,EAAE,QAAQ,GAAG,EAAE,aAAa,OAAO,MAAM;;AAEpE;GACF,KAAK,qBAAqB;IACxB,MAAM,SAAS,QAAQ,qBAAqB,WAAW,OAAO;AAC9D,eAAW,QAAQ,IAAI,SAAkB,MAAM,UAAU,MAAM;AAC/D;;GAEF,KAAK,YAAY;IACf,MAAM,WAAW,QAAQ,SAAS,WAAW,SAAS;AACtD,QAAI,CAAC,WAAW,UAAU;AACxB,gBAAW,QAAQ,MAAM,EAAE,UAAU,GAAG,EAAE,eAAeD,mBAAAA,SAAS,SAAS,KAAK,CAAC;AACjF;;IAEF,MAAM,QAAQ,SAAS,WAAW,SAAS;AAC3C,QAAI;KACF,MAAM,aAAa,SAAS,WAAW,WAAW,SAAkB;AACpE,gBAAW,QAAQ,IAAI,aAAa,KAAK,UAAUA,mBAAAA,SAAS,MAAM,CAAC;AACnE;YACM;KACN,MAAM,WAAW,SAAS,QAAQ,WAAW,SAAkB;KAC/D,MAAM,UAAU,YAAY,MAAM,QAAQ,SAAS,WAAW,SAAkB,CAAC;AACjF,gBAAW,QAAQ,MAAM,EAAE,UAAU,QAAQ;AAE3C,aAAOE,cAAAA,KADMF,mBAAAA,SAAS,MAAM,SACL,EAAE,SAAS,MAAM,OAAO;OAC/C;;AAEJ;;GAEF,KAAK,UAAU;IACb,MAAM,UAAU,OAAO,YACrB,WAAW,aAAa,KAAK,YAAY,UAAU,CACjD,IAAI,SACJ,SAAS,YAAY,WAAW,CAAC,CAClC,CAAC,CACH;AACD,eAAW,QAAQ,MACjB,UACA,WAAU,WAAW,QAAQ,GAAG,OAAO,OAAO,OAAO,CAAC,IAAI,aAAa,CAAC,EACxE,EAAE,SAAS,WAAW,SAAS,CAChC;AACD;;GAEF,KAAK,qBAAqB;IACxB,MAAM,UAAU,OAAO,YACrB,OAAO,QAAQ,WAAW,aAAa,CAAC,KAAK,CAAC,KAAK,gBAAgB,CACjE,KACA,SAAS,YAAY,WAAoB,CAAC,CAC3C,CAAC,CACH;AACD,eAAW,QAAQ,MACjB;KAAE;KAAS,OAAO,WAAW;KAAgB,EAC7C,EAAE,SAAS,WAAW,SAAkB,CACzC;AACD;;GAEF,KAAK,0BAA0B;IAC7B,MAAM,UAAU,OAAO,YACrB,OAAO,QAAQ,WAAW,aAAa,CAAC,KAAK,CAAC,KAAK,gBAAgB,CACjE,KACA,SAAS,YAAY,WAAoB,CAAC,CAC3C,CAAC,CACH;AACD,eAAW,QAAQ,YAAqB,CAAC;KACvC;KACA,OAAO,WAAW;KAClB,SAAS,WAAW;KACpB,MAAM,WAAW;KAClB,CAAC;AACF;;;AAGJ,YAAU,IAAI,YAAY,SAAS;AACnC,SAAO;;CAGT,MAAM,OAAU,eAAiC;EAC/C,MAAM,WAAW,YAAY,WAAkC;EAC/D,MAAM,UAAmB,SAAS,SAAS;AAC3C,MACE,WACA,OAAO,YAAY,YACnB,SAAS,WACT,OAAQ,QAA8B,QAAQ,YAC9C;GACA,MAAM,WAAW,YAAY,IAAI,SAAS;GAC1C,MAAM,WAAW,SAAS,UAAU;AACpC,OAAI,UAAU,aAAa,SAAU,QAAO,SAAS;GACrD,MAAM,QAAQ,QAAQ,QAA2C;AACjE,eAAY,IAAI,UAAU;IAAE;IAAU;IAAO,CAAC;AAC9C,UAAO;;AAET,MAAI,UAAU,QAAQ,EAAE;GACtB,MAAM,WAAW,YAAY,IAAI,SAAS;GAC1C,MAAM,WAAW,SAAS,UAAU;AACpC,OAAI,UAAU,aAAa,SAAU,QAAO,SAAS;GACrD,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,CAAC;AACvC,eAAY,IAAI,UAAU;IAAE;IAAU;IAAO,CAAC;AAC9C,UAAO;;AAET,SAAO;;CAGT,MAAM,QAA2B;EAC/B;EACA,aAAa,YAAiC,aAAyB;AAErE,UADiB,YAAY,WACd,CAAC,UAAU,SAAkB;;EAE9C,OAAO,OAAuB,UAAmB;AAC/C,eAAY,MAAM;GAClB,MAAM,SAAS,OAAO,IAAI,MAAM;AAChC,OAAI,CAAC,OAAQ,OAAM,IAAI,UAAU,8BAA8B;AAC/D,UAAO,IAAI,MAAM;;EAEnB,OAAO,QAAQ;EACf,SAAS,QAAQ;EAClB;AACD,eAAc,IAAI,OAAO;EAAE;EAAa;EAAK,CAAC;AAC9C,QAAO,OAAO,OAAO,MAAM;;AAS7B,MAAa,mBACX,OACA,YACA,aACmE;CACnE,MAAM,QAAQ,cAAc,IAAI,MAAM;AACtC,KAAI,CAAC,MAAO,OAAM,IAAI,UAAU,8BAA8B;CAC9D,MAAM,UAA4B;EAAE,sBAAM,IAAI,KAAK;EAAE,KAAK;EAAO,WAAW;EAAO;CACnF,MAAM,WAAW;AACjB,iBAAgB;AAChB,KAAI;AAEF,SAAO;GACL,OAFY,SAAS,MAAM,IAAI,WAAW,CAErC;GACL,WAAW,OAAO,OAAO;IACvB,MAAM,IAAI,IAAI,QAAQ,KAAK;IAC3B,KAAK,QAAQ;IACb,WAAW,QAAQ;IACpB,CAAC;GACH;WACO;AACR,kBAAgB;;;AAIpB,MAAa,uBACX,OACA,YACA,WACA,aACgB;CAChB,MAAM,QAAQ,cAAc,IAAI,MAAM;AACtC,KAAI,CAAC,MAAO,OAAM,IAAI,UAAU,8BAA8B;CAC9D,MAAM,WAAW,MAAM,YAAY,WAAW;CAC9C,IAAI;CACJ,MAAM,eAAe,MAAM,IAAI,WAAW;AAC1C,KAAI,UAAU,aAAa,CAAE,sBAAqB;AAClD,QAAO,SAAS,YAAY,WAAiD;AAC3E,MAAI,CAAC,UAAU,oBAAoB;GACjC,MAAM,UAAU,MAAM,IAAI,WAAW;AACrC,OAAI,UAAU,QAAQ,EAAE;AACtB,aAAS,UAAU,oBAAoB,QAAQ;AAC/C,yBAAqB;AACrB,QAAI,CAAC,OAAQ;SACR,sBAAqB,KAAA;;AAE9B,MAAI,CAAC,UAAU,OAAO,SAAS,SAAS;AACtC,aAAU;AACV;;AAEF,MACE,UAAU,QACT,UAAU,aAAa,OAAO,MAAM,QAAQ,OAAO,QAAQ,QAAQ,OAAO,QAAQ,OACnF;AACA,aAAU;AACV;;AAEF,OAAK,MAAM,OAAO,UAAU,KAC1B,KAAI,OAAO,MAAM,IAAI,IAAI,IAAI,OAAO,QAAQ,IAAI,IAAI,IAAI,OAAO,QAAQ,IAAI,IAAI,EAAE;AAC/E,aAAU;AACV;;IAGM"}
@@ -1,5 +1,5 @@
1
1
  import { _ as Unsubscribe } from "./contract-BT53Gg94.js";
2
- import { c as BatchOptions, m as ProjectionError, n as Projection, t as Input } from "./definition-BlMeHwdz.js";
2
+ import { _ as ProjectionError, c as BatchOptions, n as Projection, t as Input } from "./definition-Dr8tHwTD.js";
3
3
 
4
4
  //#region core/src/projection/store.d.ts
5
5
  type ProjectionRuntime = {
@@ -25,4 +25,4 @@ declare const trackProjection: <T, R>(owner: ProjectionRuntime, projection: Proj
25
25
  declare const subscribeProjection: (owner: ProjectionRuntime, projection: Projection<unknown>, selection: ProjectionSelection, listener: () => void) => Unsubscribe;
26
26
  //#endregion
27
27
  export { trackProjection as a, subscribeProjection as i, ProjectionSelection as n, createProjectionRuntime as r, ProjectionRuntime as t };
28
- //# sourceMappingURL=store-P5dJ7TVe.d.ts.map
28
+ //# sourceMappingURL=store-BCR20XSb.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { L as profile, f as read, i as AddressIndex, o as contains } from "./issue-DVaGQGeP.js";
2
- import { d as createAccess, h as checkKey, o as definitionOf, p as snapshot, u as collectionAccess } from "./definition-DXrKMVs7.js";
2
+ import { c as createAccess, f as checkKey, r as definitionOf, s as collectionAccess, u as snapshot } from "./definition-wOvuklwp.js";
3
3
  //#region core/src/schema.ts
4
4
  const node = (value) => Object.freeze(value);
5
5
  const field = (validator) => node({
@@ -1566,9 +1566,7 @@ const createSources = (scheduler) => {
1566
1566
  record.fault = new ProjectionError("source", "external collection source", [revision], error);
1567
1567
  scheduler.capture(record);
1568
1568
  };
1569
- const addTransitionKeys = (event) => {
1570
- event.transitions().forEach((transition) => transitionKeys.add(transition.key));
1571
- const impact = event.change;
1569
+ const addTransitionKeys = (impact) => {
1572
1570
  if (impact?.kind === "incremental") {
1573
1571
  impact.added.forEach((key) => transitionKeys.add(key));
1574
1572
  impact.removed.forEach((key) => transitionKeys.add(key));
@@ -1624,7 +1622,7 @@ const createSources = (scheduler) => {
1624
1622
  if (!pending) previous = event.previous;
1625
1623
  read = port.current();
1626
1624
  revision = event.revision;
1627
- addTransitionKeys(event);
1625
+ addTransitionKeys(event.change);
1628
1626
  reset ||= event.reset || event.change?.kind === "reset";
1629
1627
  detail = event.detail;
1630
1628
  cause = event.cause ?? cause;
@@ -2219,4 +2217,4 @@ const subscribeProjection = (owner, projection, selection, listener) => {
2219
2217
  //#endregion
2220
2218
  export { variant as A, field as C, optional as D, object as E, table as O, compilePath as S, map as T, DocumentDisposedError as _, ProjectionError as a, createImpact as b, disposeNotification as c, subscribeDependencies as d, subscribeRoot as f, readWith as g, bindRuntimeAccess as h, ProjectionDisposedError as i, tree as k, notify as l, accessOf as m, subscribeProjection as n, bindDocumentReadable as o, subscribeTargets as p, trackProjection as r, createNotification as s, createProjectionRuntime as t, shareNotification as u, DocumentReentrancyError as v, list as w, same as x, TransactionRejected as y };
2221
2219
 
2222
- //# sourceMappingURL=store-CtgvCVFg.js.map
2220
+ //# sourceMappingURL=store-PLKs1KnS.js.map