@mastra/cloudflare 0.13.3 → 0.13.4
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/CHANGELOG.md +20 -0
- package/dist/index.cjs +7 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +7 -19
- package/dist/index.js.map +1 -1
- package/dist/storage/domains/workflows/index.d.ts +2 -9
- package/dist/storage/domains/workflows/index.d.ts.map +1 -1
- package/dist/storage/index.d.ts +2 -9
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/test-utils.d.ts.map +1 -1
- package/package.json +5 -5
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/storage/domains/legacy-evals/index.ts","../src/storage/domains/memory/index.ts","../src/storage/domains/operations/index.ts","../src/storage/domains/scores/index.ts","../src/storage/domains/traces/index.ts","../src/storage/domains/workflows/index.ts","../src/storage/types.ts","../src/storage/index.ts"],"names":["MastraError","ErrorDomain","ErrorCategory","TABLE_THREADS","TABLE_MESSAGES","TABLE_EVALS","serializeDate","ensureDate","TABLE_SCORERS","TABLE_TRACES","key","TABLE_WORKFLOW_SNAPSHOT"],"mappings":";;;;;;;AAKO,IAAM,4BAAA,GAAN,cAA2C,kBAAA,CAAmB;AAAA,EACnE,UAAA;AAAA,EACA,WAAA,CAAY,EAAE,UAAA,EAAW,EAA8C;AACrE,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACpB;AAAA,EAEA,MAAM,mBAAA,CAAoB,SAAA,EAAmB,IAAA,EAA4C;AACvF,IAAA,IAAI;AAEF,MAAA,MAAM,MAAA,GAAS,KAAK,UAAA,CAAW,eAAA,GAAkB,GAAG,IAAA,CAAK,UAAA,CAAW,eAAe,CAAA,CAAA,CAAA,GAAM,EAAA;AACzF,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,WAAA,EAAa,EAAE,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,EAAG,WAAW,IAAI,CAAA;AAE/F,MAAA,MAAM,QAAmB,EAAC;AAE1B,MAAA,KAAA,MAAW,EAAE,IAAA,EAAM,GAAA,EAAI,IAAK,OAAA,EAAS;AACnC,QAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,aAAa,GAAG,CAAA;AACzD,QAAA,IAAI,CAAC,IAAA,EAAM;AAGX,QAAA,IAAI,IAAA,CAAK,eAAe,SAAA,EAAW;AAGnC,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,KAAc,IAAA,IAAQ,KAAK,SAAA,KAAc,MAAA;AAC7D,UAAA,MAAM,QAAA,GAAW,SAAS,MAAA,GAAS,MAAA;AACnC,UAAA,IAAI,aAAa,IAAA,EAAM;AAAA,QACzB;AAGA,QAAA,MAAM,UAAA,GAAa;AAAA,UACjB,GAAG,IAAA;AAAA,UACH,OAAO,IAAA,CAAK,MAAA;AAAA,UACZ,UAAU,IAAA,CAAK;AAAA,SACjB;AAEA,QAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AAAA,MACvB;AAGA,MAAA,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACnB,QAAA,MAAM,QAAQ,IAAI,IAAA,CAAK,EAAE,SAAA,IAAa,CAAC,EAAE,OAAA,EAAQ;AACjD,QAAA,MAAM,QAAQ,IAAI,IAAA,CAAK,EAAE,SAAA,IAAa,CAAC,EAAE,OAAA,EAAQ;AACjD,QAAA,OAAO,KAAA,GAAQ,KAAA;AAAA,MACjB,CAAC,CAAA;AAED,MAAA,OAAO,KAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,WAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,mDAAA;AAAA,UACJ,QAAQ,WAAA,CAAY,OAAA;AAAA,UACpB,UAAU,aAAA,CAAc,WAAA;AAAA,UACxB,IAAA,EAAM;AAAA,SACR;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,OAAA,EACgD;AAChD,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,WAAW,IAAA,EAAM,IAAA,GAAO,GAAG,OAAA,GAAU,GAAA,EAAK,WAAU,GAAI,OAAA;AAGhE,MAAA,MAAM,MAAA,GAAS,KAAK,UAAA,CAAW,eAAA,GAAkB,GAAG,IAAA,CAAK,UAAA,CAAW,eAAe,CAAA,CAAA,CAAA,GAAM,EAAA;AACzF,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,WAAA,EAAa,EAAE,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,EAAG,WAAW,IAAI,CAAA;AAE/F,MAAA,MAAM,QAAmB,EAAC;AAE1B,MAAA,KAAA,MAAW,EAAE,IAAA,EAAM,GAAA,EAAI,IAAK,OAAA,EAAS;AACnC,QAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,aAAa,GAAG,CAAA;AACzD,QAAA,IAAI,CAAC,IAAA,EAAM;AAGX,QAAA,IAAI,SAAA,IAAa,IAAA,CAAK,UAAA,KAAe,SAAA,EAAW;AAGhD,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,KAAc,IAAA,IAAQ,KAAK,SAAA,KAAc,MAAA;AAC7D,UAAA,MAAM,QAAA,GAAW,SAAS,MAAA,GAAS,MAAA;AACnC,UAAA,IAAI,aAAa,IAAA,EAAM;AAAA,QACzB;AAGA,QAAA,IAAI,SAAA,EAAW,KAAA,IAAS,SAAA,EAAW,GAAA,EAAK;AACtC,UAAA,MAAM,WAAW,IAAI,IAAA,CAAK,KAAK,SAAA,IAAa,IAAA,CAAK,cAAc,CAAC,CAAA;AAChE,UAAA,IAAI,SAAA,CAAU,KAAA,IAAS,QAAA,GAAW,SAAA,CAAU,KAAA,EAAO;AACnD,UAAA,IAAI,SAAA,CAAU,GAAA,IAAO,QAAA,GAAW,SAAA,CAAU,GAAA,EAAK;AAAA,QACjD;AAGA,QAAA,MAAM,UAAA,GAAa;AAAA,UACjB,GAAG,IAAA;AAAA,UACH,OAAO,IAAA,CAAK,MAAA;AAAA,UACZ,UAAU,IAAA,CAAK;AAAA,SACjB;AAEA,QAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AAAA,MACvB;AAGA,MAAA,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACnB,QAAA,MAAM,QAAQ,IAAI,IAAA,CAAK,EAAE,SAAA,IAAa,CAAC,EAAE,OAAA,EAAQ;AACjD,QAAA,MAAM,QAAQ,IAAI,IAAA,CAAK,EAAE,SAAA,IAAa,CAAC,EAAE,OAAA,EAAQ;AACjD,QAAA,OAAO,KAAA,GAAQ,KAAA;AAAA,MACjB,CAAC,CAAA;AAGD,MAAA,MAAM,QAAQ,IAAA,GAAO,OAAA;AACrB,MAAA,MAAM,MAAM,KAAA,GAAQ,OAAA;AACpB,MAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAE7C,MAAA,OAAO;AAAA,QACL,IAAA;AAAA,QACA,OAAA;AAAA,QACA,OAAO,KAAA,CAAM,MAAA;AAAA,QACb,OAAA,EAAS,KAAA,GAAQ,OAAA,GAAU,KAAA,CAAM,MAAA;AAAA,QACjC,KAAA,EAAO;AAAA,OACT;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,WAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,qCAAA;AAAA,UACJ,QAAQ,WAAA,CAAY,OAAA;AAAA,UACpB,UAAU,aAAA,CAAc,WAAA;AAAA,UACxB,IAAA,EAAM;AAAA,SACR;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACF,CAAA;AC3HO,IAAM,uBAAA,GAAN,cAAsC,aAAA,CAAc;AAAA,EACzD,UAAA;AAAA,EACA,WAAA,CAAY,EAAE,UAAA,EAAW,EAA8C;AACrE,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACpB;AAAA,EAEQ,eAAe,QAAA,EAA6F;AAClH,IAAA,IAAI,CAAC,UAAU,OAAO,MAAA;AACtB,IAAA,OAAO,OAAO,QAAA,KAAa,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,GAAI,QAAA;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,wBAAwB,OAAA,EAAsE;AACpG,IAAA,IAAI,CAAC,OAAA,EAAS,OAAO,EAAE,MAAM,WAAA,EAAY;AACzC,IAAA,IAAI,OAAO,YAAY,QAAA,EAAU,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAO;AACjF,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAO;AAC3E,IAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,EAAE;AACrF,IAAA,OAAO,EAAE,IAAA,EAAM,OAAO,OAAA,EAAQ;AAAA,EAChC;AAAA,EAEA,MAAM,aAAA,CAAc,EAAE,QAAA,EAAS,EAA4D;AACzF,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,IAAA,CAAwB,EAAE,SAAA,EAAW,aAAA,EAAe,IAAA,EAAM,EAAE,EAAA,EAAI,QAAA,IAAY,CAAA;AACjH,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,IAAA,IAAI;AACF,MAAA,OAAO;AAAA,QACL,GAAG,MAAA;AAAA,QACH,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,SAAS,CAAA;AAAA,QACtC,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,SAAS,CAAA;AAAA,QACtC,QAAA,EAAU,IAAA,CAAK,cAAA,CAAe,MAAA,CAAO,QAAQ;AAAA,OAC/C;AAAA,IACF,SAAS,KAAA,EAAY;AACnB,MAAA,MAAM,cAAc,IAAIA,WAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,4CAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,EAAQ,eAAe,WAAW,CAAA;AACvC,MAAA,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACzC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,sBAAA,CAAuB,EAAE,UAAA,EAAW,EAAyD;AACjG,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,CAAW,OAAO,aAAa,CAAA;AAC1D,MAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,QAC5B,OAAA,CAAQ,GAAA,CAAI,OAAM,MAAA,KAAU;AAC1B,UAAA,IAAI;AACF,YAAA,MAAM,OAAO,MAAM,IAAA,CAAK,WAAW,KAAA,CAAM,aAAA,EAAe,OAAO,IAAI,CAAA;AACnE,YAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,YAAA,MAAM,SAAS,OAAO,IAAA,KAAS,WAAW,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA;AAC7D,YAAA,IAAI,CAAC,UAAU,CAAC,MAAA,CAAO,cAAc,MAAA,CAAO,UAAA,KAAe,YAAY,OAAO,IAAA;AAE9E,YAAA,OAAO;AAAA,cACL,GAAG,MAAA;AAAA,cACH,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,SAAS,CAAA;AAAA,cACtC,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,SAAS,CAAA;AAAA,cACtC,QAAA,EAAU,IAAA,CAAK,cAAA,CAAe,MAAA,CAAO,QAAQ;AAAA,aAC/C;AAAA,UACF,SAAS,KAAA,EAAY;AACnB,YAAA,MAAM,cAAc,IAAIF,WAAAA;AAAA,cACtB;AAAA,gBACE,EAAA,EAAI,sDAAA;AAAA,gBACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,gBACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,gBACxB,OAAA,EAAS;AAAA,kBACP;AAAA;AACF,eACF;AAAA,cACA;AAAA,aACF;AACA,YAAA,IAAA,CAAK,MAAA,EAAQ,eAAe,WAAW,CAAA;AACvC,YAAA,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACzC,YAAA,OAAO,IAAA;AAAA,UACT;AAAA,QACF,CAAC;AAAA,OACH;AACA,MAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAA,KAAwC,WAAW,IAAI,CAAA;AAAA,IAChF,SAAS,KAAA,EAAY;AACnB,MAAA,MAAM,cAAc,IAAIF,WAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,sDAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,EAAQ,eAAe,WAAW,CAAA;AACvC,MAAA,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACzC,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAM,gCAAgC,IAAA,EAIyB;AAC7D,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,UAAA,EAAY,IAAA,GAAO,CAAA,EAAG,OAAA,GAAU,KAAI,GAAI,IAAA;AAGhD,MAAA,MAAM,MAAA,GAAS,KAAK,UAAA,CAAW,eAAA,GAAkB,GAAG,IAAA,CAAK,UAAA,CAAW,eAAe,CAAA,CAAA,CAAA,GAAM,EAAA;AACzF,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,aAAA,EAAe,EAAE,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,EAAG,aAAa,IAAI,CAAA;AAEnG,MAAA,MAAM,UAA+B,EAAC;AAEtC,MAAA,KAAA,MAAW,EAAE,IAAA,EAAM,GAAA,EAAI,IAAK,OAAA,EAAS;AACnC,QAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,eAAe,GAAG,CAAA;AAC3D,QAAA,IAAI,CAAC,IAAA,EAAM;AAGX,QAAA,IAAI,IAAA,CAAK,eAAe,UAAA,EAAY;AAEpC,QAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,MACnB;AAGA,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACrB,QAAA,MAAM,QAAQ,IAAI,IAAA,CAAK,EAAE,SAAA,IAAa,CAAC,EAAE,OAAA,EAAQ;AACjD,QAAA,MAAM,QAAQ,IAAI,IAAA,CAAK,EAAE,SAAA,IAAa,CAAC,EAAE,OAAA,EAAQ;AACjD,QAAA,OAAO,KAAA,GAAQ,KAAA;AAAA,MACjB,CAAC,CAAA;AAGD,MAAA,MAAM,QAAQ,IAAA,GAAO,OAAA;AACrB,MAAA,MAAM,MAAM,KAAA,GAAQ,OAAA;AACpB,MAAA,MAAM,gBAAA,GAAmB,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAEjD,MAAA,OAAO;AAAA,QACL,IAAA;AAAA,QACA,OAAA;AAAA,QACA,OAAO,OAAA,CAAQ,MAAA;AAAA,QACf,OAAA,EAAS,KAAA,GAAQ,OAAA,GAAU,OAAA,CAAQ,MAAA;AAAA,QACnC,OAAA,EAAS;AAAA,OACX;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAIF,WAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,gEAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,IAAA,EAAM;AAAA,SACR;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UAAA,CAAW,EAAE,MAAA,EAAO,EAA8D;AACtF,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,WAAW,MAAA,CAAO,EAAE,WAAW,aAAA,EAAe,MAAA,EAAQ,QAAQ,CAAA;AACzE,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAY;AACnB,MAAA,MAAM,IAAIF,WAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,uCAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP,UAAU,MAAA,CAAO;AAAA;AACnB,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM,YAAA,CAAa;AAAA,IACjB,EAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF,EAI+B;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,cAAc,EAAE,QAAA,EAAU,IAAI,CAAA;AACxD,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,EAAE,CAAA,UAAA,CAAY,CAAA;AAAA,MAC1C;AAEA,MAAA,MAAM,aAAA,GAAgB;AAAA,QACpB,GAAG,MAAA;AAAA,QACH,KAAA;AAAA,QACA,QAAA,EAAU,KAAK,cAAA,CAAe;AAAA,UAC5B,GAAI,MAAA,CAAO,QAAA,IAAY,EAAC;AAAA,UACxB,GAAG;AAAA,SACJ,CAAA;AAAA,QACD,SAAA,sBAAe,IAAA;AAAK,OACtB;AAGA,MAAA,MAAM,IAAA,CAAK,WAAW,MAAA,CAAO,EAAE,WAAW,aAAA,EAAe,MAAA,EAAQ,eAAe,CAAA;AAChF,MAAA,OAAO,aAAA;AAAA,IACT,SAAS,KAAA,EAAY;AACnB,MAAA,MAAM,IAAIF,WAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,yCAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP,QAAA,EAAU,EAAA;AAAA,YACV;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,aAAA,CAAc,UAAkB,SAAA,EAA2B;AACjE,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,WAAW,MAAA,CAAO,cAAA,EAAgB,EAAE,QAAA,EAAU,EAAA,EAAI,WAAW,CAAA;AAAA,IAC3E,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,MAAA,IAAA,CAAK,MAAA,EAAQ,MAAM,CAAA,qCAAA,EAAwC,QAAQ,gBAAgB,SAAS,CAAA,CAAA,CAAA,EAAK,EAAE,OAAA,EAAS,CAAA;AAC5G,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,qBAAqB,QAAA,EAA0B;AACrD,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,WAAW,MAAA,CAAO,cAAA,EAAgB,EAAE,QAAA,EAAU,EAAA,EAAI,YAAY,CAAA;AAAA,IAC5E,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,CAAA,6CAAA,EAAgD,QAAQ,CAAA,CAAA,CAAA,EAAK,EAAE,SAAS,CAAA;AAC3F,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,YAAA,CAAa,EAAE,QAAA,EAAS,EAAwC;AACpE,IAAA,IAAI;AAEF,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,aAAA,CAAc,EAAE,UAAU,CAAA;AACpD,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,QAAQ,CAAA,UAAA,CAAY,CAAA;AAAA,MAChD;AAGA,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,UAAA,CAAW,OAAO,cAAc,CAAA;AAC/D,MAAA,MAAM,iBAAA,GAAoB,WAAA,CAAY,MAAA,CAAO,CAAA,GAAA,KAAO,GAAA,CAAI,IAAA,CAAK,QAAA,CAAS,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,CAAG,CAAC,CAAA;AAGvG,MAAA,MAAM,QAAQ,GAAA,CAAI;AAAA;AAAA,QAEhB,KAAK,UAAA,CAAW,QAAA,CAAS,gBAAgB,IAAA,CAAK,oBAAA,CAAqB,QAAQ,CAAC,CAAA;AAAA;AAAA,QAE5E,GAAG,iBAAA,CAAkB,GAAA,CAAI,CAAA,GAAA,KAAO,IAAA,CAAK,WAAW,QAAA,CAAS,cAAA,EAAgB,GAAA,CAAI,IAAI,CAAC,CAAA;AAAA;AAAA,QAElF,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,aAAA,EAAe,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,aAAA,EAAe,EAAE,EAAA,EAAI,QAAA,EAAU,CAAC;AAAA,OAChG,CAAA;AAAA,IACH,SAAS,KAAA,EAAY;AACnB,MAAA,MAAM,IAAIF,WAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,yCAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,uBAAuB,SAAA,EAAoD;AACvF,IAAA,IAAI;AAEF,MAAA,MAAM,MAAA,GAAS,KAAK,UAAA,CAAW,eAAA,GAAkB,GAAG,IAAA,CAAK,UAAA,CAAW,eAAe,CAAA,CAAA,CAAA,GAAM,EAAA;AACzF,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,aAAA,EAAe,EAAE,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,EAAG,aAAa,IAAI,CAAA;AAEtG,MAAA,KAAA,MAAW,EAAE,IAAA,EAAM,SAAA,EAAU,IAAK,UAAA,EAAY;AAC5C,QAAA,MAAM,QAAA,GAAW,SAAA,CAAU,KAAA,CAAM,GAAG,EAAE,GAAA,EAAI;AAC1C,QAAA,IAAI,CAAC,QAAA,IAAY,QAAA,KAAa,UAAA,EAAY;AAE1C,QAAA,MAAM,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,QAAA,EAAU,SAAS,CAAA;AACzD,QAAA,MAAM,UAAU,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,gBAAgB,UAAU,CAAA;AACtE,QAAA,IAAI,OAAA,EAAS;AAEX,UAAA,OAAO,EAAE,GAAG,OAAA,EAAS,QAAA,EAAS;AAAA,QAChC;AAAA,MACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,CAAA,sBAAA,EAAyB,SAAS,mBAAmB,KAAK,CAAA;AAC7E,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,WAAA,uBAAkB,GAAA,EAA2B;AAAA,EAErD,MAAc,cAAc,cAAA,EAA2D;AAErF,IAAA,OAAO,cAAA,CACJ,IAAI,CAAA,GAAA,MAAQ;AAAA,MACX,OAAA,EAAS,GAAA;AAAA;AAAA,MAET,KAAA,EAAO,IAAI,MAAA,KAAW,MAAA,GAAY,IAAI,MAAA,GAAS,GAAA,CAAI,UAAU,OAAA;AAAQ,KACvE,CAAE,CAAA,CACD,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAK,CAAA,CAChC,GAAA,CAAI,CAAA,IAAA,MAAS;AAAA,MACZ,EAAA,EAAI,KAAK,OAAA,CAAQ,EAAA;AAAA,MACjB,OAAO,IAAA,CAAK;AAAA,KACd,CAAE,CAAA;AAAA,EACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,oBAAA,CACZ,QAAA,EACA,UAAA,EACe;AAEf,IAAA,MAAM,iBAAiB,IAAA,CAAK,WAAA,CAAY,IAAI,QAAQ,CAAA,IAAK,QAAQ,OAAA,EAAQ;AAGzE,IAAA,MAAM,WAAA,GAAc,cAAA,CAAe,IAAA,CAAK,YAAY;AAClD,MAAA,IAAI;AACF,QAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,iBAAA,CAAkB,QAAQ,CAAA;AAG1D,QAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,CAAA,KAAA,KAAS,CAAC,KAAA,CAAM,EAAA,EAAI,KAAK,CAAC,CAAC,CAAA;AAGrE,QAAA,KAAA,MAAW,SAAS,UAAA,EAAY;AAC9B,UAAA,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,EAAA,EAAI,KAAK,CAAA;AAAA,QAC9B;AAGA,QAAA,MAAM,YAAA,GAAe,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AAGnF,QAAA,MAAM,IAAA,CAAK,WAAW,KAAA,CAAM;AAAA,UAC1B,SAAA,EAAW,cAAA;AAAA,UACX,GAAA,EAAK,QAAA;AAAA,UACL,KAAA,EAAO,IAAA,CAAK,SAAA,CAAU,YAAY;AAAA,SACnC,CAAA;AAAA,MACH,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,QAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,CAAA,oCAAA,EAAuC,QAAQ,CAAA,CAAA,CAAA,EAAK,EAAE,SAAS,CAAA;AAClF,QAAA,MAAM,KAAA;AAAA,MACR,CAAA,SAAE;AAEA,QAAA,IAAI,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,QAAQ,MAAM,WAAA,EAAa;AAClD,UAAA,IAAA,CAAK,WAAA,CAAY,OAAO,QAAQ,CAAA;AAAA,QAClC;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAGD,IAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,QAAA,EAAU,WAAW,CAAA;AAG1C,IAAA,OAAO,WAAA;AAAA,EACT;AAAA,EAEA,MAAc,kBAAkB,QAAA,EAAiE;AAC/F,IAAA,MAAM,MAAM,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,gBAAgB,QAAQ,CAAA;AAChE,IAAA,IAAI,CAAC,GAAA,EAAK,OAAO,EAAC;AAClB,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,OAAO,GAAA,KAAQ,WAAW,GAAA,GAAM,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA;AAC1E,MAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,GAAI,MAAM,EAAC;AAAA,IACrC,SAAS,CAAA,EAAG;AACV,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,CAAA,iCAAA,EAAoC,QAAQ,CAAA,CAAA,CAAA,EAAK,EAAE,GAAG,CAAA;AACzE,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAc,cAAA,CAAe,SAAA,EAAmB,YAAA,EAAsB,UAAA,EAAmC;AACvG,IAAA,IAAI;AAEF,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,aAAA,CAAc,YAAA,EAAc,SAAS,CAAA;AAChE,MAAA,MAAM,UAAU,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,gBAAgB,aAAa,CAAA;AACzE,MAAA,IAAI,CAAC,OAAA,EAAS;AAGd,MAAA,MAAM,cAAA,GAAiB;AAAA,QACrB,GAAG,OAAA;AAAA,QACH,QAAA,EAAU;AAAA,OACZ;AAGA,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,aAAA,CAAc,UAAA,EAAY,SAAS,CAAA;AAC9D,MAAA,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,EAAE,SAAA,EAAW,gBAAgB,GAAA,EAAK,aAAA,EAAe,KAAA,EAAO,cAAA,EAAgB,CAAA;AAGpG,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,oBAAA,CAAqB,YAAY,CAAA;AAC1D,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,iBAAA,CAAkB,WAAW,CAAA;AAC3D,MAAA,MAAM,kBAAkB,UAAA,CAAW,MAAA,CAAO,CAAA,KAAA,KAAS,KAAA,CAAM,OAAO,SAAS,CAAA;AACzE,MAAA,MAAM,IAAA,CAAK,oBAAA,CAAqB,WAAA,EAAa,eAAe,CAAA;AAG5D,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,oBAAA,CAAqB,UAAU,CAAA;AACxD,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,iBAAA,CAAkB,WAAW,CAAA;AAC3D,MAAA,MAAM,WAAW,EAAE,EAAA,EAAI,WAAW,KAAA,EAAO,IAAA,CAAK,KAAI,EAAE;AACpD,MAAA,UAAA,CAAW,KAAK,QAAQ,CAAA;AACxB,MAAA,MAAM,IAAA,CAAK,oBAAA,CAAqB,WAAA,EAAa,UAAU,CAAA;AAGvD,MAAA,MAAM,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,cAAA,EAAgB,aAAa,CAAA;AAAA,IAC9D,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,MAAA,EAAQ,MAAM,CAAA,wBAAA,EAA2B,SAAS,SAAS,YAAY,CAAA,IAAA,EAAO,UAAU,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AACvG,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAIA,MAAM,aACJ,IAAA,EACgD;AAChD,IAAA,MAAM,EAAE,QAAA,EAAU,MAAA,GAAS,IAAA,EAAK,GAAI,IAAA;AACpC,IAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,QAAQ,KAAK,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAE/D,IAAA,IAAI;AAEF,MAAA,MAAM,iBAAA,GAAoB,QAAA,CACvB,GAAA,CAAI,CAAC,SAAS,KAAA,KAAU;AACvB,QAAA,MAAM,SAAmB,EAAC;AAC1B,QAAA,IAAI,CAAC,OAAA,CAAQ,EAAA,EAAI,MAAA,CAAO,KAAK,gBAAgB,CAAA;AAC7C,QAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,EAAU,MAAA,CAAO,KAAK,sBAAsB,CAAA;AACzD,QAAA,IAAI,CAAC,OAAA,CAAQ,OAAA,EAAS,MAAA,CAAO,KAAK,qBAAqB,CAAA;AACvD,QAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,EAAM,MAAA,CAAO,KAAK,kBAAkB,CAAA;AACjD,QAAA,IAAI,CAAC,OAAA,CAAQ,SAAA,EAAW,MAAA,CAAO,KAAK,uBAAuB,CAAA;AAC3D,QAAA,IAAI,OAAA,CAAQ,eAAe,IAAA,IAAQ,OAAA,CAAQ,eAAe,MAAA,EAAW,MAAA,CAAO,KAAK,wBAAwB,CAAA;AAEzG,QAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,UAAA,MAAM,IAAI,MAAM,CAAA,yBAAA,EAA4B,KAAK,KAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,QAC3E;AAEA,QAAA,OAAO;AAAA,UACL,GAAG,OAAA;AAAA,UACH,SAAA,EAAW,UAAA,CAAW,OAAA,CAAQ,SAAS,CAAA;AAAA,UACvC,IAAA,EAAM,QAAQ,IAAA,IAAQ,IAAA;AAAA,UACtB,MAAA,EAAQ;AAAA,SACV;AAAA,MACF,CAAC,CAAA,CACA,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,CAAC,CAAC,CAAA;AAGlB,MAAA,MAAM,wBAAyC,EAAC;AAEhD,MAAA,KAAA,MAAW,WAAW,iBAAA,EAAmB;AAEvC,QAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,sBAAA,CAAuB,QAAQ,EAAE,CAAA;AACpE,QAAA,IAAA,CAAK,MAAA,EAAQ,KAAA;AAAA,UACX,CAAA,iBAAA,EAAoB,QAAQ,EAAE,CAAA,WAAA,EAAc,iBAAiB,QAAQ,CAAA,MAAA,EAAS,QAAQ,QAAQ,CAAA;AAAA,SAChG;AACA,QAAA,IAAI,mBAAmB,eAAA,CAAgB,QAAA,IAAY,eAAA,CAAgB,QAAA,KAAa,QAAQ,QAAA,EAAU;AAEhG,UAAA,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,CAAA,kBAAA,EAAqB,OAAA,CAAQ,EAAE,CAAA,MAAA,EAAS,eAAA,CAAgB,QAAQ,CAAA,IAAA,EAAO,OAAA,CAAQ,QAAQ,CAAA,CAAE,CAAA;AAC5G,UAAA,qBAAA,CAAsB,IAAA,CAAK,KAAK,cAAA,CAAe,OAAA,CAAQ,IAAI,eAAA,CAAgB,QAAA,EAAU,OAAA,CAAQ,QAAS,CAAC,CAAA;AAAA,QACzG;AAAA,MACF;AAGA,MAAA,MAAM,OAAA,CAAQ,IAAI,qBAAqB,CAAA;AAGvC,MAAA,MAAM,gBAAA,GAAmB,iBAAA,CAAkB,MAAA,CAAO,CAAC,KAAK,OAAA,KAAY;AAClE,QAAA,IAAI,QAAQ,QAAA,IAAY,CAAC,IAAI,GAAA,CAAI,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAClD,UAAA,GAAA,CAAI,GAAA,CAAI,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AAAA,QAC9B;AACA,QAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,UAAA,GAAA,CAAI,GAAA,CAAI,OAAA,CAAQ,QAAQ,CAAA,CAAG,KAAK,OAAgD,CAAA;AAAA,QAClF;AACA,QAAA,OAAO,GAAA;AAAA,MACT,CAAA,kBAAG,IAAI,GAAA,EAAwD,CAAA;AAG/D,MAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,QACZ,KAAA,CAAM,IAAA,CAAK,gBAAA,CAAiB,OAAA,EAAS,CAAA,CAAE,GAAA,CAAI,OAAO,CAAC,QAAA,EAAU,cAAc,CAAA,KAAM;AAC/E,UAAA,IAAI;AAEF,YAAA,MAAM,SAAS,MAAM,IAAA,CAAK,aAAA,CAAc,EAAE,UAAU,CAAA;AACpD,YAAA,IAAI,CAAC,MAAA,EAAQ;AACX,cAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,QAAQ,CAAA,UAAA,CAAY,CAAA;AAAA,YAChD;AAGA,YAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,cACZ,cAAA,CAAe,GAAA,CAAI,OAAM,OAAA,KAAW;AAClC,gBAAA,MAAM,GAAA,GAAM,IAAA,CAAK,aAAA,CAAc,QAAA,EAAU,QAAQ,EAAE,CAAA;AAEnD,gBAAA,MAAM,EAAE,MAAA,EAAQ,GAAG,YAAA,EAAa,GAAI,OAAA;AACpC,gBAAA,MAAM,iBAAA,GAAoB;AAAA,kBACxB,GAAG,YAAA;AAAA,kBACH,SAAA,EAAW,aAAA,CAAc,YAAA,CAAa,SAAS;AAAA,iBACjD;AACA,gBAAA,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,CAAA,eAAA,EAAkB,OAAA,CAAQ,EAAE,CAAA,CAAA,EAAI;AAAA,kBACjD,cAAA,EAAgB,IAAA,CAAK,uBAAA,CAAwB,iBAAA,CAAkB,OAAO;AAAA,iBACvE,CAAA;AACD,gBAAA,MAAM,IAAA,CAAK,WAAW,KAAA,CAAM,EAAE,WAAW,cAAA,EAAgB,GAAA,EAAK,KAAA,EAAO,iBAAA,EAAmB,CAAA;AAAA,cAC1F,CAAC;AAAA,aACH;AAGA,YAAA,MAAM,QAAA,GAAW,IAAA,CAAK,oBAAA,CAAqB,QAAQ,CAAA;AACnD,YAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,aAAA,CAAc,cAAc,CAAA;AACvD,YAAA,MAAM,IAAA,CAAK,oBAAA,CAAqB,QAAA,EAAU,OAAO,CAAA;AAGjD,YAAA,MAAM,aAAA,GAAgB;AAAA,cACpB,GAAG,MAAA;AAAA,cACH,SAAA,sBAAe,IAAA;AAAK,aACtB;AACA,YAAA,MAAM,IAAA,CAAK,WAAW,KAAA,CAAM;AAAA,cAC1B,SAAA,EAAW,aAAA;AAAA,cACX,GAAA,EAAK,KAAK,UAAA,CAAW,MAAA,CAAO,eAAe,EAAE,EAAA,EAAI,UAAU,CAAA;AAAA,cAC3D,KAAA,EAAO;AAAA,aACR,CAAA;AAAA,UACH,SAAS,KAAA,EAAO;AACd,YAAA,MAAM,IAAIF,WAAAA;AAAA,cACR;AAAA,gBACE,EAAA,EAAI,yCAAA;AAAA,gBACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,gBACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,gBACxB,OAAA,EAAS;AAAA,kBACP;AAAA;AACF,eACF;AAAA,cACA;AAAA,aACF;AAAA,UACF;AAAA,QACF,CAAC;AAAA,OACH;AAGA,MAAA,MAAM,WAAW,iBAAA,CAAkB,GAAA;AAAA,QACjC,CAAC,EAAE,MAAA,EAAQ,GAAG,SAAQ,MACnB,EAAE,GAAG,OAAA,EAAS,MAAM,OAAA,CAAQ,IAAA,KAAS,IAAA,GAAO,OAAA,CAAQ,OAAO,MAAA,EAAU;AAAA,OAC1E;AACA,MAAA,MAAM,OAAO,IAAI,WAAA,EAAY,CAAE,GAAA,CAAI,UAAU,QAAQ,CAAA;AACrD,MAAA,IAAI,WAAW,CAAA,EAAA,CAAA,EAAM,OAAO,IAAA,CAAK,GAAA,CAAI,IAAI,EAAA,EAAG;AAC5C,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,EAAA,EAAG;AAAA,IACzB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAIF,WAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,yCAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc;AAAA,SAC1B;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,OAAA,CAAQ,QAAA,EAAkB,EAAA,EAAoC;AAC1E,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,iBAAA,CAAkB,QAAQ,CAAA;AACnD,IAAA,MAAM,QAAQ,KAAA,CAAM,SAAA,CAAU,CAAA,IAAA,KAAQ,IAAA,CAAK,OAAO,EAAE,CAAA;AACpD,IAAA,OAAO,KAAA,IAAS,IAAI,KAAA,GAAQ,IAAA;AAAA,EAC9B;AAAA,EAEA,MAAc,QAAA,CAAS,QAAA,EAAkB,KAAA,EAAe,GAAA,EAAgC;AACtF,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,iBAAA,CAAkB,QAAQ,CAAA;AACnD,IAAA,MAAM,WAAA,GAAc,QAAQ,CAAA,GAAI,IAAA,CAAK,IAAI,CAAA,EAAG,KAAA,CAAM,MAAA,GAAS,KAAK,CAAA,GAAI,KAAA;AACpE,IAAA,MAAM,SAAA,GAAY,GAAA,GAAM,CAAA,GAAI,KAAA,CAAM,MAAA,GAAS,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAC/E,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,WAAA,EAAa,YAAY,CAAC,CAAA;AACrD,IAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAA,IAAA,KAAQ,IAAA,CAAK,EAAE,CAAA;AAAA,EACnC;AAAA,EAEA,MAAc,QAAA,CAAS,QAAA,EAAkB,CAAA,EAA8B;AAErE,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,QAAA,EAAU,CAAC,GAAG,EAAE,CAAA;AAAA,EACvC;AAAA,EAEA,MAAc,8BAAA,CACZ,QAAA,EACA,OAAA,EACA,UAAA,EACe;AACf,IAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,MACZ,OAAA,CAAQ,GAAA,CAAI,OAAM,IAAA,KAAQ;AAExB,QAAA,MAAM,cAAA,GAAiB,KAAK,QAAA,IAAY,QAAA;AACxC,QAAA,IAAI,CAAC,cAAA,EAAgB;AACrB,QAAA,MAAM,iBAAA,GAAoB,IAAA,CAAK,oBAAA,CAAqB,cAAc,CAAA;AAElE,QAAA,UAAA,CAAW,GAAA,CAAI,KAAK,EAAE,CAAA;AACtB,QAAA,IAAI,CAAC,IAAA,CAAK,oBAAA,IAAwB,CAAC,KAAK,gBAAA,EAAkB;AAE1D,QAAA,MAAM,OAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,iBAAA,EAAmB,KAAK,EAAE,CAAA;AAC1D,QAAA,IAAI,SAAS,IAAA,EAAM;AAEnB,QAAA,IAAI,KAAK,oBAAA,EAAsB;AAC7B,UAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,QAAA;AAAA,YACzB,iBAAA;AAAA,YACA,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,GAAO,KAAK,oBAAoB,CAAA;AAAA,YAC5C,IAAA,GAAO;AAAA,WACT;AACA,UAAA,OAAA,CAAQ,OAAA,CAAQ,CAAA,EAAA,KAAM,UAAA,CAAW,GAAA,CAAI,EAAE,CAAC,CAAA;AAAA,QAC1C;AAEA,QAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,UAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,QAAA,CAAS,mBAAmB,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,IAAA,CAAK,gBAAgB,CAAA;AAC7F,UAAA,OAAA,CAAQ,OAAA,CAAQ,CAAA,EAAA,KAAM,UAAA,CAAW,GAAA,CAAI,EAAE,CAAC,CAAA;AAAA,QAC1C;AAAA,MACF,CAAC;AAAA,KACH;AAAA,EACF;AAAA,EAEA,MAAc,iBAAA,CAAkB,QAAA,EAAkB,KAAA,EAAe,UAAA,EAAwC;AACvG,IAAA,IAAI,CAAC,QAAA,CAAS,IAAA,IAAQ,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAE3E,IAAA,IAAI,SAAS,CAAA,EAAG;AAEhB,IAAA,IAAI;AACF,MAAA,MAAM,iBAAA,GAAoB,IAAA,CAAK,oBAAA,CAAqB,QAAQ,CAAA;AAC5D,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,QAAA,CAAS,mBAAmB,KAAK,CAAA;AAC9D,MAAA,SAAA,CAAU,OAAA,CAAQ,CAAA,EAAA,KAAM,UAAA,CAAW,GAAA,CAAI,EAAE,CAAC,CAAA;AAAA,IAC5C,CAAA,CAAA,MAAQ;AACN,MAAA,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,CAAA,kCAAA,EAAqC,QAAQ,CAAA,0BAAA,CAA4B,CAAA;AAAA,IAC9F;AAAA,EACF;AAAA,EAEA,MAAc,wCAAA,CACZ,UAAA,EACA,OAAA,EACA,cAAA,EACoD;AAEpD,IAAA,MAAM,mBAAA,uBAA0B,GAAA,EAAoB;AAGpD,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;AAC1B,QAAA,IAAI,KAAK,QAAA,EAAU;AACjB,UAAA,mBAAA,CAAoB,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,IAAA,CAAK,QAAQ,CAAA;AAAA,QAChD;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC7B,UAAA,CAAW,GAAA,CAAI,OAAM,EAAA,KAAM;AACzB,QAAA,IAAI;AAEF,UAAA,IAAI,QAAA,GAAW,mBAAA,CAAoB,GAAA,CAAI,EAAE,CAAA;AAEzC,UAAA,IAAI,CAAC,QAAA,EAAU;AACb,YAAA,IAAI,cAAA,EAAgB;AAElB,cAAA,QAAA,GAAW,cAAA;AAAA,YACb,CAAA,MAAO;AAEL,cAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,sBAAA,CAAuB,EAAE,CAAA;AACzD,cAAA,IAAI,YAAA,EAAc;AAChB,gBAAA,QAAA,GAAW,YAAA,CAAa,QAAA;AAAA,cAC1B;AAAA,YACF;AAAA,UACF;AAEA,UAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AAEtB,UAAA,MAAM,GAAA,GAAM,IAAA,CAAK,aAAA,CAAc,QAAA,EAAU,EAAE,CAAA;AAC3C,UAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,gBAAgB,GAAG,CAAA;AAC5D,UAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,UAAA,MAAM,SAAS,OAAO,IAAA,KAAS,WAAW,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA;AAC7D,UAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,CAAA,kBAAA,EAAqB,EAAE,CAAA,aAAA,EAAgB,QAAQ,CAAA,CAAA,EAAI;AAAA,YACpE,cAAA,EAAgB,IAAA,CAAK,uBAAA,CAAwB,MAAA,CAAO,OAAO;AAAA,WAC5D,CAAA;AACD,UAAA,OAAO,MAAA;AAAA,QACT,SAAS,KAAA,EAAO;AACd,UAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,UAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,CAAA,yBAAA,EAA4B,EAAE,CAAA,CAAA,CAAA,EAAK,EAAE,SAAS,CAAA;AACjE,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,MACF,CAAC;AAAA,KACH;AACA,IAAA,OAAO,QAAA,CAAS,MAAA,CAAO,CAAC,GAAA,KAAsD,QAAQ,IAAI,CAAA;AAAA,EAC5F;AAAA,EAIA,MAAM,WAAA,CAAY;AAAA,IAChB,QAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF,EAAqG;AACnG,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,gCAAA,EAAmC,MAAM,CAAA,YAAA,EAAe,QAAQ,CAAA,CAAE,CAAA;AAG/E,IAAA,MAAM,eAAe,MAAA,IAAU,IAAA;AAC/B,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,cAAA,EAAiB,YAAY,CAAA,CAAE,CAAA;AAE5C,IAAA,MAAM,KAAA,GAAQ,oBAAoB,EAAE,IAAA,EAAM,UAAU,IAAA,EAAM,YAAA,EAAc,IAAI,CAAA;AAC5E,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AACnC,IAAA,IAAI,UAAU,CAAA,IAAK,CAAC,UAAU,OAAA,EAAS,MAAA,SAAe,EAAC;AAEvD,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,QAAA,CAAS,IAAA,IAAQ,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAG3E,MAAA,MAAM,QAAQ,GAAA,CAAI;AAAA,QAChB,QAAA,EAAU,OAAA,EAAS,MAAA,GACf,IAAA,CAAK,8BAAA,CAA+B,QAAA,EAAU,QAAA,CAAS,OAAA,EAAS,UAAU,CAAA,GAC1E,OAAA,CAAQ,OAAA,EAAQ;AAAA,QACpB,KAAA,GAAQ,IAAI,IAAA,CAAK,iBAAA,CAAkB,UAAU,KAAA,EAAO,UAAU,CAAA,GAAI,OAAA,CAAQ,OAAA;AAAQ,OACnF,CAAA;AAID,MAAA,MAAM,cAAA,GAAiB,QAAA,EAAU,OAAA,EAAS,MAAA,GAAS,MAAA,GAAY,QAAA;AAC/D,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,wCAAA;AAAA,QAC1B,KAAA,CAAM,KAAK,UAAU,CAAA;AAAA,QACrB,QAAA,EAAU,OAAA;AAAA,QACV;AAAA,OACF;AACA,MAAA,IAAI,CAAC,QAAA,CAAS,MAAA,EAAQ,OAAO,EAAC;AAK9B,MAAA,QAAA,CAAS,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,KAAK,CAAA,CAAE,SAAS,CAAA,CAAE,OAAA,KAAY,IAAI,IAAA,CAAK,EAAE,SAAS,CAAA,CAAE,SAAS,CAAA;AAGzF,MAAA,MAAM,QAAA,GAAW,SAAS,GAAA,CAAI,CAAC,EAAE,MAAA,EAAQ,GAAG,SAAQ,MAAO;AAAA,QACzD,GAAG,OAAA;AAAA,QACH,IAAA,EAAM,OAAA,CAAQ,IAAA,KAAU,CAAA,EAAA,CAAA,GAAkB,SAAY,OAAA,CAAQ,IAAA;AAAA,QAC9D,SAAA,EAAW,UAAA,CAAW,OAAA,CAAQ,SAAS;AAAA,OACzC,CAAE,CAAA;AAEF,MAAA,IAAI,iBAAiB,CAAA,EAAA,CAAA,EAAM;AACzB,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,WAAA,EAAc,QAAA,CAAS,MAAM,CAAA,gEAAA,CAAkE,CAAA;AAE5G,QAAA,OAAQ,QAAA,CAA+B,IAAI,CAAA,GAAA,MAAQ;AAAA,UACjD,GAAG,GAAA;AAAA,UACH,SAAA,EAAW,IAAI,IAAA,CAAK,GAAA,CAAI,SAAS;AAAA,SACnC,CAAE,CAAA;AAAA,MACJ;AAGA,MAAA,MAAM,IAAA,GAAO,IAAI,WAAA,CAAY,EAAE,QAAA,EAAU,YAAY,CAAA,CAAE,GAAA,CAAI,QAAA,EAA+B,QAAQ,CAAA;AAClG,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,EAAA,EAAG;AAAA,IACzB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAIF,WAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,wCAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,IAAA,EAAM,wCAAwC,QAAQ,CAAA,CAAA;AAAA,UACtD,OAAA,EAAS;AAAA,YACP,QAAA;AAAA,YACA,YAAY,UAAA,IAAc;AAAA;AAC5B,SACF;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,EAAQ,eAAe,WAAW,CAAA;AACvC,MAAA,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACzC,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA,EAgBA,MAAa,eAAA,CAAgB;AAAA,IAC3B,UAAA;AAAA,IACA;AAAA,GACF,EAGmD;AACjD,IAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAErC,IAAA,IAAI;AAEF,MAAA,MAAM,QAAA,GAAA,CAAY,MAAM,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,GAAA,CAAI,CAAA,EAAA,KAAM,IAAA,CAAK,sBAAA,CAAuB,EAAE,CAAC,CAAC,CAAA,EAAG,MAAA;AAAA,QAC1F,CAAA,MAAA,KAAU,CAAC,CAAC;AAAA,OACd;AAGA,MAAA,MAAM,QAAA,GAA8B,SAAS,GAAA,CAAI,CAAC,EAAE,MAAA,EAAQ,GAAG,SAAQ,MAAO;AAAA,QAC5E,GAAG,OAAA;AAAA,QACH,GAAI,OAAA,CAAQ,IAAA,KAAU,QAAmB,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAK;AAAA,QAC9D,SAAA,EAAW,UAAA,CAAW,OAAA,CAAQ,SAAS;AAAA,OACzC,CAAE,CAAA;AAEF,MAAA,MAAM,OAAO,IAAI,WAAA,EAAY,CAAE,GAAA,CAAI,UAAU,QAAQ,CAAA;AACrD,MAAA,IAAI,WAAW,CAAA,EAAA,CAAA,EAAM,OAAO,IAAA,CAAK,GAAA,CAAI,IAAI,EAAA,EAAG;AAC5C,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,EAAA,EAAG;AAAA,IACzB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAIF,WAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,8CAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,IAAA,EAAM,CAAA,+BAAA,CAAA;AAAA,UACN,OAAA,EAAS;AAAA,YACP,UAAA,EAAY,IAAA,CAAK,SAAA,CAAU,UAAU;AAAA;AACvC,SACF;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,EAAQ,eAAe,WAAW,CAAA;AACvC,MAAA,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACzC,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAM,qBACJ,IAAA,EAC+E;AAC/E,IAAA,MAAM,EAAE,QAAA,EAAU,UAAA,EAAY,QAAA,EAAU,MAAA,GAAS,MAAK,GAAI,IAAA;AAC1D,IAAA,MAAM,EAAE,OAAO,CAAA,EAAG,OAAA,GAAU,KAAI,GAAI,QAAA,EAAU,cAAc,EAAC;AAE7D,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,QAAA,CAAS,IAAA,IAAQ,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAG3E,MAAA,MAAM,mBAA0D,EAAC;AACjE,MAAA,IAAI,QAAA,EAAU,SAAS,MAAA,EAAQ;AAC7B,QAAA,MAAM,mBAAA,GAAsB,EAAE,GAAG,QAAA,EAAU,MAAM,CAAA,EAAE;AACnD,QAAA,MAAM,QAAA,GACJ,WAAW,IAAA,GACP,MAAM,KAAK,WAAA,CAAY,EAAE,QAAA,EAAU,QAAA,EAAU,mBAAA,EAAqB,MAAA,EAAQ,MAAM,CAAA,GAChF,MAAM,IAAA,CAAK,WAAA,CAAY,EAAE,UAAU,QAAA,EAAU,mBAAA,EAAqB,MAAA,EAAQ,IAAA,EAAM,CAAA;AACtF,QAAA,gBAAA,CAAiB,IAAA,CAAK,GAAG,QAAQ,CAAA;AAAA,MACnC;AAGA,MAAA,MAAM,qBAAqB,QAAA,GAAW,EAAE,GAAG,QAAA,EAAU,OAAA,EAAS,QAAU,GAAI,MAAA;AAC5E,MAAA,MAAM,cAAA,GACJ,WAAW,IAAA,GACP,MAAM,KAAK,WAAA,CAAY,EAAE,QAAA,EAAU,QAAA,EAAU,kBAAA,EAAoB,MAAA,EAAQ,MAAM,CAAA,GAC/E,MAAM,IAAA,CAAK,WAAA,CAAY,EAAE,UAAU,QAAA,EAAU,kBAAA,EAAoB,MAAA,EAAQ,IAAA,EAAM,CAAA;AAGrF,MAAA,IAAI,gBAAA,GAAmB,cAAA;AACvB,MAAA,IAAI,QAAA,EAAU,YAAY,SAAA,EAAW;AACnC,QAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAW,KAAK,OAAA,EAAQ,GAAI,SAAS,UAAA,CAAW,SAAA;AAC/D,QAAA,gBAAA,GAAmB,cAAA,CAAe,OAAO,CAAA,OAAA,KAAW;AAClD,UAAA,MAAM,WAAA,GAAc,IAAI,IAAA,CAAK,OAAA,CAAQ,SAAS,CAAA;AAC9C,UAAA,IAAI,SAAA,IAAa,WAAA,GAAc,SAAA,EAAW,OAAO,KAAA;AACjD,UAAA,IAAI,OAAA,IAAW,WAAA,GAAc,OAAA,EAAS,OAAO,KAAA;AAC7C,UAAA,OAAO,IAAA;AAAA,QACT,CAAC,CAAA;AAAA,MACH;AAEA,MAAA,MAAM,QAAQ,gBAAA,CAAiB,MAAA;AAG/B,MAAA,MAAM,QAAQ,IAAA,GAAO,OAAA;AACrB,MAAA,MAAM,MAAM,KAAA,GAAQ,OAAA;AACpB,MAAA,MAAM,iBAAA,GAAoB,gBAAA,CAAiB,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAG3D,MAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,MAAA,MAAM,mBAA0D,EAAC;AAEjE,MAAA,KAAA,MAAW,OAAO,iBAAA,EAAmB;AACnC,QAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,EAAE,CAAA,EAAG;AACxB,UAAA,gBAAA,CAAiB,KAAK,GAAG,CAAA;AACzB,UAAA,OAAA,CAAQ,GAAA,CAAI,IAAI,EAAE,CAAA;AAAA,QACpB;AAAA,MACF;AAEA,MAAA,KAAA,MAAW,OAAO,gBAAA,EAAkB;AAClC,QAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,EAAE,CAAA,EAAG;AACxB,UAAA,gBAAA,CAAiB,KAAK,GAAG,CAAA;AACzB,UAAA,OAAA,CAAQ,GAAA,CAAI,IAAI,EAAE,CAAA;AAAA,QACpB;AAAA,MACF;AAGA,MAAA,gBAAA,CAAiB,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,KAAK,CAAA,CAAE,SAAS,CAAA,CAAE,OAAA,KAAY,IAAI,IAAA,CAAK,EAAE,SAAS,CAAA,CAAE,SAAS,CAAA;AAEjG,MAAA,OAAO;AAAA,QACL,IAAA;AAAA,QACA,OAAA;AAAA,QACA,KAAA;AAAA,QACA,OAAA,EAAS,QAAQ,OAAA,GAAU,KAAA;AAAA,QAC3B,QAAA,EAAU;AAAA,OACZ;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAIF,WAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,kDAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,IAAA,EAAM,wCAAA;AAAA,UACN,OAAA,EAAS;AAAA,YACP,QAAA;AAAA,YACA,YAAY,UAAA,IAAc;AAAA;AAC5B,SACF;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,EAAQ,iBAAiB,WAAW,CAAA;AACzC,MAAA,IAAA,CAAK,MAAA,EAAQ,KAAA,GAAQ,WAAA,CAAY,QAAA,EAAU,CAAA;AAC3C,MAAA,OAAO,EAAE,QAAA,EAAU,EAAC,EAAG,KAAA,EAAO,CAAA,EAAG,IAAA,EAAM,OAAA,EAAS,OAAA,IAAW,EAAA,EAAI,OAAA,EAAS,KAAA,EAAM;AAAA,IAChF;AAAA,EACF;AAAA,EAEA,MAAM,eAAe,IAAA,EASU;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,UAAS,GAAI,IAAA;AACrB,MAAA,MAAM,kBAAqC,EAAC;AAE5C,MAAA,KAAA,MAAW,iBAAiB,QAAA,EAAU;AACpC,QAAA,MAAM,EAAE,EAAA,EAAI,OAAA,EAAS,GAAG,aAAY,GAAI,aAAA;AAIxC,QAAA,MAAM,MAAA,GAAS,KAAK,UAAA,CAAW,eAAA,GAAkB,GAAG,IAAA,CAAK,UAAA,CAAW,eAAe,CAAA,CAAA,CAAA,GAAM,EAAA;AACzF,QAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,cAAA,EAAgB,EAAE,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,EAAG,cAAc,IAAI,CAAA;AAErG,QAAA,IAAI,eAAA,GAA0C,IAAA;AAC9C,QAAA,IAAI,UAAA,GAAa,EAAA;AAEjB,QAAA,KAAA,MAAW,EAAE,IAAA,EAAM,GAAA,EAAI,IAAK,OAAA,EAAS;AACnC,UAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,gBAAgB,GAAG,CAAA;AAC5D,UAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,EAAA,KAAO,EAAA,EAAI;AAC1B,YAAA,eAAA,GAAkB,IAAA;AAClB,YAAA,UAAA,GAAa,GAAA;AACb,YAAA;AAAA,UACF;AAAA,QACF;AAEA,QAAA,IAAI,CAAC,eAAA,EAAiB;AAEpB,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,cAAA,GAAkC;AAAA,UACtC,GAAG,eAAA;AAAA,UACH,GAAG,WAAA;AAAA,UACH;AAAA,SACF;AAGA,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,IAAI,OAAA,CAAQ,aAAa,MAAA,EAAW;AAClC,YAAA,cAAA,CAAe,OAAA,GAAU;AAAA,cACvB,GAAG,cAAA,CAAe,OAAA;AAAA,cAClB,QAAA,EAAU;AAAA,gBACR,GAAG,eAAe,OAAA,EAAS,QAAA;AAAA,gBAC3B,GAAG,OAAA,CAAQ;AAAA;AACb,aACF;AAAA,UACF;AACA,UAAA,IAAI,OAAA,CAAQ,YAAY,MAAA,EAAW;AACjC,YAAA,cAAA,CAAe,OAAA,GAAU;AAAA,cACvB,GAAG,cAAA,CAAe,OAAA;AAAA,cAClB,SAAS,OAAA,CAAQ;AAAA,aACnB;AAAA,UACF;AAAA,QACF;AAGA,QAAA,IACE,cAAc,aAAA,IACd,aAAA,CAAc,YACd,aAAA,CAAc,QAAA,KAAa,gBAAgB,QAAA,EAC3C;AAEA,UAAA,MAAM,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,cAAA,EAAgB,UAAU,CAAA;AAGzD,UAAA,cAAA,CAAe,WAAW,aAAA,CAAc,QAAA;AAGxC,UAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,aAAA,CAAc,aAAA,CAAc,UAAU,EAAE,CAAA;AACnE,UAAA,MAAM,IAAA,CAAK,WAAW,KAAA,CAAM;AAAA,YAC1B,SAAA,EAAW,cAAA;AAAA,YACX,GAAA,EAAK,aAAA;AAAA,YACL,KAAA,EAAO;AAAA,WACR,CAAA;AAGD,UAAA,IAAI,gBAAgB,QAAA,EAAU;AAE5B,YAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,oBAAA,CAAqB,eAAA,CAAgB,QAAQ,CAAA;AACzE,YAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,iBAAA,CAAkB,cAAc,CAAA;AACjE,YAAA,MAAM,kBAAkB,aAAA,CAAc,MAAA,CAAO,CAAA,KAAA,KAAS,KAAA,CAAM,OAAO,EAAE,CAAA;AACrE,YAAA,MAAM,IAAA,CAAK,oBAAA,CAAqB,cAAA,EAAgB,eAAe,CAAA;AAAA,UACjE;AAGA,UAAA,MAAM,YAAA,GAAe,IAAA,CAAK,oBAAA,CAAqB,aAAA,CAAc,QAAQ,CAAA;AACrE,UAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,iBAAA,CAAkB,YAAY,CAAA;AAC7D,UAAA,MAAM,WAAW,EAAE,EAAA,EAAQ,KAAA,EAAO,IAAA,CAAK,KAAI,EAAE;AAC7C,UAAA,WAAA,CAAY,KAAK,QAAQ,CAAA;AACzB,UAAA,MAAM,IAAA,CAAK,oBAAA,CAAqB,YAAA,EAAc,WAAW,CAAA;AAAA,QAC3D,CAAA,MAAO;AAEL,UAAA,MAAM,IAAA,CAAK,WAAW,KAAA,CAAM;AAAA,YAC1B,SAAA,EAAW,cAAA;AAAA,YACX,GAAA,EAAK,UAAA;AAAA,YACL,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,QACH;AAGA,QAAA,MAAM,eAAA,uBAAsB,GAAA,EAAY;AAGxC,QAAA,IAAI,eAAe,QAAA,EAAU;AAC3B,UAAA,eAAA,CAAgB,GAAA,CAAI,eAAe,QAAQ,CAAA;AAAA,QAC7C;AAGA,QAAA,IACE,cAAc,aAAA,IACd,aAAA,CAAc,YACd,aAAA,CAAc,QAAA,KAAa,gBAAgB,QAAA,EAC3C;AAEA,UAAA,IAAI,gBAAgB,QAAA,EAAU;AAC5B,YAAA,eAAA,CAAgB,GAAA,CAAI,gBAAgB,QAAQ,CAAA;AAAA,UAC9C;AAEA,UAAA,eAAA,CAAgB,GAAA,CAAI,cAAc,QAAQ,CAAA;AAAA,QAC5C;AAGA,QAAA,KAAA,MAAW,YAAY,eAAA,EAAiB;AACtC,UAAA,MAAM,SAAS,MAAM,IAAA,CAAK,aAAA,CAAc,EAAE,UAAU,CAAA;AACpD,UAAA,IAAI,MAAA,EAAQ;AACV,YAAA,MAAM,aAAA,GAAgB;AAAA,cACpB,GAAG,MAAA;AAAA,cACH,SAAA,sBAAe,IAAA;AAAK,aACtB;AACA,YAAA,MAAM,IAAA,CAAK,WAAW,KAAA,CAAM;AAAA,cAC1B,SAAA,EAAW,aAAA;AAAA,cACX,GAAA,EAAK,KAAK,UAAA,CAAW,MAAA,CAAO,eAAe,EAAE,EAAA,EAAI,UAAU,CAAA;AAAA,cAC3D,KAAA,EAAO;AAAA,aACR,CAAA;AAAA,UACH;AAAA,QACF;AAEA,QAAA,eAAA,CAAgB,KAAK,cAAc,CAAA;AAAA,MACrC;AAEA,MAAA,OAAO,eAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAIF,WAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,2CAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,IAAA,EAAM;AAAA,SACR;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,eAAA,CAAgB,EAAE,UAAA,EAAW,EAAgE;AACjG,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,iBAAiB,UAAU,CAAA;AACpE,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,MAAA,MAAM,WAAW,OAAO,IAAA,KAAS,WAAW,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA;AAC/D,MAAA,OAAO;AAAA,QACL,GAAG,QAAA;AAAA,QACH,SAAA,EAAW,UAAA,CAAW,QAAA,CAAS,SAAS,CAAA;AAAA,QACxC,SAAA,EAAW,UAAA,CAAW,QAAA,CAAS,SAAS,CAAA;AAAA,QACxC,QAAA,EAAU,IAAA,CAAK,cAAA,CAAe,QAAA,CAAS,QAAQ;AAAA,OACjD;AAAA,IACF,SAAS,KAAA,EAAY;AACnB,MAAA,MAAM,cAAc,IAAIF,WAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,8CAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,EAAQ,eAAe,WAAW,CAAA;AACvC,MAAA,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACzC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,YAAA,CAAa,EAAE,QAAA,EAAS,EAAoE;AAChG,IAAA,IAAI;AACF,MAAA,MAAM,cAAA,GAAiB;AAAA,QACrB,GAAG,QAAA;AAAA,QACH,UAAU,QAAA,CAAS,QAAA,GAAW,KAAK,SAAA,CAAU,QAAA,CAAS,QAAQ,CAAA,GAAI;AAAA,OACpE;AAEA,MAAA,MAAM,IAAA,CAAK,WAAW,KAAA,CAAM;AAAA,QAC1B,SAAA,EAAW,eAAA;AAAA,QACX,KAAK,QAAA,CAAS,EAAA;AAAA,QACd,KAAA,EAAO;AAAA,OACR,CAAA;AAED,MAAA,OAAO,QAAA;AAAA,IACT,SAAS,KAAA,EAAY;AACnB,MAAA,MAAM,IAAIF,WAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,yCAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP,YAAY,QAAA,CAAS;AAAA;AACvB,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cAAA,CAAe;AAAA,IACnB,UAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF,EAIiC;AAC/B,IAAA,MAAM,mBAAmB,MAAM,IAAA,CAAK,eAAA,CAAgB,EAAE,YAAY,CAAA;AAElE,IAAA,IAAI,CAAC,gBAAA,EAAkB;AAErB,MAAA,MAAM,WAAA,GAAmC;AAAA,QACvC,EAAA,EAAI,UAAA;AAAA,QACJ,aAAA;AAAA,QACA,QAAA,EAAU,YAAY,EAAC;AAAA,QACvB,SAAA,sBAAe,IAAA,EAAK;AAAA,QACpB,SAAA,sBAAe,IAAA;AAAK,OACtB;AACA,MAAA,OAAO,IAAA,CAAK,YAAA,CAAa,EAAE,QAAA,EAAU,aAAa,CAAA;AAAA,IACpD;AAEA,IAAA,MAAM,SAAA,uBAAgB,IAAA,EAAK;AAC3B,IAAA,MAAM,eAAA,GAAkB;AAAA,MACtB,GAAG,gBAAA;AAAA,MACH,aAAA,EAAe,aAAA,KAAkB,MAAA,GAAY,aAAA,GAAgB,gBAAA,CAAiB,aAAA;AAAA,MAC9E,QAAA,EAAU;AAAA,QACR,GAAG,gBAAA,CAAiB,QAAA;AAAA,QACpB,GAAG;AAAA,OACL;AAAA,MACA;AAAA,KACF;AAEA,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,EAAE,QAAA,EAAU,iBAAiB,CAAA;AAAA,EACxD;AACF,CAAA;ACpqCO,IAAM,yBAAA,GAAN,cAAwC,eAAA,CAAgB;AAAA,EACrD,QAAA;AAAA,EACR,MAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA,CAAY;AAAA,IACV,eAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF,EAKG;AACD,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AACvB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AAAA,EACnB;AAAA,EAEA,MAAM,SAAA,GAAY;AAChB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,WAAW,KAAA,EAIC;AAAA,EAElB;AAAA,EAEA,MAAM,UAAA,CAAW,EAAE,SAAA,EAAU,EAA8C;AACzE,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA;AACxC,MAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,QAAA,MAAM,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAA,MAAA,KAAU,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,MAAA,CAAO,IAAI,CAAC,CAAC,CAAA;AAAA,MAC7E;AAAA,IACF,SAAS,KAAA,EAAY;AACnB,MAAA,MAAM,IAAIF,WAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,uCAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AAEM,IACR;AAAA,EACF;AAAA,EAEA,MAAM,SAAA,CAAU,EAAE,SAAA,EAAU,EAA8C;AACxE,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA;AACxC,MAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,QAAA,MAAM,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAA,MAAA,KAAU,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,MAAA,CAAO,IAAI,CAAC,CAAC,CAAA;AAAA,MAC7E;AAAA,IACF,SAAS,KAAA,EAAY;AACnB,MAAA,MAAM,IAAIF,WAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,sCAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AAEM,IACR;AAAA,EACF;AAAA,EAEQ,WAAW,SAAA,EAAwB;AACzC,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mCAAA,EAAsC,SAAS,CAAA,+CAAA,CAAiD,CAAA;AAAA,IAClH;AACA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AACvC,IAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,SAAS,CAAA,CAAE,CAAA;AAC3E,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,MAAA,CAA8B,WAAc,MAAA,EAAwC;AAElF,IAAA,MAAM,SAAS,IAAA,CAAK,eAAA,GAAkB,CAAA,EAAG,IAAA,CAAK,eAAe,CAAA,CAAA,CAAA,GAAM,EAAA;AACnE,IAAA,QAAQ,SAAA;AAAW,MACjB,KAAKC,aAAAA;AACH,QAAA,IAAI,CAAC,MAAA,CAAO,EAAA,EAAI,MAAM,IAAI,MAAM,uBAAuB,CAAA;AACvD,QAAA,OAAO,GAAG,MAAM,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,OAAO,EAAE,CAAA,CAAA;AAAA,MAC3C,KAAKC,cAAAA;AACH,QAAA,IAAI,CAAC,OAAO,QAAA,IAAY,CAAC,OAAO,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,uCAAuC,CAAA;AAC3F,QAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,SAAS,IAAI,MAAA,CAAO,QAAQ,CAAA,CAAA,EAAI,MAAA,CAAO,EAAE,CAAA,CAAA;AAAA,MAC9D,KAAK,uBAAA;AACH,QAAA,IAAI,CAAC,MAAA,CAAO,aAAA,IAAiB,CAAC,OAAO,MAAA,EAAQ;AAC3C,UAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAAA,QAC1D;AACA,QAAA,IAAI,GAAA,GAAM,CAAA,EAAG,MAAM,CAAA,EAAG,SAAS,IAAI,MAAA,CAAO,aAAa,CAAA,CAAA,EAAI,MAAA,CAAO,MAAM,CAAA,CAAA;AACxE,QAAA,IAAI,OAAO,UAAA,EAAY;AACrB,UAAA,GAAA,GAAM,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,MAAA,CAAO,UAAU,CAAA,CAAA;AAAA,QACnC;AACA,QAAA,OAAO,GAAA;AAAA,MACT,KAAK,YAAA;AACH,QAAA,IAAI,CAAC,MAAA,CAAO,EAAA,EAAI,MAAM,IAAI,MAAM,sBAAsB,CAAA;AACtD,QAAA,OAAO,GAAG,MAAM,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,OAAO,EAAE,CAAA,CAAA;AAAA,MAC3C,KAAKC,WAAAA;AACH,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,EAAA,IAAM,MAAA,CAAO,MAAA;AACnC,QAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAC5D,QAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,SAAS,IAAI,MAAM,CAAA,CAAA;AAAA,MACxC,KAAK,aAAA;AACH,QAAA,IAAI,CAAC,MAAA,CAAO,EAAA,EAAI,MAAM,IAAI,MAAM,sBAAsB,CAAA;AACtD,QAAA,OAAO,GAAG,MAAM,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,OAAO,EAAE,CAAA,CAAA;AAAA,MAC3C;AACE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,SAAS,CAAA,CAAE,CAAA;AAAA;AACrD,EACF;AAAA,EAEQ,aAAa,SAAA,EAAgC;AAEnD,IAAA,MAAM,SAAS,IAAA,CAAK,eAAA,GAAkB,CAAA,EAAG,IAAA,CAAK,eAAe,CAAA,CAAA,CAAA,GAAM,EAAA;AACnE,IAAA,OAAO,CAAA,EAAG,MAAM,CAAA,OAAA,EAAU,SAAS,CAAA,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAU,IAAA,EAA0B;AAC1C,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAE5B,MAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,WAAW,IAAA,EAAM;AACvD,QAAA,IAAI,OAAO,IAAA,CAAK,KAAA,KAAU,QAAA,EAAU;AAClC,UAAA,IAAI;AACF,YAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA;AAAA,UAC9B,CAAA,CAAA,MAAQ;AAEN,YAAA,OAAO,IAAA,CAAK,KAAA;AAAA,UACd;AAAA,QACF;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,uBAAA,EAAyB,EAAE,OAAA,EAAS,MAAM,CAAA;AAC5D,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,oBAAoB,KAAA,EAAe;AAC/C,IAAA,IAAI,KAAK,QAAA,EAAU;AAGjB,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA;AAAA,QACJ,KAAA;AAAA,QACA,qBAAA,EAAuB;AAAA,OACzB;AAAA,IACF;AACA,IAAA,OAAO,MAAM,IAAA,CAAK,MAAA,CAAQ,EAAA,CAAG,WAAW,MAAA,CAAO;AAAA,MAC7C,YAAY,IAAA,CAAK,SAAA;AAAA,MACjB;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,gBAAgB,aAAA,EAAwC;AACpE,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,mBAAA,CAAoB,aAAa,CAAA;AAC7D,MAAA,OAAO,QAAA,CAAS,EAAA;AAAA,IAClB,SAAS,KAAA,EAAY;AAEnB,MAAA,IAAI,MAAM,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,gBAAgB,CAAA,EAAG;AAE7D,QAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,cAAA,EAAe;AAC7C,QAAA,MAAM,YAAY,UAAA,CAAW,MAAA,CAAO,KAAK,CAAA,EAAA,KAAM,EAAA,CAAG,UAAU,aAAa,CAAA;AACzE,QAAA,IAAI,SAAA,SAAkB,SAAA,CAAU,EAAA;AAAA,MAClC;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,2BAAA,EAA6B,KAAK,CAAA;AACpD,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,aAAa,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,IACjF;AAAA,EACF;AAAA,EAEA,MAAc,cAAA,GAEX;AACD,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,OAAO;AAAA,QACL,QAAQ,MAAA,CAAO,IAAA,CAAK,KAAK,QAAQ,CAAA,CAAE,IAAI,CAAA,IAAA,MAAS;AAAA,UAC9C,EAAA,EAAI,IAAA;AAAA,UACJ,KAAA,EAAO,IAAA;AAAA,UACP,qBAAA,EAAuB;AAAA,SACzB,CAAE;AAAA,OACJ;AAAA,IACF;AAEA,IAAA,IAAI,gBAAgD,EAAC;AACrD,IAAA,IAAI,WAAA,GAAc,CAAA;AAClB,IAAA,MAAM,OAAA,GAAU,EAAA;AAChB,IAAA,IAAI,cAAA,GAAiB,IAAA;AAErB,IAAA,OAAO,cAAA,EAAgB;AACrB,MAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAA,CAAQ,EAAA,CAAG,WAAW,IAAA,CAAK;AAAA,QACrD,YAAY,IAAA,CAAK,SAAA;AAAA,QACjB,IAAA,EAAM,WAAA;AAAA,QACN,QAAA,EAAU;AAAA,OACX,CAAA;AAED,MAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,QAAA,aAAA,GAAgB,aAAA,CAAc,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA;AAAA,MACtD;AAEA,MAAA,cAAA,GAAiB,QAAA,CAAS,MAAA,GAAS,QAAA,CAAS,MAAA,CAAO,WAAW,OAAA,GAAU,KAAA;AAExE,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,WAAA,EAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,EAAE,QAAQ,aAAA,EAAc;AAAA,EACjC;AAAA,EAEA,MAAc,qBAAqB,aAAA,EAA+C;AAChF,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,cAAA,EAAe;AAC3C,MAAA,MAAM,YAAY,QAAA,CAAS,MAAA,CAAO,KAAK,CAAA,EAAA,KAAM,EAAA,CAAG,UAAU,aAAa,CAAA;AACvE,MAAA,OAAO,SAAA,GAAY,UAAU,EAAA,GAAK,IAAA;AAAA,IACpC,SAAS,KAAA,EAAY;AACnB,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,+BAAA,EAAkC,aAAa,KAAK,KAAK,CAAA;AAC3E,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,uBAAuB,aAAA,EAAwC;AAC3E,IAAA,IAAI,WAAA,GAAc,MAAM,IAAA,CAAK,oBAAA,CAAqB,aAAa,CAAA;AAC/D,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,WAAA,GAAc,MAAM,IAAA,CAAK,eAAA,CAAgB,aAAa,CAAA;AAAA,IACxD;AACA,IAAA,OAAO,WAAA;AAAA,EACT;AAAA,EAEA,MAAc,eAAe,SAAA,EAAyC;AACpE,IAAA,MAAM,SAAS,IAAA,CAAK,eAAA,GAAkB,CAAA,EAAG,IAAA,CAAK,eAAe,CAAA,CAAA,CAAA,GAAM,EAAA;AAEnE,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,sBAAA,CAAuB,GAAG,MAAM,CAAA,EAAG,SAAS,CAAA,CAAE,CAAA;AAAA,IAClE,SAAS,KAAA,EAAY;AACnB,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,8BAAA,EAAgC,KAAK,CAAA;AACvD,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,SAAS,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,IACzF;AAAA,EACF;AAAA,EAEA,MAAc,iBAAA,CAAkB,SAAA,EAAwB,GAAA,EAAa;AACnE,IAAA,IAAI;AACF,MAAA,IAAI,KAAK,QAAA,EAAU;AACjB,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA;AACzC,QAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,eAAA,CAAgB,KAAK,MAAM,CAAA;AACxD,QAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,QAAA,OAAO,IAAA,CAAK,UAAU,MAAM,CAAA;AAAA,MAC9B,CAAA,MAAO;AACL,QAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA;AACvD,QAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAQ,GAAG,UAAA,CAAW,MAAA,CAAO,GAAA,CAAI,WAAA,EAAa,GAAA,EAAK;AAAA,UAC7E,YAAY,IAAA,CAAK;AAAA,SAClB,CAAA;AACD,QAAA,OAAO,MAAM,SAAS,IAAA,EAAK;AAAA,MAC7B;AAAA,IACF,SAAS,KAAA,EAAY;AACnB,MAAA,IAAI,MAAM,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,eAAe,CAAA,EAAG;AAC5D,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,MAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,wBAAA,EAA2B,SAAS,IAAI,GAAG,CAAA,CAAA,CAAA,EAAK,EAAE,OAAA,EAAS,CAAA;AAC7E,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,KAAA,CAAM,SAAA,EAAwB,GAAA,EAA2B;AAC7D,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,iBAAA,CAAkB,WAAW,GAAG,CAAA;AACxD,MAAA,OAAO,IAAA,CAAK,UAAU,IAAI,CAAA;AAAA,IAC5B,SAAS,KAAA,EAAY;AACnB,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,2BAAA,EAA8B,SAAS,CAAA,CAAA,EAAI,GAAG,KAAK,KAAK,CAAA;AAC1E,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,MAAc,eAAe,SAAA,EAAuE;AAClG,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,SAAS,CAAA;AAC7C,MAAA,OAAO,MAAM,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,SAAS,CAAA;AAAA,IAC9C,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,yBAAA,EAA4B,SAAS,CAAA,CAAA,CAAA,EAAK,EAAE,SAAS,CAAA;AACvE,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,mBAAA,CAAoB,OAAgB,MAAA,EAAgC;AAC1E,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,MAAA,OAAO,OAAO,QAAA,IAAY,KAAA;AAAA,IAC5B;AAEA,IAAA,QAAQ,OAAO,IAAA;AAAM,MACnB,KAAK,MAAA;AAAA,MACL,KAAK,MAAA;AACH,QAAA,OAAO,OAAO,KAAA,KAAU,QAAA;AAAA,MAC1B,KAAK,SAAA;AAAA,MACL,KAAK,QAAA;AACH,QAAA,OAAO,OAAO,KAAA,KAAU,QAAA;AAAA,MAC1B,KAAK,WAAA;AACH,QAAA,OAAO,KAAA,YAAiB,IAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,MACxF,KAAK,OAAA;AACH,QAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,QAAA,IAAI;AACF,UAAA,IAAA,CAAK,UAAU,KAAK,CAAA;AACpB,UAAA,OAAO,IAAA;AAAA,QACT,CAAA,CAAA,MAAQ;AACN,UAAA,OAAO,KAAA;AAAA,QACT;AAAA,MACF;AACE,QAAA,OAAO,KAAA;AAAA;AACX,EACF;AAAA,EAEA,MAAc,qBAAA,CACZ,MAAA,EACA,MAAA,EACe;AACf,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,MAAA,IAAU,OAAO,WAAW,QAAA,IAAY,MAAA,CAAO,UAAU,IAAA,EAAM;AAClE,QAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,MACzC;AACA,MAAA,KAAA,MAAW,CAAC,UAAA,EAAY,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzD,QAAA,MAAM,KAAA,GAAQ,OAAO,UAAU,CAAA;AAG/B,QAAA,IAAI,MAAA,CAAO,UAAA,KAAe,KAAA,KAAU,MAAA,IAAa,UAAU,IAAA,CAAA,EAAO;AAChE,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,UAAU,CAAA,CAAE,CAAA;AAAA,QACtE;AAEA,QAAA,IAAI,CAAC,IAAA,CAAK,mBAAA,CAAoB,KAAA,EAAO,MAAM,CAAA,EAAG;AAC5C,UAAA,MAAM,SAAA,GAAY,KAAA,KAAU,IAAA,GAAO,MAAA,GAAS,OAAO,KAAA;AACnD,UAAA,MAAM,IAAI,MAAM,CAAA,yBAAA,EAA4B,UAAU,cAAc,MAAA,CAAO,IAAI,CAAA,MAAA,EAAS,SAAS,CAAA,CAAE,CAAA;AAAA,QACrG;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,uCAAA,CAAA,EAA2C,EAAE,OAAA,EAAS,MAAA,EAAQ,QAAQ,CAAA;AACxF,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAc,cAAA,CAAsC,MAAA,EAAiB,SAAA,EAA6B;AAChG,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,EAAU;AACzC,QAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,MAC5C;AAEA,MAAA,MAAM,WAAA,GAAc,MAAA;AACpB,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA;AAGlD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAM,IAAA,CAAK,qBAAA,CAAsB,WAAA,EAAa,MAAM,CAAA;AACpD,QAAA;AAAA,MACF;AAGA,MAAA,QAAQ,SAAA;AAAW,QACjB,KAAKF,aAAAA;AACH,UAAA,IAAI,EAAE,QAAQ,WAAA,CAAA,IAAgB,EAAE,gBAAgB,WAAA,CAAA,IAAgB,EAAE,WAAW,WAAA,CAAA,EAAc;AACzF,YAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,UACzD;AACA,UAAA;AAAA,QACF,KAAKC,cAAAA;AACH,UAAA,IACE,EAAE,IAAA,IAAQ,WAAA,CAAA,IACV,EAAE,UAAA,IAAc,WAAA,CAAA,IAChB,EAAE,SAAA,IAAa,WAAA,CAAA,IACf,EAAE,MAAA,IAAU,WAAA,CAAA,EACZ;AACA,YAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAAA,UAC1D;AACA,UAAA;AAAA,QACF,KAAK,uBAAA;AACH,UAAA,IAAI,EAAE,eAAA,IAAmB,WAAA,CAAA,IAAgB,EAAE,YAAY,WAAA,CAAA,EAAc;AACnE,YAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,UAC3D;AACA,UAAA;AAAA,QACF,KAAK,YAAA;AACH,UAAA,IAAI,EAAE,QAAQ,WAAA,CAAA,EAAc;AAC1B,YAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,UACxD;AACA,UAAA;AAAA,QACF,KAAKC,WAAAA;AACH,UAAA,IAAI,EAAE,YAAA,IAAgB,WAAA,CAAA,IAAgB,EAAE,YAAY,WAAA,CAAA,EAAc;AAChE,YAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,UACvD;AACA,UAAA;AAAA,QACF,KAAK,aAAA;AACH,UAAA,IAAI,EAAE,IAAA,IAAQ,WAAA,CAAA,IAAgB,EAAE,cAAc,WAAA,CAAA,EAAc;AAC1D,YAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,UACxD;AACA,UAAA;AAAA,QACF;AACE,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,SAAS,CAAA,CAAE,CAAA;AAAA;AACtD,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,MAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,8BAAA,EAAiC,SAAS,KAAK,EAAE,OAAA,EAAS,QAAQ,CAAA;AACpF,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,MAAA,CAAO,EAAE,SAAA,EAAW,QAAO,EAA2E;AAC1G,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,SAAA,EAAW,MAAM,CAAA;AAGzC,MAAA,MAAM,eAAA,GAAkB;AAAA,QACtB,GAAG,MAAA;AAAA,QACH,WAAW,MAAA,CAAO,SAAA,GAAYC,aAAAA,CAAc,MAAA,CAAO,SAAS,CAAA,GAAI,MAAA;AAAA,QAChE,WAAW,MAAA,CAAO,SAAA,GAAYA,aAAAA,CAAc,MAAA,CAAO,SAAS,CAAA,GAAI,MAAA;AAAA,QAChE,UAAU,MAAA,CAAO,QAAA,GAAW,KAAK,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA,GAAI;AAAA,OAChE;AAGA,MAAA,MAAM,IAAA,CAAK,cAAA,CAAe,eAAA,EAAiB,SAAS,CAAA;AACpD,MAAA,MAAM,KAAK,KAAA,CAAM,EAAE,WAAW,GAAA,EAAK,KAAA,EAAO,iBAAiB,CAAA;AAAA,IAC7D,SAAS,KAAA,EAAY;AACnB,MAAA,MAAM,IAAIN,WAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,kCAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,eAAe,QAAA,EAA6F;AAClH,IAAA,IAAI,CAAC,QAAA,EAAU,OAAO,EAAC;AACvB,IAAA,OAAO,OAAO,QAAA,KAAa,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,GAAI,QAAA;AAAA,EAC/D;AAAA,EAEA,MAAM,IAAA,CAAQ,EAAE,SAAA,EAAW,MAAK,EAAgF;AAC9G,IAAA,IAAI;AAEF,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,SAAA,EAAW,IAA8C,CAAA;AAGjF,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,KAAA,CAAM,WAAW,GAAG,CAAA;AAC5C,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAGlB,MAAA,MAAM,SAAA,GAAY;AAAA,QAChB,GAAG,IAAA;AAAA,QACH,SAAA,EAAWK,UAAAA,CAAW,IAAA,CAAK,SAAS,CAAA;AAAA,QACpC,SAAA,EAAWA,UAAAA,CAAW,IAAA,CAAK,SAAS,CAAA;AAAA,QACpC,QAAA,EAAU,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,QAAQ;AAAA,OAC7C;AAEA,MAAA,OAAO,SAAA;AAAA,IACT,SAAS,KAAA,EAAY;AACnB,MAAA,MAAM,cAAc,IAAIP,WAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,gCAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,EAAQ,eAAe,WAAW,CAAA;AACvC,MAAA,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACzC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,YAAmC,KAAA,EAA4E;AACnH,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,EAAG;AAElD,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,QACZ,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,OAAM,MAAA,KAAU;AAEhC,UAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,WAAW,MAAgC,CAAA;AAGzE,UAAA,MAAM,eAAA,GAAkB;AAAA,YACtB,GAAG,MAAA;AAAA,YACH,WAAW,MAAA,CAAO,SAAA,GAAYI,aAAAA,CAAc,MAAA,CAAO,SAAiB,CAAA,GAAI,MAAA;AAAA,YACxE,WAAW,MAAA,CAAO,SAAA,GAAYA,aAAAA,CAAc,MAAA,CAAO,SAAiB,CAAA,GAAI,MAAA;AAAA,YACxE,UAAU,MAAA,CAAO,QAAA,GAAW,KAAK,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA,GAAI;AAAA,WAChE;AAEA,UAAA,MAAM,IAAA,CAAK,MAAM,EAAE,SAAA,EAAW,MAAM,SAAA,EAAW,GAAA,EAAK,KAAA,EAAO,eAAA,EAAiB,CAAA;AAAA,QAC9E,CAAC;AAAA,OACH;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAIN,WAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,wCAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,IAAA,EAAM,CAAA,gCAAA,EAAmC,KAAA,CAAM,SAAS,CAAA,CAAA;AAAA,UACxD,OAAA,EAAS;AAAA,YACP,WAAW,KAAA,CAAM;AAAA;AACnB,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAc,IAAA,EAAmB;AACvC,IAAA,OAAO,OAAO,IAAA,KAAS,QAAA,GAAW,IAAA,GAAO,IAAA,CAAK,UAAU,IAAI,CAAA;AAAA,EAC9D;AAAA,EAEA,MAAc,iBAAA,CAAkB;AAAA,IAC9B,SAAA;AAAA,IACA,GAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF,EAKG;AACD,IAAA,IAAI;AAEF,MAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,aAAA,CAAc,KAAK,CAAA;AAChD,MAAA,MAAM,kBAAA,GAAqB,QAAA,GAAW,IAAA,CAAK,aAAA,CAAc,QAAQ,CAAA,GAAI,EAAA;AAErE,MAAA,IAAI,KAAK,QAAA,EAAU;AACjB,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA;AACzC,QAAA,MAAM,QAAQ,GAAA,CAAI,GAAA,EAAK,iBAAiB,EAAE,QAAA,EAAU,oBAAoB,CAAA;AAAA,MAC1E,CAAA,MAAO;AACL,QAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA;AACvD,QAAA,MAAM,KAAK,MAAA,CAAQ,EAAA,CAAG,WAAW,MAAA,CAAO,MAAA,CAAO,aAAa,GAAA,EAAK;AAAA,UAC/D,YAAY,IAAA,CAAK,SAAA;AAAA,UACjB,KAAA,EAAO,eAAA;AAAA,UACP,QAAA,EAAU;AAAA,SACX,CAAA;AAAA,MACH;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,MAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,wBAAA,EAA2B,SAAS,IAAI,GAAG,CAAA,CAAA,CAAA,EAAK,EAAE,OAAA,EAAS,CAAA;AAC7E,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,KAAA,CAAM;AAAA,IACV,SAAA;AAAA,IACA,GAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF,EAKkB;AAChB,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,iBAAA,CAAkB,EAAE,WAAW,GAAA,EAAK,KAAA,EAAO,UAAU,CAAA;AAAA,IAClE,SAAS,KAAA,EAAY;AACnB,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,2BAAA,EAA8B,SAAS,CAAA,CAAA,EAAI,GAAG,KAAK,KAAK,CAAA;AAC1E,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,MAAM,WAAA,CAAY;AAAA,IAChB,SAAA;AAAA,IACA;AAAA,GACF,EAGkB;AAChB,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,SAAS,CAAA;AAC7C,MAAA,MAAM,QAAA,GAAW;AAAA,QACf,IAAA,EAAM,cAAA;AAAA,QACN,SAAA;AAAA,QACA,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,OACpC;AACA,MAAA,MAAM,IAAA,CAAK,MAAM,EAAE,SAAA,EAAW,KAAK,SAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAU,CAAA;AAAA,IACzE,SAAS,KAAA,EAAY;AACnB,MAAA,MAAM,IAAIF,WAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,wCAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AAEM,IACR;AAAA,EACF;AAAA,EAEA,MAAM,iBAAA,CAAkB,SAAA,EAAwB,OAAA,EAAuB;AACrE,IAAA,IAAI;AACF,MAAA,IAAI,KAAK,QAAA,EAAU;AACjB,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA;AACzC,QAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAA,CAAK;AAAA,UAClC,KAAA,EAAO,SAAS,KAAA,IAAS,GAAA;AAAA,UACzB,QAAQ,OAAA,EAAS;AAAA,SAClB,CAAA;AAGD,QAAA,OAAO,QAAA,CAAS,IAAA;AAAA,MAClB,CAAA,MAAO;AACL,QAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA;AAEvD,QAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAQ,GAAG,UAAA,CAAW,IAAA,CAAK,KAAK,WAAA,EAAa;AAAA,UACvE,YAAY,IAAA,CAAK,SAAA;AAAA,UACjB,KAAA,EAAO,SAAS,KAAA,IAAS,GAAA;AAAA,UACzB,QAAQ,OAAA,EAAS;AAAA,SAClB,CAAA;AACD,QAAA,OAAO,QAAA,CAAS,MAAA;AAAA,MAClB;AAAA,IACF,SAAS,KAAA,EAAY;AACnB,MAAA,MAAM,IAAIF,WAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,+CAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AAEM,IACR;AAAA,EACF;AAAA,EAEA,MAAc,oBAAA,CAAqB,SAAA,EAAwB,GAAA,EAAa;AACtE,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA;AACzC,MAAA,MAAM,OAAA,CAAQ,OAAO,GAAG,CAAA;AAAA,IAC1B,CAAA,MAAO;AACL,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA;AACvD,MAAA,MAAM,KAAK,MAAA,CAAQ,EAAA,CAAG,WAAW,MAAA,CAAO,MAAA,CAAO,aAAa,GAAA,EAAK;AAAA,QAC/D,YAAY,IAAA,CAAK;AAAA,OAClB,CAAA;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAM,QAAA,CAAS,SAAA,EAAwB,GAAA,EAA4B;AACjE,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,oBAAA,CAAqB,SAAA,EAAW,GAAG,CAAA;AAAA,IAChD,SAAS,KAAA,EAAY;AACnB,MAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,8BAAA,EAAiC,SAAS,CAAA,CAAA,EAAI,GAAG,KAAK,KAAK,CAAA;AAC7E,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,IAC/D;AAAA,EACF;AAAA,EAEA,MAAM,MAAA,CAAO,SAAA,EAAwB,OAAA,EAAyD;AAC5F,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,iBAAA,CAAkB,SAAA,EAAW,OAAO,CAAA;AAAA,IACxD,SAAS,KAAA,EAAY;AACnB,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,sBAAA,EAAyB,SAAS,KAAK,KAAK,CAAA;AAC9D,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,IACvD;AAAA,EACF;AACF,CAAA;ACxrBA,SAAS,kBAAkB,GAAA,EAAwC;AACjE,EAAA,MAAM,SAA8B,EAAC;AACrC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,YAAY,KAAK,MAAA,CAAO,OAAA,CAAQ,cAAc,CAAA,EAAG;AAChE,IAAA,MAAM,KAAA,GAAQ,IAAI,GAAG,CAAA;AACrB,IAAA,IAAI,SAAS,IAAA,EAAM;AACjB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,YAAA,CAAa,SAAS,OAAA,EAAS;AACjC,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,eAAA,CAAgB,KAAK,CAAA;AAAA,IACrC,CAAA,MAAA,IAAW,YAAA,CAAa,IAAA,KAAS,WAAA,EAAa;AAC5C,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,IAAI,IAAA,CAAK,KAAK,CAAA;AAAA,IAC9B,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,IAChB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEO,IAAM,uBAAA,GAAN,cAAsC,aAAA,CAAc;AAAA,EACjD,UAAA;AAAA,EAER,WAAA,CAAY,EAAE,UAAA,EAAW,EAA8C;AACrE,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACpB;AAAA,EAEA,MAAM,YAAA,CAAa,EAAE,EAAA,EAAG,EAAiD;AACvE,IAAA,IAAI;AACF,MAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAMM,eAAe,EAAE,CAAA;AAC3D,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OAAO,kBAAkB,KAAK,CAAA;AAAA,IAChC,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAIR,WAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,kDAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,IAAA,EAAM,8BAA8B,EAAE,CAAA;AAAA,SACxC;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,eAAe,WAAW,CAAA;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACxC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,KAAA,EAAwF;AACtG,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI;AACF,MAAA,WAAA,GAAc,sBAAA,CAAuB,MAAM,KAAK,CAAA;AAAA,IAClD,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAIF,WAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,4DAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,IAAA;AAAA,UACxB,OAAA,EAAS,EAAE,OAAA,EAAS,KAAA,CAAM,EAAA;AAAG,SAC/B;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,GAAK,OAAO,UAAA,EAAW;AAG7B,MAAA,MAAM,mBAAwC,EAAC;AAC/C,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,EAAG;AACtD,QAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,UAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,YAAA,gBAAA,CAAiB,GAAG,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AAAA,UAC9C,CAAA,MAAO;AACL,YAAA,gBAAA,CAAiB,GAAG,CAAA,GAAI,KAAA;AAAA,UAC1B;AAAA,QACF,CAAA,MAAO;AACL,UAAA,gBAAA,CAAiB,GAAG,CAAA,GAAI,IAAA;AAAA,QAC1B;AAAA,MACF;AAEA,MAAA,gBAAA,CAAiB,EAAA,GAAK,EAAA;AACtB,MAAA,gBAAA,CAAiB,SAAA,GAAA,iBAAY,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACpD,MAAA,gBAAA,CAAiB,SAAA,GAAA,iBAAY,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAEpD,MAAA,MAAM,IAAA,CAAK,WAAW,KAAA,CAAM;AAAA,QAC1B,SAAA,EAAWM,aAAAA;AAAA,QACX,GAAA,EAAK,EAAA;AAAA,QACL,KAAA,EAAO;AAAA,OACR,CAAA;AAED,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,YAAA,CAAa,EAAE,EAAA,EAAI,KAAA,CAAM,IAAI,CAAA;AAC5D,MAAA,OAAO,EAAE,OAAO,WAAA,EAAa;AAAA,IAC/B,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAIR,WAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,6CAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,IAAA,EAAM,CAAA,sBAAA,EAAyB,KAAA,CAAM,EAAE,CAAA;AAAA,SACzC;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,eAAe,WAAW,CAAA;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACxC,MAAA,MAAM,WAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,mBAAA,CAAoB;AAAA,IACxB,QAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF,EAMoE;AAClE,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,UAAA,CAAW,OAAOM,aAAa,CAAA;AACvD,MAAA,MAAM,SAAyB,EAAC;AAEhC,MAAA,KAAA,MAAW,EAAE,IAAA,EAAM,GAAA,EAAI,IAAK,IAAA,EAAM;AAChC,QAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAMA,eAAe,GAAG,CAAA;AAE5D,QAAA,IAAI,QAAA,IAAY,KAAA,CAAM,QAAA,KAAa,QAAA,EAAU;AAC3C,UAAA;AAAA,QACF;AACA,QAAA,IAAI,UAAA,IAAc,KAAA,CAAM,UAAA,KAAe,UAAA,EAAY;AACjD,UAAA;AAAA,QACF;AACA,QAAA,IAAI,MAAA,IAAU,KAAA,CAAM,MAAA,KAAW,MAAA,EAAQ;AACrC,UAAA;AAAA,QACF;AAEA,QAAA,IAAI,KAAA,IAAS,KAAA,CAAM,QAAA,KAAa,QAAA,EAAU;AACxC,UAAA,MAAA,CAAO,IAAA,CAAK,iBAAA,CAAkB,KAAK,CAAC,CAAA;AAAA,QACtC;AAAA,MACF;AAGA,MAAA,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACpB,QAAA,MAAM,QAAQ,IAAI,IAAA,CAAK,EAAE,SAAA,IAAa,CAAC,EAAE,OAAA,EAAQ;AACjD,QAAA,MAAM,QAAQ,IAAI,IAAA,CAAK,EAAE,SAAA,IAAa,CAAC,EAAE,OAAA,EAAQ;AACjD,QAAA,OAAO,KAAA,GAAQ,KAAA;AAAA,MACjB,CAAC,CAAA;AAED,MAAA,MAAM,QAAQ,MAAA,CAAO,MAAA;AACrB,MAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,IAAA,GAAO,UAAA,CAAW,OAAA;AAC3C,MAAA,MAAM,GAAA,GAAM,QAAQ,UAAA,CAAW,OAAA;AAC/B,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAE3C,MAAA,OAAO;AAAA,QACL,UAAA,EAAY;AAAA,UACV,KAAA;AAAA,UACA,MAAM,UAAA,CAAW,IAAA;AAAA,UACjB,SAAS,UAAA,CAAW,OAAA;AAAA,UACpB,SAAS,GAAA,GAAM;AAAA,SACjB;AAAA,QACA,MAAA,EAAQ;AAAA,OACV;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAIR,WAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,0DAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,IAAA,EAAM,sCAAsC,QAAQ,CAAA;AAAA,SACtD;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,EAAQ,eAAe,WAAW,CAAA;AACvC,MAAA,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACzC,MAAA,OAAO,EAAE,UAAA,EAAY,EAAE,KAAA,EAAO,GAAG,IAAA,EAAM,CAAA,EAAG,OAAA,EAAS,GAAA,EAAK,OAAA,EAAS,KAAA,EAAM,EAAG,MAAA,EAAQ,EAAC,EAAE;AAAA,IACvF;AAAA,EACF;AAAA,EAEA,MAAM,gBAAA,CAAiB;AAAA,IACrB,KAAA;AAAA,IACA;AAAA,GACF,EAGoE;AAClE,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,UAAA,CAAW,OAAOM,aAAa,CAAA;AACvD,MAAA,MAAM,SAAyB,EAAC;AAEhC,MAAA,KAAA,MAAW,EAAE,IAAA,EAAM,GAAA,EAAI,IAAK,IAAA,EAAM;AAChC,QAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAMA,eAAe,GAAG,CAAA;AAC5D,QAAA,IAAI,KAAA,IAAS,KAAA,CAAM,KAAA,KAAU,KAAA,EAAO;AAClC,UAAA,MAAA,CAAO,IAAA,CAAK,iBAAA,CAAkB,KAAK,CAAC,CAAA;AAAA,QACtC;AAAA,MACF;AAGA,MAAA,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACpB,QAAA,MAAM,QAAQ,IAAI,IAAA,CAAK,EAAE,SAAA,IAAa,CAAC,EAAE,OAAA,EAAQ;AACjD,QAAA,MAAM,QAAQ,IAAI,IAAA,CAAK,EAAE,SAAA,IAAa,CAAC,EAAE,OAAA,EAAQ;AACjD,QAAA,OAAO,KAAA,GAAQ,KAAA;AAAA,MACjB,CAAC,CAAA;AAED,MAAA,MAAM,QAAQ,MAAA,CAAO,MAAA;AACrB,MAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,IAAA,GAAO,UAAA,CAAW,OAAA;AAC3C,MAAA,MAAM,GAAA,GAAM,QAAQ,UAAA,CAAW,OAAA;AAC/B,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAE3C,MAAA,OAAO;AAAA,QACL,UAAA,EAAY;AAAA,UACV,KAAA;AAAA,UACA,MAAM,UAAA,CAAW,IAAA;AAAA,UACjB,SAAS,UAAA,CAAW,OAAA;AAAA,UACpB,SAAS,GAAA,GAAM;AAAA,SACjB;AAAA,QACA,MAAA,EAAQ;AAAA,OACV;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAIR,WAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,uDAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,IAAA,EAAM,mCAAmC,KAAK,CAAA;AAAA,SAChD;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,eAAe,WAAW,CAAA;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACxC,MAAA,OAAO,EAAE,UAAA,EAAY,EAAE,KAAA,EAAO,GAAG,IAAA,EAAM,CAAA,EAAG,OAAA,EAAS,GAAA,EAAK,OAAA,EAAS,KAAA,EAAM,EAAG,MAAA,EAAQ,EAAC,EAAE;AAAA,IACvF;AAAA,EACF;AAAA,EAEA,MAAM,mBAAA,CAAoB;AAAA,IACxB,QAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF,EAIoE;AAClE,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,UAAA,CAAW,OAAOM,aAAa,CAAA;AACvD,MAAA,MAAM,SAAyB,EAAC;AAEhC,MAAA,KAAA,MAAW,EAAE,IAAA,EAAM,GAAA,EAAI,IAAK,IAAA,EAAM;AAChC,QAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAMA,eAAe,GAAG,CAAA;AAC5D,QAAA,IAAI,SAAS,KAAA,CAAM,QAAA,KAAa,QAAA,IAAY,KAAA,CAAM,eAAe,UAAA,EAAY;AAC3E,UAAA,MAAA,CAAO,IAAA,CAAK,iBAAA,CAAkB,KAAK,CAAC,CAAA;AAAA,QACtC;AAAA,MACF;AAGA,MAAA,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACpB,QAAA,MAAM,QAAQ,IAAI,IAAA,CAAK,EAAE,SAAA,IAAa,CAAC,EAAE,OAAA,EAAQ;AACjD,QAAA,MAAM,QAAQ,IAAI,IAAA,CAAK,EAAE,SAAA,IAAa,CAAC,EAAE,OAAA,EAAQ;AACjD,QAAA,OAAO,KAAA,GAAQ,KAAA;AAAA,MACjB,CAAC,CAAA;AAED,MAAA,MAAM,QAAQ,MAAA,CAAO,MAAA;AACrB,MAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,IAAA,GAAO,UAAA,CAAW,OAAA;AAC3C,MAAA,MAAM,GAAA,GAAM,QAAQ,UAAA,CAAW,OAAA;AAC/B,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAE3C,MAAA,OAAO;AAAA,QACL,UAAA,EAAY;AAAA,UACV,KAAA;AAAA,UACA,MAAM,UAAA,CAAW,IAAA;AAAA,UACjB,SAAS,UAAA,CAAW,OAAA;AAAA,UACpB,SAAS,GAAA,GAAM;AAAA,SACjB;AAAA,QACA,MAAA,EAAQ;AAAA,OACV;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAIR,WAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,0DAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,IAAA,EAAM,CAAA,mCAAA,EAAsC,QAAQ,CAAA,QAAA,EAAW,UAAU,CAAA;AAAA,SAC3E;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,eAAe,WAAW,CAAA;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACxC,MAAA,OAAO,EAAE,UAAA,EAAY,EAAE,KAAA,EAAO,GAAG,IAAA,EAAM,CAAA,EAAG,OAAA,EAAS,GAAA,EAAK,OAAA,EAAS,KAAA,EAAM,EAAG,MAAA,EAAQ,EAAC,EAAE;AAAA,IACvF;AAAA,EACF;AAAA,EAEA,MAAM,eAAA,CAAgB;AAAA,IACpB,OAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF,EAIoE;AAClE,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,UAAA,CAAW,OAAOM,aAAa,CAAA;AACvD,MAAA,MAAM,SAAyB,EAAC;AAEhC,MAAA,KAAA,MAAW,EAAE,IAAA,EAAM,GAAA,EAAI,IAAK,IAAA,EAAM;AAChC,QAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAMA,eAAe,GAAG,CAAA;AAC5D,QAAA,IAAI,SAAS,KAAA,CAAM,OAAA,KAAY,OAAA,IAAW,KAAA,CAAM,WAAW,MAAA,EAAQ;AACjE,UAAA,MAAA,CAAO,IAAA,CAAK,iBAAA,CAAkB,KAAK,CAAC,CAAA;AAAA,QACtC;AAAA,MACF;AAGA,MAAA,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACpB,QAAA,MAAM,QAAQ,IAAI,IAAA,CAAK,EAAE,SAAA,IAAa,CAAC,EAAE,OAAA,EAAQ;AACjD,QAAA,MAAM,QAAQ,IAAI,IAAA,CAAK,EAAE,SAAA,IAAa,CAAC,EAAE,OAAA,EAAQ;AACjD,QAAA,OAAO,KAAA,GAAQ,KAAA;AAAA,MACjB,CAAC,CAAA;AAED,MAAA,MAAM,QAAQ,MAAA,CAAO,MAAA;AACrB,MAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,IAAA,GAAO,UAAA,CAAW,OAAA;AAC3C,MAAA,MAAM,GAAA,GAAM,QAAQ,UAAA,CAAW,OAAA;AAC/B,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAE3C,MAAA,OAAO;AAAA,QACL,UAAA,EAAY;AAAA,UACV,KAAA;AAAA,UACA,MAAM,UAAA,CAAW,IAAA;AAAA,UACjB,SAAS,UAAA,CAAW,OAAA;AAAA,UACpB,SAAS,GAAA,GAAM;AAAA,SACjB;AAAA,QACA,MAAA,EAAQ;AAAA,OACV;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAIR,WAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,qDAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,IAAA,EAAM,CAAA,sCAAA,EAAyC,OAAO,CAAA,SAAA,EAAY,MAAM,CAAA;AAAA,SAC1E;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACF,CAAA;AC7VO,IAAM,uBAAA,GAAN,cAAsC,aAAA,CAAc;AAAA,EACjD,UAAA;AAAA,EAER,WAAA,CAAY,EAAE,UAAA,EAAW,EAA8C;AACrE,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACpB;AAAA,EAEA,MAAM,UAAU,IAAA,EAA6C;AAE3D,IAAA,MAAM,aAAA,GAA8C;AAAA,MAClD,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,SAAA,EACE,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,MAAA,GAClB;AAAA,QACE,OAAO,IAAA,CAAK,QAAA;AAAA,QACZ,KAAK,IAAA,CAAK;AAAA,OACZ,GACA;AAAA,KACR;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,kBAAA,CAAmB,aAAa,CAAA;AAC1D,MAAA,OAAO,MAAA,CAAO,MAAA;AAAA,IAChB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAIF,WAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,qCAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,IAAA,EAAM,8BAA8B,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,UAC1F,OAAA,EAAS;AAAA,YACP,IAAA,EAAM,KAAK,IAAA,IAAQ,EAAA;AAAA,YACnB,KAAA,EAAO,KAAK,KAAA,IAAS;AAAA;AACvB,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mBAAmB,IAAA,EAAmF;AAC1G,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,UAAA,EAAY,OAAA,EAAS,OAAO,CAAA,EAAG,OAAA,GAAU,GAAA,EAAK,SAAA,EAAU,GAAI,IAAA;AAGjF,MAAA,MAAM,MAAA,GAAS,KAAK,UAAA,CAAW,eAAA,GAAkB,GAAG,IAAA,CAAK,UAAA,CAAW,eAAe,CAAA,CAAA,CAAA,GAAM,EAAA;AACzF,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,CAAW,MAAA,CAAOO,YAAAA,EAAc,EAAE,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,EAAGA,YAAY,IAAI,CAAA;AAEjG,MAAA,MAAM,SAAkB,EAAC;AAEzB,MAAA,KAAA,MAAW,EAAE,IAAA,EAAM,GAAA,EAAI,IAAK,OAAA,EAAS;AACnC,QAAA,IAAI;AACF,UAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAMA,cAAc,GAAG,CAAA;AAC1D,UAAA,IAAI,CAAC,IAAA,EAAM;AAGX,UAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,IAAA,EAAM;AAGhC,UAAA,IAAI,KAAA,IAAS,IAAA,CAAK,KAAA,KAAU,KAAA,EAAO;AAGnC,UAAA,IAAI,UAAA,EAAY;AACd,YAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,UAAA,IAAc,EAAC;AAC3C,YAAA,IAAI,UAAA,GAAa,KAAA;AACjB,YAAA,KAAA,MAAW,CAACC,IAAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AACrD,cAAA,IAAI,cAAA,CAAeA,IAAG,CAAA,KAAM,KAAA,EAAO;AACjC,gBAAA,UAAA,GAAa,IAAA;AACb,gBAAA;AAAA,cACF;AAAA,YACF;AACA,YAAA,IAAI,UAAA,EAAY;AAAA,UAClB;AAGA,UAAA,IAAI,SAAA,EAAW,KAAA,IAAS,SAAA,EAAW,GAAA,EAAK;AACtC,YAAA,MAAM,SAAA,GAAY,IAAI,IAAA,CAAK,IAAA,CAAK,aAAa,CAAC,CAAA;AAC9C,YAAA,IAAI,SAAA,CAAU,KAAA,IAAS,SAAA,GAAY,SAAA,CAAU,KAAA,EAAO;AACpD,YAAA,IAAI,SAAA,CAAU,GAAA,IAAO,SAAA,GAAY,SAAA,CAAU,GAAA,EAAK;AAAA,UAClD;AAGA,UAAA,IAAI,OAAA,EAAS;AACX,YAAA,IAAI,UAAA,GAAa,KAAA;AACjB,YAAA,KAAA,MAAW,CAACA,IAAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAClD,cAAA,IAAI,IAAA,CAAKA,IAAG,CAAA,KAAM,KAAA,EAAO;AACvB,gBAAA,UAAA,GAAa,IAAA;AACb,gBAAA;AAAA,cACF;AAAA,YACF;AACA,YAAA,IAAI,UAAA,EAAY;AAAA,UAClB;AAEA,UAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,QAClB,SAAS,GAAA,EAAK;AACZ,UAAA,IAAA,CAAK,OAAO,KAAA,CAAM,wBAAA,EAA0B,EAAE,GAAA,EAAK,KAAA,EAAO,KAAK,CAAA;AAAA,QACjE;AAAA,MACF;AAGA,MAAA,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACpB,QAAA,MAAM,QAAQ,IAAI,IAAA,CAAK,EAAE,SAAA,IAAa,CAAC,EAAE,OAAA,EAAQ;AACjD,QAAA,MAAM,QAAQ,IAAI,IAAA,CAAK,EAAE,SAAA,IAAa,CAAC,EAAE,OAAA,EAAQ;AACjD,QAAA,OAAO,KAAA,GAAQ,KAAA;AAAA,MACjB,CAAC,CAAA;AAGD,MAAA,MAAM,QAAQ,MAAA,CAAO,MAAA;AACrB,MAAA,MAAM,QAAQ,IAAA,GAAO,OAAA;AACrB,MAAA,MAAM,MAAM,KAAA,GAAQ,OAAA;AACpB,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAE3C,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,WAAA;AAAA,QACR,KAAA;AAAA,QACA,IAAA;AAAA,QACA,OAAA;AAAA,QACA,SAAS,GAAA,GAAM;AAAA,OACjB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAIV,WAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,gDAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,IAAA,EAAM;AAAA,SACR;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,iBAAiB,WAAW,CAAA;AACxC,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACxC,MAAA,OAAO,EAAE,MAAA,EAAQ,EAAC,EAAG,KAAA,EAAO,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,OAAA,EAAS,GAAA,EAAK,OAAA,EAAS,KAAA,EAAM;AAAA,IACvE;AAAA,EACF;AAAA,EAEA,MAAM,gBAAA,CAAiB,EAAE,OAAA,EAAQ,EAAsD;AACrF,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,wBAAA,EAA0B,EAAE,KAAA,EAAO,OAAA,CAAQ,QAAQ,CAAA;AACrE,IAAA,MAAM,IAAA,CAAK,WAAW,WAAA,CAAY;AAAA,MAChC,SAAA,EAAWO,YAAAA;AAAA,MACX;AAAA,KACD,CAAA;AAAA,EACH;AACF,CAAA;ACpJO,IAAM,0BAAA,GAAN,cAAyC,gBAAA,CAAiB;AAAA,EACvD,UAAA;AAAA,EAER,WAAA,CAAY,EAAE,UAAA,EAAW,EAA8C;AACrE,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACpB;AAAA,EAEQ,uBAAuB,MAAA,EAAuD;AACpF,IAAA,MAAM,EAAE,YAAA,EAAc,KAAA,EAAM,GAAI,MAAA;AAChC,IAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,KAAA,EAAO;AAC3B,MAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,IACxD;AAAA,EACF;AAAA,EAEA,qBAAA,CACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAMA,EAOyD;AACzD,IAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,EAC3C;AAAA,EACA,mBAAA,CACE;AAAA;AAAA;AAAA;AAAA,GAIA,EAWuC;AACvC,IAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,EAC3C;AAAA,EAEA,MAAM,wBAAwB,MAAA,EAKZ;AAChB,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,YAAA,EAAc,KAAA,EAAO,UAAA,EAAY,UAAS,GAAI,MAAA;AAEtD,MAAA,MAAM,IAAA,CAAK,WAAW,KAAA,CAAM;AAAA,QAC1B,SAAA,EAAWE,uBAAAA;AAAA,QACX,GAAA,EAAK,IAAA,CAAK,UAAA,CAAW,MAAA,CAAOA,uBAAAA,EAAyB,EAAE,aAAA,EAAe,YAAA,EAAc,MAAA,EAAQ,KAAA,EAAO,CAAA;AAAA,QACnG,KAAA,EAAO;AAAA,UACL,aAAA,EAAe,YAAA;AAAA,UACf,MAAA,EAAQ,KAAA;AAAA,UACR,UAAA;AAAA,UACA,UAAU,OAAO,QAAA,KAAa,WAAW,QAAA,GAAW,IAAA,CAAK,UAAU,QAAQ,CAAA;AAAA,UAC3E,SAAA,sBAAe,IAAA,EAAK;AAAA,UACpB,SAAA,sBAAe,IAAA;AAAK;AACtB,OACD,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAIX,WAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,qDAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,MAAM,CAAA,gDAAA,EAAmD,MAAA,CAAO,YAAY,CAAA,MAAA,EAAS,OAAO,KAAK,CAAA,CAAA;AAAA,UACjG,OAAA,EAAS;AAAA,YACP,cAAc,MAAA,CAAO,YAAA;AAAA,YACrB,OAAO,MAAA,CAAO;AAAA;AAChB,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,qBAAqB,MAAA,EAAmF;AAC5G,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,uBAAuB,MAAM,CAAA;AAClC,MAAA,MAAM,EAAE,YAAA,EAAc,KAAA,EAAM,GAAI,MAAA;AAEhC,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,UAAA,CAAW,MAAA,CAAOS,uBAAAA,EAAyB,EAAE,aAAA,EAAe,YAAA,EAAc,MAAA,EAAQ,KAAA,EAAO,CAAA;AAC1G,MAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAMA,yBAAyB,GAAG,CAAA;AACrE,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAGlB,MAAA,MAAM,YAAA,GAAe,OAAO,IAAA,CAAK,QAAA,KAAa,QAAA,GAAW,KAAK,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA,GAAI,IAAA,CAAK,QAAA;AAC1F,MAAA,OAAO,YAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAIX,WAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,kDAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,MAAM,CAAA,6CAAA,EAAgD,MAAA,CAAO,YAAY,CAAA,MAAA,EAAS,OAAO,KAAK,CAAA,CAAA;AAAA,UAC9F,OAAA,EAAS;AAAA,YACP,cAAc,MAAA,CAAO,YAAA;AAAA,YACrB,OAAO,MAAA,CAAO;AAAA;AAChB,SACF;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,iBAAiB,WAAW,CAAA;AACxC,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACxC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,iBAAiB,GAAA,EAAuB;AAC9C,IAAA,IAAI,iBAA4C,GAAA,CAAI,QAAA;AACpD,IAAA,IAAI,OAAO,mBAAmB,QAAA,EAAU;AACtC,MAAA,IAAI;AACF,QAAA,cAAA,GAAiB,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAkB,CAAA;AAAA,MACpD,SAAS,CAAA,EAAG;AAEV,QAAA,OAAA,CAAQ,KAAK,CAAA,sCAAA,EAAyC,GAAA,CAAI,aAAa,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE,CAAA;AAAA,MACjF;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,cAAc,GAAA,CAAI,aAAA;AAAA,MAClB,OAAO,GAAA,CAAI,MAAA;AAAA,MACX,QAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAWK,UAAAA,CAAW,GAAA,CAAI,SAAS,CAAA;AAAA,MACnC,SAAA,EAAWA,UAAAA,CAAW,GAAA,CAAI,SAAS,CAAA;AAAA,MACnC,YAAY,GAAA,CAAI;AAAA,KAClB;AAAA,EACF;AAAA,EAEQ,2BAAA,CAA4B;AAAA,IAClC,YAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF,EAKW;AAET,IAAA,MAAM,MAAA,GAAS,KAAK,UAAA,CAAW,eAAA,GAAkB,GAAG,IAAA,CAAK,UAAA,CAAW,eAAe,CAAA,CAAA,CAAA,GAAM,EAAA;AACzF,IAAA,IAAI,GAAA,GAAM,CAAA,EAAG,MAAM,CAAA,EAAGI,uBAAuB,CAAA,CAAA;AAC7C,IAAA,IAAI,YAAA,EAAc,GAAA,IAAO,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA;AACzC,IAAA,IAAI,KAAA,EAAO,GAAA,IAAO,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA;AAC3B,IAAA,IAAI,UAAA,EAAY,GAAA,IAAO,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AACrC,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,MAAM,eAAA,CAAgB;AAAA,IACpB,YAAA;AAAA,IACA,KAAA,GAAQ,EAAA;AAAA,IACR,MAAA,GAAS,CAAA;AAAA,IACT,UAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF,GAOI,EAAC,EAA0B;AAC7B,IAAA,IAAI;AAEF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,2BAAA,CAA4B,EAAE,cAAc,CAAA;AAChE,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,CAAW,OAAOA,uBAAAA,EAAyB,EAAE,QAAQ,CAAA;AAChF,MAAA,MAAM,OAAsB,EAAC;AAC7B,MAAA,KAAA,MAAW,EAAE,IAAA,EAAM,GAAA,EAAI,IAAK,OAAA,EAAS;AAEnC,QAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA;AAC3B,QAAA,MAAM,GAAA,GAAM,KAAA,CAAM,OAAA,CAAQA,uBAAuB,CAAA;AACjD,QAAA,IAAI,GAAA,KAAQ,EAAA,IAAM,KAAA,CAAM,MAAA,GAAS,MAAM,CAAA,EAAG;AAC1C,QAAA,MAAM,MAAA,GAAS,KAAA,CAAM,GAAA,GAAM,CAAC,CAAA;AAG5B,QAAA,MAAM,aAAA,GAAgB,MAAM,MAAA,GAAS,GAAA,GAAM,IAAI,KAAA,CAAM,GAAA,GAAM,CAAC,CAAA,GAAI,MAAA;AAEhE,QAAA,IAAI,YAAA,IAAgB,WAAW,YAAA,EAAc;AAE7C,QAAA,IAAI,UAAA,IAAc,kBAAkB,UAAA,EAAY;AAEhD,QAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAMA,yBAAyB,GAAG,CAAA;AACrE,QAAA,IAAI,CAAC,IAAA,EAAM;AACX,QAAA,IAAI;AAEF,UAAA,IAAI,UAAA,IAAc,CAAC,aAAA,EAAe;AAElC,UAAA,MAAM,SAAA,GAAYJ,UAAAA,CAAW,IAAA,CAAK,SAAS,CAAA;AAC3C,UAAA,IAAI,QAAA,IAAY,SAAA,IAAa,SAAA,GAAY,QAAA,EAAU;AACnD,UAAA,IAAI,MAAA,IAAU,SAAA,IAAa,SAAA,GAAY,MAAA,EAAQ;AAE/C,UAAA,MAAM,YAAA,GAAe,OAAO,IAAA,CAAK,QAAA,KAAa,QAAA,GAAW,KAAK,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA,GAAI,IAAA,CAAK,QAAA;AAC1F,UAAA,MAAM,eAAA,GAAkB,iBAAiB,IAAA,CAAK,UAAA;AAC9C,UAAA,MAAM,GAAA,GAAM,KAAK,gBAAA,CAAiB;AAAA,YAChC,GAAG,IAAA;AAAA,YACH,aAAA,EAAe,MAAA;AAAA,YACf,UAAA,EAAY,eAAA;AAAA,YACZ,QAAA,EAAU;AAAA,WACX,CAAA;AACD,UAAA,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA,QACf,SAAS,GAAA,EAAK;AACZ,UAAA,IAAA,CAAK,OAAO,KAAA,CAAM,oCAAA,EAAsC,EAAE,GAAA,EAAK,KAAA,EAAO,KAAK,CAAA;AAAA,QAC7E;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AAClB,QAAA,MAAM,KAAA,GAAQ,EAAE,SAAA,GAAY,IAAI,KAAK,CAAA,CAAE,SAAS,CAAA,CAAE,OAAA,EAAQ,GAAI,CAAA;AAC9D,QAAA,MAAM,KAAA,GAAQ,EAAE,SAAA,GAAY,IAAI,KAAK,CAAA,CAAE,SAAS,CAAA,CAAE,OAAA,EAAQ,GAAI,CAAA;AAC9D,QAAA,OAAO,KAAA,GAAQ,KAAA;AAAA,MACjB,CAAC,CAAA;AAED,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,SAAS,KAAK,CAAA;AACnD,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,SAAA;AAAA,QACN,OAAO,IAAA,CAAK;AAAA,OACd;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAIP,WAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,6CAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc;AAAA,SAC1B;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,iBAAiB,WAAW,CAAA;AACxC,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACxC,MAAA,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,OAAO,CAAA,EAAE;AAAA,IAC9B;AAAA,EACF;AAAA,EAEA,MAAM,kBAAA,CAAmB;AAAA,IACvB,KAAA;AAAA,IACA;AAAA,GACF,EAGgC;AAC9B,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,KAAA,IAAS,CAAC,YAAA,EAAc;AAC3B,QAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,MACrD;AAEA,MAAA,MAAM,SAAS,IAAA,CAAK,2BAAA,CAA4B,EAAE,YAAA,EAAc,OAAO,CAAA;AACvE,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,CAAW,OAAOS,uBAAAA,EAAyB,EAAE,QAAQ,CAAA;AAChF,MAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,EAAQ,OAAO,IAAA;AAG5B,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,IAAA,CAAK,CAAA,CAAA,KAAK;AACjC,QAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC9B,QAAA,MAAM,GAAA,GAAM,KAAA,CAAM,OAAA,CAAQA,uBAAuB,CAAA;AACjD,QAAA,IAAI,QAAQ,EAAA,IAAM,KAAA,CAAM,MAAA,GAAS,GAAA,GAAM,GAAG,OAAO,KAAA;AACjD,QAAA,MAAM,MAAA,GAAS,KAAA,CAAM,GAAA,GAAM,CAAC,CAAA;AAC5B,QAAA,MAAM,GAAA,GAAM,KAAA,CAAM,GAAA,GAAM,CAAC,CAAA;AACzB,QAAA,OAAO,MAAA,KAAW,gBAAgB,GAAA,KAAQ,KAAA;AAAA,MAC5C,CAAC,CAAA;AAED,MAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,MAAA,MAAM,OAAO,MAAM,IAAA,CAAK,WAAW,KAAA,CAAMA,uBAAAA,EAAyB,SAAS,IAAI,CAAA;AAC/E,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,MAAA,MAAM,YAAA,GAAe,OAAO,IAAA,CAAK,QAAA,KAAa,QAAA,GAAW,KAAK,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA,GAAI,IAAA,CAAK,QAAA;AAC1F,MAAA,OAAO,KAAK,gBAAA,CAAiB,EAAE,GAAG,IAAA,EAAM,QAAA,EAAU,cAAc,CAAA;AAAA,IAClE,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAIX,WAAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,kDAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc,WAAA;AAAA,UACxB,OAAA,EAAS;AAAA,YACP,YAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,iBAAiB,WAAW,CAAA;AACxC,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,WAAA,CAAY,QAAA,EAAU,CAAA;AACxC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACF,CAAA;;;ACzOO,SAAS,gBAAgB,MAAA,EAAkE;AAChG,EAAA,OAAO,UAAA,IAAc,MAAA;AACvB;;;AC9BO,IAAM,eAAA,GAAN,cAA8B,aAAA,CAAc;AAAA,EACjD,MAAA;AAAA,EACQ,MAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA,QAAA;AAAA,EAEA,sBACN,MAAA,EACsF;AACtF,IAAA,IAAI,CAAC,eAAA,CAAgB,MAAM,CAAA,EAAG;AAC5B,MAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,IACrD;AACA,IAAA,IAAI,CAAC,OAAO,QAAA,EAAU;AACpB,MAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,IAC3E;AAGA,IAAA,MAAM,cAAA,GAAiB;AAAA,MACrBC,aAAAA;AAAA,MACAC,cAAAA;AAAA,MACAO,uBAAAA;AAAA,MACAN,WAAAA;AAAA,MACAG,aAAAA;AAAA,MACAC;AAAA,KACF;AAEA,IAAA,KAAA,MAAW,SAAS,cAAA,EAAgB;AAClC,MAAA,IAAI,EAAE,KAAA,IAAS,MAAA,CAAO,QAAA,CAAA,EAAW;AAC/B,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,KAAK,CAAA,CAAE,CAAA;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,mBACN,MAAA,EACqF;AACrF,IAAA,IAAI,eAAA,CAAgB,MAAM,CAAA,EAAG;AAC3B,MAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAAA,IAClD;AACA,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,EAAW,IAAA,EAAK,EAAG;AAC7B,MAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,IACtD;AACA,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,EAAU,IAAA,EAAK,EAAG;AAC5B,MAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,IAAW,QAAA,GAAW;AACpB,IAAA,MAAM,WAAW,KAAA,CAAM,QAAA;AACvB,IAAA,QAAA,CAAS,eAAA,GAAkB,IAAA;AAC3B,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,YAAY,MAAA,EAA+B;AACzC,IAAA,KAAA,CAAM,EAAE,IAAA,EAAM,YAAA,EAAc,CAAA;AAE5B,IAAA,IAAI;AACF,MAAA,IAAI,eAAA,CAAgB,MAAM,CAAA,EAAG;AAC3B,QAAA,IAAA,CAAK,sBAAsB,MAAM,CAAA;AACjC,QAAA,IAAA,CAAK,WAAW,MAAA,CAAO,QAAA;AACvB,QAAA,IAAA,CAAK,eAAA,GAAkB,MAAA,CAAO,SAAA,EAAW,IAAA,EAAK,IAAK,EAAA;AACnD,QAAA,IAAA,CAAK,MAAA,CAAO,KAAK,yCAAyC,CAAA;AAAA,MAC5D,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,mBAAmB,MAAM,CAAA;AAC9B,QAAA,IAAA,CAAK,SAAA,GAAY,MAAA,CAAO,SAAA,CAAU,IAAA,EAAK;AACvC,QAAA,IAAA,CAAK,eAAA,GAAkB,MAAA,CAAO,eAAA,EAAiB,IAAA,EAAK,IAAK,EAAA;AACzD,QAAA,IAAA,CAAK,MAAA,GAAS,IAAI,UAAA,CAAW;AAAA,UAC3B,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,IAAA;AAAK,SAChC,CAAA;AACD,QAAA,IAAA,CAAK,MAAA,CAAO,KAAK,8BAA8B,CAAA;AAAA,MACjD;AAEA,MAAA,MAAM,UAAA,GAAa,IAAI,yBAAA,CAA0B;AAAA,QAC/C,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,iBAAiB,IAAA,CAAK,eAAA;AAAA,QACtB,UAAU,IAAA,CAAK;AAAA,OAChB,CAAA;AAED,MAAA,MAAM,WAAA,GAAc,IAAI,4BAAA,CAA6B;AAAA,QACnD;AAAA,OACD,CAAA;AAED,MAAA,MAAM,SAAA,GAAY,IAAI,0BAAA,CAA2B;AAAA,QAC/C;AAAA,OACD,CAAA;AAED,MAAA,MAAM,MAAA,GAAS,IAAI,uBAAA,CAAwB;AAAA,QACzC;AAAA,OACD,CAAA;AAED,MAAA,MAAM,MAAA,GAAS,IAAI,uBAAA,CAAwB;AAAA,QACzC;AAAA,OACD,CAAA;AAED,MAAA,MAAM,MAAA,GAAS,IAAI,uBAAA,CAAwB;AAAA,QACzC;AAAA,OACD,CAAA;AAED,MAAA,IAAA,CAAK,MAAA,GAAS;AAAA,QACZ,UAAA;AAAA,QACA,WAAA;AAAA,QACA,SAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAIT,WAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,gCAAA;AAAA,UACJ,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc;AAAA,SAC1B;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WAAA,CAAY;AAAA,IAChB,SAAA;AAAA,IACA;AAAA,GACF,EAGkB;AAChB,IAAA,OAAO,KAAK,MAAA,CAAO,UAAA,CAAW,YAAY,EAAE,SAAA,EAAW,QAAQ,CAAA;AAAA,EACjE;AAAA,EAEA,MAAM,WAAW,KAAA,EAIC;AAChB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,UAAA,CAAW,KAAK,CAAA;AAAA,EAChD;AAAA,EAEA,MAAM,UAAA,CAAW,EAAE,SAAA,EAAU,EAA8C;AACzE,IAAA,OAAO,KAAK,MAAA,CAAO,UAAA,CAAW,UAAA,CAAW,EAAE,WAAW,CAAA;AAAA,EACxD;AAAA,EAEA,MAAM,SAAA,CAAU,EAAE,SAAA,EAAU,EAA8C;AACxE,IAAA,OAAO,KAAK,MAAA,CAAO,UAAA,CAAW,SAAA,CAAU,EAAE,WAAW,CAAA;AAAA,EACvD;AAAA,EAEA,MAAM,MAAA,CAA8B;AAAA,IAClC,SAAA;AAAA,IACA;AAAA,GACF,EAGkB;AAChB,IAAA,OAAO,KAAK,MAAA,CAAO,UAAA,CAAW,OAAO,EAAE,SAAA,EAAW,QAAQ,CAAA;AAAA,EAC5D;AAAA,EAEA,MAAM,IAAA,CAAQ,EAAE,SAAA,EAAW,MAAK,EAAgF;AAC9G,IAAA,OAAO,KAAK,MAAA,CAAO,UAAA,CAAW,KAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,EACxD;AAAA,EAEA,MAAM,aAAA,CAAc,EAAE,QAAA,EAAS,EAA4D;AACzF,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA,CAAO,aAAA,CAAc,EAAE,UAAU,CAAA;AAAA,EACtD;AAAA,EAEA,MAAM,sBAAA,CAAuB,EAAE,UAAA,EAAW,EAAyD;AACjG,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA,CAAO,sBAAA,CAAuB,EAAE,YAAY,CAAA;AAAA,EACjE;AAAA,EAEA,MAAM,UAAA,CAAW,EAAE,MAAA,EAAO,EAA8D;AACtF,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,EAAE,QAAQ,CAAA;AAAA,EACjD;AAAA,EAEA,MAAM,YAAA,CAAa;AAAA,IACjB,EAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF,EAI+B;AAC7B,IAAA,OAAO,IAAA,CAAK,OAAO,MAAA,CAAO,YAAA,CAAa,EAAE,EAAA,EAAI,KAAA,EAAO,UAAU,CAAA;AAAA,EAChE;AAAA,EAEA,MAAM,YAAA,CAAa,EAAE,QAAA,EAAS,EAAwC;AACpE,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA,CAAO,YAAA,CAAa,EAAE,UAAU,CAAA;AAAA,EACrD;AAAA,EAIA,MAAM,aACJ,IAAA,EACgD;AAChD,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,YAAA,CAAa,IAAI,CAAA;AAAA,EAC7C;AAAA,EAIA,MAAa,WAAA,CAAY;AAAA,IACvB,QAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF,EAAqG;AACnG,IAAA,OAAO,IAAA,CAAK,OAAO,MAAA,CAAO,WAAA,CAAY,EAAE,QAAA,EAAU,UAAA,EAAY,QAAA,EAAU,MAAA,EAAQ,CAAA;AAAA,EAClF;AAAA,EAEA,MAAM,qBAAA,CAAsB;AAAA,IAC1B,YAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF,EAM4D;AAC1D,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,qBAAA,CAAsB,EAAE,cAAc,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,cAAA,EAAgB,CAAA;AAAA,EAC5G;AAAA,EAEA,MAAM,mBAAA,CAAoB;AAAA,IACxB,YAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF,EAU0C;AACxC,IAAA,OAAO,IAAA,CAAK,OAAO,SAAA,CAAU,mBAAA,CAAoB,EAAE,YAAA,EAAc,KAAA,EAAO,MAAM,CAAA;AAAA,EAChF;AAAA,EAIA,MAAM,eAAA,CAAgB;AAAA,IACpB,UAAA;AAAA,IACA;AAAA,GACF,EAGmD;AACjD,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA,CAAO,gBAAgB,EAAE,UAAA,EAAY,QAAQ,CAAA;AAAA,EAClE;AAAA,EAEA,MAAM,wBAAwB,MAAA,EAKZ;AAChB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,uBAAA,CAAwB,MAAM,CAAA;AAAA,EAC7D;AAAA,EAEA,MAAM,qBAAqB,MAAA,EAAmF;AAC5G,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,oBAAA,CAAqB,MAAM,CAAA;AAAA,EAC1D;AAAA,EAEA,MAAM,YAAmC,KAAA,EAA4E;AACnH,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,WAAA,CAAY,KAAK,CAAA;AAAA,EACjD;AAAA,EAEA,MAAM,SAAA,CAAU;AAAA,IACd,IAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA,GAAO,CAAA;AAAA,IACP,OAAA,GAAU,GAAA;AAAA,IACV,UAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF,EAQmB;AACjB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU;AAAA,MAClC,IAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,mBAAA,CAAoB,SAAA,EAAmB,IAAA,EAA4C;AACvF,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,WAAA,CAAY,mBAAA,CAAoB,WAAW,IAAI,CAAA;AAAA,EACpE;AAAA,EAEA,MAAM,SACJ,OAAA,EACgD;AAChD,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,WAAA,CAAY,QAAA,CAAS,OAAO,CAAA;AAAA,EACjD;AAAA,EAEA,MAAM,eAAA,CAAgB;AAAA,IACpB,YAAA;AAAA,IACA,KAAA,GAAQ,EAAA;AAAA,IACR,MAAA,GAAS,CAAA;AAAA,IACT,UAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF,GAOI,EAAC,EAA0B;AAC7B,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,eAAA,CAAgB;AAAA,MAC3C,YAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,kBAAA,CAAmB;AAAA,IACvB,KAAA;AAAA,IACA;AAAA,GACF,EAGgC;AAC9B,IAAA,OAAO,KAAK,MAAA,CAAO,SAAA,CAAU,mBAAmB,EAAE,KAAA,EAAO,cAAc,CAAA;AAAA,EACzE;AAAA,EAEA,MAAM,mBAAmB,IAAA,EAAmF;AAC1G,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,kBAAA,CAAmB,IAAI,CAAA;AAAA,EACnD;AAAA,EAEA,MAAM,gCAAgC,IAAA,EAIyB;AAC7D,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,+BAAA,CAAgC,IAAI,CAAA;AAAA,EAChE;AAAA,EAEA,MAAM,qBACJ,IAAA,EAC+E;AAC/E,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,oBAAA,CAAqB,IAAI,CAAA;AAAA,EACrD;AAAA,EAEA,MAAM,eAAe,IAAA,EAMU;AAC7B,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,IAAI,CAAA;AAAA,EAC/C;AAAA,EAEA,MAAM,YAAA,CAAa,EAAE,EAAA,EAAG,EAAiD;AACvE,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA,CAAO,YAAA,CAAa,EAAE,IAAI,CAAA;AAAA,EAC/C;AAAA,EAEA,MAAM,UAAU,KAAA,EAAuD;AACrE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA;AAAA,EAC3C;AAAA,EAEA,MAAM,gBAAA,CAAiB;AAAA,IACrB,KAAA;AAAA,IACA;AAAA,GACF,EAGoE;AAClE,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA,CAAO,iBAAiB,EAAE,KAAA,EAAO,YAAY,CAAA;AAAA,EAClE;AAAA,EAEA,MAAM,mBAAA,CAAoB;AAAA,IACxB,QAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF,EAIoE;AAClE,IAAA,OAAO,IAAA,CAAK,OAAO,MAAA,CAAO,mBAAA,CAAoB,EAAE,QAAA,EAAU,UAAA,EAAY,YAAY,CAAA;AAAA,EACpF;AAAA,EAEA,MAAM,mBAAA,CAAoB;AAAA,IACxB,QAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF,EAMoE;AAClE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,mBAAA,CAAoB,EAAE,UAAU,QAAA,EAAU,UAAA,EAAY,MAAA,EAAQ,UAAA,EAAY,CAAA;AAAA,EACtG;AAAA,EAEA,MAAM,eAAA,CAAgB;AAAA,IACpB,OAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF,EAIoE;AAClE,IAAA,OAAO,IAAA,CAAK,OAAO,MAAA,CAAO,eAAA,CAAgB,EAAE,OAAA,EAAS,MAAA,EAAQ,YAAY,CAAA;AAAA,EAC3E;AAAA,EAEA,MAAM,eAAA,CAAgB,EAAE,UAAA,EAAW,EAAgE;AACjG,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA,CAAO,eAAA,CAAgB,EAAE,YAAY,CAAA;AAAA,EAC1D;AAAA,EAEA,MAAM,YAAA,CAAa,EAAE,QAAA,EAAS,EAAoE;AAChG,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA,CAAO,YAAA,CAAa,EAAE,UAAU,CAAA;AAAA,EACrD;AAAA,EAEA,MAAM,cAAA,CAAe;AAAA,IACnB,UAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF,EAIiC;AAC/B,IAAA,OAAO,IAAA,CAAK,OAAO,MAAA,CAAO,cAAA,CAAe,EAAE,UAAA,EAAY,aAAA,EAAe,UAAU,CAAA;AAAA,EAClF;AAAA,EAEA,MAAM,KAAA,GAAuB;AAAA,EAE7B;AACF","file":"index.js","sourcesContent":["import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { LegacyEvalsStorage, TABLE_EVALS } from '@mastra/core/storage';\nimport type { EvalRow, PaginationArgs, PaginationInfo } from '@mastra/core/storage';\nimport type { StoreOperationsCloudflare } from '../operations';\n\nexport class LegacyEvalsStorageCloudflare extends LegacyEvalsStorage {\n operations: StoreOperationsCloudflare;\n constructor({ operations }: { operations: StoreOperationsCloudflare }) {\n super();\n this.operations = operations;\n }\n\n async getEvalsByAgentName(agentName: string, type?: 'test' | 'live'): Promise<EvalRow[]> {\n try {\n // List all keys in the evals table\n const prefix = this.operations.namespacePrefix ? `${this.operations.namespacePrefix}:` : '';\n const keyObjs = await this.operations.listKV(TABLE_EVALS, { prefix: `${prefix}${TABLE_EVALS}` });\n\n const evals: EvalRow[] = [];\n\n for (const { name: key } of keyObjs) {\n const data = await this.operations.getKV(TABLE_EVALS, key);\n if (!data) continue;\n\n // Filter by agentName\n if (data.agent_name !== agentName) continue;\n\n // Filter by type if provided\n if (type) {\n const isTest = data.test_info !== null && data.test_info !== undefined;\n const evalType = isTest ? 'test' : 'live';\n if (evalType !== type) continue;\n }\n\n // Map field names to match EvalRow type\n const mappedData = {\n ...data,\n runId: data.run_id,\n testInfo: data.test_info,\n };\n\n evals.push(mappedData);\n }\n\n // Sort by createdAt descending\n evals.sort((a, b) => {\n const aTime = new Date(a.createdAt || 0).getTime();\n const bTime = new Date(b.createdAt || 0).getTime();\n return bTime - aTime;\n });\n\n return evals;\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_EVALS_BY_AGENT_NAME_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: 'Failed to get evals by agent name',\n },\n error,\n );\n }\n }\n\n async getEvals(\n options: { agentName?: string; type?: 'test' | 'live'; dateRange?: { start?: Date; end?: Date } } & PaginationArgs,\n ): Promise<PaginationInfo & { evals: EvalRow[] }> {\n try {\n const { agentName, type, page = 0, perPage = 100, dateRange } = options;\n\n // List all keys in the evals table\n const prefix = this.operations.namespacePrefix ? `${this.operations.namespacePrefix}:` : '';\n const keyObjs = await this.operations.listKV(TABLE_EVALS, { prefix: `${prefix}${TABLE_EVALS}` });\n\n const evals: EvalRow[] = [];\n\n for (const { name: key } of keyObjs) {\n const data = await this.operations.getKV(TABLE_EVALS, key);\n if (!data) continue;\n\n // Filter by agentName if provided\n if (agentName && data.agent_name !== agentName) continue;\n\n // Filter by type if provided\n if (type) {\n const isTest = data.test_info !== null && data.test_info !== undefined;\n const evalType = isTest ? 'test' : 'live';\n if (evalType !== type) continue;\n }\n\n // Filter by date range if provided\n if (dateRange?.start || dateRange?.end) {\n const evalDate = new Date(data.createdAt || data.created_at || 0);\n if (dateRange.start && evalDate < dateRange.start) continue;\n if (dateRange.end && evalDate > dateRange.end) continue;\n }\n\n // Map field names to match EvalRow type\n const mappedData = {\n ...data,\n runId: data.run_id,\n testInfo: data.test_info,\n };\n\n evals.push(mappedData);\n }\n\n // Sort by createdAt descending\n evals.sort((a, b) => {\n const aTime = new Date(a.createdAt || 0).getTime();\n const bTime = new Date(b.createdAt || 0).getTime();\n return bTime - aTime;\n });\n\n // Apply pagination\n const start = page * perPage;\n const end = start + perPage;\n const paginatedEvals = evals.slice(start, end);\n\n return {\n page,\n perPage,\n total: evals.length,\n hasMore: start + perPage < evals.length,\n evals: paginatedEvals,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_EVALS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: 'Failed to get evals',\n },\n error,\n );\n }\n }\n}\n","import { MessageList } from '@mastra/core/agent';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { MastraMessageV1, MastraMessageV2, StorageThreadType } from '@mastra/core/memory';\nimport type { PaginationInfo, StorageGetMessagesArg, StorageResourceType } from '@mastra/core/storage';\nimport {\n ensureDate,\n MemoryStorage,\n resolveMessageLimit,\n serializeDate,\n TABLE_MESSAGES,\n TABLE_RESOURCES,\n TABLE_THREADS,\n} from '@mastra/core/storage';\nimport type { StoreOperationsCloudflare } from '../operations';\n\nexport class MemoryStorageCloudflare extends MemoryStorage {\n operations: StoreOperationsCloudflare;\n constructor({ operations }: { operations: StoreOperationsCloudflare }) {\n super();\n this.operations = operations;\n }\n\n private ensureMetadata(metadata: Record<string, unknown> | string | undefined): Record<string, unknown> | undefined {\n if (!metadata) return undefined;\n return typeof metadata === 'string' ? JSON.parse(metadata) : metadata;\n }\n\n /**\n * Summarizes message content without exposing raw data (for logging).\n * Returns type, length, and keys only to prevent PII leakage.\n */\n private summarizeMessageContent(content: unknown): { type: string; length?: number; keys?: string[] } {\n if (!content) return { type: 'undefined' };\n if (typeof content === 'string') return { type: 'string', length: content.length };\n if (Array.isArray(content)) return { type: 'array', length: content.length };\n if (typeof content === 'object') return { type: 'object', keys: Object.keys(content) };\n return { type: typeof content };\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n const thread = await this.operations.load<StorageThreadType>({ tableName: TABLE_THREADS, keys: { id: threadId } });\n if (!thread) return null;\n\n try {\n return {\n ...thread,\n createdAt: ensureDate(thread.createdAt)!,\n updatedAt: ensureDate(thread.updatedAt)!,\n metadata: this.ensureMetadata(thread.metadata),\n };\n } catch (error: any) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_THREAD_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId,\n },\n },\n error,\n );\n this.logger?.trackException(mastraError);\n this.logger?.error(mastraError.toString());\n return null;\n }\n }\n\n async getThreadsByResourceId({ resourceId }: { resourceId: string }): Promise<StorageThreadType[]> {\n try {\n const keyList = await this.operations.listKV(TABLE_THREADS);\n const threads = await Promise.all(\n keyList.map(async keyObj => {\n try {\n const data = await this.operations.getKV(TABLE_THREADS, keyObj.name);\n if (!data) return null;\n\n const thread = typeof data === 'string' ? JSON.parse(data) : data;\n if (!thread || !thread.resourceId || thread.resourceId !== resourceId) return null;\n\n return {\n ...thread,\n createdAt: ensureDate(thread.createdAt)!,\n updatedAt: ensureDate(thread.updatedAt)!,\n metadata: this.ensureMetadata(thread.metadata),\n };\n } catch (error: any) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_THREADS_BY_RESOURCE_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n resourceId,\n },\n },\n error,\n );\n this.logger?.trackException(mastraError);\n this.logger?.error(mastraError.toString());\n return null;\n }\n }),\n );\n return threads.filter((thread): thread is StorageThreadType => thread !== null);\n } catch (error: any) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_THREADS_BY_RESOURCE_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n resourceId,\n },\n },\n error,\n );\n this.logger?.trackException(mastraError);\n this.logger?.error(mastraError.toString());\n return [];\n }\n }\n\n async getThreadsByResourceIdPaginated(args: {\n resourceId: string;\n page?: number;\n perPage?: number;\n }): Promise<PaginationInfo & { threads: StorageThreadType[] }> {\n try {\n const { resourceId, page = 0, perPage = 100 } = args;\n\n // List all keys in the threads table\n const prefix = this.operations.namespacePrefix ? `${this.operations.namespacePrefix}:` : '';\n const keyObjs = await this.operations.listKV(TABLE_THREADS, { prefix: `${prefix}${TABLE_THREADS}` });\n\n const threads: StorageThreadType[] = [];\n\n for (const { name: key } of keyObjs) {\n const data = await this.operations.getKV(TABLE_THREADS, key);\n if (!data) continue;\n\n // Filter by resourceId\n if (data.resourceId !== resourceId) continue;\n\n threads.push(data);\n }\n\n // Sort by createdAt descending\n threads.sort((a, b) => {\n const aTime = new Date(a.createdAt || 0).getTime();\n const bTime = new Date(b.createdAt || 0).getTime();\n return bTime - aTime;\n });\n\n // Apply pagination\n const start = page * perPage;\n const end = start + perPage;\n const paginatedThreads = threads.slice(start, end);\n\n return {\n page,\n perPage,\n total: threads.length,\n hasMore: start + perPage < threads.length,\n threads: paginatedThreads,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_THREADS_BY_RESOURCE_ID_PAGINATED_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: 'Failed to get threads by resource ID with pagination',\n },\n error,\n );\n }\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n try {\n await this.operations.insert({ tableName: TABLE_THREADS, record: thread });\n return thread;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SAVE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId: thread.id,\n },\n },\n error,\n );\n }\n }\n async updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n try {\n const thread = await this.getThreadById({ threadId: id });\n if (!thread) {\n throw new Error(`Thread ${id} not found`);\n }\n\n const updatedThread = {\n ...thread,\n title,\n metadata: this.ensureMetadata({\n ...(thread.metadata ?? {}),\n ...metadata,\n }),\n updatedAt: new Date(),\n };\n\n // Insert with proper metadata handling\n await this.operations.insert({ tableName: TABLE_THREADS, record: updatedThread });\n return updatedThread;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_UPDATE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId: id,\n title,\n },\n },\n error,\n );\n }\n }\n\n private getMessageKey(threadId: string, messageId: string): string {\n try {\n return this.operations.getKey(TABLE_MESSAGES, { threadId, id: messageId });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger?.error(`Error getting message key for thread ${threadId} and message ${messageId}:`, { message });\n throw error;\n }\n }\n\n private getThreadMessagesKey(threadId: string): string {\n try {\n return this.operations.getKey(TABLE_MESSAGES, { threadId, id: 'messages' });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger?.error(`Error getting thread messages key for thread ${threadId}:`, { message });\n throw error;\n }\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n try {\n // Verify thread exists\n const thread = await this.getThreadById({ threadId });\n if (!thread) {\n throw new Error(`Thread ${threadId} not found`);\n }\n\n // Get all message keys for this thread first\n const messageKeys = await this.operations.listKV(TABLE_MESSAGES);\n const threadMessageKeys = messageKeys.filter(key => key.name.includes(`${TABLE_MESSAGES}:${threadId}:`));\n\n // Delete all messages and their order atomically\n await Promise.all([\n // Delete message order\n this.operations.deleteKV(TABLE_MESSAGES, this.getThreadMessagesKey(threadId)),\n // Delete all messages\n ...threadMessageKeys.map(key => this.operations.deleteKV(TABLE_MESSAGES, key.name)),\n // Delete thread\n this.operations.deleteKV(TABLE_THREADS, this.operations.getKey(TABLE_THREADS, { id: threadId })),\n ]);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_DELETE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId,\n },\n },\n error,\n );\n }\n }\n\n private async findMessageInAnyThread(messageId: string): Promise<MastraMessageV1 | null> {\n try {\n // List all threads to search for the message\n const prefix = this.operations.namespacePrefix ? `${this.operations.namespacePrefix}:` : '';\n const threadKeys = await this.operations.listKV(TABLE_THREADS, { prefix: `${prefix}${TABLE_THREADS}` });\n\n for (const { name: threadKey } of threadKeys) {\n const threadId = threadKey.split(':').pop();\n if (!threadId || threadId === 'messages') continue;\n\n const messageKey = this.getMessageKey(threadId, messageId);\n const message = await this.operations.getKV(TABLE_MESSAGES, messageKey);\n if (message) {\n // Ensure the message has the correct threadId\n return { ...message, threadId };\n }\n }\n return null;\n } catch (error) {\n this.logger?.error(`Error finding message ${messageId} in any thread:`, error);\n return null;\n }\n }\n\n /**\n * Queue for serializing sorted order updates.\n * Updates the sorted order for a given key. This operation is eventually consistent.\n */\n private updateQueue = new Map<string, Promise<void>>();\n\n private async updateSorting(threadMessages: (MastraMessageV1 & { _index?: number })[]) {\n // Sort messages by index or timestamp\n return threadMessages\n .map(msg => ({\n message: msg,\n // Use _index if available, otherwise timestamp, matching Upstash\n score: msg._index !== undefined ? msg._index : msg.createdAt.getTime(),\n }))\n .sort((a, b) => a.score - b.score)\n .map(item => ({\n id: item.message.id,\n score: item.score,\n }));\n }\n\n /**\n * Updates the sorted order for a given key. This operation is eventually consistent.\n * Note: Operations on the same orderKey are serialized using a queue to prevent\n * concurrent updates from conflicting with each other.\n */\n private async updateSortedMessages(\n orderKey: string,\n newEntries: Array<{ id: string; score: number }>,\n ): Promise<void> {\n // Get the current promise chain or create a new one\n const currentPromise = this.updateQueue.get(orderKey) || Promise.resolve();\n\n // Create the next promise in the chain\n const nextPromise = currentPromise.then(async () => {\n try {\n const currentOrder = await this.getSortedMessages(orderKey);\n\n // Create a map for faster lookups\n const orderMap = new Map(currentOrder.map(entry => [entry.id, entry]));\n\n // Update or add new entries\n for (const entry of newEntries) {\n orderMap.set(entry.id, entry);\n }\n\n // Convert back to array and sort\n const updatedOrder = Array.from(orderMap.values()).sort((a, b) => a.score - b.score);\n\n // Use putKV for consistent serialization across both APIs\n await this.operations.putKV({\n tableName: TABLE_MESSAGES,\n key: orderKey,\n value: JSON.stringify(updatedOrder),\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger?.error(`Error updating sorted order for key ${orderKey}:`, { message });\n throw error; // Let caller handle the error\n } finally {\n // Clean up the queue if this was the last operation\n if (this.updateQueue.get(orderKey) === nextPromise) {\n this.updateQueue.delete(orderKey);\n }\n }\n });\n\n // Update the queue with the new promise\n this.updateQueue.set(orderKey, nextPromise);\n\n // Wait for our turn and handle any errors\n return nextPromise;\n }\n\n private async getSortedMessages(orderKey: string): Promise<Array<{ id: string; score: number }>> {\n const raw = await this.operations.getKV(TABLE_MESSAGES, orderKey);\n if (!raw) return [];\n try {\n const arr = JSON.parse(typeof raw === 'string' ? raw : JSON.stringify(raw));\n return Array.isArray(arr) ? arr : [];\n } catch (e) {\n this.logger?.error(`Error parsing order data for key ${orderKey}:`, { e });\n return [];\n }\n }\n\n private async migrateMessage(messageId: string, fromThreadId: string, toThreadId: string): Promise<void> {\n try {\n // Get the message from the old thread\n const oldMessageKey = this.getMessageKey(fromThreadId, messageId);\n const message = await this.operations.getKV(TABLE_MESSAGES, oldMessageKey);\n if (!message) return;\n\n // Update the message's threadId\n const updatedMessage = {\n ...message,\n threadId: toThreadId,\n };\n\n // Save to new thread\n const newMessageKey = this.getMessageKey(toThreadId, messageId);\n await this.operations.putKV({ tableName: TABLE_MESSAGES, key: newMessageKey, value: updatedMessage });\n\n // Remove from old thread's sorted list\n const oldOrderKey = this.getThreadMessagesKey(fromThreadId);\n const oldEntries = await this.getSortedMessages(oldOrderKey);\n const filteredEntries = oldEntries.filter(entry => entry.id !== messageId);\n await this.updateSortedMessages(oldOrderKey, filteredEntries);\n\n // Add to new thread's sorted list\n const newOrderKey = this.getThreadMessagesKey(toThreadId);\n const newEntries = await this.getSortedMessages(newOrderKey);\n const newEntry = { id: messageId, score: Date.now() };\n newEntries.push(newEntry);\n await this.updateSortedMessages(newOrderKey, newEntries);\n\n // Delete from old thread\n await this.operations.deleteKV(TABLE_MESSAGES, oldMessageKey);\n } catch (error) {\n this.logger?.error(`Error migrating message ${messageId} from ${fromThreadId} to ${toThreadId}:`, error);\n throw error;\n }\n }\n\n async saveMessages(args: { messages: MastraMessageV1[]; format?: undefined | 'v1' }): Promise<MastraMessageV1[]>;\n async saveMessages(args: { messages: MastraMessageV2[]; format: 'v2' }): Promise<MastraMessageV2[]>;\n async saveMessages(\n args: { messages: MastraMessageV1[]; format?: undefined | 'v1' } | { messages: MastraMessageV2[]; format: 'v2' },\n ): Promise<MastraMessageV2[] | MastraMessageV1[]> {\n const { messages, format = 'v1' } = args;\n if (!Array.isArray(messages) || messages.length === 0) return [];\n\n try {\n // Validate message structure and ensure dates\n const validatedMessages = messages\n .map((message, index) => {\n const errors: string[] = [];\n if (!message.id) errors.push('id is required');\n if (!message.threadId) errors.push('threadId is required');\n if (!message.content) errors.push('content is required');\n if (!message.role) errors.push('role is required');\n if (!message.createdAt) errors.push('createdAt is required');\n if (message.resourceId === null || message.resourceId === undefined) errors.push('resourceId is required');\n\n if (errors.length > 0) {\n throw new Error(`Invalid message at index ${index}: ${errors.join(', ')}`);\n }\n\n return {\n ...message,\n createdAt: ensureDate(message.createdAt)!,\n type: message.type || 'v2',\n _index: index,\n };\n })\n .filter(m => !!m);\n\n // Check for existing messages and handle thread migration\n const messageMigrationTasks: Promise<void>[] = [];\n\n for (const message of validatedMessages) {\n // Check if this message already exists in a different thread\n const existingMessage = await this.findMessageInAnyThread(message.id);\n this.logger?.debug(\n `Checking message ${message.id}: existing=${existingMessage?.threadId}, new=${message.threadId}`,\n );\n if (existingMessage && existingMessage.threadId && existingMessage.threadId !== message.threadId) {\n // Message exists in a different thread, migrate it\n this.logger?.debug(`Migrating message ${message.id} from ${existingMessage.threadId} to ${message.threadId}`);\n messageMigrationTasks.push(this.migrateMessage(message.id, existingMessage.threadId, message.threadId!));\n }\n }\n\n // Wait for all migrations to complete\n await Promise.all(messageMigrationTasks);\n\n // Group messages by thread for batch processing\n const messagesByThread = validatedMessages.reduce((acc, message) => {\n if (message.threadId && !acc.has(message.threadId)) {\n acc.set(message.threadId, []);\n }\n if (message.threadId) {\n acc.get(message.threadId)!.push(message as MastraMessageV1 & { _index?: number });\n }\n return acc;\n }, new Map<string, (MastraMessageV1 & { _index?: number })[]>());\n\n // Process each thread's messages\n await Promise.all(\n Array.from(messagesByThread.entries()).map(async ([threadId, threadMessages]) => {\n try {\n // Verify thread exists\n const thread = await this.getThreadById({ threadId });\n if (!thread) {\n throw new Error(`Thread ${threadId} not found`);\n }\n\n // Save messages with serialized dates\n await Promise.all(\n threadMessages.map(async message => {\n const key = this.getMessageKey(threadId, message.id);\n // Strip _index and serialize dates before saving\n const { _index, ...cleanMessage } = message;\n const serializedMessage = {\n ...cleanMessage,\n createdAt: serializeDate(cleanMessage.createdAt),\n };\n this.logger?.debug(`Saving message ${message.id}`, {\n contentSummary: this.summarizeMessageContent(serializedMessage.content),\n });\n await this.operations.putKV({ tableName: TABLE_MESSAGES, key, value: serializedMessage });\n }),\n );\n\n // Update message order using _index or timestamps\n const orderKey = this.getThreadMessagesKey(threadId);\n const entries = await this.updateSorting(threadMessages);\n await this.updateSortedMessages(orderKey, entries);\n\n // Update thread's updatedAt timestamp\n const updatedThread = {\n ...thread,\n updatedAt: new Date(),\n };\n await this.operations.putKV({\n tableName: TABLE_THREADS,\n key: this.operations.getKey(TABLE_THREADS, { id: threadId }),\n value: updatedThread,\n });\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SAVE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId,\n },\n },\n error,\n );\n }\n }),\n );\n\n // Remove _index from returned messages\n const prepared = validatedMessages.map(\n ({ _index, ...message }) =>\n ({ ...message, type: message.type !== 'v2' ? message.type : undefined }) as MastraMessageV1,\n );\n const list = new MessageList().add(prepared, 'memory');\n if (format === `v2`) return list.get.all.v2();\n return list.get.all.v1();\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SAVE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n private async getRank(orderKey: string, id: string): Promise<number | null> {\n const order = await this.getSortedMessages(orderKey);\n const index = order.findIndex(item => item.id === id);\n return index >= 0 ? index : null;\n }\n\n private async getRange(orderKey: string, start: number, end: number): Promise<string[]> {\n const order = await this.getSortedMessages(orderKey);\n const actualStart = start < 0 ? Math.max(0, order.length + start) : start;\n const actualEnd = end < 0 ? order.length + end : Math.min(end, order.length - 1);\n const sliced = order.slice(actualStart, actualEnd + 1);\n return sliced.map(item => item.id);\n }\n\n private async getLastN(orderKey: string, n: number): Promise<string[]> {\n // Reuse getRange with negative indexing\n return this.getRange(orderKey, -n, -1);\n }\n\n private async getIncludedMessagesWithContext(\n threadId: string,\n include: { id: string; threadId?: string; withPreviousMessages?: number; withNextMessages?: number }[],\n messageIds: Set<string>,\n ): Promise<void> {\n await Promise.all(\n include.map(async item => {\n // Use the item's threadId if provided, otherwise use the main threadId\n const targetThreadId = item.threadId || threadId;\n if (!targetThreadId) return;\n const threadMessagesKey = this.getThreadMessagesKey(targetThreadId);\n\n messageIds.add(item.id);\n if (!item.withPreviousMessages && !item.withNextMessages) return;\n\n const rank = await this.getRank(threadMessagesKey, item.id);\n if (rank === null) return;\n\n if (item.withPreviousMessages) {\n const prevIds = await this.getRange(\n threadMessagesKey,\n Math.max(0, rank - item.withPreviousMessages),\n rank - 1,\n );\n prevIds.forEach(id => messageIds.add(id));\n }\n\n if (item.withNextMessages) {\n const nextIds = await this.getRange(threadMessagesKey, rank + 1, rank + item.withNextMessages);\n nextIds.forEach(id => messageIds.add(id));\n }\n }),\n );\n }\n\n private async getRecentMessages(threadId: string, limit: number, messageIds: Set<string>): Promise<void> {\n if (!threadId.trim()) throw new Error('threadId must be a non-empty string');\n\n if (limit <= 0) return;\n\n try {\n const threadMessagesKey = this.getThreadMessagesKey(threadId);\n const latestIds = await this.getLastN(threadMessagesKey, limit);\n latestIds.forEach(id => messageIds.add(id));\n } catch {\n this.logger?.debug(`No message order found for thread ${threadId}, skipping latest messages`);\n }\n }\n\n private async fetchAndParseMessagesFromMultipleThreads(\n messageIds: string[],\n include?: { id: string; threadId?: string; withPreviousMessages?: number; withNextMessages?: number }[],\n targetThreadId?: string,\n ): Promise<(MastraMessageV1 & { _index?: number })[]> {\n // Create a map of messageId to threadId\n const messageIdToThreadId = new Map<string, string>();\n\n // If we have include information, use it to map messageIds to threadIds\n if (include) {\n for (const item of include) {\n if (item.threadId) {\n messageIdToThreadId.set(item.id, item.threadId);\n }\n }\n }\n\n const messages = await Promise.all(\n messageIds.map(async id => {\n try {\n // Try to get the threadId for this message\n let threadId = messageIdToThreadId.get(id);\n\n if (!threadId) {\n if (targetThreadId) {\n // If we have a target thread, only look in that thread\n threadId = targetThreadId;\n } else {\n // Search for the message in any thread\n const foundMessage = await this.findMessageInAnyThread(id);\n if (foundMessage) {\n threadId = foundMessage.threadId;\n }\n }\n }\n\n if (!threadId) return null;\n\n const key = this.getMessageKey(threadId, id);\n const data = await this.operations.getKV(TABLE_MESSAGES, key);\n if (!data) return null;\n const parsed = typeof data === 'string' ? JSON.parse(data) : data;\n this.logger?.debug(`Retrieved message ${id} from thread ${threadId}`, {\n contentSummary: this.summarizeMessageContent(parsed.content),\n });\n return parsed;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger?.error(`Error retrieving message ${id}:`, { message });\n return null;\n }\n }),\n );\n return messages.filter((msg): msg is MastraMessageV1 & { _index?: number } => msg !== null);\n }\n\n async getMessages(args: StorageGetMessagesArg & { format?: 'v1' }): Promise<MastraMessageV1[]>;\n async getMessages(args: StorageGetMessagesArg & { format: 'v2' }): Promise<MastraMessageV2[]>;\n async getMessages({\n threadId,\n resourceId,\n selectBy,\n format,\n }: StorageGetMessagesArg & { format?: 'v1' | 'v2' }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n console.info(`getMessages called with format: ${format}, threadId: ${threadId}`);\n\n // Default to v1 format if not specified\n const actualFormat = format || 'v1';\n console.info(`Using format: ${actualFormat}`);\n\n const limit = resolveMessageLimit({ last: selectBy?.last, defaultLimit: 40 });\n const messageIds = new Set<string>();\n if (limit === 0 && !selectBy?.include?.length) return [];\n\n try {\n if (!threadId.trim()) throw new Error('threadId must be a non-empty string');\n\n // Get included messages and recent messages in parallel\n await Promise.all([\n selectBy?.include?.length\n ? this.getIncludedMessagesWithContext(threadId, selectBy.include, messageIds)\n : Promise.resolve(),\n limit > 0 ? this.getRecentMessages(threadId, limit, messageIds) : Promise.resolve(),\n ]);\n\n // Fetch and parse all messages from their respective threads\n // Only use targetThreadId if we don't have include information (for cross-thread operations)\n const targetThreadId = selectBy?.include?.length ? undefined : threadId;\n const messages = await this.fetchAndParseMessagesFromMultipleThreads(\n Array.from(messageIds),\n selectBy?.include,\n targetThreadId,\n );\n if (!messages.length) return [];\n\n // Always sort messages by createdAt to ensure correct chronological ordering\n // This is critical when `include` parameter brings in messages from semantic recall\n // (messages from different save batches or threads must be interleaved by time, not storage order)\n messages.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());\n\n // Remove _index and ensure dates before returning, just like Upstash\n const prepared = messages.map(({ _index, ...message }) => ({\n ...message,\n type: message.type === (`v2` as `text`) ? undefined : message.type,\n createdAt: ensureDate(message.createdAt)!,\n }));\n // For v1 format, return messages directly without using MessageList (like Upstash)\n if (actualFormat === `v1`) {\n console.info(`Processing ${prepared.length} messages for v1 format - returning directly without MessageList`);\n // Return messages exactly as stored, without MessageList transformation\n return (prepared as MastraMessageV1[]).map(msg => ({\n ...msg,\n createdAt: new Date(msg.createdAt),\n }));\n }\n\n // For v2 format, use MessageList for proper conversion\n const list = new MessageList({ threadId, resourceId }).add(prepared as MastraMessageV1[], 'memory');\n return list.get.all.v2();\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Error retrieving messages for thread ${threadId}`,\n details: {\n threadId,\n resourceId: resourceId ?? '',\n },\n },\n error,\n );\n this.logger?.trackException(mastraError);\n this.logger?.error(mastraError.toString());\n return [];\n }\n }\n\n public async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format: 'v1';\n }): Promise<MastraMessageV1[]>;\n public async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format?: 'v2';\n }): Promise<MastraMessageV2[]>;\n public async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format?: 'v1' | 'v2';\n }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n if (messageIds.length === 0) return [];\n\n try {\n // Fetch and parse all messages from their respective threads\n const messages = (await Promise.all(messageIds.map(id => this.findMessageInAnyThread(id)))).filter(\n result => !!result,\n ) as (MastraMessageV1 & { _index: string })[];\n\n // Remove _index and ensure dates before returning, just like Upstash\n const prepared: MastraMessageV1[] = messages.map(({ _index, ...message }) => ({\n ...message,\n ...(message.type !== (`v2` as string) && { type: message.type }),\n createdAt: ensureDate(message.createdAt)!,\n }));\n // For v2 format, use MessageList for proper conversion\n const list = new MessageList().add(prepared, 'memory');\n if (format === `v1`) return list.get.all.v1();\n return list.get.all.v2();\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_MESSAGES_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Error retrieving messages by ID`,\n details: {\n messageIds: JSON.stringify(messageIds),\n },\n },\n error,\n );\n this.logger?.trackException(mastraError);\n this.logger?.error(mastraError.toString());\n return [];\n }\n }\n\n async getMessagesPaginated(\n args: StorageGetMessagesArg,\n ): Promise<PaginationInfo & { messages: MastraMessageV1[] | MastraMessageV2[] }> {\n const { threadId, resourceId, selectBy, format = 'v1' } = args;\n const { page = 0, perPage = 100 } = selectBy?.pagination || {};\n\n try {\n if (!threadId.trim()) throw new Error('threadId must be a non-empty string');\n\n // Get included messages separately (not subject to pagination)\n const includedMessages: (MastraMessageV1 | MastraMessageV2)[] = [];\n if (selectBy?.include?.length) {\n const includeOnlySelectBy = { ...selectBy, last: 0 }; // Only get included, no recent\n const included =\n format === 'v2'\n ? await this.getMessages({ threadId, selectBy: includeOnlySelectBy, format: 'v2' })\n : await this.getMessages({ threadId, selectBy: includeOnlySelectBy, format: 'v1' });\n includedMessages.push(...included);\n }\n\n // Get thread messages without include (for pagination)\n const threadOnlySelectBy = selectBy ? { ...selectBy, include: undefined } : undefined;\n const threadMessages =\n format === 'v2'\n ? await this.getMessages({ threadId, selectBy: threadOnlySelectBy, format: 'v2' })\n : await this.getMessages({ threadId, selectBy: threadOnlySelectBy, format: 'v1' });\n\n // Apply date filtering if specified\n let filteredMessages = threadMessages;\n if (selectBy?.pagination?.dateRange) {\n const { start: dateStart, end: dateEnd } = selectBy.pagination.dateRange;\n filteredMessages = threadMessages.filter(message => {\n const messageDate = new Date(message.createdAt);\n if (dateStart && messageDate < dateStart) return false;\n if (dateEnd && messageDate > dateEnd) return false;\n return true;\n }) as MastraMessageV1[] | MastraMessageV2[];\n }\n\n const total = filteredMessages.length;\n\n // Apply pagination to thread messages only\n const start = page * perPage;\n const end = start + perPage;\n const paginatedMessages = filteredMessages.slice(start, end);\n\n // Combine paginated + included, deduplicate by id\n const seenIds = new Set<string>();\n const combinedMessages: (MastraMessageV1 | MastraMessageV2)[] = [];\n\n for (const msg of paginatedMessages) {\n if (!seenIds.has(msg.id)) {\n combinedMessages.push(msg);\n seenIds.add(msg.id);\n }\n }\n\n for (const msg of includedMessages) {\n if (!seenIds.has(msg.id)) {\n combinedMessages.push(msg);\n seenIds.add(msg.id);\n }\n }\n\n // Sort combined messages by createdAt to ensure correct chronological ordering\n combinedMessages.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());\n\n return {\n page,\n perPage,\n total,\n hasMore: start + perPage < total,\n messages: combinedMessages as MastraMessageV1[] | MastraMessageV2[],\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_MESSAGES_PAGINATED_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: 'Failed to get messages with pagination',\n details: {\n threadId,\n resourceId: resourceId ?? '',\n },\n },\n error,\n );\n this.logger?.trackException?.(mastraError);\n this.logger?.error?.(mastraError.toString());\n return { messages: [], total: 0, page, perPage: perPage || 40, hasMore: false };\n }\n }\n\n async updateMessages(args: {\n messages: (Partial<Omit<MastraMessageV2, 'createdAt'>> & {\n id: string;\n threadId?: string;\n content?: {\n metadata?: MastraMessageContentV2['metadata'];\n content?: MastraMessageContentV2['content'];\n };\n })[];\n }): Promise<MastraMessageV2[]> {\n try {\n const { messages } = args;\n const updatedMessages: MastraMessageV2[] = [];\n\n for (const messageUpdate of messages) {\n const { id, content, ...otherFields } = messageUpdate;\n\n // Get the existing message by searching through all threads\n // This is a simplified approach - in a real implementation you'd want to store threadId with the message\n const prefix = this.operations.namespacePrefix ? `${this.operations.namespacePrefix}:` : '';\n const keyObjs = await this.operations.listKV(TABLE_MESSAGES, { prefix: `${prefix}${TABLE_MESSAGES}` });\n\n let existingMessage: MastraMessageV2 | null = null;\n let messageKey = '';\n\n for (const { name: key } of keyObjs) {\n const data = await this.operations.getKV(TABLE_MESSAGES, key);\n if (data && data.id === id) {\n existingMessage = data as MastraMessageV2;\n messageKey = key;\n break;\n }\n }\n\n if (!existingMessage) {\n // Message doesn't exist, skip it\n continue;\n }\n\n // Merge the updates\n const updatedMessage: MastraMessageV2 = {\n ...existingMessage,\n ...otherFields,\n id,\n };\n\n // Handle content updates\n if (content) {\n if (content.metadata !== undefined) {\n updatedMessage.content = {\n ...updatedMessage.content,\n metadata: {\n ...updatedMessage.content?.metadata,\n ...content.metadata,\n },\n };\n }\n if (content.content !== undefined) {\n updatedMessage.content = {\n ...updatedMessage.content,\n content: content.content,\n };\n }\n }\n\n // If the message is being moved to a different thread, we need to handle it specially\n if (\n 'threadId' in messageUpdate &&\n messageUpdate.threadId &&\n messageUpdate.threadId !== existingMessage.threadId\n ) {\n // Delete the message from the old thread\n await this.operations.deleteKV(TABLE_MESSAGES, messageKey);\n\n // Update the message's threadId to the new thread\n updatedMessage.threadId = messageUpdate.threadId;\n\n // Save the message to the new thread with a new key\n const newMessageKey = this.getMessageKey(messageUpdate.threadId, id);\n await this.operations.putKV({\n tableName: TABLE_MESSAGES,\n key: newMessageKey,\n value: updatedMessage,\n });\n\n // Update message order in both threads\n if (existingMessage.threadId) {\n // Remove from source thread's order\n const sourceOrderKey = this.getThreadMessagesKey(existingMessage.threadId);\n const sourceEntries = await this.getSortedMessages(sourceOrderKey);\n const filteredEntries = sourceEntries.filter(entry => entry.id !== id);\n await this.updateSortedMessages(sourceOrderKey, filteredEntries);\n }\n\n // Add to destination thread's order\n const destOrderKey = this.getThreadMessagesKey(messageUpdate.threadId);\n const destEntries = await this.getSortedMessages(destOrderKey);\n const newEntry = { id: id, score: Date.now() };\n destEntries.push(newEntry);\n await this.updateSortedMessages(destOrderKey, destEntries);\n } else {\n // Save the updated message in place\n await this.operations.putKV({\n tableName: TABLE_MESSAGES,\n key: messageKey,\n value: updatedMessage,\n });\n }\n\n // Update thread timestamps for both source and destination threads\n const threadsToUpdate = new Set<string>();\n\n // Always update the current thread if threadId is available\n if (updatedMessage.threadId) {\n threadsToUpdate.add(updatedMessage.threadId);\n }\n\n // If threadId is being changed, also update the source thread\n if (\n 'threadId' in messageUpdate &&\n messageUpdate.threadId &&\n messageUpdate.threadId !== existingMessage.threadId\n ) {\n // Add the source thread (where the message was originally)\n if (existingMessage.threadId) {\n threadsToUpdate.add(existingMessage.threadId);\n }\n // Add the destination thread (where the message is being moved to)\n threadsToUpdate.add(messageUpdate.threadId);\n }\n\n // Update all affected threads\n for (const threadId of threadsToUpdate) {\n const thread = await this.getThreadById({ threadId });\n if (thread) {\n const updatedThread = {\n ...thread,\n updatedAt: new Date(),\n };\n await this.operations.putKV({\n tableName: TABLE_THREADS,\n key: this.operations.getKey(TABLE_THREADS, { id: threadId }),\n value: updatedThread,\n });\n }\n }\n\n updatedMessages.push(updatedMessage);\n }\n\n return updatedMessages;\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_UPDATE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: 'Failed to update messages',\n },\n error,\n );\n }\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n try {\n const data = await this.operations.getKV(TABLE_RESOURCES, resourceId);\n if (!data) return null;\n\n const resource = typeof data === 'string' ? JSON.parse(data) : data;\n return {\n ...resource,\n createdAt: ensureDate(resource.createdAt)!,\n updatedAt: ensureDate(resource.updatedAt)!,\n metadata: this.ensureMetadata(resource.metadata),\n };\n } catch (error: any) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_RESOURCE_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n resourceId,\n },\n },\n error,\n );\n this.logger?.trackException(mastraError);\n this.logger?.error(mastraError.toString());\n return null;\n }\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n try {\n const resourceToSave = {\n ...resource,\n metadata: resource.metadata ? JSON.stringify(resource.metadata) : null,\n };\n\n await this.operations.putKV({\n tableName: TABLE_RESOURCES,\n key: resource.id,\n value: resourceToSave,\n });\n\n return resource;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SAVE_RESOURCE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n resourceId: resource.id,\n },\n },\n error,\n );\n }\n }\n\n async updateResource({\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n const existingResource = await this.getResourceById({ resourceId });\n\n if (!existingResource) {\n // Create new resource if it doesn't exist\n const newResource: StorageResourceType = {\n id: resourceId,\n workingMemory,\n metadata: metadata || {},\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n return this.saveResource({ resource: newResource });\n }\n\n const updatedAt = new Date();\n const updatedResource = {\n ...existingResource,\n workingMemory: workingMemory !== undefined ? workingMemory : existingResource.workingMemory,\n metadata: {\n ...existingResource.metadata,\n ...metadata,\n },\n updatedAt,\n };\n\n return this.saveResource({ resource: updatedResource });\n }\n}\n","import type { KVNamespace } from '@cloudflare/workers-types';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n ensureDate,\n serializeDate,\n StoreOperations,\n TABLE_EVALS,\n TABLE_MESSAGES,\n TABLE_SCORERS,\n TABLE_THREADS,\n TABLE_TRACES,\n TABLE_WORKFLOW_SNAPSHOT,\n} from '@mastra/core/storage';\nimport type { StorageColumn, TABLE_NAMES } from '@mastra/core/storage';\nimport type Cloudflare from 'cloudflare';\nimport type { ListOptions, RecordTypes } from '../../types';\n\nexport class StoreOperationsCloudflare extends StoreOperations {\n private bindings?: Record<TABLE_NAMES, KVNamespace>;\n client?: Cloudflare;\n accountId?: string;\n namespacePrefix: string;\n constructor({\n namespacePrefix,\n bindings,\n client,\n accountId,\n }: {\n bindings?: Record<TABLE_NAMES, KVNamespace>;\n namespacePrefix: string;\n client?: Cloudflare;\n accountId?: string;\n }) {\n super();\n this.bindings = bindings;\n this.namespacePrefix = namespacePrefix;\n this.client = client;\n this.accountId = accountId;\n }\n\n async hasColumn() {\n return true;\n }\n\n async alterTable(_args: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n // Nothing to do here, Cloudflare KV is schemaless\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n try {\n const keys = await this.listKV(tableName);\n if (keys.length > 0) {\n await Promise.all(keys.map(keyObj => this.deleteKV(tableName, keyObj.name)));\n }\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_CLEAR_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n\n throw error;\n }\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n try {\n const keys = await this.listKV(tableName);\n if (keys.length > 0) {\n await Promise.all(keys.map(keyObj => this.deleteKV(tableName, keyObj.name)));\n }\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_DROP_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n\n throw error;\n }\n }\n\n private getBinding(tableName: TABLE_NAMES) {\n if (!this.bindings) {\n throw new Error(`Cannot use Workers API binding for ${tableName}: Store initialized with REST API configuration`);\n }\n const binding = this.bindings[tableName];\n if (!binding) throw new Error(`No binding found for namespace ${tableName}`);\n return binding;\n }\n\n getKey<T extends TABLE_NAMES>(tableName: T, record: Record<string, string>): string {\n // Add namespace prefix if configured\n const prefix = this.namespacePrefix ? `${this.namespacePrefix}:` : '';\n switch (tableName) {\n case TABLE_THREADS:\n if (!record.id) throw new Error('Thread ID is required');\n return `${prefix}${tableName}:${record.id}`;\n case TABLE_MESSAGES:\n if (!record.threadId || !record.id) throw new Error('Thread ID and Message ID are required');\n return `${prefix}${tableName}:${record.threadId}:${record.id}`;\n case TABLE_WORKFLOW_SNAPSHOT:\n if (!record.workflow_name || !record.run_id) {\n throw new Error('Workflow name, and run ID are required');\n }\n let key = `${prefix}${tableName}:${record.workflow_name}:${record.run_id}`;\n if (record.resourceId) {\n key = `${key}:${record.resourceId}`;\n }\n return key;\n case TABLE_TRACES:\n if (!record.id) throw new Error('Trace ID is required');\n return `${prefix}${tableName}:${record.id}`;\n case TABLE_EVALS:\n const evalId = record.id || record.run_id;\n if (!evalId) throw new Error('Eval ID or run_id is required');\n return `${prefix}${tableName}:${evalId}`;\n case TABLE_SCORERS:\n if (!record.id) throw new Error('Score ID is required');\n return `${prefix}${tableName}:${record.id}`;\n default:\n throw new Error(`Unsupported table: ${tableName}`);\n }\n }\n\n private getSchemaKey(tableName: TABLE_NAMES): string {\n // Add namespace prefix if configured\n const prefix = this.namespacePrefix ? `${this.namespacePrefix}:` : '';\n return `${prefix}schema:${tableName}`;\n }\n\n /**\n * Helper to safely parse data from KV storage\n */\n private safeParse(text: string | null): any {\n if (!text) return null;\n try {\n const data = JSON.parse(text);\n // If we got an object with a value property that's a string, try to parse that too\n if (data && typeof data === 'object' && 'value' in data) {\n if (typeof data.value === 'string') {\n try {\n return JSON.parse(data.value);\n } catch {\n // If value is a string but not JSON, return as is\n return data.value;\n }\n }\n return null;\n }\n return data;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger.error('Failed to parse text:', { message, text });\n return null;\n }\n }\n\n private async createNamespaceById(title: string) {\n if (this.bindings) {\n // For Workers API, namespaces are created at deploy time\n // Return a mock response matching REST API shape\n return {\n id: title, // Use title as ID since that's what we need\n title: title,\n supports_url_encoding: true,\n };\n }\n return await this.client!.kv.namespaces.create({\n account_id: this.accountId!,\n title,\n });\n }\n\n private async createNamespace(namespaceName: string): Promise<string> {\n try {\n const response = await this.createNamespaceById(namespaceName);\n return response.id;\n } catch (error: any) {\n // Check if the error is because it already exists\n if (error.message && error.message.includes('already exists')) {\n // Try to get it again since we know it exists\n const namespaces = await this.listNamespaces();\n const namespace = namespaces.result.find(ns => ns.title === namespaceName);\n if (namespace) return namespace.id;\n }\n this.logger.error('Error creating namespace:', error);\n throw new Error(`Failed to create namespace ${namespaceName}: ${error.message}`);\n }\n }\n\n private async listNamespaces(): Promise<{\n result: Array<{ id: string; title: string; supports_url_encoding?: boolean }>;\n }> {\n if (this.bindings) {\n return {\n result: Object.keys(this.bindings).map(name => ({\n id: name,\n title: name,\n supports_url_encoding: true,\n })),\n };\n }\n\n let allNamespaces: Array<Cloudflare.KV.Namespace> = [];\n let currentPage = 1;\n const perPage = 50; // Using 50, max is 100 for namespaces.list\n let morePagesExist = true;\n\n while (morePagesExist) {\n const response = await this.client!.kv.namespaces.list({\n account_id: this.accountId!,\n page: currentPage,\n per_page: perPage,\n });\n\n if (response.result) {\n allNamespaces = allNamespaces.concat(response.result);\n }\n\n morePagesExist = response.result ? response.result.length === perPage : false;\n\n if (morePagesExist) {\n currentPage++;\n }\n }\n return { result: allNamespaces };\n }\n\n private async getNamespaceIdByName(namespaceName: string): Promise<string | null> {\n try {\n const response = await this.listNamespaces();\n const namespace = response.result.find(ns => ns.title === namespaceName);\n return namespace ? namespace.id : null;\n } catch (error: any) {\n this.logger.error(`Failed to get namespace ID for ${namespaceName}:`, error);\n return null;\n }\n }\n\n private async getOrCreateNamespaceId(namespaceName: string): Promise<string> {\n let namespaceId = await this.getNamespaceIdByName(namespaceName);\n if (!namespaceId) {\n namespaceId = await this.createNamespace(namespaceName);\n }\n return namespaceId;\n }\n\n private async getNamespaceId(tableName: TABLE_NAMES): Promise<string> {\n const prefix = this.namespacePrefix ? `${this.namespacePrefix}_` : '';\n\n try {\n return await this.getOrCreateNamespaceId(`${prefix}${tableName}`);\n } catch (error: any) {\n this.logger.error('Error fetching namespace ID:', error);\n throw new Error(`Failed to fetch namespace ID for table ${tableName}: ${error.message}`);\n }\n }\n\n private async getNamespaceValue(tableName: TABLE_NAMES, key: string) {\n try {\n if (this.bindings) {\n const binding = this.getBinding(tableName);\n const result = await binding.getWithMetadata(key, 'text');\n if (!result) return null;\n return JSON.stringify(result);\n } else {\n const namespaceId = await this.getNamespaceId(tableName);\n const response = await this.client!.kv.namespaces.values.get(namespaceId, key, {\n account_id: this.accountId!,\n });\n return await response.text();\n }\n } catch (error: any) {\n if (error.message && error.message.includes('key not found')) {\n return null;\n }\n const message = error instanceof Error ? error.message : String(error);\n this.logger.error(`Failed to get value for ${tableName} ${key}:`, { message });\n throw error;\n }\n }\n\n async getKV(tableName: TABLE_NAMES, key: string): Promise<any> {\n try {\n const text = await this.getNamespaceValue(tableName, key);\n return this.safeParse(text);\n } catch (error: any) {\n this.logger.error(`Failed to get KV value for ${tableName}:${key}:`, error);\n throw new Error(`Failed to get KV value: ${error.message}`);\n }\n }\n\n private async getTableSchema(tableName: TABLE_NAMES): Promise<Record<string, StorageColumn> | null> {\n try {\n const schemaKey = this.getSchemaKey(tableName);\n return await this.getKV(tableName, schemaKey);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger.error(`Failed to get schema for ${tableName}:`, { message });\n return null;\n }\n }\n\n private validateColumnValue(value: unknown, column: StorageColumn): boolean {\n if (value === undefined || value === null) {\n return column.nullable ?? false;\n }\n\n switch (column.type) {\n case 'text':\n case 'uuid':\n return typeof value === 'string';\n case 'integer':\n case 'bigint':\n return typeof value === 'number';\n case 'timestamp':\n return value instanceof Date || (typeof value === 'string' && !isNaN(Date.parse(value)));\n case 'jsonb':\n if (typeof value !== 'object') return false;\n try {\n JSON.stringify(value);\n return true;\n } catch {\n return false;\n }\n default:\n return false;\n }\n }\n\n private async validateAgainstSchema(\n record: Record<string, unknown>,\n schema: Record<string, StorageColumn>,\n ): Promise<void> {\n try {\n if (!schema || typeof schema !== 'object' || schema.value === null) {\n throw new Error('Invalid schema format');\n }\n for (const [columnName, column] of Object.entries(schema)) {\n const value = record[columnName];\n\n // Check primary key presence\n if (column.primaryKey && (value === undefined || value === null)) {\n throw new Error(`Missing primary key value for column ${columnName}`);\n }\n\n if (!this.validateColumnValue(value, column)) {\n const valueType = value === null ? 'null' : typeof value;\n throw new Error(`Invalid value for column ${columnName}: expected ${column.type}, got ${valueType}`);\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger.error(`Error validating record against schema:`, { message, record, schema });\n throw error;\n }\n }\n\n private async validateRecord<T extends TABLE_NAMES>(record: unknown, tableName: T): Promise<void> {\n try {\n if (!record || typeof record !== 'object') {\n throw new Error('Record must be an object');\n }\n\n const recordTyped = record as Record<string, unknown>;\n const schema = await this.getTableSchema(tableName);\n\n // If schema exists, validate against it\n if (schema) {\n await this.validateAgainstSchema(recordTyped, schema);\n return;\n }\n\n // Fallback validation if no schema found\n switch (tableName) {\n case TABLE_THREADS:\n if (!('id' in recordTyped) || !('resourceId' in recordTyped) || !('title' in recordTyped)) {\n throw new Error('Thread record missing required fields');\n }\n break;\n case TABLE_MESSAGES:\n if (\n !('id' in recordTyped) ||\n !('threadId' in recordTyped) ||\n !('content' in recordTyped) ||\n !('role' in recordTyped)\n ) {\n throw new Error('Message record missing required fields');\n }\n break;\n case TABLE_WORKFLOW_SNAPSHOT:\n if (!('workflow_name' in recordTyped) || !('run_id' in recordTyped)) {\n throw new Error('Workflow record missing required fields');\n }\n break;\n case TABLE_TRACES:\n if (!('id' in recordTyped)) {\n throw new Error('Trace record missing required fields');\n }\n break;\n case TABLE_EVALS:\n if (!('agent_name' in recordTyped) || !('run_id' in recordTyped)) {\n throw new Error('Eval record missing required fields');\n }\n break;\n case TABLE_SCORERS:\n if (!('id' in recordTyped) || !('scorerId' in recordTyped)) {\n throw new Error('Score record missing required fields');\n }\n break;\n default:\n throw new Error(`Unknown table type: ${tableName}`);\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger.error(`Failed to validate record for ${tableName}:`, { message, record });\n throw error;\n }\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n try {\n const key = this.getKey(tableName, record);\n\n // Process dates and metadata\n const processedRecord = {\n ...record,\n createdAt: record.createdAt ? serializeDate(record.createdAt) : undefined,\n updatedAt: record.updatedAt ? serializeDate(record.updatedAt) : undefined,\n metadata: record.metadata ? JSON.stringify(record.metadata) : '',\n } as RecordTypes[TABLE_NAMES];\n\n // Validate record type\n await this.validateRecord(processedRecord, tableName);\n await this.putKV({ tableName, key, value: processedRecord });\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n }\n }\n\n private ensureMetadata(metadata: Record<string, unknown> | string | undefined): Record<string, unknown> | undefined {\n if (!metadata) return {};\n return typeof metadata === 'string' ? JSON.parse(metadata) : metadata;\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, string> }): Promise<R | null> {\n try {\n // Generate key using simplified approach\n const key = this.getKey(tableName, keys as Partial<RecordTypes[typeof tableName]>);\n\n // Get data from KV store\n const data = await this.getKV(tableName, key);\n if (!data) return null;\n\n // Handle dates and metadata\n const processed = {\n ...data,\n createdAt: ensureDate(data.createdAt),\n updatedAt: ensureDate(data.updatedAt),\n metadata: this.ensureMetadata(data.metadata),\n };\n\n return processed as R;\n } catch (error: any) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_LOAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n this.logger?.trackException(mastraError);\n this.logger?.error(mastraError.toString());\n return null;\n }\n }\n\n async batchInsert<T extends TABLE_NAMES>(input: { tableName: T; records: Partial<RecordTypes[T]>[] }): Promise<void> {\n if (!input.records || input.records.length === 0) return;\n\n try {\n await Promise.all(\n input.records.map(async record => {\n // Generate key using simplified approach\n const key = this.getKey(input.tableName, record as Record<string, string>);\n\n // Process dates and metadata\n const processedRecord = {\n ...record,\n createdAt: record.createdAt ? serializeDate(record.createdAt as Date) : undefined,\n updatedAt: record.updatedAt ? serializeDate(record.updatedAt as Date) : undefined,\n metadata: record.metadata ? JSON.stringify(record.metadata) : undefined,\n } as RecordTypes[T];\n\n await this.putKV({ tableName: input.tableName, key, value: processedRecord });\n }),\n );\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_BATCH_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Error in batch insert for table ${input.tableName}`,\n details: {\n tableName: input.tableName,\n },\n },\n error,\n );\n }\n }\n\n /**\n * Helper to safely serialize data for KV storage\n */\n private safeSerialize(data: any): string {\n return typeof data === 'string' ? data : JSON.stringify(data);\n }\n\n private async putNamespaceValue({\n tableName,\n key,\n value,\n metadata,\n }: {\n tableName: TABLE_NAMES;\n key: string;\n value: string;\n metadata?: any;\n }) {\n try {\n // Ensure consistent serialization\n const serializedValue = this.safeSerialize(value);\n const serializedMetadata = metadata ? this.safeSerialize(metadata) : '';\n\n if (this.bindings) {\n const binding = this.getBinding(tableName);\n await binding.put(key, serializedValue, { metadata: serializedMetadata });\n } else {\n const namespaceId = await this.getNamespaceId(tableName);\n await this.client!.kv.namespaces.values.update(namespaceId, key, {\n account_id: this.accountId!,\n value: serializedValue,\n metadata: serializedMetadata,\n });\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger.error(`Failed to put value for ${tableName} ${key}:`, { message });\n throw error;\n }\n }\n\n async putKV({\n tableName,\n key,\n value,\n metadata,\n }: {\n tableName: TABLE_NAMES;\n key: string;\n value: any;\n metadata?: any;\n }): Promise<void> {\n try {\n await this.putNamespaceValue({ tableName, key, value, metadata });\n } catch (error: any) {\n this.logger.error(`Failed to put KV value for ${tableName}:${key}:`, error);\n throw new Error(`Failed to put KV value: ${error.message}`);\n }\n }\n\n async createTable({\n tableName,\n schema,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n }): Promise<void> {\n try {\n const schemaKey = this.getSchemaKey(tableName);\n const metadata = {\n type: 'table_schema',\n tableName,\n createdAt: new Date().toISOString(),\n };\n await this.putKV({ tableName, key: schemaKey, value: schema, metadata });\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_CREATE_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n\n throw error;\n }\n }\n\n async listNamespaceKeys(tableName: TABLE_NAMES, options?: ListOptions) {\n try {\n if (this.bindings) {\n const binding = this.getBinding(tableName);\n const response = await binding.list({\n limit: options?.limit || 1000,\n prefix: options?.prefix,\n });\n\n // Convert Workers API response to match REST API format\n return response.keys;\n } else {\n const namespaceId = await this.getNamespaceId(tableName);\n // Use REST API\n const response = await this.client!.kv.namespaces.keys.list(namespaceId, {\n account_id: this.accountId!,\n limit: options?.limit || 1000,\n prefix: options?.prefix,\n });\n return response.result;\n }\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_LIST_NAMESPACE_KEYS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n\n throw error;\n }\n }\n\n private async deleteNamespaceValue(tableName: TABLE_NAMES, key: string) {\n if (this.bindings) {\n const binding = this.getBinding(tableName);\n await binding.delete(key);\n } else {\n const namespaceId = await this.getNamespaceId(tableName);\n await this.client!.kv.namespaces.values.delete(namespaceId, key, {\n account_id: this.accountId!,\n });\n }\n }\n\n async deleteKV(tableName: TABLE_NAMES, key: string): Promise<void> {\n try {\n await this.deleteNamespaceValue(tableName, key);\n } catch (error: any) {\n this.logger.error(`Failed to delete KV value for ${tableName}:${key}:`, error);\n throw new Error(`Failed to delete KV value: ${error.message}`);\n }\n }\n\n async listKV(tableName: TABLE_NAMES, options?: ListOptions): Promise<Array<{ name: string }>> {\n try {\n return await this.listNamespaceKeys(tableName, options);\n } catch (error: any) {\n this.logger.error(`Failed to list KV for ${tableName}:`, error);\n throw new Error(`Failed to list KV: ${error.message}`);\n }\n }\n}\n","import { ErrorDomain, ErrorCategory, MastraError } from '@mastra/core/error';\nimport { saveScorePayloadSchema } from '@mastra/core/scores';\nimport type { ScoreRowData, ScoringSource, ValidatedSaveScorePayload } from '@mastra/core/scores';\nimport { SCORERS_SCHEMA, ScoresStorage, TABLE_SCORERS, safelyParseJSON } from '@mastra/core/storage';\nimport type { StoragePagination, PaginationInfo } from '@mastra/core/storage';\nimport type { StoreOperationsCloudflare } from '../operations';\n\nfunction transformScoreRow(row: Record<string, any>): ScoreRowData {\n const result: Record<string, any> = {};\n for (const [key, columnSchema] of Object.entries(SCORERS_SCHEMA)) {\n const value = row[key];\n if (value == null) {\n continue;\n }\n\n if (columnSchema.type === 'jsonb') {\n result[key] = safelyParseJSON(value);\n } else if (columnSchema.type === 'timestamp') {\n result[key] = new Date(value);\n } else {\n result[key] = value;\n }\n }\n return result as ScoreRowData;\n}\n\nexport class ScoresStorageCloudflare extends ScoresStorage {\n private operations: StoreOperationsCloudflare;\n\n constructor({ operations }: { operations: StoreOperationsCloudflare }) {\n super();\n this.operations = operations;\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n try {\n const score = await this.operations.getKV(TABLE_SCORERS, id);\n if (!score) {\n return null;\n }\n return transformScoreRow(score);\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SCORES_GET_SCORE_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to get score by id: ${id}`,\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error(mastraError.toString());\n return null;\n }\n }\n\n async saveScore(score: Omit<ScoreRowData, 'createdAt' | 'updatedAt'>): Promise<{ score: ScoreRowData }> {\n let parsedScore: ValidatedSaveScorePayload;\n try {\n parsedScore = saveScorePayloadSchema.parse(score);\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SAVE_SCORE_FAILED_INVALID_SCORE_PAYLOAD',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { scoreId: score.id },\n },\n error,\n );\n }\n\n try {\n const id = crypto.randomUUID();\n\n // Serialize all object values to JSON strings\n const serializedRecord: Record<string, any> = {};\n for (const [key, value] of Object.entries(parsedScore)) {\n if (value !== null && value !== undefined) {\n if (typeof value === 'object') {\n serializedRecord[key] = JSON.stringify(value);\n } else {\n serializedRecord[key] = value;\n }\n } else {\n serializedRecord[key] = null;\n }\n }\n\n serializedRecord.id = id;\n serializedRecord.createdAt = new Date().toISOString();\n serializedRecord.updatedAt = new Date().toISOString();\n\n await this.operations.putKV({\n tableName: TABLE_SCORERS,\n key: id,\n value: serializedRecord,\n });\n\n const scoreFromDb = await this.getScoreById({ id: score.id });\n return { score: scoreFromDb! };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SCORES_SAVE_SCORE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to save score: ${score.id}`,\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error(mastraError.toString());\n throw mastraError;\n }\n }\n\n async getScoresByScorerId({\n scorerId,\n entityId,\n entityType,\n source,\n pagination,\n }: {\n scorerId: string;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const keys = await this.operations.listKV(TABLE_SCORERS);\n const scores: ScoreRowData[] = [];\n\n for (const { name: key } of keys) {\n const score = await this.operations.getKV(TABLE_SCORERS, key);\n\n if (entityId && score.entityId !== entityId) {\n continue;\n }\n if (entityType && score.entityType !== entityType) {\n continue;\n }\n if (source && score.source !== source) {\n continue;\n }\n\n if (score && score.scorerId === scorerId) {\n scores.push(transformScoreRow(score));\n }\n }\n\n // Sort by createdAt desc\n scores.sort((a, b) => {\n const dateA = new Date(a.createdAt || 0).getTime();\n const dateB = new Date(b.createdAt || 0).getTime();\n return dateB - dateA;\n });\n\n const total = scores.length;\n const start = pagination.page * pagination.perPage;\n const end = start + pagination.perPage;\n const pagedScores = scores.slice(start, end);\n\n return {\n pagination: {\n total,\n page: pagination.page,\n perPage: pagination.perPage,\n hasMore: end < total,\n },\n scores: pagedScores,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SCORES_GET_SCORES_BY_SCORER_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to get scores by scorer id: ${scorerId}`,\n },\n error,\n );\n this.logger?.trackException(mastraError);\n this.logger?.error(mastraError.toString());\n return { pagination: { total: 0, page: 0, perPage: 100, hasMore: false }, scores: [] };\n }\n }\n\n async getScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const keys = await this.operations.listKV(TABLE_SCORERS);\n const scores: ScoreRowData[] = [];\n\n for (const { name: key } of keys) {\n const score = await this.operations.getKV(TABLE_SCORERS, key);\n if (score && score.runId === runId) {\n scores.push(transformScoreRow(score));\n }\n }\n\n // Sort by createdAt desc\n scores.sort((a, b) => {\n const dateA = new Date(a.createdAt || 0).getTime();\n const dateB = new Date(b.createdAt || 0).getTime();\n return dateB - dateA;\n });\n\n const total = scores.length;\n const start = pagination.page * pagination.perPage;\n const end = start + pagination.perPage;\n const pagedScores = scores.slice(start, end);\n\n return {\n pagination: {\n total,\n page: pagination.page,\n perPage: pagination.perPage,\n hasMore: end < total,\n },\n scores: pagedScores,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SCORES_GET_SCORES_BY_RUN_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to get scores by run id: ${runId}`,\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error(mastraError.toString());\n return { pagination: { total: 0, page: 0, perPage: 100, hasMore: false }, scores: [] };\n }\n }\n\n async getScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: string;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const keys = await this.operations.listKV(TABLE_SCORERS);\n const scores: ScoreRowData[] = [];\n\n for (const { name: key } of keys) {\n const score = await this.operations.getKV(TABLE_SCORERS, key);\n if (score && score.entityId === entityId && score.entityType === entityType) {\n scores.push(transformScoreRow(score));\n }\n }\n\n // Sort by createdAt desc\n scores.sort((a, b) => {\n const dateA = new Date(a.createdAt || 0).getTime();\n const dateB = new Date(b.createdAt || 0).getTime();\n return dateB - dateA;\n });\n\n const total = scores.length;\n const start = pagination.page * pagination.perPage;\n const end = start + pagination.perPage;\n const pagedScores = scores.slice(start, end);\n\n return {\n pagination: {\n total,\n page: pagination.page,\n perPage: pagination.perPage,\n hasMore: end < total,\n },\n scores: pagedScores,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SCORES_GET_SCORES_BY_ENTITY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to get scores by entity id: ${entityId}, type: ${entityType}`,\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error(mastraError.toString());\n return { pagination: { total: 0, page: 0, perPage: 100, hasMore: false }, scores: [] };\n }\n }\n\n async getScoresBySpan({\n traceId,\n spanId,\n pagination,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const keys = await this.operations.listKV(TABLE_SCORERS);\n const scores: ScoreRowData[] = [];\n\n for (const { name: key } of keys) {\n const score = await this.operations.getKV(TABLE_SCORERS, key);\n if (score && score.traceId === traceId && score.spanId === spanId) {\n scores.push(transformScoreRow(score));\n }\n }\n\n // Sort by createdAt desc\n scores.sort((a, b) => {\n const dateA = new Date(a.createdAt || 0).getTime();\n const dateB = new Date(b.createdAt || 0).getTime();\n return dateB - dateA;\n });\n\n const total = scores.length;\n const start = pagination.page * pagination.perPage;\n const end = start + pagination.perPage;\n const pagedScores = scores.slice(start, end);\n\n return {\n pagination: {\n total,\n page: pagination.page,\n perPage: pagination.perPage,\n hasMore: end < total,\n },\n scores: pagedScores,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SCORES_GET_SCORES_BY_SPAN_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to get scores by span: traceId=${traceId}, spanId=${spanId}`,\n },\n error,\n );\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { TABLE_TRACES, TracesStorage } from '@mastra/core/storage';\nimport type { StorageGetTracesArg, StorageGetTracesPaginatedArg, PaginationInfo } from '@mastra/core/storage';\nimport type { Trace } from '@mastra/core/telemetry';\nimport type { StoreOperationsCloudflare } from '../operations';\n\nexport class TracesStorageCloudflare extends TracesStorage {\n private operations: StoreOperationsCloudflare;\n\n constructor({ operations }: { operations: StoreOperationsCloudflare }) {\n super();\n this.operations = operations;\n }\n\n async getTraces(args: StorageGetTracesArg): Promise<Trace[]> {\n // Convert the old interface to the new paginated interface\n const paginatedArgs: StorageGetTracesPaginatedArg = {\n name: args.name,\n scope: args.scope,\n page: args.page,\n perPage: args.perPage,\n attributes: args.attributes,\n filters: args.filters,\n dateRange:\n args.fromDate || args.toDate\n ? {\n start: args.fromDate,\n end: args.toDate,\n }\n : undefined,\n };\n\n try {\n const result = await this.getTracesPaginated(paginatedArgs);\n return result.traces;\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_TRACES_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to retrieve traces: ${error instanceof Error ? error.message : String(error)}`,\n details: {\n name: args.name ?? '',\n scope: args.scope ?? '',\n },\n },\n error,\n );\n }\n }\n\n async getTracesPaginated(args: StorageGetTracesPaginatedArg): Promise<PaginationInfo & { traces: Trace[] }> {\n try {\n const { name, scope, attributes, filters, page = 0, perPage = 100, dateRange } = args;\n\n // List all keys in the traces table\n const prefix = this.operations.namespacePrefix ? `${this.operations.namespacePrefix}:` : '';\n const keyObjs = await this.operations.listKV(TABLE_TRACES, { prefix: `${prefix}${TABLE_TRACES}` });\n\n const traces: Trace[] = [];\n\n for (const { name: key } of keyObjs) {\n try {\n const data = await this.operations.getKV(TABLE_TRACES, key);\n if (!data) continue;\n\n // Filter by name\n if (name && data.name !== name) continue;\n\n // Filter by scope\n if (scope && data.scope !== scope) continue;\n\n // Filter by attributes\n if (attributes) {\n const dataAttributes = data.attributes || {};\n let shouldSkip = false;\n for (const [key, value] of Object.entries(attributes)) {\n if (dataAttributes[key] !== value) {\n shouldSkip = true;\n break;\n }\n }\n if (shouldSkip) continue;\n }\n\n // Filter by date range\n if (dateRange?.start || dateRange?.end) {\n const traceDate = new Date(data.createdAt || 0);\n if (dateRange.start && traceDate < dateRange.start) continue;\n if (dateRange.end && traceDate > dateRange.end) continue;\n }\n\n // Filter by custom filters\n if (filters) {\n let shouldSkip = false;\n for (const [key, value] of Object.entries(filters)) {\n if (data[key] !== value) {\n shouldSkip = true;\n break;\n }\n }\n if (shouldSkip) continue;\n }\n\n traces.push(data);\n } catch (err) {\n this.logger.error('Failed to parse trace:', { key, error: err });\n }\n }\n\n // Sort by timestamp descending\n traces.sort((a, b) => {\n const aTime = new Date(a.createdAt || 0).getTime();\n const bTime = new Date(b.createdAt || 0).getTime();\n return bTime - aTime;\n });\n\n // Apply pagination\n const total = traces.length;\n const start = page * perPage;\n const end = start + perPage;\n const pagedTraces = traces.slice(start, end);\n\n return {\n traces: pagedTraces,\n total,\n page,\n perPage,\n hasMore: end < total,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_TRACES_PAGINATED_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: 'Error getting traces with pagination',\n },\n error,\n );\n this.logger.trackException?.(mastraError);\n this.logger.error(mastraError.toString());\n return { traces: [], total: 0, page: 0, perPage: 100, hasMore: false };\n }\n }\n\n async batchTraceInsert({ records }: { records: Record<string, any>[] }): Promise<void> {\n this.logger.debug('Batch inserting traces', { count: records.length });\n await this.operations.batchInsert({\n tableName: TABLE_TRACES,\n records,\n });\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { TABLE_WORKFLOW_SNAPSHOT, ensureDate, WorkflowsStorage } from '@mastra/core/storage';\nimport type { WorkflowRun, WorkflowRuns } from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\nimport type { StoreOperationsCloudflare } from '../operations';\n\nexport class WorkflowsStorageCloudflare extends WorkflowsStorage {\n private operations: StoreOperationsCloudflare;\n\n constructor({ operations }: { operations: StoreOperationsCloudflare }) {\n super();\n this.operations = operations;\n }\n\n private validateWorkflowParams(params: { workflowName: string; runId: string }): void {\n const { workflowName, runId } = params;\n if (!workflowName || !runId) {\n throw new Error('Invalid workflow snapshot parameters');\n }\n }\n\n updateWorkflowResults(\n {\n // workflowName,\n // runId,\n // stepId,\n // result,\n // runtimeContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n runtimeContext: Record<string, any>;\n },\n ): Promise<Record<string, StepResult<any, any, any, any>>> {\n throw new Error('Method not implemented.');\n }\n updateWorkflowState(\n {\n // workflowName,\n // runId,\n // opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: string;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n },\n ): Promise<WorkflowRunState | undefined> {\n throw new Error('Method not implemented.');\n }\n\n async persistWorkflowSnapshot(params: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n try {\n const { workflowName, runId, resourceId, snapshot } = params;\n\n await this.operations.putKV({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n key: this.operations.getKey(TABLE_WORKFLOW_SNAPSHOT, { workflow_name: workflowName, run_id: runId }),\n value: {\n workflow_name: workflowName,\n run_id: runId,\n resourceId,\n snapshot: typeof snapshot === 'string' ? snapshot : JSON.stringify(snapshot),\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n });\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_PERSIST_WORKFLOW_SNAPSHOT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Error persisting workflow snapshot for workflow ${params.workflowName}, run ${params.runId}`,\n details: {\n workflowName: params.workflowName,\n runId: params.runId,\n },\n },\n error,\n );\n }\n }\n\n async loadWorkflowSnapshot(params: { workflowName: string; runId: string }): Promise<WorkflowRunState | null> {\n try {\n this.validateWorkflowParams(params);\n const { workflowName, runId } = params;\n\n const key = this.operations.getKey(TABLE_WORKFLOW_SNAPSHOT, { workflow_name: workflowName, run_id: runId });\n const data = await this.operations.getKV(TABLE_WORKFLOW_SNAPSHOT, key);\n if (!data) return null;\n\n // Parse the snapshot from JSON string if needed\n const snapshotData = typeof data.snapshot === 'string' ? JSON.parse(data.snapshot) : data.snapshot;\n return snapshotData;\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_LOAD_WORKFLOW_SNAPSHOT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Error loading workflow snapshot for workflow ${params.workflowName}, run ${params.runId}`,\n details: {\n workflowName: params.workflowName,\n runId: params.runId,\n },\n },\n error,\n );\n this.logger.trackException?.(mastraError);\n this.logger.error(mastraError.toString());\n return null;\n }\n }\n\n private parseWorkflowRun(row: any): WorkflowRun {\n let parsedSnapshot: WorkflowRunState | string = row.snapshot as string;\n if (typeof parsedSnapshot === 'string') {\n try {\n parsedSnapshot = JSON.parse(row.snapshot as string) as WorkflowRunState;\n } catch (e) {\n // If parsing fails, return the raw snapshot string\n console.warn(`Failed to parse snapshot for workflow ${row.workflow_name}: ${e}`);\n }\n }\n\n return {\n workflowName: row.workflow_name,\n runId: row.run_id,\n snapshot: parsedSnapshot,\n createdAt: ensureDate(row.createdAt)!,\n updatedAt: ensureDate(row.updatedAt)!,\n resourceId: row.resourceId,\n };\n }\n\n private buildWorkflowSnapshotPrefix({\n workflowName,\n runId,\n resourceId,\n }: {\n namespace?: string;\n workflowName?: string;\n runId?: string;\n resourceId?: string;\n }): string {\n // Add namespace prefix if configured\n const prefix = this.operations.namespacePrefix ? `${this.operations.namespacePrefix}:` : '';\n let key = `${prefix}${TABLE_WORKFLOW_SNAPSHOT}`;\n if (workflowName) key += `:${workflowName}`;\n if (runId) key += `:${runId}`;\n if (resourceId) key += `:${resourceId}`;\n return key;\n }\n\n async getWorkflowRuns({\n workflowName,\n limit = 20,\n offset = 0,\n resourceId,\n fromDate,\n toDate,\n }: {\n workflowName?: string;\n limit?: number;\n offset?: number;\n resourceId?: string;\n fromDate?: Date;\n toDate?: Date;\n } = {}): Promise<WorkflowRuns> {\n try {\n // List all keys in the workflow snapshot table\n const prefix = this.buildWorkflowSnapshotPrefix({ workflowName });\n const keyObjs = await this.operations.listKV(TABLE_WORKFLOW_SNAPSHOT, { prefix });\n const runs: WorkflowRun[] = [];\n for (const { name: key } of keyObjs) {\n // Extract workflow_name, run_id, resourceId from key\n const parts = key.split(':');\n const idx = parts.indexOf(TABLE_WORKFLOW_SNAPSHOT);\n if (idx === -1 || parts.length < idx + 3) continue;\n const wfName = parts[idx + 1];\n const _runId = parts[idx + 2];\n // If resourceId is present in the key, it's at idx+3\n const keyResourceId = parts.length > idx + 3 ? parts[idx + 3] : undefined;\n // Filter by namespace, workflowName, resourceId if provided\n if (workflowName && wfName !== workflowName) continue;\n // If resourceId filter is provided, the key must have that resourceId\n if (resourceId && keyResourceId !== resourceId) continue;\n // Load the snapshot\n const data = await this.operations.getKV(TABLE_WORKFLOW_SNAPSHOT, key);\n if (!data) continue;\n try {\n // Additional check: if resourceId filter is provided but key doesn't have resourceId, skip\n if (resourceId && !keyResourceId) continue;\n // Filter by fromDate/toDate\n const createdAt = ensureDate(data.createdAt);\n if (fromDate && createdAt && createdAt < fromDate) continue;\n if (toDate && createdAt && createdAt > toDate) continue;\n // Parse the snapshot from JSON string if needed\n const snapshotData = typeof data.snapshot === 'string' ? JSON.parse(data.snapshot) : data.snapshot;\n const resourceIdToUse = keyResourceId || data.resourceId;\n const run = this.parseWorkflowRun({\n ...data,\n workflow_name: wfName,\n resourceId: resourceIdToUse,\n snapshot: snapshotData,\n });\n runs.push(run);\n } catch (err) {\n this.logger.error('Failed to parse workflow snapshot:', { key, error: err });\n }\n }\n // Sort by createdAt descending\n runs.sort((a, b) => {\n const aDate = a.createdAt ? new Date(a.createdAt).getTime() : 0;\n const bDate = b.createdAt ? new Date(b.createdAt).getTime() : 0;\n return bDate - aDate;\n });\n // Apply pagination\n const pagedRuns = runs.slice(offset, offset + limit);\n return {\n runs: pagedRuns,\n total: runs.length,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_WORKFLOW_RUNS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n this.logger.trackException?.(mastraError);\n this.logger.error(mastraError.toString());\n return { runs: [], total: 0 };\n }\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName: string;\n }): Promise<WorkflowRun | null> {\n try {\n if (!runId || !workflowName) {\n throw new Error('runId, workflowName, are required');\n }\n // Try to find the data by listing keys with the prefix and finding the exact match\n const prefix = this.buildWorkflowSnapshotPrefix({ workflowName, runId });\n const keyObjs = await this.operations.listKV(TABLE_WORKFLOW_SNAPSHOT, { prefix });\n if (!keyObjs.length) return null;\n\n // Find the exact key that matches our workflow and run\n const exactKey = keyObjs.find(k => {\n const parts = k.name.split(':');\n const idx = parts.indexOf(TABLE_WORKFLOW_SNAPSHOT);\n if (idx === -1 || parts.length < idx + 3) return false;\n const wfName = parts[idx + 1];\n const rId = parts[idx + 2];\n return wfName === workflowName && rId === runId;\n });\n\n if (!exactKey) return null;\n const data = await this.operations.getKV(TABLE_WORKFLOW_SNAPSHOT, exactKey.name);\n if (!data) return null;\n // Parse the snapshot from JSON string if needed\n const snapshotData = typeof data.snapshot === 'string' ? JSON.parse(data.snapshot) : data.snapshot;\n return this.parseWorkflowRun({ ...data, snapshot: snapshotData });\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_WORKFLOW_RUN_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n workflowName,\n runId,\n },\n },\n error,\n );\n this.logger.trackException?.(mastraError);\n this.logger.error(mastraError.toString());\n return null;\n }\n }\n}\n","import type { KVNamespace } from '@cloudflare/workers-types';\nimport type { StorageThreadType, MastraMessageV2 } from '@mastra/core/memory';\nimport type { ScoreRowData } from '@mastra/core/scores';\nimport type {\n TABLE_MESSAGES,\n TABLE_THREADS,\n TABLE_WORKFLOW_SNAPSHOT,\n TABLE_EVALS,\n TABLE_TRACES,\n TABLE_RESOURCES,\n TABLE_NAMES,\n EvalRow,\n StorageResourceType,\n TABLE_SCORERS,\n TABLE_AI_SPANS,\n AISpanRecord,\n} from '@mastra/core/storage';\nimport type { WorkflowRunState } from '@mastra/core/workflows';\n\n/**\n * Configuration for Cloudflare KV using REST API\n */\nexport interface CloudflareRestConfig {\n /** Cloudflare account ID */\n accountId: string;\n /** Cloudflare API token with KV access */\n apiToken: string;\n /**\n * Prefix for KV namespace names.\n * Recommended for production use to ensure data isolation between different instances.\n * If not provided, no prefix will be used\n */\n namespacePrefix?: string;\n}\n\n/**\n * Configuration for Cloudflare KV using Workers Binding API\n */\nexport interface CloudflareWorkersConfig {\n /** KV namespace bindings from Workers environment */\n bindings: {\n [key in TABLE_NAMES]: KVNamespace;\n };\n /** Optional prefix for keys within namespaces */\n keyPrefix?: string;\n}\n\n/**\n * Combined configuration type supporting both REST API and Workers Binding API\n */\nexport type CloudflareStoreConfig = CloudflareRestConfig | CloudflareWorkersConfig;\n\n/**\n * Interface for KV operations with type support\n */\nexport interface KVOperation {\n /** Table/namespace to operate on */\n tableName: TABLE_NAMES;\n /** Key to read/write */\n key: string;\n /** Value to write (for put operations) */\n value?: any;\n /** Optional metadata to associate with the value */\n metadata?: any;\n}\n\n/**\n * Helper to determine if a config is using Workers bindings\n */\nexport function isWorkersConfig(config: CloudflareStoreConfig): config is CloudflareWorkersConfig {\n return 'bindings' in config;\n}\n\nexport type RecordTypes = {\n [TABLE_THREADS]: StorageThreadType;\n [TABLE_MESSAGES]: MastraMessageV2;\n [TABLE_WORKFLOW_SNAPSHOT]: WorkflowRunState;\n [TABLE_EVALS]: EvalRow;\n [TABLE_SCORERS]: ScoreRowData;\n [TABLE_TRACES]: any;\n [TABLE_RESOURCES]: StorageResourceType;\n [TABLE_AI_SPANS]: AISpanRecord;\n};\n\nexport type ListOptions = {\n limit?: number;\n prefix?: string;\n};\n","import type { KVNamespace } from '@cloudflare/workers-types';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { StorageThreadType, MastraMessageV1, MastraMessageV2 } from '@mastra/core/memory';\nimport type { ScoreRowData, ScoringSource } from '@mastra/core/scores';\nimport {\n MastraStorage,\n TABLE_MESSAGES,\n TABLE_THREADS,\n TABLE_WORKFLOW_SNAPSHOT,\n TABLE_EVALS,\n TABLE_SCORERS,\n TABLE_TRACES,\n} from '@mastra/core/storage';\nimport type {\n TABLE_NAMES,\n StorageColumn,\n StorageGetMessagesArg,\n EvalRow,\n WorkflowRuns,\n WorkflowRun,\n StorageGetTracesArg as _StorageGetTracesArg,\n StorageGetTracesPaginatedArg,\n PaginationInfo,\n StoragePagination,\n PaginationArgs,\n StorageDomains,\n StorageResourceType,\n} from '@mastra/core/storage';\nimport type { Trace } from '@mastra/core/telemetry';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\nimport Cloudflare from 'cloudflare';\nimport { LegacyEvalsStorageCloudflare } from './domains/legacy-evals';\nimport { MemoryStorageCloudflare } from './domains/memory';\nimport { StoreOperationsCloudflare } from './domains/operations';\nimport { ScoresStorageCloudflare } from './domains/scores';\nimport { TracesStorageCloudflare } from './domains/traces';\nimport { WorkflowsStorageCloudflare } from './domains/workflows';\nimport { isWorkersConfig } from './types';\nimport type { CloudflareStoreConfig, RecordTypes } from './types';\n\nexport class CloudflareStore extends MastraStorage {\n stores: StorageDomains;\n private client?: Cloudflare;\n private accountId?: string;\n private namespacePrefix: string;\n private bindings?: Record<TABLE_NAMES, KVNamespace>;\n\n private validateWorkersConfig(\n config: CloudflareStoreConfig,\n ): asserts config is { bindings: Record<TABLE_NAMES, KVNamespace>; keyPrefix?: string } {\n if (!isWorkersConfig(config)) {\n throw new Error('Invalid Workers API configuration');\n }\n if (!config.bindings) {\n throw new Error('KV bindings are required when using Workers Binding API');\n }\n\n // Validate all required table bindings exist\n const requiredTables = [\n TABLE_THREADS,\n TABLE_MESSAGES,\n TABLE_WORKFLOW_SNAPSHOT,\n TABLE_EVALS,\n TABLE_SCORERS,\n TABLE_TRACES,\n ] as const;\n\n for (const table of requiredTables) {\n if (!(table in config.bindings)) {\n throw new Error(`Missing KV binding for table: ${table}`);\n }\n }\n }\n\n private validateRestConfig(\n config: CloudflareStoreConfig,\n ): asserts config is { accountId: string; apiToken: string; namespacePrefix?: string } {\n if (isWorkersConfig(config)) {\n throw new Error('Invalid REST API configuration');\n }\n if (!config.accountId?.trim()) {\n throw new Error('accountId is required for REST API');\n }\n if (!config.apiToken?.trim()) {\n throw new Error('apiToken is required for REST API');\n }\n }\n\n public get supports() {\n const supports = super.supports;\n supports.getScoresBySpan = true;\n return supports;\n }\n\n constructor(config: CloudflareStoreConfig) {\n super({ name: 'Cloudflare' });\n\n try {\n if (isWorkersConfig(config)) {\n this.validateWorkersConfig(config);\n this.bindings = config.bindings;\n this.namespacePrefix = config.keyPrefix?.trim() || '';\n this.logger.info('Using Cloudflare KV Workers Binding API');\n } else {\n this.validateRestConfig(config);\n this.accountId = config.accountId.trim();\n this.namespacePrefix = config.namespacePrefix?.trim() || '';\n this.client = new Cloudflare({\n apiToken: config.apiToken.trim(),\n });\n this.logger.info('Using Cloudflare KV REST API');\n }\n\n const operations = new StoreOperationsCloudflare({\n accountId: this.accountId,\n client: this.client,\n namespacePrefix: this.namespacePrefix,\n bindings: this.bindings,\n });\n\n const legacyEvals = new LegacyEvalsStorageCloudflare({\n operations,\n });\n\n const workflows = new WorkflowsStorageCloudflare({\n operations,\n });\n\n const traces = new TracesStorageCloudflare({\n operations,\n });\n\n const memory = new MemoryStorageCloudflare({\n operations,\n });\n\n const scores = new ScoresStorageCloudflare({\n operations,\n });\n\n this.stores = {\n operations,\n legacyEvals,\n workflows,\n traces,\n memory,\n scores,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_INIT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async createTable({\n tableName,\n schema,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n }): Promise<void> {\n return this.stores.operations.createTable({ tableName, schema });\n }\n\n async alterTable(_args: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n return this.stores.operations.alterTable(_args);\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n return this.stores.operations.clearTable({ tableName });\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n return this.stores.operations.dropTable({ tableName });\n }\n\n async insert<T extends TABLE_NAMES>({\n tableName,\n record,\n }: {\n tableName: T;\n record: Record<string, any>;\n }): Promise<void> {\n return this.stores.operations.insert({ tableName, record });\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, string> }): Promise<R | null> {\n return this.stores.operations.load({ tableName, keys });\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n return this.stores.memory.getThreadById({ threadId });\n }\n\n async getThreadsByResourceId({ resourceId }: { resourceId: string }): Promise<StorageThreadType[]> {\n return this.stores.memory.getThreadsByResourceId({ resourceId });\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n return this.stores.memory.saveThread({ thread });\n }\n\n async updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n return this.stores.memory.updateThread({ id, title, metadata });\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n return this.stores.memory.deleteThread({ threadId });\n }\n\n async saveMessages(args: { messages: MastraMessageV1[]; format?: undefined | 'v1' }): Promise<MastraMessageV1[]>;\n async saveMessages(args: { messages: MastraMessageV2[]; format: 'v2' }): Promise<MastraMessageV2[]>;\n async saveMessages(\n args: { messages: MastraMessageV1[]; format?: undefined | 'v1' } | { messages: MastraMessageV2[]; format: 'v2' },\n ): Promise<MastraMessageV2[] | MastraMessageV1[]> {\n return this.stores.memory.saveMessages(args);\n }\n\n public async getMessages(args: StorageGetMessagesArg & { format?: 'v1' }): Promise<MastraMessageV1[]>;\n public async getMessages(args: StorageGetMessagesArg & { format: 'v2' }): Promise<MastraMessageV2[]>;\n public async getMessages({\n threadId,\n resourceId,\n selectBy,\n format,\n }: StorageGetMessagesArg & { format?: 'v1' | 'v2' }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n return this.stores.memory.getMessages({ threadId, resourceId, selectBy, format });\n }\n\n async updateWorkflowResults({\n workflowName,\n runId,\n stepId,\n result,\n runtimeContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n runtimeContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n return this.stores.workflows.updateWorkflowResults({ workflowName, runId, stepId, result, runtimeContext });\n }\n\n async updateWorkflowState({\n workflowName,\n runId,\n opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: string;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n }): Promise<WorkflowRunState | undefined> {\n return this.stores.workflows.updateWorkflowState({ workflowName, runId, opts });\n }\n\n async getMessagesById({ messageIds, format }: { messageIds: string[]; format: 'v1' }): Promise<MastraMessageV1[]>;\n async getMessagesById({ messageIds, format }: { messageIds: string[]; format?: 'v2' }): Promise<MastraMessageV2[]>;\n async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format?: 'v1' | 'v2';\n }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n return this.stores.memory.getMessagesById({ messageIds, format });\n }\n\n async persistWorkflowSnapshot(params: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n return this.stores.workflows.persistWorkflowSnapshot(params);\n }\n\n async loadWorkflowSnapshot(params: { workflowName: string; runId: string }): Promise<WorkflowRunState | null> {\n return this.stores.workflows.loadWorkflowSnapshot(params);\n }\n\n async batchInsert<T extends TABLE_NAMES>(input: { tableName: T; records: Partial<RecordTypes[T]>[] }): Promise<void> {\n return this.stores.operations.batchInsert(input);\n }\n\n async getTraces({\n name,\n scope,\n page = 0,\n perPage = 100,\n attributes,\n fromDate,\n toDate,\n }: {\n name?: string;\n scope?: string;\n page: number;\n perPage: number;\n attributes?: Record<string, string>;\n fromDate?: Date;\n toDate?: Date;\n }): Promise<any[]> {\n return this.stores.traces.getTraces({\n name,\n scope,\n page,\n perPage,\n attributes,\n fromDate,\n toDate,\n });\n }\n\n async getEvalsByAgentName(agentName: string, type?: 'test' | 'live'): Promise<EvalRow[]> {\n return this.stores.legacyEvals.getEvalsByAgentName(agentName, type);\n }\n\n async getEvals(\n options: { agentName?: string; type?: 'test' | 'live'; dateRange?: { start?: Date; end?: Date } } & PaginationArgs,\n ): Promise<PaginationInfo & { evals: EvalRow[] }> {\n return this.stores.legacyEvals.getEvals(options);\n }\n\n async getWorkflowRuns({\n workflowName,\n limit = 20,\n offset = 0,\n resourceId,\n fromDate,\n toDate,\n }: {\n workflowName?: string;\n limit?: number;\n offset?: number;\n resourceId?: string;\n fromDate?: Date;\n toDate?: Date;\n } = {}): Promise<WorkflowRuns> {\n return this.stores.workflows.getWorkflowRuns({\n workflowName,\n limit,\n offset,\n resourceId,\n fromDate,\n toDate,\n });\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName: string;\n }): Promise<WorkflowRun | null> {\n return this.stores.workflows.getWorkflowRunById({ runId, workflowName });\n }\n\n async getTracesPaginated(args: StorageGetTracesPaginatedArg): Promise<PaginationInfo & { traces: Trace[] }> {\n return this.stores.traces.getTracesPaginated(args);\n }\n\n async getThreadsByResourceIdPaginated(args: {\n resourceId: string;\n page: number;\n perPage: number;\n }): Promise<PaginationInfo & { threads: StorageThreadType[] }> {\n return this.stores.memory.getThreadsByResourceIdPaginated(args);\n }\n\n async getMessagesPaginated(\n args: StorageGetMessagesArg,\n ): Promise<PaginationInfo & { messages: MastraMessageV1[] | MastraMessageV2[] }> {\n return this.stores.memory.getMessagesPaginated(args);\n }\n\n async updateMessages(args: {\n messages: Partial<Omit<MastraMessageV2, 'createdAt'>> &\n {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n }[];\n }): Promise<MastraMessageV2[]> {\n return this.stores.memory.updateMessages(args);\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n return this.stores.scores.getScoreById({ id });\n }\n\n async saveScore(score: ScoreRowData): Promise<{ score: ScoreRowData }> {\n return this.stores.scores.saveScore(score);\n }\n\n async getScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresByRunId({ runId, pagination });\n }\n\n async getScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: string;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresByEntityId({ entityId, entityType, pagination });\n }\n\n async getScoresByScorerId({\n scorerId,\n entityId,\n entityType,\n source,\n pagination,\n }: {\n scorerId: string;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresByScorerId({ scorerId, entityId, entityType, source, pagination });\n }\n\n async getScoresBySpan({\n traceId,\n spanId,\n pagination,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresBySpan({ traceId, spanId, pagination });\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n return this.stores.memory.getResourceById({ resourceId });\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n return this.stores.memory.saveResource({ resource });\n }\n\n async updateResource({\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n return this.stores.memory.updateResource({ resourceId, workingMemory, metadata });\n }\n\n async close(): Promise<void> {\n // No explicit cleanup needed\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/storage/domains/legacy-evals/index.ts","../src/storage/domains/memory/index.ts","../src/storage/domains/operations/index.ts","../src/storage/domains/scores/index.ts","../src/storage/domains/traces/index.ts","../src/storage/domains/workflows/index.ts","../src/storage/types.ts","../src/storage/index.ts"],"names":["MastraError","ErrorDomain","ErrorCategory","TABLE_THREADS","TABLE_MESSAGES","TABLE_EVALS","serializeDate","ensureDate","TABLE_SCORERS","TABLE_TRACES","key","TABLE_WORKFLOW_SNAPSHOT"],"mappings":"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","file":"index.js","sourcesContent":["import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { LegacyEvalsStorage, TABLE_EVALS } from '@mastra/core/storage';\nimport type { EvalRow, PaginationArgs, PaginationInfo } from '@mastra/core/storage';\nimport type { StoreOperationsCloudflare } from '../operations';\n\nexport class LegacyEvalsStorageCloudflare extends LegacyEvalsStorage {\n operations: StoreOperationsCloudflare;\n constructor({ operations }: { operations: StoreOperationsCloudflare }) {\n super();\n this.operations = operations;\n }\n\n async getEvalsByAgentName(agentName: string, type?: 'test' | 'live'): Promise<EvalRow[]> {\n try {\n // List all keys in the evals table\n const prefix = this.operations.namespacePrefix ? `${this.operations.namespacePrefix}:` : '';\n const keyObjs = await this.operations.listKV(TABLE_EVALS, { prefix: `${prefix}${TABLE_EVALS}` });\n\n const evals: EvalRow[] = [];\n\n for (const { name: key } of keyObjs) {\n const data = await this.operations.getKV(TABLE_EVALS, key);\n if (!data) continue;\n\n // Filter by agentName\n if (data.agent_name !== agentName) continue;\n\n // Filter by type if provided\n if (type) {\n const isTest = data.test_info !== null && data.test_info !== undefined;\n const evalType = isTest ? 'test' : 'live';\n if (evalType !== type) continue;\n }\n\n // Map field names to match EvalRow type\n const mappedData = {\n ...data,\n runId: data.run_id,\n testInfo: data.test_info,\n };\n\n evals.push(mappedData);\n }\n\n // Sort by createdAt descending\n evals.sort((a, b) => {\n const aTime = new Date(a.createdAt || 0).getTime();\n const bTime = new Date(b.createdAt || 0).getTime();\n return bTime - aTime;\n });\n\n return evals;\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_EVALS_BY_AGENT_NAME_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: 'Failed to get evals by agent name',\n },\n error,\n );\n }\n }\n\n async getEvals(\n options: { agentName?: string; type?: 'test' | 'live'; dateRange?: { start?: Date; end?: Date } } & PaginationArgs,\n ): Promise<PaginationInfo & { evals: EvalRow[] }> {\n try {\n const { agentName, type, page = 0, perPage = 100, dateRange } = options;\n\n // List all keys in the evals table\n const prefix = this.operations.namespacePrefix ? `${this.operations.namespacePrefix}:` : '';\n const keyObjs = await this.operations.listKV(TABLE_EVALS, { prefix: `${prefix}${TABLE_EVALS}` });\n\n const evals: EvalRow[] = [];\n\n for (const { name: key } of keyObjs) {\n const data = await this.operations.getKV(TABLE_EVALS, key);\n if (!data) continue;\n\n // Filter by agentName if provided\n if (agentName && data.agent_name !== agentName) continue;\n\n // Filter by type if provided\n if (type) {\n const isTest = data.test_info !== null && data.test_info !== undefined;\n const evalType = isTest ? 'test' : 'live';\n if (evalType !== type) continue;\n }\n\n // Filter by date range if provided\n if (dateRange?.start || dateRange?.end) {\n const evalDate = new Date(data.createdAt || data.created_at || 0);\n if (dateRange.start && evalDate < dateRange.start) continue;\n if (dateRange.end && evalDate > dateRange.end) continue;\n }\n\n // Map field names to match EvalRow type\n const mappedData = {\n ...data,\n runId: data.run_id,\n testInfo: data.test_info,\n };\n\n evals.push(mappedData);\n }\n\n // Sort by createdAt descending\n evals.sort((a, b) => {\n const aTime = new Date(a.createdAt || 0).getTime();\n const bTime = new Date(b.createdAt || 0).getTime();\n return bTime - aTime;\n });\n\n // Apply pagination\n const start = page * perPage;\n const end = start + perPage;\n const paginatedEvals = evals.slice(start, end);\n\n return {\n page,\n perPage,\n total: evals.length,\n hasMore: start + perPage < evals.length,\n evals: paginatedEvals,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_EVALS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: 'Failed to get evals',\n },\n error,\n );\n }\n }\n}\n","import { MessageList } from '@mastra/core/agent';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { MastraMessageV1, MastraMessageV2, StorageThreadType } from '@mastra/core/memory';\nimport type { PaginationInfo, StorageGetMessagesArg, StorageResourceType } from '@mastra/core/storage';\nimport {\n ensureDate,\n MemoryStorage,\n resolveMessageLimit,\n serializeDate,\n TABLE_MESSAGES,\n TABLE_RESOURCES,\n TABLE_THREADS,\n} from '@mastra/core/storage';\nimport type { StoreOperationsCloudflare } from '../operations';\n\nexport class MemoryStorageCloudflare extends MemoryStorage {\n operations: StoreOperationsCloudflare;\n constructor({ operations }: { operations: StoreOperationsCloudflare }) {\n super();\n this.operations = operations;\n }\n\n private ensureMetadata(metadata: Record<string, unknown> | string | undefined): Record<string, unknown> | undefined {\n if (!metadata) return undefined;\n return typeof metadata === 'string' ? JSON.parse(metadata) : metadata;\n }\n\n /**\n * Summarizes message content without exposing raw data (for logging).\n * Returns type, length, and keys only to prevent PII leakage.\n */\n private summarizeMessageContent(content: unknown): { type: string; length?: number; keys?: string[] } {\n if (!content) return { type: 'undefined' };\n if (typeof content === 'string') return { type: 'string', length: content.length };\n if (Array.isArray(content)) return { type: 'array', length: content.length };\n if (typeof content === 'object') return { type: 'object', keys: Object.keys(content) };\n return { type: typeof content };\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n const thread = await this.operations.load<StorageThreadType>({ tableName: TABLE_THREADS, keys: { id: threadId } });\n if (!thread) return null;\n\n try {\n return {\n ...thread,\n createdAt: ensureDate(thread.createdAt)!,\n updatedAt: ensureDate(thread.updatedAt)!,\n metadata: this.ensureMetadata(thread.metadata),\n };\n } catch (error: any) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_THREAD_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId,\n },\n },\n error,\n );\n this.logger?.trackException(mastraError);\n this.logger?.error(mastraError.toString());\n return null;\n }\n }\n\n async getThreadsByResourceId({ resourceId }: { resourceId: string }): Promise<StorageThreadType[]> {\n try {\n const keyList = await this.operations.listKV(TABLE_THREADS);\n const threads = await Promise.all(\n keyList.map(async keyObj => {\n try {\n const data = await this.operations.getKV(TABLE_THREADS, keyObj.name);\n if (!data) return null;\n\n const thread = typeof data === 'string' ? JSON.parse(data) : data;\n if (!thread || !thread.resourceId || thread.resourceId !== resourceId) return null;\n\n return {\n ...thread,\n createdAt: ensureDate(thread.createdAt)!,\n updatedAt: ensureDate(thread.updatedAt)!,\n metadata: this.ensureMetadata(thread.metadata),\n };\n } catch (error: any) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_THREADS_BY_RESOURCE_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n resourceId,\n },\n },\n error,\n );\n this.logger?.trackException(mastraError);\n this.logger?.error(mastraError.toString());\n return null;\n }\n }),\n );\n return threads.filter((thread): thread is StorageThreadType => thread !== null);\n } catch (error: any) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_THREADS_BY_RESOURCE_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n resourceId,\n },\n },\n error,\n );\n this.logger?.trackException(mastraError);\n this.logger?.error(mastraError.toString());\n return [];\n }\n }\n\n async getThreadsByResourceIdPaginated(args: {\n resourceId: string;\n page?: number;\n perPage?: number;\n }): Promise<PaginationInfo & { threads: StorageThreadType[] }> {\n try {\n const { resourceId, page = 0, perPage = 100 } = args;\n\n // List all keys in the threads table\n const prefix = this.operations.namespacePrefix ? `${this.operations.namespacePrefix}:` : '';\n const keyObjs = await this.operations.listKV(TABLE_THREADS, { prefix: `${prefix}${TABLE_THREADS}` });\n\n const threads: StorageThreadType[] = [];\n\n for (const { name: key } of keyObjs) {\n const data = await this.operations.getKV(TABLE_THREADS, key);\n if (!data) continue;\n\n // Filter by resourceId\n if (data.resourceId !== resourceId) continue;\n\n threads.push(data);\n }\n\n // Sort by createdAt descending\n threads.sort((a, b) => {\n const aTime = new Date(a.createdAt || 0).getTime();\n const bTime = new Date(b.createdAt || 0).getTime();\n return bTime - aTime;\n });\n\n // Apply pagination\n const start = page * perPage;\n const end = start + perPage;\n const paginatedThreads = threads.slice(start, end);\n\n return {\n page,\n perPage,\n total: threads.length,\n hasMore: start + perPage < threads.length,\n threads: paginatedThreads,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_THREADS_BY_RESOURCE_ID_PAGINATED_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: 'Failed to get threads by resource ID with pagination',\n },\n error,\n );\n }\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n try {\n await this.operations.insert({ tableName: TABLE_THREADS, record: thread });\n return thread;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SAVE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId: thread.id,\n },\n },\n error,\n );\n }\n }\n async updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n try {\n const thread = await this.getThreadById({ threadId: id });\n if (!thread) {\n throw new Error(`Thread ${id} not found`);\n }\n\n const updatedThread = {\n ...thread,\n title,\n metadata: this.ensureMetadata({\n ...(thread.metadata ?? {}),\n ...metadata,\n }),\n updatedAt: new Date(),\n };\n\n // Insert with proper metadata handling\n await this.operations.insert({ tableName: TABLE_THREADS, record: updatedThread });\n return updatedThread;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_UPDATE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId: id,\n title,\n },\n },\n error,\n );\n }\n }\n\n private getMessageKey(threadId: string, messageId: string): string {\n try {\n return this.operations.getKey(TABLE_MESSAGES, { threadId, id: messageId });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger?.error(`Error getting message key for thread ${threadId} and message ${messageId}:`, { message });\n throw error;\n }\n }\n\n private getThreadMessagesKey(threadId: string): string {\n try {\n return this.operations.getKey(TABLE_MESSAGES, { threadId, id: 'messages' });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger?.error(`Error getting thread messages key for thread ${threadId}:`, { message });\n throw error;\n }\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n try {\n // Verify thread exists\n const thread = await this.getThreadById({ threadId });\n if (!thread) {\n throw new Error(`Thread ${threadId} not found`);\n }\n\n // Get all message keys for this thread first\n const messageKeys = await this.operations.listKV(TABLE_MESSAGES);\n const threadMessageKeys = messageKeys.filter(key => key.name.includes(`${TABLE_MESSAGES}:${threadId}:`));\n\n // Delete all messages and their order atomically\n await Promise.all([\n // Delete message order\n this.operations.deleteKV(TABLE_MESSAGES, this.getThreadMessagesKey(threadId)),\n // Delete all messages\n ...threadMessageKeys.map(key => this.operations.deleteKV(TABLE_MESSAGES, key.name)),\n // Delete thread\n this.operations.deleteKV(TABLE_THREADS, this.operations.getKey(TABLE_THREADS, { id: threadId })),\n ]);\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_DELETE_THREAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId,\n },\n },\n error,\n );\n }\n }\n\n private async findMessageInAnyThread(messageId: string): Promise<MastraMessageV1 | null> {\n try {\n // List all threads to search for the message\n const prefix = this.operations.namespacePrefix ? `${this.operations.namespacePrefix}:` : '';\n const threadKeys = await this.operations.listKV(TABLE_THREADS, { prefix: `${prefix}${TABLE_THREADS}` });\n\n for (const { name: threadKey } of threadKeys) {\n const threadId = threadKey.split(':').pop();\n if (!threadId || threadId === 'messages') continue;\n\n const messageKey = this.getMessageKey(threadId, messageId);\n const message = await this.operations.getKV(TABLE_MESSAGES, messageKey);\n if (message) {\n // Ensure the message has the correct threadId\n return { ...message, threadId };\n }\n }\n return null;\n } catch (error) {\n this.logger?.error(`Error finding message ${messageId} in any thread:`, error);\n return null;\n }\n }\n\n /**\n * Queue for serializing sorted order updates.\n * Updates the sorted order for a given key. This operation is eventually consistent.\n */\n private updateQueue = new Map<string, Promise<void>>();\n\n private async updateSorting(threadMessages: (MastraMessageV1 & { _index?: number })[]) {\n // Sort messages by index or timestamp\n return threadMessages\n .map(msg => ({\n message: msg,\n // Use _index if available, otherwise timestamp, matching Upstash\n score: msg._index !== undefined ? msg._index : msg.createdAt.getTime(),\n }))\n .sort((a, b) => a.score - b.score)\n .map(item => ({\n id: item.message.id,\n score: item.score,\n }));\n }\n\n /**\n * Updates the sorted order for a given key. This operation is eventually consistent.\n * Note: Operations on the same orderKey are serialized using a queue to prevent\n * concurrent updates from conflicting with each other.\n */\n private async updateSortedMessages(\n orderKey: string,\n newEntries: Array<{ id: string; score: number }>,\n ): Promise<void> {\n // Get the current promise chain or create a new one\n const currentPromise = this.updateQueue.get(orderKey) || Promise.resolve();\n\n // Create the next promise in the chain\n const nextPromise = currentPromise.then(async () => {\n try {\n const currentOrder = await this.getSortedMessages(orderKey);\n\n // Create a map for faster lookups\n const orderMap = new Map(currentOrder.map(entry => [entry.id, entry]));\n\n // Update or add new entries\n for (const entry of newEntries) {\n orderMap.set(entry.id, entry);\n }\n\n // Convert back to array and sort\n const updatedOrder = Array.from(orderMap.values()).sort((a, b) => a.score - b.score);\n\n // Use putKV for consistent serialization across both APIs\n await this.operations.putKV({\n tableName: TABLE_MESSAGES,\n key: orderKey,\n value: JSON.stringify(updatedOrder),\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger?.error(`Error updating sorted order for key ${orderKey}:`, { message });\n throw error; // Let caller handle the error\n } finally {\n // Clean up the queue if this was the last operation\n if (this.updateQueue.get(orderKey) === nextPromise) {\n this.updateQueue.delete(orderKey);\n }\n }\n });\n\n // Update the queue with the new promise\n this.updateQueue.set(orderKey, nextPromise);\n\n // Wait for our turn and handle any errors\n return nextPromise;\n }\n\n private async getSortedMessages(orderKey: string): Promise<Array<{ id: string; score: number }>> {\n const raw = await this.operations.getKV(TABLE_MESSAGES, orderKey);\n if (!raw) return [];\n try {\n const arr = JSON.parse(typeof raw === 'string' ? raw : JSON.stringify(raw));\n return Array.isArray(arr) ? arr : [];\n } catch (e) {\n this.logger?.error(`Error parsing order data for key ${orderKey}:`, { e });\n return [];\n }\n }\n\n private async migrateMessage(messageId: string, fromThreadId: string, toThreadId: string): Promise<void> {\n try {\n // Get the message from the old thread\n const oldMessageKey = this.getMessageKey(fromThreadId, messageId);\n const message = await this.operations.getKV(TABLE_MESSAGES, oldMessageKey);\n if (!message) return;\n\n // Update the message's threadId\n const updatedMessage = {\n ...message,\n threadId: toThreadId,\n };\n\n // Save to new thread\n const newMessageKey = this.getMessageKey(toThreadId, messageId);\n await this.operations.putKV({ tableName: TABLE_MESSAGES, key: newMessageKey, value: updatedMessage });\n\n // Remove from old thread's sorted list\n const oldOrderKey = this.getThreadMessagesKey(fromThreadId);\n const oldEntries = await this.getSortedMessages(oldOrderKey);\n const filteredEntries = oldEntries.filter(entry => entry.id !== messageId);\n await this.updateSortedMessages(oldOrderKey, filteredEntries);\n\n // Add to new thread's sorted list\n const newOrderKey = this.getThreadMessagesKey(toThreadId);\n const newEntries = await this.getSortedMessages(newOrderKey);\n const newEntry = { id: messageId, score: Date.now() };\n newEntries.push(newEntry);\n await this.updateSortedMessages(newOrderKey, newEntries);\n\n // Delete from old thread\n await this.operations.deleteKV(TABLE_MESSAGES, oldMessageKey);\n } catch (error) {\n this.logger?.error(`Error migrating message ${messageId} from ${fromThreadId} to ${toThreadId}:`, error);\n throw error;\n }\n }\n\n async saveMessages(args: { messages: MastraMessageV1[]; format?: undefined | 'v1' }): Promise<MastraMessageV1[]>;\n async saveMessages(args: { messages: MastraMessageV2[]; format: 'v2' }): Promise<MastraMessageV2[]>;\n async saveMessages(\n args: { messages: MastraMessageV1[]; format?: undefined | 'v1' } | { messages: MastraMessageV2[]; format: 'v2' },\n ): Promise<MastraMessageV2[] | MastraMessageV1[]> {\n const { messages, format = 'v1' } = args;\n if (!Array.isArray(messages) || messages.length === 0) return [];\n\n try {\n // Validate message structure and ensure dates\n const validatedMessages = messages\n .map((message, index) => {\n const errors: string[] = [];\n if (!message.id) errors.push('id is required');\n if (!message.threadId) errors.push('threadId is required');\n if (!message.content) errors.push('content is required');\n if (!message.role) errors.push('role is required');\n if (!message.createdAt) errors.push('createdAt is required');\n if (message.resourceId === null || message.resourceId === undefined) errors.push('resourceId is required');\n\n if (errors.length > 0) {\n throw new Error(`Invalid message at index ${index}: ${errors.join(', ')}`);\n }\n\n return {\n ...message,\n createdAt: ensureDate(message.createdAt)!,\n type: message.type || 'v2',\n _index: index,\n };\n })\n .filter(m => !!m);\n\n // Check for existing messages and handle thread migration\n const messageMigrationTasks: Promise<void>[] = [];\n\n for (const message of validatedMessages) {\n // Check if this message already exists in a different thread\n const existingMessage = await this.findMessageInAnyThread(message.id);\n this.logger?.debug(\n `Checking message ${message.id}: existing=${existingMessage?.threadId}, new=${message.threadId}`,\n );\n if (existingMessage && existingMessage.threadId && existingMessage.threadId !== message.threadId) {\n // Message exists in a different thread, migrate it\n this.logger?.debug(`Migrating message ${message.id} from ${existingMessage.threadId} to ${message.threadId}`);\n messageMigrationTasks.push(this.migrateMessage(message.id, existingMessage.threadId, message.threadId!));\n }\n }\n\n // Wait for all migrations to complete\n await Promise.all(messageMigrationTasks);\n\n // Group messages by thread for batch processing\n const messagesByThread = validatedMessages.reduce((acc, message) => {\n if (message.threadId && !acc.has(message.threadId)) {\n acc.set(message.threadId, []);\n }\n if (message.threadId) {\n acc.get(message.threadId)!.push(message as MastraMessageV1 & { _index?: number });\n }\n return acc;\n }, new Map<string, (MastraMessageV1 & { _index?: number })[]>());\n\n // Process each thread's messages\n await Promise.all(\n Array.from(messagesByThread.entries()).map(async ([threadId, threadMessages]) => {\n try {\n // Verify thread exists\n const thread = await this.getThreadById({ threadId });\n if (!thread) {\n throw new Error(`Thread ${threadId} not found`);\n }\n\n // Save messages with serialized dates\n await Promise.all(\n threadMessages.map(async message => {\n const key = this.getMessageKey(threadId, message.id);\n // Strip _index and serialize dates before saving\n const { _index, ...cleanMessage } = message;\n const serializedMessage = {\n ...cleanMessage,\n createdAt: serializeDate(cleanMessage.createdAt),\n };\n this.logger?.debug(`Saving message ${message.id}`, {\n contentSummary: this.summarizeMessageContent(serializedMessage.content),\n });\n await this.operations.putKV({ tableName: TABLE_MESSAGES, key, value: serializedMessage });\n }),\n );\n\n // Update message order using _index or timestamps\n const orderKey = this.getThreadMessagesKey(threadId);\n const entries = await this.updateSorting(threadMessages);\n await this.updateSortedMessages(orderKey, entries);\n\n // Update thread's updatedAt timestamp\n const updatedThread = {\n ...thread,\n updatedAt: new Date(),\n };\n await this.operations.putKV({\n tableName: TABLE_THREADS,\n key: this.operations.getKey(TABLE_THREADS, { id: threadId }),\n value: updatedThread,\n });\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SAVE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n threadId,\n },\n },\n error,\n );\n }\n }),\n );\n\n // Remove _index from returned messages\n const prepared = validatedMessages.map(\n ({ _index, ...message }) =>\n ({ ...message, type: message.type !== 'v2' ? message.type : undefined }) as MastraMessageV1,\n );\n const list = new MessageList().add(prepared, 'memory');\n if (format === `v2`) return list.get.all.v2();\n return list.get.all.v1();\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SAVE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n private async getRank(orderKey: string, id: string): Promise<number | null> {\n const order = await this.getSortedMessages(orderKey);\n const index = order.findIndex(item => item.id === id);\n return index >= 0 ? index : null;\n }\n\n private async getRange(orderKey: string, start: number, end: number): Promise<string[]> {\n const order = await this.getSortedMessages(orderKey);\n const actualStart = start < 0 ? Math.max(0, order.length + start) : start;\n const actualEnd = end < 0 ? order.length + end : Math.min(end, order.length - 1);\n const sliced = order.slice(actualStart, actualEnd + 1);\n return sliced.map(item => item.id);\n }\n\n private async getLastN(orderKey: string, n: number): Promise<string[]> {\n // Reuse getRange with negative indexing\n return this.getRange(orderKey, -n, -1);\n }\n\n private async getIncludedMessagesWithContext(\n threadId: string,\n include: { id: string; threadId?: string; withPreviousMessages?: number; withNextMessages?: number }[],\n messageIds: Set<string>,\n ): Promise<void> {\n await Promise.all(\n include.map(async item => {\n // Use the item's threadId if provided, otherwise use the main threadId\n const targetThreadId = item.threadId || threadId;\n if (!targetThreadId) return;\n const threadMessagesKey = this.getThreadMessagesKey(targetThreadId);\n\n messageIds.add(item.id);\n if (!item.withPreviousMessages && !item.withNextMessages) return;\n\n const rank = await this.getRank(threadMessagesKey, item.id);\n if (rank === null) return;\n\n if (item.withPreviousMessages) {\n const prevIds = await this.getRange(\n threadMessagesKey,\n Math.max(0, rank - item.withPreviousMessages),\n rank - 1,\n );\n prevIds.forEach(id => messageIds.add(id));\n }\n\n if (item.withNextMessages) {\n const nextIds = await this.getRange(threadMessagesKey, rank + 1, rank + item.withNextMessages);\n nextIds.forEach(id => messageIds.add(id));\n }\n }),\n );\n }\n\n private async getRecentMessages(threadId: string, limit: number, messageIds: Set<string>): Promise<void> {\n if (!threadId.trim()) throw new Error('threadId must be a non-empty string');\n\n if (limit <= 0) return;\n\n try {\n const threadMessagesKey = this.getThreadMessagesKey(threadId);\n const latestIds = await this.getLastN(threadMessagesKey, limit);\n latestIds.forEach(id => messageIds.add(id));\n } catch {\n this.logger?.debug(`No message order found for thread ${threadId}, skipping latest messages`);\n }\n }\n\n private async fetchAndParseMessagesFromMultipleThreads(\n messageIds: string[],\n include?: { id: string; threadId?: string; withPreviousMessages?: number; withNextMessages?: number }[],\n targetThreadId?: string,\n ): Promise<(MastraMessageV1 & { _index?: number })[]> {\n // Create a map of messageId to threadId\n const messageIdToThreadId = new Map<string, string>();\n\n // If we have include information, use it to map messageIds to threadIds\n if (include) {\n for (const item of include) {\n if (item.threadId) {\n messageIdToThreadId.set(item.id, item.threadId);\n }\n }\n }\n\n const messages = await Promise.all(\n messageIds.map(async id => {\n try {\n // Try to get the threadId for this message\n let threadId = messageIdToThreadId.get(id);\n\n if (!threadId) {\n if (targetThreadId) {\n // If we have a target thread, only look in that thread\n threadId = targetThreadId;\n } else {\n // Search for the message in any thread\n const foundMessage = await this.findMessageInAnyThread(id);\n if (foundMessage) {\n threadId = foundMessage.threadId;\n }\n }\n }\n\n if (!threadId) return null;\n\n const key = this.getMessageKey(threadId, id);\n const data = await this.operations.getKV(TABLE_MESSAGES, key);\n if (!data) return null;\n const parsed = typeof data === 'string' ? JSON.parse(data) : data;\n this.logger?.debug(`Retrieved message ${id} from thread ${threadId}`, {\n contentSummary: this.summarizeMessageContent(parsed.content),\n });\n return parsed;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger?.error(`Error retrieving message ${id}:`, { message });\n return null;\n }\n }),\n );\n return messages.filter((msg): msg is MastraMessageV1 & { _index?: number } => msg !== null);\n }\n\n async getMessages(args: StorageGetMessagesArg & { format?: 'v1' }): Promise<MastraMessageV1[]>;\n async getMessages(args: StorageGetMessagesArg & { format: 'v2' }): Promise<MastraMessageV2[]>;\n async getMessages({\n threadId,\n resourceId,\n selectBy,\n format,\n }: StorageGetMessagesArg & { format?: 'v1' | 'v2' }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n console.info(`getMessages called with format: ${format}, threadId: ${threadId}`);\n\n // Default to v1 format if not specified\n const actualFormat = format || 'v1';\n console.info(`Using format: ${actualFormat}`);\n\n const limit = resolveMessageLimit({ last: selectBy?.last, defaultLimit: 40 });\n const messageIds = new Set<string>();\n if (limit === 0 && !selectBy?.include?.length) return [];\n\n try {\n if (!threadId.trim()) throw new Error('threadId must be a non-empty string');\n\n // Get included messages and recent messages in parallel\n await Promise.all([\n selectBy?.include?.length\n ? this.getIncludedMessagesWithContext(threadId, selectBy.include, messageIds)\n : Promise.resolve(),\n limit > 0 ? this.getRecentMessages(threadId, limit, messageIds) : Promise.resolve(),\n ]);\n\n // Fetch and parse all messages from their respective threads\n // Only use targetThreadId if we don't have include information (for cross-thread operations)\n const targetThreadId = selectBy?.include?.length ? undefined : threadId;\n const messages = await this.fetchAndParseMessagesFromMultipleThreads(\n Array.from(messageIds),\n selectBy?.include,\n targetThreadId,\n );\n if (!messages.length) return [];\n\n // Always sort messages by createdAt to ensure correct chronological ordering\n // This is critical when `include` parameter brings in messages from semantic recall\n // (messages from different save batches or threads must be interleaved by time, not storage order)\n messages.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());\n\n // Remove _index and ensure dates before returning, just like Upstash\n const prepared = messages.map(({ _index, ...message }) => ({\n ...message,\n type: message.type === (`v2` as `text`) ? undefined : message.type,\n createdAt: ensureDate(message.createdAt)!,\n }));\n // For v1 format, return messages directly without using MessageList (like Upstash)\n if (actualFormat === `v1`) {\n console.info(`Processing ${prepared.length} messages for v1 format - returning directly without MessageList`);\n // Return messages exactly as stored, without MessageList transformation\n return (prepared as MastraMessageV1[]).map(msg => ({\n ...msg,\n createdAt: new Date(msg.createdAt),\n }));\n }\n\n // For v2 format, use MessageList for proper conversion\n const list = new MessageList({ threadId, resourceId }).add(prepared as MastraMessageV1[], 'memory');\n return list.get.all.v2();\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Error retrieving messages for thread ${threadId}`,\n details: {\n threadId,\n resourceId: resourceId ?? '',\n },\n },\n error,\n );\n this.logger?.trackException(mastraError);\n this.logger?.error(mastraError.toString());\n return [];\n }\n }\n\n public async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format: 'v1';\n }): Promise<MastraMessageV1[]>;\n public async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format?: 'v2';\n }): Promise<MastraMessageV2[]>;\n public async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format?: 'v1' | 'v2';\n }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n if (messageIds.length === 0) return [];\n\n try {\n // Fetch and parse all messages from their respective threads\n const messages = (await Promise.all(messageIds.map(id => this.findMessageInAnyThread(id)))).filter(\n result => !!result,\n ) as (MastraMessageV1 & { _index: string })[];\n\n // Remove _index and ensure dates before returning, just like Upstash\n const prepared: MastraMessageV1[] = messages.map(({ _index, ...message }) => ({\n ...message,\n ...(message.type !== (`v2` as string) && { type: message.type }),\n createdAt: ensureDate(message.createdAt)!,\n }));\n // For v2 format, use MessageList for proper conversion\n const list = new MessageList().add(prepared, 'memory');\n if (format === `v1`) return list.get.all.v1();\n return list.get.all.v2();\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_MESSAGES_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Error retrieving messages by ID`,\n details: {\n messageIds: JSON.stringify(messageIds),\n },\n },\n error,\n );\n this.logger?.trackException(mastraError);\n this.logger?.error(mastraError.toString());\n return [];\n }\n }\n\n async getMessagesPaginated(\n args: StorageGetMessagesArg,\n ): Promise<PaginationInfo & { messages: MastraMessageV1[] | MastraMessageV2[] }> {\n const { threadId, resourceId, selectBy, format = 'v1' } = args;\n const { page = 0, perPage = 100 } = selectBy?.pagination || {};\n\n try {\n if (!threadId.trim()) throw new Error('threadId must be a non-empty string');\n\n // Get included messages separately (not subject to pagination)\n const includedMessages: (MastraMessageV1 | MastraMessageV2)[] = [];\n if (selectBy?.include?.length) {\n const includeOnlySelectBy = { ...selectBy, last: 0 }; // Only get included, no recent\n const included =\n format === 'v2'\n ? await this.getMessages({ threadId, selectBy: includeOnlySelectBy, format: 'v2' })\n : await this.getMessages({ threadId, selectBy: includeOnlySelectBy, format: 'v1' });\n includedMessages.push(...included);\n }\n\n // Get thread messages without include (for pagination)\n const threadOnlySelectBy = selectBy ? { ...selectBy, include: undefined } : undefined;\n const threadMessages =\n format === 'v2'\n ? await this.getMessages({ threadId, selectBy: threadOnlySelectBy, format: 'v2' })\n : await this.getMessages({ threadId, selectBy: threadOnlySelectBy, format: 'v1' });\n\n // Apply date filtering if specified\n let filteredMessages = threadMessages;\n if (selectBy?.pagination?.dateRange) {\n const { start: dateStart, end: dateEnd } = selectBy.pagination.dateRange;\n filteredMessages = threadMessages.filter(message => {\n const messageDate = new Date(message.createdAt);\n if (dateStart && messageDate < dateStart) return false;\n if (dateEnd && messageDate > dateEnd) return false;\n return true;\n }) as MastraMessageV1[] | MastraMessageV2[];\n }\n\n const total = filteredMessages.length;\n\n // Apply pagination to thread messages only\n const start = page * perPage;\n const end = start + perPage;\n const paginatedMessages = filteredMessages.slice(start, end);\n\n // Combine paginated + included, deduplicate by id\n const seenIds = new Set<string>();\n const combinedMessages: (MastraMessageV1 | MastraMessageV2)[] = [];\n\n for (const msg of paginatedMessages) {\n if (!seenIds.has(msg.id)) {\n combinedMessages.push(msg);\n seenIds.add(msg.id);\n }\n }\n\n for (const msg of includedMessages) {\n if (!seenIds.has(msg.id)) {\n combinedMessages.push(msg);\n seenIds.add(msg.id);\n }\n }\n\n // Sort combined messages by createdAt to ensure correct chronological ordering\n combinedMessages.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());\n\n return {\n page,\n perPage,\n total,\n hasMore: start + perPage < total,\n messages: combinedMessages as MastraMessageV1[] | MastraMessageV2[],\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_MESSAGES_PAGINATED_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: 'Failed to get messages with pagination',\n details: {\n threadId,\n resourceId: resourceId ?? '',\n },\n },\n error,\n );\n this.logger?.trackException?.(mastraError);\n this.logger?.error?.(mastraError.toString());\n return { messages: [], total: 0, page, perPage: perPage || 40, hasMore: false };\n }\n }\n\n async updateMessages(args: {\n messages: (Partial<Omit<MastraMessageV2, 'createdAt'>> & {\n id: string;\n threadId?: string;\n content?: {\n metadata?: MastraMessageContentV2['metadata'];\n content?: MastraMessageContentV2['content'];\n };\n })[];\n }): Promise<MastraMessageV2[]> {\n try {\n const { messages } = args;\n const updatedMessages: MastraMessageV2[] = [];\n\n for (const messageUpdate of messages) {\n const { id, content, ...otherFields } = messageUpdate;\n\n // Get the existing message by searching through all threads\n // This is a simplified approach - in a real implementation you'd want to store threadId with the message\n const prefix = this.operations.namespacePrefix ? `${this.operations.namespacePrefix}:` : '';\n const keyObjs = await this.operations.listKV(TABLE_MESSAGES, { prefix: `${prefix}${TABLE_MESSAGES}` });\n\n let existingMessage: MastraMessageV2 | null = null;\n let messageKey = '';\n\n for (const { name: key } of keyObjs) {\n const data = await this.operations.getKV(TABLE_MESSAGES, key);\n if (data && data.id === id) {\n existingMessage = data as MastraMessageV2;\n messageKey = key;\n break;\n }\n }\n\n if (!existingMessage) {\n // Message doesn't exist, skip it\n continue;\n }\n\n // Merge the updates\n const updatedMessage: MastraMessageV2 = {\n ...existingMessage,\n ...otherFields,\n id,\n };\n\n // Handle content updates\n if (content) {\n if (content.metadata !== undefined) {\n updatedMessage.content = {\n ...updatedMessage.content,\n metadata: {\n ...updatedMessage.content?.metadata,\n ...content.metadata,\n },\n };\n }\n if (content.content !== undefined) {\n updatedMessage.content = {\n ...updatedMessage.content,\n content: content.content,\n };\n }\n }\n\n // If the message is being moved to a different thread, we need to handle it specially\n if (\n 'threadId' in messageUpdate &&\n messageUpdate.threadId &&\n messageUpdate.threadId !== existingMessage.threadId\n ) {\n // Delete the message from the old thread\n await this.operations.deleteKV(TABLE_MESSAGES, messageKey);\n\n // Update the message's threadId to the new thread\n updatedMessage.threadId = messageUpdate.threadId;\n\n // Save the message to the new thread with a new key\n const newMessageKey = this.getMessageKey(messageUpdate.threadId, id);\n await this.operations.putKV({\n tableName: TABLE_MESSAGES,\n key: newMessageKey,\n value: updatedMessage,\n });\n\n // Update message order in both threads\n if (existingMessage.threadId) {\n // Remove from source thread's order\n const sourceOrderKey = this.getThreadMessagesKey(existingMessage.threadId);\n const sourceEntries = await this.getSortedMessages(sourceOrderKey);\n const filteredEntries = sourceEntries.filter(entry => entry.id !== id);\n await this.updateSortedMessages(sourceOrderKey, filteredEntries);\n }\n\n // Add to destination thread's order\n const destOrderKey = this.getThreadMessagesKey(messageUpdate.threadId);\n const destEntries = await this.getSortedMessages(destOrderKey);\n const newEntry = { id: id, score: Date.now() };\n destEntries.push(newEntry);\n await this.updateSortedMessages(destOrderKey, destEntries);\n } else {\n // Save the updated message in place\n await this.operations.putKV({\n tableName: TABLE_MESSAGES,\n key: messageKey,\n value: updatedMessage,\n });\n }\n\n // Update thread timestamps for both source and destination threads\n const threadsToUpdate = new Set<string>();\n\n // Always update the current thread if threadId is available\n if (updatedMessage.threadId) {\n threadsToUpdate.add(updatedMessage.threadId);\n }\n\n // If threadId is being changed, also update the source thread\n if (\n 'threadId' in messageUpdate &&\n messageUpdate.threadId &&\n messageUpdate.threadId !== existingMessage.threadId\n ) {\n // Add the source thread (where the message was originally)\n if (existingMessage.threadId) {\n threadsToUpdate.add(existingMessage.threadId);\n }\n // Add the destination thread (where the message is being moved to)\n threadsToUpdate.add(messageUpdate.threadId);\n }\n\n // Update all affected threads\n for (const threadId of threadsToUpdate) {\n const thread = await this.getThreadById({ threadId });\n if (thread) {\n const updatedThread = {\n ...thread,\n updatedAt: new Date(),\n };\n await this.operations.putKV({\n tableName: TABLE_THREADS,\n key: this.operations.getKey(TABLE_THREADS, { id: threadId }),\n value: updatedThread,\n });\n }\n }\n\n updatedMessages.push(updatedMessage);\n }\n\n return updatedMessages;\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_UPDATE_MESSAGES_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: 'Failed to update messages',\n },\n error,\n );\n }\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n try {\n const data = await this.operations.getKV(TABLE_RESOURCES, resourceId);\n if (!data) return null;\n\n const resource = typeof data === 'string' ? JSON.parse(data) : data;\n return {\n ...resource,\n createdAt: ensureDate(resource.createdAt)!,\n updatedAt: ensureDate(resource.updatedAt)!,\n metadata: this.ensureMetadata(resource.metadata),\n };\n } catch (error: any) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_RESOURCE_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n resourceId,\n },\n },\n error,\n );\n this.logger?.trackException(mastraError);\n this.logger?.error(mastraError.toString());\n return null;\n }\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n try {\n const resourceToSave = {\n ...resource,\n metadata: resource.metadata ? JSON.stringify(resource.metadata) : null,\n };\n\n await this.operations.putKV({\n tableName: TABLE_RESOURCES,\n key: resource.id,\n value: resourceToSave,\n });\n\n return resource;\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SAVE_RESOURCE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n resourceId: resource.id,\n },\n },\n error,\n );\n }\n }\n\n async updateResource({\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n const existingResource = await this.getResourceById({ resourceId });\n\n if (!existingResource) {\n // Create new resource if it doesn't exist\n const newResource: StorageResourceType = {\n id: resourceId,\n workingMemory,\n metadata: metadata || {},\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n return this.saveResource({ resource: newResource });\n }\n\n const updatedAt = new Date();\n const updatedResource = {\n ...existingResource,\n workingMemory: workingMemory !== undefined ? workingMemory : existingResource.workingMemory,\n metadata: {\n ...existingResource.metadata,\n ...metadata,\n },\n updatedAt,\n };\n\n return this.saveResource({ resource: updatedResource });\n }\n}\n","import type { KVNamespace } from '@cloudflare/workers-types';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport {\n ensureDate,\n serializeDate,\n StoreOperations,\n TABLE_EVALS,\n TABLE_MESSAGES,\n TABLE_SCORERS,\n TABLE_THREADS,\n TABLE_TRACES,\n TABLE_WORKFLOW_SNAPSHOT,\n} from '@mastra/core/storage';\nimport type { StorageColumn, TABLE_NAMES } from '@mastra/core/storage';\nimport type Cloudflare from 'cloudflare';\nimport type { ListOptions, RecordTypes } from '../../types';\n\nexport class StoreOperationsCloudflare extends StoreOperations {\n private bindings?: Record<TABLE_NAMES, KVNamespace>;\n client?: Cloudflare;\n accountId?: string;\n namespacePrefix: string;\n constructor({\n namespacePrefix,\n bindings,\n client,\n accountId,\n }: {\n bindings?: Record<TABLE_NAMES, KVNamespace>;\n namespacePrefix: string;\n client?: Cloudflare;\n accountId?: string;\n }) {\n super();\n this.bindings = bindings;\n this.namespacePrefix = namespacePrefix;\n this.client = client;\n this.accountId = accountId;\n }\n\n async hasColumn() {\n return true;\n }\n\n async alterTable(_args: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n // Nothing to do here, Cloudflare KV is schemaless\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n try {\n const keys = await this.listKV(tableName);\n if (keys.length > 0) {\n await Promise.all(keys.map(keyObj => this.deleteKV(tableName, keyObj.name)));\n }\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_CLEAR_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n\n throw error;\n }\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n try {\n const keys = await this.listKV(tableName);\n if (keys.length > 0) {\n await Promise.all(keys.map(keyObj => this.deleteKV(tableName, keyObj.name)));\n }\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_DROP_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n\n throw error;\n }\n }\n\n private getBinding(tableName: TABLE_NAMES) {\n if (!this.bindings) {\n throw new Error(`Cannot use Workers API binding for ${tableName}: Store initialized with REST API configuration`);\n }\n const binding = this.bindings[tableName];\n if (!binding) throw new Error(`No binding found for namespace ${tableName}`);\n return binding;\n }\n\n getKey<T extends TABLE_NAMES>(tableName: T, record: Record<string, string>): string {\n // Add namespace prefix if configured\n const prefix = this.namespacePrefix ? `${this.namespacePrefix}:` : '';\n switch (tableName) {\n case TABLE_THREADS:\n if (!record.id) throw new Error('Thread ID is required');\n return `${prefix}${tableName}:${record.id}`;\n case TABLE_MESSAGES:\n if (!record.threadId || !record.id) throw new Error('Thread ID and Message ID are required');\n return `${prefix}${tableName}:${record.threadId}:${record.id}`;\n case TABLE_WORKFLOW_SNAPSHOT:\n if (!record.workflow_name || !record.run_id) {\n throw new Error('Workflow name, and run ID are required');\n }\n let key = `${prefix}${tableName}:${record.workflow_name}:${record.run_id}`;\n if (record.resourceId) {\n key = `${key}:${record.resourceId}`;\n }\n return key;\n case TABLE_TRACES:\n if (!record.id) throw new Error('Trace ID is required');\n return `${prefix}${tableName}:${record.id}`;\n case TABLE_EVALS:\n const evalId = record.id || record.run_id;\n if (!evalId) throw new Error('Eval ID or run_id is required');\n return `${prefix}${tableName}:${evalId}`;\n case TABLE_SCORERS:\n if (!record.id) throw new Error('Score ID is required');\n return `${prefix}${tableName}:${record.id}`;\n default:\n throw new Error(`Unsupported table: ${tableName}`);\n }\n }\n\n private getSchemaKey(tableName: TABLE_NAMES): string {\n // Add namespace prefix if configured\n const prefix = this.namespacePrefix ? `${this.namespacePrefix}:` : '';\n return `${prefix}schema:${tableName}`;\n }\n\n /**\n * Helper to safely parse data from KV storage\n */\n private safeParse(text: string | null): any {\n if (!text) return null;\n try {\n const data = JSON.parse(text);\n // If we got an object with a value property that's a string, try to parse that too\n if (data && typeof data === 'object' && 'value' in data) {\n if (typeof data.value === 'string') {\n try {\n return JSON.parse(data.value);\n } catch {\n // If value is a string but not JSON, return as is\n return data.value;\n }\n }\n return null;\n }\n return data;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger.error('Failed to parse text:', { message, text });\n return null;\n }\n }\n\n private async createNamespaceById(title: string) {\n if (this.bindings) {\n // For Workers API, namespaces are created at deploy time\n // Return a mock response matching REST API shape\n return {\n id: title, // Use title as ID since that's what we need\n title: title,\n supports_url_encoding: true,\n };\n }\n return await this.client!.kv.namespaces.create({\n account_id: this.accountId!,\n title,\n });\n }\n\n private async createNamespace(namespaceName: string): Promise<string> {\n try {\n const response = await this.createNamespaceById(namespaceName);\n return response.id;\n } catch (error: any) {\n // Check if the error is because it already exists\n if (error.message && error.message.includes('already exists')) {\n // Try to get it again since we know it exists\n const namespaces = await this.listNamespaces();\n const namespace = namespaces.result.find(ns => ns.title === namespaceName);\n if (namespace) return namespace.id;\n }\n this.logger.error('Error creating namespace:', error);\n throw new Error(`Failed to create namespace ${namespaceName}: ${error.message}`);\n }\n }\n\n private async listNamespaces(): Promise<{\n result: Array<{ id: string; title: string; supports_url_encoding?: boolean }>;\n }> {\n if (this.bindings) {\n return {\n result: Object.keys(this.bindings).map(name => ({\n id: name,\n title: name,\n supports_url_encoding: true,\n })),\n };\n }\n\n let allNamespaces: Array<Cloudflare.KV.Namespace> = [];\n let currentPage = 1;\n const perPage = 50; // Using 50, max is 100 for namespaces.list\n let morePagesExist = true;\n\n while (morePagesExist) {\n const response = await this.client!.kv.namespaces.list({\n account_id: this.accountId!,\n page: currentPage,\n per_page: perPage,\n });\n\n if (response.result) {\n allNamespaces = allNamespaces.concat(response.result);\n }\n\n morePagesExist = response.result ? response.result.length === perPage : false;\n\n if (morePagesExist) {\n currentPage++;\n }\n }\n return { result: allNamespaces };\n }\n\n private async getNamespaceIdByName(namespaceName: string): Promise<string | null> {\n try {\n const response = await this.listNamespaces();\n const namespace = response.result.find(ns => ns.title === namespaceName);\n return namespace ? namespace.id : null;\n } catch (error: any) {\n this.logger.error(`Failed to get namespace ID for ${namespaceName}:`, error);\n return null;\n }\n }\n\n private async getOrCreateNamespaceId(namespaceName: string): Promise<string> {\n let namespaceId = await this.getNamespaceIdByName(namespaceName);\n if (!namespaceId) {\n namespaceId = await this.createNamespace(namespaceName);\n }\n return namespaceId;\n }\n\n private async getNamespaceId(tableName: TABLE_NAMES): Promise<string> {\n const prefix = this.namespacePrefix ? `${this.namespacePrefix}_` : '';\n\n try {\n return await this.getOrCreateNamespaceId(`${prefix}${tableName}`);\n } catch (error: any) {\n this.logger.error('Error fetching namespace ID:', error);\n throw new Error(`Failed to fetch namespace ID for table ${tableName}: ${error.message}`);\n }\n }\n\n private async getNamespaceValue(tableName: TABLE_NAMES, key: string) {\n try {\n if (this.bindings) {\n const binding = this.getBinding(tableName);\n const result = await binding.getWithMetadata(key, 'text');\n if (!result) return null;\n return JSON.stringify(result);\n } else {\n const namespaceId = await this.getNamespaceId(tableName);\n const response = await this.client!.kv.namespaces.values.get(namespaceId, key, {\n account_id: this.accountId!,\n });\n return await response.text();\n }\n } catch (error: any) {\n if (error.message && error.message.includes('key not found')) {\n return null;\n }\n const message = error instanceof Error ? error.message : String(error);\n this.logger.error(`Failed to get value for ${tableName} ${key}:`, { message });\n throw error;\n }\n }\n\n async getKV(tableName: TABLE_NAMES, key: string): Promise<any> {\n try {\n const text = await this.getNamespaceValue(tableName, key);\n return this.safeParse(text);\n } catch (error: any) {\n this.logger.error(`Failed to get KV value for ${tableName}:${key}:`, error);\n throw new Error(`Failed to get KV value: ${error.message}`);\n }\n }\n\n private async getTableSchema(tableName: TABLE_NAMES): Promise<Record<string, StorageColumn> | null> {\n try {\n const schemaKey = this.getSchemaKey(tableName);\n return await this.getKV(tableName, schemaKey);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger.error(`Failed to get schema for ${tableName}:`, { message });\n return null;\n }\n }\n\n private validateColumnValue(value: unknown, column: StorageColumn): boolean {\n if (value === undefined || value === null) {\n return column.nullable ?? false;\n }\n\n switch (column.type) {\n case 'text':\n case 'uuid':\n return typeof value === 'string';\n case 'integer':\n case 'bigint':\n return typeof value === 'number';\n case 'timestamp':\n return value instanceof Date || (typeof value === 'string' && !isNaN(Date.parse(value)));\n case 'jsonb':\n if (typeof value !== 'object') return false;\n try {\n JSON.stringify(value);\n return true;\n } catch {\n return false;\n }\n default:\n return false;\n }\n }\n\n private async validateAgainstSchema(\n record: Record<string, unknown>,\n schema: Record<string, StorageColumn>,\n ): Promise<void> {\n try {\n if (!schema || typeof schema !== 'object' || schema.value === null) {\n throw new Error('Invalid schema format');\n }\n for (const [columnName, column] of Object.entries(schema)) {\n const value = record[columnName];\n\n // Check primary key presence\n if (column.primaryKey && (value === undefined || value === null)) {\n throw new Error(`Missing primary key value for column ${columnName}`);\n }\n\n if (!this.validateColumnValue(value, column)) {\n const valueType = value === null ? 'null' : typeof value;\n throw new Error(`Invalid value for column ${columnName}: expected ${column.type}, got ${valueType}`);\n }\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger.error(`Error validating record against schema:`, { message, record, schema });\n throw error;\n }\n }\n\n private async validateRecord<T extends TABLE_NAMES>(record: unknown, tableName: T): Promise<void> {\n try {\n if (!record || typeof record !== 'object') {\n throw new Error('Record must be an object');\n }\n\n const recordTyped = record as Record<string, unknown>;\n const schema = await this.getTableSchema(tableName);\n\n // If schema exists, validate against it\n if (schema) {\n await this.validateAgainstSchema(recordTyped, schema);\n return;\n }\n\n // Fallback validation if no schema found\n switch (tableName) {\n case TABLE_THREADS:\n if (!('id' in recordTyped) || !('resourceId' in recordTyped) || !('title' in recordTyped)) {\n throw new Error('Thread record missing required fields');\n }\n break;\n case TABLE_MESSAGES:\n if (\n !('id' in recordTyped) ||\n !('threadId' in recordTyped) ||\n !('content' in recordTyped) ||\n !('role' in recordTyped)\n ) {\n throw new Error('Message record missing required fields');\n }\n break;\n case TABLE_WORKFLOW_SNAPSHOT:\n if (!('workflow_name' in recordTyped) || !('run_id' in recordTyped)) {\n throw new Error('Workflow record missing required fields');\n }\n break;\n case TABLE_TRACES:\n if (!('id' in recordTyped)) {\n throw new Error('Trace record missing required fields');\n }\n break;\n case TABLE_EVALS:\n if (!('agent_name' in recordTyped) || !('run_id' in recordTyped)) {\n throw new Error('Eval record missing required fields');\n }\n break;\n case TABLE_SCORERS:\n if (!('id' in recordTyped) || !('scorerId' in recordTyped)) {\n throw new Error('Score record missing required fields');\n }\n break;\n default:\n throw new Error(`Unknown table type: ${tableName}`);\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger.error(`Failed to validate record for ${tableName}:`, { message, record });\n throw error;\n }\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n try {\n const key = this.getKey(tableName, record);\n\n // Process dates and metadata\n const processedRecord = {\n ...record,\n createdAt: record.createdAt ? serializeDate(record.createdAt) : undefined,\n updatedAt: record.updatedAt ? serializeDate(record.updatedAt) : undefined,\n metadata: record.metadata ? JSON.stringify(record.metadata) : '',\n } as RecordTypes[TABLE_NAMES];\n\n // Validate record type\n await this.validateRecord(processedRecord, tableName);\n await this.putKV({ tableName, key, value: processedRecord });\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n }\n }\n\n private ensureMetadata(metadata: Record<string, unknown> | string | undefined): Record<string, unknown> | undefined {\n if (!metadata) return {};\n return typeof metadata === 'string' ? JSON.parse(metadata) : metadata;\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, string> }): Promise<R | null> {\n try {\n // Generate key using simplified approach\n const key = this.getKey(tableName, keys as Partial<RecordTypes[typeof tableName]>);\n\n // Get data from KV store\n const data = await this.getKV(tableName, key);\n if (!data) return null;\n\n // Handle dates and metadata\n const processed = {\n ...data,\n createdAt: ensureDate(data.createdAt),\n updatedAt: ensureDate(data.updatedAt),\n metadata: this.ensureMetadata(data.metadata),\n };\n\n return processed as R;\n } catch (error: any) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_LOAD_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n this.logger?.trackException(mastraError);\n this.logger?.error(mastraError.toString());\n return null;\n }\n }\n\n async batchInsert<T extends TABLE_NAMES>(input: { tableName: T; records: Partial<RecordTypes[T]>[] }): Promise<void> {\n if (!input.records || input.records.length === 0) return;\n\n try {\n await Promise.all(\n input.records.map(async record => {\n // Generate key using simplified approach\n const key = this.getKey(input.tableName, record as Record<string, string>);\n\n // Process dates and metadata\n const processedRecord = {\n ...record,\n createdAt: record.createdAt ? serializeDate(record.createdAt as Date) : undefined,\n updatedAt: record.updatedAt ? serializeDate(record.updatedAt as Date) : undefined,\n metadata: record.metadata ? JSON.stringify(record.metadata) : undefined,\n } as RecordTypes[T];\n\n await this.putKV({ tableName: input.tableName, key, value: processedRecord });\n }),\n );\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_BATCH_INSERT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Error in batch insert for table ${input.tableName}`,\n details: {\n tableName: input.tableName,\n },\n },\n error,\n );\n }\n }\n\n /**\n * Helper to safely serialize data for KV storage\n */\n private safeSerialize(data: any): string {\n return typeof data === 'string' ? data : JSON.stringify(data);\n }\n\n private async putNamespaceValue({\n tableName,\n key,\n value,\n metadata,\n }: {\n tableName: TABLE_NAMES;\n key: string;\n value: string;\n metadata?: any;\n }) {\n try {\n // Ensure consistent serialization\n const serializedValue = this.safeSerialize(value);\n const serializedMetadata = metadata ? this.safeSerialize(metadata) : '';\n\n if (this.bindings) {\n const binding = this.getBinding(tableName);\n await binding.put(key, serializedValue, { metadata: serializedMetadata });\n } else {\n const namespaceId = await this.getNamespaceId(tableName);\n await this.client!.kv.namespaces.values.update(namespaceId, key, {\n account_id: this.accountId!,\n value: serializedValue,\n metadata: serializedMetadata,\n });\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger.error(`Failed to put value for ${tableName} ${key}:`, { message });\n throw error;\n }\n }\n\n async putKV({\n tableName,\n key,\n value,\n metadata,\n }: {\n tableName: TABLE_NAMES;\n key: string;\n value: any;\n metadata?: any;\n }): Promise<void> {\n try {\n await this.putNamespaceValue({ tableName, key, value, metadata });\n } catch (error: any) {\n this.logger.error(`Failed to put KV value for ${tableName}:${key}:`, error);\n throw new Error(`Failed to put KV value: ${error.message}`);\n }\n }\n\n async createTable({\n tableName,\n schema,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n }): Promise<void> {\n try {\n const schemaKey = this.getSchemaKey(tableName);\n const metadata = {\n type: 'table_schema',\n tableName,\n createdAt: new Date().toISOString(),\n };\n await this.putKV({ tableName, key: schemaKey, value: schema, metadata });\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_CREATE_TABLE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n\n throw error;\n }\n }\n\n async listNamespaceKeys(tableName: TABLE_NAMES, options?: ListOptions) {\n try {\n if (this.bindings) {\n const binding = this.getBinding(tableName);\n const response = await binding.list({\n limit: options?.limit || 1000,\n prefix: options?.prefix,\n });\n\n // Convert Workers API response to match REST API format\n return response.keys;\n } else {\n const namespaceId = await this.getNamespaceId(tableName);\n // Use REST API\n const response = await this.client!.kv.namespaces.keys.list(namespaceId, {\n account_id: this.accountId!,\n limit: options?.limit || 1000,\n prefix: options?.prefix,\n });\n return response.result;\n }\n } catch (error: any) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_LIST_NAMESPACE_KEYS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n tableName,\n },\n },\n error,\n );\n\n throw error;\n }\n }\n\n private async deleteNamespaceValue(tableName: TABLE_NAMES, key: string) {\n if (this.bindings) {\n const binding = this.getBinding(tableName);\n await binding.delete(key);\n } else {\n const namespaceId = await this.getNamespaceId(tableName);\n await this.client!.kv.namespaces.values.delete(namespaceId, key, {\n account_id: this.accountId!,\n });\n }\n }\n\n async deleteKV(tableName: TABLE_NAMES, key: string): Promise<void> {\n try {\n await this.deleteNamespaceValue(tableName, key);\n } catch (error: any) {\n this.logger.error(`Failed to delete KV value for ${tableName}:${key}:`, error);\n throw new Error(`Failed to delete KV value: ${error.message}`);\n }\n }\n\n async listKV(tableName: TABLE_NAMES, options?: ListOptions): Promise<Array<{ name: string }>> {\n try {\n return await this.listNamespaceKeys(tableName, options);\n } catch (error: any) {\n this.logger.error(`Failed to list KV for ${tableName}:`, error);\n throw new Error(`Failed to list KV: ${error.message}`);\n }\n }\n}\n","import { ErrorDomain, ErrorCategory, MastraError } from '@mastra/core/error';\nimport { saveScorePayloadSchema } from '@mastra/core/scores';\nimport type { ScoreRowData, ScoringSource, ValidatedSaveScorePayload } from '@mastra/core/scores';\nimport { SCORERS_SCHEMA, ScoresStorage, TABLE_SCORERS, safelyParseJSON } from '@mastra/core/storage';\nimport type { StoragePagination, PaginationInfo } from '@mastra/core/storage';\nimport type { StoreOperationsCloudflare } from '../operations';\n\nfunction transformScoreRow(row: Record<string, any>): ScoreRowData {\n const result: Record<string, any> = {};\n for (const [key, columnSchema] of Object.entries(SCORERS_SCHEMA)) {\n const value = row[key];\n if (value == null) {\n continue;\n }\n\n if (columnSchema.type === 'jsonb') {\n result[key] = safelyParseJSON(value);\n } else if (columnSchema.type === 'timestamp') {\n result[key] = new Date(value);\n } else {\n result[key] = value;\n }\n }\n return result as ScoreRowData;\n}\n\nexport class ScoresStorageCloudflare extends ScoresStorage {\n private operations: StoreOperationsCloudflare;\n\n constructor({ operations }: { operations: StoreOperationsCloudflare }) {\n super();\n this.operations = operations;\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n try {\n const score = await this.operations.getKV(TABLE_SCORERS, id);\n if (!score) {\n return null;\n }\n return transformScoreRow(score);\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SCORES_GET_SCORE_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to get score by id: ${id}`,\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error(mastraError.toString());\n return null;\n }\n }\n\n async saveScore(score: Omit<ScoreRowData, 'createdAt' | 'updatedAt'>): Promise<{ score: ScoreRowData }> {\n let parsedScore: ValidatedSaveScorePayload;\n try {\n parsedScore = saveScorePayloadSchema.parse(score);\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SAVE_SCORE_FAILED_INVALID_SCORE_PAYLOAD',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { scoreId: score.id },\n },\n error,\n );\n }\n\n try {\n const id = crypto.randomUUID();\n\n // Serialize all object values to JSON strings\n const serializedRecord: Record<string, any> = {};\n for (const [key, value] of Object.entries(parsedScore)) {\n if (value !== null && value !== undefined) {\n if (typeof value === 'object') {\n serializedRecord[key] = JSON.stringify(value);\n } else {\n serializedRecord[key] = value;\n }\n } else {\n serializedRecord[key] = null;\n }\n }\n\n serializedRecord.id = id;\n serializedRecord.createdAt = new Date().toISOString();\n serializedRecord.updatedAt = new Date().toISOString();\n\n await this.operations.putKV({\n tableName: TABLE_SCORERS,\n key: id,\n value: serializedRecord,\n });\n\n const scoreFromDb = await this.getScoreById({ id: score.id });\n return { score: scoreFromDb! };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SCORES_SAVE_SCORE_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to save score: ${score.id}`,\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error(mastraError.toString());\n throw mastraError;\n }\n }\n\n async getScoresByScorerId({\n scorerId,\n entityId,\n entityType,\n source,\n pagination,\n }: {\n scorerId: string;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const keys = await this.operations.listKV(TABLE_SCORERS);\n const scores: ScoreRowData[] = [];\n\n for (const { name: key } of keys) {\n const score = await this.operations.getKV(TABLE_SCORERS, key);\n\n if (entityId && score.entityId !== entityId) {\n continue;\n }\n if (entityType && score.entityType !== entityType) {\n continue;\n }\n if (source && score.source !== source) {\n continue;\n }\n\n if (score && score.scorerId === scorerId) {\n scores.push(transformScoreRow(score));\n }\n }\n\n // Sort by createdAt desc\n scores.sort((a, b) => {\n const dateA = new Date(a.createdAt || 0).getTime();\n const dateB = new Date(b.createdAt || 0).getTime();\n return dateB - dateA;\n });\n\n const total = scores.length;\n const start = pagination.page * pagination.perPage;\n const end = start + pagination.perPage;\n const pagedScores = scores.slice(start, end);\n\n return {\n pagination: {\n total,\n page: pagination.page,\n perPage: pagination.perPage,\n hasMore: end < total,\n },\n scores: pagedScores,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SCORES_GET_SCORES_BY_SCORER_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to get scores by scorer id: ${scorerId}`,\n },\n error,\n );\n this.logger?.trackException(mastraError);\n this.logger?.error(mastraError.toString());\n return { pagination: { total: 0, page: 0, perPage: 100, hasMore: false }, scores: [] };\n }\n }\n\n async getScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const keys = await this.operations.listKV(TABLE_SCORERS);\n const scores: ScoreRowData[] = [];\n\n for (const { name: key } of keys) {\n const score = await this.operations.getKV(TABLE_SCORERS, key);\n if (score && score.runId === runId) {\n scores.push(transformScoreRow(score));\n }\n }\n\n // Sort by createdAt desc\n scores.sort((a, b) => {\n const dateA = new Date(a.createdAt || 0).getTime();\n const dateB = new Date(b.createdAt || 0).getTime();\n return dateB - dateA;\n });\n\n const total = scores.length;\n const start = pagination.page * pagination.perPage;\n const end = start + pagination.perPage;\n const pagedScores = scores.slice(start, end);\n\n return {\n pagination: {\n total,\n page: pagination.page,\n perPage: pagination.perPage,\n hasMore: end < total,\n },\n scores: pagedScores,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SCORES_GET_SCORES_BY_RUN_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to get scores by run id: ${runId}`,\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error(mastraError.toString());\n return { pagination: { total: 0, page: 0, perPage: 100, hasMore: false }, scores: [] };\n }\n }\n\n async getScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: string;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const keys = await this.operations.listKV(TABLE_SCORERS);\n const scores: ScoreRowData[] = [];\n\n for (const { name: key } of keys) {\n const score = await this.operations.getKV(TABLE_SCORERS, key);\n if (score && score.entityId === entityId && score.entityType === entityType) {\n scores.push(transformScoreRow(score));\n }\n }\n\n // Sort by createdAt desc\n scores.sort((a, b) => {\n const dateA = new Date(a.createdAt || 0).getTime();\n const dateB = new Date(b.createdAt || 0).getTime();\n return dateB - dateA;\n });\n\n const total = scores.length;\n const start = pagination.page * pagination.perPage;\n const end = start + pagination.perPage;\n const pagedScores = scores.slice(start, end);\n\n return {\n pagination: {\n total,\n page: pagination.page,\n perPage: pagination.perPage,\n hasMore: end < total,\n },\n scores: pagedScores,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SCORES_GET_SCORES_BY_ENTITY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to get scores by entity id: ${entityId}, type: ${entityType}`,\n },\n error,\n );\n this.logger.trackException(mastraError);\n this.logger.error(mastraError.toString());\n return { pagination: { total: 0, page: 0, perPage: 100, hasMore: false }, scores: [] };\n }\n }\n\n async getScoresBySpan({\n traceId,\n spanId,\n pagination,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n try {\n const keys = await this.operations.listKV(TABLE_SCORERS);\n const scores: ScoreRowData[] = [];\n\n for (const { name: key } of keys) {\n const score = await this.operations.getKV(TABLE_SCORERS, key);\n if (score && score.traceId === traceId && score.spanId === spanId) {\n scores.push(transformScoreRow(score));\n }\n }\n\n // Sort by createdAt desc\n scores.sort((a, b) => {\n const dateA = new Date(a.createdAt || 0).getTime();\n const dateB = new Date(b.createdAt || 0).getTime();\n return dateB - dateA;\n });\n\n const total = scores.length;\n const start = pagination.page * pagination.perPage;\n const end = start + pagination.perPage;\n const pagedScores = scores.slice(start, end);\n\n return {\n pagination: {\n total,\n page: pagination.page,\n perPage: pagination.perPage,\n hasMore: end < total,\n },\n scores: pagedScores,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_SCORES_GET_SCORES_BY_SPAN_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to get scores by span: traceId=${traceId}, spanId=${spanId}`,\n },\n error,\n );\n }\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { TABLE_TRACES, TracesStorage } from '@mastra/core/storage';\nimport type { StorageGetTracesArg, StorageGetTracesPaginatedArg, PaginationInfo } from '@mastra/core/storage';\nimport type { Trace } from '@mastra/core/telemetry';\nimport type { StoreOperationsCloudflare } from '../operations';\n\nexport class TracesStorageCloudflare extends TracesStorage {\n private operations: StoreOperationsCloudflare;\n\n constructor({ operations }: { operations: StoreOperationsCloudflare }) {\n super();\n this.operations = operations;\n }\n\n async getTraces(args: StorageGetTracesArg): Promise<Trace[]> {\n // Convert the old interface to the new paginated interface\n const paginatedArgs: StorageGetTracesPaginatedArg = {\n name: args.name,\n scope: args.scope,\n page: args.page,\n perPage: args.perPage,\n attributes: args.attributes,\n filters: args.filters,\n dateRange:\n args.fromDate || args.toDate\n ? {\n start: args.fromDate,\n end: args.toDate,\n }\n : undefined,\n };\n\n try {\n const result = await this.getTracesPaginated(paginatedArgs);\n return result.traces;\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_TRACES_ERROR',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Failed to retrieve traces: ${error instanceof Error ? error.message : String(error)}`,\n details: {\n name: args.name ?? '',\n scope: args.scope ?? '',\n },\n },\n error,\n );\n }\n }\n\n async getTracesPaginated(args: StorageGetTracesPaginatedArg): Promise<PaginationInfo & { traces: Trace[] }> {\n try {\n const { name, scope, attributes, filters, page = 0, perPage = 100, dateRange } = args;\n\n // List all keys in the traces table\n const prefix = this.operations.namespacePrefix ? `${this.operations.namespacePrefix}:` : '';\n const keyObjs = await this.operations.listKV(TABLE_TRACES, { prefix: `${prefix}${TABLE_TRACES}` });\n\n const traces: Trace[] = [];\n\n for (const { name: key } of keyObjs) {\n try {\n const data = await this.operations.getKV(TABLE_TRACES, key);\n if (!data) continue;\n\n // Filter by name\n if (name && data.name !== name) continue;\n\n // Filter by scope\n if (scope && data.scope !== scope) continue;\n\n // Filter by attributes\n if (attributes) {\n const dataAttributes = data.attributes || {};\n let shouldSkip = false;\n for (const [key, value] of Object.entries(attributes)) {\n if (dataAttributes[key] !== value) {\n shouldSkip = true;\n break;\n }\n }\n if (shouldSkip) continue;\n }\n\n // Filter by date range\n if (dateRange?.start || dateRange?.end) {\n const traceDate = new Date(data.createdAt || 0);\n if (dateRange.start && traceDate < dateRange.start) continue;\n if (dateRange.end && traceDate > dateRange.end) continue;\n }\n\n // Filter by custom filters\n if (filters) {\n let shouldSkip = false;\n for (const [key, value] of Object.entries(filters)) {\n if (data[key] !== value) {\n shouldSkip = true;\n break;\n }\n }\n if (shouldSkip) continue;\n }\n\n traces.push(data);\n } catch (err) {\n this.logger.error('Failed to parse trace:', { key, error: err });\n }\n }\n\n // Sort by timestamp descending\n traces.sort((a, b) => {\n const aTime = new Date(a.createdAt || 0).getTime();\n const bTime = new Date(b.createdAt || 0).getTime();\n return bTime - aTime;\n });\n\n // Apply pagination\n const total = traces.length;\n const start = page * perPage;\n const end = start + perPage;\n const pagedTraces = traces.slice(start, end);\n\n return {\n traces: pagedTraces,\n total,\n page,\n perPage,\n hasMore: end < total,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_TRACES_PAGINATED_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: 'Error getting traces with pagination',\n },\n error,\n );\n this.logger.trackException?.(mastraError);\n this.logger.error(mastraError.toString());\n return { traces: [], total: 0, page: 0, perPage: 100, hasMore: false };\n }\n }\n\n async batchTraceInsert({ records }: { records: Record<string, any>[] }): Promise<void> {\n this.logger.debug('Batch inserting traces', { count: records.length });\n await this.operations.batchInsert({\n tableName: TABLE_TRACES,\n records,\n });\n }\n}\n","import { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { TABLE_WORKFLOW_SNAPSHOT, ensureDate, WorkflowsStorage } from '@mastra/core/storage';\nimport type { StorageListWorkflowRunsInput, WorkflowRun, WorkflowRuns } from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\nimport type { StoreOperationsCloudflare } from '../operations';\n\nexport class WorkflowsStorageCloudflare extends WorkflowsStorage {\n private operations: StoreOperationsCloudflare;\n\n constructor({ operations }: { operations: StoreOperationsCloudflare }) {\n super();\n this.operations = operations;\n }\n\n private validateWorkflowParams(params: { workflowName: string; runId: string }): void {\n const { workflowName, runId } = params;\n if (!workflowName || !runId) {\n throw new Error('Invalid workflow snapshot parameters');\n }\n }\n\n updateWorkflowResults(\n {\n // workflowName,\n // runId,\n // stepId,\n // result,\n // runtimeContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n runtimeContext: Record<string, any>;\n },\n ): Promise<Record<string, StepResult<any, any, any, any>>> {\n throw new Error('Method not implemented.');\n }\n updateWorkflowState(\n {\n // workflowName,\n // runId,\n // opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: string;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n },\n ): Promise<WorkflowRunState | undefined> {\n throw new Error('Method not implemented.');\n }\n\n async persistWorkflowSnapshot(params: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n try {\n const { workflowName, runId, resourceId, snapshot } = params;\n\n await this.operations.putKV({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n key: this.operations.getKey(TABLE_WORKFLOW_SNAPSHOT, { workflow_name: workflowName, run_id: runId }),\n value: {\n workflow_name: workflowName,\n run_id: runId,\n resourceId,\n snapshot: JSON.stringify(snapshot),\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n });\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_PERSIST_WORKFLOW_SNAPSHOT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Error persisting workflow snapshot for workflow ${params.workflowName}, run ${params.runId}`,\n details: {\n workflowName: params.workflowName,\n runId: params.runId,\n },\n },\n error,\n );\n }\n }\n\n async loadWorkflowSnapshot(params: { workflowName: string; runId: string }): Promise<WorkflowRunState | null> {\n try {\n this.validateWorkflowParams(params);\n const { workflowName, runId } = params;\n\n const key = this.operations.getKey(TABLE_WORKFLOW_SNAPSHOT, { workflow_name: workflowName, run_id: runId });\n const data = await this.operations.getKV(TABLE_WORKFLOW_SNAPSHOT, key);\n if (!data) return null;\n\n // Parse the snapshot from JSON string if needed\n const snapshotData = typeof data.snapshot === 'string' ? JSON.parse(data.snapshot) : data.snapshot;\n return snapshotData;\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_LOAD_WORKFLOW_SNAPSHOT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n text: `Error loading workflow snapshot for workflow ${params.workflowName}, run ${params.runId}`,\n details: {\n workflowName: params.workflowName,\n runId: params.runId,\n },\n },\n error,\n );\n this.logger.trackException?.(mastraError);\n this.logger.error(mastraError.toString());\n return null;\n }\n }\n\n private parseWorkflowRun(row: any): WorkflowRun {\n let parsedSnapshot: WorkflowRunState | string = row.snapshot as string;\n if (typeof parsedSnapshot === 'string') {\n try {\n parsedSnapshot = JSON.parse(row.snapshot as string) as WorkflowRunState;\n } catch (e) {\n // If parsing fails, return the raw snapshot string\n console.warn(`Failed to parse snapshot for workflow ${row.workflow_name}: ${e}`);\n }\n }\n\n return {\n workflowName: row.workflow_name,\n runId: row.run_id,\n snapshot: parsedSnapshot,\n createdAt: ensureDate(row.createdAt)!,\n updatedAt: ensureDate(row.updatedAt)!,\n resourceId: row.resourceId,\n };\n }\n\n private buildWorkflowSnapshotPrefix({\n workflowName,\n runId,\n resourceId,\n }: {\n namespace?: string;\n workflowName?: string;\n runId?: string;\n resourceId?: string;\n }): string {\n // Add namespace prefix if configured\n const prefix = this.operations.namespacePrefix ? `${this.operations.namespacePrefix}:` : '';\n let key = `${prefix}${TABLE_WORKFLOW_SNAPSHOT}`;\n if (workflowName) key += `:${workflowName}`;\n if (runId) key += `:${runId}`;\n if (resourceId) key += `:${resourceId}`;\n return key;\n }\n\n async getWorkflowRuns({\n workflowName,\n limit = 20,\n offset = 0,\n resourceId,\n fromDate,\n toDate,\n status,\n }: StorageListWorkflowRunsInput = {}): Promise<WorkflowRuns> {\n try {\n // List all keys in the workflow snapshot table\n const prefix = this.buildWorkflowSnapshotPrefix({ workflowName });\n const keyObjs = await this.operations.listKV(TABLE_WORKFLOW_SNAPSHOT, { prefix });\n const runs: WorkflowRun[] = [];\n for (const { name: key } of keyObjs) {\n // Extract workflow_name, run_id, resourceId from key\n const parts = key.split(':');\n const idx = parts.indexOf(TABLE_WORKFLOW_SNAPSHOT);\n if (idx === -1 || parts.length < idx + 3) continue;\n const wfName = parts[idx + 1];\n const _runId = parts[idx + 2];\n // If resourceId is present in the key, it's at idx+3\n const keyResourceId = parts.length > idx + 3 ? parts[idx + 3] : undefined;\n // Filter by namespace, workflowName, resourceId if provided\n if (workflowName && wfName !== workflowName) continue;\n // If resourceId filter is provided, the key must have that resourceId\n if (resourceId && keyResourceId !== resourceId) continue;\n // Load the snapshot\n const data = await this.operations.getKV(TABLE_WORKFLOW_SNAPSHOT, key);\n if (!data) continue;\n try {\n // Additional check: if resourceId filter is provided but key doesn't have resourceId, skip\n if (resourceId && !keyResourceId) continue;\n const snapshotData = typeof data.snapshot === 'string' ? JSON.parse(data.snapshot) : data.snapshot;\n if (status && snapshotData.status !== status) continue;\n // Filter by fromDate/toDate\n const createdAt = ensureDate(data.createdAt);\n if (fromDate && createdAt && createdAt < fromDate) continue;\n if (toDate && createdAt && createdAt > toDate) continue;\n // Parse the snapshot from JSON string if needed\n const resourceIdToUse = keyResourceId || data.resourceId;\n const run = this.parseWorkflowRun({\n ...data,\n workflow_name: wfName,\n resourceId: resourceIdToUse,\n snapshot: snapshotData,\n });\n runs.push(run);\n } catch (err) {\n this.logger.error('Failed to parse workflow snapshot:', { key, error: err });\n }\n }\n // Sort by createdAt descending\n runs.sort((a, b) => {\n const aDate = a.createdAt ? new Date(a.createdAt).getTime() : 0;\n const bDate = b.createdAt ? new Date(b.createdAt).getTime() : 0;\n return bDate - aDate;\n });\n // Apply pagination\n const pagedRuns = runs.slice(offset, offset + limit);\n return {\n runs: pagedRuns,\n total: runs.length,\n };\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_WORKFLOW_RUNS_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n this.logger.trackException?.(mastraError);\n this.logger.error(mastraError.toString());\n return { runs: [], total: 0 };\n }\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName: string;\n }): Promise<WorkflowRun | null> {\n try {\n if (!runId || !workflowName) {\n throw new Error('runId, workflowName, are required');\n }\n // Try to find the data by listing keys with the prefix and finding the exact match\n const prefix = this.buildWorkflowSnapshotPrefix({ workflowName, runId });\n const keyObjs = await this.operations.listKV(TABLE_WORKFLOW_SNAPSHOT, { prefix });\n if (!keyObjs.length) return null;\n\n // Find the exact key that matches our workflow and run\n const exactKey = keyObjs.find(k => {\n const parts = k.name.split(':');\n const idx = parts.indexOf(TABLE_WORKFLOW_SNAPSHOT);\n if (idx === -1 || parts.length < idx + 3) return false;\n const wfName = parts[idx + 1];\n const rId = parts[idx + 2];\n return wfName === workflowName && rId === runId;\n });\n\n if (!exactKey) return null;\n const data = await this.operations.getKV(TABLE_WORKFLOW_SNAPSHOT, exactKey.name);\n if (!data) return null;\n // Parse the snapshot from JSON string if needed\n const snapshotData = typeof data.snapshot === 'string' ? JSON.parse(data.snapshot) : data.snapshot;\n return this.parseWorkflowRun({ ...data, snapshot: snapshotData });\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_GET_WORKFLOW_RUN_BY_ID_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n workflowName,\n runId,\n },\n },\n error,\n );\n this.logger.trackException?.(mastraError);\n this.logger.error(mastraError.toString());\n return null;\n }\n }\n}\n","import type { KVNamespace } from '@cloudflare/workers-types';\nimport type { StorageThreadType, MastraMessageV2 } from '@mastra/core/memory';\nimport type { ScoreRowData } from '@mastra/core/scores';\nimport type {\n TABLE_MESSAGES,\n TABLE_THREADS,\n TABLE_WORKFLOW_SNAPSHOT,\n TABLE_EVALS,\n TABLE_TRACES,\n TABLE_RESOURCES,\n TABLE_NAMES,\n EvalRow,\n StorageResourceType,\n TABLE_SCORERS,\n TABLE_AI_SPANS,\n AISpanRecord,\n} from '@mastra/core/storage';\nimport type { WorkflowRunState } from '@mastra/core/workflows';\n\n/**\n * Configuration for Cloudflare KV using REST API\n */\nexport interface CloudflareRestConfig {\n /** Cloudflare account ID */\n accountId: string;\n /** Cloudflare API token with KV access */\n apiToken: string;\n /**\n * Prefix for KV namespace names.\n * Recommended for production use to ensure data isolation between different instances.\n * If not provided, no prefix will be used\n */\n namespacePrefix?: string;\n}\n\n/**\n * Configuration for Cloudflare KV using Workers Binding API\n */\nexport interface CloudflareWorkersConfig {\n /** KV namespace bindings from Workers environment */\n bindings: {\n [key in TABLE_NAMES]: KVNamespace;\n };\n /** Optional prefix for keys within namespaces */\n keyPrefix?: string;\n}\n\n/**\n * Combined configuration type supporting both REST API and Workers Binding API\n */\nexport type CloudflareStoreConfig = CloudflareRestConfig | CloudflareWorkersConfig;\n\n/**\n * Interface for KV operations with type support\n */\nexport interface KVOperation {\n /** Table/namespace to operate on */\n tableName: TABLE_NAMES;\n /** Key to read/write */\n key: string;\n /** Value to write (for put operations) */\n value?: any;\n /** Optional metadata to associate with the value */\n metadata?: any;\n}\n\n/**\n * Helper to determine if a config is using Workers bindings\n */\nexport function isWorkersConfig(config: CloudflareStoreConfig): config is CloudflareWorkersConfig {\n return 'bindings' in config;\n}\n\nexport type RecordTypes = {\n [TABLE_THREADS]: StorageThreadType;\n [TABLE_MESSAGES]: MastraMessageV2;\n [TABLE_WORKFLOW_SNAPSHOT]: WorkflowRunState;\n [TABLE_EVALS]: EvalRow;\n [TABLE_SCORERS]: ScoreRowData;\n [TABLE_TRACES]: any;\n [TABLE_RESOURCES]: StorageResourceType;\n [TABLE_AI_SPANS]: AISpanRecord;\n};\n\nexport type ListOptions = {\n limit?: number;\n prefix?: string;\n};\n","import type { KVNamespace } from '@cloudflare/workers-types';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { StorageThreadType, MastraMessageV1, MastraMessageV2 } from '@mastra/core/memory';\nimport type { ScoreRowData, ScoringSource } from '@mastra/core/scores';\nimport {\n MastraStorage,\n TABLE_MESSAGES,\n TABLE_THREADS,\n TABLE_WORKFLOW_SNAPSHOT,\n TABLE_EVALS,\n TABLE_SCORERS,\n TABLE_TRACES,\n} from '@mastra/core/storage';\nimport type {\n TABLE_NAMES,\n StorageColumn,\n StorageGetMessagesArg,\n EvalRow,\n WorkflowRuns,\n WorkflowRun,\n StorageGetTracesArg as _StorageGetTracesArg,\n StorageGetTracesPaginatedArg,\n PaginationInfo,\n StoragePagination,\n PaginationArgs,\n StorageDomains,\n StorageResourceType,\n StorageListWorkflowRunsInput,\n} from '@mastra/core/storage';\nimport type { Trace } from '@mastra/core/telemetry';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\nimport Cloudflare from 'cloudflare';\nimport { LegacyEvalsStorageCloudflare } from './domains/legacy-evals';\nimport { MemoryStorageCloudflare } from './domains/memory';\nimport { StoreOperationsCloudflare } from './domains/operations';\nimport { ScoresStorageCloudflare } from './domains/scores';\nimport { TracesStorageCloudflare } from './domains/traces';\nimport { WorkflowsStorageCloudflare } from './domains/workflows';\nimport { isWorkersConfig } from './types';\nimport type { CloudflareStoreConfig, RecordTypes } from './types';\n\nexport class CloudflareStore extends MastraStorage {\n stores: StorageDomains;\n private client?: Cloudflare;\n private accountId?: string;\n private namespacePrefix: string;\n private bindings?: Record<TABLE_NAMES, KVNamespace>;\n\n private validateWorkersConfig(\n config: CloudflareStoreConfig,\n ): asserts config is { bindings: Record<TABLE_NAMES, KVNamespace>; keyPrefix?: string } {\n if (!isWorkersConfig(config)) {\n throw new Error('Invalid Workers API configuration');\n }\n if (!config.bindings) {\n throw new Error('KV bindings are required when using Workers Binding API');\n }\n\n // Validate all required table bindings exist\n const requiredTables = [\n TABLE_THREADS,\n TABLE_MESSAGES,\n TABLE_WORKFLOW_SNAPSHOT,\n TABLE_EVALS,\n TABLE_SCORERS,\n TABLE_TRACES,\n ] as const;\n\n for (const table of requiredTables) {\n if (!(table in config.bindings)) {\n throw new Error(`Missing KV binding for table: ${table}`);\n }\n }\n }\n\n private validateRestConfig(\n config: CloudflareStoreConfig,\n ): asserts config is { accountId: string; apiToken: string; namespacePrefix?: string } {\n if (isWorkersConfig(config)) {\n throw new Error('Invalid REST API configuration');\n }\n if (!config.accountId?.trim()) {\n throw new Error('accountId is required for REST API');\n }\n if (!config.apiToken?.trim()) {\n throw new Error('apiToken is required for REST API');\n }\n }\n\n public get supports() {\n const supports = super.supports;\n supports.getScoresBySpan = true;\n return supports;\n }\n\n constructor(config: CloudflareStoreConfig) {\n super({ name: 'Cloudflare' });\n\n try {\n if (isWorkersConfig(config)) {\n this.validateWorkersConfig(config);\n this.bindings = config.bindings;\n this.namespacePrefix = config.keyPrefix?.trim() || '';\n this.logger.info('Using Cloudflare KV Workers Binding API');\n } else {\n this.validateRestConfig(config);\n this.accountId = config.accountId.trim();\n this.namespacePrefix = config.namespacePrefix?.trim() || '';\n this.client = new Cloudflare({\n apiToken: config.apiToken.trim(),\n });\n this.logger.info('Using Cloudflare KV REST API');\n }\n\n const operations = new StoreOperationsCloudflare({\n accountId: this.accountId,\n client: this.client,\n namespacePrefix: this.namespacePrefix,\n bindings: this.bindings,\n });\n\n const legacyEvals = new LegacyEvalsStorageCloudflare({\n operations,\n });\n\n const workflows = new WorkflowsStorageCloudflare({\n operations,\n });\n\n const traces = new TracesStorageCloudflare({\n operations,\n });\n\n const memory = new MemoryStorageCloudflare({\n operations,\n });\n\n const scores = new ScoresStorageCloudflare({\n operations,\n });\n\n this.stores = {\n operations,\n legacyEvals,\n workflows,\n traces,\n memory,\n scores,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'CLOUDFLARE_STORAGE_INIT_FAILED',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.THIRD_PARTY,\n },\n error,\n );\n }\n }\n\n async createTable({\n tableName,\n schema,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n }): Promise<void> {\n return this.stores.operations.createTable({ tableName, schema });\n }\n\n async alterTable(_args: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n return this.stores.operations.alterTable(_args);\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n return this.stores.operations.clearTable({ tableName });\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n return this.stores.operations.dropTable({ tableName });\n }\n\n async insert<T extends TABLE_NAMES>({\n tableName,\n record,\n }: {\n tableName: T;\n record: Record<string, any>;\n }): Promise<void> {\n return this.stores.operations.insert({ tableName, record });\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, string> }): Promise<R | null> {\n return this.stores.operations.load({ tableName, keys });\n }\n\n async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n return this.stores.memory.getThreadById({ threadId });\n }\n\n async getThreadsByResourceId({ resourceId }: { resourceId: string }): Promise<StorageThreadType[]> {\n return this.stores.memory.getThreadsByResourceId({ resourceId });\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n return this.stores.memory.saveThread({ thread });\n }\n\n async updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n return this.stores.memory.updateThread({ id, title, metadata });\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n return this.stores.memory.deleteThread({ threadId });\n }\n\n async saveMessages(args: { messages: MastraMessageV1[]; format?: undefined | 'v1' }): Promise<MastraMessageV1[]>;\n async saveMessages(args: { messages: MastraMessageV2[]; format: 'v2' }): Promise<MastraMessageV2[]>;\n async saveMessages(\n args: { messages: MastraMessageV1[]; format?: undefined | 'v1' } | { messages: MastraMessageV2[]; format: 'v2' },\n ): Promise<MastraMessageV2[] | MastraMessageV1[]> {\n return this.stores.memory.saveMessages(args);\n }\n\n public async getMessages(args: StorageGetMessagesArg & { format?: 'v1' }): Promise<MastraMessageV1[]>;\n public async getMessages(args: StorageGetMessagesArg & { format: 'v2' }): Promise<MastraMessageV2[]>;\n public async getMessages({\n threadId,\n resourceId,\n selectBy,\n format,\n }: StorageGetMessagesArg & { format?: 'v1' | 'v2' }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n return this.stores.memory.getMessages({ threadId, resourceId, selectBy, format });\n }\n\n async updateWorkflowResults({\n workflowName,\n runId,\n stepId,\n result,\n runtimeContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n runtimeContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n return this.stores.workflows.updateWorkflowResults({ workflowName, runId, stepId, result, runtimeContext });\n }\n\n async updateWorkflowState({\n workflowName,\n runId,\n opts,\n }: {\n workflowName: string;\n runId: string;\n opts: {\n status: string;\n result?: StepResult<any, any, any, any>;\n error?: string;\n suspendedPaths?: Record<string, number[]>;\n waitingPaths?: Record<string, number[]>;\n };\n }): Promise<WorkflowRunState | undefined> {\n return this.stores.workflows.updateWorkflowState({ workflowName, runId, opts });\n }\n\n async getMessagesById({ messageIds, format }: { messageIds: string[]; format: 'v1' }): Promise<MastraMessageV1[]>;\n async getMessagesById({ messageIds, format }: { messageIds: string[]; format?: 'v2' }): Promise<MastraMessageV2[]>;\n async getMessagesById({\n messageIds,\n format,\n }: {\n messageIds: string[];\n format?: 'v1' | 'v2';\n }): Promise<MastraMessageV1[] | MastraMessageV2[]> {\n return this.stores.memory.getMessagesById({ messageIds, format });\n }\n\n async persistWorkflowSnapshot(params: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n }): Promise<void> {\n return this.stores.workflows.persistWorkflowSnapshot(params);\n }\n\n async loadWorkflowSnapshot(params: { workflowName: string; runId: string }): Promise<WorkflowRunState | null> {\n return this.stores.workflows.loadWorkflowSnapshot(params);\n }\n\n async batchInsert<T extends TABLE_NAMES>(input: { tableName: T; records: Partial<RecordTypes[T]>[] }): Promise<void> {\n return this.stores.operations.batchInsert(input);\n }\n\n async getTraces({\n name,\n scope,\n page = 0,\n perPage = 100,\n attributes,\n fromDate,\n toDate,\n }: {\n name?: string;\n scope?: string;\n page: number;\n perPage: number;\n attributes?: Record<string, string>;\n fromDate?: Date;\n toDate?: Date;\n }): Promise<any[]> {\n return this.stores.traces.getTraces({\n name,\n scope,\n page,\n perPage,\n attributes,\n fromDate,\n toDate,\n });\n }\n\n async getEvalsByAgentName(agentName: string, type?: 'test' | 'live'): Promise<EvalRow[]> {\n return this.stores.legacyEvals.getEvalsByAgentName(agentName, type);\n }\n\n async getEvals(\n options: { agentName?: string; type?: 'test' | 'live'; dateRange?: { start?: Date; end?: Date } } & PaginationArgs,\n ): Promise<PaginationInfo & { evals: EvalRow[] }> {\n return this.stores.legacyEvals.getEvals(options);\n }\n\n async getWorkflowRuns(args: StorageListWorkflowRunsInput = {}): Promise<WorkflowRuns> {\n return this.stores.workflows.getWorkflowRuns(args);\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName: string;\n }): Promise<WorkflowRun | null> {\n return this.stores.workflows.getWorkflowRunById({ runId, workflowName });\n }\n\n async getTracesPaginated(args: StorageGetTracesPaginatedArg): Promise<PaginationInfo & { traces: Trace[] }> {\n return this.stores.traces.getTracesPaginated(args);\n }\n\n async getThreadsByResourceIdPaginated(args: {\n resourceId: string;\n page: number;\n perPage: number;\n }): Promise<PaginationInfo & { threads: StorageThreadType[] }> {\n return this.stores.memory.getThreadsByResourceIdPaginated(args);\n }\n\n async getMessagesPaginated(\n args: StorageGetMessagesArg,\n ): Promise<PaginationInfo & { messages: MastraMessageV1[] | MastraMessageV2[] }> {\n return this.stores.memory.getMessagesPaginated(args);\n }\n\n async updateMessages(args: {\n messages: Partial<Omit<MastraMessageV2, 'createdAt'>> &\n {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n }[];\n }): Promise<MastraMessageV2[]> {\n return this.stores.memory.updateMessages(args);\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n return this.stores.scores.getScoreById({ id });\n }\n\n async saveScore(score: ScoreRowData): Promise<{ score: ScoreRowData }> {\n return this.stores.scores.saveScore(score);\n }\n\n async getScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresByRunId({ runId, pagination });\n }\n\n async getScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n pagination: StoragePagination;\n entityId: string;\n entityType: string;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresByEntityId({ entityId, entityType, pagination });\n }\n\n async getScoresByScorerId({\n scorerId,\n entityId,\n entityType,\n source,\n pagination,\n }: {\n scorerId: string;\n entityId?: string;\n entityType?: string;\n source?: ScoringSource;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresByScorerId({ scorerId, entityId, entityType, source, pagination });\n }\n\n async getScoresBySpan({\n traceId,\n spanId,\n pagination,\n }: {\n traceId: string;\n spanId: string;\n pagination: StoragePagination;\n }): Promise<{ pagination: PaginationInfo; scores: ScoreRowData[] }> {\n return this.stores.scores.getScoresBySpan({ traceId, spanId, pagination });\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n return this.stores.memory.getResourceById({ resourceId });\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n return this.stores.memory.saveResource({ resource });\n }\n\n async updateResource({\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n return this.stores.memory.updateResource({ resourceId, workingMemory, metadata });\n }\n\n async close(): Promise<void> {\n // No explicit cleanup needed\n }\n}\n"]}
|