@perstack/runtime 0.0.78 → 0.0.79
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/dist/bin/cli.js +1 -1
- package/dist/{chunk-REYCEAEN.js → chunk-QJJAMZV3.js} +4 -3
- package/dist/chunk-QJJAMZV3.js.map +1 -0
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.js +4 -3
- package/dist/src/index.js.map +1 -1
- package/package.json +14 -13
- package/dist/chunk-REYCEAEN.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/helpers/lockfile.ts","../src/helpers/model.ts","../src/helpers/usage.ts","../src/helpers/checkpoint.ts","../src/helpers/resolve-expert.ts","../src/helpers/setup-experts.ts","../src/helpers/thinking.ts","../src/tool-execution/mcp-executor.ts","../src/tool-execution/executor-factory.ts","../src/tool-execution/tool-classifier.ts","../src/state-machine/states/calling-delegates.ts","../src/state-machine/states/calling-interactive-tools.ts","../src/messages/message.ts","../src/state-machine/states/calling-mcp-tools.ts","../src/state-machine/states/finishing-step.ts","../src/state-machine/states/generating-run-result.ts","../src/state-machine/states/generating-tool-call.ts","../src/messages/instruction-message.ts","../src/state-machine/states/init.ts","../src/state-machine/states/preparing-for-step.ts","../src/state-machine/states/resolving-tool-result.ts","../src/state-machine/states/resuming-from-stop.ts","../src/state-machine/machine.ts","../src/state-machine/actor-factory.ts","../src/state-machine/coordinator.ts","../src/state-machine/executor.ts","../src/orchestration/delegation-strategy.ts","../src/events/event-emitter.ts","../src/helpers/provider-adapter-factory.ts","../../../packages/providers/core/src/base.ts","../../../packages/providers/anthropic/src/errors.ts","../../../packages/providers/anthropic/src/skills.ts","../../../packages/providers/anthropic/src/tools.ts","../../../packages/providers/anthropic/src/adapter.ts","../../../packages/providers/azure-openai/src/errors.ts","../../../packages/providers/azure-openai/src/tools.ts","../../../packages/providers/azure-openai/src/adapter.ts","../../../packages/providers/bedrock/src/errors.ts","../../../packages/providers/bedrock/src/adapter.ts","../../../packages/providers/deepseek/src/errors.ts","../../../packages/providers/deepseek/src/adapter.ts","../../../packages/providers/google/src/errors.ts","../../../packages/providers/google/src/tools.ts","../../../packages/providers/google/src/adapter.ts","../../../packages/providers/ollama/src/errors.ts","../../../packages/providers/ollama/src/adapter.ts","../../../packages/providers/openai/src/errors.ts","../../../packages/providers/openai/src/tools.ts","../../../packages/providers/openai/src/adapter.ts","../../../packages/providers/vertex/src/errors.ts","../../../packages/providers/vertex/src/tools.ts","../../../packages/providers/vertex/src/adapter.ts","../src/helpers/register-providers.ts","../src/llm/executor.ts","../src/orchestration/single-run-executor.ts","../src/run.ts"],"names":["undiciFetch","resolveExpertToRun","path","createId","part","resolveToolResults","text","completeRun","classifyToolCalls","createStreamingEvent","stopRunByError","retry","dedent","ProxyAgent","createAnthropic","APICallError","createAzure","createAmazonBedrock","createDeepSeek","createGoogleGenerativeAI","createOllama","createOpenAI","createVertex"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,eAAA,GAAA;AAAA,EACE,IAAA,EAAQ,mBAAA;AAAA,EACR,OAAA,EAAW,QAAA;AAAA,EACX,WAAA,EAAe,kBAAA;AAAA,EACf,MAAA,EAAU,+BAAA;AAAA,EACV,OAAA,EAAW,YAAA;AAAA,EACX,IAAA,EAAQ,QAAA;AAAA,EACR,GAAA,EAAO;AAAA,IACL,kBAAA,EAAoB;AAAA,GACtB;AAAA,EACA,OAAA,EAAW;AAAA,IACT,GAAA,EAAK;AAAA,GACP;AAAA,EACA,aAAA,EAAiB;AAAA,IACf,MAAA,EAAU,QAAA;AAAA,IACV,GAAA,EAAO;AAAA,MACL,kBAAA,EAAoB;AAAA,KACtB;AAAA,IACA,OAAA,EAAW;AAAA,MACT,GAAA,EAAK;AAAA,KACP;AAAA,IACA,KAAA,EAAS;AAAA,MACP,GAAA,EAAK;AAAA;AACP,GACF;AAAA,EACA,KAAA,EAAS;AAAA,IACP;AAAA,GACF;AAAA,EACA,OAAA,EAAW;AAAA,IACT,KAAA,EAAS,aAAA;AAAA,IACT,KAAA,EAAS,kDAAA;AAAA,IACT,SAAA,EAAa;AAAA,GACf;AAAA,EACA,YAAA,EAAgB;AAAA,IACd,wBAAA,EAA0B,QAAA;AAAA,IAC1B,mBAAA,EAAqB,QAAA;AAAA,IACrB,eAAA,EAAiB,QAAA;AAAA,IACjB,kBAAA,EAAoB,QAAA;AAAA,IACpB,gBAAA,EAAkB,QAAA;AAAA,IAClB,uBAAA,EAAyB,QAAA;AAAA,IACzB,gBAAA,EAAkB,QAAA;AAAA,IAClB,2BAAA,EAA6B,SAAA;AAAA,IAC7B,sBAAA,EAAwB,QAAA;AAAA,IACxB,wBAAA,EAA0B,aAAA;AAAA,IAC1B,sBAAA,EAAwB,aAAA;AAAA,IACxB,gBAAA,EAAkB,aAAA;AAAA,IAClB,gBAAA,EAAkB,aAAA;AAAA,IAClB,EAAA,EAAM,UAAA;AAAA,IACN,uBAAA,EAAyB,QAAA;AAAA,IACzB,SAAA,EAAa,SAAA;AAAA,IACb,MAAA,EAAU,SAAA;AAAA,IACV,WAAA,EAAa,QAAA;AAAA,IACb,WAAA,EAAa,QAAA;AAAA,IACb,MAAA,EAAU,SAAA;AAAA,IACV,MAAA,EAAU;AAAA,GACZ;AAAA,EACA,eAAA,EAAmB;AAAA,IACjB,8BAAA,EAAgC,aAAA;AAAA,IAChC,iCAAA,EAAmC,aAAA;AAAA,IACnC,4BAAA,EAA8B,aAAA;AAAA,IAC9B,6BAAA,EAA+B,aAAA;AAAA,IAC/B,2BAAA,EAA6B,aAAA;AAAA,IAC7B,2BAAA,EAA6B,aAAA;AAAA,IAC7B,2BAAA,EAA6B,aAAA;AAAA,IAC7B,yBAAA,EAA2B,aAAA;AAAA,IAC3B,2BAAA,EAA6B,aAAA;AAAA,IAC7B,kBAAA,EAAoB,SAAA;AAAA,IACpB,aAAA,EAAe,SAAA;AAAA,IACf,KAAA,EAAS,SAAA;AAAA,IACT,IAAA,EAAQ,QAAA;AAAA,IACR,UAAA,EAAc,QAAA;AAAA,IACd,MAAA,EAAU;AAAA,GACZ;AAAA,EACA,OAAA,EAAW;AAAA,IACT,IAAA,EAAQ;AAAA;AAEZ;AClEO,SAAS,aAAa,YAAA,EAAuC;AAClE,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,YAAA,CAAa,YAAA,EAAc,OAAO,CAAA;AAClD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACjC,IAAA,OAAO,sBAAA,CAAuB,cAAA,EAAgB,MAAA,EAAQ,eAAe,CAAA;AAAA,EACvE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,YAAY,UAAA,EAA6B;AAChD,EAAA,MAAM,KAAA,GAAQ,WAAW,WAAA,EAAY;AACrC,EAAA,OAAO,MAAM,UAAA,CAAW,UAAU,CAAA,IAAK,KAAA,CAAM,WAAW,SAAS,CAAA;AACnE;AAEO,SAAS,aAAa,UAAA,EAAoC;AAC/D,EAAA,IAAI,UAAA,EAAY;AAEd,IAAA,IAAI,WAAA,CAAY,UAAU,CAAA,EAAG;AAC3B,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,SAAA,GAAY,KAAK,OAAA,CAAQ,IAAA,CAAK,QAAQ,OAAA,CAAQ,GAAA,EAAI,EAAG,UAAU,CAAC,CAAA;AACtE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,eAAe,CAAA;AAAA,EAC7C;AACA,EAAA,OAAO,uBAAA,CAAwB,OAAA,CAAQ,GAAA,EAAK,CAAA;AAC9C;AAEA,SAAS,wBAAwB,GAAA,EAA4B;AAC3D,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,eAAe,CAAA;AACtD,EAAA,IAAI;AACF,IAAA,YAAA,CAAa,YAAY,CAAA;AACzB,IAAA,OAAO,YAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,IAAI,GAAA,KAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,EAAE,IAAA,EAAM;AAChC,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,uBAAA,CAAwB,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,EAClD;AACF;AAEO,SAAS,iCACd,cAAA,EAIA;AACA,EAAA,MAAM,SAQF,EAAC;AACL,EAAA,KAAA,MAAW,OAAA,IAAW,eAAe,eAAA,EAAiB;AACpD,IAAA,IAAI,CAAC,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC9B,MAAA,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,GAAI,EAAC;AAAA,IAC/B;AACA,IAAA,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,CAAE,IAAA,CAAK;AAAA,MAC7B,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,aAAa,OAAA,CAAQ;AAAA,KACtB,CAAA;AAAA,EACH;AACA,EAAA,OAAO,MAAA;AACT;AC1DA,SAAS,iBAAiB,QAAA,EAA2C;AACnE,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,QAAQ,CAAA;AACrC,EAAA,OAAO,CAAC,OAAO,IAAA,KAAS;AACtB,IAAA,OAAOA,MAAY,KAAA,EAAO,EAAE,GAAG,IAAA,EAAM,UAAA,EAAY,OAAO,CAAA;AAAA,EAC1D,CAAA;AACF;AAMO,SAAS,QAAA,CACd,OAAA,EACA,cAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,cAAc,OAAA,EAAS,QAAA,GAAW,gBAAA,CAAiB,OAAA,CAAQ,QAAQ,CAAA,GAAI,MAAA;AAC7E,EAAA,QAAQ,eAAe,YAAA;AAAc,IACnC,KAAK,WAAA,EAAa;AAChB,MAAA,MAAM,YAAY,eAAA,CAAgB;AAAA,QAChC,QAAQ,cAAA,CAAe,MAAA;AAAA,QACvB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,OAAO,UAAU,OAAO,CAAA;AAAA,IAC1B;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,SAAS,wBAAA,CAAyB;AAAA,QACtC,QAAQ,cAAA,CAAe,MAAA;AAAA,QACvB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,OAAO,OAAO,OAAO,CAAA;AAAA,IACvB;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,SAAS,YAAA,CAAa;AAAA,QAC1B,QAAQ,cAAA,CAAe,MAAA;AAAA,QACvB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,cAAc,cAAA,CAAe,YAAA;AAAA,QAC7B,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,MAAM,cAAA,CAAe,IAAA;AAAA,QACrB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,OAAO,OAAO,OAAO,CAAA;AAAA,IACvB;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,SAAS,YAAA,CAAa;AAAA,QAC1B,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,OAAO,OAAO,OAAO,CAAA;AAAA,IACvB;AAAA,IACA,KAAK,cAAA,EAAgB;AACnB,MAAA,MAAM,QAAQ,WAAA,CAAY;AAAA,QACxB,QAAQ,cAAA,CAAe,MAAA;AAAA,QACvB,cAAc,cAAA,CAAe,YAAA;AAAA,QAC7B,YAAY,cAAA,CAAe,UAAA;AAAA,QAC3B,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,wBAAwB,cAAA,CAAe,sBAAA;AAAA,QACvC,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,OAAO,MAAM,OAAO,CAAA;AAAA,IACtB;AAAA,IACA,KAAK,gBAAA,EAAkB;AACrB,MAAA,MAAM,gBAAgB,mBAAA,CAAoB;AAAA,QACxC,aAAa,cAAA,CAAe,WAAA;AAAA,QAC5B,iBAAiB,cAAA,CAAe,eAAA;AAAA,QAChC,QAAQ,cAAA,CAAe,MAAA;AAAA,QACvB,cAAc,cAAA,CAAe,YAAA;AAAA,QAC7B,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,OAAO,cAAc,OAAO,CAAA;AAAA,IAC9B;AAAA,IACA,KAAK,eAAA,EAAiB;AACpB,MAAA,MAAM,SAAS,YAAA,CAAa;AAAA,QAC1B,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,UAAU,cAAA,CAAe,QAAA;AAAA,QACzB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,OAAO,OAAO,OAAO,CAAA;AAAA,IACvB;AAAA,IACA,KAAK,UAAA,EAAY;AACf,MAAA,MAAM,WAAW,cAAA,CAAe;AAAA,QAC9B,QAAQ,cAAA,CAAe,MAAA;AAAA,QACvB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,SAAS,cAAA,CAAe,OAAA;AAAA,QACxB,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,OAAO,SAAS,OAAO,CAAA;AAAA,IACzB;AAAA,IACA,SAAS;AACP,MAAA,MAAM,WAAA,GAAqB,cAAA;AAC3B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAsB,WAAA,CAA+B,YAAY,CAAA,CAAE,CAAA;AAAA,IACrF;AAAA;AAEJ;AAEO,SAAS,gBAAA,CAAiB,cAA4B,OAAA,EAAqC;AAChG,EAAA,MAAM,WAAA,GAAc,WAAA,CACjB,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,QAAA,KAAa,YAAY,CAAA,EAC9C,OAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,OAAO,CAAA;AACjD,EAAA,OAAO,WAAA,EAAa,aAAA;AACtB;AAEO,SAAS,2BAAA,CAA4B,OAAc,aAAA,EAA+B;AACvF,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,GAAc,KAAA,CAAM,iBAAA,GAAoB,MAAM,YAAA,IAAgB,aAAA;AAC9E;;;ACjIO,SAAS,gBAAA,GAA0B;AACxC,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,CAAA;AAAA,IACb,YAAA,EAAc,CAAA;AAAA,IACd,eAAA,EAAiB,CAAA;AAAA,IACjB,WAAA,EAAa,CAAA;AAAA,IACb,iBAAA,EAAmB;AAAA,GACrB;AACF;AAEO,SAAS,4BAA4B,MAAA,EAAmD;AAC7F,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,MAAA,CAAO,KAAA,CAAM,WAAA,IAAe,CAAA;AAAA,IACzC,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,YAAA,IAAgB,CAAA;AAAA,IAC3C,eAAA,EAAiB,MAAA,CAAO,KAAA,CAAM,eAAA,IAAmB,CAAA;AAAA,IACjD,WAAA,EAAa,MAAA,CAAO,KAAA,CAAM,WAAA,IAAe,CAAA;AAAA,IACzC,iBAAA,EAAmB,MAAA,CAAO,KAAA,CAAM,iBAAA,IAAqB;AAAA,GACvD;AACF;AAEO,SAAS,QAAA,CAAS,GAAU,CAAA,EAAiB;AAClD,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,CAAA,CAAE,WAAA,GAAc,CAAA,CAAE,WAAA;AAAA,IAC/B,YAAA,EAAc,CAAA,CAAE,YAAA,GAAe,CAAA,CAAE,YAAA;AAAA,IACjC,eAAA,EAAiB,CAAA,CAAE,eAAA,GAAkB,CAAA,CAAE,eAAA;AAAA,IACvC,WAAA,EAAa,CAAA,CAAE,WAAA,GAAc,CAAA,CAAE,WAAA;AAAA,IAC/B,iBAAA,EAAmB,CAAA,CAAE,iBAAA,GAAoB,CAAA,CAAE;AAAA,GAC7C;AACF;;;ACnBO,SAAS,uBAAA,CACd,cACA,MAAA,EACY;AACZ,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,YAAA;AAAA,IACJ,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,MAAA,EAAQ;AAAA,MACN,KAAK,MAAA,CAAO,SAAA;AAAA,MACZ,IAAA,EAAM,OAAO,MAAA,CAAO,IAAA;AAAA,MACpB,OAAA,EAAS,OAAO,MAAA,CAAO;AAAA,KACzB;AAAA,IACA,UAAA,EAAY,CAAA;AAAA,IACZ,MAAA,EAAQ,MAAA;AAAA,IACR,UAAU,EAAC;AAAA,IACX,OAAO,gBAAA,EAAiB;AAAA,IACxB,eAAe,MAAA,CAAO,aAAA;AAAA,IACtB,kBAAA,EAAoB,MAAA,CAAO,aAAA,GAAgB,CAAA,GAAM;AAAA,GACnD;AACF;AAEO,SAAS,wBAAA,CAAyB,cAAsB,UAAA,EAAoC;AACjG,EAAA,OAAO;AAAA,IACL,GAAG,UAAA;AAAA,IACH,EAAA,EAAI,YAAA;AAAA,IACJ,UAAA,EAAY,WAAW,UAAA,GAAa;AAAA,GACtC;AACF;AAOO,SAAS,0BAAA,CACd,cAAA,EACA,gBAAA,EACA,gBAAA,EACuB;AACvB,EAAA,MAAM,EAAE,QAAA,EAAU,WAAA,EAAY,GAAI,gBAAA;AAClC,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAAA,EAC1E;AACA,EAAA,MAAM,qBAAA,GAAwB,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAC1D,EAAA,IAAI,CAAC,qBAAA,IAAyB,qBAAA,CAAsB,IAAA,KAAS,eAAA,EAAiB;AAC5E,IAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,EAC5E;AACA,EAAA,MAAM,YAAA,GAAe,sBAAsB,QAAA,CAAS,IAAA,CAAK,CAAC,OAAA,KAAY,OAAA,CAAQ,SAAS,UAAU,CAAA;AACjG,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN,0BAA0B,gBAAA,CAAiB,MAAA,CAAO,GAAG,CAAA,oCAAA,EAClC,WAAA,CAAY,OAAO,GAAG,CAAA,2BAAA;AAAA,KAC3C;AAAA,EACF;AACA,EAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAS,GAAI,WAAA;AAEzC,EAAA,MAAM,WAAW,QAAA,EAAS;AAC1B,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP,GAAG,cAAA;AAAA,MACH,KAAA,EAAO,QAAA;AAAA,MACP,WAAW,MAAA,CAAO,GAAA;AAAA,MAClB,KAAA,EAAO;AAAA,QACL,yBAAA,EAA2B;AAAA,UACzB,UAAA;AAAA,UACA,QAAA;AAAA,UACA,SAAA,EAAW,CAAA,SAAA,EAAY,gBAAA,CAAiB,MAAA,CAAO,GAAG,CAAA,CAAA;AAAA,UAClD,IAAA,EAAM,cAAc,IAAA,IAAQ;AAAA;AAC9B;AACF,KACF;AAAA,IACA,UAAA,EAAY;AAAA,MACV,GAAG,gBAAA;AAAA,MACH,KAAA,EAAO,QAAA;AAAA,MACP,YAAY,gBAAA,CAAiB,UAAA;AAAA,MAC7B,OAAO,gBAAA,CAAiB,KAAA;AAAA,MACxB,kBAAkB,gBAAA,CAAiB,gBAAA;AAAA,MACnC,oBAAoB,gBAAA,CAAiB;AAAA;AACvC,GACF;AACF;AC1FA,eAAsB,kBAAA,CACpB,SAAA,EACA,OAAA,EACA,aAAA,EAIiB;AACjB,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,QAAQ,SAAS,CAAA;AAAA,EAC1B;AACA,EAAA,MAAM,SAAS,eAAA,CAAgB;AAAA,IAC7B,SAAS,aAAA,CAAc,kBAAA;AAAA,IACvB,QAAQ,aAAA,CAAc;AAAA,GACvB,CAAA;AACD,EAAA,MAAM,SAAS,MAAM,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,IAAI,SAAS,CAAA;AAC1D,EAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,IAAA,MAAM,IAAI,MAAM,CAAA,0BAAA,EAA6B,SAAS,MAAM,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,EACpF;AACA,EAAA,OAAO,eAAA,CAAgB,OAAO,IAAI,CAAA;AACpC;AAEA,SAAS,gBAAgB,MAAA,EAAgC;AACvD,EAAA,MAAM,SAAgC,MAAA,CAAO,WAAA;AAAA,IAC3C,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,CAAE,IAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAAM;AACnD,MAAA,QAAQ,MAAM,IAAA;AAAM,QAClB,KAAK,eAAA;AACH,UAAA,OAAO,CAAC,IAAA,EAAM,EAAE,GAAG,KAAA,EAAO,MAAM,CAAA;AAAA,QAClC,KAAK,aAAA;AACH,UAAA,OAAO,CAAC,IAAA,EAAM,EAAE,GAAG,KAAA,EAAO,MAAM,CAAA;AAAA,QAClC,KAAK,kBAAA;AACH,UAAA,OAAO,CAAC,IAAA,EAAM,EAAE,GAAG,KAAA,EAAO,MAAM,CAAA;AAAA,QAClC,SAAS;AACP,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAwB,KAAA,CAA2B,IAAI,CAAA,CAAE,CAAA;AAAA,QAC3E;AAAA;AACF,IACF,CAAC;AAAA,GACH;AACA,EAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAO;AAC7B;;;AC5BA,eAAsB,YAAA,CACpB,OAAA,EACAC,mBAAAA,GAA2C,kBAAA,EACd;AAC7B,EAAA,MAAM,EAAE,WAAU,GAAI,OAAA;AACtB,EAAA,MAAM,OAAA,GAAU,EAAE,GAAG,OAAA,CAAQ,OAAA,EAAQ;AACrC,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,oBAAoB,OAAA,CAAQ,kBAAA;AAAA,IAC5B,gBAAgB,OAAA,CAAQ;AAAA,GAC1B;AACA,EAAA,MAAM,WAAA,GAAc,MAAMA,mBAAAA,CAAmB,SAAA,EAAW,SAAS,aAAa,CAAA;AAC9E,EAAA,OAAA,CAAQ,SAAS,CAAA,GAAI,WAAA;AACrB,EAAA,KAAA,MAAW,YAAA,IAAgB,YAAY,SAAA,EAAW;AAChD,IAAA,MAAM,QAAA,GAAW,MAAMA,mBAAAA,CAAmB,YAAA,EAAc,SAAS,aAAa,CAAA;AAC9E,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,YAAY,CAAA,UAAA,CAAY,CAAA;AAAA,IACtD;AACA,IAAA,OAAA,CAAQ,YAAY,CAAA,GAAI,QAAA;AAAA,EAC1B;AACA,EAAA,OAAO,EAAE,aAAa,OAAA,EAAQ;AAChC;;;ACPO,SAAS,qBACd,SAAA,EAC4B;AAC5B,EAAA,IAAI,CAAC,SAAA,EAAW,OAAO,EAAC;AACxB,EAAA,OAAO,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IAC3B,IAAA,EAAM,cAAA;AAAA,IACN,UAAU,CAAA,CAAE,IAAA;AAAA;AAAA,IAEZ,SAAA,EAAW,CAAA,CAAE,gBAAA,EAAkB,SAAA,EAAW;AAAA,GAC5C,CAAE,CAAA;AACJ;AAMO,SAAS,oBAAoB,SAAA,EAAgD;AAClF,EAAA,IAAI,CAAC,WAAW,OAAO,EAAA;AACvB,EAAA,OAAO,SAAA,CACJ,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA,CACpB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAA,CACjB,KAAK,IAAI,CAAA;AACd;ACxCA,SAAS,WAAW,KAAA,EAAmC;AACrD,EAAA,OACE,OAAO,UAAU,QAAA,IACjB,KAAA,KAAU,QACV,MAAA,IAAU,KAAA,IACV,cAAc,KAAA,IACd,MAAA,IAAU,SACV,OAAQ,KAAA,CAAmB,SAAS,QAAA,IACpC,OAAQ,MAAmB,QAAA,KAAa,QAAA,IACxC,OAAQ,KAAA,CAAmB,IAAA,KAAS,QAAA;AAExC;AAEA,eAAe,qBAAA,CACb,YACA,QAAA,EACqB;AACrB,EAAA,MAAM,oBAAmC,EAAC;AAC1C,EAAA,KAAA,MAAW,IAAA,IAAQ,WAAW,MAAA,EAAQ;AACpC,IAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC5B,MAAA,iBAAA,CAAkB,KAAK,IAAI,CAAA;AAC3B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AACnC,MAAA,IAAI,UAAA,CAAW,MAAM,CAAA,EAAG;AACtB,QAAA,QAAA,GAAW,MAAA;AAAA,MACb;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,iBAAA,CAAkB,KAAK,IAAI,CAAA;AAC3B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,iBAAA,CAAkB,KAAK,IAAI,CAAA;AAC3B,MAAA;AAAA,IACF;AACA,IAAA,MAAM,EAAE,IAAA,EAAAC,KAAAA,EAAM,QAAA,EAAS,GAAI,QAAA;AAC3B,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAASA,KAAI,CAAA;AAClC,MAAA,IAAI,aAAa,eAAA,EAAiB;AAChC,QAAA,iBAAA,CAAkB,IAAA,CAAK;AAAA,UACrB,IAAA,EAAM,iBAAA;AAAA,UACN,IAAI,IAAA,CAAK,EAAA;AAAA,UACT,WAAA,EAAa,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA;AAAA,UACrC;AAAA,SACD,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,iBAAA,CAAkB,IAAA,CAAK;AAAA,UACrB,IAAA,EAAM,gBAAA;AAAA,UACN,IAAI,IAAA,CAAK,EAAA;AAAA,UACT,WAAA,EAAa,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA;AAAA,UACrC;AAAA,SACD,CAAA;AAAA,MACH;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,iBAAA,CAAkB,IAAA,CAAK;AAAA,QACrB,IAAA,EAAM,UAAA;AAAA,QACN,IAAI,IAAA,CAAK,EAAA;AAAA,QACT,IAAA,EAAM,CAAA,qBAAA,EAAwBA,KAAI,CAAA,GAAA,EAAM,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,OAC/F,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,OAAO,EAAE,GAAG,UAAA,EAAY,MAAA,EAAQ,iBAAA,EAAkB;AACpD;AAMO,IAAM,kBAAN,MAA8C;AAAA,EAC1C,IAAA,GAAkB,KAAA;AAAA,EAE3B,MAAM,OAAA,CACJ,QAAA,EACA,aAAA,EACqB;AACrB,IAAA,MAAM,YAAA,GAAe,MAAM,yBAAA,CAA0B,aAAA,EAAe,SAAS,QAAQ,CAAA;AACrF,IAAA,IAAI,YAAA,CAAa,SAAS,KAAA,EAAO;AAC/B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,YAAA,CAAa,IAAI,CAAA,CAAE,CAAA;AAAA,IAC/E;AACA,IAAA,MAAM,MAAA,GAAS,MAAO,YAAA,CAAiC,QAAA;AAAA,MACrD,QAAA,CAAS,QAAA;AAAA,MACT,QAAA,CAAS;AAAA,KACX;AACA,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,IAAI,QAAA,CAAS,EAAA;AAAA,MACb,WAAW,QAAA,CAAS,SAAA;AAAA,MACpB,UAAU,QAAA,CAAS,QAAA;AAAA,MACnB;AAAA,KACF;AAEA,IAAA,IAAI,QAAA,CAAS,QAAA,KAAa,aAAA,IAAiB,QAAA,CAAS,aAAa,eAAA,EAAiB;AAChF,MAAA,OAAO,qBAAA,CAAsB,UAAA,EAAY,QAAA,CAAS,QAAQ,CAAA;AAAA,IAC5D;AACA,IAAA,OAAO,UAAA;AAAA,EACT;AACF,CAAA;;;ACjGO,IAAM,sBAAN,MAA0B;AAAA,EACvB,SAAA;AAAA,EAER,WAAA,GAAc;AACZ,IAAA,IAAA,CAAK,SAAA,uBAAgB,GAAA,CAAI;AAAA,MACvB,CAAC,KAAA,EAAO,IAAI,eAAA,EAAiB;AAAA;AAAA,KAE9B,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,IAAA,EAA2C;AACrD,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAA,CACJ,QAAA,EACA,IAAA,EACA,aAAA,EACqB;AACrB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AACxC,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,IAAI,CAAA,CAAE,CAAA;AAAA,IAClE;AACA,IAAA,OAAO,QAAA,CAAS,OAAA,CAAQ,QAAA,EAAU,aAAa,CAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,IAAA,EAA0B;AAC1C,IAAA,OAAO,IAAA,KAAS,KAAA;AAAA,EAClB;AACF,CAAA;AAKO,IAAM,mBAAA,GAAsB,IAAI,mBAAA,EAAoB;;;ACjC3D,eAAsB,iBAAA,CACpB,UACA,aAAA,EACoB;AACpB,EAAA,MAAM,YAAA,GAAe,MAAM,yBAAA,CAA0B,aAAA,EAAe,QAAQ,CAAA;AAC5E,EAAA,OAAO,YAAA,CAAa,IAAA;AACtB;AAKA,eAAsB,iBAAA,CACpB,WACA,aAAA,EAC8B;AAC9B,EAAA,MAAM,UAAA,GAAkC;AAAA,IACtC,KAAK,EAAC;AAAA,IACN,UAAU,EAAC;AAAA,IACX,aAAa;AAAC,GAChB;AAEA,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,IAC5B,SAAA,CAAU,GAAA,CAAI,OAAO,QAAA,KAAa;AAChC,MAAA,MAAM,YAAA,GAAe,MAAM,yBAAA,CAA0B,aAAA,EAAe,SAAS,QAAQ,CAAA;AACrF,MAAA,OAAO,EAAE,QAAA,EAAU,IAAA,EAAM,YAAA,CAAa,MAAM,YAAA,EAAa;AAAA,IAC3D,CAAC;AAAA,GACH;AAEA,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,UAAA,CAAW,MAAA,CAAO,IAAI,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA;AAAA,EACrC;AAEA,EAAA,OAAO,UAAA;AACT;;;AC9BA,eAAsB,qBAAA,CAAsB;AAAA,EAC1C,OAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAE5C,EAAA,IAAI,IAAA,CAAK,gBAAA,KAAqB,MAAA,IAAa,IAAA,CAAK,uBAAuB,MAAA,EAAW;AAChF,IAAA,MAAM,IAAI,MAAM,0EAA0E,CAAA;AAAA,EAC5F;AAEA,EAAA,IAAI,IAAA,CAAK,gBAAA,CAAiB,MAAA,KAAW,CAAA,EAAG;AAEtC,IAAA,OAAO,aAAA,CAAc,OAAA,EAAS,UAAA,EAAY,EAAE,CAAA;AAAA,EAC9C;AAGA,EAAA,MAAM,aAAA,GAAgB,MAAM,OAAA,CAAQ,GAAA;AAAA,IAClC,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,OAAO,EAAA,MAAQ;AAAA,MACvC,QAAA,EAAU,EAAA;AAAA,MACV,IAAA,EAAM,MAAM,iBAAA,CAAkB,EAAA,CAAG,UAAU,aAAa;AAAA,KAC1D,CAAE;AAAA,GACJ;AAEA,EAAA,MAAM,iBAAA,GAAoB,aAAA,CACvB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,UAAU,CAAA,CACnC,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AACxB,EAAA,MAAM,oBAAA,GAAuB,aAAA,CAC1B,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,UAAU,CAAA,CACnC,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AAExB,EAAA,IAAI,iBAAA,CAAkB,WAAW,CAAA,EAAG;AAElC,IAAA,OAAO,aAAA,CAAc,OAAA,EAAS,UAAA,EAAY,EAAE,CAAA;AAAA,EAC9C;AAGA,EAAA,MAAM,WAAA,GAAkC,MAAM,OAAA,CAAQ,GAAA;AAAA,IACpD,iBAAA,CAAkB,GAAA,CAAI,OAAO,EAAA,KAAO;AAClC,MAAA,MAAM,YAAA,GAAe,MAAM,yBAAA,CAA0B,aAAA,EAAe,GAAG,QAAQ,CAAA;AAC/E,MAAA,IAAI,CAAC,aAAa,MAAA,EAAQ;AACxB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,EAAA,CAAG,QAAQ,CAAA,WAAA,CAAa,CAAA;AAAA,MAC9E;AACA,MAAA,IAAI,CAAC,EAAA,CAAG,IAAA,IAAQ,CAAC,EAAA,CAAG,IAAA,CAAK,KAAA,IAAS,OAAO,EAAA,CAAG,IAAA,CAAK,KAAA,KAAU,QAAA,EAAU;AACnE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yCAAA,EAA4C,EAAA,CAAG,QAAQ,CAAA,CAAE,CAAA;AAAA,MAC3E;AACA,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ;AAAA,UACN,GAAA,EAAK,aAAa,MAAA,CAAO,GAAA;AAAA,UACzB,IAAA,EAAM,aAAa,MAAA,CAAO,IAAA;AAAA,UAC1B,OAAA,EAAS,aAAa,MAAA,CAAO;AAAA,SAC/B;AAAA,QACA,YAAY,EAAA,CAAG,EAAA;AAAA,QACf,UAAU,EAAA,CAAG,QAAA;AAAA,QACb,KAAA,EAAO,GAAG,IAAA,CAAK;AAAA,OACjB;AAAA,IACF,CAAC;AAAA,GACH;AAEA,EAAA,OAAO,iBAAA,CAAkB,SAAS,UAAA,EAAY;AAAA,IAC5C,UAAA,EAAY;AAAA,MACV,GAAG,UAAA;AAAA,MACH,MAAA,EAAQ,mBAAA;AAAA,MACR,UAAA,EAAY,WAAA;AAAA,MACZ,gBAAA,EAAkB,oBAAA;AAAA,MAClB,oBAAoB,IAAA,CAAK;AAAA,KAC3B;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,GAAG,IAAA;AAAA,MACH,UAAA,EAAY,KAAK,GAAA;AAAI;AACvB,GACD,CAAA;AACH;AC7EA,eAAsB,4BAAA,CAA6B;AAAA,EACjD,OAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAE5C,EAAA,IAAI,IAAA,CAAK,gBAAA,KAAqB,MAAA,IAAa,IAAA,CAAK,uBAAuB,MAAA,EAAW;AAChF,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAGA,EAAA,IAAI,IAAA,CAAK,gBAAA,CAAiB,MAAA,KAAW,CAAA,EAAG;AACtC,IAAA,OAAO,kBAAA,CAAmB,SAAS,UAAA,EAAY;AAAA,MAC7C,aAAa,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACH;AAIA,EAAA,OAAO,wBAAA,CAAyB,SAAS,UAAA,EAAY;AAAA,IACnD,UAAA,EAAY;AAAA,MACV,GAAG,UAAA;AAAA,MACH,MAAA,EAAQ,0BAAA;AAAA,MACR,kBAAkB,IAAA,CAAK,gBAAA;AAAA,MACvB,oBAAoB,IAAA,CAAK;AAAA,KAC3B;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,GAAG,IAAA;AAAA,MACH,UAAA,EAAY,KAAK,GAAA;AAAI;AACvB,GACD,CAAA;AACH;AClBO,SAAS,kBACd,QAAA,EASa;AACb,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,MAChC,GAAG,IAAA;AAAA,MACH,IAAIC,QAAAA;AAAS,KACf,CAAE,CAAA;AAAA,IACF,IAAIA,QAAAA;AAAS,GACf;AACF;AAEO,SAAS,oBACd,QAAA,EACe;AACf,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,MAChC,GAAG,IAAA;AAAA,MACH,IAAIA,QAAAA;AAAS,KACf,CAAE,CAAA;AAAA,IACF,IAAIA,QAAAA;AAAS,GACf;AACF;AAEO,SAAS,kBACd,QAAA,EAOa;AACb,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,MAChC,GAAG,IAAA;AAAA,MACH,QAAA,EAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAACC,KAAAA,MAAU;AAAA,QACrC,GAAGA,KAAAA;AAAA,QACH,IAAID,QAAAA;AAAS,OACf,CAAE,CAAA;AAAA,MACF,IAAIA,QAAAA;AAAS,KACf,CAAE,CAAA;AAAA,IACF,IAAIA,QAAAA;AAAS,GACf;AACF;AAEO,SAAS,qBAAqB,OAAA,EAAgC;AACnE,EAAA,QAAQ,QAAQ,IAAA;AAAM,IACpB,KAAK,oBAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,gCAAA,CAAiC,OAAA,CAAQ,QAAQ,CAAA;AAAA,QAC1D,eAAA,EAAiB,QAAQ,KAAA,GACrB;AAAA,UACE,WAAW,EAAE,YAAA,EAAc,EAAE,IAAA,EAAM,aAAY;AAAE,SACnD,GACA;AAAA,OACN;AAAA,IACF,KAAK,aAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,EAAS,yBAAA,CAA0B,OAAA,CAAQ,QAAQ,CAAA;AAAA,QACnD,eAAA,EAAiB,QAAQ,KAAA,GACrB;AAAA,UACE,WAAW,EAAE,YAAA,EAAc,EAAE,IAAA,EAAM,aAAY;AAAE,SACnD,GACA;AAAA,OACN;AAAA,IACF,KAAK,eAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,WAAA;AAAA,QACN,OAAA,EAAS,2BAAA,CAA4B,OAAA,CAAQ,QAAQ,CAAA;AAAA,QACrD,eAAA,EAAiB,QAAQ,KAAA,GACrB;AAAA,UACE,WAAW,EAAE,YAAA,EAAc,EAAE,IAAA,EAAM,aAAY;AAAE,SACnD,GACA;AAAA,OACN;AAAA,IACF,KAAK,aAAA;AACH,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,EAAS,yBAAA,CAA0B,OAAA,CAAQ,QAAQ,CAAA;AAAA,QACnD,eAAA,EAAiB,QAAQ,KAAA,GACrB;AAAA,UACE,WAAW,EAAE,YAAA,EAAc,EAAE,IAAA,EAAM,aAAY;AAAE,SACnD,GACA;AAAA,OACN;AAAA;AAEN;AACA,SAAS,iCACP,QAAA,EAC+B;AAC/B,EAAA,OAAO,QAAA,CAAS,MAAA,CAAO,CAAC,GAAA,EAAK,IAAA,KAAS;AACpC,IAAA,OAAO,MAAA;AAAA,MAAA,EACH,GAAG;AAAA,MAAA,EACH,KAAK,IAAI;AAAA,IAAA,CAAA,CACX,IAAA,EAAK;AAAA,EACT,GAAG,EAAY,CAAA;AACjB;AACA,SAAS,0BAA0B,QAAA,EAAgE;AACjG,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,KAAS;AAC5B,IAAA,QAAQ,KAAK,IAAA;AAAM,MACjB,KAAK,UAAA;AACH,QAAA,OAAO,uBAAuB,IAAI,CAAA;AAAA,MACpC,KAAK,cAAA;AACH,QAAA,OAAO,4BAA4B,IAAI,CAAA;AAAA,MACzC,KAAK,iBAAA;AACH,QAAA,OAAO,+BAA+B,IAAI,CAAA;AAAA,MAC5C,KAAK,iBAAA;AACH,QAAA,OAAO,+BAA+B,IAAI,CAAA;AAAA,MAC5C,KAAK,aAAA;AACH,QAAA,OAAO,0BAA0B,IAAI,CAAA;AAAA,MACvC,KAAK,gBAAA;AACH,QAAA,OAAO,6BAA6B,IAAI,CAAA;AAAA,MAC1C,KAAK,gBAAA;AACH,QAAA,OAAO,6BAA6B,IAAI,CAAA;AAAA,MAC1C;AACE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA+B,IAAA,CAA0B,IAAI,CAAA,CAAE,CAAA;AAAA;AACnF,EACF,CAAC,CAAA;AACH;AACA,SAAS,4BACP,QAAA,EACkC;AAClC,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,KAAS;AAC5B,IAAA,QAAQ,KAAK,IAAA;AAAM,MACjB,KAAK,UAAA;AACH,QAAA,OAAO,uBAAuB,IAAI,CAAA;AAAA,MACpC,KAAK,cAAA;AACH,QAAA,OAAO,+BAA+B,IAAI,CAAA;AAAA,MAC5C,KAAK,cAAA;AACH,QAAA,OAAO,+BAA+B,IAAI,CAAA;AAAA,MAC5C;AACE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAiC,IAAA,CAA0B,IAAI,CAAA,CAAE,CAAA;AAAA;AACrF,EACF,CAAC,CAAA;AACH;AACA,SAAS,0BAA0B,QAAA,EAAgE;AACjG,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,KAAS;AAC5B,IAAA,QAAQ,KAAK,IAAA;AAAM,MACjB,KAAK,gBAAA;AACH,QAAA,OAAO,mCAAmC,IAAI,CAAA;AAAA,MAChD;AACE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA+B,IAAA,CAA0B,IAAI,CAAA,CAAE,CAAA;AAAA;AACnF,EACF,CAAC,CAAA;AACH;AACA,SAAS,uBAAuB,IAAA,EAA+B;AAC7D,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,MAAM,IAAA,CAAK;AAAA,GACb;AACF;AACA,SAAS,4BAA4B,IAAA,EAAoC;AACvE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,OAAO,IAAA,CAAK,GAAA;AAAA,IACZ,WAAW,IAAA,CAAK;AAAA,GAClB;AACF;AACA,SAAS,+BAA+B,IAAA,EAAuC;AAC7E,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,OAAO,IAAA,CAAK,WAAA;AAAA,IACZ,WAAW,IAAA,CAAK;AAAA,GAClB;AACF;AACA,SAAS,+BAA+B,IAAA,EAAuC;AAC7E,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,OAAO,IAAA,CAAK,IAAA;AAAA,IACZ,WAAW,IAAA,CAAK;AAAA,GAClB;AACF;AACA,SAAS,0BAA0B,IAAA,EAAkC;AACnE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,MAAM,IAAA,CAAK,GAAA;AAAA,IACX,WAAW,IAAA,CAAK;AAAA,GAClB;AACF;AACA,SAAS,6BAA6B,IAAA,EAAqC;AACzE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,MAAM,IAAA,CAAK,WAAA;AAAA,IACX,WAAW,IAAA,CAAK;AAAA,GAClB;AACF;AACA,SAAS,6BAA6B,IAAA,EAAqC;AACzE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,WAAW,IAAA,CAAK;AAAA,GAClB;AACF;AACA,SAAS,+BAA+B,IAAA,EAAuC;AAC7E,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,OAAO,IAAA,CAAK;AAAA,GACd;AACF;AACA,SAAS,+BAA+B,IAAA,EAItC;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,MAAM,IAAA,CAAK,QAAA;AAAA,IACX,eAAA,EAAiB,IAAA,CAAK,SAAA,GAAY,EAAE,SAAA,EAAW,EAAE,SAAA,EAAW,IAAA,CAAK,SAAA,EAAU,EAAE,GAAI;AAAA,GACnF;AACF;AACA,SAAS,mCAAmC,IAAA,EAA2C;AACrF,EAAA,MAAM,EAAE,UAAS,GAAI,IAAA;AACrB,EAAA,IAAI,SAAS,MAAA,KAAW,CAAA,IAAK,SAAS,CAAC,CAAA,CAAE,SAAS,UAAA,EAAY;AAC5D,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,aAAA;AAAA,MACN,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,MAAA,EAAQ,EAAE,IAAA,EAAM,MAAA,EAAiB,OAAO,QAAA,CAAS,CAAC,EAAE,IAAA;AAAK,KAC3D;AAAA,EACF;AACA,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,KAAY;AAC7C,IAAA,IAAI,OAAA,CAAQ,SAAS,UAAA,EAAY;AAC/B,MAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAiB,IAAA,EAAM,QAAQ,IAAA,EAAK;AAAA,IACrD;AACA,IAAA,OAAO,EAAE,MAAM,OAAA,EAAkB,IAAA,EAAM,QAAQ,WAAA,EAAa,SAAA,EAAW,QAAQ,QAAA,EAAS;AAAA,EAC1F,CAAC,CAAA;AACD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,aAAA;AAAA,IACN,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,MAAA,EAAQ,EAAE,IAAA,EAAM,SAAA,EAAoB,OAAO,YAAA;AAAa,GAC1D;AACF;;;AC1QA,SAAS,kBAAkB,UAAA,EAAiC;AAC1D,EAAA,MAAM,SAAA,GAAY,UAAA,CAAW,MAAA,CAAO,CAAC,CAAA;AACrC,EAAA,IAAI,CAAC,SAAA,IAAa,SAAA,CAAU,IAAA,KAAS,UAAA,EAAY;AAC/C,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,IAAI,CAAA;AACxC,IAAA,OAAO,MAAM,OAAA,CAAQ,MAAA,CAAO,cAAc,CAAA,IAAK,MAAA,CAAO,eAAe,MAAA,GAAS,CAAA;AAAA,EAChF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAOA,SAAS,2BACP,UAAA,EACoB;AACpB,EAAA,MAAM,cAAc,UAAA,CAAW,QAAA,CAAS,UAAA,CAAW,QAAA,CAAS,SAAS,CAAC,CAAA;AACtE,EAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,IAAA,KAAS,eAAA,EAAiB;AACxD,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,QAAA,GAAW,YAAY,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,UAAU,CAAA;AACvE,EAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,IAAA,KAAS,UAAA,EAAY;AAC7C,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,IAAA,EAAK;AAChC,EAAA,OAAO,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,IAAA,GAAO,MAAA;AAClC;AAgBA,eAAsB,oBAAA,CAAqB;AAAA,EACzC,OAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAE5C,EAAA,IAAI,IAAA,CAAK,gBAAA,KAAqB,MAAA,IAAa,IAAA,CAAK,uBAAuB,MAAA,EAAW;AAChF,IAAA,MAAM,IAAI,MAAM,yEAAyE,CAAA;AAAA,EAC3F;AACA,EAAA,IAAI,IAAA,CAAK,gBAAA,CAAiB,MAAA,KAAW,CAAA,EAAG;AACtC,IAAA,MAAM,IAAI,MAAM,kEAAkE,CAAA;AAAA,EACpF;AAEA,EAAA,MAAM,mBAAmB,IAAA,CAAK,gBAAA;AAC9B,EAAA,MAAM,WAAA,GAA4B,CAAC,GAAG,IAAA,CAAK,kBAAkB,CAAA;AAG7D,EAAA,MAAM,wBAAwB,gBAAA,CAAiB,IAAA;AAAA,IAC7C,CAAC,EAAA,KAAO,EAAA,CAAG,SAAA,KAAc,gBAAA,IAAoB,GAAG,QAAA,KAAa;AAAA,GAC/D;AACA,EAAA,IAAI,qBAAA,EAAuB;AACzB,IAAA,MAAM,UAAA,GAAa,MAAM,mBAAA,CAAoB,OAAA;AAAA,MAC3C,qBAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAI,iBAAA,CAAkB,UAAU,CAAA,EAAG;AACjC,MAAA,OAAOE,kBAAAA,CAAmB,SAAS,UAAA,EAAY,EAAE,aAAa,CAAC,UAAU,GAAG,CAAA;AAAA,IAC9E;AAIA,IAAA,MAAM,YAAA,GAAe,2BAA2B,UAAU,CAAA;AAC1D,IAAA,IAAI,YAAA,EAAc;AAEhB,MAAA,MAAM,cAAA,GAAiB;AAAA,QACrB,IAAA,EAAM,gBAAA;AAAA,QACN,YAAY,UAAA,CAAW,EAAA;AAAA,QACvB,UAAU,qBAAA,CAAsB,QAAA;AAAA,QAChC,QAAA,EAAU,WAAW,MAAA,CAAO,MAAA;AAAA,UAC1B,CAAC,SACC,IAAA,CAAK,IAAA,KAAS,cACd,IAAA,CAAK,IAAA,KAAS,iBAAA,IACd,IAAA,CAAK,IAAA,KAAS;AAAA;AAClB,OACF;AACA,MAAA,MAAM,WAAA,GAAc,iBAAA,CAAkB,CAAC,cAAc,CAAC,CAAA;AAEtD,MAAA,MAAM,aAAA,GAAgB,oBAAoB,CAAC,EAAE,MAAM,UAAA,EAAY,IAAA,EAAM,YAAA,EAAc,CAAC,CAAA;AACpF,MAAA,MAAM,WAAA,GAAc,CAAC,WAAA,EAAa,aAAa,CAAA;AAC/C,MAAA,MAAM,QAAA,GAAW,QAAA,CAAS,UAAA,CAAW,KAAA,EAAO,kBAAkB,CAAA;AAG9D,MAAA,OAAO,WAAA,CAAY,SAAS,UAAA,EAAY;AAAA,QACtC,UAAA,EAAY;AAAA,UACV,GAAG,UAAA;AAAA,UACH,UAAU,CAAC,GAAG,UAAA,CAAW,QAAA,EAAU,GAAG,WAAW,CAAA;AAAA,UACjD,KAAA,EAAO,QAAA;AAAA,UACP,oBAAoB,UAAA,CAAW,aAAA,GAC3B,4BAA4B,QAAA,EAAU,UAAA,CAAW,aAAa,CAAA,GAC9D,MAAA;AAAA,UACJ,MAAA,EAAQ,WAAA;AAAA;AAAA,UAER,gBAAA,EAAkB,MAAA;AAAA,UAClB,kBAAA,EAAoB;AAAA,SACtB;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,GAAG,IAAA;AAAA,UACH,aAAa,CAAC,GAAG,IAAA,CAAK,WAAA,EAAa,GAAG,WAAW,CAAA;AAAA,UACjD,WAAA,EAAa,CAAC,UAAU,CAAA;AAAA,UACxB,UAAA,EAAY,KAAK,GAAA;AAAI,SACvB;AAAA,QACA,IAAA,EAAM,YAAA;AAAA,QACN,OAAO,gBAAA;AAAiB,OACzB,CAAA;AAAA,IACH;AAGA,IAAA,OAAO,iBAAA,CAAkB,OAAA,EAAS,UAAA,EAAY,EAAE,YAAY,CAAA;AAAA,EAC9D;AAGA,EAAA,MAAM,UAAA,GAAa,MAAM,iBAAA,CAAkB,gBAAA,EAAkB,aAAa,CAAA;AAG1E,EAAA,IAAI,UAAA,CAAW,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG;AAC7B,IAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC/B,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,KAAM,mBAAA,CAAoB,OAAA,CAAQ,CAAA,CAAE,QAAA,EAAU,KAAA,EAAO,aAAa,CAAC;AAAA,KACzF;AACA,IAAA,WAAA,CAAY,IAAA,CAAK,GAAG,UAAU,CAAA;AAAA,EAChC;AAGA,EAAA,MAAM,oBAAoB,UAAA,CAAW,QAAA,CAAS,IAAI,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AACnE,EAAA,MAAM,uBAAuB,UAAA,CAAW,WAAA,CAAY,IAAI,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AAEzE,EAAA,IAAI,iBAAA,CAAkB,MAAA,GAAS,CAAA,IAAK,oBAAA,CAAqB,SAAS,CAAA,EAAG;AAEnE,IAAA,OAAO,cAAA,CAAe,SAAS,UAAA,EAAY;AAAA,MACzC,kBAAA,EAAoB,WAAA;AAAA,MACpB,gBAAA,EAAkB,CAAC,GAAG,iBAAA,EAAmB,GAAG,oBAAoB;AAAA,KACjE,CAAA;AAAA,EACH;AAGA,EAAA,OAAOA,kBAAAA,CAAmB,OAAA,EAAS,UAAA,EAAY,EAAE,aAAa,CAAA;AAChE;AC1JA,eAAsB,kBAAA,CAAmB;AAAA,EACvC,OAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAC5C,EAAA,IAAI,QAAQ,QAAA,KAAa,MAAA,IAAa,UAAA,CAAW,UAAA,IAAc,QAAQ,QAAA,EAAU;AAC/E,IAAA,OAAO,yBAAA,CAA0B,SAAS,UAAA,EAAY;AAAA,MACpD,UAAA,EAAY;AAAA,QACV,GAAG,UAAA;AAAA,QACH,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,GAAG,IAAA;AAAA,QACH,UAAA,EAAY,KAAK,GAAA;AAAI;AACvB,KACD,CAAA;AAAA,EACH;AACA,EAAA,OAAO,kBAAA,CAAmB,SAAS,UAAA,EAAY;AAAA,IAC7C,UAAA,EAAY;AAAA,MACV,GAAG;AAAA,KACL;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,GAAG,IAAA;AAAA,MACH,UAAA,EAAY,KAAK,GAAA;AAAI,KACvB;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,GAAG,UAAA;AAAA,MACH,IAAIF,QAAAA,EAAS;AAAA,MACb,UAAA,EAAY,WAAW,UAAA,GAAa,CAAA;AAAA;AAAA,MAEpC,gBAAA,EAAkB,MAAA;AAAA,MAClB,kBAAA,EAAoB;AAAA;AACtB,GACD,CAAA;AACH;ACXA,eAAsB,wBAAA,CAAyB;AAAA,EAC7C,OAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAC5C,EAAA,IAAI,CAAC,KAAK,SAAA,IAAa,CAAC,KAAK,WAAA,IAAe,IAAA,CAAK,WAAA,CAAY,MAAA,KAAW,CAAA,EAAG;AACzE,IAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,EACvD;AACA,EAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,CAAC,UAAA,KAAe;AAC3D,IAAA,MAAM,QAAA,GAAW,KAAK,SAAA,EAAW,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,EAAA,KAAO,UAAA,CAAW,EAAE,CAAA;AACrE,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,gBAAA;AAAA,MACN,YAAY,UAAA,CAAW,EAAA;AAAA,MACvB,QAAA,EAAU,QAAA,EAAU,QAAA,IAAY,UAAA,CAAW,QAAA;AAAA,MAC3C,QAAA,EAAU,WAAW,MAAA,CAAO,MAAA;AAAA,QAC1B,CAAC,SACC,IAAA,CAAK,IAAA,KAAS,cACd,IAAA,CAAK,IAAA,KAAS,iBAAA,IACd,IAAA,CAAK,IAAA,KAAS;AAAA;AAClB,KACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,MAAM,WAAA,GAAc,kBAAkB,eAAe,CAAA;AACrD,EAAA,MAAM,EAAE,UAAS,GAAI,UAAA;AACrB,EAAA,MAAM,eAAe,CAAC,GAAG,UAAU,WAAW,CAAA,CAAE,IAAI,oBAAoB,CAAA;AAGxE,EAAA,IAAI,6BAAA,GAAgC,KAAA;AAIpC,EAAA,MAAM,SAAA,GAA6B;AAAA,IACjC,kBAAkB,MAAM;AACtB,MAAA,aAAA,CAAc,qBAAqB,yBAAA,EAA2B,OAAA,EAAS,UAAA,EAAY,EAAE,CAAC,CAAA;AAAA,IACxF,CAAA;AAAA,IACA,gBAAA,EAAkB,CAAC,KAAA,KAAU;AAC3B,MAAA,aAAA,CAAc,qBAAqB,iBAAA,EAAmB,OAAA,EAAS,YAAY,EAAE,KAAA,EAAO,CAAC,CAAA;AAAA,IACvF,CAAA;AAAA,IACA,mBAAA,EAAqB,CAACG,KAAAA,KAAS;AAE7B,MAAA,aAAA;AAAA,QACE,qBAAqB,4BAAA,EAA8B,OAAA,EAAS,YAAY,EAAE,IAAA,EAAAA,OAAM;AAAA,OAClF;AACA,MAAA,6BAAA,GAAgC,IAAA;AAAA,IAClC,CAAA;AAAA,IACA,eAAe,MAAM;AACnB,MAAA,aAAA,CAAc,qBAAqB,yBAAA,EAA2B,OAAA,EAAS,UAAA,EAAY,EAAE,CAAC,CAAA;AAAA,IACxF,CAAA;AAAA,IACA,aAAA,EAAe,CAAC,KAAA,KAAU;AACxB,MAAA,aAAA,CAAc,qBAAqB,iBAAA,EAAmB,OAAA,EAAS,YAAY,EAAE,KAAA,EAAO,CAAC,CAAA;AAAA,IACvF,CAAA;AAAA,IACA,gBAAA,EAAkB,CAACA,KAAAA,KAAS;AAC1B,MAAA,aAAA;AAAA,QACE,qBAAqB,4BAAA,EAA8B,OAAA,EAAS,YAAY,EAAE,IAAA,EAAAA,OAAM;AAAA,OAClF;AAC8B,IAChC;AAAA,GACF;AAEA,EAAA,MAAM,eAAA,GAAkB,MAAM,WAAA,CAAY,UAAA;AAAA,IACxC;AAAA,MACE,QAAA,EAAU,YAAA;AAAA,MACV,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,OAAO,EAAC;AAAA;AAAA,MACR,WAAA,EAAa,WAAA,CAAY,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA;AAAA,MAChD,iBAAiB,OAAA,CAAQ;AAAA,KAC3B;AAAA,IACA;AAAA,GACF;AAEA,EAAA,IAAI,CAAC,gBAAgB,OAAA,EAAS;AAC5B,IAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAY,GAAI,eAAA;AAC/B,IAAA,MAAM,iBAAA,GAAoB,WAAW,UAAA,IAAc,CAAA;AACnD,IAAA,IAAI,CAAC,WAAA,IAAe,iBAAA,IAAqB,OAAA,CAAQ,UAAA,EAAY;AAC3D,MAAA,OAAO,cAAA,CAAe,SAAS,UAAA,EAAY;AAAA,QACzC,UAAA,EAAY;AAAA,UACV,GAAG,UAAA;AAAA,UACH,MAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,GAAG,IAAA;AAAA,UACH,UAAA,EAAY,KAAK,GAAA;AAAI,SACvB;AAAA,QACA,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,MAAM,IAAA,IAAQ,OAAA;AAAA,UACpB,OAAA,EACE,iBAAA,IAAqB,OAAA,CAAQ,UAAA,GACzB,CAAA,aAAA,EAAgB,OAAA,CAAQ,UAAU,CAAA,YAAA,EAAe,KAAA,CAAM,OAAO,CAAA,CAAA,GAC9D,KAAA,CAAM,OAAA;AAAA,UACZ,YAAY,KAAA,CAAM,UAAA;AAAA,UAClB,WAAA,EAAa;AAAA;AACf,OACD,CAAA;AAAA,IACH;AACA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,KAAA,CAAM,IAAA,IAAQ,OAAA,EAAS,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,CAAA;AACtF,IAAA,OAAO,KAAA,CAAM,SAAS,UAAA,EAAY;AAAA,MAChC,MAAA;AAAA,MACA,WAAA,EAAa,CAAC,WAAA,EAAa,iBAAA,CAAkB,CAAC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAQ,CAAC,CAAC,CAAA;AAAA,MAClF,OAAO,gBAAA;AAAiB,KACzB,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,mBAAmB,eAAA,CAAgB,MAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,4BAA4B,gBAAgB,CAAA;AAC1D,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAU,GAAI,gBAAA;AAG5B,EAAA,MAAM,aAAA,GAAgB,qBAAqB,SAAwC,CAAA;AACnF,EAAA,MAAM,YAAA,GAAe,oBAAoB,SAAwC,CAAA;AAIjF,EAAA,MAAM,cAAA,GAAyE;AAAA,IAC7E,GAAG,aAAA;AAAA,IACH,EAAE,IAAA,EAAM,UAAA,EAAqB,IAAA,EAAM,QAAQ,EAAA;AAAG,GAChD;AACA,EAAA,MAAM,WAAA,GAAc,CAAC,WAAA,EAAa,mBAAA,CAAoB,cAAc,CAAC,CAAA;AAIrE,EAAA,IAAI,YAAA,IAAgB,CAAC,6BAAA,EAA+B;AAClD,IAAA,MAAM,aAAA;AAAA,MACJ,oBAAA,CAAqB,4BAAA,EAA8B,OAAA,EAAS,UAAA,EAAY;AAAA,QACtE,IAAA,EAAM;AAAA,OACP;AAAA,KACH;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,UAAA,CAAW,KAAA,EAAO,KAAK,CAAA;AACjD,EAAA,OAAOC,WAAAA,CAAY,SAAS,UAAA,EAAY;AAAA,IACtC,UAAA,EAAY;AAAA,MACV,GAAG,UAAA;AAAA,MACH,QAAA,EAAU,CAAC,GAAG,QAAA,EAAU,GAAG,WAAW,CAAA;AAAA,MACtC,KAAA,EAAO,QAAA;AAAA,MACP,oBAAoB,UAAA,CAAW,aAAA,GAC3B,4BAA4B,QAAA,EAAU,UAAA,CAAW,aAAa,CAAA,GAC9D,MAAA;AAAA,MACJ,MAAA,EAAQ,WAAA;AAAA;AAAA,MAER,gBAAA,EAAkB,MAAA;AAAA,MAClB,kBAAA,EAAoB;AAAA,KACtB;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,GAAG,IAAA;AAAA,MACH,aAAa,CAAC,GAAG,IAAA,CAAK,WAAA,EAAa,GAAG,WAAW,CAAA;AAAA,MACjD,UAAA,EAAY,KAAK,GAAA,EAAI;AAAA,MACrB,KAAA,EAAO,QAAA,CAAS,IAAA,CAAK,KAAA,EAAO,KAAK;AAAA,KACnC;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;ACzJA,eAAeC,kBAAAA,CACb,WACA,aAAA,EAC+B;AAC/B,EAAA,OAAO,OAAA,CAAQ,GAAA;AAAA,IACb,SAAA,CAAU,GAAA,CAAI,OAAO,EAAA,KAAO;AAC1B,MAAA,MAAM,YAAA,GAAe,MAAM,yBAAA,CAA0B,aAAA,EAAe,GAAG,QAAQ,CAAA;AAC/E,MAAA,OAAO;AAAA,QACL,YAAY,EAAA,CAAG,UAAA;AAAA,QACf,UAAU,EAAA,CAAG,QAAA;AAAA,QACb,OAAO,EAAA,CAAG,KAAA;AAAA,QACV;AAAA,OACF;AAAA,IACF,CAAC;AAAA,GACH;AACF;AAEA,SAAS,wBAAwB,SAAA,EAAuD;AACtF,EAAA,MAAM,WAAW,EAAE,GAAA,EAAK,GAAG,QAAA,EAAU,CAAA,EAAG,aAAa,CAAA,EAAE;AACvD,EAAA,OAAO,CAAC,GAAG,SAAS,CAAA,CAAE,IAAA;AAAA,IACpB,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,QAAA,CAAS,CAAA,CAAE,YAAA,CAAa,IAAI,CAAA,IAAK,EAAA,KAAO,QAAA,CAAS,CAAA,CAAE,YAAA,CAAa,IAAI,CAAA,IAAK,EAAA;AAAA,GACtF;AACF;AAEA,SAAS,mBAAmB,SAAA,EAAkE;AAC5F,EAAA,OAAO,SAAA,CAAU,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,IAC5B,IAAA,EAAM,cAAA;AAAA,IACN,YAAY,EAAA,CAAG,UAAA;AAAA,IACf,UAAU,EAAA,CAAG,QAAA;AAAA,IACb,MAAM,EAAA,CAAG;AAAA,GACX,CAAE,CAAA;AACJ;AAEA,SAAS,eAAe,SAAA,EAA6C;AACnE,EAAA,OAAO,SAAA,CAAU,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,IAC5B,IAAI,EAAA,CAAG,UAAA;AAAA,IACP,SAAA,EAAW,GAAG,YAAA,CAAa,IAAA;AAAA,IAC3B,UAAU,EAAA,CAAG,QAAA;AAAA,IACb,MAAM,EAAA,CAAG;AAAA,GACX,CAAE,CAAA;AACJ;AAiBA,eAAsB,uBAAA,CAAwB;AAAA,EAC5C,OAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAC5C,EAAA,MAAM,EAAE,UAAS,GAAI,UAAA;AAGrB,EAAA,IAAI,6BAAA,GAAgC,KAAA;AAMpC,EAAA,MAAM,SAAA,GAA6B;AAAA,IACjC,kBAAkB,MAAM;AACtB,MAAA,aAAA,CAAcC,qBAAqB,yBAAA,EAA2B,OAAA,EAAS,UAAA,EAAY,EAAE,CAAC,CAAA;AAAA,IACxF,CAAA;AAAA,IACA,gBAAA,EAAkB,CAAC,KAAA,KAAU;AAC3B,MAAA,aAAA,CAAcA,qBAAqB,iBAAA,EAAmB,OAAA,EAAS,YAAY,EAAE,KAAA,EAAO,CAAC,CAAA;AAAA,IACvF,CAAA;AAAA,IACA,mBAAA,EAAqB,CAACH,KAAAA,KAAS;AAE7B,MAAA,aAAA;AAAA,QACEG,qBAAqB,4BAAA,EAA8B,OAAA,EAAS,YAAY,EAAE,IAAA,EAAAH,OAAM;AAAA,OAClF;AACA,MAAA,6BAAA,GAAgC,IAAA;AAAA,IAClC;AAAA;AAAA,GAEF;AAEA,EAAA,MAAM,eAAA,GAAkB,MAAM,WAAA,CAAY,UAAA;AAAA,IACxC;AAAA,MACE,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,oBAAoB,CAAA;AAAA,MAC3C,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,KAAA,EAAO,MAAM,UAAA,CAAW,aAAa,CAAA;AAAA,MACrC,UAAA,EAAY,MAAA;AAAA,MACZ,WAAA,EAAa,WAAA,CAAY,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA;AAAA,MAChD,iBAAiB,OAAA,CAAQ;AAAA,KAC3B;AAAA,IACA;AAAA,GACF;AAEA,EAAA,IAAI,CAAC,gBAAgB,OAAA,EAAS;AAC5B,IAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAY,GAAI,eAAA;AAC/B,IAAA,MAAM,iBAAA,GAAoB,WAAW,UAAA,IAAc,CAAA;AACnD,IAAA,IAAI,CAAC,WAAA,IAAe,iBAAA,IAAqB,OAAA,CAAQ,UAAA,EAAY;AAC3D,MAAA,OAAOI,cAAAA,CAAe,SAAS,UAAA,EAAY;AAAA,QACzC,UAAA,EAAY;AAAA,UACV,GAAG,UAAA;AAAA,UACH,MAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,GAAG,IAAA;AAAA,UACH,UAAA,EAAY,KAAK,GAAA;AAAI,SACvB;AAAA,QACA,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,MAAM,IAAA,IAAQ,OAAA;AAAA,UACpB,OAAA,EACE,iBAAA,IAAqB,OAAA,CAAQ,UAAA,GACzB,CAAA,aAAA,EAAgB,OAAA,CAAQ,UAAU,CAAA,YAAA,EAAe,KAAA,CAAM,OAAO,CAAA,CAAA,GAC9D,KAAA,CAAM,OAAA;AAAA,UACZ,YAAY,KAAA,CAAM,UAAA;AAAA,UAClB,WAAA,EAAa;AAAA;AACf,OACD,CAAA;AAAA,IACH;AACA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,KAAA,CAAM,IAAA,IAAQ,OAAA,EAAS,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,CAAA;AACtF,IAAA,OAAOC,KAAAA,CAAM,SAAS,UAAA,EAAY;AAAA,MAChC,MAAA;AAAA,MACA,WAAA,EAAa,CAAC,iBAAA,CAAkB,CAAC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAQ,CAAC,CAAC,CAAA;AAAA,MACrE,OAAO,gBAAA;AAAiB,KACzB,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,SAAS,eAAA,CAAgB,MAAA;AAC/B,EAAA,MAAM,KAAA,GAAQ,4BAA4B,MAAM,CAAA;AAChD,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,YAAA,EAAc,WAAU,GAAI,MAAA;AAErD,EAAA,MAAM,aAAA,GAAgB,qBAAqB,SAAwC,CAAA;AACnF,EAAA,MAAM,YAAA,GAAe,oBAAoB,SAAwC,CAAA;AAGjF,EAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,IAAK,IAAA,EAAM;AAClC,IAAA,MAAM,QAAA,GAEF,CAAC,GAAG,aAAA,EAAe,EAAE,IAAA,EAAM,UAAA,EAAY,MAAM,CAAA;AACjD,IAAA,MAAM,UAAA,GAAa,oBAAoB,QAAQ,CAAA;AAC/C,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,UAAA,CAAW,KAAA,EAAO,KAAK,CAAA;AAIjD,IAAA,IAAI,YAAA,IAAgB,CAAC,6BAAA,EAA+B;AAClD,MAAA,MAAM,aAAA;AAAA,QACJF,oBAAAA,CAAqB,4BAAA,EAA8B,OAAA,EAAS,UAAA,EAAY;AAAA,UACtE,IAAA,EAAM;AAAA,SACP;AAAA,OACH;AAAA,IACF;AAEA,IAAA,OAAOF,WAAAA,CAAY,SAAS,UAAA,EAAY;AAAA,MACtC,UAAA,EAAY;AAAA,QACV,GAAG,UAAA;AAAA,QACH,QAAA,EAAU,CAAC,GAAG,QAAA,EAAU,UAAU,CAAA;AAAA,QAClC,KAAA,EAAO,QAAA;AAAA,QACP,oBAAoB,UAAA,CAAW,aAAA,GAC3B,4BAA4B,QAAA,EAAU,UAAA,CAAW,aAAa,CAAA,GAC9D,MAAA;AAAA,QACJ,MAAA,EAAQ,WAAA;AAAA;AAAA,QAER,gBAAA,EAAkB,MAAA;AAAA,QAClB,kBAAA,EAAoB;AAAA,OACtB;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,GAAG,IAAA;AAAA,QACH,WAAA,EAAa,CAAC,GAAG,IAAA,CAAK,aAAa,UAAU,CAAA;AAAA,QAC7C,UAAA,EAAY,KAAK,GAAA,EAAI;AAAA,QACrB,KAAA,EAAO,QAAA,CAAS,IAAA,CAAK,KAAA,EAAO,KAAK;AAAA,OACnC;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,IAAA,MAAM,iBAAA,GAAoB,WAAW,UAAA,IAAc,CAAA;AACnD,IAAA,IAAI,iBAAA,IAAqB,QAAQ,UAAA,EAAY;AAC3C,MAAA,OAAOG,cAAAA,CAAe,SAAS,UAAA,EAAY;AAAA,QACzC,UAAA,EAAY;AAAA,UACV,GAAG,UAAA;AAAA,UACH,MAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,GAAG,IAAA;AAAA,UACH,UAAA,EAAY,KAAK,GAAA;AAAI,SACvB;AAAA,QACA,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,oBAAA;AAAA,UACN,OAAA,EAAS,CAAA,aAAA,EAAgB,OAAA,CAAQ,UAAU,CAAA,0CAAA,CAAA;AAAA,UAC3C,WAAA,EAAa;AAAA;AACf,OACD,CAAA;AAAA,IACH;AACA,IAAA,MAAM,MAAA,GAAS,KAAK,SAAA,CAAU;AAAA,MAC5B,KAAA,EAAO,uCAAA;AAAA,MACP,OAAA,EAAS;AAAA,KACV,CAAA;AACD,IAAA,OAAOC,KAAAA,CAAM,SAAS,UAAA,EAAY;AAAA,MAChC,MAAA;AAAA,MACA,WAAA,EAAa,CAAC,iBAAA,CAAkB,CAAC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,MAAA,EAAQ,CAAC,CAAC,CAAA;AAAA,MACrE;AAAA,KACD,CAAA;AAAA,EACH;AACA,EAAA,MAAM,UAAA,GAAa,MAAMH,kBAAAA,CAAkB,SAAA,EAAW,aAAa,CAAA;AACnE,EAAA,MAAM,MAAA,GAAS,wBAAwB,UAAU,CAAA;AACjD,EAAA,IAAI,YAAA,KAAiB,YAAA,IAAgB,YAAA,KAAiB,MAAA,EAAQ;AAC5D,IAAA,MAAM,aAAA,GAAgB,mBAAmB,MAAM,CAAA;AAG/C,IAAA,MAAM,WAEF,CAAC,GAAG,aAAA,EAAe,GAAI,OAAO,CAAC,EAAE,IAAA,EAAM,UAAA,EAAqB,MAAM,CAAA,GAAI,EAAC,EAAI,GAAG,aAAa,CAAA;AAC/F,IAAA,MAAM,YAAA,GAAe,eAAe,MAAM,CAAA;AAI1C,IAAA,IAAI,YAAA,IAAgB,CAAC,6BAAA,EAA+B;AAClD,MAAA,MAAM,aAAA;AAAA,QACJC,oBAAAA,CAAqB,4BAAA,EAA8B,OAAA,EAAS,UAAA,EAAY;AAAA,UACtE,IAAA,EAAM;AAAA,SACP;AAAA,OACH;AAAA,IACF;AAEA,IAAA,OAAO,SAAA,CAAU,SAAS,UAAA,EAAY;AAAA,MACpC,UAAA,EAAY,oBAAoB,QAAQ,CAAA;AAAA,MACxC,SAAA,EAAW,YAAA;AAAA,MACX;AAAA,KACD,CAAA;AAAA,EACH;AACA,EAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,IAAA,MAAM,aAAA,GAAgB,OAAO,CAAC,CAAA;AAC9B,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,MAAM,IAAI,MAAM,oBAAoB,CAAA;AAAA,IACtC;AACA,IAAA,MAAM,iBAAA,GAAoB,WAAW,UAAA,IAAc,CAAA;AACnD,IAAA,IAAI,iBAAA,IAAqB,QAAQ,UAAA,EAAY;AAC3C,MAAA,OAAOC,cAAAA,CAAe,SAAS,UAAA,EAAY;AAAA,QACzC,UAAA,EAAY;AAAA,UACV,GAAG,UAAA;AAAA,UACH,MAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,GAAG,IAAA;AAAA,UACH,UAAA,EAAY,KAAK,GAAA;AAAI,SACvB;AAAA,QACA,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,oBAAA;AAAA,UACN,OAAA,EAAS,CAAA,aAAA,EAAgB,OAAA,CAAQ,UAAU,CAAA,sCAAA,CAAA;AAAA,UAC3C,WAAA,EAAa;AAAA;AACf,OACD,CAAA;AAAA,IACH;AACA,IAAA,MAAM,MAAA,GAAS,KAAK,SAAA,CAAU;AAAA,MAC5B,KAAA,EAAO,oCAAA;AAAA,MACP,OAAA,EAAS;AAAA,KACV,CAAA;AACD,IAAA,OAAOC,KAAAA,CAAM,SAAS,UAAA,EAAY;AAAA,MAChC,MAAA;AAAA,MACA,WAAA,EAAa;AAAA,QACX,mBAAA,CAAoB;AAAA,UAClB;AAAA,YACE,IAAA,EAAM,cAAA;AAAA,YACN,YAAY,aAAA,CAAc,UAAA;AAAA,YAC1B,UAAU,aAAA,CAAc,QAAA;AAAA,YACxB,MAAM,aAAA,CAAc;AAAA;AACtB,SACD,CAAA;AAAA,QACD,iBAAA,CAAkB;AAAA,UAChB;AAAA,YACE,IAAA,EAAM,gBAAA;AAAA,YACN,YAAY,aAAA,CAAc,UAAA;AAAA,YAC1B,UAAU,aAAA,CAAc,QAAA;AAAA,YACxB,UAAU,CAAC,EAAE,MAAM,UAAA,EAAY,IAAA,EAAM,QAAQ;AAAA;AAC/C,SACD;AAAA,OACH;AAAA,MACA,SAAA,EAAW;AAAA,QACT;AAAA,UACE,IAAI,aAAA,CAAc,UAAA;AAAA,UAClB,SAAA,EAAW,cAAc,YAAA,CAAa,IAAA;AAAA,UACtC,UAAU,aAAA,CAAc,QAAA;AAAA,UACxB,MAAM,aAAA,CAAc;AAAA;AACtB,OACF;AAAA,MACA,WAAA,EAAa;AAAA,QACX;AAAA,UACE,IAAI,aAAA,CAAc,UAAA;AAAA,UAClB,SAAA,EAAW,cAAc,YAAA,CAAa,IAAA;AAAA,UACtC,UAAU,aAAA,CAAc,QAAA;AAAA,UACxB,MAAA,EAAQ,CAAC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAIR,QAAAA,EAAS,EAAG,IAAA,EAAM,MAAA,EAAQ;AAAA;AAC7D,OACF;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AACA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,YAAY,CAAA,CAAE,CAAA;AAC7D;ACtVA,SAAS,mBAAmB,SAAA,EAA2B;AACrD,EAAA,OAAOS,MAAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA,sBAAA,EA2Be,IAAI,IAAA,CAAK,SAAS,CAAA,CAAE,aAAa;AAAA,mCAAA,EACpB,OAAA,CAAQ,KAAK;AAAA,EAAA,CAAA;AAElD;AAEO,SAAS,wBAAA,CACd,MAAA,EACA,OAAA,EACA,SAAA,EACoB;AACpB,EAAA,MAAM,WAAA,GAAcA,MAAAA;AAAA;;AAAA;;AAAA,IAAA,EAKhB,kBAAA,CAAmB,SAAS,CAAC;;AAAA;AAAA;;AAAA,IAAA,EAK7B,OAAO,WAAW;;AAAA;AAAA;;AAAA,IAAA,EAKlB,aAAA,CAAc,MAAM,CAAC;;AAAA;AAAA;;AAAA;;AAAA,IAAA,EAOrB,gBAAA,CAAiB,MAAA,EAAQ,OAAO,CAAC;AAAA,EAAA,CAAA;AAErC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAU;AAAA,MACR;AAAA,QACE,IAAIT,QAAAA,EAAS;AAAA,QACb,IAAA,EAAM,UAAA;AAAA,QACN,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,IAAIA,QAAAA,EAAS;AAAA,IACb,KAAA,EAAO;AAAA,GACT;AACF;AAEA,SAAS,cAAc,MAAA,EAAwB;AAC7C,EAAA,OAAO,MAAA,CAAO,OAAO,MAAA,CAAO,MAAM,EAAE,MAAA,CAAO,CAAC,KAAK,KAAA,KAAU;AACzD,IAAA,IAAI,CAAC,MAAM,IAAA,EAAM;AACf,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,OAAOS,MAAAA;AAAA,MAAA,EACH,GAAG;;AAAA,OAAA,EAEF,MAAM,IAAI,CAAA;AAAA,MAAA,EACX,MAAM,IAAI;AAAA,IAAA,CAAA,CACZ,IAAA,EAAK;AAAA,EACT,GAAG,EAAY,CAAA;AACjB;AAEA,SAAS,gBAAA,CAAiB,QAAgB,OAAA,EAAyC;AACjF,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,MAAA,CAAO,CAAC,KAAK,kBAAA,KAAuB;AAC1D,IAAA,MAAM,QAAA,GAAW,QAAQ,kBAAkB,CAAA;AAC3C,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,OAAOA,MAAAA;AAAA,MAAA,EACH,GAAG;;AAAA,aAAA,EAEI,SAAS,IAAI,CAAA;AAAA,MAAA,EACpB,SAAS,WAAW;AAAA,IAAA,CAAA,CACtB,IAAA,EAAK;AAAA,EACT,GAAG,EAAY,CAAA;AACjB;;;ACxFA,eAAsB,SAAA,CAAU;AAAA,EAC9B,OAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAC5C,EAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAQ,GAAI,OAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,QAAQ,SAAS,CAAA;AAChC,EAAA,QAAQ,WAAW,MAAA;AAAQ,IACzB,KAAK,MAAA,EAAQ;AACX,MAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAM;AACvB,QAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,MAC9C;AACA,MAAA,OAAO,QAAA,CAAS,SAAS,UAAA,EAAY;AAAA,QACnC,iBAAA,EAAmB,UAAA;AAAA,QACnB,aAAA,EAAe;AAAA,UACb,wBAAA,CAAyB,MAAA,EAAQ,OAAA,EAAS,OAAA,CAAQ,SAAS,CAAA;AAAA,UAC3D,iBAAA,CAAkB,CAAC,EAAE,IAAA,EAAM,UAAA,EAAY,MAAM,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAM,CAAC;AAAA;AACpE,OACD,CAAA;AAAA,IACH;AAAA,IACA,KAAK,mBAAA;AAAA,IACL,KAAK,0BAAA,EAA4B;AAC/B,MAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,CAAM,yBAAA,EAA2B;AAC5C,QAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,MAC7D;AACA,MAAA,MAAM,EAAE,UAAA,EAAY,QAAA,EAAU,WAAW,IAAA,EAAK,GAAI,QAAQ,KAAA,CAAM,yBAAA;AAChE,MAAA,MAAM,gBAAA,GAAmB,UAAA,CAAW,gBAAA,IAAoB,EAAC;AACzD,MAAA,MAAM,aAAA,GAA4B;AAAA,QAChC,EAAA,EAAI,UAAA;AAAA,QACJ,SAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA,EAAQ,CAAC,EAAE,IAAA,EAAM,YAAY,EAAA,EAAIT,QAAAA,EAAS,EAAG,IAAA,EAAM;AAAA,OACrD;AACA,MAAA,MAAM,wBAAwB,CAAC,GAAI,WAAW,kBAAA,IAAsB,IAAK,aAAa,CAAA;AACtF,MAAA,MAAM,0BAA0B,gBAAA,CAAiB,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,CAAG,OAAO,UAAU,CAAA;AACpF,MAAA,MAAM,iBAAA,GAAoB;AAAA,QACxB,GAAG,UAAA;AAAA,QACH,kBAAA,EAAoB,qBAAA;AAAA,QACpB,gBAAA,EAAkB;AAAA,OACpB;AACA,MAAA,OAAO,cAAA,CAAe,SAAS,UAAA,EAAY;AAAA,QACzC,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH;AAAA,IACA;AACE,MAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAM;AACvB,QAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,MAC9C;AACA,MAAA,OAAO,QAAA,CAAS,SAAS,UAAA,EAAY;AAAA,QACnC,iBAAA,EAAmB,UAAA;AAAA,QACnB,aAAA,EAAe,CAAC,iBAAA,CAAkB,CAAC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAM,CAAC,CAAC;AAAA,OACpF,CAAA;AAAA;AAEP;AC3DA,eAAsB,qBAAA,CAAsB;AAAA,EAC1C,OAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAC5C,EAAA,OAAO,eAAA,CAAgB,SAAS,UAAA,EAAY;AAAA,IAC1C,UAAU,UAAA,CAAW;AAAA,GACtB,CAAA;AACH;ACLA,eAAsB,wBAAA,CAAyB;AAAA,EAC7C,OAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAE5C,EAAA,IAAI,KAAK,WAAA,KAAgB,MAAA,IAAa,IAAA,CAAK,WAAA,CAAY,WAAW,CAAA,EAAG;AACnE,IAAA,MAAM,IAAI,MAAM,8EAA8E,CAAA;AAAA,EAChG;AAEA,EAAA,MAAM,cAAc,IAAA,CAAK,WAAA;AAEzB,EAAA,MAAM,eAAA,GAAkB,WAAA,CAAY,GAAA,CAAI,CAAC,UAAA,KAAe;AACtD,IAAA,MAAM,QAAA,GAAW,KAAK,SAAA,EAAW,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,EAAA,KAAO,UAAA,CAAW,EAAE,CAAA;AACrE,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,gBAAA;AAAA,MACN,YAAY,UAAA,CAAW,EAAA;AAAA,MACvB,QAAA,EAAU,QAAA,EAAU,QAAA,IAAY,UAAA,CAAW,QAAA;AAAA,MAC3C,QAAA,EAAU,WAAW,MAAA,CAAO,MAAA;AAAA,QAC1B,CAAC,SACC,IAAA,CAAK,IAAA,KAAS,cACd,IAAA,CAAK,IAAA,KAAS,iBAAA,IACd,IAAA,CAAK,IAAA,KAAS;AAAA;AAClB,KACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,cAAA,CAAe,SAAS,UAAA,EAAY;AAAA,IACzC,WAAA,EAAa,CAAC,iBAAA,CAAkB,eAAe,CAAC;AAAA,GACjD,CAAA;AACH;ACxBA,eAAsB,qBAAA,CAAsB;AAAA,EAC1C,OAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAE5C,EAAA,IAAI,UAAA,CAAW,gBAAA,KAAqB,MAAA,IAAa,UAAA,CAAW,uBAAuB,MAAA,EAAW;AAC5F,IAAA,MAAM,IAAI,MAAM,0EAA0E,CAAA;AAAA,EAC5F;AAIA,EAAA,IAAI,UAAA,CAAW,gBAAA,CAAiB,MAAA,GAAS,CAAA,EAAG;AAC1C,IAAA,OAAO,yBAAA,CAA0B,SAAS,UAAA,EAAY;AAAA,MACpD,kBAAkB,UAAA,CAAW,gBAAA;AAAA,MAC7B,oBAAoB,UAAA,CAAW;AAAA,KAChC,CAAA;AAAA,EACH;AAGA,EAAA,OAAOE,kBAAAA,CAAmB,SAAS,UAAA,EAAY;AAAA,IAC7C,aAAa,UAAA,CAAW;AAAA,GACzB,CAAA;AACH;;;ACzBO,IAAM,sBAAsB,KAAA,CAAM;AAAA,EACvC,KAAA,EAAO;AAAA,IACL,OAAO,EAAC;AAAA,IAOR,SAAS,EAAC;AAAA,IAQV,QAAQ;AAAC;AAEb,CAAC,EAAE,aAAA,CAAc;AAAA;AAAA,EAEf,EAAA,EAAI,KAAA;AAAA,EACJ,OAAA,EAAS,MAAA;AAAA,EACT,OAAA,EAAS,CAAC,EAAE,KAAA,EAAM,MAAO;AAAA,IACvB,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,YAAY,KAAA,CAAM,iBAAA;AAAA,IAClB,IAAA,EAAM;AAAA,MACJ,UAAA,EAAY,MAAM,iBAAA,CAAkB,UAAA;AAAA,MACpC,eAAe,EAAC;AAAA,MAChB,aAAa,EAAC;AAAA,MACd,OAAO,gBAAA,EAAiB;AAAA,MACxB,SAAA,EAAW,KAAK,GAAA;AAAI,KACtB;AAAA,IACA,eAAe,KAAA,CAAM,aAAA;AAAA,IACrB,eAAe,KAAA,CAAM,aAAA;AAAA,IACrB,aAAa,KAAA,CAAM;AAAA,GACrB,CAAA;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI;AAAA,QACF,QAAA,EAAU;AAAA,UACR,MAAA,EAAQ,kBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,OAAA,EAAS,OAAM,MAC3B;AAAA,cACC,GAAG,OAAA,CAAQ,UAAA;AAAA,cACX,MAAA,EAAQ,YAAA;AAAA,cACR,QAAA,EAAU,CAAC,GAAG,OAAA,CAAQ,WAAW,QAAA,EAAU,GAAG,MAAM,aAAa;AAAA,aACnE,CAAA;AAAA,YACF,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,eAAe,KAAA,CAAM;AAAA,aACvB;AAAA,WACH;AAAA,SACH;AAAA,QACA,cAAA,EAAgB;AAAA,UACd,MAAA,EAAQ,kBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,KAAA,EAAM,MAClB;AAAA,cACC,GAAG,KAAA,CAAM,UAAA;AAAA,cACT,MAAA,EAAQ;AAAA,aACV;AAAA,WACH;AAAA;AACH;AACF,KACF;AAAA,IAEA,gBAAA,EAAkB;AAAA,MAChB,EAAA,EAAI;AAAA,QACF,eAAA,EAAiB;AAAA,UACf,MAAA,EAAQ,oBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,UAAA,EAAY,QAAQ,UAAA,CAAW,UAAA;AAAA,cAC/B,aAAA,EAAe,OAAA,CAAQ,IAAA,CAAK,aAAA,IAAiB,EAAC;AAAA,cAC9C,aAAa,EAAC;AAAA,cACd,OAAO,gBAAA,EAAiB;AAAA,cACxB,WAAW,KAAA,CAAM;AAAA,aACnB;AAAA,WACH;AAAA;AACH;AACF,KACF;AAAA,IAEA,gBAAA,EAAkB;AAAA,MAChB,EAAA,EAAI;AAAA,QACF,yBAAA,EAA2B;AAAA,UACzB,MAAA,EAAQ,yBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,UAAA,EAAY,QAAQ,UAAA,CAAW,UAAA;AAAA,cAC/B,eAAe,EAAC;AAAA,cAChB,aAAa,EAAC;AAAA,cACd,SAAA,EAAW,OAAA,CAAQ,UAAA,CAAW,gBAAA,IAAoB,EAAC;AAAA,cACnD,aAAa,EAAC;AAAA,cACd,kBAAkB,KAAA,CAAM,gBAAA;AAAA,cACxB,oBAAoB,KAAA,CAAM,kBAAA;AAAA,cAC1B,OAAO,gBAAA,EAAiB;AAAA,cACxB,SAAA,EAAW,KAAK,GAAA;AAAI,aACtB;AAAA,WACH;AAAA,SACH;AAAA,QACA,kBAAA,EAAoB;AAAA,UAClB,MAAA,EAAQ,qBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,OAAA,EAAQ,MACpB;AAAA,cACC,GAAG,OAAA,CAAQ,UAAA;AAAA,cACX,gBAAA,EAAkB,MAAA;AAAA,cAClB,kBAAA,EAAoB;AAAA,aACtB,CAAA;AAAA,YACF,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,UAAA,EAAY,QAAQ,UAAA,CAAW,UAAA;AAAA,cAC/B,eAAe,EAAC;AAAA,cAChB,aAAa,EAAC;AAAA,cACd,WAAW,EAAC;AAAA,cACZ,aAAa,KAAA,CAAM,WAAA;AAAA,cACnB,gBAAA,EAAkB,MAAA;AAAA,cAClB,kBAAA,EAAoB,MAAA;AAAA,cACpB,OAAO,gBAAA,EAAiB;AAAA,cACxB,SAAA,EAAW,KAAK,GAAA;AAAI,aACtB;AAAA,WACH;AAAA;AACH;AACF,KACF;AAAA,IAEA,kBAAA,EAAoB;AAAA,MAClB,EAAA,EAAI;AAAA,QACF,KAAA,EAAO;AAAA,UACL,MAAA,EAAQ,eAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,OAAA,EAAS,OAAM,MAC3B;AAAA,cACC,GAAG,OAAA,CAAQ,UAAA;AAAA,cACX,QAAA,EAAU,CAAC,GAAG,OAAA,CAAQ,WAAW,QAAA,EAAU,GAAG,MAAM,WAAW,CAAA;AAAA,cAC/D,OAAO,QAAA,CAAS,OAAA,CAAQ,UAAA,CAAW,KAAA,EAAO,MAAM,KAAK,CAAA;AAAA,cACrD,UAAA,EAAA,CAAa,OAAA,CAAQ,UAAA,CAAW,UAAA,IAAc,CAAA,IAAK;AAAA,aACrD,CAAA;AAAA,YACF,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,aAAa,KAAA,CAAM,WAAA;AAAA,cACnB,WAAW,KAAA,CAAM,SAAA;AAAA,cACjB,aAAa,KAAA,CAAM,WAAA;AAAA,cACnB,OAAO,QAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,MAAM,KAAK;AAAA,aACjD;AAAA,WACH;AAAA,SACH;AAAA,QACA,cAAA,EAAgB;AAAA,UACd,MAAA,EAAQ,SAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,KAAA,EAAM,MAClB;AAAA,cACC,GAAG,KAAA,CAAM,UAAA;AAAA,cACT,OAAO,KAAA,CAAM;AAAA,aACf,CAAA;AAAA,YACF,IAAA,EAAM,CAAC,EAAE,KAAA,EAAM,MACZ;AAAA,cACC,GAAG,KAAA,CAAM,IAAA;AAAA,cACT,aAAA,EAAe;AAAA,aACjB;AAAA,WACH;AAAA,SACH;AAAA,QACA,WAAA,EAAa;AAAA,UACX,MAAA,EAAQ,SAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,KAAA,EAAM,MAAO,EAAE,GAAG,KAAA,CAAM,UAAA,EAAY,UAAA,EAAY,CAAA,EAAE,CAAA;AAAA,YACjE,IAAA,EAAM,CAAC,EAAE,KAAA,EAAM,MAAO;AAAA,cACpB,GAAG,KAAA,CAAM,IAAA;AAAA,cACT,aAAA,EAAe;AAAA,aACjB;AAAA,WACD;AAAA,SACH;AAAA,QACA,SAAA,EAAW;AAAA,UACT,MAAA,EAAQ,iBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,OAAA,EAAS,OAAM,KAAM;AAClC,cAAA,MAAM,WAAW,QAAA,CAAS,OAAA,CAAQ,UAAA,CAAW,KAAA,EAAO,MAAM,KAAK,CAAA;AAC/D,cAAA,OAAO;AAAA,gBACL,GAAG,OAAA,CAAQ,UAAA;AAAA,gBACX,UAAU,CAAC,GAAG,QAAQ,UAAA,CAAW,QAAA,EAAU,MAAM,UAAU,CAAA;AAAA,gBAC3D,KAAA,EAAO,QAAA;AAAA,gBACP,kBAAA,EAAoB,QAAQ,UAAA,CAAW,aAAA,GACnC,4BAA4B,QAAA,EAAU,OAAA,CAAQ,UAAA,CAAW,aAAa,CAAA,GACtE,MAAA;AAAA,gBACJ,UAAA,EAAY;AAAA,eACd;AAAA,YACF,CAAA;AAAA,YACA,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,WAAA,EAAa,CAAC,KAAA,CAAM,UAAU,CAAA;AAAA,cAC9B,WAAW,KAAA,CAAM,SAAA;AAAA,cACjB,OAAO,QAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,MAAM,KAAK,CAAA;AAAA;AAAA,cAE/C,kBAAkB,KAAA,CAAM,SAAA;AAAA,cACxB,oBAAoB;AAAC,aACvB;AAAA,WACH;AAAA;AACH;AACF,KACF;AAAA,IAEA,eAAA,EAAiB;AAAA,MACf,EAAA,EAAI;AAAA,QACF,kBAAA,EAAoB;AAAA,UAClB,MAAA,EAAQ,qBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,aAAa,KAAA,CAAM,WAAA;AAAA,cACnB,gBAAA,EAAkB;AAAA,aACpB;AAAA,WACH;AAAA,SACH;AAAA,QACA,iBAAA,EAAmB;AAAA,UACjB,MAAA,EAAQ,qBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,WAAA,EAAa,CAAC,KAAA,CAAM,UAAU;AAAA,aAChC;AAAA,WACH;AAAA,SACH;AAAA,QACA,cAAA,EAAgB;AAAA,UACd,MAAA,EAAQ,kBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,oBAAoB,KAAA,CAAM,kBAAA;AAAA,cAC1B,kBAAkB,KAAA,CAAM;AAAA,aAC1B;AAAA,WACH;AAAA,SACH;AAAA,QACA,WAAA,EAAa;AAAA,UACX,MAAA,EAAQ,SAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,KAAA,EAAM,MAAO,EAAE,GAAG,KAAA,CAAM,UAAA,EAAY,UAAA,EAAY,CAAA,EAAE,CAAA;AAAA,YACjE,IAAA,EAAM,CAAC,EAAE,KAAA,EAAM,MAAO;AAAA,cACpB,GAAG,KAAA,CAAM,IAAA;AAAA,cACT,aAAA,EAAe;AAAA,aACjB;AAAA,WACD;AAAA;AACH;AACF,KACF;AAAA,IAEA,gBAAA,EAAkB;AAAA,MAChB,EAAA,EAAI;AAAA,QACF,iBAAA,EAAmB;AAAA,UACjB,MAAA,EAAQ,SAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,KAAA,OAAY,KAAA,CAAM,UAAA;AAAA,YACjC,IAAA,EAAM,CAAC,EAAE,KAAA,EAAM,MAAO;AAAA,cACpB,GAAG,KAAA,CAAM,IAAA;AAAA,cACT,aAAA,EAAe;AAAA,aACjB;AAAA,WACD;AAAA,SACH;AAAA,QACA,aAAA,EAAe;AAAA,UACb,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IAEA,uBAAA,EAAyB;AAAA,MACvB,EAAA,EAAI;AAAA,QACF,wBAAA,EAA0B;AAAA,UACxB,MAAA,EAAQ,SAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,KAAA,OAAY,KAAA,CAAM,UAAA;AAAA,YACjC,IAAA,EAAM,CAAC,EAAE,KAAA,EAAM,MAAO;AAAA,cACpB,GAAG,KAAA,CAAM,IAAA;AAAA,cACT,aAAA,EAAe;AAAA,aACjB;AAAA,WACD;AAAA,SACH;AAAA,QACA,kBAAA,EAAoB;AAAA,UAClB,MAAA,EAAQ,qBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,aAAa,KAAA,CAAM,WAAA;AAAA,cACnB,gBAAA,EAAkB,MAAA;AAAA,cAClB,kBAAA,EAAoB;AAAA,aACtB;AAAA,WACH;AAAA;AACH;AACF,KACF;AAAA,IAEA,mBAAA,EAAqB;AAAA,MACnB,EAAA,EAAI;AAAA,QACF,cAAA,EAAgB;AAAA,UACd,MAAA,EAAQ,eAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,OAAA,EAAS,OAAM,MAC3B;AAAA,cACC,GAAG,OAAA,CAAQ,UAAA;AAAA,cACX,QAAA,EAAU,CAAC,GAAG,OAAA,CAAQ,WAAW,QAAA,EAAU,GAAG,MAAM,WAAW;AAAA,aACjE,CAAA;AAAA,YACF,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,WAAA,EAAa,CAAC,GAAG,OAAA,CAAQ,KAAK,WAAA,EAAa,GAAG,MAAM,WAAW;AAAA,aACjE;AAAA,WACH;AAAA;AACH;AACF,KACF;AAAA,IAEA,mBAAA,EAAqB;AAAA,MACnB,EAAA,EAAI;AAAA,QACF,KAAA,EAAO;AAAA,UACL,MAAA,EAAQ,eAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,OAAA,EAAS,OAAM,MAC3B;AAAA,cACC,GAAG,OAAA,CAAQ,UAAA;AAAA,cACX,QAAA,EAAU,CAAC,GAAG,OAAA,CAAQ,WAAW,QAAA,EAAU,GAAG,MAAM,WAAW,CAAA;AAAA,cAC/D,OAAO,QAAA,CAAS,OAAA,CAAQ,UAAA,CAAW,KAAA,EAAO,MAAM,KAAK,CAAA;AAAA,cACrD,UAAA,EAAA,CAAa,OAAA,CAAQ,UAAA,CAAW,UAAA,IAAc,CAAA,IAAK;AAAA,aACrD,CAAA;AAAA,YACF,IAAA,EAAM,CAAC,EAAE,OAAA,EAAS,OAAM,MACrB;AAAA,cACC,GAAG,OAAA,CAAQ,IAAA;AAAA,cACX,aAAa,KAAA,CAAM,WAAA;AAAA,cACnB,WAAW,KAAA,CAAM,SAAA;AAAA,cACjB,aAAa,KAAA,CAAM,WAAA;AAAA,cACnB,OAAO,QAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,MAAM,KAAK;AAAA,aACjD;AAAA,WACH;AAAA,SACH;AAAA,QACA,cAAA,EAAgB;AAAA,UACd,MAAA,EAAQ,SAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,KAAA,EAAM,MAClB;AAAA,cACC,GAAG,KAAA,CAAM,UAAA;AAAA,cACT,OAAO,KAAA,CAAM;AAAA,aACf,CAAA;AAAA,YACF,IAAA,EAAM,CAAC,EAAE,KAAA,EAAM,MACZ;AAAA,cACC,GAAG,KAAA,CAAM,IAAA;AAAA,cACT,aAAA,EAAe;AAAA,aACjB;AAAA,WACH;AAAA,SACH;AAAA,QACA,WAAA,EAAa;AAAA,UACX,MAAA,EAAQ,SAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,KAAA,EAAM,MAAO,EAAE,GAAG,KAAA,CAAM,UAAA,EAAY,UAAA,EAAY,CAAA,EAAE,CAAA;AAAA,YACjE,IAAA,EAAM,CAAC,EAAE,KAAA,EAAM,MAAO;AAAA,cACpB,GAAG,KAAA,CAAM,IAAA;AAAA,cACT,aAAA,EAAe;AAAA,aACjB;AAAA,WACD;AAAA;AACH;AACF,KACF;AAAA,IAEA,aAAA,EAAe;AAAA,MACb,EAAA,EAAI;AAAA,QACF,kBAAA,EAAoB;AAAA,UAClB,MAAA,EAAQ,kBAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,KAAA,OAAY,KAAA,CAAM,cAAA;AAAA,YACjC,IAAA,EAAM,CAAC,EAAE,KAAA,EAAM,MAAO;AAAA,cACpB,GAAG,KAAA,CAAM,IAAA;AAAA,cACT,aAAA,EAAe;AAAA,aACjB;AAAA,WACD,CAAA;AAAA,UACD,OAAA,EAAS;AAAA,SACX;AAAA,QACA,yBAAA,EAA2B;AAAA,UACzB,MAAA,EAAQ,SAAA;AAAA,UACR,SAAS,MAAA,CAAO;AAAA,YACd,UAAA,EAAY,CAAC,EAAE,KAAA,OAAY,KAAA,CAAM,UAAA;AAAA,YACjC,IAAA,EAAM,CAAC,EAAE,KAAA,EAAM,MAAO;AAAA,cACpB,GAAG,KAAA,CAAM,IAAA;AAAA,cACT,aAAA,EAAe;AAAA,aACjB;AAAA,WACD;AAAA;AACH;AACF,KACF;AAAA,IAEA,OAAA,EAAS;AAAA,MACP,IAAA,EAAM;AAAA;AACR;AAEJ,CAAC;AAEM,IAAM,kBAAA,GAGT;AAAA,EACF,IAAA,EAAM,SAAA;AAAA,EACN,gBAAA,EAAkB,qBAAA;AAAA,EAClB,gBAAA,EAAkB,qBAAA;AAAA,EAClB,kBAAA,EAAoB,uBAAA;AAAA,EACpB,eAAA,EAAiB,oBAAA;AAAA,EACjB,gBAAA,EAAkB,qBAAA;AAAA,EAClB,uBAAA,EAAyB,4BAAA;AAAA,EACzB,mBAAA,EAAqB,wBAAA;AAAA,EACrB,mBAAA,EAAqB,wBAAA;AAAA,EACrB,aAAA,EAAe;AACjB,CAAA;AClaO,IAAM,sBAAN,MAAkD;AAAA,EACvD,OAAO,KAAA,EAA6B;AAClC,IAAA,OAAO,WAAA,CAAY,qBAAqB,KAAK,CAAA;AAAA,EAC/C;AACF,CAAA;AAKO,IAAM,mBAAA,GAAsB,IAAI,mBAAA,EAAoB;;;ACKpD,IAAM,0BAAN,MAA8B;AAAA,EASnC,WAAA,CACmB,MAAA,EACjB,IAAA,GAAgC,EAAC,EACjC;AAFiB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAGjB,IAAA,IAAA,CAAK,YAAA,GAAe,KAAK,YAAA,IAAgB,mBAAA;AACzC,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAK,kBAAA,IAAsB,kBAAA;AAChD,IAAA,IAAA,CAAK,MAAA,GAAS,KAAK,MAAA,IAAU,kBAAA;AAAA,EAC/B;AAAA,EAfiB,YAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EAET,KAAA,GAAyB,IAAA;AAAA,EACzB,cAAA,GAA4D,IAAA;AAAA,EAC5D,aAAA,GAAiD,IAAA;AAAA;AAAA;AAAA;AAAA,EAczD,MAAM,OAAA,GAA+B;AACnC,IAAA,MAAM,EAAE,OAAA,EAAS,iBAAA,EAAmB,eAAe,aAAA,EAAe,WAAA,KAAgB,IAAA,CAAK,MAAA;AAEvF,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO;AAAA,MACpC,KAAA,EAAO;AAAA,QACL,OAAA;AAAA,QACA,iBAAA;AAAA,QACA,aAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA;AACF,KACD,CAAA;AAED,IAAA,OAAO,IAAI,OAAA,CAAoB,CAAC,OAAA,EAAS,MAAA,KAAW;AAClD,MAAA,IAAA,CAAK,cAAA,GAAiB,OAAA;AACtB,MAAA,IAAA,CAAK,aAAA,GAAgB,MAAA;AAErB,MAAA,IAAA,CAAK,KAAA,CAAO,SAAA,CAAU,CAAC,QAAA,KAAa;AAClC,QAAA,IAAA,CAAK,iBAAA,CAAkB,QAAQ,CAAA,CAAE,KAAA,CAAM,CAAC,KAAA,KAAU;AAChD,UAAA,IAAA,CAAK,YAAY,KAAK,CAAA;AAAA,QACxB,CAAC,CAAA;AAAA,MACH,CAAC,CAAA;AAED,MAAA,IAAA,CAAK,MAAO,KAAA,EAAM;AAAA,IACpB,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,kBAAkB,QAAA,EAAsC;AAC5D,IAAA,IAAI,QAAA,CAAS,UAAU,SAAA,EAAW;AAChC,MAAA,MAAM,IAAA,CAAK,mBAAmB,QAAQ,CAAA;AAAA,IACxC,CAAA,MAAO;AACL,MAAA,MAAM,IAAA,CAAK,kBAAkB,QAAQ,CAAA;AAAA,IACvC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,mBAAmB,QAAA,EAAsC;AACrE,IAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAc,GAAI,QAAA,CAAS,OAAA;AAE/C,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,IAC3C;AAEA,IAAA,MAAM,IAAA,CAAK,cAAc,aAAa,CAAA;AACtC,IAAA,IAAA,CAAK,iBAAiB,UAAU,CAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,kBAAkB,QAAA,EAAsC;AACpE,IAAA,MAAM,EAAE,YAAA,EAAc,eAAA,EAAiB,iBAAA,KAAsB,IAAA,CAAK,MAAA;AAClE,IAAA,MAAM,aAAa,QAAA,CAAS,KAAA;AAE5B,IAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,OAAO,UAAU,CAAA,CAAE,SAAS,OAAO,CAAA;AAE5D,IAAA,IAAI,gBAAgB,KAAA,EAAO;AACzB,MAAA,MAAM,eAAA,CAAgB,MAAM,UAAU,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,YAAA,CAAa,KAAK,KAAK,CAAA;AAE7B,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,MAAM,iBAAiB,MAAM,iBAAA;AAAA,QAC3B,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,SAAS,OAAA,CAAQ,UAAA;AAAA,QACjB,SAAS,OAAA,CAAQ;AAAA,OACnB;AAEA,MAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,QAAA,IAAA,CAAK,OAAO,IAAA,EAAK;AACjB,QAAA,MAAM,IAAA,CAAK,aAAA,CAAc,QAAA,CAAS,OAAA,CAAQ,aAAa,CAAA;AACvD,QAAA,IAAA,CAAK,cAAA,GAAiB,QAAA,CAAS,OAAA,CAAQ,UAAU,CAAA;AACjD,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,KAAA,EAAO,KAAK,KAAK,CAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,YAAY,KAAA,EAA+B;AACvD,IAAA,MAAM,KAAK,aAAA,CAAc,IAAA,CAAK,OAAO,aAAa,CAAA,CAAE,MAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AAClE,IAAA,IAAA,CAAK,aAAA,GAAgB,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA;AAAA,EAChF;AACF,CAAA;;;AC3HA,eAAsB,oBAAoB,MAAA,EAAwD;AAChG,EAAA,MAAM,WAAA,GAAc,IAAI,uBAAA,CAAwB,MAAM,CAAA;AACtD,EAAA,OAAO,YAAY,OAAA,EAAQ;AAC7B;AC2EO,IAAM,2BAAN,MAA6D;AAAA,EAClE,MAAM,OAAA,CACJ,WAAA,EACA,SACA,OAAA,EACA,YAAA,EACA,QACA,cAAA,EACoC;AACpC,IAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,MAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,IAC5E;AAGA,IAAA,MAAM,UAAA,GAAa,YAAY,CAAC,CAAA;AAChC,IAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,OAAM,GAAI,UAAA;AAGhD,IAAA,MAAM,aAAaF,QAAAA,EAAS;AAE5B,IAAA,MAAM,WAAA,GAA0B;AAAA,MAC9B,GAAG,OAAA;AAAA,MACH,KAAA,EAAO,UAAA;AAAA,MACP,WAAW,MAAA,CAAO,GAAA;AAAA,MAClB,KAAA,EAAO,EAAE,IAAA,EAAM,KAAA;AAAM,KACvB;AAEA,IAAA,MAAM,cAAA,GAA6B;AAAA,MACjC,IAAI,OAAA,CAAQ,EAAA;AAAA,MACZ,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,KAAA,EAAO,UAAA;AAAA,MACP,MAAA,EAAQ,MAAA;AAAA,MACR,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,UAAU,EAAC;AAAA;AAAA,MACX,MAAA,EAAQ;AAAA,QACN,KAAK,MAAA,CAAO,GAAA;AAAA,QACZ,MAAM,MAAA,CAAO,IAAA;AAAA,QACb,SAAS,MAAA,CAAO;AAAA,OAClB;AAAA,MACA,WAAA,EAAa;AAAA,QACX,MAAA,EAAQ;AAAA,UACN,KAAK,YAAA,CAAa,GAAA;AAAA,UAClB,MAAM,YAAA,CAAa,IAAA;AAAA,UACnB,SAAS,YAAA,CAAa;AAAA,SACxB;AAAA,QACA,UAAA;AAAA,QACA,QAAA;AAAA,QACA,cAAc,OAAA,CAAQ,EAAA;AAAA,QACtB,OAAO,OAAA,CAAQ;AAAA;AAAA,OACjB;AAAA,MACA,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,eAAe,OAAA,CAAQ,aAAA;AAAA,MACvB,gBAAA,EAAkB,MAAA;AAAA,MAClB,kBAAA,EAAoB;AAAA,KACtB;AAEA,IAAA,OAAO,EAAE,aAAa,cAAA,EAAe;AAAA,EACvC;AACF,CAAA;AAKO,IAAM,6BAAN,MAA+D;AAAA,EACpE,MAAM,OAAA,CACJ,WAAA,EACA,SACA,OAAA,EACA,YAAA,EACA,OACA,aAAA,EACoC;AACpC,IAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,MAAM,8DAA8D,CAAA;AAAA,IAChF;AAEA,IAAA,MAAM,CAAC,eAAA,EAAiB,GAAG,oBAAoB,CAAA,GAAI,WAAA;AACnD,IAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,MAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AAAA,IACxC;AAGA,IAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC/B,WAAA,CAAY,GAAA;AAAA,QAAI,CAAC,eACf,IAAA,CAAK,uBAAA;AAAA,UACH,UAAA;AAAA,UACA,OAAA;AAAA,UACA,OAAA;AAAA,UACA,YAAA;AAAA,UACA,KAAA;AAAA,UACA;AAAA;AACF;AACF,KACF;AAEA,IAAA,MAAM,CAAC,WAAA,EAAa,GAAG,WAAW,CAAA,GAAI,UAAA;AACtC,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAGA,IAAA,MAAM,kBAAkB,UAAA,CAAW,MAAA;AAAA,MACjC,CAAC,GAAA,EAAK,MAAA,KAAW,QAAA,CAAS,GAAA,EAAK,OAAO,UAAU,CAAA;AAAA,MAChD,OAAA,CAAQ;AAAA,KACV;AAEA,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,GAAA,CAAI,GAAG,UAAA,CAAW,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAC,CAAA;AAErE,IAAA,MAAM,eAAA,GAAgC,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,MACjE,IAAI,MAAA,CAAO,UAAA;AAAA,MACX,SAAA,EAAW,CAAA,SAAA,EAAY,MAAA,CAAO,SAAS,CAAA,CAAA;AAAA,MACvC,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,MAAA,EAAQ,CAAC,EAAE,IAAA,EAAM,UAAA,EAAY,EAAA,EAAIA,QAAAA,EAAS,EAAG,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM;AAAA,KAClE,CAAE,CAAA;AAEF,IAAA,MAAM,oBAAA,GAAuB,IAAI,GAAA,CAAI,oBAAA,CAAqB,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAC,CAAA;AAClF,IAAA,MAAM,yBAAA,GAA4B,QAAQ,gBAAA,EAAkB,MAAA;AAAA,MAC1D,CAAC,EAAA,KAAO,CAAC,oBAAA,CAAqB,GAAA,CAAI,GAAG,EAAE,CAAA,IAAK,EAAA,CAAG,EAAA,KAAO,eAAA,CAAgB;AAAA,KACxE;AAGA,IAAA,MAAM,cAAcA,QAAAA,EAAS;AAE7B,IAAA,MAAM,WAAA,GAA0B;AAAA,MAC9B,GAAG,OAAA;AAAA,MACH,KAAA,EAAO,WAAA;AAAA,MACP,WAAW,YAAA,CAAa,GAAA;AAAA,MACxB,KAAA,EAAO;AAAA,QACL,yBAAA,EAA2B;AAAA,UACzB,YAAY,WAAA,CAAY,UAAA;AAAA,UACxB,UAAU,WAAA,CAAY,QAAA;AAAA,UACtB,SAAA,EAAW,CAAA,SAAA,EAAY,WAAA,CAAY,SAAS,CAAA,CAAA;AAAA,UAC5C,MAAM,WAAA,CAAY;AAAA;AACpB;AACF,KACF;AAGA,IAAA,MAAM,cAAA,GAA6B;AAAA,MACjC,IAAI,OAAA,CAAQ,EAAA;AAAA,MACZ,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,KAAA,EAAO,WAAA;AAAA,MACP,MAAA,EAAQ,mBAAA;AAAA,MACR,UAAA,EAAY,aAAA;AAAA,MACZ,UAAU,OAAA,CAAQ,QAAA;AAAA;AAAA,MAClB,MAAA,EAAQ;AAAA,QACN,KAAK,YAAA,CAAa,GAAA;AAAA,QAClB,MAAM,YAAA,CAAa,IAAA;AAAA,QACnB,SAAS,YAAA,CAAa;AAAA,OACxB;AAAA,MACA,KAAA,EAAO,eAAA;AAAA,MACP,eAAe,OAAA,CAAQ,aAAA;AAAA,MACvB,aAAa,OAAA,CAAQ,WAAA;AAAA;AAAA,MACrB,UAAA,EAAY,MAAA;AAAA,MACZ,gBAAA,EAAkB,yBAAA,EAA2B,MAAA,GAAS,yBAAA,GAA4B,MAAA;AAAA,MAClF,kBAAA,EAAoB,CAAC,GAAI,OAAA,CAAQ,sBAAsB,EAAC,EAAI,GAAG,eAAe;AAAA,KAChF;AAEA,IAAA,OAAO,EAAE,aAAa,cAAA,EAAe;AAAA,EACvC;AAAA,EAEA,MAAc,uBAAA,CACZ,UAAA,EACA,eACA,aAAA,EACA,YAAA,EACA,OACA,aAAA,EAC2B;AAC3B,IAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,OAAM,GAAI,UAAA;AAChD,IAAA,MAAM,gBAAgBA,QAAAA,EAAS;AAE/B,IAAA,MAAM,eAAA,GAA8B;AAAA,MAClC,GAAG,aAAA;AAAA,MACH,KAAA,EAAO,aAAA;AAAA,MACP,WAAW,MAAA,CAAO,GAAA;AAAA,MAClB,KAAA,EAAO,EAAE,IAAA,EAAM,KAAA;AAAM,KACvB;AAEA,IAAA,MAAM,kBAAA,GAAiC;AAAA,MACrC,IAAIA,QAAAA,EAAS;AAAA,MACb,OAAO,aAAA,CAAc,KAAA;AAAA,MACrB,KAAA,EAAO,aAAA;AAAA,MACP,MAAA,EAAQ,MAAA;AAAA,MACR,YAAY,aAAA,CAAc,UAAA;AAAA,MAC1B,UAAU,EAAC;AAAA;AAAA,MACX,MAAA,EAAQ;AAAA,QACN,KAAK,MAAA,CAAO,GAAA;AAAA,QACZ,MAAM,MAAA,CAAO,IAAA;AAAA,QACb,SAAS,MAAA,CAAO;AAAA,OAClB;AAAA,MACA,WAAA,EAAa;AAAA,QACX,MAAA,EAAQ;AAAA,UACN,KAAK,YAAA,CAAa,GAAA;AAAA,UAClB,MAAM,YAAA,CAAa,IAAA;AAAA,UACnB,SAAS,YAAA,CAAa;AAAA,SACxB;AAAA,QACA,UAAA;AAAA,QACA,QAAA;AAAA,QACA,cAAc,aAAA,CAAc,EAAA;AAAA,QAC5B,OAAO,aAAA,CAAc;AAAA,OACvB;AAAA,MACA,OAAO,gBAAA,EAAiB;AAAA,MACxB,eAAe,aAAA,CAAc;AAAA,KAC/B;AAIA,IAAA,MAAM,mBAAmB,MAAM,KAAA;AAAA,MAC7B,EAAE,OAAA,EAAS,eAAA,EAAiB,UAAA,EAAY,kBAAA,EAAmB;AAAA,MAC3D,EAAE,GAAG,aAAA,EAAe,0BAAA,EAA4B,IAAA;AAAK,KACvD;AAEA,IAAA,OAAO,KAAK,uBAAA,CAAwB,gBAAA,EAAkB,UAAA,EAAY,QAAA,EAAU,OAAO,GAAG,CAAA;AAAA,EACxF;AAAA,EAEQ,uBAAA,CACN,UAAA,EACA,UAAA,EACA,QAAA,EACA,SAAA,EACkB;AAClB,IAAA,MAAM,cAAc,UAAA,CAAW,QAAA,CAAS,UAAA,CAAW,QAAA,CAAS,SAAS,CAAC,CAAA;AACtE,IAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,IAAA,KAAS,eAAA,EAAiB;AACxD,MAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,IAC5E;AAEA,IAAA,MAAM,QAAA,GAAW,YAAY,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,UAAU,CAAA;AACvE,IAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,IAAA,KAAS,UAAA,EAAY;AAC7C,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN,0BAA0B,SAAS,CAAA,8DAAA;AAAA,OACrC;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,UAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,IAAA,EAAM,QAAA,EAAU,IAAA,KAAS,UAAA,GAAa,SAAS,IAAA,GAAO,EAAA;AAAA,MACtD,YAAY,UAAA,CAAW,UAAA;AAAA,MACvB,YAAY,UAAA,CAAW;AAAA,KACzB;AAAA,EACF;AACF,CAAA;AAKO,SAAS,yBAAyB,eAAA,EAA6C;AACpF,EAAA,IAAI,oBAAoB,CAAA,EAAG;AACzB,IAAA,OAAO,IAAI,wBAAA,EAAyB;AAAA,EACtC;AACA,EAAA,OAAO,IAAI,0BAAA,EAA2B;AACxC;AAKO,SAAS,yBAAA,CACd,cAAA,EACA,gBAAA,EACA,gBAAA,EACuB;AACvB,EAAA,OAAO,0BAAA,CAA2B,cAAA,EAAgB,gBAAA,EAAkB,gBAAgB,CAAA;AACtF;AAKO,SAAS,yBAAyB,UAAA,EAA2C;AAClF,EAAA,OAAO;AAAA,IACL,IAAI,UAAA,CAAW,EAAA;AAAA,IACf,YAAY,UAAA,CAAW,UAAA;AAAA,IACvB,eAAe,UAAA,CAAW,aAAA;AAAA,IAC1B,OAAO,UAAA,CAAW,KAAA;AAAA,IAClB,kBAAkB,UAAA,CAAW,gBAAA;AAAA,IAC7B,oBAAoB,UAAA,CAAW,kBAAA;AAAA,IAC/B,aAAa,UAAA,CAAW,WAAA;AAAA;AAAA,IACxB,UAAU,UAAA,CAAW;AAAA;AAAA,GACvB;AACF;ACxXO,IAAM,kBAAN,MAAsB;AAAA,EACnB,YAAoD,EAAC;AAAA,EAE7D,UAAU,QAAA,EAA8C;AACtD,IAAA,IAAA,CAAK,SAAA,CAAU,KAAK,QAAQ,CAAA;AAAA,EAC9B;AAAA,EAEA,MAAM,KAAK,KAAA,EAAiB;AAC1B,IAAA,MAAM,SAAkB,EAAC;AACzB,IAAA,KAAA,MAAW,QAAA,IAAY,KAAK,SAAA,EAAW;AACrC,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,CAAS;AAAA,UACb,GAAG,KAAA;AAAA,UACH,IAAIA,QAAAA,EAAS;AAAA,UACb,SAAA,EAAW,KAAK,GAAA;AAAI,SACrB,CAAA;AAAA,MACH,SAAS,KAAA,EAAO;AACd,QAAA,MAAA,CAAO,IAAA,CAAK,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA;AAAA,MACvE;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,MAAA,MAAM,IAAI,cAAA,CAAe,MAAA,EAAQ,oCAAoC,CAAA;AAAA,IACvE;AAAA,EACF;AACF,CAAA;;;AClBA,IAAM,sBAAA,GAAuD;AAAA,EAC3D,SAAA,EAAW,oBAAA;AAAA,EACX,MAAA,EAAQ,iBAAA;AAAA,EACR,MAAA,EAAQ,iBAAA;AAAA,EACR,MAAA,EAAQ,iBAAA;AAAA,EACR,cAAA,EAAgB,uBAAA;AAAA,EAChB,gBAAA,EAAkB,kBAAA;AAAA,EAClB,eAAA,EAAiB,iBAAA;AAAA,EACjB,QAAA,EAAU;AACZ,CAAA;AAEO,IAAM,yBAAA,GAAN,cAAwC,KAAA,CAAM;AAAA,EACnD,YAAY,YAAA,EAA4B;AACtC,IAAA,MAAM,WAAA,GAAc,uBAAuB,YAAY,CAAA;AACvD,IAAA,KAAA;AAAA,MACE,CAAA,UAAA,EAAa,YAAY,CAAA,+CAAA,EAAuD,WAAW,CAAA;AAAA,KAC7F;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,2BAAA;AAAA,EACd;AACF,CAAA;AAGA,IAAM,eAAA,uBAAsB,GAAA,EAAiC;AAC7D,IAAM,gBAAA,uBAAuB,GAAA,EAA6B;AAC1D,IAAM,gBAAA,uBAAuB,GAAA,EAAsC;AAEnE,SAAS,WAAA,CAAY,QAAwB,OAAA,EAA0C;AACrF,EAAA,OAAO,KAAK,SAAA,CAAU;AAAA,IACpB,cAAc,MAAA,CAAO,YAAA;AAAA,IACrB,MAAA,EAAQ,QAAA,IAAY,MAAA,GAAS,MAAA,CAAO,MAAA,GAAS,MAAA;AAAA,IAC7C,OAAA,EAAS,SAAA,IAAa,MAAA,GAAS,MAAA,CAAO,OAAA,GAAU,MAAA;AAAA,IAChD,UAAU,OAAA,EAAS;AAAA,GACpB,CAAA;AACH;AAEO,SAAS,uBAAA,CAAwB,cAA4B,MAAA,EAA6B;AAC/F,EAAA,eAAA,CAAgB,GAAA,CAAI,cAAc,MAAM,CAAA;AAC1C;AAEA,eAAsB,qBAAA,CACpB,QACA,OAAA,EAC0B;AAC1B,EAAA,MAAM,QAAA,GAAW,WAAA,CAAY,MAAA,EAAQ,OAAO,CAAA;AAG5C,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,GAAA,CAAI,QAAQ,CAAA;AAC5C,EAAA,IAAI,QAAQ,OAAO,MAAA;AAGnB,EAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,GAAA,CAAI,QAAQ,CAAA;AAC7C,EAAA,IAAI,SAAS,OAAO,OAAA;AAEpB,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,GAAA,CAAI,MAAA,CAAO,YAAY,CAAA;AACtD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,yBAAA,CAA0B,MAAA,CAAO,YAAY,CAAA;AAAA,EACzD;AAGA,EAAA,MAAM,mBAAmB,YAAY;AACnC,IAAA,IAAI;AACF,MAAA,MAAM,YAAA,GAAe,MAAM,MAAA,EAAO;AAClC,MAAA,MAAM,OAAA,GAAU,IAAI,YAAA,CAAa,MAAA,EAAQ,OAAO,CAAA;AAChD,MAAA,gBAAA,CAAiB,GAAA,CAAI,UAAU,OAAO,CAAA;AACtC,MAAA,OAAO,OAAA;AAAA,IACT,CAAA,SAAE;AACA,MAAA,gBAAA,CAAiB,OAAO,QAAQ,CAAA;AAAA,IAClC;AAAA,EACF,CAAA,GAAG;AAEH,EAAA,gBAAA,CAAiB,GAAA,CAAI,UAAU,eAAe,CAAA;AAC9C,EAAA,OAAO,eAAA;AACT;ACpEO,IAAe,sBAAf,MAA8D;AAAA,EAEhD,OAAA;AAAA,EAEnB,YAAY,OAAA,EAAkC;AAC5C,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAIA,gBAAA,CAAiB,YAAsB,QAAA,EAAyC;AAC9E,IAAA,OAAO,EAAC;AAAA,EACV;AAAA,EAEA,mBAAmB,OAAA,EAA8D;AAC/E,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,oBAAoB,OAAA,EAAuD;AACzE,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,eAAe,KAAA,EAA+B;AAC5C,IAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,MAAA,OAAO;AAAA,QACL,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,WAAA,EAAa,IAAA,CAAK,WAAA,CAAY,KAAK,CAAA;AAAA,QACnC,UAAU,IAAA,CAAK,YAAA;AAAA,QACf,aAAA,EAAe;AAAA,OACjB;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,cAAA;AAAA,MACN,OAAA,EAAS,OAAO,KAAK,CAAA;AAAA,MACrB,WAAA,EAAa,KAAA;AAAA,MACb,UAAU,IAAA,CAAK,YAAA;AAAA,MACf,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AAAA,EAEA,YAAY,KAAA,EAAyB;AACnC,IAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,MAAA,MAAM,iBAAA,GAAoB;AAAA,QACxB,aAAA;AAAA,QACA,UAAA;AAAA,QACA,aAAA;AAAA,QACA,sBAAA;AAAA,QACA,wBAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,OAAO,iBAAA,CAAkB,KAAK,CAAC,OAAA,KAAY,QAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,IACxE;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEU,iBAAiB,QAAA,EAA2C;AACpE,IAAA,MAAM,KAAA,GAAQ,IAAIU,UAAAA,CAAW,QAAQ,CAAA;AACrC,IAAA,OAAO,CAAC,OAAO,IAAA,KAAS;AACtB,MAAA,OAAOb,MAAY,KAAA,EAAO,EAAE,GAAG,IAAA,EAAM,UAAA,EAAY,OAAO,CAAA;AAAA,IAC1D,CAAA;AAAA,EACF;AACF,CAAA;ACzEO,SAAS,wBAAwB,KAAA,EAA+B;AACrE,EAAA,IAAI,iBAAiB,YAAA,EAAc;AACjC,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,WAAA,EAAa,qBAAqB,KAAK,CAAA;AAAA,MACvC,QAAA,EAAU,WAAA;AAAA,MACV,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AACA,EAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,WAAA,EAAa,qBAAqB,KAAK,CAAA;AAAA,MACvC,QAAA,EAAU,WAAA;AAAA,MACV,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,OAAO,KAAK,CAAA;AAAA,IACrB,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU,WAAA;AAAA,IACV,aAAA,EAAe;AAAA,GACjB;AACF;AAEO,SAAS,qBAAqB,KAAA,EAAyB;AAC5D,EAAA,IAAI,iBAAiB,YAAA,EAAc;AACjC,IAAA,IAAI,KAAA,CAAM,aAAa,OAAO,IAAA;AAC9B,IAAA,MAAM,aAAa,KAAA,CAAM,UAAA;AACzB,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAAA,EACjC;AACA,EAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAY;AAC1C,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,YAAY,CAAA,EAAG,OAAO,IAAA;AAC3C,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,YAAY,CAAA,EAAG,OAAO,IAAA;AAC3C,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG,OAAO,IAAA;AACxC,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,qBAAqB,CAAA,EAAG,OAAO,IAAA;AAAA,EACtD;AACA,EAAA,OAAO,KAAA;AACT;;;AChCA,SAAS,aAAa,KAAA,EAAqD;AACzE,EAAA,IAAI,KAAA,CAAM,SAAS,SAAA,EAAW;AAC5B,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,SAAA;AAAA,MACN,MAAM,KAAA,CAAM;AAAA,KACd;AAAA,EACF;AACA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,UAAU,CAAA;AAC1C,IAAA,IAAI,OAAO,WAAW,QAAA,IAAY,MAAA,KAAW,QAAQ,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC1E,MAAA,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAAA,IACpD;AACA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,QAAA;AAAA,MACN,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,UAAA,EAAY;AAAA,KACd;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,6CAAA,EAAgD,KAAA,CAAM,IAAI,CAAA,GAAA,EAAM,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,KACxH;AAAA,EACF;AACF;AAEO,SAAS,qBACd,MAAA,EAC6B;AAC7B,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAClC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO;AAAA,IACL,SAAA,EAAW;AAAA,MACT,SAAA,EAAW;AAAA,QACT,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,YAAY;AAAA;AACjC;AACF,GACF;AACF;;;ACjDO,SAAS,mBAAA,CACd,MAAA,EACA,SAAA,EACA,OAAA,EACS;AACT,EAAA,MAAM,QAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,WAAA,EAAa;AAChB,QAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,KAAA,CAAM,kBAAA,CAAmB;AAAA,UACpD,OAAA,EAAS,SAAS,SAAA,EAAW,OAAA;AAAA,UAC7B,cAAA,EAAgB,SAAS,SAAA,EAAW;AAAA,SACrC,CAAA;AACD,QAAA,KAAA,CAAM,YAAY,CAAA,GAAI,aAAA;AACtB,QAAA;AAAA,MACF;AAAA,MACA,KAAK,UAAA,EAAY;AACf,QAAA,MAAM,YAAA,GAAe,MAAA,CAAO,KAAA,CAAM,iBAAA,CAAkB;AAAA,UAClD,OAAA,EAAS,SAAS,QAAA,EAAU;AAAA,SAC7B,CAAA;AACD,QAAA,KAAA,CAAM,WAAW,CAAA,GAAI,YAAA;AACrB,QAAA;AAAA,MACF;AAAA,MACA,KAAK,eAAA,EAAiB;AACpB,QAAA,MAAM,iBAAA,GAAoB,MAAA,CAAO,KAAA,CAAM,sBAAA,EAAuB;AAC9D,QAAA,KAAA,CAAM,gBAAgB,CAAA,GAAI,iBAAA;AAC1B,QAAA;AAAA,MACF;AAAA;AACF,EACF;AACA,EAAA,OAAO,KAAA;AACT;;;ACrBO,IAAM,wBAAA,GAAN,cAAuC,mBAAA,CAAoB;AAAA,EAIhE,WAAA,CACW,QACT,OAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHJ,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAIT,IAAA,IAAA,CAAK,SAASc,eAAAA,CAAgB;AAAA,MAC5B,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,OAAO,OAAA,EAAS,QAAA,GAAW,KAAK,gBAAA,CAAiB,OAAA,CAAQ,QAAQ,CAAA,GAAI;AAAA,KACtE,CAAA;AAAA,EACH;AAAA,EAdS,YAAA,GAAe,WAAA;AAAA,EACP,MAAA;AAAA,EAeR,YAAY,OAAA,EAAgC;AACnD,IAAA,OAAO,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,EAC5B;AAAA,EAES,gBAAA,CAAiB,WAAqB,OAAA,EAAwC;AACrF,IAAA,OAAO,mBAAA,CAAoB,IAAA,CAAK,MAAA,EAAQ,SAAA,EAAW,OAAO,CAAA;AAAA,EAC5D;AAAA,EAES,mBAAmB,MAAA,EAA6D;AACvF,IAAA,OAAO,oBAAA,CAAqB,QAAQ,MAAM,CAAA;AAAA,EAC5C;AAAA,EAES,oBAAoB,MAAA,EAAsD;AACjF,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,cAAA,CAAe,MAAM,CAAA;AAC/C,IAAA,OAAO;AAAA,MACL,SAAA,EAAW;AAAA,QACT,QAAA,EAAU,EAAE,IAAA,EAAM,SAAA,EAAW,YAAA;AAAa;AAC5C,KACF;AAAA,EACF;AAAA,EAEQ,eAAe,MAAA,EAAiC;AACtD,IAAA,IAAI,OAAO,MAAA,KAAW,QAAA,EAAU,OAAO,MAAA;AACvC,IAAA,MAAM,GAAA,GAA8B;AAAA,MAClC,OAAA,EAAS,IAAA;AAAA,MACT,GAAA,EAAK,IAAA;AAAA,MACL,MAAA,EAAQ,GAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACR;AACA,IAAA,OAAO,GAAA,CAAI,MAAM,CAAA,IAAK,GAAA;AAAA,EACxB;AAAA,EAES,eAAe,KAAA,EAA+B;AACrD,IAAA,OAAO,wBAAwB,KAAK,CAAA;AAAA,EACtC;AAAA,EAES,YAAY,KAAA,EAAyB;AAC5C,IAAA,OAAO,qBAAqB,KAAK,CAAA;AAAA,EACnC;AACF,CAAA;ACrEO,SAAS,0BAA0B,KAAA,EAA+B;AACvE,EAAA,IAAI,iBAAiBC,YAAAA,EAAc;AACjC,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,WAAA,EAAa,uBAAuB,KAAK,CAAA;AAAA,MACzC,QAAA,EAAU,cAAA;AAAA,MACV,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AACA,EAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,WAAA,EAAa,uBAAuB,KAAK,CAAA;AAAA,MACzC,QAAA,EAAU,cAAA;AAAA,MACV,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,OAAO,KAAK,CAAA;AAAA,IACrB,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU,cAAA;AAAA,IACV,aAAA,EAAe;AAAA,GACjB;AACF;AAEO,SAAS,uBAAuB,KAAA,EAAyB;AAC9D,EAAA,IAAI,iBAAiBA,YAAAA,EAAc;AACjC,IAAA,IAAI,KAAA,CAAM,aAAa,OAAO,IAAA;AAC9B,IAAA,MAAM,aAAa,KAAA,CAAM,UAAA;AACzB,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAAA,EACjC;AACA,EAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAY;AAC1C,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,YAAY,CAAA,EAAG,OAAO,IAAA;AAC3C,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG,OAAO,IAAA;AACxC,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,qBAAqB,CAAA,EAAG,OAAO,IAAA;AAAA,EACtD;AACA,EAAA,OAAO,KAAA;AACT;;;AC3CO,SAAS,qBAAA,CACd,MAAA,EACA,SAAA,EACA,OAAA,EACS;AACT,EAAA,MAAM,QAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,kBAAA,EAAoB;AACvB,QAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,KAAA,CAAM,gBAAA,CAAiB,EAAE,CAAA;AACtD,QAAA,KAAA,CAAM,oBAAoB,CAAA,GAAI,aAAA;AAC9B,QAAA;AAAA,MACF;AAAA,MACA,KAAK,YAAA,EAAc;AACjB,QAAA,MAAM,cAAA,GAAiB,SAAS,UAAA,EAAY,cAAA;AAC5C,QAAA,IAAI,CAAC,cAAA,IAAkB,cAAA,CAAe,MAAA,KAAW,CAAA,EAAG;AAClD,UAAA,MAAM,IAAI,KAAA;AAAA,YACR;AAAA,WAEF;AAAA,QACF;AACA,QAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW;AAAA,UAC7C,cAAA;AAAA,UACA,aAAA,EAAe,SAAS,UAAA,EAAY;AAAA,SACrC,CAAA;AACD,QAAA,KAAA,CAAM,aAAa,CAAA,GAAI,cAAA;AACvB,QAAA;AAAA,MACF;AAAA,MACA,KAAK,iBAAA,EAAmB;AACtB,QAAA,MAAM,mBAAA,GAAsB,MAAA,CAAO,KAAA,CAAM,eAAA,EAAgB;AACzD,QAAA,KAAA,CAAM,kBAAkB,CAAA,GAAI,mBAAA;AAC5B,QAAA;AAAA,MACF;AAAA,MACA,KAAK,iBAAA,EAAmB;AACtB,QAAA,MAAM,mBAAA,GAAsB,MAAA,CAAO,KAAA,CAAM,eAAA,EAAgB;AACzD,QAAA,KAAA,CAAM,kBAAkB,CAAA,GAAI,mBAAA;AAC5B,QAAA;AAAA,MACF;AAAA;AACF,EACF;AACA,EAAA,OAAO,KAAA;AACT;;;ACnCO,IAAM,0BAAA,GAAN,cAAyC,mBAAA,CAAoB;AAAA,EAIlE,WAAA,CACW,QACT,OAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHJ,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAIT,IAAA,IAAA,CAAK,SAASC,WAAAA,CAAY;AAAA,MACxB,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,cAAc,MAAA,CAAO,YAAA;AAAA,MACrB,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,wBAAwB,MAAA,CAAO,sBAAA;AAAA,MAC/B,OAAO,OAAA,EAAS,QAAA,GAAW,KAAK,gBAAA,CAAiB,OAAA,CAAQ,QAAQ,CAAA,GAAI;AAAA,KACtE,CAAA;AAAA,EACH;AAAA,EAjBS,YAAA,GAAe,cAAA;AAAA,EACP,MAAA;AAAA,EAkBR,YAAY,OAAA,EAAgC;AACnD,IAAA,OAAO,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,EAC5B;AAAA,EAES,gBAAA,CAAiB,WAAqB,OAAA,EAAwC;AACrF,IAAA,OAAO,qBAAA,CAAsB,IAAA,CAAK,MAAA,EAAQ,SAAA,EAAW,OAAO,CAAA;AAAA,EAC9D;AAAA,EAES,eAAe,KAAA,EAA+B;AACrD,IAAA,OAAO,0BAA0B,KAAK,CAAA;AAAA,EACxC;AAAA,EAES,YAAY,KAAA,EAAyB;AAC5C,IAAA,OAAO,uBAAuB,KAAK,CAAA;AAAA,EACrC;AACF,CAAA;AC5CO,SAAS,sBAAsB,KAAA,EAA+B;AACnE,EAAA,IAAI,iBAAiBD,YAAAA,EAAc;AACjC,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,WAAA,EAAa,mBAAmB,KAAK,CAAA;AAAA,MACrC,QAAA,EAAU,gBAAA;AAAA,MACV,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AACA,EAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,WAAA,EAAa,mBAAmB,KAAK,CAAA;AAAA,MACrC,QAAA,EAAU,gBAAA;AAAA,MACV,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,OAAO,KAAK,CAAA;AAAA,IACrB,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU,gBAAA;AAAA,IACV,aAAA,EAAe;AAAA,GACjB;AACF;AAEO,SAAS,mBAAmB,KAAA,EAAyB;AAC1D,EAAA,IAAI,iBAAiBA,YAAAA,EAAc;AACjC,IAAA,IAAI,KAAA,CAAM,aAAa,OAAO,IAAA;AAC9B,IAAA,MAAM,aAAa,KAAA,CAAM,UAAA;AACzB,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAAA,EACjC;AACA,EAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAY;AAC1C,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,YAAY,CAAA,EAAG,OAAO,IAAA;AAC3C,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG,OAAO,IAAA;AACxC,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG,OAAO,IAAA;AACxC,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,qBAAqB,CAAA,EAAG,OAAO,IAAA;AAAA,EACtD;AACA,EAAA,OAAO,KAAA;AACT;;;ACrCO,IAAM,sBAAA,GAAN,cAAqC,mBAAA,CAAoB;AAAA,EAI9D,WAAA,CACW,QACT,OAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHJ,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAIT,IAAA,IAAA,CAAK,SAASE,mBAAAA,CAAoB;AAAA,MAChC,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,iBAAiB,MAAA,CAAO,eAAA;AAAA,MACxB,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,cAAc,MAAA,CAAO,YAAA;AAAA,MACrB,OAAO,OAAA,EAAS,QAAA,GAAW,KAAK,gBAAA,CAAiB,OAAA,CAAQ,QAAQ,CAAA,GAAI;AAAA,KACtE,CAAA;AAAA,EACH;AAAA,EAfS,YAAA,GAAe,gBAAA;AAAA,EACP,MAAA;AAAA,EAgBR,YAAY,OAAA,EAAgC;AACnD,IAAA,OAAO,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,EAC5B;AAAA,EAES,mBAAmB,MAAA,EAA6D;AACvF,IAAA,IAAI,CAAC,MAAA,EAAQ,UAAA,IAAc,CAAC,QAAQ,UAAA,EAAY;AAC9C,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,MAAM,iBAA4C,EAAC;AACnD,IAAA,IAAI,OAAO,UAAA,EAAY;AACrB,MAAA,MAAM,eAAA,GAA6C;AAAA,QACjD,mBAAA,EAAqB,OAAO,UAAA,CAAW,mBAAA;AAAA,QACvC,gBAAA,EAAkB,OAAO,UAAA,CAAW;AAAA,OACtC;AACA,MAAA,IAAI,MAAA,CAAO,WAAW,KAAA,EAAO;AAC3B,QAAA,eAAA,CAAgB,OAAO,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,KAAA;AAAA,MAC/C;AACA,MAAA,cAAA,CAAe,iBAAiB,CAAA,GAAI,eAAA;AAAA,IACtC;AACA,IAAA,IAAI,OAAO,UAAA,EAAY;AACrB,MAAA,cAAA,CAAe,YAAY,CAAA,GAAI,EAAE,IAAA,EAAM,MAAA,CAAO,WAAW,IAAA,EAAK;AAAA,IAChE;AACA,IAAA,OAAO,EAAE,SAAS,cAAA,EAAe;AAAA,EACnC;AAAA,EAES,oBAAoB,MAAA,EAAsD;AACjF,IAAA,IAAI,MAAA,KAAW,MAAA,IAAU,MAAA,KAAW,CAAA,EAAG;AACrC,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,cAAA,CAAe,MAAM,CAAA;AAC/C,IAAA,OAAO;AAAA,MACL,OAAA,EAAS;AAAA,QACP,SAAA,EAAW;AAAA,UACT;AAAA;AACF;AACF,KACF;AAAA,EACF;AAAA,EAEQ,eAAe,MAAA,EAAiC;AACtD,IAAA,IAAI,OAAO,MAAA,KAAW,QAAA,EAAU,OAAO,MAAA;AACvC,IAAA,MAAM,GAAA,GAA8B;AAAA,MAClC,OAAA,EAAS,IAAA;AAAA,MACT,GAAA,EAAK,IAAA;AAAA,MACL,MAAA,EAAQ,GAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACR;AACA,IAAA,OAAO,GAAA,CAAI,MAAM,CAAA,IAAK,GAAA;AAAA,EACxB;AAAA,EAES,eAAe,KAAA,EAA+B;AACrD,IAAA,OAAO,sBAAsB,KAAK,CAAA;AAAA,EACpC;AAAA,EAES,YAAY,KAAA,EAAyB;AAC5C,IAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,EACjC;AACF,CAAA;ACrFO,SAAS,uBAAuB,KAAA,EAA+B;AACpE,EAAA,IAAI,iBAAiBF,YAAAA,EAAc;AACjC,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,WAAA,EAAa,oBAAoB,KAAK,CAAA;AAAA,MACtC,QAAA,EAAU,UAAA;AAAA,MACV,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AACA,EAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,WAAA,EAAa,oBAAoB,KAAK,CAAA;AAAA,MACtC,QAAA,EAAU,UAAA;AAAA,MACV,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,OAAO,KAAK,CAAA;AAAA,IACrB,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU,UAAA;AAAA,IACV,aAAA,EAAe;AAAA,GACjB;AACF;AAEO,SAAS,oBAAoB,KAAA,EAAyB;AAC3D,EAAA,IAAI,iBAAiBA,YAAAA,EAAc;AACjC,IAAA,IAAI,KAAA,CAAM,aAAa,OAAO,IAAA;AAC9B,IAAA,MAAM,aAAa,KAAA,CAAM,UAAA;AACzB,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAAA,EACjC;AACA,EAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAY;AAC1C,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,YAAY,CAAA,EAAG,OAAO,IAAA;AAC3C,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG,OAAO,IAAA;AACxC,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,qBAAqB,CAAA,EAAG,OAAO,IAAA;AAAA,EACtD;AACA,EAAA,OAAO,KAAA;AACT;;;ACvCO,IAAM,uBAAA,GAAN,cAAsC,mBAAA,CAAoB;AAAA,EAI/D,WAAA,CACW,QACT,OAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHJ,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAIT,IAAA,IAAA,CAAK,SAASG,cAAAA,CAAe;AAAA,MAC3B,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,OAAO,OAAA,EAAS,QAAA,GAAW,KAAK,gBAAA,CAAiB,OAAA,CAAQ,QAAQ,CAAA,GAAI;AAAA,KACtE,CAAA;AAAA,EACH;AAAA,EAdS,YAAA,GAAe,UAAA;AAAA,EACP,MAAA;AAAA,EAeR,YAAY,OAAA,EAAgC;AACnD,IAAA,OAAO,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,EAC5B;AAAA,EAES,eAAe,KAAA,EAA+B;AACrD,IAAA,OAAO,uBAAuB,KAAK,CAAA;AAAA,EACrC;AAAA,EAES,YAAY,KAAA,EAAyB;AAC5C,IAAA,OAAO,oBAAoB,KAAK,CAAA;AAAA,EAClC;AACF,CAAA;ACnCO,SAAS,qBAAqB,KAAA,EAA+B;AAClE,EAAA,IAAI,iBAAiBH,YAAAA,EAAc;AACjC,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,WAAA,EAAa,kBAAkB,KAAK,CAAA;AAAA,MACpC,QAAA,EAAU,QAAA;AAAA,MACV,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AACA,EAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,WAAA,EAAa,kBAAkB,KAAK,CAAA;AAAA,MACpC,QAAA,EAAU,QAAA;AAAA,MACV,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,OAAO,KAAK,CAAA;AAAA,IACrB,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU,QAAA;AAAA,IACV,aAAA,EAAe;AAAA,GACjB;AACF;AAEO,SAAS,kBAAkB,KAAA,EAAyB;AACzD,EAAA,IAAI,iBAAiBA,YAAAA,EAAc;AACjC,IAAA,IAAI,KAAA,CAAM,aAAa,OAAO,IAAA;AAC9B,IAAA,MAAM,aAAa,KAAA,CAAM,UAAA;AACzB,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAAA,EACjC;AACA,EAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAY;AAC1C,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,YAAY,CAAA,EAAG,OAAO,IAAA;AAC3C,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,gBAAgB,CAAA,EAAG,OAAO,IAAA;AAC/C,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG,OAAO,IAAA;AACxC,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,qBAAqB,CAAA,EAAG,OAAO,IAAA;AAAA,EACtD;AACA,EAAA,OAAO,KAAA;AACT;;;AC5CO,SAAS,gBAAA,CACd,MAAA,EACA,SAAA,EACA,OAAA,EACS;AACT,EAAA,MAAM,QAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,cAAA,EAAgB;AACnB,QAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,KAAA,CAAM,YAAA,CAAa,EAAE,CAAA;AACrD,QAAA,KAAA,CAAM,eAAe,CAAA,GAAI,gBAAA;AACzB,QAAA;AAAA,MACF;AAAA,MACA,KAAK,eAAA,EAAiB;AACpB,QAAA,MAAM,iBAAA,GAAoB,MAAA,CAAO,KAAA,CAAM,aAAA,CAAc,EAAE,CAAA;AACvD,QAAA,KAAA,CAAM,gBAAgB,CAAA,GAAI,iBAAA;AAC1B,QAAA;AAAA,MACF;AAAA,MACA,KAAK,YAAA,EAAc;AACjB,QAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW,EAAE,CAAA;AACjD,QAAA,KAAA,CAAM,aAAa,CAAA,GAAI,cAAA;AACvB,QAAA;AAAA,MACF;AAAA,MACA,KAAK,YAAA,EAAc;AACjB,QAAA,MAAM,UAAA,GAAa,SAAS,UAAA,EAAY,cAAA;AACxC,QAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG;AAC1C,UAAA,MAAM,IAAI,KAAA;AAAA,YACR;AAAA,WAEF;AAAA,QACF;AACA,QAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW;AAAA,UAC7C,oBAAA,EAAsB,UAAA;AAAA,UACtB,IAAA,EAAM,SAAS,UAAA,EAAY;AAAA,SAC5B,CAAA;AACD,QAAA,KAAA,CAAM,aAAa,CAAA,GAAI,cAAA;AACvB,QAAA;AAAA,MACF;AAAA,MACA,KAAK,YAAA,EAAc;AACjB,QAAA,MAAM,cAAA,GAAiB,OAAO,KAAA,CAAM,UAAA,CAAW,SAAS,UAAA,EAAY,eAAA,IAAmB,EAAE,CAAA;AACzF,QAAA,KAAA,CAAM,aAAa,CAAA,GAAI,cAAA;AACvB,QAAA;AAAA,MACF;AAAA;AACF,EACF;AACA,EAAA,OAAO,KAAA;AACT;;;ACtCO,IAAM,qBAAA,GAAN,cAAoC,mBAAA,CAAoB;AAAA,EAI7D,WAAA,CACW,QACT,OAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHJ,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAIT,IAAA,IAAA,CAAK,SAASI,wBAAAA,CAAyB;AAAA,MACrC,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,OAAO,OAAA,EAAS,QAAA,GAAW,KAAK,gBAAA,CAAiB,OAAA,CAAQ,QAAQ,CAAA,GAAI;AAAA,KACtE,CAAA;AAAA,EACH;AAAA,EAdS,YAAA,GAAe,QAAA;AAAA,EACP,MAAA;AAAA,EAeR,YAAY,OAAA,EAAgC;AACnD,IAAA,OAAO,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,EAC5B;AAAA,EAES,gBAAA,CAAiB,WAAqB,OAAA,EAAwC;AACrF,IAAA,OAAO,gBAAA,CAAiB,IAAA,CAAK,MAAA,EAAQ,SAAA,EAAW,OAAO,CAAA;AAAA,EACzD;AAAA,EAES,eAAe,KAAA,EAA+B;AACrD,IAAA,OAAO,qBAAqB,KAAK,CAAA;AAAA,EACnC;AAAA,EAES,YAAY,KAAA,EAAyB;AAC5C,IAAA,OAAO,kBAAkB,KAAK,CAAA;AAAA,EAChC;AAAA,EAES,oBAAoB,MAAA,EAAsD;AACjF,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,cAAA,CAAe,MAAM,CAAA;AAC/C,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ;AAAA,QACN,cAAA,EAAgB;AAAA,UACd,cAAA,EAAgB,YAAA;AAAA,UAChB,eAAA,EAAiB;AAAA;AACnB;AACF,KACF;AAAA,EACF;AAAA,EAEQ,eAAe,MAAA,EAAiC;AACtD,IAAA,IAAI,OAAO,MAAA,KAAW,QAAA,EAAU,OAAO,MAAA;AACvC,IAAA,MAAM,GAAA,GAA8B;AAAA,MAClC,OAAA,EAAS,IAAA;AAAA,MACT,GAAA,EAAK,IAAA;AAAA,MACL,MAAA,EAAQ,GAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACR;AACA,IAAA,OAAO,GAAA,CAAI,MAAM,CAAA,IAAK,GAAA;AAAA,EACxB;AACF,CAAA;AClEO,SAAS,qBAAqB,KAAA,EAA+B;AAClE,EAAA,IAAI,iBAAiBJ,YAAAA,EAAc;AACjC,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,WAAA,EAAa,kBAAkB,KAAK,CAAA;AAAA,MACpC,QAAA,EAAU,QAAA;AAAA,MACV,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AACA,EAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,WAAA,EAAa,kBAAkB,KAAK,CAAA;AAAA,MACpC,QAAA,EAAU,QAAA;AAAA,MACV,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,OAAO,KAAK,CAAA;AAAA,IACrB,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU,QAAA;AAAA,IACV,aAAA,EAAe;AAAA,GACjB;AACF;AAEO,SAAS,kBAAkB,KAAA,EAAyB;AACzD,EAAA,IAAI,iBAAiBA,YAAAA,EAAc;AACjC,IAAA,IAAI,KAAA,CAAM,aAAa,OAAO,IAAA;AAC9B,IAAA,MAAM,aAAa,KAAA,CAAM,UAAA;AACzB,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAAA,EACjC;AACA,EAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAY;AAC1C,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,YAAY,CAAA,EAAG,OAAO,IAAA;AAC3C,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG,OAAO,IAAA;AACxC,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,qBAAqB,CAAA,EAAG,OAAO,IAAA;AACpD,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,oBAAoB,CAAA,EAAG,OAAO,IAAA;AAAA,EACrD;AACA,EAAA,OAAO,KAAA;AACT;;;ACrCO,IAAM,qBAAA,GAAN,cAAoC,mBAAA,CAAoB;AAAA,EAI7D,WAAA,CACW,QACT,OAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHJ,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAIT,IAAA,IAAA,CAAK,SAASK,YAAAA,CAAa;AAAA,MACzB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,OAAO,OAAA,EAAS,QAAA,GAAW,KAAK,gBAAA,CAAiB,OAAA,CAAQ,QAAQ,CAAA,GAAI;AAAA,KACtE,CAAA;AAAA,EACH;AAAA,EAbS,YAAA,GAAe,QAAA;AAAA,EACP,MAAA;AAAA,EAcR,YAAY,OAAA,EAAgC;AACnD,IAAA,OAAO,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,EAC5B;AAAA,EAES,mBAAmB,MAAA,EAA6D;AACvF,IAAA,IAAI,MAAA,EAAQ,UAAU,MAAA,EAAW;AAC/B,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ;AAAA,QACN,OAAO,MAAA,CAAO;AAAA;AAChB,KACF;AAAA,EACF;AAAA,EAES,oBAAoB,MAAA,EAAsD;AAGjF,IAAA,IAAI,MAAA,KAAW,MAAA,IAAU,MAAA,KAAW,CAAA,EAAG;AACrC,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAAA,EACF;AAAA,EAES,eAAe,KAAA,EAA+B;AACrD,IAAA,OAAO,qBAAqB,KAAK,CAAA;AAAA,EACnC;AAAA,EAES,YAAY,KAAA,EAAyB;AAC5C,IAAA,OAAO,kBAAkB,KAAK,CAAA;AAAA,EAChC;AACF,CAAA;AC7DO,SAAS,qBAAqB,KAAA,EAA+B;AAClE,EAAA,IAAI,iBAAiBL,YAAAA,EAAc;AACjC,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,WAAA,EAAa,kBAAkB,KAAK,CAAA;AAAA,MACpC,QAAA,EAAU,QAAA;AAAA,MACV,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AACA,EAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,WAAA,EAAa,kBAAkB,KAAK,CAAA;AAAA,MACpC,QAAA,EAAU,QAAA;AAAA,MACV,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,OAAO,KAAK,CAAA;AAAA,IACrB,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU,QAAA;AAAA,IACV,aAAA,EAAe;AAAA,GACjB;AACF;AAEO,SAAS,kBAAkB,KAAA,EAAyB;AACzD,EAAA,IAAI,iBAAiBA,YAAAA,EAAc;AACjC,IAAA,IAAI,KAAA,CAAM,aAAa,OAAO,IAAA;AAC9B,IAAA,MAAM,aAAa,KAAA,CAAM,UAAA;AACzB,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAAA,EACjC;AACA,EAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAY;AAC1C,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,YAAY,CAAA,EAAG,OAAO,IAAA;AAC3C,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG,OAAO,IAAA;AACxC,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,qBAAqB,CAAA,EAAG,OAAO,IAAA;AAAA,EACtD;AACA,EAAA,OAAO,KAAA;AACT;;;AC3CO,SAAS,gBAAA,CACd,MAAA,EACA,SAAA,EACA,OAAA,EACS;AACT,EAAA,MAAM,QAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,WAAA,EAAa;AAChB,QAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,KAAA,CAAM,SAAA,EAAU;AAC7C,QAAA,KAAA,CAAM,YAAY,CAAA,GAAI,aAAA;AACtB,QAAA;AAAA,MACF;AAAA,MACA,KAAK,YAAA,EAAc;AACjB,QAAA,MAAM,cAAA,GAAiB,SAAS,UAAA,EAAY,cAAA;AAC5C,QAAA,IAAI,CAAC,cAAA,IAAkB,cAAA,CAAe,MAAA,KAAW,CAAA,EAAG;AAClD,UAAA,MAAM,IAAI,KAAA;AAAA,YACR;AAAA,WAEF;AAAA,QACF;AACA,QAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW;AAAA,UAC7C,cAAA;AAAA,UACA,aAAA,EAAe,SAAS,UAAA,EAAY;AAAA,SACrC,CAAA;AACD,QAAA,KAAA,CAAM,aAAa,CAAA,GAAI,cAAA;AACvB,QAAA;AAAA,MACF;AAAA,MACA,KAAK,iBAAA,EAAmB;AACtB,QAAA,MAAM,mBAAA,GAAsB,MAAA,CAAO,KAAA,CAAM,eAAA,EAAgB;AACzD,QAAA,KAAA,CAAM,kBAAkB,CAAA,GAAI,mBAAA;AAC5B,QAAA;AAAA,MACF;AAAA,MACA,KAAK,iBAAA,EAAmB;AACtB,QAAA,MAAM,mBAAA,GAAsB,MAAA,CAAO,KAAA,CAAM,eAAA,EAAgB;AACzD,QAAA,KAAA,CAAM,kBAAkB,CAAA,GAAI,mBAAA;AAC5B,QAAA;AAAA,MACF;AAAA;AACF,EACF;AACA,EAAA,OAAO,KAAA;AACT;;;ACjCO,IAAM,qBAAA,GAAN,cAAoC,mBAAA,CAAoB;AAAA,EAI7D,WAAA,CACW,QACT,OAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHJ,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAIT,IAAA,IAAA,CAAK,SAASM,YAAAA,CAAa;AAAA,MACzB,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,cAAc,MAAA,CAAO,YAAA;AAAA,MACrB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,OAAO,OAAA,EAAS,QAAA,GAAW,KAAK,gBAAA,CAAiB,OAAA,CAAQ,QAAQ,CAAA,GAAI;AAAA,KACtE,CAAA;AAAA,EACH;AAAA,EAjBS,YAAA,GAAe,QAAA;AAAA,EACP,MAAA;AAAA,EAkBR,YAAY,OAAA,EAAgC;AACnD,IAAA,OAAO,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,EAC5B;AAAA,EAES,gBAAA,CAAiB,WAAqB,OAAA,EAAwC;AACrF,IAAA,OAAO,gBAAA,CAAiB,IAAA,CAAK,MAAA,EAAQ,SAAA,EAAW,OAAO,CAAA;AAAA,EACzD;AAAA,EAES,oBAAoB,MAAA,EAAsD;AACjF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,cAAA,CAAe,MAAM,CAAA;AACzC,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,EAAE,eAAA,EAAiB,MAAA;AAAO,KACpC;AAAA,EACF;AAAA,EAEQ,eAAe,MAAA,EAAiC;AACtD,IAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAE9B,MAAA,IAAI,MAAA,IAAU,MAAM,OAAO,KAAA;AAC3B,MAAA,IAAI,MAAA,IAAU,KAAM,OAAO,QAAA;AAC3B,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,IAAI,MAAA,KAAW,WAAW,OAAO,KAAA;AACjC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAES,eAAe,KAAA,EAA+B;AACrD,IAAA,OAAO,qBAAqB,KAAK,CAAA;AAAA,EACnC;AAAA,EAES,YAAY,KAAA,EAAyB;AAC5C,IAAA,OAAO,kBAAkB,KAAK,CAAA;AAAA,EAChC;AACF,CAAA;ACjEO,SAAS,qBAAqB,KAAA,EAA+B;AAClE,EAAA,IAAI,iBAAiBN,YAAAA,EAAc;AACjC,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,WAAA,EAAa,kBAAkB,KAAK,CAAA;AAAA,MACpC,QAAA,EAAU,eAAA;AAAA,MACV,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AACA,EAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,WAAA,EAAa,kBAAkB,KAAK,CAAA;AAAA,MACpC,QAAA,EAAU,eAAA;AAAA,MACV,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,OAAO,KAAK,CAAA;AAAA,IACrB,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU,eAAA;AAAA,IACV,aAAA,EAAe;AAAA,GACjB;AACF;AAEO,SAAS,kBAAkB,KAAA,EAAyB;AACzD,EAAA,IAAI,iBAAiBA,YAAAA,EAAc;AACjC,IAAA,IAAI,KAAA,CAAM,aAAa,OAAO,IAAA;AAC9B,IAAA,MAAM,aAAa,KAAA,CAAM,UAAA;AACzB,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAC/B,IAAA,IAAI,UAAA,KAAe,KAAK,OAAO,IAAA;AAAA,EACjC;AACA,EAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAY;AAC1C,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,YAAY,CAAA,EAAG,OAAO,IAAA;AAC3C,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,gBAAgB,CAAA,EAAG,OAAO,IAAA;AAC/C,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG,OAAO,IAAA;AACxC,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,qBAAqB,CAAA,EAAG,OAAO,IAAA;AAAA,EACtD;AACA,EAAA,OAAO,KAAA;AACT;;;AC5CO,SAAS,gBAAA,CACd,MAAA,EACA,SAAA,EACA,OAAA,EACS;AACT,EAAA,MAAM,QAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,cAAA,EAAgB;AACnB,QAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,KAAA,CAAM,YAAA,CAAa,EAAE,CAAA;AACrD,QAAA,KAAA,CAAM,eAAe,CAAA,GAAI,gBAAA;AACzB,QAAA;AAAA,MACF;AAAA,MACA,KAAK,eAAA,EAAiB;AACpB,QAAA,MAAM,iBAAA,GAAoB,MAAA,CAAO,KAAA,CAAM,aAAA,CAAc,EAAE,CAAA;AACvD,QAAA,KAAA,CAAM,gBAAgB,CAAA,GAAI,iBAAA;AAC1B,QAAA;AAAA,MACF;AAAA,MACA,KAAK,YAAA,EAAc;AACjB,QAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW,EAAE,CAAA;AACjD,QAAA,KAAA,CAAM,aAAa,CAAA,GAAI,cAAA;AACvB,QAAA;AAAA,MACF;AAAA,MACA,KAAK,qBAAA,EAAuB;AAC1B,QAAA,MAAM,uBAAA,GAA0B,MAAA,CAAO,KAAA,CAAM,mBAAA,CAAoB,EAAE,CAAA;AACnE,QAAA,KAAA,CAAM,uBAAuB,CAAA,GAAI,uBAAA;AACjC,QAAA;AAAA,MACF;AAAA,MACA,KAAK,YAAA,EAAc;AACjB,QAAA,MAAM,cAAA,GAAiB,OAAO,KAAA,CAAM,UAAA,CAAW,SAAS,UAAA,EAAY,eAAA,IAAmB,EAAE,CAAA;AACzF,QAAA,KAAA,CAAM,aAAa,CAAA,GAAI,cAAA;AACvB,QAAA;AAAA,MACF;AAAA;AACF,EACF;AACA,EAAA,OAAO,KAAA;AACT;;;AC3BO,IAAM,qBAAA,GAAN,cAAoC,mBAAA,CAAoB;AAAA,EAI7D,WAAA,CACW,QACT,OAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHJ,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAIT,IAAA,IAAA,CAAK,SAASO,YAAAA,CAAa;AAAA,MACzB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,OAAO,OAAA,EAAS,QAAA,GAAW,KAAK,gBAAA,CAAiB,OAAA,CAAQ,QAAQ,CAAA,GAAI;AAAA,KACtE,CAAA;AAAA,EACH;AAAA,EAfS,YAAA,GAAe,eAAA;AAAA,EACP,MAAA;AAAA,EAgBR,YAAY,OAAA,EAAgC;AACnD,IAAA,OAAO,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,EAC5B;AAAA,EAES,gBAAA,CAAiB,WAAqB,OAAA,EAAwC;AACrF,IAAA,OAAO,gBAAA,CAAiB,IAAA,CAAK,MAAA,EAAQ,SAAA,EAAW,OAAO,CAAA;AAAA,EACzD;AAAA,EAES,mBAAmB,MAAA,EAA6D;AACvF,IAAA,IAAI,CAAC,MAAA,EAAQ,cAAA,IAAkB,MAAA,CAAO,cAAA,CAAe,WAAW,CAAA,EAAG;AACjE,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ;AAAA,QACN,gBAAgB,MAAA,CAAO;AAAA;AACzB,KACF;AAAA,EACF;AAAA,EAES,oBAAoB,MAAA,EAAsD;AACjF,IAAA,IAAI,MAAA,KAAW,MAAA,IAAU,MAAA,KAAW,CAAA,EAAG;AACrC,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,cAAA,CAAe,MAAM,CAAA;AAC/C,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ;AAAA,QACN,cAAA,EAAgB;AAAA,UACd,cAAA,EAAgB,YAAA;AAAA,UAChB,eAAA,EAAiB;AAAA;AACnB;AACF,KACF;AAAA,EACF;AAAA,EAEQ,eAAe,MAAA,EAAiC;AACtD,IAAA,IAAI,OAAO,MAAA,KAAW,QAAA,EAAU,OAAO,MAAA;AACvC,IAAA,MAAM,GAAA,GAA8B;AAAA,MAClC,OAAA,EAAS,IAAA;AAAA,MACT,GAAA,EAAK,IAAA;AAAA,MACL,MAAA,EAAQ,GAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACR;AACA,IAAA,OAAO,GAAA,CAAI,MAAM,CAAA,IAAK,GAAA;AAAA,EACxB;AAAA,EAES,eAAe,KAAA,EAA+B;AACrD,IAAA,OAAO,qBAAqB,KAAK,CAAA;AAAA,EACnC;AAAA,EAES,YAAY,KAAA,EAAyB;AAC5C,IAAA,OAAO,kBAAkB,KAAK,CAAA;AAAA,EAChC;AACF,CAAA;;;ACpEA,uBAAA;AAAA,EACE,WAAA;AAAA,EACA,YAAY;AACd,CAAA;AAEA,uBAAA;AAAA,EACE,QAAA;AAAA,EACA,YAAY;AACd,CAAA;AAEA,uBAAA;AAAA,EACE,QAAA;AAAA,EACA,YAAY;AACd,CAAA;AAEA,uBAAA;AAAA,EACE,QAAA;AAAA,EACA,YAAY;AACd,CAAA;AAEA,uBAAA;AAAA,EACE,cAAA;AAAA,EACA,YAAY;AACd,CAAA;AAEA,uBAAA;AAAA,EACE,gBAAA;AAAA,EACA,YAAY;AACd,CAAA;AAEA,uBAAA;AAAA,EACE,eAAA;AAAA,EACA,YAAY;AACd,CAAA;AAEA,uBAAA;AAAA,EACE,UAAA;AAAA,EACA,YAAY;AACd,CAAA;AC5CA,IAAM,wBAAwB,CAAC,MAAA,KAC7B,WAAW,MAAA,IAAa,MAAA,KAAW,UAAU,MAAA,KAAW,CAAA;AAEnD,IAAM,cAAN,MAAkB;AAAA,EACvB,WAAA,CACmB,SACA,KAAA,EACjB;AAFiB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EAChB;AAAA,EAEH,MAAM,aAAa,MAAA,EAAyD;AAC1E,IAAA,MAAM,aAAA,GAAgB,KAAK,OAAA,CAAQ,gBAAA;AAAA,MACjC,MAAA,CAAO,qBAAqB,EAAC;AAAA,MAC7B,MAAA,CAAO;AAAA,KACT;AACA,IAAA,MAAM,mBAAA,GAAsB,IAAA,CAAK,OAAA,CAAQ,kBAAA,CAAmB,OAAO,qBAAqB,CAAA;AACxF,IAAA,MAAM,gBAAA,GAAmB,qBAAA,CAAsB,MAAA,CAAO,eAAe,CAAA;AACrE,IAAA,MAAM,gBAAA,GACJ,oBAAoB,MAAA,CAAO,eAAA,GACvB,KAAK,OAAA,CAAQ,mBAAA,CAAoB,MAAA,CAAO,eAAe,CAAA,GACvD,MAAA;AACN,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,oBAAA,CAAqB,mBAAA,EAAqB,gBAAgB,CAAA;AAEvF,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,YAAA,CAAa;AAAA,QAChC,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,YAAY,MAAA,CAAO,UAAA;AAAA,QACnB,OAAO,EAAE,GAAG,MAAA,CAAO,KAAA,EAAO,GAAG,aAAA,EAAc;AAAA,QAC3C,YAAY,MAAA,CAAO,UAAA;AAAA,QACnB,aAAa,MAAA,CAAO,WAAA;AAAA,QACpB;AAAA,OACD,CAAA;AACD,MAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,MAAA,EAAO;AAAA,IACjC,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,KAAK,CAAA;AACvD,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO,aAAA;AAAA,QACP,WAAA,EAAa,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,KAAK;AAAA,OAC7C;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,wBACH,OAAA,EAC0B;AAC7B,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA;AACtC,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AACjC,IAAA,MAAM,SAA0B,EAAC;AACjC,IAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,MAAA,KAAA,MAAW,CAAC,QAAA,EAAU,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtD,QAAA,MAAA,CAAO,QAAQ,IAAI,EAAE,GAAG,OAAO,QAAQ,CAAA,EAAG,GAAG,QAAA,EAAS;AAAA,MACxD;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,yBACJ,MAAA,EAI6B;AAC7B,IAAA,MAAM,mBAAA,GAAsB,IAAA,CAAK,OAAA,CAAQ,kBAAA,CAAmB,OAAO,qBAAqB,CAAA;AACxF,IAAA,MAAM,gBAAA,GAAmB,qBAAA,CAAsB,MAAA,CAAO,eAAe,CAAA;AACrE,IAAA,MAAM,gBAAA,GACJ,oBAAoB,MAAA,CAAO,eAAA,GACvB,KAAK,OAAA,CAAQ,mBAAA,CAAoB,MAAA,CAAO,eAAe,CAAA,GACvD,MAAA;AACN,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,oBAAA,CAAqB,mBAAA,EAAqB,gBAAgB,CAAA;AAEvF,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,YAAA,CAAa;AAAA,QAChC,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,YAAY,MAAA,CAAO,UAAA;AAAA,QACnB,aAAa,MAAA,CAAO,WAAA;AAAA,QACpB;AAAA,OACD,CAAA;AACD,MAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,MAAA,EAAO;AAAA,IACjC,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,KAAK,CAAA;AACvD,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO,aAAA;AAAA,QACP,WAAA,EAAa,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,KAAK;AAAA,OAC7C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UAAA,CACJ,MAAA,EACA,SAAA,EAC6B;AAC7B,IAAA,MAAM,aAAA,GAAgB,KAAK,OAAA,CAAQ,gBAAA;AAAA,MACjC,MAAA,CAAO,qBAAqB,EAAC;AAAA,MAC7B,MAAA,CAAO;AAAA,KACT;AACA,IAAA,MAAM,mBAAA,GAAsB,IAAA,CAAK,OAAA,CAAQ,kBAAA,CAAmB,OAAO,qBAAqB,CAAA;AACxF,IAAA,MAAM,gBAAA,GAAmB,qBAAA,CAAsB,MAAA,CAAO,eAAe,CAAA;AACrE,IAAA,MAAM,gBAAA,GACJ,oBAAoB,MAAA,CAAO,eAAA,GACvB,KAAK,OAAA,CAAQ,mBAAA,CAAoB,MAAA,CAAO,eAAe,CAAA,GACvD,MAAA;AACN,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,oBAAA,CAAqB,mBAAA,EAAqB,gBAAgB,CAAA;AAEvF,IAAA,MAAM,eAAe,UAAA,CAAW;AAAA,MAC9B,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,OAAO,EAAE,GAAG,MAAA,CAAO,KAAA,EAAO,GAAG,aAAA,EAAc;AAAA,MAC3C,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB;AAAA,KACD,CAAA;AAED,IAAA,IAAI,gBAAA,GAAmB,KAAA;AACvB,IAAA,IAAI,kBAAA,GAAqB,KAAA;AACzB,IAAA,IAAI,aAAA,GAAgB,KAAA;AACpB,IAAA,IAAI,oBAAA,GAAuB,EAAA;AAE3B,IAAA,IAAI;AAEF,MAAA,WAAA,MAAiB,IAAA,IAAQ,aAAa,UAAA,EAAY;AAChD,QAAA,IAAI,IAAA,CAAK,SAAS,iBAAA,EAAmB;AACnC,UAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,YAAA,SAAA,CAAU,gBAAA,IAAmB;AAC7B,YAAA,gBAAA,GAAmB,IAAA;AAAA,UACrB;AACA,UAAA,oBAAA,IAAwB,IAAA,CAAK,IAAA;AAC7B,UAAA,SAAA,CAAU,gBAAA,GAAmB,KAAK,IAAI,CAAA;AAAA,QACxC;AACA,QAAA,IAAI,IAAA,CAAK,SAAS,YAAA,EAAc;AAE9B,UAAA,IAAI,gBAAA,IAAoB,CAAC,kBAAA,EAAoB;AAC3C,YAAA,SAAA,CAAU,sBAAsB,oBAAoB,CAAA;AACpD,YAAA,kBAAA,GAAqB,IAAA;AAAA,UACvB;AACA,UAAA,IAAI,CAAC,aAAA,EAAe;AAClB,YAAA,SAAA,CAAU,aAAA,IAAgB;AAC1B,YAAA,aAAA,GAAgB,IAAA;AAAA,UAClB;AACA,UAAA,SAAA,CAAU,aAAA,GAAgB,KAAK,IAAI,CAAA;AAAA,QACrC;AAAA,MACF;AAIA,MAAA,IAAI,gBAAA,IAAoB,CAAC,kBAAA,EAAoB;AAC3C,QAAA,SAAA,CAAU,sBAAsB,oBAAoB,CAAA;AACpD,QAAA,kBAAA,GAAqB,IAAA;AAAA,MACvB;AAIA,MAAA,MAAM,IAAA,GAAO,MAAM,YAAA,CAAa,IAAA;AAChC,MAAA,MAAM,SAAA,GAAY,MAAM,YAAA,CAAa,SAAA;AACrC,MAAA,MAAM,YAAA,GAAe,MAAM,YAAA,CAAa,YAAA;AACxC,MAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,CAAa,KAAA;AACjC,MAAA,MAAM,SAAA,GAAY,MAAM,YAAA,CAAa,SAAA;AACrC,MAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,QAAA;AAGpC,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,SAAA,CAAU,mBAAmB,IAAI,CAAA;AAAA,MACnC;AAGA,MAAA,MAAM,MAAA,GAAS;AAAA,QACb,IAAA;AAAA,QACA,SAAA;AAAA,QACA,YAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA;AAAA,QACA,QAAA;AAAA;AAAA;AAAA,QAGA,aAAa,EAAC;AAAA,QACd,OAAO,EAAC;AAAA,QACR,mBAAA,EAAqB,KAAA,CAAA;AAAA,QACrB,gBAAA,EAAkB,KAAA,CAAA;AAAA,QAClB,OAAA,EAAS,EAAE,IAAA,EAAM,EAAA;AAAG,OACtB;AAEA,MAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,MAAA,EAAwB;AAAA,IAClD,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,KAAK,CAAA;AACvD,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO,aAAA;AAAA,QACP,WAAA,EAAa,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,KAAK;AAAA,OAC7C;AAAA,IACF;AAAA,EACF;AACF,CAAA;;;AC5JO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,WAAA,CAAoB,OAAA,GAAoC,EAAC,EAAG;AAAxC,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EAAyC;AAAA,EAE7D,MAAM,OAAA,CAAQ,OAAA,EAAqB,UAAA,EAAmD;AACpF,IAAA,MAAM,OAAA,GAAU,MAAM,qBAAA,CAAsB,OAAA,CAAQ,cAAA,EAAgB;AAAA,MAClE,UAAU,OAAA,CAAQ;AAAA,KACnB,CAAA;AACD,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,WAAA,CAAY,OAAA,CAAQ,KAAK,CAAA;AAC/C,IAAA,MAAM,WAAA,GAAc,IAAI,WAAA,CAAY,OAAA,EAAS,KAAK,CAAA;AAElD,IAAA,MAAM,gBAAgB,gBAAA,CAAiB,OAAA,CAAQ,cAAA,CAAe,YAAA,EAAc,QAAQ,KAAK,CAAA;AACzF,IAAA,MAAM,EAAE,aAAa,OAAA,EAAQ,GAAI,MAAM,YAAA,CAAa,OAAA,EAAS,IAAA,CAAK,OAAA,CAAQ,kBAAkB,CAAA;AAE5F,IAAA,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,WAAA,EAAa,OAAO,CAAA;AAEhD,IAAA,MAAM,iBAAiB,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAU,OAAA,CAAQ,QAAQ,SAAS,CAAA;AACvE,IAAA,MAAM,aAAA,GAAgB,iBAClB,MAAM,4BAAA;AAAA,MACJ,WAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,iCAAiC,cAAc,CAAA;AAAA,MAC/C,KAAK,OAAA,CAAQ,aAAA;AAAA,MACb,EAAE,cAAA,EAAgB,CAAC,CAAC,YAAY,WAAA;AAAY,KAC9C,GACA,MAAM,gBAAA,CAAiB,WAAA,EAAa,SAAS,OAAA,EAAS,IAAA,CAAK,QAAQ,aAAA,EAAe;AAAA,MAChF,cAAA,EAAgB,CAAC,CAAC,UAAA,EAAY;AAAA,KAC/B,CAAA;AAEL,IAAA,MAAM,iBAAA,GAAoB,aACtB,wBAAA,CAAyBnB,QAAAA,IAAY,UAAU,CAAA,GAC/C,uBAAA,CAAwBA,QAAAA,EAAS,EAAG;AAAA,MAClC,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,MAAA,EAAQ,WAAA;AAAA,MACR;AAAA,KACD,CAAA;AAEL,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,MAAM,aAAA,GAAgB,KAAK,mBAAA,EAAoB;AAC/C,IAAA,YAAA,CAAa,UAAU,aAAa,CAAA;AAEpC,IAAA,MAAM,gBAAA,GAAmB,MAAM,mBAAA,CAAoB;AAAA,MACjD,OAAA,EAAS,EAAE,GAAG,OAAA,EAAS,OAAA,EAAQ;AAAA,MAC/B,iBAAA;AAAA,MACA,aAAA;AAAA,MACA,aAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,eAAA,EAAiB,IAAA,CAAK,OAAA,CAAQ,eAAA,KAAoB,YAAY;AAAA,MAAC,CAAA,CAAA;AAAA,MAC/D,iBAAA,EAAmB,KAAK,OAAA,CAAQ;AAAA,KACjC,CAAA;AAED,IAAA,OAAO,EAAE,UAAA,EAAY,gBAAA,EAAkB,WAAA,EAAa,OAAA,EAAQ;AAAA,EAC9D;AAAA,EAEQ,mBAAA,GAAyE;AAC/E,IAAA,MAAM,YAAA,GAAe,KAAK,OAAA,CAAQ,aAAA;AAClC,IAAA,MAAM,UAAA,GAAa,KAAK,OAAA,CAAQ,UAAA;AAChC,IAAA,OAAO,OAAO,KAAA,KAAmC;AAE/C,MAAA,IAAI,YAAA,IAAgB,SAAS,UAAA,EAAY;AACvC,QAAA,MAAM,WAAW,KAAiB,CAAA;AAAA,MACpC;AACA,MAAA,YAAA,GAAe,KAAK,CAAA;AAAA,IACtB,CAAA;AAAA,EACF;AAAA,EAEQ,aAAA,CACN,OAAA,EACA,WAAA,EACA,OAAA,EACM;AACN,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,aAAA,EAAe;AAEjC,IAAA,MAAM,YAAY,kBAAA,CAAmB,mBAAA,EAAqB,OAAA,CAAQ,KAAA,EAAO,QAAQ,KAAA,EAAO;AAAA,MACtF,gBAAgB,eAAA,CAAI,OAAA;AAAA,MACpB,OAAA,EAAS,OAAA;AAAA,MACT,YAAY,WAAA,CAAY,IAAA;AAAA,MACxB,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AAAA,MAC5B,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,KAAA,EAAO,QAAQ,KAAA,CAAM,IAAA;AAAA,MACrB,mBAAA,EAAqB,QAAQ,KAAA,CAAM;AAAA,KACpC,CAAA;AACD,IAAA,IAAA,CAAK,OAAA,CAAQ,cAAc,SAAS,CAAA;AAAA,EACtC;AACF,CAAA;;;AC1GA,IAAM,gBAAA,GAAmB,CAAC,KAAA,EAAe,SAAA,EAAmB,QAAA,MAA4B;AAAA,EACtF,EAAA,EAAI,KAAA;AAAA,EACJ,oBAAA,EAAsB,SAAA;AAAA,EACtB,MAAA,EAAQ,SAAA;AAAA,EACR,UAAA,EAAY,CAAA;AAAA,EACZ,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,EACpB,QAAA;AAAA,EACA,OAAO,gBAAA;AACT,CAAA,CAAA;AAaA,eAAsB,GAAA,CAAI,UAA0B,OAAA,EAA2C;AAC7F,EAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,KAAA,CAAM,QAAQ,CAAA;AAChD,EAAA,IAAI,EAAE,OAAA,EAAS,UAAA,EAAW,GAAI,SAAA;AAE9B,EAAA,MAAM,QAAA,GAAW,OAAA,EAAS,QAAA,KAAa,MAAM;AAAA,EAAC,CAAA,CAAA;AAC9C,EAAA,MAAM,WAAA,GAAc,OAAA,EAAS,WAAA,KAAgB,MAAM,MAAA,CAAA;AACnD,EAAA,MAAM,kBAAA,GACJ,OAAA,EAAS,kBAAA,KACR,YAAY;AACX,IAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,EACnD,CAAA,CAAA;AACF,EAAA,MAAM,SAAA,GAAY,SAAS,SAAA,IAAa,gBAAA;AAExC,EAAA,IAAI,GAAA,GACF,WAAA,CAAY,OAAA,CAAQ,KAAK,CAAA,IAAK,SAAA,CAAU,OAAA,CAAQ,KAAA,EAAO,OAAA,CAAQ,SAAA,EAAW,OAAA,CAAQ,QAAQ,CAAA;AAC5F,EAAA,IAAI,GAAA,CAAI,WAAW,SAAA,EAAW;AAC5B,IAAA,GAAA,GAAM,EAAE,GAAG,GAAA,EAAK,MAAA,EAAQ,SAAA,EAAW,YAAY,MAAA,EAAU;AAAA,EAC3D;AACA,EAAA,QAAA,CAAS,GAAG,CAAA;AAEZ,EAAA,MAAM,WAAA,GAAc,IAAI,iBAAA,CAAkB;AAAA,IACxC,mBAAmB,OAAA,EAAS,iBAAA;AAAA,IAC5B,iBAAiB,OAAA,EAAS,eAAA;AAAA,IAC1B,YAAY,OAAA,EAAS,UAAA;AAAA,IACrB,eAAe,OAAA,EAAS,aAAA;AAAA,IACxB,oBAAoB,OAAA,EAAS,kBAAA;AAAA,IAC7B,UAAU,OAAA,EAAS;AAAA,GACpB,CAAA;AAED,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,MAAM,SAAA,GAAY,MAAM,WAAA,CAAY,OAAA,CAAQ,SAAS,UAAU,CAAA;AAC/D,IAAA,MAAM,mBAAmB,SAAA,CAAU,UAAA;AAEnC,IAAA,GAAA,GAAM;AAAA,MACJ,GAAG,GAAA;AAAA,MACH,YAAY,gBAAA,CAAiB,UAAA;AAAA,MAC7B,OAAO,gBAAA,CAAiB;AAAA,KAC1B;AAEA,IAAA,QAAQ,iBAAiB,MAAA;AAAQ,MAC/B,KAAK,WAAA,EAAa;AAChB,QAAA,IAAI,SAAS,0BAAA,EAA4B;AACvC,UAAA,QAAA,CAAS,GAAG,CAAA;AACZ,UAAA,OAAO,gBAAA;AAAA,QACT;AACA,QAAA,IAAI,iBAAiB,WAAA,EAAa;AAChC,UAAA,QAAA,CAAS,GAAG,CAAA;AACZ,UAAA,MAAM,mBAAmB,MAAM,kBAAA;AAAA,YAC7B,OAAA,CAAQ,KAAA;AAAA,YACR,iBAAiB,WAAA,CAAY;AAAA,WAC/B;AACA,UAAA,MAAM,MAAA,GAAS,yBAAA,CAA0B,OAAA,EAAS,gBAAA,EAAkB,gBAAgB,CAAA;AACpF,UAAA,OAAA,GAAU,MAAA,CAAO,OAAA;AACjB,UAAA,UAAA,GAAa,MAAA,CAAO,UAAA;AACpB,UAAA;AAAA,QACF;AACA,QAAA,QAAA,CAAS,EAAE,GAAG,GAAA,EAAK,MAAA,EAAQ,aAAa,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,EAAG,CAAA;AAChE,QAAA,OAAO,gBAAA;AAAA,MACT;AAAA,MAEA,KAAK,0BAAA,EAA4B;AAC/B,QAAA,QAAA,CAAS,EAAE,GAAG,GAAA,EAAK,MAAA,EAAQ,4BAA4B,CAAA;AACvD,QAAA,OAAO,gBAAA;AAAA,MACT;AAAA,MAEA,KAAK,mBAAA,EAAqB;AACxB,QAAA,QAAA,CAAS,GAAG,CAAA;AACZ,QAAA,MAAM,EAAE,YAAW,GAAI,gBAAA;AACvB,QAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG;AAC1C,UAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,QACtD;AACA,QAAA,MAAM,QAAA,GAAW,wBAAA,CAAyB,UAAA,CAAW,MAAM,CAAA;AAC3D,QAAA,MAAM,OAAA,GAAU,yBAAyB,gBAAgB,CAAA;AAIzD,QAAA,MAAM,gBAAA,GAAmB,MAAM,QAAA,CAAS,OAAA;AAAA,UACtC,UAAA;AAAA,UACA,OAAA;AAAA,UACA,OAAA;AAAA,UACA,SAAA,CAAU,WAAA;AAAA,UACV,GAAA;AAAA,UACA;AAAA,SACF;AAEA,QAAA,OAAA,GAAU,gBAAA,CAAiB,WAAA;AAC3B,QAAA,UAAA,GAAa,gBAAA,CAAiB,cAAA;AAC9B,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,2BAAA,EAA6B;AAChC,QAAA,QAAA,CAAS,EAAE,GAAG,GAAA,EAAK,MAAA,EAAQ,qBAAqB,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,EAAG,CAAA;AACxE,QAAA,OAAO,gBAAA;AAAA,MACT;AAAA,MAEA,KAAK,gBAAA,EAAkB;AACrB,QAAA,QAAA,CAAS,EAAE,GAAG,GAAA,EAAK,MAAA,EAAQ,kBAAkB,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,EAAG,CAAA;AACrE,QAAA,OAAO,gBAAA;AAAA,MACT;AAAA,MAEA;AACE,QAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA;AACnD,EACF;AACF","file":"chunk-QJJAMZV3.js","sourcesContent":["{\n \"name\": \"@perstack/runtime\",\n \"version\": \"0.0.79\",\n \"description\": \"Perstack Runtime\",\n \"author\": \"Wintermute Technologies, Inc.\",\n \"license\": \"Apache-2.0\",\n \"type\": \"module\",\n \"bin\": {\n \"perstack-runtime\": \"./bin/cli.ts\"\n },\n \"exports\": {\n \".\": \"./src/index.ts\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"bin\": {\n \"perstack-runtime\": \"dist/bin/cli.js\"\n },\n \"exports\": {\n \".\": \"./dist/src/index.js\"\n },\n \"types\": {\n \".\": \"./dist/src/index.d.ts\"\n }\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"clean\": \"rm -rf dist\",\n \"build\": \"pnpm run clean && tsup --config ./tsup.config.ts\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"dependencies\": {\n \"@ai-sdk/amazon-bedrock\": \"^3.0.0\",\n \"@ai-sdk/anthropic\": \"^2.0.0\",\n \"@ai-sdk/azure\": \"^2.0.0\",\n \"@ai-sdk/deepseek\": \"^1.0.0\",\n \"@ai-sdk/google\": \"^2.0.0\",\n \"@ai-sdk/google-vertex\": \"^3.0.0\",\n \"@ai-sdk/openai\": \"^2.0.0\",\n \"@modelcontextprotocol/sdk\": \"^1.25.1\",\n \"@paralleldrive/cuid2\": \"^3.0.4\",\n \"@perstack/adapter-base\": \"workspace:*\",\n \"@perstack/api-client\": \"workspace:*\",\n \"@perstack/base\": \"workspace:*\",\n \"@perstack/core\": \"workspace:*\",\n \"ai\": \"^5.0.115\",\n \"ollama-ai-provider-v2\": \"^1.5.5\",\n \"commander\": \"^14.0.2\",\n \"dotenv\": \"^17.2.3\",\n \"smol-toml\": \"^1.5.2\",\n \"ts-dedent\": \"^2.2.0\",\n \"undici\": \"^7.16.0\",\n \"xstate\": \"^5.25.0\"\n },\n \"devDependencies\": {\n \"@perstack/anthropic-provider\": \"workspace:*\",\n \"@perstack/azure-openai-provider\": \"workspace:*\",\n \"@perstack/bedrock-provider\": \"workspace:*\",\n \"@perstack/deepseek-provider\": \"workspace:*\",\n \"@perstack/google-provider\": \"workspace:*\",\n \"@perstack/ollama-provider\": \"workspace:*\",\n \"@perstack/openai-provider\": \"workspace:*\",\n \"@perstack/provider-core\": \"workspace:*\",\n \"@perstack/vertex-provider\": \"workspace:*\",\n \"@tsconfig/node22\": \"^22.0.5\",\n \"@types/node\": \"^25.0.3\",\n \"memfs\": \"^4.51.1\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.16\"\n },\n \"engines\": {\n \"node\": \">=22.0.0\"\n }\n}\n","import { readFileSync } from \"node:fs\"\nimport path from \"node:path\"\nimport {\n type Lockfile,\n type LockfileExpert,\n lockfileSchema,\n parseWithFriendlyError,\n} from \"@perstack/core\"\nimport TOML from \"smol-toml\"\n\nexport function loadLockfile(lockfilePath: string): Lockfile | null {\n try {\n const content = readFileSync(lockfilePath, \"utf-8\")\n const parsed = TOML.parse(content)\n return parseWithFriendlyError(lockfileSchema, parsed, \"perstack.lock\")\n } catch {\n return null\n }\n}\n\nfunction isRemoteUrl(configPath: string): boolean {\n const lower = configPath.toLowerCase()\n return lower.startsWith(\"https://\") || lower.startsWith(\"http://\")\n}\n\nexport function findLockfile(configPath?: string): string | null {\n if (configPath) {\n // Remote config URLs don't support lockfiles - skip silently\n if (isRemoteUrl(configPath)) {\n return null\n }\n const configDir = path.dirname(path.resolve(process.cwd(), configPath))\n return path.join(configDir, \"perstack.lock\")\n }\n return findLockfileRecursively(process.cwd())\n}\n\nfunction findLockfileRecursively(cwd: string): string | null {\n const lockfilePath = path.resolve(cwd, \"perstack.lock\")\n try {\n readFileSync(lockfilePath)\n return lockfilePath\n } catch {\n if (cwd === path.parse(cwd).root) {\n return null\n }\n return findLockfileRecursively(path.dirname(cwd))\n }\n}\n\nexport function getLockfileExpertToolDefinitions(\n lockfileExpert: LockfileExpert,\n): Record<\n string,\n { skillName: string; name: string; description?: string; inputSchema: Record<string, unknown> }[]\n> {\n const result: Record<\n string,\n {\n skillName: string\n name: string\n description?: string\n inputSchema: Record<string, unknown>\n }[]\n > = {}\n for (const toolDef of lockfileExpert.toolDefinitions) {\n if (!result[toolDef.skillName]) {\n result[toolDef.skillName] = []\n }\n result[toolDef.skillName].push({\n skillName: toolDef.skillName,\n name: toolDef.name,\n description: toolDef.description,\n inputSchema: toolDef.inputSchema,\n })\n }\n return result\n}\n","import { createAmazonBedrock } from \"@ai-sdk/amazon-bedrock\"\nimport { createAnthropic } from \"@ai-sdk/anthropic\"\nimport { createAzure } from \"@ai-sdk/azure\"\nimport { createDeepSeek } from \"@ai-sdk/deepseek\"\nimport { createGoogleGenerativeAI } from \"@ai-sdk/google\"\nimport { createVertex } from \"@ai-sdk/google-vertex\"\nimport { createOpenAI } from \"@ai-sdk/openai\"\nimport {\n knownModels,\n type ProviderConfig,\n type ProviderName,\n type ReasoningBudget,\n type Usage,\n} from \"@perstack/core\"\nimport type { ProviderOptions } from \"@perstack/provider-core\"\nimport type { LanguageModel } from \"ai\"\nimport { createOllama } from \"ollama-ai-provider-v2\"\nimport { ProxyAgent, fetch as undiciFetch } from \"undici\"\n\nfunction createProxyFetch(proxyUrl: string): typeof globalThis.fetch {\n const agent = new ProxyAgent(proxyUrl)\n return (input, init) => {\n return undiciFetch(input, { ...init, dispatcher: agent }) as Promise<Response>\n }\n}\n\nexport interface GetModelOptions {\n proxyUrl?: string\n}\n\nexport function getModel(\n modelId: string,\n providerConfig: ProviderConfig,\n options?: GetModelOptions,\n): LanguageModel {\n const customFetch = options?.proxyUrl ? createProxyFetch(options.proxyUrl) : undefined\n switch (providerConfig.providerName) {\n case \"anthropic\": {\n const anthropic = createAnthropic({\n apiKey: providerConfig.apiKey,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n fetch: customFetch,\n })\n return anthropic(modelId)\n }\n case \"google\": {\n const google = createGoogleGenerativeAI({\n apiKey: providerConfig.apiKey,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n fetch: customFetch,\n })\n return google(modelId)\n }\n case \"openai\": {\n const openai = createOpenAI({\n apiKey: providerConfig.apiKey,\n baseURL: providerConfig.baseUrl,\n organization: providerConfig.organization,\n project: providerConfig.project,\n name: providerConfig.name,\n headers: providerConfig.headers,\n fetch: customFetch,\n })\n return openai(modelId)\n }\n case \"ollama\": {\n const ollama = createOllama({\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n fetch: customFetch,\n })\n return ollama(modelId)\n }\n case \"azure-openai\": {\n const azure = createAzure({\n apiKey: providerConfig.apiKey,\n resourceName: providerConfig.resourceName,\n apiVersion: providerConfig.apiVersion,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n useDeploymentBasedUrls: providerConfig.useDeploymentBasedUrls,\n fetch: customFetch,\n })\n return azure(modelId)\n }\n case \"amazon-bedrock\": {\n const amazonBedrock = createAmazonBedrock({\n accessKeyId: providerConfig.accessKeyId,\n secretAccessKey: providerConfig.secretAccessKey,\n region: providerConfig.region,\n sessionToken: providerConfig.sessionToken,\n fetch: customFetch,\n })\n return amazonBedrock(modelId)\n }\n case \"google-vertex\": {\n const vertex = createVertex({\n project: providerConfig.project,\n location: providerConfig.location,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n fetch: customFetch,\n })\n return vertex(modelId)\n }\n case \"deepseek\": {\n const deepseek = createDeepSeek({\n apiKey: providerConfig.apiKey,\n baseURL: providerConfig.baseUrl,\n headers: providerConfig.headers,\n fetch: customFetch,\n })\n return deepseek(modelId)\n }\n default: {\n const _exhaustive: never = providerConfig\n throw new Error(`Unknown provider: ${(_exhaustive as ProviderConfig).providerName}`)\n }\n }\n}\n\nexport function getContextWindow(providerName: ProviderName, modelId: string): number | undefined {\n const modelConfig = knownModels\n .find((model) => model.provider === providerName)\n ?.models.find((model) => model.name === modelId)\n return modelConfig?.contextWindow\n}\n\nexport function calculateContextWindowUsage(usage: Usage, contextWindow: number): number {\n return (usage.inputTokens + usage.cachedInputTokens + usage.outputTokens) / contextWindow\n}\n\n/**\n * Get provider-specific options for native LLM reasoning (extended thinking).\n * Returns undefined if reasoning budget is not set.\n */\nexport function getReasoningProviderOptions(\n providerName: ProviderName,\n reasoningBudget: ReasoningBudget | undefined,\n): ProviderOptions | undefined {\n if (!reasoningBudget) return undefined\n\n switch (providerName) {\n case \"anthropic\": {\n const budgetTokens = budgetToTokens(reasoningBudget)\n return {\n anthropic: {\n thinking: { type: \"enabled\", budgetTokens },\n },\n }\n }\n case \"openai\": {\n const effort = budgetToEffort(reasoningBudget)\n return {\n openai: { reasoningEffort: effort },\n }\n }\n case \"google\": {\n // Google uses thinkingBudget (token count) instead of thinkingLevel for gemini-2.5-flash\n const budgetTokens = budgetToTokens(reasoningBudget)\n return {\n google: {\n thinkingConfig: {\n thinkingBudget: budgetTokens,\n includeThoughts: true,\n },\n },\n }\n }\n default:\n // Other providers don't support native reasoning yet\n return undefined\n }\n}\n\nfunction budgetToTokens(budget: ReasoningBudget): number {\n if (typeof budget === \"number\") return budget\n const map: Record<string, number> = {\n minimal: 1024,\n low: 2048,\n medium: 5000,\n high: 10000,\n }\n return map[budget] ?? 5000\n}\n\nfunction budgetToEffort(budget: ReasoningBudget): string {\n if (typeof budget === \"number\") {\n // o3-mini only supports 'low', 'medium', 'high' (not 'minimal')\n if (budget <= 2048) return \"low\"\n if (budget <= 5000) return \"medium\"\n return \"high\"\n }\n // Map 'minimal' to 'low' for o3-mini compatibility\n if (budget === \"minimal\") return \"low\"\n return budget\n}\n","import type { Usage } from \"@perstack/core\"\nimport type { GenerateTextResult, ToolSet } from \"ai\"\n\nexport function createEmptyUsage(): Usage {\n return {\n inputTokens: 0,\n outputTokens: 0,\n reasoningTokens: 0,\n totalTokens: 0,\n cachedInputTokens: 0,\n }\n}\n\nexport function usageFromGenerateTextResult(result: GenerateTextResult<ToolSet, never>): Usage {\n return {\n inputTokens: result.usage.inputTokens || 0,\n outputTokens: result.usage.outputTokens || 0,\n reasoningTokens: result.usage.reasoningTokens || 0,\n totalTokens: result.usage.totalTokens || 0,\n cachedInputTokens: result.usage.cachedInputTokens || 0,\n }\n}\n\nexport function sumUsage(a: Usage, b: Usage): Usage {\n return {\n inputTokens: a.inputTokens + b.inputTokens,\n outputTokens: a.outputTokens + b.outputTokens,\n reasoningTokens: a.reasoningTokens + b.reasoningTokens,\n totalTokens: a.totalTokens + b.totalTokens,\n cachedInputTokens: a.cachedInputTokens + b.cachedInputTokens,\n }\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type { Checkpoint, Expert, RunSetting } from \"@perstack/core\"\nimport { createEmptyUsage } from \"./usage.js\"\n\nexport type CreateInitialCheckpointParams = {\n jobId: string\n runId: string\n expertKey: string\n expert: Pick<Expert, \"name\" | \"version\">\n contextWindow: number | undefined\n}\n\nexport function createInitialCheckpoint(\n checkpointId: string,\n params: CreateInitialCheckpointParams,\n): Checkpoint {\n return {\n id: checkpointId,\n jobId: params.jobId,\n runId: params.runId,\n expert: {\n key: params.expertKey,\n name: params.expert.name,\n version: params.expert.version,\n },\n stepNumber: 1,\n status: \"init\",\n messages: [],\n usage: createEmptyUsage(),\n contextWindow: params.contextWindow,\n contextWindowUsage: params.contextWindow ? 0.0 : undefined,\n }\n}\n\nexport function createNextStepCheckpoint(checkpointId: string, checkpoint: Checkpoint): Checkpoint {\n return {\n ...checkpoint,\n id: checkpointId,\n stepNumber: checkpoint.stepNumber + 1,\n }\n}\n\nexport type DelegationStateResult = {\n setting: RunSetting\n checkpoint: Checkpoint\n}\n\nexport function buildDelegationReturnState(\n currentSetting: RunSetting,\n resultCheckpoint: Checkpoint,\n parentCheckpoint: Checkpoint,\n): DelegationStateResult {\n const { messages, delegatedBy } = resultCheckpoint\n if (!delegatedBy) {\n throw new Error(\"delegatedBy is required for buildDelegationReturnState\")\n }\n const delegateResultMessage = messages[messages.length - 1]\n if (!delegateResultMessage || delegateResultMessage.type !== \"expertMessage\") {\n throw new Error(\"Delegation error: delegation result message is incorrect\")\n }\n const delegateText = delegateResultMessage.contents.find((content) => content.type === \"textPart\")\n if (!delegateText) {\n console.warn(\n `Delegation result from ${resultCheckpoint.expert.key} has no text content. ` +\n `Parent expert ${delegatedBy.expert.key} will receive empty string.`,\n )\n }\n const { expert, toolCallId, toolName } = delegatedBy\n // New runId for delegation return - each run segment gets its own ID\n const newRunId = createId()\n return {\n setting: {\n ...currentSetting,\n runId: newRunId,\n expertKey: expert.key,\n input: {\n interactiveToolCallResult: {\n toolCallId,\n toolName,\n skillName: `delegate/${resultCheckpoint.expert.key}`,\n text: delegateText?.text ?? \"\",\n },\n },\n },\n checkpoint: {\n ...parentCheckpoint,\n runId: newRunId,\n stepNumber: resultCheckpoint.stepNumber,\n usage: resultCheckpoint.usage,\n pendingToolCalls: parentCheckpoint.pendingToolCalls,\n partialToolResults: parentCheckpoint.partialToolResults,\n },\n }\n}\n\nexport function buildDelegateToState(\n currentSetting: RunSetting,\n resultCheckpoint: Checkpoint,\n currentExpert: Pick<Expert, \"key\" | \"name\" | \"version\">,\n): DelegationStateResult {\n const { delegateTo } = resultCheckpoint\n if (!delegateTo || delegateTo.length === 0) {\n throw new Error(\"delegateTo is required for buildDelegateToState\")\n }\n const firstDelegation = delegateTo[0]\n const { expert, toolCallId, toolName, query } = firstDelegation\n return {\n setting: {\n ...currentSetting,\n expertKey: expert.key,\n input: {\n text: query,\n },\n },\n checkpoint: {\n ...resultCheckpoint,\n status: \"init\",\n messages: [],\n expert: {\n key: expert.key,\n name: expert.name,\n version: expert.version,\n },\n delegatedBy: {\n expert: {\n key: currentExpert.key,\n name: currentExpert.name,\n version: currentExpert.version,\n },\n toolCallId,\n toolName,\n checkpointId: resultCheckpoint.id,\n runId: currentSetting.runId,\n },\n usage: resultCheckpoint.usage,\n pendingToolCalls: undefined,\n partialToolResults: undefined,\n },\n }\n}\n","import { createApiClient, type RegistryExpert } from \"@perstack/api-client\"\nimport type { Expert, Skill } from \"@perstack/core\"\n\nexport async function resolveExpertToRun(\n expertKey: string,\n experts: Record<string, Expert>,\n clientOptions: {\n perstackApiBaseUrl: string\n perstackApiKey?: string\n },\n): Promise<Expert> {\n if (experts[expertKey]) {\n return experts[expertKey]\n }\n const client = createApiClient({\n baseUrl: clientOptions.perstackApiBaseUrl,\n apiKey: clientOptions.perstackApiKey,\n })\n const result = await client.registry.experts.get(expertKey)\n if (!result.ok) {\n throw new Error(`Failed to resolve expert \"${expertKey}\": ${result.error.message}`)\n }\n return toRuntimeExpert(result.data)\n}\n\nfunction toRuntimeExpert(expert: RegistryExpert): Expert {\n const skills: Record<string, Skill> = Object.fromEntries(\n Object.entries(expert.skills).map(([name, skill]) => {\n switch (skill.type) {\n case \"mcpStdioSkill\":\n return [name, { ...skill, name }]\n case \"mcpSseSkill\":\n return [name, { ...skill, name }]\n case \"interactiveSkill\":\n return [name, { ...skill, name }]\n default: {\n throw new Error(`Unknown skill type: ${(skill as { type: string }).type}`)\n }\n }\n }),\n )\n return { ...expert, skills }\n}\n","import type { Expert, RunSetting } from \"@perstack/core\"\nimport { resolveExpertToRun as defaultResolveExpertToRun } from \"./resolve-expert.js\"\n\nexport type ResolveExpertToRunFn = (\n expertKey: string,\n experts: Record<string, Expert>,\n clientOptions: { perstackApiBaseUrl: string; perstackApiKey?: string },\n) => Promise<Expert>\n\nexport type SetupExpertsResult = {\n expertToRun: Expert\n experts: Record<string, Expert>\n}\n\nexport async function setupExperts(\n setting: RunSetting,\n resolveExpertToRun: ResolveExpertToRunFn = defaultResolveExpertToRun,\n): Promise<SetupExpertsResult> {\n const { expertKey } = setting\n const experts = { ...setting.experts }\n const clientOptions = {\n perstackApiBaseUrl: setting.perstackApiBaseUrl,\n perstackApiKey: setting.perstackApiKey,\n }\n const expertToRun = await resolveExpertToRun(expertKey, experts, clientOptions)\n experts[expertKey] = expertToRun\n for (const delegateName of expertToRun.delegates) {\n const delegate = await resolveExpertToRun(delegateName, experts, clientOptions)\n if (!delegate) {\n throw new Error(`Delegate ${delegateName} not found`)\n }\n experts[delegateName] = delegate\n }\n return { expertToRun, experts }\n}\n","import type { ThinkingPart } from \"@perstack/core\"\n\n/**\n * Reasoning part from AI SDK generateText result.\n * This matches the AI SDK ReasoningPart type.\n *\n * For Anthropic Extended Thinking, signature is in providerMetadata.anthropic.signature\n * (not providerOptions - that's for input, providerMetadata is for output)\n */\nexport interface ReasoningPart {\n type: \"reasoning\"\n text: string\n providerMetadata?: {\n anthropic?: {\n signature?: string\n }\n }\n}\n\n/**\n * Extract ThinkingPart array from AI SDK reasoning.\n * Used to preserve thinking blocks in conversation history for providers\n * that require them (Anthropic, Google).\n *\n * Note: For Anthropic, signature is required for all thinking blocks\n * when including them in conversation history.\n */\nexport function extractThinkingParts(\n reasoning: ReasoningPart[] | undefined,\n): Omit<ThinkingPart, \"id\">[] {\n if (!reasoning) return []\n return reasoning.map((r) => ({\n type: \"thinkingPart\" as const,\n thinking: r.text,\n // Signature is in providerMetadata for Anthropic (output from API)\n signature: r.providerMetadata?.anthropic?.signature,\n }))\n}\n\n/**\n * Extract thinking text from AI SDK reasoning as a single string.\n * Used for the completeReasoning event.\n */\nexport function extractThinkingText(reasoning: ReasoningPart[] | undefined): string {\n if (!reasoning) return \"\"\n return reasoning\n .filter((r) => r.text)\n .map((r) => r.text)\n .join(\"\\n\")\n}\n","import { readFile } from \"node:fs/promises\"\nimport type { MessagePart, SkillType, ToolCall, ToolResult } from \"@perstack/core\"\nimport type { BaseSkillManager } from \"../skill-manager/base.js\"\nimport { getSkillManagerByToolName } from \"../skill-manager/helpers.js\"\nimport type { McpSkillManager } from \"../skill-manager/mcp.js\"\nimport type { ToolExecutor } from \"./tool-executor.js\"\n\ntype FileInfo = { path: string; mimeType: string; size: number }\n\nfunction isFileInfo(value: unknown): value is FileInfo {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"path\" in value &&\n \"mimeType\" in value &&\n \"size\" in value &&\n typeof (value as FileInfo).path === \"string\" &&\n typeof (value as FileInfo).mimeType === \"string\" &&\n typeof (value as FileInfo).size === \"number\"\n )\n}\n\nasync function processFileToolResult(\n toolResult: ToolResult,\n toolName: \"readPdfFile\" | \"readImageFile\",\n): Promise<ToolResult> {\n const processedContents: MessagePart[] = []\n for (const part of toolResult.result) {\n if (part.type !== \"textPart\") {\n processedContents.push(part)\n continue\n }\n let fileInfo: FileInfo | undefined\n try {\n const parsed = JSON.parse(part.text)\n if (isFileInfo(parsed)) {\n fileInfo = parsed\n }\n } catch {\n processedContents.push(part)\n continue\n }\n if (!fileInfo) {\n processedContents.push(part)\n continue\n }\n const { path, mimeType } = fileInfo\n try {\n const buffer = await readFile(path)\n if (toolName === \"readImageFile\") {\n processedContents.push({\n type: \"imageInlinePart\",\n id: part.id,\n encodedData: buffer.toString(\"base64\"),\n mimeType,\n })\n } else {\n processedContents.push({\n type: \"fileInlinePart\",\n id: part.id,\n encodedData: buffer.toString(\"base64\"),\n mimeType,\n })\n }\n } catch (error) {\n processedContents.push({\n type: \"textPart\",\n id: part.id,\n text: `Failed to read file \"${path}\": ${error instanceof Error ? error.message : String(error)}`,\n })\n }\n }\n return { ...toolResult, result: processedContents }\n}\n\n/**\n * Executor for MCP (Model Context Protocol) tools.\n * Handles standard MCP tool calls including file processing for readPdfFile/readImageFile.\n */\nexport class McpToolExecutor implements ToolExecutor {\n readonly type: SkillType = \"mcp\"\n\n async execute(\n toolCall: ToolCall,\n skillManagers: Record<string, BaseSkillManager>,\n ): Promise<ToolResult> {\n const skillManager = await getSkillManagerByToolName(skillManagers, toolCall.toolName)\n if (skillManager.type !== \"mcp\") {\n throw new Error(`Incorrect SkillType, required MCP, got ${skillManager.type}`)\n }\n const result = await (skillManager as McpSkillManager).callTool(\n toolCall.toolName,\n toolCall.args,\n )\n const toolResult: ToolResult = {\n id: toolCall.id,\n skillName: toolCall.skillName,\n toolName: toolCall.toolName,\n result,\n }\n // Handle special file reading tools\n if (toolCall.toolName === \"readPdfFile\" || toolCall.toolName === \"readImageFile\") {\n return processFileToolResult(toolResult, toolCall.toolName)\n }\n return toolResult\n }\n}\n","import type { SkillType, ToolCall, ToolResult } from \"@perstack/core\"\nimport type { BaseSkillManager } from \"../skill-manager/base.js\"\nimport { McpToolExecutor } from \"./mcp-executor.js\"\nimport type { ToolExecutor } from \"./tool-executor.js\"\n\n/**\n * Factory for creating tool executors based on skill type.\n * Follows the Factory pattern from packages/docker.\n */\nexport class ToolExecutorFactory {\n private executors: Map<SkillType, ToolExecutor>\n\n constructor() {\n this.executors = new Map([\n [\"mcp\", new McpToolExecutor()],\n // delegate and interactive are handled specially (not executed here)\n ])\n }\n\n /**\n * Get the executor for a given skill type\n */\n getExecutor(type: SkillType): ToolExecutor | undefined {\n return this.executors.get(type)\n }\n\n /**\n * Execute a tool call using the appropriate executor\n */\n async execute(\n toolCall: ToolCall,\n type: SkillType,\n skillManagers: Record<string, BaseSkillManager>,\n ): Promise<ToolResult> {\n const executor = this.executors.get(type)\n if (!executor) {\n throw new Error(`No executor registered for skill type: ${type}`)\n }\n return executor.execute(toolCall, skillManagers)\n }\n\n /**\n * Check if a skill type can be executed locally (vs requiring delegation)\n */\n canExecuteLocally(type: SkillType): boolean {\n return type === \"mcp\"\n }\n}\n\n/**\n * Singleton factory instance for convenience\n */\nexport const toolExecutorFactory = new ToolExecutorFactory()\n","import type { SkillType, ToolCall } from \"@perstack/core\"\nimport type { BaseSkillManager } from \"../skill-manager/base.js\"\nimport { getSkillManagerByToolName } from \"../skill-manager/helpers.js\"\n\nexport type ClassifiedToolCall = {\n toolCall: ToolCall\n type: SkillType\n skillManager: BaseSkillManager\n}\n\nexport type ClassifiedToolCalls = {\n mcp: ClassifiedToolCall[]\n delegate: ClassifiedToolCall[]\n interactive: ClassifiedToolCall[]\n}\n\n/**\n * Get the skill type for a tool by name only\n */\nexport async function getToolTypeByName(\n toolName: string,\n skillManagers: Record<string, BaseSkillManager>,\n): Promise<SkillType> {\n const skillManager = await getSkillManagerByToolName(skillManagers, toolName)\n return skillManager.type\n}\n\n/**\n * Classify multiple tool calls by their skill type\n */\nexport async function classifyToolCalls(\n toolCalls: ToolCall[],\n skillManagers: Record<string, BaseSkillManager>,\n): Promise<ClassifiedToolCalls> {\n const classified: ClassifiedToolCalls = {\n mcp: [],\n delegate: [],\n interactive: [],\n }\n\n const results = await Promise.all(\n toolCalls.map(async (toolCall) => {\n const skillManager = await getSkillManagerByToolName(skillManagers, toolCall.toolName)\n return { toolCall, type: skillManager.type, skillManager }\n }),\n )\n\n for (const result of results) {\n classified[result.type].push(result)\n }\n\n return classified\n}\n","import {\n type DelegationTarget,\n type RunEvent,\n skipDelegates,\n stopRunByDelegate,\n} from \"@perstack/core\"\nimport { getSkillManagerByToolName } from \"../../skill-manager/index.js\"\nimport { getToolTypeByName } from \"../../tool-execution/index.js\"\nimport type { RunSnapshot } from \"../machine.js\"\n\n/**\n * CallingDelegates state: Process delegate tool calls.\n *\n * Responsibilities:\n * - Check if there are delegate tool calls in pendingToolCalls\n * - If delegates exist: build delegation targets and stopRunByDelegate\n * - If no delegates: skipDelegates to CallingInteractiveTools\n *\n * Transitions:\n * - stopRunByDelegate → Stopped (pauses for delegation)\n * - skipDelegates → CallingInteractiveTools (no delegates)\n */\nexport async function callingDelegatesLogic({\n setting,\n checkpoint,\n step,\n skillManagers,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n // Invariant: pendingToolCalls and partialToolResults must be defined when entering CallingDelegates\n if (step.pendingToolCalls === undefined || step.partialToolResults === undefined) {\n throw new Error(\"CallingDelegates: tool handling state is undefined (invariant violation)\")\n }\n\n if (step.pendingToolCalls.length === 0) {\n // No pending tool calls - skip to interactive tools (which will then skip to resolving)\n return skipDelegates(setting, checkpoint, {})\n }\n\n // Classify pending tool calls\n const toolCallTypes = await Promise.all(\n step.pendingToolCalls.map(async (tc) => ({\n toolCall: tc,\n type: await getToolTypeByName(tc.toolName, skillManagers),\n })),\n )\n\n const delegateToolCalls = toolCallTypes\n .filter((t) => t.type === \"delegate\")\n .map((t) => t.toolCall)\n const nonDelegateToolCalls = toolCallTypes\n .filter((t) => t.type !== \"delegate\")\n .map((t) => t.toolCall)\n\n if (delegateToolCalls.length === 0) {\n // No delegate tool calls - skip to interactive tools\n return skipDelegates(setting, checkpoint, {})\n }\n\n // Build delegation targets\n const delegations: DelegationTarget[] = await Promise.all(\n delegateToolCalls.map(async (tc) => {\n const skillManager = await getSkillManagerByToolName(skillManagers, tc.toolName)\n if (!skillManager.expert) {\n throw new Error(`Delegation error: skill manager \"${tc.toolName}\" not found`)\n }\n if (!tc.args || !tc.args.query || typeof tc.args.query !== \"string\") {\n throw new Error(`Delegation error: query is undefined for ${tc.toolName}`)\n }\n return {\n expert: {\n key: skillManager.expert.key,\n name: skillManager.expert.name,\n version: skillManager.expert.version,\n },\n toolCallId: tc.id,\n toolName: tc.toolName,\n query: tc.args.query,\n }\n }),\n )\n\n return stopRunByDelegate(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByDelegate\",\n delegateTo: delegations,\n pendingToolCalls: nonDelegateToolCalls,\n partialToolResults: step.partialToolResults,\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n })\n}\n","import { type RunEvent, resolveToolResults, stopRunByInteractiveTool } from \"@perstack/core\"\nimport type { RunSnapshot } from \"../machine.js\"\n\n/**\n * CallingInteractiveTools state: Process interactive tool calls.\n *\n * Responsibilities:\n * - If interactive tools exist in pendingToolCalls: stopRunByInteractiveTool\n * - If no pending tool calls: resolveToolResults (from partialToolResults)\n *\n * Note: By the time we reach this state, pendingToolCalls should only contain\n * interactive tools (delegates have been processed in CallingDelegates).\n *\n * Transitions:\n * - stopRunByInteractiveTool → Stopped (pauses for user input)\n * - resolveToolResults → ResolvingToolResult (no interactive tools)\n */\nexport async function callingInteractiveToolsLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n // Invariant: pendingToolCalls and partialToolResults must be defined when entering CallingInteractiveTools\n if (step.pendingToolCalls === undefined || step.partialToolResults === undefined) {\n throw new Error(\n \"CallingInteractiveTools: tool handling state is undefined (invariant violation)\",\n )\n }\n\n // If no pending tool calls, resolve with partial results\n if (step.pendingToolCalls.length === 0) {\n return resolveToolResults(setting, checkpoint, {\n toolResults: step.partialToolResults,\n })\n }\n\n // All remaining pendingToolCalls are interactive tools\n // Stop run for interactive tool processing\n return stopRunByInteractiveTool(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByInteractiveTool\",\n pendingToolCalls: step.pendingToolCalls,\n partialToolResults: step.partialToolResults,\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type {\n ExpertMessage,\n FileBinaryPart,\n FileInlinePart,\n FileUrlPart,\n ImageBinaryPart,\n ImageInlinePart,\n ImageUrlPart,\n InstructionMessage,\n Message,\n TextPart,\n ThinkingPart,\n ToolCallPart,\n ToolMessage,\n ToolResultPart,\n UserMessage,\n} from \"@perstack/core\"\nimport type {\n AssistantModelMessage,\n FilePart as FileModelPart,\n ImagePart as ImageModelPart,\n ModelMessage,\n SystemModelMessage,\n TextPart as TextModelPart,\n ToolCallPart as ToolCallModelPart,\n ToolModelMessage,\n ToolResultPart as ToolResultModelPart,\n UserModelMessage,\n} from \"ai\"\nimport { dedent } from \"ts-dedent\"\n\nexport function createUserMessage(\n contents: Array<\n | Omit<TextPart, \"id\">\n | Omit<ImageUrlPart, \"id\">\n | Omit<ImageInlinePart, \"id\">\n | Omit<ImageBinaryPart, \"id\">\n | Omit<FileUrlPart, \"id\">\n | Omit<FileInlinePart, \"id\">\n | Omit<FileBinaryPart, \"id\">\n >,\n): UserMessage {\n return {\n type: \"userMessage\",\n contents: contents.map((part) => ({\n ...part,\n id: createId(),\n })),\n id: createId(),\n }\n}\n\nexport function createExpertMessage(\n contents: Array<Omit<TextPart, \"id\"> | Omit<ToolCallPart, \"id\"> | Omit<ThinkingPart, \"id\">>,\n): ExpertMessage {\n return {\n type: \"expertMessage\",\n contents: contents.map((part) => ({\n ...part,\n id: createId(),\n })),\n id: createId(),\n }\n}\n\nexport function createToolMessage(\n contents: Array<\n Omit<ToolResultPart, \"id\" | \"contents\"> & {\n contents: Array<\n Omit<TextPart, \"id\"> | Omit<ImageInlinePart, \"id\"> | Omit<FileInlinePart, \"id\">\n >\n }\n >,\n): ToolMessage {\n return {\n type: \"toolMessage\",\n contents: contents.map((part) => ({\n ...part,\n contents: part.contents.map((part) => ({\n ...part,\n id: createId(),\n })),\n id: createId(),\n })),\n id: createId(),\n }\n}\n\nexport function messageToCoreMessage(message: Message): ModelMessage {\n switch (message.type) {\n case \"instructionMessage\":\n return {\n role: \"system\",\n content: instructionContentsToCoreContent(message.contents),\n providerOptions: message.cache\n ? {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n }\n : undefined,\n }\n case \"userMessage\":\n return {\n role: \"user\",\n content: userContentsToCoreContent(message.contents),\n providerOptions: message.cache\n ? {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n }\n : undefined,\n }\n case \"expertMessage\":\n return {\n role: \"assistant\",\n content: expertContentsToCoreContent(message.contents),\n providerOptions: message.cache\n ? {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n }\n : undefined,\n }\n case \"toolMessage\":\n return {\n role: \"tool\",\n content: toolContentsToCoreContent(message.contents),\n providerOptions: message.cache\n ? {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n }\n : undefined,\n }\n }\n}\nfunction instructionContentsToCoreContent(\n contents: InstructionMessage[\"contents\"],\n): SystemModelMessage[\"content\"] {\n return contents.reduce((acc, part) => {\n return dedent`\n ${acc}\n ${part.text}\n `.trim()\n }, \"\" as string)\n}\nfunction userContentsToCoreContent(contents: UserMessage[\"contents\"]): UserModelMessage[\"content\"] {\n return contents.map((part) => {\n switch (part.type) {\n case \"textPart\":\n return textPartToCoreTextPart(part)\n case \"imageUrlPart\":\n return imageUrlPartToCoreImagePart(part)\n case \"imageInlinePart\":\n return imageInlinePartToCoreImagePart(part)\n case \"imageBinaryPart\":\n return imageBinaryPartToCoreImagePart(part)\n case \"fileUrlPart\":\n return fileUrlPartToCoreFilePart(part)\n case \"fileInlinePart\":\n return fileInlinePartToCoreFilePart(part)\n case \"fileBinaryPart\":\n return fileBinaryPartToCoreFilePart(part)\n default:\n throw new Error(`Unknown user content type: ${(part as { type: string }).type}`)\n }\n })\n}\nfunction expertContentsToCoreContent(\n contents: ExpertMessage[\"contents\"],\n): AssistantModelMessage[\"content\"] {\n return contents.map((part) => {\n switch (part.type) {\n case \"textPart\":\n return textPartToCoreTextPart(part)\n case \"toolCallPart\":\n return toolCallPartToCoreToolCallPart(part)\n case \"thinkingPart\":\n return thinkingPartToCoreThinkingPart(part)\n default:\n throw new Error(`Unknown expert content type: ${(part as { type: string }).type}`)\n }\n })\n}\nfunction toolContentsToCoreContent(contents: ToolMessage[\"contents\"]): ToolModelMessage[\"content\"] {\n return contents.map((part) => {\n switch (part.type) {\n case \"toolResultPart\":\n return toolResultPartToCoreToolResultPart(part)\n default:\n throw new Error(`Unknown tool content type: ${(part as { type: string }).type}`)\n }\n })\n}\nfunction textPartToCoreTextPart(part: TextPart): TextModelPart {\n return {\n type: \"text\",\n text: part.text,\n }\n}\nfunction imageUrlPartToCoreImagePart(part: ImageUrlPart): ImageModelPart {\n return {\n type: \"image\",\n image: part.url,\n mediaType: part.mimeType,\n }\n}\nfunction imageInlinePartToCoreImagePart(part: ImageInlinePart): ImageModelPart {\n return {\n type: \"image\",\n image: part.encodedData,\n mediaType: part.mimeType,\n }\n}\nfunction imageBinaryPartToCoreImagePart(part: ImageBinaryPart): ImageModelPart {\n return {\n type: \"image\",\n image: part.data,\n mediaType: part.mimeType,\n }\n}\nfunction fileUrlPartToCoreFilePart(part: FileUrlPart): FileModelPart {\n return {\n type: \"file\",\n data: part.url,\n mediaType: part.mimeType,\n }\n}\nfunction fileInlinePartToCoreFilePart(part: FileInlinePart): FileModelPart {\n return {\n type: \"file\",\n data: part.encodedData,\n mediaType: part.mimeType,\n }\n}\nfunction fileBinaryPartToCoreFilePart(part: FileBinaryPart): FileModelPart {\n return {\n type: \"file\",\n data: part.data,\n mediaType: part.mimeType,\n }\n}\nfunction toolCallPartToCoreToolCallPart(part: ToolCallPart): ToolCallModelPart {\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.args,\n }\n}\nfunction thinkingPartToCoreThinkingPart(part: ThinkingPart): {\n type: \"reasoning\"\n text: string\n providerOptions?: Record<string, Record<string, string>>\n} {\n return {\n type: \"reasoning\",\n text: part.thinking,\n providerOptions: part.signature ? { anthropic: { signature: part.signature } } : undefined,\n }\n}\nfunction toolResultPartToCoreToolResultPart(part: ToolResultPart): ToolResultModelPart {\n const { contents } = part\n if (contents.length === 1 && contents[0].type === \"textPart\") {\n return {\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: { type: \"text\" as const, value: contents[0].text },\n }\n }\n const contentValue = contents.map((content) => {\n if (content.type === \"textPart\") {\n return { type: \"text\" as const, text: content.text }\n }\n return { type: \"media\" as const, data: content.encodedData, mediaType: content.mimeType }\n })\n return {\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: { type: \"content\" as const, value: contentValue },\n }\n}\n","import {\n attemptCompletion,\n completeRun,\n finishMcpTools,\n type RunEvent,\n resolveToolResults,\n type ToolResult,\n} from \"@perstack/core\"\nimport { calculateContextWindowUsage } from \"../../helpers/model.js\"\nimport { createEmptyUsage, sumUsage } from \"../../helpers/usage.js\"\nimport { createExpertMessage, createToolMessage } from \"../../messages/message.js\"\nimport { classifyToolCalls, toolExecutorFactory } from \"../../tool-execution/index.js\"\nimport type { RunSnapshot } from \"../machine.js\"\n\nfunction hasRemainingTodos(toolResult: ToolResult): boolean {\n const firstPart = toolResult.result[0]\n if (!firstPart || firstPart.type !== \"textPart\") {\n return false\n }\n try {\n const parsed = JSON.parse(firstPart.text)\n return Array.isArray(parsed.remainingTodos) && parsed.remainingTodos.length > 0\n } catch {\n return false\n }\n}\n\n/**\n * Extract textPart from the last expert message.\n * When LLM generates both text and attemptCompletion in one response,\n * we should use that text as the final result instead of re-generating.\n */\nfunction extractTextFromLastMessage(\n checkpoint: RunSnapshot[\"context\"][\"checkpoint\"],\n): string | undefined {\n const lastMessage = checkpoint.messages[checkpoint.messages.length - 1]\n if (!lastMessage || lastMessage.type !== \"expertMessage\") {\n return undefined\n }\n const textPart = lastMessage.contents.find((c) => c.type === \"textPart\")\n if (!textPart || textPart.type !== \"textPart\") {\n return undefined\n }\n // Only return if there's actual content (not just whitespace)\n const text = textPart.text.trim()\n return text.length > 0 ? text : undefined\n}\n\n/**\n * CallingMcpTools state: Execute MCP tool calls in parallel.\n *\n * Responsibilities:\n * - Execute MCP tools in parallel\n * - Handle attemptCompletion specially (→ GeneratingRunResult or completeRun)\n * - Classify remaining tool calls and route to appropriate state\n *\n * Transitions:\n * - attemptCompletion → GeneratingRunResult (needs LLM to generate final result)\n * - completeRun → Stopped (attemptCompletion with existing text)\n * - finishMcpTools → CallingDelegates (has delegate/interactive tools remaining)\n * - resolveToolResults → ResolvingToolResult (MCP only, no other tools)\n */\nexport async function callingMcpToolsLogic({\n setting,\n checkpoint,\n step,\n skillManagers,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n // Invariant: pendingToolCalls and partialToolResults must be defined when entering CallingMcpTools\n if (step.pendingToolCalls === undefined || step.partialToolResults === undefined) {\n throw new Error(\"CallingMcpTools: tool handling state is undefined (invariant violation)\")\n }\n if (step.pendingToolCalls.length === 0) {\n throw new Error(\"CallingMcpTools: pendingToolCalls is empty (invariant violation)\")\n }\n\n const pendingToolCalls = step.pendingToolCalls\n const toolResults: ToolResult[] = [...step.partialToolResults]\n\n // Handle attemptCompletion specially\n const attemptCompletionTool = pendingToolCalls.find(\n (tc) => tc.skillName === \"@perstack/base\" && tc.toolName === \"attemptCompletion\",\n )\n if (attemptCompletionTool) {\n const toolResult = await toolExecutorFactory.execute(\n attemptCompletionTool,\n \"mcp\",\n skillManagers,\n )\n if (hasRemainingTodos(toolResult)) {\n return resolveToolResults(setting, checkpoint, { toolResults: [toolResult] })\n }\n\n // Check if LLM already generated a text response along with attemptCompletion\n // If so, use that text directly instead of transitioning to GeneratingRunResult\n const existingText = extractTextFromLastMessage(checkpoint)\n if (existingText) {\n // Build tool message for the attemptCompletion result\n const toolResultPart = {\n type: \"toolResultPart\" as const,\n toolCallId: toolResult.id,\n toolName: attemptCompletionTool.toolName,\n contents: toolResult.result.filter(\n (part) =>\n part.type === \"textPart\" ||\n part.type === \"imageInlinePart\" ||\n part.type === \"fileInlinePart\",\n ),\n }\n const toolMessage = createToolMessage([toolResultPart])\n // Create expertMessage with the existing text for delegation result handling\n const expertMessage = createExpertMessage([{ type: \"textPart\", text: existingText }])\n const newMessages = [toolMessage, expertMessage]\n const newUsage = sumUsage(checkpoint.usage, createEmptyUsage())\n\n // Complete run directly with the existing text\n return completeRun(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n messages: [...checkpoint.messages, ...newMessages],\n usage: newUsage,\n contextWindowUsage: checkpoint.contextWindow\n ? calculateContextWindowUsage(newUsage, checkpoint.contextWindow)\n : undefined,\n status: \"completed\",\n // Clear tool handling state on completion\n pendingToolCalls: undefined,\n partialToolResults: undefined,\n },\n step: {\n ...step,\n newMessages: [...step.newMessages, ...newMessages],\n toolResults: [toolResult],\n finishedAt: Date.now(),\n },\n text: existingText,\n usage: createEmptyUsage(),\n })\n }\n\n // No existing text - transition to GeneratingRunResult to generate final result\n return attemptCompletion(setting, checkpoint, { toolResult })\n }\n\n // Classify tool calls by type\n const classified = await classifyToolCalls(pendingToolCalls, skillManagers)\n\n // Execute MCP tools\n if (classified.mcp.length > 0) {\n const mcpResults = await Promise.all(\n classified.mcp.map((c) => toolExecutorFactory.execute(c.toolCall, \"mcp\", skillManagers)),\n )\n toolResults.push(...mcpResults)\n }\n\n // Check if there are delegates or interactive tools to process\n const delegateToolCalls = classified.delegate.map((c) => c.toolCall)\n const interactiveToolCalls = classified.interactive.map((c) => c.toolCall)\n\n if (delegateToolCalls.length > 0 || interactiveToolCalls.length > 0) {\n // Transition to CallingDelegates with partial results and pending tool calls\n return finishMcpTools(setting, checkpoint, {\n partialToolResults: toolResults,\n pendingToolCalls: [...delegateToolCalls, ...interactiveToolCalls],\n })\n }\n\n // No delegates or interactive tools - go directly to ResolvingToolResult\n return resolveToolResults(setting, checkpoint, { toolResults })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport { continueToNextStep, type RunEvent, stopRunByExceededMaxSteps } from \"@perstack/core\"\nimport type { RunSnapshot } from \"../machine.js\"\n\n/**\n * FinishingStep state: Complete current step and decide next action.\n *\n * Responsibilities:\n * - Check if max steps exceeded\n * - Increment step number for next iteration\n *\n * Transitions:\n * - continueToNextStep → PreparingForStep (continue loop)\n * - stopRunByExceededMaxSteps → Stopped (limit reached)\n */\nexport async function finishingStepLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (setting.maxSteps !== undefined && checkpoint.stepNumber >= setting.maxSteps) {\n return stopRunByExceededMaxSteps(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByExceededMaxSteps\",\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n })\n }\n return continueToNextStep(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n nextCheckpoint: {\n ...checkpoint,\n id: createId(),\n stepNumber: checkpoint.stepNumber + 1,\n // Clear tool handling state for next step\n pendingToolCalls: undefined,\n partialToolResults: undefined,\n },\n })\n}\n","import {\n completeRun,\n createStreamingEvent,\n type RunEvent,\n retry,\n stopRunByError,\n type TextPart,\n type ThinkingPart,\n} from \"@perstack/core\"\nimport { calculateContextWindowUsage } from \"../../helpers/model.js\"\nimport {\n extractThinkingParts,\n extractThinkingText,\n type ReasoningPart,\n} from \"../../helpers/thinking.js\"\nimport { createEmptyUsage, sumUsage, usageFromGenerateTextResult } from \"../../helpers/usage.js\"\nimport type { StreamCallbacks } from \"../../llm/types.js\"\nimport {\n createExpertMessage,\n createToolMessage,\n createUserMessage,\n messageToCoreMessage,\n} from \"../../messages/message.js\"\nimport type { RunSnapshot } from \"../machine.js\"\n\n/**\n * GeneratingRunResult state: Generate final result after attemptCompletion.\n *\n * Responsibilities:\n * - Call LLM to generate final text response\n * - Stream result with reasoning/result callbacks\n * - Build tool message from attemptCompletion result\n *\n * Transitions:\n * - completeRun → Stopped (successful completion)\n * - retry → FinishingStep (retryable error)\n * - stopRunByError → Stopped (non-retryable error)\n */\nexport async function generatingRunResultLogic({\n setting,\n checkpoint,\n step,\n eventListener,\n llmExecutor,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n if (!step.toolCalls || !step.toolResults || step.toolResults.length === 0) {\n throw new Error(\"No tool calls or tool results found\")\n }\n const toolResultParts = step.toolResults.map((toolResult) => {\n const toolCall = step.toolCalls?.find((tc) => tc.id === toolResult.id)\n return {\n type: \"toolResultPart\" as const,\n toolCallId: toolResult.id,\n toolName: toolCall?.toolName ?? toolResult.toolName,\n contents: toolResult.result.filter(\n (part) =>\n part.type === \"textPart\" ||\n part.type === \"imageInlinePart\" ||\n part.type === \"fileInlinePart\",\n ),\n }\n })\n const toolMessage = createToolMessage(toolResultParts)\n const { messages } = checkpoint\n const coreMessages = [...messages, toolMessage].map(messageToCoreMessage)\n\n // Track if reasoning/result was completed via callback (to avoid duplicate emissions)\n let reasoningCompletedViaCallback = false\n let _resultCompletedViaCallback = false\n\n // Create streaming callbacks for fire-and-forget event emission\n const callbacks: StreamCallbacks = {\n onReasoningStart: () => {\n eventListener(createStreamingEvent(\"startStreamingReasoning\", setting, checkpoint, {}))\n },\n onReasoningDelta: (delta) => {\n eventListener(createStreamingEvent(\"streamReasoning\", setting, checkpoint, { delta }))\n },\n onReasoningComplete: (text) => {\n // Emit completeStreamingReasoning before result phase starts\n eventListener(\n createStreamingEvent(\"completeStreamingReasoning\", setting, checkpoint, { text }),\n )\n reasoningCompletedViaCallback = true\n },\n onResultStart: () => {\n eventListener(createStreamingEvent(\"startStreamingRunResult\", setting, checkpoint, {}))\n },\n onResultDelta: (delta) => {\n eventListener(createStreamingEvent(\"streamRunResult\", setting, checkpoint, { delta }))\n },\n onResultComplete: (text) => {\n eventListener(\n createStreamingEvent(\"completeStreamingRunResult\", setting, checkpoint, { text }),\n )\n _resultCompletedViaCallback = true\n },\n }\n\n const executionResult = await llmExecutor.streamText(\n {\n messages: coreMessages,\n maxRetries: setting.maxRetries,\n tools: {}, // No tools for run result generation\n abortSignal: AbortSignal.timeout(setting.timeout),\n reasoningBudget: setting.reasoningBudget,\n },\n callbacks,\n )\n\n if (!executionResult.success) {\n const { error, isRetryable } = executionResult\n const currentRetryCount = checkpoint.retryCount ?? 0\n if (!isRetryable || currentRetryCount >= setting.maxRetries) {\n return stopRunByError(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByError\",\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n error: {\n name: error.name ?? \"Error\",\n message:\n currentRetryCount >= setting.maxRetries\n ? `Max retries (${setting.maxRetries}) exceeded: ${error.message}`\n : error.message,\n statusCode: error.statusCode,\n isRetryable: false,\n },\n })\n }\n const reason = JSON.stringify({ error: error.name ?? \"Error\", message: error.message })\n return retry(setting, checkpoint, {\n reason,\n newMessages: [toolMessage, createUserMessage([{ type: \"textPart\", text: reason }])],\n usage: createEmptyUsage(),\n })\n }\n\n const generationResult = executionResult.result\n const usage = usageFromGenerateTextResult(generationResult)\n const { text, reasoning } = generationResult\n\n // Extract thinking from reasoning (Anthropic, Google)\n const thinkingParts = extractThinkingParts(reasoning as ReasoningPart[] | undefined)\n const thinkingText = extractThinkingText(reasoning as ReasoningPart[] | undefined)\n\n // Build ExpertMessage with ThinkingPart + TextPart\n // Always include textPart even if empty - required for delegation result handling\n const expertContents: Array<Omit<ThinkingPart, \"id\"> | Omit<TextPart, \"id\">> = [\n ...thinkingParts,\n { type: \"textPart\" as const, text: text ?? \"\" },\n ]\n const newMessages = [toolMessage, createExpertMessage(expertContents)]\n\n // Note: completeStreamingReasoning is emitted via onReasoningComplete callback during streaming\n // Fallback emission only if callback wasn't triggered (should be rare)\n if (thinkingText && !reasoningCompletedViaCallback) {\n await eventListener(\n createStreamingEvent(\"completeStreamingReasoning\", setting, checkpoint, {\n text: thinkingText,\n }),\n )\n }\n\n const newUsage = sumUsage(checkpoint.usage, usage)\n return completeRun(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n messages: [...messages, ...newMessages],\n usage: newUsage,\n contextWindowUsage: checkpoint.contextWindow\n ? calculateContextWindowUsage(newUsage, checkpoint.contextWindow)\n : undefined,\n status: \"completed\",\n // Clear tool handling state on completion\n pendingToolCalls: undefined,\n partialToolResults: undefined,\n },\n step: {\n ...step,\n newMessages: [...step.newMessages, ...newMessages],\n finishedAt: Date.now(),\n usage: sumUsage(step.usage, usage),\n },\n text,\n usage,\n })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport {\n callTools,\n completeRun,\n createStreamingEvent,\n type RunEvent,\n retry,\n stopRunByError,\n type TextPart,\n type ThinkingPart,\n type ToolCall,\n type ToolCallPart,\n} from \"@perstack/core\"\nimport { calculateContextWindowUsage } from \"../../helpers/model.js\"\nimport {\n extractThinkingParts,\n extractThinkingText,\n type ReasoningPart,\n} from \"../../helpers/thinking.js\"\nimport { createEmptyUsage, sumUsage, usageFromGenerateTextResult } from \"../../helpers/usage.js\"\nimport type { StreamCallbacks } from \"../../llm/types.js\"\nimport {\n createExpertMessage,\n createToolMessage,\n createUserMessage,\n messageToCoreMessage,\n} from \"../../messages/message.js\"\nimport type { BaseSkillManager } from \"../../skill-manager/index.js\"\nimport { getSkillManagerByToolName, getToolSet } from \"../../skill-manager/index.js\"\nimport type { RunSnapshot } from \"../machine.js\"\n\ntype ClassifiedToolCall = {\n toolCallId: string\n toolName: string\n input: Record<string, unknown>\n skillManager: BaseSkillManager\n}\n\nasync function classifyToolCalls(\n toolCalls: Array<{ toolCallId: string; toolName: string; input: unknown }>,\n skillManagers: Record<string, BaseSkillManager>,\n): Promise<ClassifiedToolCall[]> {\n return Promise.all(\n toolCalls.map(async (tc) => {\n const skillManager = await getSkillManagerByToolName(skillManagers, tc.toolName)\n return {\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n input: tc.input as Record<string, unknown>,\n skillManager,\n }\n }),\n )\n}\n\nfunction sortToolCallsByPriority(toolCalls: ClassifiedToolCall[]): ClassifiedToolCall[] {\n const priority = { mcp: 0, delegate: 1, interactive: 2 }\n return [...toolCalls].sort(\n (a, b) => (priority[a.skillManager.type] ?? 99) - (priority[b.skillManager.type] ?? 99),\n )\n}\n\nfunction buildToolCallParts(toolCalls: ClassifiedToolCall[]): Array<Omit<ToolCallPart, \"id\">> {\n return toolCalls.map((tc) => ({\n type: \"toolCallPart\" as const,\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n args: tc.input,\n }))\n}\n\nfunction buildToolCalls(toolCalls: ClassifiedToolCall[]): ToolCall[] {\n return toolCalls.map((tc) => ({\n id: tc.toolCallId,\n skillName: tc.skillManager.name,\n toolName: tc.toolName,\n args: tc.input,\n }))\n}\n\n/**\n * GeneratingToolCall state: Call LLM to generate tool calls or completion.\n *\n * Responsibilities:\n * - Stream text from LLM with reasoning callbacks\n * - Classify and sort tool calls by priority (MCP → Delegate → Interactive)\n * - Handle implicit completion (text only, no tool calls)\n * - Handle retry on empty generation or errors\n *\n * Transitions:\n * - callTools → CallingMcpTools (tool calls generated)\n * - completeRun → Stopped (text completion, no tool calls)\n * - retry → FinishingStep (retryable error)\n * - stopRunByError → Stopped (non-retryable error)\n */\nexport async function generatingToolCallLogic({\n setting,\n checkpoint,\n step,\n skillManagers,\n eventListener,\n llmExecutor,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n const { messages } = checkpoint\n\n // Track if reasoning was completed via callback (to avoid duplicate emissions)\n let reasoningCompletedViaCallback = false\n\n // Create streaming callbacks for fire-and-forget event emission\n // Note: Only emit reasoning events here. Result streaming events (startStreamingRunResult, streamRunResult)\n // are NOT emitted in GeneratingToolCall because we don't know if there will be tool calls\n // until streaming completes. Result streaming is only done in GeneratingRunResult.\n const callbacks: StreamCallbacks = {\n onReasoningStart: () => {\n eventListener(createStreamingEvent(\"startStreamingReasoning\", setting, checkpoint, {}))\n },\n onReasoningDelta: (delta) => {\n eventListener(createStreamingEvent(\"streamReasoning\", setting, checkpoint, { delta }))\n },\n onReasoningComplete: (text) => {\n // Emit completeStreamingReasoning when reasoning phase ends\n eventListener(\n createStreamingEvent(\"completeStreamingReasoning\", setting, checkpoint, { text }),\n )\n reasoningCompletedViaCallback = true\n },\n // onResultStart and onResultDelta intentionally not set - result streaming only in GeneratingRunResult\n }\n\n const executionResult = await llmExecutor.streamText(\n {\n messages: messages.map(messageToCoreMessage),\n maxRetries: setting.maxRetries,\n tools: await getToolSet(skillManagers),\n toolChoice: \"auto\",\n abortSignal: AbortSignal.timeout(setting.timeout),\n reasoningBudget: setting.reasoningBudget,\n },\n callbacks,\n )\n\n if (!executionResult.success) {\n const { error, isRetryable } = executionResult\n const currentRetryCount = checkpoint.retryCount ?? 0\n if (!isRetryable || currentRetryCount >= setting.maxRetries) {\n return stopRunByError(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByError\",\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n error: {\n name: error.name ?? \"Error\",\n message:\n currentRetryCount >= setting.maxRetries\n ? `Max retries (${setting.maxRetries}) exceeded: ${error.message}`\n : error.message,\n statusCode: error.statusCode,\n isRetryable: false,\n },\n })\n }\n const reason = JSON.stringify({ error: error.name ?? \"Error\", message: error.message })\n return retry(setting, checkpoint, {\n reason,\n newMessages: [createUserMessage([{ type: \"textPart\", text: reason }])],\n usage: createEmptyUsage(),\n })\n }\n\n const result = executionResult.result\n const usage = usageFromGenerateTextResult(result)\n const { text, toolCalls, finishReason, reasoning } = result\n // Extract thinking from reasoning (Anthropic, Google)\n const thinkingParts = extractThinkingParts(reasoning as ReasoningPart[] | undefined)\n const thinkingText = extractThinkingText(reasoning as ReasoningPart[] | undefined)\n\n // Text only = implicit completion (no tool calls)\n if (toolCalls.length === 0 && text) {\n const contents: Array<\n Omit<TextPart, \"id\"> | Omit<ToolCallPart, \"id\"> | Omit<ThinkingPart, \"id\">\n > = [...thinkingParts, { type: \"textPart\", text }]\n const newMessage = createExpertMessage(contents)\n const newUsage = sumUsage(checkpoint.usage, usage)\n\n // Note: completeStreamingReasoning is emitted via onReasoningComplete callback during streaming\n // Fallback emission only if callback wasn't triggered (should be rare)\n if (thinkingText && !reasoningCompletedViaCallback) {\n await eventListener(\n createStreamingEvent(\"completeStreamingReasoning\", setting, checkpoint, {\n text: thinkingText,\n }),\n )\n }\n\n return completeRun(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n messages: [...messages, newMessage],\n usage: newUsage,\n contextWindowUsage: checkpoint.contextWindow\n ? calculateContextWindowUsage(newUsage, checkpoint.contextWindow)\n : undefined,\n status: \"completed\",\n // Clear tool handling state on completion\n pendingToolCalls: undefined,\n partialToolResults: undefined,\n },\n step: {\n ...step,\n newMessages: [...step.newMessages, newMessage],\n finishedAt: Date.now(),\n usage: sumUsage(step.usage, usage),\n },\n text,\n usage,\n })\n }\n\n // Nothing generated = retry (with limit check)\n if (toolCalls.length === 0) {\n const currentRetryCount = checkpoint.retryCount ?? 0\n if (currentRetryCount >= setting.maxRetries) {\n return stopRunByError(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByError\",\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n error: {\n name: \"MaxRetriesExceeded\",\n message: `Max retries (${setting.maxRetries}) exceeded: No tool call or text generated`,\n isRetryable: false,\n },\n })\n }\n const reason = JSON.stringify({\n error: \"Error: No tool call or text generated\",\n message: \"You must generate a tool call or provide a response. Try again.\",\n })\n return retry(setting, checkpoint, {\n reason,\n newMessages: [createUserMessage([{ type: \"textPart\", text: reason }])],\n usage,\n })\n }\n const classified = await classifyToolCalls(toolCalls, skillManagers)\n const sorted = sortToolCallsByPriority(classified)\n if (finishReason === \"tool-calls\" || finishReason === \"stop\") {\n const toolCallParts = buildToolCallParts(sorted)\n // Order matters for Anthropic Extended Thinking: thinking → text → tool_use\n // text must come BEFORE tool_use, not after, to avoid breaking tool_result matching\n const contents: Array<\n Omit<TextPart, \"id\"> | Omit<ToolCallPart, \"id\"> | Omit<ThinkingPart, \"id\">\n > = [...thinkingParts, ...(text ? [{ type: \"textPart\" as const, text }] : []), ...toolCallParts]\n const allToolCalls = buildToolCalls(sorted)\n\n // Note: completeStreamingReasoning is emitted via onReasoningComplete callback during streaming\n // Fallback emission only if callback wasn't triggered (should be rare)\n if (thinkingText && !reasoningCompletedViaCallback) {\n await eventListener(\n createStreamingEvent(\"completeStreamingReasoning\", setting, checkpoint, {\n text: thinkingText,\n }),\n )\n }\n\n return callTools(setting, checkpoint, {\n newMessage: createExpertMessage(contents),\n toolCalls: allToolCalls,\n usage,\n })\n }\n if (finishReason === \"length\") {\n const firstToolCall = sorted[0]\n if (!firstToolCall) {\n throw new Error(\"No tool call found\")\n }\n const currentRetryCount = checkpoint.retryCount ?? 0\n if (currentRetryCount >= setting.maxRetries) {\n return stopRunByError(setting, checkpoint, {\n checkpoint: {\n ...checkpoint,\n status: \"stoppedByError\",\n },\n step: {\n ...step,\n finishedAt: Date.now(),\n },\n error: {\n name: \"MaxRetriesExceeded\",\n message: `Max retries (${setting.maxRetries}) exceeded: Generation length exceeded`,\n isRetryable: false,\n },\n })\n }\n const reason = JSON.stringify({\n error: \"Error: Tool call generation failed\",\n message: \"Generation length exceeded. Try again.\",\n })\n return retry(setting, checkpoint, {\n reason,\n newMessages: [\n createExpertMessage([\n {\n type: \"toolCallPart\",\n toolCallId: firstToolCall.toolCallId,\n toolName: firstToolCall.toolName,\n args: firstToolCall.input,\n },\n ]),\n createToolMessage([\n {\n type: \"toolResultPart\",\n toolCallId: firstToolCall.toolCallId,\n toolName: firstToolCall.toolName,\n contents: [{ type: \"textPart\", text: reason }],\n },\n ]),\n ],\n toolCalls: [\n {\n id: firstToolCall.toolCallId,\n skillName: firstToolCall.skillManager.name,\n toolName: firstToolCall.toolName,\n args: firstToolCall.input,\n },\n ],\n toolResults: [\n {\n id: firstToolCall.toolCallId,\n skillName: firstToolCall.skillManager.name,\n toolName: firstToolCall.toolName,\n result: [{ type: \"textPart\", id: createId(), text: reason }],\n },\n ],\n usage,\n })\n }\n throw new Error(`Unexpected finish reason: ${finishReason}`)\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type { Expert, InstructionMessage } from \"@perstack/core\"\nimport { dedent } from \"ts-dedent\"\n\nfunction getMetaInstruction(startedAt: number): string {\n return dedent`\n IMPORTANT:\n Based on the user's initial message, you must determine what needs to be done.\n You must iterate through hypothesis and verification to fulfill the task.\n YOU MUST CONTINUE TO CALL TOOLS UNTIL THE TASK IS COMPLETE.\n If you do not call tools, the task will be considered complete, and the agent loop will end.\n\n You operate in an agent loop, iteratively completing tasks through these steps:\n 1. Analyze Events: Understand user needs and current state through the event stream, focusing on the latest user messages and execution results\n 2. Select Tools: Choose the next tool call based on current state, task planning, relevant knowledge, and available data APIs\n 3. Wait for Execution: The selected tool action will be executed by the sandbox environment with new observations added to the event stream\n 4. Iterate: Choose only one tool call per iteration, patiently repeat the above steps until task completion\n 5. Notify Task Completion: Call attemptCompletion ONLY - do NOT include any text response with this tool call\n 6. Generate Final Results: AFTER attemptCompletion returns, you will be prompted to produce a final result in a SEPARATE response\n\n Conditions for ending the agent loop:\n If any of the following apply, **immediately call the attemptCompletion tool**.\n When the agent loop must end, calling any tool other than attemptCompletion is highly dangerous.\n Under all circumstances, strictly follow this rule.\n - When the task is complete\n - When the user's request is outside your expertise\n - When the user's request is unintelligible\n\n Rules for requests outside your area of expertise:\n - Tell your area of expertise to the user in final results\n\n Environment information:\n - Current time is ${new Date(startedAt).toISOString()}\n - Current working directory is ${process.cwd()}\n `\n}\n\nexport function createInstructionMessage(\n expert: Expert,\n experts: Record<string, Expert>,\n startedAt: number,\n): InstructionMessage {\n const instruction = dedent`\n You are Perstack, an AI expert that tackles tasks requested by users by utilizing all available tools.\n\n (The following information describes your nature and role as an AI, the mechanisms of the AI system, and other meta-cognitive aspects.)\n\n ${getMetaInstruction(startedAt)}\n\n ---\n (The following describes the objective, steps, rules, etc. regarding your expert task.)\n\n ${expert.instruction}\n\n ---\n (The following is an overview of each skill and the rules for calling tools.)\n\n ${getSkillRules(expert)}\n\n ---\n (The following is an overview of each delegate expert and the rules for calling tools.)\n\n You can delegate tasks to the following experts by calling delegate expert name as a tool:\n\n ${getDelegateRules(expert, experts)}\n `\n return {\n type: \"instructionMessage\",\n contents: [\n {\n id: createId(),\n type: \"textPart\",\n text: instruction,\n },\n ],\n id: createId(),\n cache: true,\n }\n}\n\nfunction getSkillRules(expert: Expert): string {\n return Object.values(expert.skills).reduce((acc, skill) => {\n if (!skill.rule) {\n return acc\n }\n return dedent`\n ${acc}\n\n \"${skill.name}\" skill rules:\n ${skill.rule}\n `.trim()\n }, \"\" as string)\n}\n\nfunction getDelegateRules(expert: Expert, experts: Record<string, Expert>): string {\n return expert.delegates.reduce((acc, delegateExpertName) => {\n const delegate = experts[delegateExpertName]\n if (!delegate) {\n return acc\n }\n return dedent`\n ${acc}\n\n About \"${delegate.name}\":\n ${delegate.description}\n `.trim()\n }, \"\" as string)\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport { type RunEvent, resumeFromStop, startRun, type ToolResult } from \"@perstack/core\"\nimport { createInstructionMessage } from \"../../messages/instruction-message.js\"\nimport { createUserMessage } from \"../../messages/message.js\"\nimport type { RunSnapshot } from \"../machine.js\"\n\n/**\n * Init state: Initialize run based on checkpoint status.\n *\n * Responsibilities:\n * - Fresh run (status: init) → startRun with instruction + user message\n * - Resume from delegation/interactive (stoppedByDelegate/stoppedByInteractiveTool)\n * → resumeFromStop with tool result merged into partialToolResults\n * - Continue existing run → startRun with user message only\n *\n * Transitions:\n * - startRun → PreparingForStep (new run or continue)\n * - resumeFromStop → ResumingFromStop (resume from delegation/interactive)\n */\nexport async function initLogic({\n setting,\n checkpoint,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n const { expertKey, experts } = setting\n const expert = experts[expertKey]\n switch (checkpoint.status) {\n case \"init\": {\n if (!setting.input.text) {\n throw new Error(\"Input message is undefined\")\n }\n return startRun(setting, checkpoint, {\n initialCheckpoint: checkpoint,\n inputMessages: [\n createInstructionMessage(expert, experts, setting.startedAt),\n createUserMessage([{ type: \"textPart\", text: setting.input.text }]),\n ],\n })\n }\n case \"stoppedByDelegate\":\n case \"stoppedByInteractiveTool\": {\n if (!setting.input.interactiveToolCallResult) {\n throw new Error(\"Interactive tool call result is undefined\")\n }\n const { toolCallId, toolName, skillName, text } = setting.input.interactiveToolCallResult\n const pendingToolCalls = checkpoint.pendingToolCalls ?? []\n const newToolResult: ToolResult = {\n id: toolCallId,\n skillName,\n toolName,\n result: [{ type: \"textPart\", id: createId(), text }],\n }\n const updatedPartialResults = [...(checkpoint.partialToolResults ?? []), newToolResult]\n const updatedPendingToolCalls = pendingToolCalls.filter((tc) => tc.id !== toolCallId)\n const updatedCheckpoint = {\n ...checkpoint,\n partialToolResults: updatedPartialResults,\n pendingToolCalls: updatedPendingToolCalls,\n }\n return resumeFromStop(setting, checkpoint, {\n checkpoint: updatedCheckpoint,\n })\n }\n default:\n if (!setting.input.text) {\n throw new Error(\"Input message is undefined\")\n }\n return startRun(setting, checkpoint, {\n initialCheckpoint: checkpoint,\n inputMessages: [createUserMessage([{ type: \"textPart\", text: setting.input.text }])],\n })\n }\n}\n","import { type RunEvent, startGeneration } from \"@perstack/core\"\nimport type { RunSnapshot } from \"../machine.js\"\n\n/**\n * PreparingForStep state: Start a new generation step.\n *\n * This state is entered only for fresh generation (not resume from stop).\n * Resume scenarios are handled by ResumingFromStop state.\n *\n * Transitions:\n * - startGeneration → GeneratingToolCall\n */\nexport async function preparingForStepLogic({\n setting,\n checkpoint,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n return startGeneration(setting, checkpoint, {\n messages: checkpoint.messages,\n })\n}\n","import { finishToolCall, type RunEvent } from \"@perstack/core\"\nimport { createToolMessage } from \"../../messages/message.js\"\nimport type { RunSnapshot } from \"../machine.js\"\n\n/**\n * ResolvingToolResult state: Create ToolMessage from tool results.\n *\n * Responsibilities:\n * - Create ToolMessage from step.toolResults\n * - This is the ONLY state responsible for adding ToolMessage to checkpoint.messages\n *\n * Transitions:\n * - finishToolCall → FinishingStep\n */\nexport async function resolvingToolResultLogic({\n setting,\n checkpoint,\n step,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n // Invariant: toolResults must be defined and non-empty when entering ResolvingToolResult\n if (step.toolResults === undefined || step.toolResults.length === 0) {\n throw new Error(\"ResolvingToolResult: toolResults is undefined or empty (invariant violation)\")\n }\n\n const toolResults = step.toolResults\n\n const toolResultParts = toolResults.map((toolResult) => {\n const toolCall = step.toolCalls?.find((tc) => tc.id === toolResult.id)\n return {\n type: \"toolResultPart\" as const,\n toolCallId: toolResult.id,\n toolName: toolCall?.toolName ?? toolResult.toolName,\n contents: toolResult.result.filter(\n (part) =>\n part.type === \"textPart\" ||\n part.type === \"imageInlinePart\" ||\n part.type === \"fileInlinePart\",\n ),\n }\n })\n\n return finishToolCall(setting, checkpoint, {\n newMessages: [createToolMessage(toolResultParts)],\n })\n}\n","import { proceedToInteractiveTools, type RunEvent, resolveToolResults } from \"@perstack/core\"\nimport type { RunSnapshot } from \"../machine.js\"\n\n/**\n * ResumingFromStop state: Resume from stoppedByDelegate or stoppedByInteractiveTool.\n *\n * This state is entered when:\n * - A delegation has completed and results are being merged back\n * - An interactive tool result has been received\n *\n * At this point:\n * - MCP tools have already been executed (in CallingMcpTools before the stop)\n * - Delegate tools have been executed (as separate runs)\n * - pendingToolCalls contains ONLY interactive tools (if any remain)\n * - partialToolResults contains results from MCP tools and completed delegates\n *\n * Transitions:\n * - proceedToInteractiveTools → CallingInteractiveTools (has pending interactive tools)\n * - resolveToolResults → ResolvingToolResult (all tools resolved)\n */\nexport async function resumingFromStopLogic({\n setting,\n checkpoint,\n}: RunSnapshot[\"context\"]): Promise<RunEvent> {\n // Invariant: pendingToolCalls and partialToolResults must be defined when entering ResumingFromStop\n if (checkpoint.pendingToolCalls === undefined || checkpoint.partialToolResults === undefined) {\n throw new Error(\"ResumingFromStop: tool handling state is undefined (invariant violation)\")\n }\n\n // If there are pending tool calls, they are interactive tools only\n // (guaranteed by state machine flow: MCP → Delegates → Interactive)\n if (checkpoint.pendingToolCalls.length > 0) {\n return proceedToInteractiveTools(setting, checkpoint, {\n pendingToolCalls: checkpoint.pendingToolCalls,\n partialToolResults: checkpoint.partialToolResults,\n })\n }\n\n // All tool calls have been resolved, proceed to create ToolMessage\n return resolveToolResults(setting, checkpoint, {\n toolResults: checkpoint.partialToolResults,\n })\n}\n","import type { Checkpoint, RunEvent, RunSetting, RuntimeEvent, Step } from \"@perstack/core\"\nimport { type ActorRefFrom, assign, type SnapshotFrom, setup } from \"xstate\"\nimport { calculateContextWindowUsage } from \"../helpers/model.js\"\nimport { createEmptyUsage, sumUsage } from \"../helpers/usage.js\"\nimport type { LLMExecutor } from \"../llm/index.js\"\nimport type { BaseSkillManager } from \"../skill-manager/index.js\"\nimport { callingDelegatesLogic } from \"./states/calling-delegates.js\"\nimport { callingInteractiveToolsLogic } from \"./states/calling-interactive-tools.js\"\nimport { callingMcpToolsLogic } from \"./states/calling-mcp-tools.js\"\nimport { finishingStepLogic } from \"./states/finishing-step.js\"\nimport { generatingRunResultLogic } from \"./states/generating-run-result.js\"\nimport { generatingToolCallLogic } from \"./states/generating-tool-call.js\"\nimport { initLogic } from \"./states/init.js\"\nimport { preparingForStepLogic } from \"./states/preparing-for-step.js\"\nimport { resolvingToolResultLogic } from \"./states/resolving-tool-result.js\"\nimport { resumingFromStopLogic } from \"./states/resuming-from-stop.js\"\n\nexport const runtimeStateMachine = setup({\n types: {\n input: {} as {\n setting: RunSetting\n initialCheckpoint: Checkpoint\n eventListener: (event: RunEvent | RuntimeEvent) => Promise<void>\n skillManagers: Record<string, BaseSkillManager>\n llmExecutor: LLMExecutor\n },\n context: {} as {\n setting: RunSetting\n step: Step\n checkpoint: Checkpoint\n eventListener: (event: RunEvent | RuntimeEvent) => Promise<void>\n skillManagers: Record<string, BaseSkillManager>\n llmExecutor: LLMExecutor\n },\n events: {} as RunEvent,\n },\n}).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QCUCuA7AdASXQSwBcBiWAgQwCcC10BtABgF1FQAHAe1kL3fRZAAeiAKz0AzJgDsAJgAsksZNlixs+gDZZAGhABPRIszCAjGIAcY4crPHhJyQF8HOmpgAKFMK0p50UAGLsFADKBF4k5FQA4mDoYBRkBDx0TPwcXEm8-EIIZmaymPRK8saSopL00tI6+gjq9JjSltLG9HnqZkqdTi4YmDFxCUl+ACrs7AA2AMJkExNEngQUugzMSCDp3FnrOcam0pgAnHbS9GeSZsIq6jWIh2KHUsYd9MbSwl2S6j0grgPxiV8UDGkxmcyIAGNZhMQRNVmlOFs+DtEPt1Jg3odpGVbFcrLcENIzOjbGYipIZMpnmYfn9YgDhsDxtNoZDobgwgkIUkAG5gWHw9abTLI0C7ImSTDqYTY2S45TCCwE54HUr1WRXSqHcRVWl9f5DIGwsHzKFzAAiYAmYCgiTAgrYiJF2VRYnoj1ehwskkOZTEz2EBMMJnMFnezxUF2+zl+fRNRuZCzgkz5sOQcFQEwIDo2TuSLoQpWJUvowl9Flk0sqBLlZik2Mkpjyan90d6WHjo0TnlgKf5AAt2KgoP3s6khXntmLUT6JL6PkoFJX1MZtHoRKIpdrK3sqorpG3Yx3oQnJknexM+W4IAAzfx4a054X5lGFn2PMTYlSyWQH32WAl1DKKV1Q6L1V1EWQ9WPOZT3mHs+2wABbMgYHvR9x0dDIX2nN8zEeOVjGORsmgsMQCTJYRMGJORwP9MwDxpGNXE7Jkz0SMIkNYAgpnYLjrRFJ9J1FQQZzJTBPxUfDDjlN1OgJIkSUVUtDlXCpsUPVx0wvHk4O0zNiBvXw8FgftjWhITsKnUTCU-SU92JMlfSaGtjDrGQKSbfJxGeaDMG0lMjUHYdRyIIz8FM8y5kspECyabFGneRz3RkN011qOwGnUbcVzeJKDz8gLLyBa87wfMAwuMyLmRNGLnVfeL7KSl5nPI9c6mA9RQPwmwNVLQrk2KvxkNQsB0Iq8KTLMmqLMw3MrJEnJGsSxUWtSgkfSU-JDmIqNKj8g1AT8Gh9KzSE+NYASwBoOqcJs+K61sDo5SKBifwU4tSRUtTKi+KDmLjE9hvQTkyG5PBU0TUh2FYGgACFdA5AFwchyZbus3YyklYRst/DUlDEaU2tqFUMS+NyPmlPZDiAvzWMta1bTCCIYfh3QGZtO10cWmcLiOQnG3qHHiSDbGvM-Ex1EjYk/PvCL+yBUJwghXhhlQfl2AAOTAAQCCV1hubiqxjCMRUZXMGSvVUZV6A1LcuorDp8I0WWqoVvx9ZZ2GMARgBRAQITASBIAAWTIAR9dgQ2Gs0Ki8nyK4bCuDVRZNzRwxse4GK6pwY3QdgIDgfgaARBaCxUBosU0cw5TLUiCQAWlkR4nPdbVCeyld/vbHB8AIUvYtfRQ6yr6xa6xcwCTLaiadj1dKxk1phD8jwvB8PxAhCMJWAH+rcKAyuyVaa5Wi+KeW9njV59xpeDvpQ0u1BaFd7u3Y2keDpO7LW2FDLc+Z6AnsPEO4ZYAxghMOCL8MaojsJKYi8cHZ5C9EGNoRg1CdH3GcZeYD/KDV0o-CYp1+4TjLg1cQkp-SfjDE9Ew1R2o-hNnsUs1MfR-UuANHSQUhwjmIVhQeuFTg-ilF8GUblTgKDoRlBQhQJEaiJMnfCHDAp+FKuNKBPNCSlgaOIeQttWxS0DO1bKdY9HvH9D+FotMcFFXwVAEaaFyrqLirbBo1M7KvFUDJCiRJGgalUM3LEMk5R30GEdKAJ0MxZicWQlQEklAyillWVoZgUF1isG0MoDEsF0yBnYkGyNeQa0mNE3CtgiIYnEEBToFwvS+mVPkU20l8JWG1OIHJsE/AcyZmAEpNlbBqEwLo7yVRbY3HatPfCXUOgfCsGSTQmk+hyymorbevSloykeFYCkrxfqrmJiIaRRQ7JbP8Q8PyoQYasEgGsxA2JWiNB/jjdQTRqb1IkP6OwRF8KMSAbnBwQA */\n id: \"Run\",\n initial: \"Init\",\n context: ({ input }) => ({\n setting: input.setting,\n checkpoint: input.initialCheckpoint,\n step: {\n stepNumber: input.initialCheckpoint.stepNumber,\n inputMessages: [],\n newMessages: [],\n usage: createEmptyUsage(),\n startedAt: Date.now(),\n },\n eventListener: input.eventListener,\n skillManagers: input.skillManagers,\n llmExecutor: input.llmExecutor,\n }),\n states: {\n Init: {\n on: {\n startRun: {\n target: \"PreparingForStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n status: \"proceeding\",\n messages: [...context.checkpoint.messages, ...event.inputMessages],\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n inputMessages: event.inputMessages,\n }) satisfies Step,\n }),\n },\n resumeFromStop: {\n target: \"ResumingFromStop\",\n actions: assign({\n checkpoint: ({ event }) =>\n ({\n ...event.checkpoint,\n status: \"proceeding\",\n }) satisfies Checkpoint,\n }),\n },\n },\n },\n\n PreparingForStep: {\n on: {\n startGeneration: {\n target: \"GeneratingToolCall\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n stepNumber: context.checkpoint.stepNumber,\n inputMessages: context.step.inputMessages ?? [],\n newMessages: [],\n usage: createEmptyUsage(),\n startedAt: event.timestamp,\n }) satisfies Step,\n }),\n },\n },\n },\n\n ResumingFromStop: {\n on: {\n proceedToInteractiveTools: {\n target: \"CallingInteractiveTools\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n stepNumber: context.checkpoint.stepNumber,\n inputMessages: [],\n newMessages: [],\n toolCalls: context.checkpoint.pendingToolCalls ?? [],\n toolResults: [],\n pendingToolCalls: event.pendingToolCalls,\n partialToolResults: event.partialToolResults,\n usage: createEmptyUsage(),\n startedAt: Date.now(),\n }) satisfies Step,\n }),\n },\n resolveToolResults: {\n target: \"ResolvingToolResult\",\n actions: assign({\n checkpoint: ({ context }) =>\n ({\n ...context.checkpoint,\n pendingToolCalls: undefined,\n partialToolResults: undefined,\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n stepNumber: context.checkpoint.stepNumber,\n inputMessages: [],\n newMessages: [],\n toolCalls: [],\n toolResults: event.toolResults,\n pendingToolCalls: undefined,\n partialToolResults: undefined,\n usage: createEmptyUsage(),\n startedAt: Date.now(),\n }) satisfies Step,\n }),\n },\n },\n },\n\n GeneratingToolCall: {\n on: {\n retry: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n retryCount: (context.checkpoint.retryCount ?? 0) + 1,\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: event.newMessages,\n toolCalls: event.toolCalls,\n toolResults: event.toolResults,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n stopRunByError: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) =>\n ({\n ...event.checkpoint,\n error: event.error,\n }) satisfies Checkpoint,\n step: ({ event }) =>\n ({\n ...event.step,\n inputMessages: undefined,\n }) satisfies Step,\n }),\n },\n completeRun: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => ({ ...event.checkpoint, retryCount: 0 }),\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n callTools: {\n target: \"CallingMcpTools\",\n actions: assign({\n checkpoint: ({ context, event }) => {\n const newUsage = sumUsage(context.checkpoint.usage, event.usage)\n return {\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, event.newMessage],\n usage: newUsage,\n contextWindowUsage: context.checkpoint.contextWindow\n ? calculateContextWindowUsage(newUsage, context.checkpoint.contextWindow)\n : undefined,\n retryCount: 0,\n } satisfies Checkpoint\n },\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [event.newMessage],\n toolCalls: event.toolCalls,\n usage: sumUsage(context.step.usage, event.usage),\n // Initialize tool handling state\n pendingToolCalls: event.toolCalls,\n partialToolResults: [],\n }) satisfies Step,\n }),\n },\n },\n },\n\n CallingMcpTools: {\n on: {\n resolveToolResults: {\n target: \"ResolvingToolResult\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResults: event.toolResults,\n pendingToolCalls: undefined,\n }) satisfies Step,\n }),\n },\n attemptCompletion: {\n target: \"GeneratingRunResult\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResults: [event.toolResult],\n }) satisfies Step,\n }),\n },\n finishMcpTools: {\n target: \"CallingDelegates\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n partialToolResults: event.partialToolResults,\n pendingToolCalls: event.pendingToolCalls,\n }) satisfies Step,\n }),\n },\n completeRun: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => ({ ...event.checkpoint, retryCount: 0 }),\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n },\n },\n\n CallingDelegates: {\n on: {\n stopRunByDelegate: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n skipDelegates: {\n target: \"CallingInteractiveTools\",\n },\n },\n },\n\n CallingInteractiveTools: {\n on: {\n stopRunByInteractiveTool: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n resolveToolResults: {\n target: \"ResolvingToolResult\",\n actions: assign({\n step: ({ context, event }) =>\n ({\n ...context.step,\n toolResults: event.toolResults,\n pendingToolCalls: undefined,\n partialToolResults: undefined,\n }) satisfies Step,\n }),\n },\n },\n },\n\n ResolvingToolResult: {\n on: {\n finishToolCall: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: [...context.step.newMessages, ...event.newMessages],\n }) satisfies Step,\n }),\n },\n },\n },\n\n GeneratingRunResult: {\n on: {\n retry: {\n target: \"FinishingStep\",\n actions: assign({\n checkpoint: ({ context, event }) =>\n ({\n ...context.checkpoint,\n messages: [...context.checkpoint.messages, ...event.newMessages],\n usage: sumUsage(context.checkpoint.usage, event.usage),\n retryCount: (context.checkpoint.retryCount ?? 0) + 1,\n }) satisfies Checkpoint,\n step: ({ context, event }) =>\n ({\n ...context.step,\n newMessages: event.newMessages,\n toolCalls: event.toolCalls,\n toolResults: event.toolResults,\n usage: sumUsage(context.step.usage, event.usage),\n }) satisfies Step,\n }),\n },\n stopRunByError: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) =>\n ({\n ...event.checkpoint,\n error: event.error,\n }) satisfies Checkpoint,\n step: ({ event }) =>\n ({\n ...event.step,\n inputMessages: undefined,\n }) satisfies Step,\n }),\n },\n completeRun: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => ({ ...event.checkpoint, retryCount: 0 }),\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n },\n },\n\n FinishingStep: {\n on: {\n continueToNextStep: {\n target: \"PreparingForStep\",\n actions: assign({\n checkpoint: ({ event }) => event.nextCheckpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n reenter: true,\n },\n stopRunByExceededMaxSteps: {\n target: \"Stopped\",\n actions: assign({\n checkpoint: ({ event }) => event.checkpoint,\n step: ({ event }) => ({\n ...event.step,\n inputMessages: undefined,\n }),\n }),\n },\n },\n },\n\n Stopped: {\n type: \"final\",\n },\n },\n})\n\nexport const StateMachineLogics: Record<\n Exclude<RunSnapshot[\"value\"], \"Stopped\">,\n (context: RunSnapshot[\"context\"]) => Promise<RunEvent>\n> = {\n Init: initLogic,\n PreparingForStep: preparingForStepLogic,\n ResumingFromStop: resumingFromStopLogic,\n GeneratingToolCall: generatingToolCallLogic,\n CallingMcpTools: callingMcpToolsLogic,\n CallingDelegates: callingDelegatesLogic,\n CallingInteractiveTools: callingInteractiveToolsLogic,\n ResolvingToolResult: resolvingToolResultLogic,\n GeneratingRunResult: generatingRunResultLogic,\n FinishingStep: finishingStepLogic,\n}\n\nexport type RunActor = ActorRefFrom<typeof runtimeStateMachine>\nexport type RunSnapshot = SnapshotFrom<typeof runtimeStateMachine>\n","import { createActor } from \"xstate\"\nimport { type RunActor, runtimeStateMachine } from \"./machine.js\"\n\nexport type ActorInput = Parameters<typeof createActor<typeof runtimeStateMachine>>[1]\n\n/**\n * Factory interface for creating xstate actors.\n * Allows for dependency injection and easier testing.\n */\nexport interface ActorFactory {\n create(input: ActorInput): RunActor\n}\n\n/**\n * Default implementation of ActorFactory using xstate's createActor.\n */\nexport class DefaultActorFactory implements ActorFactory {\n create(input: ActorInput): RunActor {\n return createActor(runtimeStateMachine, input)\n }\n}\n\n/**\n * Default actor factory instance.\n */\nexport const defaultActorFactory = new DefaultActorFactory()\n","import type { Checkpoint, Expert, RunEvent, RunSetting, RuntimeEvent, Step } from \"@perstack/core\"\nimport type { RunEventEmitter } from \"../events/event-emitter.js\"\nimport type { LLMExecutor } from \"../llm/index.js\"\nimport { type BaseSkillManager, closeSkillManagers } from \"../skill-manager/index.js\"\nimport { type ActorFactory, defaultActorFactory } from \"./actor-factory.js\"\nimport { type RunActor, type RunSnapshot, StateMachineLogics } from \"./machine.js\"\n\nexport type StateMachineParams = {\n setting: RunSetting & { experts: Record<string, Expert> }\n initialCheckpoint: Checkpoint\n eventListener: (event: RunEvent | RuntimeEvent) => Promise<void>\n skillManagers: Record<string, BaseSkillManager>\n llmExecutor: LLMExecutor\n eventEmitter: RunEventEmitter\n storeCheckpoint: (checkpoint: Checkpoint) => Promise<void>\n shouldContinueRun?: (setting: RunSetting, checkpoint: Checkpoint, step: Step) => Promise<boolean>\n}\n\nexport type StateMachineLogicsType = typeof StateMachineLogics\n\nexport interface CoordinatorDependencies {\n actorFactory?: ActorFactory\n closeSkillManagers?: (managers: Record<string, BaseSkillManager>) => Promise<void>\n logics?: StateMachineLogicsType\n}\n\n/**\n * Coordinator class for managing the runtime state machine execution.\n * Provides dependency injection for improved testability.\n */\nexport class StateMachineCoordinator {\n private readonly actorFactory: ActorFactory\n private readonly closeManagers: (managers: Record<string, BaseSkillManager>) => Promise<void>\n private readonly logics: StateMachineLogicsType\n\n private actor: RunActor | null = null\n private resolvePromise: ((checkpoint: Checkpoint) => void) | null = null\n private rejectPromise: ((error: Error) => void) | null = null\n\n constructor(\n private readonly params: StateMachineParams,\n deps: CoordinatorDependencies = {},\n ) {\n this.actorFactory = deps.actorFactory ?? defaultActorFactory\n this.closeManagers = deps.closeSkillManagers ?? closeSkillManagers\n this.logics = deps.logics ?? StateMachineLogics\n }\n\n /**\n * Execute the state machine and return the final checkpoint.\n */\n async execute(): Promise<Checkpoint> {\n const { setting, initialCheckpoint, eventListener, skillManagers, llmExecutor } = this.params\n\n this.actor = this.actorFactory.create({\n input: {\n setting,\n initialCheckpoint,\n eventListener,\n skillManagers,\n llmExecutor,\n },\n })\n\n return new Promise<Checkpoint>((resolve, reject) => {\n this.resolvePromise = resolve\n this.rejectPromise = reject\n\n this.actor!.subscribe((runState) => {\n this.handleStateChange(runState).catch((error) => {\n this.handleError(error)\n })\n })\n\n this.actor!.start()\n })\n }\n\n /**\n * Handle state changes from the actor.\n * Exported for testing purposes.\n */\n async handleStateChange(runState: RunSnapshot): Promise<void> {\n if (runState.value === \"Stopped\") {\n await this.handleStoppedState(runState)\n } else {\n await this.handleActiveState(runState)\n }\n }\n\n /**\n * Handle the stopped state - cleanup and resolve.\n */\n private async handleStoppedState(runState: RunSnapshot): Promise<void> {\n const { checkpoint, skillManagers } = runState.context\n\n if (!checkpoint) {\n throw new Error(\"Checkpoint is undefined\")\n }\n\n await this.closeManagers(skillManagers)\n this.resolvePromise?.(checkpoint)\n }\n\n /**\n * Handle active states - execute logic, store checkpoint, emit events.\n */\n private async handleActiveState(runState: RunSnapshot): Promise<void> {\n const { eventEmitter, storeCheckpoint, shouldContinueRun } = this.params\n const stateValue = runState.value as Exclude<RunSnapshot[\"value\"], \"Stopped\">\n\n const event = await this.logics[stateValue](runState.context)\n\n if (\"checkpoint\" in event) {\n await storeCheckpoint(event.checkpoint)\n }\n\n await eventEmitter.emit(event)\n\n if (shouldContinueRun) {\n const shouldContinue = await shouldContinueRun(\n runState.context.setting,\n runState.context.checkpoint,\n runState.context.step,\n )\n\n if (!shouldContinue) {\n this.actor?.stop()\n await this.closeManagers(runState.context.skillManagers)\n this.resolvePromise?.(runState.context.checkpoint)\n return\n }\n }\n\n this.actor?.send(event)\n }\n\n /**\n * Handle errors - cleanup and reject.\n */\n private async handleError(error: unknown): Promise<void> {\n await this.closeManagers(this.params.skillManagers).catch(() => {})\n this.rejectPromise?.(error instanceof Error ? error : new Error(String(error)))\n }\n}\n","import type { Checkpoint, Expert, RunEvent, RunSetting, RuntimeEvent, Step } from \"@perstack/core\"\nimport type { RunEventEmitter } from \"../events/event-emitter.js\"\nimport type { LLMExecutor } from \"../llm/index.js\"\nimport type { BaseSkillManager } from \"../skill-manager/index.js\"\nimport { StateMachineCoordinator } from \"./coordinator.js\"\n\nexport type ExecuteStateMachineParams = {\n setting: RunSetting & { experts: Record<string, Expert> }\n initialCheckpoint: Checkpoint\n eventListener: (event: RunEvent | RuntimeEvent) => Promise<void>\n skillManagers: Record<string, BaseSkillManager>\n llmExecutor: LLMExecutor\n eventEmitter: RunEventEmitter\n storeCheckpoint: (checkpoint: Checkpoint) => Promise<void>\n shouldContinueRun?: (setting: RunSetting, checkpoint: Checkpoint, step: Step) => Promise<boolean>\n}\n\n/**\n * Execute the runtime state machine.\n * This is a convenience wrapper around StateMachineCoordinator.\n */\nexport async function executeStateMachine(params: ExecuteStateMachineParams): Promise<Checkpoint> {\n const coordinator = new StateMachineCoordinator(params)\n return coordinator.execute()\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type {\n Checkpoint,\n DelegationTarget,\n Expert,\n Message,\n RunEvent,\n RunParamsInput,\n RunSetting,\n RuntimeEvent,\n ToolCall,\n ToolResult,\n Usage,\n} from \"@perstack/core\"\n\n/** Reference to the parent Expert that delegated */\ntype DelegatedBy = NonNullable<Checkpoint[\"delegatedBy\"]>\n\nimport {\n buildDelegationReturnState,\n createEmptyUsage,\n type DelegationStateResult,\n sumUsage,\n} from \"../helpers/index.js\"\n\nexport type DelegationResult = {\n toolCallId: string\n toolName: string\n expertKey: string\n text: string\n stepNumber: number\n deltaUsage: Usage\n}\n\nexport type DelegationExecutionResult = {\n nextSetting: RunSetting\n nextCheckpoint: Checkpoint\n}\n\n/**\n * Run options that can be passed to child delegation runs.\n * Extends key callbacks from parent options to ensure checkpoint persistence\n * and event emission work correctly for delegated runs.\n */\nexport type DelegationRunOptions = {\n storeCheckpoint?: (checkpoint: Checkpoint) => Promise<void>\n retrieveCheckpoint?: (jobId: string, checkpointId: string) => Promise<Checkpoint>\n eventListener?: (event: RunEvent | RuntimeEvent) => void\n storeEvent?: (event: RunEvent) => Promise<void>\n returnOnDelegationComplete?: boolean\n}\n\n/**\n * Checkpoint context required for delegation.\n * Note: messages are included so the PARENT can resume its conversation\n * after parallel delegation completes. Child runs start with empty messages.\n */\nexport type DelegationContext = {\n /** Checkpoint ID for delegatedBy reference */\n id: string\n /** Current step number */\n stepNumber: number\n /** Context window size (optional, inherited from parent) */\n contextWindow?: number\n /** Current usage for aggregation */\n usage: Usage\n /** Pending tool calls to filter */\n pendingToolCalls?: ToolCall[]\n /** Partial tool results to append to */\n partialToolResults?: ToolResult[]\n /** Parent delegation reference (preserved for nested delegations) */\n delegatedBy?: DelegatedBy\n /** Parent's message history (restored when parent resumes after delegation) */\n messages: Message[]\n}\n\n/**\n * Strategy interface for handling delegations.\n * Implementations differ in how they execute delegations (single vs parallel).\n */\nexport interface DelegationStrategy {\n /**\n * Execute delegations and return the next setting/checkpoint for the run loop.\n * @param parentOptions - Options from the parent run to be inherited by child runs\n */\n execute(\n delegations: DelegationTarget[],\n setting: RunSetting,\n context: DelegationContext,\n parentExpert: Pick<Expert, \"key\" | \"name\" | \"version\">,\n runFn: (params: RunParamsInput, options?: DelegationRunOptions) => Promise<Checkpoint>,\n parentOptions?: DelegationRunOptions,\n ): Promise<DelegationExecutionResult>\n}\n\n/**\n * Strategy for single delegation - does not execute, just prepares next state.\n * The actual execution happens in the next iteration of the run loop.\n */\nexport class SingleDelegationStrategy implements DelegationStrategy {\n async execute(\n delegations: DelegationTarget[],\n setting: RunSetting,\n context: DelegationContext,\n parentExpert: Pick<Expert, \"key\" | \"name\" | \"version\">,\n _runFn: (params: RunParamsInput, options?: DelegationRunOptions) => Promise<Checkpoint>,\n _parentOptions?: DelegationRunOptions,\n ): Promise<DelegationExecutionResult> {\n if (delegations.length !== 1) {\n throw new Error(\"SingleDelegationStrategy requires exactly one delegation\")\n }\n\n // Use the delegation parameter directly, not checkpoint.delegateTo\n const delegation = delegations[0]\n const { expert, toolCallId, toolName, query } = delegation\n\n // New runId for child expert - each delegation gets its own run\n const childRunId = createId()\n\n const nextSetting: RunSetting = {\n ...setting,\n runId: childRunId,\n expertKey: expert.key,\n input: { text: query },\n }\n\n const nextCheckpoint: Checkpoint = {\n id: context.id,\n jobId: setting.jobId,\n runId: childRunId,\n status: \"init\",\n stepNumber: context.stepNumber,\n messages: [], // Child starts fresh\n expert: {\n key: expert.key,\n name: expert.name,\n version: expert.version,\n },\n delegatedBy: {\n expert: {\n key: parentExpert.key,\n name: parentExpert.name,\n version: parentExpert.version,\n },\n toolCallId,\n toolName,\n checkpointId: context.id,\n runId: setting.runId, // Parent's runId for traceability\n },\n usage: context.usage,\n contextWindow: context.contextWindow,\n pendingToolCalls: undefined,\n partialToolResults: undefined,\n }\n\n return { nextSetting, nextCheckpoint }\n }\n}\n\n/**\n * Strategy for parallel delegation - executes all delegations in parallel.\n */\nexport class ParallelDelegationStrategy implements DelegationStrategy {\n async execute(\n delegations: DelegationTarget[],\n setting: RunSetting,\n context: DelegationContext,\n parentExpert: Pick<Expert, \"key\" | \"name\" | \"version\">,\n runFn: (params: RunParamsInput, options?: DelegationRunOptions) => Promise<Checkpoint>,\n parentOptions?: DelegationRunOptions,\n ): Promise<DelegationExecutionResult> {\n if (delegations.length < 2) {\n throw new Error(\"ParallelDelegationStrategy requires at least two delegations\")\n }\n\n const [firstDelegation, ...remainingDelegations] = delegations\n if (!firstDelegation) {\n throw new Error(\"No delegations found\")\n }\n\n // Execute all delegations in parallel\n const allResults = await Promise.all(\n delegations.map((delegation) =>\n this.executeSingleDelegation(\n delegation,\n setting,\n context,\n parentExpert,\n runFn,\n parentOptions,\n ),\n ),\n )\n\n const [firstResult, ...restResults] = allResults\n if (!firstResult) {\n throw new Error(\"No delegation results\")\n }\n\n // Aggregate results\n const aggregatedUsage = allResults.reduce(\n (acc, result) => sumUsage(acc, result.deltaUsage),\n context.usage,\n )\n\n const maxStepNumber = Math.max(...allResults.map((r) => r.stepNumber))\n\n const restToolResults: ToolResult[] = restResults.map((result) => ({\n id: result.toolCallId,\n skillName: `delegate/${result.expertKey}`,\n toolName: result.toolName,\n result: [{ type: \"textPart\", id: createId(), text: result.text }],\n }))\n\n const processedToolCallIds = new Set(remainingDelegations.map((d) => d.toolCallId))\n const remainingPendingToolCalls = context.pendingToolCalls?.filter(\n (tc) => !processedToolCallIds.has(tc.id) && tc.id !== firstDelegation.toolCallId,\n )\n\n // New runId for delegation return - parent resumes with new run segment\n const returnRunId = createId()\n\n const nextSetting: RunSetting = {\n ...setting,\n runId: returnRunId,\n expertKey: parentExpert.key,\n input: {\n interactiveToolCallResult: {\n toolCallId: firstResult.toolCallId,\n toolName: firstResult.toolName,\n skillName: `delegate/${firstResult.expertKey}`,\n text: firstResult.text,\n },\n },\n }\n\n // Build next checkpoint - restore parent's messages for continuation\n const nextCheckpoint: Checkpoint = {\n id: context.id,\n jobId: setting.jobId,\n runId: returnRunId,\n status: \"stoppedByDelegate\",\n stepNumber: maxStepNumber,\n messages: context.messages, // Restore parent's conversation history\n expert: {\n key: parentExpert.key,\n name: parentExpert.name,\n version: parentExpert.version,\n },\n usage: aggregatedUsage,\n contextWindow: context.contextWindow,\n delegatedBy: context.delegatedBy, // Preserve parent reference for nested delegations\n delegateTo: undefined,\n pendingToolCalls: remainingPendingToolCalls?.length ? remainingPendingToolCalls : undefined,\n partialToolResults: [...(context.partialToolResults ?? []), ...restToolResults],\n }\n\n return { nextSetting, nextCheckpoint }\n }\n\n private async executeSingleDelegation(\n delegation: DelegationTarget,\n parentSetting: RunSetting,\n parentContext: DelegationContext,\n parentExpert: Pick<Expert, \"key\" | \"name\" | \"version\">,\n runFn: (params: RunParamsInput, options?: DelegationRunOptions) => Promise<Checkpoint>,\n parentOptions?: DelegationRunOptions,\n ): Promise<DelegationResult> {\n const { expert, toolCallId, toolName, query } = delegation\n const delegateRunId = createId()\n\n const delegateSetting: RunSetting = {\n ...parentSetting,\n runId: delegateRunId,\n expertKey: expert.key,\n input: { text: query },\n }\n\n const delegateCheckpoint: Checkpoint = {\n id: createId(),\n jobId: parentSetting.jobId,\n runId: delegateRunId,\n status: \"init\",\n stepNumber: parentContext.stepNumber,\n messages: [], // Child starts fresh - no parent context inheritance\n expert: {\n key: expert.key,\n name: expert.name,\n version: expert.version,\n },\n delegatedBy: {\n expert: {\n key: parentExpert.key,\n name: parentExpert.name,\n version: parentExpert.version,\n },\n toolCallId,\n toolName,\n checkpointId: parentContext.id,\n runId: parentSetting.runId,\n },\n usage: createEmptyUsage(),\n contextWindow: parentContext.contextWindow,\n }\n\n // Merge parent options with returnOnDelegationComplete to ensure child runs\n // inherit callbacks for checkpoint persistence and event emission\n const resultCheckpoint = await runFn(\n { setting: delegateSetting, checkpoint: delegateCheckpoint },\n { ...parentOptions, returnOnDelegationComplete: true },\n )\n\n return this.extractDelegationResult(resultCheckpoint, toolCallId, toolName, expert.key)\n }\n\n private extractDelegationResult(\n checkpoint: Checkpoint,\n toolCallId: string,\n toolName: string,\n expertKey: string,\n ): DelegationResult {\n const lastMessage = checkpoint.messages[checkpoint.messages.length - 1]\n if (!lastMessage || lastMessage.type !== \"expertMessage\") {\n throw new Error(\"Delegation error: delegation result message is incorrect\")\n }\n\n const textPart = lastMessage.contents.find((c) => c.type === \"textPart\")\n if (!textPart || textPart.type !== \"textPart\") {\n console.warn(\n `Delegation result from ${expertKey} has no text content. Parent expert will receive empty string.`,\n )\n }\n\n return {\n toolCallId,\n toolName,\n expertKey,\n text: textPart?.type === \"textPart\" ? textPart.text : \"\",\n stepNumber: checkpoint.stepNumber,\n deltaUsage: checkpoint.usage,\n }\n }\n}\n\n/**\n * Factory to select the appropriate delegation strategy.\n */\nexport function selectDelegationStrategy(delegationCount: number): DelegationStrategy {\n if (delegationCount === 1) {\n return new SingleDelegationStrategy()\n }\n return new ParallelDelegationStrategy()\n}\n\n/**\n * Helper to build state when returning from a completed delegation to parent.\n */\nexport function buildReturnFromDelegation(\n currentSetting: RunSetting,\n resultCheckpoint: Checkpoint,\n parentCheckpoint: Checkpoint,\n): DelegationStateResult {\n return buildDelegationReturnState(currentSetting, resultCheckpoint, parentCheckpoint)\n}\n\n/**\n * Extract DelegationContext from a Checkpoint.\n */\nexport function extractDelegationContext(checkpoint: Checkpoint): DelegationContext {\n return {\n id: checkpoint.id,\n stepNumber: checkpoint.stepNumber,\n contextWindow: checkpoint.contextWindow,\n usage: checkpoint.usage,\n pendingToolCalls: checkpoint.pendingToolCalls,\n partialToolResults: checkpoint.partialToolResults,\n delegatedBy: checkpoint.delegatedBy, // Preserve for nested delegations\n messages: checkpoint.messages, // Preserve for parent continuation after delegation\n }\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type { RunEvent } from \"@perstack/core\"\n\nexport class RunEventEmitter {\n private listeners: ((event: RunEvent) => Promise<void>)[] = []\n\n subscribe(listener: (event: RunEvent) => Promise<void>) {\n this.listeners.push(listener)\n }\n\n async emit(event: RunEvent) {\n const errors: Error[] = []\n for (const listener of this.listeners) {\n try {\n await listener({\n ...event,\n id: createId(),\n timestamp: Date.now(),\n })\n } catch (error) {\n errors.push(error instanceof Error ? error : new Error(String(error)))\n }\n }\n if (errors.length > 0) {\n throw new AggregateError(errors, \"One or more event listeners failed\")\n }\n }\n}\n","import type { ProviderConfig, ProviderName } from \"@perstack/core\"\nimport type { ProviderAdapter, ProviderAdapterOptions } from \"@perstack/provider-core\"\n\ninterface AdapterConstructor {\n new (config: ProviderConfig, options?: ProviderAdapterOptions): ProviderAdapter\n}\n\ntype AdapterLoader = () => Promise<AdapterConstructor>\n\nconst PROVIDER_PACKAGE_NAMES: Record<ProviderName, string> = {\n anthropic: \"anthropic-provider\",\n openai: \"openai-provider\",\n google: \"google-provider\",\n ollama: \"ollama-provider\",\n \"azure-openai\": \"azure-openai-provider\",\n \"amazon-bedrock\": \"bedrock-provider\",\n \"google-vertex\": \"vertex-provider\",\n deepseek: \"deepseek-provider\",\n}\n\nexport class ProviderNotInstalledError extends Error {\n constructor(providerName: ProviderName) {\n const packageName = PROVIDER_PACKAGE_NAMES[providerName]\n super(\n `Provider \"${providerName}\" is not installed. ` + `Run: npm install @perstack/${packageName}`,\n )\n this.name = \"ProviderNotInstalledError\"\n }\n}\n\n// Module-level state for provider adapter factory\nconst adapterRegistry = new Map<ProviderName, AdapterLoader>()\nconst adapterInstances = new Map<string, ProviderAdapter>()\nconst pendingCreations = new Map<string, Promise<ProviderAdapter>>()\n\nfunction getCacheKey(config: ProviderConfig, options?: ProviderAdapterOptions): string {\n return JSON.stringify({\n providerName: config.providerName,\n apiKey: \"apiKey\" in config ? config.apiKey : undefined,\n baseUrl: \"baseUrl\" in config ? config.baseUrl : undefined,\n proxyUrl: options?.proxyUrl,\n })\n}\n\nexport function registerProviderAdapter(providerName: ProviderName, loader: AdapterLoader): void {\n adapterRegistry.set(providerName, loader)\n}\n\nexport async function createProviderAdapter(\n config: ProviderConfig,\n options?: ProviderAdapterOptions,\n): Promise<ProviderAdapter> {\n const cacheKey = getCacheKey(config, options)\n\n // Check cache first\n const cached = adapterInstances.get(cacheKey)\n if (cached) return cached\n\n // Check if creation is already in progress to prevent race condition\n const pending = pendingCreations.get(cacheKey)\n if (pending) return pending\n\n const loader = adapterRegistry.get(config.providerName)\n if (!loader) {\n throw new ProviderNotInstalledError(config.providerName)\n }\n\n // Create adapter and track the pending promise\n const creationPromise = (async () => {\n try {\n const AdapterClass = await loader()\n const adapter = new AdapterClass(config, options)\n adapterInstances.set(cacheKey, adapter)\n return adapter\n } finally {\n pendingCreations.delete(cacheKey)\n }\n })()\n\n pendingCreations.set(cacheKey, creationPromise)\n return creationPromise\n}\n\nexport function clearProviderAdapterCache(): void {\n adapterInstances.clear()\n pendingCreations.clear()\n}\n","import type { ProviderName } from \"@perstack/core\"\nimport type { LanguageModel, ToolSet } from \"ai\"\nimport { ProxyAgent, fetch as undiciFetch } from \"undici\"\nimport type {\n ProviderAdapter,\n ProviderAdapterOptions,\n ProviderError,\n ProviderOptions,\n ProviderOptionsConfig,\n ProviderToolOptions,\n ReasoningBudget,\n} from \"./types.js\"\n\nexport abstract class BaseProviderAdapter implements ProviderAdapter {\n abstract readonly providerName: ProviderName\n protected readonly options?: ProviderAdapterOptions\n\n constructor(options?: ProviderAdapterOptions) {\n this.options = options\n }\n\n abstract createModel(modelId: string): LanguageModel\n\n getProviderTools(_toolNames: string[], _options?: ProviderToolOptions): ToolSet {\n return {}\n }\n\n getProviderOptions(_config?: ProviderOptionsConfig): ProviderOptions | undefined {\n return undefined\n }\n\n getReasoningOptions(_budget: ReasoningBudget): ProviderOptions | undefined {\n return undefined\n }\n\n normalizeError(error: unknown): ProviderError {\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n isRetryable: this.isRetryable(error),\n provider: this.providerName,\n originalError: error,\n }\n }\n return {\n name: \"UnknownError\",\n message: String(error),\n isRetryable: false,\n provider: this.providerName,\n originalError: error,\n }\n }\n\n isRetryable(error: unknown): boolean {\n if (error instanceof Error) {\n const retryablePatterns = [\n /rate limit/i,\n /timeout/i,\n /overloaded/i,\n /service unavailable/i,\n /internal server error/i,\n /bad gateway/i,\n /gateway timeout/i,\n ]\n return retryablePatterns.some((pattern) => pattern.test(error.message))\n }\n return false\n }\n\n protected createProxyFetch(proxyUrl: string): typeof globalThis.fetch {\n const agent = new ProxyAgent(proxyUrl)\n return (input, init) => {\n return undiciFetch(input, { ...init, dispatcher: agent })\n }\n }\n}\n","import type { ProviderError } from \"@perstack/provider-core\"\nimport { APICallError } from \"ai\"\n\nexport function normalizeAnthropicError(error: unknown): ProviderError {\n if (error instanceof APICallError) {\n return {\n name: error.name,\n message: error.message,\n statusCode: error.statusCode,\n isRetryable: isAnthropicRetryable(error),\n provider: \"anthropic\",\n originalError: error,\n }\n }\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n isRetryable: isAnthropicRetryable(error),\n provider: \"anthropic\",\n originalError: error,\n }\n }\n return {\n name: \"UnknownError\",\n message: String(error),\n isRetryable: false,\n provider: \"anthropic\",\n originalError: error,\n }\n}\n\nexport function isAnthropicRetryable(error: unknown): boolean {\n if (error instanceof APICallError) {\n if (error.isRetryable) return true\n const statusCode = error.statusCode\n if (statusCode === 429) return true\n if (statusCode === 500) return true\n if (statusCode === 502) return true\n if (statusCode === 503) return true\n if (statusCode === 504) return true\n }\n if (error instanceof Error) {\n const message = error.message.toLowerCase()\n if (message.includes(\"rate limit\")) return true\n if (message.includes(\"overloaded\")) return true\n if (message.includes(\"timeout\")) return true\n if (message.includes(\"service unavailable\")) return true\n }\n return false\n}\n","import type { AnthropicProviderSkill, ProviderOptions } from \"@perstack/provider-core\"\nimport type { JSONValue } from \"ai\"\n\ntype AnthropicContainerSkill = {\n type: \"builtin\"\n name: string\n [key: string]: JSONValue\n}\n\ntype AnthropicCustomContainerSkill = {\n type: \"custom\"\n name: string\n mcp_config: Record<string, JSONValue>\n [key: string]: JSONValue\n}\n\ntype AnthropicSkillConfig = AnthropicContainerSkill | AnthropicCustomContainerSkill\n\nfunction convertSkill(skill: AnthropicProviderSkill): AnthropicSkillConfig {\n if (skill.type === \"builtin\") {\n return {\n type: \"builtin\",\n name: skill.skillId,\n }\n }\n try {\n const parsed = JSON.parse(skill.definition)\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n throw new Error(\"Definition must be a JSON object\")\n }\n return {\n type: \"custom\",\n name: skill.name,\n mcp_config: parsed,\n }\n } catch (error) {\n throw new Error(\n `Invalid JSON in custom skill definition for \"${skill.name}\": ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n}\n\nexport function buildProviderOptions(\n skills?: AnthropicProviderSkill[],\n): ProviderOptions | undefined {\n if (!skills || skills.length === 0) {\n return undefined\n }\n return {\n anthropic: {\n container: {\n skills: skills.map(convertSkill),\n },\n },\n }\n}\n\nexport function hasCustomProviderSkills(skills?: AnthropicProviderSkill[]): boolean {\n return skills?.some((skill) => skill.type === \"custom\") ?? false\n}\n","import type { createAnthropic } from \"@ai-sdk/anthropic\"\nimport type { ProviderToolOptions } from \"@perstack/provider-core\"\nimport type { ToolSet } from \"ai\"\n\ntype AnthropicClient = ReturnType<typeof createAnthropic>\n\nexport function buildAnthropicTools(\n client: AnthropicClient,\n toolNames: string[],\n options?: ProviderToolOptions,\n): ToolSet {\n const tools: ToolSet = {}\n for (const name of toolNames) {\n switch (name) {\n case \"webSearch\": {\n const webSearchTool = client.tools.webSearch_20250305({\n maxUses: options?.webSearch?.maxUses,\n allowedDomains: options?.webSearch?.allowedDomains,\n })\n tools[\"web_search\"] = webSearchTool\n break\n }\n case \"webFetch\": {\n const webFetchTool = client.tools.webFetch_20250910({\n maxUses: options?.webFetch?.maxUses,\n })\n tools[\"web_fetch\"] = webFetchTool\n break\n }\n case \"codeExecution\": {\n const codeExecutionTool = client.tools.codeExecution_20250522()\n tools[\"code_execution\"] = codeExecutionTool\n break\n }\n }\n }\n return tools\n}\n","import { createAnthropic } from \"@ai-sdk/anthropic\"\nimport type { AnthropicProviderConfig } from \"@perstack/core\"\nimport {\n BaseProviderAdapter,\n type ProviderAdapterOptions,\n type ProviderError,\n type ProviderOptions,\n type ProviderOptionsConfig,\n type ProviderToolOptions,\n type ReasoningBudget,\n} from \"@perstack/provider-core\"\nimport type { LanguageModel, ToolSet } from \"ai\"\nimport { isAnthropicRetryable, normalizeAnthropicError } from \"./errors.js\"\nimport { buildProviderOptions } from \"./skills.js\"\nimport { buildAnthropicTools } from \"./tools.js\"\n\nexport class AnthropicProviderAdapter extends BaseProviderAdapter {\n readonly providerName = \"anthropic\" as const\n private readonly client: ReturnType<typeof createAnthropic>\n\n constructor(\n readonly config: AnthropicProviderConfig,\n options?: ProviderAdapterOptions,\n ) {\n super(options)\n this.client = createAnthropic({\n apiKey: config.apiKey,\n baseURL: config.baseUrl,\n headers: config.headers,\n fetch: options?.proxyUrl ? this.createProxyFetch(options.proxyUrl) : undefined,\n })\n }\n\n override createModel(modelId: string): LanguageModel {\n return this.client(modelId)\n }\n\n override getProviderTools(toolNames: string[], options?: ProviderToolOptions): ToolSet {\n return buildAnthropicTools(this.client, toolNames, options)\n }\n\n override getProviderOptions(config?: ProviderOptionsConfig): ProviderOptions | undefined {\n return buildProviderOptions(config?.skills)\n }\n\n override getReasoningOptions(budget: ReasoningBudget): ProviderOptions | undefined {\n const budgetTokens = this.budgetToTokens(budget)\n return {\n anthropic: {\n thinking: { type: \"enabled\", budgetTokens },\n },\n }\n }\n\n private budgetToTokens(budget: ReasoningBudget): number {\n if (typeof budget === \"number\") return budget\n const map: Record<string, number> = {\n minimal: 1024,\n low: 2048,\n medium: 5000,\n high: 10000,\n }\n return map[budget] ?? 5000\n }\n\n override normalizeError(error: unknown): ProviderError {\n return normalizeAnthropicError(error)\n }\n\n override isRetryable(error: unknown): boolean {\n return isAnthropicRetryable(error)\n }\n}\n","import type { ProviderError } from \"@perstack/provider-core\"\nimport { APICallError } from \"ai\"\n\nexport function normalizeAzureOpenAIError(error: unknown): ProviderError {\n if (error instanceof APICallError) {\n return {\n name: error.name,\n message: error.message,\n statusCode: error.statusCode,\n isRetryable: isAzureOpenAIRetryable(error),\n provider: \"azure-openai\",\n originalError: error,\n }\n }\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n isRetryable: isAzureOpenAIRetryable(error),\n provider: \"azure-openai\",\n originalError: error,\n }\n }\n return {\n name: \"UnknownError\",\n message: String(error),\n isRetryable: false,\n provider: \"azure-openai\",\n originalError: error,\n }\n}\n\nexport function isAzureOpenAIRetryable(error: unknown): boolean {\n if (error instanceof APICallError) {\n if (error.isRetryable) return true\n const statusCode = error.statusCode\n if (statusCode === 429) return true\n if (statusCode === 500) return true\n if (statusCode === 502) return true\n if (statusCode === 503) return true\n if (statusCode === 504) return true\n }\n if (error instanceof Error) {\n const message = error.message.toLowerCase()\n if (message.includes(\"rate limit\")) return true\n if (message.includes(\"timeout\")) return true\n if (message.includes(\"service unavailable\")) return true\n }\n return false\n}\n","import type { createAzure } from \"@ai-sdk/azure\"\nimport type { ProviderToolOptions } from \"@perstack/provider-core\"\nimport type { ToolSet } from \"ai\"\n\ntype AzureClient = ReturnType<typeof createAzure>\n\nexport function buildAzureOpenAITools(\n client: AzureClient,\n toolNames: string[],\n options?: ProviderToolOptions,\n): ToolSet {\n const tools: ToolSet = {}\n for (const name of toolNames) {\n switch (name) {\n case \"webSearchPreview\": {\n const webSearchTool = client.tools.webSearchPreview({})\n tools[\"web_search_preview\"] = webSearchTool\n break\n }\n case \"fileSearch\": {\n const vectorStoreIds = options?.fileSearch?.vectorStoreIds\n if (!vectorStoreIds || vectorStoreIds.length === 0) {\n throw new Error(\n \"Azure OpenAI fileSearch tool requires vectorStoreIds. \" +\n \"Set providerToolOptions.fileSearch.vectorStoreIds to use this tool.\",\n )\n }\n const fileSearchTool = client.tools.fileSearch({\n vectorStoreIds,\n maxNumResults: options?.fileSearch?.maxNumResults,\n })\n tools[\"file_search\"] = fileSearchTool\n break\n }\n case \"codeInterpreter\": {\n const codeInterpreterTool = client.tools.codeInterpreter()\n tools[\"code_interpreter\"] = codeInterpreterTool\n break\n }\n case \"imageGeneration\": {\n const imageGenerationTool = client.tools.imageGeneration()\n tools[\"image_generation\"] = imageGenerationTool\n break\n }\n }\n }\n return tools\n}\n","import { createAzure } from \"@ai-sdk/azure\"\nimport type { AzureOpenAiProviderConfig } from \"@perstack/core\"\nimport {\n BaseProviderAdapter,\n type ProviderAdapterOptions,\n type ProviderError,\n type ProviderToolOptions,\n} from \"@perstack/provider-core\"\nimport type { LanguageModel, ToolSet } from \"ai\"\nimport { isAzureOpenAIRetryable, normalizeAzureOpenAIError } from \"./errors.js\"\nimport { buildAzureOpenAITools } from \"./tools.js\"\n\nexport class AzureOpenAIProviderAdapter extends BaseProviderAdapter {\n readonly providerName = \"azure-openai\" as const\n private readonly client: ReturnType<typeof createAzure>\n\n constructor(\n readonly config: AzureOpenAiProviderConfig,\n options?: ProviderAdapterOptions,\n ) {\n super(options)\n this.client = createAzure({\n apiKey: config.apiKey,\n resourceName: config.resourceName,\n apiVersion: config.apiVersion,\n baseURL: config.baseUrl,\n headers: config.headers,\n useDeploymentBasedUrls: config.useDeploymentBasedUrls,\n fetch: options?.proxyUrl ? this.createProxyFetch(options.proxyUrl) : undefined,\n })\n }\n\n override createModel(modelId: string): LanguageModel {\n return this.client(modelId)\n }\n\n override getProviderTools(toolNames: string[], options?: ProviderToolOptions): ToolSet {\n return buildAzureOpenAITools(this.client, toolNames, options)\n }\n\n override normalizeError(error: unknown): ProviderError {\n return normalizeAzureOpenAIError(error)\n }\n\n override isRetryable(error: unknown): boolean {\n return isAzureOpenAIRetryable(error)\n }\n}\n","import type { ProviderError } from \"@perstack/provider-core\"\nimport { APICallError } from \"ai\"\n\nexport function normalizeBedrockError(error: unknown): ProviderError {\n if (error instanceof APICallError) {\n return {\n name: error.name,\n message: error.message,\n statusCode: error.statusCode,\n isRetryable: isBedrockRetryable(error),\n provider: \"amazon-bedrock\",\n originalError: error,\n }\n }\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n isRetryable: isBedrockRetryable(error),\n provider: \"amazon-bedrock\",\n originalError: error,\n }\n }\n return {\n name: \"UnknownError\",\n message: String(error),\n isRetryable: false,\n provider: \"amazon-bedrock\",\n originalError: error,\n }\n}\n\nexport function isBedrockRetryable(error: unknown): boolean {\n if (error instanceof APICallError) {\n if (error.isRetryable) return true\n const statusCode = error.statusCode\n if (statusCode === 429) return true\n if (statusCode === 500) return true\n if (statusCode === 502) return true\n if (statusCode === 503) return true\n if (statusCode === 504) return true\n }\n if (error instanceof Error) {\n const message = error.message.toLowerCase()\n if (message.includes(\"rate limit\")) return true\n if (message.includes(\"throttl\")) return true\n if (message.includes(\"timeout\")) return true\n if (message.includes(\"service unavailable\")) return true\n }\n return false\n}\n","import { createAmazonBedrock } from \"@ai-sdk/amazon-bedrock\"\nimport type { AmazonBedrockProviderConfig } from \"@perstack/core\"\nimport {\n BaseProviderAdapter,\n type ProviderAdapterOptions,\n type ProviderError,\n type ProviderOptions,\n type ProviderOptionsConfig,\n type ReasoningBudget,\n} from \"@perstack/provider-core\"\nimport type { JSONValue, LanguageModel } from \"ai\"\nimport { isBedrockRetryable, normalizeBedrockError } from \"./errors.js\"\n\nexport class BedrockProviderAdapter extends BaseProviderAdapter {\n readonly providerName = \"amazon-bedrock\" as const\n private readonly client: ReturnType<typeof createAmazonBedrock>\n\n constructor(\n readonly config: AmazonBedrockProviderConfig,\n options?: ProviderAdapterOptions,\n ) {\n super(options)\n this.client = createAmazonBedrock({\n accessKeyId: config.accessKeyId,\n secretAccessKey: config.secretAccessKey,\n region: config.region,\n sessionToken: config.sessionToken,\n fetch: options?.proxyUrl ? this.createProxyFetch(options.proxyUrl) : undefined,\n })\n }\n\n override createModel(modelId: string): LanguageModel {\n return this.client(modelId)\n }\n\n override getProviderOptions(config?: ProviderOptionsConfig): ProviderOptions | undefined {\n if (!config?.guardrails && !config?.cachePoint) {\n return undefined\n }\n const bedrockOptions: Record<string, JSONValue> = {}\n if (config.guardrails) {\n const guardrailConfig: Record<string, JSONValue> = {\n guardrailIdentifier: config.guardrails.guardrailIdentifier,\n guardrailVersion: config.guardrails.guardrailVersion,\n }\n if (config.guardrails.trace) {\n guardrailConfig[\"trace\"] = config.guardrails.trace\n }\n bedrockOptions[\"guardrailConfig\"] = guardrailConfig\n }\n if (config.cachePoint) {\n bedrockOptions[\"cachePoint\"] = { type: config.cachePoint.type }\n }\n return { bedrock: bedrockOptions }\n }\n\n override getReasoningOptions(budget: ReasoningBudget): ProviderOptions | undefined {\n if (budget === \"none\" || budget === 0) {\n return undefined\n }\n const budgetTokens = this.budgetToTokens(budget)\n return {\n bedrock: {\n reasoning: {\n budgetTokens,\n },\n },\n }\n }\n\n private budgetToTokens(budget: ReasoningBudget): number {\n if (typeof budget === \"number\") return budget\n const map: Record<string, number> = {\n minimal: 1024,\n low: 2048,\n medium: 5000,\n high: 10000,\n }\n return map[budget] ?? 5000\n }\n\n override normalizeError(error: unknown): ProviderError {\n return normalizeBedrockError(error)\n }\n\n override isRetryable(error: unknown): boolean {\n return isBedrockRetryable(error)\n }\n}\n","import type { ProviderError } from \"@perstack/provider-core\"\nimport { APICallError } from \"ai\"\n\nexport function normalizeDeepSeekError(error: unknown): ProviderError {\n if (error instanceof APICallError) {\n return {\n name: error.name,\n message: error.message,\n statusCode: error.statusCode,\n isRetryable: isDeepSeekRetryable(error),\n provider: \"deepseek\",\n originalError: error,\n }\n }\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n isRetryable: isDeepSeekRetryable(error),\n provider: \"deepseek\",\n originalError: error,\n }\n }\n return {\n name: \"UnknownError\",\n message: String(error),\n isRetryable: false,\n provider: \"deepseek\",\n originalError: error,\n }\n}\n\nexport function isDeepSeekRetryable(error: unknown): boolean {\n if (error instanceof APICallError) {\n if (error.isRetryable) return true\n const statusCode = error.statusCode\n if (statusCode === 429) return true\n if (statusCode === 500) return true\n if (statusCode === 502) return true\n if (statusCode === 503) return true\n if (statusCode === 504) return true\n }\n if (error instanceof Error) {\n const message = error.message.toLowerCase()\n if (message.includes(\"rate limit\")) return true\n if (message.includes(\"timeout\")) return true\n if (message.includes(\"service unavailable\")) return true\n }\n return false\n}\n","import { createDeepSeek } from \"@ai-sdk/deepseek\"\nimport type { DeepseekProviderConfig } from \"@perstack/core\"\nimport {\n BaseProviderAdapter,\n type ProviderAdapterOptions,\n type ProviderError,\n} from \"@perstack/provider-core\"\nimport type { LanguageModel } from \"ai\"\nimport { isDeepSeekRetryable, normalizeDeepSeekError } from \"./errors.js\"\n\nexport class DeepseekProviderAdapter extends BaseProviderAdapter {\n readonly providerName = \"deepseek\" as const\n private readonly client: ReturnType<typeof createDeepSeek>\n\n constructor(\n readonly config: DeepseekProviderConfig,\n options?: ProviderAdapterOptions,\n ) {\n super(options)\n this.client = createDeepSeek({\n apiKey: config.apiKey,\n baseURL: config.baseUrl,\n headers: config.headers,\n fetch: options?.proxyUrl ? this.createProxyFetch(options.proxyUrl) : undefined,\n })\n }\n\n override createModel(modelId: string): LanguageModel {\n return this.client(modelId)\n }\n\n override normalizeError(error: unknown): ProviderError {\n return normalizeDeepSeekError(error)\n }\n\n override isRetryable(error: unknown): boolean {\n return isDeepSeekRetryable(error)\n }\n}\n","import type { ProviderError } from \"@perstack/provider-core\"\nimport { APICallError } from \"ai\"\n\nexport function normalizeGoogleError(error: unknown): ProviderError {\n if (error instanceof APICallError) {\n return {\n name: error.name,\n message: error.message,\n statusCode: error.statusCode,\n isRetryable: isGoogleRetryable(error),\n provider: \"google\",\n originalError: error,\n }\n }\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n isRetryable: isGoogleRetryable(error),\n provider: \"google\",\n originalError: error,\n }\n }\n return {\n name: \"UnknownError\",\n message: String(error),\n isRetryable: false,\n provider: \"google\",\n originalError: error,\n }\n}\n\nexport function isGoogleRetryable(error: unknown): boolean {\n if (error instanceof APICallError) {\n if (error.isRetryable) return true\n const statusCode = error.statusCode\n if (statusCode === 429) return true\n if (statusCode === 500) return true\n if (statusCode === 502) return true\n if (statusCode === 503) return true\n if (statusCode === 504) return true\n }\n if (error instanceof Error) {\n const message = error.message.toLowerCase()\n if (message.includes(\"rate limit\")) return true\n if (message.includes(\"quota exceeded\")) return true\n if (message.includes(\"timeout\")) return true\n if (message.includes(\"service unavailable\")) return true\n }\n return false\n}\n","import type { createGoogleGenerativeAI } from \"@ai-sdk/google\"\nimport type { ProviderToolOptions } from \"@perstack/provider-core\"\nimport type { ToolSet } from \"ai\"\n\ntype GoogleClient = ReturnType<typeof createGoogleGenerativeAI>\n\nexport function buildGoogleTools(\n client: GoogleClient,\n toolNames: string[],\n options?: ProviderToolOptions,\n): ToolSet {\n const tools: ToolSet = {}\n for (const name of toolNames) {\n switch (name) {\n case \"googleSearch\": {\n const googleSearchTool = client.tools.googleSearch({})\n tools[\"google_search\"] = googleSearchTool\n break\n }\n case \"codeExecution\": {\n const codeExecutionTool = client.tools.codeExecution({})\n tools[\"code_execution\"] = codeExecutionTool\n break\n }\n case \"urlContext\": {\n const urlContextTool = client.tools.urlContext({})\n tools[\"url_context\"] = urlContextTool\n break\n }\n case \"fileSearch\": {\n const storeNames = options?.fileSearch?.vectorStoreIds\n if (!storeNames || storeNames.length === 0) {\n throw new Error(\n \"Google fileSearch tool requires fileSearchStoreNames. \" +\n \"Set providerToolOptions.fileSearch.vectorStoreIds to use this tool.\",\n )\n }\n const fileSearchTool = client.tools.fileSearch({\n fileSearchStoreNames: storeNames,\n topK: options?.fileSearch?.maxNumResults,\n })\n tools[\"file_search\"] = fileSearchTool\n break\n }\n case \"googleMaps\": {\n const googleMapsTool = client.tools.googleMaps(options?.googleMaps?.retrievalConfig ?? {})\n tools[\"google_maps\"] = googleMapsTool\n break\n }\n }\n }\n return tools\n}\n","import { createGoogleGenerativeAI } from \"@ai-sdk/google\"\nimport type { GoogleGenerativeAiProviderConfig } from \"@perstack/core\"\nimport {\n BaseProviderAdapter,\n type ProviderAdapterOptions,\n type ProviderError,\n type ProviderOptions,\n type ProviderToolOptions,\n type ReasoningBudget,\n} from \"@perstack/provider-core\"\nimport type { LanguageModel, ToolSet } from \"ai\"\nimport { isGoogleRetryable, normalizeGoogleError } from \"./errors.js\"\nimport { buildGoogleTools } from \"./tools.js\"\n\nexport class GoogleProviderAdapter extends BaseProviderAdapter {\n readonly providerName = \"google\" as const\n private readonly client: ReturnType<typeof createGoogleGenerativeAI>\n\n constructor(\n readonly config: GoogleGenerativeAiProviderConfig,\n options?: ProviderAdapterOptions,\n ) {\n super(options)\n this.client = createGoogleGenerativeAI({\n apiKey: config.apiKey,\n baseURL: config.baseUrl,\n headers: config.headers,\n fetch: options?.proxyUrl ? this.createProxyFetch(options.proxyUrl) : undefined,\n })\n }\n\n override createModel(modelId: string): LanguageModel {\n return this.client(modelId)\n }\n\n override getProviderTools(toolNames: string[], options?: ProviderToolOptions): ToolSet {\n return buildGoogleTools(this.client, toolNames, options)\n }\n\n override normalizeError(error: unknown): ProviderError {\n return normalizeGoogleError(error)\n }\n\n override isRetryable(error: unknown): boolean {\n return isGoogleRetryable(error)\n }\n\n override getReasoningOptions(budget: ReasoningBudget): ProviderOptions | undefined {\n const budgetTokens = this.budgetToTokens(budget)\n return {\n google: {\n thinkingConfig: {\n thinkingBudget: budgetTokens,\n includeThoughts: true,\n },\n },\n }\n }\n\n private budgetToTokens(budget: ReasoningBudget): number {\n if (typeof budget === \"number\") return budget\n const map: Record<string, number> = {\n minimal: 1024,\n low: 2048,\n medium: 5000,\n high: 10000,\n }\n return map[budget] ?? 5000\n }\n}\n","import type { ProviderError } from \"@perstack/provider-core\"\nimport { APICallError } from \"ai\"\n\nexport function normalizeOllamaError(error: unknown): ProviderError {\n if (error instanceof APICallError) {\n return {\n name: error.name,\n message: error.message,\n statusCode: error.statusCode,\n isRetryable: isOllamaRetryable(error),\n provider: \"ollama\",\n originalError: error,\n }\n }\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n isRetryable: isOllamaRetryable(error),\n provider: \"ollama\",\n originalError: error,\n }\n }\n return {\n name: \"UnknownError\",\n message: String(error),\n isRetryable: false,\n provider: \"ollama\",\n originalError: error,\n }\n}\n\nexport function isOllamaRetryable(error: unknown): boolean {\n if (error instanceof APICallError) {\n if (error.isRetryable) return true\n const statusCode = error.statusCode\n if (statusCode === 429) return true\n if (statusCode === 500) return true\n if (statusCode === 502) return true\n if (statusCode === 503) return true\n if (statusCode === 504) return true\n }\n if (error instanceof Error) {\n const message = error.message.toLowerCase()\n if (message.includes(\"rate limit\")) return true\n if (message.includes(\"timeout\")) return true\n if (message.includes(\"service unavailable\")) return true\n if (message.includes(\"connection refused\")) return true\n }\n return false\n}\n","import type { OllamaProviderConfig } from \"@perstack/core\"\nimport {\n BaseProviderAdapter,\n type ProviderAdapterOptions,\n type ProviderError,\n type ProviderOptions,\n type ProviderOptionsConfig,\n type ReasoningBudget,\n} from \"@perstack/provider-core\"\nimport type { LanguageModel } from \"ai\"\nimport { createOllama } from \"ollama-ai-provider-v2\"\nimport { isOllamaRetryable, normalizeOllamaError } from \"./errors.js\"\n\nexport class OllamaProviderAdapter extends BaseProviderAdapter {\n readonly providerName = \"ollama\" as const\n private readonly client: ReturnType<typeof createOllama>\n\n constructor(\n readonly config: OllamaProviderConfig,\n options?: ProviderAdapterOptions,\n ) {\n super(options)\n this.client = createOllama({\n baseURL: config.baseUrl,\n headers: config.headers,\n fetch: options?.proxyUrl ? this.createProxyFetch(options.proxyUrl) : undefined,\n })\n }\n\n override createModel(modelId: string): LanguageModel {\n return this.client(modelId)\n }\n\n override getProviderOptions(config?: ProviderOptionsConfig): ProviderOptions | undefined {\n if (config?.think === undefined) {\n return undefined\n }\n return {\n ollama: {\n think: config.think,\n },\n }\n }\n\n override getReasoningOptions(budget: ReasoningBudget): ProviderOptions | undefined {\n // Ollama uses 'think' toggle for hybrid reasoning models\n // Return undefined when reasoning is disabled\n if (budget === \"none\" || budget === 0) {\n return undefined\n }\n return {\n ollama: {\n think: true,\n },\n }\n }\n\n override normalizeError(error: unknown): ProviderError {\n return normalizeOllamaError(error)\n }\n\n override isRetryable(error: unknown): boolean {\n return isOllamaRetryable(error)\n }\n}\n","import type { ProviderError } from \"@perstack/provider-core\"\nimport { APICallError } from \"ai\"\n\nexport function normalizeOpenAIError(error: unknown): ProviderError {\n if (error instanceof APICallError) {\n return {\n name: error.name,\n message: error.message,\n statusCode: error.statusCode,\n isRetryable: isOpenAIRetryable(error),\n provider: \"openai\",\n originalError: error,\n }\n }\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n isRetryable: isOpenAIRetryable(error),\n provider: \"openai\",\n originalError: error,\n }\n }\n return {\n name: \"UnknownError\",\n message: String(error),\n isRetryable: false,\n provider: \"openai\",\n originalError: error,\n }\n}\n\nexport function isOpenAIRetryable(error: unknown): boolean {\n if (error instanceof APICallError) {\n if (error.isRetryable) return true\n const statusCode = error.statusCode\n if (statusCode === 429) return true\n if (statusCode === 500) return true\n if (statusCode === 502) return true\n if (statusCode === 503) return true\n if (statusCode === 504) return true\n }\n if (error instanceof Error) {\n const message = error.message.toLowerCase()\n if (message.includes(\"rate limit\")) return true\n if (message.includes(\"timeout\")) return true\n if (message.includes(\"service unavailable\")) return true\n }\n return false\n}\n","import type { createOpenAI } from \"@ai-sdk/openai\"\nimport type { ProviderToolOptions } from \"@perstack/provider-core\"\nimport type { ToolSet } from \"ai\"\n\ntype OpenAIClient = ReturnType<typeof createOpenAI>\n\nexport function buildOpenAITools(\n client: OpenAIClient,\n toolNames: string[],\n options?: ProviderToolOptions,\n): ToolSet {\n const tools: ToolSet = {}\n for (const name of toolNames) {\n switch (name) {\n case \"webSearch\": {\n const webSearchTool = client.tools.webSearch()\n tools[\"web_search\"] = webSearchTool\n break\n }\n case \"fileSearch\": {\n const vectorStoreIds = options?.fileSearch?.vectorStoreIds\n if (!vectorStoreIds || vectorStoreIds.length === 0) {\n throw new Error(\n \"OpenAI fileSearch tool requires vectorStoreIds. \" +\n \"Set providerToolOptions.fileSearch.vectorStoreIds to use this tool.\",\n )\n }\n const fileSearchTool = client.tools.fileSearch({\n vectorStoreIds,\n maxNumResults: options?.fileSearch?.maxNumResults,\n })\n tools[\"file_search\"] = fileSearchTool\n break\n }\n case \"codeInterpreter\": {\n const codeInterpreterTool = client.tools.codeInterpreter()\n tools[\"code_interpreter\"] = codeInterpreterTool\n break\n }\n case \"imageGeneration\": {\n const imageGenerationTool = client.tools.imageGeneration()\n tools[\"image_generation\"] = imageGenerationTool\n break\n }\n }\n }\n return tools\n}\n","import { createOpenAI } from \"@ai-sdk/openai\"\nimport type { OpenAiProviderConfig } from \"@perstack/core\"\nimport {\n BaseProviderAdapter,\n type ProviderAdapterOptions,\n type ProviderError,\n type ProviderOptions,\n type ProviderToolOptions,\n type ReasoningBudget,\n} from \"@perstack/provider-core\"\nimport type { LanguageModel, ToolSet } from \"ai\"\nimport { isOpenAIRetryable, normalizeOpenAIError } from \"./errors.js\"\nimport { buildOpenAITools } from \"./tools.js\"\n\nexport class OpenAIProviderAdapter extends BaseProviderAdapter {\n readonly providerName = \"openai\" as const\n private readonly client: ReturnType<typeof createOpenAI>\n\n constructor(\n readonly config: OpenAiProviderConfig,\n options?: ProviderAdapterOptions,\n ) {\n super(options)\n this.client = createOpenAI({\n apiKey: config.apiKey,\n baseURL: config.baseUrl,\n organization: config.organization,\n project: config.project,\n name: config.name,\n headers: config.headers,\n fetch: options?.proxyUrl ? this.createProxyFetch(options.proxyUrl) : undefined,\n })\n }\n\n override createModel(modelId: string): LanguageModel {\n return this.client(modelId)\n }\n\n override getProviderTools(toolNames: string[], options?: ProviderToolOptions): ToolSet {\n return buildOpenAITools(this.client, toolNames, options)\n }\n\n override getReasoningOptions(budget: ReasoningBudget): ProviderOptions | undefined {\n const effort = this.budgetToEffort(budget)\n return {\n openai: { reasoningEffort: effort },\n }\n }\n\n private budgetToEffort(budget: ReasoningBudget): string {\n if (typeof budget === \"number\") {\n // o3-mini only supports 'low', 'medium', 'high' (not 'minimal')\n if (budget <= 2048) return \"low\"\n if (budget <= 5000) return \"medium\"\n return \"high\"\n }\n // Map 'minimal' to 'low' for o3-mini compatibility\n if (budget === \"minimal\") return \"low\"\n return budget\n }\n\n override normalizeError(error: unknown): ProviderError {\n return normalizeOpenAIError(error)\n }\n\n override isRetryable(error: unknown): boolean {\n return isOpenAIRetryable(error)\n }\n}\n","import type { ProviderError } from \"@perstack/provider-core\"\nimport { APICallError } from \"ai\"\n\nexport function normalizeVertexError(error: unknown): ProviderError {\n if (error instanceof APICallError) {\n return {\n name: error.name,\n message: error.message,\n statusCode: error.statusCode,\n isRetryable: isVertexRetryable(error),\n provider: \"google-vertex\",\n originalError: error,\n }\n }\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n isRetryable: isVertexRetryable(error),\n provider: \"google-vertex\",\n originalError: error,\n }\n }\n return {\n name: \"UnknownError\",\n message: String(error),\n isRetryable: false,\n provider: \"google-vertex\",\n originalError: error,\n }\n}\n\nexport function isVertexRetryable(error: unknown): boolean {\n if (error instanceof APICallError) {\n if (error.isRetryable) return true\n const statusCode = error.statusCode\n if (statusCode === 429) return true\n if (statusCode === 500) return true\n if (statusCode === 502) return true\n if (statusCode === 503) return true\n if (statusCode === 504) return true\n }\n if (error instanceof Error) {\n const message = error.message.toLowerCase()\n if (message.includes(\"rate limit\")) return true\n if (message.includes(\"quota exceeded\")) return true\n if (message.includes(\"timeout\")) return true\n if (message.includes(\"service unavailable\")) return true\n }\n return false\n}\n","import type { createVertex } from \"@ai-sdk/google-vertex\"\nimport type { ProviderToolOptions } from \"@perstack/provider-core\"\nimport type { ToolSet } from \"ai\"\n\ntype VertexClient = ReturnType<typeof createVertex>\n\nexport function buildVertexTools(\n client: VertexClient,\n toolNames: string[],\n options?: ProviderToolOptions,\n): ToolSet {\n const tools: ToolSet = {}\n for (const name of toolNames) {\n switch (name) {\n case \"googleSearch\": {\n const googleSearchTool = client.tools.googleSearch({})\n tools[\"google_search\"] = googleSearchTool\n break\n }\n case \"codeExecution\": {\n const codeExecutionTool = client.tools.codeExecution({})\n tools[\"code_execution\"] = codeExecutionTool\n break\n }\n case \"urlContext\": {\n const urlContextTool = client.tools.urlContext({})\n tools[\"url_context\"] = urlContextTool\n break\n }\n case \"enterpriseWebSearch\": {\n const enterpriseWebSearchTool = client.tools.enterpriseWebSearch({})\n tools[\"enterprise_web_search\"] = enterpriseWebSearchTool\n break\n }\n case \"googleMaps\": {\n const googleMapsTool = client.tools.googleMaps(options?.googleMaps?.retrievalConfig ?? {})\n tools[\"google_maps\"] = googleMapsTool\n break\n }\n }\n }\n return tools\n}\n","import { createVertex } from \"@ai-sdk/google-vertex\"\nimport type { GoogleVertexProviderConfig } from \"@perstack/core\"\nimport {\n BaseProviderAdapter,\n type ProviderAdapterOptions,\n type ProviderError,\n type ProviderOptions,\n type ProviderOptionsConfig,\n type ProviderToolOptions,\n type ReasoningBudget,\n} from \"@perstack/provider-core\"\nimport type { JSONValue, LanguageModel, ToolSet } from \"ai\"\nimport { isVertexRetryable, normalizeVertexError } from \"./errors.js\"\nimport { buildVertexTools } from \"./tools.js\"\n\nexport class VertexProviderAdapter extends BaseProviderAdapter {\n readonly providerName = \"google-vertex\" as const\n private readonly client: ReturnType<typeof createVertex>\n\n constructor(\n readonly config: GoogleVertexProviderConfig,\n options?: ProviderAdapterOptions,\n ) {\n super(options)\n this.client = createVertex({\n project: config.project,\n location: config.location,\n baseURL: config.baseUrl,\n headers: config.headers,\n fetch: options?.proxyUrl ? this.createProxyFetch(options.proxyUrl) : undefined,\n })\n }\n\n override createModel(modelId: string): LanguageModel {\n return this.client(modelId)\n }\n\n override getProviderTools(toolNames: string[], options?: ProviderToolOptions): ToolSet {\n return buildVertexTools(this.client, toolNames, options)\n }\n\n override getProviderOptions(config?: ProviderOptionsConfig): ProviderOptions | undefined {\n if (!config?.safetySettings || config.safetySettings.length === 0) {\n return undefined\n }\n return {\n vertex: {\n safetySettings: config.safetySettings as unknown as JSONValue,\n },\n }\n }\n\n override getReasoningOptions(budget: ReasoningBudget): ProviderOptions | undefined {\n if (budget === \"none\" || budget === 0) {\n return undefined\n }\n const budgetTokens = this.budgetToTokens(budget)\n return {\n vertex: {\n thinkingConfig: {\n thinkingBudget: budgetTokens,\n includeThoughts: true,\n },\n },\n }\n }\n\n private budgetToTokens(budget: ReasoningBudget): number {\n if (typeof budget === \"number\") return budget\n const map: Record<string, number> = {\n minimal: 1024,\n low: 2048,\n medium: 5000,\n high: 10000,\n }\n return map[budget] ?? 5000\n }\n\n override normalizeError(error: unknown): ProviderError {\n return normalizeVertexError(error)\n }\n\n override isRetryable(error: unknown): boolean {\n return isVertexRetryable(error)\n }\n}\n","import { AnthropicProviderAdapter } from \"@perstack/anthropic-provider\"\nimport { AzureOpenAIProviderAdapter } from \"@perstack/azure-openai-provider\"\nimport { BedrockProviderAdapter } from \"@perstack/bedrock-provider\"\nimport type { ProviderConfig } from \"@perstack/core\"\nimport { DeepseekProviderAdapter } from \"@perstack/deepseek-provider\"\nimport { GoogleProviderAdapter } from \"@perstack/google-provider\"\nimport { OllamaProviderAdapter } from \"@perstack/ollama-provider\"\nimport { OpenAIProviderAdapter } from \"@perstack/openai-provider\"\nimport type { ProviderAdapter, ProviderAdapterOptions } from \"@perstack/provider-core\"\nimport { VertexProviderAdapter } from \"@perstack/vertex-provider\"\nimport { registerProviderAdapter } from \"./provider-adapter-factory.js\"\n\ntype GenericAdapterConstructor = new (\n config: ProviderConfig,\n options?: ProviderAdapterOptions,\n) => ProviderAdapter\n\nregisterProviderAdapter(\n \"anthropic\",\n async () => AnthropicProviderAdapter as unknown as GenericAdapterConstructor,\n)\n\nregisterProviderAdapter(\n \"openai\",\n async () => OpenAIProviderAdapter as unknown as GenericAdapterConstructor,\n)\n\nregisterProviderAdapter(\n \"google\",\n async () => GoogleProviderAdapter as unknown as GenericAdapterConstructor,\n)\n\nregisterProviderAdapter(\n \"ollama\",\n async () => OllamaProviderAdapter as unknown as GenericAdapterConstructor,\n)\n\nregisterProviderAdapter(\n \"azure-openai\",\n async () => AzureOpenAIProviderAdapter as unknown as GenericAdapterConstructor,\n)\n\nregisterProviderAdapter(\n \"amazon-bedrock\",\n async () => BedrockProviderAdapter as unknown as GenericAdapterConstructor,\n)\n\nregisterProviderAdapter(\n \"google-vertex\",\n async () => VertexProviderAdapter as unknown as GenericAdapterConstructor,\n)\n\nregisterProviderAdapter(\n \"deepseek\",\n async () => DeepseekProviderAdapter as unknown as GenericAdapterConstructor,\n)\n","import type { ReasoningBudget } from \"@perstack/core\"\nimport type { ProviderAdapter, ProviderOptions } from \"@perstack/provider-core\"\nimport { generateText, type LanguageModel, streamText } from \"ai\"\nimport type {\n GenerateTextParams,\n LLMExecutionResult,\n StreamCallbacks,\n StreamTextParams,\n} from \"./types.js\"\n\n/** Check if reasoning should be enabled based on budget value */\nconst shouldEnableReasoning = (budget: ReasoningBudget | undefined): boolean =>\n budget !== undefined && budget !== \"none\" && budget !== 0\n\nexport class LLMExecutor {\n constructor(\n private readonly adapter: ProviderAdapter,\n private readonly model: LanguageModel,\n ) {}\n\n async generateText(params: GenerateTextParams): Promise<LLMExecutionResult> {\n const providerTools = this.adapter.getProviderTools(\n params.providerToolNames ?? [],\n params.providerToolOptions,\n )\n const baseProviderOptions = this.adapter.getProviderOptions(params.providerOptionsConfig)\n const reasoningEnabled = shouldEnableReasoning(params.reasoningBudget)\n const reasoningOptions =\n reasoningEnabled && params.reasoningBudget\n ? this.adapter.getReasoningOptions(params.reasoningBudget)\n : undefined\n const providerOptions = this.mergeProviderOptions(baseProviderOptions, reasoningOptions)\n\n try {\n const result = await generateText({\n model: this.model,\n messages: params.messages,\n maxRetries: params.maxRetries,\n tools: { ...params.tools, ...providerTools },\n toolChoice: params.toolChoice,\n abortSignal: params.abortSignal,\n providerOptions,\n })\n return { success: true, result }\n } catch (error) {\n const providerError = this.adapter.normalizeError(error)\n return {\n success: false,\n error: providerError,\n isRetryable: this.adapter.isRetryable(error),\n }\n }\n }\n\n private mergeProviderOptions(\n ...options: (ProviderOptions | undefined)[]\n ): ProviderOptions | undefined {\n const defined = options.filter(Boolean) as ProviderOptions[]\n if (defined.length === 0) return undefined\n const result: ProviderOptions = {}\n for (const opt of defined) {\n for (const [provider, settings] of Object.entries(opt)) {\n result[provider] = { ...result[provider], ...settings }\n }\n }\n return result\n }\n\n async generateTextWithoutTools(\n params: Omit<\n GenerateTextParams,\n \"tools\" | \"toolChoice\" | \"providerToolNames\" | \"providerToolOptions\"\n >,\n ): Promise<LLMExecutionResult> {\n const baseProviderOptions = this.adapter.getProviderOptions(params.providerOptionsConfig)\n const reasoningEnabled = shouldEnableReasoning(params.reasoningBudget)\n const reasoningOptions =\n reasoningEnabled && params.reasoningBudget\n ? this.adapter.getReasoningOptions(params.reasoningBudget)\n : undefined\n const providerOptions = this.mergeProviderOptions(baseProviderOptions, reasoningOptions)\n\n try {\n const result = await generateText({\n model: this.model,\n messages: params.messages,\n maxRetries: params.maxRetries,\n abortSignal: params.abortSignal,\n providerOptions,\n })\n return { success: true, result }\n } catch (error) {\n const providerError = this.adapter.normalizeError(error)\n return {\n success: false,\n error: providerError,\n isRetryable: this.adapter.isRetryable(error),\n }\n }\n }\n\n async streamText(\n params: StreamTextParams,\n callbacks: StreamCallbacks,\n ): Promise<LLMExecutionResult> {\n const providerTools = this.adapter.getProviderTools(\n params.providerToolNames ?? [],\n params.providerToolOptions,\n )\n const baseProviderOptions = this.adapter.getProviderOptions(params.providerOptionsConfig)\n const reasoningEnabled = shouldEnableReasoning(params.reasoningBudget)\n const reasoningOptions =\n reasoningEnabled && params.reasoningBudget\n ? this.adapter.getReasoningOptions(params.reasoningBudget)\n : undefined\n const providerOptions = this.mergeProviderOptions(baseProviderOptions, reasoningOptions)\n\n const streamResult = streamText({\n model: this.model,\n messages: params.messages,\n maxRetries: params.maxRetries,\n tools: { ...params.tools, ...providerTools },\n toolChoice: params.toolChoice,\n abortSignal: params.abortSignal,\n providerOptions,\n })\n\n let reasoningStarted = false\n let reasoningCompleted = false\n let resultStarted = false\n let accumulatedReasoning = \"\"\n\n try {\n // Iterate over fullStream to emit streaming events\n for await (const part of streamResult.fullStream) {\n if (part.type === \"reasoning-delta\") {\n if (!reasoningStarted) {\n callbacks.onReasoningStart?.()\n reasoningStarted = true\n }\n accumulatedReasoning += part.text\n callbacks.onReasoningDelta?.(part.text)\n }\n if (part.type === \"text-delta\") {\n // Complete reasoning phase before starting result phase\n if (reasoningStarted && !reasoningCompleted) {\n callbacks.onReasoningComplete?.(accumulatedReasoning)\n reasoningCompleted = true\n }\n if (!resultStarted) {\n callbacks.onResultStart?.()\n resultStarted = true\n }\n callbacks.onResultDelta?.(part.text)\n }\n }\n\n // If reasoning was started but never completed (no text-delta received),\n // complete it now\n if (reasoningStarted && !reasoningCompleted) {\n callbacks.onReasoningComplete?.(accumulatedReasoning)\n reasoningCompleted = true\n }\n\n // After fullStream is consumed, await the final result\n // The streamText result object caches these values during streaming\n const text = await streamResult.text\n const toolCalls = await streamResult.toolCalls\n const finishReason = await streamResult.finishReason\n const usage = await streamResult.usage\n const reasoning = await streamResult.reasoning\n const response = await streamResult.response\n\n // Complete result streaming if it was started\n if (resultStarted) {\n callbacks.onResultComplete?.(text)\n }\n\n // Construct a result compatible with GenerateTextResult\n const result = {\n text,\n toolCalls,\n finishReason,\n usage,\n reasoning,\n response,\n // These properties are required by GenerateTextResult but not available in streamText\n // They're optional or have safe defaults\n toolResults: [] as never[],\n steps: [],\n experimental_output: undefined,\n providerMetadata: undefined,\n request: { body: \"\" },\n }\n\n return { success: true, result: result as never }\n } catch (error) {\n const providerError = this.adapter.normalizeError(error)\n return {\n success: false,\n error: providerError,\n isRetryable: this.adapter.isRetryable(error),\n }\n }\n }\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport {\n type Checkpoint,\n createRuntimeEvent,\n type Expert,\n type Lockfile,\n type RunEvent,\n type RunSetting,\n type RuntimeEvent,\n type Step,\n} from \"@perstack/core\"\nimport pkg from \"../../package.json\" with { type: \"json\" }\nimport { RunEventEmitter } from \"../events/event-emitter.js\"\nimport {\n createInitialCheckpoint,\n createNextStepCheckpoint,\n getContextWindow,\n getLockfileExpertToolDefinitions,\n type ResolveExpertToRunFn,\n setupExperts,\n} from \"../helpers/index.js\"\nimport { createProviderAdapter } from \"../helpers/provider-adapter-factory.js\"\nimport \"../helpers/register-providers.js\"\nimport { LLMExecutor } from \"../llm/index.js\"\nimport { getSkillManagers, getSkillManagersFromLockfile } from \"../skill-manager/index.js\"\nimport { executeStateMachine } from \"../state-machine/index.js\"\n\nexport type SingleRunExecutorOptions = {\n shouldContinueRun?: (setting: RunSetting, checkpoint: Checkpoint, step: Step) => Promise<boolean>\n storeCheckpoint?: (checkpoint: Checkpoint) => Promise<void>\n storeEvent?: (event: RunEvent) => Promise<void>\n eventListener?: (event: RunEvent | RuntimeEvent) => void\n resolveExpertToRun?: ResolveExpertToRunFn\n lockfile?: Lockfile\n}\n\nexport type SingleRunResult = {\n checkpoint: Checkpoint\n expertToRun: Expert\n experts: Record<string, Expert>\n}\n\n/**\n * Executes a single run (state machine execution) without any loop or delegation handling.\n * This is the core orchestration unit that should NOT call run() recursively.\n *\n * Note: This executes a complete state machine run until it reaches a terminal state\n * (completed, stoppedByInteractiveTool, stoppedByDelegate, etc.), not just a single step.\n */\nexport class SingleRunExecutor {\n constructor(private options: SingleRunExecutorOptions = {}) {}\n\n async execute(setting: RunSetting, checkpoint?: Checkpoint): Promise<SingleRunResult> {\n const adapter = await createProviderAdapter(setting.providerConfig, {\n proxyUrl: setting.proxyUrl,\n })\n const model = adapter.createModel(setting.model)\n const llmExecutor = new LLMExecutor(adapter, model)\n\n const contextWindow = getContextWindow(setting.providerConfig.providerName, setting.model)\n const { expertToRun, experts } = await setupExperts(setting, this.options.resolveExpertToRun)\n\n this.emitInitEvent(setting, expertToRun, experts)\n\n const lockfileExpert = this.options.lockfile?.experts[setting.expertKey]\n const skillManagers = lockfileExpert\n ? await getSkillManagersFromLockfile(\n expertToRun,\n experts,\n setting,\n getLockfileExpertToolDefinitions(lockfileExpert),\n this.options.eventListener,\n { isDelegatedRun: !!checkpoint?.delegatedBy },\n )\n : await getSkillManagers(expertToRun, experts, setting, this.options.eventListener, {\n isDelegatedRun: !!checkpoint?.delegatedBy,\n })\n\n const initialCheckpoint = checkpoint\n ? createNextStepCheckpoint(createId(), checkpoint)\n : createInitialCheckpoint(createId(), {\n jobId: setting.jobId,\n runId: setting.runId,\n expertKey: setting.expertKey,\n expert: expertToRun,\n contextWindow,\n })\n\n const eventEmitter = new RunEventEmitter()\n const eventListener = this.createEventListener()\n eventEmitter.subscribe(eventListener)\n\n const resultCheckpoint = await executeStateMachine({\n setting: { ...setting, experts },\n initialCheckpoint,\n eventListener,\n skillManagers,\n llmExecutor,\n eventEmitter,\n storeCheckpoint: this.options.storeCheckpoint ?? (async () => {}),\n shouldContinueRun: this.options.shouldContinueRun,\n })\n\n return { checkpoint: resultCheckpoint, expertToRun, experts }\n }\n\n private createEventListener(): (event: RunEvent | RuntimeEvent) => Promise<void> {\n const userListener = this.options.eventListener\n const storeEvent = this.options.storeEvent\n return async (event: RunEvent | RuntimeEvent) => {\n // Store RunEvents (events with stepNumber) if storeEvent is provided\n if (\"stepNumber\" in event && storeEvent) {\n await storeEvent(event as RunEvent)\n }\n userListener?.(event)\n }\n }\n\n private emitInitEvent(\n setting: RunSetting,\n expertToRun: Expert,\n experts: Record<string, Expert>,\n ): void {\n if (!this.options.eventListener) return\n\n const initEvent = createRuntimeEvent(\"initializeRuntime\", setting.jobId, setting.runId, {\n runtimeVersion: pkg.version,\n runtime: \"local\",\n expertName: expertToRun.name,\n experts: Object.keys(experts),\n model: setting.model,\n maxSteps: setting.maxSteps,\n maxRetries: setting.maxRetries,\n timeout: setting.timeout,\n query: setting.input.text,\n interactiveToolCall: setting.input.interactiveToolCallResult,\n })\n this.options.eventListener(initEvent)\n }\n}\n","import type {\n Checkpoint,\n Job,\n Lockfile,\n RunEvent,\n RunParamsInput,\n RunSetting,\n RuntimeEvent,\n Step,\n} from \"@perstack/core\"\nimport { runParamsSchema } from \"@perstack/core\"\nimport { createEmptyUsage, type ResolveExpertToRunFn } from \"./helpers/index.js\"\nimport {\n buildReturnFromDelegation,\n extractDelegationContext,\n SingleRunExecutor,\n selectDelegationStrategy,\n} from \"./orchestration/index.js\"\n\nexport type RunOptions = {\n shouldContinueRun?: (setting: RunSetting, checkpoint: Checkpoint, step: Step) => Promise<boolean>\n retrieveCheckpoint?: (jobId: string, checkpointId: string) => Promise<Checkpoint>\n storeCheckpoint?: (checkpoint: Checkpoint) => Promise<void>\n storeEvent?: (event: RunEvent) => Promise<void>\n storeJob?: (job: Job) => void\n retrieveJob?: (jobId: string) => Job | undefined\n createJob?: (jobId: string, expertKey: string, maxSteps?: number) => Job\n eventListener?: (event: RunEvent | RuntimeEvent) => void\n resolveExpertToRun?: ResolveExpertToRunFn\n returnOnDelegationComplete?: boolean\n lockfile?: Lockfile\n}\n\nconst defaultCreateJob = (jobId: string, expertKey: string, maxSteps?: number): Job => ({\n id: jobId,\n coordinatorExpertKey: expertKey,\n status: \"running\",\n totalSteps: 0,\n startedAt: Date.now(),\n maxSteps,\n usage: createEmptyUsage(),\n})\n\n/**\n * Execute a run with the given parameters and options.\n * This is the main entry point for the runtime.\n *\n * The run loop handles:\n * - Job management\n * - Delegation routing (single vs parallel)\n * - Terminal state detection\n *\n * Each run execution is delegated to SingleRunExecutor.\n */\nexport async function run(runInput: RunParamsInput, options?: RunOptions): Promise<Checkpoint> {\n const runParams = runParamsSchema.parse(runInput)\n let { setting, checkpoint } = runParams\n\n const storeJob = options?.storeJob ?? (() => {})\n const retrieveJob = options?.retrieveJob ?? (() => undefined)\n const retrieveCheckpoint =\n options?.retrieveCheckpoint ??\n (async () => {\n throw new Error(\"retrieveCheckpoint not provided\")\n })\n const createJob = options?.createJob ?? defaultCreateJob\n\n let job: Job =\n retrieveJob(setting.jobId) ?? createJob(setting.jobId, setting.expertKey, setting.maxSteps)\n if (job.status !== \"running\") {\n job = { ...job, status: \"running\", finishedAt: undefined }\n }\n storeJob(job)\n\n const runExecutor = new SingleRunExecutor({\n shouldContinueRun: options?.shouldContinueRun,\n storeCheckpoint: options?.storeCheckpoint,\n storeEvent: options?.storeEvent,\n eventListener: options?.eventListener,\n resolveExpertToRun: options?.resolveExpertToRun,\n lockfile: options?.lockfile,\n })\n\n while (true) {\n const runResult = await runExecutor.execute(setting, checkpoint)\n const resultCheckpoint = runResult.checkpoint\n\n job = {\n ...job,\n totalSteps: resultCheckpoint.stepNumber,\n usage: resultCheckpoint.usage,\n }\n\n switch (resultCheckpoint.status) {\n case \"completed\": {\n if (options?.returnOnDelegationComplete) {\n storeJob(job)\n return resultCheckpoint\n }\n if (resultCheckpoint.delegatedBy) {\n storeJob(job)\n const parentCheckpoint = await retrieveCheckpoint(\n setting.jobId,\n resultCheckpoint.delegatedBy.checkpointId,\n )\n const result = buildReturnFromDelegation(setting, resultCheckpoint, parentCheckpoint)\n setting = result.setting\n checkpoint = result.checkpoint\n break\n }\n storeJob({ ...job, status: \"completed\", finishedAt: Date.now() })\n return resultCheckpoint\n }\n\n case \"stoppedByInteractiveTool\": {\n storeJob({ ...job, status: \"stoppedByInteractiveTool\" })\n return resultCheckpoint\n }\n\n case \"stoppedByDelegate\": {\n storeJob(job)\n const { delegateTo } = resultCheckpoint\n if (!delegateTo || delegateTo.length === 0) {\n throw new Error(\"No delegations found in checkpoint\")\n }\n const strategy = selectDelegationStrategy(delegateTo.length)\n const context = extractDelegationContext(resultCheckpoint)\n\n // All strategies now use the same interface - delegations parameter is used directly\n // Pass parent options so child runs inherit callbacks for checkpoint persistence and events\n const delegationResult = await strategy.execute(\n delegateTo,\n setting,\n context,\n runResult.expertToRun,\n run,\n options,\n )\n\n setting = delegationResult.nextSetting\n checkpoint = delegationResult.nextCheckpoint\n break\n }\n\n case \"stoppedByExceededMaxSteps\": {\n storeJob({ ...job, status: \"stoppedByMaxSteps\", finishedAt: Date.now() })\n return resultCheckpoint\n }\n\n case \"stoppedByError\": {\n storeJob({ ...job, status: \"stoppedByError\", finishedAt: Date.now() })\n return resultCheckpoint\n }\n\n default:\n throw new Error(\"Run stopped by unknown reason\")\n }\n }\n}\n"]}
|