@bian-womp/spark-graph 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/index.cjs +74 -145
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/cjs/src/index.d.ts +1 -1
- package/lib/cjs/src/index.d.ts.map +1 -1
- package/lib/cjs/src/runtime/GraphRuntime.d.ts +6 -14
- package/lib/cjs/src/runtime/GraphRuntime.d.ts.map +1 -1
- package/lib/cjs/src/runtime/{UnifiedEngine.d.ts → LocalEngine.d.ts} +18 -5
- package/lib/cjs/src/runtime/LocalEngine.d.ts.map +1 -0
- package/lib/cjs/src/runtime/components/ExecutionScheduler.d.ts.map +1 -1
- package/lib/cjs/src/runtime/components/ValuePropagator.d.ts.map +1 -1
- package/lib/esm/index.js +74 -145
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/src/index.d.ts +1 -1
- package/lib/esm/src/index.d.ts.map +1 -1
- package/lib/esm/src/runtime/GraphRuntime.d.ts +6 -14
- package/lib/esm/src/runtime/GraphRuntime.d.ts.map +1 -1
- package/lib/esm/src/runtime/{UnifiedEngine.d.ts → LocalEngine.d.ts} +18 -5
- package/lib/esm/src/runtime/LocalEngine.d.ts.map +1 -0
- package/lib/esm/src/runtime/components/ExecutionScheduler.d.ts.map +1 -1
- package/lib/esm/src/runtime/components/ValuePropagator.d.ts.map +1 -1
- package/package.json +2 -2
- package/lib/cjs/src/runtime/AbstractEngine.d.ts +0 -28
- package/lib/cjs/src/runtime/AbstractEngine.d.ts.map +0 -1
- package/lib/cjs/src/runtime/UnifiedEngine.d.ts.map +0 -1
- package/lib/esm/src/runtime/AbstractEngine.d.ts +0 -28
- package/lib/esm/src/runtime/AbstractEngine.d.ts.map +0 -1
- package/lib/esm/src/runtime/UnifiedEngine.d.ts.map +0 -1
package/lib/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/core/types.ts","../../src/builder/Registry.ts","../../src/runtime/utils.ts","../../src/runtime/components/GraphStructure.ts","../../src/runtime/components/EventEmitter.ts","../../src/runtime/components/RunContextManager.ts","../../../protocol/lib/esm/index.js","../../src/runtime/components/HandleResolver.ts","../../src/runtime/components/ValuePropagator.ts","../../src/runtime/components/ExecutionScheduler.ts","../../src/runtime/GraphRuntime.ts","../../src/builder/GraphBuilder.ts","../../src/runtime/AbstractEngine.ts","../../src/runtime/UnifiedEngine.ts","../../src/plugins/compute.ts","../../src/plugins/composite.ts","../../src/misc/base.ts","../../src/examples/shared.ts","../../src/examples/simple.ts","../../src/examples/async.ts","../../src/examples/progress.ts","../../src/examples/validation.ts","../../src/misc/utils/json.ts","../../src/misc/utils/merge.ts"],"sourcesContent":["import type {\n DataTypeId,\n NodeTypeId,\n HandleId,\n InputHandleDescriptor,\n NodeCategoryId,\n ResolvedHandles,\n ExecutionPolicy,\n LogLevel,\n} from \"@bian-womp/spark-protocol\";\n\nexport interface DataTypeDescriptor<T = unknown> {\n id: DataTypeId;\n displayName?: string;\n validate(value: T): boolean;\n helpers?: Record<string, unknown>;\n // Optional metadata used by tooling/UI (non-functional at runtime)\n bakeTarget?: { nodeTypeId: NodeTypeId; inputHandle: HandleId };\n}\n\nexport type InvalidateReason =\n | \"input-changed\"\n | \"dependency-changed\"\n | \"manual\"\n | \"disposed\";\n\nexport interface NodeContext<State> {\n state: State;\n setState(next: Partial<State>): void;\n}\n\nexport interface ExecutionContext<State> extends NodeContext<State> {\n nodeId: string;\n environment: Record<string, unknown>;\n runId: string;\n abortSignal: AbortSignal;\n\n emit: (handle: HandleId, value: unknown) => void;\n invalidateDownstream: () => void;\n scheduleInputsChanged: () => void;\n getInput: (handle: HandleId) => unknown;\n reportProgress?: (value: number) => void;\n log: (\n level: LogLevel,\n message: string,\n context?: Record<string, unknown>\n ) => void;\n}\n\n/**\n * Extract State type from ExecutionContext<State>\n */\nexport type ExtractStateFromContext<T> = T extends ExecutionContext<infer S>\n ? S\n : never;\n\n/**\n * Extract State type from impl function signature\n */\nexport type ExtractStateFromImpl<Impl> = Impl extends (\n inputs: any,\n ctx: ExecutionContext<infer State>\n) => any\n ? State\n : never;\n\n/**\n * Extract Inputs type from impl function signature\n */\nexport type ExtractInputsFromImpl<Impl> = Impl extends (\n inputs: infer I,\n ctx: any\n) => any\n ? I\n : never;\n\nexport interface RuntimeNodeStats {\n runs: number;\n active: number;\n queued: number;\n lastStartAt?: number;\n lastEndAt?: number;\n lastDurationMs?: number;\n progress: number;\n lastError?: unknown;\n}\n\nexport interface RuntimeEdgeStats {\n runs: number;\n inFlight: boolean;\n lastStartAt?: number;\n lastEndAt?: number;\n lastDurationMs?: number;\n progress: number;\n lastError?: unknown;\n}\n\n// Typed output helper for union outputs\nexport type TypedOutputValue<T = unknown> = {\n __spark_type: DataTypeId;\n __spark_value: T;\n};\n\nexport function typed<T = unknown>(\n typeId: DataTypeId,\n value: T\n): TypedOutputValue<T> {\n return { __spark_type: typeId, __spark_value: value };\n}\n\nexport function isTypedOutput(v: unknown): v is TypedOutputValue<unknown> {\n return (\n !!v &&\n typeof v === \"object\" &&\n Object.prototype.hasOwnProperty.call(v, \"__spark_type\")\n );\n}\n\nexport function getTypedOutputTypeId(v: unknown): DataTypeId | undefined {\n if (isTypedOutput(v)) return String(v.__spark_type);\n return undefined;\n}\n\nexport function getTypedOutputValue(v: unknown): unknown {\n if (isTypedOutput(v)) return v.__spark_value;\n return v;\n}\n\nexport function getInputTypeId(\n inputs: Record<string, InputHandleDescriptor> | undefined,\n handle: HandleId\n): DataTypeId | undefined {\n const v = inputs ? inputs[handle] : undefined;\n if (!v) return undefined;\n return typeof v === \"string\" ? v : v.typeId;\n}\n\nexport function isInputPrivate(\n inputs: Record<string, InputHandleDescriptor> | undefined,\n handle: HandleId\n): boolean {\n const v = inputs ? inputs[handle] : undefined;\n return !!(v && typeof v === \"object\" && v.private);\n}\n\n// Helper type to extract State - prefers inferred from Impl, falls back to explicit State\ntype InferState<Impl, State> = ExtractStateFromImpl<Impl> extends never\n ? State\n : ExtractStateFromImpl<Impl>;\n\nexport interface NodeTypeDescriptor<\n I extends Record<string, InputHandleDescriptor> = Record<\n string,\n InputHandleDescriptor\n >,\n O extends Record<string, DataTypeId | DataTypeId[]> = Record<\n string,\n DataTypeId | DataTypeId[]\n >,\n State = unknown,\n Impl extends (inputs: any, ctx: ExecutionContext<any>) => any = (\n inputs: Record<string, unknown>,\n ctx: ExecutionContext<State>\n ) => void | Record<string, unknown> | Promise<void | Record<string, unknown>>\n> {\n id: NodeTypeId;\n categoryId: NodeCategoryId;\n displayName?: string;\n inputs: I; // handle -> DataTypeId or descriptor\n outputs: O; // handle -> DataTypeId or union of DataTypeIds\n impl: Impl; // category-specific implementation payload\n // Optional default runtime policy for this node type (merged with category/node-instance policy)\n policy?: Partial<ExecutionPolicy>;\n // Optional log level for this node type (controls lifecycle logging)\n logLevel?: LogLevel;\n // Optional per-node dynamic handle resolver. When provided, the runtime merges\n // these handles over static inputs/outputs based on per-node params/environment.\n resolveHandles?: (ctx: {\n nodeId: string;\n environment: Record<string, unknown>;\n params?: Record<string, unknown>;\n inputs?: Record<string, unknown>;\n }) => Partial<ResolvedHandles> | Promise<Partial<ResolvedHandles>>;\n // Registry-level per-handle defaults. If function, computed per node instance.\n inputDefaults?: Record<string, unknown>;\n lifecycle?: {\n prepare?: (\n params: Record<string, unknown>,\n ctx: ExecutionContext<InferState<Impl, State>>\n ) => void | Promise<void>;\n dispose?: (ctx: NodeContext<InferState<Impl, State>>) => void;\n };\n}\n","import type {\n DataTypeId,\n InputHandleDescriptor,\n} from \"@bian-womp/spark-protocol\";\nimport type {\n DataTypeDescriptor,\n ExecutionContext,\n NodeTypeDescriptor,\n} from \"../core/types\";\nimport type { NodeCategoryDescriptor } from \"../core/categories\";\n\n// Internal path resolution helpers\ninterface _EdgeStepSync {\n from: string;\n to: string;\n kind: \"sync\";\n convert: (v: unknown) => unknown;\n}\ninterface _EdgeStepAsync {\n from: string;\n to: string;\n kind: \"async\";\n convertAsync: (v: unknown, signal: AbortSignal) => Promise<unknown>;\n}\ntype _EdgeStep = _EdgeStepSync | _EdgeStepAsync;\n\n// Resolved coercion contract\nexport interface ResolvedCoercionSync {\n kind: \"sync\";\n convert: (value: unknown) => unknown;\n}\nexport interface ResolvedCoercionAsync {\n kind: \"async\";\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n}\nexport type ResolvedCoercion = ResolvedCoercionSync | ResolvedCoercionAsync;\n\nexport class CategoryRegistry {\n private categories = new Map<string, NodeCategoryDescriptor<any, any>>();\n register<Impl, State>(cat: NodeCategoryDescriptor<Impl, State>): this {\n this.categories.set(cat.id, cat);\n return this;\n }\n get(id: string): NodeCategoryDescriptor<any, any> | undefined {\n return this.categories.get(id);\n }\n has(id: string): boolean {\n return this.categories.has(id);\n }\n}\n\nexport class Registry {\n private static idCounter = 0;\n public readonly id: string;\n readonly types = new Map<string, DataTypeDescriptor<any>>();\n readonly nodes = new Map<string, NodeTypeDescriptor>();\n readonly enums = new Map<\n string,\n {\n options: Array<{ value: number; label: string }>;\n valueToLabel: Map<number, string>;\n labelToValue: Map<string, number>;\n }\n >();\n readonly categories = new CategoryRegistry();\n readonly serializers = new Map<\n string,\n {\n serialize: (value: unknown) => unknown;\n deserialize: (data: unknown) => unknown;\n }\n >();\n\n constructor(id?: string) {\n this.id = id ?? `r${Registry.idCounter++}`;\n }\n\n private coercions = new Map<\n string,\n { convert: (value: unknown) => unknown; nonTransitive: boolean }\n >();\n private asyncCoercions = new Map<\n string,\n {\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n nonTransitive: boolean;\n }\n >();\n\n private resolvedCache = new Map<\n string,\n | { kind: \"sync\"; convert: (value: unknown) => unknown }\n | {\n kind: \"async\";\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n }\n >();\n\n registerType(\n desc: DataTypeDescriptor,\n opts?: {\n withArray?: boolean;\n arrayId?: string;\n arrayPickFirstDefined?: boolean;\n }\n ): this {\n this.types.set(desc.id, desc);\n // Any structural change invalidates resolution cache\n this.resolvedCache.clear();\n if (!this.serializers.has(desc.id)) {\n this.registerSerializer(desc.id, {\n serialize: (v) => v,\n deserialize: (d) => d,\n });\n }\n if (opts?.withArray) {\n const arrayId = opts.arrayId ?? `${desc.id}[]`;\n if (!this.types.has(arrayId)) {\n const arrayDesc: DataTypeDescriptor<any[]> = {\n id: arrayId,\n validate: (v: unknown) =>\n Array.isArray(v) &&\n v.every((x) => {\n try {\n return desc.validate(x);\n } catch {\n return false;\n }\n }),\n };\n this.types.set(arrayId, arrayDesc);\n }\n\n this.registerCoercion(desc.id, arrayId, (value) =>\n Array.isArray(value) ? value : [value]\n );\n this.registerCoercion(arrayId, desc.id, (value) => {\n if (!Array.isArray(value)) return value;\n if (opts.arrayPickFirstDefined) {\n for (const x of value) if (x !== undefined) return x;\n return undefined;\n }\n return value[0];\n });\n }\n return this;\n }\n\n registerNode<\n I extends Record<string, InputHandleDescriptor>,\n O extends Record<string, DataTypeId | DataTypeId[]> = Record<\n string,\n DataTypeId | DataTypeId[]\n >,\n State = unknown,\n Impl extends (inputs: any, ctx: ExecutionContext<any>) => any = (\n inputs: Record<string, unknown>,\n ctx: ExecutionContext<State>\n ) =>\n | void\n | Record<string, unknown>\n | Promise<void | Record<string, unknown>>\n >(desc: NodeTypeDescriptor<I, O, State, Impl>): this {\n this.nodes.set(desc.id, desc as NodeTypeDescriptor<any, any, any, any>);\n return this;\n }\n\n registerSerializer(\n typeId: string,\n s: {\n serialize: (value: unknown) => unknown;\n deserialize: (data: unknown) => unknown;\n }\n ): this {\n this.serializers.set(typeId, s);\n // If an array variant of this type exists and doesn't have a serializer,\n // auto-register an array serializer that maps each element using the base serializer.\n const arrayId = `${typeId}[]`;\n if (this.types.has(arrayId) && !this.serializers.has(arrayId)) {\n this.serializers.set(arrayId, {\n serialize: (value: unknown) =>\n Array.isArray(value) ? value.map((el) => s.serialize(el)) : value,\n deserialize: (data: unknown) =>\n Array.isArray(data) ? data.map((el) => s.deserialize(el)) : data,\n });\n }\n return this;\n }\n\n // Register a type coercion from one type id to another\n registerCoercion(\n fromTypeId: string,\n toTypeId: string,\n convert: (value: unknown) => unknown,\n opts?: { nonTransitive?: boolean }\n ): this {\n this.coercions.set(`${fromTypeId}->${toTypeId}`, {\n convert,\n nonTransitive: !!opts?.nonTransitive,\n });\n // If both source and target have array variants, add derived array->array coercion\n const fromArr =\n fromTypeId === \"base.object\" ? fromTypeId : `${fromTypeId}[]`;\n const toArr = toTypeId === \"base.object\" ? toTypeId : `${toTypeId}[]`;\n const arrKey = `${fromArr}->${toArr}`;\n if (this.types.has(fromArr) && this.types.has(toArr)) {\n if (!this.coercions.has(arrKey) && !this.asyncCoercions.has(arrKey)) {\n this.coercions.set(arrKey, {\n convert: (value: unknown) => {\n if (Array.isArray(value)) return value.map((v) => convert(v));\n // Best-effort: coerce single to array-of-single\n return [convert(value)];\n },\n nonTransitive: !!opts?.nonTransitive,\n });\n }\n }\n this.resolvedCache.clear();\n return this;\n }\n\n // Register an async type coercion from one type id to another\n registerAsyncCoercion(\n fromTypeId: string,\n toTypeId: string,\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>,\n opts?: { nonTransitive?: boolean }\n ): this {\n this.asyncCoercions.set(`${fromTypeId}->${toTypeId}`, {\n convertAsync,\n nonTransitive: !!opts?.nonTransitive,\n });\n // If both source and target have array variants, add derived array->array async coercion\n const fromArr =\n fromTypeId === \"base.object\" ? fromTypeId : `${fromTypeId}[]`;\n const toArr = toTypeId === \"base.object\" ? toTypeId : `${toTypeId}[]`;\n const arrKey = `${fromArr}->${toArr}`;\n if (this.types.has(fromArr) && this.types.has(toArr)) {\n if (!this.coercions.has(arrKey) && !this.asyncCoercions.has(arrKey)) {\n this.asyncCoercions.set(arrKey, {\n convertAsync: async (value: unknown, signal: AbortSignal) => {\n if (Array.isArray(value)) {\n const out: unknown[] = [];\n for (let i = 0; i < value.length; i++) {\n if (signal?.aborted)\n throw signal.reason ?? new Error(\"aborted\");\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n out.push(await convertAsync((value as unknown[])[i], signal));\n }\n return out;\n }\n return [await convertAsync(value, signal)];\n },\n nonTransitive: !!opts?.nonTransitive,\n });\n }\n }\n this.resolvedCache.clear();\n return this;\n }\n\n canCoerce(\n fromTypeId: string | undefined,\n toTypeId: string | undefined\n ): boolean {\n if (!fromTypeId || !toTypeId) return false;\n return !!this.resolveCoercion(fromTypeId, toTypeId);\n }\n\n getCoercion(\n fromTypeId: string,\n toTypeId: string\n ): ((value: unknown) => unknown) | undefined {\n const resolved = this.resolveCoercion(fromTypeId, toTypeId);\n if (!resolved) return undefined;\n if (resolved.kind === \"sync\") return resolved.convert;\n return undefined;\n }\n\n getAsyncCoercion(\n fromTypeId: string,\n toTypeId: string\n ): ((value: unknown, signal: AbortSignal) => Promise<unknown>) | undefined {\n const resolved = this.resolveCoercion(fromTypeId, toTypeId);\n if (!resolved) return undefined;\n if (resolved.kind === \"async\") return resolved.convertAsync;\n return undefined;\n }\n\n // Introspection for dynamic discovery\n listCoercions(): Array<{\n from: string;\n to: string;\n async: boolean;\n nonTransitive: boolean;\n }> {\n const out: Array<{\n from: string;\n to: string;\n async: boolean;\n nonTransitive: boolean;\n }> = [];\n for (const [key, rec] of this.coercions.entries()) {\n const [from, to] = key.split(\"->\");\n out.push({\n from,\n to,\n async: false,\n nonTransitive: rec.nonTransitive,\n });\n }\n for (const [key, rec] of this.asyncCoercions.entries()) {\n const [from, to] = key.split(\"->\");\n out.push({ from, to, async: true, nonTransitive: rec.nonTransitive });\n }\n return out;\n }\n\n resolveCoercion(\n fromTypeId: string,\n toTypeId: string\n ): ResolvedCoercion | undefined {\n const cacheKey = `${fromTypeId}->${toTypeId}`;\n const cached = this.resolvedCache.get(cacheKey);\n if (cached) return cached;\n\n if (fromTypeId === toTypeId) {\n const res: ResolvedCoercionSync = { kind: \"sync\", convert: (v) => v };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n\n // Direct edges (regardless of nonTransitive)\n const directSync = this.coercions.get(cacheKey);\n if (directSync) {\n const res: ResolvedCoercionSync = {\n kind: \"sync\",\n convert: directSync.convert,\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n const directAsync = this.asyncCoercions.get(cacheKey);\n if (directAsync) {\n const res: ResolvedCoercionAsync = {\n kind: \"async\",\n convertAsync: directAsync.convertAsync,\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n\n // Build adjacency from transitive-allowed edges only\n const getNeighbors = (from: string): _EdgeStep[] => {\n const out: _EdgeStep[] = [];\n for (const [key, rec] of this.coercions.entries()) {\n if (rec.nonTransitive) continue;\n const [src, dst] = key.split(\"->\");\n if (src === from)\n out.push({ from: src, to: dst, kind: \"sync\", convert: rec.convert });\n }\n for (const [key, rec] of this.asyncCoercions.entries()) {\n if (rec.nonTransitive) continue;\n const [src, dst] = key.split(\"->\");\n if (src === from)\n out.push({\n from: src,\n to: dst,\n kind: \"async\",\n convertAsync: rec.convertAsync,\n });\n }\n return out;\n };\n\n // Dijkstra-like search with lexicographic cost (edges, asyncCount)\n type Entry = {\n node: string;\n cost: { edges: number; async: number };\n path: _EdgeStep[];\n };\n const betterOf = (\n a: { edges: number; async: number } | undefined,\n b: { edges: number; async: number }\n ) => {\n if (!a) return true;\n if (b.edges !== a.edges) return b.edges < a.edges;\n return b.async < a.async;\n };\n\n const best = new Map<string, { edges: number; async: number }>();\n const queue: Entry[] = [];\n const push = (e: Entry) => {\n // simple insertion to keep queue roughly ordered by cost\n let i = 0;\n while (i < queue.length) {\n const q = queue[i];\n if (\n e.cost.edges < q.cost.edges ||\n (e.cost.edges === q.cost.edges && e.cost.async < q.cost.async)\n ) {\n break;\n }\n i++;\n }\n queue.splice(i, 0, e);\n };\n\n push({ node: fromTypeId, cost: { edges: 0, async: 0 }, path: [] });\n best.set(fromTypeId, { edges: 0, async: 0 });\n\n while (queue.length > 0) {\n const cur = queue.shift()!;\n if (cur.node === toTypeId) {\n // Compose\n const hasAsync = cur.path.some((s) => s.kind === \"async\");\n if (!hasAsync) {\n const convert = (value: unknown) => {\n let acc = value;\n for (const step of cur.path) {\n // all sync by construction\n acc = (step as _EdgeStepSync).convert(acc);\n }\n return acc;\n };\n const res: ResolvedCoercionSync = { kind: \"sync\", convert };\n this.resolvedCache.set(cacheKey, res);\n return res;\n } else {\n const convertAsync = async (value: unknown, signal: AbortSignal) => {\n let acc: unknown = value;\n for (const step of cur.path) {\n if (step.kind === \"sync\") {\n acc = step.convert(acc);\n } else {\n acc = await step.convertAsync(acc, signal);\n }\n }\n return acc;\n };\n const res: ResolvedCoercionAsync = { kind: \"async\", convertAsync };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n }\n // expand neighbors\n for (const step of getNeighbors(cur.node)) {\n const nextCost = {\n edges: cur.cost.edges + 1,\n async: cur.cost.async + (step.kind === \"async\" ? 1 : 0),\n };\n const prev = best.get(step.to);\n if (betterOf(prev, nextCost)) {\n best.set(step.to, nextCost);\n push({ node: step.to, cost: nextCost, path: [...cur.path, step] });\n }\n }\n }\n\n return undefined;\n }\n\n // Enum support\n registerEnum(desc: {\n id: string;\n displayName?: string;\n options: Array<{ value: number; label: string }>;\n bakeTarget?: { nodeTypeId: string; inputHandle: string };\n opts?: {\n labelType?: string;\n valueType?: string;\n withArray?: boolean;\n arrayId?: string;\n arrayPickFirstDefined?: boolean;\n };\n }): this {\n const { id, displayName, options, opts, bakeTarget } = desc;\n const labelType = opts?.labelType ?? \"base.string\";\n const valueType = opts?.valueType ?? \"base.float\";\n\n const valueToLabel = new Map<number, string>();\n const labelToValue = new Map<string, number>();\n for (const { value, label } of options) {\n valueToLabel.set(value, label);\n labelToValue.set(label.toLowerCase(), value);\n }\n this.enums.set(id, {\n options,\n valueToLabel,\n labelToValue,\n });\n // Register type descriptor and serializer for enum (stored as number)\n this.registerType(\n {\n id,\n displayName,\n validate: (v: unknown) =>\n typeof v === \"number\" && valueToLabel.has(Number(v)),\n bakeTarget,\n },\n opts\n );\n this.registerSerializer(id, {\n serialize: (v) => v,\n deserialize: (d) => Number(d),\n });\n // Coercions: string -> enum (by label), float -> enum (by numeric value), enum -> string (label)\n this.registerCoercion(labelType, id, (value) => {\n const s = String(value ?? \"\")\n .trim()\n .toLowerCase();\n const rec = this.enums.get(id);\n if (!rec) return value;\n if (rec.labelToValue.has(s)) return rec.labelToValue.get(s);\n const asNum = Number(s);\n if (Number.isFinite(asNum) && rec.valueToLabel.has(asNum)) return asNum;\n return Array.from(rec.valueToLabel.keys())[0] ?? 0;\n });\n this.registerCoercion(valueType, id, (value) => {\n const n = Number(value);\n const rec = this.enums.get(id);\n if (!rec) return value;\n return rec.valueToLabel.has(n)\n ? n\n : Array.from(rec.valueToLabel.keys())[0] ?? 0;\n });\n this.registerCoercion(id, labelType, (value) => {\n const n = Number(value);\n const rec = this.enums.get(id);\n if (!rec) return String(value);\n return rec.valueToLabel.get(n) ?? String(n);\n });\n return this;\n }\n}\n","/**\n * Shared utility functions for runtime components\n */\n\n/**\n * Type guard to check if a value is a Promise\n */\nexport function isPromise<T = unknown>(value: unknown): value is Promise<T> {\n return !!value && typeof (value as any).then === \"function\";\n}\n\n/**\n * Unwrap a value that might be a Promise\n */\nexport async function unwrapMaybePromise<T>(value: T | Promise<T>): Promise<T> {\n return isPromise<T>(value) ? await value : value;\n}\n\n/**\n * Shallow/deep-ish equality check to avoid unnecessary runs on identical values\n */\nexport function valuesEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== typeof b) return false;\n if (a && b && typeof a === \"object\") {\n try {\n return JSON.stringify(a) === JSON.stringify(b);\n } catch {\n return false;\n }\n }\n return false;\n}\n","import type {\n GraphDefinition,\n ResolvedHandles,\n} from \"@bian-womp/spark-protocol\";\nimport { Registry } from \"../../builder/Registry\";\nimport {\n getInputTypeId,\n getTypedOutputTypeId,\n getTypedOutputValue,\n} from \"../../core/types\";\nimport type { RuntimeNode, RuntimeEdge } from \"./types\";\nimport { isPromise } from \"../utils\";\n\n/**\n * GraphStructure component - manages nodes, edges, and handle resolution\n */\nexport class GraphStructure {\n private nodes = new Map<string, RuntimeNode<any>>();\n private edges: RuntimeEdge[] = [];\n private registry?: Registry;\n private resolvedByNode = new Map<string, ResolvedHandles>();\n\n constructor(registry?: Registry) {\n this.registry = registry;\n }\n\n // Node accessors\n getNode(nodeId: string): RuntimeNode<any> | undefined {\n return this.nodes.get(nodeId);\n }\n\n getNodes(): Map<string, RuntimeNode<any>> {\n return this.nodes;\n }\n\n setNode(nodeId: string, node: RuntimeNode<any>): void {\n this.nodes.set(nodeId, node);\n }\n\n deleteNode(nodeId: string): void {\n this.nodes.delete(nodeId);\n }\n\n hasNode(nodeId: string): boolean {\n return this.nodes.has(nodeId);\n }\n\n // Edge accessors\n getEdges(): RuntimeEdge[] {\n return this.edges;\n }\n\n setEdges(edges: RuntimeEdge[]): void {\n this.edges = edges;\n }\n\n // Registry accessor\n getRegistry(): Registry | undefined {\n return this.registry;\n }\n\n setRegistry(registry: Registry): void {\n this.registry = registry;\n }\n\n // Resolved handles accessors\n getResolvedHandles(nodeId: string): ResolvedHandles | undefined {\n return this.resolvedByNode.get(nodeId);\n }\n\n setResolvedHandles(nodeId: string, handles: ResolvedHandles): void {\n this.resolvedByNode.set(nodeId, handles);\n }\n\n getResolvedHandlesMap(): Map<string, ResolvedHandles> {\n return this.resolvedByNode;\n }\n\n // Static factory methods\n static computeResolvedHandleMap(\n def: GraphDefinition,\n registry: Registry,\n environment?: Record<string, unknown>\n ): { map: Map<string, ResolvedHandles>; pending: Set<string> } {\n const out = new Map<string, ResolvedHandles>();\n const pending = new Set<string>();\n\n for (const n of def.nodes) {\n const desc = registry.nodes.get(n.typeId);\n if (!desc) continue;\n const overrideInputs = n.resolvedHandles?.inputs;\n const overrideOutputs = n.resolvedHandles?.outputs;\n const overrideDefaults = n.resolvedHandles?.inputDefaults;\n // Resolve dynamic handles if available (initial pass: inputs may be undefined)\n let dyn: Partial<ResolvedHandles> = {};\n try {\n if (typeof desc.resolveHandles === \"function\") {\n const maybe = desc.resolveHandles({\n nodeId: n.nodeId,\n environment: environment || {},\n params: n.params,\n inputs: undefined,\n });\n // Only use sync results here; async results are applied via recompute later\n if (isPromise(maybe)) {\n // mark node as pending async recompute\n pending.add(n.nodeId);\n } else {\n dyn = maybe || {};\n }\n }\n } catch {\n // ignore dynamic resolution errors at this stage\n }\n // Merge base with dynamic and overrides (allow partial resolvedHandles)\n const inputs = {\n ...desc.inputs,\n ...dyn.inputs,\n ...overrideInputs,\n };\n const outputs = {\n ...desc.outputs,\n ...dyn.outputs,\n ...overrideOutputs,\n };\n const inputDefaults = {\n ...desc.inputDefaults,\n ...dyn.inputDefaults,\n ...overrideDefaults,\n };\n out.set(n.nodeId, { inputs, outputs, inputDefaults });\n }\n return { map: out, pending };\n }\n\n static buildEdges(\n def: GraphDefinition,\n registry: Registry,\n resolvedByNode: Map<string, ResolvedHandles>\n ): RuntimeEdge[] {\n return def.edges.map((e): RuntimeEdge => {\n const srcNode = def.nodes.find((n) => n.nodeId === e.source.nodeId);\n const dstNode = def.nodes.find((n) => n.nodeId === e.target.nodeId);\n let effectiveTypeId = e.typeId; // Start with original\n let srcDeclared: string | string[] | undefined;\n let dstDeclared: string | undefined;\n if (srcNode) {\n const resolved = resolvedByNode.get(srcNode.nodeId);\n if (resolved) srcDeclared = resolved.outputs[e.source.handle] as any;\n }\n if (!effectiveTypeId) {\n // Infer if not explicitly set\n effectiveTypeId = Array.isArray(srcDeclared)\n ? srcDeclared[0]\n : srcDeclared;\n }\n if (dstNode) {\n const resolved = resolvedByNode.get(dstNode.nodeId);\n if (resolved)\n dstDeclared = getInputTypeId(resolved.inputs, e.target.handle);\n }\n const { convert, convertAsync } = GraphStructure.buildEdgeConverters(\n srcDeclared,\n dstDeclared,\n registry,\n `buildEdges: ${srcNode?.typeId || \"\"}.${e.source.nodeId}.${\n e.source.handle\n } -> ${dstNode?.typeId || \"\"}.${e.target.nodeId}.${e.target.handle}`\n );\n return {\n id: e.id,\n source: { ...e.source },\n target: { ...e.target },\n typeId: e.typeId, // Preserve original (may be undefined)\n effectiveTypeId: effectiveTypeId ?? \"untyped\", // Always present\n convert,\n convertAsync,\n srcUnionTypes: Array.isArray(srcDeclared)\n ? [...srcDeclared]\n : undefined,\n dstDeclared,\n stats: { runs: 0, inFlight: false, progress: 0 },\n };\n });\n }\n\n // Clear all data\n clear(): void {\n this.nodes.clear();\n this.edges = [];\n this.resolvedByNode.clear();\n }\n\n // Static helper: build edge converters for type coercion\n static buildEdgeConverters(\n srcDeclared: string | string[] | undefined,\n dstDeclared: string | undefined,\n registry: Registry,\n edgeLabel: string\n ): {\n convert?: (v: unknown) => unknown;\n convertAsync?: (v: unknown, signal: AbortSignal) => Promise<unknown>;\n } {\n if (!dstDeclared || !srcDeclared) {\n return {};\n }\n\n const isUnion = Array.isArray(srcDeclared);\n const srcTypes = isUnion ? srcDeclared : [srcDeclared];\n\n // Helper to get the coercion for a specific type\n const getCoercion = (typeId: string) => {\n return registry.resolveCoercion(typeId, dstDeclared);\n };\n\n // Resolve coercions for all source types\n const coercions = srcTypes.map(getCoercion);\n const hasAsync = coercions.some((r) => r?.kind === \"async\");\n\n // Helper to extract and validate typed output for unions\n const extractPayload = (\n v: unknown\n ): { typeId: string; payload: unknown } => {\n const typeId = getTypedOutputTypeId(v);\n const payload = getTypedOutputValue(v);\n\n if (isUnion) {\n if (!typeId) {\n throw new Error(\n `Typed output required for union source (${edgeLabel}); allowed: ${srcTypes.join(\n \"|\"\n )}`\n );\n }\n if (!srcTypes.includes(typeId)) {\n throw new Error(\n `Invalid typed output ${typeId} (${edgeLabel}); allowed: ${srcTypes.join(\n \"|\"\n )}`\n );\n }\n } else if (typeId) {\n // Warn if typed output is used for non-union source\n console.warn(\n `Typed output ${typeId} is fed even though source is not union (${edgeLabel}): ${srcDeclared} -> ${dstDeclared}`\n );\n }\n\n return { typeId: typeId || srcTypes[0], payload };\n };\n\n if (hasAsync) {\n return {\n convertAsync: async (v: unknown, signal: AbortSignal) => {\n const { typeId, payload } = extractPayload(v);\n const res = getCoercion(typeId);\n if (!res) return payload;\n if (res.kind === \"async\") {\n return await res.convertAsync(payload, signal);\n }\n return res.convert(payload);\n },\n };\n }\n\n // Sync path\n const firstCoercion = coercions.find((r) => r?.kind === \"sync\");\n if (!firstCoercion) {\n return {};\n }\n\n return {\n convert: (v: unknown) => {\n const { typeId, payload } = extractPayload(v);\n const res = getCoercion(typeId);\n if (!res) return payload;\n if (res.kind === \"async\") {\n throw new Error(\n `Async coercion required but convert used (${edgeLabel})`\n );\n }\n return res.convert(payload);\n },\n };\n }\n}\n","import type {\n RuntimeEventName,\n RuntimeEventMap,\n RuntimeEventListener,\n} from \"../GraphRuntime\";\n\n/**\n * Event emitter component for GraphRuntime\n * Handles all event listener management and emission\n */\nexport class EventEmitter {\n private listeners = new Map<\n RuntimeEventName,\n Set<RuntimeEventListener<RuntimeEventName>>\n >();\n\n on<K extends RuntimeEventName>(\n event: K,\n handler: RuntimeEventListener<K>\n ): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n const set = this.listeners.get(event) as Set<RuntimeEventListener<K>>;\n set.add(handler);\n return () => set.delete(handler);\n }\n\n emit<K extends RuntimeEventName>(\n event: K,\n payload: RuntimeEventMap[K]\n ): void {\n const set = this.listeners.get(event);\n if (!set) return;\n for (const handler of Array.from(set)) {\n try {\n handler(payload);\n } catch (err) {\n console.error(`Error in ${event} handler:`, err);\n }\n }\n }\n\n clear(): void {\n this.listeners.clear();\n }\n}\n","import type { RunContext, RunContextId, RuntimeNode } from \"./types\";\n\n/**\n * RunContextManager component - manages run-context lifecycle\n */\nexport class RunContextManager {\n private runContexts = new Map<RunContextId, RunContext>();\n private runContextCounter = 0;\n\n /**\n * Create a new run-context for runFromHere\n */\n createRunContext(\n startNodeId: string,\n options?: {\n skipPropagateValues?: boolean;\n propagate?: boolean;\n }\n ): RunContext {\n const id: RunContextId = `rc-${++this.runContextCounter}`;\n const ctx: RunContext = {\n id,\n startNodes: new Set([startNodeId]),\n cancelledNodes: new Set(),\n pending: 0,\n skipPropagateValues: options?.skipPropagateValues ?? false,\n propagate: options?.propagate ?? true,\n };\n this.runContexts.set(id, ctx);\n return ctx;\n }\n\n /**\n * Get a run-context by ID\n */\n getRunContext(id: RunContextId): RunContext | undefined {\n return this.runContexts.get(id);\n }\n\n /**\n * Get all run-contexts\n */\n getAllRunContexts(): Map<RunContextId, RunContext> {\n return this.runContexts;\n }\n\n /**\n * Check if there are any active run-contexts\n */\n hasActiveRunContexts(): boolean {\n return this.runContexts.size > 0;\n }\n\n /**\n * Finish and remove a run-context when its pending count reaches zero\n */\n finishRunContext(\n id: RunContextId,\n nodes: Map<string, RuntimeNode<any>>\n ): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) return;\n if (ctx.pending > 0) return; // Still has pending work\n\n // Clean up activeRunContexts from all nodes\n for (const node of nodes.values()) {\n node.activeRunContexts.delete(id);\n }\n\n this.runContexts.delete(id);\n if (ctx.resolve) ctx.resolve();\n }\n\n /**\n * Cancel a node for all run-contexts (called from UI or update())\n * @param nodeId - The node to cancel\n * @param includeDownstream - Whether to also cancel downstream nodes\n * @param edges - All edges in the graph (for downstream traversal)\n * @param nodes - All nodes in the graph (for clearing activeRunContexts)\n */\n cancelNodeInRunContexts(\n nodeId: string,\n includeDownstream: boolean,\n edges: Array<{ source: { nodeId: string }; target: { nodeId: string } }>,\n nodes: Map<string, RuntimeNode<any>>\n ): void {\n const toCancel = new Set<string>([nodeId]);\n if (includeDownstream) {\n // Collect all downstream nodes\n const queue = [nodeId];\n const visited = new Set<string>();\n for (let i = 0; i < queue.length; i++) {\n const cur = queue[i];\n if (visited.has(cur)) continue;\n visited.add(cur);\n for (const e of edges) {\n if (e.source.nodeId === cur) {\n const targetId = e.target.nodeId;\n if (!visited.has(targetId)) {\n toCancel.add(targetId);\n queue.push(targetId);\n }\n }\n }\n }\n }\n\n // Mark nodes as cancelled in all run-contexts\n for (const ctx of this.runContexts.values()) {\n for (const id of toCancel) {\n ctx.cancelledNodes.add(id);\n }\n }\n\n // Clear activeRunContexts for cancelled nodes\n for (const id of toCancel) {\n const node = nodes.get(id);\n if (node) node.activeRunContexts.clear();\n }\n }\n\n /**\n * Resolve all pending run-context promises (for cleanup)\n */\n resolveAll(): void {\n for (const ctx of this.runContexts.values()) {\n if (ctx.resolve) ctx.resolve();\n }\n }\n\n /**\n * Clear all run-contexts\n */\n clear(): void {\n this.runContexts.clear();\n }\n}\n","const LOG_LEVEL_VALUES = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n silent: 4,\n};\n\nexport { LOG_LEVEL_VALUES };\n//# sourceMappingURL=index.js.map\n","import type { ResolvedHandles } from \"@bian-womp/spark-protocol\";\nimport { LOG_LEVEL_VALUES } from \"@bian-womp/spark-protocol\";\nimport type { RuntimeNode } from \"./types\";\nimport { Registry } from \"../../builder/Registry\";\nimport type { GraphStructure } from \"./GraphStructure\";\nimport type { EventEmitter } from \"./EventEmitter\";\nimport type { IRuntimeCoordinator } from \"./interfaces\";\nimport { unwrapMaybePromise } from \"../utils\";\n\n/**\n * HandleResolver component - manages dynamic handle resolution\n */\nexport class HandleResolver {\n private recomputeTokenByNode = new Map<string, number>();\n private graphStructure: GraphStructure;\n private eventEmitter: EventEmitter;\n private runtimeCoordinator: IRuntimeCoordinator;\n private registry?: Registry;\n private environment: Record<string, unknown> = {};\n\n constructor(\n graphStructure: GraphStructure,\n eventEmitter: EventEmitter,\n runtimeCoordinator: IRuntimeCoordinator,\n registry?: Registry,\n environment?: Record<string, unknown>\n ) {\n this.graphStructure = graphStructure;\n this.eventEmitter = eventEmitter;\n this.runtimeCoordinator = runtimeCoordinator;\n this.registry = registry;\n this.environment = environment ?? {};\n }\n\n setRegistry(registry: Registry): void {\n this.registry = registry;\n }\n\n setEnvironment(environment: Record<string, unknown>): void {\n this.environment = environment;\n }\n\n /**\n * Schedule async recomputation of handles for a node\n */\n scheduleRecomputeHandles(nodeId: string): void {\n // If no registry or node not found, skip\n if (!this.registry) return;\n const node = this.graphStructure.getNode(nodeId);\n if (!node) return;\n setTimeout(() => {\n void this.recomputeHandlesForNode(nodeId);\n }, 0);\n }\n\n /**\n * Recompute dynamic handles for a single node using current inputs/environment\n */\n private async recomputeHandlesForNode(nodeId: string): Promise<void> {\n const registry = this.registry!;\n const node = this.graphStructure.getNode(nodeId);\n if (!node) return;\n const desc = registry.nodes.get(node.typeId);\n if (!desc) return;\n const resolveHandles = desc.resolveHandles;\n if (typeof resolveHandles !== \"function\") return;\n const token = (this.recomputeTokenByNode.get(nodeId) ?? 0) + 1;\n this.recomputeTokenByNode.set(nodeId, token);\n\n // Log resolveHandles-start\n const nodeLogLevel = node.logLevel ?? \"info\";\n const nodeLogValue = LOG_LEVEL_VALUES[nodeLogLevel] ?? 1;\n const shouldLog =\n nodeLogValue <= LOG_LEVEL_VALUES.debug && nodeLogLevel !== \"silent\";\n if (shouldLog) {\n console.info(`[node:${nodeId}:${node.typeId}] resolveHandles-start`);\n }\n\n let r: Partial<ResolvedHandles> | undefined;\n try {\n const res = resolveHandles({\n nodeId,\n environment: this.environment || {},\n params: node.params,\n inputs: node.inputs || {},\n });\n r = await unwrapMaybePromise(res);\n } catch {\n // Log resolveHandles-done even on error\n if (shouldLog) {\n console.info(\n `[node:${nodeId}:${node.typeId}] resolveHandles-done (error)`\n );\n }\n return;\n }\n\n // Log resolveHandles-done\n if (shouldLog) {\n console.info(`[node:${nodeId}:${node.typeId}] resolveHandles-done`);\n }\n // If a newer recompute was scheduled, drop this result\n if ((this.recomputeTokenByNode.get(nodeId) ?? 0) !== token) return;\n\n const resolved = this.graphStructure.getResolvedHandles(nodeId);\n if (!resolved) return; // Node was deleted\n\n // Re-fetch desc to ensure we have the latest (node might have been updated)\n const nodeDesc = registry.nodes.get(node.typeId);\n if (!nodeDesc) return;\n\n const inputs = { ...nodeDesc.inputs, ...r?.inputs };\n const outputs = { ...nodeDesc.outputs, ...r?.outputs };\n const inputDefaults = {\n ...nodeDesc.inputDefaults,\n ...r?.inputDefaults,\n };\n const next = { inputs, outputs, inputDefaults };\n const before = resolved;\n // Compare shallow-structurally via JSON\n if (JSON.stringify(before) === JSON.stringify(next)) return;\n\n this.graphStructure.setResolvedHandles(nodeId, next);\n\n // Call GraphRuntime's updateNodeHandles to update edges and re-propagate values\n this.runtimeCoordinator.updateNodeHandles(nodeId, next, registry);\n\n // Notify graph updated with the changed handles\n this.eventEmitter.emit(\"invalidate\", {\n reason: \"graph-updated\",\n resolvedHandles: { [nodeId]: next },\n });\n }\n}\n","import { getTypedOutputTypeId, isTypedOutput } from \"../../core/types\";\nimport type { RunContextId } from \"./types\";\nimport type { GraphStructure } from \"./GraphStructure\";\nimport type { EventEmitter } from \"./EventEmitter\";\nimport type { RunContextManager } from \"./RunContextManager\";\nimport { valuesEqual } from \"../utils\";\nimport {\n IExecutionScheduler,\n IHandleResolver,\n IRuntimeCoordinator,\n} from \"./interfaces\";\n\n/**\n * ValuePropagator component - handles value propagation through edges\n */\nexport class ValuePropagator {\n private graphStructure: GraphStructure;\n private eventEmitter: EventEmitter;\n private runContextManager: RunContextManager;\n private executionScheduler!: IExecutionScheduler; // Set after construction due to circular dependency\n private handleResolver: IHandleResolver;\n private runtimeCoordinator: IRuntimeCoordinator;\n private arrayInputBuckets = new Map<\n string,\n Map<string, Map<string, unknown[]>>\n >();\n\n constructor(\n graphStructure: GraphStructure,\n eventEmitter: EventEmitter,\n runContextManager: RunContextManager,\n handleResolver: IHandleResolver,\n runtimeCoordinator: IRuntimeCoordinator\n ) {\n this.graphStructure = graphStructure;\n this.eventEmitter = eventEmitter;\n this.runContextManager = runContextManager;\n this.handleResolver = handleResolver;\n this.runtimeCoordinator = runtimeCoordinator;\n }\n\n /**\n * Set the execution scheduler (called after construction to resolve circular dependency)\n */\n setExecutionScheduler(executionScheduler: IExecutionScheduler): void {\n this.executionScheduler = executionScheduler;\n }\n\n /**\n * Propagate value through edges\n * @param runContextIds - Optional set of run-context IDs. If provided, propagation is run-context aware.\n * If undefined or empty, behaves like auto mode (always propagates values and execution).\n */\n propagate(\n srcNodeId: string,\n srcHandle: string,\n value: unknown,\n runContextIds?: Set<RunContextId>\n ): void {\n // Set source output\n const srcNode = this.graphStructure.getNode(srcNodeId);\n if (!srcNode) {\n // Node was removed (e.g., graph updated) but an async emit arrived late; ignore\n return;\n }\n srcNode.outputs[srcHandle] = value;\n this.eventEmitter.emit(\"value\", {\n nodeId: srcNodeId,\n handle: srcHandle,\n value,\n io: \"output\",\n runtimeTypeId: getTypedOutputTypeId(value),\n });\n\n // Fan-out along all edges from this output\n const edges = this.graphStructure.getEdges();\n const outEdges = edges.filter(\n (e) => e.source.nodeId === srcNodeId && e.source.handle === srcHandle\n );\n\n const isRunContextAware =\n runContextIds !== undefined && runContextIds.size > 0;\n\n for (const e of outEdges) {\n // Filter run-contexts: skip any where src or dst is cancelled (only in run-context mode)\n let effectiveRunContexts: Set<RunContextId> | undefined;\n if (isRunContextAware) {\n effectiveRunContexts = new Set<RunContextId>();\n for (const id of runContextIds!) {\n const ctx = this.runContextManager.getRunContext(id);\n if (!ctx) continue;\n if (ctx.cancelledNodes.has(srcNodeId)) continue;\n if (ctx.cancelledNodes.has(e.target.nodeId)) continue;\n effectiveRunContexts.add(id);\n }\n if (effectiveRunContexts.size === 0) continue; // No valid run-contexts for this edge\n }\n\n // If source declares a union for this handle, require typed output\n const isUnion = Array.isArray(e.srcUnionTypes);\n const isTyped = isTypedOutput(value);\n if (isUnion && !isTyped) {\n const err = new Error(\n `Output ${srcNodeId}.${srcHandle} requires typed value for union output (allowed: ${(\n e.srcUnionTypes as string[]\n ).join(\"|\")})`\n );\n this.eventEmitter.emit(\"error\", {\n kind: \"edge-convert\",\n edgeId: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n err,\n });\n continue;\n }\n\n // Clone per edge to isolate conversions\n let nextVal = structuredClone(value);\n const applyToTarget = (v: unknown) => {\n const dstNode = this.graphStructure.getNode(e.target.nodeId);\n if (!dstNode) return;\n\n // Skip writing to unresolved handles\n if (e.dstDeclared === undefined) return;\n\n const dstIsArray =\n typeof e.dstDeclared === \"string\" && e.dstDeclared.endsWith(\"[]\");\n let next = v;\n // Handle array types\n if (dstIsArray) {\n const toArray = (x: unknown): unknown[] =>\n Array.isArray(x) ? x : x === undefined ? [] : [x];\n let forNode = this.arrayInputBuckets.get(e.target.nodeId);\n if (!forNode) {\n forNode = new Map<string, Map<string, unknown[]>>();\n this.arrayInputBuckets.set(e.target.nodeId, forNode);\n }\n let forHandle = forNode.get(e.target.handle);\n if (!forHandle) {\n forHandle = new Map<string, unknown[]>();\n forNode.set(e.target.handle, forHandle);\n }\n forHandle.set(e.id, toArray(v));\n const merged: unknown[] = [];\n for (const ed of edges) {\n if (\n ed.target.nodeId === e.target.nodeId &&\n ed.target.handle === e.target.handle\n ) {\n const part = forHandle.get(ed.id);\n if (part && part.length) merged.push(...part);\n }\n }\n next = merged;\n }\n\n const prev = dstNode.inputs[e.target.handle];\n const same = valuesEqual(prev, next);\n if (!same) {\n // Check skipPropagateValues (only in run-context mode)\n let shouldSkipPropagateValues = false;\n if (isRunContextAware && effectiveRunContexts) {\n for (const id of effectiveRunContexts) {\n const ctx = this.runContextManager.getRunContext(id);\n if (ctx && ctx.skipPropagateValues) {\n shouldSkipPropagateValues = true;\n break;\n }\n }\n }\n\n // Set input values unless skipPropagateValues is enabled\n if (!shouldSkipPropagateValues) {\n dstNode.inputs[e.target.handle] = next;\n this.eventEmitter.emit(\"value\", {\n nodeId: e.target.nodeId,\n handle: e.target.handle,\n value: next,\n io: \"input\",\n runtimeTypeId: getTypedOutputTypeId(next),\n });\n this.handleResolver.scheduleRecomputeHandles(e.target.nodeId);\n }\n\n // Check propagate flag (only in run-context mode; auto mode always propagates)\n let shouldPropagate = true; // Default: always propagate in auto mode\n if (isRunContextAware && effectiveRunContexts) {\n shouldPropagate = false;\n for (const id of effectiveRunContexts) {\n const ctx = this.runContextManager.getRunContext(id);\n if (ctx && ctx.propagate) {\n shouldPropagate = true;\n break;\n }\n }\n }\n\n // Schedule downstream execution if propagation is enabled\n if (\n !this.runtimeCoordinator.isPaused() &&\n shouldPropagate &&\n this.executionScheduler.allInboundHaveValue(e.target.nodeId)\n ) {\n if (isRunContextAware && effectiveRunContexts) {\n this.executionScheduler.scheduleInputsChangedWithRunContexts(\n e.target.nodeId,\n effectiveRunContexts\n );\n } else {\n this.executionScheduler.scheduleInputsChanged(e.target.nodeId);\n }\n }\n }\n };\n\n // Handle async conversion\n if (e.convertAsync) {\n this.eventEmitter.emit(\"stats\", {\n kind: \"edge-start\",\n edgeId: e.id,\n typeId: e.typeId,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n });\n const controller = new AbortController();\n const startAt = Date.now();\n e.stats.runs += 1;\n e.stats.inFlight = true;\n if (!isRunContextAware) {\n // Only track progress in auto mode\n e.stats.progress = 0;\n }\n const sig = controller.signal;\n e.convertAsync(nextVal, sig)\n .then((converted) => {\n if (!sig.aborted) {\n applyToTarget(converted);\n e.stats.inFlight = false;\n const duration = Date.now() - startAt;\n e.stats.lastDurationMs = duration;\n if (!isRunContextAware) {\n // More detailed stats in auto mode\n e.stats.lastEndAt = Date.now();\n e.stats.lastError = undefined;\n this.eventEmitter.emit(\"stats\", {\n kind: \"edge-done\",\n edgeId: e.id,\n typeId: e.typeId,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n durationMs: duration,\n });\n }\n }\n })\n .catch((err) => {\n if (sig.aborted) return;\n e.stats.inFlight = false;\n if (!isRunContextAware) {\n e.stats.lastError = err;\n }\n this.eventEmitter.emit(\"error\", {\n kind: \"edge-convert\",\n edgeId: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n err,\n });\n });\n } else {\n // Synchronous conversion\n if (e.convert) {\n nextVal = e.convert(nextVal);\n }\n applyToTarget(nextVal);\n }\n }\n }\n\n /**\n * Propagate value in run-context aware mode (convenience method)\n */\n propagateInRunContexts(\n srcNodeId: string,\n srcHandle: string,\n value: unknown,\n runContextIds: Set<RunContextId>\n ): void {\n this.propagate(srcNodeId, srcHandle, value, runContextIds);\n }\n\n /**\n * Re-emit all outputs from a node (used when graph updates)\n * Only re-emits outputs that are valid according to resolved handles\n */\n reemitNodeOutputs(nodeId: string): void {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) return;\n // Get resolved handles to filter out invalid outputs\n const resolved = this.graphStructure.getResolvedHandles(nodeId);\n const validOutputHandles = resolved?.outputs\n ? new Set(Object.keys(resolved.outputs))\n : new Set<string>();\n // Use node's activeRunContexts to propagate to new nodes that were added\n const runContextIds =\n node.activeRunContexts.size > 0\n ? new Set(node.activeRunContexts)\n : undefined;\n for (const [handle, value] of Object.entries(node.outputs)) {\n // Only re-emit if this handle is still valid\n if (validOutputHandles.has(handle)) {\n this.propagate(nodeId, handle, value, runContextIds);\n }\n }\n }\n\n /**\n * Clear array input buckets for a node (when node is deleted)\n */\n clearArrayBuckets(nodeId: string): void {\n this.arrayInputBuckets.delete(nodeId);\n }\n\n /**\n * Clear all array buckets\n */\n clearAllArrayBuckets(): void {\n this.arrayInputBuckets.clear();\n }\n}\n","import { LOG_LEVEL_VALUES } from \"@bian-womp/spark-protocol\";\nimport type { LogLevel } from \"@bian-womp/spark-protocol\";\nimport type { ExecutionContext } from \"../../core/types\";\nimport type { RuntimeNode, RunContextId } from \"./types\";\nimport type { GraphStructure } from \"./GraphStructure\";\nimport type { EventEmitter } from \"./EventEmitter\";\nimport type { RunContextManager } from \"./RunContextManager\";\nimport { IValuePropagator, IRuntimeCoordinator } from \"./interfaces\";\n\n/**\n * ExecutionScheduler component - handles node execution scheduling and lifecycle\n */\nexport class ExecutionScheduler {\n private graphStructure: GraphStructure;\n private eventEmitter: EventEmitter;\n private runContextManager: RunContextManager;\n private valuePropagator: IValuePropagator;\n private runtimeCoordinator: IRuntimeCoordinator;\n private environment: Record<string, unknown> = {};\n\n constructor(\n graphStructure: GraphStructure,\n eventEmitter: EventEmitter,\n runContextManager: RunContextManager,\n valuePropagator: IValuePropagator,\n runtimeCoordinator: IRuntimeCoordinator,\n environment?: Record<string, unknown>\n ) {\n this.graphStructure = graphStructure;\n this.eventEmitter = eventEmitter;\n this.runContextManager = runContextManager;\n this.valuePropagator = valuePropagator;\n this.runtimeCoordinator = runtimeCoordinator;\n this.environment = environment ?? {};\n }\n\n setEnvironment(environment: Record<string, unknown>): void {\n this.environment = environment;\n }\n\n /**\n * Check if all inbound edges for a node have values\n */\n allInboundHaveValue(nodeId: string): boolean {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) return false;\n const edges = this.graphStructure.getEdges();\n const inbound = edges.filter((e) => e.target.nodeId === nodeId);\n if (inbound.length === 0) return true;\n for (const e of inbound) {\n if (!(e.target.handle in node.inputs)) return false;\n }\n return true;\n }\n\n /**\n * Compute effective inputs for a node by merging real inputs with defaults\n */\n getEffectiveInputs(nodeId: string): Record<string, unknown> {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) return {};\n const registry = this.graphStructure.getRegistry();\n if (!registry) return {};\n const desc = registry.nodes.get(node.typeId);\n if (!desc) return {};\n\n const resolved = this.graphStructure.getResolvedHandles(nodeId);\n const regDefaults = desc.inputDefaults ?? {};\n const dynDefaults = resolved?.inputDefaults ?? {};\n\n // Identify which handles are dynamically resolved (not in registry statics)\n const staticHandles = new Set(Object.keys(desc.inputs ?? {}));\n const dynamicHandles = new Set(\n Object.keys(resolved?.inputs ?? {}).filter((h) => !staticHandles.has(h))\n );\n\n // Precedence: dynamic > registry\n const mergedDefaults: Record<string, unknown> = {\n ...regDefaults,\n ...dynDefaults,\n };\n\n // Start with real inputs only (no defaults)\n const effective: Record<string, unknown> = { ...node.inputs };\n\n // Build set of inbound handles (wired inputs)\n const edges = this.graphStructure.getEdges();\n const inbound = new Set(\n edges\n .filter((e) => e.target.nodeId === nodeId)\n .map((e) => e.target.handle)\n );\n\n // Apply defaults only for:\n // 1. Unbound handles that have no explicit value\n // 2. Static handles (not dynamically resolved)\n for (const [handle, defaultValue] of Object.entries(mergedDefaults)) {\n if (defaultValue === undefined) continue;\n if (inbound.has(handle)) continue; // Don't override wired inputs\n if (effective[handle] !== undefined) continue; // Already has value\n if (dynamicHandles.has(handle)) continue; // Skip defaults for dynamic handles\n\n // Clone to avoid shared references\n effective[handle] = structuredClone(defaultValue);\n }\n\n return effective;\n }\n\n /**\n * Create an execution context for a node\n */\n createExecutionContext(\n nodeId: string,\n node: RuntimeNode<any>,\n inputs: Record<string, unknown>,\n runId: string,\n abortSignal: AbortSignal,\n runContextIds?: Set<RunContextId>,\n options?: {\n emitHandler?: (handle: string, value: unknown) => void;\n reportProgress?: (p: number) => void;\n }\n ): ExecutionContext<any> {\n const emitHandler =\n options?.emitHandler ??\n ((handle: string, value: unknown) => {\n this.valuePropagator.propagate(nodeId, handle, value, runContextIds);\n });\n const reportProgress =\n options?.reportProgress ??\n ((p: number) => {\n node.stats.progress = Math.max(0, Math.min(1, Number(p) || 0));\n });\n\n // Create log function that respects node's logLevel\n const log: (\n level: LogLevel,\n message: string,\n context?: Record<string, unknown>\n ) => void = (\n level: LogLevel,\n message: string,\n context?: Record<string, unknown>\n ) => {\n const nodeLogLevel = node.logLevel ?? \"info\";\n const nodeLogValue = LOG_LEVEL_VALUES[nodeLogLevel] ?? 1;\n const requestedValue = LOG_LEVEL_VALUES[level] ?? 1;\n\n // Only log if requested level >= node's logLevel\n if (requestedValue >= nodeLogValue && nodeLogLevel !== \"silent\") {\n const contextStr = context\n ? ` ${Object.entries(context)\n .map(([k, v]) => `${k}=${JSON.stringify(v)}`)\n .join(\" \")}`\n : \"\";\n const fullMessage = `[node:${runId || nodeId}:${\n node.typeId\n }] ${message}${contextStr}`;\n switch (level) {\n case \"debug\":\n console.info(fullMessage);\n break;\n case \"info\":\n console.info(fullMessage);\n break;\n case \"warn\":\n console.warn(fullMessage);\n break;\n case \"error\":\n console.error(fullMessage);\n break;\n }\n }\n };\n\n // Store run-context IDs for use in scheduleInputsChanged\n const storedRunContextIds = runContextIds;\n\n return {\n nodeId,\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n emit: emitHandler,\n invalidateDownstream: () => {\n this.runtimeCoordinator.invalidateDownstream(nodeId);\n },\n scheduleInputsChanged: () => {\n if (this.allInboundHaveValue(nodeId)) {\n // Preserve run-context IDs when scheduling from execution context\n this.scheduleInputsChangedInternal(nodeId, storedRunContextIds);\n }\n },\n getInput: (handle) => inputs[handle],\n environment: this.environment,\n runId,\n abortSignal,\n reportProgress,\n log,\n };\n }\n\n /**\n * Schedule a node for execution when its inputs change\n */\n scheduleInputsChanged(nodeId: string): void {\n this.scheduleInputsChangedInternal(nodeId);\n }\n\n /**\n * Schedule a node for execution with run-context IDs\n */\n scheduleInputsChangedWithRunContexts(\n nodeId: string,\n runContextIds: Set<RunContextId>\n ): void {\n this.scheduleInputsChangedInternal(nodeId, runContextIds);\n }\n\n /**\n * Internal method for scheduling (also used by GraphRuntime)\n */\n scheduleInputsChangedInternal(\n nodeId: string,\n runContextIds?: Set<RunContextId>\n ): void {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) return;\n if (this.runtimeCoordinator.isPaused()) return;\n\n // If run-context IDs are provided, attach them to the node\n if (runContextIds) {\n for (const id of runContextIds) {\n node.activeRunContexts.add(id);\n }\n }\n const now = Date.now();\n const policy = node.policy ?? {};\n\n // Compute effective inputs (real inputs + defaults) for this execution\n const effectiveInputs = this.getEffectiveInputs(nodeId);\n\n if (\n policy.debounceMs &&\n node.lastScheduledAt &&\n now - node.lastScheduledAt < policy.debounceMs\n ) {\n // debounce: replace latest queued\n node.queue.splice(0, node.queue.length);\n node.runSeq += 1;\n const rid = `${nodeId}:${node.runSeq}:${now}`;\n node.queue.push({ runId: rid, inputs: effectiveInputs });\n return;\n }\n node.lastScheduledAt = now;\n\n node.runSeq += 1;\n const rid = `${nodeId}:${node.runSeq}:${now}`;\n node.latestRunId = rid;\n\n // Get run-context IDs for this node (use provided or from node's activeRunContexts)\n const runContextIdsForRun =\n runContextIds ||\n (node.activeRunContexts.size > 0\n ? new Set(node.activeRunContexts)\n : undefined);\n\n const startRun = (\n runId: string,\n capturedInputs: Record<string, unknown>,\n runContextIdsForRun?: Set<RunContextId>,\n onDone?: () => void\n ) => {\n // Increment pending count for all relevant run-contexts (node will run)\n if (runContextIdsForRun && runContextIdsForRun.size > 0) {\n for (const id of runContextIdsForRun) {\n const ctx = this.runContextManager.getRunContext(id);\n if (ctx) ctx.pending++;\n }\n }\n const controller = new AbortController();\n node.stats.runs += 1;\n node.stats.active += 1;\n node.stats.lastStartAt = now;\n node.stats.progress = 0;\n node.activeControllers.add(controller);\n node.controllerRunIds.set(controller, runId);\n\n const mode = policy.asyncConcurrency ?? \"switch\";\n if (mode === \"switch\") {\n for (const c of Array.from(node.activeControllers)) {\n if (c !== controller) c.abort(\"switch\");\n }\n }\n\n let timeoutId: NodeJS.Timeout | undefined;\n if (policy.timeoutMs && policy.timeoutMs > 0) {\n timeoutId = setTimeout(\n () => controller.abort(\"timeout\"),\n policy.timeoutMs\n );\n }\n\n const ctx = this.createExecutionContext(\n nodeId,\n node,\n capturedInputs,\n runId,\n controller.signal,\n runContextIdsForRun,\n {\n emitHandler: (handle: string, value: unknown) => {\n const m = policy.asyncConcurrency ?? \"switch\";\n // Drop emits from runs that were explicitly cancelled due to a\n // snapshot/undo/redo operation, regardless of asyncConcurrency.\n if (node.snapshotCancelledRunIds?.has(runId)) return;\n if (m !== \"merge\" && runId !== node.latestRunId) return;\n this.valuePropagator.propagate(\n nodeId,\n handle,\n value,\n runContextIdsForRun\n );\n },\n reportProgress: (p: number) => {\n node.stats.progress = Math.max(0, Math.min(1, Number(p) || 0));\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-progress\",\n nodeId,\n typeId: node.typeId,\n runId,\n progress: node.stats.progress,\n });\n },\n }\n );\n\n const exec = async (attempt: number) => {\n let hadError = false;\n try {\n if (node.lifecycle?.prepare) {\n ctx.log(\"debug\", \"prepare-start\");\n node.lifecycle.prepare(node.params ?? {}, ctx);\n ctx.log(\"debug\", \"prepare-done\");\n }\n await node.runtime.onInputsChanged?.(capturedInputs, ctx);\n } catch (err) {\n // Suppress errors caused by expected cancellations\n if (controller.signal.aborted) {\n const reason = controller.signal.reason;\n if (\n reason === \"switch\" ||\n reason === \"snapshot\" ||\n reason === \"node-deleted\" ||\n reason === \"user-cancelled\"\n ) {\n return; // Cancellation events are emitted separately, skip error handling\n }\n }\n hadError = true;\n node.stats.lastError = err;\n const retry = policy.retry;\n if (retry && attempt < (retry.attempts ?? 0)) {\n const delay = retry.backoffMs ? retry.backoffMs(attempt) : 0;\n await new Promise((r) => setTimeout(r, delay));\n return exec(attempt + 1);\n }\n this.eventEmitter.emit(\"error\", {\n kind: \"node-run\",\n nodeId,\n runId,\n err,\n });\n } finally {\n // Skip cleanup if node was deleted (cleanup already handled)\n if (!this.graphStructure.hasNode(nodeId)) {\n return;\n }\n\n if (timeoutId) clearTimeout(timeoutId);\n node.activeControllers.delete(controller);\n node.controllerRunIds.delete(controller);\n node.stats.active = Math.max(0, node.activeControllers.size);\n node.stats.lastEndAt = Date.now();\n node.stats.lastDurationMs =\n node.stats.lastStartAt && node.stats.lastEndAt\n ? node.stats.lastEndAt - node.stats.lastStartAt\n : undefined;\n if (!hadError) node.stats.lastError = undefined;\n\n // Only emit node-done if not cancelled (cancellation events emitted separately)\n const isCancelled =\n controller.signal.aborted &&\n (controller.signal.reason === \"snapshot\" ||\n controller.signal.reason === \"node-deleted\" ||\n controller.signal.reason === \"user-cancelled\");\n if (!isCancelled) {\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-done\",\n nodeId,\n typeId: node.typeId,\n runId,\n durationMs: node.stats.lastDurationMs,\n });\n }\n ctx.log(\"debug\", \"node-done\", {\n durationMs: node.stats.lastDurationMs,\n hadError,\n });\n\n // Decrement pending count for all relevant run-contexts\n if (runContextIdsForRun && runContextIdsForRun.size > 0) {\n for (const id of runContextIdsForRun) {\n const ctx = this.runContextManager.getRunContext(id);\n if (ctx) {\n ctx.pending--;\n if (ctx.pending === 0) {\n this.runContextManager.finishRunContext(\n id,\n this.graphStructure.getNodes()\n );\n }\n }\n }\n }\n\n if (onDone) onDone();\n }\n };\n\n // Fire node-start event\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-start\",\n nodeId,\n typeId: node.typeId,\n runId,\n });\n ctx.log(\"debug\", \"node-start\");\n exec(0);\n };\n\n const mode = policy.asyncConcurrency ?? \"switch\";\n if (mode === \"drop\" && node.activeControllers.size > 0) {\n // Don't increment pendingCount if we're dropping this run\n return;\n }\n if (mode === \"queue\") {\n const maxQ = policy.maxQueue ?? 8;\n node.queue.push({ runId: rid, inputs: effectiveInputs });\n if (node.queue.length > maxQ) node.queue.shift();\n\n const processNext = () => {\n if (node.activeControllers.size > 0) return;\n const next = node.queue.shift();\n if (!next) return;\n node.latestRunId = next.runId;\n // Use node's activeRunContexts for queued items\n const queuedRunContextIds =\n node.activeRunContexts.size > 0\n ? new Set(node.activeRunContexts)\n : undefined;\n startRun(next.runId, next.inputs, queuedRunContextIds, () => {\n // After finishing, schedule next\n setTimeout(processNext, 0);\n });\n };\n\n processNext();\n return;\n }\n\n // switch or merge\n startRun(rid, effectiveInputs, runContextIdsForRun);\n }\n\n /**\n * Cancel all active runs for a node\n */\n cancelNodeActiveRuns(\n node: RuntimeNode,\n reason: \"snapshot\" | \"node-deleted\" | \"user-cancelled\"\n ): void {\n for (const controller of Array.from(node.activeControllers)) {\n const runId = node.controllerRunIds.get(controller);\n if (runId) {\n // Track cancelled runIds for snapshot and user-cancelled operations\n // (to drop emits from cancelled runs)\n if (reason === \"snapshot\" || reason === \"user-cancelled\") {\n if (!node.snapshotCancelledRunIds) {\n node.snapshotCancelledRunIds = new Set<string>();\n }\n node.snapshotCancelledRunIds.add(runId);\n }\n // Emit cancellation event\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-done\",\n nodeId: node.nodeId,\n typeId: node.typeId,\n runId,\n cancelled: true,\n });\n }\n try {\n controller.abort(reason);\n } catch {\n // ignore abort errors\n }\n }\n node.activeControllers.clear();\n node.controllerRunIds.clear();\n node.stats.active = 0;\n node.queue = [];\n }\n\n /**\n * Cancel runs for multiple nodes.\n * Can be called for snapshot/undo/redo operations or user-initiated cancellation.\n */\n cancelNodeRuns(\n nodeIds: string[],\n reason: \"snapshot\" | \"user-cancelled\" = \"user-cancelled\"\n ): void {\n if (nodeIds.length === 0) return;\n\n const toCancel = new Set<string>(nodeIds);\n const visited = new Set<string>();\n const queue = [...nodeIds];\n const edges = this.graphStructure.getEdges();\n\n // Collect all downstream nodes to cancel\n for (let i = 0; i < queue.length; i++) {\n const nodeId = queue[i];\n if (visited.has(nodeId)) continue;\n visited.add(nodeId);\n\n for (const edge of edges) {\n if (edge.source.nodeId === nodeId) {\n const targetId = edge.target.nodeId;\n if (!visited.has(targetId)) {\n toCancel.add(targetId);\n queue.push(targetId);\n }\n }\n }\n }\n\n // Cancel runs for all affected nodes\n for (const nodeId of toCancel) {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) continue;\n\n this.cancelNodeActiveRuns(node, reason);\n\n node.runSeq += 1;\n const now = Date.now();\n const suffix = reason === \"snapshot\" ? \"snapshot\" : \"cancelled\";\n node.latestRunId = `${nodeId}:${node.runSeq}:${now}:${suffix}`;\n }\n\n // Cancel nodes in run-contexts (exclude them from active run-contexts)\n for (const nodeId of toCancel) {\n this.runContextManager.cancelNodeInRunContexts(\n nodeId,\n false, // includeDownstream = false (already collected above)\n edges,\n this.graphStructure.getNodes()\n );\n }\n }\n}\n","import type {\n RuntimeValue,\n RuntimeInvalidate,\n RuntimeError,\n RuntimeStats,\n ResolvedHandles,\n GraphDefinition,\n GraphNodeDefinition,\n GraphEdgeDefinition,\n} from \"@bian-womp/spark-protocol\";\nimport type { ExecutionContext, RuntimeNodeStats } from \"../core/types\";\nimport { getInputTypeId, getTypedOutputTypeId } from \"../core/types\";\nimport { Registry } from \"../builder/Registry\";\nimport { GraphStructure } from \"./components/GraphStructure\";\nimport { EventEmitter } from \"./components/EventEmitter\";\nimport { RunContextManager } from \"./components/RunContextManager\";\nimport { HandleResolver } from \"./components/HandleResolver\";\nimport { ValuePropagator } from \"./components/ValuePropagator\";\nimport { ExecutionScheduler } from \"./components/ExecutionScheduler\";\nimport type { IRuntimeCoordinator } from \"./components/interfaces\";\nimport { valuesEqual } from \"./utils\";\nimport type {\n RuntimeNode,\n RuntimeEdge,\n RunContext,\n RunContextId,\n} from \"./components/types\";\n\nexport type RuntimeEventListener<K extends RuntimeEventName> = (\n e: RuntimeEventMap[K]\n) => void;\n\nexport type RuntimeEventName = \"value\" | \"invalidate\" | \"error\" | \"stats\";\n\nexport interface RuntimeEventMap {\n value: RuntimeValue;\n invalidate: RuntimeInvalidate;\n error: RuntimeError;\n stats: RuntimeStats;\n}\n\n// Types are now imported from components/types.ts (re-exported above)\nexport class GraphRuntime implements IRuntimeCoordinator {\n // Component instances\n private graphStructure: GraphStructure;\n private eventEmitter: EventEmitter;\n private runContextManager: RunContextManager;\n private handleResolver: HandleResolver;\n private valuePropagator: ValuePropagator;\n private executionScheduler: ExecutionScheduler;\n\n // State\n private paused = false;\n private environment: Record<string, unknown> = {};\n\n constructor() {\n // Initialize components\n this.graphStructure = new GraphStructure();\n this.eventEmitter = new EventEmitter();\n this.runContextManager = new RunContextManager();\n\n // Initialize components with interface-based dependencies\n // HandleResolver only needs IRuntimeCoordinator (this)\n this.handleResolver = new HandleResolver(\n this.graphStructure,\n this.eventEmitter,\n this, // IRuntimeCoordinator\n undefined, // registry set later\n undefined // environment set later\n );\n\n // ValuePropagator needs IHandleResolver and IRuntimeCoordinator\n // ExecutionScheduler needs IValuePropagator - circular dependency!\n // Solution: Create ValuePropagator first (without executionScheduler),\n // then create ExecutionScheduler with ValuePropagator,\n // then wire ValuePropagator with ExecutionScheduler via setExecutionScheduler\n this.valuePropagator = new ValuePropagator(\n this.graphStructure,\n this.eventEmitter,\n this.runContextManager,\n this.handleResolver, // IHandleResolver\n this // IRuntimeCoordinator\n );\n\n // Create ExecutionScheduler with ValuePropagator\n this.executionScheduler = new ExecutionScheduler(\n this.graphStructure,\n this.eventEmitter,\n this.runContextManager,\n this.valuePropagator, // IValuePropagator\n this, // IRuntimeCoordinator\n this.environment\n );\n\n // Wire ValuePropagator with ExecutionScheduler to resolve circular dependency\n this.valuePropagator.setExecutionScheduler(this.executionScheduler);\n }\n\n static create(\n def: GraphDefinition,\n registry: Registry,\n opts?: { environment?: Record<string, unknown> }\n ): GraphRuntime {\n const gr = new GraphRuntime();\n gr.environment = opts?.environment ?? {};\n\n // Set registry and environment on components\n gr.graphStructure.setRegistry(registry);\n gr.handleResolver.setRegistry(registry);\n gr.handleResolver.setEnvironment(gr.environment);\n gr.executionScheduler.setEnvironment(gr.environment);\n\n // Precompute per-node resolved handles (use def-provided overrides; do not compute dynamically here)\n const initial = GraphStructure.computeResolvedHandleMap(\n def,\n registry,\n gr.environment\n );\n for (const [nodeId, handles] of initial.map) {\n gr.graphStructure.setResolvedHandles(nodeId, handles);\n }\n\n // Instantiate nodes\n for (const n of def.nodes) {\n const desc = registry.nodes.get(n.typeId);\n if (!desc) throw new Error(`Unknown node type: ${n.typeId}`);\n const cat = registry.categories.get(desc.categoryId);\n if (!cat) throw new Error(`Unknown category: ${desc.categoryId}`);\n if (cat.validateImpl) cat.validateImpl(desc.impl);\n const runtime = cat.createRuntime({\n nodeId: n.nodeId,\n impl: desc.impl,\n });\n const rn: RuntimeNode<any> = {\n typeId: n.typeId,\n nodeId: n.nodeId,\n lifecycle: desc.lifecycle,\n inputs: {},\n outputs: {},\n state: {},\n runtime,\n params: n.params,\n policy: {\n ...cat.policy,\n ...desc.policy,\n ...n.params?.policy,\n },\n logLevel: desc.logLevel,\n runSeq: 0,\n activeControllers: new Set(),\n controllerRunIds: new Map(),\n queue: [],\n stats: {\n runs: 0,\n active: 0,\n queued: 0,\n progress: 0,\n },\n activeRunContexts: new Set(),\n };\n gr.graphStructure.setNode(n.nodeId, rn);\n }\n\n // Instantiate edges\n const edges = GraphStructure.buildEdges(\n def,\n registry,\n gr.graphStructure.getResolvedHandlesMap()\n );\n gr.graphStructure.setEdges(edges);\n\n // Schedule async recompute only for nodes that indicated Promise-based resolveHandles\n for (const nodeId of initial.pending) {\n gr.handleResolver.scheduleRecomputeHandles(nodeId);\n }\n\n return gr;\n }\n\n on<K extends RuntimeEventName>(\n event: K,\n handler: RuntimeEventListener<K>\n ): () => void {\n return this.eventEmitter.on(event, handler);\n }\n\n setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) throw new Error(`Node not found: ${nodeId}`);\n\n let anyChanged = false;\n const edges = this.graphStructure.getEdges();\n const registry = this.graphStructure.getRegistry();\n for (const [handle, value] of Object.entries(inputs)) {\n const hasInbound = edges.some(\n (e) => e.target.nodeId === nodeId && e.target.handle === handle\n );\n if (hasInbound) continue;\n\n // Validate input value against declared type\n if (value !== undefined && registry) {\n const desc = registry.nodes.get(node.typeId);\n const resolved = this.graphStructure.getResolvedHandles(nodeId);\n // Get typeId from resolved handles first, then registry statics\n const typeId = resolved\n ? getInputTypeId(resolved.inputs, handle)\n : desc\n ? getInputTypeId(desc.inputs, handle)\n : undefined;\n\n if (typeId) {\n const typeDesc = registry.types.get(typeId);\n if (typeDesc?.validate && !typeDesc.validate(value)) {\n // Emit error event for invalid input value and reject it\n const errorMessage = `Invalid value for input ${nodeId}.${handle} (type ${typeId}): ${JSON.stringify(\n value\n )}`;\n this.eventEmitter.emit(\"error\", {\n kind: \"input-validation\",\n nodeId,\n handle,\n typeId,\n value,\n message: errorMessage,\n });\n // Skip storing invalid value\n continue;\n }\n }\n }\n\n const prev = node.inputs[handle];\n const same = valuesEqual(prev, value);\n if (!same) {\n if (value === undefined) {\n delete node.inputs[handle];\n } else {\n node.inputs[handle] = value;\n }\n // Emit value event for input updates\n this.eventEmitter.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n anyChanged = true;\n }\n }\n if (!this.paused) {\n // Only schedule if all inbound inputs are present (or there are none)\n if (anyChanged && this.executionScheduler.allInboundHaveValue(nodeId))\n this.executionScheduler.scheduleInputsChangedInternal(nodeId);\n // Recompute dynamic handles for this node when its direct inputs change\n if (anyChanged) this.handleResolver.scheduleRecomputeHandles(nodeId);\n }\n }\n\n getOutput(nodeId: string, output: string): unknown {\n const node = this.graphStructure.getNode(nodeId);\n return node?.outputs[output];\n }\n\n // Update resolved handles for a single node and refresh edge converters/types that touch it\n updateNodeHandles(\n nodeId: string,\n handles: ResolvedHandles,\n registry: Registry\n ): void {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) return;\n\n const oldResolved = this.graphStructure.getResolvedHandles(nodeId);\n this.graphStructure.setResolvedHandles(nodeId, handles);\n\n // Clear outputs that are no longer valid handles\n const oldOutputs = oldResolved?.outputs ?? {};\n const newOutputs = handles.outputs ?? {};\n const oldOutputHandles = new Set(Object.keys(oldOutputs));\n const newOutputHandles = new Set(Object.keys(newOutputs));\n for (const handle of oldOutputHandles) {\n if (!newOutputHandles.has(handle)) {\n // Output handle was removed - clear it and emit undefined to invalidate downstream\n delete node.outputs[handle];\n this.eventEmitter.emit(\"value\", {\n nodeId,\n handle,\n value: undefined,\n io: \"output\",\n });\n }\n }\n\n const edges = this.graphStructure.getEdges();\n // Recompute edge converter/type for edges where this node is source or target\n for (const e of edges) {\n const srcNode = this.graphStructure.getNode(e.source.nodeId);\n const dstNode = this.graphStructure.getNode(e.target.nodeId);\n let srcDeclared: string | string[] | undefined = e.effectiveTypeId; // Use effectiveTypeId as fallback\n let dstDeclared: string | undefined = e.dstDeclared;\n const oldDstDeclared = dstDeclared; // Track old value to detect resolution\n if (e.source.nodeId === nodeId) {\n const resolved = this.graphStructure.getResolvedHandles(nodeId);\n srcDeclared = resolved\n ? resolved.outputs[e.source.handle]\n : srcDeclared;\n // Update effectiveTypeId if original wasn't explicit\n if (!e.typeId) {\n e.effectiveTypeId = Array.isArray(srcDeclared)\n ? srcDeclared?.[0] ?? \"untyped\"\n : srcDeclared ?? \"untyped\";\n }\n }\n if (e.target.nodeId === nodeId) {\n const resolved = this.graphStructure.getResolvedHandles(nodeId);\n if (resolved) {\n dstDeclared = getInputTypeId(resolved.inputs, e.target.handle);\n e.dstDeclared = dstDeclared;\n }\n }\n const conv = GraphStructure.buildEdgeConverters(\n srcDeclared,\n dstDeclared,\n registry,\n `updateNodeHandles: ${srcNode?.typeId || \"\"}.${e.source.nodeId}.${\n e.source.handle\n } -> ${dstNode?.typeId || \"\"}.${e.target.nodeId}.${e.target.handle}`\n );\n e.convert = conv.convert;\n e.convertAsync = conv.convertAsync;\n\n // If target handle was just resolved (was undefined, now has a type), re-propagate values\n if (\n e.target.nodeId === nodeId &&\n oldDstDeclared === undefined &&\n dstDeclared !== undefined\n ) {\n const srcNode = this.graphStructure.getNode(e.source.nodeId);\n if (srcNode) {\n const srcValue = srcNode.outputs[e.source.handle];\n if (srcValue !== undefined) {\n // Re-propagate through the now-resolved edge converter\n // Preserve run-contexts if source node has them\n const runContextIds =\n srcNode.activeRunContexts.size > 0\n ? new Set(srcNode.activeRunContexts)\n : undefined;\n this.valuePropagator.propagate(\n e.source.nodeId,\n e.source.handle,\n srcValue,\n runContextIds\n );\n }\n }\n }\n }\n // Re-emit only valid outputs (after clearing removed ones)\n this.valuePropagator.reemitNodeOutputs(nodeId);\n }\n\n launch(invalidate = false): void {\n // call onActivated for nodes that implement it\n for (const node of this.graphStructure.getNodes().values()) {\n const effectiveInputs = this.executionScheduler.getEffectiveInputs(\n node.nodeId\n );\n const ctrl = new AbortController();\n const ctx = this.executionScheduler.createExecutionContext(\n node.nodeId,\n node,\n effectiveInputs,\n `${node.nodeId}:init`,\n ctrl.signal\n );\n if (node.lifecycle?.prepare) {\n ctx.log(\"debug\", \"prepare-start\");\n node.lifecycle.prepare(node.params ?? {}, ctx);\n ctx.log(\"debug\", \"prepare-done\");\n }\n node.runtime.onActivated?.();\n }\n if (invalidate) {\n // After activation, schedule nodes that have all inbound inputs present\n for (const nodeId of this.graphStructure.getNodes().keys()) {\n if (this.executionScheduler.allInboundHaveValue(nodeId))\n this.executionScheduler.scheduleInputsChangedInternal(nodeId);\n }\n }\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) return;\n // Forward event to node's onExternalEvent handler for custom actions\n node.runtime.onExternalEvent?.(event, node.state);\n }\n\n dispose(): void {\n // Resolve all pending run-context promises before cleanup\n this.runContextManager.resolveAll();\n\n for (const node of this.graphStructure.getNodes().values()) {\n node.runtime.onDeactivated?.();\n node.runtime.dispose?.();\n node.lifecycle?.dispose?.({\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n });\n }\n this.graphStructure.clear();\n }\n\n getNodeIds(): string[] {\n return Array.from(this.graphStructure.getNodes().keys());\n }\n\n // Unsafe helpers for serializer: read-only accessors and hydration\n getNodeData(nodeId: string):\n | {\n inputs: Record<string, unknown>;\n outputs: Record<string, unknown>;\n state: unknown;\n params?: Record<string, unknown>;\n stats?: RuntimeNodeStats;\n }\n | undefined {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) return undefined;\n return {\n inputs: { ...node.inputs },\n outputs: { ...node.outputs },\n state: node.state,\n params: node.params,\n stats: { ...node.stats },\n };\n }\n\n getEnvironment(): Record<string, unknown> {\n return { ...this.environment };\n }\n\n setEnvironment(env: Record<string, unknown>): void {\n this.environment = { ...env };\n this.handleResolver.setEnvironment(this.environment);\n this.executionScheduler.setEnvironment(this.environment);\n // Recompute dynamic handles for all nodes when environment changes\n for (const nodeId of this.graphStructure.getNodes().keys()) {\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n }\n }\n\n // Export a GraphDefinition reflecting the current runtime view\n getGraphDef(): GraphDefinition {\n const nodes: GraphNodeDefinition[] = Array.from(\n this.graphStructure.getNodes().values()\n ).map((n) => {\n const resolved = this.graphStructure.getResolvedHandles(n.nodeId);\n\n return {\n nodeId: n.nodeId,\n typeId: n.typeId,\n params: n.params ? { ...n.params } : undefined,\n resolvedHandles: resolved ? { ...resolved } : undefined,\n };\n });\n const edges: GraphEdgeDefinition[] = this.graphStructure\n .getEdges()\n .map((e) => ({\n id: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n typeId: e.typeId, // Only export original typeId (may be undefined)\n }));\n return { nodes, edges };\n }\n\n async whenIdle(): Promise<void> {\n // If we have active run-contexts, wait for all of them to complete\n const allRunContexts = this.runContextManager.getAllRunContexts();\n if (allRunContexts.size > 0) {\n await new Promise<void>((resolve) => {\n const check = () => {\n if (this.runContextManager.getAllRunContexts().size === 0) {\n resolve();\n } else {\n setTimeout(check, 10);\n }\n };\n setTimeout(check, 10);\n });\n }\n\n const isIdle = (): boolean => {\n for (const n of this.graphStructure.getNodes().values()) {\n if (n.activeControllers.size > 0) return false;\n if (n.queue.length > 0) return false;\n }\n return true;\n };\n if (isIdle()) return;\n await new Promise<void>((resolve) => {\n const check = () => {\n if (isIdle()) resolve();\n else setTimeout(check, 10);\n };\n setTimeout(check, 10);\n });\n }\n\n /**\n * Run this node and optionally all dynamically reachable downstream nodes as a run-context.\n * Includes nodes added later behind the same path (via re-emits).\n * @param startNodeId - The node to start execution from\n * @param options - Execution options\n * @param options.skipPropagateValues - If true, don't set inputs of linked nodes (default: false)\n * @param options.propagate - If false, don't schedule downstream nodes (default: true)\n */\n async runFromHereContext(\n startNodeId: string,\n options?: {\n skipPropagateValues?: boolean;\n propagate?: boolean;\n }\n ): Promise<void> {\n const node = this.graphStructure.getNode(startNodeId);\n if (!node) {\n // Node doesn't exist - resolve immediately\n return;\n }\n\n const ctx = this.runContextManager.createRunContext(startNodeId, options);\n\n // Create promise that resolves when context finishes\n const promise = new Promise<void>((resolve) => {\n ctx.resolve = resolve;\n });\n\n // Temporarily unpause if needed\n const wasPaused = this.paused;\n if (wasPaused) {\n this.paused = false;\n }\n\n try {\n // Seed the start node with this run-context\n node.activeRunContexts.add(ctx.id);\n this.scheduleInputsChangedWithRunContexts(startNodeId, new Set([ctx.id]));\n await promise;\n } finally {\n // Restore pause state if it was paused and no other run-contexts are active\n if (wasPaused && this.runContextManager.getAllRunContexts().size === 0) {\n this.paused = true;\n }\n }\n }\n\n /**\n * Schedule a node with run-context IDs attached\n */\n private scheduleInputsChangedWithRunContexts(\n nodeId: string,\n runContextIds: Set<RunContextId>\n ): void {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) return;\n // Attach run-contexts to the node\n for (const id of runContextIds) {\n node.activeRunContexts.add(id);\n }\n this.executionScheduler.scheduleInputsChangedInternal(\n nodeId,\n runContextIds\n );\n }\n\n pause(): void {\n this.paused = true;\n }\n\n isPaused(): boolean {\n return this.paused;\n }\n\n resume(): void {\n this.paused = false;\n }\n\n invalidateDownstream(nodeId: string): void {\n this.valuePropagator.reemitNodeOutputs(nodeId);\n }\n\n scheduleInputsChanged(nodeId: string): void {\n this.executionScheduler.scheduleInputsChangedInternal(nodeId);\n }\n\n cancelNodeRuns(nodeIds: string[]): void {\n this.executionScheduler.cancelNodeRuns(nodeIds);\n }\n\n copyOutputs(\n fromNodeId: string,\n toNodeId: string,\n options?: { dry?: boolean }\n ): void {\n // Get outputs from source node\n const fromNode = this.getNodeData(fromNodeId);\n if (!fromNode?.outputs) return;\n\n // Copy outputs to target node using hydrate\n // hydrate already pauses internally, so we don't need to handle dry option here\n // reemit: !options?.dry means don't propagate downstream if dry mode\n this.hydrate(\n { outputs: { [toNodeId]: { ...fromNode.outputs } } },\n { reemit: !options?.dry }\n );\n }\n\n // Hydrate inputs/outputs without triggering computation; optionally re-emit outputs downstream\n hydrate(\n payload: {\n inputs?: Record<string, Record<string, unknown>>;\n outputs?: Record<string, Record<string, unknown>>;\n },\n opts?: { reemit?: boolean }\n ): void {\n const prevPaused = this.paused;\n this.paused = true;\n try {\n const ins = payload?.inputs || {};\n for (const [nodeId, map] of Object.entries(ins)) {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) continue;\n for (const [h, v] of Object.entries(map || {})) {\n node.inputs[h] = structuredClone(v);\n // emit input value event\n this.eventEmitter.emit(\"value\", {\n nodeId,\n handle: h,\n value: node.inputs[h],\n io: \"input\",\n runtimeTypeId: getTypedOutputTypeId(node.inputs[h]),\n });\n }\n }\n const outs = payload?.outputs || {};\n for (const [nodeId, map] of Object.entries(outs)) {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) continue;\n for (const [h, v] of Object.entries(map || {})) {\n node.outputs[h] = structuredClone(v);\n // emit output value event\n this.eventEmitter.emit(\"value\", {\n nodeId,\n handle: h,\n value: node.outputs[h],\n io: \"output\",\n runtimeTypeId: getTypedOutputTypeId(node.outputs[h]),\n });\n }\n }\n if (opts?.reemit) {\n for (const nodeId of this.graphStructure.getNodes().keys()) {\n this.valuePropagator.reemitNodeOutputs(nodeId);\n }\n }\n } finally {\n this.paused = prevPaused;\n }\n }\n\n // Incrementally update nodes/edges to match new definition without full rebuild\n update(def: GraphDefinition, registry: Registry): void {\n // Handle node additions and removals\n const desiredIds = new Set(def.nodes.map((n) => n.nodeId));\n const currentIds = new Set(this.graphStructure.getNodes().keys());\n\n // Remove nodes not present\n for (const nodeId of Array.from(currentIds)) {\n if (!desiredIds.has(nodeId)) {\n const node = this.graphStructure.getNode(nodeId)!;\n\n // Cancel all active runs and emit cancellation events\n this.executionScheduler.cancelNodeActiveRuns(node, \"node-deleted\");\n\n // Cancel node in all run-contexts (marks it as cancelled and clears activeRunContexts)\n this.runContextManager.cancelNodeInRunContexts(\n nodeId,\n /* includeDownstream */ true,\n this.graphStructure.getEdges(),\n this.graphStructure.getNodes()\n );\n\n // Check for run-context completion (they may finish if pending reaches 0)\n const allRunContexts = this.runContextManager.getAllRunContexts();\n for (const ctx of Array.from(allRunContexts.values())) {\n if (ctx.pending === 0) {\n this.runContextManager.finishRunContext(\n ctx.id,\n this.graphStructure.getNodes()\n );\n }\n }\n\n // Cleanup node resources\n node.runtime.onDeactivated?.();\n node.runtime.dispose?.();\n node.lifecycle?.dispose?.({\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n });\n this.graphStructure.deleteNode(nodeId);\n this.valuePropagator.clearArrayBuckets(nodeId);\n }\n }\n\n // Add or update existing nodes\n for (const n of def.nodes) {\n const existing = this.graphStructure.getNode(n.nodeId);\n if (!existing) {\n // create new runtime node\n const desc = registry.nodes.get(n.typeId);\n if (!desc) throw new Error(`Unknown node type: ${n.typeId}`);\n const cat = registry.categories.get(desc.categoryId);\n if (!cat) throw new Error(`Unknown category: ${desc.categoryId}`);\n if (cat.validateImpl) cat.validateImpl(desc.impl);\n const runtime = cat.createRuntime({\n nodeId: n.nodeId,\n impl: desc.impl,\n });\n const rn: RuntimeNode<any> = {\n typeId: n.typeId,\n nodeId: n.nodeId,\n lifecycle: desc.lifecycle,\n inputs: {},\n outputs: {},\n state: {},\n runtime,\n params: n.params,\n policy: {\n ...cat.policy,\n ...desc.policy,\n ...n.params?.policy,\n },\n runSeq: 0,\n activeControllers: new Set(),\n controllerRunIds: new Map(),\n queue: [],\n stats: {\n runs: 0,\n active: 0,\n queued: 0,\n progress: 0,\n },\n activeRunContexts: new Set(),\n };\n this.graphStructure.setNode(n.nodeId, rn);\n // Activate new node\n const effectiveInputs = this.executionScheduler.getEffectiveInputs(\n rn.nodeId\n );\n const ctrl = new AbortController();\n const ctx = this.executionScheduler.createExecutionContext(\n rn.nodeId,\n rn,\n effectiveInputs,\n `${rn.nodeId}:init`,\n ctrl.signal\n );\n if (rn.lifecycle?.prepare) {\n ctx.log(\"debug\", \"prepare-start\");\n rn.lifecycle.prepare(rn.params ?? {}, ctx);\n ctx.log(\"debug\", \"prepare-done\");\n }\n rn.runtime.onActivated?.();\n } else {\n // update params/policy\n existing.params = n.params;\n if (!existing.stats) {\n existing.stats = {\n runs: 0,\n active: 0,\n queued: 0,\n progress: 0,\n };\n }\n }\n }\n\n // Capture previous inbound map before rebuilding edges\n const edges = this.graphStructure.getEdges();\n const prevInbound = new Map<string, Set<string>>();\n for (const e of edges) {\n const set = prevInbound.get(e.target.nodeId) ?? new Set<string>();\n set.add(e.target.handle);\n prevInbound.set(e.target.nodeId, set);\n }\n\n // Capture previous per-handle target sets before rebuilding edges\n const prevOutTargets = new Map<string, Map<string, Set<string>>>();\n for (const e of edges) {\n const tmap =\n prevOutTargets.get(e.source.nodeId) ?? new Map<string, Set<string>>();\n const tset = tmap.get(e.source.handle) ?? new Set<string>();\n tset.add(`${e.target.nodeId}.${e.target.handle}`);\n tmap.set(e.source.handle, tset);\n prevOutTargets.set(e.source.nodeId, tmap);\n }\n\n // Precompute per-node resolved handles for updated graph (include dynamic)\n const resolved = GraphStructure.computeResolvedHandleMap(\n def,\n registry,\n this.environment\n );\n\n // Check which handles changed and emit events for those\n const changedHandles: Record<string, Partial<ResolvedHandles>> = {};\n for (const [nodeId, newHandles] of resolved.map) {\n const oldHandles = this.graphStructure.getResolvedHandles(nodeId);\n if (\n !oldHandles ||\n JSON.stringify(oldHandles) !== JSON.stringify(newHandles)\n ) {\n changedHandles[nodeId] = newHandles;\n }\n }\n\n // Update resolved handles\n for (const [nodeId, handles] of resolved.map) {\n this.graphStructure.setResolvedHandles(nodeId, handles);\n }\n\n // Rebuild edges mapping with coercions\n const newEdges = GraphStructure.buildEdges(\n def,\n registry,\n this.graphStructure.getResolvedHandlesMap()\n );\n this.graphStructure.setEdges(newEdges);\n\n // Build new inbound map\n const nextInbound = new Map<string, Set<string>>();\n const updatedEdges = this.graphStructure.getEdges();\n for (const e of updatedEdges) {\n const set = nextInbound.get(e.target.nodeId) ?? new Set<string>();\n set.add(e.target.handle);\n nextInbound.set(e.target.nodeId, set);\n }\n\n // For inputs that lost inbound connections, clear and schedule recompute\n for (const [nodeId, prevSet] of prevInbound) {\n const currSet = nextInbound.get(nodeId) ?? new Set<string>();\n const node = this.graphStructure.getNode(nodeId);\n if (!node) continue;\n let changed = false;\n for (const handle of Array.from(prevSet)) {\n if (!currSet.has(handle)) {\n if (handle in node.inputs) {\n delete node.inputs[handle];\n changed = true;\n }\n }\n }\n if (changed) {\n // Clear buckets for handles that lost inbound (handled by ValuePropagator)\n this.valuePropagator.clearArrayBuckets(nodeId);\n this.executionScheduler.scheduleInputsChangedInternal(nodeId);\n }\n }\n\n // Re-emit outputs when per-handle target sets change (precise and simple)\n const nextOutTargets = new Map<string, Map<string, Set<string>>>();\n for (const e of updatedEdges) {\n const tmap =\n nextOutTargets.get(e.source.nodeId) ?? new Map<string, Set<string>>();\n const tset = tmap.get(e.source.handle) ?? new Set<string>();\n tset.add(`${e.target.nodeId}.${e.target.handle}`);\n tmap.set(e.source.handle, tset);\n nextOutTargets.set(e.source.nodeId, tmap);\n }\n\n const setsEqualStr = (a?: Set<string>, b?: Set<string>) => {\n if (!a && !b) return true;\n if (!a || !b) return false;\n if (a.size !== b.size) return false;\n for (const v of a) if (!b.has(v)) return false;\n return true;\n };\n\n const nodesToCheck = new Set<string>([\n ...Array.from(prevOutTargets.keys()),\n ...Array.from(nextOutTargets.keys()),\n ]);\n for (const nodeId of nodesToCheck) {\n const pmap = prevOutTargets.get(nodeId) ?? new Map<string, Set<string>>();\n const nmap = nextOutTargets.get(nodeId) ?? new Map<string, Set<string>>();\n const handles = new Set<string>([\n ...Array.from(pmap.keys()),\n ...Array.from(nmap.keys()),\n ]);\n for (const handle of handles) {\n const pset = pmap.get(handle) ?? new Set<string>();\n const nset = nmap.get(handle) ?? new Set<string>();\n if (!setsEqualStr(pset, nset)) {\n const val = this.getOutput(nodeId, handle);\n if (val !== undefined)\n this.valuePropagator.propagate(nodeId, handle, val);\n else if (this.executionScheduler.allInboundHaveValue(nodeId))\n this.executionScheduler.scheduleInputsChangedInternal(nodeId);\n }\n }\n }\n\n // Prune array bucket contributions for edges that no longer exist\n // This is handled by ValuePropagator - array buckets are managed there\n // The buckets will be cleaned up automatically when edges are removed\n\n // Schedule async recompute for nodes that indicated Promise-based resolveHandles in this update\n\n // Emit event for changed handles (if any)\n if (Object.keys(changedHandles).length > 0) {\n this.eventEmitter.emit(\"invalidate\", {\n reason: \"graph-updated\",\n resolvedHandles: changedHandles,\n });\n }\n\n for (const nodeId of resolved.pending) {\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n }\n }\n}\n","import type {\n GraphDefinition,\n GraphNodeDefinition,\n ResolvedHandles,\n} from \"@bian-womp/spark-protocol\";\nimport type { NodeTypeDescriptor } from \"../core/types\";\nimport { isInputPrivate, getInputTypeId } from \"../core/types\";\nimport { Registry } from \"./Registry\";\nimport { GraphRuntime } from \"../runtime/GraphRuntime\";\n\nexport interface ValidationIssueData {\n nodeId?: string;\n edgeId?: string;\n typeId?: string;\n input?: string;\n output?: string;\n declared?: string;\n effectiveTypeId?: string;\n}\nexport interface ValidationIssue {\n level: \"error\" | \"warning\";\n code: string;\n message: string;\n data?: Partial<ValidationIssueData>;\n}\n\nexport interface ValidationReport {\n ok: boolean;\n issues: ValidationIssue[];\n}\n\nexport interface BuildOptions {\n environment?: Record<string, unknown>;\n}\n\nexport class GraphBuilder {\n constructor(private registry: Registry) {}\n\n validate(def: GraphDefinition): ValidationReport {\n const issues: ValidationIssue[] = [];\n const nodeIds = new Set<string>();\n const edgeIds = new Set<string>();\n\n // Precompute effective handle maps (registry statics merged with per-node resolvedHandles)\n const nodeById = new Map<string, GraphNodeDefinition>();\n const effByNodeId = new Map<\n string,\n Omit<ResolvedHandles, \"inputDefaults\">\n >();\n\n const getEffectiveHandles = (\n n?: GraphNodeDefinition\n ): Omit<ResolvedHandles, \"inputDefaults\"> => {\n if (!n) return { inputs: {}, outputs: {} };\n const desc = this.registry.nodes.get(n.typeId);\n const resolved = n.resolvedHandles || {};\n const inputs = { ...desc?.inputs, ...resolved.inputs };\n const outputs = { ...desc?.outputs, ...resolved.outputs };\n return { inputs, outputs };\n };\n\n const normOut = (decl: string | string[] | undefined): string[] =>\n Array.isArray(decl) ? decl : decl ? [decl] : [];\n\n const inferEdgeType = (\n srcDeclared: string | string[] | undefined,\n dstDeclared: string | undefined,\n explicit?: string\n ): string | undefined => {\n if (explicit) return explicit;\n if (Array.isArray(srcDeclared) && dstDeclared) return dstDeclared;\n if (srcDeclared)\n return Array.isArray(srcDeclared) ? srcDeclared[0] : srcDeclared;\n return undefined;\n };\n\n const canFlow = (\n from: string | string[] | undefined,\n to?: string\n ): boolean => {\n if (!to || !from) return true;\n const arr = Array.isArray(from) ? from : [from];\n return arr.every((s) => s === to || !!this.registry.canCoerce(s, to));\n };\n\n const pushIssue = (\n level: \"error\" | \"warning\",\n code: string,\n message: string,\n data?: Partial<ValidationIssueData>\n ) => {\n issues.push({ level, code, message, data });\n };\n\n // nodes exist, ids unique, and categories registered\n for (const n of def.nodes) {\n if (nodeIds.has(n.nodeId)) {\n pushIssue(\"error\", \"NODE_ID_DUP\", `Duplicate nodeId ${n.nodeId}`, {\n nodeId: n.nodeId,\n });\n } else {\n nodeIds.add(n.nodeId);\n }\n nodeById.set(n.nodeId, n);\n effByNodeId.set(n.nodeId, getEffectiveHandles(n));\n const nodeType = this.registry.nodes.get(n.typeId);\n if (!nodeType) {\n pushIssue(\n \"error\",\n \"NODE_TYPE_MISSING\",\n `Unknown node type ${n.typeId}`,\n { typeId: n.typeId, nodeId: n.nodeId }\n );\n continue;\n }\n if (!this.registry.categories.has(nodeType.categoryId)) {\n pushIssue(\n \"error\",\n \"CATEGORY_MISSING\",\n `Unknown category ${nodeType.categoryId} for node type ${n.typeId}`\n );\n }\n }\n\n // edges validation: nodes exist, handles exist, type exists\n const inboundCounts = new Map<string, number>();\n // Track which inbound (nodeId::handle) are declared as array inputs, to allow multi-inbound without warning\n const inboundArrayOk = new Set<string>();\n for (const e of def.edges) {\n if (edgeIds.has(e.id)) {\n pushIssue(\"error\", \"EDGE_ID_DUP\", `Duplicate edge id ${e.id}`, {\n edgeId: e.id,\n });\n } else {\n edgeIds.add(e.id);\n }\n const srcNode = nodeById.get(e.source.nodeId);\n const dstNode = nodeById.get(e.target.nodeId);\n if (!srcNode)\n pushIssue(\n \"error\",\n \"EDGE_SOURCE_MISSING\",\n `Edge ${e.id} source node missing`,\n {\n edgeId: e.id,\n }\n );\n if (!dstNode)\n pushIssue(\n \"error\",\n \"EDGE_TARGET_MISSING\",\n `Edge ${e.id} target node missing`,\n {\n edgeId: e.id,\n }\n );\n // Effective handle declarations\n const srcEff = effByNodeId.get(e.source.nodeId) || {\n inputs: {},\n outputs: {},\n };\n const dstEff = effByNodeId.get(e.target.nodeId) || {\n inputs: {},\n outputs: {},\n };\n const _srcDeclared = srcNode\n ? srcEff.outputs[e.source.handle]\n : undefined;\n const _dstDeclared = dstNode\n ? getInputTypeId(dstEff.inputs, e.target.handle)\n : undefined;\n // Effective edge type\n const effectiveTypeId = inferEdgeType(\n _srcDeclared,\n _dstDeclared,\n e.typeId\n );\n const type = effectiveTypeId\n ? this.registry.types.get(effectiveTypeId)\n : undefined;\n if (!type) {\n pushIssue(\n \"error\",\n \"TYPE_MISSING\",\n `Edge ${e.id} type missing or unknown`,\n {\n edgeId: e.id,\n }\n );\n }\n\n if (srcNode) {\n if (!(e.source.handle in srcEff.outputs)) {\n pushIssue(\n \"error\",\n \"OUTPUT_MISSING\",\n `Edge ${e.id} source output ${e.source.handle} missing on ${srcNode.typeId}`,\n { edgeId: e.id, nodeId: srcNode.nodeId, output: e.source.handle }\n );\n }\n const declaredArr = normOut(srcEff.outputs[e.source.handle]);\n if (\n declaredArr.length > 0 &&\n effectiveTypeId &&\n !canFlow(declaredArr, effectiveTypeId)\n ) {\n pushIssue(\n \"error\",\n \"TYPE_MISMATCH_OUTPUT\",\n `Edge ${e.id} type ${effectiveTypeId} mismatches source output ${\n srcNode.typeId\n }.${e.source.handle} (${declaredArr.join(\n \"|\"\n )}) and no coercion exists`,\n {\n edgeId: e.id,\n nodeId: srcNode.nodeId,\n output: e.source.handle,\n declared: declaredArr.join(\"|\"),\n effectiveTypeId,\n }\n );\n }\n }\n if (dstNode) {\n if (!(e.target.handle in dstEff.inputs)) {\n pushIssue(\n \"error\",\n \"INPUT_MISSING\",\n `Edge ${e.id} target input ${e.target.handle} missing on ${dstNode.typeId}`,\n { edgeId: e.id, nodeId: dstNode.nodeId, input: e.target.handle }\n );\n }\n // Private inputs should not accept edges\n if (isInputPrivate(dstEff.inputs, e.target.handle)) {\n pushIssue(\n \"error\",\n \"INPUT_PRIVATE\",\n `Edge ${e.id} targets private input ${dstNode.typeId}.${e.target.handle}`,\n { edgeId: e.id, nodeId: dstNode.nodeId, input: e.target.handle }\n );\n }\n const declaredIn = getInputTypeId(dstEff.inputs, e.target.handle);\n if (declaredIn && effectiveTypeId) {\n if (srcNode) {\n const srcDeclared = srcEff.outputs[e.source.handle] as\n | string\n | string[]\n | undefined;\n const srcArr = normOut(srcDeclared).length\n ? normOut(srcDeclared)\n : [effectiveTypeId];\n if (!canFlow(srcArr, declaredIn)) {\n pushIssue(\n \"error\",\n \"TYPE_MISMATCH_INPUT\",\n `Edge ${e.id} output type ${srcArr.join(\n \"|\"\n )} not convertible to target input ${dstNode.typeId}.${\n e.target.handle\n } (${declaredIn})`,\n {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n declared: declaredIn,\n effectiveTypeId: srcArr.join(\"|\"),\n }\n );\n }\n } else if (!canFlow(effectiveTypeId, declaredIn)) {\n pushIssue(\n \"error\",\n \"TYPE_MISMATCH_INPUT\",\n `Edge ${e.id} type ${effectiveTypeId} mismatches target input ${dstNode.typeId}.${e.target.handle} (${declaredIn}) and no coercion exists`,\n {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n declared: declaredIn,\n effectiveTypeId,\n }\n );\n }\n }\n }\n\n // Track multiple inbound edges targeting the same input handle\n const inboundKey = `${e.target.nodeId}::${e.target.handle}`;\n inboundCounts.set(inboundKey, (inboundCounts.get(inboundKey) ?? 0) + 1);\n // If the target input is declared as an array type, allow multi-inbound (runtime will append)\n if (dstNode) {\n const declaredIn = getInputTypeId(\n (effByNodeId.get(dstNode.nodeId) || { inputs: {} }).inputs,\n e.target.handle\n );\n if (typeof declaredIn === \"string\" && declaredIn.endsWith(\"[]\")) {\n inboundArrayOk.add(inboundKey);\n }\n }\n }\n\n for (const [key, count] of inboundCounts) {\n if (count > 1 && !inboundArrayOk.has(key)) {\n issues.push({\n level: \"warning\",\n code: \"MULTI_INBOUND\",\n message: `Input ${key} has ${count} inbound edges (last-write wins).`,\n data: { nodeId: key.split(\"::\")[0], input: key.split(\"::\")[1] },\n });\n }\n }\n\n return { ok: issues.every((i) => i.level !== \"error\"), issues };\n }\n\n build(def: GraphDefinition, opts?: BuildOptions): GraphRuntime {\n return GraphRuntime.create(def, this.registry, opts);\n }\n\n wrapAsNode(\n def: GraphDefinition,\n exposure: {\n inputs: Record<string, { nodeId: string; handle: string }>;\n outputs: Record<string, { nodeId: string; handle: string }>;\n },\n nodeTypeId: string,\n displayName?: string\n ): NodeTypeDescriptor<any, any, any, any> {\n // Infer exposed handle types from inner graph using registry\n const inputTypes: Record<string, string> = {};\n const outputTypes: Record<string, string> = {};\n\n for (const [outerIn, map] of Object.entries(exposure.inputs)) {\n const innerNode = def.nodes.find((n) => n.nodeId === map.nodeId);\n const innerDesc = innerNode\n ? this.registry.nodes.get(innerNode.typeId)\n : undefined;\n const typeId = innerDesc\n ? getInputTypeId(innerDesc.inputs, map.handle)\n : undefined;\n inputTypes[outerIn] = typeId ?? \"untyped\";\n }\n\n for (const [outerOut, map] of Object.entries(exposure.outputs)) {\n const innerNode = def.nodes.find((n) => n.nodeId === map.nodeId);\n const innerDesc = innerNode\n ? this.registry.nodes.get(innerNode.typeId)\n : undefined;\n const typeId = innerDesc ? innerDesc.outputs[map.handle] : undefined;\n const single = Array.isArray(typeId) ? typeId[0] : typeId;\n outputTypes[outerOut] = single ?? \"untyped\";\n }\n\n return {\n id: nodeTypeId,\n displayName,\n categoryId: \"composite\",\n inputs: inputTypes,\n outputs: outputTypes,\n impl: { def, exposure },\n } as unknown as NodeTypeDescriptor<any, any, any, any>;\n }\n}\n","import { RunMode } from \"@bian-womp/spark-protocol\";\nimport type { Engine, EngineEventListener, EngineEventName } from \"./Engine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\nexport abstract class AbstractEngine implements Engine {\n constructor(protected readonly graphRuntime: GraphRuntime) {}\n\n abstract launch(): void;\n abstract setRunMode(runMode: RunMode): void;\n abstract computeNode(\n nodeId: string,\n options?: { skipPropagateValues?: boolean }\n ): Promise<void>;\n abstract runFromHere(nodeId: string): Promise<void>;\n\n setInputs(\n nodeId: string,\n inputs: Record<string, unknown>,\n options?: { dry?: boolean }\n ): void {\n if (options?.dry) {\n const wasPaused = this.graphRuntime.isPaused();\n if (!wasPaused) this.graphRuntime.pause();\n try {\n this.graphRuntime.setInputs(nodeId, inputs);\n } finally {\n if (!wasPaused) this.graphRuntime.resume();\n }\n } else {\n this.graphRuntime.setInputs(nodeId, inputs);\n }\n }\n\n triggerExternal(\n nodeId: string,\n event: unknown,\n options?: { dry?: boolean }\n ): void {\n if (options?.dry) {\n const wasPaused = this.graphRuntime.isPaused();\n if (!wasPaused) this.graphRuntime.pause();\n try {\n this.graphRuntime.triggerExternal(nodeId, event);\n } finally {\n if (!wasPaused) this.graphRuntime.resume();\n }\n } else {\n this.graphRuntime.triggerExternal(nodeId, event);\n }\n }\n\n on<K extends EngineEventName>(\n event: K,\n handler: EngineEventListener<K>\n ): () => void {\n return this.graphRuntime.on(event, handler);\n }\n\n getOutput(nodeId: string, output: string): unknown {\n return this.graphRuntime.getOutput(nodeId, output);\n }\n\n whenIdle(): Promise<void> {\n return this.graphRuntime.whenIdle();\n }\n\n cancelNodeRuns(nodeIds: string[]): void {\n this.graphRuntime.cancelNodeRuns(nodeIds);\n }\n\n copyOutputs(\n fromNodeId: string,\n toNodeId: string,\n options?: { dry?: boolean }\n ): void {\n this.graphRuntime.copyOutputs(fromNodeId, toNodeId, options);\n }\n\n dispose(): void {\n // this.graphRuntime.dispose();\n }\n}\n","import type { RunMode } from \"@bian-womp/spark-protocol\";\nimport { AbstractEngine } from \"./AbstractEngine\";\nimport { GraphRuntime } from \"./GraphRuntime\";\n\n/**\n * Unified Engine implementation that handles both manual and auto run modes.\n * - Manual mode: Runtime is paused, nodes execute only when explicitly called via computeNode/runFromHere\n * - Auto mode: Runtime is resumed, nodes automatically execute when inputs change\n */\nexport class UnifiedEngine extends AbstractEngine {\n private runMode: RunMode = \"manual\";\n\n constructor(graphRuntime: GraphRuntime, runMode?: RunMode) {\n super(graphRuntime);\n this.setRunMode(runMode ?? \"manual\");\n }\n\n override launch(invalidate?: boolean, runMode?: RunMode): void {\n if (runMode) this.setRunMode(runMode);\n this.graphRuntime.launch(invalidate);\n }\n\n /**\n * Run only this node, no downstream propagation.\n * Works in both modes, but typically only used in manual mode.\n * @param nodeId - The node to run\n * @param options - Execution options\n * @param options.skipPropagateValues - If true, don't set inputs of linked nodes (default: false)\n */\n async computeNode(\n nodeId: string,\n options?: { skipPropagateValues?: boolean }\n ): Promise<void> {\n await this.graphRuntime.runFromHereContext(nodeId, {\n skipPropagateValues: options?.skipPropagateValues ?? false,\n propagate: false, // Don't schedule downstream nodes\n });\n }\n\n /**\n * Run this node and all dynamically reachable downstream nodes.\n * Works in both modes, but typically only used in manual mode.\n * Uses run-context system for dynamic graph updates.\n */\n async runFromHere(nodeId: string): Promise<void> {\n await this.graphRuntime.runFromHereContext(nodeId);\n }\n\n getRunMode(): RunMode {\n return this.runMode;\n }\n\n setRunMode(runMode: RunMode): void {\n if (this.runMode === runMode) return;\n\n this.runMode = runMode;\n\n // Update runtime pause/resume state based on new mode\n if (runMode === \"manual\") {\n this.graphRuntime.pause();\n } else {\n this.graphRuntime.resume();\n }\n }\n}\n","import type { NodeCategoryDescriptor } from \"../core/categories\";\nimport type { ExecutionContext } from \"../core/types\";\n\nexport type ComputeImpl = (\n inputs: Record<string, unknown>,\n ctx: ExecutionContext<any>\n) => void | Record<string, unknown> | Promise<void | Record<string, unknown>>;\n\nexport const ComputeCategory: NodeCategoryDescriptor<ComputeImpl, any> = {\n id: \"compute\",\n displayName: \"Compute\",\n createRuntime: ({ impl }) => ({\n async onInputsChanged(inputs, ctx) {\n const out = await impl(inputs, ctx);\n if (out && typeof out === \"object\") {\n for (const [h, v] of Object.entries(out)) ctx.emit(h, v);\n }\n },\n onExternalEvent(event, state) {\n try {\n const e: any = event;\n // Preferred: call a function on state keyed by e.action\n const action = e?.action;\n if (action && typeof state?.[action] === \"function\") {\n const fn = state[action] as (...args: any[]) => any;\n // Normalize args: prefer explicit args array, else wrap single value;\n let args: any[] = [];\n if (Array.isArray(e?.args)) args = [...e.args];\n else if (e?.args !== undefined) args = [e.args];\n else if (e?.params !== undefined) args = [e.params];\n void fn(...args);\n return;\n }\n console.warn(\"Unsupported external event\", JSON.stringify(event));\n } catch {\n console.warn(\"Error handling external event\", JSON.stringify(event));\n }\n },\n }),\n policy: { asyncConcurrency: \"switch\" },\n};\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport type { NodeCategoryDescriptor } from \"../core/categories\";\nimport { Registry } from \"../builder/Registry\";\nimport { GraphRuntime } from \"../runtime/GraphRuntime\";\n\nexport interface CompositeImpl {\n def: GraphDefinition;\n exposure: {\n inputs: Record<string, { nodeId: string; handle: string }>;\n outputs: Record<string, { nodeId: string; handle: string }>;\n };\n}\n\nexport const CompositeCategory = (\n registry: Registry\n): NodeCategoryDescriptor<\n CompositeImpl,\n { inner?: GraphRuntime; unsub?: () => void }\n> => ({\n id: \"composite\",\n displayName: \"Composite\",\n validateImpl: (impl) => {\n if (!impl || !impl.def) throw new Error(\"Composite impl requires def\");\n },\n createRuntime: ({ impl }) => {\n let inner: GraphRuntime | undefined;\n let unsub: (() => void) | undefined;\n return {\n onActivated: () => {\n inner = GraphRuntime.create(impl.def, registry);\n // Wire inner outputs to outer emits\n unsub = inner.on(\"value\", (e) => {\n for (const [outHandle, map] of Object.entries(\n impl.exposure.outputs\n )) {\n if (e.nodeId === map.nodeId && e.handle === map.handle) {\n // We cannot access outer ctx here; emit will occur on next input change cycle\n // Instead, we cache outputs and pull them during onInputsChanged\n }\n }\n });\n inner.launch();\n },\n onInputsChanged: (inputs, ctx) => {\n if (!inner) return;\n // map outer inputs => batch per inner node to avoid extra runs\n const grouped: Record<string, Record<string, unknown>> = {};\n for (const [inHandle, map] of Object.entries(impl.exposure.inputs)) {\n if (inHandle in inputs) {\n const nodeMap = (grouped[map.nodeId] = grouped[map.nodeId] || {});\n nodeMap[map.handle] = inputs[inHandle];\n }\n }\n for (const [nodeId, map] of Object.entries(grouped)) {\n inner.setInputs(nodeId, map);\n }\n // pull inner exposed outputs and emit\n for (const [outHandle, map] of Object.entries(impl.exposure.outputs)) {\n const v = inner.getOutput(map.nodeId, map.handle);\n if (v !== undefined) ctx.emit(outHandle, v);\n }\n },\n onDeactivated: () => {\n if (unsub) unsub();\n },\n dispose: () => {\n if (unsub) unsub();\n inner?.dispose();\n },\n };\n },\n});\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport { GraphBuilder } from \"../builder/GraphBuilder\";\nimport { Registry } from \"../builder/Registry\";\nimport type { ExecutionContext, NodeContext } from \"../core/types\";\nimport { ComputeCategory } from \"../plugins/compute\";\n\n// Helpers\nconst asArray = (v: any): number[] =>\n Array.isArray(v) ? (v as number[]) : [Number(v)];\n\nconst broadcast = (\n a: number[] | number,\n b: number[] | number\n): [number[], number[]] => {\n const aa = asArray(a);\n const bb = asArray(b);\n if (aa.length === bb.length) return [aa, bb];\n if (aa.length === 1) return [new Array(bb.length).fill(aa[0]), bb];\n if (bb.length === 1) return [aa, new Array(aa.length).fill(bb[0])];\n const len = Math.max(aa.length, bb.length);\n return [new Array(len).fill(aa[0] ?? 0), new Array(len).fill(bb[0] ?? 0)];\n};\n\nconst asBoolArray = (v: any): boolean[] =>\n Array.isArray(v) ? (v as any[]).map((x) => Boolean(x)) : [Boolean(v)];\n\nconst broadcastBool = (\n a: boolean[] | boolean,\n b: boolean[] | boolean\n): [boolean[], boolean[]] => {\n const aa = asBoolArray(a);\n const bb = asBoolArray(b);\n if (aa.length === bb.length) return [aa, bb];\n if (aa.length === 1) return [new Array(bb.length).fill(aa[0]), bb];\n if (bb.length === 1) return [aa, new Array(aa.length).fill(bb[0])];\n const len = Math.max(aa.length, bb.length);\n return [\n new Array(len).fill(aa[0] ?? false),\n new Array(len).fill(bb[0] ?? false),\n ];\n};\n\nconst clamp = (x: number, min: number, max: number) =>\n Math.min(max, Math.max(min, x));\nconst lerp = (a: number, b: number, t: number) => a + (b - a) * t;\nconst lcg = (seed: number) => {\n let s = seed >>> 0 || 1;\n return () => (s = (s * 1664525 + 1013904223) >>> 0) / 0xffffffff;\n};\n\n// JSON Pointer helpers (RFC 6901 subset)\nfunction jsonPointerGet(obj: any, pointer: string): any {\n if (!pointer || pointer === \"/\") return obj;\n if (!pointer.startsWith(\"/\")) return undefined;\n const parts = pointer\n .split(\"/\")\n .slice(1)\n .map((p) => p.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n let cur: any = obj;\n for (const key of parts) {\n if (cur === undefined || cur === null) return undefined;\n cur = cur[key];\n }\n return cur;\n}\n\nfunction jsonPointerSet(obj: any, pointer: string, value: any): any {\n if (!pointer || pointer === \"/\") return value;\n if (!pointer.startsWith(\"/\")) return obj;\n const parts = pointer\n .split(\"/\")\n .slice(1)\n .map((p) => p.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n const root = structuredClone(obj);\n let cur: any = root;\n for (let i = 0; i < parts.length; i++) {\n const key = parts[i];\n if (i === parts.length - 1) {\n if (Array.isArray(cur) && key === \"-\") cur.push(value);\n else cur[key] = value;\n } else {\n const next = cur[key];\n if (next === undefined || next === null) {\n // create container heuristically\n const nextKey = parts[i + 1];\n cur[key] =\n typeof nextKey === \"string\" && /^[0-9]+$/.test(nextKey) ? [] : {};\n }\n cur = cur[key];\n }\n }\n return root;\n}\n\nfunction jsonPointerRemove(obj: any, pointer: string): any {\n if (!pointer || pointer === \"/\") return undefined;\n if (!pointer.startsWith(\"/\")) return obj;\n const parts = pointer\n .split(\"/\")\n .slice(1)\n .map((p) => p.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n const root = structuredClone(obj);\n let cur: any = root;\n for (let i = 0; i < parts.length - 1; i++) {\n const key = parts[i];\n if (cur === undefined || cur === null) return root;\n cur = cur[key];\n }\n const last = parts[parts.length - 1];\n if (Array.isArray(cur)) {\n const idx = last === \"-\" ? cur.length - 1 : Number(last);\n if (Number.isFinite(idx)) cur.splice(idx as number, 1);\n } else if (cur && typeof cur === \"object\") {\n delete cur[last];\n }\n return root;\n}\n\nfunction deepMerge(a: any, b: any): any {\n if (Array.isArray(a) && Array.isArray(b)) return [...a, ...b];\n if (isPlainObject(a) && isPlainObject(b)) {\n const out: any = { ...a };\n for (const [k, v] of Object.entries(b)) {\n out[k] = k in out ? deepMerge(out[k], v) : v;\n }\n return out;\n }\n return b;\n}\n\n// JSON helpers\nconst isPlainObject = (v: any): v is Record<string, any> => {\n if (v === null || typeof v !== \"object\") return false;\n const proto = Object.getPrototypeOf(v);\n return proto === Object.prototype || proto === null;\n};\n\nconst isJson = (v: any): boolean => {\n if (v === null) return true;\n const t = typeof v;\n if (t === \"string\" || t === \"number\" || t === \"boolean\") return true;\n if (Array.isArray(v)) return v.every(isJson);\n if (isPlainObject(v)) return Object.values(v).every(isJson);\n return false;\n};\n\n// Export operation constants for use in examples and tests\nexport const BaseMathOperation = {\n Add: 0,\n Subtract: 1,\n Multiply: 2,\n Divide: 3,\n Min: 4,\n Max: 5,\n Modulo: 6,\n Power: 7,\n Round: 8,\n Floor: 9,\n Ceil: 10,\n Abs: 11,\n Sum: 12,\n Avg: 13,\n MinAll: 14,\n MaxAll: 15,\n Sin: 16,\n Cos: 17,\n Tan: 18,\n Asin: 19,\n Acos: 20,\n Atan: 21,\n Sqrt: 22,\n Exp: 23,\n Log: 24,\n} as const;\n\nexport const BaseCompareOperation = {\n LessThan: 0,\n LessThanOrEqual: 1,\n GreaterThan: 2,\n GreaterThanOrEqual: 3,\n Equal: 4,\n NotEqual: 5,\n} as const;\n\nexport const BaseLogicOperation = {\n Not: 0,\n And: 1,\n Or: 2,\n Xor: 3,\n} as const;\n\nexport function setupBasicGraphRegistry(id?: string): Registry {\n const registry = new Registry(id);\n registry.categories.register(ComputeCategory);\n\n registry.registerType(\n {\n id: \"base.float\",\n validate: (v) => typeof v === \"number\" && !Number.isNaN(v),\n bakeTarget: { nodeTypeId: \"base.input.number\", inputHandle: \"Value\" },\n },\n { withArray: true, arrayPickFirstDefined: true }\n );\n\n registry.registerType(\n {\n id: \"base.bool\",\n validate: (v) => typeof v === \"boolean\",\n bakeTarget: { nodeTypeId: \"base.input.bool\", inputHandle: \"Value\" },\n },\n { withArray: true, arrayPickFirstDefined: true }\n );\n\n registry.registerType(\n {\n id: \"base.string\",\n validate: (v) => typeof v === \"string\",\n bakeTarget: { nodeTypeId: \"base.input.string\", inputHandle: \"Value\" },\n },\n { withArray: true, arrayPickFirstDefined: true }\n );\n\n // Generic object value (JSON-compatible; object/array/primitive/null)\n registry.registerType(\n {\n id: \"base.object\",\n validate: (v) => isJson(v),\n bakeTarget: { nodeTypeId: \"base.input.object\", inputHandle: \"Value\" },\n },\n { withArray: false }\n );\n\n registry.registerType(\n {\n id: \"base.vec3\",\n validate: (v) =>\n Array.isArray(v) &&\n v.length === 3 &&\n v.every((x) => typeof x === \"number\"),\n bakeTarget: { nodeTypeId: \"base.input.vec3\", inputHandle: \"Value\" },\n },\n { withArray: true, arrayPickFirstDefined: true }\n );\n\n // float -> vec3 : map x to [x,0,0]\n registry.registerCoercion(\"base.float\", \"base.vec3\", (v) => {\n return [Number(v) || 0, 0, 0] as [number, number, number];\n });\n\n registry.registerCoercion(\"base.vec3\", \"base.float\", (value) => {\n const v = value as [number, number, number];\n return Math.hypot(Number(v[0] ?? 0), Number(v[1] ?? 0), Number(v[2] ?? 0));\n });\n\n registry.registerCoercion(\"base.bool\", \"base.float\", (v) => (v ? 1 : 0));\n\n registry.registerCoercion(\"base.float\", \"base.bool\", (v) => !!v);\n\n registry.registerCoercion(\"base.float\", \"base.string\", (v) => String(v));\n\n registry.registerCoercion(\"base.string\", \"base.float\", (v) => Number(v));\n\n // Object <-> String\n registry.registerCoercion(\"base.string\", \"base.object\", (v) => {\n return v as string;\n });\n\n registry.registerCoercion(\"base.object\", \"base.string\", (v) => {\n if (typeof v === \"string\") return v;\n return undefined;\n });\n\n registry.registerCoercion(\"base.bool\", \"base.object\", (v) => {\n return v as boolean;\n });\n\n registry.registerCoercion(\"base.object\", \"base.bool\", (v) => {\n if (typeof v === \"boolean\") return v;\n return undefined;\n });\n\n registry.registerCoercion(\"base.float\", \"base.object\", (v) => {\n return v as number;\n });\n\n registry.registerCoercion(\"base.object\", \"base.float\", (v) => {\n if (typeof v === \"number\") return v;\n return undefined;\n });\n\n registry.registerCoercion(\"base.vec3\", \"base.object\", (v) => {\n return v as [number, number, number];\n });\n\n registry.registerCoercion(\"base.object\", \"base.vec3\", (v) => {\n try {\n if (\n Array.isArray(v) &&\n v.length === 3 &&\n v.every((x) => typeof x === \"number\")\n ) {\n return v as [number, number, number];\n }\n return undefined;\n } catch {\n return undefined;\n }\n });\n\n // Enums: Math Operation\n registry.registerEnum({\n id: \"enum:base.math.operation\",\n options: Object.entries(BaseMathOperation).map(([label, value]) => ({\n value,\n label,\n })),\n });\n\n // Enums: Compare Operation\n registry.registerEnum({\n id: \"enum:base.compare.operation\",\n options: Object.entries(BaseCompareOperation).map(([label, value]) => ({\n value,\n label,\n })),\n });\n\n // Enums: Logic Operation\n registry.registerEnum({\n id: \"enum:base.logic.operation\",\n options: Object.entries(BaseLogicOperation).map(([label, value]) => ({\n value,\n label,\n })),\n });\n\n // Number\n registry.registerNode({\n id: \"base.input.number\",\n categoryId: \"compute\",\n inputs: { Value: \"base.float\" },\n outputs: { Result: \"base.float\" },\n impl: (ins: { Value: number }) => ({ Result: Number(ins.Value) }),\n });\n\n registry.registerNode({\n id: \"base.input.string\",\n categoryId: \"compute\",\n inputs: { Value: \"base.string\" },\n outputs: { Result: \"base.string\" },\n impl: (ins: { Value: string }) => ({ Result: String(ins.Value) }),\n });\n\n registry.registerNode({\n id: \"base.input.bool\",\n categoryId: \"compute\",\n inputs: { Value: \"base.bool\" },\n outputs: { Result: \"base.bool\" },\n impl: (ins: { Value: boolean }) => ({ Result: Boolean(ins.Value) }),\n });\n\n registry.registerNode({\n id: \"base.input.object\",\n categoryId: \"compute\",\n inputs: { Value: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Value: any }) => ({ Result: ins.Value }),\n });\n\n registry.registerNode({\n id: \"base.input.vec3\",\n categoryId: \"compute\",\n inputs: { Value: \"base.vec3\" },\n outputs: { Result: \"base.vec3\" },\n impl: (ins: { Value: [number, number, number] }) => ({ Result: ins.Value }),\n });\n\n // JSON parser node: base.stringToObject\n registry.registerNode({\n id: \"base.string.toObject\",\n categoryId: \"compute\",\n inputs: { Text: \"base.string\" },\n outputs: { Object: \"base.object\" },\n impl: (ins: { Text?: string }) => {\n const t = ins.Text ?? \"\";\n try {\n const obj = JSON.parse(t);\n return { Object: obj };\n } catch {\n return { Object: undefined };\n }\n },\n });\n\n registry.registerNode({\n id: \"base.object.toString\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\" },\n outputs: { Text: \"base.string\" },\n impl: (ins: { Object?: any }) => {\n return { Text: JSON.stringify(ins.Object) };\n },\n });\n\n // Clamp\n registry.registerNode({\n id: \"base.clamp\",\n categoryId: \"compute\",\n inputs: { Value: \"base.float[]\", Min: \"base.float\", Max: \"base.float\" },\n outputs: { Value: \"base.float[]\" },\n impl: (ins: { Value: number[]; Min: number; Max: number }) => {\n const vals = asArray(ins.Value);\n const min = Number(ins.Min ?? 0);\n const max = Number(ins.Max ?? 1);\n return { Value: vals.map((v) => clamp(Number(v), min, max)) };\n },\n });\n\n // Interpolate (lerp)\n registry.registerNode({\n id: \"base.interpolate\",\n categoryId: \"compute\",\n inputs: {\n ValueA: \"base.float[]\",\n ValueB: \"base.float[]\",\n Factor: \"base.float\",\n },\n outputs: { Value: \"base.float[]\" },\n inputDefaults: {\n Factor: 0.5,\n },\n impl: (ins: { ValueA: number[]; ValueB: number[]; Factor: number }) => {\n const [a, b] = broadcast(ins.ValueA, ins.ValueB);\n const t = Number(ins.Factor ?? 0);\n const len = Math.max(a.length, b.length);\n const out = new Array(len)\n .fill(0)\n .map((_, i) => lerp(Number(a[i] ?? 0), Number(b[i] ?? 0), t));\n return { Value: out };\n },\n });\n\n // Map Range (linear)\n registry.registerNode({\n id: \"base.mapRange\",\n categoryId: \"compute\",\n inputs: {\n Mode: \"base.string\",\n Clamp: \"base.bool\",\n Value: \"base.float[]\",\n FromMin: \"base.float\",\n FromMax: \"base.float\",\n ToMin: \"base.float\",\n ToMax: \"base.float\",\n },\n outputs: { Value: \"base.float[]\" },\n impl: (ins: {\n Value: number[];\n FromMin: number;\n FromMax: number;\n ToMin: number;\n ToMax: number;\n Clamp: boolean;\n }) => {\n const vals = asArray(ins.Value);\n const fromMin = Number(ins.FromMin ?? 0);\n const fromMax = Number(ins.FromMax ?? 1);\n const toMin = Number(ins.ToMin ?? 0);\n const toMax = Number(ins.ToMax ?? 1);\n const doClamp = Boolean(ins.Clamp);\n const out = vals.map((v) => {\n const t = (Number(v) - fromMin) / (fromMax - fromMin || 1);\n const r = toMin + t * (toMax - toMin);\n return doClamp\n ? clamp(r, Math.min(toMin, toMax), Math.max(toMin, toMax))\n : r;\n });\n return { Value: out };\n },\n });\n\n // Math (subset) - scalar version for simple examples\n registry.registerNode({\n id: \"base.math\",\n categoryId: \"compute\",\n inputs: {\n Operation: \"enum:base.math.operation\",\n A: \"base.float[]\",\n B: \"base.float[]\",\n },\n outputs: { Result: \"base.float[]\" },\n // Registry-level defaults: Add by default, A=[1], B=[1]\n inputDefaults: { Operation: 0, A: [1], B: [1] },\n impl: (ins: { Operation: number; A: number[]; B: number[] }) => {\n const a = asArray(ins.A ?? []);\n const b = asArray(ins.B ?? []);\n const op = Number(ins.Operation ?? BaseMathOperation.Add);\n\n const unaryByOp: Record<number, (x: number) => number> = {\n [BaseMathOperation.Round]: (x) => Math.round(x),\n [BaseMathOperation.Floor]: (x) => Math.floor(x),\n [BaseMathOperation.Ceil]: (x) => Math.ceil(x),\n [BaseMathOperation.Abs]: (x) => Math.abs(x),\n [BaseMathOperation.Sin]: (x) => Math.sin(x),\n [BaseMathOperation.Cos]: (x) => Math.cos(x),\n [BaseMathOperation.Tan]: (x) => Math.tan(x),\n [BaseMathOperation.Asin]: (x) => Math.asin(x),\n [BaseMathOperation.Acos]: (x) => Math.acos(x),\n [BaseMathOperation.Atan]: (x) => Math.atan(x),\n [BaseMathOperation.Sqrt]: (x) => Math.sqrt(x),\n [BaseMathOperation.Exp]: (x) => Math.exp(x),\n [BaseMathOperation.Log]: (x) => Math.log(x),\n };\n if (unaryByOp[op])\n return { Result: a.map((x) => unaryByOp[op](Number(x))) };\n\n const aggregateByOp: Record<number, (arr: number[]) => number> = {\n [BaseMathOperation.Sum]: (arr) =>\n arr.reduce((s, x) => s + Number(x || 0), 0),\n [BaseMathOperation.Avg]: (arr) => {\n const sum = arr.reduce((s, x) => s + Number(x || 0), 0);\n return arr.length ? sum / arr.length : 0;\n },\n [BaseMathOperation.MinAll]: (arr) =>\n arr.length ? Math.min(...arr.map((x) => Number(x))) : 0,\n [BaseMathOperation.MaxAll]: (arr) =>\n arr.length ? Math.max(...arr.map((x) => Number(x))) : 0,\n };\n if (aggregateByOp[op] !== undefined)\n return { Result: [aggregateByOp[op](a)] };\n\n const binaryByOp: Record<number, (x: number, y: number) => number> = {\n [BaseMathOperation.Add]: (x, y) => x + y,\n [BaseMathOperation.Subtract]: (x, y) => x - y,\n [BaseMathOperation.Multiply]: (x, y) => x * y,\n [BaseMathOperation.Divide]: (x, y) => x / (y || 1),\n [BaseMathOperation.Min]: (x, y) => Math.min(x, y),\n [BaseMathOperation.Max]: (x, y) => Math.max(x, y),\n [BaseMathOperation.Modulo]: (x, y) => (y ? x % y : 0),\n [BaseMathOperation.Power]: (x, y) => Math.pow(x, y),\n };\n const fn = binaryByOp[op] || binaryByOp[BaseMathOperation.Add];\n const len = Math.max(a.length, b.length);\n const out = new Array(len).fill(0).map((_, i) => {\n const ax = a.length === 1 && len > 1 ? a[0] : a[i] ?? 0;\n const bx = b.length === 1 && len > 1 ? b[0] : b[i] ?? 0;\n return fn(Number(ax), Number(bx));\n });\n return { Result: out };\n },\n });\n\n // Compare\n registry.registerNode({\n id: \"base.compare\",\n categoryId: \"compute\",\n inputs: {\n Operation: \"enum:base.compare.operation\",\n A: \"base.float[]\",\n B: \"base.float[]\",\n },\n outputs: { Result: \"base.bool[]\" },\n impl: (ins: { Operation: number; A: number[]; B: number[] }) => {\n const [a, b] = broadcast(ins.A, ins.B);\n const op = Number(ins.Operation ?? BaseCompareOperation.Equal);\n const compareByOp: Record<number, (x: number, y: number) => boolean> = {\n [BaseCompareOperation.LessThan]: (x, y) => x < y,\n [BaseCompareOperation.LessThanOrEqual]: (x, y) => x <= y,\n [BaseCompareOperation.GreaterThan]: (x, y) => x > y,\n [BaseCompareOperation.GreaterThanOrEqual]: (x, y) => x >= y,\n [BaseCompareOperation.Equal]: (x, y) => x === y,\n [BaseCompareOperation.NotEqual]: (x, y) => x !== y,\n };\n const fn = compareByOp[op] || compareByOp[BaseCompareOperation.Equal];\n return { Result: a.map((x, i) => fn(Number(x), Number(b[i] ?? 0))) };\n },\n });\n // Logic\n registry.registerNode({\n id: \"base.logic\",\n categoryId: \"compute\",\n inputs: {\n Operation: \"enum:base.logic.operation\",\n A: \"base.bool[]\",\n B: \"base.bool[]\",\n },\n outputs: { Result: \"base.bool[]\" },\n inputDefaults: { Operation: BaseLogicOperation.Not },\n impl: (ins: { Operation?: number; A?: boolean[]; B?: boolean[] }) => {\n const op = Number(ins.Operation ?? BaseLogicOperation.Not);\n if (op === BaseLogicOperation.Not) {\n const a = asBoolArray(ins.A ?? []);\n return { Result: a.map((x) => !x) };\n }\n const [a, b] = broadcastBool(ins.A ?? [], ins.B ?? []);\n const logicByOp: Record<number, (x: boolean, y: boolean) => boolean> = {\n [BaseLogicOperation.And]: (x, y) => x && y,\n [BaseLogicOperation.Or]: (x, y) => x || y,\n [BaseLogicOperation.Xor]: (x, y) => Boolean(x ? !y : y),\n };\n const fn = logicByOp[op] || logicByOp[BaseLogicOperation.And];\n return {\n Result: a.map((x, i) => fn(Boolean(x), Boolean(b[i] ?? false))),\n };\n },\n });\n\n // Strings\n registry.registerNode({\n id: \"base.string.length\",\n categoryId: \"compute\",\n inputs: { Text: \"base.string\" },\n outputs: { Length: \"base.float\" },\n impl: (ins: { Text?: string }) => ({\n Length: String(ins.Text || \"\").length,\n }),\n });\n\n registry.registerNode({\n id: \"base.string.op\",\n categoryId: \"compute\",\n inputs: { Op: \"base.string\", Text: \"base.string\" },\n outputs: { Text: \"base.string\" },\n impl: (ins: { Op?: string; Text?: string }) => {\n const op = String(ins.Op || \"trim\").toLowerCase();\n const t = String(ins.Text || \"\");\n if (op === \"lower\") return { Text: t.toLowerCase() };\n if (op === \"upper\") return { Text: t.toUpperCase() };\n return { Text: t.trim() };\n },\n });\n\n registry.registerNode({\n id: \"base.string.split\",\n categoryId: \"compute\",\n inputs: { Text: \"base.string\", Sep: \"base.string\" },\n outputs: { Parts: \"base.string[]\" },\n impl: (ins: { Text?: string; Sep?: string }) => {\n const t = String(ins.Text || \"\");\n const sep = String(ins.Sep || \",\");\n return { Parts: t.split(sep) };\n },\n });\n\n registry.registerNode({\n id: \"base.string.join\",\n categoryId: \"compute\",\n inputs: { Parts: \"base.string[]\", Sep: \"base.string\" },\n outputs: { Text: \"base.string\" },\n impl: (ins: { Parts?: string[]; Sep?: string }) => {\n const parts = Array.isArray(ins.Parts) ? ins.Parts.map(String) : [];\n const sep = String(ins.Sep || \"\");\n return { Text: parts.join(sep) };\n },\n });\n\n registry.registerNode({\n id: \"base.string.replace\",\n categoryId: \"compute\",\n inputs: {\n Text: \"base.string\",\n Search: \"base.string\",\n Replace: \"base.string\",\n },\n outputs: { Text: \"base.string\" },\n impl: (ins: { Text?: string; Search?: string; Replace?: string }) => {\n const t = String(ins.Text || \"\");\n const s = String(ins.Search || \"\");\n const r = String(ins.Replace || \"\");\n return { Text: t.split(s).join(r) };\n },\n });\n\n // Arrays (carried as base.object)\n registry.registerNode({\n id: \"base.array.length\",\n categoryId: \"compute\",\n inputs: { Items: \"base.object\" },\n outputs: { Length: \"base.float\" },\n impl: (ins: { Items?: any }) => ({\n Length: Array.isArray(ins.Items) ? ins.Items.length : 0,\n }),\n });\n\n registry.registerNode({\n id: \"base.array.slice\",\n categoryId: \"compute\",\n inputs: { Items: \"base.object\", Start: \"base.float\", End: \"base.float\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Items?: any; Start?: number; End?: number }) => {\n const arr = Array.isArray(ins.Items) ? ins.Items : [];\n const s = Math.trunc(Number(ins.Start ?? 0));\n const e = Number.isFinite(Number(ins.End))\n ? Math.trunc(Number(ins.End))\n : undefined;\n return { Result: arr.slice(s, e as any) };\n },\n });\n\n // Compose array from dynamic item inputs\n registry.registerNode({\n id: \"base.array.compose\",\n categoryId: \"compute\",\n inputs: { Length: \"base.float\" },\n outputs: { Items: \"base.object\" },\n resolveHandles: ({ inputs }) => {\n const maxLen = 64;\n const raw = inputs?.Length ?? 0;\n const n = Math.max(0, Math.min(maxLen, Math.trunc(Number(raw ?? 0))));\n if (!Number.isFinite(n)) return { inputs: {} };\n const dyn: Record<string, { typeId: string }> = {};\n for (let i = 0; i < n; i++) dyn[`Item${i}`] = { typeId: \"base.object\" };\n return { inputs: dyn };\n },\n inputDefaults: { Length: 0 },\n impl: (ins: Record<string, unknown>) => {\n const length = Math.max(0, Math.trunc(Number(ins.Length ?? 0)));\n if (!Number.isFinite(length)) return { Items: [] };\n return { Items: Array.from({ length }, (_, i) => ins[`Item${i}`]) };\n },\n });\n\n // Decompose array into dynamic item outputs\n registry.registerNode({\n id: \"base.array.decompose\",\n categoryId: \"compute\",\n inputs: { Items: \"base.object\" },\n outputs: {},\n resolveHandles: ({ inputs }) => {\n const maxLen = 64;\n const arr = Array.isArray(inputs?.Items) ? (inputs?.Items as any[]) : [];\n const n = Math.max(0, Math.min(maxLen, arr.length));\n const dyn: Record<string, string> = {};\n for (let i = 0; i < n; i++) dyn[`Item${i}`] = \"base.object\";\n return { outputs: dyn };\n },\n impl: (ins: { Items?: any[] }) => {\n const arr = Array.isArray(ins.Items) ? ins.Items : [];\n const out: Record<string, unknown> = {};\n const n = Math.max(0, Math.min(64, arr.length));\n for (let i = 0; i < n; i++) out[`Item${i}`] = arr[i];\n return out;\n },\n });\n\n // Select\n registry.registerNode({\n id: \"base.select\",\n categoryId: \"compute\",\n inputs: { Cond: \"base.bool\", Then: \"base.object\", Else: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Cond?: boolean; Then?: any; Else?: any }) => ({\n Result: ins.Cond ? ins.Then : ins.Else,\n }),\n });\n\n // Combine XYZ\n registry.registerNode({\n id: \"base.compareXYZ\",\n categoryId: \"compute\",\n inputs: { X: \"base.float[]\", Y: \"base.float[]\", Z: \"base.float[]\" },\n outputs: { XYZ: \"base.vec3[]\" },\n impl: (ins: { X: number[]; Y: number[]; Z: number[] }) => {\n const [x, y] = broadcast(ins.X, ins.Y);\n const [xx, z] = broadcast(x, ins.Z);\n const len = Math.max(xx.length, z.length);\n const out = new Array(len)\n .fill(0)\n .map(\n (_, i) =>\n [Number(xx[i] ?? 0), Number(y[i] ?? 0), Number(z[i] ?? 0)] as [\n number,\n number,\n number\n ]\n );\n return { XYZ: out };\n },\n });\n\n // Separate XYZ\n registry.registerNode({\n id: \"base.separateXYZ\",\n categoryId: \"compute\",\n inputs: { XYZ: \"base.vec3[]\" },\n outputs: { X: \"base.float[]\", Y: \"base.float[]\", Z: \"base.float[]\" },\n impl: (ins: { XYZ: Array<[number, number, number]> }) => {\n const arr = ins.XYZ ?? [];\n const X = arr.map((v) => Number(v?.[0] ?? 0));\n const Y = arr.map((v) => Number(v?.[1] ?? 0));\n const Z = arr.map((v) => Number(v?.[2] ?? 0));\n return { X, Y, Z };\n },\n });\n\n // Indices\n registry.registerNode({\n id: \"base.indices\",\n categoryId: \"compute\",\n inputs: { Domain: \"base.float\" },\n outputs: { Indices: \"base.float[]\" },\n impl: (ins: { Domain: number }) => {\n const n = Math.trunc(ins.Domain);\n return { Indices: Array.from({ length: n }, (_, i) => i) };\n },\n });\n\n // Random Numbers\n registry.registerNode({\n id: \"base.randomNumbers\",\n categoryId: \"compute\",\n inputs: {\n Domain: \"base.float\",\n Min: \"base.float\",\n Max: \"base.float\",\n Seed: \"base.float\",\n },\n outputs: { Values: \"base.float[]\" },\n impl: (ins: { Domain: number; Min: number; Max: number; Seed: number }) => {\n const len = Math.trunc(ins.Domain);\n const min = Number(ins.Min ?? 0);\n const max = Number(ins.Max ?? 1);\n const rng = lcg(Number(ins.Seed ?? 1));\n const out = Array.from({ length: len }, () => min + rng() * (max - min));\n return { Values: out };\n },\n });\n\n // Random Vectors\n registry.registerNode({\n id: \"base.randomXYZs\",\n categoryId: \"compute\",\n inputs: {\n Domain: \"base.float\",\n Min: \"base.vec3\",\n Max: \"base.vec3\",\n Seed: \"base.float\",\n },\n outputs: { Values: \"base.vec3[]\" },\n // Registry-level defaults for convenience\n inputDefaults: { Domain: 10, Min: [0, 0, 0], Max: [1, 1, 1], Seed: 1 },\n impl: (ins: {\n Domain: number;\n Min: [number, number, number];\n Max: [number, number, number];\n Seed: number;\n }) => {\n const len = Math.trunc(ins.Domain);\n const min = ins.Min ?? [0, 0, 0];\n const max = ins.Max ?? [1, 1, 1];\n const rng = lcg(Number(ins.Seed ?? 1));\n const out = Array.from(\n { length: len },\n () =>\n [\n min[0] + rng() * (max[0] - min[0]),\n min[1] + rng() * (max[1] - min[1]),\n min[2] + rng() * (max[2] - min[2]),\n ] as [number, number, number]\n );\n return { Values: out };\n },\n });\n\n // Timer\n registry.registerNode({\n id: \"base.timer\",\n categoryId: \"compute\",\n inputs: {\n Enabled: \"base.bool\",\n IntervalMs: \"base.float\",\n Immediate: \"base.bool\",\n },\n outputs: { Now: \"base.float\", Count: \"base.float\" },\n inputDefaults: { Enabled: true, IntervalMs: 1000, Immediate: true },\n impl: (\n ins: { Enabled?: boolean; IntervalMs?: number; Immediate?: boolean },\n ctx: ExecutionContext<{ timerId?: NodeJS.Timeout }>\n ) => {\n const enabled = Boolean(ins.Enabled);\n const intervalMs = Math.max(\n 1,\n Math.trunc(Number(ins.IntervalMs ?? 1000))\n );\n const immediate = Boolean(ins.Immediate);\n\n const stop = () => {\n const id = ctx.state.timerId;\n if (id !== undefined) {\n clearInterval(id);\n ctx.setState({ timerId: undefined });\n }\n };\n\n if (!enabled) {\n stop();\n return;\n }\n\n // restart timer with new settings\n stop();\n let count = 0;\n if (immediate) {\n ctx.emit(\"Now\", Date.now());\n ctx.emit(\"Count\", count);\n count += 1;\n }\n const id = setInterval(() => {\n ctx.emit(\"Now\", Date.now());\n ctx.emit(\"Count\", count);\n count += 1;\n }, intervalMs);\n ctx.setState({ timerId: id });\n },\n lifecycle: {\n dispose: (ctx: NodeContext<{ timerId?: NodeJS.Timeout }>) => {\n const id = ctx.state.timerId;\n if (id !== undefined) {\n clearInterval(id);\n ctx.setState({ timerId: undefined });\n }\n },\n },\n });\n\n // ------------------------- JSON/object utilities -------------------------\n registry.registerNode({\n id: \"base.object.get\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\", Pointers: \"base.string[]\" },\n outputs: { Values: \"base.object\" },\n impl: (ins: { Object?: any; Pointers?: string[] }) => {\n const obj = ins.Object;\n const pointers = (ins.Pointers || []).map(String);\n const out: Record<string, any> = {};\n for (const p of pointers) out[p] = jsonPointerGet(obj, p);\n return { Values: out };\n },\n });\n\n registry.registerNode({\n id: \"base.object.set\",\n categoryId: \"compute\",\n inputs: {\n Object: \"base.object\",\n Pointers: \"base.string[]\",\n NewValues: \"base.object\",\n },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Object?: any; Pointers?: string[]; NewValues?: any }) => {\n const pointers = (ins.Pointers || []).map(String);\n const values = (ins.NewValues || []).map(String);\n let cur = structuredClone(ins.Object);\n for (let i = 0; i < pointers.length; i++) {\n const p = pointers[i];\n const raw = values[i];\n let val: any = raw;\n if (typeof raw === \"string\") {\n try {\n val = JSON.parse(raw);\n } catch {\n /* keep as string */\n }\n }\n cur = jsonPointerSet(cur, p, val);\n }\n return { Result: cur };\n },\n });\n\n registry.registerNode({\n id: \"base.object.remove\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\", Pointers: \"base.string[]\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Object?: any; Pointers?: string[] }) => {\n const pointers = (ins.Pointers || []).map(String);\n let cur = structuredClone(ins.Object);\n for (const p of pointers) cur = jsonPointerRemove(cur, p);\n return { Result: cur };\n },\n });\n\n registry.registerNode({\n id: \"base.object.merge\",\n categoryId: \"compute\",\n inputs: { A: \"base.object\", B: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { A?: any; B?: any }) => ({\n Result: deepMerge(ins.A, ins.B),\n }),\n });\n\n registry.registerNode({\n id: \"base.object.keys\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\" },\n outputs: { Keys: \"base.string[]\" },\n impl: (ins: { Object?: any }) => {\n const obj = ins.Object;\n const keys = isPlainObject(obj)\n ? Object.keys(obj)\n : Array.isArray(obj)\n ? Object.keys(obj)\n : [];\n return { Keys: keys };\n },\n });\n\n registry.registerNode({\n id: \"base.object.values\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\" },\n outputs: { Values: \"base.object\" },\n impl: (ins: { Object?: any }) => {\n const obj = ins.Object;\n const vals = isPlainObject(obj)\n ? Object.values(obj)\n : Array.isArray(obj)\n ? Object.values(obj)\n : [];\n return { Values: vals };\n },\n });\n\n registry.registerNode({\n id: \"base.object.patch\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\", Ops: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Object?: any; Ops?: any }) => {\n const root = structuredClone(ins.Object);\n const opsRaw = ins.Ops;\n const ops: any[] = Array.isArray(opsRaw)\n ? opsRaw\n : opsRaw\n ? [opsRaw]\n : [];\n let cur = root;\n for (const op of ops) {\n if (!op || typeof op !== \"object\") continue;\n const kind = String(op.op || \"\");\n const path = String(op.path || \"\");\n if (kind === \"add\" || kind === \"replace\") {\n cur = jsonPointerSet(cur, path, op.value);\n } else if (kind === \"remove\") {\n cur = jsonPointerRemove(cur, path);\n } else if (kind === \"test\") {\n const got = jsonPointerGet(cur, path);\n const expected = op.value;\n const ok = JSON.stringify(got) === JSON.stringify(expected);\n if (!ok) throw new Error(`objectPatch test failed at ${path}`);\n }\n }\n return { Result: cur };\n },\n });\n\n registry.registerNode({\n id: \"base.array.concat\",\n categoryId: \"compute\",\n inputs: { A: \"base.object\", B: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { A?: any; B?: any }) => {\n const a = Array.isArray(ins.A) ? ins.A : [];\n const b = Array.isArray(ins.B) ? ins.B : [];\n return { Result: [...a, ...b] };\n },\n });\n\n registry.registerNode({\n id: \"base.array.flatten\",\n categoryId: \"compute\",\n inputs: { Objects: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Objects?: any }) => {\n const arr = Array.isArray(ins.Objects) ? ins.Objects : [];\n const out: any[] = [];\n for (const v of arr) {\n if (Array.isArray(v)) out.push(...v);\n else out.push(v);\n }\n return { Result: out };\n },\n });\n\n registry.registerNode({\n id: \"base.array.sortBy\",\n categoryId: \"compute\",\n inputs: { Objects: \"base.object\", Pointers: \"base.string[]\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Objects?: any; Pointers?: string[] }) => {\n const arr = Array.isArray(ins.Objects) ? ins.Objects : [];\n const pointers = (ins.Pointers || []).map(String);\n const out = [...arr].sort((a, b) => {\n for (const p of pointers) {\n const av = jsonPointerGet(a, p);\n const bv = jsonPointerGet(b, p);\n if (av === bv) continue;\n if (av === undefined) return 1;\n if (bv === undefined) return -1;\n if (av < bv) return -1;\n if (av > bv) return 1;\n }\n return 0;\n });\n return { Result: out };\n },\n });\n return registry;\n}\n\nexport function registerDelayNode(registry: Registry) {\n registry.registerNode({\n id: \"async.delay\",\n categoryId: \"compute\",\n inputs: { Value: \"base.float\", DelayMs: \"base.float\" },\n outputs: { Output: \"base.float\" },\n impl: async (\n ins: { Value: number; DelayMs?: number },\n ctx: ExecutionContext<any>\n ) => {\n const ms = Number(ins.DelayMs ?? 200);\n const valueRaw = ins.Value;\n if (\n valueRaw === undefined ||\n valueRaw === null ||\n Number.isNaN(Number(valueRaw))\n ) {\n return; // wait until x is present to avoid NaN emissions\n }\n await new Promise<void>((resolve, reject) => {\n const id = setTimeout(resolve, ms);\n const onAbort = () => {\n clearTimeout(id);\n reject(new DOMException(\"Aborted\", \"AbortError\"));\n };\n if (ctx.abortSignal.aborted) return onAbort();\n ctx.abortSignal.addEventListener(\"abort\", onAbort, { once: true });\n });\n return { Output: Number(valueRaw) };\n },\n });\n}\n\nfunction sleepWithAbort(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const id = setTimeout(() => {\n cleanup();\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(id);\n cleanup();\n reject(new DOMException(\"Aborted\", \"AbortError\"));\n };\n const cleanup = () => {\n signal.removeEventListener(\"abort\", onAbort);\n };\n if (signal.aborted) return onAbort();\n signal.addEventListener(\"abort\", onAbort);\n });\n}\n\nexport function registerProgressNodes(registry: Registry) {\n registry.registerNode({\n id: \"async.progress\",\n categoryId: \"compute\",\n inputs: {\n Steps: \"base.float\",\n DelayMs: \"base.float\",\n ShouldError: \"base.bool\",\n },\n outputs: { Done: \"base.string\" },\n impl: async (\n ins: { Steps?: number; DelayMs?: number; ShouldError?: boolean },\n ctx: ExecutionContext<any>\n ) => {\n const steps = Math.max(1, Math.trunc(Number(ins.Steps ?? 10)));\n const delayMs = Math.max(0, Math.trunc(Number(ins.DelayMs ?? 50)));\n const shouldError = Boolean(ins.ShouldError);\n for (let i = 0; i < steps; i++) {\n ctx.reportProgress?.(i / steps);\n await sleepWithAbort(delayMs, ctx.abortSignal);\n if (shouldError && i >= Math.floor(steps * 0.7)) {\n ctx.reportProgress?.(i / steps);\n throw new Error(\"progressWorker: simulated failure at 70% progress\");\n }\n }\n ctx.reportProgress?.(1);\n return { Done: `Completed ${steps} steps` };\n },\n });\n}\n\nexport function createRuntime(registry: Registry, def: GraphDefinition) {\n const builder = new GraphBuilder(registry);\n const report = builder.validate(def);\n if (!report.ok)\n throw new Error(\n \"Validation failed: \" +\n report.issues.map((i) => `${i.code}:${i.message}`).join(\", \")\n );\n\n return builder.build(def);\n}\n\nexport function generateId(\n prefix: string,\n used: Set<string> = new Set()\n): string {\n let id: string;\n let attempts = 0;\n do {\n id = `${prefix}${Math.random().toString(36).slice(2, 8)}`;\n attempts++;\n if (attempts > 1000) {\n id = `${prefix}${Date.now().toString(36)}${Math.random()\n .toString(36)\n .slice(2, 4)}`;\n }\n } while (used.has(id));\n return id;\n}\n","import type { EngineEventListener, EngineEventName } from \"../runtime/Engine\";\n\nexport function installLogging(engine: {\n on: <K extends EngineEventName>(\n event: K,\n handler: EngineEventListener<K>\n ) => void;\n}) {\n engine.on(\"value\", (e) => {\n const t = e.runtimeTypeId ? ` <${e.runtimeTypeId}>` : \"\";\n console.log(`[value:${e.io}]`, `${e.nodeId}.${e.handle}`, e.value, t);\n });\n engine.on(\"stats\", (s) => {\n if (s.kind === \"node-progress\") {\n const pct = Math.round((s.progress ?? 0) * 100);\n console.log(`[progress] ${s.runId || s.nodeId}: ${pct}%`);\n } else if (s.kind === \"node-done\") {\n const cancelled = (s as any).cancelled ? \" (cancelled)\" : \"\";\n console.log(`[done] ${s.runId || s.nodeId} in ${s.durationMs ?? 0}ms${cancelled}`);\n } else if (s.kind === \"node-start\") {\n console.log(`[start] ${s.runId || s.nodeId}`);\n } else if (s.kind === \"edge-start\") {\n console.log(\n `[edge] ${s.source.nodeId}.${s.source.handle} -> ${s.target.nodeId}.${s.target.handle}`\n );\n } else if (s.kind === \"edge-done\") {\n console.log(\n `[edge] ${s.source.nodeId}.${s.source.handle} -> ${s.target.nodeId}.${\n s.target.handle\n } in ${s.durationMs ?? 0}ms`\n );\n }\n });\n engine.on(\"error\", (e) => {\n if (e.kind === \"node-run\") {\n console.warn(\n `[error] ${e.runId || e.nodeId}`,\n (e.err as any)?.message ?? e.err\n );\n } else if (e.kind === \"edge-convert\") {\n console.warn(\n `[error] ${e.edgeId} ${e.source.nodeId}.${e.source.handle} -> ${e.target.nodeId}.${e.target.handle}`,\n (e.err as any)?.message ?? e.err\n );\n } else if (e.kind === \"input-validation\") {\n console.warn(\n `[error] input-validation: ${e.nodeId}.${e.handle} (type ${e.typeId})`,\n e.message\n );\n } else if (e.kind === \"registry\") {\n console.warn(\n `[error] registry:`,\n (e.err as any)?.message ?? e.err,\n e.attempt !== undefined\n ? `(attempt ${e.attempt}/${e.maxAttempts ?? \"?\"})`\n : \"\"\n );\n } else if (e.kind === \"system\") {\n console.warn(\n `[error] system: ${e.message}`,\n e.code ? `(code: ${e.code})` : \"\",\n e.err ? (e.err as any)?.message ?? e.err : \"\",\n e.details ? JSON.stringify(e.details) : \"\"\n );\n } else {\n // Log any other error kinds (shouldn't happen, but handle gracefully)\n console.warn(`[error] unknown error kind:`, e);\n }\n });\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport {\n setupBasicGraphRegistry,\n createRuntime,\n BaseMathOperation,\n} from \"../misc/base\";\nimport { UnifiedEngine } from \"../runtime/UnifiedEngine\";\nimport { installLogging } from \"./shared\";\n\nfunction makeBasicGraphDefinition(): GraphDefinition {\n return {\n nodes: [\n { nodeId: \"n1\", typeId: \"base.math\" },\n {\n nodeId: \"n2\",\n typeId: \"base.math\",\n },\n // Transitivity demo nodes\n { nodeId: \"n3\", typeId: \"base.compare\" },\n { nodeId: \"n4\", typeId: \"base.randomXYZs\" },\n ],\n edges: [\n {\n id: \"e1\",\n source: { nodeId: \"n1\", handle: \"Result\" },\n target: { nodeId: \"n2\", handle: \"A\" },\n },\n // Feed n2 result to comparer A\n {\n id: \"e2\",\n source: { nodeId: \"n2\", handle: \"Result\" },\n target: { nodeId: \"n3\", handle: \"A\" },\n },\n // Transitive coercion edge: bool[] (n3.Result) -> vec3 (n4.Min)\n // Path: bool[] -> float[] -> vec3[] -> vec3\n {\n id: \"e3\",\n source: { nodeId: \"n3\", handle: \"Result\" },\n target: { nodeId: \"n4\", handle: \"Min\" },\n },\n ],\n };\n}\n\nexport function createSimpleGraphDef() {\n return makeBasicGraphDefinition();\n}\n\nexport function createSimpleGraphRegistry(id?: string) {\n return setupBasicGraphRegistry(id);\n}\n\n// Execute when run as a script\nexport async function main() {\n console.log(\"Simple example: topology and defaults\");\n console.log(\n \"Topology: n1(base.math) -> n2(base.math) -> n3(base.compare) -> n4(base.randomXYZs.Min)\"\n );\n console.log(\n \"Registry defaults: base.math Operation=Add(0), A=[1], B=[1]; base.randomXYZs Domain=10, Min=[0,0,0], Max=[1,1,1], Seed=1\"\n );\n console.log(\n \"Graph defaults: n2 uses registry defaults (Operation=Add(0), A=[1], B=[1])\"\n );\n\n const runtime = createRuntime(\n createSimpleGraphRegistry(),\n createSimpleGraphDef()\n );\n const engine = new UnifiedEngine(runtime, \"auto\");\n installLogging(engine);\n engine.launch();\n // Configure math nodes: n1 = 2 + 3, n2 multiplies its A (from n1) by B=10\n engine.setInputs(\"n1\", {\n Operation: BaseMathOperation.Add,\n A: [2],\n B: [3],\n });\n engine.setInputs(\"n2\", {\n Operation: BaseMathOperation.Multiply,\n B: [10],\n });\n engine.setInputs(\"n3\", { B: [15] });\n\n // Allow async propagation to flush\n await engine.whenIdle();\n\n const n1Res = engine.getOutput(\"n1\", \"Result\");\n const n2Res = engine.getOutput(\"n2\", \"Result\");\n const n3Res = engine.getOutput(\"n3\", \"Result\");\n const n4Vals = engine.getOutput(\"n4\", \"Values\");\n\n console.log(\"Computed outputs (with overrides):\");\n console.log(\"- n1.Result = A+B = 2+3 =>\", n1Res);\n console.log(\"- n2.Result = A*B, A comes from n1.Result, B=10 =>\", n2Res);\n console.log(\n \"- n3.Result = (A op B) with op=Equal by default, A=n2.Result, B=15 =>\",\n n3Res,\n \"(false because 50 !== 15)\"\n );\n console.log(\n \"- n4.Values: random vec3[], Domain defaults to 10; Min is driven by n3.Result (false -> 0 -> [0,0,0])\"\n );\n console.log(\n \" count(n4.Values) =\",\n Array.isArray(n4Vals) ? n4Vals.length : 0\n );\n engine.dispose();\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport {\n setupBasicGraphRegistry,\n registerDelayNode,\n createRuntime,\n BaseMathOperation,\n} from \"../misc/base\";\nimport { UnifiedEngine } from \"../runtime/UnifiedEngine\";\nimport { installLogging } from \"./shared\";\n\nexport function createAsyncGraphDef() {\n const def: GraphDefinition = {\n nodes: [\n {\n nodeId: \"n1\",\n typeId: \"base.math\",\n },\n {\n nodeId: \"n2\",\n typeId: \"async.delay\",\n params: { policy: { asyncConcurrency: \"queue\", maxQueue: 4 } },\n },\n {\n nodeId: \"n3\",\n typeId: \"base.separateXYZ\",\n },\n {\n nodeId: \"n4\",\n typeId: \"base.compareXYZ\",\n },\n ],\n edges: [\n {\n id: \"e1\",\n source: { nodeId: \"n1\", handle: \"Result\" },\n target: { nodeId: \"n2\", handle: \"Value\" },\n },\n // Demonstrate async edge conversion: vec3[] -> float[] using coercion\n {\n id: \"e2\",\n source: { nodeId: \"n4\", handle: \"XYZ\" },\n target: { nodeId: \"n1\", handle: \"A\" },\n typeId: \"base.vec3[]\",\n },\n {\n id: \"e3\",\n source: { nodeId: \"n3\", handle: \"X\" },\n target: { nodeId: \"n4\", handle: \"X\" },\n },\n {\n id: \"e4\",\n source: { nodeId: \"n3\", handle: \"Y\" },\n target: { nodeId: \"n4\", handle: \"Y\" },\n },\n {\n id: \"e5\",\n source: { nodeId: \"n3\", handle: \"Z\" },\n target: { nodeId: \"n4\", handle: \"Z\" },\n },\n ],\n };\n return def;\n}\n\nexport function createAsyncGraphRegistry(id?: string) {\n const registry = setupBasicGraphRegistry(id);\n registerDelayNode(registry);\n return registry;\n}\n\nexport async function main() {\n const runtime = createRuntime(\n createAsyncGraphRegistry(),\n createAsyncGraphDef()\n );\n const engine = new UnifiedEngine(runtime, \"auto\");\n installLogging(engine);\n engine.launch();\n\n // Set base ms\n engine.setInputs(\"n1\", { Operation: BaseMathOperation.Add, A: [1], B: [2] });\n engine.setInputs(\"n2\", { DelayMs: 250 });\n // Provide XYZ and route through async conversion edge\n engine.setInputs(\"n3\", {\n XYZ: [\n [1, 2, 3],\n [4, 5, 6],\n [7, 8, 9],\n ],\n });\n\n // Rapid inputs to n1.B should cancel prior runs (switch)\n // Note: n1.A is edge-driven from n4.XYZ, so we change n1.B instead\n engine.setInputs(\"n1\", { B: [3] });\n engine.setInputs(\"n1\", { B: [4] });\n engine.setInputs(\"n1\", { B: [5] });\n\n await new Promise((r) => setTimeout(r, 1000));\n engine.setInputs(\"n1\", { B: [10] });\n engine.setInputs(\"n1\", { B: [11] });\n engine.setInputs(\"n1\", { B: [12] });\n\n await new Promise((r) => setTimeout(r, 1500));\n await engine.whenIdle();\n engine.dispose();\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport {\n registerProgressNodes,\n setupBasicGraphRegistry,\n createRuntime,\n} from \"../misc/base\";\nimport { UnifiedEngine } from \"../runtime/UnifiedEngine\";\nimport { installLogging } from \"./shared\";\n\nexport function createProgressGraphDef() {\n const def: GraphDefinition = {\n nodes: [\n { nodeId: \"steps\", typeId: \"base.input.number\" },\n { nodeId: \"delay\", typeId: \"base.input.number\" },\n { nodeId: \"work\", typeId: \"async.progress\" },\n ],\n edges: [\n {\n id: \"e1\",\n source: { nodeId: \"steps\", handle: \"Result\" },\n target: { nodeId: \"work\", handle: \"Steps\" },\n },\n {\n id: \"e2\",\n source: { nodeId: \"delay\", handle: \"Result\" },\n target: { nodeId: \"work\", handle: \"DelayMs\" },\n },\n // not wiring ShouldError to show manual input driven error later\n ],\n };\n return def;\n}\n\nexport function createProgressGraphRegistry(id?: string) {\n const registry = setupBasicGraphRegistry(id);\n registerProgressNodes(registry);\n return registry;\n}\n\nexport async function main() {\n const runtime = createRuntime(\n createProgressGraphRegistry(),\n createProgressGraphDef()\n );\n const engine = new UnifiedEngine(runtime, \"auto\");\n installLogging(engine);\n\n engine.launch();\n\n // Seed initial values\n engine.setInputs(\"steps\", { Value: 12 });\n engine.setInputs(\"delay\", { Value: 80 });\n // Manually set ShouldError on the worker (unwired input)\n engine.setInputs(\"work\", { ShouldError: false });\n\n // After 2s, trigger an error run\n await new Promise((r) => setTimeout(r, 2000));\n console.log(\"-- triggering error run --\");\n engine.setInputs(\"work\", { ShouldError: true });\n\n // After 5s, stop and exit\n await new Promise((r) => setTimeout(r, 5000));\n await engine.whenIdle();\n engine.dispose();\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport { setupBasicGraphRegistry } from \"../misc/base\";\nimport { GraphBuilder } from \"../builder/GraphBuilder\";\n\nexport function createValidationGraphDef(): GraphDefinition {\n // Intentionally build a graph with validation issues:\n // - Unknown node type\n // - Missing target input handle\n // - Multi inbound to same input (warning)\n const def: GraphDefinition = {\n nodes: [\n { nodeId: \"nA\", typeId: \"base.input.number\" },\n { nodeId: \"nB\", typeId: \"base.input.number\" },\n { nodeId: \"nC\", typeId: \"base.math\" },\n { nodeId: \"s1\", typeId: \"base.object.toString\" },\n { nodeId: \"cmp\", typeId: \"base.compare\" },\n // Validation issue: unknown node type\n { nodeId: \"bad\", typeId: \"unknownType\" },\n ],\n edges: [\n // Valid: nA.Result -> nC.A (number)\n {\n id: \"e1\",\n source: { nodeId: \"nA\", handle: \"Result\" },\n target: { nodeId: \"nC\", handle: \"A\" },\n },\n // Invalid input name (INPUT_MISSING)\n {\n id: \"e2\",\n source: { nodeId: \"nB\", handle: \"Result\" },\n target: { nodeId: \"nC\", handle: \"NonExistent\" },\n },\n // Multi inbound to same input (warning): another edge to A\n {\n id: \"e3\",\n source: { nodeId: \"nB\", handle: \"Result\" },\n target: { nodeId: \"nC\", handle: \"A\" },\n },\n {\n id: \"e4\",\n source: { nodeId: \"s1\", handle: \"Text\" },\n target: { nodeId: \"cmp\", handle: \"A\" },\n },\n ],\n };\n return def;\n}\n\nexport function createValidationGraphRegistry(id?: string) {\n const registry = setupBasicGraphRegistry(id);\n return registry;\n}\n\nexport async function main() {\n const registry = createValidationGraphRegistry();\n const def = createValidationGraphDef();\n const builder = new GraphBuilder(registry);\n\n // Validate the graph and display all issues\n const report = builder.validate(def);\n\n console.log(`Validation ${report.ok ? \"passed\" : \"failed\"}`);\n console.log(`Found ${report.issues.length} unique issue(s):\\n`);\n\n const errors = report.issues.filter((i) => i.level === \"error\");\n const warnings = report.issues.filter((i) => i.level === \"warning\");\n\n if (errors.length > 0) {\n console.log(`Errors (${errors.length}):`);\n for (const issue of errors) {\n const location = [\n issue.data?.nodeId && `node:${issue.data.nodeId}`,\n issue.data?.edgeId && `edge:${issue.data.edgeId}`,\n issue.data?.typeId && `type:${issue.data.typeId}`,\n issue.data?.input && `input:${issue.data.input}`,\n ]\n .filter(Boolean)\n .join(\", \");\n const locationStr = location ? ` (${location})` : \"\";\n // Use JSON.stringify to prevent line wrapping issues\n const message = `${issue.code}: ${issue.message}${locationStr}`;\n console.log(` ${message}`);\n }\n console.log();\n }\n\n if (warnings.length > 0) {\n console.log(`Warnings (${warnings.length}):`);\n for (const issue of warnings) {\n const location = [\n issue.data?.nodeId && `node:${issue.data.nodeId}`,\n issue.data?.edgeId && `edge:${issue.data.edgeId}`,\n issue.data?.typeId && `type:${issue.data.typeId}`,\n issue.data?.input && `input:${issue.data.input}`,\n ]\n .filter(Boolean)\n .join(\", \");\n const locationStr = location ? ` (${location})` : \"\";\n const message = `${issue.code}: ${issue.message}${locationStr}`;\n console.log(` ${message}`);\n }\n console.log();\n }\n\n if (report.ok) {\n console.log(\"Graph is valid! Building runtime...\");\n const runtime = builder.build(def);\n console.log(\"Runtime built successfully.\");\n runtime.dispose();\n } else {\n console.log(\"Cannot build runtime due to validation errors.\");\n }\n}\n","export type PathSegment = string | number | RegExp;\nexport type JsonPath = string | PathSegment[];\n\nexport function parseJsonPath(path: JsonPath): PathSegment[] {\n if (typeof path === \"string\") {\n return path.split(\".\").flatMap((segment) => {\n const arrayMatch = segment.match(/^(.+)\\[(\\d+)\\]$/);\n if (arrayMatch) {\n const index = parseInt(arrayMatch[2], 10);\n return arrayMatch[1] ? [arrayMatch[1], index] : [index];\n }\n return [segment];\n });\n }\n return path;\n}\n\nexport function getValueAtPath(\n obj: unknown,\n pathSegments: PathSegment[]\n): { value: unknown; parent: unknown; key: string | number } | null {\n if (pathSegments.length === 0) {\n return { value: obj, parent: null, key: \"\" };\n }\n\n let current: unknown = obj;\n let parent: unknown = null;\n let parentKey: string | number = \"\";\n\n for (let i = 0; i < pathSegments.length - 1; i++) {\n const segment = pathSegments[i];\n if (\n current === null ||\n current === undefined ||\n typeof current !== \"object\"\n ) {\n return null;\n }\n\n if (typeof segment === \"string\") {\n if (Array.isArray(current)) {\n const index = parseInt(segment, 10);\n if (isNaN(index)) return null;\n parent = current;\n parentKey = index;\n current = current[index];\n } else {\n parent = current;\n parentKey = segment;\n current = (current as Record<string, unknown>)[segment];\n }\n } else if (typeof segment === \"number\") {\n if (Array.isArray(current)) {\n if (segment >= 0 && segment < current.length) {\n parent = current;\n parentKey = segment;\n current = current[segment];\n } else {\n return null;\n }\n } else {\n return null;\n }\n } else if (segment instanceof RegExp) {\n if (Array.isArray(current)) {\n return null;\n }\n const obj = current as Record<string, unknown>;\n const matchingKey = Object.keys(obj).find((key) => segment.test(key));\n if (!matchingKey) return null;\n parent = current;\n parentKey = matchingKey;\n current = obj[matchingKey];\n } else {\n return null;\n }\n }\n\n const lastSegment = pathSegments[pathSegments.length - 1];\n if (typeof lastSegment === \"string\") {\n if (Array.isArray(current)) {\n const index = parseInt(lastSegment, 10);\n if (isNaN(index)) return null;\n return { value: current[index], parent: current, key: index };\n } else if (\n current !== null &&\n current !== undefined &&\n typeof current === \"object\"\n ) {\n return {\n value: (current as Record<string, unknown>)[lastSegment],\n parent: current,\n key: lastSegment,\n };\n }\n } else if (typeof lastSegment === \"number\") {\n if (Array.isArray(current)) {\n if (lastSegment >= 0 && lastSegment < current.length) {\n return {\n value: current[lastSegment],\n parent: current,\n key: lastSegment,\n };\n }\n }\n return null;\n } else if (lastSegment instanceof RegExp) {\n if (Array.isArray(current)) {\n return null;\n }\n const obj = current as Record<string, unknown>;\n const matchingKey = Object.keys(obj).find((key) => lastSegment.test(key));\n if (!matchingKey) return null;\n return { value: obj[matchingKey], parent: current, key: matchingKey };\n }\n\n return null;\n}\n\nexport function setValueAtPath(\n obj: unknown,\n pathSegments: PathSegment[],\n newValue: unknown\n): boolean {\n const result = getValueAtPath(obj, pathSegments);\n if (!result || result.parent === null) return false;\n\n if (Array.isArray(result.parent)) {\n (result.parent as unknown[])[result.key as number] = newValue;\n } else {\n (result.parent as Record<string, unknown>)[result.key] = newValue;\n }\n return true;\n}\n\nexport function findMatchingPaths(\n obj: unknown,\n pathSegments: PathSegment[],\n currentPath: PathSegment[] = []\n): Array<{ path: PathSegment[]; value: unknown }> {\n if (pathSegments.length === 0) {\n return [{ path: currentPath, value: obj }];\n }\n\n const [currentSegment, ...remainingSegments] = pathSegments;\n const results: Array<{ path: PathSegment[]; value: unknown }> = [];\n\n if (currentSegment === undefined) {\n return results;\n }\n\n if (typeof currentSegment === \"string\") {\n if (Array.isArray(obj)) {\n const index = parseInt(currentSegment, 10);\n if (!isNaN(index) && index >= 0 && index < obj.length) {\n results.push(\n ...findMatchingPaths(obj[index], remainingSegments, [\n ...currentPath,\n index,\n ])\n );\n }\n } else if (obj !== null && obj !== undefined && typeof obj === \"object\") {\n const objRecord = obj as Record<string, unknown>;\n if (currentSegment in objRecord) {\n results.push(\n ...findMatchingPaths(objRecord[currentSegment], remainingSegments, [\n ...currentPath,\n currentSegment,\n ])\n );\n }\n }\n } else if (typeof currentSegment === \"number\") {\n if (Array.isArray(obj)) {\n if (currentSegment >= 0 && currentSegment < obj.length) {\n results.push(\n ...findMatchingPaths(obj[currentSegment], remainingSegments, [\n ...currentPath,\n currentSegment,\n ])\n );\n }\n }\n } else if (currentSegment instanceof RegExp) {\n if (Array.isArray(obj)) {\n for (let i = 0; i < obj.length; i++) {\n results.push(\n ...findMatchingPaths(obj[i], remainingSegments, [...currentPath, i])\n );\n }\n } else if (obj !== null && obj !== undefined && typeof obj === \"object\") {\n const objRecord = obj as Record<string, unknown>;\n for (const key of Object.keys(objRecord)) {\n if (currentSegment.test(key)) {\n results.push(\n ...findMatchingPaths(objRecord[key], remainingSegments, [\n ...currentPath,\n key,\n ])\n );\n }\n }\n }\n }\n\n return results;\n}\n","import type {\n GraphDefinition,\n GraphNodeDefinition,\n GraphEdgeDefinition,\n RuntimeSnapshotFull,\n RuntimeMetadata,\n} from \"@bian-womp/spark-protocol\";\nimport { generateId } from \"../base\";\nimport {\n parseJsonPath,\n setValueAtPath,\n findMatchingPaths,\n type JsonPath,\n} from \"./json\";\nimport {\n isTypedOutput,\n getTypedOutputTypeId,\n getTypedOutputValue,\n typed,\n} from \"../../core/types\";\n\n/**\n * Configuration object for value conversion.\n */\nexport interface ValueConverterConfig {\n nodeId: string;\n handleId: string;\n value: unknown;\n type: \"input\" | \"output\" | \"inputDefault\" | \"initialInput\";\n nodeTypeId?: string;\n handleDataType?: string;\n runtimeTypeId?: string;\n}\n\n/**\n * Merge two graph definitions, remapping IDs to avoid conflicts.\n * Returns the merged graph and a mapping from source node IDs to new IDs.\n */\nexport type ValueConverter = (config: ValueConverterConfig) => unknown;\n\nexport function mergeGraphDefinitions(\n target: GraphDefinition,\n source: GraphDefinition,\n converter?: ValueConverter\n): { merged: GraphDefinition; nodeIdMap: Record<string, string> } {\n const existingNodeIds = new Set(target.nodes.map((n) => n.nodeId));\n const existingEdgeIds = new Set(target.edges.map((e) => e.id));\n\n const nodeIdMap: Record<string, string> = {};\n\n const importedNodes: GraphNodeDefinition[] = source.nodes.map((n) => {\n let newId = n.nodeId;\n if (existingNodeIds.has(newId)) {\n newId = generateId(\"n\", existingNodeIds);\n } else {\n existingNodeIds.add(newId);\n }\n nodeIdMap[n.nodeId] = newId;\n const transformedNode: GraphNodeDefinition = {\n ...n,\n nodeId: newId,\n };\n\n if (converter) {\n const nodeTypeId = transformedNode.typeId;\n\n if (transformedNode.resolvedHandles?.inputDefaults) {\n const transformedInputDefaults: Record<string, unknown> = {};\n for (const [handleId, value] of Object.entries(\n transformedNode.resolvedHandles.inputDefaults\n )) {\n const handleDataType = transformedNode.resolvedHandles?.inputs?.[\n handleId\n ]\n ? typeof transformedNode.resolvedHandles.inputs[handleId] ===\n \"string\"\n ? transformedNode.resolvedHandles.inputs[handleId]\n : (\n transformedNode.resolvedHandles.inputs[handleId] as {\n typeId?: string;\n }\n )?.typeId\n : undefined;\n const convertedValue = converter({\n nodeId: newId,\n handleId,\n value,\n type: \"inputDefault\",\n nodeTypeId,\n handleDataType,\n });\n // If converter returns null, skip this input default (delete it)\n if (convertedValue !== null) {\n transformedInputDefaults[handleId] = convertedValue;\n }\n }\n // Only set inputDefaults if there are any remaining after conversion\n if (Object.keys(transformedInputDefaults).length > 0) {\n transformedNode.resolvedHandles = {\n ...transformedNode.resolvedHandles,\n inputDefaults: transformedInputDefaults,\n };\n } else if (transformedNode.resolvedHandles) {\n // Remove inputDefaults if all were deleted\n const { inputDefaults, ...restHandles } =\n transformedNode.resolvedHandles;\n transformedNode.resolvedHandles = restHandles;\n }\n }\n }\n\n return transformedNode;\n });\n\n const importedEdges: GraphEdgeDefinition[] = source.edges.map((e) => {\n let newEdgeId = e.id;\n if (existingEdgeIds.has(newEdgeId)) {\n newEdgeId = generateId(\"e\", existingEdgeIds);\n } else {\n existingEdgeIds.add(newEdgeId);\n }\n\n const sourceNodeId = nodeIdMap[e.source.nodeId] ?? e.source.nodeId;\n const targetNodeId = nodeIdMap[e.target.nodeId] ?? e.target.nodeId;\n\n return {\n ...e,\n id: newEdgeId,\n source: {\n ...e.source,\n nodeId: sourceNodeId,\n },\n target: {\n ...e.target,\n nodeId: targetNodeId,\n },\n };\n });\n\n return {\n merged: {\n nodes: [...target.nodes, ...importedNodes],\n edges: [...target.edges, ...importedEdges],\n },\n nodeIdMap,\n };\n}\n\n/**\n * Compute the center point of a graph based on node positions.\n */\nexport function computeGraphCenter(\n positions: Record<string, { x: number; y: number }>,\n nodeIds: string[]\n): { x: number; y: number } {\n const validPositions = nodeIds\n .map((id) => positions[id])\n .filter((pos): pos is { x: number; y: number } => pos !== undefined);\n\n if (validPositions.length === 0) {\n return { x: 0, y: 0 };\n }\n\n const minX = Math.min(...validPositions.map((p) => p.x));\n const maxX = Math.max(...validPositions.map((p) => p.x));\n const minY = Math.min(...validPositions.map((p) => p.y));\n const maxY = Math.max(...validPositions.map((p) => p.y));\n\n return {\n x: (minX + maxX) / 2,\n y: (minY + maxY) / 2,\n };\n}\n\n/**\n * Offset positions of imported nodes based on an anchor point.\n * Preserves relative layout of imported nodes while positioning them at the anchor.\n */\nexport function offsetImportedPositions(\n targetPositions: Record<string, { x: number; y: number }>,\n sourcePositions: Record<string, { x: number; y: number }>,\n sourceDef: GraphDefinition,\n nodeIdMap: Record<string, string>,\n anchorPos: { x: number; y: number }\n): Record<string, { x: number; y: number }> {\n const sourceNodeIds = sourceDef.nodes.map((n) => n.nodeId);\n const sourceCenter = computeGraphCenter(sourcePositions, sourceNodeIds);\n\n const dx = anchorPos.x - sourceCenter.x;\n const dy = anchorPos.y - sourceCenter.y;\n\n const newPositions: Record<string, { x: number; y: number }> = {\n ...targetPositions,\n };\n\n for (const node of sourceDef.nodes) {\n const oldId = node.nodeId;\n const newId = nodeIdMap[oldId];\n const srcPos = sourcePositions[oldId] ?? { x: 0, y: 0 };\n newPositions[newId] = {\n x: srcPos.x + dx,\n y: srcPos.y + dy,\n };\n }\n\n return newPositions;\n}\n\n/**\n * Merge inputs and outputs from source into target, remapping node IDs.\n * Source values override target when merging.\n */\nexport function mergeInputsOutputs(\n targetInputs: Record<string, Record<string, unknown>>,\n targetOutputs: Record<string, Record<string, unknown>>,\n sourceInputs: Record<string, Record<string, unknown>>,\n sourceOutputs: Record<string, Record<string, unknown>>,\n nodeIdMap: Record<string, string>,\n converter?: ValueConverter,\n nodeTypeMap?: Map<string, string>,\n handleTypeMap?: Map<string, Map<string, string>>\n): {\n mergedInputs: Record<string, Record<string, unknown>>;\n mergedOutputs: Record<string, Record<string, unknown>>;\n} {\n // Deep copy target inputs/outputs to avoid mutating the original\n const mergedInputs: Record<string, Record<string, unknown>> = {};\n const mergedOutputs: Record<string, Record<string, unknown>> = {};\n\n // Copy target inputs/outputs\n for (const [nodeId, inputs] of Object.entries(targetInputs)) {\n mergedInputs[nodeId] = { ...inputs };\n }\n for (const [nodeId, outputs] of Object.entries(targetOutputs)) {\n mergedOutputs[nodeId] = { ...outputs };\n }\n\n for (const [oldId, inputs] of Object.entries(sourceInputs)) {\n const newId = nodeIdMap[oldId];\n if (newId) {\n const transformedInputs: Record<string, unknown> = {};\n const nodeTypeId = nodeTypeMap?.get(oldId);\n\n // Ensure mergedInputs[newId] exists\n if (!mergedInputs[newId]) {\n mergedInputs[newId] = {};\n }\n\n for (const [handleId, value] of Object.entries(inputs)) {\n const handleDataType = handleTypeMap?.get(oldId)?.get(handleId);\n const convertedValue = converter\n ? converter({\n nodeId: newId,\n handleId,\n value,\n type: \"input\",\n nodeTypeId,\n handleDataType,\n })\n : value;\n // If converter returns null, delete this input\n if (convertedValue === null) {\n delete mergedInputs[newId][handleId];\n } else {\n // Otherwise, set the converted value\n transformedInputs[handleId] = convertedValue;\n }\n }\n\n // Merge transformed inputs\n if (Object.keys(transformedInputs).length > 0) {\n mergedInputs[newId] = { ...mergedInputs[newId], ...transformedInputs };\n }\n\n // Clean up empty node input objects\n if (Object.keys(mergedInputs[newId]).length === 0) {\n delete mergedInputs[newId];\n }\n }\n }\n\n for (const [oldId, outputs] of Object.entries(sourceOutputs)) {\n const newId = nodeIdMap[oldId];\n if (newId) {\n const transformedOutputs: Record<string, unknown> = {};\n const nodeTypeId = nodeTypeMap?.get(oldId);\n\n // Ensure mergedOutputs[newId] exists\n if (!mergedOutputs[newId]) {\n mergedOutputs[newId] = {};\n }\n\n for (const [handleId, value] of Object.entries(outputs)) {\n const handleDataType = handleTypeMap?.get(oldId)?.get(handleId);\n const runtimeTypeId = isTypedOutput(value)\n ? getTypedOutputTypeId(value)\n : undefined;\n const convertedValue = converter\n ? converter({\n nodeId: newId,\n handleId,\n value,\n type: \"output\",\n nodeTypeId,\n handleDataType,\n runtimeTypeId,\n })\n : value;\n // If converter returns null, delete this output\n if (convertedValue === null) {\n delete mergedOutputs[newId][handleId];\n } else {\n // Otherwise, set the converted value\n transformedOutputs[handleId] = convertedValue;\n }\n }\n\n // Merge transformed outputs\n if (Object.keys(transformedOutputs).length > 0) {\n mergedOutputs[newId] = {\n ...mergedOutputs[newId],\n ...transformedOutputs,\n };\n }\n\n // Clean up empty node output objects\n if (Object.keys(mergedOutputs[newId]).length === 0) {\n delete mergedOutputs[newId];\n }\n }\n }\n\n return { mergedInputs, mergedOutputs };\n}\n\n/**\n * Merge snapshot data (inputs, outputs) from source into target.\n * Graph definition merging should be done separately using mergeGraphDefinitions.\n * UI positions are handled separately by mergeUIState.\n */\nexport function mergeSnapshotData(\n targetSnapshot: RuntimeSnapshotFull,\n sourceSnapshot: RuntimeSnapshotFull,\n sourceDef: GraphDefinition,\n nodeIdMap: Record<string, string>,\n converter?: ValueConverter\n): {\n mergedInputs: Record<string, Record<string, unknown>>;\n mergedOutputs: Record<string, Record<string, unknown>>;\n} {\n const nodeTypeMap = new Map<string, string>();\n const handleTypeMap = new Map<string, Map<string, string>>();\n\n for (const node of sourceDef.nodes) {\n nodeTypeMap.set(node.nodeId, node.typeId);\n const nodeHandleTypes = new Map<string, string>();\n\n if (node.resolvedHandles?.inputs) {\n for (const [handleId, handleDesc] of Object.entries(\n node.resolvedHandles.inputs\n )) {\n const typeId =\n typeof handleDesc === \"string\"\n ? handleDesc\n : (handleDesc as { typeId?: string })?.typeId;\n if (typeId) nodeHandleTypes.set(handleId, typeId);\n }\n }\n\n if (node.resolvedHandles?.outputs) {\n for (const [handleId, handleDesc] of Object.entries(\n node.resolvedHandles.outputs\n )) {\n const typeId =\n typeof handleDesc === \"string\"\n ? handleDesc\n : Array.isArray(handleDesc)\n ? handleDesc[0]\n : undefined;\n if (typeId) nodeHandleTypes.set(handleId, typeId);\n }\n }\n\n if (nodeHandleTypes.size > 0) {\n handleTypeMap.set(node.nodeId, nodeHandleTypes);\n }\n }\n\n const { mergedInputs, mergedOutputs } = mergeInputsOutputs(\n targetSnapshot.inputs ?? {},\n targetSnapshot.outputs ?? {},\n sourceSnapshot.inputs ?? {},\n sourceSnapshot.outputs ?? {},\n nodeIdMap,\n converter,\n nodeTypeMap,\n handleTypeMap\n );\n\n return {\n mergedInputs,\n mergedOutputs,\n };\n}\n\n/**\n * Merge runtime metadata from source into target, remapping node IDs using nodeIdMap.\n * Preserves target metadata and adds/updates source metadata with remapped IDs.\n */\nexport function mergeRuntimeState(\n targetRuntime: RuntimeMetadata | null | undefined,\n sourceRuntime: RuntimeMetadata | null | undefined,\n nodeIdMap: Record<string, string>\n): RuntimeMetadata {\n const result: RuntimeMetadata = {\n nodes: { ...(targetRuntime?.nodes || {}) },\n };\n\n if (!sourceRuntime?.nodes) return result;\n\n // Remap source node IDs to new merged node IDs\n for (const [sourceNodeId, newNodeId] of Object.entries(nodeIdMap)) {\n const sourceNodeMeta = sourceRuntime.nodes[sourceNodeId];\n if (sourceNodeMeta) {\n result.nodes[newNodeId] = { ...sourceNodeMeta };\n }\n }\n\n return result;\n}\n\nexport interface ValueMappingConfig {\n handleId?: string | RegExp;\n nodeId?: string | RegExp;\n nodeTypeId?: string | RegExp;\n handleDataType?: string | RegExp;\n runtimeTypeId?: string | RegExp;\n transformTypedValue?: boolean;\n path?: JsonPath;\n valueMap:\n | Map<string | number | boolean, unknown>\n | Record<string | number, unknown>;\n}\n\nexport interface ConverterConfig {\n mappings: ValueMappingConfig[];\n}\n\nfunction matchesPattern(value: string, pattern?: string | RegExp): boolean {\n if (!pattern) return true;\n if (typeof pattern === \"string\") {\n return value === pattern;\n }\n return pattern.test(value);\n}\n\n/**\n * Build a converter function from a configuration that maps values based on handle/node matching.\n * The converter will replace values when:\n * - handleId matches (if specified)\n * - nodeId matches (if specified)\n * - nodeTypeId matches (if specified)\n * - handleDataType matches (if specified)\n * - runtimeTypeId matches (if specified, for typed outputs)\n * - value exists in valueMap\n */\nexport function buildValueConverter(config: ConverterConfig): ValueConverter {\n return (converterConfig: ValueConverterConfig) => {\n const {\n nodeId,\n handleId,\n value,\n type,\n nodeTypeId,\n handleDataType,\n runtimeTypeId,\n } = converterConfig;\n const isTyped = isTypedOutput(value);\n\n for (const mapping of config.mappings) {\n if (!matchesPattern(handleId, mapping.handleId)) continue;\n if (!matchesPattern(nodeId, mapping.nodeId)) continue;\n\n if (mapping.nodeTypeId && nodeTypeId) {\n if (!matchesPattern(nodeTypeId, mapping.nodeTypeId)) continue;\n }\n\n if (mapping.handleDataType && handleDataType) {\n if (!matchesPattern(handleDataType, mapping.handleDataType)) continue;\n }\n\n if (mapping.runtimeTypeId && runtimeTypeId) {\n if (!matchesPattern(runtimeTypeId, mapping.runtimeTypeId)) continue;\n }\n\n if (mapping.transformTypedValue && isTyped) {\n const innerValue = getTypedOutputValue(value);\n const typedTypeId = getTypedOutputTypeId(value);\n if (!typedTypeId) continue;\n\n if (mapping.path !== undefined) {\n const pathSegments = parseJsonPath(mapping.path);\n const matches = findMatchingPaths(innerValue, pathSegments);\n\n if (matches.length > 0) {\n const transformedInner = JSON.parse(JSON.stringify(innerValue));\n let changed = false;\n\n for (const match of matches) {\n const matchValue = match.value;\n if (matchValue !== null && matchValue !== undefined) {\n let newValue: unknown = matchValue;\n\n if (mapping.valueMap instanceof Map) {\n if (\n mapping.valueMap.has(\n matchValue as string | number | boolean\n )\n ) {\n newValue = mapping.valueMap.get(\n matchValue as string | number | boolean\n );\n changed = true;\n }\n } else {\n if (\n typeof matchValue === \"string\" ||\n typeof matchValue === \"number\"\n ) {\n if (matchValue in mapping.valueMap) {\n newValue = mapping.valueMap[matchValue];\n changed = true;\n }\n }\n }\n\n if (changed && newValue !== matchValue) {\n // If mapped to null, set null at the path (which may delete nested property)\n setValueAtPath(transformedInner, match.path, newValue);\n }\n }\n }\n\n // If the entire typed output should be deleted (all paths mapped to null),\n // we'd need to check if the whole inner value is null/empty, but for now\n // we'll return the transformed value or original\n return changed ? typed(typedTypeId, transformedInner) : value;\n }\n } else {\n if (innerValue !== null && innerValue !== undefined) {\n let newValue: unknown = innerValue;\n\n if (mapping.valueMap instanceof Map) {\n if (\n mapping.valueMap.has(innerValue as string | number | boolean)\n ) {\n newValue = mapping.valueMap.get(\n innerValue as string | number | boolean\n );\n // If mapped to null, return null to delete the output\n if (newValue === null) {\n return null;\n }\n return typed(typedTypeId, newValue);\n }\n } else {\n if (\n typeof innerValue === \"string\" ||\n typeof innerValue === \"number\"\n ) {\n if (innerValue in mapping.valueMap) {\n newValue = mapping.valueMap[innerValue];\n // If mapped to null, return null to delete the output\n if (newValue === null) {\n return null;\n }\n return typed(typedTypeId, newValue);\n }\n }\n }\n }\n }\n continue;\n }\n\n if (mapping.path !== undefined) {\n let pathSegments = parseJsonPath(mapping.path);\n\n if (isTyped) {\n const typedTypeId = getTypedOutputTypeId(value);\n if (typedTypeId) {\n const firstSegment = pathSegments[0];\n const firstSegmentStr =\n typeof firstSegment === \"string\"\n ? firstSegment\n : firstSegment instanceof RegExp\n ? null\n : String(firstSegment);\n if (\n firstSegmentStr !== \"__spark_value\" &&\n firstSegmentStr !== \"__spark_type\"\n ) {\n pathSegments = [\"__spark_value\", ...pathSegments];\n }\n }\n }\n\n const matches = findMatchingPaths(value, pathSegments);\n\n if (matches.length > 0) {\n const transformedValue = JSON.parse(JSON.stringify(value));\n let changed = false;\n\n for (const match of matches) {\n const matchValue = match.value;\n if (matchValue !== null && matchValue !== undefined) {\n let newValue: unknown = matchValue;\n\n if (mapping.valueMap instanceof Map) {\n if (\n mapping.valueMap.has(matchValue as string | number | boolean)\n ) {\n newValue = mapping.valueMap.get(\n matchValue as string | number | boolean\n );\n changed = true;\n }\n } else {\n if (\n typeof matchValue === \"string\" ||\n typeof matchValue === \"number\"\n ) {\n if (matchValue in mapping.valueMap) {\n newValue = mapping.valueMap[matchValue];\n changed = true;\n }\n }\n }\n\n if (changed && newValue !== matchValue) {\n setValueAtPath(transformedValue, match.path, newValue);\n }\n }\n }\n\n return changed ? transformedValue : value;\n }\n } else {\n if (value !== null && value !== undefined) {\n if (mapping.valueMap instanceof Map) {\n if (mapping.valueMap.has(value as string | number | boolean)) {\n return mapping.valueMap.get(value as string | number | boolean);\n }\n } else {\n if (typeof value === \"string\" || typeof value === \"number\") {\n if (value in mapping.valueMap) {\n return mapping.valueMap[value];\n }\n }\n }\n }\n }\n }\n\n return value;\n };\n}\n"],"names":[],"mappings":";;AAuGM,SAAU,KAAK,CACnB,MAAkB,EAClB,KAAQ,EAAA;IAER,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE;AACvD;AAEM,SAAU,aAAa,CAAC,CAAU,EAAA;IACtC,QACE,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,QAAQ;AACrB,QAAA,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC;AAE3D;AAEM,SAAU,oBAAoB,CAAC,CAAU,EAAA;IAC7C,IAAI,aAAa,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC;AACnD,IAAA,OAAO,SAAS;AAClB;AAEM,SAAU,mBAAmB,CAAC,CAAU,EAAA;IAC5C,IAAI,aAAa,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,aAAa;AAC5C,IAAA,OAAO,CAAC;AACV;AAEM,SAAU,cAAc,CAC5B,MAAyD,EACzD,MAAgB,EAAA;AAEhB,IAAA,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS;AAC7C,IAAA,IAAI,CAAC,CAAC;AAAE,QAAA,OAAO,SAAS;AACxB,IAAA,OAAO,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM;AAC7C;AAEM,SAAU,cAAc,CAC5B,MAAyD,EACzD,MAAgB,EAAA;AAEhB,IAAA,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS;AAC7C,IAAA,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC;AACpD;;MC1Ga,gBAAgB,CAAA;AAA7B,IAAA,WAAA,GAAA;AACU,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,GAAG,EAA4C;IAW1E;AAVE,IAAA,QAAQ,CAAc,GAAwC,EAAA;QAC5D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC;AAChC,QAAA,OAAO,IAAI;IACb;AACA,IAAA,GAAG,CAAC,EAAU,EAAA;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IAChC;AACA,IAAA,GAAG,CAAC,EAAU,EAAA;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IAChC;AACD;MAEY,QAAQ,CAAA;AAsBnB,IAAA,WAAA,CAAY,EAAW,EAAA;AAnBd,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAmC;AAClD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAA8B;AAC7C,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAOrB;AACM,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,gBAAgB,EAAE;AACnC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAM3B;AAMK,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAGxB;AACK,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,GAAG,EAM7B;AAEK,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAO5B;QAtBD,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAA,CAAA,EAAI,QAAQ,CAAC,SAAS,EAAE,CAAA,CAAE;IAC5C;IAuBA,YAAY,CACV,IAAwB,EACxB,IAIC,EAAA;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;;AAE7B,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE;AAC/B,gBAAA,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC;AACnB,gBAAA,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC;AACtB,aAAA,CAAC;QACJ;AACA,QAAA,IAAI,IAAI,EAAE,SAAS,EAAE;YACnB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,EAAA,CAAI;YAC9C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC5B,gBAAA,MAAM,SAAS,GAA8B;AAC3C,oBAAA,EAAE,EAAE,OAAO;oBACX,QAAQ,EAAE,CAAC,CAAU,KACnB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAChB,wBAAA,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAI;AACZ,4BAAA,IAAI;AACF,gCAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;4BACzB;AAAE,4BAAA,MAAM;AACN,gCAAA,OAAO,KAAK;4BACd;AACF,wBAAA,CAAC,CAAC;iBACL;gBACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC;YACpC;AAEA,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,KAC5C,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CACvC;AACD,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,KAAK,KAAI;AAChD,gBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,oBAAA,OAAO,KAAK;AACvC,gBAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;oBAC9B,KAAK,MAAM,CAAC,IAAI,KAAK;wBAAE,IAAI,CAAC,KAAK,SAAS;AAAE,4BAAA,OAAO,CAAC;AACpD,oBAAA,OAAO,SAAS;gBAClB;AACA,gBAAA,OAAO,KAAK,CAAC,CAAC,CAAC;AACjB,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,YAAY,CAcV,IAA2C,EAAA;QAC3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAA8C,CAAC;AACvE,QAAA,OAAO,IAAI;IACb;IAEA,kBAAkB,CAChB,MAAc,EACd,CAGC,EAAA;QAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;;;AAG/B,QAAA,MAAM,OAAO,GAAG,CAAA,EAAG,MAAM,IAAI;AAC7B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC7D,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE;AAC5B,gBAAA,SAAS,EAAE,CAAC,KAAc,KACxB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK;AACnE,gBAAA,WAAW,EAAE,CAAC,IAAa,KACzB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;AACnE,aAAA,CAAC;QACJ;AACA,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,gBAAgB,CACd,UAAkB,EAClB,QAAgB,EAChB,OAAoC,EACpC,IAAkC,EAAA;QAElC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,UAAU,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAE,EAAE;YAC/C,OAAO;AACP,YAAA,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa;AACrC,SAAA,CAAC;;AAEF,QAAA,MAAM,OAAO,GACX,UAAU,KAAK,aAAa,GAAG,UAAU,GAAG,CAAA,EAAG,UAAU,IAAI;AAC/D,QAAA,MAAM,KAAK,GAAG,QAAQ,KAAK,aAAa,GAAG,QAAQ,GAAG,CAAA,EAAG,QAAQ,IAAI;AACrE,QAAA,MAAM,MAAM,GAAG,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,KAAK,EAAE;AACrC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACpD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACnE,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE;AACzB,oBAAA,OAAO,EAAE,CAAC,KAAc,KAAI;AAC1B,wBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,4BAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;;AAE7D,wBAAA,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBACzB,CAAC;AACD,oBAAA,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa;AACrC,iBAAA,CAAC;YACJ;QACF;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,qBAAqB,CACnB,UAAkB,EAClB,QAAgB,EAChB,YAAuE,EACvE,IAAkC,EAAA;QAElC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,UAAU,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAE,EAAE;YACpD,YAAY;AACZ,YAAA,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa;AACrC,SAAA,CAAC;;AAEF,QAAA,MAAM,OAAO,GACX,UAAU,KAAK,aAAa,GAAG,UAAU,GAAG,CAAA,EAAG,UAAU,IAAI;AAC/D,QAAA,MAAM,KAAK,GAAG,QAAQ,KAAK,aAAa,GAAG,QAAQ,GAAG,CAAA,EAAG,QAAQ,IAAI;AACrE,QAAA,MAAM,MAAM,GAAG,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,KAAK,EAAE;AACrC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACpD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACnE,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE;AAC9B,oBAAA,YAAY,EAAE,OAAO,KAAc,EAAE,MAAmB,KAAI;AAC1D,wBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;4BACxB,MAAM,GAAG,GAAc,EAAE;AACzB,4BAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gCACrC,IAAI,MAAM,EAAE,OAAO;oCACjB,MAAM,MAAM,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC;;AAE7C,gCAAA,GAAG,CAAC,IAAI,CAAC,MAAM,YAAY,CAAE,KAAmB,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;4BAC/D;AACA,4BAAA,OAAO,GAAG;wBACZ;wBACA,OAAO,CAAC,MAAM,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBAC5C,CAAC;AACD,oBAAA,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa;AACrC,iBAAA,CAAC;YACJ;QACF;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,OAAO,IAAI;IACb;IAEA,SAAS,CACP,UAA8B,EAC9B,QAA4B,EAAA;AAE5B,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,KAAK;QAC1C,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC;IACrD;IAEA,WAAW,CACT,UAAkB,EAClB,QAAgB,EAAA;QAEhB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC3D,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,SAAS;AAC/B,QAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,QAAQ,CAAC,OAAO;AACrD,QAAA,OAAO,SAAS;IAClB;IAEA,gBAAgB,CACd,UAAkB,EAClB,QAAgB,EAAA;QAEhB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC3D,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,SAAS;AAC/B,QAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,QAAQ,CAAC,YAAY;AAC3D,QAAA,OAAO,SAAS;IAClB;;IAGA,aAAa,GAAA;QAMX,MAAM,GAAG,GAKJ,EAAE;AACP,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE;AACjD,YAAA,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAClC,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI;gBACJ,EAAE;AACF,gBAAA,KAAK,EAAE,KAAK;gBACZ,aAAa,EAAE,GAAG,CAAC,aAAa;AACjC,aAAA,CAAC;QACJ;AACA,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE;AACtD,YAAA,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AAClC,YAAA,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC;QACvE;AACA,QAAA,OAAO,GAAG;IACZ;IAEA,eAAe,CACb,UAAkB,EAClB,QAAgB,EAAA;AAEhB,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,UAAU,CAAA,EAAA,EAAK,QAAQ,EAAE;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC/C,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,MAAM;AAEzB,QAAA,IAAI,UAAU,KAAK,QAAQ,EAAE;AAC3B,YAAA,MAAM,GAAG,GAAyB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;YACrE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AACrC,YAAA,OAAO,GAAG;QACZ;;QAGA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC/C,IAAI,UAAU,EAAE;AACd,YAAA,MAAM,GAAG,GAAyB;AAChC,gBAAA,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,UAAU,CAAC,OAAO;aAC5B;YACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AACrC,YAAA,OAAO,GAAG;QACZ;QACA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;QACrD,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,GAAG,GAA0B;AACjC,gBAAA,IAAI,EAAE,OAAO;gBACb,YAAY,EAAE,WAAW,CAAC,YAAY;aACvC;YACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AACrC,YAAA,OAAO,GAAG;QACZ;;AAGA,QAAA,MAAM,YAAY,GAAG,CAAC,IAAY,KAAiB;YACjD,MAAM,GAAG,GAAgB,EAAE;AAC3B,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE;gBACjD,IAAI,GAAG,CAAC,aAAa;oBAAE;AACvB,gBAAA,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAClC,IAAI,GAAG,KAAK,IAAI;oBACd,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;YACxE;AACA,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE;gBACtD,IAAI,GAAG,CAAC,aAAa;oBAAE;AACvB,gBAAA,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAClC,IAAI,GAAG,KAAK,IAAI;oBACd,GAAG,CAAC,IAAI,CAAC;AACP,wBAAA,IAAI,EAAE,GAAG;AACT,wBAAA,EAAE,EAAE,GAAG;AACP,wBAAA,IAAI,EAAE,OAAO;wBACb,YAAY,EAAE,GAAG,CAAC,YAAY;AAC/B,qBAAA,CAAC;YACN;AACA,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC;AAQD,QAAA,MAAM,QAAQ,GAAG,CACf,CAA+C,EAC/C,CAAmC,KACjC;AACF,YAAA,IAAI,CAAC,CAAC;AAAE,gBAAA,OAAO,IAAI;AACnB,YAAA,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;AAAE,gBAAA,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AACjD,YAAA,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AAC1B,QAAA,CAAC;AAED,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAA4C;QAChE,MAAM,KAAK,GAAY,EAAE;AACzB,QAAA,MAAM,IAAI,GAAG,CAAC,CAAQ,KAAI;;YAExB,IAAI,CAAC,GAAG,CAAC;AACT,YAAA,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;AACvB,gBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBAClB,IACE,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK;qBAC1B,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAC9D;oBACA;gBACF;AACA,gBAAA,CAAC,EAAE;YACL;YACA,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACvB,QAAA,CAAC;QAED,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAClE,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAE5C,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAG;AAC1B,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;;AAEzB,gBAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;gBACzD,IAAI,CAAC,QAAQ,EAAE;AACb,oBAAA,MAAM,OAAO,GAAG,CAAC,KAAc,KAAI;wBACjC,IAAI,GAAG,GAAG,KAAK;AACf,wBAAA,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE;;AAE3B,4BAAA,GAAG,GAAI,IAAsB,CAAC,OAAO,CAAC,GAAG,CAAC;wBAC5C;AACA,wBAAA,OAAO,GAAG;AACZ,oBAAA,CAAC;oBACD,MAAM,GAAG,GAAyB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;oBAC3D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AACrC,oBAAA,OAAO,GAAG;gBACZ;qBAAO;oBACL,MAAM,YAAY,GAAG,OAAO,KAAc,EAAE,MAAmB,KAAI;wBACjE,IAAI,GAAG,GAAY,KAAK;AACxB,wBAAA,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE;AAC3B,4BAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,gCAAA,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;4BACzB;iCAAO;gCACL,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC;4BAC5C;wBACF;AACA,wBAAA,OAAO,GAAG;AACZ,oBAAA,CAAC;oBACD,MAAM,GAAG,GAA0B,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE;oBAClE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AACrC,oBAAA,OAAO,GAAG;gBACZ;YACF;;YAEA,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACzC,gBAAA,MAAM,QAAQ,GAAG;AACf,oBAAA,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;oBACzB,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;iBACxD;gBACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9B,gBAAA,IAAI,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;oBAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC;oBAC3B,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBACpE;YACF;QACF;AAEA,QAAA,OAAO,SAAS;IAClB;;AAGA,IAAA,YAAY,CAAC,IAYZ,EAAA;AACC,QAAA,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI;AAC3D,QAAA,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,aAAa;AAClD,QAAA,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,YAAY;AAEjD,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB;AAC9C,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB;QAC9C,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE;AACtC,YAAA,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;YAC9B,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC;QAC9C;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE;YACjB,OAAO;YACP,YAAY;YACZ,YAAY;AACb,SAAA,CAAC;;QAEF,IAAI,CAAC,YAAY,CACf;YACE,EAAE;YACF,WAAW;AACX,YAAA,QAAQ,EAAE,CAAC,CAAU,KACnB,OAAO,CAAC,KAAK,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACtD,UAAU;SACX,EACD,IAAI,CACL;AACD,QAAA,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE;AAC1B,YAAA,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC;YACnB,WAAW,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;AAC9B,SAAA,CAAC;;QAEF,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,KAAK,KAAI;AAC7C,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE;AACzB,iBAAA,IAAI;AACJ,iBAAA,WAAW,EAAE;YAChB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,KAAK;AACtB,YAAA,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3D,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AACvB,YAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,KAAK;AACvE,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,KAAK,KAAI;AAC7C,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,KAAK;AACtB,YAAA,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAC3B,kBAAE;AACF,kBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,KAAK,KAAI;AAC7C,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AAC9B,YAAA,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;AAC7C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACb;;AAjee,QAAA,CAAA,SAAS,GAAG,CAAH;;ACpD1B;;AAEG;AAEH;;AAEG;AACG,SAAU,SAAS,CAAc,KAAc,EAAA;IACnD,OAAO,CAAC,CAAC,KAAK,IAAI,OAAQ,KAAa,CAAC,IAAI,KAAK,UAAU;AAC7D;AAEA;;AAEG;AACI,eAAe,kBAAkB,CAAI,KAAqB,EAAA;AAC/D,IAAA,OAAO,SAAS,CAAI,KAAK,CAAC,GAAG,MAAM,KAAK,GAAG,KAAK;AAClD;AAEA;;AAEG;AACG,SAAU,WAAW,CAAC,CAAU,EAAE,CAAU,EAAA;IAChD,IAAI,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,IAAI;AACxB,IAAA,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC;AAAE,QAAA,OAAO,KAAK;IACvC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACnC,QAAA,IAAI;AACF,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAChD;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,KAAK;QACd;IACF;AACA,IAAA,OAAO,KAAK;AACd;;ACnBA;;AAEG;MACU,cAAc,CAAA;AAMzB,IAAA,WAAA,CAAY,QAAmB,EAAA;AALvB,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAA4B;QAC3C,IAAA,CAAA,KAAK,GAAkB,EAAE;AAEzB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,GAAG,EAA2B;AAGzD,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;;AAGA,IAAA,OAAO,CAAC,MAAc,EAAA;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;IAC/B;IAEA,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;IAEA,OAAO,CAAC,MAAc,EAAE,IAAsB,EAAA;QAC5C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;IAC9B;AAEA,IAAA,UAAU,CAAC,MAAc,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;IAC3B;AAEA,IAAA,OAAO,CAAC,MAAc,EAAA;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;IAC/B;;IAGA,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,QAAQ,CAAC,KAAoB,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACpB;;IAGA,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;IACtB;AAEA,IAAA,WAAW,CAAC,QAAkB,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;;AAGA,IAAA,kBAAkB,CAAC,MAAc,EAAA;QAC/B,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;IACxC;IAEA,kBAAkB,CAAC,MAAc,EAAE,OAAwB,EAAA;QACzD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1C;IAEA,qBAAqB,GAAA;QACnB,OAAO,IAAI,CAAC,cAAc;IAC5B;;AAGA,IAAA,OAAO,wBAAwB,CAC7B,GAAoB,EACpB,QAAkB,EAClB,WAAqC,EAAA;AAErC,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAA2B;AAC9C,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;AAEjC,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE;AACzB,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AACzC,YAAA,IAAI,CAAC,IAAI;gBAAE;AACX,YAAA,MAAM,cAAc,GAAG,CAAC,CAAC,eAAe,EAAE,MAAM;AAChD,YAAA,MAAM,eAAe,GAAG,CAAC,CAAC,eAAe,EAAE,OAAO;AAClD,YAAA,MAAM,gBAAgB,GAAG,CAAC,CAAC,eAAe,EAAE,aAAa;;YAEzD,IAAI,GAAG,GAA6B,EAAE;AACtC,YAAA,IAAI;AACF,gBAAA,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,UAAU,EAAE;AAC7C,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC;wBAChC,MAAM,EAAE,CAAC,CAAC,MAAM;wBAChB,WAAW,EAAE,WAAW,IAAI,EAAE;wBAC9B,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,wBAAA,MAAM,EAAE,SAAS;AAClB,qBAAA,CAAC;;AAEF,oBAAA,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;;AAEpB,wBAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;oBACvB;yBAAO;AACL,wBAAA,GAAG,GAAG,KAAK,IAAI,EAAE;oBACnB;gBACF;YACF;AAAE,YAAA,MAAM;;YAER;;AAEA,YAAA,MAAM,MAAM,GAAG;gBACb,GAAG,IAAI,CAAC,MAAM;gBACd,GAAG,GAAG,CAAC,MAAM;AACb,gBAAA,GAAG,cAAc;aAClB;AACD,YAAA,MAAM,OAAO,GAAG;gBACd,GAAG,IAAI,CAAC,OAAO;gBACf,GAAG,GAAG,CAAC,OAAO;AACd,gBAAA,GAAG,eAAe;aACnB;AACD,YAAA,MAAM,aAAa,GAAG;gBACpB,GAAG,IAAI,CAAC,aAAa;gBACrB,GAAG,GAAG,CAAC,aAAa;AACpB,gBAAA,GAAG,gBAAgB;aACpB;AACD,YAAA,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;QACvD;AACA,QAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE;IAC9B;AAEA,IAAA,OAAO,UAAU,CACf,GAAoB,EACpB,QAAkB,EAClB,cAA4C,EAAA;QAE5C,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAiB;YACtC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YACnE,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACnE,YAAA,IAAI,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;AAC/B,YAAA,IAAI,WAA0C;AAC9C,YAAA,IAAI,WAA+B;YACnC,IAAI,OAAO,EAAE;gBACX,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;AACnD,gBAAA,IAAI,QAAQ;oBAAE,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAQ;YACtE;YACA,IAAI,CAAC,eAAe,EAAE;;AAEpB,gBAAA,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW;AACzC,sBAAE,WAAW,CAAC,CAAC;sBACb,WAAW;YACjB;YACA,IAAI,OAAO,EAAE;gBACX,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;AACnD,gBAAA,IAAI,QAAQ;AACV,oBAAA,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YAClE;YACA,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,cAAc,CAAC,mBAAmB,CAClE,WAAW,EACX,WAAW,EACX,QAAQ,EACR,CAAA,YAAA,EAAe,OAAO,EAAE,MAAM,IAAI,EAAE,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EACrD,CAAC,CAAC,MAAM,CAAC,MACX,OAAO,OAAO,EAAE,MAAM,IAAI,EAAE,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE,CACrE;YACD,OAAO;gBACL,EAAE,EAAE,CAAC,CAAC,EAAE;AACR,gBAAA,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE;AACvB,gBAAA,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE;AACvB,gBAAA,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,gBAAA,eAAe,EAAE,eAAe,IAAI,SAAS;gBAC7C,OAAO;gBACP,YAAY;AACZ,gBAAA,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW;AACtC,sBAAE,CAAC,GAAG,WAAW;AACjB,sBAAE,SAAS;gBACb,WAAW;AACX,gBAAA,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;aACjD;AACH,QAAA,CAAC,CAAC;IACJ;;IAGA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;IAC7B;;IAGA,OAAO,mBAAmB,CACxB,WAA0C,EAC1C,WAA+B,EAC/B,QAAkB,EAClB,SAAiB,EAAA;AAKjB,QAAA,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE;AAChC,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;AAC1C,QAAA,MAAM,QAAQ,GAAG,OAAO,GAAG,WAAW,GAAG,CAAC,WAAW,CAAC;;AAGtD,QAAA,MAAM,WAAW,GAAG,CAAC,MAAc,KAAI;YACrC,OAAO,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC;AACtD,QAAA,CAAC;;QAGD,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;AAC3C,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC;;AAG3D,QAAA,MAAM,cAAc,GAAG,CACrB,CAAU,KAC8B;AACxC,YAAA,MAAM,MAAM,GAAG,oBAAoB,CAAC,CAAC,CAAC;AACtC,YAAA,MAAM,OAAO,GAAG,mBAAmB,CAAC,CAAC,CAAC;YAEtC,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,MAAM,EAAE;AACX,oBAAA,MAAM,IAAI,KAAK,CACb,CAAA,wCAAA,EAA2C,SAAS,CAAA,YAAA,EAAe,QAAQ,CAAC,IAAI,CAC9E,GAAG,CACJ,CAAA,CAAE,CACJ;gBACH;gBACA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC9B,oBAAA,MAAM,IAAI,KAAK,CACb,CAAA,qBAAA,EAAwB,MAAM,KAAK,SAAS,CAAA,YAAA,EAAe,QAAQ,CAAC,IAAI,CACtE,GAAG,CACJ,CAAA,CAAE,CACJ;gBACH;YACF;iBAAO,IAAI,MAAM,EAAE;;AAEjB,gBAAA,OAAO,CAAC,IAAI,CACV,CAAA,aAAA,EAAgB,MAAM,CAAA,yCAAA,EAA4C,SAAS,CAAA,GAAA,EAAM,WAAW,CAAA,IAAA,EAAO,WAAW,CAAA,CAAE,CACjH;YACH;AAEA,YAAA,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE;AACnD,QAAA,CAAC;QAED,IAAI,QAAQ,EAAE;YACZ,OAAO;AACL,gBAAA,YAAY,EAAE,OAAO,CAAU,EAAE,MAAmB,KAAI;oBACtD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC;AAC7C,oBAAA,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC;AAC/B,oBAAA,IAAI,CAAC,GAAG;AAAE,wBAAA,OAAO,OAAO;AACxB,oBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;wBACxB,OAAO,MAAM,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;oBAChD;AACA,oBAAA,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;gBAC7B,CAAC;aACF;QACH;;AAGA,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC;QAC/D,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,EAAE;QACX;QAEA,OAAO;AACL,YAAA,OAAO,EAAE,CAAC,CAAU,KAAI;gBACtB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC;AAC7C,gBAAA,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC;AAC/B,gBAAA,IAAI,CAAC,GAAG;AAAE,oBAAA,OAAO,OAAO;AACxB,gBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;AACxB,oBAAA,MAAM,IAAI,KAAK,CACb,6CAA6C,SAAS,CAAA,CAAA,CAAG,CAC1D;gBACH;AACA,gBAAA,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;YAC7B,CAAC;SACF;IACH;AACD;;ACvRD;;;AAGG;MACU,YAAY,CAAA;AAAzB,IAAA,WAAA,GAAA;AACU,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAGxB;IA8BL;IA5BE,EAAE,CACA,KAAQ,EACR,OAAgC,EAAA;QAEhC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC;QACpE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAiC;AACrE,QAAA,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;QAChB,OAAO,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IAClC;IAEA,IAAI,CACF,KAAQ,EACR,OAA2B,EAAA;QAE3B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,GAAG;YAAE;QACV,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACrC,YAAA,IAAI;gBACF,OAAO,CAAC,OAAO,CAAC;YAClB;YAAE,OAAO,GAAG,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,CAAA,SAAA,EAAY,KAAK,CAAA,SAAA,CAAW,EAAE,GAAG,CAAC;YAClD;QACF;IACF;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;AACD;;AC1CD;;AAEG;MACU,iBAAiB,CAAA;AAA9B,IAAA,WAAA,GAAA;AACU,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAA4B;QACjD,IAAA,CAAA,iBAAiB,GAAG,CAAC;IAiI/B;AA/HE;;AAEG;IACH,gBAAgB,CACd,WAAmB,EACnB,OAGC,EAAA;QAED,MAAM,EAAE,GAAiB,CAAA,GAAA,EAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE;AACzD,QAAA,MAAM,GAAG,GAAe;YACtB,EAAE;AACF,YAAA,UAAU,EAAE,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;YAClC,cAAc,EAAE,IAAI,GAAG,EAAE;AACzB,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,IAAI,KAAK;AAC1D,YAAA,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;SACtC;QACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC;AAC7B,QAAA,OAAO,GAAG;IACZ;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,EAAgB,EAAA;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;IACjC;AAEA;;AAEG;IACH,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,WAAW;IACzB;AAEA;;AAEG;IACH,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC;IAClC;AAEA;;AAEG;IACH,gBAAgB,CACd,EAAgB,EAChB,KAAoC,EAAA;QAEpC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,GAAG;YAAE;AACV,QAAA,IAAI,GAAG,CAAC,OAAO,GAAG,CAAC;AAAE,YAAA,OAAO;;QAG5B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE;AACjC,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,OAAO;YAAE,GAAG,CAAC,OAAO,EAAE;IAChC;AAEA;;;;;;AAMG;AACH,IAAA,uBAAuB,CACrB,MAAc,EACd,iBAA0B,EAC1B,KAAwE,EACxE,KAAoC,EAAA;QAEpC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,iBAAiB,EAAE;;AAErB,YAAA,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC;AACtB,YAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;AACjC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,gBAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;AACpB,gBAAA,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE;AACtB,gBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AAChB,gBAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;oBACrB,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE;AAC3B,wBAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM;wBAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC1B,4BAAA,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AACtB,4BAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;wBACtB;oBACF;gBACF;YACF;QACF;;QAGA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE;AAC3C,YAAA,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE;AACzB,gBAAA,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B;QACF;;AAGA,QAAA,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE;YACzB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,YAAA,IAAI,IAAI;AAAE,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;QAC1C;IACF;AAEA;;AAEG;IACH,UAAU,GAAA;QACR,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE;YAC3C,IAAI,GAAG,CAAC,OAAO;gBAAE,GAAG,CAAC,OAAO,EAAE;QAChC;IACF;AAEA;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;IAC1B;AACD;;ACxID,MAAM,gBAAgB,GAAG;AACzB,IAAI,KAAK,EAAE,CAAC;AACZ,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,KAAK,EAAE,CAAC;AACZ,IAAI,MAAM,EAAE,CAAC;AACb,CAAC;;ACGD;;AAEG;MACU,cAAc,CAAA;IAQzB,WAAA,CACE,cAA8B,EAC9B,YAA0B,EAC1B,kBAAuC,EACvC,QAAmB,EACnB,WAAqC,EAAA;AAZ/B,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,GAAG,EAAkB;QAKhD,IAAA,CAAA,WAAW,GAA4B,EAAE;AAS/C,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC5C,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,EAAE;IACtC;AAEA,IAAA,WAAW,CAAC,QAAkB,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;AAEA,IAAA,cAAc,CAAC,WAAoC,EAAA;AACjD,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;IAChC;AAEA;;AAEG;AACH,IAAA,wBAAwB,CAAC,MAAc,EAAA;;QAErC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;YAAE;QACX,UAAU,CAAC,MAAK;AACd,YAAA,KAAK,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;QAC3C,CAAC,EAAE,CAAC,CAAC;IACP;AAEA;;AAEG;IACK,MAAM,uBAAuB,CAAC,MAAc,EAAA;AAClD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAS;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5C,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc;QAC1C,IAAI,OAAO,cAAc,KAAK,UAAU;YAAE;AAC1C,QAAA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9D,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;;AAG5C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM;QAC5C,MAAM,YAAY,GAAG,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC;QACxD,MAAM,SAAS,GACb,YAAY,IAAI,gBAAgB,CAAC,KAAK,IAAI,YAAY,KAAK,QAAQ;QACrE,IAAI,SAAS,EAAE;YACb,OAAO,CAAC,IAAI,CAAC,CAAA,MAAA,EAAS,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAA,sBAAA,CAAwB,CAAC;QACtE;AAEA,QAAA,IAAI,CAAuC;AAC3C,QAAA,IAAI;YACF,MAAM,GAAG,GAAG,cAAc,CAAC;gBACzB,MAAM;AACN,gBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;gBACnC,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;AAC1B,aAAA,CAAC;AACF,YAAA,CAAC,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC;QACnC;AAAE,QAAA,MAAM;;YAEN,IAAI,SAAS,EAAE;gBACb,OAAO,CAAC,IAAI,CACV,CAAA,MAAA,EAAS,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAA,6BAAA,CAA+B,CAC9D;YACH;YACA;QACF;;QAGA,IAAI,SAAS,EAAE;YACb,OAAO,CAAC,IAAI,CAAC,CAAA,MAAA,EAAS,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAA,qBAAA,CAAuB,CAAC;QACrE;;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK;YAAE;QAE5D,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC;AAC/D,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO;;AAGtB,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,QAAQ;YAAE;AAEf,QAAA,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE;AACnD,QAAA,MAAM,OAAO,GAAG,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE;AACtD,QAAA,MAAM,aAAa,GAAG;YACpB,GAAG,QAAQ,CAAC,aAAa;YACzB,GAAG,CAAC,EAAE,aAAa;SACpB;QACD,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE;QAC/C,MAAM,MAAM,GAAG,QAAQ;;AAEvB,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE;QAErD,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC;;QAGpD,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC;;AAGjE,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE;AACnC,YAAA,MAAM,EAAE,eAAe;AACvB,YAAA,eAAe,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI,EAAE;AACpC,SAAA,CAAC;IACJ;AACD;;ACzHD;;AAEG;MACU,eAAe,CAAA;IAY1B,WAAA,CACE,cAA8B,EAC9B,YAA0B,EAC1B,iBAAoC,EACpC,cAA+B,EAC/B,kBAAuC,EAAA;AAVjC,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,GAAG,EAGhC;AASD,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;AAC1C,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;IAC9C;AAEA;;AAEG;AACH,IAAA,qBAAqB,CAAC,kBAAuC,EAAA;AAC3D,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;IAC9C;AAEA;;;;AAIG;AACH,IAAA,SAAS,CACP,SAAiB,EACjB,SAAiB,EACjB,KAAc,EACd,aAAiC,EAAA;;QAGjC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC;QACtD,IAAI,CAAC,OAAO,EAAE;;YAEZ;QACF;AACA,QAAA,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,KAAK;AAClC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,MAAM,EAAE,SAAS;YACjB,KAAK;AACL,YAAA,EAAE,EAAE,QAAQ;AACZ,YAAA,aAAa,EAAE,oBAAoB,CAAC,KAAK,CAAC;AAC3C,SAAA,CAAC;;QAGF,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;QAC5C,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAC3B,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CACtE;QAED,MAAM,iBAAiB,GACrB,aAAa,KAAK,SAAS,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC;AAEvD,QAAA,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE;;AAExB,YAAA,IAAI,oBAAmD;YACvD,IAAI,iBAAiB,EAAE;AACrB,gBAAA,oBAAoB,GAAG,IAAI,GAAG,EAAgB;AAC9C,gBAAA,KAAK,MAAM,EAAE,IAAI,aAAc,EAAE;oBAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;AACpD,oBAAA,IAAI,CAAC,GAAG;wBAAE;AACV,oBAAA,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;wBAAE;oBACvC,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;wBAAE;AAC7C,oBAAA,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B;AACA,gBAAA,IAAI,oBAAoB,CAAC,IAAI,KAAK,CAAC;AAAE,oBAAA,SAAS;YAChD;;YAGA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;AAC9C,YAAA,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC;AACpC,YAAA,IAAI,OAAO,IAAI,CAAC,OAAO,EAAE;gBACvB,MAAM,GAAG,GAAG,IAAI,KAAK,CACnB,CAAA,OAAA,EAAU,SAAS,IAAI,SAAS,CAAA,iDAAA,EAC9B,CAAC,CAAC,aACH,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,CACf;AACD,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,oBAAA,IAAI,EAAE,cAAc;oBACpB,MAAM,EAAE,CAAC,CAAC,EAAE;AACZ,oBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5D,oBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;oBAC5D,GAAG;AACJ,iBAAA,CAAC;gBACF;YACF;;AAGA,YAAA,IAAI,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC;AACpC,YAAA,MAAM,aAAa,GAAG,CAAC,CAAU,KAAI;AACnC,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AAC5D,gBAAA,IAAI,CAAC,OAAO;oBAAE;;AAGd,gBAAA,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS;oBAAE;AAEjC,gBAAA,MAAM,UAAU,GACd,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACnE,IAAI,IAAI,GAAG,CAAC;;gBAEZ,IAAI,UAAU,EAAE;AACd,oBAAA,MAAM,OAAO,GAAG,CAAC,CAAU,KACzB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACnD,oBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;oBACzD,IAAI,CAAC,OAAO,EAAE;AACZ,wBAAA,OAAO,GAAG,IAAI,GAAG,EAAkC;AACnD,wBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBACtD;AACA,oBAAA,IAAI,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;oBAC5C,IAAI,CAAC,SAAS,EAAE;AACd,wBAAA,SAAS,GAAG,IAAI,GAAG,EAAqB;wBACxC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;oBACzC;AACA,oBAAA,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC/B,MAAM,MAAM,GAAc,EAAE;AAC5B,oBAAA,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE;wBACtB,IACE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM;4BACpC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,EACpC;4BACA,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;AACjC,4BAAA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM;AAAE,gCAAA,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;wBAC/C;oBACF;oBACA,IAAI,GAAG,MAAM;gBACf;AAEA,gBAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC5C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;gBACpC,IAAI,CAAC,IAAI,EAAE;;oBAET,IAAI,yBAAyB,GAAG,KAAK;AACrC,oBAAA,IAAI,iBAAiB,IAAI,oBAAoB,EAAE;AAC7C,wBAAA,KAAK,MAAM,EAAE,IAAI,oBAAoB,EAAE;4BACrC,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;AACpD,4BAAA,IAAI,GAAG,IAAI,GAAG,CAAC,mBAAmB,EAAE;gCAClC,yBAAyB,GAAG,IAAI;gCAChC;4BACF;wBACF;oBACF;;oBAGA,IAAI,CAAC,yBAAyB,EAAE;wBAC9B,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI;AACtC,wBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,4BAAA,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;AACvB,4BAAA,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;AACvB,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,EAAE,EAAE,OAAO;AACX,4BAAA,aAAa,EAAE,oBAAoB,CAAC,IAAI,CAAC;AAC1C,yBAAA,CAAC;wBACF,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;oBAC/D;;AAGA,oBAAA,IAAI,eAAe,GAAG,IAAI,CAAC;AAC3B,oBAAA,IAAI,iBAAiB,IAAI,oBAAoB,EAAE;wBAC7C,eAAe,GAAG,KAAK;AACvB,wBAAA,KAAK,MAAM,EAAE,IAAI,oBAAoB,EAAE;4BACrC,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;AACpD,4BAAA,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE;gCACxB,eAAe,GAAG,IAAI;gCACtB;4BACF;wBACF;oBACF;;AAGA,oBAAA,IACE,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE;wBACnC,eAAe;AACf,wBAAA,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAC5D;AACA,wBAAA,IAAI,iBAAiB,IAAI,oBAAoB,EAAE;AAC7C,4BAAA,IAAI,CAAC,kBAAkB,CAAC,oCAAoC,CAC1D,CAAC,CAAC,MAAM,CAAC,MAAM,EACf,oBAAoB,CACrB;wBACH;6BAAO;4BACL,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;wBAChE;oBACF;gBACF;AACF,YAAA,CAAC;;AAGD,YAAA,IAAI,CAAC,CAAC,YAAY,EAAE;AAClB,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,oBAAA,IAAI,EAAE,YAAY;oBAClB,MAAM,EAAE,CAAC,CAAC,EAAE;oBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,oBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5D,oBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC7D,iBAAA,CAAC;AACF,gBAAA,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE;AACxC,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;AAC1B,gBAAA,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AACjB,gBAAA,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI;gBACvB,IAAI,CAAC,iBAAiB,EAAE;;AAEtB,oBAAA,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC;gBACtB;AACA,gBAAA,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM;AAC7B,gBAAA,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG;AACxB,qBAAA,IAAI,CAAC,CAAC,SAAS,KAAI;AAClB,oBAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;wBAChB,aAAa,CAAC,SAAS,CAAC;AACxB,wBAAA,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK;wBACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;AACrC,wBAAA,CAAC,CAAC,KAAK,CAAC,cAAc,GAAG,QAAQ;wBACjC,IAAI,CAAC,iBAAiB,EAAE;;4BAEtB,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;AAC9B,4BAAA,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS;AAC7B,4BAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,gCAAA,IAAI,EAAE,WAAW;gCACjB,MAAM,EAAE,CAAC,CAAC,EAAE;gCACZ,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,gCAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5D,gCAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5D,gCAAA,UAAU,EAAE,QAAQ;AACrB,6BAAA,CAAC;wBACJ;oBACF;AACF,gBAAA,CAAC;AACA,qBAAA,KAAK,CAAC,CAAC,GAAG,KAAI;oBACb,IAAI,GAAG,CAAC,OAAO;wBAAE;AACjB,oBAAA,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK;oBACxB,IAAI,CAAC,iBAAiB,EAAE;AACtB,wBAAA,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG;oBACzB;AACA,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,wBAAA,IAAI,EAAE,cAAc;wBACpB,MAAM,EAAE,CAAC,CAAC,EAAE;AACZ,wBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5D,wBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;wBAC5D,GAAG;AACJ,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;YACN;iBAAO;;AAEL,gBAAA,IAAI,CAAC,CAAC,OAAO,EAAE;AACb,oBAAA,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;gBAC9B;gBACA,aAAa,CAAC,OAAO,CAAC;YACxB;QACF;IACF;AAEA;;AAEG;AACH,IAAA,sBAAsB,CACpB,SAAiB,EACjB,SAAiB,EACjB,KAAc,EACd,aAAgC,EAAA;QAEhC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC;IAC5D;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,MAAc,EAAA;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;YAAE;;QAEX,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC;AAC/D,QAAA,MAAM,kBAAkB,GAAG,QAAQ,EAAE;AACnC,cAAE,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AACvC,cAAE,IAAI,GAAG,EAAU;;QAErB,MAAM,aAAa,GACjB,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG;AAC5B,cAAE,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB;cAC9B,SAAS;AACf,QAAA,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;;AAE1D,YAAA,IAAI,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBAClC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC;YACtD;QACF;IACF;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,MAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC;IACvC;AAEA;;AAEG;IACH,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;IAChC;AACD;;ACjUD;;AAEG;MACU,kBAAkB,CAAA;IAQ7B,WAAA,CACE,cAA8B,EAC9B,YAA0B,EAC1B,iBAAoC,EACpC,eAAiC,EACjC,kBAAuC,EACvC,WAAqC,EAAA;QAR/B,IAAA,CAAA,WAAW,GAA4B,EAAE;AAU/C,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;AAC1C,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC5C,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,EAAE;IACtC;AAEA,IAAA,cAAc,CAAC,WAAoC,EAAA;AACjD,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;IAChC;AAEA;;AAEG;AACH,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,KAAK;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC5C,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC;AAC/D,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;AACrC,QAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;YACvB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;AAAE,gBAAA,OAAO,KAAK;QACrD;AACA,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACH,IAAA,kBAAkB,CAAC,MAAc,EAAA;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AAClD,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,EAAE;AACxB,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;QAEpB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC;AAC/D,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,IAAI,EAAE;AAC5C,QAAA,MAAM,WAAW,GAAG,QAAQ,EAAE,aAAa,IAAI,EAAE;;AAGjD,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AAC7D,QAAA,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACzE;;AAGD,QAAA,MAAM,cAAc,GAA4B;AAC9C,YAAA,GAAG,WAAW;AACd,YAAA,GAAG,WAAW;SACf;;QAGD,MAAM,SAAS,GAA4B,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;;QAG7D,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC5C,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB;AACG,aAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM;AACxC,aAAA,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAC/B;;;;AAKD,QAAA,KAAK,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;YACnE,IAAI,YAAY,KAAK,SAAS;gBAAE;AAChC,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;AAAE,gBAAA,SAAS;AAClC,YAAA,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,SAAS;AAAE,gBAAA,SAAS;AAC9C,YAAA,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;AAAE,gBAAA,SAAS;;YAGzC,SAAS,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC,YAAY,CAAC;QACnD;AAEA,QAAA,OAAO,SAAS;IAClB;AAEA;;AAEG;AACH,IAAA,sBAAsB,CACpB,MAAc,EACd,IAAsB,EACtB,MAA+B,EAC/B,KAAa,EACb,WAAwB,EACxB,aAAiC,EACjC,OAGC,EAAA;AAED,QAAA,MAAM,WAAW,GACf,OAAO,EAAE,WAAW;AACpB,aAAC,CAAC,MAAc,EAAE,KAAc,KAAI;AAClC,gBAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC;AACtE,YAAA,CAAC,CAAC;AACJ,QAAA,MAAM,cAAc,GAClB,OAAO,EAAE,cAAc;aACtB,CAAC,CAAS,KAAI;gBACb,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAChE,YAAA,CAAC,CAAC;;QAGJ,MAAM,GAAG,GAIG,CACV,KAAe,EACf,OAAe,EACf,OAAiC,KAC/B;AACF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM;YAC5C,MAAM,YAAY,GAAG,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC;YACxD,MAAM,cAAc,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;;YAGnD,IAAI,cAAc,IAAI,YAAY,IAAI,YAAY,KAAK,QAAQ,EAAE;gBAC/D,MAAM,UAAU,GAAG;AACjB,sBAAE,CAAA,CAAA,EAAI,MAAM,CAAC,OAAO,CAAC,OAAO;yBACvB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;yBAC3C,IAAI,CAAC,GAAG,CAAC,CAAA;sBACZ,EAAE;AACN,gBAAA,MAAM,WAAW,GAAG,CAAA,MAAA,EAAS,KAAK,IAAI,MAAM,CAAA,CAAA,EAC1C,IAAI,CAAC,MACP,CAAA,EAAA,EAAK,OAAO,CAAA,EAAG,UAAU,EAAE;gBAC3B,QAAQ,KAAK;AACX,oBAAA,KAAK,OAAO;AACV,wBAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;wBACzB;AACF,oBAAA,KAAK,MAAM;AACT,wBAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;wBACzB;AACF,oBAAA,KAAK,MAAM;AACT,wBAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;wBACzB;AACF,oBAAA,KAAK,OAAO;AACV,wBAAA,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;wBAC1B;;YAEN;AACF,QAAA,CAAC;;QAGD,MAAM,mBAAmB,GAAG,aAAa;QAEzC,OAAO;YACL,MAAM;YACN,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,QAAQ,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AACnD,YAAA,IAAI,EAAE,WAAW;YACjB,oBAAoB,EAAE,MAAK;AACzB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,MAAM,CAAC;YACtD,CAAC;YACD,qBAAqB,EAAE,MAAK;AAC1B,gBAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;;AAEpC,oBAAA,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,mBAAmB,CAAC;gBACjE;YACF,CAAC;YACD,QAAQ,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC;YACpC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK;YACL,WAAW;YACX,cAAc;YACd,GAAG;SACJ;IACH;AAEA;;AAEG;AACH,IAAA,qBAAqB,CAAC,MAAc,EAAA;AAClC,QAAA,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC;IAC5C;AAEA;;AAEG;IACH,oCAAoC,CAClC,MAAc,EACd,aAAgC,EAAA;AAEhC,QAAA,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,aAAa,CAAC;IAC3D;AAEA;;AAEG;IACH,6BAA6B,CAC3B,MAAc,EACd,aAAiC,EAAA;QAEjC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE;YAAE;;QAGxC,IAAI,aAAa,EAAE;AACjB,YAAA,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE;AAC9B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC;QACF;AACA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE;;QAGhC,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAEvD,IACE,MAAM,CAAC,UAAU;AACjB,YAAA,IAAI,CAAC,eAAe;YACpB,GAAG,GAAG,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,UAAU,EAC9C;;AAEA,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACvC,YAAA,IAAI,CAAC,MAAM,IAAI,CAAC;YAChB,MAAM,GAAG,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE;AAC7C,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;YACxD;QACF;AACA,QAAA,IAAI,CAAC,eAAe,GAAG,GAAG;AAE1B,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC;QAChB,MAAM,GAAG,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE;AAC7C,QAAA,IAAI,CAAC,WAAW,GAAG,GAAG;;QAGtB,MAAM,mBAAmB,GACvB,aAAa;AACb,aAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG;AAC7B,kBAAE,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB;kBAC9B,SAAS,CAAC;QAEhB,MAAM,QAAQ,GAAG,CACf,KAAa,EACb,cAAuC,EACvC,mBAAuC,EACvC,MAAmB,KACjB;;YAEF,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,IAAI,GAAG,CAAC,EAAE;AACvD,gBAAA,KAAK,MAAM,EAAE,IAAI,mBAAmB,EAAE;oBACpC,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;AACpD,oBAAA,IAAI,GAAG;wBAAE,GAAG,CAAC,OAAO,EAAE;gBACxB;YACF;AACA,YAAA,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE;AACxC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AACpB,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;AACtB,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG;AAC5B,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC;AACvB,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC;YACtC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC;AAE5C,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,IAAI,QAAQ;AAChD,YAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AACrB,gBAAA,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;oBAClD,IAAI,CAAC,KAAK,UAAU;AAAE,wBAAA,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACzC;YACF;AAEA,YAAA,IAAI,SAAqC;YACzC,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE;AAC5C,gBAAA,SAAS,GAAG,UAAU,CACpB,MAAM,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,EACjC,MAAM,CAAC,SAAS,CACjB;YACH;AAEA,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,sBAAsB,CACrC,MAAM,EACN,IAAI,EACJ,cAAc,EACd,KAAK,EACL,UAAU,CAAC,MAAM,EACjB,mBAAmB,EACnB;AACE,gBAAA,WAAW,EAAE,CAAC,MAAc,EAAE,KAAc,KAAI;AAC9C,oBAAA,MAAM,CAAC,GAAG,MAAM,CAAC,gBAAgB,IAAI,QAAQ;;;AAG7C,oBAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,GAAG,CAAC,KAAK,CAAC;wBAAE;oBAC9C,IAAI,CAAC,KAAK,OAAO,IAAI,KAAK,KAAK,IAAI,CAAC,WAAW;wBAAE;AACjD,oBAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAC5B,MAAM,EACN,MAAM,EACN,KAAK,EACL,mBAAmB,CACpB;gBACH,CAAC;AACD,gBAAA,cAAc,EAAE,CAAC,CAAS,KAAI;oBAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9D,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,wBAAA,IAAI,EAAE,eAAe;wBACrB,MAAM;wBACN,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,KAAK;AACL,wBAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;AAC9B,qBAAA,CAAC;gBACJ,CAAC;AACF,aAAA,CACF;AAED,YAAA,MAAM,IAAI,GAAG,OAAO,OAAe,KAAI;gBACrC,IAAI,QAAQ,GAAG,KAAK;AACpB,gBAAA,IAAI;AACF,oBAAA,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE;AAC3B,wBAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC;AACjC,wBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC;AAC9C,wBAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC;oBAClC;oBACA,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,cAAc,EAAE,GAAG,CAAC;gBAC3D;gBAAE,OAAO,GAAG,EAAE;;AAEZ,oBAAA,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE;AAC7B,wBAAA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM;wBACvC,IACE,MAAM,KAAK,QAAQ;AACnB,4BAAA,MAAM,KAAK,UAAU;AACrB,4BAAA,MAAM,KAAK,cAAc;4BACzB,MAAM,KAAK,gBAAgB,EAC3B;AACA,4BAAA,OAAO;wBACT;oBACF;oBACA,QAAQ,GAAG,IAAI;AACf,oBAAA,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG;AAC1B,oBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;AAC1B,oBAAA,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE;AAC5C,wBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC;AAC5D,wBAAA,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC9C,wBAAA,OAAO,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;oBAC1B;AACA,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,wBAAA,IAAI,EAAE,UAAU;wBAChB,MAAM;wBACN,KAAK;wBACL,GAAG;AACJ,qBAAA,CAAC;gBACJ;wBAAU;;oBAER,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;wBACxC;oBACF;AAEA,oBAAA,IAAI,SAAS;wBAAE,YAAY,CAAC,SAAS,CAAC;AACtC,oBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC;AACzC,oBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC;AACxC,oBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;oBAC5D,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;oBACjC,IAAI,CAAC,KAAK,CAAC,cAAc;wBACvB,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC;8BACjC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;8BAClC,SAAS;AACf,oBAAA,IAAI,CAAC,QAAQ;AAAE,wBAAA,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS;;AAG/C,oBAAA,MAAM,WAAW,GACf,UAAU,CAAC,MAAM,CAAC,OAAO;AACzB,yBAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU;AACtC,4BAAA,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,cAAc;AAC3C,4BAAA,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,gBAAgB,CAAC;oBAClD,IAAI,CAAC,WAAW,EAAE;AAChB,wBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,4BAAA,IAAI,EAAE,WAAW;4BACjB,MAAM;4BACN,MAAM,EAAE,IAAI,CAAC,MAAM;4BACnB,KAAK;AACL,4BAAA,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc;AACtC,yBAAA,CAAC;oBACJ;AACA,oBAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE;AAC5B,wBAAA,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc;wBACrC,QAAQ;AACT,qBAAA,CAAC;;oBAGF,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,IAAI,GAAG,CAAC,EAAE;AACvD,wBAAA,KAAK,MAAM,EAAE,IAAI,mBAAmB,EAAE;4BACpC,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;4BACpD,IAAI,GAAG,EAAE;gCACP,GAAG,CAAC,OAAO,EAAE;AACb,gCAAA,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,EAAE;AACrB,oCAAA,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CACrC,EAAE,EACF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAC/B;gCACH;4BACF;wBACF;oBACF;AAEA,oBAAA,IAAI,MAAM;AAAE,wBAAA,MAAM,EAAE;gBACtB;AACF,YAAA,CAAC;;AAGD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,gBAAA,IAAI,EAAE,YAAY;gBAClB,MAAM;gBACN,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK;AACN,aAAA,CAAC;AACF,YAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC;YAC9B,IAAI,CAAC,CAAC,CAAC;AACT,QAAA,CAAC;AAED,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,IAAI,QAAQ;AAChD,QAAA,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,EAAE;;YAEtD;QACF;AACA,QAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AACpB,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;AACxD,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI;AAAE,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;YAEhD,MAAM,WAAW,GAAG,MAAK;AACvB,gBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC;oBAAE;gBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAC/B,gBAAA,IAAI,CAAC,IAAI;oBAAE;AACX,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK;;gBAE7B,MAAM,mBAAmB,GACvB,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG;AAC5B,sBAAE,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB;sBAC9B,SAAS;AACf,gBAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAK;;AAE1D,oBAAA,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAC5B,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC;AAED,YAAA,WAAW,EAAE;YACb;QACF;;AAGA,QAAA,QAAQ,CAAC,GAAG,EAAE,eAAe,EAAE,mBAAmB,CAAC;IACrD;AAEA;;AAEG;IACH,oBAAoB,CAClB,IAAiB,EACjB,MAAsD,EAAA;AAEpD,QAAA,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;YAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC;YACnD,IAAI,KAAK,EAAE;;;gBAGT,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,gBAAgB,EAAE;AACxD,oBAAA,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;AACjC,wBAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,GAAG,EAAU;oBAClD;AACA,oBAAA,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC;gBACzC;;AAEA,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,oBAAA,IAAI,EAAE,WAAW;oBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,KAAK;AACL,oBAAA,SAAS,EAAE,IAAI;AAChB,iBAAA,CAAC;YACJ;AACF,YAAA,IAAI;AACF,gBAAA,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;YAC1B;AAAE,YAAA,MAAM;;YAER;QACF;AACA,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AAC9B,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;IACjB;AAEA;;;AAGG;AACH,IAAA,cAAc,CACZ,OAAiB,EACjB,MAAA,GAAwC,gBAAgB,EAAA;AAExD,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE;AAE1B,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,OAAO,CAAC;AACzC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;AACjC,QAAA,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;;AAG5C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;AACvB,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE;AACzB,YAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;AAEnB,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE;AACjC,oBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;oBACnC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC1B,wBAAA,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AACtB,wBAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;oBACtB;gBACF;YACF;QACF;;AAGA,QAAA,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,YAAA,IAAI,CAAC,IAAI;gBAAE;AAEX,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC;AAEvC,YAAA,IAAI,CAAC,MAAM,IAAI,CAAC;AAChB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,YAAA,MAAM,MAAM,GAAG,MAAM,KAAK,UAAU,GAAG,UAAU,GAAG,WAAW;AAC/D,YAAA,IAAI,CAAC,WAAW,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,MAAM,EAAE;QAChE;;AAGA,QAAA,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE;YAC7B,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAC5C,MAAM,EACN,KAAK;YACL,KAAK,EACL,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAC/B;QACH;IACF;AACD;;AChhBD;MACa,YAAY,CAAA;AAavB,IAAA,WAAA,GAAA;;QAHQ,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,WAAW,GAA4B,EAAE;;AAI/C,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE;AAC1C,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE;AACtC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,EAAE;;;AAIhD,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CACtC,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,YAAY,EACjB,IAAI;AACJ,QAAA,SAAS;AACT,QAAA,SAAS;SACV;;;;;;QAOD,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CACxC,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,cAAc;AACnB,QAAA,IAAI;SACL;;QAGD,IAAI,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,CAC9C,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,eAAe;AACpB,QAAA,IAAI;QACJ,IAAI,CAAC,WAAW,CACjB;;QAGD,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,CAAC;IACrE;AAEA,IAAA,OAAO,MAAM,CACX,GAAoB,EACpB,QAAkB,EAClB,IAAgD,EAAA;AAEhD,QAAA,MAAM,EAAE,GAAG,IAAI,YAAY,EAAE;QAC7B,EAAE,CAAC,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,EAAE;;AAGxC,QAAA,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC;AACvC,QAAA,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC;QACvC,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC,WAAW,CAAC;QAChD,EAAE,CAAC,kBAAkB,CAAC,cAAc,CAAC,EAAE,CAAC,WAAW,CAAC;;AAGpD,QAAA,MAAM,OAAO,GAAG,cAAc,CAAC,wBAAwB,CACrD,GAAG,EACH,QAAQ,EACR,EAAE,CAAC,WAAW,CACf;QACD,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE;YAC3C,EAAE,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC;QACvD;;AAGA,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE;AACzB,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AACzC,YAAA,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,CAAC,CAAC,MAAM,CAAA,CAAE,CAAC;AAC5D,YAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AACpD,YAAA,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,kBAAA,EAAqB,IAAI,CAAC,UAAU,CAAA,CAAE,CAAC;YACjE,IAAI,GAAG,CAAC,YAAY;AAAE,gBAAA,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACjD,YAAA,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC;gBAChC,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,aAAA,CAAC;AACF,YAAA,MAAM,EAAE,GAAqB;gBAC3B,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,KAAK,EAAE,EAAE;gBACT,OAAO;gBACP,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,gBAAA,MAAM,EAAE;oBACN,GAAG,GAAG,CAAC,MAAM;oBACb,GAAG,IAAI,CAAC,MAAM;AACd,oBAAA,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM;AACpB,iBAAA;gBACD,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,gBAAA,MAAM,EAAE,CAAC;gBACT,iBAAiB,EAAE,IAAI,GAAG,EAAE;gBAC5B,gBAAgB,EAAE,IAAI,GAAG,EAAE;AAC3B,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,QAAQ,EAAE,CAAC;AACZ,iBAAA;gBACD,iBAAiB,EAAE,IAAI,GAAG,EAAE;aAC7B;YACD,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACzC;;AAGA,QAAA,MAAM,KAAK,GAAG,cAAc,CAAC,UAAU,CACrC,GAAG,EACH,QAAQ,EACR,EAAE,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAC1C;AACD,QAAA,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAGjC,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE;AACpC,YAAA,EAAE,CAAC,cAAc,CAAC,wBAAwB,CAAC,MAAM,CAAC;QACpD;AAEA,QAAA,OAAO,EAAE;IACX;IAEA,EAAE,CACA,KAAQ,EACR,OAAgC,EAAA;QAEhC,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;IAC7C;IAEA,SAAS,CAAC,MAAc,EAAE,MAA+B,EAAA;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,CAAA,CAAE,CAAC;QAEvD,IAAI,UAAU,GAAG,KAAK;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AAClD,QAAA,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACpD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAC3B,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAChE;AACD,YAAA,IAAI,UAAU;gBAAE;;AAGhB,YAAA,IAAI,KAAK,KAAK,SAAS,IAAI,QAAQ,EAAE;AACnC,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC;;gBAE/D,MAAM,MAAM,GAAG;sBACX,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM;AACxC,sBAAE;0BACA,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;0BAClC,SAAS;gBAEb,IAAI,MAAM,EAAE;oBACV,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;AAC3C,oBAAA,IAAI,QAAQ,EAAE,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;;AAEnD,wBAAA,MAAM,YAAY,GAAG,CAAA,wBAAA,EAA2B,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,OAAA,EAAU,MAAM,CAAA,GAAA,EAAM,IAAI,CAAC,SAAS,CAClG,KAAK,CACN,EAAE;AACH,wBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,4BAAA,IAAI,EAAE,kBAAkB;4BACxB,MAAM;4BACN,MAAM;4BACN,MAAM;4BACN,KAAK;AACL,4BAAA,OAAO,EAAE,YAAY;AACtB,yBAAA,CAAC;;wBAEF;oBACF;gBACF;YACF;YAEA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAChC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;YACrC,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,oBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC5B;qBAAO;AACL,oBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK;gBAC7B;;AAEA,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;gBACvE,UAAU,GAAG,IAAI;YACnB;QACF;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;;YAEhB,IAAI,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,MAAM,CAAC;AACnE,gBAAA,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,MAAM,CAAC;;AAE/D,YAAA,IAAI,UAAU;AAAE,gBAAA,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,MAAM,CAAC;QACtE;IACF;IAEA,SAAS,CAAC,MAAc,EAAE,MAAc,EAAA;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,OAAO,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;IAC9B;;AAGA,IAAA,iBAAiB,CACf,MAAc,EACd,OAAwB,EACxB,QAAkB,EAAA;QAElB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;YAAE;QAEX,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAClE,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC;;AAGvD,QAAA,MAAM,UAAU,GAAG,WAAW,EAAE,OAAO,IAAI,EAAE;AAC7C,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE;AACxC,QAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzD,QAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzD,QAAA,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE;YACrC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;;AAEjC,gBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAC3B,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;oBAChC,MAAM;oBACJ,MAAM;AACN,oBAAA,KAAK,EAAE,SAAS;AACpB,oBAAA,EAAE,EAAE,QAAQ;AACT,iBAAA,CAAC;YACJ;QACF;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;;AAE5C,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;AACrB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AAC5D,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AAC5D,YAAA,IAAI,WAAW,GAAkC,CAAC,CAAC,eAAe,CAAC;AACnE,YAAA,IAAI,WAAW,GAAuB,CAAC,CAAC,WAAW;AACnD,YAAA,MAAM,cAAc,GAAG,WAAW,CAAC;YACnC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE;gBAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC;AAC/D,gBAAA,WAAW,GAAG;sBACV,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;sBAChC,WAAW;;AAEf,gBAAA,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;oBACb,CAAC,CAAC,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW;AAC3C,0BAAE,WAAW,GAAG,CAAC,CAAC,IAAI;AACtB,0BAAE,WAAW,IAAI,SAAS;gBAC9B;YACF;YACA,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE;gBAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC;gBAC/D,IAAI,QAAQ,EAAE;AACZ,oBAAA,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9D,oBAAA,CAAC,CAAC,WAAW,GAAG,WAAW;gBAC7B;YACF;YACA,MAAM,IAAI,GAAG,cAAc,CAAC,mBAAmB,CAC7C,WAAW,EACX,WAAW,EACX,QAAQ,EACR,CAAA,mBAAA,EAAsB,OAAO,EAAE,MAAM,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAC5D,CAAC,CAAC,MAAM,CAAC,MACX,CAAA,IAAA,EAAO,OAAO,EAAE,MAAM,IAAI,EAAE,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE,CACrE;AACD,YAAA,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AACxB,YAAA,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY;;AAGlC,YAAA,IACE,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM;AAC1B,gBAAA,cAAc,KAAK,SAAS;gBAC5B,WAAW,KAAK,SAAS,EACzB;AACA,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC5D,IAAI,OAAO,EAAE;AACX,oBAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACjD,oBAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;;;wBAG1B,MAAM,aAAa,GACjB,OAAO,CAAC,iBAAiB,CAAC,IAAI,GAAG;AAC/B,8BAAE,IAAI,GAAG,CAAC,OAAO,CAAC,iBAAiB;8BACjC,SAAS;wBACf,IAAI,CAAC,eAAe,CAAC,SAAS,CAC5B,CAAC,CAAC,MAAM,CAAC,MAAM,EACf,CAAC,CAAC,MAAM,CAAC,MAAM,EACf,QAAQ,EACR,aAAa,CACd;oBACH;gBACF;YACF;QACF;;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC;IAChD;IAEA,MAAM,CAAC,UAAU,GAAG,KAAK,EAAA;;AAEvB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;AAC1D,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAChE,IAAI,CAAC,MAAM,CACZ;AACD,YAAA,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CACxD,IAAI,CAAC,MAAM,EACX,IAAI,EACJ,eAAe,EACf,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,KAAA,CAAO,EACrB,IAAI,CAAC,MAAM,CACZ;AACD,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE;AAC3B,gBAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC;AACjC,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC;AAC9C,gBAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC;YAClC;AACA,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI;QAC9B;QACA,IAAI,UAAU,EAAE;;AAEd,YAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;AAC1D,gBAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,MAAM,CAAC;AACrD,oBAAA,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,MAAM,CAAC;YACjE;QACF;IACF;IAEA,eAAe,CAAC,MAAc,EAAE,KAAc,EAAA;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;YAAE;;AAEX,QAAA,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;IACnD;IAEA,OAAO,GAAA;;AAEL,QAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE;AAEnC,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;AAC1D,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI;AAC9B,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI;AACxB,YAAA,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG;gBACxB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,QAAQ,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AACpD,aAAA,CAAC;QACJ;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;IAC7B;IAEA,UAAU,GAAA;AACR,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;IAC1D;;AAGA,IAAA,WAAW,CAAC,MAAc,EAAA;QASxB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,SAAS;QAC3B,OAAO;AACL,YAAA,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AAC1B,YAAA,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;YAC5B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,YAAA,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;SACzB;IACH;IAEA,cAAc,GAAA;AACZ,QAAA,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;IAChC;AAEA,IAAA,cAAc,CAAC,GAA4B,EAAA;AACzC,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,GAAG,EAAE;QAC7B,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;QACpD,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;;AAExD,QAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;AAC1D,YAAA,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,MAAM,CAAC;QACtD;IACF;;IAGA,WAAW,GAAA;QACT,MAAM,KAAK,GAA0B,KAAK,CAAC,IAAI,CAC7C,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CACxC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACV,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC;YAE/D,OAAO;gBACL,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,gBAAA,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,SAAS;AAC9C,gBAAA,eAAe,EAAE,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,SAAS;aACxD;AACL,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,KAAK,GAA0B,IAAI,CAAC;AACvC,aAAA,QAAQ;AACR,aAAA,GAAG,CAAC,CAAC,CAAC,MAAM;YACb,EAAE,EAAE,CAAC,CAAC,EAAE;AACR,YAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5D,YAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5D,YAAA,MAAM,EAAE,CAAC,CAAC,MAAM;AACjB,SAAA,CAAC,CAAC;AACH,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;IACzB;AAEA,IAAA,MAAM,QAAQ,GAAA;;QAEZ,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;AACjE,QAAA,IAAI,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE;AAC3B,YAAA,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;gBAClC,MAAM,KAAK,GAAG,MAAK;oBACjB,IAAI,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE;AACzD,wBAAA,OAAO,EAAE;oBACX;yBAAO;AACL,wBAAA,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;oBACvB;AACF,gBAAA,CAAC;AACD,gBAAA,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;AACvB,YAAA,CAAC,CAAC;QACJ;QAEA,MAAM,MAAM,GAAG,MAAc;AAC3B,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;AACvD,gBAAA,IAAI,CAAC,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC;AAAE,oBAAA,OAAO,KAAK;AAC9C,gBAAA,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AAAE,oBAAA,OAAO,KAAK;YACtC;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC;AACD,QAAA,IAAI,MAAM,EAAE;YAAE;AACd,QAAA,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;YAClC,MAAM,KAAK,GAAG,MAAK;AACjB,gBAAA,IAAI,MAAM,EAAE;AAAE,oBAAA,OAAO,EAAE;;AAClB,oBAAA,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;AAC5B,YAAA,CAAC;AACD,YAAA,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;AACvB,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;;;AAOG;AACH,IAAA,MAAM,kBAAkB,CACtB,WAAmB,EACnB,OAGC,EAAA;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC;QACrD,IAAI,CAAC,IAAI,EAAE;;YAET;QACF;AAEA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC;;QAGzE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;AAC5C,YAAA,GAAG,CAAC,OAAO,GAAG,OAAO;AACvB,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM;QAC7B,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACrB;AAEA,QAAA,IAAI;;YAEF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AAClC,YAAA,IAAI,CAAC,oCAAoC,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACzE,YAAA,MAAM,OAAO;QACf;gBAAU;;AAER,YAAA,IAAI,SAAS,IAAI,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE;AACtE,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YACpB;QACF;IACF;AAEA;;AAEG;IACK,oCAAoC,CAC1C,MAAc,EACd,aAAgC,EAAA;QAEhC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;YAAE;;AAEX,QAAA,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE;AAC9B,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC;QACA,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,CACnD,MAAM,EACN,aAAa,CACd;IACH;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;IACpB;IAEA,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,MAAM;IACpB;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACrB;AAEA,IAAA,oBAAoB,CAAC,MAAc,EAAA;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC;IAChD;AAEA,IAAA,qBAAqB,CAAC,MAAc,EAAA;AAClC,QAAA,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,MAAM,CAAC;IAC/D;AAEA,IAAA,cAAc,CAAC,OAAiB,EAAA;AAC9B,QAAA,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,CAAC;IACjD;AAEA,IAAA,WAAW,CACT,UAAkB,EAClB,QAAgB,EAChB,OAA2B,EAAA;;QAG3B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;QAC7C,IAAI,CAAC,QAAQ,EAAE,OAAO;YAAE;;;;AAKxB,QAAA,IAAI,CAAC,OAAO,CACV,EAAE,OAAO,EAAE,EAAE,CAAC,QAAQ,GAAG,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,EAAE,EACpD,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAC1B;IACH;;IAGA,OAAO,CACL,OAGC,EACD,IAA2B,EAAA;AAE3B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM;AAC9B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,OAAO,EAAE,MAAM,IAAI,EAAE;AACjC,YAAA,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,gBAAA,IAAI,CAAC,IAAI;oBAAE;AACX,gBAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;oBAC9C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;;AAEnC,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;wBAC9B,MAAM;AACN,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACrB,wBAAA,EAAE,EAAE,OAAO;wBACX,aAAa,EAAE,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpD,qBAAA,CAAC;gBACJ;YACF;AACA,YAAA,MAAM,IAAI,GAAG,OAAO,EAAE,OAAO,IAAI,EAAE;AACnC,YAAA,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAChD,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,gBAAA,IAAI,CAAC,IAAI;oBAAE;AACX,gBAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;oBAC9C,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;;AAEpC,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;wBAC9B,MAAM;AACN,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACtB,wBAAA,EAAE,EAAE,QAAQ;wBACZ,aAAa,EAAE,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACrD,qBAAA,CAAC;gBACJ;YACF;AACA,YAAA,IAAI,IAAI,EAAE,MAAM,EAAE;AAChB,gBAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;AAC1D,oBAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC;gBAChD;YACF;QACF;gBAAU;AACR,YAAA,IAAI,CAAC,MAAM,GAAG,UAAU;QAC1B;IACF;;IAGA,MAAM,CAAC,GAAoB,EAAE,QAAkB,EAAA;;QAE7C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;AAC1D,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;;QAGjE,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YAC3C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAE;;gBAGjD,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,IAAI,EAAE,cAAc,CAAC;;AAGlE,gBAAA,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAC5C,MAAM;AACN,wCAAwB,IAAI,EAC5B,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,EAC9B,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAC/B;;gBAGD,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;AACjE,gBAAA,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE;AACrD,oBAAA,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,EAAE;AACrB,wBAAA,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CACrC,GAAG,CAAC,EAAE,EACN,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAC/B;oBACH;gBACF;;AAGA,gBAAA,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI;AAC9B,gBAAA,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI;AACxB,gBAAA,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG;oBACxB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,oBAAA,QAAQ,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AACpD,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC;AACtC,gBAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC;YAChD;QACF;;AAGA,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE;AACzB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;YACtD,IAAI,CAAC,QAAQ,EAAE;;AAEb,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AACzC,gBAAA,IAAI,CAAC,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,CAAC,CAAC,MAAM,CAAA,CAAE,CAAC;AAC5D,gBAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AACpD,gBAAA,IAAI,CAAC,GAAG;oBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,kBAAA,EAAqB,IAAI,CAAC,UAAU,CAAA,CAAE,CAAC;gBACjE,IAAI,GAAG,CAAC,YAAY;AAAE,oBAAA,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACjD,gBAAA,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC;oBAChC,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,iBAAA,CAAC;AACF,gBAAA,MAAM,EAAE,GAAqB;oBAC3B,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,oBAAA,MAAM,EAAE,EAAE;AACV,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,KAAK,EAAE,EAAE;oBACT,OAAO;oBACP,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,oBAAA,MAAM,EAAE;wBACN,GAAG,GAAG,CAAC,MAAM;wBACb,GAAG,IAAI,CAAC,MAAM;AACd,wBAAA,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM;AACpB,qBAAA;AACD,oBAAA,MAAM,EAAE,CAAC;oBACT,iBAAiB,EAAE,IAAI,GAAG,EAAE;oBAC5B,gBAAgB,EAAE,IAAI,GAAG,EAAE;AAC3B,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,KAAK,EAAE;AACL,wBAAA,IAAI,EAAE,CAAC;AACP,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,QAAQ,EAAE,CAAC;AACZ,qBAAA;oBACD,iBAAiB,EAAE,IAAI,GAAG,EAAE;iBAC7B;gBACD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;;AAEzC,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAChE,EAAE,CAAC,MAAM,CACV;AACD,gBAAA,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE;gBAClC,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CACxD,EAAE,CAAC,MAAM,EACT,EAAE,EACF,eAAe,EACf,CAAA,EAAG,EAAE,CAAC,MAAM,CAAA,KAAA,CAAO,EACnB,IAAI,CAAC,MAAM,CACZ;AACD,gBAAA,IAAI,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE;AACzB,oBAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC;AACjC,oBAAA,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC;AAC1C,oBAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC;gBAClC;AACA,gBAAA,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI;YAC5B;iBAAO;;AAEL,gBAAA,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;AAC1B,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;oBACnB,QAAQ,CAAC,KAAK,GAAG;AACf,wBAAA,IAAI,EAAE,CAAC;AACP,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,QAAQ,EAAE,CAAC;qBACZ;gBACH;YACF;QACF;;QAGA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC5C,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAuB;AAClD,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;AACrB,YAAA,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAU;YACjE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YACxB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;QACvC;;AAGA,QAAA,MAAM,cAAc,GAAG,IAAI,GAAG,EAAoC;AAClE,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;AACrB,YAAA,MAAM,IAAI,GACR,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAuB;AACvE,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAU;AAC3D,YAAA,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE,CAAC;YACjD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;YAC/B,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;QAC3C;;AAGA,QAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,wBAAwB,CACtD,GAAG,EACH,QAAQ,EACR,IAAI,CAAC,WAAW,CACjB;;QAGD,MAAM,cAAc,GAA6C,EAAE;QACnE,KAAK,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,QAAQ,CAAC,GAAG,EAAE;YAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC;AACjE,YAAA,IACE,CAAC,UAAU;AACX,gBAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EACzD;AACA,gBAAA,cAAc,CAAC,MAAM,CAAC,GAAG,UAAU;YACrC;QACF;;QAGA,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAC,GAAG,EAAE;YAC5C,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC;QACzD;;AAGA,QAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,UAAU,CACxC,GAAG,EACH,QAAQ,EACR,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAC5C;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC;;AAGtC,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAuB;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AACnD,QAAA,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE;AAC5B,YAAA,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAU;YACjE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YACxB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;QACvC;;QAGA,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,WAAW,EAAE;AAC3C,YAAA,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAU;YAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,YAAA,IAAI,CAAC,IAAI;gBAAE;YACX,IAAI,OAAO,GAAG,KAAK;YACnB,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBACxC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACxB,oBAAA,IAAI,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE;AACzB,wBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;wBAC1B,OAAO,GAAG,IAAI;oBAChB;gBACF;YACF;YACA,IAAI,OAAO,EAAE;;AAEX,gBAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAC9C,gBAAA,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,MAAM,CAAC;YAC/D;QACF;;AAGA,QAAA,MAAM,cAAc,GAAG,IAAI,GAAG,EAAoC;AAClE,QAAA,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE;AAC5B,YAAA,MAAM,IAAI,GACR,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAuB;AACvE,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAU;AAC3D,YAAA,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE,CAAC;YACjD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;YAC/B,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;QAC3C;AAEA,QAAA,MAAM,YAAY,GAAG,CAAC,CAAe,EAAE,CAAe,KAAI;AACxD,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAAE,gBAAA,OAAO,IAAI;AACzB,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAAE,gBAAA,OAAO,KAAK;AAC1B,YAAA,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;AAAE,gBAAA,OAAO,KAAK;YACnC,KAAK,MAAM,CAAC,IAAI,CAAC;AAAE,gBAAA,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,oBAAA,OAAO,KAAK;AAC9C,YAAA,OAAO,IAAI;AACb,QAAA,CAAC;AAED,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAS;YACnC,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YACpC,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;AACrC,SAAA,CAAC;AACF,QAAA,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE;AACjC,YAAA,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAuB;AACzE,YAAA,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAuB;AACzE,YAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS;gBAC9B,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC1B,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AAC3B,aAAA,CAAC;AACF,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAU;AAClD,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAU;gBAClD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;oBAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;oBAC1C,IAAI,GAAG,KAAK,SAAS;wBACnB,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;AAChD,yBAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,MAAM,CAAC;AAC1D,wBAAA,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,MAAM,CAAC;gBACjE;YACF;QACF;;;;;;QASA,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE;AACnC,gBAAA,MAAM,EAAE,eAAe;AACvB,gBAAA,eAAe,EAAE,cAAc;AAChC,aAAA,CAAC;QACJ;AAEA,QAAA,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE;AACrC,YAAA,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,MAAM,CAAC;QACpD;IACJ;AACD;;MC53BY,YAAY,CAAA;AACvB,IAAA,WAAA,CAAoB,QAAkB,EAAA;QAAlB,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAa;AAEzC,IAAA,QAAQ,CAAC,GAAoB,EAAA;QAC3B,MAAM,MAAM,GAAsB,EAAE;AACpC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;AACjC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;;AAGjC,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA+B;AACvD,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAGxB;AAEH,QAAA,MAAM,mBAAmB,GAAG,CAC1B,CAAuB,KACmB;AAC1C,YAAA,IAAI,CAAC,CAAC;gBAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;AAC1C,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9C,YAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,IAAI,EAAE;AACxC,YAAA,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE;AACtD,YAAA,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE;AACzD,YAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAC5B,QAAA,CAAC;AAED,QAAA,MAAM,OAAO,GAAG,CAAC,IAAmC,KAClD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;QAEjD,MAAM,aAAa,GAAG,CACpB,WAA0C,EAC1C,WAA+B,EAC/B,QAAiB,KACK;AACtB,YAAA,IAAI,QAAQ;AAAE,gBAAA,OAAO,QAAQ;AAC7B,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW;AAAE,gBAAA,OAAO,WAAW;AACjE,YAAA,IAAI,WAAW;AACb,gBAAA,OAAO,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW;AAClE,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;AAED,QAAA,MAAM,OAAO,GAAG,CACd,IAAmC,EACnC,EAAW,KACA;AACX,YAAA,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,IAAI;AAC7B,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;YAC/C,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACvE,QAAA,CAAC;QAED,MAAM,SAAS,GAAG,CAChB,KAA0B,EAC1B,IAAY,EACZ,OAAe,EACf,IAAmC,KACjC;AACF,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC7C,QAAA,CAAC;;AAGD,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE;YACzB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;gBACzB,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC,MAAM,CAAA,CAAE,EAAE;oBAChE,MAAM,EAAE,CAAC,CAAC,MAAM;AACjB,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YACvB;YACA,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AACzB,YAAA,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;AACjD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YAClD,IAAI,CAAC,QAAQ,EAAE;gBACb,SAAS,CACP,OAAO,EACP,mBAAmB,EACnB,qBAAqB,CAAC,CAAC,MAAM,CAAA,CAAE,EAC/B,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CACvC;gBACD;YACF;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACtD,gBAAA,SAAS,CACP,OAAO,EACP,kBAAkB,EAClB,CAAA,iBAAA,EAAoB,QAAQ,CAAC,UAAU,kBAAkB,CAAC,CAAC,MAAM,CAAA,CAAE,CACpE;YACH;QACF;;AAGA,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB;;AAE/C,QAAA,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU;AACxC,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE;YACzB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;gBACrB,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAA,CAAE,EAAE;oBAC7D,MAAM,EAAE,CAAC,CAAC,EAAE;AACb,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACnB;AACA,YAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AAC7C,YAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AAC7C,YAAA,IAAI,CAAC,OAAO;gBACV,SAAS,CACP,OAAO,EACP,qBAAqB,EACrB,QAAQ,CAAC,CAAC,EAAE,CAAA,oBAAA,CAAsB,EAClC;oBACE,MAAM,EAAE,CAAC,CAAC,EAAE;AACb,iBAAA,CACF;AACH,YAAA,IAAI,CAAC,OAAO;gBACV,SAAS,CACP,OAAO,EACP,qBAAqB,EACrB,QAAQ,CAAC,CAAC,EAAE,CAAA,oBAAA,CAAsB,EAClC;oBACE,MAAM,EAAE,CAAC,CAAC,EAAE;AACb,iBAAA,CACF;;AAEH,YAAA,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI;AACjD,gBACA,OAAO,EAAE,EAAE;aACZ;AACD,YAAA,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI;AACjD,gBAAA,MAAM,EAAE,GAET;YACD,MAAM,YAAY,GAAG;kBACjB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;kBAC9B,SAAS;YACb,MAAM,YAAY,GAAG;AACnB,kBAAE,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;kBAC7C,SAAS;;AAEb,YAAA,MAAM,eAAe,GAAG,aAAa,CACnC,YAAY,EACZ,YAAY,EACZ,CAAC,CAAC,MAAM,CACT;YACD,MAAM,IAAI,GAAG;kBACT,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe;kBACvC,SAAS;YACb,IAAI,CAAC,IAAI,EAAE;gBACT,SAAS,CACP,OAAO,EACP,cAAc,EACd,QAAQ,CAAC,CAAC,EAAE,CAAA,wBAAA,CAA0B,EACtC;oBACE,MAAM,EAAE,CAAC,CAAC,EAAE;AACb,iBAAA,CACF;YACH;YAEA,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE;AACxC,oBAAA,SAAS,CACP,OAAO,EACP,gBAAgB,EAChB,CAAA,KAAA,EAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,MAAM,CAAC,MAAM,eAAe,OAAO,CAAC,MAAM,CAAA,CAAE,EAC5E,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAClE;gBACH;AACA,gBAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC5D,gBAAA,IACE,WAAW,CAAC,MAAM,GAAG,CAAC;oBACtB,eAAe;AACf,oBAAA,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,EACtC;AACA,oBAAA,SAAS,CACP,OAAO,EACP,sBAAsB,EACtB,CAAA,KAAA,EAAQ,CAAC,CAAC,EAAE,CAAA,MAAA,EAAS,eAAe,CAAA,0BAAA,EAClC,OAAO,CAAC,MACV,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,EAAA,EAAK,WAAW,CAAC,IAAI,CACtC,GAAG,CACJ,0BAA0B,EAC3B;wBACE,MAAM,EAAE,CAAC,CAAC,EAAE;wBACZ,MAAM,EAAE,OAAO,CAAC,MAAM;AACtB,wBAAA,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;AACvB,wBAAA,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;wBAC/B,eAAe;AAChB,qBAAA,CACF;gBACH;YACF;YACA,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE;AACvC,oBAAA,SAAS,CACP,OAAO,EACP,eAAe,EACf,CAAA,KAAA,EAAQ,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,MAAM,CAAC,MAAM,eAAe,OAAO,CAAC,MAAM,CAAA,CAAE,EAC3E,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CACjE;gBACH;;AAEA,gBAAA,IAAI,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AAClD,oBAAA,SAAS,CACP,OAAO,EACP,eAAe,EACf,CAAA,KAAA,EAAQ,CAAC,CAAC,EAAE,0BAA0B,OAAO,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE,EACzE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CACjE;gBACH;AACA,gBAAA,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACjE,gBAAA,IAAI,UAAU,IAAI,eAAe,EAAE;oBACjC,IAAI,OAAO,EAAE;AACX,wBAAA,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAGrC;AACb,wBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAClC,8BAAE,OAAO,CAAC,WAAW;AACrB,8BAAE,CAAC,eAAe,CAAC;wBACrB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE;AAChC,4BAAA,SAAS,CACP,OAAO,EACP,qBAAqB,EACrB,CAAA,KAAA,EAAQ,CAAC,CAAC,EAAE,CAAA,aAAA,EAAgB,MAAM,CAAC,IAAI,CACrC,GAAG,CACJ,CAAA,iCAAA,EAAoC,OAAO,CAAC,MAAM,CAAA,CAAA,EACjD,CAAC,CAAC,MAAM,CAAC,MACX,CAAA,EAAA,EAAK,UAAU,GAAG,EAClB;gCACE,MAAM,EAAE,CAAC,CAAC,EAAE;gCACZ,MAAM,EAAE,OAAO,CAAC,MAAM;AACtB,gCAAA,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;AACtB,gCAAA,QAAQ,EAAE,UAAU;AACpB,gCAAA,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAClC,6BAAA,CACF;wBACH;oBACF;yBAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE;wBAChD,SAAS,CACP,OAAO,EACP,qBAAqB,EACrB,QAAQ,CAAC,CAAC,EAAE,CAAA,MAAA,EAAS,eAAe,CAAA,yBAAA,EAA4B,OAAO,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,EAAA,EAAK,UAAU,CAAA,wBAAA,CAA0B,EAC1I;4BACE,MAAM,EAAE,CAAC,CAAC,EAAE;4BACZ,MAAM,EAAE,OAAO,CAAC,MAAM;AACtB,4BAAA,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;AACtB,4BAAA,QAAQ,EAAE,UAAU;4BACpB,eAAe;AAChB,yBAAA,CACF;oBACH;gBACF;YACF;;AAGA,YAAA,MAAM,UAAU,GAAG,CAAA,EAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,EAAA,EAAK,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC3D,YAAA,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;YAEvE,IAAI,OAAO,EAAE;AACX,gBAAA,MAAM,UAAU,GAAG,cAAc,CAC/B,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAC1D,CAAC,CAAC,MAAM,CAAC,MAAM,CAChB;AACD,gBAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC/D,oBAAA,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC;gBAChC;YACF;QACF;QAEA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,aAAa,EAAE;AACxC,YAAA,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACzC,MAAM,CAAC,IAAI,CAAC;AACV,oBAAA,KAAK,EAAE,SAAS;AAChB,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,OAAO,EAAE,CAAA,MAAA,EAAS,GAAG,CAAA,KAAA,EAAQ,KAAK,CAAA,iCAAA,CAAmC;oBACrE,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAChE,iBAAA,CAAC;YACJ;QACF;QAEA,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,EAAE,MAAM,EAAE;IACjE;IAEA,KAAK,CAAC,GAAoB,EAAE,IAAmB,EAAA;AAC7C,QAAA,OAAO,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;IACtD;AAEA,IAAA,UAAU,CACR,GAAoB,EACpB,QAGC,EACD,UAAkB,EAClB,WAAoB,EAAA;;QAGpB,MAAM,UAAU,GAA2B,EAAE;QAC7C,MAAM,WAAW,GAA2B,EAAE;AAE9C,QAAA,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC5D,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC;YAChE,MAAM,SAAS,GAAG;AAChB,kBAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM;kBACxC,SAAS;YACb,MAAM,MAAM,GAAG;kBACX,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM;kBAC3C,SAAS;AACb,YAAA,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,SAAS;QAC3C;AAEA,QAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC9D,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC;YAChE,MAAM,SAAS,GAAG;AAChB,kBAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM;kBACxC,SAAS;AACb,YAAA,MAAM,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS;AACpE,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM;AACzD,YAAA,WAAW,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAI,SAAS;QAC7C;QAEA,OAAO;AACL,YAAA,EAAE,EAAE,UAAU;YACd,WAAW;AACX,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,OAAO,EAAE,WAAW;AACpB,YAAA,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE;SAC6B;IACxD;AACD;;MCvWqB,cAAc,CAAA;AAClC,IAAA,WAAA,CAA+B,YAA0B,EAAA;QAA1B,IAAA,CAAA,YAAY,GAAZ,YAAY;IAAiB;AAU5D,IAAA,SAAS,CACP,MAAc,EACd,MAA+B,EAC/B,OAA2B,EAAA;AAE3B,QAAA,IAAI,OAAO,EAAE,GAAG,EAAE;YAChB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AAC9C,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AACzC,YAAA,IAAI;gBACF,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;YAC7C;oBAAU;AACR,gBAAA,IAAI,CAAC,SAAS;AAAE,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAC5C;QACF;aAAO;YACL,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;QAC7C;IACF;AAEA,IAAA,eAAe,CACb,MAAc,EACd,KAAc,EACd,OAA2B,EAAA;AAE3B,QAAA,IAAI,OAAO,EAAE,GAAG,EAAE;YAChB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AAC9C,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AACzC,YAAA,IAAI;gBACF,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC;YAClD;oBAAU;AACR,gBAAA,IAAI,CAAC,SAAS;AAAE,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAC5C;QACF;aAAO;YACL,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC;QAClD;IACF;IAEA,EAAE,CACA,KAAQ,EACR,OAA+B,EAAA;QAE/B,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;IAC7C;IAEA,SAAS,CAAC,MAAc,EAAE,MAAc,EAAA;QACtC,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACpD;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;IACrC;AAEA,IAAA,cAAc,CAAC,OAAiB,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC;IAC3C;AAEA,IAAA,WAAW,CACT,UAAkB,EAClB,QAAgB,EAChB,OAA2B,EAAA;QAE3B,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC;IAC9D;IAEA,OAAO,GAAA;;IAEP;AACD;;AC7ED;;;;AAIG;AACG,MAAO,aAAc,SAAQ,cAAc,CAAA;IAG/C,WAAA,CAAY,YAA0B,EAAE,OAAiB,EAAA;QACvD,KAAK,CAAC,YAAY,CAAC;QAHb,IAAA,CAAA,OAAO,GAAY,QAAQ;AAIjC,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC;IACtC;IAES,MAAM,CAAC,UAAoB,EAAE,OAAiB,EAAA;AACrD,QAAA,IAAI,OAAO;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC;IACtC;AAEA;;;;;;AAMG;AACH,IAAA,MAAM,WAAW,CACf,MAAc,EACd,OAA2C,EAAA;AAE3C,QAAA,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,MAAM,EAAE;AACjD,YAAA,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,IAAI,KAAK;YAC1D,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;IACJ;AAEA;;;;AAIG;IACH,MAAM,WAAW,CAAC,MAAc,EAAA;QAC9B,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC;IACpD;IAEA,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;AAEA,IAAA,UAAU,CAAC,OAAgB,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO;YAAE;AAE9B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;;AAGtB,QAAA,IAAI,OAAO,KAAK,QAAQ,EAAE;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;QAC3B;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QAC5B;IACF;AACD;;ACxDM,MAAM,eAAe,GAA6C;AACvE,IAAA,EAAE,EAAE,SAAS;AACb,IAAA,WAAW,EAAE,SAAS;IACtB,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM;AAC5B,QAAA,MAAM,eAAe,CAAC,MAAM,EAAE,GAAG,EAAA;YAC/B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;AACnC,YAAA,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAClC,gBAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,oBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1D;QACF,CAAC;QACD,eAAe,CAAC,KAAK,EAAE,KAAK,EAAA;AAC1B,YAAA,IAAI;gBACF,MAAM,CAAC,GAAQ,KAAK;;AAEpB,gBAAA,MAAM,MAAM,GAAG,CAAC,EAAE,MAAM;gBACxB,IAAI,MAAM,IAAI,OAAO,KAAK,GAAG,MAAM,CAAC,KAAK,UAAU,EAAE;AACnD,oBAAA,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAA4B;;oBAEnD,IAAI,IAAI,GAAU,EAAE;AACpB,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC;AAAE,wBAAA,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AACzC,yBAAA,IAAI,CAAC,EAAE,IAAI,KAAK,SAAS;AAAE,wBAAA,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,yBAAA,IAAI,CAAC,EAAE,MAAM,KAAK,SAAS;AAAE,wBAAA,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AACnD,oBAAA,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;oBAChB;gBACF;AACA,gBAAA,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACnE;AAAE,YAAA,MAAM;AACN,gBAAA,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACtE;QACF,CAAC;KACF,CAAC;AACF,IAAA,MAAM,EAAE,EAAE,gBAAgB,EAAE,QAAQ,EAAE;;;MC1B3B,iBAAiB,GAAG,CAC/B,QAAkB,MAId;AACJ,IAAA,EAAE,EAAE,WAAW;AACf,IAAA,WAAW,EAAE,WAAW;AACxB,IAAA,YAAY,EAAE,CAAC,IAAI,KAAI;AACrB,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;IACxE,CAAC;AACD,IAAA,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,KAAI;AAC1B,QAAA,IAAI,KAA+B;AACnC,QAAA,IAAI,KAA+B;QACnC,OAAO;YACL,WAAW,EAAE,MAAK;gBAChB,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;;gBAE/C,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;AAC9B,oBAAA,KAAK,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAC3C,IAAI,CAAC,QAAQ,CAAC,OAAO,CACtB,EAAE;AACD,wBAAA,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE;oBAI1D;AACF,gBAAA,CAAC,CAAC;gBACF,KAAK,CAAC,MAAM,EAAE;YAChB,CAAC;AACD,YAAA,eAAe,EAAE,CAAC,MAAM,EAAE,GAAG,KAAI;AAC/B,gBAAA,IAAI,CAAC,KAAK;oBAAE;;gBAEZ,MAAM,OAAO,GAA4C,EAAE;AAC3D,gBAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAClE,oBAAA,IAAI,QAAQ,IAAI,MAAM,EAAE;AACtB,wBAAA,MAAM,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;wBACjE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;oBACxC;gBACF;AACA,gBAAA,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACnD,oBAAA,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;gBAC9B;;AAEA,gBAAA,KAAK,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AACpE,oBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;oBACjD,IAAI,CAAC,KAAK,SAAS;AAAE,wBAAA,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC7C;YACF,CAAC;YACD,aAAa,EAAE,MAAK;AAClB,gBAAA,IAAI,KAAK;AAAE,oBAAA,KAAK,EAAE;YACpB,CAAC;YACD,OAAO,EAAE,MAAK;AACZ,gBAAA,IAAI,KAAK;AAAE,oBAAA,KAAK,EAAE;gBAClB,KAAK,EAAE,OAAO,EAAE;YAClB,CAAC;SACF;IACH,CAAC;AACF,CAAA;;ACjED;AACA,MAAM,OAAO,GAAG,CAAC,CAAM,KACrB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAI,CAAc,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAElD,MAAM,SAAS,GAAG,CAChB,CAAoB,EACpB,CAAoB,KACI;AACxB,IAAA,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;AACrB,IAAA,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;AACrB,IAAA,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM;AAAE,QAAA,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;AAC5C,IAAA,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAClE,IAAA,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,CAAC,EAAE,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC;AAC1C,IAAA,OAAO,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,CAAM,KACzB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAI,CAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAEvE,MAAM,aAAa,GAAG,CACpB,CAAsB,EACtB,CAAsB,KACI;AAC1B,IAAA,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;AACzB,IAAA,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;AACzB,IAAA,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM;AAAE,QAAA,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;AAC5C,IAAA,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAClE,IAAA,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,CAAC,EAAE,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC;IAC1C,OAAO;AACL,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;AACnC,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;KACpC;AACH,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,GAAW,EAAE,GAAW,KAChD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACjC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AACjE,MAAM,GAAG,GAAG,CAAC,IAAY,KAAI;AAC3B,IAAA,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC;AACvB,IAAA,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,UAAU,MAAM,CAAC,IAAI,UAAU;AAClE,CAAC;AAED;AACA,SAAS,cAAc,CAAC,GAAQ,EAAE,OAAe,EAAA;AAC/C,IAAA,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG;AAAE,QAAA,OAAO,GAAG;AAC3C,IAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,SAAS;IAC9C,MAAM,KAAK,GAAG;SACX,KAAK,CAAC,GAAG;SACT,KAAK,CAAC,CAAC;SACP,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxD,IAAI,GAAG,GAAQ,GAAG;AAClB,IAAA,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;AACvB,QAAA,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;AAAE,YAAA,OAAO,SAAS;AACvD,QAAA,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IAChB;AACA,IAAA,OAAO,GAAG;AACZ;AAEA,SAAS,cAAc,CAAC,GAAQ,EAAE,OAAe,EAAE,KAAU,EAAA;AAC3D,IAAA,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG;AAAE,QAAA,OAAO,KAAK;AAC7C,IAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,GAAG;IACxC,MAAM,KAAK,GAAG;SACX,KAAK,CAAC,GAAG;SACT,KAAK,CAAC,CAAC;SACP,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACxD,IAAA,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC;IACjC,IAAI,GAAG,GAAQ,IAAI;AACnB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,GAAG;AAAE,gBAAA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;;AACjD,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK;QACvB;aAAO;AACL,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;YACrB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE;;gBAEvC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC5B,GAAG,CAAC,GAAG,CAAC;AACN,oBAAA,OAAO,OAAO,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE;YACrE;AACA,YAAA,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QAChB;IACF;AACA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,iBAAiB,CAAC,GAAQ,EAAE,OAAe,EAAA;AAClD,IAAA,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG;AAAE,QAAA,OAAO,SAAS;AACjD,IAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,GAAG;IACxC,MAAM,KAAK,GAAG;SACX,KAAK,CAAC,GAAG;SACT,KAAK,CAAC,CAAC;SACP,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACxD,IAAA,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC;IACjC,IAAI,GAAG,GAAQ,IAAI;AACnB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACzC,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;AACpB,QAAA,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;AAClD,QAAA,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IAChB;IACA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACtB,MAAM,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;AACxD,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AAAE,YAAA,GAAG,CAAC,MAAM,CAAC,GAAa,EAAE,CAAC,CAAC;IACxD;AAAO,SAAA,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AACzC,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB;AACA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,SAAS,CAAC,CAAM,EAAE,CAAM,EAAA;AAC/B,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7D,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;AACxC,QAAA,MAAM,GAAG,GAAQ,EAAE,GAAG,CAAC,EAAE;AACzB,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACtC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;QAC9C;AACA,QAAA,OAAO,GAAG;IACZ;AACA,IAAA,OAAO,CAAC;AACV;AAEA;AACA,MAAM,aAAa,GAAG,CAAC,CAAM,KAA8B;AACzD,IAAA,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,QAAA,OAAO,KAAK;IACrD,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IACtC,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI;AACrD,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,CAAM,KAAa;IACjC,IAAI,CAAC,KAAK,IAAI;AAAE,QAAA,OAAO,IAAI;AAC3B,IAAA,MAAM,CAAC,GAAG,OAAO,CAAC;IAClB,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,SAAS;AAAE,QAAA,OAAO,IAAI;AACpE,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAC5C,IAAI,aAAa,CAAC,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;AAC3D,IAAA,OAAO,KAAK;AACd,CAAC;AAED;AACO,MAAM,iBAAiB,GAAG;AAC/B,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,GAAG,EAAE,EAAE;;AAGF,MAAM,oBAAoB,GAAG;AAClC,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,eAAe,EAAE,CAAC;AAClB,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,kBAAkB,EAAE,CAAC;AACrB,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,QAAQ,EAAE,CAAC;;AAGN,MAAM,kBAAkB,GAAG;AAChC,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,GAAG,EAAE,CAAC;;AAGF,SAAU,uBAAuB,CAAC,EAAW,EAAA;AACjD,IAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC;AACjC,IAAA,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC;IAE7C,QAAQ,CAAC,YAAY,CACnB;AACE,QAAA,EAAE,EAAE,YAAY;AAChB,QAAA,QAAQ,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,UAAU,EAAE,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,OAAO,EAAE;KACtE,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,CACjD;IAED,QAAQ,CAAC,YAAY,CACnB;AACE,QAAA,EAAE,EAAE,WAAW;QACf,QAAQ,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,SAAS;QACvC,UAAU,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,OAAO,EAAE;KACpE,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,CACjD;IAED,QAAQ,CAAC,YAAY,CACnB;AACE,QAAA,EAAE,EAAE,aAAa;QACjB,QAAQ,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ;QACtC,UAAU,EAAE,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,OAAO,EAAE;KACtE,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,CACjD;;IAGD,QAAQ,CAAC,YAAY,CACnB;AACE,QAAA,EAAE,EAAE,aAAa;QACjB,QAAQ,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;QAC1B,UAAU,EAAE,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,OAAO,EAAE;AACtE,KAAA,EACD,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB;IAED,QAAQ,CAAC,YAAY,CACnB;AACE,QAAA,EAAE,EAAE,WAAW;QACf,QAAQ,EAAE,CAAC,CAAC,KACV,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAChB,CAAC,CAAC,MAAM,KAAK,CAAC;AACd,YAAA,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,CAAC;QACvC,UAAU,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,OAAO,EAAE;KACpE,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,CACjD;;IAGD,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,KAAI;AACzD,QAAA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAA6B;AAC3D,IAAA,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC,KAAK,KAAI;QAC7D,MAAM,CAAC,GAAG,KAAiC;AAC3C,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5E,IAAA,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAExE,IAAA,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEhE,IAAA,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;AAExE,IAAA,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;;IAGxE,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC,KAAI;AAC5D,QAAA,OAAO,CAAW;AACpB,IAAA,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC,KAAI;QAC5D,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,YAAA,OAAO,CAAC;AACnC,QAAA,OAAO,SAAS;AAClB,IAAA,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC,KAAI;AAC1D,QAAA,OAAO,CAAY;AACrB,IAAA,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC,KAAI;QAC1D,IAAI,OAAO,CAAC,KAAK,SAAS;AAAE,YAAA,OAAO,CAAC;AACpC,QAAA,OAAO,SAAS;AAClB,IAAA,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC,KAAI;AAC3D,QAAA,OAAO,CAAW;AACpB,IAAA,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC,KAAI;QAC3D,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,YAAA,OAAO,CAAC;AACnC,QAAA,OAAO,SAAS;AAClB,IAAA,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC,KAAI;AAC1D,QAAA,OAAO,CAA6B;AACtC,IAAA,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC,KAAI;AAC1D,QAAA,IAAI;AACF,YAAA,IACE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAChB,CAAC,CAAC,MAAM,KAAK,CAAC;AACd,gBAAA,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,CAAC,EACrC;AACA,gBAAA,OAAO,CAA6B;YACtC;AACA,YAAA,OAAO,SAAS;QAClB;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,SAAS;QAClB;AACF,IAAA,CAAC,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,0BAA0B;AAC9B,QAAA,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM;YAClE,KAAK;YACL,KAAK;AACN,SAAA,CAAC,CAAC;AACJ,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,6BAA6B;AACjC,QAAA,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM;YACrE,KAAK;YACL,KAAK;AACN,SAAA,CAAC,CAAC;AACJ,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,2BAA2B;AAC/B,QAAA,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM;YACnE,KAAK;YACL,KAAK;AACN,SAAA,CAAC,CAAC;AACJ,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,mBAAmB;AACvB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;AAC/B,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;AACjC,QAAA,IAAI,EAAE,CAAC,GAAsB,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AAClE,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,mBAAmB;AACvB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;AAChC,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAsB,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AAClE,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,iBAAiB;AACrB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;AAC9B,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;AAChC,QAAA,IAAI,EAAE,CAAC,GAAuB,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AACpE,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,mBAAmB;AACvB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;AAChC,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAmB,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;AACvD,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,iBAAiB;AACrB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;AAC9B,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;AAChC,QAAA,IAAI,EAAE,CAAC,GAAwC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;AAC5E,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,sBAAsB;AAC1B,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AAC/B,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAsB,KAAI;AAC/B,YAAA,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE;AACxB,YAAA,IAAI;gBACF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACzB,gBAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;YACxB;AAAE,YAAA,MAAM;AACN,gBAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE;YAC9B;QACF,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,sBAAsB;AAC1B,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AACjC,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AAChC,QAAA,IAAI,EAAE,CAAC,GAAqB,KAAI;AAC9B,YAAA,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QAC7C,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,YAAY;AAChB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE;AACvE,QAAA,OAAO,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAkD,KAAI;YAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YAChC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YAChC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE;QAC/D,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,kBAAkB;AACtB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,MAAM,EAAE,cAAc;AACtB,YAAA,MAAM,EAAE,cAAc;AACtB,YAAA,MAAM,EAAE,YAAY;AACrB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;AAClC,QAAA,aAAa,EAAE;AACb,YAAA,MAAM,EAAE,GAAG;AACZ,SAAA;AACD,QAAA,IAAI,EAAE,CAAC,GAA2D,KAAI;AACpE,YAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;YAChD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;AACjC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;AACxC,YAAA,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG;iBACtB,IAAI,CAAC,CAAC;AACN,iBAAA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/D,YAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;QACvB,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,eAAe;AACnB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,KAAK,EAAE,cAAc;AACrB,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,KAAK,EAAE,YAAY;AACpB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAON,KAAI;YACH,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;YACxC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;YACpC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;YACpC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACzB,gBAAA,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;gBAC1D,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,KAAK,CAAC;AACrC,gBAAA,OAAO;sBACH,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;sBACvD,CAAC;AACP,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;QACvB,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,WAAW;AACf,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,SAAS,EAAE,0BAA0B;AACrC,YAAA,CAAC,EAAE,cAAc;AACjB,YAAA,CAAC,EAAE,cAAc;AAClB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE;;AAEnC,QAAA,aAAa,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AAC/C,QAAA,IAAI,EAAE,CAAC,GAAoD,KAAI;YAC7D,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9B,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,iBAAiB,CAAC,GAAG,CAAC;AAEzD,YAAA,MAAM,SAAS,GAA0C;AACvD,gBAAA,CAAC,iBAAiB,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/C,gBAAA,CAAC,iBAAiB,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/C,gBAAA,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,gBAAA,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,gBAAA,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,gBAAA,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,gBAAA,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,gBAAA,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,gBAAA,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,gBAAA,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,gBAAA,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,gBAAA,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,gBAAA,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;aAC5C;YACD,IAAI,SAAS,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAE3D,YAAA,MAAM,aAAa,GAA8C;AAC/D,gBAAA,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,GAAG,KAC3B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC7C,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,GAAG,KAAI;oBAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACvD,oBAAA,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC;gBAC1C,CAAC;AACD,gBAAA,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,GAAG,KAC9B,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACzD,gBAAA,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,GAAG,KAC9B,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;aAC1D;AACD,YAAA,IAAI,aAAa,CAAC,EAAE,CAAC,KAAK,SAAS;AACjC,gBAAA,OAAO,EAAE,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAE3C,YAAA,MAAM,UAAU,GAAqD;AACnE,gBAAA,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AACxC,gBAAA,CAAC,iBAAiB,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7C,gBAAA,CAAC,iBAAiB,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7C,gBAAA,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClD,gBAAA,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACjD,gBAAA,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;gBACjD,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrD,gBAAA,CAAC,iBAAiB,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;aACpD;AACD,YAAA,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC;AAC9D,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACxC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;gBAC9C,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACvD,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvD,gBAAA,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AACnC,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,cAAc;AAClB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,SAAS,EAAE,6BAA6B;AACxC,YAAA,CAAC,EAAE,cAAc;AACjB,YAAA,CAAC,EAAE,cAAc;AAClB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAoD,KAAI;AAC7D,YAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACtC,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,oBAAoB,CAAC,KAAK,CAAC;AAC9D,YAAA,MAAM,WAAW,GAAsD;AACrE,gBAAA,CAAC,oBAAoB,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AAChD,gBAAA,CAAC,oBAAoB,CAAC,eAAe,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;AACxD,gBAAA,CAAC,oBAAoB,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AACnD,gBAAA,CAAC,oBAAoB,CAAC,kBAAkB,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;AAC3D,gBAAA,CAAC,oBAAoB,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;AAC/C,gBAAA,CAAC,oBAAoB,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;aACnD;AACD,YAAA,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC;AACrE,YAAA,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;QACtE,CAAC;AACF,KAAA,CAAC;;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,YAAY;AAChB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,SAAS,EAAE,2BAA2B;AACtC,YAAA,CAAC,EAAE,aAAa;AAChB,YAAA,CAAC,EAAE,aAAa;AACjB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,aAAa,EAAE,EAAE,SAAS,EAAE,kBAAkB,CAAC,GAAG,EAAE;AACpD,QAAA,IAAI,EAAE,CAAC,GAAyD,KAAI;AAClE,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,kBAAkB,CAAC,GAAG,CAAC;AAC1D,YAAA,IAAI,EAAE,KAAK,kBAAkB,CAAC,GAAG,EAAE;gBACjC,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAClC,gBAAA,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACrC;YACA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACtD,YAAA,MAAM,SAAS,GAAwD;AACrE,gBAAA,CAAC,kBAAkB,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;AAC1C,gBAAA,CAAC,kBAAkB,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;gBACzC,CAAC,kBAAkB,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;aACxD;AACD,YAAA,MAAM,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,kBAAkB,CAAC,GAAG,CAAC;YAC7D,OAAO;AACL,gBAAA,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;aAChE;QACH,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,oBAAoB;AACxB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AAC/B,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;AACjC,QAAA,IAAI,EAAE,CAAC,GAAsB,MAAM;YACjC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM;SACtC,CAAC;AACH,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,gBAAgB;AACpB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE;AAClD,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AAChC,QAAA,IAAI,EAAE,CAAC,GAAmC,KAAI;AAC5C,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE;YACjD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YAChC,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE;YACpD,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE;YACpD,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3B,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,mBAAmB;AACvB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE;AACnD,QAAA,OAAO,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE;AACnC,QAAA,IAAI,EAAE,CAAC,GAAoC,KAAI;YAC7C,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;YAClC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QAChC,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,kBAAkB;AACtB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,aAAa,EAAE;AACtD,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AAChC,QAAA,IAAI,EAAE,CAAC,GAAuC,KAAI;YAChD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE;YACnE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;YACjC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QAClC,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,qBAAqB;AACzB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,MAAM,EAAE,aAAa;AACrB,YAAA,OAAO,EAAE,aAAa;AACvB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AAChC,QAAA,IAAI,EAAE,CAAC,GAAyD,KAAI;YAClE,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;AACnC,YAAA,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QACrC,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,mBAAmB;AACvB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;AAChC,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;AACjC,QAAA,IAAI,EAAE,CAAC,GAAoB,MAAM;YAC/B,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;SACxD,CAAC;AACH,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,kBAAkB;AACtB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE;AACxE,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAkD,KAAI;YAC3D,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,EAAE;AACrD,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;AAC5C,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;kBACrC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;kBAC1B,SAAS;AACb,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAQ,CAAC,EAAE;QAC3C,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,oBAAoB;AACxB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;AAChC,QAAA,OAAO,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;AACjC,QAAA,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,KAAI;YAC7B,MAAM,MAAM,GAAG,EAAE;AACjB,YAAA,MAAM,GAAG,GAAG,MAAM,EAAE,MAAM,IAAI,CAAC;YAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,gBAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;YAC9C,MAAM,GAAG,GAAuC,EAAE;YAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,GAAG,CAAC,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE;AACvE,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACD,QAAA,aAAa,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;AAC5B,QAAA,IAAI,EAAE,CAAC,GAA4B,KAAI;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAAE,gBAAA,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;YAClD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE,CAAC,CAAC,EAAE;QACrE,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,sBAAsB;AAC1B,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;AAChC,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,KAAI;YAC7B,MAAM,MAAM,GAAG,EAAE;YACjB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,GAAI,MAAM,EAAE,KAAe,GAAG,EAAE;AACxE,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,GAAG,GAA2B,EAAE;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAAE,gBAAA,GAAG,CAAC,CAAA,IAAA,EAAO,CAAC,EAAE,CAAC,GAAG,aAAa;AAC3D,YAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;QACzB,CAAC;AACD,QAAA,IAAI,EAAE,CAAC,GAAsB,KAAI;YAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,EAAE;YACrD,MAAM,GAAG,GAA4B,EAAE;AACvC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,GAAG,CAAC,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACpD,YAAA,OAAO,GAAG;QACZ,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,aAAa;AACjB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE;AACvE,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAA+C,MAAM;AAC1D,YAAA,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;SACvC,CAAC;AACH,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,iBAAiB;AACrB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE;AACnE,QAAA,OAAO,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE;AAC/B,QAAA,IAAI,EAAE,CAAC,GAA8C,KAAI;AACvD,YAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACtC,YAAA,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACnC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;AACzC,YAAA,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG;iBACtB,IAAI,CAAC,CAAC;AACN,iBAAA,GAAG,CACF,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAIxD,CACJ;AACH,YAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE;QACrB,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,kBAAkB;AACtB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE;AAC9B,QAAA,OAAO,EAAE,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE;AACpE,QAAA,IAAI,EAAE,CAAC,GAA6C,KAAI;AACtD,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE;YACzB,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QACpB,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,cAAc;AAClB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;AAChC,QAAA,OAAO,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;AACpC,QAAA,IAAI,EAAE,CAAC,GAAuB,KAAI;YAChC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;YAChC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;QAC5D,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,oBAAoB;AACxB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,MAAM,EAAE,YAAY;AACpB,YAAA,GAAG,EAAE,YAAY;AACjB,YAAA,GAAG,EAAE,YAAY;AACjB,YAAA,IAAI,EAAE,YAAY;AACnB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE;AACnC,QAAA,IAAI,EAAE,CAAC,GAA+D,KAAI;YACxE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;YAClC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YAChC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAChC,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YACtC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,MAAM,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;AACxE,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,iBAAiB;AACrB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,MAAM,EAAE,YAAY;AACpB,YAAA,GAAG,EAAE,WAAW;AAChB,YAAA,GAAG,EAAE,WAAW;AAChB,YAAA,IAAI,EAAE,YAAY;AACnB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;;AAElC,QAAA,aAAa,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;AACtE,QAAA,IAAI,EAAE,CAAC,GAKN,KAAI;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;AAClC,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAChC,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAChC,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AACtC,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CACpB,EAAE,MAAM,EAAE,GAAG,EAAE,EACf,MACE;AACE,gBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAClC,gBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAClC,gBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACP,aAAA,CAChC;AACD,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,YAAY;AAChB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,WAAW;AACpB,YAAA,UAAU,EAAE,YAAY;AACxB,YAAA,SAAS,EAAE,WAAW;AACvB,SAAA;QACD,OAAO,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;AACnD,QAAA,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;AACnE,QAAA,IAAI,EAAE,CACJ,GAAoE,EACpE,GAAmD,KACjD;YACF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YACpC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAC3C;YACD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;YAExC,MAAM,IAAI,GAAG,MAAK;AAChB,gBAAA,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO;AAC5B,gBAAA,IAAI,EAAE,KAAK,SAAS,EAAE;oBACpB,aAAa,CAAC,EAAE,CAAC;oBACjB,GAAG,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;gBACtC;AACF,YAAA,CAAC;YAED,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,IAAI,EAAE;gBACN;YACF;;AAGA,YAAA,IAAI,EAAE;YACN,IAAI,KAAK,GAAG,CAAC;YACb,IAAI,SAAS,EAAE;gBACb,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B,gBAAA,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;gBACxB,KAAK,IAAI,CAAC;YACZ;AACA,YAAA,MAAM,EAAE,GAAG,WAAW,CAAC,MAAK;gBAC1B,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B,gBAAA,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;gBACxB,KAAK,IAAI,CAAC;YACZ,CAAC,EAAE,UAAU,CAAC;YACd,GAAG,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAC/B,CAAC;AACD,QAAA,SAAS,EAAE;AACT,YAAA,OAAO,EAAE,CAAC,GAA8C,KAAI;AAC1D,gBAAA,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO;AAC5B,gBAAA,IAAI,EAAE,KAAK,SAAS,EAAE;oBACpB,aAAa,CAAC,EAAE,CAAC;oBACjB,GAAG,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;gBACtC;YACF,CAAC;AACF,SAAA;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,iBAAiB;AACrB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE;AAC5D,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAA0C,KAAI;AACnD,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM;AACtB,YAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC;YACjD,MAAM,GAAG,GAAwB,EAAE;YACnC,KAAK,MAAM,CAAC,IAAI,QAAQ;gBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC;AACzD,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,iBAAiB;AACrB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,MAAM,EAAE,aAAa;AACrB,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,SAAS,EAAE,aAAa;AACzB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAA2D,KAAI;AACpE,YAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC;AACjD,YAAA,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC;YAChD,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;AACrC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AACrB,gBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;gBACrB,IAAI,GAAG,GAAQ,GAAG;AAClB,gBAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,oBAAA,IAAI;AACF,wBAAA,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;oBACvB;AAAE,oBAAA,MAAM;;oBAER;gBACF;gBACA,GAAG,GAAG,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;YACnC;AACA,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,oBAAoB;AACxB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE;AAC5D,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAA0C,KAAI;AACnD,YAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC;YACjD,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;YACrC,KAAK,MAAM,CAAC,IAAI,QAAQ;AAAE,gBAAA,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC;AACzD,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,mBAAmB;AACvB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE;AAC9C,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAyB,MAAM;YACpC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;SAChC,CAAC;AACH,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,kBAAkB;AACtB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AACjC,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAqB,KAAI;AAC9B,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM;AACtB,YAAA,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG;AAC5B,kBAAE,MAAM,CAAC,IAAI,CAAC,GAAG;AACjB,kBAAE,KAAK,CAAC,OAAO,CAAC,GAAG;AACnB,sBAAE,MAAM,CAAC,IAAI,CAAC,GAAG;sBACf,EAAE;AACN,YAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;QACvB,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,oBAAoB;AACxB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AACjC,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAqB,KAAI;AAC9B,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM;AACtB,YAAA,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG;AAC5B,kBAAE,MAAM,CAAC,MAAM,CAAC,GAAG;AACnB,kBAAE,KAAK,CAAC,OAAO,CAAC,GAAG;AACnB,sBAAE,MAAM,CAAC,MAAM,CAAC,GAAG;sBACjB,EAAE;AACN,YAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;QACzB,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,mBAAmB;AACvB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE;AACrD,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAgC,KAAI;YACzC,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;AACxC,YAAA,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG;AACtB,YAAA,MAAM,GAAG,GAAU,KAAK,CAAC,OAAO,CAAC,MAAM;AACrC,kBAAE;AACF,kBAAE;sBACA,CAAC,MAAM;sBACP,EAAE;YACN,IAAI,GAAG,GAAG,IAAI;AACd,YAAA,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;AACpB,gBAAA,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ;oBAAE;gBACnC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;gBAClC,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS,EAAE;oBACxC,GAAG,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC;gBAC3C;AAAO,qBAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AAC5B,oBAAA,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC;gBACpC;AAAO,qBAAA,IAAI,IAAI,KAAK,MAAM,EAAE;oBAC1B,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC;AACrC,oBAAA,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK;AACzB,oBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AAC3D,oBAAA,IAAI,CAAC,EAAE;AAAE,wBAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAA,CAAE,CAAC;gBAChE;YACF;AACA,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,mBAAmB;AACvB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE;AAC9C,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAyB,KAAI;YAClC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE;YAC3C,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE;YAC3C,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;QACjC,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,oBAAoB;AACxB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE;AAClC,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAsB,KAAI;YAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,EAAE;YACzD,MAAM,GAAG,GAAU,EAAE;AACrB,YAAA,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;AACnB,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,oBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;AAC/B,oBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAClB;AACA,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,mBAAmB;AACvB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE;AAC7D,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAA2C,KAAI;YACpD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,EAAE;AACzD,YAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC;AACjD,YAAA,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACjC,gBAAA,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE;oBACxB,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC/B,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC/B,IAAI,EAAE,KAAK,EAAE;wBAAE;oBACf,IAAI,EAAE,KAAK,SAAS;AAAE,wBAAA,OAAO,CAAC;oBAC9B,IAAI,EAAE,KAAK,SAAS;wBAAE,OAAO,EAAE;oBAC/B,IAAI,EAAE,GAAG,EAAE;wBAAE,OAAO,EAAE;oBACtB,IAAI,EAAE,GAAG,EAAE;AAAE,wBAAA,OAAO,CAAC;gBACvB;AACA,gBAAA,OAAO,CAAC;AACV,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;AACF,IAAA,OAAO,QAAQ;AACjB;AAEM,SAAU,iBAAiB,CAAC,QAAkB,EAAA;IAClD,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,aAAa;AACjB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE;AACtD,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;AACjC,QAAA,IAAI,EAAE,OACJ,GAAwC,EACxC,GAA0B,KACxB;YACF,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;AACrC,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK;YAC1B,IACE,QAAQ,KAAK,SAAS;AACtB,gBAAA,QAAQ,KAAK,IAAI;gBACjB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAC9B;AACA,gBAAA,OAAO;YACT;YACA,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;gBAC1C,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,MAAK;oBACnB,YAAY,CAAC,EAAE,CAAC;oBAChB,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACnD,gBAAA,CAAC;AACD,gBAAA,IAAI,GAAG,CAAC,WAAW,CAAC,OAAO;oBAAE,OAAO,OAAO,EAAE;AAC7C,gBAAA,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACpE,YAAA,CAAC,CAAC;YACF,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;QACrC,CAAC;AACF,KAAA,CAAC;AACJ;AAEA,SAAS,cAAc,CAAC,EAAU,EAAE,MAAmB,EAAA;IACrD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;AAC3C,QAAA,MAAM,EAAE,GAAG,UAAU,CAAC,MAAK;AACzB,YAAA,OAAO,EAAE;AACT,YAAA,OAAO,EAAE;QACX,CAAC,EAAE,EAAE,CAAC;QACN,MAAM,OAAO,GAAG,MAAK;YACnB,YAAY,CAAC,EAAE,CAAC;AAChB,YAAA,OAAO,EAAE;YACT,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACnD,QAAA,CAAC;QACD,MAAM,OAAO,GAAG,MAAK;AACnB,YAAA,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;AAC9C,QAAA,CAAC;QACD,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,OAAO,EAAE;AACpC,QAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;AAC3C,IAAA,CAAC,CAAC;AACJ;AAEM,SAAU,qBAAqB,CAAC,QAAkB,EAAA;IACtD,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,gBAAgB;AACpB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,WAAW,EAAE,WAAW;AACzB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AAChC,QAAA,IAAI,EAAE,OACJ,GAAgE,EAChE,GAA0B,KACxB;YACF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;YAClE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AAC5C,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC9B,GAAG,CAAC,cAAc,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC/B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,WAAW,CAAC;AAC9C,gBAAA,IAAI,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE;oBAC/C,GAAG,CAAC,cAAc,GAAG,CAAC,GAAG,KAAK,CAAC;AAC/B,oBAAA,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC;gBACtE;YACF;AACA,YAAA,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC;AACvB,YAAA,OAAO,EAAE,IAAI,EAAE,aAAa,KAAK,CAAA,MAAA,CAAQ,EAAE;QAC7C,CAAC;AACF,KAAA,CAAC;AACJ;AAcM,SAAU,UAAU,CACxB,MAAc,EACd,IAAA,GAAoB,IAAI,GAAG,EAAE,EAAA;AAE7B,IAAA,IAAI,EAAU;IACd,IAAI,QAAQ,GAAG,CAAC;AAChB,IAAA,GAAG;QACD,EAAE,GAAG,GAAG,MAAM,CAAA,EAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE;AACzD,QAAA,QAAQ,EAAE;AACV,QAAA,IAAI,QAAQ,GAAG,IAAI,EAAE;AACnB,YAAA,EAAE,GAAG,CAAA,EAAG,MAAM,CAAA,EAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM;iBACnD,QAAQ,CAAC,EAAE;AACX,iBAAA,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QAClB;AACF,IAAA,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACrB,IAAA,OAAO,EAAE;AACX;;ACrsCM,SAAU,cAAc,CAAC,MAK9B,EAAA;IACC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;AACvB,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,GAAG,CAAA,EAAA,EAAK,CAAC,CAAC,aAAa,CAAA,CAAA,CAAG,GAAG,EAAE;QACxD,OAAO,CAAC,GAAG,CAAC,CAAA,OAAA,EAAU,CAAC,CAAC,EAAE,CAAA,CAAA,CAAG,EAAE,CAAA,EAAG,CAAC,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAA,CAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AACvE,IAAA,CAAC,CAAC;IACF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;AACvB,QAAA,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,EAAE;AAC9B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,IAAI,GAAG,CAAC;AAC/C,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,WAAA,EAAc,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAG,CAAC;QAC3D;AAAO,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE;AACjC,YAAA,MAAM,SAAS,GAAI,CAAS,CAAC,SAAS,GAAG,cAAc,GAAG,EAAE;YAC5D,OAAO,CAAC,GAAG,CAAC,CAAA,OAAA,EAAU,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAA,IAAA,EAAO,CAAC,CAAC,UAAU,IAAI,CAAC,CAAA,EAAA,EAAK,SAAS,CAAA,CAAE,CAAC;QACpF;AAAO,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE;AAClC,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,QAAA,EAAW,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAA,CAAE,CAAC;QAC/C;AAAO,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE;AAClC,YAAA,OAAO,CAAC,GAAG,CACT,CAAA,OAAA,EAAU,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,IAAA,EAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE,CACxF;QACH;AAAO,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE;AACjC,YAAA,OAAO,CAAC,GAAG,CACT,CAAA,OAAA,EAAU,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,IAAA,EAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAChE,CAAC,CAAC,MAAM,CAAC,MACX,CAAA,IAAA,EAAO,CAAC,CAAC,UAAU,IAAI,CAAC,CAAA,EAAA,CAAI,CAC7B;QACH;AACF,IAAA,CAAC,CAAC;IACF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;AACvB,QAAA,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE;YACzB,OAAO,CAAC,IAAI,CACV,CAAA,QAAA,EAAW,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE,EAC/B,CAAC,CAAC,GAAW,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CACjC;QACH;AAAO,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,EAAE;AACpC,YAAA,OAAO,CAAC,IAAI,CACV,WAAW,CAAC,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,IAAA,EAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE,EACnG,CAAC,CAAC,GAAW,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CACjC;QACH;AAAO,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAkB,EAAE;YACxC,OAAO,CAAC,IAAI,CACV,CAAA,0BAAA,EAA6B,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAA,OAAA,EAAU,CAAC,CAAC,MAAM,CAAA,CAAA,CAAG,EACtE,CAAC,CAAC,OAAO,CACV;QACH;AAAO,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE;AAChC,YAAA,OAAO,CAAC,IAAI,CACV,mBAAmB,EAClB,CAAC,CAAC,GAAW,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,EAChC,CAAC,CAAC,OAAO,KAAK;kBACV,CAAA,SAAA,EAAY,CAAC,CAAC,OAAO,CAAA,CAAA,EAAI,CAAC,CAAC,WAAW,IAAI,GAAG,CAAA,CAAA;kBAC7C,EAAE,CACP;QACH;AAAO,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC9B,YAAA,OAAO,CAAC,IAAI,CACV,CAAA,gBAAA,EAAmB,CAAC,CAAC,OAAO,CAAA,CAAE,EAC9B,CAAC,CAAC,IAAI,GAAG,CAAA,OAAA,EAAU,CAAC,CAAC,IAAI,CAAA,CAAA,CAAG,GAAG,EAAE,EACjC,CAAC,CAAC,GAAG,GAAI,CAAC,CAAC,GAAW,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,EAC7C,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAC3C;QACH;aAAO;;AAEL,YAAA,OAAO,CAAC,IAAI,CAAC,6BAA6B,EAAE,CAAC,CAAC;QAChD;AACF,IAAA,CAAC,CAAC;AACJ;;AC5DA,SAAS,wBAAwB,GAAA;IAC/B,OAAO;AACL,QAAA,KAAK,EAAE;AACL,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE;AACrC,YAAA;AACE,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,WAAW;AACpB,aAAA;;AAED,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE;AACxC,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE;AAC5C,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;;AAED,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;;;AAGD,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;AACxC,aAAA;AACF,SAAA;KACF;AACH;SAEgB,oBAAoB,GAAA;IAClC,OAAO,wBAAwB,EAAE;AACnC;AAEM,SAAU,yBAAyB,CAAC,EAAW,EAAA;AACnD,IAAA,OAAO,uBAAuB,CAAC,EAAE,CAAC;AACpC;;SCxCgB,mBAAmB,GAAA;AACjC,IAAA,MAAM,GAAG,GAAoB;AAC3B,QAAA,KAAK,EAAE;AACL,YAAA;AACE,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,WAAW;AACpB,aAAA;AACD,YAAA;AACE,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,aAAa;AACrB,gBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE;AAC/D,aAAA;AACD,YAAA;AACE,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,kBAAkB;AAC3B,aAAA;AACD,YAAA;AACE,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,iBAAiB;AAC1B,aAAA;AACF,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;AAC1C,aAAA;;AAED,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;gBACvC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACrC,gBAAA,MAAM,EAAE,aAAa;AACtB,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;gBACrC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;gBACrC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;gBACrC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;AACF,SAAA;KACF;AACD,IAAA,OAAO,GAAG;AACZ;AAEM,SAAU,wBAAwB,CAAC,EAAW,EAAA;AAClD,IAAA,MAAM,QAAQ,GAAG,uBAAuB,CAAC,EAAE,CAAC;IAC5C,iBAAiB,CAAC,QAAQ,CAAC;AAC3B,IAAA,OAAO,QAAQ;AACjB;;SC3DgB,sBAAsB,GAAA;AACpC,IAAA,MAAM,GAAG,GAAoB;AAC3B,QAAA,KAAK,EAAE;AACL,YAAA,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE;AAChD,YAAA,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE;AAChD,YAAA,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE;AAC7C,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC7C,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;AAC5C,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC7C,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE;AAC9C,aAAA;;AAEF,SAAA;KACF;AACD,IAAA,OAAO,GAAG;AACZ;AAEM,SAAU,2BAA2B,CAAC,EAAW,EAAA;AACrD,IAAA,MAAM,QAAQ,GAAG,uBAAuB,CAAC,EAAE,CAAC;IAC5C,qBAAqB,CAAC,QAAQ,CAAC;AAC/B,IAAA,OAAO,QAAQ;AACjB;;SCjCgB,wBAAwB,GAAA;;;;;AAKtC,IAAA,MAAM,GAAG,GAAoB;AAC3B,QAAA,KAAK,EAAE;AACL,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE;AAC7C,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE;AAC7C,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE;AACrC,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE;AAChD,YAAA,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE;;AAEzC,YAAA,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE;AACzC,SAAA;AACD,QAAA,KAAK,EAAE;;AAEL,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;;AAED,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE;AAChD,aAAA;;AAED,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;gBACxC,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE;AACvC,aAAA;AACF,SAAA;KACF;AACD,IAAA,OAAO,GAAG;AACZ;AAEM,SAAU,6BAA6B,CAAC,EAAW,EAAA;AACvD,IAAA,MAAM,QAAQ,GAAG,uBAAuB,CAAC,EAAE,CAAC;AAC5C,IAAA,OAAO,QAAQ;AACjB;;AChDM,SAAU,aAAa,CAAC,IAAc,EAAA;AAC1C,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YACzC,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC;YACnD,IAAI,UAAU,EAAE;gBACd,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACzC,OAAO,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;YACzD;YACA,OAAO,CAAC,OAAO,CAAC;AAClB,QAAA,CAAC,CAAC;IACJ;AACA,IAAA,OAAO,IAAI;AACb;AAEM,SAAU,cAAc,CAC5B,GAAY,EACZ,YAA2B,EAAA;AAE3B,IAAA,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,QAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE;IAC9C;IAEA,IAAI,OAAO,GAAY,GAAG;AAI1B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAChD,QAAA,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC;QAC/B,IACE,OAAO,KAAK,IAAI;AAChB,YAAA,OAAO,KAAK,SAAS;AACrB,YAAA,OAAO,OAAO,KAAK,QAAQ,EAC3B;AACA,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC/B,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;gBACnC,IAAI,KAAK,CAAC,KAAK,CAAC;AAAE,oBAAA,OAAO,IAAI;AAG7B,gBAAA,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;YAC1B;iBAAO;AAGL,gBAAA,OAAO,GAAI,OAAmC,CAAC,OAAO,CAAC;YACzD;QACF;AAAO,aAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AACtC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC1B,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE;AAG5C,oBAAA,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;gBAC5B;qBAAO;AACL,oBAAA,OAAO,IAAI;gBACb;YACF;iBAAO;AACL,gBAAA,OAAO,IAAI;YACb;QACF;AAAO,aAAA,IAAI,OAAO,YAAY,MAAM,EAAE;AACpC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC1B,gBAAA,OAAO,IAAI;YACb;YACA,MAAM,GAAG,GAAG,OAAkC;YAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrE,YAAA,IAAI,CAAC,WAAW;AAAE,gBAAA,OAAO,IAAI;AAG7B,YAAA,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC;QAC5B;aAAO;AACL,YAAA,OAAO,IAAI;QACb;IACF;IAEA,MAAM,WAAW,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AACzD,IAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACnC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,IAAI;AAC7B,YAAA,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE;QAC/D;aAAO,IACL,OAAO,KAAK,IAAI;AAChB,YAAA,OAAO,KAAK,SAAS;AACrB,YAAA,OAAO,OAAO,KAAK,QAAQ,EAC3B;YACA,OAAO;AACL,gBAAA,KAAK,EAAG,OAAmC,CAAC,WAAW,CAAC;AACxD,gBAAA,MAAM,EAAE,OAAO;AACf,gBAAA,GAAG,EAAE,WAAW;aACjB;QACH;IACF;AAAO,SAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AAC1C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC1B,IAAI,WAAW,IAAI,CAAC,IAAI,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE;gBACpD,OAAO;AACL,oBAAA,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC;AAC3B,oBAAA,MAAM,EAAE,OAAO;AACf,oBAAA,GAAG,EAAE,WAAW;iBACjB;YACH;QACF;AACA,QAAA,OAAO,IAAI;IACb;AAAO,SAAA,IAAI,WAAW,YAAY,MAAM,EAAE;AACxC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC1B,YAAA,OAAO,IAAI;QACb;QACA,MAAM,GAAG,GAAG,OAAkC;QAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzE,QAAA,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,IAAI;AAC7B,QAAA,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE;IACvE;AAEA,IAAA,OAAO,IAAI;AACb;SAEgB,cAAc,CAC5B,GAAY,EACZ,YAA2B,EAC3B,QAAiB,EAAA;IAEjB,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,EAAE,YAAY,CAAC;AAChD,IAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI;AAAE,QAAA,OAAO,KAAK;IAEnD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;QAC/B,MAAM,CAAC,MAAoB,CAAC,MAAM,CAAC,GAAa,CAAC,GAAG,QAAQ;IAC/D;SAAO;QACJ,MAAM,CAAC,MAAkC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ;IACnE;AACA,IAAA,OAAO,IAAI;AACb;AAEM,SAAU,iBAAiB,CAC/B,GAAY,EACZ,YAA2B,EAC3B,cAA6B,EAAE,EAAA;AAE/B,IAAA,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;QAC7B,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAC5C;IAEA,MAAM,CAAC,cAAc,EAAE,GAAG,iBAAiB,CAAC,GAAG,YAAY;IAC3D,MAAM,OAAO,GAAmD,EAAE;AAElE,IAAA,IAAI,cAAc,KAAK,SAAS,EAAE;AAChC,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;AACtC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC;AAC1C,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE;AACrD,gBAAA,OAAO,CAAC,IAAI,CACV,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,iBAAiB,EAAE;AAClD,oBAAA,GAAG,WAAW;oBACd,KAAK;AACN,iBAAA,CAAC,CACH;YACH;QACF;AAAO,aAAA,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YACvE,MAAM,SAAS,GAAG,GAA8B;AAChD,YAAA,IAAI,cAAc,IAAI,SAAS,EAAE;AAC/B,gBAAA,OAAO,CAAC,IAAI,CACV,GAAG,iBAAiB,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,iBAAiB,EAAE;AACjE,oBAAA,GAAG,WAAW;oBACd,cAAc;AACf,iBAAA,CAAC,CACH;YACH;QACF;IACF;AAAO,SAAA,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;AAC7C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACtB,IAAI,cAAc,IAAI,CAAC,IAAI,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE;AACtD,gBAAA,OAAO,CAAC,IAAI,CACV,GAAG,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,iBAAiB,EAAE;AAC3D,oBAAA,GAAG,WAAW;oBACd,cAAc;AACf,iBAAA,CAAC,CACH;YACH;QACF;IACF;AAAO,SAAA,IAAI,cAAc,YAAY,MAAM,EAAE;AAC3C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,OAAO,CAAC,IAAI,CACV,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC,CACrE;YACH;QACF;AAAO,aAAA,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YACvE,MAAM,SAAS,GAAG,GAA8B;YAChD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACxC,gBAAA,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC5B,oBAAA,OAAO,CAAC,IAAI,CACV,GAAG,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,iBAAiB,EAAE;AACtD,wBAAA,GAAG,WAAW;wBACd,GAAG;AACJ,qBAAA,CAAC,CACH;gBACH;YACF;QACF;IACF;AAEA,IAAA,OAAO,OAAO;AAChB;;SCvKgB,qBAAqB,CACnC,MAAuB,EACvB,MAAuB,EACvB,SAA0B,EAAA;IAE1B,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAE9D,MAAM,SAAS,GAA2B,EAAE;IAE5C,MAAM,aAAa,GAA0B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AAClE,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM;AACpB,QAAA,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC9B,YAAA,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,eAAe,CAAC;QAC1C;aAAO;AACL,YAAA,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;QAC5B;AACA,QAAA,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK;AAC3B,QAAA,MAAM,eAAe,GAAwB;AAC3C,YAAA,GAAG,CAAC;AACJ,YAAA,MAAM,EAAE,KAAK;SACd;QAED,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM;AAEzC,YAAA,IAAI,eAAe,CAAC,eAAe,EAAE,aAAa,EAAE;gBAClD,MAAM,wBAAwB,GAA4B,EAAE;AAC5D,gBAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAC5C,eAAe,CAAC,eAAe,CAAC,aAAa,CAC9C,EAAE;oBACD,MAAM,cAAc,GAAG,eAAe,CAAC,eAAe,EAAE,MAAM,GAC5D,QAAQ;0BAEN,OAAO,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC;4BACvD;8BACE,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ;8BAE7C,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAGhD,EAAE;0BACL,SAAS;oBACb,MAAM,cAAc,GAAG,SAAS,CAAC;AAC/B,wBAAA,MAAM,EAAE,KAAK;wBACb,QAAQ;wBACR,KAAK;AACL,wBAAA,IAAI,EAAE,cAAc;wBACpB,UAAU;wBACV,cAAc;AACf,qBAAA,CAAC;;AAEF,oBAAA,IAAI,cAAc,KAAK,IAAI,EAAE;AAC3B,wBAAA,wBAAwB,CAAC,QAAQ,CAAC,GAAG,cAAc;oBACrD;gBACF;;gBAEA,IAAI,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;oBACpD,eAAe,CAAC,eAAe,GAAG;wBAChC,GAAG,eAAe,CAAC,eAAe;AAClC,wBAAA,aAAa,EAAE,wBAAwB;qBACxC;gBACH;AAAO,qBAAA,IAAI,eAAe,CAAC,eAAe,EAAE;;oBAE1C,MAAM,EAAE,aAAa,EAAE,GAAG,WAAW,EAAE,GACrC,eAAe,CAAC,eAAe;AACjC,oBAAA,eAAe,CAAC,eAAe,GAAG,WAAW;gBAC/C;YACF;QACF;AAEA,QAAA,OAAO,eAAe;AACxB,IAAA,CAAC,CAAC;IAEF,MAAM,aAAa,GAA0B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AAClE,QAAA,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE;AACpB,QAAA,IAAI,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AAClC,YAAA,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,eAAe,CAAC;QAC9C;aAAO;AACL,YAAA,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;QAChC;AAEA,QAAA,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM;AAClE,QAAA,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM;QAElE,OAAO;AACL,YAAA,GAAG,CAAC;AACJ,YAAA,EAAE,EAAE,SAAS;AACb,YAAA,MAAM,EAAE;gBACN,GAAG,CAAC,CAAC,MAAM;AACX,gBAAA,MAAM,EAAE,YAAY;AACrB,aAAA;AACD,YAAA,MAAM,EAAE;gBACN,GAAG,CAAC,CAAC,MAAM;AACX,gBAAA,MAAM,EAAE,YAAY;AACrB,aAAA;SACF;AACH,IAAA,CAAC,CAAC;IAEF,OAAO;AACL,QAAA,MAAM,EAAE;YACN,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,aAAa,CAAC;YAC1C,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,aAAa,CAAC;AAC3C,SAAA;QACD,SAAS;KACV;AACH;AAEA;;AAEG;AACG,SAAU,kBAAkB,CAChC,SAAmD,EACnD,OAAiB,EAAA;IAEjB,MAAM,cAAc,GAAG;SACpB,GAAG,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC;SACzB,MAAM,CAAC,CAAC,GAAG,KAAsC,GAAG,KAAK,SAAS,CAAC;AAEtE,IAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;QAC/B,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;IACvB;IAEA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAExD,OAAO;AACL,QAAA,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC;AACpB,QAAA,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC;KACrB;AACH;AAEA;;;AAGG;AACG,SAAU,uBAAuB,CACrC,eAAyD,EACzD,eAAyD,EACzD,SAA0B,EAC1B,SAAiC,EACjC,SAAmC,EAAA;AAEnC,IAAA,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAC1D,MAAM,YAAY,GAAG,kBAAkB,CAAC,eAAe,EAAE,aAAa,CAAC;IAEvE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;AAEvC,IAAA,MAAM,YAAY,GAA6C;AAC7D,QAAA,GAAG,eAAe;KACnB;AAED,IAAA,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE;AAClC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;AACzB,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;AAC9B,QAAA,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QACvD,YAAY,CAAC,KAAK,CAAC,GAAG;AACpB,YAAA,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE;AAChB,YAAA,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE;SACjB;IACH;AAEA,IAAA,OAAO,YAAY;AACrB;AAEA;;;AAGG;SACa,kBAAkB,CAChC,YAAqD,EACrD,aAAsD,EACtD,YAAqD,EACrD,aAAsD,EACtD,SAAiC,EACjC,SAA0B,EAC1B,WAAiC,EACjC,aAAgD,EAAA;;IAMhD,MAAM,YAAY,GAA4C,EAAE;IAChE,MAAM,aAAa,GAA4C,EAAE;;AAGjE,IAAA,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;QAC3D,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE;IACtC;AACA,IAAA,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;QAC7D,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE;IACxC;AAEA,IAAA,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AAC1D,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAC9B,IAAI,KAAK,EAAE;YACT,MAAM,iBAAiB,GAA4B,EAAE;YACrD,MAAM,UAAU,GAAG,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC;;AAG1C,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AACxB,gBAAA,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE;YAC1B;AAEA,YAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACtD,gBAAA,MAAM,cAAc,GAAG,aAAa,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC;gBAC/D,MAAM,cAAc,GAAG;sBACnB,SAAS,CAAC;AACR,wBAAA,MAAM,EAAE,KAAK;wBACb,QAAQ;wBACR,KAAK;AACL,wBAAA,IAAI,EAAE,OAAO;wBACb,UAAU;wBACV,cAAc;qBACf;sBACD,KAAK;;AAET,gBAAA,IAAI,cAAc,KAAK,IAAI,EAAE;AAC3B,oBAAA,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;gBACtC;qBAAO;;AAEL,oBAAA,iBAAiB,CAAC,QAAQ,CAAC,GAAG,cAAc;gBAC9C;YACF;;YAGA,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,gBAAA,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,iBAAiB,EAAE;YACxE;;AAGA,YAAA,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AACjD,gBAAA,OAAO,YAAY,CAAC,KAAK,CAAC;YAC5B;QACF;IACF;AAEA,IAAA,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;AAC5D,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAC9B,IAAI,KAAK,EAAE;YACT,MAAM,kBAAkB,GAA4B,EAAE;YACtD,MAAM,UAAU,GAAG,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC;;AAG1C,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;AACzB,gBAAA,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE;YAC3B;AAEA,YAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACvD,gBAAA,MAAM,cAAc,GAAG,aAAa,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC;AAC/D,gBAAA,MAAM,aAAa,GAAG,aAAa,CAAC,KAAK;AACvC,sBAAE,oBAAoB,CAAC,KAAK;sBAC1B,SAAS;gBACb,MAAM,cAAc,GAAG;sBACnB,SAAS,CAAC;AACR,wBAAA,MAAM,EAAE,KAAK;wBACb,QAAQ;wBACR,KAAK;AACL,wBAAA,IAAI,EAAE,QAAQ;wBACd,UAAU;wBACV,cAAc;wBACd,aAAa;qBACd;sBACD,KAAK;;AAET,gBAAA,IAAI,cAAc,KAAK,IAAI,EAAE;AAC3B,oBAAA,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;gBACvC;qBAAO;;AAEL,oBAAA,kBAAkB,CAAC,QAAQ,CAAC,GAAG,cAAc;gBAC/C;YACF;;YAGA,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC9C,aAAa,CAAC,KAAK,CAAC,GAAG;oBACrB,GAAG,aAAa,CAAC,KAAK,CAAC;AACvB,oBAAA,GAAG,kBAAkB;iBACtB;YACH;;AAGA,YAAA,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AAClD,gBAAA,OAAO,aAAa,CAAC,KAAK,CAAC;YAC7B;QACF;IACF;AAEA,IAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE;AACxC;AAEA;;;;AAIG;AACG,SAAU,iBAAiB,CAC/B,cAAmC,EACnC,cAAmC,EACnC,SAA0B,EAC1B,SAAiC,EACjC,SAA0B,EAAA;AAK1B,IAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB;AAC7C,IAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAA+B;AAE5D,IAAA,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE;QAClC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;AACzC,QAAA,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB;AAEjD,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE;AAChC,YAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CACjD,IAAI,CAAC,eAAe,CAAC,MAAM,CAC5B,EAAE;AACD,gBAAA,MAAM,MAAM,GACV,OAAO,UAAU,KAAK;AACpB,sBAAE;AACF,sBAAG,UAAkC,EAAE,MAAM;AACjD,gBAAA,IAAI,MAAM;AAAE,oBAAA,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;YACnD;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE;AACjC,YAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CACjD,IAAI,CAAC,eAAe,CAAC,OAAO,CAC7B,EAAE;AACD,gBAAA,MAAM,MAAM,GACV,OAAO,UAAU,KAAK;AACpB,sBAAE;AACF,sBAAE,KAAK,CAAC,OAAO,CAAC,UAAU;AAC1B,0BAAE,UAAU,CAAC,CAAC;0BACZ,SAAS;AACf,gBAAA,IAAI,MAAM;AAAE,oBAAA,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;YACnD;QACF;AAEA,QAAA,IAAI,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE;YAC5B,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC;QACjD;IACF;AAEA,IAAA,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,kBAAkB,CACxD,cAAc,CAAC,MAAM,IAAI,EAAE,EAC3B,cAAc,CAAC,OAAO,IAAI,EAAE,EAC5B,cAAc,CAAC,MAAM,IAAI,EAAE,EAC3B,cAAc,CAAC,OAAO,IAAI,EAAE,EAC5B,SAAS,EACT,SAAS,EACT,WAAW,EACX,aAAa,CACd;IAED,OAAO;QACL,YAAY;QACZ,aAAa;KACd;AACH;AAEA;;;AAGG;SACa,iBAAiB,CAC/B,aAAiD,EACjD,aAAiD,EACjD,SAAiC,EAAA;AAEjC,IAAA,MAAM,MAAM,GAAoB;QAC9B,KAAK,EAAE,EAAE,IAAI,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;KAC3C;IAED,IAAI,CAAC,aAAa,EAAE,KAAK;AAAE,QAAA,OAAO,MAAM;;AAGxC,IAAA,KAAK,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QACjE,MAAM,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC;QACxD,IAAI,cAAc,EAAE;YAClB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,cAAc,EAAE;QACjD;IACF;AAEA,IAAA,OAAO,MAAM;AACf;AAmBA,SAAS,cAAc,CAAC,KAAa,EAAE,OAAyB,EAAA;AAC9D,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,IAAI;AACzB,IAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC/B,OAAO,KAAK,KAAK,OAAO;IAC1B;AACA,IAAA,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B;AAEA;;;;;;;;;AASG;AACG,SAAU,mBAAmB,CAAC,MAAuB,EAAA;IACzD,OAAO,CAAC,eAAqC,KAAI;AAC/C,QAAA,MAAM,EACJ,MAAM,EACN,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,UAAU,EACV,cAAc,EACd,aAAa,GACd,GAAG,eAAe;AACnB,QAAA,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC;AAEpC,QAAA,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE;YACrC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC;gBAAE;YACjD,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;gBAAE;AAE7C,YAAA,IAAI,OAAO,CAAC,UAAU,IAAI,UAAU,EAAE;gBACpC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC;oBAAE;YACvD;AAEA,YAAA,IAAI,OAAO,CAAC,cAAc,IAAI,cAAc,EAAE;gBAC5C,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC;oBAAE;YAC/D;AAEA,YAAA,IAAI,OAAO,CAAC,aAAa,IAAI,aAAa,EAAE;gBAC1C,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC;oBAAE;YAC7D;AAEA,YAAA,IAAI,OAAO,CAAC,mBAAmB,IAAI,OAAO,EAAE;AAC1C,gBAAA,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC;AAC7C,gBAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC;AAC/C,gBAAA,IAAI,CAAC,WAAW;oBAAE;AAElB,gBAAA,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;oBAC9B,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;oBAChD,MAAM,OAAO,GAAG,iBAAiB,CAAC,UAAU,EAAE,YAAY,CAAC;AAE3D,oBAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,wBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;wBAC/D,IAAI,OAAO,GAAG,KAAK;AAEnB,wBAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;AAC3B,4BAAA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK;4BAC9B,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE;gCACnD,IAAI,QAAQ,GAAY,UAAU;AAElC,gCAAA,IAAI,OAAO,CAAC,QAAQ,YAAY,GAAG,EAAE;oCACnC,IACE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAClB,UAAuC,CACxC,EACD;wCACA,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAC7B,UAAuC,CACxC;wCACD,OAAO,GAAG,IAAI;oCAChB;gCACF;qCAAO;oCACL,IACE,OAAO,UAAU,KAAK,QAAQ;AAC9B,wCAAA,OAAO,UAAU,KAAK,QAAQ,EAC9B;AACA,wCAAA,IAAI,UAAU,IAAI,OAAO,CAAC,QAAQ,EAAE;AAClC,4CAAA,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;4CACvC,OAAO,GAAG,IAAI;wCAChB;oCACF;gCACF;AAEA,gCAAA,IAAI,OAAO,IAAI,QAAQ,KAAK,UAAU,EAAE;;oCAEtC,cAAc,CAAC,gBAAgB,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC;gCACxD;4BACF;wBACF;;;;AAKA,wBAAA,OAAO,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,gBAAgB,CAAC,GAAG,KAAK;oBAC/D;gBACF;qBAAO;oBACL,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE;wBACnD,IAAI,QAAQ,GAAY,UAAU;AAElC,wBAAA,IAAI,OAAO,CAAC,QAAQ,YAAY,GAAG,EAAE;4BACnC,IACE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAuC,CAAC,EAC7D;gCACA,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAC7B,UAAuC,CACxC;;AAED,gCAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,oCAAA,OAAO,IAAI;gCACb;AACA,gCAAA,OAAO,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC;4BACrC;wBACF;6BAAO;4BACL,IACE,OAAO,UAAU,KAAK,QAAQ;AAC9B,gCAAA,OAAO,UAAU,KAAK,QAAQ,EAC9B;AACA,gCAAA,IAAI,UAAU,IAAI,OAAO,CAAC,QAAQ,EAAE;AAClC,oCAAA,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;;AAEvC,oCAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,wCAAA,OAAO,IAAI;oCACb;AACA,oCAAA,OAAO,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC;gCACrC;4BACF;wBACF;oBACF;gBACF;gBACA;YACF;AAEA,YAAA,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;gBAC9B,IAAI,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;gBAE9C,IAAI,OAAO,EAAE;AACX,oBAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC;oBAC/C,IAAI,WAAW,EAAE;AACf,wBAAA,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC;AACpC,wBAAA,MAAM,eAAe,GACnB,OAAO,YAAY,KAAK;AACtB,8BAAE;8BACA,YAAY,YAAY;AAC1B,kCAAE;AACF,kCAAE,MAAM,CAAC,YAAY,CAAC;wBAC1B,IACE,eAAe,KAAK,eAAe;4BACnC,eAAe,KAAK,cAAc,EAClC;AACA,4BAAA,YAAY,GAAG,CAAC,eAAe,EAAE,GAAG,YAAY,CAAC;wBACnD;oBACF;gBACF;gBAEA,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC;AAEtD,gBAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,oBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAC1D,IAAI,OAAO,GAAG,KAAK;AAEnB,oBAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;AAC3B,wBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK;wBAC9B,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE;4BACnD,IAAI,QAAQ,GAAY,UAAU;AAElC,4BAAA,IAAI,OAAO,CAAC,QAAQ,YAAY,GAAG,EAAE;gCACnC,IACE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAuC,CAAC,EAC7D;oCACA,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAC7B,UAAuC,CACxC;oCACD,OAAO,GAAG,IAAI;gCAChB;4BACF;iCAAO;gCACL,IACE,OAAO,UAAU,KAAK,QAAQ;AAC9B,oCAAA,OAAO,UAAU,KAAK,QAAQ,EAC9B;AACA,oCAAA,IAAI,UAAU,IAAI,OAAO,CAAC,QAAQ,EAAE;AAClC,wCAAA,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;wCACvC,OAAO,GAAG,IAAI;oCAChB;gCACF;4BACF;AAEA,4BAAA,IAAI,OAAO,IAAI,QAAQ,KAAK,UAAU,EAAE;gCACtC,cAAc,CAAC,gBAAgB,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC;4BACxD;wBACF;oBACF;oBAEA,OAAO,OAAO,GAAG,gBAAgB,GAAG,KAAK;gBAC3C;YACF;iBAAO;gBACL,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,oBAAA,IAAI,OAAO,CAAC,QAAQ,YAAY,GAAG,EAAE;wBACnC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAkC,CAAC,EAAE;4BAC5D,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAkC,CAAC;wBACjE;oBACF;yBAAO;wBACL,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC1D,4BAAA,IAAI,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE;AAC7B,gCAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;4BAChC;wBACF;oBACF;gBACF;YACF;QACF;AAEA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/core/types.ts","../../src/builder/Registry.ts","../../src/runtime/utils.ts","../../src/runtime/components/GraphStructure.ts","../../src/runtime/components/EventEmitter.ts","../../src/runtime/components/RunContextManager.ts","../../../protocol/lib/esm/index.js","../../src/runtime/components/HandleResolver.ts","../../src/runtime/components/ValuePropagator.ts","../../src/runtime/components/ExecutionScheduler.ts","../../src/runtime/GraphRuntime.ts","../../src/builder/GraphBuilder.ts","../../src/runtime/LocalEngine.ts","../../src/plugins/compute.ts","../../src/plugins/composite.ts","../../src/misc/base.ts","../../src/examples/shared.ts","../../src/examples/simple.ts","../../src/examples/async.ts","../../src/examples/progress.ts","../../src/examples/validation.ts","../../src/misc/utils/json.ts","../../src/misc/utils/merge.ts"],"sourcesContent":["import type {\n DataTypeId,\n NodeTypeId,\n HandleId,\n InputHandleDescriptor,\n NodeCategoryId,\n ResolvedHandles,\n ExecutionPolicy,\n LogLevel,\n} from \"@bian-womp/spark-protocol\";\n\nexport interface DataTypeDescriptor<T = unknown> {\n id: DataTypeId;\n displayName?: string;\n validate(value: T): boolean;\n helpers?: Record<string, unknown>;\n // Optional metadata used by tooling/UI (non-functional at runtime)\n bakeTarget?: { nodeTypeId: NodeTypeId; inputHandle: HandleId };\n}\n\nexport type InvalidateReason =\n | \"input-changed\"\n | \"dependency-changed\"\n | \"manual\"\n | \"disposed\";\n\nexport interface NodeContext<State> {\n state: State;\n setState(next: Partial<State>): void;\n}\n\nexport interface ExecutionContext<State> extends NodeContext<State> {\n nodeId: string;\n environment: Record<string, unknown>;\n runId: string;\n abortSignal: AbortSignal;\n\n emit: (handle: HandleId, value: unknown) => void;\n invalidateDownstream: () => void;\n scheduleInputsChanged: () => void;\n getInput: (handle: HandleId) => unknown;\n reportProgress?: (value: number) => void;\n log: (\n level: LogLevel,\n message: string,\n context?: Record<string, unknown>\n ) => void;\n}\n\n/**\n * Extract State type from ExecutionContext<State>\n */\nexport type ExtractStateFromContext<T> = T extends ExecutionContext<infer S>\n ? S\n : never;\n\n/**\n * Extract State type from impl function signature\n */\nexport type ExtractStateFromImpl<Impl> = Impl extends (\n inputs: any,\n ctx: ExecutionContext<infer State>\n) => any\n ? State\n : never;\n\n/**\n * Extract Inputs type from impl function signature\n */\nexport type ExtractInputsFromImpl<Impl> = Impl extends (\n inputs: infer I,\n ctx: any\n) => any\n ? I\n : never;\n\nexport interface RuntimeNodeStats {\n runs: number;\n active: number;\n queued: number;\n lastStartAt?: number;\n lastEndAt?: number;\n lastDurationMs?: number;\n progress: number;\n lastError?: unknown;\n}\n\nexport interface RuntimeEdgeStats {\n runs: number;\n inFlight: boolean;\n lastStartAt?: number;\n lastEndAt?: number;\n lastDurationMs?: number;\n progress: number;\n lastError?: unknown;\n}\n\n// Typed output helper for union outputs\nexport type TypedOutputValue<T = unknown> = {\n __spark_type: DataTypeId;\n __spark_value: T;\n};\n\nexport function typed<T = unknown>(\n typeId: DataTypeId,\n value: T\n): TypedOutputValue<T> {\n return { __spark_type: typeId, __spark_value: value };\n}\n\nexport function isTypedOutput(v: unknown): v is TypedOutputValue<unknown> {\n return (\n !!v &&\n typeof v === \"object\" &&\n Object.prototype.hasOwnProperty.call(v, \"__spark_type\")\n );\n}\n\nexport function getTypedOutputTypeId(v: unknown): DataTypeId | undefined {\n if (isTypedOutput(v)) return String(v.__spark_type);\n return undefined;\n}\n\nexport function getTypedOutputValue(v: unknown): unknown {\n if (isTypedOutput(v)) return v.__spark_value;\n return v;\n}\n\nexport function getInputTypeId(\n inputs: Record<string, InputHandleDescriptor> | undefined,\n handle: HandleId\n): DataTypeId | undefined {\n const v = inputs ? inputs[handle] : undefined;\n if (!v) return undefined;\n return typeof v === \"string\" ? v : v.typeId;\n}\n\nexport function isInputPrivate(\n inputs: Record<string, InputHandleDescriptor> | undefined,\n handle: HandleId\n): boolean {\n const v = inputs ? inputs[handle] : undefined;\n return !!(v && typeof v === \"object\" && v.private);\n}\n\n// Helper type to extract State - prefers inferred from Impl, falls back to explicit State\ntype InferState<Impl, State> = ExtractStateFromImpl<Impl> extends never\n ? State\n : ExtractStateFromImpl<Impl>;\n\nexport interface NodeTypeDescriptor<\n I extends Record<string, InputHandleDescriptor> = Record<\n string,\n InputHandleDescriptor\n >,\n O extends Record<string, DataTypeId | DataTypeId[]> = Record<\n string,\n DataTypeId | DataTypeId[]\n >,\n State = unknown,\n Impl extends (inputs: any, ctx: ExecutionContext<any>) => any = (\n inputs: Record<string, unknown>,\n ctx: ExecutionContext<State>\n ) => void | Record<string, unknown> | Promise<void | Record<string, unknown>>\n> {\n id: NodeTypeId;\n categoryId: NodeCategoryId;\n displayName?: string;\n inputs: I; // handle -> DataTypeId or descriptor\n outputs: O; // handle -> DataTypeId or union of DataTypeIds\n impl: Impl; // category-specific implementation payload\n // Optional default runtime policy for this node type (merged with category/node-instance policy)\n policy?: Partial<ExecutionPolicy>;\n // Optional log level for this node type (controls lifecycle logging)\n logLevel?: LogLevel;\n // Optional per-node dynamic handle resolver. When provided, the runtime merges\n // these handles over static inputs/outputs based on per-node params/environment.\n resolveHandles?: (ctx: {\n nodeId: string;\n environment: Record<string, unknown>;\n params?: Record<string, unknown>;\n inputs?: Record<string, unknown>;\n }) => Partial<ResolvedHandles> | Promise<Partial<ResolvedHandles>>;\n // Registry-level per-handle defaults. If function, computed per node instance.\n inputDefaults?: Record<string, unknown>;\n lifecycle?: {\n prepare?: (\n params: Record<string, unknown>,\n ctx: ExecutionContext<InferState<Impl, State>>\n ) => void | Promise<void>;\n dispose?: (ctx: NodeContext<InferState<Impl, State>>) => void;\n };\n}\n","import type {\n DataTypeId,\n InputHandleDescriptor,\n} from \"@bian-womp/spark-protocol\";\nimport type {\n DataTypeDescriptor,\n ExecutionContext,\n NodeTypeDescriptor,\n} from \"../core/types\";\nimport type { NodeCategoryDescriptor } from \"../core/categories\";\n\n// Internal path resolution helpers\ninterface _EdgeStepSync {\n from: string;\n to: string;\n kind: \"sync\";\n convert: (v: unknown) => unknown;\n}\ninterface _EdgeStepAsync {\n from: string;\n to: string;\n kind: \"async\";\n convertAsync: (v: unknown, signal: AbortSignal) => Promise<unknown>;\n}\ntype _EdgeStep = _EdgeStepSync | _EdgeStepAsync;\n\n// Resolved coercion contract\nexport interface ResolvedCoercionSync {\n kind: \"sync\";\n convert: (value: unknown) => unknown;\n}\nexport interface ResolvedCoercionAsync {\n kind: \"async\";\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n}\nexport type ResolvedCoercion = ResolvedCoercionSync | ResolvedCoercionAsync;\n\nexport class CategoryRegistry {\n private categories = new Map<string, NodeCategoryDescriptor<any, any>>();\n register<Impl, State>(cat: NodeCategoryDescriptor<Impl, State>): this {\n this.categories.set(cat.id, cat);\n return this;\n }\n get(id: string): NodeCategoryDescriptor<any, any> | undefined {\n return this.categories.get(id);\n }\n has(id: string): boolean {\n return this.categories.has(id);\n }\n}\n\nexport class Registry {\n private static idCounter = 0;\n public readonly id: string;\n readonly types = new Map<string, DataTypeDescriptor<any>>();\n readonly nodes = new Map<string, NodeTypeDescriptor>();\n readonly enums = new Map<\n string,\n {\n options: Array<{ value: number; label: string }>;\n valueToLabel: Map<number, string>;\n labelToValue: Map<string, number>;\n }\n >();\n readonly categories = new CategoryRegistry();\n readonly serializers = new Map<\n string,\n {\n serialize: (value: unknown) => unknown;\n deserialize: (data: unknown) => unknown;\n }\n >();\n\n constructor(id?: string) {\n this.id = id ?? `r${Registry.idCounter++}`;\n }\n\n private coercions = new Map<\n string,\n { convert: (value: unknown) => unknown; nonTransitive: boolean }\n >();\n private asyncCoercions = new Map<\n string,\n {\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n nonTransitive: boolean;\n }\n >();\n\n private resolvedCache = new Map<\n string,\n | { kind: \"sync\"; convert: (value: unknown) => unknown }\n | {\n kind: \"async\";\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>;\n }\n >();\n\n registerType(\n desc: DataTypeDescriptor,\n opts?: {\n withArray?: boolean;\n arrayId?: string;\n arrayPickFirstDefined?: boolean;\n }\n ): this {\n this.types.set(desc.id, desc);\n // Any structural change invalidates resolution cache\n this.resolvedCache.clear();\n if (!this.serializers.has(desc.id)) {\n this.registerSerializer(desc.id, {\n serialize: (v) => v,\n deserialize: (d) => d,\n });\n }\n if (opts?.withArray) {\n const arrayId = opts.arrayId ?? `${desc.id}[]`;\n if (!this.types.has(arrayId)) {\n const arrayDesc: DataTypeDescriptor<any[]> = {\n id: arrayId,\n validate: (v: unknown) =>\n Array.isArray(v) &&\n v.every((x) => {\n try {\n return desc.validate(x);\n } catch {\n return false;\n }\n }),\n };\n this.types.set(arrayId, arrayDesc);\n }\n\n this.registerCoercion(desc.id, arrayId, (value) =>\n Array.isArray(value) ? value : [value]\n );\n this.registerCoercion(arrayId, desc.id, (value) => {\n if (!Array.isArray(value)) return value;\n if (opts.arrayPickFirstDefined) {\n for (const x of value) if (x !== undefined) return x;\n return undefined;\n }\n return value[0];\n });\n }\n return this;\n }\n\n registerNode<\n I extends Record<string, InputHandleDescriptor>,\n O extends Record<string, DataTypeId | DataTypeId[]> = Record<\n string,\n DataTypeId | DataTypeId[]\n >,\n State = unknown,\n Impl extends (inputs: any, ctx: ExecutionContext<any>) => any = (\n inputs: Record<string, unknown>,\n ctx: ExecutionContext<State>\n ) =>\n | void\n | Record<string, unknown>\n | Promise<void | Record<string, unknown>>\n >(desc: NodeTypeDescriptor<I, O, State, Impl>): this {\n this.nodes.set(desc.id, desc as NodeTypeDescriptor<any, any, any, any>);\n return this;\n }\n\n registerSerializer(\n typeId: string,\n s: {\n serialize: (value: unknown) => unknown;\n deserialize: (data: unknown) => unknown;\n }\n ): this {\n this.serializers.set(typeId, s);\n // If an array variant of this type exists and doesn't have a serializer,\n // auto-register an array serializer that maps each element using the base serializer.\n const arrayId = `${typeId}[]`;\n if (this.types.has(arrayId) && !this.serializers.has(arrayId)) {\n this.serializers.set(arrayId, {\n serialize: (value: unknown) =>\n Array.isArray(value) ? value.map((el) => s.serialize(el)) : value,\n deserialize: (data: unknown) =>\n Array.isArray(data) ? data.map((el) => s.deserialize(el)) : data,\n });\n }\n return this;\n }\n\n // Register a type coercion from one type id to another\n registerCoercion(\n fromTypeId: string,\n toTypeId: string,\n convert: (value: unknown) => unknown,\n opts?: { nonTransitive?: boolean }\n ): this {\n this.coercions.set(`${fromTypeId}->${toTypeId}`, {\n convert,\n nonTransitive: !!opts?.nonTransitive,\n });\n // If both source and target have array variants, add derived array->array coercion\n const fromArr =\n fromTypeId === \"base.object\" ? fromTypeId : `${fromTypeId}[]`;\n const toArr = toTypeId === \"base.object\" ? toTypeId : `${toTypeId}[]`;\n const arrKey = `${fromArr}->${toArr}`;\n if (this.types.has(fromArr) && this.types.has(toArr)) {\n if (!this.coercions.has(arrKey) && !this.asyncCoercions.has(arrKey)) {\n this.coercions.set(arrKey, {\n convert: (value: unknown) => {\n if (Array.isArray(value)) return value.map((v) => convert(v));\n // Best-effort: coerce single to array-of-single\n return [convert(value)];\n },\n nonTransitive: !!opts?.nonTransitive,\n });\n }\n }\n this.resolvedCache.clear();\n return this;\n }\n\n // Register an async type coercion from one type id to another\n registerAsyncCoercion(\n fromTypeId: string,\n toTypeId: string,\n convertAsync: (value: unknown, signal: AbortSignal) => Promise<unknown>,\n opts?: { nonTransitive?: boolean }\n ): this {\n this.asyncCoercions.set(`${fromTypeId}->${toTypeId}`, {\n convertAsync,\n nonTransitive: !!opts?.nonTransitive,\n });\n // If both source and target have array variants, add derived array->array async coercion\n const fromArr =\n fromTypeId === \"base.object\" ? fromTypeId : `${fromTypeId}[]`;\n const toArr = toTypeId === \"base.object\" ? toTypeId : `${toTypeId}[]`;\n const arrKey = `${fromArr}->${toArr}`;\n if (this.types.has(fromArr) && this.types.has(toArr)) {\n if (!this.coercions.has(arrKey) && !this.asyncCoercions.has(arrKey)) {\n this.asyncCoercions.set(arrKey, {\n convertAsync: async (value: unknown, signal: AbortSignal) => {\n if (Array.isArray(value)) {\n const out: unknown[] = [];\n for (let i = 0; i < value.length; i++) {\n if (signal?.aborted)\n throw signal.reason ?? new Error(\"aborted\");\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n out.push(await convertAsync((value as unknown[])[i], signal));\n }\n return out;\n }\n return [await convertAsync(value, signal)];\n },\n nonTransitive: !!opts?.nonTransitive,\n });\n }\n }\n this.resolvedCache.clear();\n return this;\n }\n\n canCoerce(\n fromTypeId: string | undefined,\n toTypeId: string | undefined\n ): boolean {\n if (!fromTypeId || !toTypeId) return false;\n return !!this.resolveCoercion(fromTypeId, toTypeId);\n }\n\n getCoercion(\n fromTypeId: string,\n toTypeId: string\n ): ((value: unknown) => unknown) | undefined {\n const resolved = this.resolveCoercion(fromTypeId, toTypeId);\n if (!resolved) return undefined;\n if (resolved.kind === \"sync\") return resolved.convert;\n return undefined;\n }\n\n getAsyncCoercion(\n fromTypeId: string,\n toTypeId: string\n ): ((value: unknown, signal: AbortSignal) => Promise<unknown>) | undefined {\n const resolved = this.resolveCoercion(fromTypeId, toTypeId);\n if (!resolved) return undefined;\n if (resolved.kind === \"async\") return resolved.convertAsync;\n return undefined;\n }\n\n // Introspection for dynamic discovery\n listCoercions(): Array<{\n from: string;\n to: string;\n async: boolean;\n nonTransitive: boolean;\n }> {\n const out: Array<{\n from: string;\n to: string;\n async: boolean;\n nonTransitive: boolean;\n }> = [];\n for (const [key, rec] of this.coercions.entries()) {\n const [from, to] = key.split(\"->\");\n out.push({\n from,\n to,\n async: false,\n nonTransitive: rec.nonTransitive,\n });\n }\n for (const [key, rec] of this.asyncCoercions.entries()) {\n const [from, to] = key.split(\"->\");\n out.push({ from, to, async: true, nonTransitive: rec.nonTransitive });\n }\n return out;\n }\n\n resolveCoercion(\n fromTypeId: string,\n toTypeId: string\n ): ResolvedCoercion | undefined {\n const cacheKey = `${fromTypeId}->${toTypeId}`;\n const cached = this.resolvedCache.get(cacheKey);\n if (cached) return cached;\n\n if (fromTypeId === toTypeId) {\n const res: ResolvedCoercionSync = { kind: \"sync\", convert: (v) => v };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n\n // Direct edges (regardless of nonTransitive)\n const directSync = this.coercions.get(cacheKey);\n if (directSync) {\n const res: ResolvedCoercionSync = {\n kind: \"sync\",\n convert: directSync.convert,\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n const directAsync = this.asyncCoercions.get(cacheKey);\n if (directAsync) {\n const res: ResolvedCoercionAsync = {\n kind: \"async\",\n convertAsync: directAsync.convertAsync,\n };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n\n // Build adjacency from transitive-allowed edges only\n const getNeighbors = (from: string): _EdgeStep[] => {\n const out: _EdgeStep[] = [];\n for (const [key, rec] of this.coercions.entries()) {\n if (rec.nonTransitive) continue;\n const [src, dst] = key.split(\"->\");\n if (src === from)\n out.push({ from: src, to: dst, kind: \"sync\", convert: rec.convert });\n }\n for (const [key, rec] of this.asyncCoercions.entries()) {\n if (rec.nonTransitive) continue;\n const [src, dst] = key.split(\"->\");\n if (src === from)\n out.push({\n from: src,\n to: dst,\n kind: \"async\",\n convertAsync: rec.convertAsync,\n });\n }\n return out;\n };\n\n // Dijkstra-like search with lexicographic cost (edges, asyncCount)\n type Entry = {\n node: string;\n cost: { edges: number; async: number };\n path: _EdgeStep[];\n };\n const betterOf = (\n a: { edges: number; async: number } | undefined,\n b: { edges: number; async: number }\n ) => {\n if (!a) return true;\n if (b.edges !== a.edges) return b.edges < a.edges;\n return b.async < a.async;\n };\n\n const best = new Map<string, { edges: number; async: number }>();\n const queue: Entry[] = [];\n const push = (e: Entry) => {\n // simple insertion to keep queue roughly ordered by cost\n let i = 0;\n while (i < queue.length) {\n const q = queue[i];\n if (\n e.cost.edges < q.cost.edges ||\n (e.cost.edges === q.cost.edges && e.cost.async < q.cost.async)\n ) {\n break;\n }\n i++;\n }\n queue.splice(i, 0, e);\n };\n\n push({ node: fromTypeId, cost: { edges: 0, async: 0 }, path: [] });\n best.set(fromTypeId, { edges: 0, async: 0 });\n\n while (queue.length > 0) {\n const cur = queue.shift()!;\n if (cur.node === toTypeId) {\n // Compose\n const hasAsync = cur.path.some((s) => s.kind === \"async\");\n if (!hasAsync) {\n const convert = (value: unknown) => {\n let acc = value;\n for (const step of cur.path) {\n // all sync by construction\n acc = (step as _EdgeStepSync).convert(acc);\n }\n return acc;\n };\n const res: ResolvedCoercionSync = { kind: \"sync\", convert };\n this.resolvedCache.set(cacheKey, res);\n return res;\n } else {\n const convertAsync = async (value: unknown, signal: AbortSignal) => {\n let acc: unknown = value;\n for (const step of cur.path) {\n if (step.kind === \"sync\") {\n acc = step.convert(acc);\n } else {\n acc = await step.convertAsync(acc, signal);\n }\n }\n return acc;\n };\n const res: ResolvedCoercionAsync = { kind: \"async\", convertAsync };\n this.resolvedCache.set(cacheKey, res);\n return res;\n }\n }\n // expand neighbors\n for (const step of getNeighbors(cur.node)) {\n const nextCost = {\n edges: cur.cost.edges + 1,\n async: cur.cost.async + (step.kind === \"async\" ? 1 : 0),\n };\n const prev = best.get(step.to);\n if (betterOf(prev, nextCost)) {\n best.set(step.to, nextCost);\n push({ node: step.to, cost: nextCost, path: [...cur.path, step] });\n }\n }\n }\n\n return undefined;\n }\n\n // Enum support\n registerEnum(desc: {\n id: string;\n displayName?: string;\n options: Array<{ value: number; label: string }>;\n bakeTarget?: { nodeTypeId: string; inputHandle: string };\n opts?: {\n labelType?: string;\n valueType?: string;\n withArray?: boolean;\n arrayId?: string;\n arrayPickFirstDefined?: boolean;\n };\n }): this {\n const { id, displayName, options, opts, bakeTarget } = desc;\n const labelType = opts?.labelType ?? \"base.string\";\n const valueType = opts?.valueType ?? \"base.float\";\n\n const valueToLabel = new Map<number, string>();\n const labelToValue = new Map<string, number>();\n for (const { value, label } of options) {\n valueToLabel.set(value, label);\n labelToValue.set(label.toLowerCase(), value);\n }\n this.enums.set(id, {\n options,\n valueToLabel,\n labelToValue,\n });\n // Register type descriptor and serializer for enum (stored as number)\n this.registerType(\n {\n id,\n displayName,\n validate: (v: unknown) =>\n typeof v === \"number\" && valueToLabel.has(Number(v)),\n bakeTarget,\n },\n opts\n );\n this.registerSerializer(id, {\n serialize: (v) => v,\n deserialize: (d) => Number(d),\n });\n // Coercions: string -> enum (by label), float -> enum (by numeric value), enum -> string (label)\n this.registerCoercion(labelType, id, (value) => {\n const s = String(value ?? \"\")\n .trim()\n .toLowerCase();\n const rec = this.enums.get(id);\n if (!rec) return value;\n if (rec.labelToValue.has(s)) return rec.labelToValue.get(s);\n const asNum = Number(s);\n if (Number.isFinite(asNum) && rec.valueToLabel.has(asNum)) return asNum;\n return Array.from(rec.valueToLabel.keys())[0] ?? 0;\n });\n this.registerCoercion(valueType, id, (value) => {\n const n = Number(value);\n const rec = this.enums.get(id);\n if (!rec) return value;\n return rec.valueToLabel.has(n)\n ? n\n : Array.from(rec.valueToLabel.keys())[0] ?? 0;\n });\n this.registerCoercion(id, labelType, (value) => {\n const n = Number(value);\n const rec = this.enums.get(id);\n if (!rec) return String(value);\n return rec.valueToLabel.get(n) ?? String(n);\n });\n return this;\n }\n}\n","/**\n * Shared utility functions for runtime components\n */\n\n/**\n * Type guard to check if a value is a Promise\n */\nexport function isPromise<T = unknown>(value: unknown): value is Promise<T> {\n return !!value && typeof (value as any).then === \"function\";\n}\n\n/**\n * Unwrap a value that might be a Promise\n */\nexport async function unwrapMaybePromise<T>(value: T | Promise<T>): Promise<T> {\n return isPromise<T>(value) ? await value : value;\n}\n\n/**\n * Shallow/deep-ish equality check to avoid unnecessary runs on identical values\n */\nexport function valuesEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== typeof b) return false;\n if (a && b && typeof a === \"object\") {\n try {\n return JSON.stringify(a) === JSON.stringify(b);\n } catch {\n return false;\n }\n }\n return false;\n}\n","import type {\n GraphDefinition,\n ResolvedHandles,\n} from \"@bian-womp/spark-protocol\";\nimport { Registry } from \"../../builder/Registry\";\nimport {\n getInputTypeId,\n getTypedOutputTypeId,\n getTypedOutputValue,\n} from \"../../core/types\";\nimport type { RuntimeNode, RuntimeEdge } from \"./types\";\nimport { isPromise } from \"../utils\";\n\n/**\n * GraphStructure component - manages nodes, edges, and handle resolution\n */\nexport class GraphStructure {\n private nodes = new Map<string, RuntimeNode<any>>();\n private edges: RuntimeEdge[] = [];\n private registry?: Registry;\n private resolvedByNode = new Map<string, ResolvedHandles>();\n\n constructor(registry?: Registry) {\n this.registry = registry;\n }\n\n // Node accessors\n getNode(nodeId: string): RuntimeNode<any> | undefined {\n return this.nodes.get(nodeId);\n }\n\n getNodes(): Map<string, RuntimeNode<any>> {\n return this.nodes;\n }\n\n setNode(nodeId: string, node: RuntimeNode<any>): void {\n this.nodes.set(nodeId, node);\n }\n\n deleteNode(nodeId: string): void {\n this.nodes.delete(nodeId);\n }\n\n hasNode(nodeId: string): boolean {\n return this.nodes.has(nodeId);\n }\n\n // Edge accessors\n getEdges(): RuntimeEdge[] {\n return this.edges;\n }\n\n setEdges(edges: RuntimeEdge[]): void {\n this.edges = edges;\n }\n\n // Registry accessor\n getRegistry(): Registry | undefined {\n return this.registry;\n }\n\n setRegistry(registry: Registry): void {\n this.registry = registry;\n }\n\n // Resolved handles accessors\n getResolvedHandles(nodeId: string): ResolvedHandles | undefined {\n return this.resolvedByNode.get(nodeId);\n }\n\n setResolvedHandles(nodeId: string, handles: ResolvedHandles): void {\n this.resolvedByNode.set(nodeId, handles);\n }\n\n getResolvedHandlesMap(): Map<string, ResolvedHandles> {\n return this.resolvedByNode;\n }\n\n // Static factory methods\n static computeResolvedHandleMap(\n def: GraphDefinition,\n registry: Registry,\n environment?: Record<string, unknown>\n ): { map: Map<string, ResolvedHandles>; pending: Set<string> } {\n const out = new Map<string, ResolvedHandles>();\n const pending = new Set<string>();\n\n for (const n of def.nodes) {\n const desc = registry.nodes.get(n.typeId);\n if (!desc) continue;\n const overrideInputs = n.resolvedHandles?.inputs;\n const overrideOutputs = n.resolvedHandles?.outputs;\n const overrideDefaults = n.resolvedHandles?.inputDefaults;\n // Resolve dynamic handles if available (initial pass: inputs may be undefined)\n let dyn: Partial<ResolvedHandles> = {};\n try {\n if (typeof desc.resolveHandles === \"function\") {\n const maybe = desc.resolveHandles({\n nodeId: n.nodeId,\n environment: environment || {},\n params: n.params,\n inputs: undefined,\n });\n // Only use sync results here; async results are applied via recompute later\n if (isPromise(maybe)) {\n // mark node as pending async recompute\n pending.add(n.nodeId);\n } else {\n dyn = maybe || {};\n }\n }\n } catch {\n // ignore dynamic resolution errors at this stage\n }\n // Merge base with dynamic and overrides (allow partial resolvedHandles)\n const inputs = {\n ...desc.inputs,\n ...dyn.inputs,\n ...overrideInputs,\n };\n const outputs = {\n ...desc.outputs,\n ...dyn.outputs,\n ...overrideOutputs,\n };\n const inputDefaults = {\n ...desc.inputDefaults,\n ...dyn.inputDefaults,\n ...overrideDefaults,\n };\n out.set(n.nodeId, { inputs, outputs, inputDefaults });\n }\n return { map: out, pending };\n }\n\n static buildEdges(\n def: GraphDefinition,\n registry: Registry,\n resolvedByNode: Map<string, ResolvedHandles>\n ): RuntimeEdge[] {\n return def.edges.map((e): RuntimeEdge => {\n const srcNode = def.nodes.find((n) => n.nodeId === e.source.nodeId);\n const dstNode = def.nodes.find((n) => n.nodeId === e.target.nodeId);\n let effectiveTypeId = e.typeId; // Start with original\n let srcDeclared: string | string[] | undefined;\n let dstDeclared: string | undefined;\n if (srcNode) {\n const resolved = resolvedByNode.get(srcNode.nodeId);\n if (resolved) srcDeclared = resolved.outputs[e.source.handle] as any;\n }\n if (!effectiveTypeId) {\n // Infer if not explicitly set\n effectiveTypeId = Array.isArray(srcDeclared)\n ? srcDeclared[0]\n : srcDeclared;\n }\n if (dstNode) {\n const resolved = resolvedByNode.get(dstNode.nodeId);\n if (resolved)\n dstDeclared = getInputTypeId(resolved.inputs, e.target.handle);\n }\n const { convert, convertAsync } = GraphStructure.buildEdgeConverters(\n srcDeclared,\n dstDeclared,\n registry,\n `buildEdges: ${srcNode?.typeId || \"\"}.${e.source.nodeId}.${\n e.source.handle\n } -> ${dstNode?.typeId || \"\"}.${e.target.nodeId}.${e.target.handle}`\n );\n return {\n id: e.id,\n source: { ...e.source },\n target: { ...e.target },\n typeId: e.typeId, // Preserve original (may be undefined)\n effectiveTypeId: effectiveTypeId ?? \"untyped\", // Always present\n convert,\n convertAsync,\n srcUnionTypes: Array.isArray(srcDeclared)\n ? [...srcDeclared]\n : undefined,\n dstDeclared,\n stats: { runs: 0, inFlight: false, progress: 0 },\n };\n });\n }\n\n // Clear all data\n clear(): void {\n this.nodes.clear();\n this.edges = [];\n this.resolvedByNode.clear();\n }\n\n // Static helper: build edge converters for type coercion\n static buildEdgeConverters(\n srcDeclared: string | string[] | undefined,\n dstDeclared: string | undefined,\n registry: Registry,\n edgeLabel: string\n ): {\n convert?: (v: unknown) => unknown;\n convertAsync?: (v: unknown, signal: AbortSignal) => Promise<unknown>;\n } {\n if (!dstDeclared || !srcDeclared) {\n return {};\n }\n\n const isUnion = Array.isArray(srcDeclared);\n const srcTypes = isUnion ? srcDeclared : [srcDeclared];\n\n // Helper to get the coercion for a specific type\n const getCoercion = (typeId: string) => {\n return registry.resolveCoercion(typeId, dstDeclared);\n };\n\n // Resolve coercions for all source types\n const coercions = srcTypes.map(getCoercion);\n const hasAsync = coercions.some((r) => r?.kind === \"async\");\n\n // Helper to extract and validate typed output for unions\n const extractPayload = (\n v: unknown\n ): { typeId: string; payload: unknown } => {\n const typeId = getTypedOutputTypeId(v);\n const payload = getTypedOutputValue(v);\n\n if (isUnion) {\n if (!typeId) {\n throw new Error(\n `Typed output required for union source (${edgeLabel}); allowed: ${srcTypes.join(\n \"|\"\n )}`\n );\n }\n if (!srcTypes.includes(typeId)) {\n throw new Error(\n `Invalid typed output ${typeId} (${edgeLabel}); allowed: ${srcTypes.join(\n \"|\"\n )}`\n );\n }\n } else if (typeId) {\n // Warn if typed output is used for non-union source\n console.warn(\n `Typed output ${typeId} is fed even though source is not union (${edgeLabel}): ${srcDeclared} -> ${dstDeclared}`\n );\n }\n\n return { typeId: typeId || srcTypes[0], payload };\n };\n\n if (hasAsync) {\n return {\n convertAsync: async (v: unknown, signal: AbortSignal) => {\n const { typeId, payload } = extractPayload(v);\n const res = getCoercion(typeId);\n if (!res) return payload;\n if (res.kind === \"async\") {\n return await res.convertAsync(payload, signal);\n }\n return res.convert(payload);\n },\n };\n }\n\n // Sync path\n const firstCoercion = coercions.find((r) => r?.kind === \"sync\");\n if (!firstCoercion) {\n return {};\n }\n\n return {\n convert: (v: unknown) => {\n const { typeId, payload } = extractPayload(v);\n const res = getCoercion(typeId);\n if (!res) return payload;\n if (res.kind === \"async\") {\n throw new Error(\n `Async coercion required but convert used (${edgeLabel})`\n );\n }\n return res.convert(payload);\n },\n };\n }\n}\n","import type {\n RuntimeEventName,\n RuntimeEventMap,\n RuntimeEventListener,\n} from \"../GraphRuntime\";\n\n/**\n * Event emitter component for GraphRuntime\n * Handles all event listener management and emission\n */\nexport class EventEmitter {\n private listeners = new Map<\n RuntimeEventName,\n Set<RuntimeEventListener<RuntimeEventName>>\n >();\n\n on<K extends RuntimeEventName>(\n event: K,\n handler: RuntimeEventListener<K>\n ): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n const set = this.listeners.get(event) as Set<RuntimeEventListener<K>>;\n set.add(handler);\n return () => set.delete(handler);\n }\n\n emit<K extends RuntimeEventName>(\n event: K,\n payload: RuntimeEventMap[K]\n ): void {\n const set = this.listeners.get(event);\n if (!set) return;\n for (const handler of Array.from(set)) {\n try {\n handler(payload);\n } catch (err) {\n console.error(`Error in ${event} handler:`, err);\n }\n }\n }\n\n clear(): void {\n this.listeners.clear();\n }\n}\n","import type { RunContext, RunContextId, RuntimeNode } from \"./types\";\n\n/**\n * RunContextManager component - manages run-context lifecycle\n */\nexport class RunContextManager {\n private runContexts = new Map<RunContextId, RunContext>();\n private runContextCounter = 0;\n\n /**\n * Create a new run-context for runFromHere\n */\n createRunContext(\n startNodeId: string,\n options?: {\n skipPropagateValues?: boolean;\n propagate?: boolean;\n }\n ): RunContext {\n const id: RunContextId = `rc-${++this.runContextCounter}`;\n const ctx: RunContext = {\n id,\n startNodes: new Set([startNodeId]),\n cancelledNodes: new Set(),\n pending: 0,\n skipPropagateValues: options?.skipPropagateValues ?? false,\n propagate: options?.propagate ?? true,\n };\n this.runContexts.set(id, ctx);\n return ctx;\n }\n\n /**\n * Get a run-context by ID\n */\n getRunContext(id: RunContextId): RunContext | undefined {\n return this.runContexts.get(id);\n }\n\n /**\n * Get all run-contexts\n */\n getAllRunContexts(): Map<RunContextId, RunContext> {\n return this.runContexts;\n }\n\n /**\n * Check if there are any active run-contexts\n */\n hasActiveRunContexts(): boolean {\n return this.runContexts.size > 0;\n }\n\n /**\n * Finish and remove a run-context when its pending count reaches zero\n */\n finishRunContext(\n id: RunContextId,\n nodes: Map<string, RuntimeNode<any>>\n ): void {\n const ctx = this.runContexts.get(id);\n if (!ctx) return;\n if (ctx.pending > 0) return; // Still has pending work\n\n // Clean up activeRunContexts from all nodes\n for (const node of nodes.values()) {\n node.activeRunContexts.delete(id);\n }\n\n this.runContexts.delete(id);\n if (ctx.resolve) ctx.resolve();\n }\n\n /**\n * Cancel a node for all run-contexts (called from UI or update())\n * @param nodeId - The node to cancel\n * @param includeDownstream - Whether to also cancel downstream nodes\n * @param edges - All edges in the graph (for downstream traversal)\n * @param nodes - All nodes in the graph (for clearing activeRunContexts)\n */\n cancelNodeInRunContexts(\n nodeId: string,\n includeDownstream: boolean,\n edges: Array<{ source: { nodeId: string }; target: { nodeId: string } }>,\n nodes: Map<string, RuntimeNode<any>>\n ): void {\n const toCancel = new Set<string>([nodeId]);\n if (includeDownstream) {\n // Collect all downstream nodes\n const queue = [nodeId];\n const visited = new Set<string>();\n for (let i = 0; i < queue.length; i++) {\n const cur = queue[i];\n if (visited.has(cur)) continue;\n visited.add(cur);\n for (const e of edges) {\n if (e.source.nodeId === cur) {\n const targetId = e.target.nodeId;\n if (!visited.has(targetId)) {\n toCancel.add(targetId);\n queue.push(targetId);\n }\n }\n }\n }\n }\n\n // Mark nodes as cancelled in all run-contexts\n for (const ctx of this.runContexts.values()) {\n for (const id of toCancel) {\n ctx.cancelledNodes.add(id);\n }\n }\n\n // Clear activeRunContexts for cancelled nodes\n for (const id of toCancel) {\n const node = nodes.get(id);\n if (node) node.activeRunContexts.clear();\n }\n }\n\n /**\n * Resolve all pending run-context promises (for cleanup)\n */\n resolveAll(): void {\n for (const ctx of this.runContexts.values()) {\n if (ctx.resolve) ctx.resolve();\n }\n }\n\n /**\n * Clear all run-contexts\n */\n clear(): void {\n this.runContexts.clear();\n }\n}\n","const LOG_LEVEL_VALUES = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n silent: 4,\n};\n\nexport { LOG_LEVEL_VALUES };\n//# sourceMappingURL=index.js.map\n","import type { ResolvedHandles } from \"@bian-womp/spark-protocol\";\nimport { LOG_LEVEL_VALUES } from \"@bian-womp/spark-protocol\";\nimport type { RuntimeNode } from \"./types\";\nimport { Registry } from \"../../builder/Registry\";\nimport type { GraphStructure } from \"./GraphStructure\";\nimport type { EventEmitter } from \"./EventEmitter\";\nimport type { IRuntimeCoordinator } from \"./interfaces\";\nimport { unwrapMaybePromise } from \"../utils\";\n\n/**\n * HandleResolver component - manages dynamic handle resolution\n */\nexport class HandleResolver {\n private recomputeTokenByNode = new Map<string, number>();\n private graphStructure: GraphStructure;\n private eventEmitter: EventEmitter;\n private runtimeCoordinator: IRuntimeCoordinator;\n private registry?: Registry;\n private environment: Record<string, unknown> = {};\n\n constructor(\n graphStructure: GraphStructure,\n eventEmitter: EventEmitter,\n runtimeCoordinator: IRuntimeCoordinator,\n registry?: Registry,\n environment?: Record<string, unknown>\n ) {\n this.graphStructure = graphStructure;\n this.eventEmitter = eventEmitter;\n this.runtimeCoordinator = runtimeCoordinator;\n this.registry = registry;\n this.environment = environment ?? {};\n }\n\n setRegistry(registry: Registry): void {\n this.registry = registry;\n }\n\n setEnvironment(environment: Record<string, unknown>): void {\n this.environment = environment;\n }\n\n /**\n * Schedule async recomputation of handles for a node\n */\n scheduleRecomputeHandles(nodeId: string): void {\n // If no registry or node not found, skip\n if (!this.registry) return;\n const node = this.graphStructure.getNode(nodeId);\n if (!node) return;\n setTimeout(() => {\n void this.recomputeHandlesForNode(nodeId);\n }, 0);\n }\n\n /**\n * Recompute dynamic handles for a single node using current inputs/environment\n */\n private async recomputeHandlesForNode(nodeId: string): Promise<void> {\n const registry = this.registry!;\n const node = this.graphStructure.getNode(nodeId);\n if (!node) return;\n const desc = registry.nodes.get(node.typeId);\n if (!desc) return;\n const resolveHandles = desc.resolveHandles;\n if (typeof resolveHandles !== \"function\") return;\n const token = (this.recomputeTokenByNode.get(nodeId) ?? 0) + 1;\n this.recomputeTokenByNode.set(nodeId, token);\n\n // Log resolveHandles-start\n const nodeLogLevel = node.logLevel ?? \"info\";\n const nodeLogValue = LOG_LEVEL_VALUES[nodeLogLevel] ?? 1;\n const shouldLog =\n nodeLogValue <= LOG_LEVEL_VALUES.debug && nodeLogLevel !== \"silent\";\n if (shouldLog) {\n console.info(`[node:${nodeId}:${node.typeId}] resolveHandles-start`);\n }\n\n let r: Partial<ResolvedHandles> | undefined;\n try {\n const res = resolveHandles({\n nodeId,\n environment: this.environment || {},\n params: node.params,\n inputs: node.inputs || {},\n });\n r = await unwrapMaybePromise(res);\n } catch {\n // Log resolveHandles-done even on error\n if (shouldLog) {\n console.info(\n `[node:${nodeId}:${node.typeId}] resolveHandles-done (error)`\n );\n }\n return;\n }\n\n // Log resolveHandles-done\n if (shouldLog) {\n console.info(`[node:${nodeId}:${node.typeId}] resolveHandles-done`);\n }\n // If a newer recompute was scheduled, drop this result\n if ((this.recomputeTokenByNode.get(nodeId) ?? 0) !== token) return;\n\n const resolved = this.graphStructure.getResolvedHandles(nodeId);\n if (!resolved) return; // Node was deleted\n\n // Re-fetch desc to ensure we have the latest (node might have been updated)\n const nodeDesc = registry.nodes.get(node.typeId);\n if (!nodeDesc) return;\n\n const inputs = { ...nodeDesc.inputs, ...r?.inputs };\n const outputs = { ...nodeDesc.outputs, ...r?.outputs };\n const inputDefaults = {\n ...nodeDesc.inputDefaults,\n ...r?.inputDefaults,\n };\n const next = { inputs, outputs, inputDefaults };\n const before = resolved;\n // Compare shallow-structurally via JSON\n if (JSON.stringify(before) === JSON.stringify(next)) return;\n\n this.graphStructure.setResolvedHandles(nodeId, next);\n\n // Call GraphRuntime's updateNodeHandles to update edges and re-propagate values\n this.runtimeCoordinator.updateNodeHandles(nodeId, next, registry);\n\n // Notify graph updated with the changed handles\n this.eventEmitter.emit(\"invalidate\", {\n reason: \"graph-updated\",\n resolvedHandles: { [nodeId]: next },\n });\n }\n}\n","import { getTypedOutputTypeId, isTypedOutput } from \"../../core/types\";\nimport type { RunContextId } from \"./types\";\nimport type { GraphStructure } from \"./GraphStructure\";\nimport type { EventEmitter } from \"./EventEmitter\";\nimport type { RunContextManager } from \"./RunContextManager\";\nimport { valuesEqual } from \"../utils\";\nimport {\n IExecutionScheduler,\n IHandleResolver,\n IRuntimeCoordinator,\n} from \"./interfaces\";\n\n/**\n * ValuePropagator component - handles value propagation through edges\n */\nexport class ValuePropagator {\n private graphStructure: GraphStructure;\n private eventEmitter: EventEmitter;\n private runContextManager: RunContextManager;\n private executionScheduler!: IExecutionScheduler; // Set after construction due to circular dependency\n private handleResolver: IHandleResolver;\n private runtimeCoordinator: IRuntimeCoordinator;\n private arrayInputBuckets = new Map<\n string,\n Map<string, Map<string, unknown[]>>\n >();\n\n constructor(\n graphStructure: GraphStructure,\n eventEmitter: EventEmitter,\n runContextManager: RunContextManager,\n handleResolver: IHandleResolver,\n runtimeCoordinator: IRuntimeCoordinator\n ) {\n this.graphStructure = graphStructure;\n this.eventEmitter = eventEmitter;\n this.runContextManager = runContextManager;\n this.handleResolver = handleResolver;\n this.runtimeCoordinator = runtimeCoordinator;\n }\n\n /**\n * Set the execution scheduler (called after construction to resolve circular dependency)\n */\n setExecutionScheduler(executionScheduler: IExecutionScheduler): void {\n this.executionScheduler = executionScheduler;\n }\n\n /**\n * Propagate value through edges\n * @param runContextIds - Optional set of run-context IDs. If provided, propagation is run-context aware.\n * If undefined or empty, behaves like auto mode (always propagates values and execution).\n */\n propagate(\n srcNodeId: string,\n srcHandle: string,\n value: unknown,\n runContextIds?: Set<RunContextId>\n ): void {\n // Set source output\n const srcNode = this.graphStructure.getNode(srcNodeId);\n if (!srcNode) {\n // Node was removed (e.g., graph updated) but an async emit arrived late; ignore\n return;\n }\n srcNode.outputs[srcHandle] = value;\n this.eventEmitter.emit(\"value\", {\n nodeId: srcNodeId,\n handle: srcHandle,\n value,\n io: \"output\",\n runtimeTypeId: getTypedOutputTypeId(value),\n });\n\n // Fan-out along all edges from this output\n const edges = this.graphStructure.getEdges();\n const outEdges = edges.filter(\n (e) => e.source.nodeId === srcNodeId && e.source.handle === srcHandle\n );\n\n const isRunContextAware =\n runContextIds !== undefined && runContextIds.size > 0;\n\n for (const e of outEdges) {\n // Filter run-contexts: skip any where src or dst is cancelled (only in run-context mode)\n let effectiveRunContexts: Set<RunContextId> | undefined;\n if (isRunContextAware) {\n effectiveRunContexts = new Set<RunContextId>();\n for (const id of runContextIds!) {\n const ctx = this.runContextManager.getRunContext(id);\n if (!ctx) continue;\n if (ctx.cancelledNodes.has(srcNodeId)) continue;\n if (ctx.cancelledNodes.has(e.target.nodeId)) continue;\n effectiveRunContexts.add(id);\n }\n if (effectiveRunContexts.size === 0) continue; // No valid run-contexts for this edge\n }\n\n // If source declares a union for this handle, require typed output\n const isUnion = Array.isArray(e.srcUnionTypes);\n const isTyped = isTypedOutput(value);\n if (isUnion && !isTyped) {\n const err = new Error(\n `Output ${srcNodeId}.${srcHandle} requires typed value for union output (allowed: ${(\n e.srcUnionTypes as string[]\n ).join(\"|\")})`\n );\n this.eventEmitter.emit(\"error\", {\n kind: \"edge-convert\",\n edgeId: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n err,\n });\n continue;\n }\n\n // Clone per edge to isolate conversions\n let nextVal = structuredClone(value);\n const applyToTarget = (v: unknown) => {\n const dstNode = this.graphStructure.getNode(e.target.nodeId);\n if (!dstNode) return;\n\n // Skip writing to unresolved handles\n if (e.dstDeclared === undefined) return;\n\n const dstIsArray =\n typeof e.dstDeclared === \"string\" && e.dstDeclared.endsWith(\"[]\");\n let next = v;\n // Handle array types\n if (dstIsArray) {\n const toArray = (x: unknown): unknown[] =>\n Array.isArray(x) ? x : x === undefined ? [] : [x];\n let forNode = this.arrayInputBuckets.get(e.target.nodeId);\n if (!forNode) {\n forNode = new Map<string, Map<string, unknown[]>>();\n this.arrayInputBuckets.set(e.target.nodeId, forNode);\n }\n let forHandle = forNode.get(e.target.handle);\n if (!forHandle) {\n forHandle = new Map<string, unknown[]>();\n forNode.set(e.target.handle, forHandle);\n }\n forHandle.set(e.id, toArray(v));\n const merged: unknown[] = [];\n for (const ed of edges) {\n if (\n ed.target.nodeId === e.target.nodeId &&\n ed.target.handle === e.target.handle\n ) {\n const part = forHandle.get(ed.id);\n if (part && part.length) merged.push(...part);\n }\n }\n next = merged;\n }\n\n const prev = dstNode.inputs[e.target.handle];\n const same = valuesEqual(prev, next);\n if (!same) {\n // Check skipPropagateValues (only in run-context mode)\n let shouldSkipPropagateValues = false;\n if (isRunContextAware && effectiveRunContexts) {\n for (const id of effectiveRunContexts) {\n const ctx = this.runContextManager.getRunContext(id);\n if (ctx && ctx.skipPropagateValues) {\n shouldSkipPropagateValues = true;\n break;\n }\n }\n }\n\n // Set input values unless skipPropagateValues is enabled\n if (!shouldSkipPropagateValues) {\n dstNode.inputs[e.target.handle] = next;\n this.eventEmitter.emit(\"value\", {\n nodeId: e.target.nodeId,\n handle: e.target.handle,\n value: next,\n io: \"input\",\n runtimeTypeId: getTypedOutputTypeId(next),\n });\n this.handleResolver.scheduleRecomputeHandles(e.target.nodeId);\n }\n\n // Check propagate flag (only in run-context mode; auto mode always propagates)\n let shouldPropagate = true; // Default: always propagate in auto mode\n if (isRunContextAware && effectiveRunContexts) {\n shouldPropagate = false;\n for (const id of effectiveRunContexts) {\n const ctx = this.runContextManager.getRunContext(id);\n if (ctx && ctx.propagate) {\n shouldPropagate = true;\n break;\n }\n }\n }\n\n // Schedule downstream execution if propagation is enabled.\n // In manual mode we still allow scheduling for run-context-aware runs.\n const paused = this.runtimeCoordinator.isPaused();\n const canSchedule =\n (!paused || isRunContextAware) &&\n shouldPropagate &&\n this.executionScheduler.allInboundHaveValue(e.target.nodeId);\n\n if (canSchedule) {\n if (isRunContextAware && effectiveRunContexts) {\n this.executionScheduler.scheduleInputsChangedWithRunContexts(\n e.target.nodeId,\n effectiveRunContexts\n );\n } else {\n this.executionScheduler.scheduleInputsChanged(e.target.nodeId);\n }\n }\n }\n };\n\n // Handle async conversion\n if (e.convertAsync) {\n this.eventEmitter.emit(\"stats\", {\n kind: \"edge-start\",\n edgeId: e.id,\n typeId: e.typeId,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n });\n const controller = new AbortController();\n const startAt = Date.now();\n e.stats.runs += 1;\n e.stats.inFlight = true;\n if (!isRunContextAware) {\n // Only track progress in auto mode\n e.stats.progress = 0;\n }\n const sig = controller.signal;\n e.convertAsync(nextVal, sig)\n .then((converted) => {\n if (!sig.aborted) {\n applyToTarget(converted);\n e.stats.inFlight = false;\n const duration = Date.now() - startAt;\n e.stats.lastDurationMs = duration;\n if (!isRunContextAware) {\n // More detailed stats in auto mode\n e.stats.lastEndAt = Date.now();\n e.stats.lastError = undefined;\n this.eventEmitter.emit(\"stats\", {\n kind: \"edge-done\",\n edgeId: e.id,\n typeId: e.typeId,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n durationMs: duration,\n });\n }\n }\n })\n .catch((err) => {\n if (sig.aborted) return;\n e.stats.inFlight = false;\n if (!isRunContextAware) {\n e.stats.lastError = err;\n }\n this.eventEmitter.emit(\"error\", {\n kind: \"edge-convert\",\n edgeId: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n err,\n });\n });\n } else {\n // Synchronous conversion\n if (e.convert) {\n nextVal = e.convert(nextVal);\n }\n applyToTarget(nextVal);\n }\n }\n }\n\n /**\n * Propagate value in run-context aware mode (convenience method)\n */\n propagateInRunContexts(\n srcNodeId: string,\n srcHandle: string,\n value: unknown,\n runContextIds: Set<RunContextId>\n ): void {\n this.propagate(srcNodeId, srcHandle, value, runContextIds);\n }\n\n /**\n * Re-emit all outputs from a node (used when graph updates)\n * Only re-emits outputs that are valid according to resolved handles\n */\n reemitNodeOutputs(nodeId: string): void {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) return;\n // Get resolved handles to filter out invalid outputs\n const resolved = this.graphStructure.getResolvedHandles(nodeId);\n const validOutputHandles = resolved?.outputs\n ? new Set(Object.keys(resolved.outputs))\n : new Set<string>();\n // Use node's activeRunContexts to propagate to new nodes that were added\n const runContextIds =\n node.activeRunContexts.size > 0\n ? new Set(node.activeRunContexts)\n : undefined;\n for (const [handle, value] of Object.entries(node.outputs)) {\n // Only re-emit if this handle is still valid\n if (validOutputHandles.has(handle)) {\n this.propagate(nodeId, handle, value, runContextIds);\n }\n }\n }\n\n /**\n * Clear array input buckets for a node (when node is deleted)\n */\n clearArrayBuckets(nodeId: string): void {\n this.arrayInputBuckets.delete(nodeId);\n }\n\n /**\n * Clear all array buckets\n */\n clearAllArrayBuckets(): void {\n this.arrayInputBuckets.clear();\n }\n}\n","import { LOG_LEVEL_VALUES } from \"@bian-womp/spark-protocol\";\nimport type { LogLevel } from \"@bian-womp/spark-protocol\";\nimport type { ExecutionContext } from \"../../core/types\";\nimport type { RuntimeNode, RunContextId } from \"./types\";\nimport type { GraphStructure } from \"./GraphStructure\";\nimport type { EventEmitter } from \"./EventEmitter\";\nimport type { RunContextManager } from \"./RunContextManager\";\nimport { IValuePropagator, IRuntimeCoordinator } from \"./interfaces\";\n\n/**\n * ExecutionScheduler component - handles node execution scheduling and lifecycle\n */\nexport class ExecutionScheduler {\n private graphStructure: GraphStructure;\n private eventEmitter: EventEmitter;\n private runContextManager: RunContextManager;\n private valuePropagator: IValuePropagator;\n private runtimeCoordinator: IRuntimeCoordinator;\n private environment: Record<string, unknown> = {};\n\n constructor(\n graphStructure: GraphStructure,\n eventEmitter: EventEmitter,\n runContextManager: RunContextManager,\n valuePropagator: IValuePropagator,\n runtimeCoordinator: IRuntimeCoordinator,\n environment?: Record<string, unknown>\n ) {\n this.graphStructure = graphStructure;\n this.eventEmitter = eventEmitter;\n this.runContextManager = runContextManager;\n this.valuePropagator = valuePropagator;\n this.runtimeCoordinator = runtimeCoordinator;\n this.environment = environment ?? {};\n }\n\n setEnvironment(environment: Record<string, unknown>): void {\n this.environment = environment;\n }\n\n /**\n * Check if all inbound edges for a node have values\n */\n allInboundHaveValue(nodeId: string): boolean {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) return false;\n const edges = this.graphStructure.getEdges();\n const inbound = edges.filter((e) => e.target.nodeId === nodeId);\n if (inbound.length === 0) return true;\n for (const e of inbound) {\n if (!(e.target.handle in node.inputs)) return false;\n }\n return true;\n }\n\n /**\n * Compute effective inputs for a node by merging real inputs with defaults\n */\n getEffectiveInputs(nodeId: string): Record<string, unknown> {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) return {};\n const registry = this.graphStructure.getRegistry();\n if (!registry) return {};\n const desc = registry.nodes.get(node.typeId);\n if (!desc) return {};\n\n const resolved = this.graphStructure.getResolvedHandles(nodeId);\n const regDefaults = desc.inputDefaults ?? {};\n const dynDefaults = resolved?.inputDefaults ?? {};\n\n // Identify which handles are dynamically resolved (not in registry statics)\n const staticHandles = new Set(Object.keys(desc.inputs ?? {}));\n const dynamicHandles = new Set(\n Object.keys(resolved?.inputs ?? {}).filter((h) => !staticHandles.has(h))\n );\n\n // Precedence: dynamic > registry\n const mergedDefaults: Record<string, unknown> = {\n ...regDefaults,\n ...dynDefaults,\n };\n\n // Start with real inputs only (no defaults)\n const effective: Record<string, unknown> = { ...node.inputs };\n\n // Build set of inbound handles (wired inputs)\n const edges = this.graphStructure.getEdges();\n const inbound = new Set(\n edges\n .filter((e) => e.target.nodeId === nodeId)\n .map((e) => e.target.handle)\n );\n\n // Apply defaults only for:\n // 1. Unbound handles that have no explicit value\n // 2. Static handles (not dynamically resolved)\n for (const [handle, defaultValue] of Object.entries(mergedDefaults)) {\n if (defaultValue === undefined) continue;\n if (inbound.has(handle)) continue; // Don't override wired inputs\n if (effective[handle] !== undefined) continue; // Already has value\n if (dynamicHandles.has(handle)) continue; // Skip defaults for dynamic handles\n\n // Clone to avoid shared references\n effective[handle] = structuredClone(defaultValue);\n }\n\n return effective;\n }\n\n /**\n * Create an execution context for a node\n */\n createExecutionContext(\n nodeId: string,\n node: RuntimeNode<any>,\n inputs: Record<string, unknown>,\n runId: string,\n abortSignal: AbortSignal,\n runContextIds?: Set<RunContextId>,\n options?: {\n emitHandler?: (handle: string, value: unknown) => void;\n reportProgress?: (p: number) => void;\n }\n ): ExecutionContext<any> {\n const emitHandler =\n options?.emitHandler ??\n ((handle: string, value: unknown) => {\n this.valuePropagator.propagate(nodeId, handle, value, runContextIds);\n });\n const reportProgress =\n options?.reportProgress ??\n ((p: number) => {\n node.stats.progress = Math.max(0, Math.min(1, Number(p) || 0));\n });\n\n // Create log function that respects node's logLevel\n const log: (\n level: LogLevel,\n message: string,\n context?: Record<string, unknown>\n ) => void = (\n level: LogLevel,\n message: string,\n context?: Record<string, unknown>\n ) => {\n const nodeLogLevel = node.logLevel ?? \"info\";\n const nodeLogValue = LOG_LEVEL_VALUES[nodeLogLevel] ?? 1;\n const requestedValue = LOG_LEVEL_VALUES[level] ?? 1;\n\n // Only log if requested level >= node's logLevel\n if (requestedValue >= nodeLogValue && nodeLogLevel !== \"silent\") {\n const contextStr = context\n ? ` ${Object.entries(context)\n .map(([k, v]) => `${k}=${JSON.stringify(v)}`)\n .join(\" \")}`\n : \"\";\n const fullMessage = `[node:${runId || nodeId}:${\n node.typeId\n }] ${message}${contextStr}`;\n switch (level) {\n case \"debug\":\n console.info(fullMessage);\n break;\n case \"info\":\n console.info(fullMessage);\n break;\n case \"warn\":\n console.warn(fullMessage);\n break;\n case \"error\":\n console.error(fullMessage);\n break;\n }\n }\n };\n\n // Store run-context IDs for use in scheduleInputsChanged\n const storedRunContextIds = runContextIds;\n\n return {\n nodeId,\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n emit: emitHandler,\n invalidateDownstream: () => {\n this.runtimeCoordinator.invalidateDownstream(nodeId);\n },\n scheduleInputsChanged: () => {\n if (this.allInboundHaveValue(nodeId)) {\n // Preserve run-context IDs when scheduling from execution context\n this.scheduleInputsChangedInternal(nodeId, storedRunContextIds);\n }\n },\n getInput: (handle) => inputs[handle],\n environment: this.environment,\n runId,\n abortSignal,\n reportProgress,\n log,\n };\n }\n\n /**\n * Schedule a node for execution when its inputs change\n */\n scheduleInputsChanged(nodeId: string): void {\n this.scheduleInputsChangedInternal(nodeId);\n }\n\n /**\n * Schedule a node for execution with run-context IDs\n */\n scheduleInputsChangedWithRunContexts(\n nodeId: string,\n runContextIds: Set<RunContextId>\n ): void {\n this.scheduleInputsChangedInternal(nodeId, runContextIds);\n }\n\n /**\n * Internal method for scheduling (also used by GraphRuntime)\n */\n scheduleInputsChangedInternal(\n nodeId: string,\n runContextIds?: Set<RunContextId>\n ): void {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) return;\n // Block only auto-mode scheduling while paused; allow run-context runs\n if (!runContextIds && this.runtimeCoordinator.isPaused()) return;\n\n // If run-context IDs are provided, attach them to the node\n if (runContextIds) {\n for (const id of runContextIds) {\n node.activeRunContexts.add(id);\n }\n }\n const now = Date.now();\n const policy = node.policy ?? {};\n\n // Compute effective inputs (real inputs + defaults) for this execution\n const effectiveInputs = this.getEffectiveInputs(nodeId);\n\n if (\n policy.debounceMs &&\n node.lastScheduledAt &&\n now - node.lastScheduledAt < policy.debounceMs\n ) {\n // debounce: replace latest queued\n node.queue.splice(0, node.queue.length);\n node.runSeq += 1;\n const rid = `${nodeId}:${node.runSeq}:${now}`;\n node.queue.push({ runId: rid, inputs: effectiveInputs });\n return;\n }\n node.lastScheduledAt = now;\n\n node.runSeq += 1;\n const rid = `${nodeId}:${node.runSeq}:${now}`;\n node.latestRunId = rid;\n\n // Get run-context IDs for this node (use provided or from node's activeRunContexts)\n const runContextIdsForRun =\n runContextIds ||\n (node.activeRunContexts.size > 0\n ? new Set(node.activeRunContexts)\n : undefined);\n\n const startRun = (\n runId: string,\n capturedInputs: Record<string, unknown>,\n runContextIdsForRun?: Set<RunContextId>,\n onDone?: () => void\n ) => {\n // Increment pending count for all relevant run-contexts (node will run)\n if (runContextIdsForRun && runContextIdsForRun.size > 0) {\n for (const id of runContextIdsForRun) {\n const ctx = this.runContextManager.getRunContext(id);\n if (ctx) ctx.pending++;\n }\n }\n const controller = new AbortController();\n node.stats.runs += 1;\n node.stats.active += 1;\n node.stats.lastStartAt = now;\n node.stats.progress = 0;\n node.activeControllers.add(controller);\n node.controllerRunIds.set(controller, runId);\n\n const mode = policy.asyncConcurrency ?? \"switch\";\n if (mode === \"switch\") {\n for (const c of Array.from(node.activeControllers)) {\n if (c !== controller) c.abort(\"switch\");\n }\n }\n\n let timeoutId: NodeJS.Timeout | undefined;\n if (policy.timeoutMs && policy.timeoutMs > 0) {\n timeoutId = setTimeout(\n () => controller.abort(\"timeout\"),\n policy.timeoutMs\n );\n }\n\n const ctx = this.createExecutionContext(\n nodeId,\n node,\n capturedInputs,\n runId,\n controller.signal,\n runContextIdsForRun,\n {\n emitHandler: (handle: string, value: unknown) => {\n const m = policy.asyncConcurrency ?? \"switch\";\n // Drop emits from runs that were explicitly cancelled due to a\n // snapshot/undo/redo operation, regardless of asyncConcurrency.\n if (node.snapshotCancelledRunIds?.has(runId)) return;\n if (m !== \"merge\" && runId !== node.latestRunId) return;\n this.valuePropagator.propagate(\n nodeId,\n handle,\n value,\n runContextIdsForRun\n );\n },\n reportProgress: (p: number) => {\n node.stats.progress = Math.max(0, Math.min(1, Number(p) || 0));\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-progress\",\n nodeId,\n typeId: node.typeId,\n runId,\n progress: node.stats.progress,\n });\n },\n }\n );\n\n const exec = async (attempt: number) => {\n let hadError = false;\n try {\n if (node.lifecycle?.prepare) {\n ctx.log(\"debug\", \"prepare-start\");\n node.lifecycle.prepare(node.params ?? {}, ctx);\n ctx.log(\"debug\", \"prepare-done\");\n }\n await node.runtime.onInputsChanged?.(capturedInputs, ctx);\n } catch (err) {\n // Suppress errors caused by expected cancellations\n if (controller.signal.aborted) {\n const reason = controller.signal.reason;\n if (\n reason === \"switch\" ||\n reason === \"snapshot\" ||\n reason === \"node-deleted\" ||\n reason === \"user-cancelled\"\n ) {\n return; // Cancellation events are emitted separately, skip error handling\n }\n }\n hadError = true;\n node.stats.lastError = err;\n const retry = policy.retry;\n if (retry && attempt < (retry.attempts ?? 0)) {\n const delay = retry.backoffMs ? retry.backoffMs(attempt) : 0;\n await new Promise((r) => setTimeout(r, delay));\n return exec(attempt + 1);\n }\n this.eventEmitter.emit(\"error\", {\n kind: \"node-run\",\n nodeId,\n runId,\n err,\n });\n } finally {\n // Skip cleanup if node was deleted (cleanup already handled)\n if (!this.graphStructure.hasNode(nodeId)) {\n return;\n }\n\n if (timeoutId) clearTimeout(timeoutId);\n node.activeControllers.delete(controller);\n node.controllerRunIds.delete(controller);\n node.stats.active = Math.max(0, node.activeControllers.size);\n node.stats.lastEndAt = Date.now();\n node.stats.lastDurationMs =\n node.stats.lastStartAt && node.stats.lastEndAt\n ? node.stats.lastEndAt - node.stats.lastStartAt\n : undefined;\n if (!hadError) node.stats.lastError = undefined;\n\n // Only emit node-done if not cancelled (cancellation events emitted separately)\n const isCancelled =\n controller.signal.aborted &&\n (controller.signal.reason === \"snapshot\" ||\n controller.signal.reason === \"node-deleted\" ||\n controller.signal.reason === \"user-cancelled\");\n if (!isCancelled) {\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-done\",\n nodeId,\n typeId: node.typeId,\n runId,\n durationMs: node.stats.lastDurationMs,\n });\n }\n ctx.log(\"debug\", \"node-done\", {\n durationMs: node.stats.lastDurationMs,\n hadError,\n });\n\n // Decrement pending count for all relevant run-contexts\n if (runContextIdsForRun && runContextIdsForRun.size > 0) {\n for (const id of runContextIdsForRun) {\n const ctx = this.runContextManager.getRunContext(id);\n if (ctx) {\n ctx.pending--;\n if (ctx.pending === 0) {\n this.runContextManager.finishRunContext(\n id,\n this.graphStructure.getNodes()\n );\n }\n }\n }\n }\n\n if (onDone) onDone();\n }\n };\n\n // Fire node-start event\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-start\",\n nodeId,\n typeId: node.typeId,\n runId,\n });\n ctx.log(\"debug\", \"node-start\");\n exec(0);\n };\n\n const mode = policy.asyncConcurrency ?? \"switch\";\n if (mode === \"drop\" && node.activeControllers.size > 0) {\n // Don't increment pendingCount if we're dropping this run\n return;\n }\n if (mode === \"queue\") {\n const maxQ = policy.maxQueue ?? 8;\n node.queue.push({ runId: rid, inputs: effectiveInputs });\n if (node.queue.length > maxQ) node.queue.shift();\n\n const processNext = () => {\n if (node.activeControllers.size > 0) return;\n const next = node.queue.shift();\n if (!next) return;\n node.latestRunId = next.runId;\n // Use node's activeRunContexts for queued items\n const queuedRunContextIds =\n node.activeRunContexts.size > 0\n ? new Set(node.activeRunContexts)\n : undefined;\n startRun(next.runId, next.inputs, queuedRunContextIds, () => {\n // After finishing, schedule next\n setTimeout(processNext, 0);\n });\n };\n\n processNext();\n return;\n }\n\n // switch or merge\n startRun(rid, effectiveInputs, runContextIdsForRun);\n }\n\n /**\n * Cancel all active runs for a node\n */\n cancelNodeActiveRuns(\n node: RuntimeNode,\n reason: \"snapshot\" | \"node-deleted\" | \"user-cancelled\"\n ): void {\n for (const controller of Array.from(node.activeControllers)) {\n const runId = node.controllerRunIds.get(controller);\n if (runId) {\n // Track cancelled runIds for snapshot and user-cancelled operations\n // (to drop emits from cancelled runs)\n if (reason === \"snapshot\" || reason === \"user-cancelled\") {\n if (!node.snapshotCancelledRunIds) {\n node.snapshotCancelledRunIds = new Set<string>();\n }\n node.snapshotCancelledRunIds.add(runId);\n }\n // Emit cancellation event\n this.eventEmitter.emit(\"stats\", {\n kind: \"node-done\",\n nodeId: node.nodeId,\n typeId: node.typeId,\n runId,\n cancelled: true,\n });\n }\n try {\n controller.abort(reason);\n } catch {\n // ignore abort errors\n }\n }\n node.activeControllers.clear();\n node.controllerRunIds.clear();\n node.stats.active = 0;\n node.queue = [];\n }\n\n /**\n * Cancel runs for multiple nodes.\n * Can be called for snapshot/undo/redo operations or user-initiated cancellation.\n */\n cancelNodeRuns(\n nodeIds: string[],\n reason: \"snapshot\" | \"user-cancelled\" = \"user-cancelled\"\n ): void {\n if (nodeIds.length === 0) return;\n\n const toCancel = new Set<string>(nodeIds);\n const visited = new Set<string>();\n const queue = [...nodeIds];\n const edges = this.graphStructure.getEdges();\n\n // Collect all downstream nodes to cancel\n for (let i = 0; i < queue.length; i++) {\n const nodeId = queue[i];\n if (visited.has(nodeId)) continue;\n visited.add(nodeId);\n\n for (const edge of edges) {\n if (edge.source.nodeId === nodeId) {\n const targetId = edge.target.nodeId;\n if (!visited.has(targetId)) {\n toCancel.add(targetId);\n queue.push(targetId);\n }\n }\n }\n }\n\n // Cancel runs for all affected nodes\n for (const nodeId of toCancel) {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) continue;\n\n this.cancelNodeActiveRuns(node, reason);\n\n node.runSeq += 1;\n const now = Date.now();\n const suffix = reason === \"snapshot\" ? \"snapshot\" : \"cancelled\";\n node.latestRunId = `${nodeId}:${node.runSeq}:${now}:${suffix}`;\n }\n\n // Cancel nodes in run-contexts (exclude them from active run-contexts)\n for (const nodeId of toCancel) {\n this.runContextManager.cancelNodeInRunContexts(\n nodeId,\n false, // includeDownstream = false (already collected above)\n edges,\n this.graphStructure.getNodes()\n );\n }\n }\n}\n","import type {\n RuntimeValue,\n RuntimeInvalidate,\n RuntimeError,\n RuntimeStats,\n ResolvedHandles,\n GraphDefinition,\n GraphNodeDefinition,\n GraphEdgeDefinition,\n RunMode,\n} from \"@bian-womp/spark-protocol\";\nimport type { RuntimeNodeStats } from \"../core/types\";\nimport { getInputTypeId, getTypedOutputTypeId } from \"../core/types\";\nimport { Registry } from \"../builder/Registry\";\nimport { GraphStructure } from \"./components/GraphStructure\";\nimport { EventEmitter } from \"./components/EventEmitter\";\nimport { RunContextManager } from \"./components/RunContextManager\";\nimport { HandleResolver } from \"./components/HandleResolver\";\nimport { ValuePropagator } from \"./components/ValuePropagator\";\nimport { ExecutionScheduler } from \"./components/ExecutionScheduler\";\nimport type { IRuntimeCoordinator } from \"./components/interfaces\";\nimport { valuesEqual } from \"./utils\";\nimport type { RuntimeNode, RunContextId } from \"./components/types\";\n\nexport type RuntimeEventListener<K extends RuntimeEventName> = (\n e: RuntimeEventMap[K]\n) => void;\n\nexport type RuntimeEventName = \"value\" | \"invalidate\" | \"error\" | \"stats\";\n\nexport interface RuntimeEventMap {\n value: RuntimeValue;\n invalidate: RuntimeInvalidate;\n error: RuntimeError;\n stats: RuntimeStats;\n}\n\n// Types are now imported from components/types.ts (re-exported above)\nexport class GraphRuntime implements IRuntimeCoordinator {\n // Component instances\n private graphStructure: GraphStructure;\n private eventEmitter: EventEmitter;\n private runContextManager: RunContextManager;\n private handleResolver: HandleResolver;\n private valuePropagator: ValuePropagator;\n private executionScheduler: ExecutionScheduler;\n\n // State\n private paused = false;\n private environment: Record<string, unknown> = {};\n private runMode: RunMode | null = null;\n private pauseRefCount = 0;\n\n constructor() {\n // Initialize components\n this.graphStructure = new GraphStructure();\n this.eventEmitter = new EventEmitter();\n this.runContextManager = new RunContextManager();\n\n // Initialize components with interface-based dependencies\n // HandleResolver only needs IRuntimeCoordinator (this)\n this.handleResolver = new HandleResolver(\n this.graphStructure,\n this.eventEmitter,\n this, // IRuntimeCoordinator\n undefined, // registry set later\n undefined // environment set later\n );\n\n // ValuePropagator needs IHandleResolver and IRuntimeCoordinator\n // ExecutionScheduler needs IValuePropagator - circular dependency!\n // Solution: Create ValuePropagator first (without executionScheduler),\n // then create ExecutionScheduler with ValuePropagator,\n // then wire ValuePropagator with ExecutionScheduler via setExecutionScheduler\n this.valuePropagator = new ValuePropagator(\n this.graphStructure,\n this.eventEmitter,\n this.runContextManager,\n this.handleResolver, // IHandleResolver\n this // IRuntimeCoordinator\n );\n\n // Create ExecutionScheduler with ValuePropagator\n this.executionScheduler = new ExecutionScheduler(\n this.graphStructure,\n this.eventEmitter,\n this.runContextManager,\n this.valuePropagator, // IValuePropagator\n this, // IRuntimeCoordinator\n this.environment\n );\n\n // Wire ValuePropagator with ExecutionScheduler to resolve circular dependency\n this.valuePropagator.setExecutionScheduler(this.executionScheduler);\n }\n\n static create(\n def: GraphDefinition,\n registry: Registry,\n opts?: { environment?: Record<string, unknown> }\n ): GraphRuntime {\n const gr = new GraphRuntime();\n gr.environment = opts?.environment ?? {};\n\n // Set registry and environment on components\n gr.graphStructure.setRegistry(registry);\n gr.handleResolver.setRegistry(registry);\n gr.handleResolver.setEnvironment(gr.environment);\n gr.executionScheduler.setEnvironment(gr.environment);\n\n // Precompute per-node resolved handles (use def-provided overrides; do not compute dynamically here)\n const initial = GraphStructure.computeResolvedHandleMap(\n def,\n registry,\n gr.environment\n );\n for (const [nodeId, handles] of initial.map) {\n gr.graphStructure.setResolvedHandles(nodeId, handles);\n }\n\n // Instantiate nodes\n for (const n of def.nodes) {\n const desc = registry.nodes.get(n.typeId);\n if (!desc) throw new Error(`Unknown node type: ${n.typeId}`);\n const cat = registry.categories.get(desc.categoryId);\n if (!cat) throw new Error(`Unknown category: ${desc.categoryId}`);\n if (cat.validateImpl) cat.validateImpl(desc.impl);\n const runtime = cat.createRuntime({\n nodeId: n.nodeId,\n impl: desc.impl,\n });\n const rn: RuntimeNode<any> = {\n typeId: n.typeId,\n nodeId: n.nodeId,\n lifecycle: desc.lifecycle,\n inputs: {},\n outputs: {},\n state: {},\n runtime,\n params: n.params,\n policy: {\n ...cat.policy,\n ...desc.policy,\n ...n.params?.policy,\n },\n logLevel: desc.logLevel,\n runSeq: 0,\n activeControllers: new Set(),\n controllerRunIds: new Map(),\n queue: [],\n stats: {\n runs: 0,\n active: 0,\n queued: 0,\n progress: 0,\n },\n activeRunContexts: new Set(),\n };\n gr.graphStructure.setNode(n.nodeId, rn);\n }\n\n // Instantiate edges\n const edges = GraphStructure.buildEdges(\n def,\n registry,\n gr.graphStructure.getResolvedHandlesMap()\n );\n gr.graphStructure.setEdges(edges);\n\n // Schedule async recompute only for nodes that indicated Promise-based resolveHandles\n for (const nodeId of initial.pending) {\n gr.handleResolver.scheduleRecomputeHandles(nodeId);\n }\n\n return gr;\n }\n\n on<K extends RuntimeEventName>(\n event: K,\n handler: RuntimeEventListener<K>\n ): () => void {\n return this.eventEmitter.on(event, handler);\n }\n\n setInputs(nodeId: string, inputs: Record<string, unknown>): void {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) throw new Error(`Node not found: ${nodeId}`);\n\n let anyChanged = false;\n const edges = this.graphStructure.getEdges();\n const registry = this.graphStructure.getRegistry();\n for (const [handle, value] of Object.entries(inputs)) {\n const hasInbound = edges.some(\n (e) => e.target.nodeId === nodeId && e.target.handle === handle\n );\n if (hasInbound) continue;\n\n // Validate input value against declared type\n if (value !== undefined && registry) {\n const desc = registry.nodes.get(node.typeId);\n const resolved = this.graphStructure.getResolvedHandles(nodeId);\n // Get typeId from resolved handles first, then registry statics\n const typeId = resolved\n ? getInputTypeId(resolved.inputs, handle)\n : desc\n ? getInputTypeId(desc.inputs, handle)\n : undefined;\n\n if (typeId) {\n const typeDesc = registry.types.get(typeId);\n if (typeDesc?.validate && !typeDesc.validate(value)) {\n // Emit error event for invalid input value and reject it\n const errorMessage = `Invalid value for input ${nodeId}.${handle} (type ${typeId}): ${JSON.stringify(\n value\n )}`;\n this.eventEmitter.emit(\"error\", {\n kind: \"input-validation\",\n nodeId,\n handle,\n typeId,\n value,\n message: errorMessage,\n });\n // Skip storing invalid value\n continue;\n }\n }\n }\n\n const prev = node.inputs[handle];\n const same = valuesEqual(prev, value);\n if (!same) {\n if (value === undefined) {\n delete node.inputs[handle];\n } else {\n node.inputs[handle] = value;\n }\n // Emit value event for input updates\n this.eventEmitter.emit(\"value\", { nodeId, handle, value, io: \"input\" });\n anyChanged = true;\n }\n }\n // In auto mode, input updates can trigger execution; in manual mode they never should.\n const isAutoMode = this.runMode === \"auto\" || this.runMode === null;\n const canAutoSchedule = !this.paused && isAutoMode;\n\n if (canAutoSchedule) {\n if (anyChanged && this.executionScheduler.allInboundHaveValue(nodeId)) {\n this.executionScheduler.scheduleInputsChangedInternal(nodeId);\n }\n }\n if (anyChanged) {\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n }\n }\n\n getOutput(nodeId: string, output: string): unknown {\n const node = this.graphStructure.getNode(nodeId);\n return node?.outputs[output];\n }\n\n // Update resolved handles for a single node and refresh edge converters/types that touch it\n updateNodeHandles(\n nodeId: string,\n handles: ResolvedHandles,\n registry: Registry\n ): void {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) return;\n\n const oldResolved = this.graphStructure.getResolvedHandles(nodeId);\n this.graphStructure.setResolvedHandles(nodeId, handles);\n\n const oldOutputs = oldResolved?.outputs ?? {};\n const newOutputs = handles.outputs ?? {};\n const oldOutputHandles = new Set(Object.keys(oldOutputs));\n const newOutputHandles = new Set(Object.keys(newOutputs));\n for (const handle of oldOutputHandles) {\n if (!newOutputHandles.has(handle)) {\n delete node.outputs[handle];\n this.eventEmitter.emit(\"value\", {\n nodeId,\n handle,\n value: undefined,\n io: \"output\",\n });\n }\n }\n\n const edges = this.graphStructure.getEdges();\n for (const e of edges) {\n const srcNode = this.graphStructure.getNode(e.source.nodeId);\n const dstNode = this.graphStructure.getNode(e.target.nodeId);\n let srcDeclared: string | string[] | undefined = e.effectiveTypeId;\n let dstDeclared: string | undefined = e.dstDeclared;\n const oldDstDeclared = dstDeclared;\n if (e.source.nodeId === nodeId) {\n const resolved = this.graphStructure.getResolvedHandles(nodeId);\n srcDeclared = resolved\n ? resolved.outputs[e.source.handle]\n : srcDeclared;\n if (!e.typeId) {\n e.effectiveTypeId = Array.isArray(srcDeclared)\n ? srcDeclared?.[0] ?? \"untyped\"\n : srcDeclared ?? \"untyped\";\n }\n }\n if (e.target.nodeId === nodeId) {\n const resolved = this.graphStructure.getResolvedHandles(nodeId);\n if (resolved) {\n dstDeclared = getInputTypeId(resolved.inputs, e.target.handle);\n e.dstDeclared = dstDeclared;\n }\n }\n const conv = GraphStructure.buildEdgeConverters(\n srcDeclared,\n dstDeclared,\n registry,\n `updateNodeHandles: ${srcNode?.typeId || \"\"}.${e.source.nodeId}.${\n e.source.handle\n } -> ${dstNode?.typeId || \"\"}.${e.target.nodeId}.${e.target.handle}`\n );\n e.convert = conv.convert;\n e.convertAsync = conv.convertAsync;\n\n if (\n e.target.nodeId === nodeId &&\n oldDstDeclared === undefined &&\n dstDeclared !== undefined\n ) {\n const srcNode = this.graphStructure.getNode(e.source.nodeId);\n if (srcNode) {\n const srcValue = srcNode.outputs[e.source.handle];\n if (srcValue !== undefined) {\n const runContextIds =\n srcNode.activeRunContexts.size > 0\n ? new Set(srcNode.activeRunContexts)\n : undefined;\n this.valuePropagator.propagate(\n e.source.nodeId,\n e.source.handle,\n srcValue,\n runContextIds\n );\n }\n }\n }\n }\n this.valuePropagator.reemitNodeOutputs(nodeId);\n }\n\n launch(invalidate = false): void {\n for (const node of this.graphStructure.getNodes().values()) {\n const effectiveInputs = this.executionScheduler.getEffectiveInputs(\n node.nodeId\n );\n const ctrl = new AbortController();\n const ctx = this.executionScheduler.createExecutionContext(\n node.nodeId,\n node,\n effectiveInputs,\n `${node.nodeId}:init`,\n ctrl.signal\n );\n if (node.lifecycle?.prepare) {\n ctx.log(\"debug\", \"prepare-start\");\n node.lifecycle.prepare(node.params ?? {}, ctx);\n ctx.log(\"debug\", \"prepare-done\");\n }\n node.runtime.onActivated?.();\n }\n if (invalidate) {\n for (const nodeId of this.graphStructure.getNodes().keys()) {\n if (this.executionScheduler.allInboundHaveValue(nodeId))\n this.executionScheduler.scheduleInputsChangedInternal(nodeId);\n }\n }\n }\n\n triggerExternal(nodeId: string, event: unknown): void {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) return;\n node.runtime.onExternalEvent?.(event, node.state);\n }\n\n dispose(): void {\n this.runContextManager.resolveAll();\n\n for (const node of this.graphStructure.getNodes().values()) {\n node.runtime.onDeactivated?.();\n node.runtime.dispose?.();\n node.lifecycle?.dispose?.({\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n });\n }\n this.graphStructure.clear();\n }\n\n getNodeIds(): string[] {\n return Array.from(this.graphStructure.getNodes().keys());\n }\n\n getNodeData(nodeId: string):\n | {\n inputs: Record<string, unknown>;\n outputs: Record<string, unknown>;\n state: unknown;\n params?: Record<string, unknown>;\n stats?: RuntimeNodeStats;\n }\n | undefined {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) return undefined;\n return {\n inputs: { ...node.inputs },\n outputs: { ...node.outputs },\n state: node.state,\n params: node.params,\n stats: { ...node.stats },\n };\n }\n\n getEnvironment(): Record<string, unknown> {\n return { ...this.environment };\n }\n\n setEnvironment(env: Record<string, unknown>): void {\n this.environment = { ...env };\n this.handleResolver.setEnvironment(this.environment);\n this.executionScheduler.setEnvironment(this.environment);\n for (const nodeId of this.graphStructure.getNodes().keys()) {\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n }\n }\n\n getGraphDef(): GraphDefinition {\n const nodes: GraphNodeDefinition[] = Array.from(\n this.graphStructure.getNodes().values()\n ).map((n) => {\n const resolved = this.graphStructure.getResolvedHandles(n.nodeId);\n\n return {\n nodeId: n.nodeId,\n typeId: n.typeId,\n params: n.params ? { ...n.params } : undefined,\n resolvedHandles: resolved ? { ...resolved } : undefined,\n };\n });\n const edges: GraphEdgeDefinition[] = this.graphStructure\n .getEdges()\n .map((e) => ({\n id: e.id,\n source: { nodeId: e.source.nodeId, handle: e.source.handle },\n target: { nodeId: e.target.nodeId, handle: e.target.handle },\n typeId: e.typeId,\n }));\n return { nodes, edges };\n }\n\n async whenIdle(): Promise<void> {\n const allRunContexts = this.runContextManager.getAllRunContexts();\n if (allRunContexts.size > 0) {\n await new Promise<void>((resolve) => {\n const check = () => {\n if (this.runContextManager.getAllRunContexts().size === 0) {\n resolve();\n } else {\n setTimeout(check, 10);\n }\n };\n setTimeout(check, 10);\n });\n }\n\n const isIdle = (): boolean => {\n for (const n of this.graphStructure.getNodes().values()) {\n if (n.activeControllers.size > 0) return false;\n if (n.queue.length > 0) return false;\n }\n return true;\n };\n if (isIdle()) return;\n await new Promise<void>((resolve) => {\n const check = () => {\n if (isIdle()) resolve();\n else setTimeout(check, 10);\n };\n setTimeout(check, 10);\n });\n }\n\n async runFromHereContext(\n startNodeId: string,\n options?: {\n skipPropagateValues?: boolean;\n propagate?: boolean;\n }\n ): Promise<void> {\n const node = this.graphStructure.getNode(startNodeId);\n if (!node) return;\n\n const ctx = this.runContextManager.createRunContext(startNodeId, options);\n const promise = new Promise<void>((resolve) => {\n ctx.resolve = resolve;\n });\n\n node.activeRunContexts.add(ctx.id);\n this.scheduleInputsChangedWithRunContexts(startNodeId, new Set([ctx.id]));\n await promise;\n }\n\n private scheduleInputsChangedWithRunContexts(\n nodeId: string,\n runContextIds: Set<RunContextId>\n ): void {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) return;\n for (const id of runContextIds) {\n node.activeRunContexts.add(id);\n }\n this.executionScheduler.scheduleInputsChangedInternal(\n nodeId,\n runContextIds\n );\n }\n\n setRunMode(runMode: RunMode): void {\n this.runMode = runMode;\n this.updatePausedState();\n }\n\n requestPause(): () => void {\n this.pauseRefCount++;\n this.updatePausedState();\n let released = false;\n return () => {\n if (released) return;\n released = true;\n this.pauseRefCount--;\n this.updatePausedState();\n };\n }\n\n private updatePausedState(): void {\n if (this.pauseRefCount > 0) {\n this.paused = true;\n return;\n }\n if (this.runMode === \"manual\") {\n this.paused = true;\n } else if (this.runMode === \"auto\") {\n this.paused = false;\n }\n }\n\n isPaused(): boolean {\n return this.paused;\n }\n\n invalidateDownstream(nodeId: string): void {\n this.valuePropagator.reemitNodeOutputs(nodeId);\n }\n\n scheduleInputsChanged(nodeId: string): void {\n this.executionScheduler.scheduleInputsChangedInternal(nodeId);\n }\n\n cancelNodeRuns(nodeIds: string[]): void {\n this.executionScheduler.cancelNodeRuns(nodeIds);\n }\n\n copyOutputs(\n fromNodeId: string,\n toNodeId: string,\n options?: { dry?: boolean }\n ): void {\n const fromNode = this.getNodeData(fromNodeId);\n if (!fromNode?.outputs) return;\n this.hydrate(\n { outputs: { [toNodeId]: { ...fromNode.outputs } } },\n { reemit: !options?.dry }\n );\n }\n\n hydrate(\n payload: {\n inputs?: Record<string, Record<string, unknown>>;\n outputs?: Record<string, Record<string, unknown>>;\n },\n opts?: { reemit?: boolean }\n ): void {\n const releasePause = this.requestPause();\n try {\n const ins = payload?.inputs || {};\n for (const [nodeId, map] of Object.entries(ins)) {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) continue;\n for (const [h, v] of Object.entries(map || {})) {\n node.inputs[h] = structuredClone(v);\n this.eventEmitter.emit(\"value\", {\n nodeId,\n handle: h,\n value: node.inputs[h],\n io: \"input\",\n runtimeTypeId: getTypedOutputTypeId(node.inputs[h]),\n });\n }\n }\n const outs = payload?.outputs || {};\n for (const [nodeId, map] of Object.entries(outs)) {\n const node = this.graphStructure.getNode(nodeId);\n if (!node) continue;\n for (const [h, v] of Object.entries(map || {})) {\n node.outputs[h] = structuredClone(v);\n this.eventEmitter.emit(\"value\", {\n nodeId,\n handle: h,\n value: node.outputs[h],\n io: \"output\",\n runtimeTypeId: getTypedOutputTypeId(node.outputs[h]),\n });\n }\n }\n if (opts?.reemit) {\n for (const nodeId of this.graphStructure.getNodes().keys()) {\n this.valuePropagator.reemitNodeOutputs(nodeId);\n }\n }\n } finally {\n releasePause();\n }\n }\n\n update(def: GraphDefinition, registry: Registry): void {\n const desiredIds = new Set(def.nodes.map((n) => n.nodeId));\n const currentIds = new Set(this.graphStructure.getNodes().keys());\n for (const nodeId of Array.from(currentIds)) {\n if (!desiredIds.has(nodeId)) {\n const node = this.graphStructure.getNode(nodeId)!;\n this.executionScheduler.cancelNodeActiveRuns(node, \"node-deleted\");\n this.runContextManager.cancelNodeInRunContexts(\n nodeId,\n true,\n this.graphStructure.getEdges(),\n this.graphStructure.getNodes()\n );\n const allRunContexts = this.runContextManager.getAllRunContexts();\n for (const ctx of Array.from(allRunContexts.values())) {\n if (ctx.pending === 0) {\n this.runContextManager.finishRunContext(\n ctx.id,\n this.graphStructure.getNodes()\n );\n }\n }\n node.runtime.onDeactivated?.();\n node.runtime.dispose?.();\n node.lifecycle?.dispose?.({\n state: node.state,\n setState: (next) => Object.assign(node.state, next),\n });\n this.graphStructure.deleteNode(nodeId);\n this.valuePropagator.clearArrayBuckets(nodeId);\n }\n }\n\n // Add or update existing nodes\n for (const n of def.nodes) {\n const existing = this.graphStructure.getNode(n.nodeId);\n if (!existing) {\n const desc = registry.nodes.get(n.typeId);\n if (!desc) throw new Error(`Unknown node type: ${n.typeId}`);\n const cat = registry.categories.get(desc.categoryId);\n if (!cat) throw new Error(`Unknown category: ${desc.categoryId}`);\n if (cat.validateImpl) cat.validateImpl(desc.impl);\n const runtime = cat.createRuntime({\n nodeId: n.nodeId,\n impl: desc.impl,\n });\n const rn: RuntimeNode<any> = {\n typeId: n.typeId,\n nodeId: n.nodeId,\n lifecycle: desc.lifecycle,\n inputs: {},\n outputs: {},\n state: {},\n runtime,\n params: n.params,\n policy: {\n ...cat.policy,\n ...desc.policy,\n ...n.params?.policy,\n },\n runSeq: 0,\n activeControllers: new Set(),\n controllerRunIds: new Map(),\n queue: [],\n stats: {\n runs: 0,\n active: 0,\n queued: 0,\n progress: 0,\n },\n activeRunContexts: new Set(),\n };\n this.graphStructure.setNode(n.nodeId, rn);\n const effectiveInputs = this.executionScheduler.getEffectiveInputs(\n rn.nodeId\n );\n const ctrl = new AbortController();\n const ctx = this.executionScheduler.createExecutionContext(\n rn.nodeId,\n rn,\n effectiveInputs,\n `${rn.nodeId}:init`,\n ctrl.signal\n );\n if (rn.lifecycle?.prepare) {\n ctx.log(\"debug\", \"prepare-start\");\n rn.lifecycle.prepare(rn.params ?? {}, ctx);\n ctx.log(\"debug\", \"prepare-done\");\n }\n rn.runtime.onActivated?.();\n } else {\n existing.params = n.params;\n if (!existing.stats) {\n existing.stats = {\n runs: 0,\n active: 0,\n queued: 0,\n progress: 0,\n };\n }\n }\n }\n\n const edges = this.graphStructure.getEdges();\n const prevInbound = new Map<string, Set<string>>();\n for (const e of edges) {\n const set = prevInbound.get(e.target.nodeId) ?? new Set<string>();\n set.add(e.target.handle);\n prevInbound.set(e.target.nodeId, set);\n }\n\n const prevOutTargets = new Map<string, Map<string, Set<string>>>();\n for (const e of edges) {\n const tmap =\n prevOutTargets.get(e.source.nodeId) ?? new Map<string, Set<string>>();\n const tset = tmap.get(e.source.handle) ?? new Set<string>();\n tset.add(`${e.target.nodeId}.${e.target.handle}`);\n tmap.set(e.source.handle, tset);\n prevOutTargets.set(e.source.nodeId, tmap);\n }\n\n const resolved = GraphStructure.computeResolvedHandleMap(\n def,\n registry,\n this.environment\n );\n\n const changedHandles: Record<string, Partial<ResolvedHandles>> = {};\n for (const [nodeId, newHandles] of resolved.map) {\n const oldHandles = this.graphStructure.getResolvedHandles(nodeId);\n if (\n !oldHandles ||\n JSON.stringify(oldHandles) !== JSON.stringify(newHandles)\n ) {\n changedHandles[nodeId] = newHandles;\n }\n }\n\n for (const [nodeId, handles] of resolved.map) {\n this.graphStructure.setResolvedHandles(nodeId, handles);\n }\n\n const newEdges = GraphStructure.buildEdges(\n def,\n registry,\n this.graphStructure.getResolvedHandlesMap()\n );\n this.graphStructure.setEdges(newEdges);\n\n const nextInbound = new Map<string, Set<string>>();\n const updatedEdges = this.graphStructure.getEdges();\n for (const e of updatedEdges) {\n const set = nextInbound.get(e.target.nodeId) ?? new Set<string>();\n set.add(e.target.handle);\n nextInbound.set(e.target.nodeId, set);\n }\n\n for (const [nodeId, prevSet] of prevInbound) {\n const currSet = nextInbound.get(nodeId) ?? new Set<string>();\n const node = this.graphStructure.getNode(nodeId);\n if (!node) continue;\n let changed = false;\n for (const handle of Array.from(prevSet)) {\n if (!currSet.has(handle)) {\n if (handle in node.inputs) {\n delete node.inputs[handle];\n changed = true;\n }\n }\n }\n if (changed) {\n this.valuePropagator.clearArrayBuckets(nodeId);\n this.executionScheduler.scheduleInputsChangedInternal(nodeId);\n }\n }\n\n const nextOutTargets = new Map<string, Map<string, Set<string>>>();\n for (const e of updatedEdges) {\n const tmap =\n nextOutTargets.get(e.source.nodeId) ?? new Map<string, Set<string>>();\n const tset = tmap.get(e.source.handle) ?? new Set<string>();\n tset.add(`${e.target.nodeId}.${e.target.handle}`);\n tmap.set(e.source.handle, tset);\n nextOutTargets.set(e.source.nodeId, tmap);\n }\n\n const setsEqual = (a?: Set<string>, b?: Set<string>) => {\n if (!a && !b) return true;\n if (!a || !b) return false;\n if (a.size !== b.size) return false;\n for (const v of a) if (!b.has(v)) return false;\n return true;\n };\n\n const nodesToCheck = new Set<string>([\n ...Array.from(prevOutTargets.keys()),\n ...Array.from(nextOutTargets.keys()),\n ]);\n for (const nodeId of nodesToCheck) {\n const pmap = prevOutTargets.get(nodeId) ?? new Map<string, Set<string>>();\n const nmap = nextOutTargets.get(nodeId) ?? new Map<string, Set<string>>();\n const handles = new Set<string>([\n ...Array.from(pmap.keys()),\n ...Array.from(nmap.keys()),\n ]);\n for (const handle of handles) {\n const pset = pmap.get(handle) ?? new Set<string>();\n const nset = nmap.get(handle) ?? new Set<string>();\n if (!setsEqual(pset, nset)) {\n const val = this.getOutput(nodeId, handle);\n if (val !== undefined)\n this.valuePropagator.propagate(nodeId, handle, val);\n else if (this.executionScheduler.allInboundHaveValue(nodeId))\n this.executionScheduler.scheduleInputsChangedInternal(nodeId);\n }\n }\n }\n\n if (Object.keys(changedHandles).length > 0) {\n this.eventEmitter.emit(\"invalidate\", {\n reason: \"graph-updated\",\n resolvedHandles: changedHandles,\n });\n }\n\n for (const nodeId of resolved.pending) {\n this.handleResolver.scheduleRecomputeHandles(nodeId);\n }\n }\n}\n","import type {\n GraphDefinition,\n GraphNodeDefinition,\n ResolvedHandles,\n} from \"@bian-womp/spark-protocol\";\nimport type { NodeTypeDescriptor } from \"../core/types\";\nimport { isInputPrivate, getInputTypeId } from \"../core/types\";\nimport { Registry } from \"./Registry\";\nimport { GraphRuntime } from \"../runtime/GraphRuntime\";\n\nexport interface ValidationIssueData {\n nodeId?: string;\n edgeId?: string;\n typeId?: string;\n input?: string;\n output?: string;\n declared?: string;\n effectiveTypeId?: string;\n}\nexport interface ValidationIssue {\n level: \"error\" | \"warning\";\n code: string;\n message: string;\n data?: Partial<ValidationIssueData>;\n}\n\nexport interface ValidationReport {\n ok: boolean;\n issues: ValidationIssue[];\n}\n\nexport interface BuildOptions {\n environment?: Record<string, unknown>;\n}\n\nexport class GraphBuilder {\n constructor(private registry: Registry) {}\n\n validate(def: GraphDefinition): ValidationReport {\n const issues: ValidationIssue[] = [];\n const nodeIds = new Set<string>();\n const edgeIds = new Set<string>();\n\n // Precompute effective handle maps (registry statics merged with per-node resolvedHandles)\n const nodeById = new Map<string, GraphNodeDefinition>();\n const effByNodeId = new Map<\n string,\n Omit<ResolvedHandles, \"inputDefaults\">\n >();\n\n const getEffectiveHandles = (\n n?: GraphNodeDefinition\n ): Omit<ResolvedHandles, \"inputDefaults\"> => {\n if (!n) return { inputs: {}, outputs: {} };\n const desc = this.registry.nodes.get(n.typeId);\n const resolved = n.resolvedHandles || {};\n const inputs = { ...desc?.inputs, ...resolved.inputs };\n const outputs = { ...desc?.outputs, ...resolved.outputs };\n return { inputs, outputs };\n };\n\n const normOut = (decl: string | string[] | undefined): string[] =>\n Array.isArray(decl) ? decl : decl ? [decl] : [];\n\n const inferEdgeType = (\n srcDeclared: string | string[] | undefined,\n dstDeclared: string | undefined,\n explicit?: string\n ): string | undefined => {\n if (explicit) return explicit;\n if (Array.isArray(srcDeclared) && dstDeclared) return dstDeclared;\n if (srcDeclared)\n return Array.isArray(srcDeclared) ? srcDeclared[0] : srcDeclared;\n return undefined;\n };\n\n const canFlow = (\n from: string | string[] | undefined,\n to?: string\n ): boolean => {\n if (!to || !from) return true;\n const arr = Array.isArray(from) ? from : [from];\n return arr.every((s) => s === to || !!this.registry.canCoerce(s, to));\n };\n\n const pushIssue = (\n level: \"error\" | \"warning\",\n code: string,\n message: string,\n data?: Partial<ValidationIssueData>\n ) => {\n issues.push({ level, code, message, data });\n };\n\n // nodes exist, ids unique, and categories registered\n for (const n of def.nodes) {\n if (nodeIds.has(n.nodeId)) {\n pushIssue(\"error\", \"NODE_ID_DUP\", `Duplicate nodeId ${n.nodeId}`, {\n nodeId: n.nodeId,\n });\n } else {\n nodeIds.add(n.nodeId);\n }\n nodeById.set(n.nodeId, n);\n effByNodeId.set(n.nodeId, getEffectiveHandles(n));\n const nodeType = this.registry.nodes.get(n.typeId);\n if (!nodeType) {\n pushIssue(\n \"error\",\n \"NODE_TYPE_MISSING\",\n `Unknown node type ${n.typeId}`,\n { typeId: n.typeId, nodeId: n.nodeId }\n );\n continue;\n }\n if (!this.registry.categories.has(nodeType.categoryId)) {\n pushIssue(\n \"error\",\n \"CATEGORY_MISSING\",\n `Unknown category ${nodeType.categoryId} for node type ${n.typeId}`\n );\n }\n }\n\n // edges validation: nodes exist, handles exist, type exists\n const inboundCounts = new Map<string, number>();\n // Track which inbound (nodeId::handle) are declared as array inputs, to allow multi-inbound without warning\n const inboundArrayOk = new Set<string>();\n for (const e of def.edges) {\n if (edgeIds.has(e.id)) {\n pushIssue(\"error\", \"EDGE_ID_DUP\", `Duplicate edge id ${e.id}`, {\n edgeId: e.id,\n });\n } else {\n edgeIds.add(e.id);\n }\n const srcNode = nodeById.get(e.source.nodeId);\n const dstNode = nodeById.get(e.target.nodeId);\n if (!srcNode)\n pushIssue(\n \"error\",\n \"EDGE_SOURCE_MISSING\",\n `Edge ${e.id} source node missing`,\n {\n edgeId: e.id,\n }\n );\n if (!dstNode)\n pushIssue(\n \"error\",\n \"EDGE_TARGET_MISSING\",\n `Edge ${e.id} target node missing`,\n {\n edgeId: e.id,\n }\n );\n // Effective handle declarations\n const srcEff = effByNodeId.get(e.source.nodeId) || {\n inputs: {},\n outputs: {},\n };\n const dstEff = effByNodeId.get(e.target.nodeId) || {\n inputs: {},\n outputs: {},\n };\n const _srcDeclared = srcNode\n ? srcEff.outputs[e.source.handle]\n : undefined;\n const _dstDeclared = dstNode\n ? getInputTypeId(dstEff.inputs, e.target.handle)\n : undefined;\n // Effective edge type\n const effectiveTypeId = inferEdgeType(\n _srcDeclared,\n _dstDeclared,\n e.typeId\n );\n const type = effectiveTypeId\n ? this.registry.types.get(effectiveTypeId)\n : undefined;\n if (!type) {\n pushIssue(\n \"error\",\n \"TYPE_MISSING\",\n `Edge ${e.id} type missing or unknown`,\n {\n edgeId: e.id,\n }\n );\n }\n\n if (srcNode) {\n if (!(e.source.handle in srcEff.outputs)) {\n pushIssue(\n \"error\",\n \"OUTPUT_MISSING\",\n `Edge ${e.id} source output ${e.source.handle} missing on ${srcNode.typeId}`,\n { edgeId: e.id, nodeId: srcNode.nodeId, output: e.source.handle }\n );\n }\n const declaredArr = normOut(srcEff.outputs[e.source.handle]);\n if (\n declaredArr.length > 0 &&\n effectiveTypeId &&\n !canFlow(declaredArr, effectiveTypeId)\n ) {\n pushIssue(\n \"error\",\n \"TYPE_MISMATCH_OUTPUT\",\n `Edge ${e.id} type ${effectiveTypeId} mismatches source output ${\n srcNode.typeId\n }.${e.source.handle} (${declaredArr.join(\n \"|\"\n )}) and no coercion exists`,\n {\n edgeId: e.id,\n nodeId: srcNode.nodeId,\n output: e.source.handle,\n declared: declaredArr.join(\"|\"),\n effectiveTypeId,\n }\n );\n }\n }\n if (dstNode) {\n if (!(e.target.handle in dstEff.inputs)) {\n pushIssue(\n \"error\",\n \"INPUT_MISSING\",\n `Edge ${e.id} target input ${e.target.handle} missing on ${dstNode.typeId}`,\n { edgeId: e.id, nodeId: dstNode.nodeId, input: e.target.handle }\n );\n }\n // Private inputs should not accept edges\n if (isInputPrivate(dstEff.inputs, e.target.handle)) {\n pushIssue(\n \"error\",\n \"INPUT_PRIVATE\",\n `Edge ${e.id} targets private input ${dstNode.typeId}.${e.target.handle}`,\n { edgeId: e.id, nodeId: dstNode.nodeId, input: e.target.handle }\n );\n }\n const declaredIn = getInputTypeId(dstEff.inputs, e.target.handle);\n if (declaredIn && effectiveTypeId) {\n if (srcNode) {\n const srcDeclared = srcEff.outputs[e.source.handle] as\n | string\n | string[]\n | undefined;\n const srcArr = normOut(srcDeclared).length\n ? normOut(srcDeclared)\n : [effectiveTypeId];\n if (!canFlow(srcArr, declaredIn)) {\n pushIssue(\n \"error\",\n \"TYPE_MISMATCH_INPUT\",\n `Edge ${e.id} output type ${srcArr.join(\n \"|\"\n )} not convertible to target input ${dstNode.typeId}.${\n e.target.handle\n } (${declaredIn})`,\n {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n declared: declaredIn,\n effectiveTypeId: srcArr.join(\"|\"),\n }\n );\n }\n } else if (!canFlow(effectiveTypeId, declaredIn)) {\n pushIssue(\n \"error\",\n \"TYPE_MISMATCH_INPUT\",\n `Edge ${e.id} type ${effectiveTypeId} mismatches target input ${dstNode.typeId}.${e.target.handle} (${declaredIn}) and no coercion exists`,\n {\n edgeId: e.id,\n nodeId: dstNode.nodeId,\n input: e.target.handle,\n declared: declaredIn,\n effectiveTypeId,\n }\n );\n }\n }\n }\n\n // Track multiple inbound edges targeting the same input handle\n const inboundKey = `${e.target.nodeId}::${e.target.handle}`;\n inboundCounts.set(inboundKey, (inboundCounts.get(inboundKey) ?? 0) + 1);\n // If the target input is declared as an array type, allow multi-inbound (runtime will append)\n if (dstNode) {\n const declaredIn = getInputTypeId(\n (effByNodeId.get(dstNode.nodeId) || { inputs: {} }).inputs,\n e.target.handle\n );\n if (typeof declaredIn === \"string\" && declaredIn.endsWith(\"[]\")) {\n inboundArrayOk.add(inboundKey);\n }\n }\n }\n\n for (const [key, count] of inboundCounts) {\n if (count > 1 && !inboundArrayOk.has(key)) {\n issues.push({\n level: \"warning\",\n code: \"MULTI_INBOUND\",\n message: `Input ${key} has ${count} inbound edges (last-write wins).`,\n data: { nodeId: key.split(\"::\")[0], input: key.split(\"::\")[1] },\n });\n }\n }\n\n return { ok: issues.every((i) => i.level !== \"error\"), issues };\n }\n\n build(def: GraphDefinition, opts?: BuildOptions): GraphRuntime {\n return GraphRuntime.create(def, this.registry, opts);\n }\n\n wrapAsNode(\n def: GraphDefinition,\n exposure: {\n inputs: Record<string, { nodeId: string; handle: string }>;\n outputs: Record<string, { nodeId: string; handle: string }>;\n },\n nodeTypeId: string,\n displayName?: string\n ): NodeTypeDescriptor<any, any, any, any> {\n // Infer exposed handle types from inner graph using registry\n const inputTypes: Record<string, string> = {};\n const outputTypes: Record<string, string> = {};\n\n for (const [outerIn, map] of Object.entries(exposure.inputs)) {\n const innerNode = def.nodes.find((n) => n.nodeId === map.nodeId);\n const innerDesc = innerNode\n ? this.registry.nodes.get(innerNode.typeId)\n : undefined;\n const typeId = innerDesc\n ? getInputTypeId(innerDesc.inputs, map.handle)\n : undefined;\n inputTypes[outerIn] = typeId ?? \"untyped\";\n }\n\n for (const [outerOut, map] of Object.entries(exposure.outputs)) {\n const innerNode = def.nodes.find((n) => n.nodeId === map.nodeId);\n const innerDesc = innerNode\n ? this.registry.nodes.get(innerNode.typeId)\n : undefined;\n const typeId = innerDesc ? innerDesc.outputs[map.handle] : undefined;\n const single = Array.isArray(typeId) ? typeId[0] : typeId;\n outputTypes[outerOut] = single ?? \"untyped\";\n }\n\n return {\n id: nodeTypeId,\n displayName,\n categoryId: \"composite\",\n inputs: inputTypes,\n outputs: outputTypes,\n impl: { def, exposure },\n } as unknown as NodeTypeDescriptor<any, any, any, any>;\n }\n}\n","import type { RunMode } from \"@bian-womp/spark-protocol\";\nimport { GraphRuntime } from \"./GraphRuntime\";\nimport { Engine, EngineEventListener, EngineEventName } from \"./Engine\";\n\n/**\n * Unified Engine implementation that handles both manual and auto run modes.\n * - Manual mode: Runtime is paused, nodes execute only when explicitly called via computeNode/runFromHere\n * - Auto mode: Runtime is resumed, nodes automatically execute when inputs change\n */\nexport class LocalEngine implements Engine {\n constructor(\n protected readonly graphRuntime: GraphRuntime,\n runMode?: RunMode\n ) {\n this.setRunMode(runMode ?? \"manual\");\n }\n\n setInputs(\n nodeId: string,\n inputs: Record<string, unknown>,\n options?: { dry?: boolean }\n ): void {\n if (options?.dry) {\n // Use requestPause to temporarily pause without affecting base run mode\n const releasePause = this.graphRuntime.requestPause();\n try {\n this.graphRuntime.setInputs(nodeId, inputs);\n } finally {\n releasePause();\n }\n } else {\n this.graphRuntime.setInputs(nodeId, inputs);\n }\n }\n\n triggerExternal(\n nodeId: string,\n event: unknown,\n options?: { dry?: boolean }\n ): void {\n if (options?.dry) {\n // Use requestPause to temporarily pause without affecting base run mode\n const releasePause = this.graphRuntime.requestPause();\n try {\n this.graphRuntime.triggerExternal(nodeId, event);\n } finally {\n releasePause();\n }\n } else {\n this.graphRuntime.triggerExternal(nodeId, event);\n }\n }\n\n on<K extends EngineEventName>(\n event: K,\n handler: EngineEventListener<K>\n ): () => void {\n return this.graphRuntime.on(event, handler);\n }\n\n getOutput(nodeId: string, output: string): unknown {\n return this.graphRuntime.getOutput(nodeId, output);\n }\n\n whenIdle(): Promise<void> {\n return this.graphRuntime.whenIdle();\n }\n\n cancelNodeRuns(nodeIds: string[]): void {\n this.graphRuntime.cancelNodeRuns(nodeIds);\n }\n\n copyOutputs(\n fromNodeId: string,\n toNodeId: string,\n options?: { dry?: boolean }\n ): void {\n this.graphRuntime.copyOutputs(fromNodeId, toNodeId, options);\n }\n\n dispose(): void {\n // this.graphRuntime.dispose();\n }\n\n launch(invalidate?: boolean, runMode?: RunMode): void {\n if (runMode) this.setRunMode(runMode);\n this.graphRuntime.launch(invalidate);\n }\n\n /**\n * Run only this node, no downstream propagation.\n * Works in both modes, but typically only used in manual mode.\n * @param nodeId - The node to run\n * @param options - Execution options\n * @param options.skipPropagateValues - If true, don't set inputs of linked nodes (default: false)\n */\n async computeNode(\n nodeId: string,\n options?: { skipPropagateValues?: boolean }\n ): Promise<void> {\n await this.graphRuntime.runFromHereContext(nodeId, {\n skipPropagateValues: options?.skipPropagateValues ?? false,\n propagate: false, // Don't schedule downstream nodes\n });\n }\n\n /**\n * Run this node and all dynamically reachable downstream nodes.\n * Works in both modes, but typically only used in manual mode.\n * Uses run-context system for dynamic graph updates.\n */\n async runFromHere(nodeId: string): Promise<void> {\n await this.graphRuntime.runFromHereContext(nodeId);\n }\n\n setRunMode(runMode: RunMode): void {\n this.graphRuntime.setRunMode(runMode);\n }\n}\n","import type { NodeCategoryDescriptor } from \"../core/categories\";\nimport type { ExecutionContext } from \"../core/types\";\n\nexport type ComputeImpl = (\n inputs: Record<string, unknown>,\n ctx: ExecutionContext<any>\n) => void | Record<string, unknown> | Promise<void | Record<string, unknown>>;\n\nexport const ComputeCategory: NodeCategoryDescriptor<ComputeImpl, any> = {\n id: \"compute\",\n displayName: \"Compute\",\n createRuntime: ({ impl }) => ({\n async onInputsChanged(inputs, ctx) {\n const out = await impl(inputs, ctx);\n if (out && typeof out === \"object\") {\n for (const [h, v] of Object.entries(out)) ctx.emit(h, v);\n }\n },\n onExternalEvent(event, state) {\n try {\n const e: any = event;\n // Preferred: call a function on state keyed by e.action\n const action = e?.action;\n if (action && typeof state?.[action] === \"function\") {\n const fn = state[action] as (...args: any[]) => any;\n // Normalize args: prefer explicit args array, else wrap single value;\n let args: any[] = [];\n if (Array.isArray(e?.args)) args = [...e.args];\n else if (e?.args !== undefined) args = [e.args];\n else if (e?.params !== undefined) args = [e.params];\n void fn(...args);\n return;\n }\n console.warn(\"Unsupported external event\", JSON.stringify(event));\n } catch {\n console.warn(\"Error handling external event\", JSON.stringify(event));\n }\n },\n }),\n policy: { asyncConcurrency: \"switch\" },\n};\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport type { NodeCategoryDescriptor } from \"../core/categories\";\nimport { Registry } from \"../builder/Registry\";\nimport { GraphRuntime } from \"../runtime/GraphRuntime\";\n\nexport interface CompositeImpl {\n def: GraphDefinition;\n exposure: {\n inputs: Record<string, { nodeId: string; handle: string }>;\n outputs: Record<string, { nodeId: string; handle: string }>;\n };\n}\n\nexport const CompositeCategory = (\n registry: Registry\n): NodeCategoryDescriptor<\n CompositeImpl,\n { inner?: GraphRuntime; unsub?: () => void }\n> => ({\n id: \"composite\",\n displayName: \"Composite\",\n validateImpl: (impl) => {\n if (!impl || !impl.def) throw new Error(\"Composite impl requires def\");\n },\n createRuntime: ({ impl }) => {\n let inner: GraphRuntime | undefined;\n let unsub: (() => void) | undefined;\n return {\n onActivated: () => {\n inner = GraphRuntime.create(impl.def, registry);\n // Wire inner outputs to outer emits\n unsub = inner.on(\"value\", (e) => {\n for (const [outHandle, map] of Object.entries(\n impl.exposure.outputs\n )) {\n if (e.nodeId === map.nodeId && e.handle === map.handle) {\n // We cannot access outer ctx here; emit will occur on next input change cycle\n // Instead, we cache outputs and pull them during onInputsChanged\n }\n }\n });\n inner.launch();\n },\n onInputsChanged: (inputs, ctx) => {\n if (!inner) return;\n // map outer inputs => batch per inner node to avoid extra runs\n const grouped: Record<string, Record<string, unknown>> = {};\n for (const [inHandle, map] of Object.entries(impl.exposure.inputs)) {\n if (inHandle in inputs) {\n const nodeMap = (grouped[map.nodeId] = grouped[map.nodeId] || {});\n nodeMap[map.handle] = inputs[inHandle];\n }\n }\n for (const [nodeId, map] of Object.entries(grouped)) {\n inner.setInputs(nodeId, map);\n }\n // pull inner exposed outputs and emit\n for (const [outHandle, map] of Object.entries(impl.exposure.outputs)) {\n const v = inner.getOutput(map.nodeId, map.handle);\n if (v !== undefined) ctx.emit(outHandle, v);\n }\n },\n onDeactivated: () => {\n if (unsub) unsub();\n },\n dispose: () => {\n if (unsub) unsub();\n inner?.dispose();\n },\n };\n },\n});\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport { GraphBuilder } from \"../builder/GraphBuilder\";\nimport { Registry } from \"../builder/Registry\";\nimport type { ExecutionContext, NodeContext } from \"../core/types\";\nimport { ComputeCategory } from \"../plugins/compute\";\n\n// Helpers\nconst asArray = (v: any): number[] =>\n Array.isArray(v) ? (v as number[]) : [Number(v)];\n\nconst broadcast = (\n a: number[] | number,\n b: number[] | number\n): [number[], number[]] => {\n const aa = asArray(a);\n const bb = asArray(b);\n if (aa.length === bb.length) return [aa, bb];\n if (aa.length === 1) return [new Array(bb.length).fill(aa[0]), bb];\n if (bb.length === 1) return [aa, new Array(aa.length).fill(bb[0])];\n const len = Math.max(aa.length, bb.length);\n return [new Array(len).fill(aa[0] ?? 0), new Array(len).fill(bb[0] ?? 0)];\n};\n\nconst asBoolArray = (v: any): boolean[] =>\n Array.isArray(v) ? (v as any[]).map((x) => Boolean(x)) : [Boolean(v)];\n\nconst broadcastBool = (\n a: boolean[] | boolean,\n b: boolean[] | boolean\n): [boolean[], boolean[]] => {\n const aa = asBoolArray(a);\n const bb = asBoolArray(b);\n if (aa.length === bb.length) return [aa, bb];\n if (aa.length === 1) return [new Array(bb.length).fill(aa[0]), bb];\n if (bb.length === 1) return [aa, new Array(aa.length).fill(bb[0])];\n const len = Math.max(aa.length, bb.length);\n return [\n new Array(len).fill(aa[0] ?? false),\n new Array(len).fill(bb[0] ?? false),\n ];\n};\n\nconst clamp = (x: number, min: number, max: number) =>\n Math.min(max, Math.max(min, x));\nconst lerp = (a: number, b: number, t: number) => a + (b - a) * t;\nconst lcg = (seed: number) => {\n let s = seed >>> 0 || 1;\n return () => (s = (s * 1664525 + 1013904223) >>> 0) / 0xffffffff;\n};\n\n// JSON Pointer helpers (RFC 6901 subset)\nfunction jsonPointerGet(obj: any, pointer: string): any {\n if (!pointer || pointer === \"/\") return obj;\n if (!pointer.startsWith(\"/\")) return undefined;\n const parts = pointer\n .split(\"/\")\n .slice(1)\n .map((p) => p.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n let cur: any = obj;\n for (const key of parts) {\n if (cur === undefined || cur === null) return undefined;\n cur = cur[key];\n }\n return cur;\n}\n\nfunction jsonPointerSet(obj: any, pointer: string, value: any): any {\n if (!pointer || pointer === \"/\") return value;\n if (!pointer.startsWith(\"/\")) return obj;\n const parts = pointer\n .split(\"/\")\n .slice(1)\n .map((p) => p.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n const root = structuredClone(obj);\n let cur: any = root;\n for (let i = 0; i < parts.length; i++) {\n const key = parts[i];\n if (i === parts.length - 1) {\n if (Array.isArray(cur) && key === \"-\") cur.push(value);\n else cur[key] = value;\n } else {\n const next = cur[key];\n if (next === undefined || next === null) {\n // create container heuristically\n const nextKey = parts[i + 1];\n cur[key] =\n typeof nextKey === \"string\" && /^[0-9]+$/.test(nextKey) ? [] : {};\n }\n cur = cur[key];\n }\n }\n return root;\n}\n\nfunction jsonPointerRemove(obj: any, pointer: string): any {\n if (!pointer || pointer === \"/\") return undefined;\n if (!pointer.startsWith(\"/\")) return obj;\n const parts = pointer\n .split(\"/\")\n .slice(1)\n .map((p) => p.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n const root = structuredClone(obj);\n let cur: any = root;\n for (let i = 0; i < parts.length - 1; i++) {\n const key = parts[i];\n if (cur === undefined || cur === null) return root;\n cur = cur[key];\n }\n const last = parts[parts.length - 1];\n if (Array.isArray(cur)) {\n const idx = last === \"-\" ? cur.length - 1 : Number(last);\n if (Number.isFinite(idx)) cur.splice(idx as number, 1);\n } else if (cur && typeof cur === \"object\") {\n delete cur[last];\n }\n return root;\n}\n\nfunction deepMerge(a: any, b: any): any {\n if (Array.isArray(a) && Array.isArray(b)) return [...a, ...b];\n if (isPlainObject(a) && isPlainObject(b)) {\n const out: any = { ...a };\n for (const [k, v] of Object.entries(b)) {\n out[k] = k in out ? deepMerge(out[k], v) : v;\n }\n return out;\n }\n return b;\n}\n\n// JSON helpers\nconst isPlainObject = (v: any): v is Record<string, any> => {\n if (v === null || typeof v !== \"object\") return false;\n const proto = Object.getPrototypeOf(v);\n return proto === Object.prototype || proto === null;\n};\n\nconst isJson = (v: any): boolean => {\n if (v === null) return true;\n const t = typeof v;\n if (t === \"string\" || t === \"number\" || t === \"boolean\") return true;\n if (Array.isArray(v)) return v.every(isJson);\n if (isPlainObject(v)) return Object.values(v).every(isJson);\n return false;\n};\n\n// Export operation constants for use in examples and tests\nexport const BaseMathOperation = {\n Add: 0,\n Subtract: 1,\n Multiply: 2,\n Divide: 3,\n Min: 4,\n Max: 5,\n Modulo: 6,\n Power: 7,\n Round: 8,\n Floor: 9,\n Ceil: 10,\n Abs: 11,\n Sum: 12,\n Avg: 13,\n MinAll: 14,\n MaxAll: 15,\n Sin: 16,\n Cos: 17,\n Tan: 18,\n Asin: 19,\n Acos: 20,\n Atan: 21,\n Sqrt: 22,\n Exp: 23,\n Log: 24,\n} as const;\n\nexport const BaseCompareOperation = {\n LessThan: 0,\n LessThanOrEqual: 1,\n GreaterThan: 2,\n GreaterThanOrEqual: 3,\n Equal: 4,\n NotEqual: 5,\n} as const;\n\nexport const BaseLogicOperation = {\n Not: 0,\n And: 1,\n Or: 2,\n Xor: 3,\n} as const;\n\nexport function setupBasicGraphRegistry(id?: string): Registry {\n const registry = new Registry(id);\n registry.categories.register(ComputeCategory);\n\n registry.registerType(\n {\n id: \"base.float\",\n validate: (v) => typeof v === \"number\" && !Number.isNaN(v),\n bakeTarget: { nodeTypeId: \"base.input.number\", inputHandle: \"Value\" },\n },\n { withArray: true, arrayPickFirstDefined: true }\n );\n\n registry.registerType(\n {\n id: \"base.bool\",\n validate: (v) => typeof v === \"boolean\",\n bakeTarget: { nodeTypeId: \"base.input.bool\", inputHandle: \"Value\" },\n },\n { withArray: true, arrayPickFirstDefined: true }\n );\n\n registry.registerType(\n {\n id: \"base.string\",\n validate: (v) => typeof v === \"string\",\n bakeTarget: { nodeTypeId: \"base.input.string\", inputHandle: \"Value\" },\n },\n { withArray: true, arrayPickFirstDefined: true }\n );\n\n // Generic object value (JSON-compatible; object/array/primitive/null)\n registry.registerType(\n {\n id: \"base.object\",\n validate: (v) => isJson(v),\n bakeTarget: { nodeTypeId: \"base.input.object\", inputHandle: \"Value\" },\n },\n { withArray: false }\n );\n\n registry.registerType(\n {\n id: \"base.vec3\",\n validate: (v) =>\n Array.isArray(v) &&\n v.length === 3 &&\n v.every((x) => typeof x === \"number\"),\n bakeTarget: { nodeTypeId: \"base.input.vec3\", inputHandle: \"Value\" },\n },\n { withArray: true, arrayPickFirstDefined: true }\n );\n\n // float -> vec3 : map x to [x,0,0]\n registry.registerCoercion(\"base.float\", \"base.vec3\", (v) => {\n return [Number(v) || 0, 0, 0] as [number, number, number];\n });\n\n registry.registerCoercion(\"base.vec3\", \"base.float\", (value) => {\n const v = value as [number, number, number];\n return Math.hypot(Number(v[0] ?? 0), Number(v[1] ?? 0), Number(v[2] ?? 0));\n });\n\n registry.registerCoercion(\"base.bool\", \"base.float\", (v) => (v ? 1 : 0));\n\n registry.registerCoercion(\"base.float\", \"base.bool\", (v) => !!v);\n\n registry.registerCoercion(\"base.float\", \"base.string\", (v) => String(v));\n\n registry.registerCoercion(\"base.string\", \"base.float\", (v) => Number(v));\n\n // Object <-> String\n registry.registerCoercion(\"base.string\", \"base.object\", (v) => {\n return v as string;\n });\n\n registry.registerCoercion(\"base.object\", \"base.string\", (v) => {\n if (typeof v === \"string\") return v;\n return undefined;\n });\n\n registry.registerCoercion(\"base.bool\", \"base.object\", (v) => {\n return v as boolean;\n });\n\n registry.registerCoercion(\"base.object\", \"base.bool\", (v) => {\n if (typeof v === \"boolean\") return v;\n return undefined;\n });\n\n registry.registerCoercion(\"base.float\", \"base.object\", (v) => {\n return v as number;\n });\n\n registry.registerCoercion(\"base.object\", \"base.float\", (v) => {\n if (typeof v === \"number\") return v;\n return undefined;\n });\n\n registry.registerCoercion(\"base.vec3\", \"base.object\", (v) => {\n return v as [number, number, number];\n });\n\n registry.registerCoercion(\"base.object\", \"base.vec3\", (v) => {\n try {\n if (\n Array.isArray(v) &&\n v.length === 3 &&\n v.every((x) => typeof x === \"number\")\n ) {\n return v as [number, number, number];\n }\n return undefined;\n } catch {\n return undefined;\n }\n });\n\n // Enums: Math Operation\n registry.registerEnum({\n id: \"enum:base.math.operation\",\n options: Object.entries(BaseMathOperation).map(([label, value]) => ({\n value,\n label,\n })),\n });\n\n // Enums: Compare Operation\n registry.registerEnum({\n id: \"enum:base.compare.operation\",\n options: Object.entries(BaseCompareOperation).map(([label, value]) => ({\n value,\n label,\n })),\n });\n\n // Enums: Logic Operation\n registry.registerEnum({\n id: \"enum:base.logic.operation\",\n options: Object.entries(BaseLogicOperation).map(([label, value]) => ({\n value,\n label,\n })),\n });\n\n // Number\n registry.registerNode({\n id: \"base.input.number\",\n categoryId: \"compute\",\n inputs: { Value: \"base.float\" },\n outputs: { Result: \"base.float\" },\n impl: (ins: { Value: number }) => ({ Result: Number(ins.Value) }),\n });\n\n registry.registerNode({\n id: \"base.input.string\",\n categoryId: \"compute\",\n inputs: { Value: \"base.string\" },\n outputs: { Result: \"base.string\" },\n impl: (ins: { Value: string }) => ({ Result: String(ins.Value) }),\n });\n\n registry.registerNode({\n id: \"base.input.bool\",\n categoryId: \"compute\",\n inputs: { Value: \"base.bool\" },\n outputs: { Result: \"base.bool\" },\n impl: (ins: { Value: boolean }) => ({ Result: Boolean(ins.Value) }),\n });\n\n registry.registerNode({\n id: \"base.input.object\",\n categoryId: \"compute\",\n inputs: { Value: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Value: any }) => ({ Result: ins.Value }),\n });\n\n registry.registerNode({\n id: \"base.input.vec3\",\n categoryId: \"compute\",\n inputs: { Value: \"base.vec3\" },\n outputs: { Result: \"base.vec3\" },\n impl: (ins: { Value: [number, number, number] }) => ({ Result: ins.Value }),\n });\n\n // JSON parser node: base.stringToObject\n registry.registerNode({\n id: \"base.string.toObject\",\n categoryId: \"compute\",\n inputs: { Text: \"base.string\" },\n outputs: { Object: \"base.object\" },\n impl: (ins: { Text?: string }) => {\n const t = ins.Text ?? \"\";\n try {\n const obj = JSON.parse(t);\n return { Object: obj };\n } catch {\n return { Object: undefined };\n }\n },\n });\n\n registry.registerNode({\n id: \"base.object.toString\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\" },\n outputs: { Text: \"base.string\" },\n impl: (ins: { Object?: any }) => {\n return { Text: JSON.stringify(ins.Object) };\n },\n });\n\n // Clamp\n registry.registerNode({\n id: \"base.clamp\",\n categoryId: \"compute\",\n inputs: { Value: \"base.float[]\", Min: \"base.float\", Max: \"base.float\" },\n outputs: { Value: \"base.float[]\" },\n impl: (ins: { Value: number[]; Min: number; Max: number }) => {\n const vals = asArray(ins.Value);\n const min = Number(ins.Min ?? 0);\n const max = Number(ins.Max ?? 1);\n return { Value: vals.map((v) => clamp(Number(v), min, max)) };\n },\n });\n\n // Interpolate (lerp)\n registry.registerNode({\n id: \"base.interpolate\",\n categoryId: \"compute\",\n inputs: {\n ValueA: \"base.float[]\",\n ValueB: \"base.float[]\",\n Factor: \"base.float\",\n },\n outputs: { Value: \"base.float[]\" },\n inputDefaults: {\n Factor: 0.5,\n },\n impl: (ins: { ValueA: number[]; ValueB: number[]; Factor: number }) => {\n const [a, b] = broadcast(ins.ValueA, ins.ValueB);\n const t = Number(ins.Factor ?? 0);\n const len = Math.max(a.length, b.length);\n const out = new Array(len)\n .fill(0)\n .map((_, i) => lerp(Number(a[i] ?? 0), Number(b[i] ?? 0), t));\n return { Value: out };\n },\n });\n\n // Map Range (linear)\n registry.registerNode({\n id: \"base.mapRange\",\n categoryId: \"compute\",\n inputs: {\n Mode: \"base.string\",\n Clamp: \"base.bool\",\n Value: \"base.float[]\",\n FromMin: \"base.float\",\n FromMax: \"base.float\",\n ToMin: \"base.float\",\n ToMax: \"base.float\",\n },\n outputs: { Value: \"base.float[]\" },\n impl: (ins: {\n Value: number[];\n FromMin: number;\n FromMax: number;\n ToMin: number;\n ToMax: number;\n Clamp: boolean;\n }) => {\n const vals = asArray(ins.Value);\n const fromMin = Number(ins.FromMin ?? 0);\n const fromMax = Number(ins.FromMax ?? 1);\n const toMin = Number(ins.ToMin ?? 0);\n const toMax = Number(ins.ToMax ?? 1);\n const doClamp = Boolean(ins.Clamp);\n const out = vals.map((v) => {\n const t = (Number(v) - fromMin) / (fromMax - fromMin || 1);\n const r = toMin + t * (toMax - toMin);\n return doClamp\n ? clamp(r, Math.min(toMin, toMax), Math.max(toMin, toMax))\n : r;\n });\n return { Value: out };\n },\n });\n\n // Math (subset) - scalar version for simple examples\n registry.registerNode({\n id: \"base.math\",\n categoryId: \"compute\",\n inputs: {\n Operation: \"enum:base.math.operation\",\n A: \"base.float[]\",\n B: \"base.float[]\",\n },\n outputs: { Result: \"base.float[]\" },\n // Registry-level defaults: Add by default, A=[1], B=[1]\n inputDefaults: { Operation: 0, A: [1], B: [1] },\n impl: (ins: { Operation: number; A: number[]; B: number[] }) => {\n const a = asArray(ins.A ?? []);\n const b = asArray(ins.B ?? []);\n const op = Number(ins.Operation ?? BaseMathOperation.Add);\n\n const unaryByOp: Record<number, (x: number) => number> = {\n [BaseMathOperation.Round]: (x) => Math.round(x),\n [BaseMathOperation.Floor]: (x) => Math.floor(x),\n [BaseMathOperation.Ceil]: (x) => Math.ceil(x),\n [BaseMathOperation.Abs]: (x) => Math.abs(x),\n [BaseMathOperation.Sin]: (x) => Math.sin(x),\n [BaseMathOperation.Cos]: (x) => Math.cos(x),\n [BaseMathOperation.Tan]: (x) => Math.tan(x),\n [BaseMathOperation.Asin]: (x) => Math.asin(x),\n [BaseMathOperation.Acos]: (x) => Math.acos(x),\n [BaseMathOperation.Atan]: (x) => Math.atan(x),\n [BaseMathOperation.Sqrt]: (x) => Math.sqrt(x),\n [BaseMathOperation.Exp]: (x) => Math.exp(x),\n [BaseMathOperation.Log]: (x) => Math.log(x),\n };\n if (unaryByOp[op])\n return { Result: a.map((x) => unaryByOp[op](Number(x))) };\n\n const aggregateByOp: Record<number, (arr: number[]) => number> = {\n [BaseMathOperation.Sum]: (arr) =>\n arr.reduce((s, x) => s + Number(x || 0), 0),\n [BaseMathOperation.Avg]: (arr) => {\n const sum = arr.reduce((s, x) => s + Number(x || 0), 0);\n return arr.length ? sum / arr.length : 0;\n },\n [BaseMathOperation.MinAll]: (arr) =>\n arr.length ? Math.min(...arr.map((x) => Number(x))) : 0,\n [BaseMathOperation.MaxAll]: (arr) =>\n arr.length ? Math.max(...arr.map((x) => Number(x))) : 0,\n };\n if (aggregateByOp[op] !== undefined)\n return { Result: [aggregateByOp[op](a)] };\n\n const binaryByOp: Record<number, (x: number, y: number) => number> = {\n [BaseMathOperation.Add]: (x, y) => x + y,\n [BaseMathOperation.Subtract]: (x, y) => x - y,\n [BaseMathOperation.Multiply]: (x, y) => x * y,\n [BaseMathOperation.Divide]: (x, y) => x / (y || 1),\n [BaseMathOperation.Min]: (x, y) => Math.min(x, y),\n [BaseMathOperation.Max]: (x, y) => Math.max(x, y),\n [BaseMathOperation.Modulo]: (x, y) => (y ? x % y : 0),\n [BaseMathOperation.Power]: (x, y) => Math.pow(x, y),\n };\n const fn = binaryByOp[op] || binaryByOp[BaseMathOperation.Add];\n const len = Math.max(a.length, b.length);\n const out = new Array(len).fill(0).map((_, i) => {\n const ax = a.length === 1 && len > 1 ? a[0] : a[i] ?? 0;\n const bx = b.length === 1 && len > 1 ? b[0] : b[i] ?? 0;\n return fn(Number(ax), Number(bx));\n });\n return { Result: out };\n },\n });\n\n // Compare\n registry.registerNode({\n id: \"base.compare\",\n categoryId: \"compute\",\n inputs: {\n Operation: \"enum:base.compare.operation\",\n A: \"base.float[]\",\n B: \"base.float[]\",\n },\n outputs: { Result: \"base.bool[]\" },\n impl: (ins: { Operation: number; A: number[]; B: number[] }) => {\n const [a, b] = broadcast(ins.A, ins.B);\n const op = Number(ins.Operation ?? BaseCompareOperation.Equal);\n const compareByOp: Record<number, (x: number, y: number) => boolean> = {\n [BaseCompareOperation.LessThan]: (x, y) => x < y,\n [BaseCompareOperation.LessThanOrEqual]: (x, y) => x <= y,\n [BaseCompareOperation.GreaterThan]: (x, y) => x > y,\n [BaseCompareOperation.GreaterThanOrEqual]: (x, y) => x >= y,\n [BaseCompareOperation.Equal]: (x, y) => x === y,\n [BaseCompareOperation.NotEqual]: (x, y) => x !== y,\n };\n const fn = compareByOp[op] || compareByOp[BaseCompareOperation.Equal];\n return { Result: a.map((x, i) => fn(Number(x), Number(b[i] ?? 0))) };\n },\n });\n // Logic\n registry.registerNode({\n id: \"base.logic\",\n categoryId: \"compute\",\n inputs: {\n Operation: \"enum:base.logic.operation\",\n A: \"base.bool[]\",\n B: \"base.bool[]\",\n },\n outputs: { Result: \"base.bool[]\" },\n inputDefaults: { Operation: BaseLogicOperation.Not },\n impl: (ins: { Operation?: number; A?: boolean[]; B?: boolean[] }) => {\n const op = Number(ins.Operation ?? BaseLogicOperation.Not);\n if (op === BaseLogicOperation.Not) {\n const a = asBoolArray(ins.A ?? []);\n return { Result: a.map((x) => !x) };\n }\n const [a, b] = broadcastBool(ins.A ?? [], ins.B ?? []);\n const logicByOp: Record<number, (x: boolean, y: boolean) => boolean> = {\n [BaseLogicOperation.And]: (x, y) => x && y,\n [BaseLogicOperation.Or]: (x, y) => x || y,\n [BaseLogicOperation.Xor]: (x, y) => Boolean(x ? !y : y),\n };\n const fn = logicByOp[op] || logicByOp[BaseLogicOperation.And];\n return {\n Result: a.map((x, i) => fn(Boolean(x), Boolean(b[i] ?? false))),\n };\n },\n });\n\n // Strings\n registry.registerNode({\n id: \"base.string.length\",\n categoryId: \"compute\",\n inputs: { Text: \"base.string\" },\n outputs: { Length: \"base.float\" },\n impl: (ins: { Text?: string }) => ({\n Length: String(ins.Text || \"\").length,\n }),\n });\n\n registry.registerNode({\n id: \"base.string.op\",\n categoryId: \"compute\",\n inputs: { Op: \"base.string\", Text: \"base.string\" },\n outputs: { Text: \"base.string\" },\n impl: (ins: { Op?: string; Text?: string }) => {\n const op = String(ins.Op || \"trim\").toLowerCase();\n const t = String(ins.Text || \"\");\n if (op === \"lower\") return { Text: t.toLowerCase() };\n if (op === \"upper\") return { Text: t.toUpperCase() };\n return { Text: t.trim() };\n },\n });\n\n registry.registerNode({\n id: \"base.string.split\",\n categoryId: \"compute\",\n inputs: { Text: \"base.string\", Sep: \"base.string\" },\n outputs: { Parts: \"base.string[]\" },\n impl: (ins: { Text?: string; Sep?: string }) => {\n const t = String(ins.Text || \"\");\n const sep = String(ins.Sep || \",\");\n return { Parts: t.split(sep) };\n },\n });\n\n registry.registerNode({\n id: \"base.string.join\",\n categoryId: \"compute\",\n inputs: { Parts: \"base.string[]\", Sep: \"base.string\" },\n outputs: { Text: \"base.string\" },\n impl: (ins: { Parts?: string[]; Sep?: string }) => {\n const parts = Array.isArray(ins.Parts) ? ins.Parts.map(String) : [];\n const sep = String(ins.Sep || \"\");\n return { Text: parts.join(sep) };\n },\n });\n\n registry.registerNode({\n id: \"base.string.replace\",\n categoryId: \"compute\",\n inputs: {\n Text: \"base.string\",\n Search: \"base.string\",\n Replace: \"base.string\",\n },\n outputs: { Text: \"base.string\" },\n impl: (ins: { Text?: string; Search?: string; Replace?: string }) => {\n const t = String(ins.Text || \"\");\n const s = String(ins.Search || \"\");\n const r = String(ins.Replace || \"\");\n return { Text: t.split(s).join(r) };\n },\n });\n\n // Arrays (carried as base.object)\n registry.registerNode({\n id: \"base.array.length\",\n categoryId: \"compute\",\n inputs: { Items: \"base.object\" },\n outputs: { Length: \"base.float\" },\n impl: (ins: { Items?: any }) => ({\n Length: Array.isArray(ins.Items) ? ins.Items.length : 0,\n }),\n });\n\n registry.registerNode({\n id: \"base.array.slice\",\n categoryId: \"compute\",\n inputs: { Items: \"base.object\", Start: \"base.float\", End: \"base.float\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Items?: any; Start?: number; End?: number }) => {\n const arr = Array.isArray(ins.Items) ? ins.Items : [];\n const s = Math.trunc(Number(ins.Start ?? 0));\n const e = Number.isFinite(Number(ins.End))\n ? Math.trunc(Number(ins.End))\n : undefined;\n return { Result: arr.slice(s, e as any) };\n },\n });\n\n // Compose array from dynamic item inputs\n registry.registerNode({\n id: \"base.array.compose\",\n categoryId: \"compute\",\n inputs: { Length: \"base.float\" },\n outputs: { Items: \"base.object\" },\n resolveHandles: ({ inputs }) => {\n const maxLen = 64;\n const raw = inputs?.Length ?? 0;\n const n = Math.max(0, Math.min(maxLen, Math.trunc(Number(raw ?? 0))));\n if (!Number.isFinite(n)) return { inputs: {} };\n const dyn: Record<string, { typeId: string }> = {};\n for (let i = 0; i < n; i++) dyn[`Item${i}`] = { typeId: \"base.object\" };\n return { inputs: dyn };\n },\n inputDefaults: { Length: 0 },\n impl: (ins: Record<string, unknown>) => {\n const length = Math.max(0, Math.trunc(Number(ins.Length ?? 0)));\n if (!Number.isFinite(length)) return { Items: [] };\n return { Items: Array.from({ length }, (_, i) => ins[`Item${i}`]) };\n },\n });\n\n // Decompose array into dynamic item outputs\n registry.registerNode({\n id: \"base.array.decompose\",\n categoryId: \"compute\",\n inputs: { Items: \"base.object\" },\n outputs: {},\n resolveHandles: ({ inputs }) => {\n const maxLen = 64;\n const arr = Array.isArray(inputs?.Items) ? (inputs?.Items as any[]) : [];\n const n = Math.max(0, Math.min(maxLen, arr.length));\n const dyn: Record<string, string> = {};\n for (let i = 0; i < n; i++) dyn[`Item${i}`] = \"base.object\";\n return { outputs: dyn };\n },\n impl: (ins: { Items?: any[] }) => {\n const arr = Array.isArray(ins.Items) ? ins.Items : [];\n const out: Record<string, unknown> = {};\n const n = Math.max(0, Math.min(64, arr.length));\n for (let i = 0; i < n; i++) out[`Item${i}`] = arr[i];\n return out;\n },\n });\n\n // Select\n registry.registerNode({\n id: \"base.select\",\n categoryId: \"compute\",\n inputs: { Cond: \"base.bool\", Then: \"base.object\", Else: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Cond?: boolean; Then?: any; Else?: any }) => ({\n Result: ins.Cond ? ins.Then : ins.Else,\n }),\n });\n\n // Combine XYZ\n registry.registerNode({\n id: \"base.compareXYZ\",\n categoryId: \"compute\",\n inputs: { X: \"base.float[]\", Y: \"base.float[]\", Z: \"base.float[]\" },\n outputs: { XYZ: \"base.vec3[]\" },\n impl: (ins: { X: number[]; Y: number[]; Z: number[] }) => {\n const [x, y] = broadcast(ins.X, ins.Y);\n const [xx, z] = broadcast(x, ins.Z);\n const len = Math.max(xx.length, z.length);\n const out = new Array(len)\n .fill(0)\n .map(\n (_, i) =>\n [Number(xx[i] ?? 0), Number(y[i] ?? 0), Number(z[i] ?? 0)] as [\n number,\n number,\n number\n ]\n );\n return { XYZ: out };\n },\n });\n\n // Separate XYZ\n registry.registerNode({\n id: \"base.separateXYZ\",\n categoryId: \"compute\",\n inputs: { XYZ: \"base.vec3[]\" },\n outputs: { X: \"base.float[]\", Y: \"base.float[]\", Z: \"base.float[]\" },\n impl: (ins: { XYZ: Array<[number, number, number]> }) => {\n const arr = ins.XYZ ?? [];\n const X = arr.map((v) => Number(v?.[0] ?? 0));\n const Y = arr.map((v) => Number(v?.[1] ?? 0));\n const Z = arr.map((v) => Number(v?.[2] ?? 0));\n return { X, Y, Z };\n },\n });\n\n // Indices\n registry.registerNode({\n id: \"base.indices\",\n categoryId: \"compute\",\n inputs: { Domain: \"base.float\" },\n outputs: { Indices: \"base.float[]\" },\n impl: (ins: { Domain: number }) => {\n const n = Math.trunc(ins.Domain);\n return { Indices: Array.from({ length: n }, (_, i) => i) };\n },\n });\n\n // Random Numbers\n registry.registerNode({\n id: \"base.randomNumbers\",\n categoryId: \"compute\",\n inputs: {\n Domain: \"base.float\",\n Min: \"base.float\",\n Max: \"base.float\",\n Seed: \"base.float\",\n },\n outputs: { Values: \"base.float[]\" },\n impl: (ins: { Domain: number; Min: number; Max: number; Seed: number }) => {\n const len = Math.trunc(ins.Domain);\n const min = Number(ins.Min ?? 0);\n const max = Number(ins.Max ?? 1);\n const rng = lcg(Number(ins.Seed ?? 1));\n const out = Array.from({ length: len }, () => min + rng() * (max - min));\n return { Values: out };\n },\n });\n\n // Random Vectors\n registry.registerNode({\n id: \"base.randomXYZs\",\n categoryId: \"compute\",\n inputs: {\n Domain: \"base.float\",\n Min: \"base.vec3\",\n Max: \"base.vec3\",\n Seed: \"base.float\",\n },\n outputs: { Values: \"base.vec3[]\" },\n // Registry-level defaults for convenience\n inputDefaults: { Domain: 10, Min: [0, 0, 0], Max: [1, 1, 1], Seed: 1 },\n impl: (ins: {\n Domain: number;\n Min: [number, number, number];\n Max: [number, number, number];\n Seed: number;\n }) => {\n const len = Math.trunc(ins.Domain);\n const min = ins.Min ?? [0, 0, 0];\n const max = ins.Max ?? [1, 1, 1];\n const rng = lcg(Number(ins.Seed ?? 1));\n const out = Array.from(\n { length: len },\n () =>\n [\n min[0] + rng() * (max[0] - min[0]),\n min[1] + rng() * (max[1] - min[1]),\n min[2] + rng() * (max[2] - min[2]),\n ] as [number, number, number]\n );\n return { Values: out };\n },\n });\n\n // Timer\n registry.registerNode({\n id: \"base.timer\",\n categoryId: \"compute\",\n inputs: {\n Enabled: \"base.bool\",\n IntervalMs: \"base.float\",\n Immediate: \"base.bool\",\n },\n outputs: { Now: \"base.float\", Count: \"base.float\" },\n inputDefaults: { Enabled: true, IntervalMs: 1000, Immediate: true },\n impl: (\n ins: { Enabled?: boolean; IntervalMs?: number; Immediate?: boolean },\n ctx: ExecutionContext<{ timerId?: NodeJS.Timeout }>\n ) => {\n const enabled = Boolean(ins.Enabled);\n const intervalMs = Math.max(\n 1,\n Math.trunc(Number(ins.IntervalMs ?? 1000))\n );\n const immediate = Boolean(ins.Immediate);\n\n const stop = () => {\n const id = ctx.state.timerId;\n if (id !== undefined) {\n clearInterval(id);\n ctx.setState({ timerId: undefined });\n }\n };\n\n if (!enabled) {\n stop();\n return;\n }\n\n // restart timer with new settings\n stop();\n let count = 0;\n if (immediate) {\n ctx.emit(\"Now\", Date.now());\n ctx.emit(\"Count\", count);\n count += 1;\n }\n const id = setInterval(() => {\n ctx.emit(\"Now\", Date.now());\n ctx.emit(\"Count\", count);\n count += 1;\n }, intervalMs);\n ctx.setState({ timerId: id });\n },\n lifecycle: {\n dispose: (ctx: NodeContext<{ timerId?: NodeJS.Timeout }>) => {\n const id = ctx.state.timerId;\n if (id !== undefined) {\n clearInterval(id);\n ctx.setState({ timerId: undefined });\n }\n },\n },\n });\n\n // ------------------------- JSON/object utilities -------------------------\n registry.registerNode({\n id: \"base.object.get\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\", Pointers: \"base.string[]\" },\n outputs: { Values: \"base.object\" },\n impl: (ins: { Object?: any; Pointers?: string[] }) => {\n const obj = ins.Object;\n const pointers = (ins.Pointers || []).map(String);\n const out: Record<string, any> = {};\n for (const p of pointers) out[p] = jsonPointerGet(obj, p);\n return { Values: out };\n },\n });\n\n registry.registerNode({\n id: \"base.object.set\",\n categoryId: \"compute\",\n inputs: {\n Object: \"base.object\",\n Pointers: \"base.string[]\",\n NewValues: \"base.object\",\n },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Object?: any; Pointers?: string[]; NewValues?: any }) => {\n const pointers = (ins.Pointers || []).map(String);\n const values = (ins.NewValues || []).map(String);\n let cur = structuredClone(ins.Object);\n for (let i = 0; i < pointers.length; i++) {\n const p = pointers[i];\n const raw = values[i];\n let val: any = raw;\n if (typeof raw === \"string\") {\n try {\n val = JSON.parse(raw);\n } catch {\n /* keep as string */\n }\n }\n cur = jsonPointerSet(cur, p, val);\n }\n return { Result: cur };\n },\n });\n\n registry.registerNode({\n id: \"base.object.remove\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\", Pointers: \"base.string[]\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Object?: any; Pointers?: string[] }) => {\n const pointers = (ins.Pointers || []).map(String);\n let cur = structuredClone(ins.Object);\n for (const p of pointers) cur = jsonPointerRemove(cur, p);\n return { Result: cur };\n },\n });\n\n registry.registerNode({\n id: \"base.object.merge\",\n categoryId: \"compute\",\n inputs: { A: \"base.object\", B: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { A?: any; B?: any }) => ({\n Result: deepMerge(ins.A, ins.B),\n }),\n });\n\n registry.registerNode({\n id: \"base.object.keys\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\" },\n outputs: { Keys: \"base.string[]\" },\n impl: (ins: { Object?: any }) => {\n const obj = ins.Object;\n const keys = isPlainObject(obj)\n ? Object.keys(obj)\n : Array.isArray(obj)\n ? Object.keys(obj)\n : [];\n return { Keys: keys };\n },\n });\n\n registry.registerNode({\n id: \"base.object.values\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\" },\n outputs: { Values: \"base.object\" },\n impl: (ins: { Object?: any }) => {\n const obj = ins.Object;\n const vals = isPlainObject(obj)\n ? Object.values(obj)\n : Array.isArray(obj)\n ? Object.values(obj)\n : [];\n return { Values: vals };\n },\n });\n\n registry.registerNode({\n id: \"base.object.patch\",\n categoryId: \"compute\",\n inputs: { Object: \"base.object\", Ops: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Object?: any; Ops?: any }) => {\n const root = structuredClone(ins.Object);\n const opsRaw = ins.Ops;\n const ops: any[] = Array.isArray(opsRaw)\n ? opsRaw\n : opsRaw\n ? [opsRaw]\n : [];\n let cur = root;\n for (const op of ops) {\n if (!op || typeof op !== \"object\") continue;\n const kind = String(op.op || \"\");\n const path = String(op.path || \"\");\n if (kind === \"add\" || kind === \"replace\") {\n cur = jsonPointerSet(cur, path, op.value);\n } else if (kind === \"remove\") {\n cur = jsonPointerRemove(cur, path);\n } else if (kind === \"test\") {\n const got = jsonPointerGet(cur, path);\n const expected = op.value;\n const ok = JSON.stringify(got) === JSON.stringify(expected);\n if (!ok) throw new Error(`objectPatch test failed at ${path}`);\n }\n }\n return { Result: cur };\n },\n });\n\n registry.registerNode({\n id: \"base.array.concat\",\n categoryId: \"compute\",\n inputs: { A: \"base.object\", B: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { A?: any; B?: any }) => {\n const a = Array.isArray(ins.A) ? ins.A : [];\n const b = Array.isArray(ins.B) ? ins.B : [];\n return { Result: [...a, ...b] };\n },\n });\n\n registry.registerNode({\n id: \"base.array.flatten\",\n categoryId: \"compute\",\n inputs: { Objects: \"base.object\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Objects?: any }) => {\n const arr = Array.isArray(ins.Objects) ? ins.Objects : [];\n const out: any[] = [];\n for (const v of arr) {\n if (Array.isArray(v)) out.push(...v);\n else out.push(v);\n }\n return { Result: out };\n },\n });\n\n registry.registerNode({\n id: \"base.array.sortBy\",\n categoryId: \"compute\",\n inputs: { Objects: \"base.object\", Pointers: \"base.string[]\" },\n outputs: { Result: \"base.object\" },\n impl: (ins: { Objects?: any; Pointers?: string[] }) => {\n const arr = Array.isArray(ins.Objects) ? ins.Objects : [];\n const pointers = (ins.Pointers || []).map(String);\n const out = [...arr].sort((a, b) => {\n for (const p of pointers) {\n const av = jsonPointerGet(a, p);\n const bv = jsonPointerGet(b, p);\n if (av === bv) continue;\n if (av === undefined) return 1;\n if (bv === undefined) return -1;\n if (av < bv) return -1;\n if (av > bv) return 1;\n }\n return 0;\n });\n return { Result: out };\n },\n });\n return registry;\n}\n\nexport function registerDelayNode(registry: Registry) {\n registry.registerNode({\n id: \"async.delay\",\n categoryId: \"compute\",\n inputs: { Value: \"base.float\", DelayMs: \"base.float\" },\n outputs: { Output: \"base.float\" },\n impl: async (\n ins: { Value: number; DelayMs?: number },\n ctx: ExecutionContext<any>\n ) => {\n const ms = Number(ins.DelayMs ?? 200);\n const valueRaw = ins.Value;\n if (\n valueRaw === undefined ||\n valueRaw === null ||\n Number.isNaN(Number(valueRaw))\n ) {\n return; // wait until x is present to avoid NaN emissions\n }\n await new Promise<void>((resolve, reject) => {\n const id = setTimeout(resolve, ms);\n const onAbort = () => {\n clearTimeout(id);\n reject(new DOMException(\"Aborted\", \"AbortError\"));\n };\n if (ctx.abortSignal.aborted) return onAbort();\n ctx.abortSignal.addEventListener(\"abort\", onAbort, { once: true });\n });\n return { Output: Number(valueRaw) };\n },\n });\n}\n\nfunction sleepWithAbort(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const id = setTimeout(() => {\n cleanup();\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(id);\n cleanup();\n reject(new DOMException(\"Aborted\", \"AbortError\"));\n };\n const cleanup = () => {\n signal.removeEventListener(\"abort\", onAbort);\n };\n if (signal.aborted) return onAbort();\n signal.addEventListener(\"abort\", onAbort);\n });\n}\n\nexport function registerProgressNodes(registry: Registry) {\n registry.registerNode({\n id: \"async.progress\",\n categoryId: \"compute\",\n inputs: {\n Steps: \"base.float\",\n DelayMs: \"base.float\",\n ShouldError: \"base.bool\",\n },\n outputs: { Done: \"base.string\" },\n impl: async (\n ins: { Steps?: number; DelayMs?: number; ShouldError?: boolean },\n ctx: ExecutionContext<any>\n ) => {\n const steps = Math.max(1, Math.trunc(Number(ins.Steps ?? 10)));\n const delayMs = Math.max(0, Math.trunc(Number(ins.DelayMs ?? 50)));\n const shouldError = Boolean(ins.ShouldError);\n for (let i = 0; i < steps; i++) {\n ctx.reportProgress?.(i / steps);\n await sleepWithAbort(delayMs, ctx.abortSignal);\n if (shouldError && i >= Math.floor(steps * 0.7)) {\n ctx.reportProgress?.(i / steps);\n throw new Error(\"progressWorker: simulated failure at 70% progress\");\n }\n }\n ctx.reportProgress?.(1);\n return { Done: `Completed ${steps} steps` };\n },\n });\n}\n\nexport function createRuntime(registry: Registry, def: GraphDefinition) {\n const builder = new GraphBuilder(registry);\n const report = builder.validate(def);\n if (!report.ok)\n throw new Error(\n \"Validation failed: \" +\n report.issues.map((i) => `${i.code}:${i.message}`).join(\", \")\n );\n\n return builder.build(def);\n}\n\nexport function generateId(\n prefix: string,\n used: Set<string> = new Set()\n): string {\n let id: string;\n let attempts = 0;\n do {\n id = `${prefix}${Math.random().toString(36).slice(2, 8)}`;\n attempts++;\n if (attempts > 1000) {\n id = `${prefix}${Date.now().toString(36)}${Math.random()\n .toString(36)\n .slice(2, 4)}`;\n }\n } while (used.has(id));\n return id;\n}\n","import type { EngineEventListener, EngineEventName } from \"../runtime/Engine\";\n\nexport function installLogging(engine: {\n on: <K extends EngineEventName>(\n event: K,\n handler: EngineEventListener<K>\n ) => void;\n}) {\n engine.on(\"value\", (e) => {\n const t = e.runtimeTypeId ? ` <${e.runtimeTypeId}>` : \"\";\n console.log(`[value:${e.io}]`, `${e.nodeId}.${e.handle}`, e.value, t);\n });\n engine.on(\"stats\", (s) => {\n if (s.kind === \"node-progress\") {\n const pct = Math.round((s.progress ?? 0) * 100);\n console.log(`[progress] ${s.runId || s.nodeId}: ${pct}%`);\n } else if (s.kind === \"node-done\") {\n const cancelled = (s as any).cancelled ? \" (cancelled)\" : \"\";\n console.log(`[done] ${s.runId || s.nodeId} in ${s.durationMs ?? 0}ms${cancelled}`);\n } else if (s.kind === \"node-start\") {\n console.log(`[start] ${s.runId || s.nodeId}`);\n } else if (s.kind === \"edge-start\") {\n console.log(\n `[edge] ${s.source.nodeId}.${s.source.handle} -> ${s.target.nodeId}.${s.target.handle}`\n );\n } else if (s.kind === \"edge-done\") {\n console.log(\n `[edge] ${s.source.nodeId}.${s.source.handle} -> ${s.target.nodeId}.${\n s.target.handle\n } in ${s.durationMs ?? 0}ms`\n );\n }\n });\n engine.on(\"error\", (e) => {\n if (e.kind === \"node-run\") {\n console.warn(\n `[error] ${e.runId || e.nodeId}`,\n (e.err as any)?.message ?? e.err\n );\n } else if (e.kind === \"edge-convert\") {\n console.warn(\n `[error] ${e.edgeId} ${e.source.nodeId}.${e.source.handle} -> ${e.target.nodeId}.${e.target.handle}`,\n (e.err as any)?.message ?? e.err\n );\n } else if (e.kind === \"input-validation\") {\n console.warn(\n `[error] input-validation: ${e.nodeId}.${e.handle} (type ${e.typeId})`,\n e.message\n );\n } else if (e.kind === \"registry\") {\n console.warn(\n `[error] registry:`,\n (e.err as any)?.message ?? e.err,\n e.attempt !== undefined\n ? `(attempt ${e.attempt}/${e.maxAttempts ?? \"?\"})`\n : \"\"\n );\n } else if (e.kind === \"system\") {\n console.warn(\n `[error] system: ${e.message}`,\n e.code ? `(code: ${e.code})` : \"\",\n e.err ? (e.err as any)?.message ?? e.err : \"\",\n e.details ? JSON.stringify(e.details) : \"\"\n );\n } else {\n // Log any other error kinds (shouldn't happen, but handle gracefully)\n console.warn(`[error] unknown error kind:`, e);\n }\n });\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport {\n setupBasicGraphRegistry,\n createRuntime,\n BaseMathOperation,\n} from \"../misc/base\";\nimport { LocalEngine } from \"../runtime/LocalEngine\";\nimport { installLogging } from \"./shared\";\n\nfunction makeBasicGraphDefinition(): GraphDefinition {\n return {\n nodes: [\n { nodeId: \"n1\", typeId: \"base.math\" },\n {\n nodeId: \"n2\",\n typeId: \"base.math\",\n },\n // Transitivity demo nodes\n { nodeId: \"n3\", typeId: \"base.compare\" },\n { nodeId: \"n4\", typeId: \"base.randomXYZs\" },\n ],\n edges: [\n {\n id: \"e1\",\n source: { nodeId: \"n1\", handle: \"Result\" },\n target: { nodeId: \"n2\", handle: \"A\" },\n },\n // Feed n2 result to comparer A\n {\n id: \"e2\",\n source: { nodeId: \"n2\", handle: \"Result\" },\n target: { nodeId: \"n3\", handle: \"A\" },\n },\n // Transitive coercion edge: bool[] (n3.Result) -> vec3 (n4.Min)\n // Path: bool[] -> float[] -> vec3[] -> vec3\n {\n id: \"e3\",\n source: { nodeId: \"n3\", handle: \"Result\" },\n target: { nodeId: \"n4\", handle: \"Min\" },\n },\n ],\n };\n}\n\nexport function createSimpleGraphDef() {\n return makeBasicGraphDefinition();\n}\n\nexport function createSimpleGraphRegistry(id?: string) {\n return setupBasicGraphRegistry(id);\n}\n\n// Execute when run as a script\nexport async function main() {\n console.log(\"Simple example: topology and defaults\");\n console.log(\n \"Topology: n1(base.math) -> n2(base.math) -> n3(base.compare) -> n4(base.randomXYZs.Min)\"\n );\n console.log(\n \"Registry defaults: base.math Operation=Add(0), A=[1], B=[1]; base.randomXYZs Domain=10, Min=[0,0,0], Max=[1,1,1], Seed=1\"\n );\n console.log(\n \"Graph defaults: n2 uses registry defaults (Operation=Add(0), A=[1], B=[1])\"\n );\n\n const runtime = createRuntime(\n createSimpleGraphRegistry(),\n createSimpleGraphDef()\n );\n const engine = new LocalEngine(runtime, \"auto\");\n installLogging(engine);\n engine.launch();\n // Configure math nodes: n1 = 2 + 3, n2 multiplies its A (from n1) by B=10\n engine.setInputs(\"n1\", {\n Operation: BaseMathOperation.Add,\n A: [2],\n B: [3],\n });\n engine.setInputs(\"n2\", {\n Operation: BaseMathOperation.Multiply,\n B: [10],\n });\n engine.setInputs(\"n3\", { B: [15] });\n\n // Allow async propagation to flush\n await engine.whenIdle();\n\n const n1Res = engine.getOutput(\"n1\", \"Result\");\n const n2Res = engine.getOutput(\"n2\", \"Result\");\n const n3Res = engine.getOutput(\"n3\", \"Result\");\n const n4Vals = engine.getOutput(\"n4\", \"Values\");\n\n console.log(\"Computed outputs (with overrides):\");\n console.log(\"- n1.Result = A+B = 2+3 =>\", n1Res);\n console.log(\"- n2.Result = A*B, A comes from n1.Result, B=10 =>\", n2Res);\n console.log(\n \"- n3.Result = (A op B) with op=Equal by default, A=n2.Result, B=15 =>\",\n n3Res,\n \"(false because 50 !== 15)\"\n );\n console.log(\n \"- n4.Values: random vec3[], Domain defaults to 10; Min is driven by n3.Result (false -> 0 -> [0,0,0])\"\n );\n console.log(\n \" count(n4.Values) =\",\n Array.isArray(n4Vals) ? n4Vals.length : 0\n );\n engine.dispose();\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport {\n setupBasicGraphRegistry,\n registerDelayNode,\n createRuntime,\n BaseMathOperation,\n} from \"../misc/base\";\nimport { LocalEngine } from \"../runtime/LocalEngine\";\nimport { installLogging } from \"./shared\";\n\nexport function createAsyncGraphDef() {\n const def: GraphDefinition = {\n nodes: [\n {\n nodeId: \"n1\",\n typeId: \"base.math\",\n },\n {\n nodeId: \"n2\",\n typeId: \"async.delay\",\n params: { policy: { asyncConcurrency: \"queue\", maxQueue: 4 } },\n },\n {\n nodeId: \"n3\",\n typeId: \"base.separateXYZ\",\n },\n {\n nodeId: \"n4\",\n typeId: \"base.compareXYZ\",\n },\n ],\n edges: [\n {\n id: \"e1\",\n source: { nodeId: \"n1\", handle: \"Result\" },\n target: { nodeId: \"n2\", handle: \"Value\" },\n },\n // Demonstrate async edge conversion: vec3[] -> float[] using coercion\n {\n id: \"e2\",\n source: { nodeId: \"n4\", handle: \"XYZ\" },\n target: { nodeId: \"n1\", handle: \"A\" },\n typeId: \"base.vec3[]\",\n },\n {\n id: \"e3\",\n source: { nodeId: \"n3\", handle: \"X\" },\n target: { nodeId: \"n4\", handle: \"X\" },\n },\n {\n id: \"e4\",\n source: { nodeId: \"n3\", handle: \"Y\" },\n target: { nodeId: \"n4\", handle: \"Y\" },\n },\n {\n id: \"e5\",\n source: { nodeId: \"n3\", handle: \"Z\" },\n target: { nodeId: \"n4\", handle: \"Z\" },\n },\n ],\n };\n return def;\n}\n\nexport function createAsyncGraphRegistry(id?: string) {\n const registry = setupBasicGraphRegistry(id);\n registerDelayNode(registry);\n return registry;\n}\n\nexport async function main() {\n const runtime = createRuntime(\n createAsyncGraphRegistry(),\n createAsyncGraphDef()\n );\n const engine = new LocalEngine(runtime, \"auto\");\n installLogging(engine);\n engine.launch();\n\n // Set base ms\n engine.setInputs(\"n1\", { Operation: BaseMathOperation.Add, A: [1], B: [2] });\n engine.setInputs(\"n2\", { DelayMs: 250 });\n // Provide XYZ and route through async conversion edge\n engine.setInputs(\"n3\", {\n XYZ: [\n [1, 2, 3],\n [4, 5, 6],\n [7, 8, 9],\n ],\n });\n\n // Rapid inputs to n1.B should cancel prior runs (switch)\n // Note: n1.A is edge-driven from n4.XYZ, so we change n1.B instead\n engine.setInputs(\"n1\", { B: [3] });\n engine.setInputs(\"n1\", { B: [4] });\n engine.setInputs(\"n1\", { B: [5] });\n\n await new Promise((r) => setTimeout(r, 1000));\n engine.setInputs(\"n1\", { B: [10] });\n engine.setInputs(\"n1\", { B: [11] });\n engine.setInputs(\"n1\", { B: [12] });\n\n await new Promise((r) => setTimeout(r, 1500));\n await engine.whenIdle();\n engine.dispose();\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport {\n registerProgressNodes,\n setupBasicGraphRegistry,\n createRuntime,\n} from \"../misc/base\";\nimport { LocalEngine } from \"../runtime/LocalEngine\";\nimport { installLogging } from \"./shared\";\n\nexport function createProgressGraphDef() {\n const def: GraphDefinition = {\n nodes: [\n { nodeId: \"steps\", typeId: \"base.input.number\" },\n { nodeId: \"delay\", typeId: \"base.input.number\" },\n { nodeId: \"work\", typeId: \"async.progress\" },\n ],\n edges: [\n {\n id: \"e1\",\n source: { nodeId: \"steps\", handle: \"Result\" },\n target: { nodeId: \"work\", handle: \"Steps\" },\n },\n {\n id: \"e2\",\n source: { nodeId: \"delay\", handle: \"Result\" },\n target: { nodeId: \"work\", handle: \"DelayMs\" },\n },\n // not wiring ShouldError to show manual input driven error later\n ],\n };\n return def;\n}\n\nexport function createProgressGraphRegistry(id?: string) {\n const registry = setupBasicGraphRegistry(id);\n registerProgressNodes(registry);\n return registry;\n}\n\nexport async function main() {\n const runtime = createRuntime(\n createProgressGraphRegistry(),\n createProgressGraphDef()\n );\n const engine = new LocalEngine(runtime, \"auto\");\n installLogging(engine);\n\n engine.launch();\n\n // Seed initial values\n engine.setInputs(\"steps\", { Value: 12 });\n engine.setInputs(\"delay\", { Value: 80 });\n // Manually set ShouldError on the worker (unwired input)\n engine.setInputs(\"work\", { ShouldError: false });\n\n // After 2s, trigger an error run\n await new Promise((r) => setTimeout(r, 2000));\n console.log(\"-- triggering error run --\");\n engine.setInputs(\"work\", { ShouldError: true });\n\n // After 5s, stop and exit\n await new Promise((r) => setTimeout(r, 5000));\n await engine.whenIdle();\n engine.dispose();\n}\n","import type { GraphDefinition } from \"@bian-womp/spark-protocol\";\nimport { setupBasicGraphRegistry } from \"../misc/base\";\nimport { GraphBuilder } from \"../builder/GraphBuilder\";\n\nexport function createValidationGraphDef(): GraphDefinition {\n // Intentionally build a graph with validation issues:\n // - Unknown node type\n // - Missing target input handle\n // - Multi inbound to same input (warning)\n const def: GraphDefinition = {\n nodes: [\n { nodeId: \"nA\", typeId: \"base.input.number\" },\n { nodeId: \"nB\", typeId: \"base.input.number\" },\n { nodeId: \"nC\", typeId: \"base.math\" },\n { nodeId: \"s1\", typeId: \"base.object.toString\" },\n { nodeId: \"cmp\", typeId: \"base.compare\" },\n // Validation issue: unknown node type\n { nodeId: \"bad\", typeId: \"unknownType\" },\n ],\n edges: [\n // Valid: nA.Result -> nC.A (number)\n {\n id: \"e1\",\n source: { nodeId: \"nA\", handle: \"Result\" },\n target: { nodeId: \"nC\", handle: \"A\" },\n },\n // Invalid input name (INPUT_MISSING)\n {\n id: \"e2\",\n source: { nodeId: \"nB\", handle: \"Result\" },\n target: { nodeId: \"nC\", handle: \"NonExistent\" },\n },\n // Multi inbound to same input (warning): another edge to A\n {\n id: \"e3\",\n source: { nodeId: \"nB\", handle: \"Result\" },\n target: { nodeId: \"nC\", handle: \"A\" },\n },\n {\n id: \"e4\",\n source: { nodeId: \"s1\", handle: \"Text\" },\n target: { nodeId: \"cmp\", handle: \"A\" },\n },\n ],\n };\n return def;\n}\n\nexport function createValidationGraphRegistry(id?: string) {\n const registry = setupBasicGraphRegistry(id);\n return registry;\n}\n\nexport async function main() {\n const registry = createValidationGraphRegistry();\n const def = createValidationGraphDef();\n const builder = new GraphBuilder(registry);\n\n // Validate the graph and display all issues\n const report = builder.validate(def);\n\n console.log(`Validation ${report.ok ? \"passed\" : \"failed\"}`);\n console.log(`Found ${report.issues.length} unique issue(s):\\n`);\n\n const errors = report.issues.filter((i) => i.level === \"error\");\n const warnings = report.issues.filter((i) => i.level === \"warning\");\n\n if (errors.length > 0) {\n console.log(`Errors (${errors.length}):`);\n for (const issue of errors) {\n const location = [\n issue.data?.nodeId && `node:${issue.data.nodeId}`,\n issue.data?.edgeId && `edge:${issue.data.edgeId}`,\n issue.data?.typeId && `type:${issue.data.typeId}`,\n issue.data?.input && `input:${issue.data.input}`,\n ]\n .filter(Boolean)\n .join(\", \");\n const locationStr = location ? ` (${location})` : \"\";\n // Use JSON.stringify to prevent line wrapping issues\n const message = `${issue.code}: ${issue.message}${locationStr}`;\n console.log(` ${message}`);\n }\n console.log();\n }\n\n if (warnings.length > 0) {\n console.log(`Warnings (${warnings.length}):`);\n for (const issue of warnings) {\n const location = [\n issue.data?.nodeId && `node:${issue.data.nodeId}`,\n issue.data?.edgeId && `edge:${issue.data.edgeId}`,\n issue.data?.typeId && `type:${issue.data.typeId}`,\n issue.data?.input && `input:${issue.data.input}`,\n ]\n .filter(Boolean)\n .join(\", \");\n const locationStr = location ? ` (${location})` : \"\";\n const message = `${issue.code}: ${issue.message}${locationStr}`;\n console.log(` ${message}`);\n }\n console.log();\n }\n\n if (report.ok) {\n console.log(\"Graph is valid! Building runtime...\");\n const runtime = builder.build(def);\n console.log(\"Runtime built successfully.\");\n runtime.dispose();\n } else {\n console.log(\"Cannot build runtime due to validation errors.\");\n }\n}\n","export type PathSegment = string | number | RegExp;\nexport type JsonPath = string | PathSegment[];\n\nexport function parseJsonPath(path: JsonPath): PathSegment[] {\n if (typeof path === \"string\") {\n return path.split(\".\").flatMap((segment) => {\n const arrayMatch = segment.match(/^(.+)\\[(\\d+)\\]$/);\n if (arrayMatch) {\n const index = parseInt(arrayMatch[2], 10);\n return arrayMatch[1] ? [arrayMatch[1], index] : [index];\n }\n return [segment];\n });\n }\n return path;\n}\n\nexport function getValueAtPath(\n obj: unknown,\n pathSegments: PathSegment[]\n): { value: unknown; parent: unknown; key: string | number } | null {\n if (pathSegments.length === 0) {\n return { value: obj, parent: null, key: \"\" };\n }\n\n let current: unknown = obj;\n let parent: unknown = null;\n let parentKey: string | number = \"\";\n\n for (let i = 0; i < pathSegments.length - 1; i++) {\n const segment = pathSegments[i];\n if (\n current === null ||\n current === undefined ||\n typeof current !== \"object\"\n ) {\n return null;\n }\n\n if (typeof segment === \"string\") {\n if (Array.isArray(current)) {\n const index = parseInt(segment, 10);\n if (isNaN(index)) return null;\n parent = current;\n parentKey = index;\n current = current[index];\n } else {\n parent = current;\n parentKey = segment;\n current = (current as Record<string, unknown>)[segment];\n }\n } else if (typeof segment === \"number\") {\n if (Array.isArray(current)) {\n if (segment >= 0 && segment < current.length) {\n parent = current;\n parentKey = segment;\n current = current[segment];\n } else {\n return null;\n }\n } else {\n return null;\n }\n } else if (segment instanceof RegExp) {\n if (Array.isArray(current)) {\n return null;\n }\n const obj = current as Record<string, unknown>;\n const matchingKey = Object.keys(obj).find((key) => segment.test(key));\n if (!matchingKey) return null;\n parent = current;\n parentKey = matchingKey;\n current = obj[matchingKey];\n } else {\n return null;\n }\n }\n\n const lastSegment = pathSegments[pathSegments.length - 1];\n if (typeof lastSegment === \"string\") {\n if (Array.isArray(current)) {\n const index = parseInt(lastSegment, 10);\n if (isNaN(index)) return null;\n return { value: current[index], parent: current, key: index };\n } else if (\n current !== null &&\n current !== undefined &&\n typeof current === \"object\"\n ) {\n return {\n value: (current as Record<string, unknown>)[lastSegment],\n parent: current,\n key: lastSegment,\n };\n }\n } else if (typeof lastSegment === \"number\") {\n if (Array.isArray(current)) {\n if (lastSegment >= 0 && lastSegment < current.length) {\n return {\n value: current[lastSegment],\n parent: current,\n key: lastSegment,\n };\n }\n }\n return null;\n } else if (lastSegment instanceof RegExp) {\n if (Array.isArray(current)) {\n return null;\n }\n const obj = current as Record<string, unknown>;\n const matchingKey = Object.keys(obj).find((key) => lastSegment.test(key));\n if (!matchingKey) return null;\n return { value: obj[matchingKey], parent: current, key: matchingKey };\n }\n\n return null;\n}\n\nexport function setValueAtPath(\n obj: unknown,\n pathSegments: PathSegment[],\n newValue: unknown\n): boolean {\n const result = getValueAtPath(obj, pathSegments);\n if (!result || result.parent === null) return false;\n\n if (Array.isArray(result.parent)) {\n (result.parent as unknown[])[result.key as number] = newValue;\n } else {\n (result.parent as Record<string, unknown>)[result.key] = newValue;\n }\n return true;\n}\n\nexport function findMatchingPaths(\n obj: unknown,\n pathSegments: PathSegment[],\n currentPath: PathSegment[] = []\n): Array<{ path: PathSegment[]; value: unknown }> {\n if (pathSegments.length === 0) {\n return [{ path: currentPath, value: obj }];\n }\n\n const [currentSegment, ...remainingSegments] = pathSegments;\n const results: Array<{ path: PathSegment[]; value: unknown }> = [];\n\n if (currentSegment === undefined) {\n return results;\n }\n\n if (typeof currentSegment === \"string\") {\n if (Array.isArray(obj)) {\n const index = parseInt(currentSegment, 10);\n if (!isNaN(index) && index >= 0 && index < obj.length) {\n results.push(\n ...findMatchingPaths(obj[index], remainingSegments, [\n ...currentPath,\n index,\n ])\n );\n }\n } else if (obj !== null && obj !== undefined && typeof obj === \"object\") {\n const objRecord = obj as Record<string, unknown>;\n if (currentSegment in objRecord) {\n results.push(\n ...findMatchingPaths(objRecord[currentSegment], remainingSegments, [\n ...currentPath,\n currentSegment,\n ])\n );\n }\n }\n } else if (typeof currentSegment === \"number\") {\n if (Array.isArray(obj)) {\n if (currentSegment >= 0 && currentSegment < obj.length) {\n results.push(\n ...findMatchingPaths(obj[currentSegment], remainingSegments, [\n ...currentPath,\n currentSegment,\n ])\n );\n }\n }\n } else if (currentSegment instanceof RegExp) {\n if (Array.isArray(obj)) {\n for (let i = 0; i < obj.length; i++) {\n results.push(\n ...findMatchingPaths(obj[i], remainingSegments, [...currentPath, i])\n );\n }\n } else if (obj !== null && obj !== undefined && typeof obj === \"object\") {\n const objRecord = obj as Record<string, unknown>;\n for (const key of Object.keys(objRecord)) {\n if (currentSegment.test(key)) {\n results.push(\n ...findMatchingPaths(objRecord[key], remainingSegments, [\n ...currentPath,\n key,\n ])\n );\n }\n }\n }\n }\n\n return results;\n}\n","import type {\n GraphDefinition,\n GraphNodeDefinition,\n GraphEdgeDefinition,\n RuntimeSnapshotFull,\n RuntimeMetadata,\n} from \"@bian-womp/spark-protocol\";\nimport { generateId } from \"../base\";\nimport {\n parseJsonPath,\n setValueAtPath,\n findMatchingPaths,\n type JsonPath,\n} from \"./json\";\nimport {\n isTypedOutput,\n getTypedOutputTypeId,\n getTypedOutputValue,\n typed,\n} from \"../../core/types\";\n\n/**\n * Configuration object for value conversion.\n */\nexport interface ValueConverterConfig {\n nodeId: string;\n handleId: string;\n value: unknown;\n type: \"input\" | \"output\" | \"inputDefault\" | \"initialInput\";\n nodeTypeId?: string;\n handleDataType?: string;\n runtimeTypeId?: string;\n}\n\n/**\n * Merge two graph definitions, remapping IDs to avoid conflicts.\n * Returns the merged graph and a mapping from source node IDs to new IDs.\n */\nexport type ValueConverter = (config: ValueConverterConfig) => unknown;\n\nexport function mergeGraphDefinitions(\n target: GraphDefinition,\n source: GraphDefinition,\n converter?: ValueConverter\n): { merged: GraphDefinition; nodeIdMap: Record<string, string> } {\n const existingNodeIds = new Set(target.nodes.map((n) => n.nodeId));\n const existingEdgeIds = new Set(target.edges.map((e) => e.id));\n\n const nodeIdMap: Record<string, string> = {};\n\n const importedNodes: GraphNodeDefinition[] = source.nodes.map((n) => {\n let newId = n.nodeId;\n if (existingNodeIds.has(newId)) {\n newId = generateId(\"n\", existingNodeIds);\n } else {\n existingNodeIds.add(newId);\n }\n nodeIdMap[n.nodeId] = newId;\n const transformedNode: GraphNodeDefinition = {\n ...n,\n nodeId: newId,\n };\n\n if (converter) {\n const nodeTypeId = transformedNode.typeId;\n\n if (transformedNode.resolvedHandles?.inputDefaults) {\n const transformedInputDefaults: Record<string, unknown> = {};\n for (const [handleId, value] of Object.entries(\n transformedNode.resolvedHandles.inputDefaults\n )) {\n const handleDataType = transformedNode.resolvedHandles?.inputs?.[\n handleId\n ]\n ? typeof transformedNode.resolvedHandles.inputs[handleId] ===\n \"string\"\n ? transformedNode.resolvedHandles.inputs[handleId]\n : (\n transformedNode.resolvedHandles.inputs[handleId] as {\n typeId?: string;\n }\n )?.typeId\n : undefined;\n const convertedValue = converter({\n nodeId: newId,\n handleId,\n value,\n type: \"inputDefault\",\n nodeTypeId,\n handleDataType,\n });\n // If converter returns null, skip this input default (delete it)\n if (convertedValue !== null) {\n transformedInputDefaults[handleId] = convertedValue;\n }\n }\n // Only set inputDefaults if there are any remaining after conversion\n if (Object.keys(transformedInputDefaults).length > 0) {\n transformedNode.resolvedHandles = {\n ...transformedNode.resolvedHandles,\n inputDefaults: transformedInputDefaults,\n };\n } else if (transformedNode.resolvedHandles) {\n // Remove inputDefaults if all were deleted\n const { inputDefaults, ...restHandles } =\n transformedNode.resolvedHandles;\n transformedNode.resolvedHandles = restHandles;\n }\n }\n }\n\n return transformedNode;\n });\n\n const importedEdges: GraphEdgeDefinition[] = source.edges.map((e) => {\n let newEdgeId = e.id;\n if (existingEdgeIds.has(newEdgeId)) {\n newEdgeId = generateId(\"e\", existingEdgeIds);\n } else {\n existingEdgeIds.add(newEdgeId);\n }\n\n const sourceNodeId = nodeIdMap[e.source.nodeId] ?? e.source.nodeId;\n const targetNodeId = nodeIdMap[e.target.nodeId] ?? e.target.nodeId;\n\n return {\n ...e,\n id: newEdgeId,\n source: {\n ...e.source,\n nodeId: sourceNodeId,\n },\n target: {\n ...e.target,\n nodeId: targetNodeId,\n },\n };\n });\n\n return {\n merged: {\n nodes: [...target.nodes, ...importedNodes],\n edges: [...target.edges, ...importedEdges],\n },\n nodeIdMap,\n };\n}\n\n/**\n * Compute the center point of a graph based on node positions.\n */\nexport function computeGraphCenter(\n positions: Record<string, { x: number; y: number }>,\n nodeIds: string[]\n): { x: number; y: number } {\n const validPositions = nodeIds\n .map((id) => positions[id])\n .filter((pos): pos is { x: number; y: number } => pos !== undefined);\n\n if (validPositions.length === 0) {\n return { x: 0, y: 0 };\n }\n\n const minX = Math.min(...validPositions.map((p) => p.x));\n const maxX = Math.max(...validPositions.map((p) => p.x));\n const minY = Math.min(...validPositions.map((p) => p.y));\n const maxY = Math.max(...validPositions.map((p) => p.y));\n\n return {\n x: (minX + maxX) / 2,\n y: (minY + maxY) / 2,\n };\n}\n\n/**\n * Offset positions of imported nodes based on an anchor point.\n * Preserves relative layout of imported nodes while positioning them at the anchor.\n */\nexport function offsetImportedPositions(\n targetPositions: Record<string, { x: number; y: number }>,\n sourcePositions: Record<string, { x: number; y: number }>,\n sourceDef: GraphDefinition,\n nodeIdMap: Record<string, string>,\n anchorPos: { x: number; y: number }\n): Record<string, { x: number; y: number }> {\n const sourceNodeIds = sourceDef.nodes.map((n) => n.nodeId);\n const sourceCenter = computeGraphCenter(sourcePositions, sourceNodeIds);\n\n const dx = anchorPos.x - sourceCenter.x;\n const dy = anchorPos.y - sourceCenter.y;\n\n const newPositions: Record<string, { x: number; y: number }> = {\n ...targetPositions,\n };\n\n for (const node of sourceDef.nodes) {\n const oldId = node.nodeId;\n const newId = nodeIdMap[oldId];\n const srcPos = sourcePositions[oldId] ?? { x: 0, y: 0 };\n newPositions[newId] = {\n x: srcPos.x + dx,\n y: srcPos.y + dy,\n };\n }\n\n return newPositions;\n}\n\n/**\n * Merge inputs and outputs from source into target, remapping node IDs.\n * Source values override target when merging.\n */\nexport function mergeInputsOutputs(\n targetInputs: Record<string, Record<string, unknown>>,\n targetOutputs: Record<string, Record<string, unknown>>,\n sourceInputs: Record<string, Record<string, unknown>>,\n sourceOutputs: Record<string, Record<string, unknown>>,\n nodeIdMap: Record<string, string>,\n converter?: ValueConverter,\n nodeTypeMap?: Map<string, string>,\n handleTypeMap?: Map<string, Map<string, string>>\n): {\n mergedInputs: Record<string, Record<string, unknown>>;\n mergedOutputs: Record<string, Record<string, unknown>>;\n} {\n // Deep copy target inputs/outputs to avoid mutating the original\n const mergedInputs: Record<string, Record<string, unknown>> = {};\n const mergedOutputs: Record<string, Record<string, unknown>> = {};\n\n // Copy target inputs/outputs\n for (const [nodeId, inputs] of Object.entries(targetInputs)) {\n mergedInputs[nodeId] = { ...inputs };\n }\n for (const [nodeId, outputs] of Object.entries(targetOutputs)) {\n mergedOutputs[nodeId] = { ...outputs };\n }\n\n for (const [oldId, inputs] of Object.entries(sourceInputs)) {\n const newId = nodeIdMap[oldId];\n if (newId) {\n const transformedInputs: Record<string, unknown> = {};\n const nodeTypeId = nodeTypeMap?.get(oldId);\n\n // Ensure mergedInputs[newId] exists\n if (!mergedInputs[newId]) {\n mergedInputs[newId] = {};\n }\n\n for (const [handleId, value] of Object.entries(inputs)) {\n const handleDataType = handleTypeMap?.get(oldId)?.get(handleId);\n const convertedValue = converter\n ? converter({\n nodeId: newId,\n handleId,\n value,\n type: \"input\",\n nodeTypeId,\n handleDataType,\n })\n : value;\n // If converter returns null, delete this input\n if (convertedValue === null) {\n delete mergedInputs[newId][handleId];\n } else {\n // Otherwise, set the converted value\n transformedInputs[handleId] = convertedValue;\n }\n }\n\n // Merge transformed inputs\n if (Object.keys(transformedInputs).length > 0) {\n mergedInputs[newId] = { ...mergedInputs[newId], ...transformedInputs };\n }\n\n // Clean up empty node input objects\n if (Object.keys(mergedInputs[newId]).length === 0) {\n delete mergedInputs[newId];\n }\n }\n }\n\n for (const [oldId, outputs] of Object.entries(sourceOutputs)) {\n const newId = nodeIdMap[oldId];\n if (newId) {\n const transformedOutputs: Record<string, unknown> = {};\n const nodeTypeId = nodeTypeMap?.get(oldId);\n\n // Ensure mergedOutputs[newId] exists\n if (!mergedOutputs[newId]) {\n mergedOutputs[newId] = {};\n }\n\n for (const [handleId, value] of Object.entries(outputs)) {\n const handleDataType = handleTypeMap?.get(oldId)?.get(handleId);\n const runtimeTypeId = isTypedOutput(value)\n ? getTypedOutputTypeId(value)\n : undefined;\n const convertedValue = converter\n ? converter({\n nodeId: newId,\n handleId,\n value,\n type: \"output\",\n nodeTypeId,\n handleDataType,\n runtimeTypeId,\n })\n : value;\n // If converter returns null, delete this output\n if (convertedValue === null) {\n delete mergedOutputs[newId][handleId];\n } else {\n // Otherwise, set the converted value\n transformedOutputs[handleId] = convertedValue;\n }\n }\n\n // Merge transformed outputs\n if (Object.keys(transformedOutputs).length > 0) {\n mergedOutputs[newId] = {\n ...mergedOutputs[newId],\n ...transformedOutputs,\n };\n }\n\n // Clean up empty node output objects\n if (Object.keys(mergedOutputs[newId]).length === 0) {\n delete mergedOutputs[newId];\n }\n }\n }\n\n return { mergedInputs, mergedOutputs };\n}\n\n/**\n * Merge snapshot data (inputs, outputs) from source into target.\n * Graph definition merging should be done separately using mergeGraphDefinitions.\n * UI positions are handled separately by mergeUIState.\n */\nexport function mergeSnapshotData(\n targetSnapshot: RuntimeSnapshotFull,\n sourceSnapshot: RuntimeSnapshotFull,\n sourceDef: GraphDefinition,\n nodeIdMap: Record<string, string>,\n converter?: ValueConverter\n): {\n mergedInputs: Record<string, Record<string, unknown>>;\n mergedOutputs: Record<string, Record<string, unknown>>;\n} {\n const nodeTypeMap = new Map<string, string>();\n const handleTypeMap = new Map<string, Map<string, string>>();\n\n for (const node of sourceDef.nodes) {\n nodeTypeMap.set(node.nodeId, node.typeId);\n const nodeHandleTypes = new Map<string, string>();\n\n if (node.resolvedHandles?.inputs) {\n for (const [handleId, handleDesc] of Object.entries(\n node.resolvedHandles.inputs\n )) {\n const typeId =\n typeof handleDesc === \"string\"\n ? handleDesc\n : (handleDesc as { typeId?: string })?.typeId;\n if (typeId) nodeHandleTypes.set(handleId, typeId);\n }\n }\n\n if (node.resolvedHandles?.outputs) {\n for (const [handleId, handleDesc] of Object.entries(\n node.resolvedHandles.outputs\n )) {\n const typeId =\n typeof handleDesc === \"string\"\n ? handleDesc\n : Array.isArray(handleDesc)\n ? handleDesc[0]\n : undefined;\n if (typeId) nodeHandleTypes.set(handleId, typeId);\n }\n }\n\n if (nodeHandleTypes.size > 0) {\n handleTypeMap.set(node.nodeId, nodeHandleTypes);\n }\n }\n\n const { mergedInputs, mergedOutputs } = mergeInputsOutputs(\n targetSnapshot.inputs ?? {},\n targetSnapshot.outputs ?? {},\n sourceSnapshot.inputs ?? {},\n sourceSnapshot.outputs ?? {},\n nodeIdMap,\n converter,\n nodeTypeMap,\n handleTypeMap\n );\n\n return {\n mergedInputs,\n mergedOutputs,\n };\n}\n\n/**\n * Merge runtime metadata from source into target, remapping node IDs using nodeIdMap.\n * Preserves target metadata and adds/updates source metadata with remapped IDs.\n */\nexport function mergeRuntimeState(\n targetRuntime: RuntimeMetadata | null | undefined,\n sourceRuntime: RuntimeMetadata | null | undefined,\n nodeIdMap: Record<string, string>\n): RuntimeMetadata {\n const result: RuntimeMetadata = {\n nodes: { ...(targetRuntime?.nodes || {}) },\n };\n\n if (!sourceRuntime?.nodes) return result;\n\n // Remap source node IDs to new merged node IDs\n for (const [sourceNodeId, newNodeId] of Object.entries(nodeIdMap)) {\n const sourceNodeMeta = sourceRuntime.nodes[sourceNodeId];\n if (sourceNodeMeta) {\n result.nodes[newNodeId] = { ...sourceNodeMeta };\n }\n }\n\n return result;\n}\n\nexport interface ValueMappingConfig {\n handleId?: string | RegExp;\n nodeId?: string | RegExp;\n nodeTypeId?: string | RegExp;\n handleDataType?: string | RegExp;\n runtimeTypeId?: string | RegExp;\n transformTypedValue?: boolean;\n path?: JsonPath;\n valueMap:\n | Map<string | number | boolean, unknown>\n | Record<string | number, unknown>;\n}\n\nexport interface ConverterConfig {\n mappings: ValueMappingConfig[];\n}\n\nfunction matchesPattern(value: string, pattern?: string | RegExp): boolean {\n if (!pattern) return true;\n if (typeof pattern === \"string\") {\n return value === pattern;\n }\n return pattern.test(value);\n}\n\n/**\n * Build a converter function from a configuration that maps values based on handle/node matching.\n * The converter will replace values when:\n * - handleId matches (if specified)\n * - nodeId matches (if specified)\n * - nodeTypeId matches (if specified)\n * - handleDataType matches (if specified)\n * - runtimeTypeId matches (if specified, for typed outputs)\n * - value exists in valueMap\n */\nexport function buildValueConverter(config: ConverterConfig): ValueConverter {\n return (converterConfig: ValueConverterConfig) => {\n const {\n nodeId,\n handleId,\n value,\n type,\n nodeTypeId,\n handleDataType,\n runtimeTypeId,\n } = converterConfig;\n const isTyped = isTypedOutput(value);\n\n for (const mapping of config.mappings) {\n if (!matchesPattern(handleId, mapping.handleId)) continue;\n if (!matchesPattern(nodeId, mapping.nodeId)) continue;\n\n if (mapping.nodeTypeId && nodeTypeId) {\n if (!matchesPattern(nodeTypeId, mapping.nodeTypeId)) continue;\n }\n\n if (mapping.handleDataType && handleDataType) {\n if (!matchesPattern(handleDataType, mapping.handleDataType)) continue;\n }\n\n if (mapping.runtimeTypeId && runtimeTypeId) {\n if (!matchesPattern(runtimeTypeId, mapping.runtimeTypeId)) continue;\n }\n\n if (mapping.transformTypedValue && isTyped) {\n const innerValue = getTypedOutputValue(value);\n const typedTypeId = getTypedOutputTypeId(value);\n if (!typedTypeId) continue;\n\n if (mapping.path !== undefined) {\n const pathSegments = parseJsonPath(mapping.path);\n const matches = findMatchingPaths(innerValue, pathSegments);\n\n if (matches.length > 0) {\n const transformedInner = JSON.parse(JSON.stringify(innerValue));\n let changed = false;\n\n for (const match of matches) {\n const matchValue = match.value;\n if (matchValue !== null && matchValue !== undefined) {\n let newValue: unknown = matchValue;\n\n if (mapping.valueMap instanceof Map) {\n if (\n mapping.valueMap.has(\n matchValue as string | number | boolean\n )\n ) {\n newValue = mapping.valueMap.get(\n matchValue as string | number | boolean\n );\n changed = true;\n }\n } else {\n if (\n typeof matchValue === \"string\" ||\n typeof matchValue === \"number\"\n ) {\n if (matchValue in mapping.valueMap) {\n newValue = mapping.valueMap[matchValue];\n changed = true;\n }\n }\n }\n\n if (changed && newValue !== matchValue) {\n // If mapped to null, set null at the path (which may delete nested property)\n setValueAtPath(transformedInner, match.path, newValue);\n }\n }\n }\n\n // If the entire typed output should be deleted (all paths mapped to null),\n // we'd need to check if the whole inner value is null/empty, but for now\n // we'll return the transformed value or original\n return changed ? typed(typedTypeId, transformedInner) : value;\n }\n } else {\n if (innerValue !== null && innerValue !== undefined) {\n let newValue: unknown = innerValue;\n\n if (mapping.valueMap instanceof Map) {\n if (\n mapping.valueMap.has(innerValue as string | number | boolean)\n ) {\n newValue = mapping.valueMap.get(\n innerValue as string | number | boolean\n );\n // If mapped to null, return null to delete the output\n if (newValue === null) {\n return null;\n }\n return typed(typedTypeId, newValue);\n }\n } else {\n if (\n typeof innerValue === \"string\" ||\n typeof innerValue === \"number\"\n ) {\n if (innerValue in mapping.valueMap) {\n newValue = mapping.valueMap[innerValue];\n // If mapped to null, return null to delete the output\n if (newValue === null) {\n return null;\n }\n return typed(typedTypeId, newValue);\n }\n }\n }\n }\n }\n continue;\n }\n\n if (mapping.path !== undefined) {\n let pathSegments = parseJsonPath(mapping.path);\n\n if (isTyped) {\n const typedTypeId = getTypedOutputTypeId(value);\n if (typedTypeId) {\n const firstSegment = pathSegments[0];\n const firstSegmentStr =\n typeof firstSegment === \"string\"\n ? firstSegment\n : firstSegment instanceof RegExp\n ? null\n : String(firstSegment);\n if (\n firstSegmentStr !== \"__spark_value\" &&\n firstSegmentStr !== \"__spark_type\"\n ) {\n pathSegments = [\"__spark_value\", ...pathSegments];\n }\n }\n }\n\n const matches = findMatchingPaths(value, pathSegments);\n\n if (matches.length > 0) {\n const transformedValue = JSON.parse(JSON.stringify(value));\n let changed = false;\n\n for (const match of matches) {\n const matchValue = match.value;\n if (matchValue !== null && matchValue !== undefined) {\n let newValue: unknown = matchValue;\n\n if (mapping.valueMap instanceof Map) {\n if (\n mapping.valueMap.has(matchValue as string | number | boolean)\n ) {\n newValue = mapping.valueMap.get(\n matchValue as string | number | boolean\n );\n changed = true;\n }\n } else {\n if (\n typeof matchValue === \"string\" ||\n typeof matchValue === \"number\"\n ) {\n if (matchValue in mapping.valueMap) {\n newValue = mapping.valueMap[matchValue];\n changed = true;\n }\n }\n }\n\n if (changed && newValue !== matchValue) {\n setValueAtPath(transformedValue, match.path, newValue);\n }\n }\n }\n\n return changed ? transformedValue : value;\n }\n } else {\n if (value !== null && value !== undefined) {\n if (mapping.valueMap instanceof Map) {\n if (mapping.valueMap.has(value as string | number | boolean)) {\n return mapping.valueMap.get(value as string | number | boolean);\n }\n } else {\n if (typeof value === \"string\" || typeof value === \"number\") {\n if (value in mapping.valueMap) {\n return mapping.valueMap[value];\n }\n }\n }\n }\n }\n }\n\n return value;\n };\n}\n"],"names":[],"mappings":";;AAuGM,SAAU,KAAK,CACnB,MAAkB,EAClB,KAAQ,EAAA;IAER,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE;AACvD;AAEM,SAAU,aAAa,CAAC,CAAU,EAAA;IACtC,QACE,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,QAAQ;AACrB,QAAA,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC;AAE3D;AAEM,SAAU,oBAAoB,CAAC,CAAU,EAAA;IAC7C,IAAI,aAAa,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC;AACnD,IAAA,OAAO,SAAS;AAClB;AAEM,SAAU,mBAAmB,CAAC,CAAU,EAAA;IAC5C,IAAI,aAAa,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,aAAa;AAC5C,IAAA,OAAO,CAAC;AACV;AAEM,SAAU,cAAc,CAC5B,MAAyD,EACzD,MAAgB,EAAA;AAEhB,IAAA,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS;AAC7C,IAAA,IAAI,CAAC,CAAC;AAAE,QAAA,OAAO,SAAS;AACxB,IAAA,OAAO,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM;AAC7C;AAEM,SAAU,cAAc,CAC5B,MAAyD,EACzD,MAAgB,EAAA;AAEhB,IAAA,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS;AAC7C,IAAA,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC;AACpD;;MC1Ga,gBAAgB,CAAA;AAA7B,IAAA,WAAA,GAAA;AACU,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,GAAG,EAA4C;IAW1E;AAVE,IAAA,QAAQ,CAAc,GAAwC,EAAA;QAC5D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC;AAChC,QAAA,OAAO,IAAI;IACb;AACA,IAAA,GAAG,CAAC,EAAU,EAAA;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IAChC;AACA,IAAA,GAAG,CAAC,EAAU,EAAA;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IAChC;AACD;MAEY,QAAQ,CAAA;AAsBnB,IAAA,WAAA,CAAY,EAAW,EAAA;AAnBd,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAmC;AAClD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAA8B;AAC7C,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAOrB;AACM,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,gBAAgB,EAAE;AACnC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAM3B;AAMK,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAGxB;AACK,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,GAAG,EAM7B;AAEK,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAO5B;QAtBD,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAA,CAAA,EAAI,QAAQ,CAAC,SAAS,EAAE,CAAA,CAAE;IAC5C;IAuBA,YAAY,CACV,IAAwB,EACxB,IAIC,EAAA;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;;AAE7B,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE;AAC/B,gBAAA,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC;AACnB,gBAAA,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC;AACtB,aAAA,CAAC;QACJ;AACA,QAAA,IAAI,IAAI,EAAE,SAAS,EAAE;YACnB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,EAAA,CAAI;YAC9C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC5B,gBAAA,MAAM,SAAS,GAA8B;AAC3C,oBAAA,EAAE,EAAE,OAAO;oBACX,QAAQ,EAAE,CAAC,CAAU,KACnB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAChB,wBAAA,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAI;AACZ,4BAAA,IAAI;AACF,gCAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;4BACzB;AAAE,4BAAA,MAAM;AACN,gCAAA,OAAO,KAAK;4BACd;AACF,wBAAA,CAAC,CAAC;iBACL;gBACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC;YACpC;AAEA,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,KAC5C,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CACvC;AACD,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,KAAK,KAAI;AAChD,gBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,oBAAA,OAAO,KAAK;AACvC,gBAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;oBAC9B,KAAK,MAAM,CAAC,IAAI,KAAK;wBAAE,IAAI,CAAC,KAAK,SAAS;AAAE,4BAAA,OAAO,CAAC;AACpD,oBAAA,OAAO,SAAS;gBAClB;AACA,gBAAA,OAAO,KAAK,CAAC,CAAC,CAAC;AACjB,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,YAAY,CAcV,IAA2C,EAAA;QAC3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAA8C,CAAC;AACvE,QAAA,OAAO,IAAI;IACb;IAEA,kBAAkB,CAChB,MAAc,EACd,CAGC,EAAA;QAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;;;AAG/B,QAAA,MAAM,OAAO,GAAG,CAAA,EAAG,MAAM,IAAI;AAC7B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC7D,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE;AAC5B,gBAAA,SAAS,EAAE,CAAC,KAAc,KACxB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK;AACnE,gBAAA,WAAW,EAAE,CAAC,IAAa,KACzB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;AACnE,aAAA,CAAC;QACJ;AACA,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,gBAAgB,CACd,UAAkB,EAClB,QAAgB,EAChB,OAAoC,EACpC,IAAkC,EAAA;QAElC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,UAAU,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAE,EAAE;YAC/C,OAAO;AACP,YAAA,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa;AACrC,SAAA,CAAC;;AAEF,QAAA,MAAM,OAAO,GACX,UAAU,KAAK,aAAa,GAAG,UAAU,GAAG,CAAA,EAAG,UAAU,IAAI;AAC/D,QAAA,MAAM,KAAK,GAAG,QAAQ,KAAK,aAAa,GAAG,QAAQ,GAAG,CAAA,EAAG,QAAQ,IAAI;AACrE,QAAA,MAAM,MAAM,GAAG,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,KAAK,EAAE;AACrC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACpD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACnE,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE;AACzB,oBAAA,OAAO,EAAE,CAAC,KAAc,KAAI;AAC1B,wBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,4BAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;;AAE7D,wBAAA,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBACzB,CAAC;AACD,oBAAA,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa;AACrC,iBAAA,CAAC;YACJ;QACF;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,qBAAqB,CACnB,UAAkB,EAClB,QAAgB,EAChB,YAAuE,EACvE,IAAkC,EAAA;QAElC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,UAAU,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAE,EAAE;YACpD,YAAY;AACZ,YAAA,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa;AACrC,SAAA,CAAC;;AAEF,QAAA,MAAM,OAAO,GACX,UAAU,KAAK,aAAa,GAAG,UAAU,GAAG,CAAA,EAAG,UAAU,IAAI;AAC/D,QAAA,MAAM,KAAK,GAAG,QAAQ,KAAK,aAAa,GAAG,QAAQ,GAAG,CAAA,EAAG,QAAQ,IAAI;AACrE,QAAA,MAAM,MAAM,GAAG,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,KAAK,EAAE;AACrC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACpD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACnE,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE;AAC9B,oBAAA,YAAY,EAAE,OAAO,KAAc,EAAE,MAAmB,KAAI;AAC1D,wBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;4BACxB,MAAM,GAAG,GAAc,EAAE;AACzB,4BAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gCACrC,IAAI,MAAM,EAAE,OAAO;oCACjB,MAAM,MAAM,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC;;AAE7C,gCAAA,GAAG,CAAC,IAAI,CAAC,MAAM,YAAY,CAAE,KAAmB,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;4BAC/D;AACA,4BAAA,OAAO,GAAG;wBACZ;wBACA,OAAO,CAAC,MAAM,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBAC5C,CAAC;AACD,oBAAA,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa;AACrC,iBAAA,CAAC;YACJ;QACF;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,OAAO,IAAI;IACb;IAEA,SAAS,CACP,UAA8B,EAC9B,QAA4B,EAAA;AAE5B,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,KAAK;QAC1C,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC;IACrD;IAEA,WAAW,CACT,UAAkB,EAClB,QAAgB,EAAA;QAEhB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC3D,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,SAAS;AAC/B,QAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,QAAQ,CAAC,OAAO;AACrD,QAAA,OAAO,SAAS;IAClB;IAEA,gBAAgB,CACd,UAAkB,EAClB,QAAgB,EAAA;QAEhB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC3D,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,SAAS;AAC/B,QAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,QAAQ,CAAC,YAAY;AAC3D,QAAA,OAAO,SAAS;IAClB;;IAGA,aAAa,GAAA;QAMX,MAAM,GAAG,GAKJ,EAAE;AACP,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE;AACjD,YAAA,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAClC,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI;gBACJ,EAAE;AACF,gBAAA,KAAK,EAAE,KAAK;gBACZ,aAAa,EAAE,GAAG,CAAC,aAAa;AACjC,aAAA,CAAC;QACJ;AACA,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE;AACtD,YAAA,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AAClC,YAAA,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC;QACvE;AACA,QAAA,OAAO,GAAG;IACZ;IAEA,eAAe,CACb,UAAkB,EAClB,QAAgB,EAAA;AAEhB,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,UAAU,CAAA,EAAA,EAAK,QAAQ,EAAE;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC/C,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,MAAM;AAEzB,QAAA,IAAI,UAAU,KAAK,QAAQ,EAAE;AAC3B,YAAA,MAAM,GAAG,GAAyB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;YACrE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AACrC,YAAA,OAAO,GAAG;QACZ;;QAGA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC/C,IAAI,UAAU,EAAE;AACd,YAAA,MAAM,GAAG,GAAyB;AAChC,gBAAA,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,UAAU,CAAC,OAAO;aAC5B;YACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AACrC,YAAA,OAAO,GAAG;QACZ;QACA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;QACrD,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,GAAG,GAA0B;AACjC,gBAAA,IAAI,EAAE,OAAO;gBACb,YAAY,EAAE,WAAW,CAAC,YAAY;aACvC;YACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AACrC,YAAA,OAAO,GAAG;QACZ;;AAGA,QAAA,MAAM,YAAY,GAAG,CAAC,IAAY,KAAiB;YACjD,MAAM,GAAG,GAAgB,EAAE;AAC3B,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE;gBACjD,IAAI,GAAG,CAAC,aAAa;oBAAE;AACvB,gBAAA,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAClC,IAAI,GAAG,KAAK,IAAI;oBACd,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;YACxE;AACA,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE;gBACtD,IAAI,GAAG,CAAC,aAAa;oBAAE;AACvB,gBAAA,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAClC,IAAI,GAAG,KAAK,IAAI;oBACd,GAAG,CAAC,IAAI,CAAC;AACP,wBAAA,IAAI,EAAE,GAAG;AACT,wBAAA,EAAE,EAAE,GAAG;AACP,wBAAA,IAAI,EAAE,OAAO;wBACb,YAAY,EAAE,GAAG,CAAC,YAAY;AAC/B,qBAAA,CAAC;YACN;AACA,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC;AAQD,QAAA,MAAM,QAAQ,GAAG,CACf,CAA+C,EAC/C,CAAmC,KACjC;AACF,YAAA,IAAI,CAAC,CAAC;AAAE,gBAAA,OAAO,IAAI;AACnB,YAAA,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;AAAE,gBAAA,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AACjD,YAAA,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AAC1B,QAAA,CAAC;AAED,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAA4C;QAChE,MAAM,KAAK,GAAY,EAAE;AACzB,QAAA,MAAM,IAAI,GAAG,CAAC,CAAQ,KAAI;;YAExB,IAAI,CAAC,GAAG,CAAC;AACT,YAAA,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;AACvB,gBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBAClB,IACE,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK;qBAC1B,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAC9D;oBACA;gBACF;AACA,gBAAA,CAAC,EAAE;YACL;YACA,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACvB,QAAA,CAAC;QAED,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAClE,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAE5C,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAG;AAC1B,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;;AAEzB,gBAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;gBACzD,IAAI,CAAC,QAAQ,EAAE;AACb,oBAAA,MAAM,OAAO,GAAG,CAAC,KAAc,KAAI;wBACjC,IAAI,GAAG,GAAG,KAAK;AACf,wBAAA,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE;;AAE3B,4BAAA,GAAG,GAAI,IAAsB,CAAC,OAAO,CAAC,GAAG,CAAC;wBAC5C;AACA,wBAAA,OAAO,GAAG;AACZ,oBAAA,CAAC;oBACD,MAAM,GAAG,GAAyB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;oBAC3D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AACrC,oBAAA,OAAO,GAAG;gBACZ;qBAAO;oBACL,MAAM,YAAY,GAAG,OAAO,KAAc,EAAE,MAAmB,KAAI;wBACjE,IAAI,GAAG,GAAY,KAAK;AACxB,wBAAA,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE;AAC3B,4BAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,gCAAA,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;4BACzB;iCAAO;gCACL,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC;4BAC5C;wBACF;AACA,wBAAA,OAAO,GAAG;AACZ,oBAAA,CAAC;oBACD,MAAM,GAAG,GAA0B,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE;oBAClE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AACrC,oBAAA,OAAO,GAAG;gBACZ;YACF;;YAEA,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACzC,gBAAA,MAAM,QAAQ,GAAG;AACf,oBAAA,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;oBACzB,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;iBACxD;gBACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9B,gBAAA,IAAI,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;oBAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC;oBAC3B,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBACpE;YACF;QACF;AAEA,QAAA,OAAO,SAAS;IAClB;;AAGA,IAAA,YAAY,CAAC,IAYZ,EAAA;AACC,QAAA,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI;AAC3D,QAAA,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,aAAa;AAClD,QAAA,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,YAAY;AAEjD,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB;AAC9C,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB;QAC9C,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE;AACtC,YAAA,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;YAC9B,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC;QAC9C;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE;YACjB,OAAO;YACP,YAAY;YACZ,YAAY;AACb,SAAA,CAAC;;QAEF,IAAI,CAAC,YAAY,CACf;YACE,EAAE;YACF,WAAW;AACX,YAAA,QAAQ,EAAE,CAAC,CAAU,KACnB,OAAO,CAAC,KAAK,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACtD,UAAU;SACX,EACD,IAAI,CACL;AACD,QAAA,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE;AAC1B,YAAA,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC;YACnB,WAAW,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;AAC9B,SAAA,CAAC;;QAEF,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,KAAK,KAAI;AAC7C,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE;AACzB,iBAAA,IAAI;AACJ,iBAAA,WAAW,EAAE;YAChB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,KAAK;AACtB,YAAA,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3D,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AACvB,YAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,KAAK;AACvE,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,KAAK,KAAI;AAC7C,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,KAAK;AACtB,YAAA,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAC3B,kBAAE;AACF,kBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,KAAK,KAAI;AAC7C,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AAC9B,YAAA,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;AAC7C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACb;;AAjee,QAAA,CAAA,SAAS,GAAG,CAAH;;ACpD1B;;AAEG;AAEH;;AAEG;AACG,SAAU,SAAS,CAAc,KAAc,EAAA;IACnD,OAAO,CAAC,CAAC,KAAK,IAAI,OAAQ,KAAa,CAAC,IAAI,KAAK,UAAU;AAC7D;AAEA;;AAEG;AACI,eAAe,kBAAkB,CAAI,KAAqB,EAAA;AAC/D,IAAA,OAAO,SAAS,CAAI,KAAK,CAAC,GAAG,MAAM,KAAK,GAAG,KAAK;AAClD;AAEA;;AAEG;AACG,SAAU,WAAW,CAAC,CAAU,EAAE,CAAU,EAAA;IAChD,IAAI,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,IAAI;AACxB,IAAA,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC;AAAE,QAAA,OAAO,KAAK;IACvC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACnC,QAAA,IAAI;AACF,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAChD;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,KAAK;QACd;IACF;AACA,IAAA,OAAO,KAAK;AACd;;ACnBA;;AAEG;MACU,cAAc,CAAA;AAMzB,IAAA,WAAA,CAAY,QAAmB,EAAA;AALvB,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAA4B;QAC3C,IAAA,CAAA,KAAK,GAAkB,EAAE;AAEzB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,GAAG,EAA2B;AAGzD,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;;AAGA,IAAA,OAAO,CAAC,MAAc,EAAA;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;IAC/B;IAEA,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;IAEA,OAAO,CAAC,MAAc,EAAE,IAAsB,EAAA;QAC5C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;IAC9B;AAEA,IAAA,UAAU,CAAC,MAAc,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;IAC3B;AAEA,IAAA,OAAO,CAAC,MAAc,EAAA;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;IAC/B;;IAGA,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,QAAQ,CAAC,KAAoB,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACpB;;IAGA,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;IACtB;AAEA,IAAA,WAAW,CAAC,QAAkB,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;;AAGA,IAAA,kBAAkB,CAAC,MAAc,EAAA;QAC/B,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;IACxC;IAEA,kBAAkB,CAAC,MAAc,EAAE,OAAwB,EAAA;QACzD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1C;IAEA,qBAAqB,GAAA;QACnB,OAAO,IAAI,CAAC,cAAc;IAC5B;;AAGA,IAAA,OAAO,wBAAwB,CAC7B,GAAoB,EACpB,QAAkB,EAClB,WAAqC,EAAA;AAErC,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAA2B;AAC9C,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;AAEjC,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE;AACzB,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AACzC,YAAA,IAAI,CAAC,IAAI;gBAAE;AACX,YAAA,MAAM,cAAc,GAAG,CAAC,CAAC,eAAe,EAAE,MAAM;AAChD,YAAA,MAAM,eAAe,GAAG,CAAC,CAAC,eAAe,EAAE,OAAO;AAClD,YAAA,MAAM,gBAAgB,GAAG,CAAC,CAAC,eAAe,EAAE,aAAa;;YAEzD,IAAI,GAAG,GAA6B,EAAE;AACtC,YAAA,IAAI;AACF,gBAAA,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,UAAU,EAAE;AAC7C,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC;wBAChC,MAAM,EAAE,CAAC,CAAC,MAAM;wBAChB,WAAW,EAAE,WAAW,IAAI,EAAE;wBAC9B,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,wBAAA,MAAM,EAAE,SAAS;AAClB,qBAAA,CAAC;;AAEF,oBAAA,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;;AAEpB,wBAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;oBACvB;yBAAO;AACL,wBAAA,GAAG,GAAG,KAAK,IAAI,EAAE;oBACnB;gBACF;YACF;AAAE,YAAA,MAAM;;YAER;;AAEA,YAAA,MAAM,MAAM,GAAG;gBACb,GAAG,IAAI,CAAC,MAAM;gBACd,GAAG,GAAG,CAAC,MAAM;AACb,gBAAA,GAAG,cAAc;aAClB;AACD,YAAA,MAAM,OAAO,GAAG;gBACd,GAAG,IAAI,CAAC,OAAO;gBACf,GAAG,GAAG,CAAC,OAAO;AACd,gBAAA,GAAG,eAAe;aACnB;AACD,YAAA,MAAM,aAAa,GAAG;gBACpB,GAAG,IAAI,CAAC,aAAa;gBACrB,GAAG,GAAG,CAAC,aAAa;AACpB,gBAAA,GAAG,gBAAgB;aACpB;AACD,YAAA,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;QACvD;AACA,QAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE;IAC9B;AAEA,IAAA,OAAO,UAAU,CACf,GAAoB,EACpB,QAAkB,EAClB,cAA4C,EAAA;QAE5C,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAiB;YACtC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YACnE,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACnE,YAAA,IAAI,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;AAC/B,YAAA,IAAI,WAA0C;AAC9C,YAAA,IAAI,WAA+B;YACnC,IAAI,OAAO,EAAE;gBACX,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;AACnD,gBAAA,IAAI,QAAQ;oBAAE,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAQ;YACtE;YACA,IAAI,CAAC,eAAe,EAAE;;AAEpB,gBAAA,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW;AACzC,sBAAE,WAAW,CAAC,CAAC;sBACb,WAAW;YACjB;YACA,IAAI,OAAO,EAAE;gBACX,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;AACnD,gBAAA,IAAI,QAAQ;AACV,oBAAA,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YAClE;YACA,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,cAAc,CAAC,mBAAmB,CAClE,WAAW,EACX,WAAW,EACX,QAAQ,EACR,CAAA,YAAA,EAAe,OAAO,EAAE,MAAM,IAAI,EAAE,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EACrD,CAAC,CAAC,MAAM,CAAC,MACX,OAAO,OAAO,EAAE,MAAM,IAAI,EAAE,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE,CACrE;YACD,OAAO;gBACL,EAAE,EAAE,CAAC,CAAC,EAAE;AACR,gBAAA,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE;AACvB,gBAAA,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE;AACvB,gBAAA,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,gBAAA,eAAe,EAAE,eAAe,IAAI,SAAS;gBAC7C,OAAO;gBACP,YAAY;AACZ,gBAAA,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW;AACtC,sBAAE,CAAC,GAAG,WAAW;AACjB,sBAAE,SAAS;gBACb,WAAW;AACX,gBAAA,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;aACjD;AACH,QAAA,CAAC,CAAC;IACJ;;IAGA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;IAC7B;;IAGA,OAAO,mBAAmB,CACxB,WAA0C,EAC1C,WAA+B,EAC/B,QAAkB,EAClB,SAAiB,EAAA;AAKjB,QAAA,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE;AAChC,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;AAC1C,QAAA,MAAM,QAAQ,GAAG,OAAO,GAAG,WAAW,GAAG,CAAC,WAAW,CAAC;;AAGtD,QAAA,MAAM,WAAW,GAAG,CAAC,MAAc,KAAI;YACrC,OAAO,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC;AACtD,QAAA,CAAC;;QAGD,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;AAC3C,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC;;AAG3D,QAAA,MAAM,cAAc,GAAG,CACrB,CAAU,KAC8B;AACxC,YAAA,MAAM,MAAM,GAAG,oBAAoB,CAAC,CAAC,CAAC;AACtC,YAAA,MAAM,OAAO,GAAG,mBAAmB,CAAC,CAAC,CAAC;YAEtC,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,MAAM,EAAE;AACX,oBAAA,MAAM,IAAI,KAAK,CACb,CAAA,wCAAA,EAA2C,SAAS,CAAA,YAAA,EAAe,QAAQ,CAAC,IAAI,CAC9E,GAAG,CACJ,CAAA,CAAE,CACJ;gBACH;gBACA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC9B,oBAAA,MAAM,IAAI,KAAK,CACb,CAAA,qBAAA,EAAwB,MAAM,KAAK,SAAS,CAAA,YAAA,EAAe,QAAQ,CAAC,IAAI,CACtE,GAAG,CACJ,CAAA,CAAE,CACJ;gBACH;YACF;iBAAO,IAAI,MAAM,EAAE;;AAEjB,gBAAA,OAAO,CAAC,IAAI,CACV,CAAA,aAAA,EAAgB,MAAM,CAAA,yCAAA,EAA4C,SAAS,CAAA,GAAA,EAAM,WAAW,CAAA,IAAA,EAAO,WAAW,CAAA,CAAE,CACjH;YACH;AAEA,YAAA,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE;AACnD,QAAA,CAAC;QAED,IAAI,QAAQ,EAAE;YACZ,OAAO;AACL,gBAAA,YAAY,EAAE,OAAO,CAAU,EAAE,MAAmB,KAAI;oBACtD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC;AAC7C,oBAAA,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC;AAC/B,oBAAA,IAAI,CAAC,GAAG;AAAE,wBAAA,OAAO,OAAO;AACxB,oBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;wBACxB,OAAO,MAAM,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;oBAChD;AACA,oBAAA,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;gBAC7B,CAAC;aACF;QACH;;AAGA,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC;QAC/D,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,EAAE;QACX;QAEA,OAAO;AACL,YAAA,OAAO,EAAE,CAAC,CAAU,KAAI;gBACtB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC;AAC7C,gBAAA,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC;AAC/B,gBAAA,IAAI,CAAC,GAAG;AAAE,oBAAA,OAAO,OAAO;AACxB,gBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;AACxB,oBAAA,MAAM,IAAI,KAAK,CACb,6CAA6C,SAAS,CAAA,CAAA,CAAG,CAC1D;gBACH;AACA,gBAAA,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;YAC7B,CAAC;SACF;IACH;AACD;;ACvRD;;;AAGG;MACU,YAAY,CAAA;AAAzB,IAAA,WAAA,GAAA;AACU,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAGxB;IA8BL;IA5BE,EAAE,CACA,KAAQ,EACR,OAAgC,EAAA;QAEhC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC;QACpE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAiC;AACrE,QAAA,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;QAChB,OAAO,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IAClC;IAEA,IAAI,CACF,KAAQ,EACR,OAA2B,EAAA;QAE3B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,GAAG;YAAE;QACV,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACrC,YAAA,IAAI;gBACF,OAAO,CAAC,OAAO,CAAC;YAClB;YAAE,OAAO,GAAG,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,CAAA,SAAA,EAAY,KAAK,CAAA,SAAA,CAAW,EAAE,GAAG,CAAC;YAClD;QACF;IACF;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;AACD;;AC1CD;;AAEG;MACU,iBAAiB,CAAA;AAA9B,IAAA,WAAA,GAAA;AACU,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAA4B;QACjD,IAAA,CAAA,iBAAiB,GAAG,CAAC;IAiI/B;AA/HE;;AAEG;IACH,gBAAgB,CACd,WAAmB,EACnB,OAGC,EAAA;QAED,MAAM,EAAE,GAAiB,CAAA,GAAA,EAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE;AACzD,QAAA,MAAM,GAAG,GAAe;YACtB,EAAE;AACF,YAAA,UAAU,EAAE,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;YAClC,cAAc,EAAE,IAAI,GAAG,EAAE;AACzB,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,IAAI,KAAK;AAC1D,YAAA,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;SACtC;QACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC;AAC7B,QAAA,OAAO,GAAG;IACZ;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,EAAgB,EAAA;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;IACjC;AAEA;;AAEG;IACH,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,WAAW;IACzB;AAEA;;AAEG;IACH,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC;IAClC;AAEA;;AAEG;IACH,gBAAgB,CACd,EAAgB,EAChB,KAAoC,EAAA;QAEpC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,GAAG;YAAE;AACV,QAAA,IAAI,GAAG,CAAC,OAAO,GAAG,CAAC;AAAE,YAAA,OAAO;;QAG5B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE;AACjC,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,OAAO;YAAE,GAAG,CAAC,OAAO,EAAE;IAChC;AAEA;;;;;;AAMG;AACH,IAAA,uBAAuB,CACrB,MAAc,EACd,iBAA0B,EAC1B,KAAwE,EACxE,KAAoC,EAAA;QAEpC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,iBAAiB,EAAE;;AAErB,YAAA,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC;AACtB,YAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;AACjC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,gBAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;AACpB,gBAAA,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE;AACtB,gBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AAChB,gBAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;oBACrB,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE;AAC3B,wBAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM;wBAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC1B,4BAAA,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AACtB,4BAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;wBACtB;oBACF;gBACF;YACF;QACF;;QAGA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE;AAC3C,YAAA,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE;AACzB,gBAAA,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B;QACF;;AAGA,QAAA,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE;YACzB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,YAAA,IAAI,IAAI;AAAE,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;QAC1C;IACF;AAEA;;AAEG;IACH,UAAU,GAAA;QACR,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE;YAC3C,IAAI,GAAG,CAAC,OAAO;gBAAE,GAAG,CAAC,OAAO,EAAE;QAChC;IACF;AAEA;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;IAC1B;AACD;;ACxID,MAAM,gBAAgB,GAAG;AACzB,IAAI,KAAK,EAAE,CAAC;AACZ,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,KAAK,EAAE,CAAC;AACZ,IAAI,MAAM,EAAE,CAAC;AACb,CAAC;;ACGD;;AAEG;MACU,cAAc,CAAA;IAQzB,WAAA,CACE,cAA8B,EAC9B,YAA0B,EAC1B,kBAAuC,EACvC,QAAmB,EACnB,WAAqC,EAAA;AAZ/B,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,GAAG,EAAkB;QAKhD,IAAA,CAAA,WAAW,GAA4B,EAAE;AAS/C,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC5C,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,EAAE;IACtC;AAEA,IAAA,WAAW,CAAC,QAAkB,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;AAEA,IAAA,cAAc,CAAC,WAAoC,EAAA;AACjD,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;IAChC;AAEA;;AAEG;AACH,IAAA,wBAAwB,CAAC,MAAc,EAAA;;QAErC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;YAAE;QACX,UAAU,CAAC,MAAK;AACd,YAAA,KAAK,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;QAC3C,CAAC,EAAE,CAAC,CAAC;IACP;AAEA;;AAEG;IACK,MAAM,uBAAuB,CAAC,MAAc,EAAA;AAClD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAS;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5C,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc;QAC1C,IAAI,OAAO,cAAc,KAAK,UAAU;YAAE;AAC1C,QAAA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9D,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;;AAG5C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM;QAC5C,MAAM,YAAY,GAAG,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC;QACxD,MAAM,SAAS,GACb,YAAY,IAAI,gBAAgB,CAAC,KAAK,IAAI,YAAY,KAAK,QAAQ;QACrE,IAAI,SAAS,EAAE;YACb,OAAO,CAAC,IAAI,CAAC,CAAA,MAAA,EAAS,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAA,sBAAA,CAAwB,CAAC;QACtE;AAEA,QAAA,IAAI,CAAuC;AAC3C,QAAA,IAAI;YACF,MAAM,GAAG,GAAG,cAAc,CAAC;gBACzB,MAAM;AACN,gBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;gBACnC,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;AAC1B,aAAA,CAAC;AACF,YAAA,CAAC,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC;QACnC;AAAE,QAAA,MAAM;;YAEN,IAAI,SAAS,EAAE;gBACb,OAAO,CAAC,IAAI,CACV,CAAA,MAAA,EAAS,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAA,6BAAA,CAA+B,CAC9D;YACH;YACA;QACF;;QAGA,IAAI,SAAS,EAAE;YACb,OAAO,CAAC,IAAI,CAAC,CAAA,MAAA,EAAS,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAA,qBAAA,CAAuB,CAAC;QACrE;;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK;YAAE;QAE5D,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC;AAC/D,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO;;AAGtB,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,QAAQ;YAAE;AAEf,QAAA,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE;AACnD,QAAA,MAAM,OAAO,GAAG,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE;AACtD,QAAA,MAAM,aAAa,GAAG;YACpB,GAAG,QAAQ,CAAC,aAAa;YACzB,GAAG,CAAC,EAAE,aAAa;SACpB;QACD,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE;QAC/C,MAAM,MAAM,GAAG,QAAQ;;AAEvB,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE;QAErD,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC;;QAGpD,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC;;AAGjE,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE;AACnC,YAAA,MAAM,EAAE,eAAe;AACvB,YAAA,eAAe,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI,EAAE;AACpC,SAAA,CAAC;IACJ;AACD;;ACzHD;;AAEG;MACU,eAAe,CAAA;IAY1B,WAAA,CACE,cAA8B,EAC9B,YAA0B,EAC1B,iBAAoC,EACpC,cAA+B,EAC/B,kBAAuC,EAAA;AAVjC,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,GAAG,EAGhC;AASD,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;AAC1C,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;IAC9C;AAEA;;AAEG;AACH,IAAA,qBAAqB,CAAC,kBAAuC,EAAA;AAC3D,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;IAC9C;AAEA;;;;AAIG;AACH,IAAA,SAAS,CACP,SAAiB,EACjB,SAAiB,EACjB,KAAc,EACd,aAAiC,EAAA;;QAGjC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC;QACtD,IAAI,CAAC,OAAO,EAAE;;YAEZ;QACF;AACA,QAAA,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,KAAK;AAClC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,MAAM,EAAE,SAAS;YACjB,KAAK;AACL,YAAA,EAAE,EAAE,QAAQ;AACZ,YAAA,aAAa,EAAE,oBAAoB,CAAC,KAAK,CAAC;AAC3C,SAAA,CAAC;;QAGF,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;QAC5C,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAC3B,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CACtE;QAED,MAAM,iBAAiB,GACrB,aAAa,KAAK,SAAS,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC;AAEvD,QAAA,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE;;AAExB,YAAA,IAAI,oBAAmD;YACvD,IAAI,iBAAiB,EAAE;AACrB,gBAAA,oBAAoB,GAAG,IAAI,GAAG,EAAgB;AAC9C,gBAAA,KAAK,MAAM,EAAE,IAAI,aAAc,EAAE;oBAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;AACpD,oBAAA,IAAI,CAAC,GAAG;wBAAE;AACV,oBAAA,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;wBAAE;oBACvC,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;wBAAE;AAC7C,oBAAA,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B;AACA,gBAAA,IAAI,oBAAoB,CAAC,IAAI,KAAK,CAAC;AAAE,oBAAA,SAAS;YAChD;;YAGA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;AAC9C,YAAA,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC;AACpC,YAAA,IAAI,OAAO,IAAI,CAAC,OAAO,EAAE;gBACvB,MAAM,GAAG,GAAG,IAAI,KAAK,CACnB,CAAA,OAAA,EAAU,SAAS,IAAI,SAAS,CAAA,iDAAA,EAC9B,CAAC,CAAC,aACH,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,CACf;AACD,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,oBAAA,IAAI,EAAE,cAAc;oBACpB,MAAM,EAAE,CAAC,CAAC,EAAE;AACZ,oBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5D,oBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;oBAC5D,GAAG;AACJ,iBAAA,CAAC;gBACF;YACF;;AAGA,YAAA,IAAI,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC;AACpC,YAAA,MAAM,aAAa,GAAG,CAAC,CAAU,KAAI;AACnC,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AAC5D,gBAAA,IAAI,CAAC,OAAO;oBAAE;;AAGd,gBAAA,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS;oBAAE;AAEjC,gBAAA,MAAM,UAAU,GACd,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACnE,IAAI,IAAI,GAAG,CAAC;;gBAEZ,IAAI,UAAU,EAAE;AACd,oBAAA,MAAM,OAAO,GAAG,CAAC,CAAU,KACzB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACnD,oBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;oBACzD,IAAI,CAAC,OAAO,EAAE;AACZ,wBAAA,OAAO,GAAG,IAAI,GAAG,EAAkC;AACnD,wBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBACtD;AACA,oBAAA,IAAI,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;oBAC5C,IAAI,CAAC,SAAS,EAAE;AACd,wBAAA,SAAS,GAAG,IAAI,GAAG,EAAqB;wBACxC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;oBACzC;AACA,oBAAA,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC/B,MAAM,MAAM,GAAc,EAAE;AAC5B,oBAAA,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE;wBACtB,IACE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM;4BACpC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,EACpC;4BACA,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;AACjC,4BAAA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM;AAAE,gCAAA,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;wBAC/C;oBACF;oBACA,IAAI,GAAG,MAAM;gBACf;AAEA,gBAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC5C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;gBACpC,IAAI,CAAC,IAAI,EAAE;;oBAET,IAAI,yBAAyB,GAAG,KAAK;AACrC,oBAAA,IAAI,iBAAiB,IAAI,oBAAoB,EAAE;AAC7C,wBAAA,KAAK,MAAM,EAAE,IAAI,oBAAoB,EAAE;4BACrC,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;AACpD,4BAAA,IAAI,GAAG,IAAI,GAAG,CAAC,mBAAmB,EAAE;gCAClC,yBAAyB,GAAG,IAAI;gCAChC;4BACF;wBACF;oBACF;;oBAGA,IAAI,CAAC,yBAAyB,EAAE;wBAC9B,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI;AACtC,wBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,4BAAA,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;AACvB,4BAAA,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;AACvB,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,EAAE,EAAE,OAAO;AACX,4BAAA,aAAa,EAAE,oBAAoB,CAAC,IAAI,CAAC;AAC1C,yBAAA,CAAC;wBACF,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;oBAC/D;;AAGA,oBAAA,IAAI,eAAe,GAAG,IAAI,CAAC;AAC3B,oBAAA,IAAI,iBAAiB,IAAI,oBAAoB,EAAE;wBAC7C,eAAe,GAAG,KAAK;AACvB,wBAAA,KAAK,MAAM,EAAE,IAAI,oBAAoB,EAAE;4BACrC,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;AACpD,4BAAA,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE;gCACxB,eAAe,GAAG,IAAI;gCACtB;4BACF;wBACF;oBACF;;;oBAIA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE;AACjD,oBAAA,MAAM,WAAW,GACf,CAAC,CAAC,MAAM,IAAI,iBAAiB;wBAC7B,eAAe;wBACf,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;oBAE9D,IAAI,WAAW,EAAE;AACf,wBAAA,IAAI,iBAAiB,IAAI,oBAAoB,EAAE;AAC7C,4BAAA,IAAI,CAAC,kBAAkB,CAAC,oCAAoC,CAC1D,CAAC,CAAC,MAAM,CAAC,MAAM,EACf,oBAAoB,CACrB;wBACH;6BAAO;4BACL,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;wBAChE;oBACF;gBACF;AACF,YAAA,CAAC;;AAGD,YAAA,IAAI,CAAC,CAAC,YAAY,EAAE;AAClB,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,oBAAA,IAAI,EAAE,YAAY;oBAClB,MAAM,EAAE,CAAC,CAAC,EAAE;oBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,oBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5D,oBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC7D,iBAAA,CAAC;AACF,gBAAA,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE;AACxC,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;AAC1B,gBAAA,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AACjB,gBAAA,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI;gBACvB,IAAI,CAAC,iBAAiB,EAAE;;AAEtB,oBAAA,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC;gBACtB;AACA,gBAAA,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM;AAC7B,gBAAA,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG;AACxB,qBAAA,IAAI,CAAC,CAAC,SAAS,KAAI;AAClB,oBAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;wBAChB,aAAa,CAAC,SAAS,CAAC;AACxB,wBAAA,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK;wBACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;AACrC,wBAAA,CAAC,CAAC,KAAK,CAAC,cAAc,GAAG,QAAQ;wBACjC,IAAI,CAAC,iBAAiB,EAAE;;4BAEtB,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;AAC9B,4BAAA,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS;AAC7B,4BAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,gCAAA,IAAI,EAAE,WAAW;gCACjB,MAAM,EAAE,CAAC,CAAC,EAAE;gCACZ,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,gCAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5D,gCAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5D,gCAAA,UAAU,EAAE,QAAQ;AACrB,6BAAA,CAAC;wBACJ;oBACF;AACF,gBAAA,CAAC;AACA,qBAAA,KAAK,CAAC,CAAC,GAAG,KAAI;oBACb,IAAI,GAAG,CAAC,OAAO;wBAAE;AACjB,oBAAA,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK;oBACxB,IAAI,CAAC,iBAAiB,EAAE;AACtB,wBAAA,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG;oBACzB;AACA,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,wBAAA,IAAI,EAAE,cAAc;wBACpB,MAAM,EAAE,CAAC,CAAC,EAAE;AACZ,wBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5D,wBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;wBAC5D,GAAG;AACJ,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;YACN;iBAAO;;AAEL,gBAAA,IAAI,CAAC,CAAC,OAAO,EAAE;AACb,oBAAA,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;gBAC9B;gBACA,aAAa,CAAC,OAAO,CAAC;YACxB;QACF;IACF;AAEA;;AAEG;AACH,IAAA,sBAAsB,CACpB,SAAiB,EACjB,SAAiB,EACjB,KAAc,EACd,aAAgC,EAAA;QAEhC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC;IAC5D;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,MAAc,EAAA;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;YAAE;;QAEX,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC;AAC/D,QAAA,MAAM,kBAAkB,GAAG,QAAQ,EAAE;AACnC,cAAE,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AACvC,cAAE,IAAI,GAAG,EAAU;;QAErB,MAAM,aAAa,GACjB,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG;AAC5B,cAAE,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB;cAC9B,SAAS;AACf,QAAA,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;;AAE1D,YAAA,IAAI,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBAClC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC;YACtD;QACF;IACF;AAEA;;AAEG;AACH,IAAA,iBAAiB,CAAC,MAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC;IACvC;AAEA;;AAEG;IACH,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;IAChC;AACD;;ACpUD;;AAEG;MACU,kBAAkB,CAAA;IAQ7B,WAAA,CACE,cAA8B,EAC9B,YAA0B,EAC1B,iBAAoC,EACpC,eAAiC,EACjC,kBAAuC,EACvC,WAAqC,EAAA;QAR/B,IAAA,CAAA,WAAW,GAA4B,EAAE;AAU/C,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;AAC1C,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC5C,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,EAAE;IACtC;AAEA,IAAA,cAAc,CAAC,WAAoC,EAAA;AACjD,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;IAChC;AAEA;;AAEG;AACH,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,KAAK;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC5C,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC;AAC/D,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;AACrC,QAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;YACvB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;AAAE,gBAAA,OAAO,KAAK;QACrD;AACA,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACH,IAAA,kBAAkB,CAAC,MAAc,EAAA;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AAClD,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,EAAE;AACxB,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;QAEpB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC;AAC/D,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,IAAI,EAAE;AAC5C,QAAA,MAAM,WAAW,GAAG,QAAQ,EAAE,aAAa,IAAI,EAAE;;AAGjD,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AAC7D,QAAA,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACzE;;AAGD,QAAA,MAAM,cAAc,GAA4B;AAC9C,YAAA,GAAG,WAAW;AACd,YAAA,GAAG,WAAW;SACf;;QAGD,MAAM,SAAS,GAA4B,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;;QAG7D,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC5C,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB;AACG,aAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM;AACxC,aAAA,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAC/B;;;;AAKD,QAAA,KAAK,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;YACnE,IAAI,YAAY,KAAK,SAAS;gBAAE;AAChC,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;AAAE,gBAAA,SAAS;AAClC,YAAA,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,SAAS;AAAE,gBAAA,SAAS;AAC9C,YAAA,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;AAAE,gBAAA,SAAS;;YAGzC,SAAS,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC,YAAY,CAAC;QACnD;AAEA,QAAA,OAAO,SAAS;IAClB;AAEA;;AAEG;AACH,IAAA,sBAAsB,CACpB,MAAc,EACd,IAAsB,EACtB,MAA+B,EAC/B,KAAa,EACb,WAAwB,EACxB,aAAiC,EACjC,OAGC,EAAA;AAED,QAAA,MAAM,WAAW,GACf,OAAO,EAAE,WAAW;AACpB,aAAC,CAAC,MAAc,EAAE,KAAc,KAAI;AAClC,gBAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC;AACtE,YAAA,CAAC,CAAC;AACJ,QAAA,MAAM,cAAc,GAClB,OAAO,EAAE,cAAc;aACtB,CAAC,CAAS,KAAI;gBACb,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAChE,YAAA,CAAC,CAAC;;QAGJ,MAAM,GAAG,GAIG,CACV,KAAe,EACf,OAAe,EACf,OAAiC,KAC/B;AACF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM;YAC5C,MAAM,YAAY,GAAG,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC;YACxD,MAAM,cAAc,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;;YAGnD,IAAI,cAAc,IAAI,YAAY,IAAI,YAAY,KAAK,QAAQ,EAAE;gBAC/D,MAAM,UAAU,GAAG;AACjB,sBAAE,CAAA,CAAA,EAAI,MAAM,CAAC,OAAO,CAAC,OAAO;yBACvB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;yBAC3C,IAAI,CAAC,GAAG,CAAC,CAAA;sBACZ,EAAE;AACN,gBAAA,MAAM,WAAW,GAAG,CAAA,MAAA,EAAS,KAAK,IAAI,MAAM,CAAA,CAAA,EAC1C,IAAI,CAAC,MACP,CAAA,EAAA,EAAK,OAAO,CAAA,EAAG,UAAU,EAAE;gBAC3B,QAAQ,KAAK;AACX,oBAAA,KAAK,OAAO;AACV,wBAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;wBACzB;AACF,oBAAA,KAAK,MAAM;AACT,wBAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;wBACzB;AACF,oBAAA,KAAK,MAAM;AACT,wBAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;wBACzB;AACF,oBAAA,KAAK,OAAO;AACV,wBAAA,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;wBAC1B;;YAEN;AACF,QAAA,CAAC;;QAGD,MAAM,mBAAmB,GAAG,aAAa;QAEzC,OAAO;YACL,MAAM;YACN,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,QAAQ,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AACnD,YAAA,IAAI,EAAE,WAAW;YACjB,oBAAoB,EAAE,MAAK;AACzB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,MAAM,CAAC;YACtD,CAAC;YACD,qBAAqB,EAAE,MAAK;AAC1B,gBAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;;AAEpC,oBAAA,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,mBAAmB,CAAC;gBACjE;YACF,CAAC;YACD,QAAQ,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC;YACpC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK;YACL,WAAW;YACX,cAAc;YACd,GAAG;SACJ;IACH;AAEA;;AAEG;AACH,IAAA,qBAAqB,CAAC,MAAc,EAAA;AAClC,QAAA,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC;IAC5C;AAEA;;AAEG;IACH,oCAAoC,CAClC,MAAc,EACd,aAAgC,EAAA;AAEhC,QAAA,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,aAAa,CAAC;IAC3D;AAEA;;AAEG;IACH,6BAA6B,CAC3B,MAAc,EACd,aAAiC,EAAA;QAEjC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;YAAE;;QAEX,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE;YAAE;;QAG1D,IAAI,aAAa,EAAE;AACjB,YAAA,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE;AAC9B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC;QACF;AACA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE;;QAGhC,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAEvD,IACE,MAAM,CAAC,UAAU;AACjB,YAAA,IAAI,CAAC,eAAe;YACpB,GAAG,GAAG,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,UAAU,EAC9C;;AAEA,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACvC,YAAA,IAAI,CAAC,MAAM,IAAI,CAAC;YAChB,MAAM,GAAG,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE;AAC7C,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;YACxD;QACF;AACA,QAAA,IAAI,CAAC,eAAe,GAAG,GAAG;AAE1B,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC;QAChB,MAAM,GAAG,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE;AAC7C,QAAA,IAAI,CAAC,WAAW,GAAG,GAAG;;QAGtB,MAAM,mBAAmB,GACvB,aAAa;AACb,aAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG;AAC7B,kBAAE,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB;kBAC9B,SAAS,CAAC;QAEhB,MAAM,QAAQ,GAAG,CACf,KAAa,EACb,cAAuC,EACvC,mBAAuC,EACvC,MAAmB,KACjB;;YAEF,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,IAAI,GAAG,CAAC,EAAE;AACvD,gBAAA,KAAK,MAAM,EAAE,IAAI,mBAAmB,EAAE;oBACpC,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;AACpD,oBAAA,IAAI,GAAG;wBAAE,GAAG,CAAC,OAAO,EAAE;gBACxB;YACF;AACA,YAAA,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE;AACxC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AACpB,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;AACtB,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG;AAC5B,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC;AACvB,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC;YACtC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC;AAE5C,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,IAAI,QAAQ;AAChD,YAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AACrB,gBAAA,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;oBAClD,IAAI,CAAC,KAAK,UAAU;AAAE,wBAAA,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACzC;YACF;AAEA,YAAA,IAAI,SAAqC;YACzC,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE;AAC5C,gBAAA,SAAS,GAAG,UAAU,CACpB,MAAM,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,EACjC,MAAM,CAAC,SAAS,CACjB;YACH;AAEA,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,sBAAsB,CACrC,MAAM,EACN,IAAI,EACJ,cAAc,EACd,KAAK,EACL,UAAU,CAAC,MAAM,EACjB,mBAAmB,EACnB;AACE,gBAAA,WAAW,EAAE,CAAC,MAAc,EAAE,KAAc,KAAI;AAC9C,oBAAA,MAAM,CAAC,GAAG,MAAM,CAAC,gBAAgB,IAAI,QAAQ;;;AAG7C,oBAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,GAAG,CAAC,KAAK,CAAC;wBAAE;oBAC9C,IAAI,CAAC,KAAK,OAAO,IAAI,KAAK,KAAK,IAAI,CAAC,WAAW;wBAAE;AACjD,oBAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAC5B,MAAM,EACN,MAAM,EACN,KAAK,EACL,mBAAmB,CACpB;gBACH,CAAC;AACD,gBAAA,cAAc,EAAE,CAAC,CAAS,KAAI;oBAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9D,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,wBAAA,IAAI,EAAE,eAAe;wBACrB,MAAM;wBACN,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,KAAK;AACL,wBAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;AAC9B,qBAAA,CAAC;gBACJ,CAAC;AACF,aAAA,CACF;AAED,YAAA,MAAM,IAAI,GAAG,OAAO,OAAe,KAAI;gBACrC,IAAI,QAAQ,GAAG,KAAK;AACpB,gBAAA,IAAI;AACF,oBAAA,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE;AAC3B,wBAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC;AACjC,wBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC;AAC9C,wBAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC;oBAClC;oBACA,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,cAAc,EAAE,GAAG,CAAC;gBAC3D;gBAAE,OAAO,GAAG,EAAE;;AAEZ,oBAAA,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE;AAC7B,wBAAA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM;wBACvC,IACE,MAAM,KAAK,QAAQ;AACnB,4BAAA,MAAM,KAAK,UAAU;AACrB,4BAAA,MAAM,KAAK,cAAc;4BACzB,MAAM,KAAK,gBAAgB,EAC3B;AACA,4BAAA,OAAO;wBACT;oBACF;oBACA,QAAQ,GAAG,IAAI;AACf,oBAAA,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG;AAC1B,oBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;AAC1B,oBAAA,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE;AAC5C,wBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC;AAC5D,wBAAA,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC9C,wBAAA,OAAO,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;oBAC1B;AACA,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,wBAAA,IAAI,EAAE,UAAU;wBAChB,MAAM;wBACN,KAAK;wBACL,GAAG;AACJ,qBAAA,CAAC;gBACJ;wBAAU;;oBAER,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;wBACxC;oBACF;AAEA,oBAAA,IAAI,SAAS;wBAAE,YAAY,CAAC,SAAS,CAAC;AACtC,oBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC;AACzC,oBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC;AACxC,oBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;oBAC5D,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;oBACjC,IAAI,CAAC,KAAK,CAAC,cAAc;wBACvB,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC;8BACjC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;8BAClC,SAAS;AACf,oBAAA,IAAI,CAAC,QAAQ;AAAE,wBAAA,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS;;AAG/C,oBAAA,MAAM,WAAW,GACf,UAAU,CAAC,MAAM,CAAC,OAAO;AACzB,yBAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU;AACtC,4BAAA,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,cAAc;AAC3C,4BAAA,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,gBAAgB,CAAC;oBAClD,IAAI,CAAC,WAAW,EAAE;AAChB,wBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,4BAAA,IAAI,EAAE,WAAW;4BACjB,MAAM;4BACN,MAAM,EAAE,IAAI,CAAC,MAAM;4BACnB,KAAK;AACL,4BAAA,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc;AACtC,yBAAA,CAAC;oBACJ;AACA,oBAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE;AAC5B,wBAAA,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc;wBACrC,QAAQ;AACT,qBAAA,CAAC;;oBAGF,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,IAAI,GAAG,CAAC,EAAE;AACvD,wBAAA,KAAK,MAAM,EAAE,IAAI,mBAAmB,EAAE;4BACpC,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;4BACpD,IAAI,GAAG,EAAE;gCACP,GAAG,CAAC,OAAO,EAAE;AACb,gCAAA,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,EAAE;AACrB,oCAAA,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CACrC,EAAE,EACF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAC/B;gCACH;4BACF;wBACF;oBACF;AAEA,oBAAA,IAAI,MAAM;AAAE,wBAAA,MAAM,EAAE;gBACtB;AACF,YAAA,CAAC;;AAGD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,gBAAA,IAAI,EAAE,YAAY;gBAClB,MAAM;gBACN,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK;AACN,aAAA,CAAC;AACF,YAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC;YAC9B,IAAI,CAAC,CAAC,CAAC;AACT,QAAA,CAAC;AAED,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,IAAI,QAAQ;AAChD,QAAA,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,EAAE;;YAEtD;QACF;AACA,QAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AACpB,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;AACxD,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI;AAAE,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;YAEhD,MAAM,WAAW,GAAG,MAAK;AACvB,gBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC;oBAAE;gBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAC/B,gBAAA,IAAI,CAAC,IAAI;oBAAE;AACX,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK;;gBAE7B,MAAM,mBAAmB,GACvB,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG;AAC5B,sBAAE,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB;sBAC9B,SAAS;AACf,gBAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAK;;AAE1D,oBAAA,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAC5B,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC;AAED,YAAA,WAAW,EAAE;YACb;QACF;;AAGA,QAAA,QAAQ,CAAC,GAAG,EAAE,eAAe,EAAE,mBAAmB,CAAC;IACrD;AAEA;;AAEG;IACH,oBAAoB,CAClB,IAAiB,EACjB,MAAsD,EAAA;AAEpD,QAAA,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;YAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC;YACnD,IAAI,KAAK,EAAE;;;gBAGT,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,gBAAgB,EAAE;AACxD,oBAAA,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;AACjC,wBAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,GAAG,EAAU;oBAClD;AACA,oBAAA,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC;gBACzC;;AAEA,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,oBAAA,IAAI,EAAE,WAAW;oBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,KAAK;AACL,oBAAA,SAAS,EAAE,IAAI;AAChB,iBAAA,CAAC;YACJ;AACF,YAAA,IAAI;AACF,gBAAA,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;YAC1B;AAAE,YAAA,MAAM;;YAER;QACF;AACA,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AAC9B,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;IACjB;AAEA;;;AAGG;AACH,IAAA,cAAc,CACZ,OAAiB,EACjB,MAAA,GAAwC,gBAAgB,EAAA;AAExD,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE;AAE1B,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,OAAO,CAAC;AACzC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;AACjC,QAAA,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;;AAG5C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;AACvB,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE;AACzB,YAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;AAEnB,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE;AACjC,oBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;oBACnC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC1B,wBAAA,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AACtB,wBAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;oBACtB;gBACF;YACF;QACF;;AAGA,QAAA,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,YAAA,IAAI,CAAC,IAAI;gBAAE;AAEX,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC;AAEvC,YAAA,IAAI,CAAC,MAAM,IAAI,CAAC;AAChB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,YAAA,MAAM,MAAM,GAAG,MAAM,KAAK,UAAU,GAAG,UAAU,GAAG,WAAW;AAC/D,YAAA,IAAI,CAAC,WAAW,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,MAAM,EAAE;QAChE;;AAGA,QAAA,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE;YAC7B,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAC5C,MAAM,EACN,KAAK;YACL,KAAK,EACL,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAC/B;QACH;IACF;AACD;;ACrhBD;MACa,YAAY,CAAA;AAevB,IAAA,WAAA,GAAA;;QALQ,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,WAAW,GAA4B,EAAE;QACzC,IAAA,CAAA,OAAO,GAAmB,IAAI;QAC9B,IAAA,CAAA,aAAa,GAAG,CAAC;;AAIvB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE;AAC1C,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE;AACtC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,EAAE;;;AAIhD,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CACtC,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,YAAY,EACjB,IAAI;AACJ,QAAA,SAAS;AACT,QAAA,SAAS;SACV;;;;;;QAOD,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CACxC,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,cAAc;AACnB,QAAA,IAAI;SACL;;QAGD,IAAI,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,CAC9C,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,eAAe;AACpB,QAAA,IAAI;QACJ,IAAI,CAAC,WAAW,CACjB;;QAGD,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,CAAC;IACrE;AAEA,IAAA,OAAO,MAAM,CACX,GAAoB,EACpB,QAAkB,EAClB,IAAgD,EAAA;AAEhD,QAAA,MAAM,EAAE,GAAG,IAAI,YAAY,EAAE;QAC7B,EAAE,CAAC,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,EAAE;;AAGxC,QAAA,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC;AACvC,QAAA,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC;QACvC,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC,WAAW,CAAC;QAChD,EAAE,CAAC,kBAAkB,CAAC,cAAc,CAAC,EAAE,CAAC,WAAW,CAAC;;AAGpD,QAAA,MAAM,OAAO,GAAG,cAAc,CAAC,wBAAwB,CACrD,GAAG,EACH,QAAQ,EACR,EAAE,CAAC,WAAW,CACf;QACD,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE;YAC3C,EAAE,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC;QACvD;;AAGA,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE;AACzB,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AACzC,YAAA,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,CAAC,CAAC,MAAM,CAAA,CAAE,CAAC;AAC5D,YAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AACpD,YAAA,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,kBAAA,EAAqB,IAAI,CAAC,UAAU,CAAA,CAAE,CAAC;YACjE,IAAI,GAAG,CAAC,YAAY;AAAE,gBAAA,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACjD,YAAA,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC;gBAChC,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,aAAA,CAAC;AACF,YAAA,MAAM,EAAE,GAAqB;gBAC3B,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,KAAK,EAAE,EAAE;gBACT,OAAO;gBACP,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,gBAAA,MAAM,EAAE;oBACN,GAAG,GAAG,CAAC,MAAM;oBACb,GAAG,IAAI,CAAC,MAAM;AACd,oBAAA,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM;AACpB,iBAAA;gBACD,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,gBAAA,MAAM,EAAE,CAAC;gBACT,iBAAiB,EAAE,IAAI,GAAG,EAAE;gBAC5B,gBAAgB,EAAE,IAAI,GAAG,EAAE;AAC3B,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,QAAQ,EAAE,CAAC;AACZ,iBAAA;gBACD,iBAAiB,EAAE,IAAI,GAAG,EAAE;aAC7B;YACD,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACzC;;AAGA,QAAA,MAAM,KAAK,GAAG,cAAc,CAAC,UAAU,CACrC,GAAG,EACH,QAAQ,EACR,EAAE,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAC1C;AACD,QAAA,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAGjC,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE;AACpC,YAAA,EAAE,CAAC,cAAc,CAAC,wBAAwB,CAAC,MAAM,CAAC;QACpD;AAEA,QAAA,OAAO,EAAE;IACX;IAEA,EAAE,CACA,KAAQ,EACR,OAAgC,EAAA;QAEhC,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;IAC7C;IAEA,SAAS,CAAC,MAAc,EAAE,MAA+B,EAAA;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,CAAA,CAAE,CAAC;QAEvD,IAAI,UAAU,GAAG,KAAK;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AAClD,QAAA,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACpD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAC3B,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAChE;AACD,YAAA,IAAI,UAAU;gBAAE;;AAGhB,YAAA,IAAI,KAAK,KAAK,SAAS,IAAI,QAAQ,EAAE;AACnC,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC;;gBAE/D,MAAM,MAAM,GAAG;sBACX,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM;AACxC,sBAAE;0BACA,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;0BAClC,SAAS;gBAEb,IAAI,MAAM,EAAE;oBACV,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;AAC3C,oBAAA,IAAI,QAAQ,EAAE,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;;AAEnD,wBAAA,MAAM,YAAY,GAAG,CAAA,wBAAA,EAA2B,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,OAAA,EAAU,MAAM,CAAA,GAAA,EAAM,IAAI,CAAC,SAAS,CAClG,KAAK,CACN,EAAE;AACH,wBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9B,4BAAA,IAAI,EAAE,kBAAkB;4BACxB,MAAM;4BACN,MAAM;4BACN,MAAM;4BACN,KAAK;AACL,4BAAA,OAAO,EAAE,YAAY;AACtB,yBAAA,CAAC;;wBAEF;oBACF;gBACF;YACF;YAEA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAChC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;YACrC,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,oBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC5B;qBAAO;AACL,oBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK;gBAC7B;;AAEA,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;gBACvE,UAAU,GAAG,IAAI;YACnB;QACF;;AAEA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;QACnE,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,UAAU;QAElD,IAAI,eAAe,EAAE;YACnB,IAAI,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;AACrE,gBAAA,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,MAAM,CAAC;YAC/D;QACF;QACA,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,MAAM,CAAC;QACtD;IACF;IAEA,SAAS,CAAC,MAAc,EAAE,MAAc,EAAA;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,OAAO,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;IAC9B;;AAGA,IAAA,iBAAiB,CACf,MAAc,EACd,OAAwB,EACxB,QAAkB,EAAA;QAElB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;YAAE;QAEX,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAClE,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC;AAEvD,QAAA,MAAM,UAAU,GAAG,WAAW,EAAE,OAAO,IAAI,EAAE;AAC7C,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE;AACxC,QAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzD,QAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzD,QAAA,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE;YACrC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACjC,gBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAC3B,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;oBAC9B,MAAM;oBACN,MAAM;AACN,oBAAA,KAAK,EAAE,SAAS;AAChB,oBAAA,EAAE,EAAE,QAAQ;AACb,iBAAA,CAAC;YACJ;QACF;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC5C,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;AACrB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AAC5D,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AAC5D,YAAA,IAAI,WAAW,GAAkC,CAAC,CAAC,eAAe;AAClE,YAAA,IAAI,WAAW,GAAuB,CAAC,CAAC,WAAW;YACnD,MAAM,cAAc,GAAG,WAAW;YAClC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE;gBAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC;AAC/D,gBAAA,WAAW,GAAG;sBACV,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;sBAChC,WAAW;AACf,gBAAA,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;oBACb,CAAC,CAAC,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW;AAC3C,0BAAE,WAAW,GAAG,CAAC,CAAC,IAAI;AACtB,0BAAE,WAAW,IAAI,SAAS;gBAC9B;YACF;YACA,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE;gBAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC;gBAC/D,IAAI,QAAQ,EAAE;AACZ,oBAAA,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9D,oBAAA,CAAC,CAAC,WAAW,GAAG,WAAW;gBAC7B;YACF;YACA,MAAM,IAAI,GAAG,cAAc,CAAC,mBAAmB,CAC7C,WAAW,EACX,WAAW,EACX,QAAQ,EACR,CAAA,mBAAA,EAAsB,OAAO,EAAE,MAAM,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAC5D,CAAC,CAAC,MAAM,CAAC,MACX,CAAA,IAAA,EAAO,OAAO,EAAE,MAAM,IAAI,EAAE,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE,CACrE;AACD,YAAA,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AACxB,YAAA,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY;AAElC,YAAA,IACE,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM;AAC1B,gBAAA,cAAc,KAAK,SAAS;gBAC5B,WAAW,KAAK,SAAS,EACzB;AACA,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC5D,IAAI,OAAO,EAAE;AACX,oBAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACjD,oBAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;wBAC1B,MAAM,aAAa,GACjB,OAAO,CAAC,iBAAiB,CAAC,IAAI,GAAG;AAC/B,8BAAE,IAAI,GAAG,CAAC,OAAO,CAAC,iBAAiB;8BACjC,SAAS;wBACf,IAAI,CAAC,eAAe,CAAC,SAAS,CAC5B,CAAC,CAAC,MAAM,CAAC,MAAM,EACf,CAAC,CAAC,MAAM,CAAC,MAAM,EACf,QAAQ,EACR,aAAa,CACd;oBACH;gBACF;YACF;QACF;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC;IAChD;IAEA,MAAM,CAAC,UAAU,GAAG,KAAK,EAAA;AACvB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;AAC1D,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAChE,IAAI,CAAC,MAAM,CACZ;AACD,YAAA,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CACxD,IAAI,CAAC,MAAM,EACX,IAAI,EACJ,eAAe,EACf,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,KAAA,CAAO,EACrB,IAAI,CAAC,MAAM,CACZ;AACD,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE;AAC3B,gBAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC;AACjC,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC;AAC9C,gBAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC;YAClC;AACA,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI;QAC9B;QACA,IAAI,UAAU,EAAE;AACd,YAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;AAC1D,gBAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,MAAM,CAAC;AACrD,oBAAA,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,MAAM,CAAC;YACjE;QACF;IACF;IAEA,eAAe,CAAC,MAAc,EAAE,KAAc,EAAA;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;IACnD;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE;AAEnC,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;AAC1D,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI;AAC9B,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI;AACxB,YAAA,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG;gBACxB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,QAAQ,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AACpD,aAAA,CAAC;QACJ;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;IAC7B;IAEA,UAAU,GAAA;AACR,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;IAC1D;AAEA,IAAA,WAAW,CAAC,MAAc,EAAA;QASxB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,SAAS;QAC3B,OAAO;AACL,YAAA,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AAC1B,YAAA,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;YAC5B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,YAAA,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;SACzB;IACH;IAEA,cAAc,GAAA;AACZ,QAAA,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;IAChC;AAEA,IAAA,cAAc,CAAC,GAA4B,EAAA;AACzC,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,GAAG,EAAE;QAC7B,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;QACpD,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACxD,QAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;AAC1D,YAAA,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,MAAM,CAAC;QACtD;IACF;IAEA,WAAW,GAAA;QACT,MAAM,KAAK,GAA0B,KAAK,CAAC,IAAI,CAC7C,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CACxC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACV,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC;YAEjE,OAAO;gBACL,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,gBAAA,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,SAAS;AAC9C,gBAAA,eAAe,EAAE,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,SAAS;aACxD;AACH,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,KAAK,GAA0B,IAAI,CAAC;AACvC,aAAA,QAAQ;AACR,aAAA,GAAG,CAAC,CAAC,CAAC,MAAM;YACX,EAAE,EAAE,CAAC,CAAC,EAAE;AACR,YAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5D,YAAA,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;YAC5D,MAAM,EAAE,CAAC,CAAC,MAAM;AACjB,SAAA,CAAC,CAAC;AACL,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;IACzB;AAEA,IAAA,MAAM,QAAQ,GAAA;QACZ,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;AACjE,QAAA,IAAI,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE;AAC3B,YAAA,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;gBAClC,MAAM,KAAK,GAAG,MAAK;oBACjB,IAAI,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE;AACzD,wBAAA,OAAO,EAAE;oBACX;yBAAO;AACL,wBAAA,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;oBACvB;AACF,gBAAA,CAAC;AACD,gBAAA,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;AACvB,YAAA,CAAC,CAAC;QACJ;QAEA,MAAM,MAAM,GAAG,MAAc;AAC3B,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;AACvD,gBAAA,IAAI,CAAC,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC;AAAE,oBAAA,OAAO,KAAK;AAC9C,gBAAA,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AAAE,oBAAA,OAAO,KAAK;YACtC;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC;AACD,QAAA,IAAI,MAAM,EAAE;YAAE;AACd,QAAA,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;YAClC,MAAM,KAAK,GAAG,MAAK;AACjB,gBAAA,IAAI,MAAM,EAAE;AAAE,oBAAA,OAAO,EAAE;;AAClB,oBAAA,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;AAC5B,YAAA,CAAC;AACD,YAAA,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;AACvB,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,MAAM,kBAAkB,CACtB,WAAmB,EACnB,OAGC,EAAA;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC;AACrD,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC;QACzE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;AAC5C,YAAA,GAAG,CAAC,OAAO,GAAG,OAAO;AACvB,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,oCAAoC,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACzE,QAAA,MAAM,OAAO;IACf;IAEQ,oCAAoC,CAC1C,MAAc,EACd,aAAgC,EAAA;QAEhC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE;AAC9B,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC;QACA,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,CACnD,MAAM,EACN,aAAa,CACd;IACH;AAEA,IAAA,UAAU,CAAC,OAAgB,EAAA;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;QACtB,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IAEA,YAAY,GAAA;QACV,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,QAAQ,GAAG,KAAK;AACpB,QAAA,OAAO,MAAK;AACV,YAAA,IAAI,QAAQ;gBAAE;YACd,QAAQ,GAAG,IAAI;YACf,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,iBAAiB,EAAE;AAC1B,QAAA,CAAC;IACH;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YAClB;QACF;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QACpB;AAAO,aAAA,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE;AAClC,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACrB;IACF;IAEA,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA,IAAA,oBAAoB,CAAC,MAAc,EAAA;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC;IAChD;AAEA,IAAA,qBAAqB,CAAC,MAAc,EAAA;AAClC,QAAA,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,MAAM,CAAC;IAC/D;AAEA,IAAA,cAAc,CAAC,OAAiB,EAAA;AAC9B,QAAA,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,CAAC;IACjD;AAEA,IAAA,WAAW,CACT,UAAkB,EAClB,QAAgB,EAChB,OAA2B,EAAA;QAE3B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;QAC7C,IAAI,CAAC,QAAQ,EAAE,OAAO;YAAE;AACxB,QAAA,IAAI,CAAC,OAAO,CACV,EAAE,OAAO,EAAE,EAAE,CAAC,QAAQ,GAAG,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,EAAE,EACpD,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAC1B;IACH;IAEA,OAAO,CACL,OAGC,EACD,IAA2B,EAAA;AAE3B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,OAAO,EAAE,MAAM,IAAI,EAAE;AACjC,YAAA,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,gBAAA,IAAI,CAAC,IAAI;oBAAE;AACX,gBAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;oBAC9C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;AACnC,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;wBAC9B,MAAM;AACN,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACrB,wBAAA,EAAE,EAAE,OAAO;wBACX,aAAa,EAAE,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpD,qBAAA,CAAC;gBACJ;YACF;AACA,YAAA,MAAM,IAAI,GAAG,OAAO,EAAE,OAAO,IAAI,EAAE;AACnC,YAAA,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAChD,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,gBAAA,IAAI,CAAC,IAAI;oBAAE;AACX,gBAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;oBAC9C,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;AACpC,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;wBAC9B,MAAM;AACN,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACtB,wBAAA,EAAE,EAAE,QAAQ;wBACZ,aAAa,EAAE,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACrD,qBAAA,CAAC;gBACJ;YACF;AACA,YAAA,IAAI,IAAI,EAAE,MAAM,EAAE;AAChB,gBAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;AAC1D,oBAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC;gBAChD;YACF;QACF;gBAAU;AACR,YAAA,YAAY,EAAE;QAChB;IACF;IAEA,MAAM,CAAC,GAAoB,EAAE,QAAkB,EAAA;QAC7C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;AAC1D,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QACjE,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YAC3C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAE;gBACjD,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,IAAI,EAAE,cAAc,CAAC;gBAClE,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAC5C,MAAM,EACN,IAAI,EACJ,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,EAC9B,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAC/B;gBACD,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;AACjE,gBAAA,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE;AACrD,oBAAA,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,EAAE;AACrB,wBAAA,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CACrC,GAAG,CAAC,EAAE,EACN,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAC/B;oBACH;gBACF;AACA,gBAAA,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI;AAC9B,gBAAA,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI;AACxB,gBAAA,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG;oBACxB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,oBAAA,QAAQ,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AACpD,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC;AACtC,gBAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC;YAChD;QACF;;AAGA,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE;AACzB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;YACtD,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AACzC,gBAAA,IAAI,CAAC,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,CAAC,CAAC,MAAM,CAAA,CAAE,CAAC;AAC5D,gBAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AACpD,gBAAA,IAAI,CAAC,GAAG;oBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,kBAAA,EAAqB,IAAI,CAAC,UAAU,CAAA,CAAE,CAAC;gBACjE,IAAI,GAAG,CAAC,YAAY;AAAE,oBAAA,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACjD,gBAAA,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC;oBAChC,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,iBAAA,CAAC;AACF,gBAAA,MAAM,EAAE,GAAqB;oBAC3B,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,oBAAA,MAAM,EAAE,EAAE;AACV,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,KAAK,EAAE,EAAE;oBACT,OAAO;oBACP,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,oBAAA,MAAM,EAAE;wBACN,GAAG,GAAG,CAAC,MAAM;wBACb,GAAG,IAAI,CAAC,MAAM;AACd,wBAAA,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM;AACpB,qBAAA;AACD,oBAAA,MAAM,EAAE,CAAC;oBACT,iBAAiB,EAAE,IAAI,GAAG,EAAE;oBAC5B,gBAAgB,EAAE,IAAI,GAAG,EAAE;AAC3B,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,KAAK,EAAE;AACL,wBAAA,IAAI,EAAE,CAAC;AACP,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,QAAQ,EAAE,CAAC;AACZ,qBAAA;oBACD,iBAAiB,EAAE,IAAI,GAAG,EAAE;iBAC7B;gBACD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;AACzC,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAChE,EAAE,CAAC,MAAM,CACV;AACD,gBAAA,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE;gBAClC,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CACxD,EAAE,CAAC,MAAM,EACT,EAAE,EACF,eAAe,EACf,CAAA,EAAG,EAAE,CAAC,MAAM,CAAA,KAAA,CAAO,EACnB,IAAI,CAAC,MAAM,CACZ;AACD,gBAAA,IAAI,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE;AACzB,oBAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC;AACjC,oBAAA,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC;AAC1C,oBAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC;gBAClC;AACA,gBAAA,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI;YAC5B;iBAAO;AACL,gBAAA,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;AAC1B,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;oBACnB,QAAQ,CAAC,KAAK,GAAG;AACf,wBAAA,IAAI,EAAE,CAAC;AACP,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,QAAQ,EAAE,CAAC;qBACZ;gBACH;YACF;QACF;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC5C,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAuB;AAClD,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;AACrB,YAAA,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAU;YACjE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YACxB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;QACvC;AAEA,QAAA,MAAM,cAAc,GAAG,IAAI,GAAG,EAAoC;AAClE,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;AACrB,YAAA,MAAM,IAAI,GACR,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAuB;AACvE,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAU;AAC3D,YAAA,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE,CAAC;YACjD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;YAC/B,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;QAC3C;AAEA,QAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,wBAAwB,CACtD,GAAG,EACH,QAAQ,EACR,IAAI,CAAC,WAAW,CACjB;QAED,MAAM,cAAc,GAA6C,EAAE;QACnE,KAAK,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,QAAQ,CAAC,GAAG,EAAE;YAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC;AACjE,YAAA,IACE,CAAC,UAAU;AACX,gBAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EACzD;AACA,gBAAA,cAAc,CAAC,MAAM,CAAC,GAAG,UAAU;YACrC;QACF;QAEA,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAC,GAAG,EAAE;YAC5C,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC;QACzD;AAEA,QAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,UAAU,CACxC,GAAG,EACH,QAAQ,EACR,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAC5C;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAEtC,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAuB;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AACnD,QAAA,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE;AAC5B,YAAA,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAU;YACjE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YACxB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;QACvC;QAEA,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,WAAW,EAAE;AAC3C,YAAA,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAU;YAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,YAAA,IAAI,CAAC,IAAI;gBAAE;YACX,IAAI,OAAO,GAAG,KAAK;YACnB,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBACxC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACxB,oBAAA,IAAI,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE;AACzB,wBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;wBAC1B,OAAO,GAAG,IAAI;oBAChB;gBACF;YACF;YACA,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAC9C,gBAAA,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,MAAM,CAAC;YAC/D;QACF;AAEA,QAAA,MAAM,cAAc,GAAG,IAAI,GAAG,EAAoC;AAClE,QAAA,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE;AAC5B,YAAA,MAAM,IAAI,GACR,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAuB;AACvE,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAU;AAC3D,YAAA,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE,CAAC;YACjD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;YAC/B,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;QAC3C;AAEA,QAAA,MAAM,SAAS,GAAG,CAAC,CAAe,EAAE,CAAe,KAAI;AACrD,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAAE,gBAAA,OAAO,IAAI;AACzB,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAAE,gBAAA,OAAO,KAAK;AAC1B,YAAA,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;AAAE,gBAAA,OAAO,KAAK;YACnC,KAAK,MAAM,CAAC,IAAI,CAAC;AAAE,gBAAA,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,oBAAA,OAAO,KAAK;AAC9C,YAAA,OAAO,IAAI;AACb,QAAA,CAAC;AAED,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAS;YACnC,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YACpC,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;AACrC,SAAA,CAAC;AACF,QAAA,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE;AACjC,YAAA,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAuB;AACzE,YAAA,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAuB;AACzE,YAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS;gBAC9B,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC1B,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AAC3B,aAAA,CAAC;AACF,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAU;AAClD,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAU;gBAClD,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;oBAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;oBAC1C,IAAI,GAAG,KAAK,SAAS;wBACnB,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;AAChD,yBAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,MAAM,CAAC;AAC1D,wBAAA,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,MAAM,CAAC;gBACjE;YACF;QACF;QAEA,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE;AACnC,gBAAA,MAAM,EAAE,eAAe;AACvB,gBAAA,eAAe,EAAE,cAAc;AAChC,aAAA,CAAC;QACJ;AAEA,QAAA,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE;AACrC,YAAA,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,MAAM,CAAC;QACtD;IACF;AACD;;MC5zBY,YAAY,CAAA;AACvB,IAAA,WAAA,CAAoB,QAAkB,EAAA;QAAlB,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAa;AAEzC,IAAA,QAAQ,CAAC,GAAoB,EAAA;QAC3B,MAAM,MAAM,GAAsB,EAAE;AACpC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;AACjC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU;;AAGjC,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA+B;AACvD,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAGxB;AAEH,QAAA,MAAM,mBAAmB,GAAG,CAC1B,CAAuB,KACmB;AAC1C,YAAA,IAAI,CAAC,CAAC;gBAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;AAC1C,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9C,YAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,IAAI,EAAE;AACxC,YAAA,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE;AACtD,YAAA,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE;AACzD,YAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAC5B,QAAA,CAAC;AAED,QAAA,MAAM,OAAO,GAAG,CAAC,IAAmC,KAClD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;QAEjD,MAAM,aAAa,GAAG,CACpB,WAA0C,EAC1C,WAA+B,EAC/B,QAAiB,KACK;AACtB,YAAA,IAAI,QAAQ;AAAE,gBAAA,OAAO,QAAQ;AAC7B,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW;AAAE,gBAAA,OAAO,WAAW;AACjE,YAAA,IAAI,WAAW;AACb,gBAAA,OAAO,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW;AAClE,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;AAED,QAAA,MAAM,OAAO,GAAG,CACd,IAAmC,EACnC,EAAW,KACA;AACX,YAAA,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,IAAI;AAC7B,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;YAC/C,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACvE,QAAA,CAAC;QAED,MAAM,SAAS,GAAG,CAChB,KAA0B,EAC1B,IAAY,EACZ,OAAe,EACf,IAAmC,KACjC;AACF,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC7C,QAAA,CAAC;;AAGD,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE;YACzB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;gBACzB,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC,MAAM,CAAA,CAAE,EAAE;oBAChE,MAAM,EAAE,CAAC,CAAC,MAAM;AACjB,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YACvB;YACA,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AACzB,YAAA,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;AACjD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YAClD,IAAI,CAAC,QAAQ,EAAE;gBACb,SAAS,CACP,OAAO,EACP,mBAAmB,EACnB,qBAAqB,CAAC,CAAC,MAAM,CAAA,CAAE,EAC/B,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CACvC;gBACD;YACF;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACtD,gBAAA,SAAS,CACP,OAAO,EACP,kBAAkB,EAClB,CAAA,iBAAA,EAAoB,QAAQ,CAAC,UAAU,kBAAkB,CAAC,CAAC,MAAM,CAAA,CAAE,CACpE;YACH;QACF;;AAGA,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB;;AAE/C,QAAA,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU;AACxC,QAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE;YACzB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;gBACrB,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAA,CAAE,EAAE;oBAC7D,MAAM,EAAE,CAAC,CAAC,EAAE;AACb,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACnB;AACA,YAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AAC7C,YAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AAC7C,YAAA,IAAI,CAAC,OAAO;gBACV,SAAS,CACP,OAAO,EACP,qBAAqB,EACrB,QAAQ,CAAC,CAAC,EAAE,CAAA,oBAAA,CAAsB,EAClC;oBACE,MAAM,EAAE,CAAC,CAAC,EAAE;AACb,iBAAA,CACF;AACH,YAAA,IAAI,CAAC,OAAO;gBACV,SAAS,CACP,OAAO,EACP,qBAAqB,EACrB,QAAQ,CAAC,CAAC,EAAE,CAAA,oBAAA,CAAsB,EAClC;oBACE,MAAM,EAAE,CAAC,CAAC,EAAE;AACb,iBAAA,CACF;;AAEH,YAAA,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI;AACjD,gBACA,OAAO,EAAE,EAAE;aACZ;AACD,YAAA,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI;AACjD,gBAAA,MAAM,EAAE,GAET;YACD,MAAM,YAAY,GAAG;kBACjB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;kBAC9B,SAAS;YACb,MAAM,YAAY,GAAG;AACnB,kBAAE,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;kBAC7C,SAAS;;AAEb,YAAA,MAAM,eAAe,GAAG,aAAa,CACnC,YAAY,EACZ,YAAY,EACZ,CAAC,CAAC,MAAM,CACT;YACD,MAAM,IAAI,GAAG;kBACT,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe;kBACvC,SAAS;YACb,IAAI,CAAC,IAAI,EAAE;gBACT,SAAS,CACP,OAAO,EACP,cAAc,EACd,QAAQ,CAAC,CAAC,EAAE,CAAA,wBAAA,CAA0B,EACtC;oBACE,MAAM,EAAE,CAAC,CAAC,EAAE;AACb,iBAAA,CACF;YACH;YAEA,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE;AACxC,oBAAA,SAAS,CACP,OAAO,EACP,gBAAgB,EAChB,CAAA,KAAA,EAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,MAAM,CAAC,MAAM,eAAe,OAAO,CAAC,MAAM,CAAA,CAAE,EAC5E,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAClE;gBACH;AACA,gBAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC5D,gBAAA,IACE,WAAW,CAAC,MAAM,GAAG,CAAC;oBACtB,eAAe;AACf,oBAAA,CAAC,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,EACtC;AACA,oBAAA,SAAS,CACP,OAAO,EACP,sBAAsB,EACtB,CAAA,KAAA,EAAQ,CAAC,CAAC,EAAE,CAAA,MAAA,EAAS,eAAe,CAAA,0BAAA,EAClC,OAAO,CAAC,MACV,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,EAAA,EAAK,WAAW,CAAC,IAAI,CACtC,GAAG,CACJ,0BAA0B,EAC3B;wBACE,MAAM,EAAE,CAAC,CAAC,EAAE;wBACZ,MAAM,EAAE,OAAO,CAAC,MAAM;AACtB,wBAAA,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;AACvB,wBAAA,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;wBAC/B,eAAe;AAChB,qBAAA,CACF;gBACH;YACF;YACA,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE;AACvC,oBAAA,SAAS,CACP,OAAO,EACP,eAAe,EACf,CAAA,KAAA,EAAQ,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,MAAM,CAAC,MAAM,eAAe,OAAO,CAAC,MAAM,CAAA,CAAE,EAC3E,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CACjE;gBACH;;AAEA,gBAAA,IAAI,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AAClD,oBAAA,SAAS,CACP,OAAO,EACP,eAAe,EACf,CAAA,KAAA,EAAQ,CAAC,CAAC,EAAE,0BAA0B,OAAO,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE,EACzE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CACjE;gBACH;AACA,gBAAA,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACjE,gBAAA,IAAI,UAAU,IAAI,eAAe,EAAE;oBACjC,IAAI,OAAO,EAAE;AACX,wBAAA,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAGrC;AACb,wBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAClC,8BAAE,OAAO,CAAC,WAAW;AACrB,8BAAE,CAAC,eAAe,CAAC;wBACrB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE;AAChC,4BAAA,SAAS,CACP,OAAO,EACP,qBAAqB,EACrB,CAAA,KAAA,EAAQ,CAAC,CAAC,EAAE,CAAA,aAAA,EAAgB,MAAM,CAAC,IAAI,CACrC,GAAG,CACJ,CAAA,iCAAA,EAAoC,OAAO,CAAC,MAAM,CAAA,CAAA,EACjD,CAAC,CAAC,MAAM,CAAC,MACX,CAAA,EAAA,EAAK,UAAU,GAAG,EAClB;gCACE,MAAM,EAAE,CAAC,CAAC,EAAE;gCACZ,MAAM,EAAE,OAAO,CAAC,MAAM;AACtB,gCAAA,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;AACtB,gCAAA,QAAQ,EAAE,UAAU;AACpB,gCAAA,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAClC,6BAAA,CACF;wBACH;oBACF;yBAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE;wBAChD,SAAS,CACP,OAAO,EACP,qBAAqB,EACrB,QAAQ,CAAC,CAAC,EAAE,CAAA,MAAA,EAAS,eAAe,CAAA,yBAAA,EAA4B,OAAO,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,EAAA,EAAK,UAAU,CAAA,wBAAA,CAA0B,EAC1I;4BACE,MAAM,EAAE,CAAC,CAAC,EAAE;4BACZ,MAAM,EAAE,OAAO,CAAC,MAAM;AACtB,4BAAA,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;AACtB,4BAAA,QAAQ,EAAE,UAAU;4BACpB,eAAe;AAChB,yBAAA,CACF;oBACH;gBACF;YACF;;AAGA,YAAA,MAAM,UAAU,GAAG,CAAA,EAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,EAAA,EAAK,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC3D,YAAA,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;YAEvE,IAAI,OAAO,EAAE;AACX,gBAAA,MAAM,UAAU,GAAG,cAAc,CAC/B,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAC1D,CAAC,CAAC,MAAM,CAAC,MAAM,CAChB;AACD,gBAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC/D,oBAAA,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC;gBAChC;YACF;QACF;QAEA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,aAAa,EAAE;AACxC,YAAA,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACzC,MAAM,CAAC,IAAI,CAAC;AACV,oBAAA,KAAK,EAAE,SAAS;AAChB,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,OAAO,EAAE,CAAA,MAAA,EAAS,GAAG,CAAA,KAAA,EAAQ,KAAK,CAAA,iCAAA,CAAmC;oBACrE,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAChE,iBAAA,CAAC;YACJ;QACF;QAEA,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,EAAE,MAAM,EAAE;IACjE;IAEA,KAAK,CAAC,GAAoB,EAAE,IAAmB,EAAA;AAC7C,QAAA,OAAO,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;IACtD;AAEA,IAAA,UAAU,CACR,GAAoB,EACpB,QAGC,EACD,UAAkB,EAClB,WAAoB,EAAA;;QAGpB,MAAM,UAAU,GAA2B,EAAE;QAC7C,MAAM,WAAW,GAA2B,EAAE;AAE9C,QAAA,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC5D,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC;YAChE,MAAM,SAAS,GAAG;AAChB,kBAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM;kBACxC,SAAS;YACb,MAAM,MAAM,GAAG;kBACX,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM;kBAC3C,SAAS;AACb,YAAA,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,SAAS;QAC3C;AAEA,QAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC9D,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC;YAChE,MAAM,SAAS,GAAG;AAChB,kBAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM;kBACxC,SAAS;AACb,YAAA,MAAM,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS;AACpE,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM;AACzD,YAAA,WAAW,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAI,SAAS;QAC7C;QAEA,OAAO;AACL,YAAA,EAAE,EAAE,UAAU;YACd,WAAW;AACX,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,OAAO,EAAE,WAAW;AACpB,YAAA,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE;SAC6B;IACxD;AACD;;ACvWD;;;;AAIG;MACU,WAAW,CAAA;IACtB,WAAA,CACqB,YAA0B,EAC7C,OAAiB,EAAA;QADE,IAAA,CAAA,YAAY,GAAZ,YAAY;AAG/B,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC;IACtC;AAEA,IAAA,SAAS,CACP,MAAc,EACd,MAA+B,EAC/B,OAA2B,EAAA;AAE3B,QAAA,IAAI,OAAO,EAAE,GAAG,EAAE;;YAEhB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AACrD,YAAA,IAAI;gBACF,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;YAC7C;oBAAU;AACR,gBAAA,YAAY,EAAE;YAChB;QACF;aAAO;YACL,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;QAC7C;IACF;AAEA,IAAA,eAAe,CACb,MAAc,EACd,KAAc,EACd,OAA2B,EAAA;AAE3B,QAAA,IAAI,OAAO,EAAE,GAAG,EAAE;;YAEhB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AACrD,YAAA,IAAI;gBACF,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC;YAClD;oBAAU;AACR,gBAAA,YAAY,EAAE;YAChB;QACF;aAAO;YACL,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC;QAClD;IACF;IAEA,EAAE,CACA,KAAQ,EACR,OAA+B,EAAA;QAE/B,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;IAC7C;IAEA,SAAS,CAAC,MAAc,EAAE,MAAc,EAAA;QACtC,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACpD;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;IACrC;AAEA,IAAA,cAAc,CAAC,OAAiB,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC;IAC3C;AAEA,IAAA,WAAW,CACT,UAAkB,EAClB,QAAgB,EAChB,OAA2B,EAAA;QAE3B,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC;IAC9D;IAEA,OAAO,GAAA;;IAEP;IAEA,MAAM,CAAC,UAAoB,EAAE,OAAiB,EAAA;AAC5C,QAAA,IAAI,OAAO;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC;IACtC;AAEA;;;;;;AAMG;AACH,IAAA,MAAM,WAAW,CACf,MAAc,EACd,OAA2C,EAAA;AAE3C,QAAA,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,MAAM,EAAE;AACjD,YAAA,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,IAAI,KAAK;YAC1D,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;IACJ;AAEA;;;;AAIG;IACH,MAAM,WAAW,CAAC,MAAc,EAAA;QAC9B,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC;IACpD;AAEA,IAAA,UAAU,CAAC,OAAgB,EAAA;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;IACvC;AACD;;AC9GM,MAAM,eAAe,GAA6C;AACvE,IAAA,EAAE,EAAE,SAAS;AACb,IAAA,WAAW,EAAE,SAAS;IACtB,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM;AAC5B,QAAA,MAAM,eAAe,CAAC,MAAM,EAAE,GAAG,EAAA;YAC/B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;AACnC,YAAA,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAClC,gBAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,oBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1D;QACF,CAAC;QACD,eAAe,CAAC,KAAK,EAAE,KAAK,EAAA;AAC1B,YAAA,IAAI;gBACF,MAAM,CAAC,GAAQ,KAAK;;AAEpB,gBAAA,MAAM,MAAM,GAAG,CAAC,EAAE,MAAM;gBACxB,IAAI,MAAM,IAAI,OAAO,KAAK,GAAG,MAAM,CAAC,KAAK,UAAU,EAAE;AACnD,oBAAA,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAA4B;;oBAEnD,IAAI,IAAI,GAAU,EAAE;AACpB,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC;AAAE,wBAAA,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AACzC,yBAAA,IAAI,CAAC,EAAE,IAAI,KAAK,SAAS;AAAE,wBAAA,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,yBAAA,IAAI,CAAC,EAAE,MAAM,KAAK,SAAS;AAAE,wBAAA,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AACnD,oBAAA,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;oBAChB;gBACF;AACA,gBAAA,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACnE;AAAE,YAAA,MAAM;AACN,gBAAA,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACtE;QACF,CAAC;KACF,CAAC;AACF,IAAA,MAAM,EAAE,EAAE,gBAAgB,EAAE,QAAQ,EAAE;;;MC1B3B,iBAAiB,GAAG,CAC/B,QAAkB,MAId;AACJ,IAAA,EAAE,EAAE,WAAW;AACf,IAAA,WAAW,EAAE,WAAW;AACxB,IAAA,YAAY,EAAE,CAAC,IAAI,KAAI;AACrB,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;IACxE,CAAC;AACD,IAAA,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,KAAI;AAC1B,QAAA,IAAI,KAA+B;AACnC,QAAA,IAAI,KAA+B;QACnC,OAAO;YACL,WAAW,EAAE,MAAK;gBAChB,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;;gBAE/C,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;AAC9B,oBAAA,KAAK,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAC3C,IAAI,CAAC,QAAQ,CAAC,OAAO,CACtB,EAAE;AACD,wBAAA,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE;oBAI1D;AACF,gBAAA,CAAC,CAAC;gBACF,KAAK,CAAC,MAAM,EAAE;YAChB,CAAC;AACD,YAAA,eAAe,EAAE,CAAC,MAAM,EAAE,GAAG,KAAI;AAC/B,gBAAA,IAAI,CAAC,KAAK;oBAAE;;gBAEZ,MAAM,OAAO,GAA4C,EAAE;AAC3D,gBAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAClE,oBAAA,IAAI,QAAQ,IAAI,MAAM,EAAE;AACtB,wBAAA,MAAM,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;wBACjE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;oBACxC;gBACF;AACA,gBAAA,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACnD,oBAAA,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;gBAC9B;;AAEA,gBAAA,KAAK,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AACpE,oBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;oBACjD,IAAI,CAAC,KAAK,SAAS;AAAE,wBAAA,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC7C;YACF,CAAC;YACD,aAAa,EAAE,MAAK;AAClB,gBAAA,IAAI,KAAK;AAAE,oBAAA,KAAK,EAAE;YACpB,CAAC;YACD,OAAO,EAAE,MAAK;AACZ,gBAAA,IAAI,KAAK;AAAE,oBAAA,KAAK,EAAE;gBAClB,KAAK,EAAE,OAAO,EAAE;YAClB,CAAC;SACF;IACH,CAAC;AACF,CAAA;;ACjED;AACA,MAAM,OAAO,GAAG,CAAC,CAAM,KACrB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAI,CAAc,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAElD,MAAM,SAAS,GAAG,CAChB,CAAoB,EACpB,CAAoB,KACI;AACxB,IAAA,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;AACrB,IAAA,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;AACrB,IAAA,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM;AAAE,QAAA,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;AAC5C,IAAA,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAClE,IAAA,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,CAAC,EAAE,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC;AAC1C,IAAA,OAAO,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,CAAM,KACzB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAI,CAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAEvE,MAAM,aAAa,GAAG,CACpB,CAAsB,EACtB,CAAsB,KACI;AAC1B,IAAA,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;AACzB,IAAA,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;AACzB,IAAA,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM;AAAE,QAAA,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;AAC5C,IAAA,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAClE,IAAA,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,CAAC,EAAE,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC;IAC1C,OAAO;AACL,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;AACnC,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;KACpC;AACH,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,GAAW,EAAE,GAAW,KAChD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACjC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AACjE,MAAM,GAAG,GAAG,CAAC,IAAY,KAAI;AAC3B,IAAA,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC;AACvB,IAAA,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,UAAU,MAAM,CAAC,IAAI,UAAU;AAClE,CAAC;AAED;AACA,SAAS,cAAc,CAAC,GAAQ,EAAE,OAAe,EAAA;AAC/C,IAAA,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG;AAAE,QAAA,OAAO,GAAG;AAC3C,IAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,SAAS;IAC9C,MAAM,KAAK,GAAG;SACX,KAAK,CAAC,GAAG;SACT,KAAK,CAAC,CAAC;SACP,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxD,IAAI,GAAG,GAAQ,GAAG;AAClB,IAAA,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;AACvB,QAAA,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;AAAE,YAAA,OAAO,SAAS;AACvD,QAAA,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IAChB;AACA,IAAA,OAAO,GAAG;AACZ;AAEA,SAAS,cAAc,CAAC,GAAQ,EAAE,OAAe,EAAE,KAAU,EAAA;AAC3D,IAAA,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG;AAAE,QAAA,OAAO,KAAK;AAC7C,IAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,GAAG;IACxC,MAAM,KAAK,GAAG;SACX,KAAK,CAAC,GAAG;SACT,KAAK,CAAC,CAAC;SACP,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACxD,IAAA,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC;IACjC,IAAI,GAAG,GAAQ,IAAI;AACnB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,GAAG;AAAE,gBAAA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;;AACjD,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK;QACvB;aAAO;AACL,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;YACrB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE;;gBAEvC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC5B,GAAG,CAAC,GAAG,CAAC;AACN,oBAAA,OAAO,OAAO,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE;YACrE;AACA,YAAA,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QAChB;IACF;AACA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,iBAAiB,CAAC,GAAQ,EAAE,OAAe,EAAA;AAClD,IAAA,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG;AAAE,QAAA,OAAO,SAAS;AACjD,IAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,GAAG;IACxC,MAAM,KAAK,GAAG;SACX,KAAK,CAAC,GAAG;SACT,KAAK,CAAC,CAAC;SACP,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACxD,IAAA,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC;IACjC,IAAI,GAAG,GAAQ,IAAI;AACnB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACzC,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;AACpB,QAAA,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;AAClD,QAAA,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IAChB;IACA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACtB,MAAM,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;AACxD,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AAAE,YAAA,GAAG,CAAC,MAAM,CAAC,GAAa,EAAE,CAAC,CAAC;IACxD;AAAO,SAAA,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AACzC,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB;AACA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,SAAS,CAAC,CAAM,EAAE,CAAM,EAAA;AAC/B,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7D,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;AACxC,QAAA,MAAM,GAAG,GAAQ,EAAE,GAAG,CAAC,EAAE;AACzB,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACtC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;QAC9C;AACA,QAAA,OAAO,GAAG;IACZ;AACA,IAAA,OAAO,CAAC;AACV;AAEA;AACA,MAAM,aAAa,GAAG,CAAC,CAAM,KAA8B;AACzD,IAAA,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,QAAA,OAAO,KAAK;IACrD,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IACtC,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI;AACrD,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,CAAM,KAAa;IACjC,IAAI,CAAC,KAAK,IAAI;AAAE,QAAA,OAAO,IAAI;AAC3B,IAAA,MAAM,CAAC,GAAG,OAAO,CAAC;IAClB,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,SAAS;AAAE,QAAA,OAAO,IAAI;AACpE,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAC5C,IAAI,aAAa,CAAC,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;AAC3D,IAAA,OAAO,KAAK;AACd,CAAC;AAED;AACO,MAAM,iBAAiB,GAAG;AAC/B,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,GAAG,EAAE,EAAE;;AAGF,MAAM,oBAAoB,GAAG;AAClC,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,eAAe,EAAE,CAAC;AAClB,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,kBAAkB,EAAE,CAAC;AACrB,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,QAAQ,EAAE,CAAC;;AAGN,MAAM,kBAAkB,GAAG;AAChC,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,GAAG,EAAE,CAAC;;AAGF,SAAU,uBAAuB,CAAC,EAAW,EAAA;AACjD,IAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC;AACjC,IAAA,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC;IAE7C,QAAQ,CAAC,YAAY,CACnB;AACE,QAAA,EAAE,EAAE,YAAY;AAChB,QAAA,QAAQ,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,UAAU,EAAE,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,OAAO,EAAE;KACtE,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,CACjD;IAED,QAAQ,CAAC,YAAY,CACnB;AACE,QAAA,EAAE,EAAE,WAAW;QACf,QAAQ,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,SAAS;QACvC,UAAU,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,OAAO,EAAE;KACpE,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,CACjD;IAED,QAAQ,CAAC,YAAY,CACnB;AACE,QAAA,EAAE,EAAE,aAAa;QACjB,QAAQ,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ;QACtC,UAAU,EAAE,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,OAAO,EAAE;KACtE,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,CACjD;;IAGD,QAAQ,CAAC,YAAY,CACnB;AACE,QAAA,EAAE,EAAE,aAAa;QACjB,QAAQ,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;QAC1B,UAAU,EAAE,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,OAAO,EAAE;AACtE,KAAA,EACD,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB;IAED,QAAQ,CAAC,YAAY,CACnB;AACE,QAAA,EAAE,EAAE,WAAW;QACf,QAAQ,EAAE,CAAC,CAAC,KACV,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAChB,CAAC,CAAC,MAAM,KAAK,CAAC;AACd,YAAA,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,CAAC;QACvC,UAAU,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,OAAO,EAAE;KACpE,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,CACjD;;IAGD,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,KAAI;AACzD,QAAA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAA6B;AAC3D,IAAA,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC,KAAK,KAAI;QAC7D,MAAM,CAAC,GAAG,KAAiC;AAC3C,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5E,IAAA,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAExE,IAAA,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEhE,IAAA,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;AAExE,IAAA,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;;IAGxE,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC,KAAI;AAC5D,QAAA,OAAO,CAAW;AACpB,IAAA,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC,KAAI;QAC5D,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,YAAA,OAAO,CAAC;AACnC,QAAA,OAAO,SAAS;AAClB,IAAA,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC,KAAI;AAC1D,QAAA,OAAO,CAAY;AACrB,IAAA,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC,KAAI;QAC1D,IAAI,OAAO,CAAC,KAAK,SAAS;AAAE,YAAA,OAAO,CAAC;AACpC,QAAA,OAAO,SAAS;AAClB,IAAA,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC,KAAI;AAC3D,QAAA,OAAO,CAAW;AACpB,IAAA,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC,KAAI;QAC3D,IAAI,OAAO,CAAC,KAAK,QAAQ;AAAE,YAAA,OAAO,CAAC;AACnC,QAAA,OAAO,SAAS;AAClB,IAAA,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC,KAAI;AAC1D,QAAA,OAAO,CAA6B;AACtC,IAAA,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC,KAAI;AAC1D,QAAA,IAAI;AACF,YAAA,IACE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAChB,CAAC,CAAC,MAAM,KAAK,CAAC;AACd,gBAAA,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,CAAC,EACrC;AACA,gBAAA,OAAO,CAA6B;YACtC;AACA,YAAA,OAAO,SAAS;QAClB;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,SAAS;QAClB;AACF,IAAA,CAAC,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,0BAA0B;AAC9B,QAAA,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM;YAClE,KAAK;YACL,KAAK;AACN,SAAA,CAAC,CAAC;AACJ,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,6BAA6B;AACjC,QAAA,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM;YACrE,KAAK;YACL,KAAK;AACN,SAAA,CAAC,CAAC;AACJ,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,2BAA2B;AAC/B,QAAA,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM;YACnE,KAAK;YACL,KAAK;AACN,SAAA,CAAC,CAAC;AACJ,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,mBAAmB;AACvB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;AAC/B,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;AACjC,QAAA,IAAI,EAAE,CAAC,GAAsB,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AAClE,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,mBAAmB;AACvB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;AAChC,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAsB,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AAClE,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,iBAAiB;AACrB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;AAC9B,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;AAChC,QAAA,IAAI,EAAE,CAAC,GAAuB,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AACpE,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,mBAAmB;AACvB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;AAChC,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAmB,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;AACvD,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,iBAAiB;AACrB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;AAC9B,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;AAChC,QAAA,IAAI,EAAE,CAAC,GAAwC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;AAC5E,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,sBAAsB;AAC1B,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AAC/B,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAsB,KAAI;AAC/B,YAAA,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE;AACxB,YAAA,IAAI;gBACF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACzB,gBAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;YACxB;AAAE,YAAA,MAAM;AACN,gBAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE;YAC9B;QACF,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,sBAAsB;AAC1B,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AACjC,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AAChC,QAAA,IAAI,EAAE,CAAC,GAAqB,KAAI;AAC9B,YAAA,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QAC7C,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,YAAY;AAChB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE;AACvE,QAAA,OAAO,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAkD,KAAI;YAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YAChC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YAChC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE;QAC/D,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,kBAAkB;AACtB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,MAAM,EAAE,cAAc;AACtB,YAAA,MAAM,EAAE,cAAc;AACtB,YAAA,MAAM,EAAE,YAAY;AACrB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;AAClC,QAAA,aAAa,EAAE;AACb,YAAA,MAAM,EAAE,GAAG;AACZ,SAAA;AACD,QAAA,IAAI,EAAE,CAAC,GAA2D,KAAI;AACpE,YAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;YAChD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;AACjC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;AACxC,YAAA,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG;iBACtB,IAAI,CAAC,CAAC;AACN,iBAAA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/D,YAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;QACvB,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,eAAe;AACnB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,KAAK,EAAE,cAAc;AACrB,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,KAAK,EAAE,YAAY;AACpB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAON,KAAI;YACH,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;YACxC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;YACpC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;YACpC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACzB,gBAAA,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;gBAC1D,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,KAAK,CAAC;AACrC,gBAAA,OAAO;sBACH,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;sBACvD,CAAC;AACP,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;QACvB,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,WAAW;AACf,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,SAAS,EAAE,0BAA0B;AACrC,YAAA,CAAC,EAAE,cAAc;AACjB,YAAA,CAAC,EAAE,cAAc;AAClB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE;;AAEnC,QAAA,aAAa,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AAC/C,QAAA,IAAI,EAAE,CAAC,GAAoD,KAAI;YAC7D,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9B,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,iBAAiB,CAAC,GAAG,CAAC;AAEzD,YAAA,MAAM,SAAS,GAA0C;AACvD,gBAAA,CAAC,iBAAiB,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/C,gBAAA,CAAC,iBAAiB,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/C,gBAAA,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,gBAAA,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,gBAAA,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,gBAAA,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,gBAAA,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,gBAAA,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,gBAAA,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,gBAAA,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,gBAAA,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,gBAAA,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,gBAAA,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;aAC5C;YACD,IAAI,SAAS,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAE3D,YAAA,MAAM,aAAa,GAA8C;AAC/D,gBAAA,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,GAAG,KAC3B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC7C,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,GAAG,KAAI;oBAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACvD,oBAAA,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC;gBAC1C,CAAC;AACD,gBAAA,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,GAAG,KAC9B,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACzD,gBAAA,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,GAAG,KAC9B,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;aAC1D;AACD,YAAA,IAAI,aAAa,CAAC,EAAE,CAAC,KAAK,SAAS;AACjC,gBAAA,OAAO,EAAE,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAE3C,YAAA,MAAM,UAAU,GAAqD;AACnE,gBAAA,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AACxC,gBAAA,CAAC,iBAAiB,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7C,gBAAA,CAAC,iBAAiB,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7C,gBAAA,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClD,gBAAA,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACjD,gBAAA,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;gBACjD,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrD,gBAAA,CAAC,iBAAiB,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;aACpD;AACD,YAAA,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC;AAC9D,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACxC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;gBAC9C,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACvD,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvD,gBAAA,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AACnC,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,cAAc;AAClB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,SAAS,EAAE,6BAA6B;AACxC,YAAA,CAAC,EAAE,cAAc;AACjB,YAAA,CAAC,EAAE,cAAc;AAClB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAoD,KAAI;AAC7D,YAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACtC,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,oBAAoB,CAAC,KAAK,CAAC;AAC9D,YAAA,MAAM,WAAW,GAAsD;AACrE,gBAAA,CAAC,oBAAoB,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AAChD,gBAAA,CAAC,oBAAoB,CAAC,eAAe,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;AACxD,gBAAA,CAAC,oBAAoB,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AACnD,gBAAA,CAAC,oBAAoB,CAAC,kBAAkB,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;AAC3D,gBAAA,CAAC,oBAAoB,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;AAC/C,gBAAA,CAAC,oBAAoB,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;aACnD;AACD,YAAA,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC;AACrE,YAAA,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;QACtE,CAAC;AACF,KAAA,CAAC;;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,YAAY;AAChB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,SAAS,EAAE,2BAA2B;AACtC,YAAA,CAAC,EAAE,aAAa;AAChB,YAAA,CAAC,EAAE,aAAa;AACjB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,aAAa,EAAE,EAAE,SAAS,EAAE,kBAAkB,CAAC,GAAG,EAAE;AACpD,QAAA,IAAI,EAAE,CAAC,GAAyD,KAAI;AAClE,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,kBAAkB,CAAC,GAAG,CAAC;AAC1D,YAAA,IAAI,EAAE,KAAK,kBAAkB,CAAC,GAAG,EAAE;gBACjC,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAClC,gBAAA,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACrC;YACA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACtD,YAAA,MAAM,SAAS,GAAwD;AACrE,gBAAA,CAAC,kBAAkB,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;AAC1C,gBAAA,CAAC,kBAAkB,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;gBACzC,CAAC,kBAAkB,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;aACxD;AACD,YAAA,MAAM,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,kBAAkB,CAAC,GAAG,CAAC;YAC7D,OAAO;AACL,gBAAA,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;aAChE;QACH,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,oBAAoB;AACxB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AAC/B,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;AACjC,QAAA,IAAI,EAAE,CAAC,GAAsB,MAAM;YACjC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM;SACtC,CAAC;AACH,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,gBAAgB;AACpB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE;AAClD,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AAChC,QAAA,IAAI,EAAE,CAAC,GAAmC,KAAI;AAC5C,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE;YACjD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YAChC,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE;YACpD,IAAI,EAAE,KAAK,OAAO;gBAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE;YACpD,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3B,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,mBAAmB;AACvB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE;AACnD,QAAA,OAAO,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE;AACnC,QAAA,IAAI,EAAE,CAAC,GAAoC,KAAI;YAC7C,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;YAClC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QAChC,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,kBAAkB;AACtB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,aAAa,EAAE;AACtD,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AAChC,QAAA,IAAI,EAAE,CAAC,GAAuC,KAAI;YAChD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE;YACnE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;YACjC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QAClC,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,qBAAqB;AACzB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,MAAM,EAAE,aAAa;AACrB,YAAA,OAAO,EAAE,aAAa;AACvB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AAChC,QAAA,IAAI,EAAE,CAAC,GAAyD,KAAI;YAClE,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;AACnC,YAAA,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QACrC,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,mBAAmB;AACvB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;AAChC,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;AACjC,QAAA,IAAI,EAAE,CAAC,GAAoB,MAAM;YAC/B,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;SACxD,CAAC;AACH,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,kBAAkB;AACtB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE;AACxE,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAkD,KAAI;YAC3D,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,EAAE;AACrD,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;AAC5C,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;kBACrC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;kBAC1B,SAAS;AACb,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAQ,CAAC,EAAE;QAC3C,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,oBAAoB;AACxB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;AAChC,QAAA,OAAO,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;AACjC,QAAA,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,KAAI;YAC7B,MAAM,MAAM,GAAG,EAAE;AACjB,YAAA,MAAM,GAAG,GAAG,MAAM,EAAE,MAAM,IAAI,CAAC;YAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,gBAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;YAC9C,MAAM,GAAG,GAAuC,EAAE;YAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,GAAG,CAAC,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE;AACvE,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACD,QAAA,aAAa,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;AAC5B,QAAA,IAAI,EAAE,CAAC,GAA4B,KAAI;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAAE,gBAAA,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;YAClD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE,CAAC,CAAC,EAAE;QACrE,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,sBAAsB;AAC1B,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;AAChC,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,KAAI;YAC7B,MAAM,MAAM,GAAG,EAAE;YACjB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,GAAI,MAAM,EAAE,KAAe,GAAG,EAAE;AACxE,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,GAAG,GAA2B,EAAE;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAAE,gBAAA,GAAG,CAAC,CAAA,IAAA,EAAO,CAAC,EAAE,CAAC,GAAG,aAAa;AAC3D,YAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;QACzB,CAAC;AACD,QAAA,IAAI,EAAE,CAAC,GAAsB,KAAI;YAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,EAAE;YACrD,MAAM,GAAG,GAA4B,EAAE;AACvC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,GAAG,CAAC,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACpD,YAAA,OAAO,GAAG;QACZ,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,aAAa;AACjB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE;AACvE,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAA+C,MAAM;AAC1D,YAAA,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;SACvC,CAAC;AACH,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,iBAAiB;AACrB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE;AACnE,QAAA,OAAO,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE;AAC/B,QAAA,IAAI,EAAE,CAAC,GAA8C,KAAI;AACvD,YAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACtC,YAAA,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACnC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;AACzC,YAAA,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG;iBACtB,IAAI,CAAC,CAAC;AACN,iBAAA,GAAG,CACF,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAIxD,CACJ;AACH,YAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE;QACrB,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,kBAAkB;AACtB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE;AAC9B,QAAA,OAAO,EAAE,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE;AACpE,QAAA,IAAI,EAAE,CAAC,GAA6C,KAAI;AACtD,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE;YACzB,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QACpB,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,cAAc;AAClB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;AAChC,QAAA,OAAO,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;AACpC,QAAA,IAAI,EAAE,CAAC,GAAuB,KAAI;YAChC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;YAChC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;QAC5D,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,oBAAoB;AACxB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,MAAM,EAAE,YAAY;AACpB,YAAA,GAAG,EAAE,YAAY;AACjB,YAAA,GAAG,EAAE,YAAY;AACjB,YAAA,IAAI,EAAE,YAAY;AACnB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE;AACnC,QAAA,IAAI,EAAE,CAAC,GAA+D,KAAI;YACxE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;YAClC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YAChC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAChC,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YACtC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,MAAM,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;AACxE,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,iBAAiB;AACrB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,MAAM,EAAE,YAAY;AACpB,YAAA,GAAG,EAAE,WAAW;AAChB,YAAA,GAAG,EAAE,WAAW;AAChB,YAAA,IAAI,EAAE,YAAY;AACnB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;;AAElC,QAAA,aAAa,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;AACtE,QAAA,IAAI,EAAE,CAAC,GAKN,KAAI;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;AAClC,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAChC,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAChC,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AACtC,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CACpB,EAAE,MAAM,EAAE,GAAG,EAAE,EACf,MACE;AACE,gBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAClC,gBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAClC,gBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACP,aAAA,CAChC;AACD,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,YAAY;AAChB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,WAAW;AACpB,YAAA,UAAU,EAAE,YAAY;AACxB,YAAA,SAAS,EAAE,WAAW;AACvB,SAAA;QACD,OAAO,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;AACnD,QAAA,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;AACnE,QAAA,IAAI,EAAE,CACJ,GAAoE,EACpE,GAAmD,KACjD;YACF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YACpC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAC3C;YACD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;YAExC,MAAM,IAAI,GAAG,MAAK;AAChB,gBAAA,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO;AAC5B,gBAAA,IAAI,EAAE,KAAK,SAAS,EAAE;oBACpB,aAAa,CAAC,EAAE,CAAC;oBACjB,GAAG,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;gBACtC;AACF,YAAA,CAAC;YAED,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,IAAI,EAAE;gBACN;YACF;;AAGA,YAAA,IAAI,EAAE;YACN,IAAI,KAAK,GAAG,CAAC;YACb,IAAI,SAAS,EAAE;gBACb,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B,gBAAA,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;gBACxB,KAAK,IAAI,CAAC;YACZ;AACA,YAAA,MAAM,EAAE,GAAG,WAAW,CAAC,MAAK;gBAC1B,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B,gBAAA,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;gBACxB,KAAK,IAAI,CAAC;YACZ,CAAC,EAAE,UAAU,CAAC;YACd,GAAG,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAC/B,CAAC;AACD,QAAA,SAAS,EAAE;AACT,YAAA,OAAO,EAAE,CAAC,GAA8C,KAAI;AAC1D,gBAAA,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO;AAC5B,gBAAA,IAAI,EAAE,KAAK,SAAS,EAAE;oBACpB,aAAa,CAAC,EAAE,CAAC;oBACjB,GAAG,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;gBACtC;YACF,CAAC;AACF,SAAA;AACF,KAAA,CAAC;;IAGF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,iBAAiB;AACrB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE;AAC5D,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAA0C,KAAI;AACnD,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM;AACtB,YAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC;YACjD,MAAM,GAAG,GAAwB,EAAE;YACnC,KAAK,MAAM,CAAC,IAAI,QAAQ;gBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC;AACzD,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,iBAAiB;AACrB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,MAAM,EAAE,aAAa;AACrB,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,SAAS,EAAE,aAAa;AACzB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAA2D,KAAI;AACpE,YAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC;AACjD,YAAA,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC;YAChD,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;AACrC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AACrB,gBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;gBACrB,IAAI,GAAG,GAAQ,GAAG;AAClB,gBAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,oBAAA,IAAI;AACF,wBAAA,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;oBACvB;AAAE,oBAAA,MAAM;;oBAER;gBACF;gBACA,GAAG,GAAG,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;YACnC;AACA,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,oBAAoB;AACxB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE;AAC5D,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAA0C,KAAI;AACnD,YAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC;YACjD,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;YACrC,KAAK,MAAM,CAAC,IAAI,QAAQ;AAAE,gBAAA,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC;AACzD,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,mBAAmB;AACvB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE;AAC9C,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAyB,MAAM;YACpC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;SAChC,CAAC;AACH,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,kBAAkB;AACtB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AACjC,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAqB,KAAI;AAC9B,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM;AACtB,YAAA,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG;AAC5B,kBAAE,MAAM,CAAC,IAAI,CAAC,GAAG;AACjB,kBAAE,KAAK,CAAC,OAAO,CAAC,GAAG;AACnB,sBAAE,MAAM,CAAC,IAAI,CAAC,GAAG;sBACf,EAAE;AACN,YAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;QACvB,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,oBAAoB;AACxB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AACjC,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAqB,KAAI;AAC9B,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM;AACtB,YAAA,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG;AAC5B,kBAAE,MAAM,CAAC,MAAM,CAAC,GAAG;AACnB,kBAAE,KAAK,CAAC,OAAO,CAAC,GAAG;AACnB,sBAAE,MAAM,CAAC,MAAM,CAAC,GAAG;sBACjB,EAAE;AACN,YAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;QACzB,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,mBAAmB;AACvB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE;AACrD,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAgC,KAAI;YACzC,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;AACxC,YAAA,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG;AACtB,YAAA,MAAM,GAAG,GAAU,KAAK,CAAC,OAAO,CAAC,MAAM;AACrC,kBAAE;AACF,kBAAE;sBACA,CAAC,MAAM;sBACP,EAAE;YACN,IAAI,GAAG,GAAG,IAAI;AACd,YAAA,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;AACpB,gBAAA,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ;oBAAE;gBACnC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;gBAClC,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS,EAAE;oBACxC,GAAG,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC;gBAC3C;AAAO,qBAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AAC5B,oBAAA,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC;gBACpC;AAAO,qBAAA,IAAI,IAAI,KAAK,MAAM,EAAE;oBAC1B,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC;AACrC,oBAAA,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK;AACzB,oBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AAC3D,oBAAA,IAAI,CAAC,EAAE;AAAE,wBAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAA,CAAE,CAAC;gBAChE;YACF;AACA,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,mBAAmB;AACvB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE;AAC9C,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAyB,KAAI;YAClC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE;YAC3C,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE;YAC3C,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;QACjC,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,oBAAoB;AACxB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE;AAClC,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAAsB,KAAI;YAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,EAAE;YACzD,MAAM,GAAG,GAAU,EAAE;AACrB,YAAA,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;AACnB,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,oBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;AAC/B,oBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAClB;AACA,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,mBAAmB;AACvB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE;AAC7D,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;AAClC,QAAA,IAAI,EAAE,CAAC,GAA2C,KAAI;YACpD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,EAAE;AACzD,YAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC;AACjD,YAAA,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACjC,gBAAA,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE;oBACxB,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC/B,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC/B,IAAI,EAAE,KAAK,EAAE;wBAAE;oBACf,IAAI,EAAE,KAAK,SAAS;AAAE,wBAAA,OAAO,CAAC;oBAC9B,IAAI,EAAE,KAAK,SAAS;wBAAE,OAAO,EAAE;oBAC/B,IAAI,EAAE,GAAG,EAAE;wBAAE,OAAO,EAAE;oBACtB,IAAI,EAAE,GAAG,EAAE;AAAE,wBAAA,OAAO,CAAC;gBACvB;AACA,gBAAA,OAAO,CAAC;AACV,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB,CAAC;AACF,KAAA,CAAC;AACF,IAAA,OAAO,QAAQ;AACjB;AAEM,SAAU,iBAAiB,CAAC,QAAkB,EAAA;IAClD,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,aAAa;AACjB,QAAA,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE;AACtD,QAAA,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;AACjC,QAAA,IAAI,EAAE,OACJ,GAAwC,EACxC,GAA0B,KACxB;YACF,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;AACrC,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK;YAC1B,IACE,QAAQ,KAAK,SAAS;AACtB,gBAAA,QAAQ,KAAK,IAAI;gBACjB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAC9B;AACA,gBAAA,OAAO;YACT;YACA,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;gBAC1C,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,MAAK;oBACnB,YAAY,CAAC,EAAE,CAAC;oBAChB,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACnD,gBAAA,CAAC;AACD,gBAAA,IAAI,GAAG,CAAC,WAAW,CAAC,OAAO;oBAAE,OAAO,OAAO,EAAE;AAC7C,gBAAA,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACpE,YAAA,CAAC,CAAC;YACF,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;QACrC,CAAC;AACF,KAAA,CAAC;AACJ;AAEA,SAAS,cAAc,CAAC,EAAU,EAAE,MAAmB,EAAA;IACrD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;AAC3C,QAAA,MAAM,EAAE,GAAG,UAAU,CAAC,MAAK;AACzB,YAAA,OAAO,EAAE;AACT,YAAA,OAAO,EAAE;QACX,CAAC,EAAE,EAAE,CAAC;QACN,MAAM,OAAO,GAAG,MAAK;YACnB,YAAY,CAAC,EAAE,CAAC;AAChB,YAAA,OAAO,EAAE;YACT,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACnD,QAAA,CAAC;QACD,MAAM,OAAO,GAAG,MAAK;AACnB,YAAA,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;AAC9C,QAAA,CAAC;QACD,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,OAAO,EAAE;AACpC,QAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;AAC3C,IAAA,CAAC,CAAC;AACJ;AAEM,SAAU,qBAAqB,CAAC,QAAkB,EAAA;IACtD,QAAQ,CAAC,YAAY,CAAC;AACpB,QAAA,EAAE,EAAE,gBAAgB;AACpB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,MAAM,EAAE;AACN,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,WAAW,EAAE,WAAW;AACzB,SAAA;AACD,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AAChC,QAAA,IAAI,EAAE,OACJ,GAAgE,EAChE,GAA0B,KACxB;YACF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;YAClE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AAC5C,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC9B,GAAG,CAAC,cAAc,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC/B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,WAAW,CAAC;AAC9C,gBAAA,IAAI,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE;oBAC/C,GAAG,CAAC,cAAc,GAAG,CAAC,GAAG,KAAK,CAAC;AAC/B,oBAAA,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC;gBACtE;YACF;AACA,YAAA,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC;AACvB,YAAA,OAAO,EAAE,IAAI,EAAE,aAAa,KAAK,CAAA,MAAA,CAAQ,EAAE;QAC7C,CAAC;AACF,KAAA,CAAC;AACJ;AAcM,SAAU,UAAU,CACxB,MAAc,EACd,IAAA,GAAoB,IAAI,GAAG,EAAE,EAAA;AAE7B,IAAA,IAAI,EAAU;IACd,IAAI,QAAQ,GAAG,CAAC;AAChB,IAAA,GAAG;QACD,EAAE,GAAG,GAAG,MAAM,CAAA,EAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE;AACzD,QAAA,QAAQ,EAAE;AACV,QAAA,IAAI,QAAQ,GAAG,IAAI,EAAE;AACnB,YAAA,EAAE,GAAG,CAAA,EAAG,MAAM,CAAA,EAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM;iBACnD,QAAQ,CAAC,EAAE;AACX,iBAAA,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QAClB;AACF,IAAA,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACrB,IAAA,OAAO,EAAE;AACX;;ACrsCM,SAAU,cAAc,CAAC,MAK9B,EAAA;IACC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;AACvB,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,GAAG,CAAA,EAAA,EAAK,CAAC,CAAC,aAAa,CAAA,CAAA,CAAG,GAAG,EAAE;QACxD,OAAO,CAAC,GAAG,CAAC,CAAA,OAAA,EAAU,CAAC,CAAC,EAAE,CAAA,CAAA,CAAG,EAAE,CAAA,EAAG,CAAC,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAA,CAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AACvE,IAAA,CAAC,CAAC;IACF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;AACvB,QAAA,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,EAAE;AAC9B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,IAAI,GAAG,CAAC;AAC/C,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,WAAA,EAAc,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAG,CAAC;QAC3D;AAAO,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE;AACjC,YAAA,MAAM,SAAS,GAAI,CAAS,CAAC,SAAS,GAAG,cAAc,GAAG,EAAE;YAC5D,OAAO,CAAC,GAAG,CAAC,CAAA,OAAA,EAAU,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAA,IAAA,EAAO,CAAC,CAAC,UAAU,IAAI,CAAC,CAAA,EAAA,EAAK,SAAS,CAAA,CAAE,CAAC;QACpF;AAAO,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE;AAClC,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,QAAA,EAAW,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAA,CAAE,CAAC;QAC/C;AAAO,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE;AAClC,YAAA,OAAO,CAAC,GAAG,CACT,CAAA,OAAA,EAAU,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,IAAA,EAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE,CACxF;QACH;AAAO,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE;AACjC,YAAA,OAAO,CAAC,GAAG,CACT,CAAA,OAAA,EAAU,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,IAAA,EAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAChE,CAAC,CAAC,MAAM,CAAC,MACX,CAAA,IAAA,EAAO,CAAC,CAAC,UAAU,IAAI,CAAC,CAAA,EAAA,CAAI,CAC7B;QACH;AACF,IAAA,CAAC,CAAC;IACF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;AACvB,QAAA,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE;YACzB,OAAO,CAAC,IAAI,CACV,CAAA,QAAA,EAAW,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE,EAC/B,CAAC,CAAC,GAAW,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CACjC;QACH;AAAO,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,EAAE;AACpC,YAAA,OAAO,CAAC,IAAI,CACV,WAAW,CAAC,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,IAAA,EAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE,EACnG,CAAC,CAAC,GAAW,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CACjC;QACH;AAAO,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAkB,EAAE;YACxC,OAAO,CAAC,IAAI,CACV,CAAA,0BAAA,EAA6B,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAA,OAAA,EAAU,CAAC,CAAC,MAAM,CAAA,CAAA,CAAG,EACtE,CAAC,CAAC,OAAO,CACV;QACH;AAAO,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE;AAChC,YAAA,OAAO,CAAC,IAAI,CACV,mBAAmB,EAClB,CAAC,CAAC,GAAW,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,EAChC,CAAC,CAAC,OAAO,KAAK;kBACV,CAAA,SAAA,EAAY,CAAC,CAAC,OAAO,CAAA,CAAA,EAAI,CAAC,CAAC,WAAW,IAAI,GAAG,CAAA,CAAA;kBAC7C,EAAE,CACP;QACH;AAAO,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC9B,YAAA,OAAO,CAAC,IAAI,CACV,CAAA,gBAAA,EAAmB,CAAC,CAAC,OAAO,CAAA,CAAE,EAC9B,CAAC,CAAC,IAAI,GAAG,CAAA,OAAA,EAAU,CAAC,CAAC,IAAI,CAAA,CAAA,CAAG,GAAG,EAAE,EACjC,CAAC,CAAC,GAAG,GAAI,CAAC,CAAC,GAAW,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,EAC7C,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAC3C;QACH;aAAO;;AAEL,YAAA,OAAO,CAAC,IAAI,CAAC,6BAA6B,EAAE,CAAC,CAAC;QAChD;AACF,IAAA,CAAC,CAAC;AACJ;;AC5DA,SAAS,wBAAwB,GAAA;IAC/B,OAAO;AACL,QAAA,KAAK,EAAE;AACL,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE;AACrC,YAAA;AACE,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,WAAW;AACpB,aAAA;;AAED,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE;AACxC,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE;AAC5C,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;;AAED,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;;;AAGD,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;AACxC,aAAA;AACF,SAAA;KACF;AACH;SAEgB,oBAAoB,GAAA;IAClC,OAAO,wBAAwB,EAAE;AACnC;AAEM,SAAU,yBAAyB,CAAC,EAAW,EAAA;AACnD,IAAA,OAAO,uBAAuB,CAAC,EAAE,CAAC;AACpC;;SCxCgB,mBAAmB,GAAA;AACjC,IAAA,MAAM,GAAG,GAAoB;AAC3B,QAAA,KAAK,EAAE;AACL,YAAA;AACE,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,WAAW;AACpB,aAAA;AACD,YAAA;AACE,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,aAAa;AACrB,gBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE;AAC/D,aAAA;AACD,YAAA;AACE,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,kBAAkB;AAC3B,aAAA;AACD,YAAA;AACE,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,MAAM,EAAE,iBAAiB;AAC1B,aAAA;AACF,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;AAC1C,aAAA;;AAED,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;gBACvC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACrC,gBAAA,MAAM,EAAE,aAAa;AACtB,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;gBACrC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;gBACrC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;gBACrC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;AACF,SAAA;KACF;AACD,IAAA,OAAO,GAAG;AACZ;AAEM,SAAU,wBAAwB,CAAC,EAAW,EAAA;AAClD,IAAA,MAAM,QAAQ,GAAG,uBAAuB,CAAC,EAAE,CAAC;IAC5C,iBAAiB,CAAC,QAAQ,CAAC;AAC3B,IAAA,OAAO,QAAQ;AACjB;;SC3DgB,sBAAsB,GAAA;AACpC,IAAA,MAAM,GAAG,GAAoB;AAC3B,QAAA,KAAK,EAAE;AACL,YAAA,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE;AAChD,YAAA,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE;AAChD,YAAA,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE;AAC7C,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC7C,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;AAC5C,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC7C,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE;AAC9C,aAAA;;AAEF,SAAA;KACF;AACD,IAAA,OAAO,GAAG;AACZ;AAEM,SAAU,2BAA2B,CAAC,EAAW,EAAA;AACrD,IAAA,MAAM,QAAQ,GAAG,uBAAuB,CAAC,EAAE,CAAC;IAC5C,qBAAqB,CAAC,QAAQ,CAAC;AAC/B,IAAA,OAAO,QAAQ;AACjB;;SCjCgB,wBAAwB,GAAA;;;;;AAKtC,IAAA,MAAM,GAAG,GAAoB;AAC3B,QAAA,KAAK,EAAE;AACL,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE;AAC7C,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE;AAC7C,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE;AACrC,YAAA,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE;AAChD,YAAA,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE;;AAEzC,YAAA,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE;AACzC,SAAA;AACD,QAAA,KAAK,EAAE;;AAEL,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;;AAED,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE;AAChD,aAAA;;AAED,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;gBACxC,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE;AACvC,aAAA;AACF,SAAA;KACF;AACD,IAAA,OAAO,GAAG;AACZ;AAEM,SAAU,6BAA6B,CAAC,EAAW,EAAA;AACvD,IAAA,MAAM,QAAQ,GAAG,uBAAuB,CAAC,EAAE,CAAC;AAC5C,IAAA,OAAO,QAAQ;AACjB;;AChDM,SAAU,aAAa,CAAC,IAAc,EAAA;AAC1C,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YACzC,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC;YACnD,IAAI,UAAU,EAAE;gBACd,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACzC,OAAO,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;YACzD;YACA,OAAO,CAAC,OAAO,CAAC;AAClB,QAAA,CAAC,CAAC;IACJ;AACA,IAAA,OAAO,IAAI;AACb;AAEM,SAAU,cAAc,CAC5B,GAAY,EACZ,YAA2B,EAAA;AAE3B,IAAA,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,QAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE;IAC9C;IAEA,IAAI,OAAO,GAAY,GAAG;AAI1B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAChD,QAAA,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC;QAC/B,IACE,OAAO,KAAK,IAAI;AAChB,YAAA,OAAO,KAAK,SAAS;AACrB,YAAA,OAAO,OAAO,KAAK,QAAQ,EAC3B;AACA,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC/B,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;gBACnC,IAAI,KAAK,CAAC,KAAK,CAAC;AAAE,oBAAA,OAAO,IAAI;AAG7B,gBAAA,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;YAC1B;iBAAO;AAGL,gBAAA,OAAO,GAAI,OAAmC,CAAC,OAAO,CAAC;YACzD;QACF;AAAO,aAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AACtC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC1B,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE;AAG5C,oBAAA,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;gBAC5B;qBAAO;AACL,oBAAA,OAAO,IAAI;gBACb;YACF;iBAAO;AACL,gBAAA,OAAO,IAAI;YACb;QACF;AAAO,aAAA,IAAI,OAAO,YAAY,MAAM,EAAE;AACpC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC1B,gBAAA,OAAO,IAAI;YACb;YACA,MAAM,GAAG,GAAG,OAAkC;YAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrE,YAAA,IAAI,CAAC,WAAW;AAAE,gBAAA,OAAO,IAAI;AAG7B,YAAA,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC;QAC5B;aAAO;AACL,YAAA,OAAO,IAAI;QACb;IACF;IAEA,MAAM,WAAW,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AACzD,IAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACnC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,IAAI;AAC7B,YAAA,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE;QAC/D;aAAO,IACL,OAAO,KAAK,IAAI;AAChB,YAAA,OAAO,KAAK,SAAS;AACrB,YAAA,OAAO,OAAO,KAAK,QAAQ,EAC3B;YACA,OAAO;AACL,gBAAA,KAAK,EAAG,OAAmC,CAAC,WAAW,CAAC;AACxD,gBAAA,MAAM,EAAE,OAAO;AACf,gBAAA,GAAG,EAAE,WAAW;aACjB;QACH;IACF;AAAO,SAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AAC1C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC1B,IAAI,WAAW,IAAI,CAAC,IAAI,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE;gBACpD,OAAO;AACL,oBAAA,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC;AAC3B,oBAAA,MAAM,EAAE,OAAO;AACf,oBAAA,GAAG,EAAE,WAAW;iBACjB;YACH;QACF;AACA,QAAA,OAAO,IAAI;IACb;AAAO,SAAA,IAAI,WAAW,YAAY,MAAM,EAAE;AACxC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC1B,YAAA,OAAO,IAAI;QACb;QACA,MAAM,GAAG,GAAG,OAAkC;QAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzE,QAAA,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,IAAI;AAC7B,QAAA,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE;IACvE;AAEA,IAAA,OAAO,IAAI;AACb;SAEgB,cAAc,CAC5B,GAAY,EACZ,YAA2B,EAC3B,QAAiB,EAAA;IAEjB,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,EAAE,YAAY,CAAC;AAChD,IAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI;AAAE,QAAA,OAAO,KAAK;IAEnD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;QAC/B,MAAM,CAAC,MAAoB,CAAC,MAAM,CAAC,GAAa,CAAC,GAAG,QAAQ;IAC/D;SAAO;QACJ,MAAM,CAAC,MAAkC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ;IACnE;AACA,IAAA,OAAO,IAAI;AACb;AAEM,SAAU,iBAAiB,CAC/B,GAAY,EACZ,YAA2B,EAC3B,cAA6B,EAAE,EAAA;AAE/B,IAAA,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;QAC7B,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAC5C;IAEA,MAAM,CAAC,cAAc,EAAE,GAAG,iBAAiB,CAAC,GAAG,YAAY;IAC3D,MAAM,OAAO,GAAmD,EAAE;AAElE,IAAA,IAAI,cAAc,KAAK,SAAS,EAAE;AAChC,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;AACtC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC;AAC1C,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE;AACrD,gBAAA,OAAO,CAAC,IAAI,CACV,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,iBAAiB,EAAE;AAClD,oBAAA,GAAG,WAAW;oBACd,KAAK;AACN,iBAAA,CAAC,CACH;YACH;QACF;AAAO,aAAA,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YACvE,MAAM,SAAS,GAAG,GAA8B;AAChD,YAAA,IAAI,cAAc,IAAI,SAAS,EAAE;AAC/B,gBAAA,OAAO,CAAC,IAAI,CACV,GAAG,iBAAiB,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,iBAAiB,EAAE;AACjE,oBAAA,GAAG,WAAW;oBACd,cAAc;AACf,iBAAA,CAAC,CACH;YACH;QACF;IACF;AAAO,SAAA,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;AAC7C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACtB,IAAI,cAAc,IAAI,CAAC,IAAI,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE;AACtD,gBAAA,OAAO,CAAC,IAAI,CACV,GAAG,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,iBAAiB,EAAE;AAC3D,oBAAA,GAAG,WAAW;oBACd,cAAc;AACf,iBAAA,CAAC,CACH;YACH;QACF;IACF;AAAO,SAAA,IAAI,cAAc,YAAY,MAAM,EAAE;AAC3C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,OAAO,CAAC,IAAI,CACV,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC,CACrE;YACH;QACF;AAAO,aAAA,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YACvE,MAAM,SAAS,GAAG,GAA8B;YAChD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACxC,gBAAA,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC5B,oBAAA,OAAO,CAAC,IAAI,CACV,GAAG,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,iBAAiB,EAAE;AACtD,wBAAA,GAAG,WAAW;wBACd,GAAG;AACJ,qBAAA,CAAC,CACH;gBACH;YACF;QACF;IACF;AAEA,IAAA,OAAO,OAAO;AAChB;;SCvKgB,qBAAqB,CACnC,MAAuB,EACvB,MAAuB,EACvB,SAA0B,EAAA;IAE1B,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAE9D,MAAM,SAAS,GAA2B,EAAE;IAE5C,MAAM,aAAa,GAA0B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AAClE,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM;AACpB,QAAA,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC9B,YAAA,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,eAAe,CAAC;QAC1C;aAAO;AACL,YAAA,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;QAC5B;AACA,QAAA,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK;AAC3B,QAAA,MAAM,eAAe,GAAwB;AAC3C,YAAA,GAAG,CAAC;AACJ,YAAA,MAAM,EAAE,KAAK;SACd;QAED,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM;AAEzC,YAAA,IAAI,eAAe,CAAC,eAAe,EAAE,aAAa,EAAE;gBAClD,MAAM,wBAAwB,GAA4B,EAAE;AAC5D,gBAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAC5C,eAAe,CAAC,eAAe,CAAC,aAAa,CAC9C,EAAE;oBACD,MAAM,cAAc,GAAG,eAAe,CAAC,eAAe,EAAE,MAAM,GAC5D,QAAQ;0BAEN,OAAO,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC;4BACvD;8BACE,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ;8BAE7C,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAGhD,EAAE;0BACL,SAAS;oBACb,MAAM,cAAc,GAAG,SAAS,CAAC;AAC/B,wBAAA,MAAM,EAAE,KAAK;wBACb,QAAQ;wBACR,KAAK;AACL,wBAAA,IAAI,EAAE,cAAc;wBACpB,UAAU;wBACV,cAAc;AACf,qBAAA,CAAC;;AAEF,oBAAA,IAAI,cAAc,KAAK,IAAI,EAAE;AAC3B,wBAAA,wBAAwB,CAAC,QAAQ,CAAC,GAAG,cAAc;oBACrD;gBACF;;gBAEA,IAAI,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;oBACpD,eAAe,CAAC,eAAe,GAAG;wBAChC,GAAG,eAAe,CAAC,eAAe;AAClC,wBAAA,aAAa,EAAE,wBAAwB;qBACxC;gBACH;AAAO,qBAAA,IAAI,eAAe,CAAC,eAAe,EAAE;;oBAE1C,MAAM,EAAE,aAAa,EAAE,GAAG,WAAW,EAAE,GACrC,eAAe,CAAC,eAAe;AACjC,oBAAA,eAAe,CAAC,eAAe,GAAG,WAAW;gBAC/C;YACF;QACF;AAEA,QAAA,OAAO,eAAe;AACxB,IAAA,CAAC,CAAC;IAEF,MAAM,aAAa,GAA0B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AAClE,QAAA,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE;AACpB,QAAA,IAAI,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AAClC,YAAA,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,eAAe,CAAC;QAC9C;aAAO;AACL,YAAA,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;QAChC;AAEA,QAAA,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM;AAClE,QAAA,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM;QAElE,OAAO;AACL,YAAA,GAAG,CAAC;AACJ,YAAA,EAAE,EAAE,SAAS;AACb,YAAA,MAAM,EAAE;gBACN,GAAG,CAAC,CAAC,MAAM;AACX,gBAAA,MAAM,EAAE,YAAY;AACrB,aAAA;AACD,YAAA,MAAM,EAAE;gBACN,GAAG,CAAC,CAAC,MAAM;AACX,gBAAA,MAAM,EAAE,YAAY;AACrB,aAAA;SACF;AACH,IAAA,CAAC,CAAC;IAEF,OAAO;AACL,QAAA,MAAM,EAAE;YACN,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,aAAa,CAAC;YAC1C,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,aAAa,CAAC;AAC3C,SAAA;QACD,SAAS;KACV;AACH;AAEA;;AAEG;AACG,SAAU,kBAAkB,CAChC,SAAmD,EACnD,OAAiB,EAAA;IAEjB,MAAM,cAAc,GAAG;SACpB,GAAG,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC;SACzB,MAAM,CAAC,CAAC,GAAG,KAAsC,GAAG,KAAK,SAAS,CAAC;AAEtE,IAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;QAC/B,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;IACvB;IAEA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAExD,OAAO;AACL,QAAA,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC;AACpB,QAAA,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC;KACrB;AACH;AAEA;;;AAGG;AACG,SAAU,uBAAuB,CACrC,eAAyD,EACzD,eAAyD,EACzD,SAA0B,EAC1B,SAAiC,EACjC,SAAmC,EAAA;AAEnC,IAAA,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAC1D,MAAM,YAAY,GAAG,kBAAkB,CAAC,eAAe,EAAE,aAAa,CAAC;IAEvE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;AAEvC,IAAA,MAAM,YAAY,GAA6C;AAC7D,QAAA,GAAG,eAAe;KACnB;AAED,IAAA,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE;AAClC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;AACzB,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;AAC9B,QAAA,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QACvD,YAAY,CAAC,KAAK,CAAC,GAAG;AACpB,YAAA,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE;AAChB,YAAA,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE;SACjB;IACH;AAEA,IAAA,OAAO,YAAY;AACrB;AAEA;;;AAGG;SACa,kBAAkB,CAChC,YAAqD,EACrD,aAAsD,EACtD,YAAqD,EACrD,aAAsD,EACtD,SAAiC,EACjC,SAA0B,EAC1B,WAAiC,EACjC,aAAgD,EAAA;;IAMhD,MAAM,YAAY,GAA4C,EAAE;IAChE,MAAM,aAAa,GAA4C,EAAE;;AAGjE,IAAA,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;QAC3D,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE;IACtC;AACA,IAAA,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;QAC7D,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE;IACxC;AAEA,IAAA,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AAC1D,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAC9B,IAAI,KAAK,EAAE;YACT,MAAM,iBAAiB,GAA4B,EAAE;YACrD,MAAM,UAAU,GAAG,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC;;AAG1C,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AACxB,gBAAA,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE;YAC1B;AAEA,YAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACtD,gBAAA,MAAM,cAAc,GAAG,aAAa,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC;gBAC/D,MAAM,cAAc,GAAG;sBACnB,SAAS,CAAC;AACR,wBAAA,MAAM,EAAE,KAAK;wBACb,QAAQ;wBACR,KAAK;AACL,wBAAA,IAAI,EAAE,OAAO;wBACb,UAAU;wBACV,cAAc;qBACf;sBACD,KAAK;;AAET,gBAAA,IAAI,cAAc,KAAK,IAAI,EAAE;AAC3B,oBAAA,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;gBACtC;qBAAO;;AAEL,oBAAA,iBAAiB,CAAC,QAAQ,CAAC,GAAG,cAAc;gBAC9C;YACF;;YAGA,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,gBAAA,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,iBAAiB,EAAE;YACxE;;AAGA,YAAA,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AACjD,gBAAA,OAAO,YAAY,CAAC,KAAK,CAAC;YAC5B;QACF;IACF;AAEA,IAAA,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;AAC5D,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAC9B,IAAI,KAAK,EAAE;YACT,MAAM,kBAAkB,GAA4B,EAAE;YACtD,MAAM,UAAU,GAAG,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC;;AAG1C,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;AACzB,gBAAA,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE;YAC3B;AAEA,YAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACvD,gBAAA,MAAM,cAAc,GAAG,aAAa,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC;AAC/D,gBAAA,MAAM,aAAa,GAAG,aAAa,CAAC,KAAK;AACvC,sBAAE,oBAAoB,CAAC,KAAK;sBAC1B,SAAS;gBACb,MAAM,cAAc,GAAG;sBACnB,SAAS,CAAC;AACR,wBAAA,MAAM,EAAE,KAAK;wBACb,QAAQ;wBACR,KAAK;AACL,wBAAA,IAAI,EAAE,QAAQ;wBACd,UAAU;wBACV,cAAc;wBACd,aAAa;qBACd;sBACD,KAAK;;AAET,gBAAA,IAAI,cAAc,KAAK,IAAI,EAAE;AAC3B,oBAAA,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;gBACvC;qBAAO;;AAEL,oBAAA,kBAAkB,CAAC,QAAQ,CAAC,GAAG,cAAc;gBAC/C;YACF;;YAGA,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC9C,aAAa,CAAC,KAAK,CAAC,GAAG;oBACrB,GAAG,aAAa,CAAC,KAAK,CAAC;AACvB,oBAAA,GAAG,kBAAkB;iBACtB;YACH;;AAGA,YAAA,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AAClD,gBAAA,OAAO,aAAa,CAAC,KAAK,CAAC;YAC7B;QACF;IACF;AAEA,IAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE;AACxC;AAEA;;;;AAIG;AACG,SAAU,iBAAiB,CAC/B,cAAmC,EACnC,cAAmC,EACnC,SAA0B,EAC1B,SAAiC,EACjC,SAA0B,EAAA;AAK1B,IAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB;AAC7C,IAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAA+B;AAE5D,IAAA,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE;QAClC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;AACzC,QAAA,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB;AAEjD,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE;AAChC,YAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CACjD,IAAI,CAAC,eAAe,CAAC,MAAM,CAC5B,EAAE;AACD,gBAAA,MAAM,MAAM,GACV,OAAO,UAAU,KAAK;AACpB,sBAAE;AACF,sBAAG,UAAkC,EAAE,MAAM;AACjD,gBAAA,IAAI,MAAM;AAAE,oBAAA,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;YACnD;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE;AACjC,YAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CACjD,IAAI,CAAC,eAAe,CAAC,OAAO,CAC7B,EAAE;AACD,gBAAA,MAAM,MAAM,GACV,OAAO,UAAU,KAAK;AACpB,sBAAE;AACF,sBAAE,KAAK,CAAC,OAAO,CAAC,UAAU;AAC1B,0BAAE,UAAU,CAAC,CAAC;0BACZ,SAAS;AACf,gBAAA,IAAI,MAAM;AAAE,oBAAA,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;YACnD;QACF;AAEA,QAAA,IAAI,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE;YAC5B,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC;QACjD;IACF;AAEA,IAAA,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,kBAAkB,CACxD,cAAc,CAAC,MAAM,IAAI,EAAE,EAC3B,cAAc,CAAC,OAAO,IAAI,EAAE,EAC5B,cAAc,CAAC,MAAM,IAAI,EAAE,EAC3B,cAAc,CAAC,OAAO,IAAI,EAAE,EAC5B,SAAS,EACT,SAAS,EACT,WAAW,EACX,aAAa,CACd;IAED,OAAO;QACL,YAAY;QACZ,aAAa;KACd;AACH;AAEA;;;AAGG;SACa,iBAAiB,CAC/B,aAAiD,EACjD,aAAiD,EACjD,SAAiC,EAAA;AAEjC,IAAA,MAAM,MAAM,GAAoB;QAC9B,KAAK,EAAE,EAAE,IAAI,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;KAC3C;IAED,IAAI,CAAC,aAAa,EAAE,KAAK;AAAE,QAAA,OAAO,MAAM;;AAGxC,IAAA,KAAK,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QACjE,MAAM,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC;QACxD,IAAI,cAAc,EAAE;YAClB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,cAAc,EAAE;QACjD;IACF;AAEA,IAAA,OAAO,MAAM;AACf;AAmBA,SAAS,cAAc,CAAC,KAAa,EAAE,OAAyB,EAAA;AAC9D,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,IAAI;AACzB,IAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC/B,OAAO,KAAK,KAAK,OAAO;IAC1B;AACA,IAAA,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B;AAEA;;;;;;;;;AASG;AACG,SAAU,mBAAmB,CAAC,MAAuB,EAAA;IACzD,OAAO,CAAC,eAAqC,KAAI;AAC/C,QAAA,MAAM,EACJ,MAAM,EACN,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,UAAU,EACV,cAAc,EACd,aAAa,GACd,GAAG,eAAe;AACnB,QAAA,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC;AAEpC,QAAA,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE;YACrC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC;gBAAE;YACjD,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;gBAAE;AAE7C,YAAA,IAAI,OAAO,CAAC,UAAU,IAAI,UAAU,EAAE;gBACpC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC;oBAAE;YACvD;AAEA,YAAA,IAAI,OAAO,CAAC,cAAc,IAAI,cAAc,EAAE;gBAC5C,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC;oBAAE;YAC/D;AAEA,YAAA,IAAI,OAAO,CAAC,aAAa,IAAI,aAAa,EAAE;gBAC1C,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC;oBAAE;YAC7D;AAEA,YAAA,IAAI,OAAO,CAAC,mBAAmB,IAAI,OAAO,EAAE;AAC1C,gBAAA,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC;AAC7C,gBAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC;AAC/C,gBAAA,IAAI,CAAC,WAAW;oBAAE;AAElB,gBAAA,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;oBAC9B,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;oBAChD,MAAM,OAAO,GAAG,iBAAiB,CAAC,UAAU,EAAE,YAAY,CAAC;AAE3D,oBAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,wBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;wBAC/D,IAAI,OAAO,GAAG,KAAK;AAEnB,wBAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;AAC3B,4BAAA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK;4BAC9B,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE;gCACnD,IAAI,QAAQ,GAAY,UAAU;AAElC,gCAAA,IAAI,OAAO,CAAC,QAAQ,YAAY,GAAG,EAAE;oCACnC,IACE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAClB,UAAuC,CACxC,EACD;wCACA,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAC7B,UAAuC,CACxC;wCACD,OAAO,GAAG,IAAI;oCAChB;gCACF;qCAAO;oCACL,IACE,OAAO,UAAU,KAAK,QAAQ;AAC9B,wCAAA,OAAO,UAAU,KAAK,QAAQ,EAC9B;AACA,wCAAA,IAAI,UAAU,IAAI,OAAO,CAAC,QAAQ,EAAE;AAClC,4CAAA,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;4CACvC,OAAO,GAAG,IAAI;wCAChB;oCACF;gCACF;AAEA,gCAAA,IAAI,OAAO,IAAI,QAAQ,KAAK,UAAU,EAAE;;oCAEtC,cAAc,CAAC,gBAAgB,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC;gCACxD;4BACF;wBACF;;;;AAKA,wBAAA,OAAO,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,gBAAgB,CAAC,GAAG,KAAK;oBAC/D;gBACF;qBAAO;oBACL,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE;wBACnD,IAAI,QAAQ,GAAY,UAAU;AAElC,wBAAA,IAAI,OAAO,CAAC,QAAQ,YAAY,GAAG,EAAE;4BACnC,IACE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAuC,CAAC,EAC7D;gCACA,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAC7B,UAAuC,CACxC;;AAED,gCAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,oCAAA,OAAO,IAAI;gCACb;AACA,gCAAA,OAAO,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC;4BACrC;wBACF;6BAAO;4BACL,IACE,OAAO,UAAU,KAAK,QAAQ;AAC9B,gCAAA,OAAO,UAAU,KAAK,QAAQ,EAC9B;AACA,gCAAA,IAAI,UAAU,IAAI,OAAO,CAAC,QAAQ,EAAE;AAClC,oCAAA,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;;AAEvC,oCAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,wCAAA,OAAO,IAAI;oCACb;AACA,oCAAA,OAAO,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC;gCACrC;4BACF;wBACF;oBACF;gBACF;gBACA;YACF;AAEA,YAAA,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;gBAC9B,IAAI,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;gBAE9C,IAAI,OAAO,EAAE;AACX,oBAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC;oBAC/C,IAAI,WAAW,EAAE;AACf,wBAAA,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC;AACpC,wBAAA,MAAM,eAAe,GACnB,OAAO,YAAY,KAAK;AACtB,8BAAE;8BACA,YAAY,YAAY;AAC1B,kCAAE;AACF,kCAAE,MAAM,CAAC,YAAY,CAAC;wBAC1B,IACE,eAAe,KAAK,eAAe;4BACnC,eAAe,KAAK,cAAc,EAClC;AACA,4BAAA,YAAY,GAAG,CAAC,eAAe,EAAE,GAAG,YAAY,CAAC;wBACnD;oBACF;gBACF;gBAEA,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC;AAEtD,gBAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,oBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAC1D,IAAI,OAAO,GAAG,KAAK;AAEnB,oBAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;AAC3B,wBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK;wBAC9B,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE;4BACnD,IAAI,QAAQ,GAAY,UAAU;AAElC,4BAAA,IAAI,OAAO,CAAC,QAAQ,YAAY,GAAG,EAAE;gCACnC,IACE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAuC,CAAC,EAC7D;oCACA,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAC7B,UAAuC,CACxC;oCACD,OAAO,GAAG,IAAI;gCAChB;4BACF;iCAAO;gCACL,IACE,OAAO,UAAU,KAAK,QAAQ;AAC9B,oCAAA,OAAO,UAAU,KAAK,QAAQ,EAC9B;AACA,oCAAA,IAAI,UAAU,IAAI,OAAO,CAAC,QAAQ,EAAE;AAClC,wCAAA,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;wCACvC,OAAO,GAAG,IAAI;oCAChB;gCACF;4BACF;AAEA,4BAAA,IAAI,OAAO,IAAI,QAAQ,KAAK,UAAU,EAAE;gCACtC,cAAc,CAAC,gBAAgB,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC;4BACxD;wBACF;oBACF;oBAEA,OAAO,OAAO,GAAG,gBAAgB,GAAG,KAAK;gBAC3C;YACF;iBAAO;gBACL,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,oBAAA,IAAI,OAAO,CAAC,QAAQ,YAAY,GAAG,EAAE;wBACnC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAkC,CAAC,EAAE;4BAC5D,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAkC,CAAC;wBACjE;oBACF;yBAAO;wBACL,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC1D,4BAAA,IAAI,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE;AAC7B,gCAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;4BAChC;wBACF;oBACF;gBACF;YACF;QACF;AAEA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|