@obversa/runtime 0.1.0
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/LICENSE +21 -0
- package/README.md +192 -0
- package/dist/api.d.ts +72 -0
- package/dist/api.js +9775 -0
- package/dist/api.js.map +1 -0
- package/dist/artifacts/conformance.d.ts +1 -0
- package/dist/artifacts/file-store.d.ts +8 -0
- package/dist/artifacts/store.d.ts +1 -0
- package/dist/callback/approval.d.ts +8 -0
- package/dist/callback/client.d.ts +38 -0
- package/dist/callback/gate.d.ts +1 -0
- package/dist/callback/stored-client.d.ts +5 -0
- package/dist/chunk-3L6YNPN6.js +3 -0
- package/dist/chunk-3L6YNPN6.js.map +1 -0
- package/dist/chunk-5GLEABOU.js +3 -0
- package/dist/chunk-5GLEABOU.js.map +1 -0
- package/dist/chunk-DEW5R23M.js +338 -0
- package/dist/chunk-DEW5R23M.js.map +1 -0
- package/dist/chunk-DV5P4QLI.js +3056 -0
- package/dist/chunk-DV5P4QLI.js.map +1 -0
- package/dist/chunk-NIBHM5I5.js +34 -0
- package/dist/chunk-NIBHM5I5.js.map +1 -0
- package/dist/chunk-RZLMX3IA.js +368 -0
- package/dist/chunk-RZLMX3IA.js.map +1 -0
- package/dist/core/agent-md.d.ts +36 -0
- package/dist/core/agent.d.ts +86 -0
- package/dist/core/approval-job.d.ts +43 -0
- package/dist/core/assert-graph.d.ts +34 -0
- package/dist/core/budget.d.ts +49 -0
- package/dist/core/concurrency.d.ts +2 -0
- package/dist/core/condition.d.ts +209 -0
- package/dist/core/context.d.ts +36 -0
- package/dist/core/cost.d.ts +59 -0
- package/dist/core/dag.d.ts +20 -0
- package/dist/core/decision.d.ts +29 -0
- package/dist/core/describe.d.ts +56 -0
- package/dist/core/engine-meta.d.ts +5 -0
- package/dist/core/env-overlay.d.ts +35 -0
- package/dist/core/errors.d.ts +46 -0
- package/dist/core/feedback.d.ts +68 -0
- package/dist/core/git.d.ts +152 -0
- package/dist/core/guards.d.ts +70 -0
- package/dist/core/isolated.d.ts +40 -0
- package/dist/core/job.d.ts +134 -0
- package/dist/core/limits.d.ts +22 -0
- package/dist/core/loop.d.ts +24 -0
- package/dist/core/merge.d.ts +30 -0
- package/dist/core/pipeline.d.ts +35 -0
- package/dist/core/process.d.ts +11 -0
- package/dist/core/progress.d.ts +82 -0
- package/dist/core/redact.d.ts +1 -0
- package/dist/core/stats.d.ts +63 -0
- package/dist/core/team.d.ts +34 -0
- package/dist/core/text.d.ts +8 -0
- package/dist/core/tournament.d.ts +25 -0
- package/dist/core/types.d.ts +650 -0
- package/dist/engines/command-runner.d.ts +1 -0
- package/dist/engines/conformance.d.ts +1 -0
- package/dist/engines/engine.d.ts +4 -0
- package/dist/engines/failure.d.ts +1 -0
- package/dist/engines/fallback.d.ts +35 -0
- package/dist/engines/message-map.d.ts +1 -0
- package/dist/engines/mock.d.ts +1 -0
- package/dist/engines/preflight.d.ts +36 -0
- package/dist/env/command.d.ts +50 -0
- package/dist/env/command.js +65 -0
- package/dist/env/command.js.map +1 -0
- package/dist/env/environment.d.ts +4 -0
- package/dist/env/mock.d.ts +24 -0
- package/dist/events/conformance.d.ts +1 -0
- package/dist/events/envelope.d.ts +1 -0
- package/dist/events/jsonl-store.d.ts +8 -0
- package/dist/events/store.d.ts +1 -0
- package/dist/graph/commands.d.ts +5 -0
- package/dist/graph/conformance.d.ts +32 -0
- package/dist/graph/kernel.d.ts +5 -0
- package/dist/graph/plan.d.ts +1 -0
- package/dist/graph/type.d.ts +7 -0
- package/dist/graph/value.d.ts +1 -0
- package/dist/graph-types/dag.d.ts +137 -0
- package/dist/graph-types/loop.d.ts +194 -0
- package/dist/graph-types/team.d.ts +68 -0
- package/dist/memory.d.ts +82 -0
- package/dist/memory.js +397 -0
- package/dist/memory.js.map +1 -0
- package/dist/proof/acceptance.d.ts +5 -0
- package/dist/proof/artifact.d.ts +6 -0
- package/dist/proof/cache.d.ts +4 -0
- package/dist/runtime/attempt.d.ts +19 -0
- package/dist/runtime/budget.d.ts +4 -0
- package/dist/runtime/engine-availability.d.ts +18 -0
- package/dist/runtime/graph-executor.d.ts +7 -0
- package/dist/runtime/monitor.d.ts +80 -0
- package/dist/runtime/node-lifecycle.d.ts +84 -0
- package/dist/runtime/paths.d.ts +2 -0
- package/dist/runtime/persist.d.ts +31 -0
- package/dist/runtime/preflight-record.d.ts +149 -0
- package/dist/runtime/process-tree.d.ts +1 -0
- package/dist/runtime/result-contract.d.ts +4 -0
- package/dist/runtime/result-parts.d.ts +1 -0
- package/dist/runtime/run-definition.d.ts +24 -0
- package/dist/runtime/run-event.d.ts +9 -0
- package/dist/runtime/runner.d.ts +139 -0
- package/dist/runtime/supervisor.d.ts +111 -0
- package/dist/runtime/team-rooms.d.ts +13 -0
- package/dist/runtime/workspace-policy.d.ts +25 -0
- package/dist/storage/error.d.ts +1 -0
- package/dist/storage/id.d.ts +1 -0
- package/dist/storage/local.d.ts +12 -0
- package/dist/storage/local.js +1492 -0
- package/dist/storage/local.js.map +1 -0
- package/dist/testing.d.ts +15 -0
- package/dist/testing.js +274 -0
- package/dist/testing.js.map +1 -0
- package/dist/workflow-agent-response.d.ts +3 -0
- package/dist/workflow-support.d.ts +36 -0
- package/dist/workflow-support.js +5 -0
- package/dist/workflow-support.js.map +1 -0
- package/dist/workflow.d.ts +73 -0
- package/dist/workspace/conformance.d.ts +1 -0
- package/dist/workspace/git-provider.d.ts +26 -0
- package/dist/workspace/provider.d.ts +2 -0
- package/package.json +91 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/describe.ts","../src/core/context.ts","../src/core/errors.ts","../src/core/approval-job.ts","../src/core/env-overlay.ts","../src/core/budget.ts","../src/core/agent.ts","../src/core/text.ts","../src/core/engine-meta.ts","../src/core/condition.ts","../src/core/concurrency.ts","../src/core/git.ts","../src/core/feedback.ts","../src/core/job.ts","../src/workflow-agent-response.ts","../src/workflow-support.ts"],"names":["delay","all","stat","createHash","minConfidence","passed","join","diff","files","readFileSync","outcome","resolve","existsSync","readFile"],"mappings":";;;;;;;;;;;;;;;AAaA,IAAM,IAAA,uBAAW,OAAA,EAAyB;AAC1C,IAAM,KAAA,uBAAY,OAAA,EAAwB;AAGnC,SAAS,OAAA,CAA0B,QAAW,IAAA,EAAkB;AACrE,EAAA,IAAA,CAAK,GAAA,CAAI,QAAQ,IAAI,CAAA;AACrB,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,QAAQ,GAAA,EAA+B;AACrD,EAAA,OAAO,OAAO,GAAA,KAAQ,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,GAAI,MAAA;AACrD;AAGO,SAAS,WAAA,CAA8B,QAAW,MAAA,EAAgB;AACvE,EAAA,MAAM,IAAA,GAAO,QAAQ,MAAM,CAAA;AAC3B,EAAA,OAAO,IAAA,GAAO,OAAA,CAAQ,MAAA,EAAQ,IAAI,CAAA,GAAI,MAAA;AACxC;AAGO,SAAS,QAAA,CAA2B,MAAS,KAAA,EAAkB;AACpE,EAAA,KAAA,CAAM,GAAA,CAAI,MAAM,KAAK,CAAA;AACrB,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,UAAU,KAAA,EAAwB;AACzC,EAAA,IAAI,OAAO,UAAU,UAAA,EAAY;AAC/B,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA;AACzB,IAAA,IAAI,GAAG,OAAO,CAAA;AAAA,EAChB;AACA,EAAA,OAAO,OAAA;AACT;AAGO,SAAS,mBAAmB,KAAA,EAAkC;AACnE,EAAA,IAAI,KAAA,IAAS,IAAA,EAAM,OAAO,EAAC;AAC3B,EAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,GAAG,OAAO,KAAA,CAAM,QAAQ,kBAAkB,CAAA;AACjE,EAAA,OAAO,CAAC,SAAA,CAAU,KAAK,CAAC,CAAA;AAC1B;AAEA,IAAM,KAAA,GAAQ,CAAC,CAAA,EAAW,CAAA,KAAc,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,EAAA,GAAK,GAAG,CAAA,CAAA;AAyFtE,SAAS,eAAe,KAAA,EAAoC;AAC1D,EAAA,MAAM,CAAA,GAAI,KAAA;AACV,EAAA,IAAI,CAAC,CAAA,IAAK,OAAO,CAAA,KAAM,UAAU,OAAO,MAAA;AACxC,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,IAAI,EAAE,IAAA,EAAM,IAAA,CAAK,KAAK,CAAA,KAAA,EAAQ,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AACtC,EAAA,IAAI,CAAA,CAAE,OAAA,EAAS,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,CAAA,QAAA,EAAW,CAAA,CAAE,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAClE,EAAA,IAAI,CAAA,CAAE,YAAA,EAAc,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,CAAA,aAAA,EAAgB,CAAA,CAAE,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACjF,EAAA,IAAI,CAAA,CAAE,cAAA,EAAgB,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,CAAA,SAAA,EAAY,CAAA,CAAE,cAAA,CAAe,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACjF,EAAA,IAAI,CAAA,CAAE,UAAA,EAAY,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,CAAA,KAAA,EAAQ,CAAA,CAAE,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACrE,EAAA,IAAI,CAAA,CAAE,YAAA,EAAc,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,CAAA,cAAA,EAAiB,CAAA,CAAE,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAClF,EAAA,OAAO,IAAA,CAAK,KAAK,IAAI,CAAA;AACvB;AAOO,SAAS,UAAA,CAAW,IAAA,EAA2B,MAAA,GAAS,EAAA,EAAc;AAC3E,EAAA,IAAI,CAAC,IAAA,EAAM,OAAO,CAAC,CAAA,EAAG,MAAM,CAAA,0CAAA,CAA4C,CAAA;AACxE,EAAA,MAAM,KAAK,IAAA,CAAK,IAAA,GAAO,CAAA,EAAA,EAAK,IAAA,CAAK,IAAI,CAAA,CAAA,CAAA,GAAM,EAAA;AAC3C,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,OAAiB,EAAC;AACxB,MAAA,IAAI,OAAO,KAAK,GAAA,KAAQ,QAAA,OAAe,IAAA,CAAK,CAAA,IAAA,EAAO,IAAA,CAAK,GAAG,CAAA,CAAE,CAAA;AAC7D,MAAA,IAAI,OAAO,KAAK,UAAA,KAAe,QAAA;AAC7B,QAAA,IAAA,CAAK,IAAA,CAAK,CAAA,YAAA,EAAe,IAAA,CAAK,UAAU,CAAA,KAAA,CAAO,CAAA;AACjD,MAAA,IAAI,IAAA,CAAK,UAAA,EAAY,IAAA,CAAK,IAAA,CAAK,aAAa,CAAA;AAC5C,MAAA,MAAM,GAAA,GAAM,KAAK,MAAA,GAAS,CAAA,EAAA,EAAK,KAAK,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AACpD,MAAA,GAAA,CAAI,KAAK,CAAA,EAAG,MAAM,OAAO,EAAE,CAAA,EAAG,GAAG,CAAA,CAAE,CAAA;AACnC,MAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,MAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,MAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,MAAA,IAAI,KAAA,EAAO,MAAA,EAAQ,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,SAAA,EAAY,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACnE,MAAA,IAAI,IAAA,EAAM,MAAA,EAAQ,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,QAAA,EAAW,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAChE,MAAA,IAAI,MAAA,EAAQ,MAAA,EAAQ,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,UAAA,EAAa,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACtE,MAAA,MAAM,IAAA,GAAO,CAAC,IAAA,CAAK,MAAA,GAAS,WAAW,IAAI,CAAA,CAAE,OAAO,OAAO,CAAA;AAC3D,MAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,kBAAA,EAAqB,IAAA,CAAK,IAAA,CAAK,KAAK,CAAC,CAAA,CAAE,CAAA;AAC1E,MAAA,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,OAAA,CAAS,CAAA;AAC3B,MAAA,GAAA,CAAI,IAAA,CAAK,GAAG,UAAA,CAAW,IAAA,CAAK,MAA6B,CAAA,EAAG,MAAM,MAAM,CAAC,CAAA;AACzE,MAAA;AAAA,IACF;AAAA,IACA,KAAK,KAAA,EAAO;AACV,MAAA,MAAM,KAAA,GAAS,IAAA,CAAK,KAAA,IAAoC,EAAC;AACzD,MAAA,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,GAAA,EAAM,EAAE,CAAA,EAAA,EAAK,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQ,MAAM,CAAC,CAAA,CAAA,CAAG,CAAA;AAC7D,MAAA,MAAM,YAAY,IAAA,CAAK,YAAA;AACvB,MAAA,IAAI,OAAO,cAAc,QAAA,EAAU;AACjC,QAAA,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,aAAA,EAAgB,SAAS,CAAA,CAAE,CAAA;AAAA,MAC/C,CAAA,MAAA,IAAW,aAAa,OAAO,SAAA,KAAc,YAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAClF,QAAA,MAAM,MAAA,GAAS,OAAO,OAAA,CAAQ,SAAS,EACpC,GAAA,CAAI,CAAC,CAAC,MAAA,EAAQ,KAAK,MAAM,CAAA,EAAG,MAAM,IAAI,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA,CACrD,KAAK,IAAI,CAAA;AACZ,QAAA,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,aAAA,EAAgB,MAAM,CAAA,CAAE,CAAA;AAAA,MAC5C;AACA,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,MAAM,OAAiB,EAAC;AACxB,QAAA,IAAI,IAAA,CAAK,KAAA,EAAO,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,CAAA,MAAA,EAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAClE,QAAA,IAAI,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA;AACvC,QAAA,IAAI,IAAA,CAAK,IAAA,EAAM,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,CAAA,MAAA,EAAS,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAChE,QAAA,IAAI,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA;AACtC,QAAA,GAAA,CAAI,KAAK,CAAA,EAAG,MAAM,CAAA,IAAA,EAAO,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,MAAA,GAAS,CAAA,EAAA,EAAK,KAAK,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,CAAE,CAAA;AACjF,QAAA,IAAI,IAAA,CAAK,MAAM,GAAA,CAAI,IAAA,CAAK,GAAG,MAAM,CAAA,YAAA,EAAe,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAC3D,QAAA,IAAI,IAAA,CAAK,MAAM,GAAA,CAAI,IAAA,CAAK,GAAG,MAAM,CAAA,YAAA,EAAe,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAC3D,QAAA,GAAA,CAAI,IAAA,CAAK,GAAG,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA,EAAG,MAAM,QAAQ,CAAC,CAAA;AAAA,MACrD;AACA,MAAA;AAAA,IACF;AAAA,IACA,KAAK,OAAA;AACH,MAAA,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,EAAE,CAAA,CAAE,CAAA;AAC9B,MAAA;AACE,QAAA,MAAM,QAAA,GAAW,cAAA,CAAe,IAAA,CAAK,QAAQ,CAAA;AAC7C,QAAA,IAAI,UAAU,GAAA,CAAI,IAAA,CAAK,GAAG,MAAM,CAAA,YAAA,EAAe,QAAQ,CAAA,CAAE,CAAA;AAAA,MAC3D;AACA,MAAA;AAAA,IACF,KAAK,IAAA;AACH,MAAA,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,EAAE,CAAA,CAAE,CAAA;AAC3B,MAAA;AAAA,IACF;AACE,MAAA,GAAA,CAAI,IAAA,CAAK,GAAG,MAAM,CAAA,EAAG,KAAK,IAAI,CAAA,EAAG,EAAE,CAAA,CAAE,CAAA;AAAA;AAEzC,EAAA,OAAO,GAAA;AACT;;;ACtLO,SAAS,aACd,GAAA,EACoB;AACpB,EAAA,IAAI,GAAA,CAAI,SAAA,KAAc,MAAA,EAAW,OAAO,IAAI,SAAA,IAAa,MAAA;AACzD,EAAA,IAAI,GAAA,CAAI,YAAA,KAAiB,MAAA,EAAW,OAAO,IAAI,YAAA,IAAgB,MAAA;AAC/D,EAAA,OAAO,IAAI,KAAA,EAAO,IAAA;AACpB;AAEO,SAAS,YAAA,CACd,QACA,IAAA,EACY;AACZ,EAAA,OAAO;AAAA,IACL,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,eAAe,MAAA,CAAO,aAAA;AAAA,IACtB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,yBAAyB,MAAA,CAAO,uBAAA;AAAA,IAChC,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,WAAW,MAAA,CAAO,SAAA;AAAA,IAClB,YAAY,MAAA,CAAO,UAAA;AAAA;AAAA;AAAA,IAGnB,SAAA,EAAW,IAAA,CAAK,SAAA,IAAa,MAAA,CAAO,SAAA;AAAA,IACpC,WAAA,EAAa,IAAA,CAAK,WAAA,IAAe,MAAA,CAAO,WAAA;AAAA;AAAA;AAAA;AAAA,IAIxC,UAAA,EAAY,IAAA,CAAK,UAAA,IAAc,MAAA,CAAO,UAAA;AAAA,IACtC,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,WAAW,MAAA,CAAO,SAAA;AAAA,IAClB,KAAK,MAAA,CAAO,GAAA;AAAA,IACZ,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,KAAA,EAAO,IAAA,CAAK,KAAA,IAAS,MAAA,CAAO,KAAA;AAAA,IAC5B,cACE,IAAA,CAAK,YAAA,KAAiB,MAAA,GAClB,IAAA,CAAK,eACL,MAAA,CAAO,YAAA;AAAA,IACb,WAAW,IAAA,CAAK,SAAA,KAAc,MAAA,GAAY,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AAAA,IAClE,SAAA,EAAW,IAAA,CAAK,SAAA,IAAa,MAAA,CAAO,SAAA;AAAA,IACpC,cAAA,EAAgB,IAAA,CAAK,cAAA,IAAkB,MAAA,CAAO,cAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAK9C,SAAA,EAAW,IAAA,CAAK,SAAA,IAAa,MAAA,CAAO,SAAA;AAAA,IACpC,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,UAAU,IAAA,CAAK,QAAA;AAAA;AAAA,IAEf,OAAO,IAAA,CAAK;AAAA,GACd;AACF;AC1DO,IAAM,SAAA,GAAN,MAAM,UAAA,SAAkB,KAAA,CAAM;AAAA,EAC1B,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA;AAAA,EAEA,YAAA;AAAA;AAAA,EAEA,OAAA;AAAA,EAET,YAAY,IAAA,EAAqB;AAC/B,IAAA,KAAA;AAAA,MACE,IAAA,CAAK,OAAA;AAAA,MACL,KAAK,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,IAAA,CAAK,OAAM,GAAI;AAAA,KACrD;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,WAAA;AACZ,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AACjB,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,KAAA;AAClB,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AACjB,IAAA,IAAA,CAAK,YAAY,IAAA,CAAK,SAAA;AACtB,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,YAAA;AACzB,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA;AACpB,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,SAAA,IAAa,gBAAA,CAAiB,IAAI,CAAA;AAAA,EAC1D;AAAA;AAAA,EAGA,OAAO,IAAA,CACL,KAAA,EACA,QAAA,EACW;AACX,IAAA,IAAI,KAAA,YAAiB,YAAW,OAAO,KAAA;AACvC,IAAA,IAAI,iBAAiB,WAAA,EAAa;AAChC,MAAA,OAAO,IAAI,UAAA,CAAU;AAAA,QACnB,GAAG,QAAA;AAAA,QACH,IAAA,EAAM,wBAAA,CAAyB,KAAA,CAAM,IAAA,EAAM,SAAS,IAAI,CAAA;AAAA,QACxD,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,KAAA,EAAO,KAAA;AAAA,QACP,cAAc,KAAA,CAAM,YAAA;AAAA,QACpB,SAAS,KAAA,CAAM;AAAA,OAChB,CAAA;AAAA,IACH;AACA,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,OAAO,IAAI,WAAU,EAAE,GAAG,UAAU,OAAA,EAAS,KAAA,EAAO,OAAO,CAAA;AAAA,EAC7D;AAAA,EAEA,MAAA,GAAS;AACP,IAAA,OAAO;AAAA,MACL,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,SAAS,IAAA,CAAK;AAAA,KAChB;AAAA,EACF;AACF;AAEA,SAAS,wBAAA,CACP,MACA,QAAA,EACe;AACf,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,YAAA;AACH,MAAA,OAAO,YAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT;AACE,MAAA,OAAO,QAAA;AAAA;AAEb;AAEA,IAAM,0BAAA,uBAAiC,GAAA,CAAmB;AAAA,EACxD,QAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEM,SAAS,sBACd,KAAA,EACoB;AACpB,EAAA,OAAO,KAAA,YAAiB,SAAA,IAAa,0BAAA,CAA2B,GAAA,CAAI,MAAM,IAAI,CAAA;AAChF;AAcA,SAAS,iBAAiB,IAAA,EAA8B;AACtD,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,QAAA;AAAA,IACL,KAAK,SAAA;AAAA,IACL,KAAK,YAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,IAAA,CAAK,OAAA,IAAW,IAAA,IAAQ,IAAA,CAAK,YAAA,IAAgB,IAAA;AAAA,IACtD;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;;;AC5IA,IAAM,SAAA,uBAAgB,OAAA,EAAyB;AAGxC,SAAS,cAAA,CAAe,KAAiB,GAAA,EAAkC;AAChF,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,GAAA,EAAI;AACxB,EAAA,IAAI,GAAA,KAAQ,MAAA,EAAW,SAAA,CAAU,GAAA,CAAI,QAAQ,GAAG,CAAA;AAChD,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,eAAA,CAAgB,GAAA,EAAiB,KAAA,EAAY,GAAA,EAAU,KAAA,EAAqC;AAC1G,EAAA,OAAO,GAAA,CAAI,cAAA,CAAe,KAAA,EAAO,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA,KAAM,KAAA,GAAQ,GAAA,GAAM,MAAS,CAAC,CAAA;AAClF;AA+BA,IAAM,eAAA,GAA8B;AAAA,EAClC,IAAA,EAAM,QAAA;AAAA,EACN,UAAA,EAAY,EAAE,QAAA,EAAU,EAAE,IAAA,EAAM,SAAA,EAAU,EAAG,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,EAAS,EAAE;AAAA,EACtE,QAAA,EAAU,CAAC,UAAU;AACvB,CAAA;AAEA,SAAS,QAAQ,GAAA,EAA4B;AAC3C,EAAA,IAAI,GAAA,CAAI,UAAU,MAAA,EAAW;AAC3B,IAAA,OAAO,MAAA,CAAO,WAAA;AAAA,MACZ,OAAO,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,IAAA,EAAM,OAAO,MAAM,CAAC,IAAA,EAAM,QAAQ,OAAA,IAAW,OAAA,CAAQ,MAAM,CAAC;AAAA,KAC9F;AAAA,EACF;AACA,EAAA,OAAO,GAAA,CAAI,aAAa,OAAA,IAAW,IAAA;AACrC;AAGA,SAAS,SAAS,QAAA,EAAqC;AACrD,EAAA,MAAM,MAAA,GAAS,QAAA,KAAa,IAAA,IAAQ,OAAO,QAAA,KAAa,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GACtF,QAAA,GACD,MAAA;AACJ,EAAA,IAAI,MAAA,KAAW,MAAA,IAAa,OAAO,MAAA,CAAO,aAAa,SAAA,EAAW;AAChE,IAAA,MAAM,IAAI,SAAA,CAAU,EAAE,MAAM,YAAA,EAAc,OAAA,EAAS,iDAAiD,CAAA;AAAA,EACtG;AACA,EAAA,OAAO;AAAA,IACL,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,GAAI,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,GAAW,EAAE,IAAA,EAAM,MAAA,CAAO,IAAA,EAAK,GAAI;AAAC,GACjE;AACF;AAKA,SAAS,QAAQ,MAAA,EAAoF;AACnG,EAAA,IAAI,KAAA,GAAsB,QAAA;AAC1B,EAAA,IAAI,MAAA;AACJ,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,QAAQ,MAAM,IAAA;AAAM,MAClB,KAAK,oBAAA;AAAsB,QAAA,KAAA,GAAQ,SAAA;AAAW,QAAA;AAAA,MAC9C,KAAK,kBAAA;AAAoB,QAAA,KAAA,GAAQ,SAAA;AAAW,QAAA;AAAA,MAC5C,KAAK,mBAAA;AAAqB,QAAA,KAAA,GAAQ,SAAA;AAAW,QAAA;AAAA,MAC7C,KAAK,oBAAA;AAAsB,QAAA,KAAA,GAAQ,UAAA;AAAY,QAAA,MAAA,GAAS,QAAA,CAAS,MAAM,QAAQ,CAAA;AAAG,QAAA;AAAA,MAClF,KAAK,qBAAA;AAAuB,QAAA,KAAA,GAAQ,YAAA;AAAc,QAAA;AACxB;AAC5B,EACF;AACA,EAAA,OAAO,WAAW,MAAA,GAAY,EAAE,OAAM,GAAI,EAAE,OAAO,MAAA,EAAO;AAC5D;AAEO,SAAS,QAAA,CAAS,OAAe,IAAA,EAA4B;AAClE,EAAA,MAAM,GAAA,GAAW,OAAO,GAAA,KAAQ;AAC9B,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,GAAA,CAAI,IAAI,CAAA;AACzB,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,WAAA,EAAa,EAAA,EAAI,IAAA,CAAK,GAAA,EAAI,EAAG,IAAA,EAAM,KAAA,EAAO,SAAA,EAAW,GAAA,CAAI,WAAW,CAAA;AACrF,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI;AACF,MAAA,OAAA,GAAU,MAAM,OAAO,GAAA,EAAK,KAAA,EAAO,MAAM,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA,KAAM,GAAG,CAAA;AAAA,IACrE,SAAS,CAAA,EAAG;AACV,MAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,IAAA,CAAK,CAAA,EAAG,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAM,GAAA,CAAI,IAAA,EAAM,SAAA,EAAW,GAAA,CAAI,WAAW,CAAA;AACzG,MAAA,OAAA,GAAU,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,KAAA,CAAM,SAAS,KAAA,EAAM;AAC1D,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,IAAI,IAAA,CAAK,GAAA,EAAI,EAAG,IAAA,EAAM,SAAS,KAAA,CAAM,OAAA,EAAS,IAAA,EAAM,KAAA,CAAM,MAAM,CAAA;AAAA,IAC5F;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,IAAA,CAAK,GAAA,EAAI,EAAG,IAAA,EAAM,KAAA,EAAO,OAAA,EAAS,CAAA;AAClE,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO,QAAQ,GAAA,EAAK;AAAA,IAClB,IAAA,EAAM,UAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,GAAI,KAAK,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAO,GAAI;AAAC,GAC5D,CAAA;AACH;AAEA,eAAe,MAAA,CAAO,GAAA,EAAiB,KAAA,EAAe,IAAA,EAAuB,QAAA,EAAqC;AAChH,EAAA,MAAM,SAAmC,GAAA,CAAI,SAAA;AAC7C,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,MAAM,IAAI,SAAA,CAAU;AAAA,MAClB,IAAA,EAAM,YAAA;AAAA,MACN,OAAA,EAAS,aAAa,KAAK,CAAA,wDAAA;AAAA,KAC5B,CAAA;AAAA,EACH;AACA,EAAA,MAAM,UAAU,kBAAA,CAAmB;AAAA,IACjC,MAAA,EAAQ,KAAA;AAAA,IACR,WAAA,EAAa,CAAA;AAAA,IACb,cAAc,IAAA,CAAK,QAAA;AAAA,IACnB,cAAA,EAAgB,eAAA;AAAA,IAChB,KAAA,EAAO,IAAA,CAAK,KAAA,IAAS,OAAA,CAAQ,GAAG;AAAA,GACjC,CAAA;AACD,EAAA,IAAI,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,OAAA,CAAQ,MAAM,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAC,CAAA;AACvE,EAAA,IAAI,WAAW,MAAA,EAAW;AAGxB,IAAA,MAAM,MAAA,CAAO,KAAK,OAAO,CAAA;AACzB,IAAA,CAAC,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,OAAA,CAAQ,MAAM,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAC,CAAA;AACpE,IAAA,IAAI,MAAA,KAAW,MAAA,IAAa,KAAA,KAAU,SAAA,IAAa,UAAU,SAAA,EAAW;AACtE,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,CAAA,cAAA,EAAiB,IAAA,CAAK,QAAQ,yDAAyD,KAAK,CAAA,uBAAA,CAAA;AAAA,QACrG,IAAA,EAAM;AAAA,OACR;AAAA,IACF;AAAA,EACF;AACA,EAAA,IAAI,MAAA,KAAW,MAAA,IAAa,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW;AACrD,IAAA,MAAA,GAAS,MAAM,gBAAgB,MAAA,EAAQ,OAAA,EAAS,GAAG,KAAK,CAAA,OAAA,CAAA,EAAW,KAAK,MAAM,CAAA;AAAA,EAChF;AACA,EAAA,MAAM,MAAA,GAAkB,EAAE,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAS,yBAAyB,IAAA,CAAK,QAAQ,CAAA,CAAA,EAAI,IAAA,EAAM,OAAA,EAAQ;AAC7G,EAAA,IAAI,QAAA,IAAY,MAAA,KAAW,MAAA,IAAa,GAAA,CAAI,UAAA,KAAe,MAAA,IAAU,CAAC,GAAA,CAAI,MAAA,CAAO,OAAA,IAAW,GAAA,CAAI,KAAA,KAAU,MAAA,EAAW;AAEnH,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,IAAA,EAAM,UAAA;AAAA,MAAY,EAAA,EAAI,KAAK,GAAA,EAAI;AAAA,MAAG,MAAM,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,GAAG,EAAE,CAAA;AAAA,MAAG,IAAA,EAAM,IAAI,KAAA,CAAM,IAAA;AAAA,MACrF,KAAA,EAAO,MAAA;AAAA,MAAQ,OAAA,EAAS,IAAI,KAAA,CAAM,OAAA;AAAA,MAAS,KAAA,EAAO,CAAC,GAAG,GAAA,CAAI,MAAM,KAAK,CAAA;AAAA,MACrE,GAAI,GAAA,CAAI,KAAA,CAAM,IAAA,KAAS,MAAA,GAAY,EAAC,GAAI,EAAE,IAAA,EAAM,GAAA,CAAI,KAAA,CAAM,IAAA,EAAK;AAAA,MAC/D,GAAI,GAAA,CAAI,KAAA,CAAM,IAAA,KAAS,MAAA,GAAY,EAAC,GAAI,EAAE,IAAA,EAAM,GAAA,CAAI,KAAA,CAAM,IAAA,EAAK;AAAA,MAC/D,WAAW,GAAA,CAAI,SAAA;AAAA,MAAW,OAAA,EAAS;AAAA,KACpC,CAAA;AAAA,EACH;AACA,EAAA,OAAO,MAAA,KAAW,MAAA,IAAa,GAAA,CAAI,UAAA,KAAe,MAAA,IAAU,CAAC,GAAA,CAAI,MAAA,CAAO,OAAA,KAChE,KAAA,KAAU,SAAA,IAAa,KAAA,KAAU,SAAA,CAAA,EAAY;AACnD,IAAA,IAAI;AAEF,MAAA,MAAMA,WAAM,GAAA,EAAO,KAAA,CAAA,EAAW,EAAE,MAAA,EAAQ,GAAA,CAAI,QAAQ,CAAA;AAAA,IACtD,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,CAAC,GAAA,CAAI,MAAA,CAAO,OAAA,EAAS,MAAM,KAAA;AAC/B,MAAA;AAAA,IACF;AACA,IAAA,CAAC,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,OAAA,CAAQ,MAAM,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAC,CAAA;AAAA,EACtE;AACA,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,QAAA,EAAU;AACnB,IAAA,MAAM,QAAA,GAA2B;AAAA,MAC/B,QAAA,EAAU,IAAA;AAAA,MACV,GAAI,OAAO,MAAA,CAAO,IAAA,KAAS,YAAY,MAAA,CAAO,IAAA,KAAS,EAAA,GAAK,EAAE,MAAM,aAAA,CAAc,MAAA,CAAO,IAAI,CAAA,KAAM;AAAC,KACtG;AACA,IAAA,OAAO,EAAE,QAAQ,MAAA,EAAQ,OAAA,EAAS,aAAa,IAAA,CAAK,QAAQ,CAAA,CAAA,EAAI,IAAA,EAAM,QAAA,EAAS;AAAA,EACjF;AACA,EAAA,MAAM,IAAA,GAAO,OAAO,MAAA,CAAO,IAAA,KAAS,YAAY,MAAA,CAAO,IAAA,KAAS,EAAA,GAC5D,aAAA,CAAc,MAAA,CAAO,IAAI,CAAA,GACzB,CAAA,SAAA,EAAY,KAAK,QAAQ,CAAA,CAAA;AAC7B,EAAA,MAAM,QAAA,GAA2B,EAAE,QAAA,EAAU,KAAA,EAAO,IAAA,EAAK;AACzD,EAAA,IAAI,IAAA,CAAK,WAAW,MAAA,EAAW;AAC7B,IAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM,MAAM,QAAA,EAAS;AAAA,EACzD;AAGA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,IAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAU;AAAA,MACR,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,MAAA,EAAQ,IAAA;AAAA,MACR,UAAU,CAAC,EAAE,UAAU,IAAA,EAAM,QAAA,EAAU,SAAS,CAAA;AAAA,MAChD,KAAA,EAAO;AAAA;AACT,GACF;AACF;AAGA,eAAe,eAAA,CACb,MAAA,EACA,OAAA,EACA,QAAA,EACA,OAAA,EACyB;AACzB,EAAA,MAAM,QAAQ,MAAM,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,WAAW,QAAQ,CAAA;AAC5D,EAAA,IAAI,CAAC,MAAM,EAAA,EAAI;AACb,IAAA,MAAM,IAAI,SAAA,CAAU;AAAA,MAClB,IAAA,EAAM,YAAA;AAAA,MACN,SAAS,CAAA,cAAA,EAAiB,OAAA,CAAQ,YAAY,CAAA,qCAAA,EAAwC,MAAM,IAAI,CAAA,CAAA;AAAA,KACjG,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,MAAM,QAAQ,OAAO,CAAA;AAAA,EAClC,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,SAAA,EAAW,MAAM,UAAU,CAAA;AACxD,IAAA,MAAM,KAAA;AAAA,EACR;AAGA,EAAA,MAAM,UAAA,GAAyB;AAAA,IAC7B,UAAU,QAAA,CAAS,QAAA;AAAA,IACnB,GAAI,OAAO,QAAA,CAAS,IAAA,KAAS,QAAA,GAAW,EAAE,IAAA,EAAM,QAAA,CAAS,IAAA,EAAK,GAAI;AAAC,GACrE;AACA,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI;AACF,IAAA,SAAA,GAAY,MAAM,MAAA,CAAO,MAAA;AAAA,MACvB,OAAA,CAAQ,SAAA;AAAA,MACR,KAAA,CAAM,UAAA;AAAA,MACN,QAAA;AAAA,MACA,OAAA,CAAQ,MAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,SAAA,EAAW,MAAM,UAAU,CAAA;AACxD,IAAA,MAAM,KAAA;AAAA,EACR;AACA,EAAA,IAAI,CAAC,UAAU,EAAA,EAAI;AACjB,IAAA,MAAM,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,SAAA,EAAW,MAAM,UAAU,CAAA;AACxD,IAAA,MAAM,IAAI,SAAA,CAAU;AAAA,MAClB,IAAA,EAAM,YAAA;AAAA,MACN,SAAS,CAAA,eAAA,EAAkB,OAAA,CAAQ,YAAY,CAAA,eAAA,EAAkB,UAAU,MAAM,CAAA;AAAA,KAClF,CAAA;AAAA,EACH;AACA,EAAA,OAAO,QAAA,CAAS,UAAU,QAAQ,CAAA;AACpC;;;ACjPO,SAAS,YACX,MAAA,EACiC;AACpC,EAAA,IAAI,MAAA;AACJ,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAK1C,MAAA,CAAC,2BAAW,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,EAA6B,CAAC,CAAA,GAAI,CAAA;AAAA,IAClE;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAUO,SAAS,UAAA,CACd,KACA,OAAA,EACoC;AACpC,EAAA,OAAO,SAAS,GAAA,CAAI,WAAA,EAAa,GAAA,EAAK,GAAA,CAAI,YAAY,OAAO,CAAA;AAC/D;AAGO,SAAS,OAAA,CAAQ,SAAiC,GAAA,EAAe;AACtE,EAAA,IAAI,CAAC,WAAW,OAAO,OAAA,KAAY,YAAY,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AACrE,IAAA,MAAM,IAAI,SAAA,CAAU;AAAA,MAClB,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,yDACP,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,GAAI,UAAA,GAAa,OAAO,OAC/C,CAAA,CAAA;AAAA,KACD,CAAA;AAAA,EACH;AACA,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAI5C,IAAA,IAAI,CAAC,CAAA,IAAK,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,SAAA,CAAU;AAAA,QAClB,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,CAAA,YAAA,EAAe,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA,qDAAA;AAAA,OAC1C,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,MAAA,MAAM,IAAI,SAAA,CAAU;AAAA,QAClB,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,CAAA,mBAAA,EAAsB,CAAC,CAAA,wBAAA,EAA2B,OAAO,CAAC,CAAA,CAAA;AAAA,OACpE,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,MAAM,OAAA,GAAe,CAAC,GAAA,KACpB,eAAA;AAAA,IAAgB,GAAA;AAAA,IAAK,OAAA;AAAA,IAAS,GAAA;AAAA;AAAA;AAAA;AAAA,IAI5B,aAAa,GAAA,EAAK;AAAA,MAChB,OAAO,GAAA,CAAI,KAAA;AAAA,MACX,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,aAAa,GAAA,CAAI,WAAA;AAAA,MACjB,YAAY,GAAA,CAAI,UAAA;AAAA,MAChB,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,YAAY,EAAE,GAAG,GAAA,CAAI,UAAA,EAAY,GAAG,OAAA;AAAQ,KAC7C;AAAA,GACH;AAEF,EAAA,MAAM,IAAA,GAAO,QAAQ,GAAG,CAAA;AACxB,EAAA,OAAO,IAAA,GAAO,OAAA,CAAQ,OAAA,EAAS,IAAI,CAAA,GAAI,OAAA;AACzC;;;AC5EO,IAAM,SAAN,MAAa;AAAA,EACT,KAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACD,MAAA,GAAS,CAAA;AAAA,EACT,YAAA,GAAe,CAAA;AAAA,EAEvB,YAAY,MAAA,EAAsB;AAChC,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,QAAA,GAAW,OAAO,QAAA,IAAY,CAAA;AACnC,IAAA,IAAA,CAAK,IAAA,GAAO,OAAO,IAAA,IAAQ,KAAA;AAAA,EAC7B;AAAA;AAAA,EAGA,IAAI,MAAA,EAAsB;AACxB,IAAA,IAAI,OAAO,QAAA,CAAS,MAAM,KAAK,MAAA,GAAS,CAAA,OAAQ,MAAA,IAAU,MAAA;AAAA,EAC5D;AAAA,EAEA,SAAS,KAAA,EAA2B;AAClC,IAAA,IAAI,KAAA,CAAM,SAAS,SAAA,EAAW;AAC5B,MAAA,IAAA,CAAK,YAAA,IAAgB,CAAA;AACrB,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,WAAA,GAAc,KAAA,CAAM,YAAY,CAAA;AAAA,EACjD;AAAA,EAEA,iBAAA,GAA4B;AAC1B,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA,EAEA,KAAA,GAAgB;AACd,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA,EAEA,SAAA,GAAoB;AAClB,IAAA,OAAO,KAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,KAAA,GAAQ,KAAK,MAAM,CAAA;AAAA,EAC7C;AAAA;AAAA,EAGA,QAAA,GAAoB;AAClB,IAAA,OAAO,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,KAAA;AAAA,EAC7C;AACF;AAOO,SAAS,aAAa,GAAA,EAA0B;AACrD,EAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,EAAA,IAAI,CAAC,MAAA,EAAQ;AACb,EAAA,IAAI,MAAA,CAAO,iBAAA,EAAkB,GAAI,CAAA,EAAG;AAClC,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,GAAA,CAAI,GAAA;AAAA,QACF,CAAA,2BAAA,EAA8B,MAAA,CAAO,iBAAA,EAAmB,CAAA,iCAAA,CAAA;AAAA,QACxD;AAAA,OACF;AACA,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAI,SAAA,CAAU;AAAA,MAClB,IAAA,EAAM,QAAA;AAAA,MACN,KAAA,EAAO,QAAA;AAAA,MACP,OAAA,EAAS,CAAA,mDAAA,EAAsD,MAAA,CAAO,iBAAA,EAAmB,CAAA,QAAA;AAAA,KAC1F,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,EAAS,EAAG;AACxB,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,GAAA,CAAI,GAAA;AAAA,MACF,yBAAyB,MAAA,CAAO,KAAA,EAAO,CAAA,CAAA,EAAI,OAAO,KAAK,CAAA,0BAAA,CAAA;AAAA,MACvD;AAAA,KACF;AACA,IAAA;AAAA,EACF;AACA,EAAA,MAAM,IAAI,SAAA,CAAU;AAAA,IAClB,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,SAAS,CAAA,wBAAA,EAA2B,MAAA,CAAO,OAAO,CAAA,CAAA,EAAI,OAAO,KAAK,CAAA,aAAA;AAAA,GACnE,CAAA;AACH;ACnBO,SAAS,SAAS,IAAA,EAA4B;AACnD,EAAA,OAAO,YAAA,CAAa,IAAA,EAAM,MAAM,CAAA,CAAE,IAAA,EAAK;AACzC;AAGO,SAAS,YAAY,KAAA,EAAqB;AAC/C,EAAA,IAAI,CAAC,KAAA,CAAM,IAAA,EAAM,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAClE,EAAA,IAAI,CAAC,KAAA,CAAM,YAAA,EAAc,IAAA,EAAK,EAAG,MAAM,IAAI,KAAA,CAAM,CAAA,aAAA,EAAgB,KAAA,CAAM,IAAI,CAAA,qBAAA,CAAuB,CAAA;AAClG,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,aAAa,GAAA,EAA4B;AAChD,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA,GAAW,GAAA,GAAM,GAAA,CAAI,IAAA;AAC7C;AAEA,SAAS,YAAA,CAAa,OAA2B,KAAA,EAAqB;AACpE,EAAA,IAAI,CAAC,OAAO,IAAA,EAAK,QAAS,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,sBAAA,CAAwB,CAAA;AACtE;AAEA,SAAS,gBAAA,CAAiB,KAAoB,KAAA,EAAqB;AACjE,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,IAAI,CAAC,IAAI,IAAA,EAAK,QAAS,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,kBAAA,CAAoB,CAAA;AAC7D,IAAA;AAAA,EACF;AACA,EAAA,WAAA,CAAY,GAAG,CAAA;AACjB;AAGO,SAAS,YAAY,GAAA,EAAyB;AACnD,EAAA,IAAI,CAAC,GAAA,CAAI,IAAA,EAAM,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAChE,EAAA,IAAI,CAAC,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAK,EAAG,MAAM,IAAI,KAAA,CAAM,CAAA,aAAA,EAAgB,GAAA,CAAI,IAAI,CAAA,sBAAA,CAAwB,CAAA;AACzF,EAAA,GAAA,CAAI,QAAQ,OAAA,CAAQ,CAAC,CAAA,KAAM,WAAA,CAAY,CAAC,CAAC,CAAA;AACzC,EAAA,GAAA,CAAI,cAAA,EAAgB,OAAA;AAAA,IAAQ,CAAC,CAAA,KAC3B,gBAAA,CAAiB,GAAG,CAAA,aAAA,EAAgB,GAAA,CAAI,IAAI,CAAA,gBAAA,CAAkB;AAAA,GAChE;AACA,EAAA,GAAA,CAAI,UAAA,EAAY,OAAA;AAAA,IAAQ,CAAC,CAAA,KACvB,gBAAA,CAAiB,GAAG,CAAA,aAAA,EAAgB,GAAA,CAAI,IAAI,CAAA,YAAA,CAAc;AAAA,GAC5D;AACA,EAAA,GAAA,CAAI,OAAA,EAAS,OAAA;AAAA,IAAQ,CAAC,MACpB,YAAA,CAAa,CAAA,CAAE,MAAM,CAAA,aAAA,EAAgB,GAAA,CAAI,IAAI,CAAA,SAAA,CAAW;AAAA,GAC1D;AACA,EAAA,GAAA,CAAI,YAAA,EAAc,OAAA,CAAQ,CAAC,CAAA,KAAM;AAC/B,IAAA,IAAI,CAAC,CAAA,CAAE,IAAA,EAAM,IAAA,EAAK;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,aAAA,EAAgB,GAAA,CAAI,IAAI,CAAA,oCAAA,CAAsC,CAAA;AAChF,IAAA,IAAI,CAAC,CAAA,CAAE,QAAA,EAAU,IAAA,EAAK;AACpB,MAAA,MAAM,IAAI,MAAM,CAAA,aAAA,EAAgB,GAAA,CAAI,IAAI,CAAA,gBAAA,EAAmB,CAAA,CAAE,IAAI,CAAA,2BAAA,CAA6B,CAAA;AAAA,EAClG,CAAC,CAAA;AACD,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,cAAc,KAAA,EAA+D;AAC3F,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,MAAM,UAAgC,EAAC;AACvC,EAAA,IAAI,KAAA,CAAM,IAAA,EAAM,OAAA,CAAQ,IAAA,GAAO,KAAA,CAAM,IAAA;AACrC,EAAA,IAAI,KAAA,CAAM,cAAc,MAAA,EAAQ,OAAA,CAAQ,eAAe,CAAC,GAAG,MAAM,YAAY,CAAA;AAC7E,EAAA,IAAI,KAAA,CAAM,OAAA,EAAS,MAAA,EAAQ,OAAA,CAAQ,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAA;AAC5E,EAAA,IAAI,MAAM,cAAA,EAAgB,MAAA;AACxB,IAAA,OAAA,CAAQ,cAAA,GAAiB,KAAA,CAAM,cAAA,CAAe,GAAA,CAAI,YAAY,CAAA;AAChE,EAAA,IAAI,MAAM,UAAA,EAAY,MAAA;AACpB,IAAA,OAAA,CAAQ,UAAA,GAAa,KAAA,CAAM,UAAA,CAAW,GAAA,CAAI,YAAY,CAAA;AACxD,EAAA,IAAI,MAAM,YAAA,EAAc,MAAA;AACtB,IAAA,OAAA,CAAQ,eAAe,KAAA,CAAM,YAAA,CAAa,IAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAC7D,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,SAAS,OAAA,GAAU,MAAA;AACjD;AAMO,SAAS,cAAc,KAAA,EAAyB;AACrD,EAAA,IAAI,CAAC,KAAA,CAAM,MAAA,EAAQ,MAAA,SAAe,KAAA,CAAM,MAAA;AACxC,EAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CACnB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,IAAA,EAAO,EAAE,IAAI;;AAAA,EAAO,EAAE,YAAA,CAAa,IAAA,EAAM,CAAA,CAAE,CAAA,CACtD,KAAK,MAAM,CAAA;AACd,EAAA,OAAO,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,IAAA,EAAM;;AAAA;;AAAA,EAAqC,OAAO,CAAA,CAAA;AAC3E;;;AChKO,SAAS,QAAQ,IAAA,EAAsB;AAC5C,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,GAAG,EAAE,IAAA,EAAK;AACxC;AAGO,SAAS,QAAA,CAAS,GAAW,GAAA,EAAqB;AACvD,EAAA,IAAI,CAAA,CAAE,MAAA,IAAU,GAAA,EAAK,OAAO,CAAA;AAC5B,EAAA,MAAM,MAAA,GAAS,GAAA,GAAM,CAAA,GAAI,UAAA,GAAQ,QAAA,CAAI,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAC,CAAA;AAC9D,EAAA,OAAO,CAAA,EAAG,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,GAAA,GAAM,MAAA,CAAO,MAAM,CAAC,CAAA,CAAE,OAAA,EAAS,GAAG,MAAM,CAAA,CAAA;AAC3E;;;ACXA,SAAS,MAAA,CAAO,KAAiB,KAAA,EAAuB;AACtD,EAAA,MAAM,GAAA,GAAM,CAAC,GAAG,GAAA,CAAI,IAAA,EAAM,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,SAAS,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAChE,EAAA,OACE,GAAA,CAAI,QAAQ,oBAAA,EAAsB,GAAG,EAAE,OAAA,CAAQ,YAAA,EAAc,EAAE,CAAA,IAC/D,MAAA;AAEJ;AAEO,SAAS,kBAAA,CACd,KACA,KAAA,EACyB;AACzB,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,IAAA;AAAA,IACN,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,MAAA,EAAQ,MAAA,CAAO,GAAA,EAAK,KAAK,CAAA;AAAA,IACzB,IAAA,EAAM,CAAC,GAAG,GAAA,CAAI,IAAI,CAAA;AAAA,IAClB,KAAA;AAAA,IACA,WAAW,GAAA,CAAI;AAAA,GACjB;AACF;AAGO,SAAS,yBAAA,CACd,GAAA,EACA,MAAA,EACA,GAAA,EACM;AACN,EAAA,IAAI,CAAC,OAAO,gBAAA,EAAkB;AAC9B,EAAA,GAAA,CAAI,GAAA,CAAI,aAAa,MAAA,CAAO,gBAAA,CAAiB,SAAS,GAAA,EAAK,GAAI,GAAG,MAAM,CAAA;AAC1E;;;ACGA,IAAM,wBAAA,GAA2B,GAAA;AACjC,IAAM,2BAAA,GAA8B,6BAAA;AAEpC,SAAS,kBAAA,CACP,MACA,GAAA,EACQ;AACR,EAAA,MAAM,QAAA,GAAW,YAAA,CAAa,IAAA,EAAM,GAAG,CAAA;AACvC,EAAA,IAAI,QAAA,CAAS,MAAA,IAAU,wBAAA,EAA0B,OAAO,QAAA;AACxD,EAAA,OACE,8BACA,QAAA,CAAS,KAAA;AAAA,IACP,EAAE,2BAA2B,2BAAA,CAA4B,MAAA;AAAA,GAC3D;AAEJ;AASO,SAAS,WAAA,CACd,KAAA,EACA,OAAA,GAAyB,KAAA,EACd;AACX,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,MAAM,KAAA,GAAQ,MAAM,GAAA,CAAI,CAAC,MAAM,WAAA,CAAY,CAAA,EAAG,OAAO,CAAC,CAAA;AACtD,IAAA,OAAO,OAAA,KAAY,QAAQ,GAAA,CAAI,GAAG,KAAK,CAAA,GAAI,GAAA,CAAI,GAAG,KAAK,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,UAAU,KAAK,CAAA;AACxB;AAMA,IAAM,qBAAA,uBAA4B,OAAA,EAAwC;AAGnE,SAAS,wBAAA,CACd,WACA,OAAA,EACW;AACX,EAAA,qBAAA,CAAsB,GAAA,CAAI,WAAW,OAAO,CAAA;AAC5C,EAAA,OAAO,SAAA;AACT;AAGA,eAAsB,gBAAA,CACpB,KAAA,EACA,GAAA,EACA,OAAA,GAAyB,KAAA,EACL;AACpB,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC7B,KAAA,CAAM,IAAI,CAAC,IAAA,KAAS,iBAAiB,IAAA,EAAM,GAAA,EAAK,OAAO,CAAC;AAAA,KAC1D;AACA,IAAA,OAAO,OAAA,KAAY,QAAQ,GAAA,CAAI,GAAG,QAAQ,CAAA,GAAI,GAAA,CAAI,GAAG,QAAQ,CAAA;AAAA,EAC/D;AACA,EAAA,MAAM,OAAA,GAAU,qBAAA,CAAsB,GAAA,CAAI,KAAK,CAAA;AAC/C,EAAA,OAAO,UAAU,OAAA,CAAQ,GAAG,CAAA,GAAI,WAAA,CAAY,OAAO,OAAO,CAAA;AAC5D;AAQA,SAAS,UAAU,EAAA,EAAyC;AAC1D,EAAA,OAAO,OAAO,KAAK,IAAA,KAAS;AAC1B,IAAA,MAAM,IAAI,MAAO,EAAA;AAAA,MACf,GAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAI,OAAO,MAAM,SAAA,EAAW;AAC1B,MAAA,OAAO,EAAE,GAAA,EAAK,CAAA,EAAG,MAAA,EAAQ,CAAA,WAAA,EAAc,CAAC,CAAA,CAAA,EAAG;AAAA,IAC7C;AACA,IAAA,IAAI,CAAA,IAAK,OAAO,CAAA,KAAM,QAAA,IAAY,SAAS,CAAA,EAAG;AAC5C,MAAA,MAAM,GAAA,GAAM,CAAA;AACZ,MAAA,IAAI,OAAO,GAAA,CAAI,GAAA,KAAQ,SAAA,EAAW;AAChC,QAAA,MAAM,IAAI,SAAA,CAAU;AAAA,UAClB,IAAA,EAAM,YAAA;AAAA,UACN,OAAA,EAAS,CAAA,wCAAA,EAA2C,MAAA,CAAO,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,SACpE,CAAA;AAAA,MACH;AACA,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,OAAO,EAAE,GAAA,EAAK,OAAA,CAAQ,CAAC,CAAA,EAAG,QAAQ,CAAA,SAAA,EAAY,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,EAAG;AAAA,EAC5D,CAAA;AACF;AAGO,SAAS,SAAA,CACd,EAAA,EAIA,MAAA,GAAS,WAAA,EACE;AACX,EAAA,OAAO,OAAO,KAAK,IAAA,KAAS;AAC1B,IAAA,MAAM,GAAA,GAAM,MAAM,EAAA,CAAG,GAAA,EAAK,IAAI,CAAA;AAC9B,IAAA,OAAO,EAAE,KAAK,MAAA,EAAQ,GAAA,GAAM,GAAG,MAAM,CAAA,MAAA,CAAA,GAAW,CAAA,EAAG,MAAM,CAAA,OAAA,CAAA,EAAU;AAAA,EACrE,CAAA;AACF;AAGO,SAAS,UAAA,GAAwB;AACtC,EAAA,OAAO,OAAO,MAAM,IAAA,MAAU;AAAA,IAC5B,GAAA,EAAK,MAAM,MAAA,KAAW,MAAA;AAAA,IACtB,YAAY,IAAA,EAAM,UAAA;AAAA,IAClB,MAAA,EAAQ,CAAA,mBAAA,EAAsB,IAAA,EAAM,MAAA,IAAU,MAAM,CAAA;AAAA,GACtD,CAAA;AACF;AAGO,SAAS,cAAc,SAAA,EAA8B;AAC1D,EAAA,OAAO,OAAO,MAAM,IAAA,KAAS;AAC3B,IAAA,MAAM,CAAA,GAAI,MAAM,UAAA,IAAc,CAAA;AAC9B,IAAA,OAAO;AAAA,MACL,KAAK,CAAA,IAAK,SAAA;AAAA,MACV,UAAA,EAAY,CAAA;AAAA,MACZ,MAAA,EAAQ,CAAA,WAAA,EAAc,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,IAAK,SAAA,GAAY,IAAA,GAAO,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA;AAAA,KAChF;AAAA,EACF,CAAA;AACF;AAiBO,SAAS,gBACd,OAAA,EACA,IAAA,GAAiB,EAAC,EAClB,IAAA,GAKI,EAAC,EACM;AACX,EAAA,OAAO,QAAA,CAAS,OAAO,GAAA,KAAQ;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,UAAA,CAAW,GAAA,EAAK,IAAA,CAAK,GAAG,CAAA;AACpC,MAAA,MAAM,CAAA,GAAI,MAAM,iBAAA,CAAkB;AAAA,QAChC,UAAA,EAAY,OAAA;AAAA,QACZ,IAAA;AAAA,QACA,GAAA,EAAK,IAAA,CAAK,GAAA,IAAO,GAAA,CAAI,SAAA,CAAU,GAAA;AAAA,QAC/B,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,QAAQ,GAAA,CAAI,MAAA;AAAA,QACZ;AAAA,OACD,CAAA;AACD,MAAA,MAAM,MAAA,GAAS,WAAA,CAAY,CAAA,CAAE,MAAM,CAAA;AACnC,MAAA,MAAM,MAAA,GAAS,WAAA,CAAY,CAAA,CAAE,MAAM,CAAA;AACnC,MAAA,MAAMC,IAAAA,GAAM,CAAA,EAAG,MAAM,CAAA,EAAG,MAAM,CAAA,CAAA;AAC9B,MAAA,IAAI,CAAA,CAAE,QAAA,KAAa,CAAA,IAAK,CAAC,EAAE,QAAA,EAAU;AACnC,QAAA,OAAO,EAAE,GAAA,EAAK,IAAA,EAAM,MAAA,EAAQ,CAAA,EAAA,EAAK,OAAO,CAAA,WAAA,CAAA,EAAc;AAAA,MACxD;AACA,MAAA,MAAM,UAAA,GAAa,CAAA,CAAE,QAAA,GACjB,CAAA,EAAA,EAAK,OAAO,CAAA,mBAAA,EAAsB,IAAA,CAAK,SAAS,CAAA,GAAA,CAAA,GAChD,CAAA,EAAA,EAAK,OAAO,CAAA,UAAA,EAAa,CAAA,CAAE,YAAY,GAAG,CAAA,CAAA;AAC9C,MAAA,MAAM,OAAO,IAAA,CAAK,aAAA,GACd,kBAAA,CAAmBA,IAAAA,EAAK,GAAG,CAAA,GAC3B,EAAA;AACJ,MAAA,OAAO;AAAA,QACL,GAAA,EAAK,KAAA;AAAA,QACL,MAAA,EAAQ,IAAA,GACJ,CAAA,EAAG,UAAU;;AAAA;AAAA,EAA+B,IAAI,CAAA,CAAA,GAChD,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAKJ,MAAA,EACE,CAAA,MAAA,EAAS,CAAA,CAAE,QAAA,IAAY,uBAAuB;;AAAA;AAAA,EAClC,YAAA,CAAa,MAAA,EAAQ,GAAA,EAAK,GAAI,CAAC;;AAAA;AAAA,EAC/B,YAAA,CAAa,MAAA,EAAQ,GAAA,EAAK,GAAI,CAAC,CAAA;AAAA,OAC/C;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,OAAO;AAAA,QACL,GAAA,EAAK,KAAA;AAAA,QACL,MAAA,EAAQ,CAAA,EAAA,EAAK,OAAO,CAAA,kBAAA,EAAqB,CAAA,YAAa,QAAQ,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,OACrF;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAA,EAAG,OAAO,CAAA,EAAG,IAAA,CAAK,MAAA,GAAS,CAAA,CAAA,EAAI,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAC3D;AAEO,IAAM,SAAoB,aAAa,EAAE,GAAA,EAAK,IAAA,EAAM,QAAQ,QAAA,EAAS;AACrE,IAAM,QAAmB,aAAa,EAAE,GAAA,EAAK,KAAA,EAAO,QAAQ,OAAA,EAAQ;AAKpE,SAAS,IAAI,CAAA,EAA8B;AAChD,EAAA,MAAM,IAAA,GAAO,YAAY,CAAC,CAAA;AAC1B,EAAA,MAAM,SAAA,GAAuB,OAAO,GAAA,EAAK,IAAA,KAAS;AAChD,IAAA,MAAM,CAAA,GAAI,MAAM,IAAA,CAAK,GAAA,EAAK,IAAI,CAAA;AAC9B,IAAA,OAAO;AAAA,MACL,GAAA,EAAK,CAAC,CAAA,CAAE,GAAA;AAAA,MACR,YAAY,CAAA,CAAE,UAAA;AAAA,MACd,MAAA,EAAQ,CAAA,IAAA,EAAO,CAAA,CAAE,MAAM,CAAA,CAAA,CAAA;AAAA,MACvB,QAAQ,CAAA,CAAE;AAAA,KACZ;AAAA,EACF,CAAA;AACA,EAAA,OAAA,CAAQ,SAAA,EAAW,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,OAAO,MAAA,EAAQ,CAAC,CAAC,CAAA,EAAG,CAAA;AAClE,EAAA,OAAO,wBAAA;AAAA,IAAyB,SAAA;AAAA,IAAW,OAAO,GAAA,KAChD,GAAA,CAAI,MAAM,gBAAA,CAAiB,CAAA,EAAG,GAAG,CAAC;AAAA,GACpC;AACF;AAMO,SAAS,OAAO,MAAA,EAAqC;AAC1D,EAAA,MAAM,QAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,WAAA,CAAY,CAAC,CAAC,CAAA;AAC9C,EAAA,MAAM,SAAA,GAAuB,OAAO,GAAA,EAAK,IAAA,KAAS;AAChD,IAAA,MAAM,UAA6B,EAAC;AACpC,IAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,MAAA,MAAM,CAAA,GAAI,MAAM,CAAA,CAAE,GAAA,EAAK,IAAI,CAAA;AAC3B,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AACd,MAAA,IAAI,CAAC,CAAA,CAAE,GAAA;AACL,QAAA,OAAO;AAAA,UACL,GAAA,EAAK,KAAA;AAAA,UACL,MAAA,EAAQ,CAAA,eAAA,EAAkB,CAAA,CAAE,MAAM,CAAA,CAAA;AAAA,UAClC,QAAQ,CAAA,CAAE;AAAA,SACZ;AAAA,IACJ;AACA,IAAA,OAAO;AAAA,MACL,GAAA,EAAK,IAAA;AAAA,MACL,MAAA,EAAQ,CAAA,IAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,CAAA,CAAE,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA;AAAA,KACzD;AAAA,EACF,CAAA;AACA,EAAA,OAAA,CAAQ,WAAW,EAAE,IAAA,EAAM,aAAa,IAAA,EAAM,KAAA,EAAO,QAAQ,CAAA;AAC7D,EAAA,OAAO,wBAAA;AAAA,IAAyB,SAAA;AAAA,IAAW,OAAO,GAAA,KAChD,GAAA,CAAI,GAAI,MAAM,QAAQ,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,UAAU,gBAAA,CAAiB,KAAA,EAAO,GAAG,CAAC,CAAC,CAAE;AAAA,GACjF;AACF;AAOO,SAAS,OAAO,MAAA,EAAqC;AAC1D,EAAA,MAAM,QAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,WAAA,CAAY,CAAC,CAAC,CAAA;AAC9C,EAAA,MAAM,SAAA,GAAuB,OAAO,GAAA,EAAK,IAAA,KAAS;AAChD,IAAA,MAAM,UAAoB,EAAC;AAC3B,IAAA,IAAI,MAAA;AACJ,IAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,MAAA,MAAM,CAAA,GAAI,MAAM,CAAA,CAAE,GAAA,EAAK,IAAI,CAAA;AAC3B,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,MAAM,CAAA;AACrB,MAAA,IAAI,CAAA,CAAE,GAAA;AACJ,QAAA,OAAO;AAAA,UACL,GAAA,EAAK,IAAA;AAAA,UACL,YAAY,CAAA,CAAE,UAAA;AAAA,UACd,MAAA,EAAQ,CAAA,OAAA,EAAU,CAAA,CAAE,MAAM,CAAA,CAAA;AAAA,UAC1B,QAAQ,CAAA,CAAE;AAAA,SACZ;AACF,MAAA,MAAA,KAAW,CAAA,CAAE,MAAA;AAAA,IACf;AACA,IAAA,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,CAAA,IAAA,EAAO,QAAQ,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA,CAAA,EAAK,MAAA,EAAO;AAAA,EACrE,CAAA;AACA,EAAA,OAAA,CAAQ,WAAW,EAAE,IAAA,EAAM,aAAa,IAAA,EAAM,KAAA,EAAO,QAAQ,CAAA;AAC7D,EAAA,OAAO,wBAAA;AAAA,IAAyB,SAAA;AAAA,IAAW,OAAO,GAAA,KAChD,GAAA,CAAI,GAAI,MAAM,QAAQ,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,UAAU,gBAAA,CAAiB,KAAA,EAAO,GAAG,CAAC,CAAC,CAAE;AAAA,GACjF;AACF;AAWO,SAAS,MAAA,CAAO,MAAc,MAAA,EAAqC;AACxE,EAAA,IAAI,CAAA,GAAI,CAAA,IAAK,CAAA,GAAI,MAAA,CAAO,MAAA;AACtB,IAAA,MAAM,IAAI,SAAA,CAAU;AAAA,MAClB,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,CAAA,wCAAA,EAA2C,CAAC,CAAA,IAAA,EAAO,OAAO,MAAM,CAAA,CAAA;AAAA,KAC1E,CAAA;AACH,EAAA,MAAM,QAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,WAAA,CAAY,CAAC,CAAC,CAAA;AAC9C,EAAA,MAAM,SAAA,GAAuB,QAAA,CAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AACzD,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,UAAA,CAAW,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAA,EAAK,IAAI,CAAC,CAAC,CAAA;AACvE,IAAA,MAAM,eAAe,OAAA,CAClB,MAAA;AAAA,MACC,CAAC,CAAA,KACC,CAAA,CAAE,WAAW,UAAA,IAAc,qBAAA,CAAsB,EAAE,MAAM;AAAA,KAC7D,CACC,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,MAAM,CAAA;AACtB,IAAA,MAAM,OAAA,GAA6B,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM;AACpD,MAAA,IAAI,CAAA,CAAE,MAAA,KAAW,WAAA,EAAa,OAAO,CAAA,CAAE,KAAA;AACvC,MAAA,OAAO;AAAA,QACL,GAAA,EAAK,KAAA;AAAA,QACL,MAAA,EAAQ,CAAA,eAAA,EAAkB,CAAA,CAAE,MAAA,YAAkB,KAAA,GAAQ,CAAA,CAAE,MAAA,CAAO,OAAA,GAAU,MAAA,CAAO,CAAA,CAAE,MAAM,CAAC,CAAA;AAAA,OAC3F;AAAA,IACF,CAAC,CAAA;AACD,IAAA,MAAM,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,GAAG,CAAA;AACxC,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,GAAA,IAAO,CAAA,CAAE,MAAA,KAAW,MAAS,CAAA,EAAG,MAAA;AACtE,IAAA,IAAI,KAAK,MAAA,GAAS,CAAA,IAAK,KAAK,MAAA,GAAS,YAAA,CAAa,UAAU,CAAA,EAAG;AAC7D,MAAA,MAAM,KAAA,GAAQ,aAAa,CAAC,CAAA;AAC5B,MAAA,IAAI,CAAC,QAAQ,MAAM,KAAA;AACnB,MAAA,MAAM,IAAI,SAAA,CAAU;AAAA,QAClB,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,cAAc,KAAA,CAAM,YAAA;AAAA,QACpB,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,KAAA,EAAO,EAAE,KAAA,EAAO,KAAA,EAAO,MAAA;AAAO,OAC/B,CAAA;AAAA,IACH;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CACX,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAA,CACvB,MAAA,CAAO,CAAC,CAAA,KAAmB,OAAO,MAAM,QAAQ,CAAA;AACnD,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,MAAA,GACrB,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA,GAAI,MAAM,MAAA,GACzC,MAAA;AACJ,IAAA,MAAM,GAAA,GAAM,KAAK,MAAA,IAAU,CAAA;AAC3B,IAAA,OAAO;AAAA,MACL,GAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA,EAAQ,UAAU,IAAA,CAAK,MAAM,IAAI,MAAA,CAAO,MAAM,eAAe,CAAC,CAAA,CAAA,CAAA;AAAA,MAC9D,MAAA,EAAQ,MAAM,MAAA,GAAY;AAAA,KAC5B;AAAA,EACF,GAAG,CAAA,OAAA,EAAU,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AACjC,EAAA,OAAA,CAAQ,WAAW,EAAE,IAAA,EAAM,aAAa,IAAA,EAAM,QAAA,EAAU,QAAQ,CAAA;AAChE,EAAA,OAAO,wBAAA;AAAA,IAAyB,SAAA;AAAA,IAAW,OAAO,GAAA,KAChD,MAAA;AAAA,MACE,CAAA;AAAA,MACA,GAAI,MAAM,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,gBAAA,CAAiB,KAAA,EAAO,GAAG,CAAC,CAAC;AAAA;AAC3E,GACF;AACF;AAsEA,SAAS,cAAA,CAAe,KAAiB,IAAA,EAAmC;AAC1E,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,MAAM,OAAA,EAAS,KAAA,CAAM,KAAK,CAAA,sBAAA,EAAyB,IAAA,CAAK,OAAO,CAAA,CAAE,CAAA;AACrE,EAAA,IAAI,MAAM,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,qBAAA,EAAwB,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAClE,EAAA,IAAI,MAAM,IAAA,KAAS,MAAA;AACjB,IAAA,KAAA,CAAM,KAAK,CAAA,mBAAA,EAAsB,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACxD,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AACvC,EAAA,IAAI,SAAA,CAAU,QAAQ,KAAA,CAAM,IAAA,CAAK,iBAAiB,QAAA,CAAS,GAAA,CAAI,KAAK,CAAC,CAAA,CAAE,CAAA;AACvE,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,IAAK,oBAAA;AAC7B;AAEA,SAAS,QAAA,CAAS,KAAA,EAAgB,KAAA,GAAQ,GAAA,EAAc;AACtD,EAAA,IAAI;AACF,IAAA,MAAM,CAAA,GAAI,KAAK,SAAA,CAAU,KAAA,EAAO,MAAM,CAAC,CAAA,IAAK,OAAO,KAAK,CAAA;AACxD,IAAA,OAAO,CAAA,CAAE,SAAS,KAAA,GAAQ,CAAA,EAAG,EAAE,KAAA,CAAM,CAAA,EAAG,KAAK,CAAC,CAAA,kBAAA,CAAA,GAAkB,CAAA;AAAA,EAClE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACF;AAGA,UAAU,gBAAgB,IAAA,EAAiC;AACzD,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,OAAO,MAAA,GAAS,KAAK,MAAA,EAAQ;AAC3B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,MAAM,CAAA;AACtC,IAAA,IAAI,UAAU,EAAA,EAAI;AAClB,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,IAAI,QAAA,GAAW,KAAA;AACf,IAAA,IAAI,OAAA,GAAU,KAAA;AACd,IAAA,IAAI,GAAA,GAAM,EAAA;AACV,IAAA,KAAA,IAAS,IAAI,KAAA,EAAO,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA,EAAG;AAC3C,MAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAI,SAAS,OAAA,GAAU,KAAA;AAAA,aAAA,IACd,EAAA,KAAO,MAAM,OAAA,GAAU,IAAA;AAAA,aAAA,IACvB,EAAA,KAAO,KAAK,QAAA,GAAW,KAAA;AAChC,QAAA;AAAA,MACF;AACA,MAAA,IAAI,EAAA,KAAO,KAAK,QAAA,GAAW,IAAA;AAAA,WAAA,IAClB,EAAA,KAAO,KAAK,KAAA,IAAS,CAAA;AAAA,WAAA,IACrB,EAAA,KAAO,GAAA,IAAO,EAAE,KAAA,KAAU,CAAA,EAAG;AACpC,QAAA,GAAA,GAAM,CAAA;AACN,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,QAAQ,EAAA,EAAI;AAChB,IAAA,MAAM,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,GAAA,GAAM,CAAC,CAAA;AAC/B,IAAA,MAAA,GAAS,GAAA,GAAM,CAAA;AAAA,EACjB;AACF;AAEA,SAAS,UAAU,GAAA,EAAuC;AACxD,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,OAAA,KAAY,KAAA,GAAQ,KAAA,GAAQ,IAAA;AAOhD,EAAA,MAAM,UAAA,GACJ,OAAO,GAAA,CAAI,UAAA,KAAe,WAAW,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA,GAAI,CAAA;AACjE,EAAA,MAAM,SACJ,OAAO,GAAA,CAAI,MAAA,KAAW,QAAA,GAAW,IAAI,MAAA,GAAS,mBAAA;AAChD,EAAA,OAAO,EAAE,OAAA,EAAS,UAAA,EAAY,MAAA,EAAO;AACvC;AAOA,SAAS,aAAa,IAAA,EAAuB;AAC3C,EAAA,IAAI,QAAA;AACJ,EAAA,KAAA,MAAW,SAAA,IAAa,eAAA,CAAgB,IAAI,CAAA,EAAG;AAC7C,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAA,CAAK,MAAM,SAAS,CAAA;AAAA,IAC/B,CAAA,CAAA,MAAQ;AACN,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,MAAA,IAAU,OAAO,WAAW,QAAA,IAAY,KAAA,CAAM,QAAQ,MAAM,CAAA;AAC/D,MAAA;AACF,IAAA,MAAM,GAAA,GAAM,MAAA;AACZ,IAAA,IAAI,SAAA,IAAa,GAAA,EAAK,OAAO,SAAA,CAAU,GAAG,CAAA;AAC1C,IAAA,QAAA,KAAa,GAAA;AAAA,EACf;AACA,EAAA,IAAI,QAAA,EAAU,OAAO,SAAA,CAAU,QAAQ,CAAA;AACvC,EAAA,MAAM,IAAI,SAAA,CAAU;AAAA,IAClB,IAAA,EAAM,YAAA;AAAA,IACN,SAAS,CAAA,oCAAA,EAAuC,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,GACnE,CAAA;AACH;AAEA,SAAS,QAAQ,CAAA,EAAmB;AAClC,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAC,CAAA,GAAI,CAAA;AAC5D;AAEA,IAAM,gBAAA,GACJ,ycAAA;AAOF,IAAM,qBAAA,GACJ,ksBAAA;AAeF,SAAS,mBACP,IAAA,EACiD;AACjD,EAAA,MAAM,EAAA,GAAK,8DAAA;AACX,EAAA,IAAI,CAAA;AACJ,EAAA,IAAI,IAAA,GAA+B,IAAA;AACnC,EAAA,OAAA,CAAQ,IAAI,EAAA,CAAG,IAAA,CAAK,IAAI,CAAA,MAAO,MAAM,IAAA,GAAO,CAAA;AAC5C,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,IAAI,CAAA,GAAI,UAAA,CAAW,IAAA,CAAK,CAAC,CAAE,CAAA;AAC3B,EAAA,IAAI,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,GAAA;AACnB,EAAA,OAAO,EAAE,UAAA,EAAY,OAAA,CAAQ,CAAC,CAAA,EAAG,QAAA,EAAU,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,CAAE,MAAK,EAAE;AAC9E;AAGA,SAAS,qBAAqB,UAAA,EAA8B;AAC1D,EAAA,OACE,CAAA;AAAA,WAAA,EAIc,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAA,EAAI,CAAC,CAAA,QAAA,CAAU,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,4BAAA,CAAA;AAElE;AAGA,SAAS,cAAc,MAAA,EAA0B;AAC/C,EAAA,IAAI,CAAC,MAAA,CAAO,MAAA,EAAQ,OAAO,CAAA;AAC3B,EAAA,IAAI,OAAO,IAAA,CAAK,CAAC,MAAM,CAAA,IAAK,CAAC,GAAG,OAAO,CAAA;AACvC,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,IAAA,CAAK,IAAI,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,OAAO,MAAM,CAAA;AAC7E;AASA,IAAM,gBAAA,GAAmB,GAAA;AAMzB,SAAS,YAAY,IAAA,EAAsB;AACzC,EAAA,OAAO,YAAA,CAAa,IAAA,EAAM,MAAA,EAAW,gBAAgB,CAAA;AACvD;AAGA,SAAS,WAAA,CAAY,MAAc,UAAA,EAAoC;AACrE,EAAA,KAAA,MAAW,SAAA,IAAa,eAAA,CAAgB,IAAI,CAAA,EAAG;AAC7C,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAA,CAAK,MAAM,SAAS,CAAA;AAAA,IAC/B,CAAA,CAAA,MAAQ;AACN,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,MAAA,IAAU,OAAO,WAAW,QAAA,IAAY,KAAA,CAAM,QAAQ,MAAM,CAAA;AAC/D,MAAA;AACF,IAAA,MAAM,MAAO,MAAA,CAAmC,MAAA;AAChD,IAAA,IAAI,CAAC,OAAO,OAAO,GAAA,KAAQ,YAAY,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC3D,IAAA,MAAM,QAAA,GAAW,GAAA;AACjB,IAAA,MAAM,SAAiC,EAAC;AACxC,IAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,MAAA,MAAM,GAAA,GAAM,SAAS,CAAC,CAAA;AACtB,MAAA,MAAA,CAAO,CAAC,CAAA,GAAI,OAAO,QAAQ,QAAA,GAAW,OAAA,CAAQ,GAAG,CAAA,GAAI,CAAA;AAAA,IACvD;AACA,IAAA,MAAM,cAAe,MAAA,CAAmC,MAAA;AACxD,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,cAAc,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,CAAO,CAAC,CAAE,CAAC,CAAA;AAAA,MACtD,MAAA;AAAA,MACA,MAAA,EACE,OAAO,WAAA,KAAgB,QAAA,GAAW,WAAA,GAAc;AAAA,KACpD;AAAA,EACF;AACA,EAAA,MAAM,IAAI,SAAA,CAAU;AAAA,IAClB,IAAA,EAAM,YAAA;AAAA,IACN,SAAS,CAAA,mCAAA,EAAsC,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,GAClE,CAAA;AACH;AAQO,SAAS,WAAW,MAAA,EAAqC;AAC9D,EAAA,MAAM,SAAA,GAAY,OAAO,SAAA,IAAa,GAAA;AACtC,EAAA,MAAM,aAAA,GAAgB,OAAO,aAAA,KAAkB,IAAA;AAC/C,EAAA,MAAM,cAAA,GAAiB,OAAO,cAAA,IAAkB,GAAA;AAChD,EAAA,MAAM,aACJ,CAAC,aAAA,IAAiB,OAAO,UAAA,EAAY,MAAA,GAAS,OAAO,UAAA,GAAa,MAAA;AACpE,EAAA,OAAO,QAAA,CAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AACnC,IAAA,MAAM,MAAA,GAAS,GAAA,CAAI,aAAA,CAAc,MAAA,CAAO,MAAM,CAAA;AAC9C,IAAA,MAAM,cAAc,MAAA,CAAO,MAAA,CAAO,OAAA,IAAW,cAAA,EAAgB,KAAK,IAAI,CAAA;AACtE,IAAA,MAAM,mBAAA,GAAsB,IAAI,YAAA,GAC5B;;AAAA;AAAA,EAA8B,GAAA,CAAI,YAAY,CAAA,CAAA,GAC9C,EAAA;AACJ,IAAA,MAAM,UAAU,aAAA,GACZ,uEAAA,GACA,CAAA,gBAAA,EAAmB,UAAA,GAAa,WAAW,SAAS,CAAA,KAAA,CAAA;AACxD,IAAA,MAAM,MAAA,GACJ,CAAA;AAAA,EAA2B,OAAO,QAAQ;;AAAA;AAAA,EAC5B,WAAW,GAAG,mBAAmB;;AAAA,CAAA,GAC/C,OAAA;AAIF,IAAA,MAAM,aAAa,aAAA,GACf,qBAAA,GACA,UAAA,GACE,oBAAA,CAAqB,UAAU,CAAA,GAC/B,gBAAA;AACN,IAAA,MAAM,SAAS,MAAA,CAAO,KAAA,GAAQ,GAAG,aAAA,CAAc,MAAA,CAAO,KAAK,CAAC;;AAAA,EAAO,UAAU,CAAA,CAAA,GAAK,UAAA;AAGlF,IAAA,MAAM,GAAA,GAAM,WAAW,GAAG,CAAA;AAC1B,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,YAAA,CAAa,GAAG,CAAA;AAChB,MAAA,MAAA,GAAS,MAAM,MAAA,CAAO,GAAA;AAAA,QACpB;AAAA,UACE,MAAA;AAAA,UACA,MAAA;AAAA,UACA,KAAA,EAAO,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,KAAA,EAAO,KAAA;AAAA;AAAA,UAErC,SAAA,EAAW,MAAA,CAAO,SAAA,KAAc,aAAA,GAAgB,IAAA,GAAO,GAAA,CAAA;AAAA,UACvD,KAAK,MAAA,CAAO,GAAA;AAAA,UACZ,SAAA,EAAW,MAAA,CAAO,SAAA,IAAa,GAAA,CAAI,SAAA;AAAA,UACnC,gBAAgB,GAAA,CAAI,cAAA;AAAA,UACpB,GAAA;AAAA,UACA,IAAA,EAAM,IAAA;AAAA,UACN,SAAS,kBAAA,CAAmB,GAAA,EAAK,MAAA,CAAO,KAAA,EAAO,QAAQ,aAAa;AAAA,SACtE;AAAA,QACA,CAAC,CAAA,KAAM;AACL,UAAA,IAAI,CAAA,CAAE,SAAS,OAAA,EAAS;AACtB,YAAA,GAAA,CAAI,IAAA,CAAK;AAAA,cACP,IAAA,EAAM,cAAA;AAAA,cACN,EAAA,EAAI,KAAK,GAAA,EAAI;AAAA,cACb,IAAA,EAAM,CAAC,GAAG,GAAA,CAAI,IAAI,CAAA;AAAA,cAClB,OAAO,CAAA,CAAE,KAAA;AAAA,cACT,OAAO,CAAA,CAAE;AAAA,aACV,CAAA;AAAA,UACH;AAAA,QACF,CAAA;AAAA,QACA,GAAA,CAAI;AAAA,OACN;AAAA,IACF,SAAS,CAAA,EAAG;AAGV,MAAA,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG,EAAE,MAAM,QAAA,EAAU,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,CAAA;AAAA,IAC5D;AACA,IAAA,yBAAA,CAA0B,GAAA,EAAK,QAAQ,GAAG,CAAA;AAK1C,IAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,sBAAA,CAAuB,MAAM,GAAG,GAAG,CAAA;AAEhE,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,MAAM,MAAA,GAAS,mBAAmB,IAAI,CAAA;AACtC,MAAA,IAAI,CAAC,MAAA;AACH,QAAA,OAAO;AAAA,UACL,GAAA,EAAK,KAAA;AAAA,UACL,UAAA,EAAY,CAAA;AAAA,UACZ,MAAA,EAAQ,wBAAwB,aAAA,CAAc,IAAI,EAAE,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAAA,UACjE,MAAA,EAAQ,YAAY,IAAI;AAAA,SAC1B;AACF,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,aAAa,GAAG,CAAA;AAC9C,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,SAAA,GAAY,GAAG,CAAA;AAIvC,MAAA,MAAM,QAAA,GAAW,aAAA,CAAc,MAAA,CAAO,QAAQ,CAAA;AAC9C,MAAA,OAAO;AAAA,QACL,GAAA,EAAK,OAAO,UAAA,IAAc,SAAA;AAAA,QAC1B,YAAY,MAAA,CAAO,UAAA;AAAA,QACnB,MAAA,EAAQ,CAAA,WAAA,EAAc,GAAG,CAAA,QAAA,EAAW,IAAI,CAAA,EAAA,EAAK,QAAA,GAAW,CAAA,QAAA,EAAM,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,cAAc,CAAC,KAAK,EAAE,CAAA,CAAA;AAAA;AAAA;AAAA,QAGtG,MAAA,EAAQ,QAAA,GAAW,QAAA,CAAS,QAAA,EAAU,gBAAgB,CAAA,GAAI;AAAA,OAC5D;AAAA,IACF;AAEA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,IAAI,EAAA;AACJ,MAAA,IAAI;AACF,QAAA,EAAA,GAAK,WAAA,CAAY,MAAM,UAAU,CAAA;AAAA,MACnC,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO;AAAA,UACL,GAAA,EAAK,KAAA;AAAA,UACL,UAAA,EAAY,CAAA;AAAA,UACZ,MAAA,EAAQ,uBAAuB,aAAA,CAAc,IAAI,EAAE,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAAA,UAChE,MAAA,EAAQ,YAAY,IAAI;AAAA,SAC1B;AAAA,MACF;AACA,MAAA,MAAM,SAAS,UAAA,CACZ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,EAAA,CAAG,MAAA,CAAO,CAAC,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAE,CAAA,CAC7C,KAAK,IAAI,CAAA;AACZ,MAAA,OAAO;AAAA,QACL,GAAA,EAAK,GAAG,KAAA,IAAS,SAAA;AAAA,QACjB,YAAY,EAAA,CAAG,KAAA;AAAA;AAAA;AAAA,QAGf,MAAA,EAAQ,CAAA,IAAA,EAAO,EAAA,CAAG,KAAA,CAAM,QAAQ,CAAC,CAAC,CAAA,OAAA,EAAU,SAAS,MAAM,MAAM,CAAA,SAAA,EAAO,aAAA,CAAc,EAAA,CAAG,MAAM,CAAC,CAAA,CAAA;AAAA,QAChG,MAAA,EAAQ,YAAY,IAAI;AAAA,OAC1B;AAAA,IACF;AAEA,IAAA,IAAI,CAAA;AACJ,IAAA,IAAI;AACF,MAAA,CAAA,GAAI,aAAa,IAAI,CAAA;AAAA,IACvB,CAAA,CAAA,MAAQ;AAGN,MAAA,OAAO;AAAA,QACL,GAAA,EAAK,KAAA;AAAA,QACL,UAAA,EAAY,CAAA;AAAA,QACZ,MAAA,EAAQ,wBAAwB,aAAA,CAAc,IAAI,EAAE,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAAA,QACjE,MAAA,EAAQ,YAAY,IAAI;AAAA,OAC1B;AAAA,IACF;AACA,IAAA,MAAM,GAAA,GAAM,CAAA,CAAE,OAAA,KAAY,KAAA,IAAS,EAAE,UAAA,IAAc,SAAA;AACnD,IAAA,OAAO;AAAA,MACL,GAAA;AAAA,MACA,YAAY,CAAA,CAAE,UAAA;AAAA,MACd,QAAQ,CAAA,EAAG,CAAA,CAAE,OAAO,CAAA,GAAA,EAAM,EAAE,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAC,UAAU,SAAS,CAAA,SAAA,EAAO,aAAA,CAAc,CAAA,CAAE,MAAM,CAAC,CAAA,CAAA;AAAA,MAClG,MAAA,EAAQ,YAAY,IAAI;AAAA,KAC1B;AAAA,EACF,GAAG,CAAA,OAAA,EAAU,MAAA,CAAO,QAAQ,CAAA,IAAA,EAAO,SAAS,CAAA,CAAE,CAAA;AAChD;AAQO,SAAS,OAAA,CACd,KAAA,EACA,SAAA,EACA,IAAA,GASI,EAAC,EACA;AACL,EAAA,MAAM,IAAA,GAAO,YAAY,SAAS,CAAA;AAClC,EAAA,OAAO,OAAA,CAAQ,OAAO,GAAA,KAAQ;AAC5B,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,IAAA,EAAM,WAAA;AAAA,MACN,EAAA,EAAI,KAAK,GAAA,EAAI;AAAA,MACb,IAAA,EAAM,CAAC,GAAG,GAAA,CAAI,IAAI,CAAA;AAAA,MAClB,KAAA;AAAA,MACA,WAAW,GAAA,CAAI;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,CAAA,GAAI,MAAM,IAAA,CAAK,GAAA,EAAK,IAAI,WAAW,CAAA;AACzC,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,IAAA,EAAM,kBAAA;AAAA,MACN,EAAA,EAAI,KAAK,GAAA,EAAI;AAAA,MACb,IAAA,EAAM,CAAC,GAAG,GAAA,CAAI,IAAI,CAAA;AAAA,MAClB,KAAA;AAAA,MACA,WAAW,GAAA,CAAI,SAAA;AAAA,MACf,MAAA,EAAQ;AAAA,KACT,CAAA;AAID,IAAA,MAAM,UAAmB,CAAC,CAAA,CAAE,GAAA,IAAO,IAAA,CAAK,WAAW,MAAA,GAC/C;AAAA,MACE,MAAA,EAAQ,MAAA;AAAA,MACR,YAAY,CAAA,CAAE,UAAA;AAAA,MACd,SAAS,CAAA,CAAE,MAAA;AAAA,MACX,MAAM,CAAA,CAAE,MAAA;AAAA,MACR,QAAA,EAAU;AAAA,QACR,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,QAAQ,CAAA,CAAE,MAAA;AAAA,QACV,QAAA,EAAU,CAAC,EAAE,QAAA,EAAU,CAAA,CAAE,UAAU,CAAA,CAAE,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAS,CAAA;AAAA,QAChE,KAAA,EAAO;AAAA;AACT,KACF,GACA;AAAA,MACE,MAAA,EAAQ,CAAA,CAAE,GAAA,GAAM,MAAA,GAAS,MAAA;AAAA,MACzB,YAAY,CAAA,CAAE,UAAA;AAAA,MACd,SAAS,CAAA,CAAE;AAAA,KACb;AACJ,IAAA,IAAI,CAAA,CAAE,WAAW,MAAA,IAAa,OAAA,CAAQ,SAAS,MAAA,EAAW,OAAA,CAAQ,OAAO,CAAA,CAAE,MAAA;AAC3E,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,EAAA,EAAI,KAAK,GAAA,EAAI;AAAA,MACb,IAAA,EAAM,CAAC,GAAG,GAAA,CAAI,IAAI,CAAA;AAAA,MAClB,KAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,OAAA;AAAA,EACT,GAAG,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,OAAO,CAAA;AAClC;AAWO,SAAS,UAAA,CACd,KAAA,EACA,OAAA,EACA,IAAA,GAMI,EAAC,EACA;AACL,EAAA,MAAM,CAAC,UAAA,EAAY,GAAG,IAAI,CAAA,GAAI,aAAa,OAAO,CAAA;AAClD,EAAA,OAAO,OAAA;AAAA,IACL,KAAA;AAAA,IACA,eAAA,CAAgB,YAAY,IAAA,EAAM;AAAA,MAChC,GAAI,KAAK,GAAA,KAAQ,MAAA,GAAY,EAAE,GAAA,EAAK,IAAA,CAAK,GAAA,EAAI,GAAI,EAAC;AAAA,MAClD,GAAI,KAAK,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,EAAW,IAAA,CAAK,SAAA,EAAU,GAAI,EAAC;AAAA,MACpE,GAAI,KAAK,GAAA,KAAQ,MAAA,GAAY,EAAE,GAAA,EAAK,IAAA,CAAK,GAAA,EAAI,GAAI,EAAC;AAAA,MAClD,aAAA,EAAe,KAAK,OAAA,IAAW;AAAA,KAChC,CAAA;AAAA,IACD,IAAA,CAAK,WAAW,MAAA,GAAY,EAAE,QAAQ,IAAA,CAAK,MAAA,KAAW;AAAC,GACzD;AACF;AAEA,SAAS,aAAa,OAAA,EAA4D;AAChF,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,EAAG;AACvD,IAAA,MAAM,IAAI,SAAA,CAAU;AAAA,MAClB,IAAA,EAAM,YAAA;AAAA,MACN,OAAA,EAAS,gBAAgB,OAAO,CAAA,yEAAA;AAAA,KACjC,CAAA;AAAA,EACH;AACA,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,aAAA,CAAc,IAAA,CAAK,OAAO,CAAA,EAAG;AAC9D,IAAA,MAAM,IAAI,SAAA,CAAU;AAAA,MAClB,IAAA,EAAM,YAAA;AAAA,MACN,OAAA,EAAS,gBAAgB,OAAO,CAAA,sIAAA;AAAA,KAEjC,CAAA;AAAA,EACH;AACA,EAAA,MAAM,KAAA,GAAQ,OAAO,OAAA,KAAY,QAAA,GAAW,OAAA,CAAQ,IAAA,EAAK,CAAE,KAAA,CAAM,KAAK,CAAA,GAAI,CAAC,GAAG,OAAO,CAAA;AACrF,EAAA,MAAM,CAAC,UAAA,EAAY,GAAG,IAAI,CAAA,GAAI,KAAA;AAC9B,EAAA,IAAI,UAAA,KAAe,MAAA,IAAa,UAAA,KAAe,EAAA,EAAI;AACjD,IAAA,MAAM,IAAI,SAAA,CAAU,EAAE,MAAM,YAAA,EAAc,OAAA,EAAS,qCAAqC,CAAA;AAAA,EAC1F;AACA,EAAA,OAAO,CAAC,UAAA,EAAY,GAAG,IAAI,CAAA;AAC7B;AAEA,SAAS,WAAA,CAAY,GAAA,EAAiB,IAAA,EAAc,MAAA,EAAyB;AAC3E,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,KAAA,GAAQ,IAAI,CAAA;AAChC,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,MAAM,IAAI,SAAA,CAAU;AAAA,MAClB,IAAA,EAAM,YAAA;AAAA,MACN,SAAS,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,IAAI,QAAQ,IAAI,CAAA,8DAAA;AAAA,KACxC,CAAA;AAAA,EACH;AACA,EAAA,OAAO,OAAA;AACT;AAQO,SAAS,OAAO,IAAA,EAAyB;AAC9C,EAAA,MAAM,IAAA,GAAkB,OAAO,GAAA,KAAQ;AACrC,IAAA,MAAM,OAAA,GAAU,WAAA,CAAY,GAAA,EAAK,IAAA,EAAM,QAAQ,CAAA;AAC/C,IAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,KAAW,MAAA;AAC/B,IAAA,OAAO,EAAE,KAAK,MAAA,EAAQ,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,OAAA,CAAQ,MAAM,CAAA,CAAA,EAAG;AAAA,EACpD,CAAA;AACA,EAAA,OAAA,CAAQ,IAAA,EAAM,EAAE,IAAA,EAAM,WAAA,EAAa,MAAM,QAAA,EAAU,IAAA,EAAM,MAAM,CAAA;AAC/D,EAAA,OAAO,QAAA,CAAS,IAAA,EAAM,CAAA,OAAA,EAAU,IAAI,CAAA,CAAE,CAAA;AACxC;AAUO,SAAS,OAAO,IAAA,EAAyB;AAC9C,EAAA,MAAM,IAAA,GAAkB,OAAO,GAAA,KAAQ;AACrC,IAAA,MAAM,OAAA,GAAU,WAAA,CAAY,GAAA,EAAK,IAAA,EAAM,QAAQ,CAAA;AAC/C,IAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,KAAW,MAAA;AAC/B,IAAA,OAAO,EAAE,KAAK,MAAA,EAAQ,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,OAAA,CAAQ,MAAM,CAAA,CAAA,EAAG;AAAA,EACpD,CAAA;AACA,EAAA,OAAA,CAAQ,IAAA,EAAM,EAAE,IAAA,EAAM,WAAA,EAAa,MAAM,QAAA,EAAU,IAAA,EAAM,MAAM,CAAA;AAC/D,EAAA,OAAO,QAAA,CAAS,IAAA,EAAM,CAAA,OAAA,EAAU,IAAI,CAAA,CAAE,CAAA;AACxC;AAgBO,SAAS,gBAAgB,KAAA,EAAuC;AACrE,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS,eAAA,CAAgB,IAAI,CAAC,CAAA;AAC9E,EAAA,IAAI,OAAO,KAAA,KAAU,UAAA,EAAY,OAAO,EAAC;AACzC,EAAA,MAAM,IAAA,GAAO,QAAQ,KAAuB,CAAA;AAC5C,EAAA,IAAI,IAAA,EAAM,IAAA,KAAS,WAAA,EAAa,OAAO,EAAC;AACxC,EAAA,IAAA,CAAK,IAAA,CAAK,SAAS,QAAA,IAAY,IAAA,CAAK,SAAS,QAAA,KAAa,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,EAAU;AACvF,IAAA,OAAO,CAAC,EAAE,EAAA,EAAI,IAAA,CAAK,MAAM,IAAA,EAAM,IAAA,CAAK,MAAM,CAAA;AAAA,EAC5C;AACA,EAAA,IAAI,KAAK,IAAA,KAAS,KAAA,IAAS,MAAM,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA,EAAG;AACrD,IAAA,OAAQ,KAAK,MAAA,CAA4B,OAAA,CAAQ,CAAC,IAAA,KAAS,eAAA,CAAgB,IAAI,CAAC,CAAA;AAAA,EAClF;AACA,EAAA,OAAO,EAAC;AACV;ACh/BO,IAAM,0BAAA,GAA6B;AAE1C,eAAsB,kBAAA,CACpB,KAAA,EACA,WAAA,EACA,EAAA,EACc;AACd,EAAA,MAAM,KAAA,GAAQ,OAAO,WAAW,CAAA;AAChC,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU,KAAA,CAAM,MAAM,EAAA,CAAG,IAAA,EAAM,KAAK,CAAC,CAAC,CAAC,CAAA;AAC7E;ACKA,eAAe,IACb,IAAA,EACA,EAAE,GAAA,EAAK,MAAA,IACP,KAAA,EAC+C;AAC/C,EAAA,MAAM,CAAA,GAAI,MAAM,iBAAA,CAAkB;AAAA,IAChC,UAAA,EAAY,KAAA;AAAA,IACZ,IAAA;AAAA,IACA,GAAA;AAAA,IACA,MAAA;AAAA,IACA,GAAI,KAAA,KAAU,MAAA,GAAY,EAAC,GAAI,EAAE,OAAO,KAAA;AAAM,GAC/C,CAAA;AACD,EAAA,OAAO;AAAA,IACL,QAAQ,WAAA,CAAY,CAAA,CAAE,MAAM,CAAA,CAAE,OAAA,CAAQ,WAAW,EAAE,CAAA;AAAA,IACnD,QAAA,EAAU,EAAE,QAAA,IAAY;AAAA,GAC1B;AACF;AAGA,eAAsB,OAAO,IAAA,EAAiC;AAC5D,EAAA,IAAI;AACF,IAAA,MAAM,IAAI,MAAM,GAAA,CAAI,CAAC,WAAA,EAAa,uBAAuB,GAAG,IAAI,CAAA;AAChE,IAAA,OAAO,EAAE,QAAA,KAAa,CAAA,IAAK,CAAA,CAAE,MAAA,CAAO,MAAK,KAAM,MAAA;AAAA,EACjD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAGA,eAAsB,cAAc,IAAA,EAA4C;AAC9E,EAAA,MAAM,CAAA,GAAI,MAAM,GAAA,CAAI,CAAC,aAAa,cAAA,EAAgB,MAAM,GAAG,IAAI,CAAA;AAC/D,EAAA,IAAI,CAAA,CAAE,QAAA,KAAa,CAAA,EAAG,OAAO,MAAA;AAC7B,EAAA,MAAM,IAAA,GAAO,CAAA,CAAE,MAAA,CAAO,IAAA,EAAK;AAC3B,EAAA,OAAO,IAAA,IAAQ,IAAA,KAAS,MAAA,GAAS,IAAA,GAAO,MAAA;AAC1C;AAGA,eAAsB,QAAQ,IAAA,EAA4C;AACxE,EAAA,MAAM,IAAI,MAAM,GAAA,CAAI,CAAC,WAAA,EAAa,iBAAiB,GAAG,IAAI,CAAA;AAC1D,EAAA,OAAO,EAAE,QAAA,KAAa,CAAA,GAAI,EAAE,MAAA,CAAO,IAAA,MAAU,MAAA,GAAY,MAAA;AAC3D;AAGA,eAAsB,QAAQ,IAAA,EAA4C;AACxE,EAAA,MAAM,IAAI,MAAM,GAAA,CAAI,CAAC,WAAA,EAAa,MAAM,GAAG,IAAI,CAAA;AAC/C,EAAA,OAAO,EAAE,QAAA,KAAa,CAAA,GAAI,EAAE,MAAA,CAAO,IAAA,MAAU,MAAA,GAAY,MAAA;AAC3D;AAGA,eAAsB,SAAS,IAAA,EAA8B;AAC3D,EAAA,MAAM,GAAA,CAAI,CAAC,KAAA,EAAO,IAAI,GAAG,IAAI,CAAA;AAC/B;AAGA,eAAsB,iBAAiB,IAAA,EAAiC;AAEtE,EAAA,MAAM,CAAA,GAAI,MAAM,GAAA,CAAI,CAAC,QAAQ,UAAA,EAAY,SAAS,GAAG,IAAI,CAAA;AACzD,EAAA,OAAO,EAAE,QAAA,KAAa,CAAA;AACxB;AAoBA,eAAsB,qBACpB,IAAA,EAC6B;AAC7B,EAAA,IAAI;AACF,IAAA,IAAI,CAAE,MAAM,MAAA,CAAO,IAAI,GAAI,OAAO,KAAA,CAAA;AAClC,IAAA,MAAM,QAAA,GAAA,CAAY,IAAA,CAAK,YAAA,IAAgB,IACpC,GAAA,CAAI,CAAC,CAAA,KAAM,QAAA,CAAS,IAAA,CAAK,GAAA,EAAK,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAC,CAAC,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAC,CAAA,CACvE,OAAO,CAAC,CAAA,KAAM,CAAA,IAAK,CAAC,CAAA,CAAE,UAAA,CAAW,IAAI,CAAA,IAAK,MAAM,GAAG,CAAA;AACtD,IAAA,MAAM,QAAA,GAAW,CAAC,GAAG,IAAI,IAAI,IAAA,CAAK,YAAA,IAAgB,EAAE,CAAC,EAClD,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CACnB,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,EAAK;AACR,IAAA,MAAM,MAAA,GAAS,SAAS,MAAA,GAAS,CAAA;AACjC,IAAA,MAAM,QAAA,GAAW,MAAA,IAAU,QAAA,CAAS,MAAA,GAChC;AAAA,MACE,IAAA;AAAA,MACA,GAAI,MAAA,GAAS,QAAA,GAAW,CAAC,GAAG,CAAA;AAAA,MAC5B,GAAG,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,UAAA,EAAa,CAAC,CAAA,CAAE;AAAA,QAEzC,EAAC;AACL,IAAA,MAAM,MAAA,GAAS,OAAO,IAAA,KAAoC;AACxD,MAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,IAAA,EAAM,IAAI,CAAA;AACnC,MAAA,IAAI,OAAO,QAAA,KAAa,CAAA;AACtB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,IAAA,EAAO,KAAK,CAAC,CAAA,IAAK,SAAS,CAAA,OAAA,CAAS,CAAA;AACtD,MAAA,OAAO,MAAA,CAAO,MAAA;AAAA,IAChB,CAAA;AACA,IAAA,MAAM,IAAA,GAAO,WAAW,QAAQ,CAAA;AAChC,IAAA,MAAM,IAAA,GAAO,CAAC,KAAA,EAAe,KAAA,KAAkB;AAC7C,MAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AACjB,MAAA,IAAA,CAAK,OAAO,GAAM,CAAA;AAClB,MAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AACjB,MAAA,IAAA,CAAK,OAAO,GAAM,CAAA;AAAA,IACpB,CAAA;AACA,IAAA,IAAI,MAAA,EAAQ;AAGV,MAAA,IAAA,CAAK,OAAA,EAAS,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA;AACjC,MAAA,IAAA;AAAA,QACE,SAAA;AAAA,QACA,MAAM,MAAA,CAAO,CAAC,YAAY,SAAA,EAAW,GAAG,QAAQ,CAAC;AAAA,OACnD;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,MAAA,EAAS,MAAM,OAAA,CAAQ,IAAI,KAAM,EAAE,CAAA;AAAA,IAC1C;AAGA,IAAA,IAAA;AAAA,MACE,QAAA;AAAA,MACA,MAAM,MAAA,CAAO,CAAC,UAAU,aAAA,EAAe,GAAG,QAAQ,CAAC;AAAA,KACrD;AACA,IAAA,IAAA,CAAK,UAAA,EAAY,MAAM,MAAA,CAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAA;AACpD,IAAA,IAAA,CAAK,QAAA,EAAU,MAAM,MAAA,CAAO,CAAC,QAAQ,UAAA,EAAY,GAAG,QAAQ,CAAC,CAAC,CAAA;AAI9D,IAAA,MAAM,SAAA,GAAA,CACJ,MAAM,MAAA,CAAO;AAAA,MACX,UAAA;AAAA,MACA,UAAA;AAAA,MACA,GAAI,MAAA,GAAS,EAAC,GAAI,CAAC,oBAAoB,CAAA;AAAA,MACvC,GAAG;AAAA,KACJ,CAAA,EAEA,KAAA,CAAM,IAAI,CAAA,CACV,OAAO,OAAO,CAAA;AACjB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,MAAA,EAAQ,KAAK,GAAA,EAAK;AAC9C,MAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,IAAI,GAAG,CAAA;AACxC,MAAA,IAAA,CAAK,mBAAmB,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA;AAC7C,MAAA,IAAA;AAAA,QACE,qBAAqB,CAAC,CAAA,CAAA;AAAA,QACtB,MAAM,MAAA,CAAO,CAAC,eAAe,IAAA,EAAM,GAAG,KAAK,CAAC;AAAA,OAC9C;AAAA,IACF;AACA,IAAA,OAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,EAC1B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAuCA,SAAS,iBAAiB,MAAA,EAAwC;AAChE,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AACjC,EAAA,MAAM,UAAyB,EAAC;AAChC,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,OAAA,CAAQ,MAAA,EAAQ,SAAS,CAAA,EAAG;AACtD,IAAA,MAAM,MAAA,GAAS,QAAQ,KAAK,CAAA;AAC5B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,IAAI,OAAO,MAAA,GAAS,CAAA,IAAK,MAAA,CAAO,CAAC,MAAM,GAAA,EAAK;AAC1C,MAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,IACnE;AACA,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAChC,IAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAA,EAAM,OAAO,KAAA,CAAM,CAAC,GAAG,CAAA;AAC9C,IAAA,IAAI,OAAO,QAAA,CAAS,GAAG,KAAK,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,EAAG;AAChD,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,GAAQ,CAAC,CAAA;AAChC,MAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,oCAAoC,CAAA;AACjE,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,OAAA,CAAA,EAAW,IAAA,EAAM,QAAQ,CAAA;AACzD,MAAA,KAAA,IAAS,CAAA;AAAA,IACX;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,gBAAgB,MAAA,EAA4C;AACnE,EAAA,MAAM,OAAA,uBAAc,GAAA,EAA2B;AAC/C,EAAA,KAAA,MAAW,MAAA,IAAU,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG;AACvC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,MAAM,KAAA,GAAQ,mCAAA,CAAoC,IAAA,CAAK,MAAM,CAAA;AAC7D,IAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,MAAM,qCAAqC,CAAA;AACjE,IAAA,MAAM,GAAG,IAAA,EAAM,GAAA,EAAK,KAAA,EAAO,IAAI,CAAA,GAAI,KAAA;AACnC,IAAA,IAAI,UAAU,GAAA,EAAK;AACjB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,IAAI,CAAA,CAAE,CAAA;AAAA,IAChE;AACA,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,IAAK,CAAA,EAAG;AACtB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wCAAA,EAA2C,IAAI,CAAA,CAAE,CAAA;AAAA,IACnE;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAO,EAAE,IAAA,EAAa,KAAW,CAAA;AAAA,EAC/C;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,YAAY,KAAA,EAAsC;AACzD,EAAA,IAAI,MAAM,UAAA,KAAe,CAAA,SAAU,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AACnD,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,KAAA,CAAM,UAAA,EAAY,SAAS,CAAA,EAAG;AACxD,IAAA,IAAI,KAAA,CAAM,KAAK,CAAA,KAAM,EAAA,EAAM;AAC3B,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,UAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,KAAA,CAAM,QAAA,CAAS,KAAA,EAAO,KAAA,GAAQ,CAAC,CAAC,CAAA,CAAE,MAAA,CAAO,KAAK;AAAA,KAC5E;AACA,IAAA,KAAA,GAAQ,KAAA,GAAQ,CAAA;AAAA,EAClB;AACA,EAAA,IAAI,KAAA,GAAQ,MAAM,UAAA,EAAY;AAC5B,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,KAAA,CAAM,QAAA,CAAS,KAAK,CAAC,CAAA,CAAE,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAC7E;AACA,EAAA,OAAO,MAAA,CAAO,OAAO,KAAK,CAAA;AAC5B;AAEA,eAAe,UAAA,CACb,MACA,KAAA,EACwB;AACxB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,EAAM,KAAA,CAAM,IAAI,CAAA;AAClC,EAAA,IAAI;AACF,IAAA,MAAMC,KAAAA,GAAO,MAAM,KAAA,CAAM,IAAI,CAAA;AAC7B,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,IAAA;AACJ,IAAA,IAAIA,KAAAA,CAAK,QAAO,EAAG;AACjB,MAAA,IAAA,GAAO,MAAA;AACP,MAAA,KAAA,GAAQ,MAAM,SAAS,IAAI,CAAA;AAAA,IAC7B,CAAA,MAAA,IAAWA,KAAAA,CAAK,cAAA,EAAe,EAAG;AAChC,MAAA,IAAA,GAAO,SAAA;AACP,MAAA,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAM,EAAE,QAAA,EAAU,UAAU,CAAA;AAAA,IACrD,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,qDAAA,EAAwD,MAAM,IAAI,CAAA;AAAA,OACpE;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,IAAA;AAAA,MACA,MAAMA,KAAAA,CAAK,IAAA;AAAA,MACX,MAAA,EAAQ,WAAW,QAAQ,CAAA,CAAE,OAAO,KAAK,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MACvD,KAAA,EAAO,YAAY,KAAK;AAAA,KAC1B;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,OAAQ,KAAA,CAAgC,IAAA;AAC9C,IAAA,IAAI,SAAS,QAAA,EAAU;AACrB,MAAA,OAAO;AAAA,QACL,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,IAAA,EAAM,SAAA;AAAA,QACN,IAAA,EAAM,CAAA;AAAA,QACN,MAAA,EAAQ,IAAA;AAAA,QACR,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,EAAE;AAAA,OACzB;AAAA,IACF;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAOA,eAAsB,4BACpB,IAAA,EAC+B;AAC/B,EAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,IAAI,CAAA;AAC/B,EAAA,IAAI,CAAC,IAAA,EAAM,MAAM,IAAI,MAAM,sBAAsB,CAAA;AACjD,EAAA,MAAM,WAAA,GAAc,EAAE,GAAG,IAAA,EAAM,KAAK,IAAA,EAAK;AACzC,EAAA,MAAM,QAAA,GAAW,CAAC,GAAG,IAAI,IAAI,IAAA,CAAK,YAAA,IAAgB,EAAE,CAAC,EAClD,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,IAAA,EAAM,CAAA,CACzB,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,EAAK;AACR,EAAA,MAAM,QAAA,GAAW,SAAS,MAAA,GAAS,CAAA,GAAI,CAAC,IAAA,EAAM,GAAG,QAAQ,CAAA,GAAI,EAAC;AAC9D,EAAA,MAAM,CAAC,IAAA,EAAM,WAAA,EAAa,YAAY,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,IAC1D,QAAQ,WAAW,CAAA;AAAA,IACnB,GAAA,CAAI;AAAA,MACF,GAAI,QAAA,CAAS,MAAA,KAAW,IAAI,CAAC,qBAAqB,IAAI,EAAC;AAAA,MACvD,UAAA;AAAA,MAAY,SAAA;AAAA,MAAW,IAAA;AAAA,MAAM,GAAG;AAAA,OAC/B,WAAW,CAAA;AAAA,IACd,GAAA;AAAA,MACE,CAAC,QAAA,EAAU,gBAAA,EAAkB,IAAA,EAAM,uBAAA,EAAyB,GAAG,QAAQ,CAAA;AAAA,MACvE;AAAA;AACF,GACD,CAAA;AACD,EAAA,IAAI,YAAY,QAAA,KAAa,CAAA,EAAG,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAC7E,EAAA,IAAI,aAAa,QAAA,KAAa,CAAA,EAAG,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAE/E,EAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,WAAA,CAAY,MAAM,CAAA;AAChD,EAAA,MAAM,YAAA,GAAe,gBAAA,CAAiB,YAAA,CAAa,MAAM,CAAA;AACzD,EAAA,MAAM,KAAA,uBAAY,GAAA,EAA2B;AAC7C,EAAA,KAAA,MAAW,SAAS,YAAA,EAAc;AAChC,IAAA,KAAA,CAAM,IAAI,KAAA,CAAM,IAAA,EAAM,MAAM,UAAA,CAAW,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,EACrD;AACA,EAAA,MAAM,QAAQ,CAAC,mBAAG,IAAI,GAAA,CAAI,CAAC,GAAG,KAAA,CAAM,IAAA,EAAK,EAAG,GAAG,KAAA,CAAM,IAAA,EAAM,CAAC,CAAC,EAAE,IAAA,EAAK;AACpE,EAAA,MAAM,QAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,OAAO,MAAA,CAAO;AAAA,IAC9C,IAAA;AAAA,IACA,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA,IAAK,IAAA;AAAA,IAC1B,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA,IAAK;AAAA,GAC3B,CAAC,CAAA;AACF,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,IAAA;AAAA,IACA,MAAM,IAAA,IAAQ,IAAA;AAAA,IACd,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,KAAK;AAAA,GAC3B,CAAA;AACH;AAEA,SAAS,aAAa,KAAA,EAAkD;AACtE,EAAA,IAAI,CAAC,OAAO,OAAO,UAAA;AACnB,EAAA,OAAO,IAAA,CAAK,UAAU,EAAE,KAAA,EAAO,MAAM,KAAA,EAAO,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,CAAA;AAClE;AAEA,SAAS,aAAA,CACP,QACA,KAAA,EACQ;AACR,EAAA,IACE,MAAA,CAAO,MAAA,KAAW,KAAA,CAAM,MAAA,IACxB,MAAA,CAAO,KAAA,CAAM,CAAC,IAAA,EAAM,KAAA,KAAU,IAAA,KAAS,KAAA,CAAM,KAAK,CAAC,CAAA,EACnD;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,MAAA,GAAS,KAAA,CAAM,MAAA;AACtC,EAAA,IAAI,QAAA,uBAAe,GAAA,CAAoB,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA;AAC/C,EAAA,KAAA,IAAS,QAAA,GAAW,CAAA,EAAG,QAAA,IAAY,OAAA,EAAS,YAAY,CAAA,EAAG;AACzD,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAoB;AACrC,IAAA,KAAA,IAAS,WAAW,CAAC,QAAA,EAAU,QAAA,IAAY,QAAA,EAAU,YAAY,CAAA,EAAG;AAClE,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,GAAA,CAAI,QAAA,GAAW,CAAC,CAAA,IAAK,EAAA;AAC3C,MAAA,MAAM,SAAS,QAAA,CAAS,GAAA,CAAI,QAAA,GAAW,CAAC,KAAK,EAAA,IAAM,CAAA;AACnD,MAAA,IAAI,CAAA,GAAI,aAAa,CAAC,QAAA,IAAa,aAAa,QAAA,IAAY,KAAA,GAAQ,OAChE,IAAA,GACA,KAAA;AACJ,MAAA,IAAI,IAAI,CAAA,GAAI,QAAA;AACZ,MAAA,OACE,CAAA,GAAI,MAAA,CAAO,MAAA,IACX,CAAA,GAAI,KAAA,CAAM,MAAA,IACV,MAAA,CAAO,CAAC,CAAA,KAAM,KAAA,CAAM,CAAC,CAAA,EACrB;AACA,QAAA,CAAA,IAAK,CAAA;AACL,QAAA,CAAA,IAAK,CAAA;AAAA,MACP;AACA,MAAA,IAAI,KAAK,MAAA,CAAO,MAAA,IAAU,CAAA,IAAK,KAAA,CAAM,QAAQ,OAAO,QAAA;AACpD,MAAA,IAAA,CAAK,GAAA,CAAI,UAAU,CAAC,CAAA;AAAA,IACtB;AACA,IAAA,QAAA,GAAW,IAAA;AAAA,EACb;AACA,EAAA,OAAO,OAAA;AACT;AAEA,eAAe,SAAA,CACb,IAAA,EACA,GAAA,EACA,KAAA,EACA,MAAA,EAC4B;AAC5B,EAAA,IAAI,CAAC,GAAA,EAAK,OAAO,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AACjC,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAC5B,EAAA,IAAI,QAAQ,OAAO,MAAA;AACnB,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,CAAkB;AAAA,IACrC,UAAA,EAAY,KAAA;AAAA,IACZ,IAAA,EAAM,CAAC,UAAA,EAAY,MAAA,EAAQ,GAAG,CAAA;AAAA,IAC9B,GAAA,EAAK,IAAA;AAAA,IACL;AAAA,GACD,CAAA;AACD,EAAA,IAAI,MAAA,CAAO,aAAa,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,GAAG,CAAA,CAAE,CAAA;AAClF,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,MAAA,CAAO,MAAM,CAAA;AACvC,EAAA,KAAA,CAAM,GAAA,CAAI,KAAK,KAAK,CAAA;AACpB,EAAA,OAAO,KAAA;AACT;AAEA,eAAe,aAAA,CACb,IAAA,EACA,KAAA,EACA,KAAA,EACA,MAAA,EAC4B;AAC5B,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AACnC,EAAA,IAAI,KAAA,CAAM,KAAA,EAAO,OAAO,KAAA,CAAM,KAAA,CAAM,KAAA;AACpC,EAAA,OAAO,MAAM,SAAA,CAAU,IAAA,EAAM,MAAM,KAAA,EAAO,GAAA,EAAK,OAAO,MAAM,CAAA;AAC9D;AAGA,eAAsB,4BAAA,CACpB,MAAA,EACA,KAAA,EACA,MAAA,EAC4B;AAC5B,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,KAAA,CAAM,IAAA,EAAM;AAC9B,IAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,EACjE;AACA,EAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,CAAC,IAAA,CAAK,IAAA,EAAM,IAAI,CAAC,CAAC,CAAA;AACzE,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,CAAC,IAAA,CAAK,IAAA,EAAM,IAAI,CAAC,CAAC,CAAA;AACvE,EAAA,MAAM,YAAA,GAAe,CAAC,mBAAG,IAAI,GAAA,CAAI;AAAA,IAC/B,GAAG,YAAY,IAAA,EAAK;AAAA,IACpB,GAAG,WAAW,IAAA;AAAK,GACpB,CAAC,CAAA,CACC,MAAA;AAAA,IACC,CAAC,IAAA,KACC,YAAA,CAAa,WAAA,CAAY,GAAA,CAAI,IAAI,CAAC,CAAA,KAAM,YAAA,CAAa,UAAA,CAAW,GAAA,CAAI,IAAI,CAAC;AAAA,IAE5E,IAAA,EAAK;AAER,EAAA,MAAM,KAAA,uBAAY,GAAA,EAA+B;AACjD,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,KAAA,MAAW,QAAQ,YAAA,EAAc;AAC/B,IAAA,MAAM,WAAA,GAAc,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AACxC,IAAA,MAAM,UAAA,GAAa,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA;AACtC,IAAA,MAAM,CAAC,gBAAgB,aAAA,EAAe,WAAA,EAAa,UAAU,CAAA,GAC3D,MAAM,QAAQ,GAAA,CAAI;AAAA,MAChB,aAAA,CAAc,MAAA,CAAO,IAAA,EAAM,WAAA,EAAa,OAAO,MAAM,CAAA;AAAA,MACrD,aAAA,CAAc,KAAA,CAAM,IAAA,EAAM,UAAA,EAAY,OAAO,MAAM,CAAA;AAAA,MACnD,UAAU,MAAA,CAAO,IAAA,EAAM,aAAa,KAAA,EAAO,GAAA,EAAK,OAAO,MAAM,CAAA;AAAA,MAC7D,UAAU,KAAA,CAAM,IAAA,EAAM,YAAY,KAAA,EAAO,GAAA,EAAK,OAAO,MAAM;AAAA,KAC5D,CAAA;AACH,IAAA,YAAA,IAAgB,IAAA,CAAK,GAAA;AAAA,MACnB,aAAA,CAAc,gBAAgB,aAAa,CAAA;AAAA,MAC3C,aAAA,CAAc,aAAa,UAAU;AAAA,KACvC;AACA,IAAA,IAAI,CAAC,MAAA,CAAO,aAAA,CAAc,YAAY,CAAA,EAAG;AACvC,MAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAAA,IACxE;AAAA,EACF;AAEA,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,WAAA,EAAa,MAAA,CAAO,IAAA,KAAS,KAAA,CAAM,IAAA;AAAA,IACnC,YAAA,EAAc,MAAA,CAAO,MAAA,CAAO,YAAY,CAAA;AAAA,IACxC,cAAc,YAAA,CAAa,MAAA;AAAA,IAC3B;AAAA,GACD,CAAA;AACH;AAiBA,eAAsB,MAAA,CACpB,OACA,IAAA,EAC6B;AAC7B,EAAA,IAAI,CAAC,MAAM,UAAA,IAAc,CAAE,MAAM,gBAAA,CAAiB,IAAI,GAAI,OAAO,MAAA;AACjE,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,GAClB,CAAA,EAAG,MAAM,OAAO;;AAAA,EAAO,MAAM,IAAI;AAAA,CAAA,GACjC,CAAA,EAAG,MAAM,OAAO;AAAA,CAAA;AACpB,EAAA,MAAM,IAAA,GAAO,CAAC,QAAA,EAAU,IAAA,EAAM,GAAG,CAAA;AACjC,EAAA,IAAI,KAAA,CAAM,UAAA,EAAY,IAAA,CAAK,IAAA,CAAK,eAAe,CAAA;AAC/C,EAAA,MAAM,CAAA,GAAI,MAAM,GAAA,CAAI,IAAA,EAAM,MAAM,OAAO,CAAA;AACvC,EAAA,IAAI,CAAA,CAAE,aAAa,CAAA,EAAG;AACpB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,2BAA2B,CAAA,CAAE,QAAQ,MAAM,CAAA,CAAE,MAAM,GAAG,IAAA;AAAK,KAC7D;AAAA,EACF;AACA,EAAA,OAAO,QAAQ,IAAI,CAAA;AACrB;AAGA,eAAsB,cAAc,IAAA,EAKkB;AACpD,EAAA,MAAM,KAAA,GAAQ,GAAA;AACd,EAAA,MAAM,MAAA,GAAS,GAAA;AACf,EAAA,MAAM,SAAS,MAAM,GAAA;AAAA,IACnB,CAAC,KAAA,EAAO,CAAA,EAAA,EAAK,IAAA,CAAK,GAAG,CAAA,CAAA,EAAI,CAAA,WAAA,EAAc,KAAK,CAAA,EAAA,EAAK,MAAM,CAAA,CAAA,EAAI,IAAA,CAAK,GAAG,CAAA;AAAA,IACnE;AAAA,GACF;AACA,EAAA,IAAI,MAAA,CAAO,QAAA,KAAa,CAAA,EAAG,OAAO,EAAC;AACnC,EAAA,OAAO,MAAA,CAAO,MAAA,CACX,KAAA,CAAM,MAAM,CAAA,CACZ,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,EAAE,EAAE,KAAA,CAAM,KAAK,CAAC,CAAA,CACrD,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,CAAC,CAAA,EAAG,IAAA,EAAM,CAAA,CACpC,GAAA,CAAI,CAAC,CAAC,OAAA,EAAS,IAAI,CAAA,MAAO;AAAA,IACzB,OAAA,EAAS,QAAS,IAAA,EAAK;AAAA,IACvB,IAAA,EAAA,CAAO,IAAA,IAAQ,EAAA,EAAI,IAAA;AAAK,GAC1B,CAAE,CAAA;AACN;AAKA,IAAM,cAAA,uBAAqB,GAAA,EAA2B;AAEtD,eAAe,iBAAA,CACb,OAAA,EACA,MAAA,EACA,SAAA,EACY;AACZ,EAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,CAAC,WAAA,EAAa,kBAAkB,CAAA,EAAG,EAAE,GAAA,EAAK,OAAA,EAAS,MAAA,EAAQ,CAAA;AACpF,EAAA,IAAI,OAAO,QAAA,KAAa,CAAA,EAAG,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAC7E,EAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,OAAA,CAAQ,SAAS,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,CAAC,CAAA;AACjE,EAAA,MAAM,MAAA,GAAA,CAAU,eAAe,GAAA,CAAI,GAAG,KAAK,OAAA,CAAQ,OAAA,EAAQ,EAAG,IAAA,CAAK,SAAS,CAAA;AAC5E,EAAA,MAAM,OAAO,MAAA,CAAO,IAAA,CAAK,MAAM,MAAA,EAAW,MAAM,MAAS,CAAA;AACzD,EAAA,cAAA,CAAe,GAAA,CAAI,KAAK,IAAI,CAAA;AAC5B,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,MAAA;AAAA,EACf,CAAA,SAAE;AACA,IAAA,IAAI,eAAe,GAAA,CAAI,GAAG,MAAM,IAAA,EAAM,cAAA,CAAe,OAAO,GAAG,CAAA;AAAA,EACjE;AACF;AAcA,eAAsB,WAAA,CACpB,SACA,IAAA,EACyB;AACzB,EAAA,OAAO,iBAAA,CAAkB,OAAA,EAAS,IAAA,CAAK,MAAA,EAAQ,YAAY;AACzD,IAAA,MAAM,MAAM,WAAA,CAAY,IAAA,CAAK,MAAA,EAAO,EAAG,WAAW,CAAC,CAAA;AACnD,IAAA,MAAM,IAAI,MAAM,GAAA;AAAA,MACd,CAAC,YAAY,KAAA,EAAO,IAAA,EAAM,KAAK,MAAA,EAAQ,GAAA,EAAK,IAAA,CAAK,IAAA,IAAQ,MAAM,CAAA;AAAA,MAC/D,EAAE,GAAA,EAAK,OAAA,EAAS,MAAA,EAAQ,KAAK,MAAA;AAAO,KACtC;AACA,IAAA,IAAI,EAAE,QAAA,KAAa,CAAA;AACjB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,iCAAiC,CAAA,CAAE,QAAQ,MAAM,CAAA,CAAE,MAAM,GAAG,IAAA;AAAK,OACnE;AACF,IAAA,OAAO,EAAE,GAAA,EAAK,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAO;AAAA,EACpC,CAAC,CAAA;AACH;AAGA,eAAsB,cAAA,CACpB,OAAA,EACA,GAAA,EACA,IAAA,GAAiC,EAAC,EACnB;AACf,EAAA,MAAM,iBAAA,CAAkB,OAAA,EAAS,IAAA,CAAK,MAAA,EAAQ,MAAM,GAAA,CAAI,CAAC,UAAA,EAAY,QAAA,EAAU,SAAA,EAAW,GAAG,CAAA,EAAG;AAAA,IAC9F,GAAA,EAAK,OAAA;AAAA,IACL,QAAQ,IAAA,CAAK;AAAA,GACd,CAAC,CAAA;AACJ;AAGA,eAAsB,YAAA,CACpB,OAAA,EACA,MAAA,EACA,IAAA,GAAiC,EAAC,EACnB;AACf,EAAA,MAAM,GAAA,CAAI,CAAC,QAAA,EAAU,IAAA,EAAM,MAAM,CAAA,EAAG,EAAE,GAAA,EAAK,OAAA,EAAS,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,CAAA;AAC3E;AAaA,eAAsB,WAAA,CACpB,OAAA,EACA,MAAA,EACA,IAAA,GAAmD,EAAC,EAC9B;AACtB,EAAA,MAAM,IAAI,MAAM,GAAA;AAAA,IACd,CAAC,SAAS,SAAA,EAAW,IAAA,EAAM,KAAK,OAAA,IAAW,CAAA,MAAA,EAAS,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA;AAAA,IACpE,EAAE,GAAA,EAAK,OAAA,EAAS,MAAA,EAAQ,KAAK,MAAA;AAAO,GACtC;AACA,EAAA,IAAI,CAAA,CAAE,aAAa,CAAA,EAAG,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,UAAU,KAAA,EAAM;AACzD,EAAA,MAAM,GAAA,CAAI,CAAC,OAAA,EAAS,SAAS,CAAA,EAAG,EAAE,GAAA,EAAK,OAAA,EAAS,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,CAAA;AACrE,EAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,QAAA,EAAU,IAAA,EAAK;AACrC;AAOA,eAAsB,aAAA,CACpB,OAAA,EACA,MAAA,EACA,IAAA,GAAiC,EAAC,EACiB;AACnD,EAAA,MAAM,CAAA,GAAI,MAAM,GAAA,CAAI,CAAC,SAAS,SAAA,EAAW,aAAA,EAAe,MAAM,CAAA,EAAG;AAAA,IAC/D,GAAA,EAAK,OAAA;AAAA,IACL,QAAQ,IAAA,CAAK;AAAA,GACd,CAAA;AACD,EAAA,IAAI,CAAA,CAAE,aAAa,CAAA,EAAG,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,UAAA,EAAY,EAAC,EAAE;AAC3D,EAAA,OAAO,EAAE,OAAO,KAAA,EAAO,UAAA,EAAY,MAAM,eAAA,CAAgB,OAAA,EAAS,IAAI,CAAA,EAAE;AAC1E;AAGA,eAAsB,eAAA,CACpB,OAAA,EACA,IAAA,GAAiC,EAAC,EACf;AACnB,EAAA,MAAM,IAAI,MAAM,GAAA,CAAI,CAAC,MAAA,EAAQ,aAAA,EAAe,iBAAiB,CAAA,EAAG;AAAA,IAC9D,GAAA,EAAK,OAAA;AAAA,IACL,QAAQ,IAAA,CAAK;AAAA,GACd,CAAA;AACD,EAAA,OAAO,CAAA,CAAE,MAAA,CACN,KAAA,CAAM,IAAI,CAAA,CACV,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CACnB,OAAO,OAAO,CAAA;AACnB;AAGA,eAAsB,UAAA,CACpB,OAAA,EACA,IAAA,GAAiC,EAAC,EACnB;AACf,EAAA,MAAM,GAAA,CAAI,CAAC,OAAA,EAAS,SAAS,CAAA,EAAG,EAAE,GAAA,EAAK,OAAA,EAAS,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,CAAA;AACvE;;;ACtnBO,SAAS,0BACd,QAAA,EACwB;AACxB,EAAA,OAAO,QAAA,IAAY,OAAA;AACrB;AASA,SAAS,YAAY,OAAA,EAAkC;AACrD,EAAA,MAAM,WAAW,OAAA,CAAQ,QAAA,GAAW,CAAA,EAAG,OAAA,CAAQ,QAAQ,CAAA,CAAA,CAAA,GAAM,EAAA;AAC7D,EAAA,MAAM,QAAA,GAAW,yBAAA,CAA0B,OAAA,CAAQ,QAAQ,CAAA;AAC3D,EAAA,MAAM,WAAW,OAAA,CAAQ,QAAA,GAAW,CAAA,WAAA,EAAc,OAAA,CAAQ,QAAQ,CAAA,CAAA,CAAA,GAAM,EAAA;AACxE,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,GAC3B,CAAA,iBAAA,EAAoB,QAAQ,OAAA,CAAQ,cAAc,CAAC,CAAA,CAAA,GACnD,EAAA;AACJ,EAAA,OAAO,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAA,EAAI,QAAQ,CAAA,GAAA,EAAM,OAAA,CAAQ,OAAA,CAAQ,QAAQ,CAAC,CAAA,EAAG,QAAQ,CAAA,EAAG,cAAc,CAAA,CAAA;AAC7F;AAEA,SAAS,cAAc,QAAA,EAAiD;AACtE,EAAA,IAAI,CAAC,QAAA,EAAU,MAAA,EAAQ,OAAO,oBAAA;AAC9B,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG,OAAO,QAAQ,QAAA,CAAS,CAAC,EAAG,QAAQ,CAAA;AAC/D,EAAA,OAAO,CAAA,EAAG,SAAS,MAAM,CAAA,8BAAA,CAAA;AAC3B;AAEA,SAAS,kBAAkB,KAAA,EAA8C;AACvE,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA,EAAQ,MAAK,IAAK,aAAA,CAAc,MAAM,QAAQ,CAAA;AACnE,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,KAAA,EAAO,KAAA,CAAM,KAAA,KAAU,KAAA,CAAM,SAAS,uBAAA,GAA0B,MAAA,CAAA;AAAA,IAChE,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,UAAU,KAAA,CAAM;AAAA,GAClB;AACF;AAEO,SAAS,eAAA,CACd,KAAA,EACA,IAAA,GAAyB,EAAC,EACjB;AACT,EAAA,MAAM,QAAA,GAAW,kBAAkB,KAAK,CAAA;AACxC,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,KAAK,MAAA,IAAU,MAAA;AAAA,IACvB,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,OAAA,EAAS,IAAA,CAAK,OAAA,IAAW,QAAA,CAAS,MAAA;AAAA,IAClC,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ;AAAA,GACF;AACF;AAEO,SAAS,QAAA,CACd,EAAA,EACA,MAAA,EACA,IAAA,GAAyB,EAAC,EACjB;AAGT,EAAA,OAAO,gBAAgB,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAA,IAAU,IAAI,CAAA;AACrD;AAQO,SAAS,oBAAoB,OAAA,EAA+C;AACjF,EAAA,OAAO,OAAA,CAAQ,QAAA;AACjB;AAEO,SAAS,cAAc,OAAA,EAA0B;AACtD,EAAA,MAAM,QAAA,GAAW,oBAAoB,OAAO,CAAA;AAC5C,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,wBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,IAAI,UAAU,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,QAAA,EAAW,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAC7D,EAAA,IAAI,UAAU,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,QAAA,EAAW,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAC7D,EAAA,IAAI,UAAU,QAAA,EAAU,KAAA,CAAM,KAAK,CAAA,iBAAA,EAAoB,QAAA,CAAS,QAAQ,CAAA,CAAE,CAAA;AAC1E,EAAA,MAAM,MAAA,GAAS,QAAA,EAAU,MAAA,IAAU,OAAA,CAAQ,OAAA;AAC3C,EAAA,IAAI,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,MAAM,CAAA,CAAE,CAAA;AAC1C,EAAA,MAAM,QAAA,GAAW,QAAA,EAAU,QAAA,IAAY,EAAC;AACxC,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AACtB,IAAA,KAAA,CAAM,KAAK,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,EACjD;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,MAAM,CAAA;AAC1B;AAEO,SAAS,kBAAA,CACd,OACA,YAAA,EACQ;AACR,EAAA,OAAO;AAAA,IACL,mBAAA;AAAA,IACA,CAAA,KAAA,EAAQ,MAAM,GAAG,CAAA,CAAA;AAAA,IACjB,CAAA,cAAA,EAAiB,MAAM,IAAI,CAAA,CAAA;AAAA,IAC3B,GAAI,MAAM,IAAA,GAAO,CAAC,gBAAgB,KAAA,CAAM,IAAI,CAAA,CAAE,CAAA,GAAI,EAAC;AAAA,IACnD,GAAI,YAAA,GAAe,CAAC,SAAS,YAAY,CAAA,CAAE,IAAI,EAAC;AAAA,IAChD,CAAA,MAAA,EAAS,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA;AAAA,IAC/B,CAAA,YAAA,EAAe,MAAM,KAAA,CAAM,MAAA,GAAS,MAAM,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,GAAI,MAAM,CAAA,CAAA;AAAA,IACnE,CAAA,mBAAA,EACE,MAAM,UAAA,CAAW,MAAA,GAAS,MAAM,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,GAAI,MAC1D,CAAA;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AACb;AA6DA,IAAM,kBAAA,GAAqB,gBAAA;AAE3B,SAAS,qBAAA,CACP,UACA,YAAA,EACQ;AACR,EAAA,MAAM,YAAA,GAAe,CAAC,GAAG,IAAI,IAAI,QAAA,CAAS,YAAA,IAAgB,EAAE,CAAC,EAC1D,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,IAAA,EAAM,CAAA,CACzB,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,EAAK;AACR,EAAA,OAAOC,UAAAA,CAAW,QAAQ,CAAA,CACvB,MAAA;AAAA,IACC,KAAK,SAAA,CAAU;AAAA,MACb,IAAA,EAAM,QAAA,CAAS,IAAA,CAAM,IAAA,EAAK;AAAA,MAC1B,YAAA,EAAc,QAAA,CAAS,YAAA,CAAc,IAAA,EAAK;AAAA,MAC1C,IAAA,EAAM,KAAA,IAAS,QAAA,GAAW,KAAA,GAAQ,QAAA;AAAA,MAClC,KAAA,EAAO,SAAS,KAAA,IAAS,IAAA;AAAA,MACzB,YAAA;AAAA,MACA,cAAc,YAAA,IAAgB;AAAA,KAC/B;AAAA,GACH,CACC,OAAO,KAAK,CAAA;AACjB;AAEA,SAAS,kBAAA,CAAmB,KAAiB,KAAA,EAAuB;AAClE,EAAA,OAAO,CAAA,mBAAA,EAAsB,KAAK,SAAA,CAAU,CAAC,GAAG,GAAA,CAAI,IAAA,EAAM,KAAK,CAAC,CAAC,CAAA,CAAA;AACnE;AAEA,SAAS,gBAAgB,KAAA,EAAuC;AAC9D,EAAA,MAAM,QAA+B,EAAC;AACtC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,UAAU,IAAA,IAAQ,KAAA,CAAM,QAAQ,KAAK,CAAA;AACpE,IAAA,OAAO,KAAA;AACT,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAK,CAAA;AAC9C,IAAA,MAAA,CAAO,cAAA,CAAe,OAAO,IAAA,EAAM;AAAA,MACjC,KAAA,EAAO,KAAA;AAAA,MACP,UAAA,EAAY,IAAA;AAAA,MACZ,YAAA,EAAc,IAAA;AAAA,MACd,QAAA,EAAU;AAAA,KACX,CAAA;AACH,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,aAAA,CACP,KAAA,EACA,IAAA,EACA,IAAA,EACM;AACN,EAAA,MAAA,CAAO,cAAA,CAAe,OAAO,IAAA,EAAM;AAAA,IACjC,KAAA,EAAO,IAAA;AAAA,IACP,UAAA,EAAY,IAAA;AAAA,IACZ,YAAA,EAAc,IAAA;AAAA,IACd,QAAA,EAAU;AAAA,GACX,CAAA;AACH;AAEA,SAAS,kBAAA,CACP,KAAA,EACAC,cAAAA,EACA,QAAA,EAC8B;AAC9B,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,UAAU,IAAA,IAAQ,KAAA,CAAM,QAAQ,KAAK,CAAA;AACpE,IAAA,OAAO,KAAA;AACT,EAAA,MAAM,IAAA,GAAO,KAAA;AACb,EAAA,OACE,IAAA,CAAK,QAAA,KAAa,QAAA,IAClB,OAAO,IAAA,CAAK,gBAAgB,QAAA,IAC5B,kBAAA,CAAmB,IAAA,CAAK,IAAA,CAAK,WAAW,CAAA,IACxC,OAAO,IAAA,CAAK,UAAA,KAAe,QAAA,IAC3B,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,UAAU,CAAA,IAC/B,IAAA,CAAK,UAAA,IAAcA,cAAAA,IACnB,IAAA,CAAK,UAAA,IAAc,CAAA;AAEvB;AAOA,IAAM,gCAAA,GAAmC,0BAAA;AACzC,SAAS,4BACP,KAAA,EACoB;AACpB,EAAA,OAAO,sBAAsB,KAAK,CAAA;AACpC;AAEA,SAAS,sBAAsB,KAAA,EAAkD;AAC/E,EAAA,OAAO,OAAO,IAAA,KAAS,gBAAA;AACzB;AAEA,SAAS,iBAAA,CACP,QAAA,EACA,KAAA,EACA,MAAA,EAC+B;AAC/B,EAAA,MAAM,QAAA,GAAW,QAAQ,IAAA,EAAK;AAC9B,EAAA,IAAI,CAAC,UAAU,OAAO,MAAA;AACtB,EAAA,OAAO,CAAC,EAAE,QAAA,EAAU,UAAU,OAAA,EAAS,KAAA,EAAO,UAAU,CAAA;AAC1D;AAEA,SAAS,8BAA8B,KAAA,EAAsC;AAC3E,EAAA,MAAM,QAAS,KAAA,CAAsC,KAAA;AACrD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,MAAM,OAAO,MAAA;AACxD,EAAA,MAAM,SAAU,KAAA,CAA+B,MAAA;AAC/C,EAAA,OAAO,OAAO,MAAA,KAAW,QAAA,GAAW,MAAA,GAAS,MAAA;AAC/C;AAEA,eAAe,WAAA,CACb,QAAA,EACA,KAAA,EACA,GAAA,EACuB;AACvB,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,IAAQ,CAAA,SAAA,EAAY,QAAQ,CAAC,CAAA,CAAA;AACnD,EAAA,MAAM,WAAA,GAA0B;AAAA,IAC9B,GAAG,GAAA;AAAA,IACH,YAAA,EAAc,aAAa,GAAG;AAAA,GAChC;AACA,EAAA,IAAI;AACF,IAAA,IAAI,SAAS,QAAA,EAAU;AACrB,MAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA;AAC9C,MAAA,MAAM,eAAe,OAAA,CAAQ,KAAA;AAC7B,MAAA,IAAI,2BAAA,CAA4B,YAAY,CAAA,IAAK,qBAAA,CAAsB,YAAY,CAAA,EAAG;AACpF,QAAA,OAAO;AAAA,UACL,IAAA,EAAM,cAAA;AAAA,UACN,IAAA;AAAA,UACA,OAAO,QAAA,CAAS,KAAA;AAAA,UAChB,MAAA,EAAQ,OAAA,CAAQ,OAAA,IAAW,YAAA,CAAa,OAAA;AAAA,UACxC,KAAA,EAAO,YAAA;AAAA,UACP,QAAA,EAAU,sBAAsB,YAAY;AAAA,SAC9C;AAAA,MACF;AACA,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,SAAA;AAAA,QACN,IAAA;AAAA,QACA,GAAA,EAAK,QAAQ,MAAA,KAAW,MAAA;AAAA,QACxB,YAAY,OAAA,CAAQ,UAAA;AAAA,QACpB,MAAA,EAAQ,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,MAAA;AAAA,QACnC,OAAO,QAAA,CAAS,KAAA;AAAA,QAChB,QAAA,EAAU,mBAAA,CAAoB,OAAO,CAAA,EAAG;AAAA,OAC1C;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAA0B,MAAM,WAAA,CAAY,QAAA,CAAS,MAAM,CAAA;AAAA,MAC/D,WAAA;AAAA,MACA,GAAA,CAAI;AAAA,KACN;AACA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,SAAA;AAAA,MACN,IAAA;AAAA,MACA,KAAK,MAAA,CAAO,GAAA;AAAA,MACZ,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,OAAO,QAAA,CAAS,KAAA;AAAA,MAChB,QAAA,EAAU,OAAO,GAAA,GACb,KAAA,CAAA,GACA,kBAAkB,IAAA,EAAM,QAAA,CAAS,KAAA,EAAO,MAAA,CAAO,MAAM;AAAA,KAC3D;AAAA,EACF,SAAS,CAAA,EAAG;AAEV,IAAA,IAAI,GAAA,CAAI,MAAA,CAAO,OAAA,EAAS,MAAM,CAAA;AAC9B,IAAA,MAAM,KAAA,GAAQ,CAAA,YAAa,SAAA,GAAY,CAAA,GAAI,MAAA;AAC3C,IAAA,IAAI,UAAU,2BAAA,CAA4B,KAAK,CAAA,IAAK,qBAAA,CAAsB,KAAK,CAAA,CAAA,EAAI;AACjF,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,cAAA;AAAA,QACN,IAAA;AAAA,QACA,OAAO,QAAA,CAAS,KAAA;AAAA,QAChB,QAAQ,KAAA,CAAM,OAAA;AAAA,QACd,KAAA;AAAA,QACA,QAAA,EAAU,sBAAsB,KAAK,CAAA;AAAA,QACrC,QAAA,EAAU,iBAAA;AAAA,UACR,IAAA;AAAA,UACA,QAAA,CAAS,KAAA;AAAA,UACT,8BAA8B,KAAK;AAAA;AACrC,OACF;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,SAAA;AAAA,MACN,IAAA;AAAA,MACA,GAAA,EAAK,KAAA;AAAA,MACL,OAAO,QAAA,CAAS,KAAA;AAAA,MAChB,MAAA,EAAQ,qBAAqB,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,KACzE;AAAA,EACF;AACF;AAEA,eAAe,oBAAA,CACb,QAAA,EACA,KAAA,EACA,GAAA,EACA,OACAA,cAAAA,EAC6B;AAC7B,EAAA,MAAM,OAAO,QAAA,CAAS,IAAA;AACtB,EAAA,MAAM,QAAA,GAAW,qBAAA;AAAA,IACf,QAAA;AAAA,IACA,aAAa,GAAG;AAAA,GAClB;AACA,EAAA,MAAM,MAAA,GAAS,MAAM,oBAAA,CAAqB;AAAA,IACxC,GAAA,EAAK,IAAI,SAAA,CAAU,GAAA;AAAA,IACnB,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,cAAc,GAAA,CAAI,uBAAA;AAAA,IAClB,cAAc,QAAA,CAAS;AAAA,GACxB,CAAA;AACD,EAAA,MAAM,MAAA,GAAS,MAAM,IAAI,CAAA;AACzB,EAAA,IACE,MAAA,KAAW,UACX,kBAAA,CAAmB,MAAA,EAAQA,gBAAe,QAAQ,CAAA,IAClD,MAAA,CAAO,WAAA,KAAgB,MAAA,EACvB;AACA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,SAAA;AAAA,QACN,IAAA;AAAA,QACA,GAAA,EAAK,IAAA;AAAA,QACL,YAAY,MAAA,CAAO,UAAA;AAAA,QACnB,MAAA,EAAQ,uBAAA;AAAA,QACR,OAAO,QAAA,CAAS;AAAA,OAClB;AAAA,MACA,iBAAA,EAAmB;AAAA,KACrB;AAAA,EACF;AAEA,EAAA,OAAO,MAAM,IAAI,CAAA;AACjB,EAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,QAAA,EAAU,OAAO,GAAG,CAAA;AACrD,EAAA,IACE,MAAA,KAAW,UACX,MAAA,CAAO,IAAA,KAAS,aAChB,CAAC,MAAA,CAAO,OACR,MAAA,CAAO,UAAA,KAAe,UACtB,CAAC,MAAA,CAAO,SAAS,MAAA,CAAO,UAAU,KAClC,MAAA,CAAO,UAAA,GAAaA,cAAAA,IACpB,MAAA,CAAO,UAAA,GAAa,CAAA;AAEpB,IAAA,OAAO,EAAE,MAAA,EAAO;AAElB,EAAA,MAAM,KAAA,GAAQ,MAAM,oBAAA,CAAqB;AAAA,IACvC,GAAA,EAAK,IAAI,SAAA,CAAU,GAAA;AAAA,IACnB,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,cAAc,GAAA,CAAI,uBAAA;AAAA,IAClB,cAAc,QAAA,CAAS;AAAA,GACxB,CAAA;AACD,EAAA,IAAI,KAAA,KAAU,UAAa,KAAA,KAAU,MAAA;AACnC,IAAA,aAAA,CAAc,OAAO,IAAA,EAAM;AAAA,MACzB,QAAA;AAAA,MACA,WAAA,EAAa,KAAA;AAAA,MACb,YAAY,MAAA,CAAO;AAAA,KACpB,CAAA;AACH,EAAA,OAAO,EAAE,MAAA,EAAO;AAClB;AAEA,eAAe,yBACb,SAAA,EACA,OAAA,EACA,GAAA,EACA,KAAA,EACAA,gBACA,WAAA,EACyB;AAGzB,EAAA,MAAM,gBACJ,MAAM,kBAAA,CAAmB,SAAS,WAAA,EAAa,OAAO,KAAK,KAAA,KAAU;AACnE,IAAA,IAAI,GAAA,CAAI,iBAAA,KAAsB,MAAA,EAAW,OAAO,MAAA;AAChD,IAAA,MAAM,OAAA,GAAU,MAAM,oBAAA,CAAqB;AAAA,MACzC,GAAA,EAAK,IAAI,SAAA,CAAU,GAAA;AAAA,MACnB,QAAQ,GAAA,CAAI,MAAA;AAAA,MACZ,cAAc,GAAA,CAAI,uBAAA;AAAA,MAClB,YAAA,EAAc,SAAA,CAAU,KAAK,CAAA,CAAG;AAAA,KACjC,CAAA;AACD,IAAA,OAAO,OAAA,KAAY,GAAA,CAAI,iBAAA,GAAoB,MAAA,GAAY,KAAA;AAAA,EACzD,CAAC,CAAA,EACD,MAAA,CAAO,CAAC,KAAA,KAA2B,UAAU,MAAS,CAAA;AAExD,EAAA,KAAA,MAAW,SAAS,YAAA,EAAc,OAAO,MAAM,SAAA,CAAU,KAAK,EAAG,IAAK,CAAA;AAEtE,EAAA,MAAM,SAAS,MAAM,kBAAA;AAAA,IACnB,YAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAO,KAAA,MAAW;AAAA,MAChB,KAAA;AAAA,MACA,KAAK,MAAM,oBAAA;AAAA,QACT,UAAU,KAAK,CAAA;AAAA,QACf,KAAA;AAAA,QACA,GAAA;AAAA,QACA,KAAA;AAAA,QACAA;AAAA;AACF,KACF;AAAA,GACF;AACA,EAAA,MAAM,UAAU,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,KAAQ,IAAI,MAAM,CAAA;AAC/C,EAAA,KAAA,MAAW,EAAE,OAAO,GAAA,EAAI,IAAK,QAAQ,OAAA,CAAQ,KAAK,IAAI,GAAA,CAAI,MAAA;AAI1D,EAAA,MAAM,kBAAA,CAAmB,OAAA,EAAS,WAAA,EAAa,OAAO,QAAQ,KAAA,KAAU;AACtE,IAAA,IAAI,MAAA,CAAO,IAAA,KAAS,SAAA,IAAa,CAAC,OAAO,GAAA,EAAK;AAC9C,IAAA,MAAM,QAAA,GAAW,UAAU,KAAK,CAAA;AAChC,IAAA,MAAM,OAAO,QAAA,CAAS,IAAA;AACtB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAI,CAAA;AACzB,IAAA,IACE,CAAC,kBAAA;AAAA,MACC,MAAA;AAAA,MACAA,cAAAA;AAAA,MACA,qBAAA;AAAA,QACE,QAAA;AAAA,QACA,aAAa,GAAG;AAAA;AAClB,KACF;AAEA,MAAA;AACF,IAAA,MAAM,OAAA,GAAU,MAAM,oBAAA,CAAqB;AAAA,MACzC,GAAA,EAAK,IAAI,SAAA,CAAU,GAAA;AAAA,MACnB,QAAQ,GAAA,CAAI,MAAA;AAAA,MACZ,cAAc,GAAA,CAAI,uBAAA;AAAA,MAClB,cAAc,QAAA,CAAS;AAAA,KACxB,CAAA;AACD,IAAA,IAAI,OAAA,KAAY,OAAO,WAAA,EAAa;AAClC,MAAA,OAAO,MAAM,IAAI,CAAA;AACjB,MAAA,OAAA,CAAQ,KAAK,CAAA,GAAI;AAAA,QACf,GAAG,MAAA;AAAA,QACH,GAAA,EAAK,KAAA;AAAA,QACL,MAAA,EAAQ;AAAA,OACV;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,eAAe,MAAA,EAA0C;AAChE,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,QAAA,EAAU,MAAA,GAC9B,OAAO,QAAA,GACP;AAAA,IACE;AAAA,MACE,UAAU,MAAA,CAAO,IAAA;AAAA,MACjB,QAAA,EAAU,OAAA;AAAA,MACV,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,UAAU,MAAA,CAAO;AAAA;AACnB,GACF;AACJ,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,MAAa;AAAA,IAChC,GAAG,OAAA;AAAA,IACH,QAAA,EAAU,OAAA,CAAQ,QAAA,IAAY,MAAA,CAAO,IAAA;AAAA,IACrC,QAAA,EAAU,QAAQ,QAAA,IAAY,OAAA;AAAA,IAC9B,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,MAAA,CAAO;AAAA,GACjC,CAAE,CAAA;AACJ;AAEA,SAAS,mBAAA,CACP,SACA,gBAAA,EACS;AACT,EAAA,IAAI,CAAC,gBAAA,EAAkB,MAAA,EAAQ,OAAO,IAAA;AACtC,EAAA,OAAO,CAAC,OAAA,CAAQ,KAAA,IAAS,gBAAA,CAAiB,QAAA,CAAS,QAAQ,KAAK,CAAA;AAClE;AAEA,SAAS,iBAAiB,OAAA,EAA2C;AACnE,EAAA,OAAO,EAAE,GAAG,OAAA,EAAS,QAAA,EAAU,WAAA,EAAY;AAC7C;AAEA,SAAS,sBACP,QAAA,EACiD;AACjD,EAAA,MAAM,SAA0D,EAAC;AACjE,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,QAAA,GAAW,yBAAA,CAA0B,OAAA,CAAQ,QAAQ,CAAA;AAC3D,IAAA,MAAA,CAAO,QAAQ,CAAA,GAAA,CAAK,MAAA,CAAO,QAAQ,KAAK,CAAA,IAAK,CAAA;AAAA,EAC/C;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,YAAY,MAAA,EAAgC;AAC1D,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,IAAS,cAAA;AAG9B,EAAA,IAAI,CAAC,OAAO,SAAA,CAAU,MAAA;AACpB,IAAA,MAAM,IAAI,SAAA,CAAU;AAAA,MAClB,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,gBAAgB,KAAK,CAAA,oCAAA;AAAA,KAC/B,CAAA;AACH,EAAA,IACE,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,KACtB,CAAC,OAAO,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA,IAC5B,OAAO,IAAA,GAAO,CAAA,IACd,MAAA,CAAO,IAAA,GAAO,OAAO,SAAA,CAAU,MAAA,CAAA;AAEjC,IAAA,MAAM,IAAI,SAAA,CAAU;AAAA,MAClB,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EACE,gBAAgB,KAAK,CAAA,qCAAA,EAClB,OAAO,SAAA,CAAU,MAAM,CAAA,MAAA,EAAS,MAAA,CAAO,IAAI,CAAA,CAAA;AAAA,KACjD,CAAA;AACH,EAAA,MAAM,WAAA,GAAc,OAAO,WAAA,IAAe,gCAAA;AAC1C,EAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,WAAW,KAAK,WAAA,IAAe,CAAA;AACnD,IAAA,MAAM,IAAI,SAAA,CAAU;AAAA,MAClB,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,gBAAgB,KAAK,CAAA,yCAAA;AAAA,KAC/B,CAAA;AACH,EAAA,IAAI,OAAO,aAAA,EAAe;AACxB,IAAA,MAAMA,cAAAA,GAAgB,OAAO,aAAA,CAAc,aAAA;AAC3C,IAAA,IACE,CAAC,MAAA,CAAO,QAAA,CAASA,cAAa,CAAA,IAC9BA,cAAAA,GAAgB,KAChBA,cAAAA,GAAgB,CAAA;AAEhB,MAAA,MAAM,IAAI,SAAA,CAAU;AAAA,QAClB,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,gBAAgB,KAAK,CAAA,kDAAA;AAAA,OAC/B,CAAA;AACH,IAAA,IAAI,CAAC,MAAA,CAAO,KAAA,EAAO,IAAA,EAAK;AACtB,MAAA,MAAM,IAAI,SAAA,CAAU;AAAA,QAClB,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACV,CAAA;AACH,IAAA,MAAM,KAAA,GAAQ,OAAO,SAAA,CAAU,GAAA,CAAI,CAAC,QAAA,KAAa,QAAA,CAAS,IAAA,EAAM,IAAA,EAAM,CAAA;AACtE,IAAA,IAAI,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAC5B,MAAA,MAAM,IAAI,SAAA,CAAU;AAAA,QAClB,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,gBAAgB,KAAK,CAAA,gEAAA;AAAA,OAC/B,CAAA;AACH,IAAA,IAAI,IAAI,GAAA,CAAI,KAAK,CAAA,CAAE,SAAS,KAAA,CAAM,MAAA;AAChC,MAAA,MAAM,IAAI,SAAA,CAAU;AAAA,QAClB,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,gBAAgB,KAAK,CAAA,8CAAA;AAAA,OAC/B,CAAA;AACH,IAAA,IAAI,MAAA,CAAO,UAAU,IAAA,CAAK,CAAC,aAAa,CAAC,QAAA,CAAS,YAAA,EAAc,IAAA,EAAM,CAAA;AACpE,MAAA,MAAM,IAAI,SAAA,CAAU;AAAA,QAClB,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,gBAAgB,KAAK,CAAA,wEAAA;AAAA,OAC/B,CAAA;AAAA,EACL;AACA,EAAA,MAAM,GAAA,GAAW,OAAO,GAAA,KAAQ;AAC9B,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,IAAA,EAAM,WAAA;AAAA,MACN,EAAA,EAAI,KAAK,GAAA,EAAI;AAAA,MACb,IAAA,EAAM,CAAC,GAAG,GAAA,CAAI,IAAI,CAAA;AAAA,MAClB,KAAA;AAAA,MACA,WAAW,GAAA,CAAI;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,WAAW,MAAA,CAAO,aAAA,GACpB,kBAAA,CAAmB,GAAA,EAAK,KAAK,CAAA,GAC7B,MAAA;AACJ,IAAA,MAAM,QAAQ,QAAA,GAAW,eAAA,CAAgB,IAAI,KAAA,CAAM,QAAQ,CAAC,CAAA,GAAI,MAAA;AAChE,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,IAAI,CAAC,QAAA,KAAa,QAAA,CAAS,IAAI,CAAC,CAAA;AACvE,MAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAClC,QAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA,EAAG,OAAO,MAAM,IAAI,CAAA;AAAA,IAC3C;AACA,IAAA,IAAI,QAAA,IAAY,KAAA,EAAO,GAAA,CAAI,KAAA,CAAM,QAAQ,CAAA,GAAI,KAAA;AAC7C,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI,KAAA,IAAS,OAAO,aAAA,EAAe;AACjC,MAAA,MAAM,UAAU,MAAM,kBAAA;AAAA,QACpB,MAAA,CAAO,SAAA;AAAA,QACP,WAAA;AAAA,QACA,CAAC,UAAU,CAAA,KACT,oBAAA;AAAA,UACE,QAAA;AAAA,UACA,CAAA;AAAA,UACA,GAAA;AAAA,UACA,KAAA;AAAA,UACA,OAAO,aAAA,CAAe;AAAA;AACxB,OACJ;AACA,MAAA,OAAA,GAAU,MAAM,wBAAA;AAAA,QACd,MAAA,CAAO,SAAA;AAAA,QACP,OAAA;AAAA,QACA,GAAA;AAAA,QACA,KAAA;AAAA,QACA,OAAO,aAAA,CAAc,aAAA;AAAA,QACrB;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAA,GAAU,MAAM,kBAAA;AAAA,QACd,MAAA,CAAO,SAAA;AAAA,QACP,WAAA;AAAA,QACA,CAAC,QAAA,EAAU,CAAA,KAAM,WAAA,CAAY,QAAA,EAAU,GAAG,GAAG;AAAA,OAC/C;AAAA,IACF;AACA,IAAA,IAAI,YAAY,KAAA,IAAS,CAAC,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA;AAC3C,MAAA,OAAO,GAAA,CAAI,MAAM,QAAQ,CAAA;AAC3B,IAAA,MAAM,WAAW,OAAA,CAAQ,MAAA;AAAA,MACvB,CAAC,CAAA,KAA0B,CAAA,CAAE,IAAA,KAAS;AAAA,KACxC;AACA,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AAAA,MACrB,CAAC,CAAA,KAA8B,CAAA,CAAE,IAAA,KAAS;AAAA,KAC5C;AACA,IAAA,MAAM,iBAAiB,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU,MAAM,QAAQ,CAAA;AAC9D,IAAA,MAAM,cAAc,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,GAAG,CAAA,CAAE,MAAA;AAClD,IAAA,MAAM,QAAA,GACJ,OAAO,IAAA,KAAS,MAAA,IAAa,OAAO,IAAA,KAAS,KAAA,GACzC,OAAA,CAAQ,MAAA,GACR,MAAA,CAAO,IAAA;AACb,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,GAAG,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,GAAG,CAAA,CAAE,OAAA,CAAQ,cAAc,CAAA;AAAA,MACxD,GAAG,OAAO,OAAA,CAAQ,CAAC,MAAM,CAAA,CAAE,QAAA,IAAY,EAAE;AAAA,KAC3C;AACA,IAAA,MAAM,WAAW,WAAA,CAAY,MAAA;AAAA,MAAO,CAAC,CAAA,KACnC,mBAAA,CAAoB,CAAA,EAAG,OAAO,gBAAgB;AAAA,KAChD;AACA,IAAA,MAAM,iBAAA,GAAoB,WAAA,CACvB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,mBAAA,CAAoB,CAAA,EAAG,MAAA,CAAO,gBAAgB,CAAC,CAAA,CAC9D,IAAI,gBAAgB,CAAA;AACvB,IAAA,MAAMC,UAAS,cAAA,CAAe,MAAA,KAAW,KAAK,QAAA,CAAS,MAAA,GAAS,KAAK,WAAA,IAAe,QAAA;AACpF,IAAA,MAAM,WAAA,GAAc,CAAA,cAAA,EAAiB,WAAW,CAAA,CAAA,EAAI,QAAQ,MAAM,CAAA,oBAAA,CAAA;AAClE,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,EAAG,WAAW,CAAA,CAAA,CAAG,CAAA;AACvC,IAAA,IAAI,QAAA,CAAS,MAAA,EAAQ,YAAA,CAAa,IAAA,CAAK,QAAA,CAAS,IAAI,WAAW,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAC3E,IAAA,IAAI,iBAAA,CAAkB,MAAA;AACpB,MAAA,YAAA,CAAa,IAAA;AAAA,QACX,CAAA;AAAA,EAAe,kBAAkB,GAAA,CAAI,WAAW,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,OAC9D;AACF,IAAA,IAAI,MAAA,CAAO,MAAA;AACT,MAAA,YAAA,CAAa,IAAA;AAAA,QACX,CAAA;AAAA,EAAmB,OAChB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAA,EAAK,EAAE,IAAI,CAAA,EAAA,EAAK,OAAA,CAAQ,CAAA,CAAE,MAAM,CAAC,CAAA,CAAE,CAAA,CAC9C,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,OACf;AACF,IAAA,MAAM,OAAA,GAAU,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AAKtC,IAAA,MAAM,MAAA,GAAS,QAAA,CACZ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAA,CACvB,MAAA,CAAO,CAAC,CAAA,KAAmB,CAAA,IAAK,IAAI,CAAA;AACvC,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,MAAA,GACtB,MAAA,CAAO,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,KAAM,GAAA,GAAM,CAAA,EAAG,CAAC,CAAA,GAAI,OAAO,MAAA,GAC/C,MAAA;AACJ,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,QAAA;AAAA,MACA,iBAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA,EAAQ,WAAA;AAAA,MACR,QAAA;AAAA,MACA,cAAA,EAAgB,sBAAsB,QAAQ;AAAA,KAChD;AACA,IAAA,MAAM,0BACJ,cAAA,CAAe,MAAA,GAAS,KACtB,MAAA,CAAO,MAAA,GAAS,MACf,MAAA,CAAO,IAAA,KAAS,MAAA,IAAa,MAAA,CAAO,SAAS,KAAA,GAC1C,IAAA,GACA,cAAc,QAAA,IAAY,WAAA,GAAc,OAAO,MAAA,IAAU,QAAA,CAAA;AAEjE,IAAA,IAAI,OAAA;AACJ,IAAA,IAAIA,OAAAA,EAAQ;AACV,MAAA,OAAA,GAAU,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,YAAY,IAAA,EAAK;AAAA,IACxD,WAAW,uBAAA,IAA4B,CAAC,QAAA,CAAS,MAAA,IAAU,OAAO,MAAA,EAAS;AACzE,MAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,MAAA,OAAA,GAAU;AAAA,QACR,MAAA,EAAQ,QAAA;AAAA,QACR,OAAA;AAAA,QACA,UAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA,EACE,KAAA,CAAM,KAAA,IACN,IAAI,SAAA,CAAU;AAAA,UACZ,IAAA,EAAM,QAAA;AAAA,UACN,KAAA,EAAO,QAAA;AAAA,UACP,SAAS,KAAA,CAAM;AAAA,SAChB;AAAA,OACL;AAAA,IACF,CAAA,MAAA,IAAW,CAAC,QAAA,CAAS,MAAA,IAAU,kBAAkB,MAAA,EAAQ;AACvD,MAAA,OAAA,GAAU,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,YAAY,IAAA,EAAK;AAAA,IACxD,CAAA,MAAO;AACL,MAAA,OAAA,GAAU,eAAA;AAAA,QACN;AAAA,UACE,QAAQ,MAAA,CAAO,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAKf,MAAA,EAAQ,GAAG,WAAW,CAAA,CAAA,CAAA;AAAA,UACtB,QAAA;AAAA,UACA,OAAO,MAAA,CAAO;AAAA,SAChB;AAAA,QACA,EAAE,OAAA,EAAS,UAAA,EAAY,IAAA;AAAK,OAC9B;AAAA,IACJ;AACA,IAAA,GAAA,CAAI,KAAK,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,KAAK,GAAA,EAAI,EAAG,IAAA,EAAM,CAAC,GAAG,GAAA,CAAI,IAAI,CAAA,EAAG,KAAA,EAAO,SAAS,CAAA;AACjF,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO,QAAQ,GAAA,EAAK;AAAA,IAClB,IAAA,EAAM,aAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,WAAA;AAAA,IACA,kBAAkB,MAAA,CAAO;AAAA,GAC1B,CAAA;AACH;AASA,eAAe,SAAA,CACb,GAAA,EACA,IAAA,EACA,MAAA,EACiB;AACjB,EAAA,MAAM,GAAA,GAAM,MAAM,iBAAA,CAAkB;AAAA,IAClC,UAAA,EAAY,KAAA;AAAA,IACZ,IAAA;AAAA,IACA,GAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,OAAO,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA,CAAE,IAAA,EAAK;AACtC;AAEA,eAAe,YAAA,CACb,KACA,QAAA,EACmB;AACnB,EAAA,MAAM,UAAU,MAAM,SAAA;AAAA,IACpB,IAAI,SAAA,CAAU,GAAA;AAAA,IACd,CAAC,UAAA,EAAY,IAAA,EAAM,GAAG,QAAQ,CAAA;AAAA,IAC9B,GAAA,CAAI;AAAA,GACN,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AAChB,EAAA,MAAM,KAAA,GAAQ,UAAU,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,GAAI,EAAC;AAC/D,EAAA,IAAI,KAAA,CAAM,QAAQ,OAAO,KAAA;AACzB,EAAA,OAAO,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,UAAA,CAAWC,IAAAA,CAAK,GAAA,CAAI,SAAA,CAAU,GAAA,EAAK,CAAC,CAAC,CAAC,CAAA;AACtE;AAEO,SAAS,cAAc,MAAA,EAA6B;AACzD,EAAA,OAAO,OAAO,KAAiB,IAAA,KAA+C;AAC5E,IAAA,MAAM,GAAA,GAAM,OAAO,QAAA,IAAY,GAAA;AAE/B,IAAA,MAAM,aAAa,YAA+B;AAChD,MAAA,IAAI,CAAC,MAAA,CAAO,KAAA,EAAO,OAAO,EAAC;AAC3B,MAAA,IAAI,MAAA,CAAO,UAAU,IAAA,EAAM;AACzB,QAAA,MAAM,QAAkB,EAAC;AACzB,QAAA,IAAI,MAAM,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,qBAAA,EAAwB,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAClE,QAAA,IAAI,MAAM,OAAA,EAAS,KAAA,CAAM,KAAK,CAAA,sBAAA,EAAyB,IAAA,CAAK,OAAO,CAAA,CAAE,CAAA;AACrE,QAAA,IAAI,IAAA,EAAM,SAAS,MAAA,EAAW;AAI5B,UAAA,IAAI,QAAA;AACJ,UAAA,IAAI;AACF,YAAA,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,UAC9C,CAAA,CAAA,MAAQ;AACN,YAAA,QAAA,GAAW,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,UAC7B;AACA,UAAA,KAAA,CAAM,IAAA,CAAK,CAAA,mBAAA,EAAsB,QAAQ,CAAA,CAAE,CAAA;AAAA,QAC7C;AACA,QAAA,OAAO,KAAA,CAAM,SACT,CAAC,CAAA;;AAAA,EAAkC,MAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,IACrD,EAAC;AAAA,MACP;AACA,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,KAAA,CAAM,GAAA,IAAO,IAAI,SAAA,CAAU,GAAA;AAK9C,MAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,CAAkB;AAAA,QACrC,UAAA,EAAY,OAAO,KAAA,CAAM,OAAA;AAAA,QACzB,IAAA,EAAM,MAAA,CAAO,KAAA,CAAM,IAAA,IAAQ,EAAC;AAAA,QAC5B,GAAA;AAAA,QACA,QAAQ,GAAA,CAAI;AAAA,OACb,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,KAAe;AACvB,QAAA,IAAI,GAAA,CAAI,MAAA,CAAO,OAAA,EAAS,MAAM,CAAA;AAC9B,QAAA,OAAO,MAAA;AAAA,MACT,CAAC,CAAA;AACD,MAAA,MAAM,IAAA,GAAO,QAAQ,QAAA,IAAY,uBAAA;AACjC,MAAA,MAAM,SAAS,MAAA,KAAW,MAAA,GAAY,EAAA,GAAK,WAAA,CAAY,OAAO,MAAM,CAAA;AACpE,MAAA,MAAM,SAAS,MAAA,KAAW,MAAA,GAAY,EAAA,GAAK,WAAA,CAAY,OAAO,MAAM,CAAA;AACpE,MAAA,OAAO;AAAA,QACL,CAAA;;AAAA,EAAsB,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,CAAA,EAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAA,IAAQ,EAAC,EAAG,IAAA,CAAK,GAAG,CAAC;;AAAA,MAAA,EACtE,IAAI;;AAAA;AAAA,EAAgB,QAAA,CAAS,MAAA,EAAQ,GAAG,CAAC;;AAAA;AAAA,EAAgB,QAAA,CAAS,MAAA,EAAQ,GAAG,CAAC,CAAA;AAAA,OAC3F;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,YAAY,YAA+B;AAC/C,MAAA,IAAI,CAAC,MAAA,CAAO,IAAA,EAAM,OAAO,EAAC;AAC1B,MAAA,MAAMC,QAAO,MAAM,SAAA;AAAA,QACjB,IAAI,SAAA,CAAU,GAAA;AAAA,QACd,CAAC,MAAA,EAAQ,MAAA,EAAQ,IAAI,CAAA;AAAA,QACrB,GAAA,CAAI;AAAA,OACN,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AAChB,MAAA,OAAOA,QAAO,CAAC,CAAA;;AAAA,EAAkB,SAASA,KAAAA,EAAM,GAAG,CAAC,CAAA,CAAE,IAAI,EAAC;AAAA,IAC7D,CAAA;AAEA,IAAA,MAAM,aAAa,YAA+B;AAChD,MAAA,IAAI,CAAC,MAAA,CAAO,KAAA,EAAO,MAAA,SAAe,EAAC;AACnC,MAAA,MAAMC,MAAAA,GAAQ,MAAM,YAAA,CAAa,GAAA,EAAK,OAAO,KAAK,CAAA;AAClD,MAAA,MAAM,MAAgB,EAAC;AACvB,MAAA,KAAA,MAAW,QAAQA,MAAAA,EAAO;AACxB,QAAA,MAAM,IAAA,GAAOF,IAAAA,CAAK,GAAA,CAAI,SAAA,CAAU,KAAK,IAAI,CAAA;AACzC,QAAA,IAAI,CAAC,UAAA,CAAW,IAAI,CAAA,EAAG;AACvB,QAAA,GAAA,CAAI,IAAA,CAAK,YAAY,IAAI;;AAAA,EAAO,SAASG,YAAAA,CAAa,IAAA,EAAM,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,MAC7E;AACA,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAIA,IAAA,MAAM,CAAC,KAAA,EAAO,IAAA,EAAM,KAAK,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,MAC7C,UAAA,EAAW;AAAA,MACX,SAAA,EAAU;AAAA,MACV,UAAA;AAAW,KACZ,CAAA;AACD,IAAA,MAAM,WAAW,CAAC,GAAG,OAAO,GAAG,IAAA,EAAM,GAAG,KAAK,CAAA;AAC7C,IAAA,OAAO,QAAA;AAAA,MACL,QAAA,CAAS,IAAA,CAAK,aAAa,CAAA,IAAK,qBAAA;AAAA,MAChC;AAAA,KACF;AAAA,EACF,CAAA;AACF;;;AC14BO,IAAM,qBAAA,GAAwB;AAerC,SAAS,iBAAA,CACP,GAAA,EACA,KAAA,EACA,IAAA,EACA,QAAA,EACM;AACN,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,KAAA,CAAM,qBAAqB,CAAA;AAC/C,EAAA,MAAM,KAAA,GAA6B;AAAA,IACjC,KAAA;AAAA,IACA,IAAA,EAAM,CAAC,GAAG,IAAI,CAAA;AAAA,IACd,GAAI,QAAA,KAAa,MAAA,GAAY,EAAC,GAAI,EAAE,IAAA,EAAM,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,QAAA,CAAS,KAAA;AAAM,GACjF;AACA,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,GAAA,CAAI,KAAA,CAAM,qBAAqB,CAAA,GAAI,CAAC,KAAK,CAAA;AAAA,EAC3C,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,EACpB;AACF;AAyHA,IAAM,QAAA,GAAW,CAAC,IAAA,MAA2B;AAAA,EAC3C,MAAA,EAAQ,MAAA;AAAA,EACR,SAAS,IAAA,CAAK,IAAA,EAAK,CAAE,KAAA,CAAM,GAAG,GAAG,CAAA;AAAA,EACjC,IAAA,EAAM;AACR,CAAA,CAAA;AAEA,SAAS,mBAAmB,QAAA,EAA0B;AACpD,EAAA,OACE,CAAA;AAAA,yDAAA,EAC4D,QAAQ,CAAA,gBAAA,EAC1D,QAAA,KAAa,CAAA,GAAI,KAAK,GAAG,CAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA,wEAAA,CAAA;AAQvC;AAEA,SAAS,sBAAA,CACP,GAAA,EACA,UAAA,EACA,MAAA,EACQ;AACR,EAAA,MAAM,KAAA,GAAQ,CAAC,UAAU,CAAA;AACzB,EAAA,IAAI,MAAA,CAAO,eAAA,IAAmB,GAAA,CAAI,UAAA,EAAY;AAC5C,IAAA,KAAA,CAAM,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,UAAU,CAAC,CAAA;AAAA,EAC1C;AACA,EAAA,IAAI,MAAA,CAAO,YAAA,IAAgB,GAAA,CAAI,KAAA,EAAO;AACpC,IAAA,KAAA,CAAM,KAAK,kBAAA,CAAmB,GAAA,CAAI,KAAA,EAAO,GAAA,CAAI,YAAY,CAAC,CAAA;AAAA,EAC5D;AACA,EAAA,IAAI,MAAA,CAAO,SAAS,KAAA,CAAM,IAAA,CAAK,mBAAmB,MAAA,CAAO,OAAA,CAAQ,QAAA,IAAY,CAAC,CAAC,CAAA;AAC/E,EAAA,OAAO,KAAA,CAAM,KAAK,aAAa,CAAA;AACjC;AAOA,SAAS,QAAA,CAAS,MAAc,GAAA,EAAiC;AAC/D,EAAA,MAAM,KAAA,GAAQ,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,GAAG,CAAA,uBAAA,EAA0B,GAAG,CAAA,CAAA,CAAA,EAAK,GAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAChF,EAAA,OAAO,KAAA,GAAQ,CAAC,CAAA,EAAG,IAAA,EAAK,IAAK,MAAA;AAC/B;AAEA,SAAS,oBAAoB,IAAA,EAA0C;AACrE,EAAA,MAAM,KAAA,GAAQ,+DAAA,CAAgE,IAAA,CAAK,IAAI,IAAI,CAAC,CAAA;AAC5F,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,MAAM,WAAW,QAAA,CAAS,KAAA,EAAO,UAAU,CAAA,IAAK,MAAM,IAAA,EAAK;AAC3D,EAAA,IAAI,CAAC,UAAU,OAAO,MAAA;AACtB,EAAA,OAAO,EAAE,QAAA,EAAU,OAAA,EAAS,QAAA,CAAS,KAAA,EAAO,SAAS,CAAA,EAAE;AACzD;AAEA,SAAS,eAAA,CAAgB,IAAA,EAAc,OAAA,EAAyB,KAAA,EAAuB;AACrF,EAAA,OACE,oBAAoB,IAAI;;AAAA;AAAA,EACV,QAAQ,QAAQ;;AAAA,EAC3B,QAAQ,OAAA,GAAU,CAAA;AAAA,EAAsB,QAAQ,OAAO;;AAAA,CAAA,GAAS,EAAE,CAAA;AAAA,EAClD,KAAK;;AAAA,+DAAA,CAAA;AAG5B;AAEA,eAAe,kBACb,GAAA,EACA,KAAA,EACA,QACA,IAAA,EACA,OAAA,EACA,WACA,YAAA,EAC4C;AAC5C,EAAA,YAAA,CAAa,GAAG,CAAA;AAChB,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,aAAA,CAAc,MAAA,CAAO,MAAM,CAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,GAAA;AAAA,IAC1B;AAAA,MACE,MAAA,EACE,CAAA;AAAA,EAAc,OAAA,CAAQ,QAAQ,CAAA,CAAA,IAC7B,OAAA,CAAQ,OAAA,GAAU;;AAAA;AAAA,EAAiB,OAAA,CAAQ,OAAO,CAAA,CAAA,GAAK,EAAA,CAAA;AAAA,MAC1D,QAAQ,MAAA,CAAO,YAAA;AAAA,MACf,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,SAAA,EAAW,MAAA,CAAO,SAAA,IAAa,SAAA,CAAU,SAAA;AAAA,MACzC,SAAA,EAAW,MAAA,CAAO,SAAA,IAAa,SAAA,CAAU,SAAA;AAAA,MACzC,cAAA,EAAgB,MAAA,CAAO,cAAA,IAAkB,SAAA,CAAU,cAAA;AAAA,MACnD,GAAA,EAAK,IAAI,SAAA,CAAU,GAAA;AAAA,MACnB,IAAA,EAAM,IAAA;AAAA,MACN,OAAA,EAAS,kBAAA,CAAmB,GAAA,EAAK,CAAA,EAAG,KAAK,CAAA,QAAA,CAAU;AAAA,KACrD;AAAA,IACA,CAAC,KAAA,KAAU;AACT,MAAA,MAAM,EAAA,GAAK,KAAK,GAAA,EAAI;AACpB,MAAA,IAAI,KAAA,CAAM,SAAS,OAAA,EAAS;AAC1B,QAAA,GAAA,CAAI,IAAA,CAAK;AAAA,UACP,IAAA,EAAM,cAAA;AAAA,UACN,EAAA;AAAA,UACA,IAAA,EAAM,CAAC,GAAG,GAAA,CAAI,IAAI,CAAA;AAAA,UAClB,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,OAAO,KAAA,CAAM;AAAA,SACd,CAAA;AACD,QAAA,iBAAA,CAAkB,GAAA,EAAK,KAAA,CAAM,KAAA,EAAO,GAAA,CAAI,IAAI,CAAA;AAAA,MAC9C,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,MAAA,EAAQ;AAChC,QAAA,GAAA,CAAI,IAAA,CAAK;AAAA,UACP,IAAA,EAAM,aAAA;AAAA,UACN,EAAA;AAAA,UACA,IAAA,EAAM,CAAC,GAAG,GAAA,CAAI,IAAI,CAAA;AAAA,UAClB,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,OAAO,KAAA,CAAM;AAAA,SACd,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAAA,IACA,GAAA,CAAI;AAAA,GACN;AACA,EAAA,yBAAA,CAA0B,GAAA,EAAK,QAAQ,YAAY,CAAA;AACnD,EAAA,MAAM,KAAA,GAAQ,YAAA;AAAA,IACZ,uBAAuB,MAAM,CAAA;AAAA,IAC7B;AAAA,IACA,IAAA,EAAK;AACP,EAAA,GAAA,CAAI,IAAA,CAAK;AAAA,IACP,IAAA,EAAM,iBAAA;AAAA,IACN,EAAA,EAAI,KAAK,GAAA,EAAI;AAAA,IACb,IAAA,EAAM,CAAC,GAAG,GAAA,CAAI,IAAI,CAAA;AAAA,IAClB,KAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,KAAA;AAAA,IACA,KAAA,EAAO,MAAA,CAAO,SAAA,CAAU,KAAA,IAAS;AAAA,GAClC,CAAA;AACD,EAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,MAAA,CAAO,SAAA,CAAU,SAAS,MAAA,EAAU;AAC7D;AAGO,SAAS,SAAS,MAAA,EAA6B;AACpD,EAAA,MAAM,GAAA,GAAW,OAAO,GAAA,KAAQ;AAC9B,IAAA,MAAM,QAAA,GAAW,UAAA,IAAc,MAAA,GAAS,MAAA,CAAO,QAAA,GAAW,MAAA;AAC1D,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,GAAA,CAAI,IAAI,CAAA;AACzB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,OAAO,IAAA,IAAQ,OAAA;AACpD,IAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,SAAA,IAAa,GAAA,CAAI,SAAA;AACjD,IAAA,MAAM,qBAAA,GAAwB,MAAA,CAAO,cAAA,IAAkB,GAAA,CAAI,cAAA;AAC3D,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,IAAA,EAAM,WAAA;AAAA,MACN,EAAA,EAAI,KAAK,GAAA,EAAI;AAAA,MACb,IAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA,EAAW;AAAA,KACZ,CAAA;AAED,IAAA,MAAM,UAAA,GACJ,OAAO,MAAA,CAAO,MAAA,KAAW,UAAA,GACrB,MAAM,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA,GACvB,MAAA,CAAO,MAAA;AACb,IAAA,MAAM,gBAAA,GAAmB,sBAAA,CAAuB,GAAA,EAAK,UAAA,EAAY,MAAM,CAAA;AAEvE,IAAA,MAAM,SACJ,MAAA,CAAO,MAAA,KAAW,SACd,OAAO,MAAA,CAAO,WAAW,UAAA,GACvB,MAAA,CAAO,OAAO,GAAG,CAAA,GACjB,OAAO,MAAA,GACT,MAAA,CAAO,QACL,aAAA,CAAc,MAAA,CAAO,KAAK,CAAA,GAC1B,MAAA;AAIR,IAAA,MAAM,GAAA,GAAM,UAAA,CAAW,GAAA,EAAK,MAAA,CAAO,GAAG,CAAA;AACtC,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,QAAA,GACrB,KAAA,CAAM,QAAQ,MAAA,CAAO,QAAQ,CAAA,GAC3B,MAAA,CAAO,QAAA,GACP,CAAC,MAAA,CAAO,QAAQ,IAClB,EAAC;AACL,IAAA,MAAM,MAAA,GAAuB;AAAA,MAC3B;AAAA,QACE,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,KAAA,EAAO,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,KAAA,EAAO,KAAA;AAAA,QACrC,SAAA,EAAW,gBAAA;AAAA,QACX,cAAA,EAAgB;AAAA,OAClB;AAAA,MACA,GAAG;AAAA,KACL;AACA,IAAA,MAAM,aAAa,IAAI,GAAA;AAAA,MACrB,MAAA,CAAO,UAAA,IAAc,CAAC,YAAA,EAAc,OAAO;AAAA,KAC7C;AACA,IAAA,IAAI,MAAA;AACJ,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,MAAA,EAAQ,KAAK,CAAA,EAAG;AACzC,MAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,MAAA,MAAM,aAAa,KAAA,CAAM,KAAA;AACzB,MAAA,MAAM,SAAA,GAAY,MAAM,SAAA,IAAa,gBAAA;AACrC,MAAA,MAAM,cAAA,GAAiB,MAAM,cAAA,IAAkB,qBAAA;AAC/C,MAAA,IAAI;AACF,QAAA,MAAM,UAAA,GAAa,gBAAA;AACnB,QAAA,MAAM,SAAS,GAAA,CAAI,aAAA,CAAc,KAAA,CAAM,MAAA,IAAU,OAAO,MAAM,CAAA;AAC9D,QAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,OAAA,EAAS,QAAA,IAAY,CAAA;AACpD,QAAA,MAAM,iBAA2B,EAAC;AAClC,QAAA,WAAS;AACP,UAAA,MAAM,MAAA,GAAS,cAAA,CAAe,MAAA,GAC1B,CAAA,EAAG,UAAU;;AAAA;;AAAA,EAAc,cAAA,CAAe,IAAA,CAAK,aAAa,CAAC,CAAA,CAAA,GAC7D,UAAA;AACJ,UAAA,YAAA,CAAa,GAAG,CAAA;AAChB,UAAA,MAAA,GAAS,MAAM,MAAA,CAAO,GAAA;AAAA,YACpB;AAAA,cACE,MAAA;AAAA,cACA,MAAA;AAAA,cACA,KAAA,EAAO,UAAA;AAAA,cACP,WAAW,MAAA,CAAO,SAAA;AAAA,cAClB,KAAA,EAAO,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,KAAA,EAAO,KAAA;AAAA,cACrC,cAAc,MAAA,CAAO,YAAA;AAAA,cACrB,eAAe,MAAA,CAAO,aAAA;AAAA,cACtB,IAAA,EAAM,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,KAAA,EAAO,IAAA;AAAA,cACnC,GAAA,EAAK,MAAA,CAAO,GAAA,IAAO,GAAA,CAAI,SAAA,CAAU,GAAA;AAAA,cACjC,SAAA;AAAA,cACA,cAAA;AAAA,cACA,GAAA;AAAA,cACA,OAAA,EAAS,kBAAA,CAAmB,GAAA,EAAK,KAAK;AAAA,aACxC;AAAA,YACA,CAAC,CAAA,KAAM;AACL,cAAA,MAAM,EAAA,GAAK,KAAK,GAAA,EAAI;AACpB,cAAA,QAAQ,EAAE,IAAA;AAAM,gBACd,KAAK,MAAA;AACH,kBAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,aAAA,EAAe,IAAI,IAAA,EAAM,KAAA,EAAO,CAAA,CAAE,KAAA,EAAO,CAAA;AAC1D,kBAAA;AAAA,gBACF,KAAK,UAAA;AACH,kBAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAI,IAAA,EAAM,KAAA,EAAO,CAAA,CAAE,KAAA,EAAO,CAAA;AAC9D,kBAAA;AAAA,gBACF,KAAK,MAAA;AACH,kBAAA,GAAA,CAAI,IAAA,CAAK;AAAA,oBACP,IAAA,EAAM,aAAA;AAAA,oBACN,EAAA;AAAA,oBACA,IAAA;AAAA,oBACA,MAAM,CAAA,CAAE,IAAA;AAAA,oBACR,OAAO,CAAA,CAAE;AAAA,mBACV,CAAA;AACD,kBAAA;AAAA,gBACF,KAAK,OAAA;AACH,kBAAA,GAAA,CAAI,IAAA,CAAK;AAAA,oBACP,IAAA,EAAM,cAAA;AAAA,oBACN,EAAA;AAAA,oBACA,IAAA;AAAA,oBACA,OAAO,CAAA,CAAE,KAAA;AAAA,oBACT,OAAO,CAAA,CAAE,KAAA;AAAA,oBACT,GAAG;AAAA,mBACJ,CAAA;AACD,kBAAA,iBAAA,CAAkB,GAAA,EAAK,CAAA,CAAE,KAAA,EAAO,IAAA,EAAM,QAAQ,CAAA;AAC9C,kBAAA;AAAA;AACJ,YACF,CAAA;AAAA,YACA,GAAA,CAAI;AAAA,WACN;AACA,UAAA,yBAAA,CAA0B,GAAA,EAAK,QAAQ,GAAG,CAAA;AAC1C,UAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,UAAA,MAAM,YAAA,GAAe,YAAA;AAAA,YACnB,uBAAuB,MAAM,CAAA;AAAA,YAC7B;AAAA,WACF;AACA,UAAA,MAAM,OAAA,GAAU,OAAA,GAAU,mBAAA,CAAoB,YAAY,CAAA,GAAI,KAAA,CAAA;AAC9D,UAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,EAAS;AAC1B,UAAA,IAAI,cAAA,CAAe,UAAU,eAAA,EAAiB;AAC5C,YAAA,MAAM,IAAI,SAAA,CAAU;AAAA,cAClB,IAAA,EAAM,QAAA;AAAA,cACN,KAAA,EAAO,MAAA;AAAA,cACP,OAAA,EAAS,CAAA,EAAG,KAAK,CAAA,+BAAA,EAAkC,eAAe,CAAA,CAAA;AAAA,aACnE,CAAA;AAAA,UACH;AACA,UAAA,MAAM,IAAA,GAAO,eAAe,MAAA,GAAS,CAAA;AACrC,UAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,iBAAA;AAAA,YACtB,GAAA;AAAA,YACA,KAAA;AAAA,YACA,OAAA;AAAA,YACA,IAAA;AAAA,YACA,OAAA;AAAA,YACA,EAAE,SAAA,EAAW,MAAA,CAAO,SAAA,EAAW,WAAW,cAAA,EAAe;AAAA,YACzD;AAAA,WACF;AACA,UAAA,cAAA,CAAe,IAAA,CAAK,eAAA,CAAgB,IAAA,EAAM,OAAA,EAAS,KAAK,CAAC,CAAA;AAAA,QAC3D;AACA,QAAA;AAAA,MACF,SAAS,CAAA,EAAG;AACV,QAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,IAAA,CAAK,CAAA,EAAG;AAAA,UAC9B,IAAA,EAAM,GAAA,CAAI,MAAA,CAAO,OAAA,GAAU,SAAA,GAAY,QAAA;AAAA,UACvC,KAAA,EAAO,MAAA;AAAA,UACP,MAAM,GAAA,CAAI,IAAA;AAAA,UACV,WAAW,GAAA,CAAI;AAAA,SAChB,CAAA;AACD,QAAA,IACE,CAAA,GAAI,MAAA,CAAO,MAAA,GAAS,CAAA,IACpB,CAAC,GAAA,CAAI,MAAA,CAAO,OAAA,IACZ,UAAA,CAAW,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,EACzB;AACA,UAAA,GAAA,CAAI,GAAA;AAAA,YACF,GAAG,KAAK,CAAA,mBAAA,EAAsB,MAAM,IAAI,CAAA,wBAAA,EAA2B,IAAI,CAAC,CAAA,CAAA;AAAA,YACxE;AAAA,WACF;AACA,UAAA;AAAA,QACF;AACA,QAAA,GAAA,CAAI,IAAA,CAAK;AAAA,UACP,IAAA,EAAM,OAAA;AAAA,UACN,EAAA,EAAI,KAAK,GAAA,EAAI;AAAA,UACb,IAAA;AAAA,UACA,SAAS,KAAA,CAAM,OAAA;AAAA,UACf,MAAM,KAAA,CAAM;AAAA,SACb,CAAA;AACD,QAAA,MAAMC,QAAAA,GAAmB;AAAA,UACvB,MAAA,EAAQ,GAAA,CAAI,MAAA,CAAO,OAAA,GAAU,SAAA,GAAY,MAAA;AAAA,UACzC,SAAS,KAAA,CAAM,OAAA;AAAA,UACf;AAAA,SACF;AACA,QAAA,GAAA,CAAI,IAAA,CAAK;AAAA,UACP,IAAA,EAAM,SAAA;AAAA,UACN,EAAA,EAAI,KAAK,GAAA,EAAI;AAAA,UACb,IAAA;AAAA,UACA,KAAA;AAAA,UACA,OAAA,EAAAA;AAAA,SACD,CAAA;AACD,QAAA,OAAOA,QAAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,IAAI,CAAC,MAAA;AACH,MAAA,MAAM,IAAI,SAAA,CAAU;AAAA,QAClB,IAAA,EAAM,QAAA;AAAA,QACN,KAAA,EAAO,MAAA;AAAA,QACP,OAAA,EAAS,GAAG,KAAK,CAAA,0BAAA;AAAA,OAClB,CAAA;AAIH,IAAA,MAAM,IAAA,GAAO,YAAA,CAAa,sBAAA,CAAuB,MAAM,GAAG,GAAG,CAAA;AAE7D,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,GACnB,MAAM,MAAA,CAAO,QAAQ,IAAA,EAAM,GAAG,CAAA,GAC9B,QAAA,CAAS,IAAI,CAAA;AACjB,IAAA,MAAM,YAAA,GACJ,MAAA,CAAO,gBAAA,EAAkB,IAAA,KAAS,SAAA,IAAa,OAAA,CAAQ,IAAA,KAAS,IAAA,GAC9D,EAAE,GAAG,OAAA,EAAS,IAAA,EAAM,MAAK,GACzB,OAAA;AACJ,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,EAAA,EAAI,KAAK,GAAA,EAAI;AAAA,MACb,IAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAA,EAAS;AAAA,KACV,CAAA;AACD,IAAA,OAAO,YAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO,QAAQ,GAAA,EAAK;AAAA,IAClB,IAAA,EAAM,OAAA;AAAA,IACN,IAAA,EAAM,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,OAAO,IAAA,IAAQ,OAAA;AAAA,IAC5C,QAAA,EAAU,aAAA,CAAc,MAAA,CAAO,KAAK;AAAA,GACrC,CAAA;AACH;AAYA,IAAM,gBAAA,uBAAuB,GAAA,CAAI,CAAC,QAAQ,MAAA,EAAQ,SAAA,EAAW,WAAA,EAAa,QAAQ,CAAC,CAAA;AAEnF,SAAS,UAAU,KAAA,EAAkC;AACnD,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QACzC,gBAAA,CAAiB,GAAA,CAAK,MAA+B,MAAgB,CAAA;AAC5E;AAEA,SAAS,eAAe,KAAA,EAAwB;AAC9C,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,CAAA,sBAAA,EAAyB,IAAA,CAAK,SAAA,CAAW,KAAA,CAA+B,MAAM,CAAC,CAAA,CAAA;AAAA,EACxF;AACA,EAAA,OAAO,CAAA,EAAA,EAAK,OAAO,KAAK,CAAA,CAAA;AAC1B;AAEO,SAAS,KAAA,CACd,OACA,EAAA,EACK;AACL,EAAA,MAAM,GAAA,GAAW,OAAO,GAAA,KAAQ;AAC9B,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,GAAA,CAAI,IAAI,CAAA;AACzB,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,IAAA,EAAM,WAAA;AAAA,MACN,EAAA,EAAI,KAAK,GAAA,EAAI;AAAA,MACb,IAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAW,GAAA,CAAI;AAAA,KAChB,CAAA;AACD,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,EAAA,CAAG,GAAG,CAAA;AAC7B,MAAA,IAAI,aAAa,KAAA,CAAA,EAAW;AAC1B,QAAA,OAAA,GAAU,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAM;AAAA,MAC7C,CAAA,MAAA,IAAW,OAAO,QAAA,KAAa,QAAA,EAAU;AACvC,QAAA,OAAA,GAAU,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,QAAA,EAAS;AAAA,MAChD,CAAA,MAAA,IAAW,SAAA,CAAU,QAAQ,CAAA,EAAG;AAC9B,QAAA,OAAA,GAAU,QAAA;AAAA,MACZ,CAAA,MAAO;AACL,QAAA,MAAM,IAAI,SAAA,CAAU;AAAA,UAClB,IAAA,EAAM,YAAA;AAAA,UACN,SAAS,CAAA,OAAA,EAAU,KAAK,CAAA,WAAA,EAAc,cAAA,CAAe,QAAQ,CAAC,CAAA,8CAAA;AAAA,SAC/D,CAAA;AAAA,MACH;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,IAAA,CAAK,CAAA,EAAG;AAAA,QAC9B,IAAA,EAAM,MAAA;AAAA,QACN,KAAA,EAAO,MAAA;AAAA,QACP,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,WAAW,GAAA,CAAI;AAAA,OAChB,CAAA;AACD,MAAA,OAAA,GAAU,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,KAAA,CAAM,SAAS,KAAA,EAAM;AAC1D,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,IAAA,EAAM,OAAA;AAAA,QACN,EAAA,EAAI,KAAK,GAAA,EAAI;AAAA,QACb,IAAA;AAAA,QACA,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,MAAM,KAAA,CAAM;AAAA,OACb,CAAA;AAAA,IACH;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,IAAA,CAAK,GAAA,EAAI,EAAG,IAAA,EAAM,KAAA,EAAO,OAAA,EAAS,CAAA;AAClE,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO,QAAQ,GAAA,EAAK,EAAE,MAAM,IAAA,EAAM,IAAA,EAAM,OAAO,CAAA;AACjD;AAEA,SAAS,qBAAA,CAAsB,MAAc,QAAA,EAA+B;AAC1E,EAAA,IAAI,CAAC,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,EAAU;AAC7C,IAAA,MAAM,IAAI,SAAA,CAAU;AAAA,MAClB,IAAA,EAAM,YAAA;AAAA,MACN,OAAA,EAAS,UAAU,IAAI,CAAA,iCAAA;AAAA,KACxB,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,CAAC,MAAA,EAAQ,OAAA,EAAS,UAAA,EAAY,OAAA,EAAS,MAAM,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,IAAI,CAAA,EAAG;AAC3E,IAAA,MAAM,IAAI,SAAA,CAAU;AAAA,MAClB,IAAA,EAAM,YAAA;AAAA,MACN,SAAS,CAAA,OAAA,EAAU,IAAI,gCAAgC,MAAA,CAAO,QAAA,CAAS,IAAI,CAAC,CAAA,CAAA;AAAA,KAC7E,CAAA;AAAA,EACH;AACA,EAAA,MAAM,OAAA,GAAU,OAAO,QAAA,CAAS,IAAA,KAAS,YAAY,QAAA,CAAS,IAAA,CAAK,MAAK,KAAM,EAAA;AAC9E,EAAA,MAAM,OAAA,GAAU,SAAS,IAAA,KAAS,MAAA;AAClC,EAAA,IAAI,YAAY,OAAA,EAAS;AACvB,IAAA,MAAM,IAAI,SAAA,CAAU;AAAA,MAClB,IAAA,EAAM,YAAA;AAAA,MACN,OAAA,EAAS,UAAU,IAAI,CAAA,yCAAA;AAAA,KACxB,CAAA;AAAA,EACH;AACA,EAAA,IAAI,SAAS,IAAA,KAAS,MAAA,IAAa,CAAC,WAAA,CAAY,QAAA,CAAS,IAAI,CAAA,EAAG;AAC9D,IAAA,MAAM,IAAI,SAAA,CAAU;AAAA,MAClB,IAAA,EAAM,YAAA;AAAA,MACN,OAAA,EAAS,UAAU,IAAI,CAAA,gCAAA;AAAA,KACxB,CAAA;AAAA,EACH;AACA,EAAA,IAAI,SAAS,IAAA,KAAS,MAAA,IAAa,CAAC,WAAA,CAAY,QAAA,CAAS,IAAI,CAAA,EAAG;AAC9D,IAAA,MAAM,IAAI,SAAA,CAAU;AAAA,MAClB,IAAA,EAAM,YAAA;AAAA,MACN,OAAA,EAAS,UAAU,IAAI,CAAA,gCAAA;AAAA,KACxB,CAAA;AAAA,EACH;AACF;AAEA,SAAS,YAAY,KAAA,EAAoC;AACvD,EAAA,IAAI;AACF,IAAA,eAAA,CAAgB,KAAkB,CAAA;AAClC,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEO,SAAS,KAAA,CAAM,MAAc,QAAA,EAA8B;AAChE,EAAA,MAAM,GAAA,GAAW,OAAO,GAAA,KAAQ;AAC9B,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,GAAA,CAAI,IAAI,CAAA;AACzB,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,IAAA,EAAM,WAAA;AAAA,MACN,EAAA,EAAI,KAAK,GAAA,EAAI;AAAA,MACb,IAAA;AAAA,MACA,KAAA,EAAO,IAAA;AAAA,MACP,WAAW,GAAA,CAAI;AAAA,KAChB,CAAA;AACD,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,GAAG,CAAA;AACnC,MAAA,qBAAA,CAAsB,MAAM,QAAQ,CAAA;AACpC,MAAA,IAAI,SAAS,IAAA,EAAM;AACjB,QAAA,MAAM,YAAA,GAAe,UAAA,CAAW,QAAA,CAAS,IAAI,CAAA,GACzC,QAAA,CAAS,IAAA,GACTC,OAAAA,CAAQ,GAAA,CAAI,SAAA,CAAU,GAAA,EAAK,QAAA,CAAS,IAAI,CAAA;AAC5C,QAAA,IAAI,CAACC,UAAAA,CAAW,YAAY,CAAA,EAAG;AAC7B,UAAA,MAAM,IAAI,SAAA,CAAU;AAAA,YAClB,IAAA,EAAM,YAAA;AAAA,YACN,OAAA,EAAS,CAAA,OAAA,EAAU,IAAI,CAAA,uBAAA,EAA0B,SAAS,IAAI,CAAA;AAAA,WAC/D,CAAA;AAAA,QACH;AAAA,MACF;AACA,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,EAAA,EAAI,IAAA,CAAK,GAAA,EAAI,EAAG,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,CAAA;AAChE,MAAA,OAAA,GAAU;AAAA,QACR,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,CAAA,kBAAA,EAAqB,QAAA,CAAS,KAAA,IAAS,IAAI,CAAA,CAAA;AAAA,QACpD,IAAA,EAAM,EAAE,KAAA,EAAO,QAAA;AAAS,OAC1B;AAAA,IACF,SAAS,CAAA,EAAG;AACV,MAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,IAAA,CAAK,CAAA,EAAG;AAAA,QAC9B,IAAA,EAAM,YAAA;AAAA,QACN,KAAA,EAAO,MAAA;AAAA,QACP,IAAA;AAAA,QACA,WAAW,GAAA,CAAI;AAAA,OAChB,CAAA;AACD,MAAA,OAAA,GAAU,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,KAAA,CAAM,SAAS,KAAA,EAAM;AAC1D,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,IAAA,EAAM,OAAA;AAAA,QACN,EAAA,EAAI,KAAK,GAAA,EAAI;AAAA,QACb,IAAA;AAAA,QACA,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,MAAM,KAAA,CAAM;AAAA,OACb,CAAA;AAAA,IACH;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,IAAA,CAAK,GAAA,EAAI,EAAG,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,CAAA;AACxE,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO,QAAQ,GAAA,EAAK,EAAE,IAAA,EAAM,OAAA,EAAS,MAAM,CAAA;AAC7C;;;AC9qBO,IAAM,qBAAA,GAAwB;AAErC,SAAS,YAAY,IAAA,EAAkC;AACrD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC9B,EAAA,IAAI,KAAA,KAAU,IAAI,OAAO,MAAA;AACzB,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,KAAA,IAAS,QAAQ,KAAA,EAAO,KAAA,GAAQ,IAAA,CAAK,MAAA,EAAQ,SAAS,CAAA,EAAG;AACvD,IAAA,MAAM,SAAA,GAAY,KAAK,KAAK,CAAA;AAC5B,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAI,SAAS,OAAA,GAAU,KAAA;AAAA,WAAA,IACd,SAAA,KAAc,MAAM,OAAA,GAAU,IAAA;AAAA,WAAA,IAC9B,SAAA,KAAc,KAAK,QAAA,GAAW,KAAA;AACvC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAA,KAAc,KAAK,QAAA,GAAW,IAAA;AAAA,SAAA,IACzB,SAAA,KAAc,KAAK,KAAA,IAAS,CAAA;AAAA,SAAA,IAC5B,SAAA,KAAc,GAAA,IAAO,EAAE,KAAA,KAAU,CAAA,SAAU,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,KAAA,GAAQ,CAAC,CAAA;AAAA,EACjF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,cAAc,IAAA,EAAyC;AAC9D,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,EAAA,MAAM,MAAA,GAAS,YAAY,OAAO,CAAA;AAClC,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAiB,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AACxC,IAAA,IAAI,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA,CAAA;AAChF,IAAA,MAAM,SAAA,GAAY,KAAA;AAClB,IAAA,IAAI,UAAU,MAAA,KAAW,MAAA,IAAU,SAAA,CAAU,MAAA,KAAW,UAAU,OAAO,KAAA,CAAA;AACzE,IAAA,IAAI,OAAO,UAAU,OAAA,KAAY,QAAA,IAAY,CAAC,SAAA,CAAU,OAAA,CAAQ,IAAA,EAAK,EAAG,OAAO,KAAA,CAAA;AAC/E,IAAA,IAAI,SAAA,CAAU,aAAa,KAAA,CAAA,IAAa,CAAC,MAAM,OAAA,CAAQ,SAAA,CAAU,QAAQ,CAAA,EAAG,OAAO,KAAA,CAAA;AACnF,IAAA,OAAO;AAAA,MACL,QAAQ,SAAA,CAAU,MAAA;AAAA,MAClB,SAAS,SAAA,CAAU,OAAA;AAAA,MACnB,UAAU,SAAA,CAAU,QAAA,GAAW,CAAC,GAAG,SAAA,CAAU,QAAQ,CAAA,GAAI,KAAA;AAAA,KAC3D;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEO,SAAS,oBAAA,CAAqB,MAAc,MAAA,EAA0B;AAC3E,EAAA,MAAM,QAAA,GAAW,cAAc,IAAI,CAAA;AACnC,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,qBAAA;AAAA,MACT,IAAA,EAAM,EAAE,QAAA,EAAU,IAAA;AAAK,KACzB;AAAA,EACF;AACA,EAAA,IAAI,QAAA,CAAS,WAAW,MAAA,EAAQ;AAC9B,IAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,SAAS,OAAA,EAAQ;AAAA,EACrD;AACA,EAAA,OAAO,eAAA,CAAgB;AAAA,IACrB,MAAA;AAAA,IACA,QAAQ,QAAA,CAAS,OAAA;AAAA,IACjB,UAAU,QAAA,CAAS,QAAA,GAAW,CAAC,GAAG,QAAA,CAAS,QAAQ,CAAA,GAAI;AAAA,GACxD,CAAA;AACH;;;ACtCO,SAAS,aAAa,IAAA,EAAsC;AACjE,EAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,EAAA,IACE,CAAC,QAAA,IACE,OAAO,SAAS,OAAA,KAAY,QAAA,IAC5B,OAAO,QAAA,CAAS,QAAA,KAAa,YAC7B,OAAO,QAAA,CAAS,gBAAgB,QAAA,IAChC,OAAO,SAAS,KAAA,KAAU,QAAA,IAC1B,CAAC,KAAA,CAAM,OAAA,CAAQ,SAAS,KAAK,CAAA,IAC7B,CAAC,QAAA,CAAS,OAAA,CAAQ,MAAK,IACvB,CAAC,SAAS,QAAA,CAAS,IAAA,MACnB,CAAC,QAAA,CAAS,MAAM,IAAA,EAAK,IACrB,CAAC,QAAA,CAAS,WAAA,CAAY,MAAK,EAC9B;AACA,IAAA,MAAM,IAAI,UAAU,yEAAyE,CAAA;AAAA,EAC/F;AACA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,oBAAoB,KAAA,EAAkC;AACpE,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU;AAC5C,IAAA,IAAI;AACF,MAAA,OAAO,aAAa,IAAI,CAAA;AAAA,IAC1B,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,OAAA,GAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,yBAAA;AACzD,MAAA,MAAM,IAAI,SAAA,CAAU,CAAA,KAAA,EAAQ,KAAA,GAAQ,CAAC,oCAAoC,OAAO,CAAA,CAAA,EAAI,EAAE,KAAA,EAAO,CAAA;AAAA,IAC/F;AAAA,EACF,CAAC,CAAA;AACD,EAAA,KAAA,IAAS,YAAY,CAAA,EAAG,SAAA,GAAY,UAAA,CAAW,MAAA,EAAQ,aAAa,CAAA,EAAG;AACrE,IAAA,KAAA,IAAS,aAAa,SAAA,GAAY,CAAA,EAAG,aAAa,UAAA,CAAW,MAAA,EAAQ,cAAc,CAAA,EAAG;AACpF,MAAA,MAAM,IAAA,GAAO,WAAW,SAAS,CAAA;AACjC,MAAA,MAAM,KAAA,GAAQ,WAAW,UAAU,CAAA;AACnC,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,WAAA,KAAgB,KAAA,CAAM,WAAA;AAC9C,MAAA,IAAI,CAAC,UAAA,EAAY;AACjB,MAAA,MAAM,IAAI,SAAA;AAAA,QACR,CAAA,MAAA,EAAS,YAAY,CAAC,CAAA,KAAA,EAAQ,aAAa,CAAC,CAAA,8BAAA,EAAiC,KAAK,WAAW,CAAA,wCAAA;AAAA,OAC/F;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,oBAAA,CACd,KAAA,EACA,GAAA,EACA,SAAA,EACA,KAAA,EACK;AACL,EAAA,OAAO,OAAO,GAAA,KAAQ;AACpB,IAAA,MAAM,OAAA,GAAU,MAAM,GAAA,CAAI,GAAG,CAAA;AAC7B,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,MAAA,EAAQ,OAAO,OAAA;AACtC,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,IAAA,GAAON,IAAAA,CAAK,SAAA,EAAW,IAAI,CAAA;AACjC,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,IAAI,CAAA;AAC/B,QAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,EAAO,IAAK,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC3C,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,MAAA;AAAA,YACR,OAAA,EAAS,CAAA,EAAG,KAAK,CAAA,mCAAA,EAAsC,IAAI,CAAA;AAAA,WAC7D;AAAA,QACF;AAAA,MACF,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS,CAAA,EAAG,KAAK,CAAA,mCAAA,EAAsC,IAAI,CAAA;AAAA,SAC7D;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AACF;AAEO,SAAS,eACd,KAAA,EACA,GAAA,EACA,SAAA,EACA,KAAA,EACA,QAA2B,QAAA,EACtB;AACL,EAAA,MAAM,OAAA,GAAe,OAAO,GAAA,KAAQ;AAClC,IAAA,MAAM,MAAA,uBAAa,GAAA,EAA0B;AAC7C,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAA,CAAO,GAAA,CAAI,MAAM,MAAM,YAAA,CAAaA,KAAK,SAAA,EAAW,IAAI,CAAC,CAAC,CAAA;AAAA,IAC5D;AACA,IAAA,MAAM,OAAA,GAAU,MAAM,GAAA,CAAI,GAAG,CAAA;AAC7B,IAAA,MAAM,UAAoB,EAAC;AAC3B,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,QAAQ,MAAM,YAAA,CAAaA,IAAAA,CAAK,SAAA,EAAW,IAAI,CAAC,CAAA;AACtD,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAChC,MAAA,IACE,SAAS,MAAA,KAAW,KAAA,CAAM,UACvB,QAAA,CAAS,IAAA,KAAS,MAAM,IAAA,EAC3B;AACA,QAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,MACnB;AAAA,IACF;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,MAAM,UAAU,CAAA,EAAG,KAAK,4EAA4E,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AACtH,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA;AAAA,QACA,KAAA,EAAO,IAAI,SAAA,CAAU,EAAE,MAAM,gBAAA,EAAkB,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS;AAAA,OAC1E;AAAA,IACF;AACA,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO,WAAA,CAAY,SAAS,GAAG,CAAA;AACjC;AAOA,eAAe,aAAa,IAAA,EAAqC;AAC/D,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,IAAI,CAAA;AAC/B,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAO,SAAU,EAAE,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAM,IAAA,EAAK;AACzD,IAAA,MAAM,QAAA,GAAW,MAAMO,QAAAA,CAAS,IAAI,CAAA;AACpC,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAMV,UAAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,EAAE;AAAA,EACnF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,IAAA,EAAK;AAAA,EACrC;AACF;AAEA,SAAS,UAAA,CAAW,MAAc,KAAA,EAAuB;AACvD,EAAA,OAAO;AAAA,IACL,sBAAsB,IAAI,CAAA,CAAA;AAAA,IAC1B,eAAe,KAAK,CAAA,CAAA;AAAA,IACpB;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AACb;AAEO,SAAS,SAAA,CACd,OACA,IAAA,EACA,KAAA,EACA,cACA,MAAA,EACA,YAAA,EACA,aAAA,GAAmC,OAAA,EACnC,QAAA,EACK;AACL,EAAA,MAAM,QAAA,GAAW,aAAa,IAAI,CAAA;AAClC,EAAA,IAAI,aAAA,KAAkB,MAAA,IAAU,QAAA,CAAS,KAAA,CAAM,WAAW,CAAA,EAAG;AAC3D,IAAA,MAAM,IAAI,SAAA,CAAU,CAAA,EAAG,KAAK,CAAA,2DAAA,CAA6D,CAAA;AAAA,EAC3F;AACA,EAAA,MAAM,QAAQ,QAAA,CAAS;AAAA,IACrB,KAAA;AAAA,IACA,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,OAAO,QAAA,CAAS,KAAA;AAAA,IAChB,KAAA,EAAO,CAAC,GAAG,QAAA,CAAS,KAAK,CAAA;AAAA,IACzB,YAAA,EAAc,CAAC,GAAG,QAAA,CAAS,KAAK,CAAA;AAAA,IAChC,aAAA;AAAA,IACA,KAAK,KAAA,CAAM,SAAA;AAAA,IACX,iBAAiB,MAAA,KAAW,MAAA;AAAA,IAC5B,GAAI,QAAA,KAAa,MAAA,GAAY,EAAC,GAAI,EAAE,QAAA,EAAS;AAAA,IAC7C,MAAA,EAAQ,CAAC,GAAA,KAAQ,CAAA,EAAG,WAAW,KAAA,EAAO,KAAA,CAAM,KAAK,CAAC;AAAA,EAAK,OAAO,YAAA,KAAiB,UAAA,GAAa,YAAA,CAAa,GAAG,IAAI,YAAY;AAAA,kGAAA,CAAA;AAAA,IAC5H,OAAA,EAAS,CAAC,IAAA,KAAS,oBAAA,CAAqB,MAAM,MAAM;AAAA,GACrD,CAAA;AACD,EAAA,IAAI,CAAC,cAAc,OAAO,KAAA;AAC1B,EAAA,OAAO,OAAO,GAAA,KAAQ;AACpB,IAAA,MAAM,IAAA,GAAOG,IAAAA,CAAK,KAAA,CAAM,SAAA,EAAW,YAAY,CAAA;AAC/C,IAAA,MAAM,MAAA,GAAS,MAAM,YAAA,CAAa,IAAI,CAAA;AACtC,IAAA,MAAM,YAAA,GAAe,MAAM,KAAA,CAAM,GAAG,CAAA;AACpC,IAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,CAAa,IAAI,CAAA;AACrC,IAAA,MAAM,UAAU,MAAA,CAAO,MAAA,KAAW,MAAM,MAAA,IAAU,MAAA,CAAO,SAAS,KAAA,CAAM,IAAA;AACxE,IAAA,IAAI,CAAC,WAAW,CAAC,KAAA,CAAM,UAAU,KAAA,CAAM,IAAA,KAAS,MAAM,OAAO,YAAA;AAC7D,IAAA,IAAI;AACF,MAAA,MAAM,cAAc,oBAAA,CAAqB,MAAMO,SAAS,IAAA,EAAM,MAAM,GAAG,MAAM,CAAA;AAC7E,MAAA,OAAO,YAAY,MAAA,KAAW,MAAA,IAAU,WAAA,CAAY,OAAA,KAAY,wBAC5D,YAAA,GACA,WAAA;AAAA,IACN,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,YAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF;AAEO,SAAS,cAAA,CACd,SAAA,EACA,KAAA,EACA,YAAA,EACA,QAAA,EACmD;AACnD,EAAA,OAAO,SAAA,CAAU,GAAA,CAAI,CAAC,QAAA,KAAa;AACjC,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,CAAA,eAAA,EAAkB,gBAAgB,sCAAsC,CAAA,CAAA,CAAA;AAAA,MACxE,0FAAA;AAAA,MACA,QAAA,CAAS,KAAA,GAAQ,CAAA,OAAA,EAAU,QAAA,CAAS,KAAK,CAAA,CAAA,GAAK;AAAA,KAChD,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,IAAI,CAAA;AAC3B,IAAA,MAAM,MAAA,GAAS,SAAA;AAAA,MACb,QAAA,CAAS,IAAA;AAAA,MACT,QAAA,CAAS,IAAA;AAAA,MACT,KAAA;AAAA,MACA,YAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,KAAA,GAAQ,SAAA;AAAA,MACZ,QAAA,CAAS,IAAA;AAAA,MACT,QAAA,CAAS,IAAA;AAAA,MACT,KAAA;AAAA,MACA,GAAG,YAAY;AAAA,sFAAA,CAAA;AAAA,MACf,MAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,GAAA,GAAW,OAAO,GAAA,KAAQ;AAC9B,MAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,GAAG,CAAA;AAC9B,MAAA,IAAI,MAAM,MAAA,KAAW,MAAA,IAAU,KAAA,CAAM,OAAA,KAAY,uBAAuB,OAAO,KAAA;AAC/E,MAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,GAAG,CAAA;AAC9B,MAAA,IAAI,OAAO,MAAA,KAAW,MAAA,IAAU,MAAA,CAAO,OAAA,KAAY,uBAAuB,OAAO,MAAA;AACjF,MAAA,MAAM,OAAA,GAAU,CAAA,SAAA,EAAY,QAAA,CAAS,IAAI,CAAA,qBAAA,CAAA;AACzC,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA;AAAA,QACA,KAAA,EAAO,IAAI,SAAA,CAAU,EAAE,IAAA,EAAM,UAAU,KAAA,EAAO,QAAA,EAAU,OAAA,EAAS,OAAA,EAAS;AAAA,OAC5E;AAAA,IACF,CAAA;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,CAAS,MAAM,KAAA,EAAO,QAAA,CAAS,OAAO,GAAA,EAAI;AAAA,EAC3D,CAAC,CAAA;AACH","file":"chunk-DV5P4QLI.js","sourcesContent":["/**\n * Job introspection. The builders register a `JobMeta` for the `Job` they return\n * (and a short label for the conditions they build) in a side table, so a loop's\n * shape can be read back without running it. A host can validate or describe a\n * graph without executing it.\n *\n * Kept in `WeakMap`s rather than on the function objects, so the `Job`/`Condition`\n * types stay plain functions and nothing downstream has to know meta exists.\n */\n\nimport type { Job, JobMeta, ConditionInput } from './types.js';\nimport type { AgentContractSummary } from './agent.js';\n\nconst META = new WeakMap<object, JobMeta>();\nconst LABEL = new WeakMap<object, string>();\n\n/** Register a Job's shape and return the same Job (used inline at a builder's return). */\nexport function setMeta<T extends object>(target: T, meta: JobMeta): T {\n META.set(target, meta);\n return target;\n}\n\n/** Read a Job's registered shape, if it has one (a hand-written Job has none). */\nexport function jobMeta(job: Job): JobMeta | undefined {\n return typeof job === 'function' ? META.get(job) : undefined;\n}\n\n/** Carry a Job's shape onto a wrapper that preserves its public behavior. */\nexport function copyJobMeta<T extends object>(target: T, source: Job): T {\n const meta = jobMeta(source);\n return meta ? setMeta(target, meta) : target;\n}\n\n/** Register a one-line label for a condition (used by the gate-describing path). */\nexport function setLabel<T extends object>(cond: T, label: string): T {\n LABEL.set(cond, label);\n return cond;\n}\n\nfunction condLabel(input: unknown): string {\n if (typeof input === 'function') {\n const l = LABEL.get(input);\n if (l) return l;\n }\n return 'check';\n}\n\n/** Flatten a gate input (`until`/`start`/`stopOn`) into one label per condition. */\nexport function describeConditions(input?: ConditionInput): string[] {\n if (input == null) return [];\n if (Array.isArray(input)) return input.flatMap(describeConditions);\n return [condLabel(input)];\n}\n\nconst count = (n: number, w: string) => `${n} ${w}${n === 1 ? '' : 's'}`;\n\n/** Per-node shape `dag()` writes into its meta's `nodes` array. */\nexport interface NodeMeta {\n name: string;\n needs?: string[];\n desc?: string;\n gate?: string;\n isolate?: boolean;\n optional?: boolean;\n /** Condition labels for the node's `when` gate, when one is configured. */\n when?: string[];\n job?: JobMeta;\n}\n\nexport type InspectionCommand = 'validate' | 'describe';\n\nexport interface InspectionEnvelopeV1 {\n schemaVersion: 1;\n command: InspectionCommand;\n file: string;\n ok: true;\n executed: false;\n shape: JobShapeV1;\n}\n\nexport type JobShapeV1 =\n | { kind: 'opaque' }\n | {\n kind: string;\n name?: string;\n [producerField: string]: unknown;\n };\n\nfunction jsonSafeObject(value: object): Record<string, unknown> {\n return JSON.parse(JSON.stringify(value)) as Record<string, unknown>;\n}\n\nexport function jobShapeV1(meta: JobMeta | undefined): JobShapeV1 {\n if (!meta) return { kind: 'opaque' };\n\n const shape: {\n kind: string;\n name?: string;\n [producerField: string]: unknown;\n } = {\n ...jsonSafeObject(meta),\n kind: meta.kind,\n };\n\n if (meta.kind === 'loop') {\n shape.body = jobShapeV1(meta.body as JobMeta | undefined);\n }\n\n if (meta.kind === 'dag') {\n const nodes = (meta.nodes as NodeMeta[] | undefined) ?? [];\n shape.nodes = nodes.map(node => ({\n ...jsonSafeObject(node),\n name: node.name,\n needs: node.needs ? [...node.needs] : [],\n optional: node.optional === true,\n isolate: node.isolate === true,\n when: node.when ? [...node.when] : [],\n job: jobShapeV1(node.job),\n }));\n }\n\n return shape;\n}\n\nexport function inspectionEnvelopeV1(\n command: InspectionCommand,\n file: string,\n meta: JobMeta | undefined,\n): InspectionEnvelopeV1 {\n return {\n schemaVersion: 1,\n command,\n file,\n ok: true,\n executed: false,\n shape: jobShapeV1(meta),\n };\n}\n\n// `meta.contract` is only ever set by `agentJob` to the value `agentContract()`\n// produced — a clean `AgentContractSummary` with empty fields already dropped. So\n// read it back as that type rather than re-normalising a shape the core built.\n// A hand-written job has no contract.\nfunction renderContract(value: unknown): string | undefined {\n const c = value as AgentContractSummary | undefined;\n if (!c || typeof c !== 'object') return undefined;\n const bits: string[] = [];\n if (c.tier) bits.push(`tier ${c.tier}`);\n if (c.outputs?.length) bits.push(`outputs ${c.outputs.join(', ')}`);\n if (c.capabilities?.length) bits.push(`capabilities ${c.capabilities.join(', ')}`);\n if (c.requiresSkills?.length) bits.push(`requires ${c.requiresSkills.join(', ')}`);\n if (c.usesSkills?.length) bits.push(`uses ${c.usesSkills.join(', ')}`);\n if (c.failureModes?.length) bits.push(`failure modes ${c.failureModes.join(', ')}`);\n return bits.join('; ');\n}\n\n/**\n * Render a `JobMeta` tree to indented lines: the loop's name and cap, its gate\n * and convergence actions, and its body / dag nodes recursively. A Job with no\n * meta (hand-written) renders as a single opaque line.\n */\nexport function renderPlan(meta: JobMeta | undefined, indent = ''): string[] {\n if (!meta) return [`${indent}(a runnable job, shape not introspectable)`];\n const nm = meta.name ? ` \"${meta.name}\"` : '';\n const out: string[] = [];\n switch (meta.kind) {\n case 'loop': {\n const caps: string[] = [];\n if (typeof meta.max === 'number') caps.push(`max ${meta.max}`);\n if (typeof meta.noProgress === 'number')\n caps.push(`stall after ${meta.noProgress} flat`);\n if (meta.checkFirst) caps.push('check first');\n const max = caps.length ? ` (${caps.join('; ')})` : '';\n out.push(`${indent}loop${nm}${max}`);\n const start = meta.start as string[] | undefined;\n const gate = meta.gate as string[] | undefined;\n const stopOn = meta.stopOn as string[] | undefined;\n if (start?.length) out.push(`${indent} start: ${start.join(', ')}`);\n if (gate?.length) out.push(`${indent} gate: ${gate.join(', ')}`);\n if (stopOn?.length) out.push(`${indent} stopOn: ${stopOn.join(', ')}`);\n const tail = [meta.review ? 'review' : null].filter(Boolean);\n if (tail.length) out.push(`${indent} on convergence: ${tail.join(' + ')}`);\n out.push(`${indent} body:`);\n out.push(...renderPlan(meta.body as JobMeta | undefined, `${indent} `));\n break;\n }\n case 'dag': {\n const nodes = (meta.nodes as NodeMeta[] | undefined) ?? [];\n out.push(`${indent}dag${nm} (${count(nodes.length, 'node')})`);\n const kickbacks = meta.maxKickbacks;\n if (typeof kickbacks === 'number') {\n out.push(`${indent} kickbacks: ${kickbacks}`);\n } else if (kickbacks && typeof kickbacks === 'object' && !Array.isArray(kickbacks)) {\n const limits = Object.entries(kickbacks)\n .map(([target, limit]) => `${target} ${String(limit)}`)\n .join(', ');\n out.push(`${indent} kickbacks: ${limits}`);\n }\n for (const node of nodes) {\n const bits: string[] = [];\n if (node.needs?.length) bits.push(`needs ${node.needs.join(', ')}`);\n if (node.optional) bits.push('optional');\n if (node.when?.length) bits.push(`when: ${node.when.join(', ')}`);\n if (node.isolate) bits.push('isolated');\n out.push(`${indent} - ${node.name}${bits.length ? ` (${bits.join('; ')})` : ''}`);\n if (node.desc) out.push(`${indent} desc: ${node.desc}`);\n if (node.gate) out.push(`${indent} gate: ${node.gate}`);\n out.push(...renderPlan(node.job, `${indent} `));\n }\n break;\n }\n case 'agent':\n out.push(`${indent}agent${nm}`);\n {\n const contract = renderContract(meta.contract);\n if (contract) out.push(`${indent} contract: ${contract}`);\n }\n break;\n case 'fn':\n out.push(`${indent}fn${nm}`);\n break;\n default:\n out.push(`${indent}${meta.kind}${nm}`);\n }\n return out;\n}\n","/**\n * Build a child `JobContext` from a parent, overriding only the per-scope\n * fields. One helper shared by `loop()` and `dag()` so the next field added to\n * `JobContext` is threaded in exactly one place.\n */\n\nimport type {\n ConditionResult,\n GraphPosition,\n JobContext,\n Outcome,\n Workspace,\n} from './types.js';\nimport type { EnvHandle } from '../env/environment.js';\n\nexport interface ContextOverride {\n depth: number;\n path: readonly string[];\n iteration?: number;\n lastOutcome?: Outcome;\n lastReview?: Outcome;\n lastGate?: ConditionResult;\n /** The outcomes of a dag node's `needs`, set by the dag for that node only. */\n needs?: Readonly<Record<string, Outcome>>;\n /** Override the workspace (a worktree fork at a concurrency boundary). */\n workspace?: Workspace;\n /** Override the environment (a per-team env at a concurrency boundary). */\n environment?: EnvHandle;\n /** Override the pinned env vars (a `withEnv` wrapper layering its overlay). */\n envOverlay?: Record<string, string>;\n /** Override the DAG graph position for a node. */\n graph?: GraphPosition;\n /** Set or clear the acceptance criterion visible to a stage reviewer. */\n reviewerGate?: string | null;\n /** Carry the nearest DAG node's acceptance criterion through nested jobs. */\n stageGate?: string | null;\n /** Override the inherited timeout for jobs in this scope. */\n timeoutMs?: number;\n /** Override the inherited timeout grace for jobs in this scope. */\n timeoutGraceMs?: number;\n}\n\n/** Resolve the criterion for the reviewer context currently being evaluated. */\nexport function criterionFor(\n ctx: Pick<JobContext, 'reviewerGate' | 'stageGate' | 'graph'>,\n): string | undefined {\n if (ctx.stageGate !== undefined) return ctx.stageGate ?? undefined;\n if (ctx.reviewerGate !== undefined) return ctx.reviewerGate ?? undefined;\n return ctx.graph?.gate;\n}\n\nexport function childContext(\n parent: JobContext,\n over: ContextOverride,\n): JobContext {\n return {\n engine: parent.engine,\n resolveEngine: parent.resolveEngine,\n signal: parent.signal,\n runId: parent.runId,\n fingerprintExcludePaths: parent.fingerprintExcludePaths,\n emit: parent.emit,\n params: parent.params,\n state: parent.state,\n memory: parent.memory,\n callbacks: parent.callbacks,\n onCallback: parent.onCallback,\n // A child inherits the parent's workspace by default; a concurrency\n // boundary forks it into an isolated worktree by passing `workspace`.\n workspace: over.workspace ?? parent.workspace,\n environment: over.environment ?? parent.environment,\n // Inherited, not override-only: pinning deliberately survives the dag\n // worktree boundary, where a node ctx REPLACES `environment` with a\n // per-team handle. An explicit `withEnv` wins over a per-team stack's vars.\n envOverlay: over.envOverlay ?? parent.envOverlay,\n budget: parent.budget,\n onLimit: parent.onLimit,\n maxWaitMs: parent.maxWaitMs,\n log: parent.log,\n depth: over.depth,\n path: over.path,\n graph: over.graph ?? parent.graph,\n reviewerGate:\n over.reviewerGate !== undefined\n ? over.reviewerGate\n : parent.reviewerGate,\n stageGate: over.stageGate !== undefined ? over.stageGate : parent.stageGate,\n timeoutMs: over.timeoutMs ?? parent.timeoutMs,\n timeoutGraceMs: over.timeoutGraceMs ?? parent.timeoutGraceMs,\n // Inherit the enclosing iteration by default. A `loop` always passes one\n // explicitly; a `dag`/`sequence` does not, so without this a node nested in a\n // loop would reset to 0, the \"Attempt 0\" confound where a retry body could not\n // see which attempt it was on. A top-level dag still gets 0 (the root's value).\n iteration: over.iteration ?? parent.iteration,\n lastOutcome: over.lastOutcome,\n lastReview: over.lastReview,\n lastGate: over.lastGate,\n // Not inherited: a nested job sees its own dag node's needs, never an ancestor's.\n needs: over.needs,\n };\n}\n","import { EngineError } from '@obversa/api';\n\n/**\n * Structured, classified errors so the exit report can say what failed, where in\n * the loop tree, and why, instead of dumping a stack.\n */\n\nexport type LoopErrorCode =\n | 'ENGINE' // the backend (SDK/CLI/API) threw or returned an error\n | 'TIMEOUT' // a step exceeded its time budget\n | 'ABORTED' // an early-exit signal interrupted the work\n | 'VALIDATION' // a condition/validator could not produce a verdict\n | 'WRITE_BOUNDARY' // a guarded writer or reviewer changed a forbidden file\n | 'CONFIG' // the loop definition or CLI input was invalid\n | 'BUDGET' // the run's token budget was exhausted\n | 'RATE_LIMIT' // the provider throttled the call (resets on its own)\n | 'QUOTA' // an account/usage allowance was hit (may or may not reset)\n | 'BODY' // the step body threw\n | 'UNKNOWN';\n\nexport type LoopPhase =\n | 'start'\n | 'body'\n | 'until'\n | 'stopOn'\n | 'review'\n | 'engine';\n\nexport interface LoopErrorInit {\n code: LoopErrorCode;\n message: string;\n phase?: LoopPhase;\n path?: readonly string[];\n iteration?: number;\n cause?: unknown;\n retryable?: boolean;\n /** Suggested wait before retry, in ms (e.g. a `retry-after` header). */\n retryAfterMs?: number;\n /** When the limit resets, as epoch ms. The wait policy prefers this. */\n resetAt?: number;\n}\n\nexport class LoopError extends Error {\n readonly code: LoopErrorCode;\n readonly phase?: LoopPhase;\n readonly path?: readonly string[];\n readonly iteration?: number;\n readonly retryable: boolean;\n /** Suggested wait before retry, in ms (e.g. a `retry-after` header). */\n readonly retryAfterMs?: number;\n /** When the limit resets, as epoch ms. The wait policy prefers this. */\n readonly resetAt?: number;\n\n constructor(init: LoopErrorInit) {\n super(\n init.message,\n init.cause !== undefined ? { cause: init.cause } : undefined,\n );\n this.name = 'LoopError';\n this.code = init.code;\n this.phase = init.phase;\n this.path = init.path;\n this.iteration = init.iteration;\n this.retryAfterMs = init.retryAfterMs;\n this.resetAt = init.resetAt;\n this.retryable = init.retryable ?? defaultRetryable(init);\n }\n\n /** Wrap an arbitrary thrown value, preserving a `LoopError` as-is. */\n static from(\n value: unknown,\n fallback: Omit<LoopErrorInit, 'message' | 'cause'>,\n ): LoopError {\n if (value instanceof LoopError) return value;\n if (value instanceof EngineError) {\n return new LoopError({\n ...fallback,\n code: loopCodeForEngineFailure(value.kind, fallback.code),\n message: value.message,\n cause: value,\n retryAfterMs: value.retryAfterMs,\n resetAt: value.resetAt,\n });\n }\n const message = value instanceof Error ? value.message : String(value);\n return new LoopError({ ...fallback, message, cause: value });\n }\n\n toJSON() {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n phase: this.phase,\n path: this.path,\n iteration: this.iteration,\n retryable: this.retryable,\n retryAfterMs: this.retryAfterMs,\n resetAt: this.resetAt,\n };\n }\n}\n\nfunction loopCodeForEngineFailure(\n kind: EngineError['kind'],\n fallback: LoopErrorCode,\n): LoopErrorCode {\n switch (kind) {\n case 'rate-limit':\n return 'RATE_LIMIT';\n case 'quota':\n return 'QUOTA';\n case 'timeout':\n return 'TIMEOUT';\n case 'aborted':\n return 'ABORTED';\n case 'invalid-config':\n return 'CONFIG';\n default:\n return fallback;\n }\n}\n\nconst INFRASTRUCTURE_ERROR_CODES = new Set<LoopErrorCode>([\n 'ENGINE',\n 'TIMEOUT',\n 'RATE_LIMIT',\n 'QUOTA',\n 'BUDGET',\n]);\n\nexport function isInfrastructureError(\n error: unknown,\n): error is LoopError {\n return error instanceof LoopError && INFRASTRUCTURE_ERROR_CODES.has(error.code);\n}\n\nexport function isEngineExecutionError(\n error: unknown,\n): error is LoopError {\n return isInfrastructureError(error);\n}\n\n/**\n * Default `retryable` by code. ENGINE/TIMEOUT and RATE_LIMIT always refresh on\n * their own, so they retry. QUOTA retries only when a reset is known (a reset\n * the wait policy can act on); a quota with no parseable reset is fatal until\n * the allowance refreshes out of band. BUDGET never refreshes within a run.\n */\nfunction defaultRetryable(init: LoopErrorInit): boolean {\n switch (init.code) {\n case 'ENGINE':\n case 'TIMEOUT':\n case 'RATE_LIMIT':\n return true;\n case 'QUOTA':\n return init.resetAt != null || init.retryAfterMs != null;\n default:\n return false;\n }\n}\n","/**\n * A person's decision as a job. The step asks one question through the run's\n * callbacks client and does one of three things: passes when the answer is\n * yes, sends the work back (or fails) with the person's note when it is no,\n * and pauses the run with the request pending when nobody has answered yet.\n * A run started again with the same client, or the stored client over the\n * same store, finds the answer and carries on.\n */\n\nimport { setTimeout as delay } from 'node:timers/promises';\n\nimport type { CallbackEvent } from '../callback/client.js';\nimport { createCallbackGate, type CallbackRequest } from '../callback/gate.js';\nimport type { JsonObject, JsonValue } from '../graph/value.js';\nimport { setMeta } from './describe.js';\nimport { LoopError } from './errors.js';\nimport { redactSecrets } from './redact.js';\nimport type { Job, JobContext, Outcome, RunCallbacks } from './types.js';\n\n// A spread or nested context must not inherit authority to report the node's outcome.\nconst NODE_JOBS = new WeakMap<JobContext, Job>();\n\n/** Bind only the actual node job; a condition receives an unbound context. */\nexport function nodeJobContext(ctx: JobContext, job: Job | undefined): JobContext {\n const scoped = { ...ctx };\n if (job !== undefined) NODE_JOBS.set(scoped, job);\n return scoped;\n}\n\n/** A transparent wrapper may delegate only when it is itself the node's job. */\nexport function delegateNodeJob(ctx: JobContext, owner: Job, job: Job, child: JobContext): Promise<Outcome> {\n return job(nodeJobContext(child, NODE_JOBS.get(ctx) === owner ? job : undefined));\n}\n\n/** The answer a person gives: yes or no, and a note when there is one. */\nexport interface ApprovalAnswer {\n readonly approved: boolean;\n readonly note?: string;\n}\n\nexport interface ApprovalOptions {\n /** The question, in plain words. */\n question: string;\n /**\n * What the question is about. Default: the outcomes this step depends on\n * (their summaries), so a change upstream after a kickback is a new\n * question, and the same question about the same thing is the same request.\n */\n input?: JsonValue;\n /**\n * The node that owns the fix when the person says no: the note goes back\n * there as the finding. Without it a refusal fails the step with the note\n * as its summary.\n */\n target?: string;\n /**\n * Answer in-process (a test, an example, a script that decides). Without\n * it the step pauses the run with the request pending on the run's\n * callbacks client until a router answers it there.\n */\n answer?: (request: CallbackRequest) => ApprovalAnswer | Promise<ApprovalAnswer>;\n}\n\nconst RESPONSE_SCHEMA: JsonObject = {\n type: 'object',\n properties: { approved: { type: 'boolean' }, note: { type: 'string' } },\n required: ['approved'],\n};\n\nfunction aboutOf(ctx: JobContext): JsonValue {\n if (ctx.needs !== undefined) {\n return Object.fromEntries(\n Object.entries(ctx.needs).map(([name, outcome]) => [name, outcome.summary ?? outcome.status]),\n );\n }\n return ctx.lastOutcome?.summary ?? null;\n}\n\n/** The submitted response, already checked against the schema by the client. */\nfunction toAnswer(response: JsonValue): ApprovalAnswer {\n const record = response !== null && typeof response === 'object' && !Array.isArray(response)\n ? (response as JsonObject)\n : undefined;\n if (record === undefined || typeof record.approved !== 'boolean') {\n throw new LoopError({ code: 'VALIDATION', message: 'an approval answer needs a boolean \"approved\"' });\n }\n return {\n approved: record.approved,\n ...(typeof record.note === 'string' ? { note: record.note } : {}),\n };\n}\n\ntype RequestState = 'absent' | 'pending' | 'claimed' | 'answered' | 'superseded';\n\n/** Fold a request's history into its state and its answer, when it has one. */\nfunction stateOf(events: readonly CallbackEvent[]): { state: RequestState; answer?: ApprovalAnswer } {\n let state: RequestState = 'absent';\n let answer: ApprovalAnswer | undefined;\n for (const event of events) {\n switch (event.kind) {\n case 'callback-requested': state = 'pending'; break;\n case 'callback-claimed': state = 'claimed'; break;\n case 'callback-released': state = 'pending'; break;\n case 'callback-submitted': state = 'answered'; answer = toAnswer(event.response); break;\n case 'callback-superseded': state = 'superseded'; break;\n case 'callback-rejected': break;\n }\n }\n return answer === undefined ? { state } : { state, answer };\n}\n\nexport function approval(label: string, opts: ApprovalOptions): Job {\n const job: Job = async (ctx) => {\n const path = [...ctx.path];\n ctx.emit({ kind: 'job:start', ts: Date.now(), path, label, timeoutMs: ctx.timeoutMs });\n let outcome: Outcome;\n try {\n outcome = await decide(ctx, label, opts, NODE_JOBS.get(ctx) === job);\n } catch (e) {\n const error = LoopError.from(e, { code: 'BODY', phase: 'body', path: ctx.path, iteration: ctx.iteration });\n outcome = { status: 'fail', summary: error.message, error };\n ctx.emit({ kind: 'error', ts: Date.now(), path, message: error.message, code: error.code });\n }\n ctx.emit({ kind: 'job:end', ts: Date.now(), path, label, outcome });\n return outcome;\n };\n return setMeta(job, {\n kind: 'approval',\n name: label,\n question: opts.question,\n ...(opts.target !== undefined ? { target: opts.target } : {}),\n });\n}\n\nasync function decide(ctx: JobContext, label: string, opts: ApprovalOptions, ownsNode: boolean): Promise<Outcome> {\n const client: RunCallbacks | undefined = ctx.callbacks;\n if (client === undefined) {\n throw new LoopError({\n code: 'VALIDATION',\n message: `approval \"${label}\" needs the run's callbacks client; run it through run()`,\n });\n }\n const request = createCallbackGate({\n gateId: label,\n gateVersion: 1,\n decisionText: opts.question,\n responseSchema: RESPONSE_SCHEMA,\n input: opts.input ?? aboutOf(ctx),\n });\n let { state, answer } = stateOf(await client.history(request.requestId));\n if (answer === undefined) {\n // The newest post is the live question: it re-opens this request if an\n // earlier question superseded it, and supersedes the others.\n await client.post(request);\n ({ state, answer } = stateOf(await client.history(request.requestId)));\n if (answer === undefined && state !== 'pending' && state !== 'claimed') {\n return {\n status: 'fail',\n summary: `the question \"${opts.question}\" is not pending and not answered after it was asked (${state}); nobody can answer it`,\n data: request,\n };\n }\n }\n if (answer === undefined && opts.answer !== undefined) {\n answer = await answerInProcess(client, request, `${label}:answer`, opts.answer);\n }\n const paused: Outcome = { status: 'paused', summary: `waiting for a person: ${opts.question}`, data: request };\n if (ownsNode && answer === undefined && ctx.onCallback === 'wait' && !ctx.signal.aborted && ctx.graph !== undefined) {\n // A killed waiter must resume this question, not reconcile an unknown completion.\n ctx.emit({\n kind: 'dag:node', ts: Date.now(), path: ctx.graph.path.slice(0, -1), node: ctx.graph.node,\n phase: 'done', attempt: ctx.graph.attempt, needs: [...ctx.graph.needs],\n ...(ctx.graph.desc === undefined ? {} : { desc: ctx.graph.desc }),\n ...(ctx.graph.gate === undefined ? {} : { gate: ctx.graph.gate }),\n timeoutMs: ctx.timeoutMs, outcome: paused,\n });\n }\n while (answer === undefined && ctx.onCallback === 'wait' && !ctx.signal.aborted\n && (state === 'pending' || state === 'claimed')) {\n try {\n // The timer stays referenced: the monitor alone does not keep a run alive.\n await delay(1_000, undefined, { signal: ctx.signal });\n } catch (error) {\n if (!ctx.signal.aborted) throw error;\n break;\n }\n ({ state, answer } = stateOf(await client.history(request.requestId)));\n }\n if (answer === undefined) {\n return paused;\n }\n if (answer.approved) {\n const accepted: ApprovalAnswer = {\n approved: true,\n ...(typeof answer.note === 'string' && answer.note !== '' ? { note: redactSecrets(answer.note) } : {}),\n };\n return { status: 'pass', summary: `approved: ${opts.question}`, data: accepted };\n }\n const note = typeof answer.note === 'string' && answer.note !== ''\n ? redactSecrets(answer.note)\n : `refused: ${opts.question}`;\n const scrubbed: ApprovalAnswer = { approved: false, note };\n if (opts.target === undefined) {\n return { status: 'fail', summary: note, data: scrubbed };\n }\n // The public `RevisionRequest` shape, built here for the same reason\n // `gateJob` builds its own: feedback.ts imports the condition module.\n return {\n status: 'fail',\n summary: note,\n data: scrubbed,\n revision: {\n target: opts.target,\n reason: note,\n findings: [{ evidence: note, severity: 'block' }],\n rerun: 'target-and-dependents',\n },\n };\n}\n\n/** Claim the question for the in-process responder, ask it, and submit its answer. */\nasync function answerInProcess(\n client: RunCallbacks,\n request: CallbackRequest,\n routerId: string,\n respond: NonNullable<ApprovalOptions['answer']>,\n): Promise<ApprovalAnswer> {\n const claim = await client.claim(request.requestId, routerId);\n if (!claim.ok) {\n throw new LoopError({\n code: 'VALIDATION',\n message: `the question \"${request.decisionText}\" could not be claimed to answer it (${claim.kind})`,\n });\n }\n // The claim is durable: a throw or a refused answer gives it back, as\n // `directRouter` does, so the question stays answerable on the next run.\n let response: ApprovalAnswer;\n try {\n response = await respond(request);\n } catch (error) {\n await client.release(request.requestId, claim.claimToken);\n throw error;\n }\n // Only the fields with a value go to the store: `note: undefined` is a\n // type-legal answer and not a JSON value.\n const submission: JsonObject = {\n approved: response.approved,\n ...(typeof response.note === 'string' ? { note: response.note } : {}),\n };\n let submitted: Awaited<ReturnType<RunCallbacks['submit']>>;\n try {\n submitted = await client.submit(\n request.requestId,\n claim.claimToken,\n routerId,\n request.digest,\n submission,\n );\n } catch (error) {\n await client.release(request.requestId, claim.claimToken);\n throw error;\n }\n if (!submitted.ok) {\n await client.release(request.requestId, claim.claimToken);\n throw new LoopError({\n code: 'VALIDATION',\n message: `the answer to \"${request.decisionText}\" was refused: ${submitted.reason}`,\n });\n }\n return toAnswer(submitted.response);\n}\n","/**\n * Env-var pinning for a job subtree. `withEnv` wraps any `Job` so everything beneath\n * it (gate commands, judge calls, and the subprocesses agent leaves spawn) sees the\n * given variables, without mutating the global `process.env`.\n *\n * Precedence (most specific wins):\n * process.env\n * < ctx.environment.env (the Environment interface's live-stack vars)\n * < ctx.envOverlay (withEnv; nested wrappers merge inner-over-outer)\n * < explicit per-call env (commandSucceeds `opts.env` / agentJob `config.env`)\n *\n * Non-goals: this is pinning, not a lifecycle. Unlike the Environment interface, an\n * overlay has no `down()` and never touches the Environment handle. It cannot unset\n * an inherited var: the process helper merges env over `process.env`, so an overlay only adds or\n * shadows values.\n */\n\nimport type { Job, JobContext } from './types.js';\nimport { childContext } from './context.js';\nimport { delegateNodeJob } from './approval-job.js';\nimport { LoopError } from './errors.js';\nimport { jobMeta, setMeta } from './describe.js';\n\n/**\n * Layer env sources least- to most-specific into one record for a subprocess.\n * Returns `undefined` when every layer is absent or empty, so call sites keep\n * their exact no-env behavior (`env: undefined`, never `{}`). Internal: the public\n * surface is `withEnv`; per-call layers ride `opts.env` / `config.env`.\n */\nexport function mergeEnv(\n ...layers: (Record<string, string> | undefined)[]\n): Record<string, string> | undefined {\n let merged: Record<string, string> | undefined;\n for (const layer of layers) {\n if (!layer) continue;\n for (const [k, v] of Object.entries(layer)) {\n // Null-prototype accumulator: on a plain `{}` a key named `__proto__`\n // hits the inherited accessor and the set is a silent no-op, so the\n // entry would vanish from the child env (the process helper accepts null-prototype\n // env objects; spreading one works too).\n (merged ??= Object.create(null) as Record<string, string>)[k] = v;\n }\n }\n return merged;\n}\n\n/**\n * The layered env for one engine/subprocess call, least → most specific: the\n * running environment's vars, then the `withEnv` overlay, then the per-call\n * layer (`commandSucceeds` `opts.env` / `agentJob` `config.env`). The process helper (and\n * the SDK adapter) merge the result over `process.env`, completing the\n * precedence chain in the header. One helper so a new call site cannot forget\n * a layer and silently break `withEnv`'s \"everything beneath it\" contract.\n */\nexport function resolveEnv(\n ctx: JobContext,\n perCall?: Record<string, string>,\n): Record<string, string> | undefined {\n return mergeEnv(ctx.environment?.env, ctx.envOverlay, perCall);\n}\n\n/** Pin env vars for `job` and everything beneath it (see the header above). */\nexport function withEnv(overlay: Record<string, string>, job: Job): Job {\n if (!overlay || typeof overlay !== 'object' || Array.isArray(overlay)) {\n throw new LoopError({\n code: 'CONFIG',\n message: `withEnv requires a plain object of string values (got ${\n Array.isArray(overlay) ? 'an array' : typeof overlay\n })`,\n });\n }\n for (const [k, v] of Object.entries(overlay)) {\n // An empty key, or one containing '=', would silently set a different variable\n // in the child (the envp entry for a key 'SAFE=PATH' reads 'SAFE=PATH=value',\n // i.e. variable SAFE); reject loudly instead.\n if (!k || k.includes('=')) {\n throw new LoopError({\n code: 'CONFIG',\n message: `withEnv key ${JSON.stringify(k)} is not a valid env var name (empty, or contains \"=\")`,\n });\n }\n // A number or undefined smuggled in would become the string 'undefined'\n // (or '3000') in a child process env; reject loudly instead.\n if (typeof v !== 'string') {\n throw new LoopError({\n code: 'CONFIG',\n message: `withEnv value for \"${k}\" must be a string (got ${typeof v})`,\n });\n }\n }\n const wrapper: Job = (ctx) =>\n delegateNodeJob(ctx, wrapper, job,\n // Transparent: same depth and path (no new tree segment, no events of\n // its own), and the loop-feedback fields are carried through so wrapping\n // a loop body does not hide the previous iteration from it.\n childContext(ctx, {\n depth: ctx.depth,\n path: ctx.path,\n lastOutcome: ctx.lastOutcome,\n lastReview: ctx.lastReview,\n lastGate: ctx.lastGate,\n envOverlay: { ...ctx.envOverlay, ...overlay },\n }),\n );\n // Carry the wrapped job's meta so `describe`/`validate` show the inner shape.\n const meta = jobMeta(job);\n return meta ? setMeta(wrapper, meta) : wrapper;\n}\n","/**\n * A token-denominated budget for a whole run, threaded through the JobContext so\n * every engine call site can refuse to spend past the cap. Where `max` and depth\n * bound the count of calls, this bounds their cost.\n *\n * The runner feeds `add()` from each `engine:usage` event, so `spent()` is live.\n * `assertBudget(ctx)` runs before an engine call; once the cap is reached it\n * throws a non-retryable BUDGET error (hard mode, terminates the run) or logs\n * and continues (soft mode, for exploratory runs).\n */\n\nimport { LoopError } from './errors.js';\nimport type { UsageReceipt } from '../engines/engine.js';\n\ninterface BudgetContext {\n readonly budget?: Budget;\n log(message: string, level?: 'debug' | 'info' | 'warn' | 'error'): void;\n}\n\nexport interface BudgetConfig {\n /** Cap on total tokens (input + output) for the whole run. */\n limit: number;\n /**\n * Refuse a new engine call once `spent + headroom >= limit`, i.e. stop with\n * room to spare rather than only after the cap is already blown. Default 0.\n */\n headroom?: number;\n /** Warn and continue instead of refusing when the cap is hit. Default false. */\n soft?: boolean;\n}\n\nexport class Budget {\n readonly limit: number;\n readonly headroom: number;\n readonly soft: boolean;\n private tokens = 0;\n private unknownCalls = 0;\n\n constructor(config: BudgetConfig) {\n this.limit = config.limit;\n this.headroom = config.headroom ?? 0;\n this.soft = config.soft ?? false;\n }\n\n /** Record consumed tokens. Non-finite or non-positive values are ignored. */\n add(tokens: number): void {\n if (Number.isFinite(tokens) && tokens > 0) this.tokens += tokens;\n }\n\n addUsage(usage: UsageReceipt): void {\n if (usage.kind === 'unknown') {\n this.unknownCalls += 1;\n return;\n }\n this.add(usage.inputTokens + usage.outputTokens);\n }\n\n unknownUsageCalls(): number {\n return this.unknownCalls;\n }\n\n spent(): number {\n return this.tokens;\n }\n\n remaining(): number {\n return Math.max(0, this.limit - this.tokens);\n }\n\n /** True once the next call would breach the cap (accounting for headroom). */\n exceeded(): boolean {\n return this.tokens + this.headroom >= this.limit;\n }\n}\n\n/**\n * Guard an engine call against the run budget. No-op when no budget is set or\n * the cap is not yet reached. In `soft` mode a breach warns and continues; in\n * hard mode it throws a non-retryable BUDGET error that terminates the run.\n */\nexport function assertBudget(ctx: BudgetContext): void {\n const budget = ctx.budget;\n if (!budget) return;\n if (budget.unknownUsageCalls() > 0) {\n if (budget.soft) {\n ctx.log(\n `token usage is unknown for ${budget.unknownUsageCalls()} call(s) — continuing (soft)`,\n 'warn',\n );\n return;\n }\n throw new LoopError({\n code: 'BUDGET',\n phase: 'engine',\n message: `token budget cannot continue: usage is unknown for ${budget.unknownUsageCalls()} call(s)`,\n });\n }\n if (!budget.exceeded()) return;\n if (budget.soft) {\n ctx.log(\n `token budget reached (${budget.spent()}/${budget.limit}) — continuing (soft)`,\n 'warn',\n );\n return;\n }\n throw new LoopError({\n code: 'BUDGET',\n phase: 'engine',\n message: `token budget exhausted: ${budget.spent()}/${budget.limit} tokens spent`,\n });\n}\n","/**\n * AgentDef — a reusable, job-specific agent definition. The persona and methodology\n * (the prose: `system`, skill `instructions`) live in editable markdown files; the\n * structure and types live here in TypeScript. The `.ts` is the strongly-typed wrapper\n * around the `.md` — author the prompt as markdown, get type safety and validation in code.\n *\n * Adapted from an application-specific agent profile without duplicating the orchestration\n * that the runtime already provides: `dag` is the dispatcher, `conditions`/`quorum` are the\n * gates, and `Outcome` is the result channel. AgentDef captures who the agent is, what it\n * may touch, and how it works; `agentJob` resolves that contract into an engine request.\n */\n\nimport { readFileSync } from 'node:fs';\n\n/** A skill is a METHODOLOGY (how to do the work — TDD, writing-plans), not a worker.\n * An agent composes skills; a skill never dispatches an agent. */\nexport interface Skill {\n name: string;\n /** The methodology instructions — prepended to the agent's system when it applies them. */\n instructions: string;\n}\n\nexport type AgentTier =\n | 'worker'\n | 'reviewer'\n | 'lead'\n | 'specialist'\n | 'utility'\n | (string & {});\n\nexport type AgentSkillRef = string | Skill;\n\nexport interface AgentOutputContract {\n /** Stable output name, such as `patch`, `review`, or `test-report`. */\n name: string;\n description?: string;\n /** Optional structured schema owned by the loop author. The runtime stores it, it does not interpret it. */\n schema?: unknown;\n}\n\nexport interface AgentFailureMode {\n mode: string;\n recovery: string;\n detection?: string;\n severity?: 'block' | 'should-fix' | 'nice-to-have' | (string & {});\n}\n\nexport interface AgentDef {\n /** Identity (also the default job label). */\n name: string;\n /** What and why — for humans, docs, and package discovery. */\n description?: string;\n /** The system prompt: who the agent is and how it works. Use `fromFile('x.md')`. */\n system: string;\n /** Model id; omitted = inherit the run default. */\n model?: string;\n /** Allowed tool names — the permission boundary. */\n tools?: string[];\n /**\n * Mark this agent a leaf: it may not spawn sub-agents / fan out (the engine disallows\n * the sub-agent tool). Use it to control where a branch of the graph bottoms out — to\n * stop a thorough agent from quietly expanding into a slow, expensive swarm.\n */\n leaf?: boolean;\n /** Contract tier for humans, describe output, and future discovery. No scheduling authority. */\n tier?: AgentTier;\n /** Structured job descriptions (not prose) — for discovery / docs. */\n capabilities?: string[];\n /** Structured outputs this agent is expected to produce. */\n outputs?: AgentOutputContract[];\n /** Methodologies the agent applies; their instructions are folded into the system. */\n skills?: Skill[];\n /** Skills the caller should supply before the turn. Metadata only unless also listed in `skills`. */\n requiresSkills?: AgentSkillRef[];\n /** Skills the agent is known to use. Metadata only unless also listed in `skills`. */\n usesSkills?: AgentSkillRef[];\n /** Named failure modes + their recovery — first-class contracts, not buried prose. */\n failureModes?: AgentFailureMode[];\n}\n\nexport interface AgentContractSummary {\n tier?: string;\n capabilities?: string[];\n outputs?: string[];\n requiresSkills?: string[];\n usesSkills?: string[];\n failureModes?: string[];\n}\n\n/** Read a markdown file as a string — for `system` or skill `instructions`. Pass an\n * absolute path, or `new URL('./x.md', import.meta.url)` for a path relative to the file. */\nexport function fromFile(path: string | URL): string {\n return readFileSync(path, 'utf8').trim();\n}\n\n/** Define a skill (a methodology). Identity + validation; strongly typed. */\nexport function defineSkill(skill: Skill): Skill {\n if (!skill.name) throw new Error('defineSkill: `name` is required');\n if (!skill.instructions?.trim()) throw new Error(`defineSkill \"${skill.name}\": empty instructions`);\n return skill;\n}\n\nfunction skillRefName(ref: AgentSkillRef): string {\n return typeof ref === 'string' ? ref : ref.name;\n}\n\nfunction validateName(value: string | undefined, label: string): void {\n if (!value?.trim()) throw new Error(`${label}: \\`name\\` is required`);\n}\n\nfunction validateSkillRef(ref: AgentSkillRef, label: string): void {\n if (typeof ref === 'string') {\n if (!ref.trim()) throw new Error(`${label}: empty skill name`);\n return;\n }\n defineSkill(ref);\n}\n\n/** Define an agent. Identity + validation; strongly typed (the wrapper around the md). */\nexport function defineAgent(def: AgentDef): AgentDef {\n if (!def.name) throw new Error('defineAgent: `name` is required');\n if (!def.system?.trim()) throw new Error(`defineAgent \"${def.name}\": empty system prompt`);\n def.skills?.forEach((s) => defineSkill(s));\n def.requiresSkills?.forEach((s) =>\n validateSkillRef(s, `defineAgent \"${def.name}\" requiresSkills`),\n );\n def.usesSkills?.forEach((s) =>\n validateSkillRef(s, `defineAgent \"${def.name}\" usesSkills`),\n );\n def.outputs?.forEach((o) =>\n validateName(o.name, `defineAgent \"${def.name}\" outputs`),\n );\n def.failureModes?.forEach((f) => {\n if (!f.mode?.trim())\n throw new Error(`defineAgent \"${def.name}\" failureModes: \\`mode\\` is required`);\n if (!f.recovery?.trim())\n throw new Error(`defineAgent \"${def.name}\" failureModes \"${f.mode}\": \\`recovery\\` is required`);\n });\n return def;\n}\n\nexport function agentContract(agent: AgentDef | undefined): AgentContractSummary | undefined {\n if (!agent) return undefined;\n const summary: AgentContractSummary = {};\n if (agent.tier) summary.tier = agent.tier;\n if (agent.capabilities?.length) summary.capabilities = [...agent.capabilities];\n if (agent.outputs?.length) summary.outputs = agent.outputs.map((o) => o.name);\n if (agent.requiresSkills?.length)\n summary.requiresSkills = agent.requiresSkills.map(skillRefName);\n if (agent.usesSkills?.length)\n summary.usesSkills = agent.usesSkills.map(skillRefName);\n if (agent.failureModes?.length)\n summary.failureModes = agent.failureModes.map((f) => f.mode);\n return Object.keys(summary).length ? summary : undefined;\n}\n\n/**\n * Resolve an agent's system prompt, folding in its skills' methodologies. This is what\n * `agentJob` hands the engine as `system`.\n */\nexport function resolveSystem(agent: AgentDef): string {\n if (!agent.skills?.length) return agent.system;\n const methods = agent.skills\n .map((s) => `### ${s.name}\\n\\n${s.instructions.trim()}`)\n .join('\\n\\n');\n return `${agent.system.trim()}\\n\\n## Methodologies you apply\\n\\n${methods}`;\n}\n","/**\n * Shared text helpers, so the same trim/truncate logic isn't re-implemented\n * (subtly differently) across modules.\n */\n\n/** Collapse all runs of whitespace to single spaces, and trim. */\nexport function oneLine(text: string): string {\n return text.replace(/\\s+/g, ' ').trim();\n}\n\n/** Truncate to `max` chars, appending a `\\n…` marker when it overflows. */\nexport function truncate(s: string, max: number): string {\n if (s.length <= max) return s;\n const marker = max > 1 ? '\\n…' : '…'.slice(0, Math.max(0, max));\n return `${s.slice(0, Math.max(0, max - marker.length)).trimEnd()}${marker}`;\n}\n","import type { AgentRequest, AgentResult } from '../engines/engine.js';\nimport { scrubCapture } from './redact.js';\nimport type { JobContext } from './types.js';\n\nfunction leafId(ctx: JobContext, label: string): string {\n const raw = [...ctx.path, label, String(ctx.iteration)].join('/');\n return (\n raw.replace(/[^A-Za-z0-9._/-]+/g, '-').replace(/(^-+|-+$)/g, '') ||\n 'leaf'\n );\n}\n\nexport function attemptRequestMeta(\n ctx: JobContext,\n label: string,\n): AgentRequest['attempt'] {\n return {\n leaf: true,\n runId: ctx.runId,\n leafId: leafId(ctx, label),\n path: [...ctx.path],\n label,\n iteration: ctx.iteration,\n };\n}\n\n/** Surface a completed result's later transport failure through run logs. */\nexport function logEngineTransportFailure(\n ctx: JobContext,\n result: Pick<AgentResult, 'transportFailure'>,\n env?: Record<string, string>,\n): void {\n if (!result.transportFailure) return;\n ctx.log(scrubCapture(result.transportFailure.message, env, 1000), 'warn');\n}\n","/**\n * Conditions answer a yes/no question against the run context and the latest\n * body outcome. They power a loop's `start`, `until`, and `stopOn` gates.\n *\n * Two flavours, same type:\n * - deterministic (`predicate`, `bodyPassed`, `maxConfidence`)\n * - agent-validated (`agentCheck`): a model returns a verdict + confidence,\n * and the gate opens only above a threshold.\n *\n * `gateJob` lifts any Condition into a `Job`, so a reviewer can be expressed\n * as a condition and still slot into `loop({ review })`.\n */\n\nimport type {\n Condition,\n ConditionInput,\n ConditionResult,\n Outcome,\n RawPredicate,\n Job,\n JobContext,\n} from './types.js';\nimport type { EngineRef } from '../engines/engine.js';\nimport { isInfrastructureError, LoopError } from './errors.js';\nimport { resolveEnv } from './env-overlay.js';\nimport { jobMeta, setLabel, setMeta } from './describe.js';\nimport { assertBudget } from './budget.js';\nimport { resolveSystem, type AgentDef } from './agent.js';\nimport { truncate } from './text.js';\nimport { redactSecrets, redactEnvValues, scrubCapture } from './redact.js';\nimport {\n attemptRequestMeta,\n logEngineTransportFailure,\n} from './engine-meta.js';\nimport { requireFinalResultText } from '../runtime/result-parts.js';\nimport { processText, runRuntimeProcess } from './process.js';\n\nconst COMMAND_FAILURE_TAIL_MAX = 3000;\nconst COMMAND_FAILURE_TAIL_MARKER = '… [output truncated]\\n';\n\nfunction commandFailureTail(\n text: string,\n env: Record<string, string> | undefined,\n): string {\n const scrubbed = scrubCapture(text, env);\n if (scrubbed.length <= COMMAND_FAILURE_TAIL_MAX) return scrubbed;\n return (\n COMMAND_FAILURE_TAIL_MARKER +\n scrubbed.slice(\n -(COMMAND_FAILURE_TAIL_MAX - COMMAND_FAILURE_TAIL_MARKER.length),\n )\n );\n}\n\n/**\n * Coerce any `ConditionInput` — a `Condition`, a bare predicate, or an array\n * mixing both — into the single `Condition` primitive. This is what lets\n * `until`/`start`/`stopOn` accept one or many items of either flavour.\n *\n * Arrays default to `all` (every item must hold); pass `'any'` for or-semantics.\n */\nexport function toCondition(\n input: ConditionInput,\n combine: 'all' | 'any' = 'all',\n): Condition {\n if (Array.isArray(input)) {\n const conds = input.map((i) => toCondition(i, combine));\n return combine === 'any' ? any(...conds) : all(...conds);\n }\n return coerceOne(input);\n}\n\ntype ConditionPreparation = (\n ctx: JobContext,\n) => Condition | Promise<Condition>;\n\nconst conditionPreparations = new WeakMap<Function, ConditionPreparation>();\n\n/** Internal lifecycle hook for conditions that need state from loop entry. */\nexport function withConditionPreparation(\n condition: Condition,\n prepare: ConditionPreparation,\n): Condition {\n conditionPreparations.set(condition, prepare);\n return condition;\n}\n\n/** Prepare a condition tree once for one loop invocation. */\nexport async function prepareCondition(\n input: ConditionInput,\n ctx: JobContext,\n combine: 'all' | 'any' = 'all',\n): Promise<Condition> {\n if (Array.isArray(input)) {\n const prepared = await Promise.all(\n input.map((item) => prepareCondition(item, ctx, combine)),\n );\n return combine === 'any' ? any(...prepared) : all(...prepared);\n }\n const prepare = conditionPreparations.get(input);\n return prepare ? prepare(ctx) : toCondition(input, combine);\n}\n\n/**\n * A single function input is ambiguous at the type level (a `Condition` and a\n * `RawPredicate` are both 2-arg functions), so we disambiguate at call time by\n * inspecting the return value: a boolean is a predicate, a `{met}` object is a\n * full condition result.\n */\nfunction coerceOne(fn: Condition | RawPredicate): Condition {\n return async (ctx, last) => {\n const r = await (fn as (c: JobContext, l: Outcome | undefined) => unknown)(\n ctx,\n last,\n );\n if (typeof r === 'boolean') {\n return { met: r, reason: `predicate: ${r}` };\n }\n if (r && typeof r === 'object' && 'met' in r) {\n const res = r as { met: unknown };\n if (typeof res.met !== 'boolean') {\n throw new LoopError({\n code: 'VALIDATION',\n message: `condition returned a non-boolean \"met\": ${String(res.met)}`,\n });\n }\n return r as ConditionResult;\n }\n return { met: Boolean(r), reason: `coerced: ${String(r)}` };\n };\n}\n\n/** Deterministic predicate over context + last outcome. */\nexport function predicate(\n fn: (\n ctx: JobContext,\n last: Outcome | undefined,\n ) => boolean | Promise<boolean>,\n reason = 'predicate',\n): Condition {\n return async (ctx, last) => {\n const met = await fn(ctx, last);\n return { met, reason: met ? `${reason}: true` : `${reason}: false` };\n };\n}\n\n/** Met when the most recent body outcome passed. */\nexport function bodyPassed(): Condition {\n return async (_ctx, last) => ({\n met: last?.status === 'pass',\n confidence: last?.confidence,\n reason: `last body status = ${last?.status ?? 'none'}`,\n });\n}\n\n/** Met when the last outcome carries confidence at or above `threshold`. */\nexport function minConfidence(threshold: number): Condition {\n return async (_ctx, last) => {\n const c = last?.confidence ?? 0;\n return {\n met: c >= threshold,\n confidence: c,\n reason: `confidence ${c.toFixed(2)} ${c >= threshold ? '>=' : '<'} ${threshold}`,\n };\n };\n}\n\n/**\n * Deterministic gate that runs a shell command and is met on exit code 0. This\n * is the deterministic convergence signal for coding loop jobs: pair it with an\n * `agentCheck` in an `until` array so the loop stops only when the tests ACTUALLY\n * pass AND a judge agrees the work matches intent, never on a model's self-report\n * alone.\n * Runs in `cwd` (default: the process working dir), inherits the run's abort\n * signal, and never throws (a spawn failure counts as \"not met\"). A command's\n * `timeoutMs` is explicit: node/agent turn timeouts do not become hard shell\n * kills for deterministic gates.\n * `opts.env` pins vars for this one gate command; it is the most specific\n * layer, over any `withEnv` overlay and the running environment's vars.\n * `opts.captureOutput` appends a scrubbed, bounded combined-output tail to a\n * failed command's reason. The separate evidence output remains unchanged.\n */\nexport function commandSucceeds(\n command: string,\n args: string[] = [],\n opts: {\n cwd?: string;\n timeoutMs?: number;\n env?: Record<string, string>;\n captureOutput?: boolean;\n } = {},\n): Condition {\n return setLabel(async (ctx) => {\n try {\n const env = resolveEnv(ctx, opts.env);\n const r = await runRuntimeProcess({\n executable: command,\n args,\n cwd: opts.cwd ?? ctx.workspace.dir,\n timeoutMs: opts.timeoutMs,\n signal: ctx.signal,\n env,\n });\n const stdout = processText(r.stdout);\n const stderr = processText(r.stderr);\n const all = `${stdout}${stderr}`;\n if (r.exitCode === 0 && !r.timedOut) {\n return { met: true, reason: `\\`${command}\\` exited 0` };\n }\n const baseReason = r.timedOut\n ? `\\`${command}\\` timed out after ${opts.timeoutMs} ms`\n : `\\`${command}\\` exited ${r.exitCode ?? '?'}`;\n const tail = opts.captureOutput\n ? commandFailureTail(all, env)\n : '';\n return {\n met: false,\n reason: tail\n ? `${baseReason}\\n\\ncommand output (tail):\\n${tail}`\n : baseReason,\n // The evidence behind the failure, in the same shape `reviewContext`\n // gives a judge. Scrubbed (`scrubCapture`) because it flows into JSONL\n // event records — a failing command often echoes its config, and a\n // pinned credential's shape is unknowable to pattern scrubbing.\n output:\n `exit: ${r.exitCode ?? '(command did not run)'}\\n\\n` +\n `stdout:\\n${scrubCapture(stdout, env, 4000)}\\n\\n` +\n `stderr:\\n${scrubCapture(stderr, env, 4000)}`,\n };\n } catch (e) {\n return {\n met: false,\n reason: `\\`${command}\\` failed to run: ${e instanceof Error ? e.message : String(e)}`,\n };\n }\n }, `${command}${args.length ? ` ${args.join(' ')}` : ''}`);\n}\n\nexport const always: Condition = async () => ({ met: true, reason: 'always' });\nexport const never: Condition = async () => ({ met: false, reason: 'never' });\n\n// ── Combinators ───────────────────────────────────────────────────────────\n\n/** Inverts a condition. The inner result's `output` is carried through unchanged. */\nexport function not(c: ConditionInput): Condition {\n const cond = toCondition(c);\n const condition: Condition = async (ctx, last) => {\n const r = await cond(ctx, last);\n return {\n met: !r.met,\n confidence: r.confidence,\n reason: `not(${r.reason})`,\n output: r.output,\n };\n };\n setMeta(condition, { kind: 'condition', name: 'not', inputs: [c] });\n return withConditionPreparation(condition, async (ctx) =>\n not(await prepareCondition(c, ctx)),\n );\n}\n\n/**\n * Met only when every input holds (short-circuits on the first failure).\n * On failure the FAILING item's `output` is carried; a success carries none.\n */\nexport function all(...inputs: ConditionInput[]): Condition {\n const conds = inputs.map((i) => toCondition(i));\n const condition: Condition = async (ctx, last) => {\n const results: ConditionResult[] = [];\n for (const c of conds) {\n const r = await c(ctx, last);\n results.push(r);\n if (!r.met)\n return {\n met: false,\n reason: `all -> failed: ${r.reason}`,\n output: r.output,\n };\n }\n return {\n met: true,\n reason: `all(${results.map((r) => r.reason).join(' & ')})`,\n };\n };\n setMeta(condition, { kind: 'condition', name: 'all', inputs });\n return withConditionPreparation(condition, async (ctx) =>\n all(...(await Promise.all(inputs.map((input) => prepareCondition(input, ctx))))),\n );\n}\n\n/**\n * Met when any input holds (short-circuits on the first success).\n * On success THAT item's `output` is carried; on failure, the first defined\n * `output` among the collected failures.\n */\nexport function any(...inputs: ConditionInput[]): Condition {\n const conds = inputs.map((i) => toCondition(i));\n const condition: Condition = async (ctx, last) => {\n const reasons: string[] = [];\n let output: string | undefined;\n for (const c of conds) {\n const r = await c(ctx, last);\n reasons.push(r.reason);\n if (r.met)\n return {\n met: true,\n confidence: r.confidence,\n reason: `any -> ${r.reason}`,\n output: r.output,\n };\n output ??= r.output;\n }\n return { met: false, reason: `any(${reasons.join(' | ')})`, output };\n };\n setMeta(condition, { kind: 'condition', name: 'any', inputs });\n return withConditionPreparation(condition, async (ctx) =>\n any(...(await Promise.all(inputs.map((input) => prepareCondition(input, ctx))))),\n );\n}\n\n/**\n * Met when at least `k` of the inputs hold. A hedge against a single agent\n * judge's self-reported confidence: ask N independent judges and require a\n * quorum (e.g. `quorum(2, j, j, j)`). All inputs run in parallel; a judge that\n * throws counts as a \"no\" vote rather than sinking the whole gate. Each input\n * may hit a model, so size N with cost in mind. Reported confidence is the mean\n * of the holding inputs' confidences. On failure the first defined `output`\n * among the non-holding voters is carried; a success carries none.\n */\nexport function quorum(k: number, ...inputs: ConditionInput[]): Condition {\n if (k < 1 || k > inputs.length)\n throw new LoopError({\n code: 'CONFIG',\n message: `quorum requires 1 <= k <= inputs (got k=${k}, n=${inputs.length})`,\n });\n const conds = inputs.map((i) => toCondition(i));\n const condition: Condition = setLabel(async (ctx, last) => {\n const settled = await Promise.allSettled(conds.map((c) => c(ctx, last)));\n const engineErrors = settled\n .filter(\n (s): s is PromiseRejectedResult =>\n s.status === 'rejected' && isInfrastructureError(s.reason),\n )\n .map((s) => s.reason);\n const results: ConditionResult[] = settled.map((s) => {\n if (s.status === 'fulfilled') return s.value;\n return {\n met: false,\n reason: `judge errored: ${s.reason instanceof Error ? s.reason.message : String(s.reason)}`,\n };\n });\n const held = results.filter((r) => r.met);\n const output = results.find((r) => !r.met && r.output !== undefined)?.output;\n if (held.length < k && held.length + engineErrors.length >= k) {\n const first = engineErrors[0]!;\n if (!output) throw first;\n throw new LoopError({\n code: first.code,\n message: first.message,\n phase: first.phase,\n path: first.path,\n iteration: first.iteration,\n retryable: first.retryable,\n retryAfterMs: first.retryAfterMs,\n resetAt: first.resetAt,\n cause: { error: first, output },\n });\n }\n const confs = held\n .map((r) => r.confidence)\n .filter((c): c is number => typeof c === 'number');\n const confidence = confs.length\n ? confs.reduce((a, b) => a + b, 0) / confs.length\n : undefined;\n const met = held.length >= k;\n return {\n met,\n confidence,\n reason: `quorum ${held.length}/${inputs.length} held (need ${k})`,\n output: met ? undefined : output,\n };\n }, `quorum ${k}/${inputs.length}`);\n setMeta(condition, { kind: 'condition', name: 'quorum', inputs });\n return withConditionPreparation(condition, async (ctx) =>\n quorum(\n k,\n ...(await Promise.all(inputs.map((input) => prepareCondition(input, ctx)))),\n ),\n );\n}\n\n// ── Agent-validated condition ──────────────────────────────────────────────\n\nexport interface AgentCheckConfig {\n /** The yes/no question the validator must answer. */\n question: string;\n /** Open the gate only at/above this confidence (0..1). Default 0.8. */\n threshold?: number;\n /** Cheap model recommended. A bare string, provider-agnostic. */\n model?: string;\n /**\n * Give the judge a persona — an `AgentDef` whose resolved system (persona +\n * skills) is prepended to the validator's scoring instructions, so a reviewer\n * can be a named specialist (e.g. an adversarial reviewer) instead of an\n * anonymous yes/no. The validator's output contract stays authoritative (it\n * comes last); `model` falls back to the agent's `model`. Mirrors `agentJob`.\n */\n agent?: AgentDef;\n /** Engine for validation: a registered name, your own `Engine`, or default. */\n engine?: EngineRef;\n /**\n * Working directory for the judge's engine turn — a tool-using judge may\n * need the workspace to read the artifact it is ruling on. Absent means the\n * engine's default; deliberately NOT defaulted to the loop workspace.\n */\n cwd?: string;\n /**\n * Time cap on the judge turn, passed through to the engine. The\n * anthropic-api engine ignores it.\n */\n timeoutMs?: number;\n /**\n * What the validator sees. By default: the last outcome's summary/data plus\n * the shared state. Override to feed something bespoke; may be async, since a\n * judge often gathers evidence (read the artifact, ground on the history, run a\n * probe) before ruling. Give it the thing it is meant to be reviewing.\n */\n context?: (ctx: JobContext, last: Outcome | undefined) => string | Promise<string>;\n maxTokens?: number;\n /**\n * Score these named dimensions (0..1 each) instead of a single yes/no\n * confidence. The gate opens when the GEOMETRIC MEAN of the scores is\n * >= `threshold`, so one weak dimension drags the whole verdict down. Stricter\n * than a lone self-reported number, e.g.\n * `['intent match', 'evidence quality', 'outcome coherence']`.\n */\n dimensions?: string[];\n /**\n * Parse a free-form review that closes with `<confidence>N%</confidence>`\n * (N is 0-100) instead of forcing a JSON shape. The gate opens at/above\n * `threshold`; the reviewer's prose before the tag becomes the gate's `reason`,\n * so a failing review carries its findings to the next iteration (`lastReview`).\n * More robust than scraping JSON, and the natural fit for a report-then-rate\n * reviewer persona. Takes precedence over `dimensions`.\n */\n confidenceTag?: boolean;\n /**\n * Cap on the findings excerpt embedded in the `confidenceTag` gate `reason`.\n * Default 280. The FULL findings always travel via `ConditionResult.output`.\n */\n maxReasonChars?: number;\n}\n\ninterface Verdict {\n verdict: 'yes' | 'no';\n confidence: number;\n reason: string;\n}\n\nfunction defaultContext(ctx: JobContext, last: Outcome | undefined): string {\n const parts: string[] = [];\n if (last?.summary) parts.push(`Last outcome summary: ${last.summary}`);\n if (last?.status) parts.push(`Last outcome status: ${last.status}`);\n if (last?.data !== undefined)\n parts.push(`Last outcome data: ${safeJson(last.data)}`);\n const stateKeys = Object.keys(ctx.state);\n if (stateKeys.length) parts.push(`Shared state: ${safeJson(ctx.state)}`);\n return parts.join('\\n') || '(no prior context)';\n}\n\nfunction safeJson(value: unknown, limit = 4000): string {\n try {\n const s = JSON.stringify(value, null, 2) ?? String(value);\n return s.length > limit ? `${s.slice(0, limit)}… (truncated)` : s;\n } catch {\n return String(value);\n }\n}\n\n/** Yield each top-level *balanced* JSON object in the text (strings/escapes aware). */\nfunction* balancedObjects(text: string): Generator<string> {\n let cursor = 0;\n while (cursor < text.length) {\n const start = text.indexOf('{', cursor);\n if (start === -1) return;\n let depth = 0;\n let inString = false;\n let escaped = false;\n let end = -1;\n for (let i = start; i < text.length; i += 1) {\n const ch = text[i]!;\n if (inString) {\n if (escaped) escaped = false;\n else if (ch === '\\\\') escaped = true;\n else if (ch === '\"') inString = false;\n continue;\n }\n if (ch === '\"') inString = true;\n else if (ch === '{') depth += 1;\n else if (ch === '}' && --depth === 0) {\n end = i;\n break;\n }\n }\n if (end === -1) return; // unbalanced tail — nothing more to find\n yield text.slice(start, end + 1);\n cursor = end + 1;\n }\n}\n\nfunction toVerdict(obj: Record<string, unknown>): Verdict {\n const verdict = obj.verdict === 'yes' ? 'yes' : 'no';\n // Confidence is mandatory (the validator system prompt demands it). A missing\n // or non-numeric confidence is a low-quality verdict, NOT an implicit \"fully\n // confident\" — so it defaults to 0 and a thresholded gate fails closed. For a\n // convergence/quality gate a false \"done\" (opening when the work isn't really\n // finished) is worse than one more iteration, so the sceptical default is the\n // correct one; the strengthened prompt keeps a genuine omission rare.\n const confidence =\n typeof obj.confidence === 'number' ? clamp01(obj.confidence) : 0;\n const reason =\n typeof obj.reason === 'string' ? obj.reason : '(no reason given)';\n return { verdict, confidence, reason };\n}\n\n/**\n * Pull a verdict from a model reply. Models often wrap JSON in prose or restate\n * the input as a first object, so we scan every balanced object and prefer the\n * one that actually carries a `verdict` key (falling back to the first object).\n */\nfunction parseVerdict(text: string): Verdict {\n let fallback: Record<string, unknown> | undefined;\n for (const candidate of balancedObjects(text)) {\n let parsed: unknown;\n try {\n parsed = JSON.parse(candidate);\n } catch {\n continue;\n }\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))\n continue;\n const obj = parsed as Record<string, unknown>;\n if ('verdict' in obj) return toVerdict(obj);\n fallback ??= obj;\n }\n if (fallback) return toVerdict(fallback);\n throw new LoopError({\n code: 'VALIDATION',\n message: `validator returned no JSON verdict: ${text.slice(0, 200)}`,\n });\n}\n\nfunction clamp01(n: number): number {\n return Number.isFinite(n) ? Math.min(1, Math.max(0, n)) : 0;\n}\n\nconst VALIDATOR_SYSTEM =\n 'You are a strict, sceptical evaluator. You judge whether a stated condition ' +\n 'is truly met given the evidence. Do not be generous. The `confidence` field ' +\n 'is MANDATORY: always include a number in 0..1 for how sure you are, and when ' +\n 'in doubt give a LOW number — never omit it (an omitted confidence is treated ' +\n 'as zero). Respond with ONLY a single JSON object and no other text:\\n' +\n '{\"verdict\":\"yes\"|\"no\",\"confidence\":<number 0..1>,\"reason\":\"<one sentence>\"}';\n\nconst CONFIDENCE_TAG_SYSTEM =\n 'You are a rigorous, report-only reviewer. Do not edit anything and do not imply you ' +\n 'will. Assess the evidence against the stated condition, listing each concern tied to a ' +\n 'concrete location and a concrete failure scenario (not a vibe). Judge against the stated ' +\n 'contract, not an ideal: do not penalise the absence of hardening the contract does not ' +\n 'require, and when the evidence meets the contract and you cannot name a concrete fault, ' +\n 'say so plainly. Close with a single final line and nothing after it: ' +\n '`<confidence>N%</confidence>` — N is an integer 0-100, where 100 means you found no ' +\n 'genuine contract violation or real bug, and below 100 means at least one concrete, ' +\n 'addressable concern is open.';\n\n/**\n * Pull the last `<confidence>N%</confidence>` from a review. The prose before the\n * tag is the findings, carried into the gate `reason` so a failing review delivers\n * its concerns to the next iteration. `N` may be a percent (0-100) or a fraction.\n */\nfunction parseConfidenceTag(\n text: string,\n): { confidence: number; findings: string } | null {\n const re = /<confidence>\\s*([0-9]+(?:\\.[0-9]+)?)\\s*%?\\s*<\\/confidence>/gi;\n let m: RegExpExecArray | null;\n let last: RegExpExecArray | null = null;\n while ((m = re.exec(text)) !== null) last = m;\n if (!last) return null;\n let n = parseFloat(last[1]!);\n if (n > 1) n = n / 100; // percent → fraction\n return { confidence: clamp01(n), findings: text.slice(0, last.index).trim() };\n}\n\n/** System prompt for the multi-dimension scoring variant of `agentCheck`. */\nfunction validatorScoreSystem(dimensions: string[]): string {\n return (\n 'You are a strict, sceptical evaluator. Score how well the condition is met ' +\n 'on EACH named dimension, from 0 (not at all) to 1 (fully). Do not be ' +\n 'generous; when in doubt score low. Respond with ONLY a single JSON object ' +\n 'and no other text:\\n' +\n `{\"scores\":{${dimensions.map((d) => `\"${d}\":<0..1>`).join(',')}},\"reason\":\"<one sentence>\"}`\n );\n}\n\n/** Geometric mean — any zero (a fully-failed dimension) drags the result to 0. */\nfunction geometricMean(values: number[]): number {\n if (!values.length) return 0;\n if (values.some((v) => v <= 0)) return 0;\n return Math.exp(values.reduce((a, b) => a + Math.log(b), 0) / values.length);\n}\n\ninterface ScoreVerdict {\n score: number;\n scores: Record<string, number>;\n reason: string;\n}\n\n/** Cap on a judge reply / findings carried in `ConditionResult.output`. */\nconst JUDGE_OUTPUT_CAP = 20_000;\n\n/**\n * Scrub + cap a judge's (already env-scrubbed) reply before it becomes\n * `ConditionResult.output`, which flows into JSONL event records.\n */\nfunction judgeOutput(text: string): string {\n return scrubCapture(text, undefined, JUDGE_OUTPUT_CAP);\n}\n\n/** Pull per-dimension scores from a model reply; any missing dimension is 0. */\nfunction parseScores(text: string, dimensions: string[]): ScoreVerdict {\n for (const candidate of balancedObjects(text)) {\n let parsed: unknown;\n try {\n parsed = JSON.parse(candidate);\n } catch {\n continue;\n }\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))\n continue;\n const raw = (parsed as Record<string, unknown>).scores;\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) continue;\n const scoreObj = raw as Record<string, unknown>;\n const scores: Record<string, number> = {};\n for (const d of dimensions) {\n const val = scoreObj[d];\n scores[d] = typeof val === 'number' ? clamp01(val) : 0;\n }\n const reasonField = (parsed as Record<string, unknown>).reason;\n return {\n score: geometricMean(dimensions.map((d) => scores[d]!)),\n scores,\n reason:\n typeof reasonField === 'string' ? reasonField : '(no reason given)',\n };\n }\n throw new LoopError({\n code: 'VALIDATION',\n message: `validator returned no JSON scores: ${text.slice(0, 200)}`,\n });\n}\n\n/**\n * A Condition decided by a (preferably cheap) model. With a single yes/no\n * question the gate opens when the verdict is \"yes\" AND confidence >= threshold.\n * With `dimensions`, the model scores each dimension 0..1 and the gate opens\n * when their geometric mean >= threshold, stricter than a single number.\n */\nexport function agentCheck(config: AgentCheckConfig): Condition {\n const threshold = config.threshold ?? 0.8;\n const confidenceTag = config.confidenceTag === true;\n const maxReasonChars = config.maxReasonChars ?? 280;\n const dimensions =\n !confidenceTag && config.dimensions?.length ? config.dimensions : undefined;\n return setLabel(async (ctx, last) => {\n const engine = ctx.resolveEngine(config.engine);\n const contextText = await (config.context ?? defaultContext)(ctx, last);\n const acceptanceCriterion = ctx.reviewerGate\n ? `\\n\\nACCEPTANCE CRITERION:\\n${ctx.reviewerGate}`\n : '';\n const closing = confidenceTag\n ? 'Write your review now, then close with `<confidence>N%</confidence>`.'\n : `Return the JSON ${dimensions ? 'scores' : 'verdict'} now.`;\n const prompt =\n `CONDITION TO EVALUATE:\\n${config.question}\\n\\n` +\n `EVIDENCE:\\n${contextText}${acceptanceCriterion}\\n\\n` +\n closing;\n\n // The validator's output contract stays authoritative (last); an optional\n // agent persona is prepended so the judge has a stance, not just a question.\n const baseSystem = confidenceTag\n ? CONFIDENCE_TAG_SYSTEM\n : dimensions\n ? validatorScoreSystem(dimensions)\n : VALIDATOR_SYSTEM;\n const system = config.agent ? `${resolveSystem(config.agent)}\\n\\n${baseSystem}` : baseSystem;\n\n // A tool-using judge needs the same pinned vars as the work it rules on.\n const env = resolveEnv(ctx);\n let result;\n try {\n assertBudget(ctx); // count validator calls against the run's token budget\n result = await engine.run(\n {\n prompt,\n system,\n model: config.model ?? config.agent?.model,\n // A report-then-rate reviewer needs room for findings before the tag.\n maxTokens: config.maxTokens ?? (confidenceTag ? 2048 : 512),\n cwd: config.cwd,\n timeoutMs: config.timeoutMs ?? ctx.timeoutMs,\n timeoutGraceMs: ctx.timeoutGraceMs,\n env,\n leaf: true,\n attempt: attemptRequestMeta(ctx, config.agent?.name ?? 'agent-check'),\n },\n (e) => {\n if (e.type === 'usage') {\n ctx.emit({\n kind: 'engine:usage',\n ts: Date.now(),\n path: [...ctx.path],\n model: e.model,\n usage: e.usage,\n });\n }\n },\n ctx.signal,\n );\n } catch (e) {\n // phase is left to the caller (loop.ts) — this condition may be a\n // start/until/stopOn/review gate and cannot know which.\n throw LoopError.from(e, { code: 'ENGINE', path: ctx.path });\n }\n logEngineTransportFailure(ctx, result, env);\n\n // A judge's reply flows into `reason`/`output` (persisted records), and a\n // tool-using judge may echo the pinned vars it was handed — scrub their\n // exact values once, up front, so every downstream path is clean.\n const text = redactEnvValues(requireFinalResultText(result), env);\n\n if (confidenceTag) {\n const parsed = parseConfidenceTag(text);\n if (!parsed)\n return {\n met: false,\n confidence: 0,\n reason: `no <confidence> tag: ${redactSecrets(text).slice(0, 140)}`,\n output: judgeOutput(text),\n };\n const pct = Math.round(parsed.confidence * 100);\n const need = Math.round(threshold * 100);\n // `reason` flows into the same persisted records as `output`, so it gets\n // the same scrub — redacted BEFORE excerpting, so a secret split at the\n // cut cannot survive.\n const findings = redactSecrets(parsed.findings);\n return {\n met: parsed.confidence >= threshold,\n confidence: parsed.confidence,\n reason: `confidence ${pct}% (need ${need}%)${findings ? ` — ${findings.slice(0, maxReasonChars)}` : ''}`,\n // The FULL findings — what lets a failing check brief a fix-up body\n // without re-running the judge. A tag-only reply has no evidence to carry.\n output: findings ? truncate(findings, JUDGE_OUTPUT_CAP) : undefined,\n };\n }\n\n if (dimensions) {\n let sv: ScoreVerdict;\n try {\n sv = parseScores(text, dimensions);\n } catch {\n return {\n met: false,\n confidence: 0,\n reason: `unparseable scores: ${redactSecrets(text).slice(0, 120)}`,\n output: judgeOutput(text),\n };\n }\n const detail = dimensions\n .map((d) => `${d}=${sv.scores[d]!.toFixed(2)}`)\n .join(', ');\n return {\n met: sv.score >= threshold,\n confidence: sv.score,\n // The judge's free-prose reason gets the same scrub as `output` — it\n // flows into the same persisted records.\n reason: `geo ${sv.score.toFixed(2)} (need ${threshold}) [${detail}] — ${redactSecrets(sv.reason)}`,\n output: judgeOutput(text),\n };\n }\n\n let v: Verdict;\n try {\n v = parseVerdict(text);\n } catch {\n // A flaky or malformed verdict must not crash the whole run; fail\n // sceptically (gate stays closed) and let the loop continue/exhaust.\n return {\n met: false,\n confidence: 0,\n reason: `unparseable verdict: ${redactSecrets(text).slice(0, 120)}`,\n output: judgeOutput(text),\n };\n }\n const met = v.verdict === 'yes' && v.confidence >= threshold;\n return {\n met,\n confidence: v.confidence,\n reason: `${v.verdict} @ ${v.confidence.toFixed(2)} (need ${threshold}) — ${redactSecrets(v.reason)}`,\n output: judgeOutput(text),\n };\n }, `judge \"${config.question}\" >=${threshold}`);\n}\n\n/**\n * Lift a Condition (or one-or-many `ConditionInput`) into a Job: `pass` when\n * met, `fail` otherwise. This is how a reviewer becomes a drop-in `review` job\n * (`gateJob('review', agentCheck(...))`). The condition's diagnostic `output`\n * rides `Outcome.data`, so it survives the Job boundary.\n */\nexport function gateJob(\n label: string,\n condition: ConditionInput,\n opts: {\n /**\n * The upstream node that owns the fix. When the condition is not met, the\n * outcome carries a revision request to that node with the condition's\n * evidence as the finding, so a red test suite goes straight back to the\n * step that must fix it, with the output in hand and no agent in between.\n * The enclosing `dag` routes it exactly as it routes a review panel's.\n */\n target?: string;\n } = {},\n): Job {\n const cond = toCondition(condition);\n return setMeta(async (ctx) => {\n ctx.emit({\n kind: 'job:start',\n ts: Date.now(),\n path: [...ctx.path],\n label,\n timeoutMs: ctx.timeoutMs,\n });\n const r = await cond(ctx, ctx.lastOutcome);\n ctx.emit({\n kind: 'condition:result',\n ts: Date.now(),\n path: [...ctx.path],\n label,\n iteration: ctx.iteration,\n result: r,\n });\n // Built here rather than through `revisionRequest`, which lives in\n // feedback.ts and imports this module; the shape is the public\n // `RevisionRequest`, with the rerun a targeted revision always has.\n const outcome: Outcome = !r.met && opts.target !== undefined\n ? {\n status: 'fail',\n confidence: r.confidence,\n summary: r.reason,\n data: r.output,\n revision: {\n target: opts.target,\n reason: r.reason,\n findings: [{ evidence: r.output ?? r.reason, severity: 'block' }],\n rerun: 'target-and-dependents',\n },\n }\n : {\n status: r.met ? 'pass' : 'fail',\n confidence: r.confidence,\n summary: r.reason,\n };\n if (r.output !== undefined && outcome.data === undefined) outcome.data = r.output;\n ctx.emit({\n kind: 'job:end',\n ts: Date.now(),\n path: [...ctx.path],\n label,\n outcome,\n });\n return outcome;\n }, { kind: 'gate', name: label });\n}\n\n/**\n * A command as a job: `pass` on exit 0, `fail` otherwise, with the command's\n * output as the evidence. Give the command as one string when no argument\n * needs quoting (`'pnpm test'`), or as an array, one argument per entry\n * (`['node', '--test', 'test/']`). `target` names the node that owns the fix,\n * exactly as `gateJob` does: a red run goes back there with the output as the\n * finding and no agent in between. `capture` (default true) appends the\n * output tail to the failure summary.\n */\nexport function commandJob(\n label: string,\n command: string | readonly string[],\n opts: {\n cwd?: string;\n timeoutMs?: number;\n env?: Record<string, string>;\n target?: string;\n capture?: boolean;\n } = {},\n): Job {\n const [executable, ...args] = splitCommand(command);\n return gateJob(\n label,\n commandSucceeds(executable, args, {\n ...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),\n ...(opts.timeoutMs !== undefined ? { timeoutMs: opts.timeoutMs } : {}),\n ...(opts.env !== undefined ? { env: opts.env } : {}),\n captureOutput: opts.capture ?? true,\n }),\n opts.target !== undefined ? { target: opts.target } : {},\n );\n}\n\nfunction splitCommand(command: string | readonly string[]): [string, ...string[]] {\n if (typeof command === 'string' && /[\"']/.test(command)) {\n throw new LoopError({\n code: 'VALIDATION',\n message: `commandJob: \"${command}\" has a quote in it; pass the command as an array, one argument per entry`,\n });\n }\n if (typeof command === 'string' && /[|&;<>$`()]/.test(command)) {\n throw new LoopError({\n code: 'VALIDATION',\n message: `commandJob: \"${command}\" has shell syntax in it, and nothing here runs through a shell; `\n + 'give one command as an array, one argument per entry, or run a script',\n });\n }\n const parts = typeof command === 'string' ? command.trim().split(/\\s+/) : [...command];\n const [executable, ...args] = parts;\n if (executable === undefined || executable === '') {\n throw new LoopError({ code: 'VALIDATION', message: 'commandJob needs a command to run' });\n }\n return [executable, ...args];\n}\n\nfunction needOutcome(ctx: JobContext, name: string, caller: string): Outcome {\n const outcome = ctx.needs?.[name];\n if (outcome === undefined) {\n throw new LoopError({\n code: 'VALIDATION',\n message: `${caller}(\"${name}\"): \"${name}\" is not a dependency of this node; add it to the node's needs`,\n });\n }\n return outcome;\n}\n\n/**\n * Met when the named dependency passed. For a node's `when`: the node runs\n * only on that path (`when: passed('size')`). A skipped dependency counts as\n * passed, as it does everywhere in a dag. A name the node does not `need` is\n * a configuration error, not a quiet false.\n */\nexport function passed(name: string): Condition {\n const cond: Condition = async (ctx) => {\n const outcome = needOutcome(ctx, name, 'passed');\n const met = outcome.status === 'pass';\n return { met, reason: `${name} ${outcome.status}` };\n };\n setMeta(cond, { kind: 'condition', name: 'passed', need: name });\n return setLabel(cond, `passed ${name}`);\n}\n\n/**\n * Met when the named dependency ran and failed: the other branch of `passed`.\n * A dependency that never got to decide (blocked by a failure upstream, or\n * aborted) meets neither, so a branch runs only on a decision. The deciding\n * node must be `optional: true`: a required node's failure blocks its\n * dependents before any `when` runs, so a branch on `failed` would never be\n * reached. `dag` refuses the graph at build time when it is not.\n */\nexport function failed(name: string): Condition {\n const cond: Condition = async (ctx) => {\n const outcome = needOutcome(ctx, name, 'failed');\n const met = outcome.status === 'fail';\n return { met, reason: `${name} ${outcome.status}` };\n };\n setMeta(cond, { kind: 'condition', name: 'failed', need: name });\n return setLabel(cond, `failed ${name}`);\n}\n\n/** One `passed(name)` or `failed(name)` found inside a condition input. */\nexport interface NeedDecision {\n readonly on: 'passed' | 'failed';\n readonly need: string;\n}\n\n/**\n * Every `passed(name)` and `failed(name)` a condition input requires: the\n * input itself, each item of an array, and each input of `all`, which carry\n * their inputs in their meta. `not`, `any` and `quorum` are not walked: a\n * branch composed with them can be met another way, so a `failed(x)` inside\n * one does not make the branch dead. The graph builder reads this to refuse\n * a branch that could never run.\n */\nexport function needDecisionsOf(input: ConditionInput): NeedDecision[] {\n if (Array.isArray(input)) return input.flatMap((item) => needDecisionsOf(item));\n if (typeof input !== 'function') return [];\n const meta = jobMeta(input as unknown as Job);\n if (meta?.kind !== 'condition') return [];\n if ((meta.name === 'passed' || meta.name === 'failed') && typeof meta.need === 'string') {\n return [{ on: meta.name, need: meta.need }];\n }\n if (meta.name === 'all' && Array.isArray(meta.inputs)) {\n return (meta.inputs as ConditionInput[]).flatMap((item) => needDecisionsOf(item));\n }\n return [];\n}\n","import pLimit from 'p-limit';\n\nexport const DEFAULT_FANOUT_CONCURRENCY = 4;\n\nexport async function mapWithConcurrency<T, R>(\n items: readonly T[],\n concurrency: number,\n fn: (item: T, index: number) => Promise<R>,\n): Promise<R[]> {\n const limit = pLimit(concurrency);\n return Promise.all(items.map((item, index) => limit(() => fn(item, index))));\n}\n","/** Local Git helpers used by workspace-aware jobs. */\n\nimport { createHash } from 'node:crypto';\nimport { mkdtempSync } from 'node:fs';\nimport { lstat, readFile, readlink, realpath } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { join, relative, resolve } from 'node:path';\nimport { processText, runRuntimeProcess } from './process.js';\n\ninterface GitOpts {\n cwd: string;\n signal?: AbortSignal;\n excludePaths?: string[];\n includePaths?: string[];\n}\n\nasync function git(\n args: string[],\n { cwd, signal }: GitOpts,\n input?: string,\n): Promise<{ stdout: string; exitCode: number }> {\n const r = await runRuntimeProcess({\n executable: 'git',\n args,\n cwd,\n signal,\n ...(input === undefined ? {} : { stdin: input }),\n });\n return {\n stdout: processText(r.stdout).replace(/\\r?\\n$/u, ''),\n exitCode: r.exitCode ?? 1,\n };\n}\n\n/** True when `cwd` is inside a git work tree. Never throws. */\nexport async function isRepo(opts: GitOpts): Promise<boolean> {\n try {\n const r = await git(['rev-parse', '--is-inside-work-tree'], opts);\n return r.exitCode === 0 && r.stdout.trim() === 'true';\n } catch {\n return false;\n }\n}\n\n/** The checked-out branch name, or undefined on a detached HEAD / non-repo. */\nexport async function currentBranch(opts: GitOpts): Promise<string | undefined> {\n const r = await git(['rev-parse', '--abbrev-ref', 'HEAD'], opts);\n if (r.exitCode !== 0) return undefined;\n const name = r.stdout.trim();\n return name && name !== 'HEAD' ? name : undefined;\n}\n\n/** The git worktree root containing `cwd`, or undefined outside a git repo. */\nexport async function gitRoot(opts: GitOpts): Promise<string | undefined> {\n const r = await git(['rev-parse', '--show-toplevel'], opts);\n return r.exitCode === 0 ? r.stdout.trim() || undefined : undefined;\n}\n\n/** The HEAD commit sha, or undefined when the branch has no commits yet. */\nexport async function headSha(opts: GitOpts): Promise<string | undefined> {\n const r = await git(['rev-parse', 'HEAD'], opts);\n return r.exitCode === 0 ? r.stdout.trim() || undefined : undefined;\n}\n\n/** Stage every change in the work tree (`git add -A`). */\nexport async function stageAll(opts: GitOpts): Promise<void> {\n await git(['add', '-A'], opts);\n}\n\n/** True when there is something staged to commit. */\nexport async function hasStagedChanges(opts: GitOpts): Promise<boolean> {\n // `diff --cached --quiet` exits 1 when the index differs from HEAD.\n const r = await git(['diff', '--cached', '--quiet'], opts);\n return r.exitCode === 1;\n}\n\n/** True when the work tree (staged or unstaged) has any change. */\nexport async function isDirty(opts: GitOpts): Promise<boolean> {\n const r = await git(['status', '--porcelain'], opts);\n return r.stdout.trim().length > 0;\n}\n\n/**\n * A content hash of the workspace's observable state: HEAD, every pending\n * tracked change (staged + unstaged, with content), the porcelain status, and\n * the CONTENT of untracked files (hashed by git itself, so a revisit to a\n * byte-identical tree fingerprints identically). Whole-workspace hashes omit\n * ignored files; `includePaths` observes ignored content explicitly selected\n * by the caller. Scoped hashes omit unrelated commits. This is the\n * deterministic evidence channel behind `noProgress`: two iterations with the\n * same fingerprint left the observed workspace in the same state. Returns\n * undefined outside a git work tree; the caller treats that channel as\n * absent, never as \"unchanged\". Never throws.\n */\nexport async function workspaceFingerprint(\n opts: GitOpts,\n): Promise<string | undefined> {\n try {\n if (!(await isRepo(opts))) return undefined;\n const excluded = (opts.excludePaths ?? [])\n .map((p) => relative(opts.cwd, resolve(opts.cwd, p)).replace(/\\\\/g, '/'))\n .filter((p) => p && !p.startsWith('..') && p !== '.');\n const included = [...new Set(opts.includePaths ?? [])]\n .map((p) => p.trim())\n .filter(Boolean)\n .sort();\n const scoped = included.length > 0;\n const pathspec = scoped || excluded.length\n ? [\n '--',\n ...(scoped ? included : ['.']),\n ...excluded.map((p) => `:(exclude)${p}`),\n ]\n : [];\n const output = async (args: string[]): Promise<string> => {\n const result = await git(args, opts);\n if (result.exitCode !== 0)\n throw new Error(`git ${args[0] ?? 'command'} failed`);\n return result.stdout;\n };\n const hash = createHash('sha256');\n const feed = (label: string, value: string) => {\n hash.update(label);\n hash.update('\\x1f');\n hash.update(value);\n hash.update('\\x1e');\n };\n if (scoped) {\n // A scoped fingerprint follows the selected content, not the branch tip:\n // an unrelated commit must not invalidate a reviewer that never read it.\n feed('scope', included.join('\\n'));\n feed(\n 'tracked',\n await output(['ls-files', '--stage', ...pathspec]),\n );\n } else {\n feed('head', (await headSha(opts)) ?? '');\n }\n // `status --porcelain` captures names/stages even where a diff cannot run\n // (e.g. an unborn HEAD); the two diffs capture tracked content.\n feed(\n 'status',\n await output(['status', '--porcelain', ...pathspec]),\n );\n feed('unstaged', await output(['diff', ...pathspec]));\n feed('staged', await output(['diff', '--cached', ...pathspec]));\n // Untracked content, hashed by git (streams; no JS-side file reads). A file\n // vanishing between the list and the hash fails the chunk; its paths still\n // feed the fingerprint, so the disappearance itself reads as a new state.\n const untracked = (\n await output([\n 'ls-files',\n '--others',\n ...(scoped ? [] : ['--exclude-standard']),\n ...pathspec,\n ])\n )\n .split('\\n')\n .filter(Boolean);\n for (let i = 0; i < untracked.length; i += 500) {\n const chunk = untracked.slice(i, i + 500);\n feed(`untracked-paths:${i}`, chunk.join('\\n'));\n feed(\n `untracked-content:${i}`,\n await output(['hash-object', '--', ...chunk]),\n );\n }\n return hash.digest('hex');\n } catch {\n return undefined;\n }\n}\n\ninterface GitIndexState {\n readonly mode: string;\n readonly oid: string;\n}\n\ninterface GitDirtyState {\n readonly status: string;\n readonly kind: 'file' | 'symlink' | 'missing';\n readonly mode: number;\n readonly digest: string | null;\n readonly lines: readonly string[];\n}\n\nexport interface GitWorkspaceFileState {\n readonly path: string;\n readonly index: GitIndexState | null;\n readonly dirty: GitDirtyState | null;\n}\n\nexport interface GitWorkspaceSnapshot {\n readonly root: string;\n readonly head: string | null;\n readonly files: readonly GitWorkspaceFileState[];\n}\n\nexport interface GitWorkspaceDelta {\n readonly headChanged: boolean;\n readonly changedPaths: readonly string[];\n readonly filesChanged: number;\n readonly linesChanged: number;\n}\n\ninterface DirtyStatus {\n readonly status: string;\n readonly path: string;\n}\n\nfunction parseDirtyStatus(output: string): readonly DirtyStatus[] {\n const records = output.split('\\0');\n const entries: DirtyStatus[] = [];\n for (let index = 0; index < records.length; index += 1) {\n const record = records[index];\n if (!record) continue;\n if (record.length < 4 || record[2] !== ' ') {\n throw new Error('git status returned an invalid porcelain record');\n }\n const status = record.slice(0, 2);\n entries.push({ status, path: record.slice(3) });\n if (status.includes('R') || status.includes('C')) {\n const source = records[index + 1];\n if (!source) throw new Error('git status omitted a rename source');\n entries.push({ status: `${status}:source`, path: source });\n index += 1;\n }\n }\n return entries;\n}\n\nfunction parseIndexState(output: string): Map<string, GitIndexState> {\n const entries = new Map<string, GitIndexState>();\n for (const record of output.split('\\0')) {\n if (!record) continue;\n const match = /^(\\d{6}) ([0-9a-f]+) (\\d)\\t(.+)$/u.exec(record);\n if (!match) throw new Error('git index returned an invalid entry');\n const [, mode, oid, stage, path] = match;\n if (stage !== '0') {\n throw new Error(`git index has an unresolved entry at ${path}`);\n }\n if (entries.has(path!)) {\n throw new Error(`git index returned a duplicate entry at ${path}`);\n }\n entries.set(path!, { mode: mode!, oid: oid! });\n }\n return entries;\n}\n\nfunction lineDigests(bytes: Uint8Array): readonly string[] {\n if (bytes.byteLength === 0) return Object.freeze([]);\n const lines: string[] = [];\n let start = 0;\n for (let index = 0; index < bytes.byteLength; index += 1) {\n if (bytes[index] !== 0x0a) continue;\n lines.push(\n createHash('sha256').update(bytes.subarray(start, index + 1)).digest('hex'),\n );\n start = index + 1;\n }\n if (start < bytes.byteLength) {\n lines.push(createHash('sha256').update(bytes.subarray(start)).digest('hex'));\n }\n return Object.freeze(lines);\n}\n\nasync function dirtyState(\n root: string,\n entry: DirtyStatus,\n): Promise<GitDirtyState> {\n const path = join(root, entry.path);\n try {\n const stat = await lstat(path);\n let bytes: Uint8Array;\n let kind: GitDirtyState['kind'];\n if (stat.isFile()) {\n kind = 'file';\n bytes = await readFile(path);\n } else if (stat.isSymbolicLink()) {\n kind = 'symlink';\n bytes = await readlink(path, { encoding: 'buffer' });\n } else {\n throw new Error(\n `git workspace contains an unsupported dirty entry at ${entry.path}`,\n );\n }\n return {\n status: entry.status,\n kind,\n mode: stat.mode,\n digest: createHash('sha256').update(bytes).digest('hex'),\n lines: lineDigests(bytes),\n };\n } catch (error) {\n const code = (error as NodeJS.ErrnoException).code;\n if (code === 'ENOENT') {\n return {\n status: entry.status,\n kind: 'missing',\n mode: 0,\n digest: null,\n lines: Object.freeze([]),\n };\n }\n throw error;\n }\n}\n\n/**\n * Capture the Git-visible entry state for one attempt. Clean tracked files are\n * represented by their index object; only already-dirty bytes are read and\n * reduced to hashes. No workspace content is retained in the snapshot.\n */\nexport async function captureGitWorkspaceSnapshot(\n opts: GitOpts,\n): Promise<GitWorkspaceSnapshot> {\n const root = await gitRoot(opts);\n if (!root) throw new Error('not a git repository');\n const commandOpts = { ...opts, cwd: root };\n const included = [...new Set(opts.includePaths ?? [])]\n .map((path) => path.trim())\n .filter(Boolean)\n .sort();\n const pathspec = included.length > 0 ? ['--', ...included] : [];\n const [head, indexResult, statusResult] = await Promise.all([\n headSha(commandOpts),\n git([\n ...(pathspec.length === 0 ? ['--literal-pathspecs'] : []),\n 'ls-files', '--stage', '-z', ...pathspec,\n ], commandOpts),\n git(\n ['status', '--porcelain=v1', '-z', '--untracked-files=all', ...pathspec],\n commandOpts,\n ),\n ]);\n if (indexResult.exitCode !== 0) throw new Error('git index inspection failed');\n if (statusResult.exitCode !== 0) throw new Error('git status inspection failed');\n\n const index = parseIndexState(indexResult.stdout);\n const dirtyEntries = parseDirtyStatus(statusResult.stdout);\n const dirty = new Map<string, GitDirtyState>();\n for (const entry of dirtyEntries) {\n dirty.set(entry.path, await dirtyState(root, entry));\n }\n const paths = [...new Set([...index.keys(), ...dirty.keys()])].sort();\n const files = paths.map((path) => Object.freeze({\n path,\n index: index.get(path) ?? null,\n dirty: dirty.get(path) ?? null,\n }));\n return Object.freeze({\n root,\n head: head ?? null,\n files: Object.freeze(files),\n });\n}\n\nfunction fileStateKey(value: GitWorkspaceFileState | undefined): string {\n if (!value) return '[absent]';\n return JSON.stringify({ index: value.index, dirty: value.dirty });\n}\n\nfunction lineEditCount(\n before: readonly string[],\n after: readonly string[],\n): number {\n if (\n before.length === after.length &&\n before.every((line, index) => line === after[index])\n ) {\n return 0;\n }\n const maximum = before.length + after.length;\n let frontier = new Map<number, number>([[1, 0]]);\n for (let distance = 0; distance <= maximum; distance += 1) {\n const next = new Map<number, number>();\n for (let diagonal = -distance; diagonal <= distance; diagonal += 2) {\n const down = frontier.get(diagonal + 1) ?? -1;\n const right = (frontier.get(diagonal - 1) ?? -1) + 1;\n let x = diagonal === -distance || (diagonal !== distance && right < down)\n ? down\n : right;\n let y = x - diagonal;\n while (\n x < before.length &&\n y < after.length &&\n before[x] === after[y]\n ) {\n x += 1;\n y += 1;\n }\n if (x >= before.length && y >= after.length) return distance;\n next.set(diagonal, x);\n }\n frontier = next;\n }\n return maximum;\n}\n\nasync function blobLines(\n root: string,\n oid: string | undefined,\n cache: Map<string, readonly string[]>,\n signal?: AbortSignal,\n): Promise<readonly string[]> {\n if (!oid) return Object.freeze([]);\n const cached = cache.get(oid);\n if (cached) return cached;\n const result = await runRuntimeProcess({\n executable: 'git',\n args: ['cat-file', 'blob', oid],\n cwd: root,\n signal,\n });\n if (result.exitCode !== 0) throw new Error(`git cannot read workspace blob ${oid}`);\n const lines = lineDigests(result.stdout);\n cache.set(oid, lines);\n return lines;\n}\n\nasync function worktreeLines(\n root: string,\n state: GitWorkspaceFileState | undefined,\n cache: Map<string, readonly string[]>,\n signal?: AbortSignal,\n): Promise<readonly string[]> {\n if (!state) return Object.freeze([]);\n if (state.dirty) return state.dirty.lines;\n return await blobLines(root, state.index?.oid, cache, signal);\n}\n\n/** Compare two snapshots without treating untouched entry dirt as attempt work. */\nexport async function compareGitWorkspaceSnapshots(\n before: GitWorkspaceSnapshot,\n after: GitWorkspaceSnapshot,\n signal?: AbortSignal,\n): Promise<GitWorkspaceDelta> {\n if (before.root !== after.root) {\n throw new Error('git workspace root changed during the attempt');\n }\n const beforeFiles = new Map(before.files.map((file) => [file.path, file]));\n const afterFiles = new Map(after.files.map((file) => [file.path, file]));\n const changedPaths = [...new Set([\n ...beforeFiles.keys(),\n ...afterFiles.keys(),\n ])]\n .filter(\n (path) =>\n fileStateKey(beforeFiles.get(path)) !== fileStateKey(afterFiles.get(path)),\n )\n .sort();\n\n const cache = new Map<string, readonly string[]>();\n let linesChanged = 0;\n for (const path of changedPaths) {\n const beforeState = beforeFiles.get(path);\n const afterState = afterFiles.get(path);\n const [beforeWorktree, afterWorktree, beforeIndex, afterIndex] =\n await Promise.all([\n worktreeLines(before.root, beforeState, cache, signal),\n worktreeLines(after.root, afterState, cache, signal),\n blobLines(before.root, beforeState?.index?.oid, cache, signal),\n blobLines(after.root, afterState?.index?.oid, cache, signal),\n ]);\n linesChanged += Math.max(\n lineEditCount(beforeWorktree, afterWorktree),\n lineEditCount(beforeIndex, afterIndex),\n );\n if (!Number.isSafeInteger(linesChanged)) {\n throw new Error('workspace line count exceeded the safe integer range');\n }\n }\n\n return Object.freeze({\n headChanged: before.head !== after.head,\n changedPaths: Object.freeze(changedPaths),\n filesChanged: changedPaths.length,\n linesChanged,\n });\n}\n\nexport interface CommitInput {\n subject: string;\n /** The structured body. Joined to the subject with a blank line. */\n body?: string;\n /** Commit even with an empty index (default false). */\n allowEmpty?: boolean;\n}\n\n/**\n * Commit the staged index. The message is passed on stdin (`-F -`) so an\n * arbitrarily-shaped body never has to survive shell escaping. The repo's\n * configured author is used. The runtime never changes commit authorship.\n * Returns the new sha, or undefined when there was nothing to commit and\n * `allowEmpty` was not set.\n */\nexport async function commit(\n input: CommitInput,\n opts: GitOpts,\n): Promise<string | undefined> {\n if (!input.allowEmpty && !(await hasStagedChanges(opts))) return undefined;\n const message = input.body\n ? `${input.subject}\\n\\n${input.body}\\n`\n : `${input.subject}\\n`;\n const args = ['commit', '-F', '-'];\n if (input.allowEmpty) args.push('--allow-empty');\n const r = await git(args, opts, message);\n if (r.exitCode !== 0) {\n throw new Error(\n `git commit failed (exit ${r.exitCode}): ${r.stdout}`.trim(),\n );\n }\n return headSha(opts);\n}\n\n/** Recent commit messages from one branch, used only to explain a merge. */\nexport async function branchCommits(opts: {\n cwd: string;\n ref: string;\n max: number;\n signal?: AbortSignal;\n}): Promise<Array<{ subject: string; body: string }>> {\n const field = '\\x1f';\n const record = '\\x1e';\n const result = await git(\n ['log', `-n${opts.max}`, `--format=%s${field}%b${record}`, opts.ref],\n opts,\n );\n if (result.exitCode !== 0) return [];\n return result.stdout\n .split(record)\n .map((value) => value.replace(/^\\n+/, '').split(field))\n .filter((fields) => fields[0]?.trim())\n .map(([subject, body]) => ({\n subject: subject!.trim(),\n body: (body ?? '').trim(),\n }));\n}\n\n// ── Worktrees (branches-as-teams) ──────────────────────────────────────────\n\n// Serialize metadata changes within this process and common Git directory only.\nconst worktreeQueues = new Map<string, Promise<void>>();\n\nasync function withWorktreeQueue<T>(\n repoDir: string,\n signal: AbortSignal | undefined,\n operation: () => Promise<T>,\n): Promise<T> {\n const common = await git(['rev-parse', '--git-common-dir'], { cwd: repoDir, signal });\n if (common.exitCode !== 0) throw new Error('git common directory unavailable');\n const key = await realpath(resolve(repoDir, common.stdout.trim()));\n const result = (worktreeQueues.get(key) ?? Promise.resolve()).then(operation);\n const tail = result.then(() => undefined, () => undefined);\n worktreeQueues.set(key, tail);\n try {\n return await result;\n } finally {\n if (worktreeQueues.get(key) === tail) worktreeQueues.delete(key);\n }\n}\n\nexport interface WorktreeHandle {\n /** The isolated working directory. */\n dir: string;\n /** The branch checked out there. */\n branch: string;\n}\n\n/**\n * Fork an isolated worktree on a new branch from `base` (default HEAD). Each\n * concurrent writer gets its own working dir and branch, so siblings never\n * collide on files or the index.\n */\nexport async function addWorktree(\n repoDir: string,\n opts: { branch: string; base?: string; signal?: AbortSignal },\n): Promise<WorktreeHandle> {\n return withWorktreeQueue(repoDir, opts.signal, async () => {\n const dir = mkdtempSync(join(tmpdir(), 'lines-wt-'));\n const r = await git(\n ['worktree', 'add', '-b', opts.branch, dir, opts.base ?? 'HEAD'],\n { cwd: repoDir, signal: opts.signal },\n );\n if (r.exitCode !== 0)\n throw new Error(\n `git worktree add failed (exit ${r.exitCode}): ${r.stdout}`.trim(),\n );\n return { dir, branch: opts.branch };\n });\n}\n\n/** Remove a worktree (force-discards anything uncommitted left in it). */\nexport async function removeWorktree(\n repoDir: string,\n dir: string,\n opts: { signal?: AbortSignal } = {},\n): Promise<void> {\n await withWorktreeQueue(repoDir, opts.signal, () => git(['worktree', 'remove', '--force', dir], {\n cwd: repoDir,\n signal: opts.signal,\n }));\n}\n\n/** Delete a branch ref (used to clean up a merged fork branch). */\nexport async function deleteBranch(\n repoDir: string,\n branch: string,\n opts: { signal?: AbortSignal } = {},\n): Promise<void> {\n await git(['branch', '-D', branch], { cwd: repoDir, signal: opts.signal });\n}\n\nexport interface MergeResult {\n ok: boolean;\n conflict: boolean;\n}\n\n/**\n * Land a fork branch back into the branch checked out at `repoDir` (`--no-ff`).\n * On conflict the merge is aborted so the target stays clean and the caller can\n * fail the node. The runtime does not auto-resolve (a merge-resolver is a separate\n * layer).\n */\nexport async function mergeBranch(\n repoDir: string,\n branch: string,\n opts: { signal?: AbortSignal; message?: string } = {},\n): Promise<MergeResult> {\n const r = await git(\n ['merge', '--no-ff', '-m', opts.message ?? `merge ${branch}`, branch],\n { cwd: repoDir, signal: opts.signal },\n );\n if (r.exitCode === 0) return { ok: true, conflict: false };\n await git(['merge', '--abort'], { cwd: repoDir, signal: opts.signal });\n return { ok: false, conflict: true };\n}\n\n/**\n * Begin a `--no-ff --no-commit` merge WITHOUT aborting on conflict, so a resolver\n * can synthesise the result. `clean` means it merged cleanly (staged, ready to\n * commit); otherwise `conflicted` lists the unresolved paths (with markers).\n */\nexport async function mergeNoCommit(\n repoDir: string,\n branch: string,\n opts: { signal?: AbortSignal } = {},\n): Promise<{ clean: boolean; conflicted: string[] }> {\n const r = await git(['merge', '--no-ff', '--no-commit', branch], {\n cwd: repoDir,\n signal: opts.signal,\n });\n if (r.exitCode === 0) return { clean: true, conflicted: [] };\n return { clean: false, conflicted: await conflictedFiles(repoDir, opts) };\n}\n\n/** Paths with unresolved merge conflicts. */\nexport async function conflictedFiles(\n repoDir: string,\n opts: { signal?: AbortSignal } = {},\n): Promise<string[]> {\n const r = await git(['diff', '--name-only', '--diff-filter=U'], {\n cwd: repoDir,\n signal: opts.signal,\n });\n return r.stdout\n .split('\\n')\n .map((s) => s.trim())\n .filter(Boolean);\n}\n\n/** Abort an in-progress merge. */\nexport async function mergeAbort(\n repoDir: string,\n opts: { signal?: AbortSignal } = {},\n): Promise<void> {\n await git(['merge', '--abort'], { cwd: repoDir, signal: opts.signal });\n}\n","import { existsSync, readFileSync } from 'node:fs';\nimport { createHash } from 'node:crypto';\nimport { join } from 'node:path';\nimport type {\n ConditionInput,\n ConditionResult,\n FeedbackActionSeverity,\n FeedbackDecision,\n FeedbackFinding,\n FeedbackSeverity,\n GraphPosition,\n Job,\n JobContext,\n Outcome,\n RevisionRequest,\n RevisionRerun,\n} from './types.js';\nimport { toCondition } from './condition.js';\nimport { setMeta } from './describe.js';\nimport { isInfrastructureError, LoopError } from './errors.js';\nimport {\n DEFAULT_FANOUT_CONCURRENCY,\n mapWithConcurrency,\n} from './concurrency.js';\nimport { oneLine, truncate } from './text.js';\nimport { workspaceFingerprint } from './git.js';\nimport { criterionFor } from './context.js';\nimport { processText, runRuntimeProcess } from './process.js';\n\nexport type {\n FeedbackActionSeverity,\n FeedbackDecision,\n FeedbackFinding,\n FeedbackSeverity,\n RevisionRequest,\n RevisionRerun,\n} from './types.js';\n\nexport interface RevisionRequestInput {\n target?: string;\n reason?: string;\n findings?: FeedbackFinding[];\n rerun?: RevisionRerun;\n source?: string;\n decision?: FeedbackDecision;\n}\n\nexport function normalizeFeedbackSeverity(\n severity: FeedbackSeverity | undefined,\n): FeedbackActionSeverity {\n return severity ?? 'block';\n}\n\nexport function isRequiredFeedbackSeverity(\n severity: FeedbackSeverity | undefined,\n): boolean {\n const normalized = normalizeFeedbackSeverity(severity);\n return normalized === 'block' || normalized === 'should-fix';\n}\n\nfunction findingLine(finding: FeedbackFinding): string {\n const reviewer = finding.reviewer ? `${finding.reviewer} ` : '';\n const severity = normalizeFeedbackSeverity(finding.severity);\n const decision = finding.decision ? ` Decision: ${finding.decision}.` : '';\n const recommendation = finding.recommendation\n ? ` Recommendation: ${oneLine(finding.recommendation)}`\n : '';\n return `- ${reviewer}[${severity}]: ${oneLine(finding.evidence)}${decision}${recommendation}`;\n}\n\nfunction defaultReason(findings: FeedbackFinding[] | undefined): string {\n if (!findings?.length) return 'Revision requested';\n if (findings.length === 1) return oneLine(findings[0]!.evidence);\n return `${findings.length} findings require another pass`;\n}\n\nfunction normalizeRevision(input: RevisionRequestInput): RevisionRequest {\n const reason = input.reason?.trim() || defaultReason(input.findings);\n return {\n reason,\n target: input.target,\n findings: input.findings,\n rerun: input.rerun ?? (input.target ? 'target-and-dependents' : undefined),\n source: input.source,\n decision: input.decision,\n };\n}\n\nexport function revisionRequest(\n input: RevisionRequestInput,\n over: Partial<Outcome> = {},\n): Outcome {\n const revision = normalizeRevision(input);\n return {\n status: over.status ?? 'fail',\n confidence: over.confidence,\n summary: over.summary ?? revision.reason,\n data: over.data,\n error: over.error,\n revision,\n };\n}\n\nexport function kickback(\n to: string,\n reason: string,\n over: Partial<Outcome> = {},\n): Outcome {\n // A kickback is just a targeted revision request; `rerun` defaults to\n // 'target-and-dependents' in normalizeRevision because a target is set.\n return revisionRequest({ target: to, reason }, over);\n}\n\n/**\n * The single accessor for an outcome's revision request. `Outcome.revision` is\n * the one channel a producer sets (`revisionRequest`, `kickback`, `reviewPanel`,\n * dag routing), so there is exactly one place to read it — no parallel `kickback`\n * field or `data` copy to keep in sync.\n */\nexport function revisionFromOutcome(outcome: Outcome): RevisionRequest | undefined {\n return outcome.revision;\n}\n\nexport function feedbackBlock(outcome: Outcome): string {\n const revision = revisionFromOutcome(outcome);\n const parts = [\n '## Feedback to address',\n 'A review or downstream stage requested another pass. Address this before unrelated work.',\n ];\n if (revision?.target) parts.push(`Target: ${revision.target}`);\n if (revision?.source) parts.push(`Source: ${revision.source}`);\n if (revision?.decision) parts.push(`Caller decision: ${revision.decision}`);\n const reason = revision?.reason ?? outcome.summary;\n if (reason) parts.push(`Reason: ${reason}`);\n const findings = revision?.findings ?? [];\n if (findings.length) {\n parts.push('Findings:');\n parts.push(findings.map(findingLine).join('\\n'));\n }\n return parts.join('\\n\\n');\n}\n\nexport function graphPositionBlock(\n graph: GraphPosition,\n reviewerGate?: string | null,\n): string {\n return [\n '## Graph position',\n `DAG: ${graph.dag}`,\n `Current node: ${graph.node}`,\n ...(graph.desc ? [`Description: ${graph.desc}`] : []),\n ...(reviewerGate ? [`Gate: ${reviewerGate}`] : []),\n `Path: ${graph.path.join(' > ')}`,\n `Depends on: ${graph.needs.length ? graph.needs.join(', ') : 'none'}`,\n `Direct dependents: ${\n graph.dependents.length ? graph.dependents.join(', ') : 'none'\n }`,\n ].join('\\n');\n}\n\ntype ReviewTarget = {\n name?: string;\n scope?: string;\n /** Stable reviewer criteria version. Required when passes are persisted. */\n cacheVersion?: string;\n /** Workspace paths whose content can invalidate this reviewer's persisted pass. */\n invalidateOn?: string[];\n} & ({ review: ConditionInput } | { job: Job });\n\nexport interface ReviewPanelConfig {\n label?: string;\n reviewers: ReviewTarget[];\n /** Max reviewers running at once. Default 4. */\n concurrency?: number;\n /** Default `all`: every reviewer must pass. A number means k-of-n over all reviewers. */\n pass?: 'all' | number;\n /** Reuse only passing verdicts at or above this confidence while their evidence is unchanged. */\n persistPasses?: { minConfidence: number };\n /**\n * When set, findings scoped outside these surfaces are escalated and do not\n * count against this panel's pass/fail decision. Unscoped findings stay\n * actionable so a missing scope cannot bypass review.\n */\n actionableScopes?: string[];\n /** When set, a failing panel emits a targeted revision request for dag routing. */\n target?: string;\n rerun?: RevisionRerun;\n}\n\ninterface ReviewVerdict {\n kind: 'verdict';\n name: string;\n met: boolean;\n confidence?: number;\n reason: string;\n scope?: string;\n findings?: FeedbackFinding[];\n}\n\ninterface ReviewEngineError {\n kind: 'engine-error';\n name: string;\n reason: string;\n error?: LoopError;\n blocking?: boolean;\n scope?: string;\n findings?: FeedbackFinding[];\n}\n\ntype ReviewResult = ReviewVerdict | ReviewEngineError;\n\ninterface PersistedReviewPass {\n identity: string;\n fingerprint: string;\n confidence: number;\n}\n\ntype PersistedReviewPasses = Record<string, unknown>;\n\nconst SHA256_FINGERPRINT = /^[0-9a-f]{64}$/;\n\nfunction reviewerCacheIdentity(\n reviewer: ReviewTarget,\n reviewerGate?: string,\n): string {\n const invalidateOn = [...new Set(reviewer.invalidateOn ?? [])]\n .map((path) => path.trim())\n .filter(Boolean)\n .sort();\n return createHash('sha256')\n .update(\n JSON.stringify({\n name: reviewer.name!.trim(),\n cacheVersion: reviewer.cacheVersion!.trim(),\n kind: 'job' in reviewer ? 'job' : 'review',\n scope: reviewer.scope ?? null,\n invalidateOn,\n reviewerGate: reviewerGate ?? null,\n }),\n )\n .digest('hex');\n}\n\nfunction reviewPassCacheKey(ctx: JobContext, label: string): string {\n return `lines:review-panel:${JSON.stringify([...ctx.path, label])}`;\n}\n\nfunction reviewPassCache(value: unknown): PersistedReviewPasses {\n const cache: PersistedReviewPasses = {};\n if (typeof value !== 'object' || value === null || Array.isArray(value))\n return cache;\n for (const [name, entry] of Object.entries(value))\n Object.defineProperty(cache, name, {\n value: entry,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n return cache;\n}\n\nfunction setReviewPass(\n cache: PersistedReviewPasses,\n name: string,\n pass: PersistedReviewPass,\n): void {\n Object.defineProperty(cache, name, {\n value: pass,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n}\n\nfunction reusableReviewPass(\n value: unknown,\n minConfidence: number,\n identity: string,\n): value is PersistedReviewPass {\n if (typeof value !== 'object' || value === null || Array.isArray(value))\n return false;\n const pass = value as Partial<PersistedReviewPass>;\n return (\n pass.identity === identity &&\n typeof pass.fingerprint === 'string' &&\n SHA256_FINGERPRINT.test(pass.fingerprint) &&\n typeof pass.confidence === 'number' &&\n Number.isFinite(pass.confidence) &&\n pass.confidence >= minConfidence &&\n pass.confidence <= 1\n );\n}\n\ninterface PersistedReviewRun {\n result: ReviewResult;\n reusedFingerprint?: string;\n}\n\nconst REVIEW_PANEL_DEFAULT_CONCURRENCY = DEFAULT_FANOUT_CONCURRENCY;\nfunction isReviewInfrastructureError(\n error: LoopError | undefined,\n): error is LoopError {\n return isInfrastructureError(error);\n}\n\nfunction isReviewBoundaryError(error: LoopError | undefined): error is LoopError {\n return error?.code === 'WRITE_BOUNDARY';\n}\n\nfunction findingFromOutput(\n reviewer: string,\n scope: string | undefined,\n output: string | undefined,\n): FeedbackFinding[] | undefined {\n const evidence = output?.trim();\n if (!evidence) return undefined;\n return [{ reviewer, severity: 'block', scope, evidence }];\n}\n\nfunction outputFromInfrastructureError(error: LoopError): string | undefined {\n const cause = (error as Error & { cause?: unknown }).cause;\n if (typeof cause !== 'object' || cause === null) return undefined;\n const output = (cause as { output?: unknown }).output;\n return typeof output === 'string' ? output : undefined;\n}\n\nasync function runReviewer(\n reviewer: ReviewTarget,\n index: number,\n ctx: JobContext,\n): Promise<ReviewResult> {\n const name = reviewer.name ?? `reviewer-${index + 1}`;\n const reviewerCtx: JobContext = {\n ...ctx,\n reviewerGate: criterionFor(ctx),\n };\n try {\n if ('job' in reviewer) {\n const outcome = await reviewer.job(reviewerCtx);\n const outcomeError = outcome.error;\n if (isReviewInfrastructureError(outcomeError) || isReviewBoundaryError(outcomeError)) {\n return {\n kind: 'engine-error',\n name,\n scope: reviewer.scope,\n reason: outcome.summary ?? outcomeError.message,\n error: outcomeError,\n blocking: isReviewBoundaryError(outcomeError),\n };\n }\n return {\n kind: 'verdict',\n name,\n met: outcome.status === 'pass',\n confidence: outcome.confidence,\n reason: outcome.summary ?? outcome.status,\n scope: reviewer.scope,\n findings: revisionFromOutcome(outcome)?.findings,\n };\n }\n const result: ConditionResult = await toCondition(reviewer.review)(\n reviewerCtx,\n ctx.lastOutcome,\n );\n return {\n kind: 'verdict',\n name,\n met: result.met,\n confidence: result.confidence,\n reason: result.reason,\n scope: reviewer.scope,\n findings: result.met\n ? undefined\n : findingFromOutput(name, reviewer.scope, result.output),\n };\n } catch (e) {\n // A genuine abort stops the whole run — let it propagate.\n if (ctx.signal.aborted) throw e;\n const error = e instanceof LoopError ? e : undefined;\n if (error && (isReviewInfrastructureError(error) || isReviewBoundaryError(error))) {\n return {\n kind: 'engine-error',\n name,\n scope: reviewer.scope,\n reason: error.message,\n error,\n blocking: isReviewBoundaryError(error),\n findings: findingFromOutput(\n name,\n reviewer.scope,\n outputFromInfrastructureError(error),\n ),\n };\n }\n return {\n kind: 'verdict',\n name,\n met: false,\n scope: reviewer.scope,\n reason: `reviewer errored: ${e instanceof Error ? e.message : String(e)}`,\n };\n }\n}\n\nasync function runPersistedReviewer(\n reviewer: ReviewTarget,\n index: number,\n ctx: JobContext,\n cache: PersistedReviewPasses,\n minConfidence: number,\n): Promise<PersistedReviewRun> {\n const name = reviewer.name!;\n const identity = reviewerCacheIdentity(\n reviewer,\n criterionFor(ctx),\n );\n const before = await workspaceFingerprint({\n cwd: ctx.workspace.dir,\n signal: ctx.signal,\n excludePaths: ctx.fingerprintExcludePaths,\n includePaths: reviewer.invalidateOn,\n });\n const cached = cache[name];\n if (\n before !== undefined &&\n reusableReviewPass(cached, minConfidence, identity) &&\n cached.fingerprint === before\n ) {\n return {\n result: {\n kind: 'verdict',\n name,\n met: true,\n confidence: cached.confidence,\n reason: 'reused persisted pass',\n scope: reviewer.scope,\n },\n reusedFingerprint: before,\n };\n }\n\n delete cache[name];\n const result = await runReviewer(reviewer, index, ctx);\n if (\n before === undefined ||\n result.kind !== 'verdict' ||\n !result.met ||\n result.confidence === undefined ||\n !Number.isFinite(result.confidence) ||\n result.confidence < minConfidence ||\n result.confidence > 1\n )\n return { result };\n\n const after = await workspaceFingerprint({\n cwd: ctx.workspace.dir,\n signal: ctx.signal,\n excludePaths: ctx.fingerprintExcludePaths,\n includePaths: reviewer.invalidateOn,\n });\n if (after !== undefined && after === before)\n setReviewPass(cache, name, {\n identity,\n fingerprint: after,\n confidence: result.confidence,\n });\n return { result };\n}\n\nasync function settlePersistedReviewers(\n reviewers: readonly ReviewTarget[],\n initial: readonly PersistedReviewRun[],\n ctx: JobContext,\n cache: PersistedReviewPasses,\n minConfidence: number,\n concurrency: number,\n): Promise<ReviewResult[]> {\n // A reused seat can become stale while the other reviewers are running.\n // Finish the initial fan-out before checking every reuse against its evidence.\n const staleIndices = (\n await mapWithConcurrency(initial, concurrency, async (run, index) => {\n if (run.reusedFingerprint === undefined) return undefined;\n const current = await workspaceFingerprint({\n cwd: ctx.workspace.dir,\n signal: ctx.signal,\n excludePaths: ctx.fingerprintExcludePaths,\n includePaths: reviewers[index]!.invalidateOn,\n });\n return current === run.reusedFingerprint ? undefined : index;\n })\n ).filter((index): index is number => index !== undefined);\n\n for (const index of staleIndices) delete cache[reviewers[index]!.name!];\n\n const reruns = await mapWithConcurrency(\n staleIndices,\n concurrency,\n async (index) => ({\n index,\n run: await runPersistedReviewer(\n reviewers[index]!,\n index,\n ctx,\n cache,\n minConfidence,\n ),\n }),\n );\n const results = initial.map((run) => run.result);\n for (const { index, run } of reruns) results[index] = run.result;\n\n // A bounded rerun may invalidate any passing seat. Do not rerun again, but\n // fail this tally closed and evict the stale pass for the next invocation.\n await mapWithConcurrency(results, concurrency, async (result, index) => {\n if (result.kind !== 'verdict' || !result.met) return;\n const reviewer = reviewers[index]!;\n const name = reviewer.name!;\n const cached = cache[name];\n if (\n !reusableReviewPass(\n cached,\n minConfidence,\n reviewerCacheIdentity(\n reviewer,\n criterionFor(ctx),\n ),\n )\n )\n return;\n const current = await workspaceFingerprint({\n cwd: ctx.workspace.dir,\n signal: ctx.signal,\n excludePaths: ctx.fingerprintExcludePaths,\n includePaths: reviewer.invalidateOn,\n });\n if (current !== cached.fingerprint) {\n delete cache[name];\n results[index] = {\n ...result,\n met: false,\n reason: 'review evidence changed during panel',\n };\n }\n });\n\n return results;\n}\n\nfunction reviewFindings(result: ReviewVerdict): FeedbackFinding[] {\n const findings = result.findings?.length\n ? result.findings\n : [\n {\n reviewer: result.name,\n severity: 'block' as const,\n scope: result.scope,\n evidence: result.reason,\n },\n ];\n return findings.map((finding) => ({\n ...finding,\n reviewer: finding.reviewer ?? result.name,\n severity: finding.severity ?? 'block',\n scope: finding.scope ?? result.scope,\n }));\n}\n\nfunction isActionableFinding(\n finding: FeedbackFinding,\n actionableScopes: readonly string[] | undefined,\n): boolean {\n if (!actionableScopes?.length) return true;\n return !finding.scope || actionableScopes.includes(finding.scope);\n}\n\nfunction escalatedFinding(finding: FeedbackFinding): FeedbackFinding {\n return { ...finding, decision: 'escalated' };\n}\n\nfunction findingSeverityCounts(\n findings: FeedbackFinding[],\n): Partial<Record<FeedbackActionSeverity, number>> {\n const counts: Partial<Record<FeedbackActionSeverity, number>> = {};\n for (const finding of findings) {\n const severity = normalizeFeedbackSeverity(finding.severity);\n counts[severity] = (counts[severity] ?? 0) + 1;\n }\n return counts;\n}\n\nexport function reviewPanel(config: ReviewPanelConfig): Job {\n const label = config.label ?? 'review-panel';\n // A panel with no reviewers would pass vacuously (0/0), letting unreviewed work\n // through a gate meant to enforce review. Reject it at construction.\n if (!config.reviewers.length)\n throw new LoopError({\n code: 'CONFIG',\n message: `reviewPanel \"${label}\": at least one reviewer is required`,\n });\n if (\n typeof config.pass === 'number' &&\n (!Number.isInteger(config.pass) ||\n config.pass < 1 ||\n config.pass > config.reviewers.length)\n )\n throw new LoopError({\n code: 'CONFIG',\n message:\n `reviewPanel \"${label}\": pass must be an integer from 1 to ` +\n `${config.reviewers.length} (got ${config.pass})`,\n });\n const concurrency = config.concurrency ?? REVIEW_PANEL_DEFAULT_CONCURRENCY;\n if (!Number.isInteger(concurrency) || concurrency <= 0)\n throw new LoopError({\n code: 'CONFIG',\n message: `reviewPanel \"${label}\": concurrency must be a positive integer`,\n });\n if (config.persistPasses) {\n const minConfidence = config.persistPasses.minConfidence;\n if (\n !Number.isFinite(minConfidence) ||\n minConfidence < 0 ||\n minConfidence > 1\n )\n throw new LoopError({\n code: 'CONFIG',\n message: `reviewPanel \"${label}\": persistPasses.minConfidence must be from 0 to 1`,\n });\n if (!config.label?.trim())\n throw new LoopError({\n code: 'CONFIG',\n message: 'reviewPanel persistPasses requires an explicit label',\n });\n const names = config.reviewers.map((reviewer) => reviewer.name?.trim());\n if (names.some((name) => !name))\n throw new LoopError({\n code: 'CONFIG',\n message: `reviewPanel \"${label}\" persistPasses requires every reviewer to have an explicit name`,\n });\n if (new Set(names).size !== names.length)\n throw new LoopError({\n code: 'CONFIG',\n message: `reviewPanel \"${label}\" persistPasses requires unique reviewer names`,\n });\n if (config.reviewers.some((reviewer) => !reviewer.cacheVersion?.trim()))\n throw new LoopError({\n code: 'CONFIG',\n message: `reviewPanel \"${label}\" persistPasses requires every reviewer to have an explicit cacheVersion`,\n });\n }\n const job: Job = async (ctx) => {\n ctx.emit({\n kind: 'job:start',\n ts: Date.now(),\n path: [...ctx.path],\n label,\n timeoutMs: ctx.timeoutMs,\n });\n const cacheKey = config.persistPasses\n ? reviewPassCacheKey(ctx, label)\n : undefined;\n const cache = cacheKey ? reviewPassCache(ctx.state[cacheKey]) : undefined;\n if (cache) {\n const names = new Set(config.reviewers.map((reviewer) => reviewer.name));\n for (const name of Object.keys(cache))\n if (!names.has(name)) delete cache[name];\n }\n if (cacheKey && cache) ctx.state[cacheKey] = cache;\n let results: ReviewResult[];\n if (cache && config.persistPasses) {\n const initial = await mapWithConcurrency(\n config.reviewers,\n concurrency,\n (reviewer, i) =>\n runPersistedReviewer(\n reviewer,\n i,\n ctx,\n cache,\n config.persistPasses!.minConfidence,\n ),\n );\n results = await settlePersistedReviewers(\n config.reviewers,\n initial,\n ctx,\n cache,\n config.persistPasses.minConfidence,\n concurrency,\n );\n } else {\n results = await mapWithConcurrency(\n config.reviewers,\n concurrency,\n (reviewer, i) => runReviewer(reviewer, i, ctx),\n );\n }\n if (cacheKey && cache && !Object.keys(cache).length)\n delete ctx.state[cacheKey];\n const verdicts = results.filter(\n (r): r is ReviewVerdict => r.kind === 'verdict',\n );\n const errors = results.filter(\n (r): r is ReviewEngineError => r.kind === 'engine-error',\n );\n const blockingErrors = errors.filter((error) => error.blocking);\n const passedCount = verdicts.filter((r) => r.met).length;\n const required =\n config.pass === undefined || config.pass === 'all'\n ? results.length\n : config.pass;\n const rawFindings = [\n ...verdicts.filter((r) => !r.met).flatMap(reviewFindings),\n ...errors.flatMap((r) => r.findings ?? []),\n ];\n const findings = rawFindings.filter((f) =>\n isActionableFinding(f, config.actionableScopes),\n );\n const escalatedFindings = rawFindings\n .filter((f) => !isActionableFinding(f, config.actionableScopes))\n .map(escalatedFinding);\n const passed = blockingErrors.length === 0 && verdicts.length > 0 && passedCount >= required;\n const summaryHead = `Review panel: ${passedCount}/${results.length} reviewer(s) cleared`;\n const summaryParts = [`${summaryHead}.`];\n if (findings.length) summaryParts.push(findings.map(findingLine).join('\\n'));\n if (escalatedFindings.length)\n summaryParts.push(\n `Escalated:\\n${escalatedFindings.map(findingLine).join('\\n')}`,\n );\n if (errors.length)\n summaryParts.push(\n `Engine errors:\\n${errors\n .map((e) => `- ${e.name}: ${oneLine(e.reason)}`)\n .join('\\n')}`,\n );\n const summary = summaryParts.join('\\n');\n // Average only the confidences reviewers actually reported. Coercing a\n // missing confidence to 0 conflates \"no signal\" with \"zero confidence\" and\n // can drag a cleanly-passing panel's confidence to 0, stalling an enclosing\n // loop's minConfidence gate (quorum likewise averages only the votes it has).\n const scored = verdicts\n .map((r) => r.confidence)\n .filter((c): c is number => c != null);\n const confidence = scored.length\n ? scored.reduce((sum, c) => sum + c, 0) / scored.length\n : undefined;\n const data = {\n findings,\n escalatedFindings,\n errors,\n results,\n passed: passedCount,\n required,\n severityCounts: findingSeverityCounts(findings),\n };\n const blockedByInfrastructure =\n blockingErrors.length > 0 || (\n errors.length > 0 &&\n (config.pass === undefined || config.pass === 'all'\n ? true\n : passedCount < required && passedCount + errors.length >= required)\n );\n let outcome: Outcome;\n if (passed) {\n outcome = { status: 'pass', summary, confidence, data };\n } else if (blockedByInfrastructure || (!findings.length && errors.length)) {\n const first = errors[0]!;\n outcome = {\n status: 'paused',\n summary,\n confidence,\n data,\n error:\n first.error ??\n new LoopError({\n code: 'ENGINE',\n phase: 'review',\n message: first.reason,\n }),\n };\n } else if (!findings.length && escalatedFindings.length) {\n outcome = { status: 'pass', summary, confidence, data };\n } else {\n outcome = revisionRequest(\n {\n target: config.target,\n // A clean one-line reason. The findings ride the `findings` array, so\n // feedbackBlock renders them once (not embedded in the reason too) and\n // the records/tail `reason` stays a single tidy line. The full\n // multi-line `summary` is kept on the outcome below for host logs.\n reason: `${summaryHead}.`,\n findings,\n rerun: config.rerun,\n },\n { summary, confidence, data },\n );\n }\n ctx.emit({ kind: 'job:end', ts: Date.now(), path: [...ctx.path], label, outcome });\n return outcome;\n };\n return setMeta(job, {\n kind: 'reviewPanel',\n name: label,\n concurrency,\n actionableScopes: config.actionableScopes,\n });\n}\n\nexport interface ReviewContextConfig {\n diff?: boolean;\n files?: string[];\n tests?: boolean | { command: string; args?: string[]; cwd?: string };\n maxChars?: number;\n}\n\nasync function gitOutput(\n cwd: string,\n args: string[],\n signal: AbortSignal,\n): Promise<string> {\n const out = await runRuntimeProcess({\n executable: 'git',\n args,\n cwd,\n signal,\n });\n return processText(out.stdout).trim();\n}\n\nasync function resolveFiles(\n ctx: JobContext,\n patterns: string[],\n): Promise<string[]> {\n const fromGit = await gitOutput(\n ctx.workspace.dir,\n ['ls-files', '--', ...patterns],\n ctx.signal,\n ).catch(() => '');\n const files = fromGit ? fromGit.split('\\n').filter(Boolean) : [];\n if (files.length) return files;\n return patterns.filter((p) => existsSync(join(ctx.workspace.dir, p)));\n}\n\nexport function reviewContext(config: ReviewContextConfig) {\n return async (ctx: JobContext, last: Outcome | undefined): Promise<string> => {\n const max = config.maxChars ?? 6000;\n\n const buildTests = async (): Promise<string[]> => {\n if (!config.tests) return [];\n if (config.tests === true) {\n const lines: string[] = [];\n if (last?.status) lines.push(`Last outcome status: ${last.status}`);\n if (last?.summary) lines.push(`Last outcome summary: ${last.summary}`);\n if (last?.data !== undefined) {\n // Guard the stringify: a circular or BigInt-bearing `data` would throw,\n // and agentCheck awaits context() outside its try/catch, so the throw\n // would fail the whole review instead of degrading the evidence.\n let rendered: string;\n try {\n rendered = JSON.stringify(last.data, null, 2);\n } catch {\n rendered = String(last.data);\n }\n lines.push(`Last outcome data: ${rendered}`);\n }\n return lines.length\n ? [`## Test and outcome context\\n\\n${lines.join('\\n')}`]\n : [];\n }\n const cwd = config.tests.cwd ?? ctx.workspace.dir;\n // Unlike the git probes, an unspawnable or aborted command would otherwise\n // reject out of reviewContext and throw the whole review. Guard it, and\n // never report `exit: 0` for a command that did not actually run — that\n // would tell the judge the tests passed.\n const result = await runRuntimeProcess({\n executable: config.tests.command,\n args: config.tests.args ?? [],\n cwd,\n signal: ctx.signal,\n }).catch((e: unknown) => {\n if (ctx.signal.aborted) throw e; // a real abort stops the run\n return undefined;\n });\n const exit = result?.exitCode ?? '(command did not run)';\n const stdout = result === undefined ? '' : processText(result.stdout);\n const stderr = result === undefined ? '' : processText(result.stderr);\n return [\n `## Test command\\n\\n${config.tests.command} ${(config.tests.args ?? []).join(' ')}\\n\\n` +\n `exit: ${exit}\\n\\nstdout:\\n${truncate(stdout, max)}\\n\\nstderr:\\n${truncate(stderr, max)}`,\n ];\n };\n\n const buildDiff = async (): Promise<string[]> => {\n if (!config.diff) return [];\n const diff = await gitOutput(\n ctx.workspace.dir,\n ['diff', 'HEAD', '--'],\n ctx.signal,\n ).catch(() => '');\n return diff ? [`## Git diff\\n\\n${truncate(diff, max)}`] : [];\n };\n\n const buildFiles = async (): Promise<string[]> => {\n if (!config.files?.length) return [];\n const files = await resolveFiles(ctx, config.files);\n const out: string[] = [];\n for (const file of files) {\n const path = join(ctx.workspace.dir, file);\n if (!existsSync(path)) continue;\n out.push(`## File: ${file}\\n\\n${truncate(readFileSync(path, 'utf8'), max)}`);\n }\n return out;\n };\n\n // The three evidence sources are independent read-only probes; gather them\n // concurrently, then assemble in a fixed order.\n const [tests, diff, files] = await Promise.all([\n buildTests(),\n buildDiff(),\n buildFiles(),\n ]);\n const sections = [...tests, ...diff, ...files];\n return truncate(\n sections.join('\\n\\n---\\n\\n') || '(no review context)',\n max,\n );\n };\n}\n","/**\n * Job builders. A `Job` is the unit of work; these are the common shapes.\n * The agent launch (`agentJob`) is deliberately provider-agnostic: it only\n * ever calls `Engine.run`, so it knows nothing about Claude, the CLI, an SDK,\n * an HTTP API, or any framework — swap the engine and the same job runs.\n */\n\nimport { existsSync } from 'node:fs';\nimport { isAbsolute, resolve } from 'node:path';\n\nimport type {\n Outcome,\n Job,\n JobContext,\n ProofArtifact,\n} from './types.js';\nimport { setMeta } from './describe.js';\n\n/** Shared state key holding every engine answer the run recorded so far.\n * Written by the runtime beside each engine:usage event; read by workflow\n * layers that must compare what answered against what was declared. */\nexport const RECORDED_ENGINE_USAGE = 'obversa:recorded-engine-usage';\n\n/** One recorded engine answer: the answering model and the job path that\n * produced it. */\nexport interface RecordedEngineUsage {\n readonly model: string;\n readonly path: readonly string[];\n /** The review side this answer belongs to, set by the workflow layer\n * that built the job. Untagged entries (advisors, agentCheck) belong\n * to neither side and are outside the recorded-family gate. */\n readonly role?: 'writer' | 'reviewer';\n /** The stage name this answer belongs to. */\n readonly stage?: string;\n}\n\nfunction recordEngineUsage(\n ctx: { readonly state: Record<string, unknown> },\n model: string,\n path: readonly string[],\n recordAs?: { readonly role: 'writer' | 'reviewer'; readonly stage: string },\n): void {\n const records = ctx.state[RECORDED_ENGINE_USAGE] as RecordedEngineUsage[] | undefined;\n const entry: RecordedEngineUsage = {\n model,\n path: [...path],\n ...(recordAs === undefined ? {} : { role: recordAs.role, stage: recordAs.stage }),\n };\n if (records === undefined) {\n ctx.state[RECORDED_ENGINE_USAGE] = [entry];\n } else {\n records.push(entry);\n }\n}\nimport type { AgentRequest, AgentResult, EngineRef } from '../engines/engine.js';\nimport { resolveEnv } from './env-overlay.js';\nimport { LoopError, type LoopErrorCode } from './errors.js';\nimport { scrubCapture } from './redact.js';\nimport { assertBudget } from './budget.js';\nimport { agentContract, resolveSystem, type AgentDef } from './agent.js';\nimport {\n feedbackBlock,\n graphPositionBlock,\n kickback,\n revisionRequest,\n} from './feedback.js';\nimport {\n attemptRequestMeta,\n logEngineTransportFailure,\n} from './engine-meta.js';\nimport { cloneFrozenJson, type JsonValue } from '../graph/value.js';\nimport { requireFinalResultText } from '../runtime/result-parts.js';\n\nexport interface AgentJobConfig {\n /** Tag this job's engine answers with the review side and stage they\n * belong to, so a workflow layer can compare recorded sides without\n * inferring them from paths. Untagged answers are outside such gates. */\n readonly recordAs?: { readonly role: 'writer' | 'reviewer'; readonly stage: string };\n /** Job label (for events). Defaults to the agent's name, then `'agent'`. */\n label?: string;\n /**\n * A reusable agent definition — supplies `system` (persona + skills), `model`, and\n * `tools` (the job's `system` and `model` override it when also set). The\n * persona lives in markdown via `fromFile`; this is the typed wrapper around it.\n */\n agent?: AgentDef;\n /** The prompt, or a function of the context (e.g. include the iteration). */\n prompt: string | ((ctx: JobContext) => string | Promise<string>);\n system?: string | ((ctx: JobContext) => string);\n /** Engine override: a registered name, your own `Engine`, or the default. */\n engine?: EngineRef;\n /** Bare model id — passed straight through to the engine. */\n model?: string;\n maxTokens?: number;\n tools?: string[];\n allowedTools?: string[];\n workspaceMode?: AgentRequest['workspaceMode'];\n /**\n * Mark this turn a leaf: forbid spawning sub-agents (the engine disallows the sub-agent\n * tool), so a branch bottoms out here. Falls back to the agent def's `leaf`.\n */\n leaf?: boolean;\n /**\n * Append the current `ctx.lastReview` / revision feedback to the prompt. This\n * keeps implementation agents from having to remember to manually read the\n * runtime feedback channel in every prompt function.\n */\n consumeFeedback?: boolean;\n /**\n * Append a compact DAG-position block: this node, its direct dependencies, and\n * its direct dependents, without handing the agent the whole orchestration graph.\n */\n graphContext?: boolean;\n /**\n * Bounded, visible escalation: the worker may ask for a consult by replying\n * with a `<consult_advisor>` block. The runtime runs one model-pinned advisor turn,\n * records the question/reply, and then gives the reply back to the worker in a\n * fresh turn. This is the sanctioned alternative to shelling out to another\n * model from inside a leaf.\n */\n advisor?: AdvisorConfig;\n /** Working dir for the turn. Default: the workspace dir (the worktree). */\n cwd?: string;\n /**\n * Env vars pinned for this leaf's engine subprocess — the most specific\n * layer, over any `withEnv` overlay and the running environment's vars.\n * Engines that spawn no subprocess ignore it.\n */\n env?: Record<string, string>;\n /**\n * Soft timeout for each worker or fallback invocation. Advisor consults\n * inherit it unless overridden; each invocation receives its own window.\n */\n timeoutMs?: number;\n /** Extra hard-timeout window after `timeoutMs` for completed final results. */\n timeoutGraceMs?: number;\n /** Fallback route(s) used when the primary engine hits a configured error. */\n fallback?: AgentRoute | AgentRoute[];\n /** Error codes that may spill to `fallback`. Default: RATE_LIMIT and QUOTA. */\n fallbackOn?: LoopErrorCode[];\n /**\n * Map the agent's raw text into an `Outcome`. Default: `pass`, with the text\n * as the summary. Return `fail` to keep an enclosing loop going. `text` is\n * the reply after the capture scrub (injected env values and secret-shaped\n * tokens are redacted) before the outcome enters persisted records.\n */\n outcome?: (\n text: string,\n ctx: JobContext,\n ) => Outcome | Promise<Outcome>;\n}\n\nexport interface AdvisorConfig {\n engine?: EngineRef;\n model?: string;\n systemPrompt?: string;\n maxCalls?: number;\n maxTokens?: number;\n timeoutMs?: number;\n timeoutGraceMs?: number;\n}\n\nexport interface AgentRoute {\n engine?: EngineRef;\n model?: string;\n timeoutMs?: number;\n timeoutGraceMs?: number;\n}\n\nexport type ProofDescriptor = ProofArtifact;\nexport type ProofProducer = (\n ctx: JobContext,\n) => ProofDescriptor | Promise<ProofDescriptor>;\n\nconst TERMINAL = (text: string): Outcome => ({\n status: 'pass',\n summary: text.trim().slice(0, 280),\n data: text,\n});\n\nfunction advisorInstruction(maxCalls: number): string {\n return (\n `## Advisor consults\\n` +\n `When you hit a hard design fork, you may request at most ${maxCalls} advisor ` +\n `consult${maxCalls === 1 ? '' : 's'}. Do not shell out to another model. ` +\n `Instead, make your whole reply exactly this block:\\n\\n` +\n `<consult_advisor>\\n` +\n `<question>the precise question</question>\\n` +\n `<context>the minimum context the advisor needs</context>\\n` +\n `</consult_advisor>\\n\\n` +\n `The runtime will record the consult and return the advisor reply to you.`\n );\n}\n\nfunction withOperationalContext(\n ctx: JobContext,\n userPrompt: string,\n config: Pick<AgentJobConfig, 'consumeFeedback' | 'graphContext' | 'advisor'>,\n): string {\n const parts = [userPrompt];\n if (config.consumeFeedback && ctx.lastReview) {\n parts.push(feedbackBlock(ctx.lastReview));\n }\n if (config.graphContext && ctx.graph) {\n parts.push(graphPositionBlock(ctx.graph, ctx.reviewerGate));\n }\n if (config.advisor) parts.push(advisorInstruction(config.advisor.maxCalls ?? 1));\n return parts.join('\\n\\n---\\n\\n');\n}\n\ninterface AdvisorRequest {\n question: string;\n context?: string;\n}\n\nfunction tagValue(text: string, tag: string): string | undefined {\n const match = new RegExp(`<${tag}>\\\\s*([\\\\s\\\\S]*?)\\\\s*</${tag}>`, 'i').exec(text);\n return match?.[1]?.trim() || undefined;\n}\n\nfunction parseAdvisorRequest(text: string): AdvisorRequest | undefined {\n const block = /^\\s*<consult_advisor>\\s*([\\s\\S]*?)\\s*<\\/consult_advisor>\\s*$/i.exec(text)?.[1];\n if (!block) return undefined;\n const question = tagValue(block, 'question') ?? block.trim();\n if (!question) return undefined;\n return { question, context: tagValue(block, 'context') };\n}\n\nfunction advisorFollowup(call: number, request: AdvisorRequest, reply: string): string {\n return (\n `Advisor consult #${call}\\n\\n` +\n `Question:\\n${request.question}\\n\\n` +\n `${request.context ? `Context supplied:\\n${request.context}\\n\\n` : ''}` +\n `Advisor reply:\\n${reply}\\n\\n` +\n `Continue the original task. Do not ask the same question again.`\n );\n}\n\nasync function runAdvisorConsult(\n ctx: JobContext,\n label: string,\n config: AdvisorConfig,\n call: number,\n request: AdvisorRequest,\n inherited: { maxTokens?: number; timeoutMs?: number; timeoutGraceMs?: number },\n redactionEnv: Record<string, string> | undefined,\n): Promise<{ reply: string; model?: string }> {\n assertBudget(ctx);\n const engine = ctx.resolveEngine(config.engine);\n const result = await engine.run(\n {\n prompt:\n `Question:\\n${request.question}` +\n (request.context ? `\\n\\nContext:\\n${request.context}` : ''),\n system: config.systemPrompt,\n model: config.model,\n maxTokens: config.maxTokens ?? inherited.maxTokens,\n timeoutMs: config.timeoutMs ?? inherited.timeoutMs,\n timeoutGraceMs: config.timeoutGraceMs ?? inherited.timeoutGraceMs,\n cwd: ctx.workspace.dir,\n leaf: true,\n attempt: attemptRequestMeta(ctx, `${label}:advisor`),\n },\n (event) => {\n const ts = Date.now();\n if (event.type === 'usage') {\n ctx.emit({\n kind: 'engine:usage',\n ts,\n path: [...ctx.path],\n model: event.model,\n usage: event.usage,\n });\n recordEngineUsage(ctx, event.model, ctx.path);\n } else if (event.type === 'tool') {\n ctx.emit({\n kind: 'engine:tool',\n ts,\n path: [...ctx.path],\n name: event.name,\n phase: event.phase,\n });\n }\n },\n ctx.signal,\n );\n logEngineTransportFailure(ctx, result, redactionEnv);\n const reply = scrubCapture(\n requireFinalResultText(result),\n redactionEnv,\n ).trim();\n ctx.emit({\n kind: 'advisor:consult',\n ts: Date.now(),\n path: [...ctx.path],\n label,\n call,\n question: request.question,\n reply,\n model: result.effective.model ?? undefined,\n });\n return { reply, model: result.effective.model ?? undefined };\n}\n\n/** Run one fresh agent turn through whichever engine is selected. */\nexport function agentJob(config: AgentJobConfig): Job {\n const job: Job = async (ctx) => {\n const recordAs = 'recordAs' in config ? config.recordAs : undefined;\n const path = [...ctx.path];\n const label = config.label ?? config.agent?.name ?? 'agent';\n const defaultTimeoutMs = config.timeoutMs ?? ctx.timeoutMs;\n const defaultTimeoutGraceMs = config.timeoutGraceMs ?? ctx.timeoutGraceMs;\n ctx.emit({\n kind: 'job:start',\n ts: Date.now(),\n path,\n label,\n timeoutMs: defaultTimeoutMs,\n });\n\n const userPrompt =\n typeof config.prompt === 'function'\n ? await config.prompt(ctx)\n : config.prompt;\n const contextualPrompt = withOperationalContext(ctx, userPrompt, config);\n // System precedence: an explicit `system` overrides the agent's (persona + skills).\n const system =\n config.system !== undefined\n ? typeof config.system === 'function'\n ? config.system(ctx)\n : config.system\n : config.agent\n ? resolveSystem(config.agent)\n : undefined;\n\n // Hoisted so the reply scrub below can strike the same injected values the\n // engine subprocess was handed.\n const env = resolveEnv(ctx, config.env);\n const fallbacks = config.fallback\n ? Array.isArray(config.fallback)\n ? config.fallback\n : [config.fallback]\n : [];\n const routes: AgentRoute[] = [\n {\n engine: config.engine,\n model: config.model ?? config.agent?.model,\n timeoutMs: defaultTimeoutMs,\n timeoutGraceMs: defaultTimeoutGraceMs,\n },\n ...fallbacks,\n ];\n const fallbackOn = new Set<LoopErrorCode>(\n config.fallbackOn ?? ['RATE_LIMIT', 'QUOTA'],\n );\n let result: AgentResult | undefined;\n for (let i = 0; i < routes.length; i += 1) {\n const route = routes[i]!;\n const routeModel = route.model;\n const timeoutMs = route.timeoutMs ?? defaultTimeoutMs;\n const timeoutGraceMs = route.timeoutGraceMs ?? defaultTimeoutGraceMs;\n try {\n const basePrompt = contextualPrompt;\n const engine = ctx.resolveEngine(route.engine ?? config.engine);\n const maxAdvisorCalls = config.advisor?.maxCalls ?? 1;\n const advisorReplies: string[] = [];\n for (;;) {\n const prompt = advisorReplies.length\n ? `${basePrompt}\\n\\n---\\n\\n${advisorReplies.join('\\n\\n---\\n\\n')}`\n : basePrompt;\n assertBudget(ctx);\n result = await engine.run(\n {\n prompt,\n system,\n model: routeModel,\n maxTokens: config.maxTokens,\n tools: config.tools ?? config.agent?.tools,\n allowedTools: config.allowedTools,\n workspaceMode: config.workspaceMode,\n leaf: config.leaf ?? config.agent?.leaf,\n cwd: config.cwd ?? ctx.workspace.dir,\n timeoutMs,\n timeoutGraceMs,\n env,\n attempt: attemptRequestMeta(ctx, label),\n },\n (e) => {\n const ts = Date.now();\n switch (e.type) {\n case 'text':\n ctx.emit({ kind: 'engine:text', ts, path, delta: e.delta });\n break;\n case 'thinking':\n ctx.emit({ kind: 'engine:thinking', ts, path, delta: e.delta });\n break;\n case 'tool':\n ctx.emit({\n kind: 'engine:tool',\n ts,\n path,\n name: e.name,\n phase: e.phase,\n });\n break;\n case 'usage':\n ctx.emit({\n kind: 'engine:usage',\n ts,\n path,\n model: e.model,\n usage: e.usage,\n ...recordAs,\n });\n recordEngineUsage(ctx, e.model, path, recordAs);\n break;\n }\n },\n ctx.signal,\n );\n logEngineTransportFailure(ctx, result, env);\n const advisor = config.advisor;\n const capturedText = scrubCapture(\n requireFinalResultText(result),\n env,\n );\n const consult = advisor ? parseAdvisorRequest(capturedText) : undefined;\n if (!advisor || !consult) break;\n if (advisorReplies.length >= maxAdvisorCalls) {\n throw new LoopError({\n code: 'BUDGET',\n phase: 'body',\n message: `${label} exceeded advisor consult cap (${maxAdvisorCalls})`,\n });\n }\n const call = advisorReplies.length + 1;\n const { reply } = await runAdvisorConsult(\n ctx,\n label,\n advisor,\n call,\n consult,\n { maxTokens: config.maxTokens, timeoutMs, timeoutGraceMs },\n env,\n );\n advisorReplies.push(advisorFollowup(call, consult, reply));\n }\n break;\n } catch (e) {\n const error = LoopError.from(e, {\n code: ctx.signal.aborted ? 'ABORTED' : 'ENGINE',\n phase: 'body',\n path: ctx.path,\n iteration: ctx.iteration,\n });\n if (\n i < routes.length - 1 &&\n !ctx.signal.aborted &&\n fallbackOn.has(error.code)\n ) {\n ctx.log(\n `${label} primary route hit ${error.code}; trying fallback route ${i + 2}`,\n 'warn',\n );\n continue;\n }\n ctx.emit({\n kind: 'error',\n ts: Date.now(),\n path,\n message: error.message,\n code: error.code,\n });\n const outcome: Outcome = {\n status: ctx.signal.aborted ? 'aborted' : 'fail',\n summary: error.message,\n error,\n };\n ctx.emit({\n kind: 'job:end',\n ts: Date.now(),\n path,\n label,\n outcome,\n });\n return outcome;\n }\n }\n if (!result)\n throw new LoopError({\n code: 'ENGINE',\n phase: 'body',\n message: `${label} produced no engine result`,\n });\n\n // The reply enters events and status records. Scrub it before any consumer\n // can persist an injected environment value.\n const text = scrubCapture(requireFinalResultText(result), env);\n\n const outcome = config.outcome\n ? await config.outcome(text, ctx)\n : TERMINAL(text);\n const finalOutcome =\n result.transportFailure?.kind === 'timeout' && outcome.late !== true\n ? { ...outcome, late: true }\n : outcome;\n ctx.emit({\n kind: 'job:end',\n ts: Date.now(),\n path,\n label,\n outcome: finalOutcome,\n });\n return finalOutcome;\n };\n\n return setMeta(job, {\n kind: 'agent',\n name: config.label ?? config.agent?.name ?? 'agent',\n contract: agentContract(config.agent),\n });\n}\n\nexport { kickback, revisionRequest };\n\n/** A deterministic step from a plain function — for glue, checks, side effects. */\n/**\n * What a `fnJob` function may return: a full outcome, a one-line summary (the\n * step passed, and this is what it did), or nothing (the step passed; its\n * label is the summary). A throw is a fail carrying the error.\n */\nexport type FnJobResult = Outcome | string | void;\n\nconst OUTCOME_STATUSES = new Set(['pass', 'fail', 'aborted', 'exhausted', 'paused']);\n\nfunction isOutcome(value: unknown): value is Outcome {\n return typeof value === 'object' && value !== null\n && OUTCOME_STATUSES.has((value as { status?: unknown }).status as string);\n}\n\nfunction describeReturn(value: unknown): string {\n if (value === null) return 'null';\n if (typeof value === 'object') {\n return `an object with status ${JSON.stringify((value as { status?: unknown }).status)}`;\n }\n return `a ${typeof value}`;\n}\n\nexport function fnJob(\n label: string,\n fn: (ctx: JobContext) => FnJobResult | Promise<FnJobResult>,\n): Job {\n const job: Job = async (ctx) => {\n const path = [...ctx.path];\n ctx.emit({\n kind: 'job:start',\n ts: Date.now(),\n path,\n label,\n timeoutMs: ctx.timeoutMs,\n });\n let outcome: Outcome;\n try {\n const returned = await fn(ctx);\n if (returned === undefined) {\n outcome = { status: 'pass', summary: label };\n } else if (typeof returned === 'string') {\n outcome = { status: 'pass', summary: returned };\n } else if (isOutcome(returned)) {\n outcome = returned;\n } else {\n throw new LoopError({\n code: 'VALIDATION',\n message: `fnJob \"${label}\" returned ${describeReturn(returned)}, which is not an outcome, a string or nothing`,\n });\n }\n } catch (e) {\n const error = LoopError.from(e, {\n code: 'BODY',\n phase: 'body',\n path: ctx.path,\n iteration: ctx.iteration,\n });\n outcome = { status: 'fail', summary: error.message, error };\n ctx.emit({\n kind: 'error',\n ts: Date.now(),\n path,\n message: error.message,\n code: error.code,\n });\n }\n ctx.emit({ kind: 'job:end', ts: Date.now(), path, label, outcome });\n return outcome;\n };\n\n return setMeta(job, { kind: 'fn', name: label });\n}\n\nfunction validateProofArtifact(name: string, artifact: ProofArtifact): void {\n if (!artifact || typeof artifact !== 'object') {\n throw new LoopError({\n code: 'VALIDATION',\n message: `prove \"${name}\" returned no artifact descriptor`,\n });\n }\n if (!['html', 'image', 'markdown', 'table', 'json'].includes(artifact.kind)) {\n throw new LoopError({\n code: 'VALIDATION',\n message: `prove \"${name}\" returned unsupported kind \"${String(artifact.kind)}\"`,\n });\n }\n const hasPath = typeof artifact.path === 'string' && artifact.path.trim() !== '';\n const hasData = artifact.data !== undefined;\n if (hasPath === hasData) {\n throw new LoopError({\n code: 'VALIDATION',\n message: `prove \"${name}\" must return exactly one of path or data`,\n });\n }\n if (artifact.data !== undefined && !isJsonValue(artifact.data)) {\n throw new LoopError({\n code: 'VALIDATION',\n message: `prove \"${name}\" data must be JSON-serializable`,\n });\n }\n if (artifact.meta !== undefined && !isJsonValue(artifact.meta)) {\n throw new LoopError({\n code: 'VALIDATION',\n message: `prove \"${name}\" meta must be JSON-serializable`,\n });\n }\n}\n\nfunction isJsonValue(value: unknown): value is JsonValue {\n try {\n cloneFrozenJson(value as JsonValue);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function prove(name: string, producer: ProofProducer): Job {\n const job: Job = async (ctx) => {\n const path = [...ctx.path];\n ctx.emit({\n kind: 'job:start',\n ts: Date.now(),\n path,\n label: name,\n timeoutMs: ctx.timeoutMs,\n });\n let outcome: Outcome;\n try {\n const artifact = await producer(ctx);\n validateProofArtifact(name, artifact);\n if (artifact.path) {\n const artifactPath = isAbsolute(artifact.path)\n ? artifact.path\n : resolve(ctx.workspace.dir, artifact.path);\n if (!existsSync(artifactPath)) {\n throw new LoopError({\n code: 'VALIDATION',\n message: `prove \"${name}\" path does not exist: ${artifact.path}`,\n });\n }\n }\n ctx.emit({ kind: 'proof', ts: Date.now(), path, name, artifact });\n outcome = {\n status: 'pass',\n summary: `proof registered: ${artifact.title ?? name}`,\n data: { proof: artifact },\n };\n } catch (e) {\n const error = LoopError.from(e, {\n code: 'VALIDATION',\n phase: 'body',\n path,\n iteration: ctx.iteration,\n });\n outcome = { status: 'fail', summary: error.message, error };\n ctx.emit({\n kind: 'error',\n ts: Date.now(),\n path,\n message: error.message,\n code: error.code,\n });\n }\n ctx.emit({ kind: 'job:end', ts: Date.now(), path, label: name, outcome });\n return outcome;\n };\n\n return setMeta(job, { kind: 'prove', name });\n}\n","import { revisionRequest } from './core/job.js';\nimport type { FeedbackFinding, Outcome } from './core/types.js';\n\ninterface AgentDecision {\n readonly status: 'pass' | 'revise';\n readonly summary: string;\n readonly findings?: readonly FeedbackFinding[];\n}\n\nexport const INVALID_TEAM_DECISION = 'The engine response was not a valid team decision JSON object.';\n\nfunction firstObject(text: string): string | undefined {\n const start = text.indexOf('{');\n if (start === -1) return undefined;\n let depth = 0;\n let inString = false;\n let escaped = false;\n for (let index = start; index < text.length; index += 1) {\n const character = text[index]!;\n if (inString) {\n if (escaped) escaped = false;\n else if (character === '\\\\') escaped = true;\n else if (character === '\"') inString = false;\n continue;\n }\n if (character === '\"') inString = true;\n else if (character === '{') depth += 1;\n else if (character === '}' && --depth === 0) return text.slice(start, index + 1);\n }\n return undefined;\n}\n\nfunction parseDecision(text: string): AgentDecision | undefined {\n const trimmed = text.trim();\n const object = firstObject(trimmed);\n if (!object) return undefined;\n try {\n const value: unknown = JSON.parse(object);\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return undefined;\n const candidate = value as Partial<AgentDecision>;\n if (candidate.status !== 'pass' && candidate.status !== 'revise') return undefined;\n if (typeof candidate.summary !== 'string' || !candidate.summary.trim()) return undefined;\n if (candidate.findings !== undefined && !Array.isArray(candidate.findings)) return undefined;\n return {\n status: candidate.status,\n summary: candidate.summary,\n findings: candidate.findings ? [...candidate.findings] : undefined,\n };\n } catch {\n return undefined;\n }\n}\n\nexport function outcomeFromAgentText(text: string, target?: string): Outcome {\n const decision = parseDecision(text);\n if (!decision) {\n return {\n status: 'fail',\n summary: INVALID_TEAM_DECISION,\n data: { response: text },\n };\n }\n if (decision.status === 'pass') {\n return { status: 'pass', summary: decision.summary };\n }\n return revisionRequest({\n target,\n reason: decision.summary,\n findings: decision.findings ? [...decision.findings] : undefined,\n });\n}\n","import { createHash } from 'node:crypto';\nimport { readFile, stat } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nimport { agentJob } from './core/job.js';\nimport { copyJobMeta } from './core/describe.js';\nimport { LoopError } from './core/errors.js';\nimport type { Job, JobContext } from './core/types.js';\nimport type { TeamSeat } from '@obversa/api';\nimport { INVALID_TEAM_DECISION, outcomeFromAgentText } from './workflow-agent-response.js';\n\ntype TeamWorkspaceMode = 'read' | 'write';\n\nexport interface TestCommand {\n readonly command: string;\n readonly args: readonly string[];\n readonly timeoutMs?: number;\n}\n\nexport interface TeamInput {\n readonly brief: string;\n readonly workspace: string;\n readonly files: readonly string[];\n readonly test: TestCommand;\n}\n\nexport interface ReviewerSeat {\n readonly name: string;\n readonly seat: TeamSeat;\n readonly scope?: string;\n}\n\nexport function seatIdentity(seat: TeamSeat): TeamSeat['identity'] {\n const identity = seat.identity;\n if (\n !identity\n || typeof identity.adapter !== 'string'\n || typeof identity.provider !== 'string'\n || typeof identity.modelFamily !== 'string'\n || typeof identity.model !== 'string'\n || !Array.isArray(identity.tools)\n || !identity.adapter.trim()\n || !identity.provider.trim()\n || !identity.model.trim()\n || !identity.modelFamily.trim()\n ) {\n throw new TypeError('engine identity must contain adapter, provider, model family, and model');\n }\n return identity;\n}\n\nexport function assertDistinctSeats(seats: readonly TeamSeat[]): void {\n const identities = seats.map((seat, index) => {\n try {\n return seatIdentity(seat);\n } catch (cause) {\n const message = cause instanceof Error ? cause.message : 'invalid engine identity';\n throw new TypeError(`seat ${index + 1} has an invalid engine identity: ${message}`, { cause });\n }\n });\n for (let leftIndex = 0; leftIndex < identities.length; leftIndex += 1) {\n for (let rightIndex = leftIndex + 1; rightIndex < identities.length; rightIndex += 1) {\n const left = identities[leftIndex]!;\n const right = identities[rightIndex]!;\n const sameFamily = left.modelFamily === right.modelFamily;\n if (!sameFamily) continue;\n throw new TypeError(\n `seats ${leftIndex + 1} and ${rightIndex + 1} report the same model family ${left.modelFamily}; model family must be distinct per seat`,\n );\n }\n }\n}\n\nexport function requireNonEmptyFiles(\n label: string,\n job: Job,\n workspace: string,\n files: readonly string[],\n): Job {\n return async (ctx) => {\n const outcome = await job(ctx);\n if (outcome.status !== 'pass') return outcome;\n for (const file of files) {\n const path = join(workspace, file);\n try {\n const details = await stat(path);\n if (!details.isFile() || details.size === 0) {\n return {\n status: 'fail',\n summary: `${label} did not produce a non-empty file: ${file}`,\n };\n }\n } catch {\n return {\n status: 'fail',\n summary: `${label} did not produce a non-empty file: ${file}`,\n };\n }\n }\n return outcome;\n };\n}\n\nexport function requireNoFiles(\n label: string,\n job: Job,\n workspace: string,\n files: readonly string[],\n phase: 'body' | 'review' = 'review',\n): Job {\n const wrapper: Job = async (ctx) => {\n const before = new Map<string, FileSnapshot>();\n for (const file of files) {\n before.set(file, await snapshotFile(join(workspace, file)));\n }\n const outcome = await job(ctx);\n const changed: string[] = [];\n for (const file of files) {\n const after = await snapshotFile(join(workspace, file));\n const previous = before.get(file)!;\n if (\n previous.exists !== after.exists\n || previous.hash !== after.hash\n ) {\n changed.push(file);\n }\n }\n if (changed.length) {\n const summary = `${label} wrote, changed or removed the implementation before its step completed: ${changed.join(', ')}`;\n return {\n status: 'fail',\n summary,\n error: new LoopError({ code: 'WRITE_BOUNDARY', phase, message: summary }),\n };\n }\n return outcome;\n };\n return copyJobMeta(wrapper, job);\n}\n\ninterface FileSnapshot {\n exists: boolean;\n hash: string | null;\n}\n\nasync function snapshotFile(path: string): Promise<FileSnapshot> {\n try {\n const details = await stat(path);\n if (!details.isFile()) return { exists: true, hash: null };\n const contents = await readFile(path);\n return { exists: true, hash: createHash('sha256').update(contents).digest('hex') };\n } catch {\n return { exists: false, hash: null };\n }\n}\n\nfunction rolePrompt(role: string, brief: string): string {\n return [\n `Obversa team role: ${role}`,\n `Work brief: ${brief}`,\n 'Work in the supplied cwd.',\n ].join('\\n');\n}\n\nexport function teamAgent(\n label: string,\n seat: TeamSeat,\n input: TeamInput,\n instructions: string | ((ctx: JobContext) => string),\n target?: string,\n decisionFile?: string,\n workspaceMode: TeamWorkspaceMode = 'write',\n recordAs?: { readonly role: 'writer' | 'reviewer'; readonly stage: string },\n): Job {\n const identity = seatIdentity(seat);\n if (workspaceMode === 'read' && identity.tools.length === 0) {\n throw new TypeError(`${label} cannot read the workspace: reviewer seat declares no tools`);\n }\n const agent = agentJob({\n label,\n engine: seat.engine,\n model: identity.model,\n tools: [...identity.tools],\n allowedTools: [...identity.tools],\n workspaceMode,\n cwd: input.workspace,\n consumeFeedback: target !== undefined,\n ...(recordAs === undefined ? {} : { recordAs }),\n prompt: (ctx) => `${rolePrompt(label, input.brief)}\\n${typeof instructions === 'function' ? instructions(ctx) : instructions}\\nReturn one JSON object: {\"status\":\"pass\"|\"revise\",\"summary\":\"...\",\"findings\":[{\"evidence\":\"...\"}]}`,\n outcome: (text) => outcomeFromAgentText(text, target),\n });\n if (!decisionFile) return agent;\n return async (ctx) => {\n const path = join(input.workspace, decisionFile);\n const before = await snapshotFile(path);\n const replyOutcome = await agent(ctx);\n const after = await snapshotFile(path);\n const changed = before.exists !== after.exists || before.hash !== after.hash;\n if (!changed || !after.exists || after.hash === null) return replyOutcome;\n try {\n const fileOutcome = outcomeFromAgentText(await readFile(path, 'utf8'), target);\n return fileOutcome.status === 'fail' && fileOutcome.summary === INVALID_TEAM_DECISION\n ? replyOutcome\n : fileOutcome;\n } catch {\n return replyOutcome;\n }\n };\n}\n\nexport function panelReviewers(\n reviewers: readonly ReviewerSeat[],\n input: TeamInput,\n reviewTarget?: string,\n recordAs?: { readonly role: 'writer' | 'reviewer'; readonly stage: string },\n): Array<{ name: string; scope?: string; job: Job }> {\n return reviewers.map((reviewer) => {\n const instructions = [\n `Review target: ${reviewTarget ?? 'the supplied files and test evidence'}.`,\n 'Judge only that target against this stage gate; do not require files from another stage.',\n reviewer.scope ? `Scope: ${reviewer.scope}` : undefined,\n ].filter(Boolean).join('\\n');\n const review = teamAgent(\n reviewer.name,\n reviewer.seat,\n input,\n instructions,\n undefined,\n undefined,\n 'read',\n recordAs,\n );\n const retry = teamAgent(\n reviewer.name,\n reviewer.seat,\n input,\n `${instructions}\\nYour previous response was not a valid decision. Return only the required JSON object.`,\n undefined,\n undefined,\n 'read',\n recordAs,\n );\n const job: Job = async (ctx) => {\n const first = await review(ctx);\n if (first.status !== 'fail' || first.summary !== INVALID_TEAM_DECISION) return first;\n const second = await retry(ctx);\n if (second.status !== 'fail' || second.summary !== INVALID_TEAM_DECISION) return second;\n const summary = `reviewer ${reviewer.name} returned no decision`;\n return {\n status: 'fail',\n summary,\n error: new LoopError({ code: 'ENGINE', phase: 'review', message: summary }),\n };\n };\n return { name: reviewer.name, scope: reviewer.scope, job };\n });\n}\n\nexport { INVALID_TEAM_DECISION, outcomeFromAgentText } from './workflow-agent-response.js';\n"]}
|