{"version":3,"sources":["../src/utils/errors.ts","../src/utils/queryParams.ts","../src/services/createHttpClient.ts","../src/api/user.ts","../src/api/business.ts","../src/api/media.ts","../src/api/role.ts","../src/api/notification.ts","../src/api/promoCode.ts","../src/api/analytics.ts","../src/utils/slug.ts","../src/utils/blocks.ts","../src/api/cms.ts","../src/api/eshop.ts","../src/api/reservation.ts","../src/utils/currency.ts","../src/utils/price.ts","../src/utils/validation.ts","../src/utils/timezone.ts","../src/utils/text.ts","../src/utils/svg.ts","../src/index.ts"],"names":["url","locale"],"mappings":";;;AAoIO,IAAM,gCAAA,GAAmC,CAC9C,WAAA,EACA,WAAA,KACiB;AACjB,EAAA,OAAO;AAAA,IACL,GAAG,WAAA;AAAA,IACH,gBAAA,EAAkB,WAAA,CAAY,gBAAA,CAAiB,GAAA,CAAI,CAAC,eAAA,KAAoB;AACtE,MAAA,MAAM,KAAA,GAGA,eAAA,CAAgB,KAAA;AAEtB,MAAA,OAAO;AAAA,QACL,KAAA;AAAA,QACA,KAAA,EAAO,gBAAgB,KAAA,IAAS;AAAA,OAClC;AAAA,IACF,CAAC;AAAA,GACH;AACF,CAAA;;;ACrIO,SAAS,iBAAiB,MAAA,EAA6B;AAC1D,EAAA,MAAM,aAAuB,EAAC;AAE9B,EAAA,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAE7C,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACvC,MAAA;AAAA,IACJ;AAGA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtB,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AACvC,MAAA,UAAA,CAAW,KAAK,CAAA,EAAG,GAAG,IAAI,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAE,CAAA;AAAA,IAC9D,CAAA,MAAA,IAES,OAAO,KAAA,KAAU,QAAA,EAAU;AAChC,MAAA,UAAA,CAAW,KAAK,CAAA,EAAG,GAAG,IAAI,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IACzD,WAES,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,UAAU,SAAA,EAAW;AAC9D,MAAA,UAAA,CAAW,IAAA,CAAK,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAAA,IACrC,CAAA,MAAA,IAES,OAAO,KAAA,KAAU,QAAA,EAAU;AAChC,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AACvC,MAAA,UAAA,CAAW,KAAK,CAAA,EAAG,GAAG,IAAI,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAE,CAAA;AAAA,IAC9D;AAAA,EACJ,CAAC,CAAA;AAED,EAAA,OAAO,UAAA,CAAW,SAAS,CAAA,GAAI,CAAA,CAAA,EAAI,WAAW,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,GAAK,EAAA;AAChE;;;ACYO,SAAS,iBAAiB,GAAA,EAAuB;AACvD,EAAA,MAAM,eAAA,GAAkB,CAAA,EAAG,GAAA,CAAI,OAAO,CAAA,8BAAA,CAAA;AACtC,EAAA,IAAI,cAAA,GAAuC,IAAA;AAE3C,EAAA,eAAe,gBAAA,GAAmB;AACjC,IAAA,IAAI,cAAA,EAAgB;AACnB,MAAA,OAAO,cAAA;AAAA,IACR;AAEA,IAAA,cAAA,GAAA,CAAkB,YAAY;AAC7B,MAAA,MAAM,EAAE,YAAA,EAAc,QAAA,EAAS,GAAI,MAAM,IAAI,QAAA,EAAS;AACtD,MAAA,IAAI,CAAC,YAAA,EAAc;AAClB,QAAA,GAAA,CAAI,MAAA,EAAO;AACX,QAAA,MAAM,GAAA,GAAW,IAAI,KAAA,CAAM,4BAA4B,CAAA;AACvD,QAAA,GAAA,CAAI,IAAA,GAAO,UAAA;AACX,QAAA,GAAA,CAAI,UAAA,GAAa,GAAA;AACjB,QAAA,MAAM,GAAA;AAAA,MACP;AAEA,MAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,eAAA,EAAiB;AAAA,QAC3C,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,MAAA,EAAQ,kBAAA,EAAoB,gBAAgB,kBAAA,EAAmB;AAAA,QAC1E,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,QAAA,EAAU,cAAc;AAAA,OAC/C,CAAA;AAED,MAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACf,QAAA,GAAA,CAAI,MAAA,EAAO;AACX,QAAA,MAAM,GAAA,GAAW,IAAI,KAAA,CAAM,sBAAsB,CAAA;AACjD,QAAA,GAAA,CAAI,IAAA,GAAO,UAAA;AACX,QAAA,GAAA,CAAI,UAAA,GAAa,GAAA;AACjB,QAAA,MAAM,GAAA;AAAA,MACP;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,EAAK;AAC/B,MAAA,GAAA,CAAI,SAAS,IAAI,CAAA;AAAA,IAClB,CAAA,GAAG,CAAE,OAAA,CAAQ,MAAM;AAClB,MAAA,cAAA,GAAiB,IAAA;AAAA,IAClB,CAAC,CAAA;AAED,IAAA,OAAO,cAAA;AAAA,EACR;AAEA,EAAA,eAAe,OAAA,CACd,MAAA,EACA,IAAA,EACA,IAAA,EACA,OAAA,EAQa;AACb,IAAA,IAAI,SAAS,gBAAA,EAAkB;AAC9B,MAAA,IAAA,GAAO,OAAA,CAAQ,iBAAiB,IAAI,CAAA;AAAA,IACrC;AAEA,IAAA,MAAM,OAAA,GAAkC;AAAA,MACvC,MAAA,EAAQ,kBAAA;AAAA,MACR,cAAA,EAAgB,kBAAA;AAAA,MAChB,GAAI,OAAA,EAAS,OAAA,IAAW;AAAC,KAC1B;AAED,IAAA,IAAI,EAAE,WAAA,EAAa,SAAA,EAAW,UAAS,GAAI,MAAM,IAAI,QAAA,EAAS;AAE9D,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,EAAI,GAAI,GAAA;AAC5B,IAAA,IAAI,SAAA,IAAa,SAAS,SAAA,EAAW;AACpC,MAAA,MAAM,gBAAA,EAAiB;AACvB,MAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,QAAA,EAAS;AAClC,MAAA,WAAA,GAAc,MAAA,CAAO,WAAA;AACrB,MAAA,QAAA,GAAW,MAAA,CAAO,QAAA;AAAA,IACnB;AAEA,IAAA,IAAI,WAAA,EAAa;AAEhB,MAAA,IAAI,aAAa,KAAA,EAAO;AACvB,QAAA,OAAA,CAAQ,WAAW,CAAA,GAAI,WAAA;AAAA,MACxB,CAAA,MAAO;AACN,QAAA,OAAA,CAAQ,eAAe,CAAA,GAAI,CAAA,OAAA,EAAU,WAAW,CAAA,CAAA;AAAA,MACjD;AAAA,IACD;AAEC,IAAA,MAAM,YAAY,OAAA,EAAS,MAAA,GAAS,OAAO,gBAAA,CAAiB,OAAA,CAAQ,MAAM,CAAA,GAAI,IAAA;AAE9E,IAAA,MAAM,SAAA,GAAiB,EAAE,MAAA,EAAQ,OAAA,EAAQ;AACzC,IAAA,IAAI,CAAC,CAAC,KAAA,EAAO,QAAQ,EAAE,QAAA,CAAS,MAAM,CAAA,IAAK,IAAA,KAAS,MAAA,EAAW;AAC9D,MAAA,SAAA,CAAU,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,IACrC;AAEA,IAAA,MAAM,OAAA,GAAU,CAAA,EAAG,GAAA,CAAI,OAAO,GAAG,SAAS,CAAA,CAAA;AAC1C,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI,IAAA;AACJ,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,IAAI;AACH,MAAA,GAAA,GAAM,MAAM,KAAA,CAAM,OAAA,EAAS,SAAS,CAAA;AAAA,IACrC,SAAS,KAAA,EAAO;AACf,MAAA,MAAM,MAAW,IAAI,KAAA,CAAM,iBAAiB,KAAA,GAAQ,KAAA,CAAM,UAAU,wBAAwB,CAAA;AAC5F,MAAA,GAAA,CAAI,IAAA,GAAO,cAAA;AACX,MAAA,GAAA,CAAI,MAAA,GAAS,MAAA;AACb,MAAA,GAAA,CAAI,GAAA,GAAM,OAAA;AACb,MAAA,IAAI,OAAA,EAAS,OAAA,IAAW,MAAA,KAAW,KAAA,EAAO;AACtC,QAAA,OAAA,CAAQ,OAAA;AAAA,UACP,OAAA,CAAQ,OAAA,CAAQ,EAAE,KAAA,EAAO,GAAA,EAAK,QAAQ,GAAA,EAAK,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO;AAAA,SACrE,CAAE,MAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AAAA,MACjB;AACA,MAAA,MAAM,GAAA;AAAA,IACP;AAGA,IAAA,IAAI,IAAI,MAAA,KAAW,GAAA,IAAO,CAAC,OAAA,GAAU,UAAU,CAAA,EAAG;AACjD,MAAA,IAAI;AACH,QAAA,MAAM,gBAAA,EAAiB;AACvB,QAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,QAAA,EAAS;AAClC,QAAA,OAAA,CAAQ,eAAe,CAAA,GAAI,CAAA,OAAA,EAAU,MAAA,CAAO,WAAW,CAAA,CAAA;AACvD,QAAA,SAAA,CAAU,OAAA,GAAU,OAAA;AACpB,QAAA,OAAO,OAAA,CAAW,QAAQ,IAAA,EAAM,IAAA,EAAM,EAAE,GAAG,OAAA,EAAS,QAAA,EAAU,IAAA,EAAM,CAAA;AAAA,MACrE,SAAS,YAAA,EAAc;AAAA,MAEvB;AAAA,IACD;AAGA,IAAA,IAAI;AACH,MAAA,MAAM,aAAA,GAAgB,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,gBAAgB,CAAA;AACtD,MAAA,MAAM,WAAA,GAAc,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA;AAClD,MAAA,IAAI,GAAA,CAAI,WAAW,GAAA,IAAO,aAAA,KAAkB,OAAO,CAAC,WAAA,EAAa,QAAA,CAAS,kBAAkB,CAAA,EAAG;AAC9F,QAAA,IAAA,GAAO,EAAC;AAAA,MACT,CAAA,MAAO;AACN,QAAA,IAAA,GAAO,MAAM,IAAI,IAAA,EAAK;AAAA,MACvB;AAAA,IACD,SAAS,KAAA,EAAO;AACf,MAAA,MAAM,GAAA,GAAW,IAAI,KAAA,CAAM,0BAA0B,CAAA;AACrD,MAAA,GAAA,CAAI,IAAA,GAAO,YAAA;AACX,MAAA,GAAA,CAAI,MAAA,GAAS,MAAA;AACb,MAAA,GAAA,CAAI,GAAA,GAAM,OAAA;AACV,MAAA,GAAA,CAAI,SAAS,GAAA,CAAI,MAAA;AACpB,MAAA,IAAI,OAAA,EAAS,OAAA,IAAW,MAAA,KAAW,KAAA,EAAO;AACtC,QAAA,OAAA,CAAQ,OAAA;AAAA,UACP,OAAA,CAAQ,OAAA,CAAQ,EAAE,KAAA,EAAO,GAAA,EAAK,MAAA,EAAQ,GAAA,EAAK,OAAA,EAAS,MAAA,EAAQ,GAAA,CAAI,MAAA,EAAQ;AAAA,SACzE,CAAE,MAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AAAA,MACjB;AACA,MAAA,MAAM,GAAA;AAAA,IACP;AAEA,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACZ,MAAA,MAAM,SAAA,GAAyB,IAAA;AAC/B,MAAA,MAAM,MAAA,GAAS,iCAAiC,SAAS,CAAA;AACzD,MAAA,MAAM,GAAA,GAAW,IAAI,KAAA,CAAM,SAAA,CAAU,WAAW,gBAAgB,CAAA;AAChE,MAAA,GAAA,CAAI,IAAA,GAAO,UAAA;AACX,MAAA,GAAA,CAAI,UAAA,GAAa,SAAA,CAAU,UAAA,IAAc,GAAA,CAAI,MAAA;AAC7C,MAAA,GAAA,CAAI,mBAAmB,MAAA,CAAO,gBAAA;AAC9B,MAAA,GAAA,CAAI,MAAA,GAAS,MAAA;AACb,MAAA,GAAA,CAAI,GAAA,GAAM,OAAA;AACV,MAAA,MAAM,SAAA,GAAY,IAAI,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,YAAY,CAAA;AACjF,MAAA,IAAI,SAAA,MAAe,SAAA,GAAY,SAAA;AAClC,MAAA,IAAI,OAAA,EAAS,OAAA,IAAW,MAAA,KAAW,KAAA,EAAO;AACtC,QAAA,OAAA,CAAQ,OAAA;AAAA,UACP,QAAQ,OAAA,CAAQ;AAAA,YACf,KAAA,EAAO,GAAA;AAAA,YACP,MAAA;AAAA,YACA,GAAA,EAAK,OAAA;AAAA,YACL,QAAQ,GAAA,CAAI,MAAA;AAAA,YACZ,QAAA,EAAU,SAAA;AAAA,YACV,WAAW,SAAA,IAAa,IAAA;AAAA,YACxB,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,GAAI;AAAA,WACzB;AAAA,SACF,CAAE,MAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AAAA,MACjB;AACA,MAAA,MAAM,GAAA;AAAA,IACP;AAEF,IAAA,IAAI,OAAA,EAAS,SAAA,IAAa,MAAA,KAAW,KAAA,EAAO;AACzC,MAAA,MAAM,SAAA,GAAY,IAAI,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,YAAY,CAAA;AACjF,MAAA,OAAA,CAAQ,OAAA;AAAA,QACP,QAAQ,SAAA,CAAU;AAAA,UACjB,IAAA;AAAA,UACA,MAAA;AAAA,UACA,GAAA,EAAK,OAAA;AAAA,UACL,QAAQ,GAAA,CAAI,MAAA;AAAA,UACZ,WAAW,SAAA,IAAa,IAAA;AAAA,UACxB,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,GAAI;AAAA,SACzB;AAAA,OACF,CAAE,MAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AAAA,IACjB;AACA,IAAA,OAAO,IAAA;AAAA,EACR;AAEA,EAAA,OAAO;AAAA,IACN,GAAA,EAAK,CAAI,IAAA,EAAc,IAAA,KAAe,QAAW,KAAA,EAAO,IAAA,EAAM,QAAW,IAAI,CAAA;AAAA,IAC7E,IAAA,EAAM,CAAI,IAAA,EAAc,IAAA,EAAW,SAAe,OAAA,CAAW,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,IACrF,GAAA,EAAK,CAAI,IAAA,EAAc,IAAA,EAAW,SAAe,OAAA,CAAW,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,IACnF,KAAA,EAAO,CAAI,IAAA,EAAc,IAAA,EAAW,SAAe,OAAA,CAAW,OAAA,EAAS,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,IACvF,MAAA,EAAQ,CAAI,IAAA,EAAc,IAAA,KAAe,QAAW,QAAA,EAAU,IAAA,EAAM,QAAW,IAAI;AAAA,GACpF;AACD;;;AC5OO,IAAM,aAAA,GAAgB,CAAC,SAAA,KAAyB;AACnD,EAAA,OAAO;AAAA;AAAA,IAGH,MAAM,UAAA,CAAW,MAAA,EAAiC,OAAA,EAA0B;AACxE,MAAA,MAAM,UAAe,EAAC;AAEtB,MAAA,IAAI,MAAA,CAAO,IAAA,KAAS,MAAA,EAAW,OAAA,CAAQ,OAAO,MAAA,CAAO,IAAA;AACrD,MAAA,IAAI,MAAA,CAAO,YAAA,KAAiB,MAAA,EAAW,OAAA,CAAQ,eAAe,MAAA,CAAO,YAAA;AACrE,MAAA,IAAI,MAAA,CAAO,SAAA,KAAc,MAAA,EAAW,OAAA,CAAQ,YAAY,MAAA,CAAO,SAAA;AAC/D,MAAA,IAAI,MAAA,CAAO,SAAA,KAAc,MAAA,EAAW,OAAA,CAAQ,YAAY,MAAA,CAAO,SAAA;AAE/D,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,WAAA,EAAa,SAAS,OAAO,CAAA;AAAA,IACjE,CAAA;AAAA,IAEA,MAAM,cAAA,CAAe,MAAA,EAA8B,OAAA,EAA0B;AACzE,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,wBAAA,EAA0B,QAAQ,OAAO,CAAA;AAAA,IAC9E,CAAA;AAAA,IAEA,MAAM,kBAAA,CAAmB,MAAA,EAAkC,OAAA,EAA0B;AACjF,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,gCAAA,EAAkC,QAAQ,OAAO,CAAA;AAAA,IACtF,CAAA;AAAA,IAEA,MAAM,KAAA,CAAM,MAAA,EAAqB,OAAA,EAA0B;AACvD,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,cAAA,EAAgB,OAAO,CAAA;AAAA,IAC3D,CAAA;AAAA,IAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AACnE,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,kBAAA,EAAoB;AAAA,QAChD,GAAG,OAAA;AAAA,QACH,MAAA,EAAQ;AAAA,UACJ,GAAG,MAAA;AAAA,UACH,YAAY,SAAA,CAAU;AAAA;AAC1B,OACH,CAAA;AAAA,IACL,CAAA;AAAA,IAEA,MAAM,OAAA,CAAQ,MAAA,EAAuB,OAAA,EAA0B;AAC3D,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,oBAAA,EAAsB,QAAQ,OAAO,CAAA;AAAA,IACzE,CAAA;AAAA;AAAA,IAIA,MAAM,SAAA,CAAU,MAAA,EAAyB,OAAA,EAA0B;AAC/D,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,iBAAA,EAAmB,QAAQ,OAAO,CAAA;AAAA,IACvE,CAAA;AAAA,IAEA,MAAM,YAAA,CAAa,MAAA,EAA4B,OAAA,EAA0B;AACrE,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,oBAAA,EAAsB,QAAQ,OAAO,CAAA;AAAA,IAC1E,CAAA;AAAA,IAEA,MAAM,MAAA,CAAO,MAAA,EAAsB,OAAA,EAA0B;AACzD,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA,CAAK,kBAAA,EAAoB,IAAI,OAAO,CAAA;AAAA,IACpE,CAAA;AAAA,IAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AACnE,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,mBAAA,EAAqB,QAAQ,OAAO,CAAA;AAAA,IACxE,CAAA;AAAA,IAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AACnE,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,qBAAA,EAAuB;AAAA,QACnD,GAAG,OAAA;AAAA,QACH;AAAA,OACH,CAAA;AAAA,IACL,CAAA;AAAA;AAAA,IAIA,MAAM,cAAA,CAAe,MAAA,EAA8B,OAAA,EAA0B;AACzE,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,2BAAA,EAA6B,QAAQ,OAAO,CAAA;AAAA,IACjF,CAAA;AAAA,IAEA,MAAM,mBAAA,CAAoB,MAAA,EAAmC,OAAA,EAA0B;AACnF,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,iCAAA,EAAmC,QAAQ,OAAO,CAAA;AAAA,IACvF,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACvE,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,0BAAA,EAA4B,QAAQ,OAAO,CAAA;AAAA,IAChF,CAAA;AAAA,IAEA,MAAM,SAAA,CAAU,MAAA,EAA6B,OAAA,EAA0B;AACnE,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,qBAAA,EAAuB,QAAQ,OAAO,CAAA;AAAA,IAC3E;AAAA,GACJ;AACJ,CAAA;;;AClFO,IAAM,iBAAA,GAAoB,CAAC,SAAA,KAAyB;AACzD,EAAA,OAAO;AAAA,IACL,MAAM,cAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,CAAA,cAAA,CAAA,EAAkB,QAAQ,OAAO,CAAA;AAAA,IACpE,CAAA;AAAA,IAEA,MAAM,cAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,OAAO,EAAE,CAAA,CAAA;AAAA,QAC3B,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,cAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,MAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,OAAO,EAAE,CAAA,CAAA;AAAA,QAC3B;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AACrE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,CAAA;AAAA,QACtC;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACzE,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,CAAA,cAAA,CAAA,EAAkB,OAAO,CAAA;AAAA,IAC3D,CAAA;AAAA,IAEA,MAAM,kBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,QAAA,CAAA;AAAA,QACtC;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACzE,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,OAAO,EAAE,CAAA,eAAA,CAAA;AAAA,QAC3B,EAAC;AAAA,QACD;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,oBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,sBAAA,EAAwB,OAAO,CAAA;AAAA,IACjE,CAAA;AAAA,IAEA,MAAM,eAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,aAAA,CAAA;AAAA,QACtC;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,MAAM,SAAA,CAAU,MAAA,EAAyB,OAAA,EAA0B;AACjE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,UAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,mBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,oBAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,UAAA,CAAW,MAAA,EAA0B,OAAA,EAA0B;AACnE,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,WAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,MAAM,gBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,WAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AACrE,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,cAAA,CAAA;AAAA,QACtC,MAAA,CAAO,OAAA;AAAA,QACP;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,gBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA,CAAI,CAAA,eAAA,EAAkB,MAAA,CAAO,EAAE,CAAA,MAAA,CAAA,EAAU;AAAA,QACnE,GAAG,OAAA;AAAA,QACH,MAAA,EAAQ;AAAA,UACN,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,KAAA,EAAO,OAAO,KAAA,IAAS;AAAA;AACzB,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,MAAM,mBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,EAAE,EAAA,EAAI,GAAG,OAAA,EAAQ,GAAI,MAAA;AAC3B,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,kBAAkB,EAAE,CAAA,UAAA,CAAA;AAAA,QACpB,OAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACzE,MAAA,MAAM,EAAE,EAAA,EAAI,GAAG,OAAA,EAAQ,GAAI,MAAA;AAC3B,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,kBAAkB,EAAE,CAAA,OAAA,CAAA;AAAA,QACpB,OAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF,CAAA;;;ACvKO,IAAM,cAAA,GAAiB,CAAC,SAAA,KAAyB;AACpD,EAAA,OAAO;AAAA,IACH,MAAM,mBAAA,CAAoB,MAAA,EAAmC,OAAA,EAA0B;AAEnF,MAAA,MAAM,EAAE,KAAA,GAAQ,IAAI,IAAA,GAAO,IAAG,GAAI,MAAA;AAClC,MAAA,MAAM,MAAM,CAAA,EAAG,SAAA,CAAU,OAAO,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,MAAA,CAAA;AAEtE,MAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,MAAA,KAAA,CAAM,QAAQ,CAAC,IAAA,KAAS,SAAS,MAAA,CAAO,OAAA,EAAS,IAAI,CAAC,CAAA;AACtD,MAAA,IAAA,CAAK,QAAQ,CAACA,IAAAA,KAAQ,SAAS,MAAA,CAAO,OAAA,EAASA,IAAG,CAAC,CAAA;AAEnD,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,QAAA,EAAS;AACxC,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,QAC9B,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACL,aAAA,EAAe,CAAA,OAAA,EAAU,MAAA,CAAO,WAAW,CAAA;AAAA;AAC/C,OACH,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,QAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,MACnD;AAEA,MAAA,OAAO,MAAM,SAAS,IAAA,EAAK;AAAA,IAC/B,CAAA;AAAA,IAEA,MAAM,mBAAA,CAAoB,MAAA,EAAmC,OAAA,EAA0B;AACnF,MAAA,MAAM,EAAE,EAAA,EAAI,OAAA,EAAQ,GAAI,MAAA;AAExB,MAAA,OAAO,UAAU,UAAA,CAAW,MAAA;AAAA,QACxB,CAAA,eAAA,EAAkB,EAAE,CAAA,OAAA,EAAU,OAAO,CAAA,CAAA;AAAA,QACrC;AAAA,OACJ;AAAA,IACJ,CAAA;AAAA,IAEA,MAAM,gBAAA,CAAiB,MAAA,EAAgC,OAAA,EAA0B;AAE7E,MAAA,MAAM,EAAE,MAAA,GAAS,IAAA,EAAM,KAAA,GAAQ,IAAG,GAAI,MAAA;AACtC,MAAA,MAAM,MAAM,CAAA,EAAG,SAAA,CAAU,OAAO,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,MAAA,CAAA;AAEtE,MAAA,MAAM,WAAA,GAAmB,EAAE,KAAA,EAAM;AACjC,MAAA,IAAI,MAAA,cAAoB,MAAA,GAAS,MAAA;AAEjC,MAAA,MAAM,WAAA,GAAc,IAAI,eAAA,CAAgB,WAAW,EAAE,QAAA,EAAS;AAC9D,MAAA,MAAM,WAAW,MAAM,KAAA,CAAM,GAAG,GAAG,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,CAAA;AAEpD,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,QAAA,MAAM,YAAY,MAAM,QAAA,CAAS,MAAK,CAAE,KAAA,CAAM,MAAM,IAAI,CAAA;AACxD,QAAA,MAAM,IAAI,KAAA,CAAM,SAAA,EAAW,OAAA,IAAW,uBAAuB,CAAA;AAAA,MACjE;AAEA,MAAA,OAAO,MAAM,SAAS,IAAA,EAAK;AAAA,IAC/B,CAAA;AAAA,IAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AACnE,MAAA,MAAM,EAAE,OAAA,EAAS,GAAG,UAAA,EAAW,GAAI,MAAA;AAEnC,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QACxB,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,OAAA,EAAU,OAAO,CAAA,CAAA;AAAA,QACvD,UAAA;AAAA,QACA;AAAA,OACJ;AAAA,IACJ;AAAA,GACJ;AACJ,CAAA;;;AChEO,IAAM,aAAA,GAAgB,CAAC,SAAA,KAAyB;AACrD,EAAA,OAAO;AAAA,IACL,MAAM,UAAA,CACJ,MAAA,EACA,OAAA,EACe;AACf,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,CAAA,SAAA,CAAA,EAAa,QAAQ,OAAO,CAAA;AAAA,IAC/D,CAAA;AAAA,IAEA,MAAM,UAAA,CAAW,MAAA,EAA0B,OAAA,EAA0B;AACnE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,UAAA,EAAa,OAAO,EAAE,CAAA,CAAA;AAAA,QACtB,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,UAAA,CAAW,MAAA,EAA0B,OAAA,EAA0B;AACnE,MAAA,OAAO,UAAU,UAAA,CAAW,MAAA,CAAO,aAAa,MAAA,CAAO,EAAE,IAAI,OAAO,CAAA;AAAA,IACtE,CAAA;AAAA,IAEA,MAAM,OAAA,CAAQ,MAAA,EAAuB,OAAA,EAA0B;AAC7D,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA,CAAI,aAAa,MAAA,CAAO,EAAE,IAAI,OAAO,CAAA;AAAA,IACnE,CAAA;AAAA,IAEA,MAAM,QAAA,CAAS,MAAA,EAAwB,OAAA,EAA0B;AAC/D,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,CAAA,SAAA,CAAA,EAAa;AAAA,QAC3C,GAAG,OAAA;AAAA,QACH,MAAA,EAAQ;AAAA,UACN,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,YAAY,SAAA,CAAU;AAAA;AACxB,OACD,CAAA;AAAA,IACH;AAAA,GACF;AACF,CAAA;;;ACtCO,IAAM,qBAAA,GAAwB,CAAC,SAAA,KAAyB;AAC9D,EAAA,OAAO;AAAA,IACN,MAAM,cAAA,CAAe,MAAA,EAA8B,OAAA,EAA0B;AAC5E,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC3B,CAAA,8BAAA,EAAiC,OAAO,eAAe,CAAA,CAAA;AAAA,QACvD;AAAA,OACD;AAAA,IACD,CAAA;AAAA,IAEA,MAAM,gBAAA,CAAiB,MAAA,EAAgC,OAAA,EAA0B;AAChF,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC3B,CAAA,8BAAA,EAAiC,UAAU,UAAU,CAAA,CAAA;AAAA,QACrD;AAAA,OACD;AAAA,IACD;AAAA,GACD;AACD,CAAA;;;ACbO,IAAM,kBAAA,GAAqB,CAAC,SAAA,KAAyB;AAC3D,EAAA,OAAO;AAAA,IACN,MAAM,eAAA,CAAgB,MAAA,EAA+B,OAAA,EAA0B;AAC9E,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC3B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,YAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACD;AAAA,IACD,CAAA;AAAA,IAEA,MAAM,eAAA,CAAgB,MAAA,EAA+B,OAAA,EAA0B;AAC9E,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC3B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,aAAA,EAAgB,OAAO,EAAE,CAAA,CAAA;AAAA,QAC/D,MAAA;AAAA,QACA;AAAA,OACD;AAAA,IACD,CAAA;AAAA,IAEA,MAAM,eAAA,CAAgB,MAAA,EAA+B,OAAA,EAA0B;AAC9E,MAAA,OAAO,UAAU,UAAA,CAAW,MAAA;AAAA,QAC3B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,aAAA,EAAgB,OAAO,EAAE,CAAA,CAAA;AAAA,QAC/D;AAAA,OACD;AAAA,IACD,CAAA;AAAA,IAEA,MAAM,YAAA,CAAa,MAAA,EAA4B,OAAA,EAA0B;AACxE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC3B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,aAAA,EAAgB,OAAO,EAAE,CAAA,CAAA;AAAA,QAC/D;AAAA,OACD;AAAA,IACD,CAAA;AAAA,IAED,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AAC1E,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA,CAAI,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,YAAA,CAAA,EAAgB;AAAA,QACrF,GAAG,OAAA;AAAA,QACH;AAAA,OACA,CAAA;AAAA,IACF;AAAA,GACA;AACD,CAAA;;;AC3CO,IAAM,kBAAA,GAAqB,CAAC,SAAA,KAAyB;AAC3D,EAAA,OAAO;AAAA,IACN,MAAM,YAAA,CAAa,MAAA,EAA4B,OAAA,EAA0B;AACxE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA,CAAI,CAAA,cAAA,EAAiB,SAAA,CAAU,UAAU,CAAA,CAAA,EAAI;AAAA,QACxE,GAAG,OAAA;AAAA,QACH;AAAA,OACA,CAAA;AAAA,IACF;AAAA,GACD;AACD,CAAA;;;ACCO,IAAM,MAAA,GAAS,CAAC,GAAA,KAAyB;AAC9C,EAAA,MAAM,SAAA,GACJ,iEAAA;AACF,EAAA,OAAO,SAAA,CAAU,KAAK,GAAG,CAAA;AAC3B,CAAA;AAsCO,IAAM,cAAA,GAAiB,CAAC,EAAA,EAAY,SAAA,KAAiC;AAE1E,EAAA,IAAI,MAAA,CAAO,EAAE,CAAA,EAAG;AACd,IAAA,OAAO,EAAA;AAAA,EACT;AAGA,EAAA,IAAI,EAAA,CAAG,QAAA,CAAS,GAAG,CAAA,EAAG;AACpB,IAAA,OAAO,EAAA;AAAA,EACT;AAGA,EAAA,OAAO,GAAG,SAAA,CAAU,UAAU,IAAI,SAAA,CAAU,MAAM,IAAI,EAAE,CAAA,CAAA;AAC1D,CAAA;;;ACjDO,SAAS,aAAA,CAAc,KAAA,EAAY,MAAA,GAAiB,IAAA,EAAc;AACrE,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AAEnB,EAAA,IAAI,KAAA,CAAM,YAAY,KAAA,EAAO;AACzB,IAAA,IAAI,OAAO,KAAA,CAAM,UAAA,CAAW,KAAA,KAAU,QAAA,EAAU;AAC5C,MAAA,OACI,MAAM,UAAA,CAAW,KAAA,CAAM,MAAM,CAAA,IAC7B,MAAM,UAAA,CAAW,KAAA,CAAM,EAAA,IACvB,MAAA,CAAO,OAAO,KAAA,CAAM,UAAA,CAAW,KAAK,CAAA,CAAE,CAAC,CAAA,IACvC,EAAA;AAAA,IAER;AACA,IAAA,IAAI,OAAO,KAAA,CAAM,UAAA,CAAW,KAAA,KAAU,QAAA,EAAU;AAC5C,MAAA,OAAO,MAAM,UAAA,CAAW,KAAA;AAAA,IAC5B;AAAA,EACJ;AAGA,EAAA,OAAO,KAAA,CAAM,GAAA,EAAK,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA,CAAE,OAAA,CAAQ,OAAA,EAAS,CAAC,CAAA,KAAc,CAAA,CAAE,WAAA,EAAa,CAAA,IAAK,EAAA;AAC7F;AAGO,SAAS,iBAAiB,KAAA,EAAoB;AACjD,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,UAAU,IAAA,IAAQ,KAAA,CAAM,UAAU,MAAA,EAAW;AAC7D,IAAA,OAAO,EAAA;AAAA,EACX;AAEA,EAAA,QAAQ,MAAM,IAAA;AAAM,IAChB,KAAK,SAAA;AACD,MAAA,OAAO,KAAA,CAAM,QAAQ,KAAA,GAAQ,IAAA;AAAA,IACjC,KAAK,QAAA;AAED,MAAA,IAAI,MAAM,UAAA,EAAY,OAAA,KAAY,UAAU,KAAA,CAAM,UAAA,EAAY,YAAY,WAAA,EAAa;AACnF,QAAA,IAAI;AACA,UAAA,OAAO,IAAI,IAAA,CAAK,KAAA,CAAM,KAAK,EAAE,kBAAA,EAAmB;AAAA,QACpD,SAAS,CAAA,EAAG;AACR,UAAA,OAAO,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA,QAC7B;AAAA,MACJ;AACA,MAAA,OAAO,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA,IAC7B,KAAK,cAAA;AACD,MAAA,IAAI,KAAA,CAAM,QAAQ,KAAA,CAAM,KAAK,KAAK,KAAA,CAAM,KAAA,CAAM,SAAS,CAAA,EAAG;AACtD,QAAA,MAAM,UAAA,GAAa,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AAChC,QAAA,IAAI,UAAA,IAAc,WAAW,QAAA,EAAU;AACnC,UAAA,OAAO,UAAA,CAAW,IAAA,IAAQ,UAAA,CAAW,EAAA,IAAM,OAAA;AAAA,QAC/C;AACA,QAAA,OAAO,UAAA,CAAW,KAAA,IAAS,UAAA,CAAW,IAAA,IAAQ,WAAW,EAAA,IAAM,OAAA;AAAA,MACnE;AACA,MAAA,OAAO,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA,IAC7B;AACI,MAAA,OAAO,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA;AAErC;AAEO,SAAS,2BAA2B,QAAA,EAAsB;AAC7D,EAAA,MAAM,iBAAiB,EAAC;AAExB,EAAA,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACnC,IAAA,IAAI,SAAS,GAAG,CAAA,KAAM,QAAQ,QAAA,CAAS,GAAG,MAAM,MAAA,EAAW;AACvD,MAAA,cAAA,CAAe,IAAA,CAAK;AAAA,QAChB,GAAA;AAAA,QACA,KAAA,EAAO,CAAC,QAAA,CAAS,GAAG,CAAC;AAAA,OACxB,CAAA;AAAA,IACL;AAAA,EACJ,CAAC,CAAA;AAED,EAAA,OAAO,cAAA;AACX;AAEO,SAAS,mBAAmB,MAAA,EAAoC;AACnE,EAAA,MAAM,SAA8B,EAAC;AAErC,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,KAAU;AACtB,IAAA,IAAI,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,KAAA,CAAM,SAAS,CAAA,EAAG;AACvC,MAAA,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,GAAI,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,IACrC,CAAA,MAAO;AACH,MAAA,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,GAAI,IAAA;AAAA,IACxB;AAAA,EACJ,CAAC,CAAA;AAED,EAAA,OAAO,MAAA;AACX;AAGO,SAAS,iBAAA,CAAkB,KAAA,EAAY,MAAA,GAAiB,IAAA,EAAc;AACzE,EAAA,IAAI,CAAC,SAAS,CAAC,KAAA,CAAM,SAAS,KAAA,CAAM,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAE/D,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AAGhC,EAAA,IAAI,OAAO,UAAA,KAAe,QAAA,IAAY,UAAA,KAAe,IAAA,EAAM;AAEvD,IAAA,IAAI,UAAA,CAAW,MAAM,CAAA,EAAG,OAAO,WAAW,MAAM,CAAA;AAChD,IAAA,IAAI,UAAA,CAAW,EAAA,EAAI,OAAO,UAAA,CAAW,EAAA;AACrC,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA;AACvC,IAAA,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,IAAK,EAAE,CAAA;AAAA,EACjC;AAGA,EAAA,OAAO,OAAO,UAAU,CAAA;AAC5B;AAGO,IAAM,aAAA,GAAgB,CAAC,KAAA,EAAY,QAAA,KAAqB;AAC3D,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,CAAM,QAAQ,OAAO,IAAA;AAEpC,EAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAW,CAAA,CAAE,QAAQ,QAAQ,CAAA;AAE9D,EAAA,IAAI,CAAC,SAAS,CAAC,KAAA,CAAM,SAAS,KAAA,CAAM,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/D,EAAA,OAAO,KAAA,CAAM,MAAM,CAAC,CAAA;AACxB,CAAA;AAEO,IAAM,cAAA,GAAiB,CAAC,KAAA,EAAY,QAAA,KAAqB;AAC5D,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,CAAM,QAAQ,OAAO,IAAA;AAEpC,EAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAW,CAAA,CAAE,QAAQ,QAAQ,CAAA;AAE9D,EAAA,IAAI,CAAC,SAAS,CAAC,KAAA,CAAM,SAAS,KAAA,CAAM,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/D,EAAA,OAAO,KAAA,CAAM,KAAA;AACjB,CAAA;AAEA,SAAS,WAAA,CAAY,OAAY,MAAA,EAAgB;AAC7C,EAAA,IAAI,CAAC,KAAA,EAAO,IAAA,IAAQ,KAAA,CAAM,KAAA,KAAU,QAAW,OAAO,KAAA;AAGtD,EAAA,IAAI,KAAA,CAAM,SAAS,OAAA,EAAS;AACxB,IAAA,OAAO,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,GAAA,KAA6B;AACjD,MAAA,MAAM,SAA8B,EAAC;AACrC,MAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtC,QAAA,MAAA,CAAO,CAAC,CAAA,GAAI,WAAA,CAAY,CAAA,EAAG,MAAM,CAAA;AAAA,MACrC;AACA,MAAA,OAAO,MAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACL;AAGA,EAAA,MAAM,WAAA,GAAc,MAAM,IAAA,KAAS,MAAA;AACnC,EAAA,MAAM,MAAA,GACF,KAAA,CAAM,UAAA,EAAY,EAAA,KAAO,MAAA,IAAA,CACxB,KAAA,CAAM,UAAA,EAAY,SAAA,IAAa,CAAA,IAAK,CAAA,IACrC,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAA;AAEzB,EAAA,IAAI,MAAA,EAAQ;AACR,IAAA,OAAO,cACD,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,MAA2B,CAAA,CAAE,MAAM,CAAA,IAAK,CAAA,CAAE,IAAI,CAAC,CAAA,GAChE,CAAC,GAAG,MAAM,KAAK,CAAA;AAAA,EACzB;AAEA,EAAA,OAAO,WAAA,GAAc,KAAA,CAAM,KAAA,CAAM,CAAC,EAAE,MAAM,CAAA,IAAK,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,CAAE,IAAI,CAAA,GAAI,KAAA,CAAM,MAAM,CAAC,CAAA;AACvF;AAEO,IAAM,oBAAA,GAAuB,CAAC,KAAA,EAAY,QAAA,EAAkB,SAAS,IAAA,KAAS;AACjF,EAAA,IAAI,CAAC,KAAA,EAAO;AACR,IAAA,OAAO,EAAC;AAAA,EACZ;AAEA,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,KAAA,EAAO,QAAQ,CAAA;AAE7C,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,CAAC,GAAA,KAA6B;AACpD,IAAA,MAAM,MAAM,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,CAAC,KAAU,OAAA,KAAiB;AACrD,MAAA,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA,GAAI,WAAA,CAAY,SAAS,MAAM,CAAA;AAE9C,MAAA,OAAO,GAAA;AAAA,IACX,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,OAAO,GAAA;AAAA,EACX,CAAC,CAAA;AAED,EAAA,OAAO,MAAA;AACX,CAAA;AAEO,IAAM,iBAAA,GAAoB,CAAC,KAAA,EAAY,QAAA,EAAkB,SAAS,IAAA,KAAS;AAC9E,EAAA,IAAI,CAAC,KAAA,EAAO;AACR,IAAA,OAAO,EAAC;AAAA,EACZ;AAEA,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,KAAA,EAAO,QAAQ,CAAA;AAE7C,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,GAAA,EAAU,OAAA,KAAiB;AAC7C,IAAA,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA,GAAI,WAAA,CAAY,SAAS,MAAM,CAAA;AAC9C,IAAA,OAAO,GAAA;AAAA,EACX,CAAC,CAAA;AACL,CAAA;AAEO,IAAM,cAAc,CAAC,UAAA,EAAiB,OAAA,GAAU,IAAA,EAAM,aAAqB,6BAAA,KAAkC;AAChH,EAAA,IAAI,CAAC,YAAY,OAAO,IAAA;AAGxB,EAAA,MAAM,aAAA,GAAgB,CAAC,GAAA,KAAgB;AACnC,IAAA,OAAO,IAAI,UAAA,CAAW,SAAS,CAAA,IAAK,GAAA,CAAI,WAAW,UAAU,CAAA;AAAA,EACjE,CAAA;AAGA,EAAA,IAAI,WAAW,IAAA,KAAS,cAAA,IAAkB,MAAM,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,EAAG;AACvE,IAAA,MAAM,UAAA,GAAa,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA;AACrC,IAAA,IAAI,UAAA,IAAc,WAAW,QAAA,EAAU;AAEnC,MAAA,IAAI,UAAA,CAAW,eAAe,UAAA,CAAW,WAAA,CAAY,YAAY,UAAA,CAAW,WAAA,CAAY,SAAS,GAAA,EAAK;AAClG,QAAA,MAAM,GAAA,GAAM,UAAA,CAAW,WAAA,CAAY,QAAA,CAAS,GAAA;AAC5C,QAAA,OAAO,cAAc,GAAG,CAAA,GAAI,MAAM,CAAA,EAAG,UAAU,IAAI,GAAG,CAAA,CAAA;AAAA,MAC1D;AAGA,MAAA,IAAI,WAAW,GAAA,EAAK;AAChB,QAAA,OAAO,aAAA,CAAc,UAAA,CAAW,GAAG,CAAA,GAAI,UAAA,CAAW,MAAM,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAA,CAAW,GAAG,CAAA,CAAA;AAAA,MAC3F;AAAA,IACJ;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,IAAI,OAAA,EAAS;AACT,IAAA,IAAI,OAAO,eAAe,QAAA,EAAU;AAEhC,MAAA,IAAI,aAAA,CAAc,UAAU,CAAA,EAAG;AAC3B,QAAA,OAAO,UAAA;AAAA,MACX;AACA,MAAA,OAAO,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AAAA,IACtC;AAEA,IAAA,IAAI,WAAW,GAAA,EAAK;AAEhB,MAAA,IAAI,aAAA,CAAc,UAAA,CAAW,GAAG,CAAA,EAAG;AAC/B,QAAA,OAAO,UAAA,CAAW,GAAA;AAAA,MACtB;AACA,MAAA,OAAO,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAA,CAAW,GAAG,CAAA,CAAA;AAAA,IAC1C;AAAA,EACJ;AAEA,EAAA,IACI,UAAA,CAAW,eACX,UAAA,CAAW,WAAA,CAAY,YACvB,UAAA,CAAW,WAAA,CAAY,SAAS,GAAA,EAClC;AACE,IAAA,MAAM,GAAA,GAAM,UAAA,CAAW,WAAA,CAAY,QAAA,CAAS,GAAA;AAE5C,IAAA,IAAI,aAAA,CAAc,GAAG,CAAA,EAAG;AACpB,MAAA,OAAO,GAAA;AAAA,IACX;AACA,IAAA,OAAO,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA;AAAA,EAC/B;AAEA,EAAA,OAAO,IAAA;AACX,CAAA;;;ACjPO,IAAM,YAAA,GAAe,CAAC,SAAA,KAAyB;AACpD,EAAA,OAAO;AAAA;AAAA,IAGL,MAAM,gBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,YAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,gBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,aAAA,EAAgB,OAAO,EAAE,CAAA,CAAA;AAAA,QAC/D,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,gBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,MAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,aAAA,EAAgB,OAAO,EAAE,CAAA,CAAA;AAAA,QAC/D;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACzE,MAAA,MAAM,WAAA,GAAc,cAAA,CAAe,MAAA,CAAO,EAAA,EAAI,SAAS,CAAA;AACvD,MAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,UAAA,CAAW,GAAA;AAAA,QAC1C,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,aAAA,EAAgB,WAAW,CAAA,CAAA;AAAA,QACjE;AAAA,OACF;AAGA,MAAA,OAAO;AAAA,QACL,GAAG,QAAA;AAAA,QACH,SAAS,GAAA,EAAa;AACpB,UAAA,OAAO,iBAAA,CAAkB,QAAA,EAAU,GAAA,EAAK,SAAA,CAAU,MAAM,CAAA;AAAA,QAC1D,CAAA;AAAA,QACA,eAAe,GAAA,EAAa;AAC1B,UAAA,OAAO,oBAAA,CAAqB,QAAA,EAAU,GAAA,EAAK,SAAA,CAAU,MAAM,CAAA;AAAA,QAC7D,CAAA;AAAA,QACA,SAAS,GAAA,EAAa;AACpB,UAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,QAAA,EAAU,GAAA,EAAK,UAAU,MAAM,CAAA;AAC/D,UAAA,OAAO,WAAA,CAAY,KAAA,EAAO,IAAA,EAAM,SAAA,CAAU,UAAU,CAAA;AAAA,QACtD;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,cAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,YAAA,CAAA;AAAA,QACtC;AAAA,UACE,GAAG,OAAA;AAAA,UACH;AAAA;AACF,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,cAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,4BAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA;AAAA;AAAA,IAKA,MAAM,oBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,EAAE,YAAA,EAAc,GAAG,WAAA,EAAY,GAAI,MAAA;AAGzC,MAAA,MAAM,WAAA,GAAc,eAChB,EAAE,GAAG,aAAa,KAAA,EAAO,CAAA,WAAA,EAAc,YAAY,CAAA,CAAA,EAAG,GACtD,WAAA;AAEJ,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,QAAA,CAAA;AAAA,QACtC;AAAA,UACE,GAAG,OAAA;AAAA,UACH,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,qBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,EAAE,YAAA,EAAc,KAAA,EAAO,GAAG,MAAK,GAAI,MAAA;AAGzC,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,GAAG,IAAA;AAAA,QACH,KAAA,EACE,KAAA,KAAU,YAAA,GAAe,CAAA,WAAA,EAAc,YAAY,CAAA,CAAA,GAAK,MAAA;AAAA,OAC5D;AAEA,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,QAAA,CAAA;AAAA,QACtC,OAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,qBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,EAAE,EAAA,EAAI,YAAA,EAAc,KAAA,EAAO,GAAG,MAAK,GAAI,MAAA;AAG7C,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,GAAG,IAAA;AAAA,QACH,KAAA,EACE,KAAA,KAAU,YAAA,GAAe,CAAA,WAAA,EAAc,YAAY,CAAA,CAAA,GAAK,MAAA;AAAA,OAC5D;AAEA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,SAAA,EAAY,EAAE,CAAA,CAAA;AAAA,QACpD,OAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,qBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,MAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,SAAA,EAAY,OAAO,EAAE,CAAA,CAAA;AAAA,QAC3D;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,kBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,WAAA,GAAc,cAAA,CAAe,MAAA,CAAO,EAAA,EAAI,SAAS,CAAA;AACvD,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,SAAA,EAAY,WAAW,CAAA,CAAA;AAAA,QAC7D;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,SAAA,CAAU,MAAA,EAAyB,OAAA,EAA0B;AACjE,MAAA,MAAM,EAAE,OAAA,EAAS,WAAA,EAAY,GAAI,MAAA;AAEjC,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,SAAA,EAAY,OAAO,CAAA,KAAA,CAAA;AAAA,QACzD;AAAA,UACE,YAAY,SAAA,CAAU,UAAA;AAAA,UACtB,OAAA;AAAA,UACA,aAAa,WAAA,IAAe,IAAA,CAAK,MAAM,IAAA,CAAK,GAAA,KAAQ,GAAI;AAAA,SAC1D;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA;AAAA,IAIA,MAAM,mBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,4BAAA,EAA+B,OAAO,SAAS,CAAA,UAAA,CAAA;AAAA,QAC/C;AAAA,OACF;AAAA,IACF,CAAA;AAAA;AAAA,IAIA,MAAM,wBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,WAAA,GAAc,cAAA,CAAe,MAAA,CAAO,EAAA,EAAI,SAAS,CAAA;AACvD,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,aAAA,EAAgB,WAAW,CAAA,YAAA,CAAA;AAAA,QACjE;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF,CAAA;;;ACnNO,IAAM,cAAA,GAAiB,CAAC,SAAA,KAAyB;AACtD,EAAA,OAAO;AAAA;AAAA,IAGL,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACzE,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,SAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACzE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,UAAA,EAAa,OAAO,EAAE,CAAA,CAAA;AAAA,QAC5D,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACzE,MAAA,OAAO,UAAU,UAAA,CAAW,MAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,UAAA,EAAa,OAAO,EAAE,CAAA,CAAA;AAAA,QAC5D;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,UAAA,CAAW,MAAA,EAA0B,OAAA,EAA0B;AACnE,MAAA,MAAM,WAAA,GAAc,cAAA,CAAe,MAAA,CAAO,EAAA,EAAI,SAAS,CAAA;AACvD,MAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,UAAA,CAAW,GAAA;AAAA,QAC1C,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,UAAA,EAAa,WAAW,CAAA,CAAA;AAAA,QAC9D;AAAA,OACF;AAGA,MAAA,OAAO;AAAA,QACL,GAAG,QAAA;AAAA,QACH,OAAA,GAAU;AACR,UAAA,MAAM,SAAS,SAAA,CAAU,MAAA;AACzB,UAAA,OAAO,QAAA,CAAS,OAAO,MAAM,CAAA,IAAK,SAAS,IAAA,EAAM,EAAA,IAAM,SAAS,IAAA,IAAQ,EAAA;AAAA,QAC1E,CAAA;AAAA,QACA,cAAA,GAAiB;AACf,UAAA,MAAM,SAAS,SAAA,CAAU,MAAA;AACzB,UAAA,OAAO,QAAA,CAAS,cAAc,MAAM,CAAA,IAAK,SAAS,WAAA,EAAa,EAAA,IAAM,SAAS,WAAA,IAAe,EAAA;AAAA,QAC/F;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AACrE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,kBAAA,CAAmB,SAAA,CAAU,UAAU,CAAC,CAAA,SAAA,CAAA;AAAA,QAC1D;AAAA,UACE,GAAG,OAAA;AAAA,UACH;AAAA;AACF,OACF;AAAA,IACF,CAAA;AAAA;AAAA,IAIA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AACrE,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,OAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AACrE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,cAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,QAAA,CAAS,MAAA,EAAwB,OAAA,EAA0B;AAE/D,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,QAAA,EAAW,OAAO,EAAE,CAAA,CAAA;AAAA,QAC1D;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,SAAA,CAAU,MAAA,EAAyB,OAAA,EAA0B;AACjE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,OAAA,CAAA;AAAA,QACtC;AAAA,UACE,GAAG,OAAA;AAAA,UACH;AAAA;AACF,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,iBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,QAAA,EAAW,OAAO,EAAE,CAAA,OAAA,CAAA;AAAA,QAC1D,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,wBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,QAAA,EAAW,OAAO,EAAE,CAAA,eAAA,CAAA;AAAA,QAC1D,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA;AAAA,IAIA,MAAM,QAAA,CAAS,MAAA,EAAwB,OAAA,EAA0B;AAC/D,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,QACxC,IAAA,EAAM,iBAAA;AAAA,QACN,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,UAAU,IAAA,CAAK;AAAA,OACjB,CAAE,CAAA;AAEF,MAAA,MAAM,EAAE,KAAA,EAAO,GAAG,IAAA,EAAK,GAAI,MAAA;AAE3B,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,YAAY,SAAA,CAAU,UAAA;AAAA,QACtB,QAAQ,SAAA,CAAU,MAAA;AAAA,QAClB,KAAA;AAAA,QACA,GAAG;AAAA,OACL;AAEA,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,CAAA,kBAAA,CAAA,EAAsB,SAAS,OAAO,CAAA;AAAA,IACzE,CAAA;AAAA,IAEA,MAAM,QAAA,CAAS,MAAA,EAAwB,OAAA,EAA0B;AAC/D,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,YAAY,SAAA,CAAU,UAAA;AAAA,QACtB,QAAQ,SAAA,CAAU,MAAA;AAAA,QAClB,GAAG;AAAA,OACL;AAEA,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,gBAAA,CAAA;AAAA,QACtC,OAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF,CAAA;;;ACnJO,IAAM,oBAAA,GAAuB,CAAC,SAAA,KAAyB;AAC5D,EAAA,OAAO;AAAA;AAAA,IAGL,MAAM,iBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,YAAY,SAAA,CAAU,UAAA;AAAA,QACtB,QAAQ,SAAA,CAAU,MAAA;AAAA,QAClB,GAAG;AAAA,OACL;AAEA,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,CAAA,gBAAA,CAAA,EAAoB,SAAS,OAAO,CAAA;AAAA,IACvE,CAAA;AAAA,IAEA,MAAM,iBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,EAAE,EAAA,EAAI,GAAG,OAAA,EAAQ,GAAI,MAAA;AAC3B,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,oBAAoB,EAAE,CAAA,CAAA;AAAA,QACtB,OAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,QAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,YAAY,SAAA,CAAU,UAAA;AAAA,QACtB,QAAQ,SAAA,CAAU,MAAA;AAAA,QAClB,GAAG;AAAA,OACL;AAEA,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,yBAAA,CAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,cAAA,CACJ,MAAA,EACA,OAAA,EACA;AAEA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA,CAAI,CAAA,iBAAA,EAAoB,MAAA,CAAO,EAAE,CAAA,CAAA,EAAI;AAAA,QAC/D,GAAG,OAAA;AAAA,QACH,MAAA,EAAQ,EAAE,UAAA,EAAY,SAAA,CAAU,UAAA;AAAW,OAC5C,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,MAAM,kBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,CAAA,uBAAA,CAAA,EAA2B;AAAA,QACzD,GAAG,OAAA;AAAA,QACH,MAAA,EAAQ;AAAA,UACN,GAAG,MAAA;AAAA,UACH,YAAY,SAAA,CAAU;AAAA;AACxB,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,MAAM,oBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,GAAA,CAAI,CAAA,gBAAA,CAAA,EAAoB;AAAA,QAClD,GAAG,OAAA;AAAA,QACH;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAAA;AAAA,IAIA,MAAM,QAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,MAAe;AAAA,QAC7C,IAAA,EAAM,SAAA;AAAA,QACN,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,QAAA,EAAU;AAAA,OACZ,CAAE,CAAA;AAEF,MAAA,MAAM,EAAE,KAAA,EAAO,GAAG,IAAA,EAAK,GAAI,MAAA;AAE3B,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,YAAY,SAAA,CAAU,UAAA;AAAA,QACtB,QAAQ,SAAA,CAAU,MAAA;AAAA,QAClB,KAAA;AAAA,QACA,GAAG;AAAA,OACL;AAEA,MAAA,OAAO,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,CAAA,kBAAA,CAAA,EAAsB,SAAS,OAAO,CAAA;AAAA,IACzE,CAAA;AAAA;AAAA,IAIA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACzE,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,SAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACzE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,UAAA,EAAa,OAAO,EAAE,CAAA,CAAA;AAAA,QAC5D,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,MAAA,EAA6B,OAAA,EAA0B;AACzE,MAAA,OAAO,UAAU,UAAA,CAAW,MAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,UAAA,EAAa,OAAO,EAAE,CAAA,CAAA;AAAA,QAC5D;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,UAAA,CAAW,MAAA,EAA0B,OAAA,EAA0B;AACnE,MAAA,MAAM,WAAA,GAAc,cAAA,CAAe,MAAA,CAAO,EAAA,EAAI,SAAS,CAAA;AACvD,MAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,UAAA,CAAW,GAAA;AAAA,QAC1C,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,UAAA,EAAa,WAAW,CAAA,CAAA;AAAA,QAC9D;AAAA,OACF;AAGA,MAAA,OAAO;AAAA,QACL,GAAG,QAAA;AAAA,QACH,OAAA,GAAU;AACR,UAAA,MAAM,SAAS,SAAA,CAAU,MAAA;AACzB,UAAA,OAAO,QAAA,CAAS,OAAO,MAAM,CAAA,IAAK,SAAS,IAAA,EAAM,EAAA,IAAM,SAAS,IAAA,IAAQ,EAAA;AAAA,QAC1E,CAAA;AAAA,QACA,cAAA,GAAiB;AACf,UAAA,MAAM,SAAS,SAAA,CAAU,MAAA;AACzB,UAAA,OAAO,QAAA,CAAS,cAAc,MAAM,CAAA,IAAK,SAAS,WAAA,EAAa,EAAA,IAAM,SAAS,WAAA,IAAe,EAAA;AAAA,QAC/F;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AACrE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,SAAA,CAAA;AAAA,QACtC;AAAA,UACE,GAAG,OAAA;AAAA,UACH;AAAA;AACF,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,iBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,EAAE,SAAA,EAAW,GAAG,WAAA,EAAY,GAAI,MAAA;AAEtC,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,UAAA,EAAa,SAAS,CAAA,gBAAA,CAAA;AAAA,QAC5D;AAAA,UACE,GAAG,OAAA;AAAA,UACH,MAAA,EAAQ;AAAA,YACN,GAAG,WAAA;AAAA,YACH,KAAA,EAAO,YAAY,KAAA,IAAS;AAAA;AAC9B;AACF,OACF;AAAA,IACF,CAAA;AAAA;AAAA,IAIA,MAAM,cAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,IAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,UAAA,CAAA;AAAA,QACtC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,cAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,WAAA,EAAc,OAAO,EAAE,CAAA,CAAA;AAAA,QAC7D,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,cAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,OAAO,UAAU,UAAA,CAAW,MAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,WAAA,EAAc,OAAO,EAAE,CAAA,CAAA;AAAA,QAC7D;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,WAAA,CAAY,MAAA,EAA2B,OAAA,EAA0B;AAErE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,WAAA,EAAc,OAAO,EAAE,CAAA,CAAA;AAAA,QAC7D;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,YAAA,CAAa,MAAA,EAA4B,OAAA,EAA0B;AACvE,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,UAAU,UAAU,CAAA,UAAA,CAAA;AAAA,QACtC;AAAA,UACE,GAAG,OAAA;AAAA,UACH;AAAA;AACF,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,sBAAA,CACJ,MAAA,EACA,OAAA,EACA;AACA,MAAA,MAAM,EAAE,UAAA,EAAY,GAAG,WAAA,EAAY,GAAI,MAAA;AACvC,MAAA,OAAO,UAAU,UAAA,CAAW,GAAA;AAAA,QAC1B,CAAA,eAAA,EAAkB,SAAA,CAAU,UAAU,CAAA,WAAA,EAAc,UAAU,CAAA,aAAA,CAAA;AAAA,QAC9D;AAAA,UACE,GAAG,OAAA;AAAA,UACH,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,IACF;AAAA,GACF;AACF,CAAA;;;AC1QO,SAAS,kBAAkB,QAAA,EAA0B;AACxD,EAAA,MAAM,eAAA,GAA0C;AAAA,IAC5C,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,MAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,MAAA;AAAA,IACL,GAAA,EAAK,KAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,KAAA;AAAA,IACL,GAAA,EAAK,cAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,oBAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,oBAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,MAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,OAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,KAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,eAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,cAAA;AAAA,IACL,GAAA,EAAK,cAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK;AAAA,GACT;AAEA,EAAA,OAAO,eAAA,CAAgB,QAAA,CAAS,WAAA,EAAa,CAAA,IAAK,QAAA;AACtD;AAKO,IAAM,uBAAA,GAA0B,CAAC,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,OAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAK,CAAA;AAK9F,SAAS,sBAAsB,QAAA,EAA2B;AAC7D,EAAA,OAAO,uBAAA,CAAwB,QAAA,CAAS,QAAA,CAAS,WAAA,EAAa,CAAA;AAClE;;;AC9FA,IAAM,iBAAA,GAAoB;AAAA,EACtB,IAAA,EAAM,KAAA;AAAA,EACN,IAAA,EAAM,KAAA;AAAA,EACN,IAAA,EAAM,KAAA;AAAA,EACN,IAAA,EAAM,KAAA;AAAA,EACN,IAAA,EAAM;AACV,CAAA;AAGO,SAAS,eAAe,WAAA,EAA6B;AACxD,EAAA,OAAA,CAAQ,eAAe,CAAA,IAAK,GAAA;AAChC;AAQO,SAAS,sBAAsB,QAAA,EAA0B;AAC5D,EAAA,OAAO,iBAAA,CAAkB,QAA0C,CAAA,IAAK,KAAA;AAC5E;AAGO,SAAS,oBAAA,CACZ,MAAA,EACA,QAAA,EACA,OAAA,GAII,EAAC,EACC;AACN,EAAA,MAAM,EAAE,WAAA,GAAc,IAAA,EAAM,aAAA,GAAgB,CAAA,EAAG,cAAa,GAAI,OAAA;AAChE,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,OAAA,CAAQ,aAAa,CAAA;AAElD,EAAA,IAAI,CAAC,WAAA,EAAa;AACd,IAAA,OAAO,CAAA,EAAG,aAAa,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,MAAA,GAAS,YAAA,IAAgB,iBAAA,CAAkB,QAAQ,CAAA;AAGzD,EAAA,IAAI,qBAAA,CAAsB,QAAQ,CAAA,EAAG;AACjC,IAAA,OAAO,CAAA,EAAG,aAAa,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,EACrC;AAEA,EAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,aAAa,CAAA,CAAA;AACpC;AAGO,SAAS,WAAA,CACZ,WAAA,EACA,QAAA,EACA,OAAA,GAII,EAAC,EACC;AACN,EAAA,MAAM,KAAA,GAAQ,eAAe,WAAW,CAAA;AACxC,EAAA,OAAO,oBAAA,CAAqB,KAAA,EAAO,QAAA,EAAU,OAAO,CAAA;AACxD;AAGO,SAAS,aAAA,CACZ,OAAA,EACA,OAAA,GAII,EAAC,EACC;AACN,EAAA,IAAI,CAAC,SAAS,OAAO,EAAA;AAErB,EAAA,MAAM,EAAE,WAAA,GAAc,IAAA,EAAM,gBAAgB,CAAA,EAAG,aAAA,GAAgB,OAAM,GAAI,OAAA;AAEzE,EAAA,IAAI,aAAA,EAAe;AACf,IAAA,MAAM,QAAA,GAAW,YAAY,OAAA,CAAQ,QAAA,EAAU,QAAQ,QAAA,EAAU,EAAE,WAAA,EAAa,aAAA,EAAe,CAAA;AAC/F,IAAA,MAAM,QAAA,GAAA,CAAY,OAAA,CAAQ,QAAA,IAAY,CAAA,IAAK,IAAI,WAAA,CAAY,OAAA,CAAQ,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAU,EAAE,WAAA,EAAa,aAAA,EAAe,CAAA,GAAI,IAAA;AACjI,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,GAAA,EAAK,MAAA,IAAU,CAAA;AACzC,IAAA,MAAM,GAAA,GAAM,SAAA,GAAY,CAAA,GAAI,WAAA,CAAY,SAAA,EAAW,OAAA,CAAQ,QAAA,EAAU,EAAE,WAAA,EAAa,aAAA,EAAe,CAAA,GAAI,IAAA;AACvG,IAAA,MAAM,KAAA,GAAQ,YAAY,OAAA,CAAQ,KAAA,EAAO,QAAQ,QAAA,EAAU,EAAE,WAAA,EAAa,aAAA,EAAe,CAAA;AAEzF,IAAA,IAAI,MAAA,GAAS,aAAa,QAAQ,CAAA,CAAA;AAClC,IAAA,IAAI,QAAA,EAAU,MAAA,IAAU,CAAA,aAAA,EAAgB,QAAQ,CAAA,CAAA;AAChD,IAAA,IAAI,GAAA,EAAK,MAAA,IAAU,CAAA,OAAA,EAAU,GAAG,CAAA,CAAA;AAChC,IAAA,MAAA,IAAU,YAAY,KAAK,CAAA,CAAA;AAC3B,IAAA,OAAO,MAAA;AAAA,EACX;AAEA,EAAA,OAAO,WAAA,CAAY,QAAQ,KAAA,EAAO,OAAA,CAAQ,UAAU,EAAE,WAAA,EAAa,eAAe,CAAA;AACtF;AAGO,SAAS,eACZ,MAAA,EACA,QAAA,EACA,eAAA,EACA,OAAA,GAKI,EAAC,EACC;AACN,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,GAAG,OAAO,EAAA;AAE3C,EAAA,MAAM;AAAA,IACF,WAAA,GAAc,IAAA;AAAA,IACd,aAAA,GAAgB,CAAA;AAAA,IAChB,aAAA,GAAgB,IAAA;AAAA,IAChB;AAAA,GACJ,GAAI,OAAA;AAGJ,EAAA,IAAI,QAAQ,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,WAAW,QAAQ,CAAA;AAGlD,EAAA,IAAI,CAAC,SAAS,cAAA,EAAgB;AAC1B,IAAA,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,WAAW,cAAc,CAAA;AAAA,EACxD;AACA,EAAA,IAAI,CAAC,KAAA,EAAO;AACR,IAAA,KAAA,GAAQ,OAAO,CAAC,CAAA;AAAA,EACpB;AAEA,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AAEnB,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,MAAA;AAGJ,EAAA,IAAI,eAAA,EAAiB;AACjB,IAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,MAAA,IAAU,CAAA,CAAE,IAAA,KAAS,KAAA,CAAM,MAAM,CAAA;AAC7F,IAAA,IAAI,YAAY,QAAA,EAAU;AACtB,MAAA,QAAA,GAAW,UAAA,CAAW,QAAA;AACtB,MAAA,MAAA,GAAS,kBAAkB,QAAQ,CAAA;AAAA,IACvC,CAAA,MAAO;AACH,MAAA,QAAA,GAAW,qBAAA,CAAsB,MAAM,MAAM,CAAA;AAC7C,MAAA,MAAA,GAAS,kBAAkB,QAAQ,CAAA;AAAA,IACvC;AAAA,EACJ,CAAA,MAAO;AACH,IAAA,QAAA,GAAW,qBAAA,CAAsB,MAAM,MAAM,CAAA;AAC7C,IAAA,MAAA,GAAS,kBAAkB,QAAQ,CAAA;AAAA,EACvC;AAGA,EAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,KAAA,CAAM,MAAA,IAAU,GAAG,QAAA,EAAU;AAAA,IAC5D,WAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA,EAAc;AAAA,GACjB,CAAA;AAGD,EAAA,IAAI,iBAAiB,KAAA,CAAM,SAAA,IAAa,MAAM,SAAA,IAAa,KAAA,CAAM,UAAU,CAAA,CAAA,EAAI;AAC3E,IAAA,MAAM,kBAAA,GAAqB,WAAA,CAAY,KAAA,CAAM,SAAA,EAAW,QAAA,EAAU;AAAA,MAC9D,WAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA,EAAc;AAAA,KACjB,CAAA;AACD,IAAA,OAAO,CAAA,EAAG,cAAc,CAAA,KAAA,EAAQ,kBAAkB,CAAA,CAAA;AAAA,EACtD;AAEA,EAAA,OAAO,cAAA;AACX;AAGO,SAAS,cAAA,CAAe,MAAA,EAAiB,QAAA,EAAkB,cAAA,EAAiC;AAC/F,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,GAAG,OAAO,CAAA;AAE3C,EAAA,IAAI,QAAQ,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,WAAW,QAAQ,CAAA;AAClD,EAAA,IAAI,CAAC,SAAS,cAAA,EAAgB;AAC1B,IAAA,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,WAAW,cAAc,CAAA;AAAA,EACxD;AACA,EAAA,IAAI,CAAC,KAAA,EAAO;AACR,IAAA,KAAA,GAAQ,OAAO,CAAC,CAAA;AAAA,EACpB;AAGA,EAAA,OAAO,OAAO,MAAA,IAAU,CAAA;AAC5B;AAGO,SAAS,yBACZ,aAAA,EACA,QAAA,EACA,UACA,aAAA,EACA,OAAA,GAUI,EAAC,EACE;AACP,EAAA,MAAM,EAAE,WAAW,CAAA,EAAG,SAAA,GAAY,GAAG,UAAA,GAAa,CAAA,EAAG,WAAU,GAAI,OAAA;AACnE,EAAA,MAAM,KAAA,GAAQ,gBAAgB,QAAA,GAAW,SAAA;AAEzC,EAAA,OAAO;AAAA,IACH,QAAA;AAAA,IACA,MAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAU,aAAA;AAAA,IACV,QAAA,EAAU,CAAA;AAAA,IACV,QAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA,EAAM,aAAA;AAAA,IACN,GAAI,YAAY,CAAA,IAAK;AAAA,MACjB,GAAA,EAAK;AAAA,QACD,MAAA,EAAQ,SAAA;AAAA,QACR,OAAA,EAAS,UAAA;AAAA,QACT,OAAO;AAAC;AACZ,KACJ;AAAA,IACA,GAAI,SAAA,IAAa,EAAE,SAAA;AAAU,GACjC;AACJ;;;ACxNO,SAAS,oBAAoB,KAAA,EAAiC;AACjE,EAAA,IAAI,CAAC,KAAA,EAAO;AACR,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,0BAAA,EAA2B;AAAA,EAC/D;AAEA,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAEvC,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACpB,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,2BAAA,EAA4B;AAAA,EAChE;AAEA,EAAA,IAAI,OAAA,CAAQ,SAAS,EAAA,EAAI;AACrB,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,0BAAA,EAA2B;AAAA,EAC/D;AAEA,EAAA,OAAO,EAAE,SAAS,IAAA,EAAK;AAC3B;;;ACtBO,IAAM,QAAA,GAAW;AAAA,EACpB;AAAA,IACI,KAAA,EAAO,IAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACH,EAAE,KAAA,EAAO,cAAA,EAAgB,KAAA,EAAO,kBAAA,EAAmB;AAAA,MACnD,EAAE,KAAA,EAAO,cAAA,EAAgB,KAAA,EAAO,iBAAA,EAAkB;AAAA,MAClD,EAAE,KAAA,EAAO,eAAA,EAAiB,KAAA,EAAO,gBAAA,EAAiB;AAAA,MAClD,EAAE,KAAA,EAAO,cAAA,EAAgB,KAAA,EAAO,qBAAA;AAAsB;AAC1D,GACJ;AAAA,EACA;AAAA,IACI,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACH,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,eAAA,EAAgB;AAAA,MAC1C,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,cAAA,EAAe;AAAA,MACxC,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,eAAA,EAAgB;AAAA,MAC1C,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,aAAA;AAAc;AAC1C,GACJ;AAAA,EACA;AAAA,IACI,KAAA,EAAO,MAAA;AAAA,IACP,KAAA,EAAO;AAAA,MACH,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,YAAA,EAAa;AAAA,MACtC,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,eAAA,EAAgB;AAAA,MAC5C,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,cAAA,EAAe;AAAA,MACzC,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,YAAA;AAAa;AAC1C;AAER,CAAA;AAEO,SAAS,aAAa,MAAA,EAAiC;AAC1D,EAAA,IAAI;AACA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,cAAA,EAAe,CAAE,iBAAgB,CAAE,QAAA;AAGzD,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AACxB,MAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC5B,QAAA,IAAI,IAAA,CAAK,UAAU,QAAA,EAAU;AACzB,UAAA,OAAO,QAAA;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AAGA,IAAA,OAAO,KAAA;AAAA,EACX,SAAS,CAAA,EAAG;AAER,IAAA,OAAO,KAAA;AAAA,EACX;AACJ;;;AClDA,IAAM,OAAA,GAAU,CAAC,IAAA,EAAM,SAAS,CAAA;AAChC,IAAM,SAAA,GAAoD;AAAA,EACzD,IAAA,EAAM,OAAA;AAAA,EACN,SAAA,EAAW;AACZ,CAAA;AAMO,SAAS,QAAQ,IAAA,EAAsB;AAC7C,EAAA,OAAO,IAAA,CACL,UAAS,CACT,WAAA,GACA,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CACnB,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA,CACtB,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CACnB,OAAA,CAAQ,OAAO,EAAE,CAAA,CACjB,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACpB;AAMO,SAAS,SAAS,IAAA,EAAsB;AAC9C,EAAA,MAAM,aAAA,GAAgB,QAAQ,IAAI,CAAA;AAClC,EAAA,OACC,aAAA,CACE,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA,CAEjB,OAAA;AAAA;AAAA,IAEA,QAAA;AAAA,IACA,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,CAAE,WAAA;AAAY,GAC3D;AAEH;AAQO,SAAS,WAAW,IAAA,EAAsB;AAChD,EAAA,MAAM,aAAA,GAAgB,QAAQ,IAAI,CAAA;AAClC,EAAA,OAAO,aAAA,CACL,OAAA,CAAQ,IAAA,EAAM,GAAG,EACjB,WAAA,EAAY;AACf;AASO,SAAS,UAAA,CAAW,MAA8B,MAAA,EAA0C;AAClG,EAAA,IAAI,YAAA,GAAe,OAAA;AAEnB,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,EAAG;AAC7B,IAAA,YAAA,GAAe,UAAU,MAAM,CAAA;AAAA,EAChC;AAEA,EAAA,OAAO,IAAI,IAAA,CAAK,IAAI,CAAA,CAAE,mBAAmB,YAAA,EAAc;AAAA,IACtD,QAAA,EAAU,KAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,OAAA;AAAA,IACP,GAAA,EAAK;AAAA,GACL,CAAA;AACF;;;ACvEA,eAAsB,gBAAgB,WAAA,EAA0C;AAC/E,EAAA,IAAI,CAAC,aAAa,OAAO,IAAA;AAEzB,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,WAAA,EAAa,KAAK,CAAA;AAE7C,EAAA,IAAI;AACH,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,MAAM,CAAA;AAEnC,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACjB,MAAA,OAAA,CAAQ,MAAM,CAAA,qBAAA,EAAwB,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAC9E,MAAA,OAAO,IAAA;AAAA,IACR;AAEA,IAAA,MAAM,UAAA,GAAa,MAAM,QAAA,CAAS,IAAA,EAAK;AACvC,IAAA,OAAO,UAAA;AAAA,EACR,SAAS,KAAA,EAAO;AACf,IAAA,OAAA,CAAQ,KAAA,CAAM,uBAAuB,KAAK,CAAA;AAC1C,IAAA,OAAO,IAAA;AAAA,EACR;AACD;AAQA,eAAsB,sBAAsB,WAAA,EAAmC;AAC9E,EAAA,IAAI;AACH,IAAA,MAAM,UAAA,GAAa,MAAM,eAAA,CAAgB,WAAW,CAAA;AACpD,IAAA,OAAO,UAAA,IAAc,EAAA;AAAA,EACtB,SAAS,KAAA,EAAO;AACf,IAAA,OAAA,CAAQ,KAAA,CAAM,wCAAwC,KAAK,CAAA;AAC3D,IAAA,OAAO,EAAA;AAAA,EACR;AACD;AASA,eAAsB,oBAAA,CACrB,WAAA,EACA,aAAA,EACA,SAAA,EACgB;AAChB,EAAA,IAAI,CAAC,aAAA,EAAe;AAEpB,EAAA,IAAI;AACH,IAAA,MAAM,UAAA,GAAa,MAAM,eAAA,CAAgB,WAAW,CAAA;AAEpD,IAAA,IAAI,UAAA,EAAY;AACf,MAAA,aAAA,CAAc,SAAA,GAAY,UAAA;AAG1B,MAAA,IAAI,SAAA,EAAW;AACd,QAAA,MAAM,UAAA,GAAa,aAAA,CAAc,aAAA,CAAc,KAAK,CAAA;AACpD,QAAA,IAAI,UAAA,EAAY;AACf,UAAA,UAAA,CAAW,UAAU,GAAA,CAAI,GAAG,SAAA,CAAU,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,QACjD;AAAA,MACD;AAAA,IACD;AAAA,EACD,SAAS,KAAA,EAAO;AACf,IAAA,OAAA,CAAQ,KAAA,CAAM,wBAAwB,KAAK,CAAA;AAAA,EAC5C;AACD;;;AC1DO,IAAM,WAAA,GAAc;AACpB,IAAM,oBAAA,GAAuB;AAAA,EAClC,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF;AAwDO,SAAS,cACd,MAAA,EACA;AACA,EAAA,MAAM,MAAA,GAAS,OAAO,MAAA,IAAU,IAAA;AAChC,EAAA,OAAA,CAAQ,GAAA;AAAA,IACN,CAAA,WAAA,EAAc,WAAW,CAAA,4BAAA,EAA+B,MAAA,CAAO,MAAM,CAAA,cAAA,EAAiB,MAAA,CAAO,UAAU,CAAA,UAAA,EAAa,MAAM,CAAA;AAAA,GAC5H;AAEA,EAAA,MAAM,UAAA,GAAa,iBAAiB,MAAM,CAAA;AAC1C,EAAA,MAAM,UAAA,GAAa,OAAO,UAAA,IAAc,6BAAA;AAExC,EAAA,MAAM,SAAA,GAAuB;AAAA,IAC3B,UAAA;AAAA,IACA,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,UAAA;AAAA,IACA,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,MAAA;AAAA,IACA,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,UAAU,MAAA,CAAO;AAAA,GACnB;AAEA,EAAA,MAAM,OAAA,GAAU,cAAc,SAAS,CAAA;AAEvC,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,SAAA,KAAc,MAAA,GAAY,OAAO,SAAA,GAAY,IAAA;AAEtE,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,IAAA,EAAM,OAAA;AAAA,IACN,QAAA,EAAU,kBAAkB,SAAS,CAAA;AAAA,IACrC,KAAA,EAAO,eAAe,SAAS,CAAA;AAAA,IAC/B,IAAA,EAAM,cAAc,SAAS,CAAA;AAAA,IAC7B,YAAA,EAAc,sBAAsB,SAAS,CAAA;AAAA,IAC7C,SAAA,EAAW,mBAAmB,SAAS,CAAA;AAAA,IACvC,SAAA,EAAW,mBAAmB,SAAS,CAAA;AAAA,IACvC,GAAA,EAAK,aAAa,SAAS,CAAA;AAAA,IAC3B,KAAA,EAAO,eAAe,SAAS,CAAA;AAAA,IAC/B,WAAA,EAAa,qBAAqB,SAAS,CAAA;AAAA,IAE3C,aAAA,EAAe,CAAC,UAAA,KAAuB;AACrC,MAAA,SAAA,CAAU,UAAA,GAAa,UAAA;AAAA,IACzB,CAAA;AAAA,IAEA,aAAA,EAAe,MAAM,SAAA,CAAU,UAAA;AAAA,IAE/B,SAAA,EAAW,CAAC,MAAA,KAAmB;AAC7B,MAAA,SAAA,CAAU,MAAA,GAAS,MAAA;AAAA,IACrB,CAAA;AAAA,IAEA,SAAA,EAAW,MAAM,SAAA,CAAU,MAAA;AAAA,IAE3B,SAAA,EAAW,CAACC,OAAAA,KAAmB;AAC7B,MAAA,SAAA,CAAU,MAAA,GAASA,OAAAA;AAAA,IACrB,CAAA;AAAA,IAEA,SAAA,EAAW,MAAM,SAAA,CAAU,MAAA;AAAA,IAE3B,eAAA,EAAiB,MAAA,CAAO,eAAA,KAAoB,MAAM,KAAA,CAAA;AAAA,IAClD,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,UAAU,MAAA,CAAO,QAAA;AAAA,IAEjB,KAAA,EAAO;AAAA;AAAA,MAEL,WAAA,EAAa,CAAC,UAAA,EAAiB,OAAA,GAAU,SACvC,WAAA,CAAY,UAAA,EAAY,SAAS,UAAU,CAAA;AAAA,MAC7C,aAAA;AAAA,MACA,cAAA;AAAA,MACA,aAAA;AAAA,MACA,iBAAA;AAAA,MACA,oBAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,0BAAA;AAAA,MACA,kBAAA;AAAA;AAAA,MAGA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,aAAA;AAAA,MACA,WAAA;AAAA,MACA,wBAAA;AAAA;AAAA,MAGA,iBAAA;AAAA;AAAA,MAGA,mBAAA;AAAA;AAAA,MAGA,QAAA;AAAA,MACA,YAAA;AAAA;AAAA,MAGA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA;AAAA,MAGA,qBAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OAAA,CAAQ,OAAA,EAAQ,CAAE,IAAA,CAAK,YAAY;AACjC,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,QAAA,EAAS;AACrC,QAAA,IAAI,CAAC,MAAA,CAAO,WAAA,IAAe,CAAC,OAAO,YAAA,EAAc;AAC/C,UAAA,MAAM,MAAA,GAAc,MAAM,UAAA,CAAW,IAAA,CAAK,iBAAA,EAAmB;AAAA,YAC3D,QAAA,EAAU;AAAA,WACX,CAAA;AACD,UAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,KAAA,IAAS,EAAA;AACpD,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,MAAA,CAAO,SAAS,MAAM,CAAA;AAAA,UACxB;AACA,UAAA,OAAA,CAAQ,GAAA;AAAA,YACN,iCAAA;AAAA,YACA,QAAQ,SAAA,GAAY;AAAA,WACtB;AAAA,QACF,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,IAAI,8CAA8C,CAAA;AAAA,QAC5D;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,KAAA,CAAM,yCAAyC,KAAK,CAAA;AAAA,MAC9D;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,GAAA;AACT","file":"index.cjs","sourcesContent":["// Error handling utilities (combined from errorCodes.ts and errorHelpers.ts)\n\n// Comprehensive error code system with both numeric codes and named constants\nexport const ERROR_CODES = {\n  // General errors\n  \"GENERAL.001\": \"GENERAL.BAD_REQUEST\",\n  \"GENERAL.002\": \"GENERAL.VALIDATION_ERROR\",\n  \"GENERAL.003\": \"GENERAL.FORBIDDEN_ERROR\",\n  \"GENERAL.004\": \"GENERAL.INTERNAL_SERVER_ERROR\",\n  \"GENERAL.005\": \"GENERAL.UNAUTHORIZED\",\n  \"GENERAL.006\": \"GENERAL.UNAUTHENTICATED\",\n\n  // Google/OAuth errors\n  \"GOOGLE.001\": \"GOOGLE.INVALID_ORIGIN_URI\",\n  \"GOOGLE.002\": \"GOOGLE.INVALID_REDIRECT_URI\",\n  \"GOOGLE.003\": \"GOOGLE.FAILED_TO_CALL_API\",\n  \"GOOGLE.004\": \"GOOGLE.FAILED_LOGIN\",\n  \"GOOGLE.005\": \"GOOGLE.FAILED_LOGOUT\",\n  \"GOOGLE.006\": \"GOOGLE.FAILED_REFRESH_TOKEN\",\n  \"GOOGLE.007\": \"GOOGLE.INVALID_PROVIDER_PASSED\",\n\n  // User errors\n  \"USER.001\": \"USER.NOT_FOUND\",\n  \"USER.002\": \"USER.FAILED_TO_CREATE\",\n  \"USER.003\": \"USER.FAILED_TO_UPDATE\",\n  \"USER.004\": \"USER.FAILED_TO_DELETE\",\n  \"USER.005\": \"USER.EMAIL_EXISTS\",\n  \"USER.006\": \"USER.FAILED_TO_GET_UPLOAD_URL\",\n\n  // Business errors\n  \"BUSINESS.001\": \"BUSINESS.NOT_FOUND\",\n  \"BUSINESS.002\": \"BUSINESS.FAILED_TO_CREATE\",\n  \"BUSINESS.003\": \"BUSINESS.FAILED_TO_UPDATE\",\n  \"BUSINESS.004\": \"BUSINESS.FAILED_TO_DELETE\",\n  \"BUSINESS.005\": \"BUSINESS.FAILED_TO_GET_UPLOAD_URL\",\n  \"BUSINESS.006\": \"BUSINESS.NAME_REQUIRED\",\n  \"BUSINESS.007\": \"BUSINESS.BUSINESS_ID_REQUIRED\",\n  \"BUSINESS.010\": \"BUSINESS.DESCRIPTION_REQUIRED\",\n  \"BUSINESS.011\": \"BUSINESS.SLUG_INVALID\",\n\n  // Provider errors\n  \"PROVIDER.001\": \"PROVIDER.NOT_FOUND\",\n  \"PROVIDER.002\": \"PROVIDER.FAILED_TO_CREATE\",\n  \"PROVIDER.003\": \"PROVIDER.FAILED_TO_UPDATE\",\n  \"PROVIDER.004\": \"PROVIDER.FAILED_TO_DELETE\",\n  \"PROVIDER.005\": \"PROVIDER.FAILED_TO_GET_UPLOAD_URL\",\n  \"PROVIDER.006\": \"PROVIDER.NAME_REQUIRED\",\n  \"PROVIDER.007\": \"PROVIDER.BUSINESS_ID_REQUIRED\",\n  \"PROVIDER.008\": \"PROVIDER.DESCRIPTION_REQUIRED\",\n};\n\n// Named error constants for direct access\nexport const ERROR_CONSTANTS = {\n  GENERAL: {\n    BAD_REQUEST: \"GENERAL.BAD_REQUEST\",\n    VALIDATION_ERROR: \"GENERAL.VALIDATION_ERROR\",\n    FORBIDDEN_ERROR: \"GENERAL.FORBIDDEN_ERROR\",\n    INTERNAL_SERVER_ERROR: \"GENERAL.INTERNAL_SERVER_ERROR\",\n    UNAUTHORIZED: \"GENERAL.UNAUTHORIZED\",\n    UNAUTHENTICATED: \"GENERAL.UNAUTHENTICATED\",\n  },\n  USER: {\n    NOT_FOUND: \"USER.NOT_FOUND\",\n    FAILED_TO_CREATE: \"USER.FAILED_TO_CREATE\",\n    FAILED_TO_UPDATE: \"USER.FAILED_TO_UPDATE\",\n    FAILED_TO_DELETE: \"USER.FAILED_TO_DELETE\",\n    EMAIL_EXISTS: \"USER.EMAIL_EXISTS\",\n    FAILED_TO_GET_UPLOAD_URL: \"USER.FAILED_TO_GET_UPLOAD_URL\",\n  },\n  BUSINESS: {\n    NOT_FOUND: \"BUSINESS.NOT_FOUND\",\n    FAILED_TO_CREATE: \"BUSINESS.FAILED_TO_CREATE\",\n    FAILED_TO_UPDATE: \"BUSINESS.FAILED_TO_UPDATE\",\n    FAILED_TO_DELETE: \"BUSINESS.FAILED_TO_DELETE\",\n    FAILED_TO_GET_UPLOAD_URL: \"BUSINESS.FAILED_TO_GET_UPLOAD_URL\",\n    NAME_REQUIRED: \"BUSINESS.NAME_REQUIRED\",\n    BUSINESS_ID_REQUIRED: \"BUSINESS.BUSINESS_ID_REQUIRED\",\n    DESCRIPTION_REQUIRED: \"BUSINESS.DESCRIPTION_REQUIRED\",\n    SLUG_INVALID: \"BUSINESS.SLUG_INVALID\",\n  },\n};\n\nexport type ServerError = {\n  message: string;\n  error: string;\n  statusCode: number;\n  validationErrors: {\n    field: string;\n    error: string;\n  }[];\n};\n\nexport type ValidationError = {\n  field: string;\n  error: string;\n};\n\nexport type RequestError = {\n  validationErrors: ValidationError[];\n};\n\n// Utility functions for error handling\nexport function getErrorMessage(code: string): string {\n  return ERROR_CODES[code as keyof typeof ERROR_CODES] || code;\n}\n\nexport function isErrorCode(code: string): boolean {\n  return code in ERROR_CODES;\n}\n\nexport const transformErrors = (zodError: any): ValidationError[] => {\n  const customErrors: ValidationError[] = [];\n\n  if (!zodError.issues) return customErrors;\n\n  zodError.issues.forEach((issue: any) => {\n    const field = issue.path.join(\".\");\n    const error = issue.message;\n\n    if (\n      !customErrors.some(\n        (customError) =>\n          customError.field === field && customError.error === error\n      )\n    ) {\n      customErrors.push({ field, error });\n    }\n  });\n\n  return customErrors;\n};\n\nexport const convertServerErrorToRequestError = (\n  serverError: ServerError,\n  renameRules?: { [key: string]: string }\n): RequestError => {\n  return {\n    ...serverError,\n    validationErrors: serverError.validationErrors.map((validationError) => {\n      const field =\n        renameRules && renameRules[validationError.field]\n          ? renameRules[validationError.field]\n          : validationError.field;\n\n      return {\n        field: field,\n        error: validationError.error || \"GENERAL.VALIDATION_ERROR\",\n      };\n    }),\n  };\n};\n\n// Export for backward compatibility\nexport const errors = ERROR_CONSTANTS;\nexport default ERROR_CODES;\n","/**\n * Query parameter builder utility that maintains exact backward compatibility\n * with existing API parameter encoding patterns\n */\n\nexport interface QueryParams {\n    [key: string]: string | number | boolean | string[] | number[] | null | undefined;\n}\n\n/**\n * Builds a query string from parameters following the exact encoding patterns\n * used by the existing API implementation:\n * - Arrays: JSON.stringify then encodeURIComponent\n * - Strings: encodeURIComponent\n * - Numbers: No encoding\n * - Null/undefined: Skip\n */\nexport function buildQueryString(params: QueryParams): string {\n    const queryParts: string[] = [];\n    \n    Object.entries(params).forEach(([key, value]) => {\n        // Skip null and undefined values\n        if (value === null || value === undefined) {\n            return;\n        }\n        \n        // Handle arrays: JSON.stringify then encode\n        if (Array.isArray(value)) {\n            const jsonString = JSON.stringify(value);\n            queryParts.push(`${key}=${encodeURIComponent(jsonString)}`);\n        }\n        // Handle strings: encode\n        else if (typeof value === 'string') {\n            queryParts.push(`${key}=${encodeURIComponent(value)}`);\n        }\n        // Handle numbers and booleans: no encoding\n        else if (typeof value === 'number' || typeof value === 'boolean') {\n            queryParts.push(`${key}=${value}`);\n        }\n        // Handle objects (in case needed in future): JSON.stringify then encode\n        else if (typeof value === 'object') {\n            const jsonString = JSON.stringify(value);\n            queryParts.push(`${key}=${encodeURIComponent(jsonString)}`);\n        }\n    });\n    \n    return queryParts.length > 0 ? `?${queryParts.join('&')}` : '';\n}\n\n/**\n * Appends query string to a URL\n */\nexport function appendQueryString(url: string, params: QueryParams): string {\n    const queryString = buildQueryString(params);\n    return queryString ? `${url}${queryString}` : url;\n}","import {\n\tconvertServerErrorToRequestError,\n\ttype ServerError\n} from '../utils/errors';\nimport { buildQueryString, type QueryParams } from '../utils/queryParams';\n\nexport interface AuthTokens {\n\taccessToken: string;\n\trefreshToken?: string;\n\tprovider?: string;\n\texpiresAt?: number;\n\tuserId?: string;\n\tisGuest?: boolean;\n}\n\nexport interface HttpClientConfig {\n\tbaseUrl: string;\n\n\tstorageUrl?: string;\n\n\tbusinessId: string;\n\n\tgetToken: () => Promise<AuthTokens> | AuthTokens;\n\n\tsetToken: (tokens: AuthTokens) => void;\n\n\tautoGuest?: boolean;\n\n\tlogout: () => void;\n\n\tnavigate?: (path: string) => void;\n\n\tloginFallbackPath?: string;\n\n\tisAuthenticated?: () => boolean;\n}\n\ntype SuccessCallback<T = any> = (ctx: {\n\tdata: T;\n\tmethod: string;\n\turl: string;\n\tstatus: number;\n\trequest?: any;\n\tdurationMs?: number;\n\trequestId?: string | null;\n}) => void | Promise<void>;\n\ntype ErrorCallback = (ctx: {\n\terror: any;\n\tmethod: string;\n\turl: string;\n\tstatus?: number;\n\trequest?: any;\n\tresponse?: any;\n\tdurationMs?: number;\n\trequestId?: string | null;\n\taborted?: boolean;\n}) => void | Promise<void>;\n\nexport function createHttpClient(cfg: HttpClientConfig) {\n\tconst refreshEndpoint = `${cfg.baseUrl}/v1/users/refresh-access-token`;\n\tlet refreshPromise: Promise<void> | null = null;\n\n\tasync function ensureFreshToken() {\n\t\tif (refreshPromise) {\n\t\t\treturn refreshPromise;\n\t\t}\n\n\t\trefreshPromise = (async () => {\n\t\t\tconst { refreshToken, provider } = await cfg.getToken();\n\t\t\tif (!refreshToken) {\n\t\t\t\tcfg.logout();\n\t\t\t\tconst err: any = new Error('No refresh token available');\n\t\t\t\terr.name = 'ApiError';\n\t\t\t\terr.statusCode = 401;\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\tconst refRes = await fetch(refreshEndpoint, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { Accept: 'application/json', 'Content-Type': 'application/json' },\n\t\t\t\tbody: JSON.stringify({ provider, refreshToken })\n\t\t\t});\n\n\t\t\tif (!refRes.ok) {\n\t\t\t\tcfg.logout();\n\t\t\t\tconst err: any = new Error('Token refresh failed');\n\t\t\t\terr.name = 'ApiError';\n\t\t\t\terr.statusCode = 401;\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\tconst data = await refRes.json();\n\t\t\tcfg.setToken(data);\n\t\t})().finally(() => {\n\t\t\trefreshPromise = null;\n\t\t});\n\n\t\treturn refreshPromise;\n\t}\n\n\tasync function request<T>(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: any,\n\t\toptions?: {\n\t\t\tonSuccess?: SuccessCallback<T>;\n\t\t\tonError?: ErrorCallback;\n\t\t\theaders?: Record<string, string>;\n\t\t\ttransformRequest?: (data: any) => any;\n\t\t\tparams?: QueryParams;\n\t\t\t_retried?: boolean;\n\t\t}\n\t): Promise<T> {\n\t\tif (options?.transformRequest) {\n\t\t\tbody = options.transformRequest(body);\n\t\t}\n\n\t\tconst headers: Record<string, string> = {\n\t\t\tAccept: 'application/json',\n\t\t\t'Content-Type': 'application/json',\n\t\t\t...(options?.headers || {})\n\t\t};\n\n\tlet { accessToken, expiresAt, provider } = await cfg.getToken();\n\n\tconst nowSec = Date.now() / 1000;\n\tif (expiresAt && nowSec > expiresAt) {\n\t\tawait ensureFreshToken();\n\t\tconst tokens = await cfg.getToken();\n\t\taccessToken = tokens.accessToken;\n\t\tprovider = tokens.provider;\n\t}\n\n\tif (accessToken) {\n\t\t// Use X-API-Key header for API tokens, Authorization for JWT/OAuth\n\t\tif (provider === 'API') {\n\t\t\theaders['X-API-Key'] = accessToken;\n\t\t} else {\n\t\t\theaders['Authorization'] = `Bearer ${accessToken}`;\n\t\t}\n\t}\n\n\t\tconst finalPath = options?.params ? path + buildQueryString(options.params) : path;\n\n\t\tconst fetchOpts: any = { method, headers };\n\t\tif (!['GET', 'DELETE'].includes(method) && body !== undefined) {\n\t\t\tfetchOpts.body = JSON.stringify(body);\n\t\t}\n\n\t\tconst fullUrl = `${cfg.baseUrl}${finalPath}`;\n\t\tlet res: Response;\n\t\tlet data: any;\n\t\tconst startedAt = Date.now();\n\n\t\ttry {\n\t\t\tres = await fetch(fullUrl, fetchOpts);\n\t\t} catch (error) {\n\t\t\tconst err: any = new Error(error instanceof Error ? error.message : 'Network request failed');\n\t\t\terr.name = 'NetworkError';\n\t\t\terr.method = method;\n\t\t\terr.url = fullUrl;\nif (options?.onError && method !== 'GET') {\n\t\t\t\tPromise.resolve(\n\t\t\t\t\toptions.onError({ error: err, method, url: fullUrl, aborted: false })\n\t\t\t\t).catch(() => {});\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\n\t\t// Handle 401: refresh and retry once\n\t\tif (res.status === 401 && !options?.['_retried']) {\n\t\t\ttry {\n\t\t\t\tawait ensureFreshToken();\n\t\t\t\tconst tokens = await cfg.getToken();\n\t\t\t\theaders['Authorization'] = `Bearer ${tokens.accessToken}`;\n\t\t\t\tfetchOpts.headers = headers;\n\t\t\t\treturn request<T>(method, path, body, { ...options, _retried: true });\n\t\t\t} catch (refreshError) {\n\t\t\t\t// Fall through to normal error handling\n\t\t\t}\n\t\t}\n\n\t\t// Safe JSON parsing: handle 204, empty body, non-JSON\n\t\ttry {\n\t\t\tconst contentLength = res.headers.get('content-length');\n\t\t\tconst contentType = res.headers.get('content-type');\n\t\t\tif (res.status === 204 || contentLength === '0' || !contentType?.includes('application/json')) {\n\t\t\t\tdata = {};\n\t\t\t} else {\n\t\t\t\tdata = await res.json();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst err: any = new Error('Failed to parse response');\n\t\t\terr.name = 'ParseError';\n\t\t\terr.method = method;\n\t\t\terr.url = fullUrl;\n\t\t\terr.status = res.status;\nif (options?.onError && method !== 'GET') {\n\t\t\t\tPromise.resolve(\n\t\t\t\t\toptions.onError({ error: err, method, url: fullUrl, status: res.status })\n\t\t\t\t).catch(() => {});\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\n\t\tif (!res.ok) {\n\t\t\tconst serverErr: ServerError = data;\n\t\t\tconst reqErr = convertServerErrorToRequestError(serverErr);\n\t\t\tconst err: any = new Error(serverErr.message || 'Request failed');\n\t\t\terr.name = 'ApiError';\n\t\t\terr.statusCode = serverErr.statusCode || res.status;\n\t\t\terr.validationErrors = reqErr.validationErrors;\n\t\t\terr.method = method;\n\t\t\terr.url = fullUrl;\n\t\t\tconst requestId = res.headers.get('x-request-id') || res.headers.get('request-id');\n\t\t\tif (requestId) err.requestId = requestId;\nif (options?.onError && method !== 'GET') {\n\t\t\t\tPromise.resolve(\n\t\t\t\t\toptions.onError({\n\t\t\t\t\t\terror: err,\n\t\t\t\t\t\tmethod,\n\t\t\t\t\t\turl: fullUrl,\n\t\t\t\t\t\tstatus: res.status,\n\t\t\t\t\t\tresponse: serverErr,\n\t\t\t\t\t\trequestId: requestId || null,\n\t\t\t\t\t\tdurationMs: Date.now() - startedAt\n\t\t\t\t\t})\n\t\t\t\t).catch(() => {});\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\nif (options?.onSuccess && method !== 'GET') {\n\t\t\tconst requestId = res.headers.get('x-request-id') || res.headers.get('request-id');\n\t\t\tPromise.resolve(\n\t\t\t\toptions.onSuccess({\n\t\t\t\t\tdata: data as T,\n\t\t\t\t\tmethod,\n\t\t\t\t\turl: fullUrl,\n\t\t\t\t\tstatus: res.status,\n\t\t\t\t\trequestId: requestId || null,\n\t\t\t\t\tdurationMs: Date.now() - startedAt\n\t\t\t\t})\n\t\t\t).catch(() => {});\n\t\t}\n\t\treturn data as T;\n\t}\n\n\treturn {\n\t\tget: <T>(path: string, opts?: any) => request<T>('GET', path, undefined, opts),\n\t\tpost: <T>(path: string, body: any, opts?: any) => request<T>('POST', path, body, opts),\n\t\tput: <T>(path: string, body: any, opts?: any) => request<T>('PUT', path, body, opts),\n\t\tpatch: <T>(path: string, body: any, opts?: any) => request<T>('PATCH', path, body, opts),\n\t\tdelete: <T>(path: string, opts?: any) => request<T>('DELETE', path, undefined, opts)\n\t};\n}\n","import type { ApiConfig } from '../index';\nimport type {\n    UpdateUserProfileParams,\n    LoginUserParams,\n    RegisterUserParams,\n    AddPhoneNumberParams,\n    PhoneNumberConfirmParams,\n    SearchUsersParams,\n    SetRoleParams,\n    ConfirmUserParams,\n    GetLoginUrlParams,\n    ForgotPasswordParams,\n    ResetForgotPasswordParams,\n    ResetPasswordParams,\n    GetMeParams,\n    LogoutParams,\n    UserSubscribeParams,\n    RequestOptions\n} from '../types/api';\n\nexport const createUserApi = (apiConfig: ApiConfig) => {\n    return {\n        // ===== USER PROFILE =====\n\n        async updateUser(params: UpdateUserProfileParams, options?: RequestOptions) {\n            const payload: any = {};\n\n            if (params.name !== undefined) payload.name = params.name;\n            if (params.phoneNumbers !== undefined) payload.phoneNumbers = params.phoneNumbers;\n            if (params.addresses !== undefined) payload.addresses = params.addresses;\n            if (params.apiTokens !== undefined) payload.apiTokens = params.apiTokens;\n\n            return apiConfig.httpClient.put('/v1/users', payload, options);\n        },\n\n        async addPhoneNumber(params: AddPhoneNumberParams, options?: RequestOptions) {\n            return apiConfig.httpClient.post('/v1/users/phone-number', params, options);\n        },\n\n        async phoneNumberConfirm(params: PhoneNumberConfirmParams, options?: RequestOptions) {\n            return apiConfig.httpClient.post('/v1/users/phone-number/confirm', params, options);\n        },\n\n        async getMe(params: GetMeParams, options?: RequestOptions) {\n            return apiConfig.httpClient.get('/v1/users/me', options);\n        },\n\n        async searchUsers(params: SearchUsersParams, options?: RequestOptions) {\n            return apiConfig.httpClient.get('/v1/users/search', {\n                ...options,\n                params: {\n                    ...params,\n                    businessId: apiConfig.businessId\n                }\n            });\n        },\n\n        async setRole(params: SetRoleParams, options?: RequestOptions) {\n            return apiConfig.httpClient.put('/v1/users/set-role', params, options);\n        },\n\n        // ===== AUTHENTICATION =====\n\n        async loginUser(params: LoginUserParams, options?: RequestOptions) {\n            return apiConfig.httpClient.post('/v1/users/login', params, options);\n        },\n\n        async registerUser(params: RegisterUserParams, options?: RequestOptions) {\n            return apiConfig.httpClient.post('/v1/users/register', params, options);\n        },\n\n        async logout(params: LogoutParams, options?: RequestOptions) {\n            return apiConfig.httpClient.post('/v1/users/logout', {}, options);\n        },\n\n        async confirmUser(params: ConfirmUserParams, options?: RequestOptions) {\n            return apiConfig.httpClient.put('/v1/users/confirm', params, options);\n        },\n\n        async getLoginUrl(params: GetLoginUrlParams, options?: RequestOptions) {\n            return apiConfig.httpClient.get('/v1/users/login/url', {\n                ...options,\n                params\n            });\n        },\n\n        // ===== PASSWORD MANAGEMENT =====\n\n        async forgotPassword(params: ForgotPasswordParams, options?: RequestOptions) {\n            return apiConfig.httpClient.post('/v1/users/forgot-password', params, options);\n        },\n\n        async resetForgotPassword(params: ResetForgotPasswordParams, options?: RequestOptions) {\n            return apiConfig.httpClient.post('/v1/users/reset-forgot-password', params, options);\n        },\n\n        async resetPassword(params: ResetPasswordParams, options?: RequestOptions) {\n            return apiConfig.httpClient.post('/v1/users/reset-password', params, options);\n        },\n\n        async subscribe(params: UserSubscribeParams, options?: RequestOptions) {\n            return apiConfig.httpClient.post('/v1/users/subscribe', params, options);\n        }\n    };\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n  CreateBusinessParams,\n  UpdateBusinessParams,\n  DeleteBusinessParams,\n  GetBusinessParams,\n  GetBusinessesParams,\n  GetBusinessParentsParams,\n  TriggerBuildsParams,\n  GetSubscriptionParams,\n  GetSubscriptionPlansParams,\n  SubscribeParams,\n  CreatePortalSessionParams,\n  InviteUserParams,\n  HandleInvitationParams,\n  TestWebhookParams,\n  GetBusinessMediaParams2,\n  SetProviderScheduleParams,\n  ProcessRefundParams,\n  RequestOptions,\n} from \"../types/api\";\n\nexport const createBusinessApi = (apiConfig: ApiConfig) => {\n  return {\n    async createBusiness(\n      params: CreateBusinessParams,\n      options?: RequestOptions\n    ) {\n      return apiConfig.httpClient.post(`/v1/businesses`, params, options);\n    },\n\n    async updateBusiness(\n      params: UpdateBusinessParams,\n      options?: RequestOptions\n    ) {\n      return apiConfig.httpClient.put(\n        `/v1/businesses/${params.id}`,\n        params,\n        options\n      );\n    },\n\n    async deleteBusiness(\n      params: DeleteBusinessParams,\n      options?: RequestOptions\n    ) {\n      return apiConfig.httpClient.delete(\n        `/v1/businesses/${params.id}`,\n        options\n      );\n    },\n\n    async getBusiness(params: GetBusinessParams, options?: RequestOptions) {\n      return apiConfig.httpClient.get(\n        `/v1/businesses/${apiConfig.businessId}`,\n        options\n      );\n    },\n\n    async getBusinesses(params: GetBusinessesParams, options?: RequestOptions) {\n      return apiConfig.httpClient.get(`/v1/businesses`, options);\n    },\n\n    async getBusinessParents(\n      params: GetBusinessParentsParams,\n      options?: RequestOptions\n    ) {\n      return apiConfig.httpClient.get(\n        `/v1/businesses/${apiConfig.businessId}/parents`,\n        options\n      );\n    },\n\n    async triggerBuilds(params: TriggerBuildsParams, options?: RequestOptions) {\n      return apiConfig.httpClient.post(\n        `/v1/businesses/${params.id}/trigger-builds`,\n        {},\n        options\n      );\n    },\n\n    async getSubscriptionPlans(\n      params: GetSubscriptionPlansParams,\n      options?: RequestOptions\n    ) {\n      return apiConfig.httpClient.get(\"/v1/businesses/plans\", options);\n    },\n\n    async getSubscription(\n      params: GetSubscriptionParams,\n      options?: RequestOptions\n    ) {\n      return apiConfig.httpClient.get(\n        `/v1/businesses/${apiConfig.businessId}/subscription`,\n        options\n      );\n    },\n    async subscribe(params: SubscribeParams, options?: RequestOptions) {\n      return apiConfig.httpClient.put(\n        `/v1/businesses/${apiConfig.businessId}/subscribe`,\n        params,\n        options\n      );\n    },\n\n    async createPortalSession(\n      params: CreatePortalSessionParams,\n      options?: RequestOptions\n    ) {\n      return apiConfig.httpClient.post(\n        `/v1/businesses/${apiConfig.businessId}/subscription/portal`,\n        params,\n        options\n      );\n    },\n\n    async inviteUser(params: InviteUserParams, options?: RequestOptions) {\n      return apiConfig.httpClient.post(\n        `/v1/businesses/${apiConfig.businessId}/invitation`,\n        params,\n        options\n      );\n    },\n    async handleInvitation(\n      params: HandleInvitationParams,\n      options?: RequestOptions\n    ) {\n      return apiConfig.httpClient.put(\n        `/v1/businesses/${apiConfig.businessId}/invitation`,\n        params,\n        options\n      );\n    },\n\n    async testWebhook(params: TestWebhookParams, options?: RequestOptions) {\n      return apiConfig.httpClient.post(\n        `/v1/businesses/${apiConfig.businessId}/webhooks/test`,\n        params.webhook,\n        options\n      );\n    },\n\n    async getBusinessMedia(\n      params: GetBusinessMediaParams2,\n      options?: RequestOptions\n    ) {\n      return apiConfig.httpClient.get(`/v1/businesses/${params.id}/media`, {\n        ...options,\n        params: {\n          cursor: params.cursor,\n          limit: params.limit || 20,\n        },\n      });\n    },\n\n    async setProviderSchedule(\n      params: SetProviderScheduleParams,\n      options?: RequestOptions\n    ) {\n      const { id, ...payload } = params;\n      return apiConfig.httpClient.put(\n        `/v1/businesses/${id}/schedules`,\n        payload,\n        options\n      );\n    },\n\n    async processRefund(params: ProcessRefundParams, options?: RequestOptions) {\n      const { id, ...payload } = params;\n      return apiConfig.httpClient.post(\n        `/v1/businesses/${id}/refund`,\n        payload,\n        options\n      );\n    },\n  };\n};\n","import type { ApiConfig } from '../index';\nimport type {\n    UploadBusinessMediaParams,\n    DeleteBusinessMediaParams,\n    GetBusinessMediaParams,\n    UpdateMediaParams,\n    RequestOptions\n} from '../types/api';\n\nexport const createMediaApi = (apiConfig: ApiConfig) => {\n    return {\n        async uploadBusinessMedia(params: UploadBusinessMediaParams, options?: RequestOptions) {\n            const _options = options;\n            const { files = [], urls = [] } = params;\n            const url = `${apiConfig.baseUrl}/v1/businesses/${apiConfig.businessId}/media`;\n\n            const formData = new FormData();\n            files.forEach((file) => formData.append('files', file));\n            urls.forEach((url) => formData.append('files', url));\n\n            const tokens = await apiConfig.getToken();\n            const response = await fetch(url, {\n                method: 'POST',\n                body: formData,\n                headers: {\n                    Authorization: `Bearer ${tokens.accessToken}`\n                }\n            });\n\n            if (!response.ok) {\n                throw new Error('Upload failed, server said no');\n            }\n\n            return await response.json();\n        },\n\n        async deleteBusinessMedia(params: DeleteBusinessMediaParams, options?: RequestOptions) {\n            const { id, mediaId } = params;\n\n            return apiConfig.httpClient.delete(\n                `/v1/businesses/${id}/media/${mediaId}`,\n                options\n            );\n        },\n\n        async getBusinessMedia(params: GetBusinessMediaParams, options?: RequestOptions) {\n            const _options = options;\n            const { cursor = null, limit = 20 } = params;\n            const url = `${apiConfig.baseUrl}/v1/businesses/${apiConfig.businessId}/media`;\n\n            const queryParams: any = { limit };\n            if (cursor) queryParams.cursor = cursor;\n\n            const queryString = new URLSearchParams(queryParams).toString();\n            const response = await fetch(`${url}?${queryString}`);\n\n            if (!response.ok) {\n                const errorData = await response.json().catch(() => null);\n                throw new Error(errorData?.message || 'Failed to fetch media');\n            }\n\n            return await response.json();\n        },\n\n        async updateMedia(params: UpdateMediaParams, options?: RequestOptions) {\n            const { mediaId, ...updateData } = params;\n            \n            return apiConfig.httpClient.put(\n                `/v1/businesses/${apiConfig.businessId}/media/${mediaId}`,\n                updateData,\n                options\n            );\n        }\n    };\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n  CreateRoleParams,\n  UpdateRoleParams,\n  DeleteRoleParams,\n  GetRoleParams,\n  GetRolesParams,\n  RequestOptions,\n} from \"../types/api\";\n\nexport const createRoleApi = (apiConfig: ApiConfig) => {\n  return {\n    async createRole(\n      params: CreateRoleParams,\n      options?: RequestOptions\n    ): Promise<void> {\n      return apiConfig.httpClient.post(`/v1/roles`, params, options);\n    },\n\n    async updateRole(params: UpdateRoleParams, options?: RequestOptions) {\n      return apiConfig.httpClient.put(\n        `/v1/roles/${params.id}`,\n        params,\n        options\n      );\n    },\n\n    async deleteRole(params: DeleteRoleParams, options?: RequestOptions) {\n      return apiConfig.httpClient.delete(`/v1/roles/${params.id}`, options);\n    },\n\n    async getRole(params: GetRoleParams, options?: RequestOptions) {\n      return apiConfig.httpClient.get(`/v1/roles/${params.id}`, options);\n    },\n\n    async getRoles(params: GetRolesParams, options?: RequestOptions) {\n      return apiConfig.httpClient.get(`/v1/roles`, {\n        ...options,\n        params: {\n          action: params.action,\n          businessId: apiConfig.businessId,\n        },\n      });\n    },\n  };\n};\n","import type { ApiConfig } from '../index';\nimport type {\n\tTrackEmailOpenParams,\n\tGetDeliveryStatsParams,\n\tRequestOptions\n} from '../types/api';\n\nexport const createNotificationApi = (apiConfig: ApiConfig) => {\n\treturn {\n\t\tasync trackEmailOpen(params: TrackEmailOpenParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(\n\t\t\t\t`/v1/notifications/track/email/${params.trackingPixelId}`,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync getDeliveryStats(params: GetDeliveryStatsParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(\n\t\t\t\t`/v1/notifications/track/stats/${apiConfig.businessId}`,\n\t\t\t\toptions\n\t\t\t);\n\t\t}\n\t};\n};\n","import type { ApiConfig } from '../index';\nimport type {\n\tCreatePromoCodeParams,\n\tUpdatePromoCodeParams,\n\tDeletePromoCodeParams,\n\tGetPromoCodeParams,\n\tGetPromoCodesParams,\n\tRequestOptions\n} from '../types/api';\n\nexport const createPromoCodeApi = (apiConfig: ApiConfig) => {\n\treturn {\n\t\tasync createPromoCode(params: CreatePromoCodeParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.post(\n\t\t\t\t`/v1/businesses/${apiConfig.businessId}/promo-codes`,\n\t\t\t\tparams,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync updatePromoCode(params: UpdatePromoCodeParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.put(\n\t\t\t\t`/v1/businesses/${apiConfig.businessId}/promo-codes/${params.id}`,\n\t\t\t\tparams,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync deletePromoCode(params: DeletePromoCodeParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.delete(\n\t\t\t\t`/v1/businesses/${apiConfig.businessId}/promo-codes/${params.id}`,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\t\tasync getPromoCode(params: GetPromoCodeParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(\n\t\t\t\t`/v1/businesses/${apiConfig.businessId}/promo-codes/${params.id}`,\n\t\t\t\toptions\n\t\t\t);\n\t\t},\n\n\tasync getPromoCodes(params: GetPromoCodesParams, options?: RequestOptions) {\n\t\treturn apiConfig.httpClient.get(`/v1/businesses/${apiConfig.businessId}/promo-codes`, {\n\t\t\t...options,\n\t\t\tparams\n\t\t});\n\t}\n\t};\n};\n","import type { ApiConfig } from '../index';\nimport type {\n\tGetAnalyticsParams,\n\tRequestOptions\n} from '../types/api';\n\nexport const createAnalyticsApi = (apiConfig: ApiConfig) => {\n\treturn {\n\t\tasync getAnalytics(params: GetAnalyticsParams, options?: RequestOptions) {\n\t\t\treturn apiConfig.httpClient.get(`/v1/analytics/${apiConfig.businessId}`, {\n\t\t\t\t...options,\n\t\t\t\tparams: params\n\t\t\t});\n\t\t}\n\t};\n};\n","import type { ApiConfig } from \"../index\";\n\n/**\n * Entities that support SEO slugs (have seo.slug field in their schema)\n * Only these entities can use slug-based queries with locale\n */\nexport type SeoEnabledEntity = \"product\" | \"service\" | \"collection\" | \"entry\";\n\n/**\n * Entities that ONLY support UUID-based queries (no SEO slugs)\n */\nexport type UuidOnlyEntity = \"order\" | \"reservation\" | \"provider\";\n\n/**\n * Check if a string is a valid UUID (v4 format)\n */\nexport const isUuid = (str: string): boolean => {\n  const uuidRegex =\n    /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n  return uuidRegex.test(str);\n};\n\n/**\n * Auto-format slug queries with businessId:locale:slug pattern for SEO-enabled entities\n *\n * **ONLY use this for entities with SEO support:**\n * - Product (has seo.slug)\n * - Service (has seo.slug)\n * - Collection (has seo.slug)\n * - Entry (has seo.slug)\n *\n * **DO NOT use for:**\n * - Order (UUID only)\n * - Reservation (UUID only)\n * - Provider (UUID only)\n *\n * @param id - The ID or slug to format\n * @param apiConfig - The API configuration containing businessId and locale\n * @returns Formatted ID string\n *\n * Rules:\n * - If it's a UUID, return as-is\n * - If it already contains colons (pre-formatted), return as-is\n * - Otherwise, format as businessId:locale:slug\n *\n * @example\n * // UUID - returns unchanged\n * formatIdOrSlug(\"123e4567-e89b-12d3-a456-426614174000\", config)\n * // => \"123e4567-e89b-12d3-a456-426614174000\"\n *\n * // Pre-formatted - returns unchanged\n * formatIdOrSlug(\"myBusiness:en:website\", config)\n * // => \"myBusiness:en:website\"\n *\n * // Plain slug - auto-formats with businessId:locale:slug\n * formatIdOrSlug(\"website\", config)\n * // => \"businessId:en:website\"\n */\nexport const formatIdOrSlug = (id: string, apiConfig: ApiConfig): string => {\n  // If it's already a UUID, return as-is\n  if (isUuid(id)) {\n    return id;\n  }\n\n  // If it already contains colons, assume it's already formatted\n  if (id.includes(\":\")) {\n    return id;\n  }\n\n  // Otherwise, format as businessId:locale:slug\n  return `${apiConfig.businessId}:${apiConfig.locale}:${id}`;\n};\n","// Block utilities (extracted from index.ts)\n\nexport interface Block {\n    id: string;\n    key: string;\n    type: string;\n    properties: any;\n    value: any;\n}\n\nexport interface Collection {\n    id: string;\n    blocks: Block[];\n}\n\nexport interface CollectionEntry {\n    id: string;\n    collection_id: string;\n    blocks: Block[];\n}\n\n\nexport function getBlockLabel(block: any, locale: string = 'en'): string {\n    if (!block) return \"\";\n\n    if (block.properties?.label) {\n        if (typeof block.properties.label === \"object\") {\n            return (\n                block.properties.label[locale] ||\n                block.properties.label.en ||\n                Object.values(block.properties.label)[0] ||\n                \"\"\n            );\n        }\n        if (typeof block.properties.label === \"string\") {\n            return block.properties.label;\n        }\n    }\n    \n    // Convert key to readable format\n    return block.key?.replace(/_/g, ' ').replace(/\\b\\w/g, (l: string) => l.toUpperCase()) || \"\";\n}\n\n\nexport function formatBlockValue(block: any): string {\n    if (!block || block.value === null || block.value === undefined) {\n        return \"\";\n    }\n\n    switch (block.type) {\n        case \"BOOLEAN\":\n            return block.value ? \"Yes\" : \"No\";\n        case \"NUMBER\":\n            // Handle date/datetime variants\n            if (block.properties?.variant === \"DATE\" || block.properties?.variant === \"DATE_TIME\") {\n                try {\n                    return new Date(block.value).toLocaleDateString();\n                } catch (e) {\n                    return String(block.value);\n                }\n            }\n            return String(block.value);\n        case \"RELATIONSHIP\":\n            if (Array.isArray(block.value) && block.value.length > 0) {\n                const firstValue = block.value[0];\n                if (firstValue && firstValue.mimeType) {\n                    return firstValue.name || firstValue.id || \"Media\";\n                }\n                return firstValue.title || firstValue.name || firstValue.id || \"Entry\";\n            }\n            return String(block.value);\n        default:\n            return String(block.value);\n    }\n}\n\nexport function prepareBlocksForSubmission(formData: any): any[] {\n    const preparedBlocks = [];\n\n    Object.keys(formData).forEach((key) => {\n        if (formData[key] !== null && formData[key] !== undefined) {\n            preparedBlocks.push({\n                key,\n                value: [formData[key]],\n            });\n        }\n    });\n\n    return preparedBlocks;\n}\n\nexport function extractBlockValues(blocks: any[]): Record<string, any> {\n    const values: Record<string, any> = {};\n\n    blocks.forEach((block) => {\n        if (block.value && block.value.length > 0) {\n            values[block.key] = block.value[0];\n        } else {\n            values[block.key] = null;\n        }\n    });\n\n    return values;\n}\n\n// Extract localized text value from a block, handling multilingual content\nexport function getBlockTextValue(block: any, locale: string = 'en'): string {\n    if (!block || !block.value || block.value.length === 0) return '';\n    \n    const firstValue = block.value[0];\n    \n    // Handle multilingual object\n    if (typeof firstValue === 'object' && firstValue !== null) {\n        // Try specified locale first, then 'en', then first available language\n        if (firstValue[locale]) return firstValue[locale];\n        if (firstValue.en) return firstValue.en;\n        const values = Object.values(firstValue);\n        return String(values[0] || '');\n    }\n    \n    // Handle simple string\n    return String(firstValue);\n}\n\n// Legacy functions for backward compatibility\nexport const getBlockValue = (entry: any, blockKey: string) => {\n    if (!entry || !entry.blocks) return null;\n\n    const block = entry.blocks.find((f: any) => f.key === blockKey);\n\n    if (!block || !block.value || block.value.length === 0) return null;\n\n    return block.value[0];\n};\n\nexport const getBlockValues = (entry: any, blockKey: string) => {\n    if (!entry || !entry.blocks) return null;\n\n    const block = entry.blocks.find((f: any) => f.key === blockKey);\n\n    if (!block || !block.value || block.value.length === 0) return null;\n\n    return block.value;\n};\n\nfunction unwrapBlock(block: any, locale: string) {\n    if (!block?.type || block.value === undefined) return block;\n\n    // Nested objects / lists → recurse for every child\n    if (block.type === \"BLOCK\") {\n        return block.value.map((obj: Record<string, any>) => {\n            const parsed: Record<string, any> = {};\n            for (const [k, v] of Object.entries(obj)) {\n                parsed[k] = unwrapBlock(v, locale);\n            }\n            return parsed;\n        });\n    }\n\n    // Primitive leaves (text/number/boolean/media …)\n    const isLocalized = block.type === \"TEXT\";\n    const isList =\n        block.properties?.ui === \"list\" ||\n        (block.properties?.maxValues ?? 1) > 1 ||\n        block.value.length > 1;\n\n    if (isList) {\n        return isLocalized\n            ? block.value.map((v: Record<string, any>) => v[locale] || v[\"en\"])\n            : [...block.value];\n    }\n\n    return isLocalized ? block.value[0][locale] || block.value[0][\"en\"] : block.value[0];\n}\n\nexport const getBlockObjectValues = (entry: any, blockKey: string, locale = \"en\") => {\n    if (!entry) {\n        return [];\n    }\n\n    const values = getBlockValues(entry, blockKey); // top‑level list\n\n    const parsed = values.map((obj: Record<string, any>) => {\n        const res = obj.value.reduce((acc: any, current: any) => {\n            acc[current.key] = unwrapBlock(current, locale);\n\n            return acc;\n        }, {});\n\n        return res;\n    });\n\n    return parsed;\n};\n\nexport const getBlockFromArray = (entry: any, blockKey: string, locale = \"en\") => {\n    if (!entry) {\n        return [];\n    }\n\n    const values = getBlockValues(entry, blockKey); // top‑level list\n\n    return values.reduce((acc: any, current: any) => {\n        acc[current.key] = unwrapBlock(current, locale);\n        return acc;\n    });\n};\n\nexport const getImageUrl = (imageBlock: any, isBlock = true, storageUrl: string = \"https://storage.arky.io/dev\") => {\n    if (!imageBlock) return null;\n\n    // Helper to check if URL is external\n    const isExternalUrl = (url: string) => {\n        return url.startsWith('http://') || url.startsWith('https://');\n    };\n\n    // Handle relationship blocks with media\n    if (imageBlock.type === 'RELATIONSHIP' && Array.isArray(imageBlock.value)) {\n        const mediaValue = imageBlock.value[0];\n        if (mediaValue && mediaValue.mimeType) {\n            // Handle media with resolutions structure\n            if (mediaValue.resolutions && mediaValue.resolutions.original && mediaValue.resolutions.original.url) {\n                const url = mediaValue.resolutions.original.url;\n                return isExternalUrl(url) ? url : `${storageUrl}/${url}`;\n            }\n            \n            // Handle direct URL on media\n            if (mediaValue.url) {\n                return isExternalUrl(mediaValue.url) ? mediaValue.url : `${storageUrl}/${mediaValue.url}`;\n            }\n        }\n        return null;\n    }\n\n    if (isBlock) {\n        if (typeof imageBlock === \"string\") {\n            // Check if it's already a full URL\n            if (isExternalUrl(imageBlock)) {\n                return imageBlock;\n            }\n            return `${storageUrl}/${imageBlock}`;\n        }\n\n        if (imageBlock.url) {\n            // Check if it's already a full URL\n            if (isExternalUrl(imageBlock.url)) {\n                return imageBlock.url;\n            }\n            return `${storageUrl}/${imageBlock.url}`;\n        }\n    }\n\n    if (\n        imageBlock.resolutions &&\n        imageBlock.resolutions.original &&\n        imageBlock.resolutions.original.url\n    ) {\n        const url = imageBlock.resolutions.original.url;\n        // Check if it's already a full URL\n        if (isExternalUrl(url)) {\n            return url;\n        }\n        return `${storageUrl}/${url}`;\n    }\n\n    return null;\n};\n\nexport const translateMap = (labels: any, lang: string, fallback = \"unknown\") => {\n    let parsedLang = \"en\";\n\n    if (lang === \"sr\") {\n        parsedLang = \"bih\";\n    }\n\n    if (!labels) {\n        return fallback;\n    }\n\n    const label = labels[parsedLang];\n    if (!label) {\n        return fallback;\n    }\n\n    return label;\n};","import type { ApiConfig } from \"../index\";\nimport type {\n  CreateCollectionParams,\n  UpdateCollectionParams,\n  DeleteCollectionParams,\n  GetCollectionParams,\n  GetCollectionsParams,\n  GetEntriesParams,\n  CreateEntryParams,\n  UpdateEntryParams,\n  GetCollectionEntryParams,\n  DeleteCollectionEntryParams,\n  GenerateBlocksParams,\n  GetVariableMetadataParams,\n  SendEntryParams,\n  GetCollectionSubscribersParams,\n  RequestOptions,\n} from \"../types/api\";\nimport { formatIdOrSlug } from \"../utils/slug\";\nimport {\n  getBlockFromArray,\n  getBlockObjectValues,\n  getImageUrl,\n} from \"../utils/blocks\";\n\nexport const createCmsApi = (apiConfig: ApiConfig) => {\n  return {\n    // ===== COLLECTIONS =====\n\n    async createCollection(\n      params: CreateCollectionParams,\n      options?: RequestOptions\n    ) {\n      return apiConfig.httpClient.post(\n        `/v1/businesses/${apiConfig.businessId}/collections`,\n        params,\n        options\n      );\n    },\n\n    async updateCollection(\n      params: UpdateCollectionParams,\n      options?: RequestOptions\n    ) {\n      return apiConfig.httpClient.put(\n        `/v1/businesses/${apiConfig.businessId}/collections/${params.id}`,\n        params,\n        options\n      );\n    },\n\n    async deleteCollection(\n      params: DeleteCollectionParams,\n      options?: RequestOptions\n    ) {\n      return apiConfig.httpClient.delete(\n        `/v1/businesses/${apiConfig.businessId}/collections/${params.id}`,\n        options\n      );\n    },\n\n    async getCollection(params: GetCollectionParams, options?: RequestOptions) {\n      const formattedId = formatIdOrSlug(params.id, apiConfig);\n      const response = await apiConfig.httpClient.get(\n        `/v1/businesses/${apiConfig.businessId}/collections/${formattedId}`,\n        options\n      );\n\n      // Add helper methods that automatically use SDK's current locale\n      return {\n        ...response,\n        getBlock(key: string) {\n          return getBlockFromArray(response, key, apiConfig.locale);\n        },\n        getBlockValues(key: string) {\n          return getBlockObjectValues(response, key, apiConfig.locale);\n        },\n        getImage(key: string) {\n          const block = getBlockFromArray(response, key, apiConfig.locale);\n          return getImageUrl(block, true, apiConfig.storageUrl);\n        },\n      };\n    },\n\n    async getCollections(\n      params: GetCollectionsParams,\n      options?: RequestOptions\n    ) {\n      return apiConfig.httpClient.get(\n        `/v1/businesses/${apiConfig.businessId}/collections`,\n        {\n          ...options,\n          params,\n        }\n      );\n    },\n\n    async generateBlocks(\n      params: GenerateBlocksParams,\n      options?: RequestOptions\n    ) {\n      return apiConfig.httpClient.post(\n        `/v1/businesses/${apiConfig.businessId}/collections/blocks/generate`,\n        params,\n        options\n      );\n    },\n\n    // ===== ENTRIES =====\n    // Note: Backend uses /entries NOT /collections/{id}/entries\n\n    async getCollectionEntries(\n      params: GetEntriesParams,\n      options?: RequestOptions\n    ) {\n      const { collectionId, ...queryParams } = params;\n\n      // Convert collectionId to owner format if provided\n      const finalParams = collectionId\n        ? { ...queryParams, owner: `collection:${collectionId}` }\n        : queryParams;\n\n      return apiConfig.httpClient.get(\n        `/v1/businesses/${apiConfig.businessId}/entries`,\n        {\n          ...options,\n          params: finalParams,\n        }\n      );\n    },\n\n    async createCollectionEntry(\n      params: CreateEntryParams,\n      options?: RequestOptions\n    ) {\n      const { collectionId, owner, ...rest } = params;\n\n      // Convert collectionId to owner format if provided\n      const payload = {\n        ...rest,\n        owner:\n          owner || (collectionId ? `collection:${collectionId}` : undefined),\n      };\n\n      return apiConfig.httpClient.post(\n        `/v1/businesses/${apiConfig.businessId}/entries`,\n        payload,\n        options\n      );\n    },\n\n    async updateCollectionEntry(\n      params: UpdateEntryParams,\n      options?: RequestOptions\n    ) {\n      const { id, collectionId, owner, ...rest } = params;\n\n      // Convert collectionId to owner format if provided\n      const payload = {\n        ...rest,\n        owner:\n          owner || (collectionId ? `collection:${collectionId}` : undefined),\n      };\n\n      return apiConfig.httpClient.put(\n        `/v1/businesses/${apiConfig.businessId}/entries/${id}`,\n        payload,\n        options\n      );\n    },\n\n    async deleteCollectionEntry(\n      params: DeleteCollectionEntryParams,\n      options?: RequestOptions\n    ) {\n      return apiConfig.httpClient.delete(\n        `/v1/businesses/${apiConfig.businessId}/entries/${params.id}`,\n        options\n      );\n    },\n\n    async getCollectionEntry(\n      params: GetCollectionEntryParams,\n      options?: RequestOptions\n    ) {\n      const formattedId = formatIdOrSlug(params.id, apiConfig);\n      return apiConfig.httpClient.get(\n        `/v1/businesses/${apiConfig.businessId}/entries/${formattedId}`,\n        options\n      );\n    },\n\n    async sendEntry(params: SendEntryParams, options?: RequestOptions) {\n      const { entryId, scheduledAt } = params;\n\n      return apiConfig.httpClient.post(\n        `/v1/businesses/${apiConfig.businessId}/entries/${entryId}/send`,\n        {\n          businessId: apiConfig.businessId,\n          entryId,\n          scheduledAt: scheduledAt ?? Math.floor(Date.now() / 1000),\n        },\n        options\n      );\n    },\n\n    // ===== VARIABLES / METADATA =====\n\n    async getVariableMetadata(\n      params: GetVariableMetadataParams,\n      options?: RequestOptions\n    ) {\n      return apiConfig.httpClient.get(\n        `/v1/collections/entry-types/${params.entryType}/variables`,\n        options\n      );\n    },\n\n    // ===== COLLECTION SUBSCRIPTIONS =====\n\n    async getCollectionSubscribers(\n      params: GetCollectionSubscribersParams,\n      options?: RequestOptions\n    ) {\n      const formattedId = formatIdOrSlug(params.id, apiConfig);\n      return apiConfig.httpClient.get(\n        `/v1/businesses/${apiConfig.businessId}/collections/${formattedId}/subscribers`,\n        options\n      );\n    },\n  };\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n  CreateProductParams,\n  UpdateProductParams,\n  DeleteProductParams,\n  GetProductParams,\n  GetProductsParams,\n  GetQuoteParams,\n  CheckoutParams,\n  CreateOrderParams,\n  UpdateOrderParams,\n  GetOrderParams,\n  GetOrdersParams,\n  UpdateOrderStatusParams,\n  UpdateOrderPaymentStatusParams,\n  RequestOptions,\n} from \"../types/api\";\n\nimport { formatIdOrSlug } from \"../utils/slug\";\n\nexport const createEshopApi = (apiConfig: ApiConfig) => {\n  return {\n    // ===== PRODUCTS =====\n\n    async createProduct(params: CreateProductParams, options?: RequestOptions) {\n      return apiConfig.httpClient.post(\n        `/v1/businesses/${apiConfig.businessId}/products`,\n        params,\n        options,\n      );\n    },\n\n    async updateProduct(params: UpdateProductParams, options?: RequestOptions) {\n      return apiConfig.httpClient.put(\n        `/v1/businesses/${apiConfig.businessId}/products/${params.id}`,\n        params,\n        options,\n      );\n    },\n\n    async deleteProduct(params: DeleteProductParams, options?: RequestOptions) {\n      return apiConfig.httpClient.delete(\n        `/v1/businesses/${apiConfig.businessId}/products/${params.id}`,\n        options,\n      );\n    },\n\n    async getProduct(params: GetProductParams, options?: RequestOptions) {\n      const formattedId = formatIdOrSlug(params.id, apiConfig);\n      const response = await apiConfig.httpClient.get(\n        `/v1/businesses/${apiConfig.businessId}/products/${formattedId}`,\n        options,\n      );\n\n      // Add helper methods that automatically use SDK's current locale\n      return {\n        ...response,\n        getName() {\n          const locale = apiConfig.locale;\n          return response.name?.[locale] || response.name?.en || response.name || '';\n        },\n        getDescription() {\n          const locale = apiConfig.locale;\n          return response.description?.[locale] || response.description?.en || response.description || '';\n        }\n      };\n    },\n\n    async getProducts(params: GetProductsParams, options?: RequestOptions) {\n      return apiConfig.httpClient.get(\n        `/v1/businesses/${encodeURIComponent(apiConfig.businessId)}/products`,\n        {\n          ...options,\n          params,\n        },\n      );\n    },\n\n    // ===== ORDERS =====\n\n    async createOrder(params: CreateOrderParams, options?: RequestOptions) {\n      return apiConfig.httpClient.post(\n        `/v1/businesses/${apiConfig.businessId}/orders`,\n        params,\n        options,\n      );\n    },\n\n    async updateOrder(params: UpdateOrderParams, options?: RequestOptions) {\n      return apiConfig.httpClient.put(\n        `/v1/businesses/${apiConfig.businessId}/orders/update`,\n        params,\n        options,\n      );\n    },\n\n    async getOrder(params: GetOrderParams, options?: RequestOptions) {\n      // Orders use UUID only - no SEO slug support\n      return apiConfig.httpClient.get(\n        `/v1/businesses/${apiConfig.businessId}/orders/${params.id}`,\n        options,\n      );\n    },\n\n    async getOrders(params: GetOrdersParams, options?: RequestOptions) {\n      return apiConfig.httpClient.get(\n        `/v1/businesses/${apiConfig.businessId}/orders`,\n        {\n          ...options,\n          params,\n        },\n      );\n    },\n\n    async updateOrderStatus(\n      params: UpdateOrderStatusParams,\n      options?: RequestOptions,\n    ) {\n      return apiConfig.httpClient.put(\n        `/v1/businesses/${apiConfig.businessId}/orders/${params.id}/status`,\n        params,\n        options,\n      );\n    },\n\n    async updateOrderPaymentStatus(\n      params: UpdateOrderPaymentStatusParams,\n      options?: RequestOptions,\n    ) {\n      return apiConfig.httpClient.put(\n        `/v1/businesses/${apiConfig.businessId}/orders/${params.id}/payment-status`,\n        params,\n        options,\n      );\n    },\n\n    // ===== PAYMENTS =====\n\n    async getQuote(params: GetQuoteParams, options?: RequestOptions) {\n      const lines = params.items.map((item) => ({\n        type: \"PRODUCT_VARIANT\",\n        productId: item.productId,\n        variantId: item.variantId,\n        quantity: item.quantity,\n      }));\n\n      const { items, ...rest } = params;\n\n      const payload = {\n        businessId: apiConfig.businessId,\n        market: apiConfig.market,\n        lines: lines,\n        ...rest,\n      };\n\n      return apiConfig.httpClient.post(`/v1/payments/quote`, payload, options);\n    },\n\n    async checkout(params: CheckoutParams, options?: RequestOptions) {\n      const payload = {\n        businessId: apiConfig.businessId,\n        market: apiConfig.market,\n        ...params,\n      };\n\n      return apiConfig.httpClient.post(\n        `/v1/businesses/${apiConfig.businessId}/orders/checkout`,\n        payload,\n        options,\n      );\n    },\n  };\n};\n","import type { ApiConfig } from \"../index\";\nimport type {\n  CreateReservationParams,\n  UpdateReservationParams,\n  ReservationCheckoutParams,\n  GetReservationParams,\n  SearchReservationsParams,\n  SearchMyReservationsParams,\n  CreateServiceParams,\n  UpdateServiceParams,\n  DeleteServiceParams,\n  GetServiceParams,\n  GetServicesParams,\n  CreateProviderParams,\n  UpdateProviderParams,\n  DeleteProviderParams,\n  GetProviderParams,\n  GetProvidersParams,\n  GetBusinessServiceWorkingTimeParams,\n  GetAvailableSlotsParams,\n  GetReservationQuoteParams,\n  RequestOptions,\n} from \"../types/api\";\nimport { formatIdOrSlug } from \"../utils/slug\";\n\nexport const createReservationApi = (apiConfig: ApiConfig) => {\n  return {\n    // ===== RESERVATIONS =====\n\n    async createReservation(\n      params: CreateReservationParams,\n      options?: RequestOptions,\n    ) {\n      const payload = {\n        businessId: apiConfig.businessId,\n        market: apiConfig.market,\n        ...params,\n      };\n\n      return apiConfig.httpClient.post(`/v1/reservations`, payload, options);\n    },\n\n    async updateReservation(\n      params: UpdateReservationParams,\n      options?: RequestOptions,\n    ) {\n      const { id, ...payload } = params;\n      return apiConfig.httpClient.put(\n        `/v1/reservations/${id}`,\n        payload,\n        options,\n      );\n    },\n\n    async checkout(\n      params: ReservationCheckoutParams,\n      options?: RequestOptions,\n    ) {\n      const payload = {\n        businessId: apiConfig.businessId,\n        market: apiConfig.market,\n        ...params,\n      };\n\n      return apiConfig.httpClient.post(\n        `/v1/reservations/checkout`,\n        payload,\n        options,\n      );\n    },\n\n    async getReservation(\n      params: GetReservationParams,\n      options?: RequestOptions,\n    ) {\n      // Reservations use UUID only - no SEO slug support\n      return apiConfig.httpClient.get(`/v1/reservations/${params.id}`, {\n        ...options,\n        params: { businessId: apiConfig.businessId },\n      });\n    },\n\n    async searchReservations(\n      params: SearchReservationsParams,\n      options?: RequestOptions,\n    ) {\n      return apiConfig.httpClient.get(`/v1/reservations/search`, {\n        ...options,\n        params: {\n          ...params,\n          businessId: apiConfig.businessId,\n        },\n      });\n    },\n\n    async searchMyReservations(\n      params: SearchMyReservationsParams,\n      options?: RequestOptions,\n    ) {\n      return apiConfig.httpClient.get(`/v1/reservations`, {\n        ...options,\n        params,\n      });\n    },\n\n    // ===== QUOTES =====\n\n    async getQuote(\n      params: GetReservationQuoteParams,\n      options?: RequestOptions,\n    ) {\n      const lines = params.items.map((item: any) => ({\n        type: \"SERVICE\",\n        serviceId: item.serviceId,\n        quantity: 1,\n      }));\n\n      const { items, ...rest } = params;\n\n      const payload = {\n        businessId: apiConfig.businessId,\n        market: apiConfig.market,\n        lines: lines,\n        ...rest,\n      };\n\n      return apiConfig.httpClient.post(`/v1/payments/quote`, payload, options);\n    },\n\n    // ===== SERVICES =====\n\n    async createService(params: CreateServiceParams, options?: RequestOptions) {\n      return apiConfig.httpClient.post(\n        `/v1/businesses/${apiConfig.businessId}/services`,\n        params,\n        options,\n      );\n    },\n\n    async updateService(params: UpdateServiceParams, options?: RequestOptions) {\n      return apiConfig.httpClient.put(\n        `/v1/businesses/${apiConfig.businessId}/services/${params.id}`,\n        params,\n        options,\n      );\n    },\n\n    async deleteService(params: DeleteServiceParams, options?: RequestOptions) {\n      return apiConfig.httpClient.delete(\n        `/v1/businesses/${apiConfig.businessId}/services/${params.id}`,\n        options,\n      );\n    },\n\n    async getService(params: GetServiceParams, options?: RequestOptions) {\n      const formattedId = formatIdOrSlug(params.id, apiConfig);\n      const response = await apiConfig.httpClient.get(\n        `/v1/businesses/${apiConfig.businessId}/services/${formattedId}`,\n        options,\n      );\n\n      // Add helper methods that automatically use SDK's current locale\n      return {\n        ...response,\n        getName() {\n          const locale = apiConfig.locale;\n          return response.name?.[locale] || response.name?.en || response.name || '';\n        },\n        getDescription() {\n          const locale = apiConfig.locale;\n          return response.description?.[locale] || response.description?.en || response.description || '';\n        }\n      };\n    },\n\n    async getServices(params: GetServicesParams, options?: RequestOptions) {\n      return apiConfig.httpClient.get(\n        `/v1/businesses/${apiConfig.businessId}/services`,\n        {\n          ...options,\n          params,\n        },\n      );\n    },\n\n    async getAvailableSlots(\n      params: GetAvailableSlotsParams,\n      options?: RequestOptions,\n    ) {\n      const { serviceId, ...queryParams } = params;\n\n      return apiConfig.httpClient.get(\n        `/v1/businesses/${apiConfig.businessId}/services/${serviceId}/available-slots`,\n        {\n          ...options,\n          params: {\n            ...queryParams,\n            limit: queryParams.limit || 1000,\n          },\n        },\n      );\n    },\n\n    // ===== PROVIDERS =====\n\n    async createProvider(\n      params: CreateProviderParams,\n      options?: RequestOptions,\n    ) {\n      return apiConfig.httpClient.post(\n        `/v1/businesses/${apiConfig.businessId}/providers`,\n        params,\n        options,\n      );\n    },\n\n    async updateProvider(\n      params: UpdateProviderParams,\n      options?: RequestOptions,\n    ) {\n      return apiConfig.httpClient.put(\n        `/v1/businesses/${apiConfig.businessId}/providers/${params.id}`,\n        params,\n        options,\n      );\n    },\n\n    async deleteProvider(\n      params: DeleteProviderParams,\n      options?: RequestOptions,\n    ) {\n      return apiConfig.httpClient.delete(\n        `/v1/businesses/${apiConfig.businessId}/providers/${params.id}`,\n        options,\n      );\n    },\n\n    async getProvider(params: GetProviderParams, options?: RequestOptions) {\n      // Providers use UUID only - no SEO slug support\n      return apiConfig.httpClient.get(\n        `/v1/businesses/${apiConfig.businessId}/providers/${params.id}`,\n        options,\n      );\n    },\n\n    async getProviders(params: GetProvidersParams, options?: RequestOptions) {\n      return apiConfig.httpClient.get(\n        `/v1/businesses/${apiConfig.businessId}/providers`,\n        {\n          ...options,\n          params: params,\n        },\n      );\n    },\n\n    async getProviderWorkingTime(\n      params: GetBusinessServiceWorkingTimeParams,\n      options?: RequestOptions,\n    ) {\n      const { providerId, ...queryParams } = params;\n      return apiConfig.httpClient.get(\n        `/v1/businesses/${apiConfig.businessId}/providers/${providerId}/working-time`,\n        {\n          ...options,\n          params: queryParams,\n        },\n      );\n    },\n  };\n};\n","/**\n * Maps currency codes to their display symbols\n */\nexport function getCurrencySymbol(currency: string): string {\n    const currencySymbols: Record<string, string> = {\n        USD: '$',\n        EUR: '€',\n        GBP: '£',\n        CAD: 'C$',\n        AUD: 'A$',\n        JPY: '¥',\n        CHF: 'CHF',\n        SEK: 'kr',\n        NOK: 'kr',\n        DKK: 'kr',\n        PLN: 'zł',\n        CZK: 'Kč',\n        HUF: 'Ft',\n        RON: 'lei',\n        BGN: 'лв',\n        HRK: 'kn',\n        RSD: 'дин',\n        BAM: 'KM',\n        MKD: 'ден',\n        ALL: 'L',\n        TRY: '₺',\n        RUB: '₽',\n        UAH: '₴',\n        BYN: 'Br',\n        CNY: '¥',\n        INR: '₹',\n        KRW: '₩',\n        THB: '฿',\n        VND: '₫',\n        SGD: 'S$',\n        MYR: 'RM',\n        IDR: 'Rp',\n        PHP: '₱',\n        BRL: 'R$',\n        ARS: '$',\n        CLP: '$',\n        COP: '$',\n        PEN: 'S/',\n        MXN: '$',\n        ZAR: 'R',\n        EGP: 'E£',\n        NGN: '₦',\n        KES: 'KSh',\n        GHS: '₵',\n        MAD: 'DH',\n        TND: 'د.ت',\n        DZD: 'د.ج',\n        LYD: 'ل.د',\n        AED: 'د.إ',\n        SAR: 'ر.س',\n        QAR: 'ر.ق',\n        KWD: 'د.ك',\n        BHD: 'ب.د',\n        OMR: 'ر.ع',\n        JOD: 'د.أ',\n        LBP: 'ل.ل',\n        SYP: 'ل.س',\n        IQD: 'ع.د',\n        IRR: '﷼',\n        AFN: '؋',\n        PKR: '₨',\n        LKR: '₨',\n        NPR: '₨',\n        BDT: '৳',\n        MMK: 'K',\n        LAK: '₭',\n        KHR: '៛',\n        MNT: '₮',\n        KZT: '₸',\n        UZS: 'лв',\n        KGS: 'лв',\n        TJS: 'SM',\n        TMT: 'T',\n        AZN: '₼',\n        GEL: '₾',\n        AMD: '֏',\n        BYR: 'p.',\n        MDL: 'L'\n    };\n\n    return currencySymbols[currency.toUpperCase()] || currency;\n}\n\n/**\n * List of currencies where the symbol appears after the amount\n */\nexport const SYMBOL_AFTER_CURRENCIES = ['SEK', 'NOK', 'DKK', 'PLN', 'CZK', 'HUF', 'RON', 'BGN', 'HRK'];\n\n/**\n * Check if currency symbol should be placed after the amount\n */\nexport function isSymbolAfterCurrency(currency: string): boolean {\n    return SYMBOL_AFTER_CURRENCIES.includes(currency.toUpperCase());\n}","// Price formatting utilities - Centralized currency and price operations\nimport type { Payment, PaymentMethodType, Price } from '../types';\nimport { getCurrencySymbol, isSymbolAfterCurrency } from './currency';\n\nconst MARKET_CURRENCIES = {\n    'US': 'USD',\n    'EU': 'EUR',\n    'UK': 'GBP',\n    'CA': 'CAD',\n    'AU': 'AUD'\n} as const;\n\n// Convert minor units (cents) to major units (dollars)\nexport function convertToMajor(minorAmount: number): number {\n    return (minorAmount ?? 0) / 100;\n}\n\n// Convert major units to minor units\nexport function convertToMinor(majorAmount: number): number {\n    return Math.round((majorAmount ?? 0) * 100);\n}\n\n// Get currency from market ID\nexport function getCurrencyFromMarket(marketId: string): string {\n    return MARKET_CURRENCIES[marketId as keyof typeof MARKET_CURRENCIES] || 'USD';\n}\n\n// Format currency amount with symbol (locale-aware positioning)\nexport function formatCurrencyAmount(\n    amount: number,\n    currency: string,\n    options: {\n        showSymbols?: boolean;\n        decimalPlaces?: number;\n        customSymbol?: string;\n    } = {}\n): string {\n    const { showSymbols = true, decimalPlaces = 2, customSymbol } = options;\n    const roundedAmount = amount.toFixed(decimalPlaces);\n\n    if (!showSymbols) {\n        return `${roundedAmount} ${currency}`;\n    }\n\n    const symbol = customSymbol || getCurrencySymbol(currency);\n\n    // Use locale-specific symbol positioning\n    if (isSymbolAfterCurrency(currency)) {\n        return `${roundedAmount} ${symbol}`;\n    }\n\n    return `${symbol}${roundedAmount}`;\n}\n\n// Format minor units with currency\nexport function formatMinor(\n    amountMinor: number,\n    currency: string,\n    options: {\n        showSymbols?: boolean;\n        decimalPlaces?: number;\n        customSymbol?: string;\n    } = {}\n): string {\n    const major = convertToMajor(amountMinor);\n    return formatCurrencyAmount(major, currency, options);\n}\n\n// Format Payment structure for display\nexport function formatPayment(\n    payment: Payment,\n    options: {\n        showSymbols?: boolean;\n        decimalPlaces?: number;\n        showBreakdown?: boolean;\n    } = {}\n): string {\n    if (!payment) return '';\n\n    const { showSymbols = true, decimalPlaces = 2, showBreakdown = false } = options;\n\n    if (showBreakdown) {\n        const subtotal = formatMinor(payment.subtotal, payment.currency, { showSymbols, decimalPlaces });\n        const discount = (payment.discount ?? 0) > 0 ? formatMinor(payment.discount, payment.currency, { showSymbols, decimalPlaces }) : null;\n        const taxAmount = payment.tax?.amount ?? 0;\n        const tax = taxAmount > 0 ? formatMinor(taxAmount, payment.currency, { showSymbols, decimalPlaces }) : null;\n        const total = formatMinor(payment.total, payment.currency, { showSymbols, decimalPlaces });\n\n        let result = `Subtotal: ${subtotal}`;\n        if (discount) result += `, Discount: -${discount}`;\n        if (tax) result += `, Tax: ${tax}`;\n        result += `, Total: ${total}`;\n        return result;\n    }\n\n    return formatMinor(payment.total, payment.currency, { showSymbols, decimalPlaces });\n}\n\n// Format market-based prices (from product variants)\nexport function getMarketPrice(\n    prices: Price[],\n    marketId: string,\n    businessMarkets?: any[],\n    options: {\n        showSymbols?: boolean;\n        decimalPlaces?: number;\n        showCompareAt?: boolean;\n        fallbackMarket?: string;\n    } = {}\n): string {\n    if (!prices || prices.length === 0) return '';\n\n    const {\n        showSymbols = true,\n        decimalPlaces = 2,\n        showCompareAt = true,\n        fallbackMarket,\n    } = options;\n\n    // Find price for the specific market\n    let price = prices.find(p => p.market === marketId);\n\n    // Fallback to fallback market (if provided) or first available\n    if (!price && fallbackMarket) {\n        price = prices.find(p => p.market === fallbackMarket);\n    }\n    if (!price) {\n        price = prices[0];\n    }\n\n    if (!price) return '';\n\n    let currency: string;\n    let symbol: string;\n\n    // If we have business markets, use the currency directly from market data\n    if (businessMarkets) {\n        const marketData = businessMarkets.find(m => m.id === price.market || m.code === price.market);\n        if (marketData?.currency) {\n            currency = marketData.currency;\n            symbol = getCurrencySymbol(currency);\n        } else {\n            currency = getCurrencyFromMarket(price.market);\n            symbol = getCurrencySymbol(currency);\n        }\n    } else {\n        currency = getCurrencyFromMarket(price.market);\n        symbol = getCurrencySymbol(currency);\n    }\n\n    // Format price with custom symbol\n    const formattedPrice = formatMinor(price.amount ?? 0, currency, {\n        showSymbols,\n        decimalPlaces,\n        customSymbol: symbol\n    });\n\n    // Add compare-at price if available\n    if (showCompareAt && price.compareAt && price.compareAt > (price.amount ?? 0)) {\n        const formattedCompareAt = formatMinor(price.compareAt, currency, {\n            showSymbols,\n            decimalPlaces,\n            customSymbol: symbol\n        });\n        return `${formattedPrice} was ${formattedCompareAt}`;\n    }\n\n    return formattedPrice;\n}\n\n// Get price amount from market-based prices (for calculations)\nexport function getPriceAmount(prices: Price[], marketId: string, fallbackMarket?: string): number {\n    if (!prices || prices.length === 0) return 0;\n\n    let price = prices.find(p => p.market === marketId);\n    if (!price && fallbackMarket) {\n        price = prices.find(p => p.market === fallbackMarket);\n    }\n    if (!price) {\n        price = prices[0];\n    }\n\n    // Amounts are stored in minor units (e.g., cents)\n    return price?.amount || 0;\n}\n\n// Create Payment structure for checkout (all amounts in minor units)\nexport function createPaymentForCheckout(\n    subtotalMinor: number,\n    marketId: string,\n    currency: string,\n    paymentMethod: any,\n    options: {\n        discount?: number;\n        taxAmount?: number;\n        taxRateBps?: number;\n        promoCode?: {\n            id: string;\n            code: string;\n            type: string;\n            value: number;\n        };\n    } = {}\n): Payment {\n    const { discount = 0, taxAmount = 0, taxRateBps = 0, promoCode } = options;\n    const total = subtotalMinor - discount + taxAmount;\n\n    return {\n        currency,\n        market: marketId,\n        subtotal: subtotalMinor,\n        shipping: 0,\n        discount,\n        total,\n        type: paymentMethod,\n        ...(taxAmount > 0 && {\n            tax: {\n                amount: taxAmount,\n                rateBps: taxRateBps,\n                lines: [],\n            },\n        }),\n        ...(promoCode && { promoCode }),\n    };\n}\n","// Validation utilities\n\nexport interface ValidationResult {\n    isValid: boolean;\n    error?: string;\n}\n\n// Phone number validation\nexport function validatePhoneNumber(phone: string): ValidationResult {\n    if (!phone) {\n        return { isValid: false, error: 'Phone number is required' };\n    }\n    \n    const cleaned = phone.replace(/\\D/g, '');\n    \n    if (cleaned.length < 8) {\n        return { isValid: false, error: 'Phone number is too short' };\n    }\n    \n    if (cleaned.length > 15) {\n        return { isValid: false, error: 'Phone number is too long' };\n    }\n    \n    return { isValid: true };\n}\n\n// Email validation\nexport function validateEmail(email: string): ValidationResult {\n    if (!email) {\n        return { isValid: false, error: 'Email is required' };\n    }\n    \n    const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n    \n    if (!emailRegex.test(email)) {\n        return { isValid: false, error: 'Please enter a valid email address' };\n    }\n    \n    return { isValid: true };\n}\n\n// Verification code validation (4-digit codes)\nexport function validateVerificationCode(code: string): ValidationResult {\n    if (!code) {\n        return { isValid: false, error: 'Verification code is required' };\n    }\n    \n    const cleaned = code.replace(/\\D/g, '');\n    \n    if (cleaned.length !== 4) {\n        return { isValid: false, error: 'Please enter a 4-digit verification code' };\n    }\n    \n    return { isValid: true };\n}\n\n// Generic required field validation\nexport function validateRequired(value: any, fieldName: string = 'This field'): ValidationResult {\n    if (value === null || value === undefined || value === '') {\n        return { isValid: false, error: `${fieldName} is required` };\n    }\n    \n    return { isValid: true };\n}","// Timezone utilities (moved from Reservation folder)\n\nexport const tzGroups = [\n    {\n        label: \"US\",\n        zones: [\n            { label: \"Eastern Time\", value: \"America/New_York\" },\n            { label: \"Central Time\", value: \"America/Chicago\" },\n            { label: \"Mountain Time\", value: \"America/Denver\" },\n            { label: \"Pacific Time\", value: \"America/Los_Angeles\" },\n        ],\n    },\n    {\n        label: \"Europe\",\n        zones: [\n            { label: \"London\", value: \"Europe/London\" },\n            { label: \"Paris\", value: \"Europe/Paris\" },\n            { label: \"Berlin\", value: \"Europe/Berlin\" },\n            { label: \"Rome\", value: \"Europe/Rome\" },\n        ],\n    },\n    {\n        label: \"Asia\",\n        zones: [\n            { label: \"Tokyo\", value: \"Asia/Tokyo\" },\n            { label: \"Shanghai\", value: \"Asia/Shanghai\" },\n            { label: \"Mumbai\", value: \"Asia/Kolkata\" },\n            { label: \"Dubai\", value: \"Asia/Dubai\" },\n        ],\n    },\n];\n\nexport function findTimeZone(groups: typeof tzGroups): string {\n    try {\n        const detected = Intl.DateTimeFormat().resolvedOptions().timeZone;\n        \n        // Check if detected timezone is in our list\n        for (const group of groups) {\n            for (const zone of group.zones) {\n                if (zone.value === detected) {\n                    return detected;\n                }\n            }\n        }\n        \n        // Fallback to UTC if not found\n        return \"UTC\";\n    } catch (e) {\n        // Fallback to UTC if detection fails\n        return \"UTC\";\n    }\n}","// Define locales inline since we don't have @lib/i18n in SDK\nconst locales = ['en', 'sr-latn'] as const;\nconst localeMap: Record<typeof locales[number], string> = {\n\t'en': 'en-US',\n\t'sr-latn': 'sr-RS'\n};\n\n/**\n * * returns \"slugified\" text.\n * @param text: string - text to slugify\n */\nexport function slugify(text: string): string {\n\treturn text\n\t\t.toString()\n\t\t.toLowerCase() // convert to lowercase\n\t\t.replace(/\\s+/g, \"-\") // replace spaces with -\n\t\t.replace(/[^\\w-]+/g, \"\") // remove all non-word chars\n\t\t.replace(/--+/g, \"-\") // replace multiple dashes with single dash\n\t\t.replace(/^-+/, \"\") // trim dash from start of text\n\t\t.replace(/-+$/, \"\"); // trim dash from end of text\n}\n\n/**\n * * returns \"humanized\" text. runs slugify() and then replaces - with space and upper case first letter of every word, and lower case the rest\n * @param text: string - text to humanize\n */\nexport function humanize(text: string): string {\n\tconst slugifiedText = slugify(text);\n\treturn (\n\t\tslugifiedText\n\t\t\t.replace(/-/g, \" \") // replace \"-\" with space\n\t\t\t// .toLowerCase();\n\t\t\t.replace(\n\t\t\t\t// upper case first letter of every word, and lower case the rest\n\t\t\t\t/\\w\\S*/g,\n\t\t\t\t(w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase(),\n\t\t\t)\n\t);\n}\n\n// --------------------------------------------------------\n/**\n * * returns \"categorified\" text. runs slugify() and then replaces - with space and upper cases everything\n * @param text: string - text to categorify\n * @returns string - categorified text\n */\nexport function categorify(text: string): string {\n\tconst slugifiedText = slugify(text);\n\treturn slugifiedText\n\t\t.replace(/-/g, \" \") // replace \"-\" with space\n\t\t.toUpperCase();\n}\n\n// --------------------------------------------------------\n/**\n * * returns a nicely formatted string of the date passed\n * @param date: string | number | Date - date to format\n * @param locale: string - locale to format the date in\n * @returns string - formatted date\n */\nexport function formatDate(date: string | number | Date, locale: (typeof locales)[number]): string {\n\tlet localeString = \"en-US\";\n\n\tif (locales.includes(locale)) {\n\t\tlocaleString = localeMap[locale];\n\t}\n\n\treturn new Date(date).toLocaleDateString(localeString, {\n\t\ttimeZone: \"UTC\",\n\t\tyear: \"numeric\",\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t});\n}","import { getImageUrl } from \"./blocks\";\n\nexport async function fetchSvgContent(mediaObject: any): Promise<string | null> {\n\tif (!mediaObject) return null;\n\n\tconst svgUrl = getImageUrl(mediaObject, false);\n\n\ttry {\n\t\tconst response = await fetch(svgUrl);\n\n\t\tif (!response.ok) {\n\t\t\tconsole.error(`Failed to fetch SVG: ${response.status} ${response.statusText}`);\n\t\t\treturn null;\n\t\t}\n\n\t\tconst svgContent = await response.text();\n\t\treturn svgContent;\n\t} catch (error) {\n\t\tconsole.error(\"Error fetching SVG:\", error);\n\t\treturn null;\n\t}\n}\n\n/**\n * Server-side helper for Astro components to fetch SVG content during SSR\n *\n * @param mediaObject The media object from the CMS\n * @returns The SVG content as a string, or empty string on failure\n */\nexport async function getSvgContentForAstro(mediaObject: any): Promise<string> {\n\ttry {\n\t\tconst svgContent = await fetchSvgContent(mediaObject);\n\t\treturn svgContent || \"\";\n\t} catch (error) {\n\t\tconsole.error(\"Error getting SVG content for Astro:\", error);\n\t\treturn \"\";\n\t}\n}\n\n/**\n * Client-side helper to fetch and inject SVG content into DOM elements\n *\n * @param mediaObject The media object from the CMS\n * @param targetElement The DOM element to inject the SVG into\n * @param className Optional CSS class to add to the SVG\n */\nexport async function injectSvgIntoElement(\n\tmediaObject: any,\n\ttargetElement: HTMLElement,\n\tclassName?: string,\n): Promise<void> {\n\tif (!targetElement) return;\n\n\ttry {\n\t\tconst svgContent = await fetchSvgContent(mediaObject);\n\n\t\tif (svgContent) {\n\t\t\ttargetElement.innerHTML = svgContent;\n\n\t\t\t// Add class if provided\n\t\t\tif (className) {\n\t\t\t\tconst svgElement = targetElement.querySelector(\"svg\");\n\t\t\t\tif (svgElement) {\n\t\t\t\t\tsvgElement.classList.add(...className.split(\" \"));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\"Error injecting SVG:\", error);\n\t}\n}","// Export only types, not implementations\nexport type {\n  ApiResponse,\n  EshopCartItem,\n  EshopStoreState,\n  ReservationStoreState,\n  ReservationCartItem,\n  Business,\n  Block,\n  Price,\n} from \"./types\";\n\nexport const SDK_VERSION = \"0.3.44\";\nexport const SUPPORTED_FRAMEWORKS = [\n  \"astro\",\n  \"react\",\n  \"vue\",\n  \"svelte\",\n  \"vanilla\",\n] as const;\n\nexport interface ApiConfig {\n  httpClient: any;\n  businessId: string;\n  storageUrl: string;\n  baseUrl: string;\n  market: string;\n  locale: string;\n  setToken: (tokens: any) => void;\n  getToken: () => Promise<any> | any;\n}\n\nimport {\n  createHttpClient,\n  type HttpClientConfig,\n} from \"./services/createHttpClient\";\nimport { createUserApi } from \"./api/user\";\nimport { createBusinessApi } from \"./api/business\";\nimport { createMediaApi } from \"./api/media\";\nimport { createRoleApi } from \"./api/role\";\nimport { createNotificationApi } from \"./api/notification\";\nimport { createPromoCodeApi } from \"./api/promoCode\";\nimport { createAnalyticsApi } from \"./api/analytics\";\nimport { createCmsApi } from \"./api/cms\";\nimport { createEshopApi } from \"./api/eshop\";\nimport { createReservationApi } from \"./api/reservation\";\nimport {\n  getImageUrl,\n  getBlockValue,\n  getBlockValues,\n  getBlockLabel,\n  getBlockTextValue,\n  getBlockObjectValues,\n  getBlockFromArray,\n  formatBlockValue,\n  prepareBlocksForSubmission,\n  extractBlockValues,\n} from \"./utils/blocks\";\nimport {\n  getMarketPrice,\n  getPriceAmount,\n  formatPayment,\n  formatMinor,\n  createPaymentForCheckout,\n} from \"./utils/price\";\nimport { getCurrencySymbol } from \"./utils/currency\";\nimport { validatePhoneNumber } from \"./utils/validation\";\nimport { tzGroups, findTimeZone } from \"./utils/timezone\";\nimport { slugify, humanize, categorify, formatDate } from \"./utils/text\";\nimport {\n  getSvgContentForAstro,\n  fetchSvgContent,\n  injectSvgIntoElement,\n} from \"./utils/svg\";\n\nexport function createArkySDK(\n  config: HttpClientConfig & { market: string; locale?: string }\n) {\n  const locale = config.locale || \"en\";\n  console.log(\n    `[Arky SDK v${SDK_VERSION}] Initializing with market: ${config.market}, businessId: ${config.businessId}, locale: ${locale}`\n  );\n\n  const httpClient = createHttpClient(config);\n  const storageUrl = config.storageUrl || \"https://storage.arky.io/dev\";\n\n  const apiConfig: ApiConfig = {\n    httpClient,\n    businessId: config.businessId,\n    storageUrl,\n    baseUrl: config.baseUrl,\n    market: config.market,\n    locale,\n    setToken: config.setToken,\n    getToken: config.getToken,\n  };\n\n  const userApi = createUserApi(apiConfig);\n\n  const autoGuest = config.autoGuest !== undefined ? config.autoGuest : true;\n\n  const sdk = {\n    user: userApi,\n    business: createBusinessApi(apiConfig),\n    media: createMediaApi(apiConfig),\n    role: createRoleApi(apiConfig),\n    notification: createNotificationApi(apiConfig),\n    promoCode: createPromoCodeApi(apiConfig),\n    analytics: createAnalyticsApi(apiConfig),\n    cms: createCmsApi(apiConfig),\n    eshop: createEshopApi(apiConfig),\n    reservation: createReservationApi(apiConfig),\n\n    setBusinessId: (businessId: string) => {\n      apiConfig.businessId = businessId;\n    },\n\n    getBusinessId: () => apiConfig.businessId,\n\n    setMarket: (market: string) => {\n      apiConfig.market = market;\n    },\n\n    getMarket: () => apiConfig.market,\n\n    setLocale: (locale: string) => {\n      apiConfig.locale = locale;\n    },\n\n    getLocale: () => apiConfig.locale,\n\n    isAuthenticated: config.isAuthenticated || (() => false),\n    logout: config.logout,\n    setToken: config.setToken,\n\n    utils: {\n      // Block utilities\n      getImageUrl: (imageBlock: any, isBlock = true) =>\n        getImageUrl(imageBlock, isBlock, storageUrl),\n      getBlockValue,\n      getBlockValues,\n      getBlockLabel,\n      getBlockTextValue,\n      getBlockObjectValues,\n      getBlockFromArray,\n      formatBlockValue,\n      prepareBlocksForSubmission,\n      extractBlockValues,\n\n      // Price utilities\n      getMarketPrice,\n      getPriceAmount,\n      formatPayment,\n      formatMinor,\n      createPaymentForCheckout,\n\n      // Currency utilities\n      getCurrencySymbol,\n\n      // Validation utilities\n      validatePhoneNumber,\n\n      // Timezone utilities\n      tzGroups,\n      findTimeZone,\n\n      // Text utilities\n      slugify,\n      humanize,\n      categorify,\n      formatDate,\n\n      // SVG utilities\n      getSvgContentForAstro,\n      fetchSvgContent,\n      injectSvgIntoElement,\n    },\n  };\n\n  if (autoGuest) {\n    Promise.resolve().then(async () => {\n      try {\n        const tokens = await config.getToken();\n        if (!tokens.accessToken && !tokens.refreshToken) {\n          const result: any = await httpClient.post(\"/v1/users/login\", {\n            provider: \"GUEST\",\n          });\n          const token = result.accessToken || result.token || \"\";\n          if (token) {\n            config.setToken(result);\n          }\n          console.log(\n            \"[SDK Init] Created guest token:\",\n            token ? \"Success\" : \"Failed\"\n          );\n        } else {\n          console.log(\"[SDK Init] Using existing token from storage\");\n        }\n      } catch (error) {\n        console.error(\"[SDK Init] Failed to initialize auth:\", error);\n      }\n    });\n  }\n\n  return sdk;\n}\n\nexport type { HttpClientConfig } from \"./services/createHttpClient\";\n"]}