{"version":3,"file":"product.50a850775cd0bf4918c9.js","mappings":";0DA8DA,IAAIA,EAAiB,SAAkBC,EAAMC,EAAMC,GAC/C,IAAIC,EACAC,EACAC,EACAC,EACAC,EACAC,EAccC,EACVC,EAdJC,EAAiB,EACjBC,GAAU,EACVC,GAAS,EACTC,GAAW,EAEf,SAASC,EAASN,GACd,GAAoB,iBAATA,EACP,OAAOA,EAEP,IAAIO,EAAIC,SAASR,GACjB,OAAOS,MAAMF,GAAK,EAAIA,EAO9B,SAASG,IACL,OAAOC,KAAKD,MAGhB,GAAmB,mBAARnB,EACP,KAAM,4CAWV,SAASqB,EAAWC,GAChB,IAAIC,EAAOpB,EACPqB,EAAUpB,EAKd,OAHAD,EAAWC,OAAWqB,EACtBd,EAAiBW,EACjBhB,EAASN,EAAK0B,MAAMF,EAASD,GAIjC,SAASI,EAAYL,GAMjB,OAJAX,EAAiBW,EAEjBf,EAAUqB,WAAWC,EAAc5B,GAE5BW,EAAUS,EAAWC,GAAQhB,EAWxC,SAASwB,EAAaR,GAClB,IAAIS,EAAoBT,EAAOd,EAM/B,YAAyBiB,IAAjBjB,GAA+BuB,GAAqB9B,GACvD8B,EAAoB,GAAOlB,GANNS,EAAOX,GAMgCN,EAGrE,SAASwB,IACL,IAAIP,EAAOH,IACX,GAAIW,EAAaR,GACb,OAAOU,EAAaV,GAGxBf,EAAUqB,WAAWC,EAzBzB,SAAuBP,GACnB,IACIW,EAAsBX,EAAOX,EAC7BL,EAASL,GAFWqB,EAAOd,GAI/B,OAAOK,EAASqB,KAAKC,IAAI7B,EAAQD,EAAU4B,GAAuB3B,EAoB/B8B,CAAcd,IAGrD,SAASU,EAAaV,GAKlB,OAJAf,OAAUkB,EAINX,GAAYX,EACLkB,EAAWC,IAEtBnB,EAAWC,OAAWqB,EACfnB,GAeX,SAAS+B,IAEL,IAAIf,EAAOH,IACPmB,EAAaR,EAAaR,GAM9B,GAJAnB,EAAWoC,UACXnC,EAAWoC,KACXhC,EAAec,EAEXgB,EAAY,CACZ,QAAgBb,IAAZlB,EACA,OAAOoB,EAAYnB,GAEvB,GAAIK,EAGA,OADAN,EAAUqB,WAAWC,EAAc5B,GAC5BoB,EAAWb,GAM1B,YAHgBiB,IAAZlB,IACAA,EAAUqB,WAAWC,EAAc5B,IAEhCK,EAIX,OA1GAL,EAAOc,EAASd,IAAS,EAVjBS,SADUD,EAaLP,GAXO,MAATO,GAA0B,UAARC,GAA4B,YAARA,IAY7CE,IAAYV,EAAQU,QAEpBP,GADAQ,EAAS,YAAaX,GACHgC,KAAKO,IAAI1B,EAASb,EAAQG,UAAY,EAAGJ,GAAQI,EACpES,EAAW,aAAcZ,IAAYA,EAAQY,SAAWA,GAkG5DuB,EAAUK,OApCV,gBACoBjB,IAAZlB,GACAoC,aAAapC,GAEjBI,EAAiB,EACjBR,EAAWK,EAAeJ,EAAWG,OAAUkB,GAgCnDY,EAAUO,MA7BV,WACI,YAAmBnB,IAAZlB,EAAwBD,EAAS0B,EAAab,MA6BlDkB,iDCvMV,IAAIQ,EAAuB,CACxBC,iBAAkB,GAClBC,4BAA4B,EAC5BC,uBAAwB,WAIpB,GAA8B,KAA1BR,KAAKM,iBAEL,OAAO,EAGX,IAAIG,EAAiBT,KAAKU,oBAI1B,OAFiBD,EAAeE,yBAC3BX,KAAKO,4BAA8BE,EAAeG,uBAAyBH,EAAeI,+BAGnGC,uBAAwB,WACpB,IAAIL,EAAiBT,KAAKU,oBAE1B,OAAQV,KAAKO,4BAA8BE,EAAeM,gCACpDf,KAAKO,4BAA8BE,EAAeK,wBAE5DE,iCAAkC,WAE9B,IAAIP,EAAiBT,KAAKU,oBAE1B,IAAKV,KAAKQ,yBAA0B,CAChC,IAAIS,EAAUC,SAASC,OAAOC,MAAM,KACpC,IAAK,IAAID,KAAUF,EACXE,IAAWnB,KAAKM,mBAAwE,GAApDG,EAAeY,iBAAiBC,QAAQH,IAC5EI,EAAaJ,KAK7BT,kBAAmB,WAGf,IAAI5C,EAAS,CACT8C,qBAAsBZ,KAAKO,2BAC3BI,yBAAyB,EACzBE,+BAA+B,EAC/BC,wBAAwB,EACxBC,+BAA+B,EAC/BM,iBAAkB,CAAC,MAAO,oBAAqB,oBAAqB,gBAChE,wBAAyB,aAAc,YAAa,6BACpD,qBAAsB,2BAA4B,mBAClD,eAAgB,8BAIxB,SAASG,EAAYC,EAAWC,GAC5B,MAA2B,kBAAhB,EACAD,EAGJC,EAGX,IACI,IAAIC,EAAgBC,SAASC,EAAU7B,KAAKM,mBACxCwB,EAAYC,KAAKC,MAAML,IAET,IAAdG,GACAhE,EAAO8C,sBAAuB,EAC9B9C,EAAO6C,yBAA0B,EACjC7C,EAAO+C,+BAAgC,EACvC/C,EAAOgD,wBAAyB,EAChChD,EAAOiD,+BAAgC,GAErB,MAAbe,GAA4C,iBAAhB,IACjChE,EAAO8C,qBAAuBY,EAAYM,EAAUlB,qBAAsB9C,EAAO8C,sBACjF9C,EAAO6C,wBAA0Ba,EAAYM,EAAUnB,wBAAyB7C,EAAO6C,yBACvF7C,EAAO+C,8BAAgCW,EAAYM,EAAUjB,8BAA+B/C,EAAO+C,+BACnG/C,EAAOgD,uBAAyBU,EAAYM,EAAUhB,uBAAwBhD,EAAOgD,wBACrFhD,EAAOiD,8BAAgCS,EAAYM,EAAUf,8BAA+BjD,EAAOiD,gCAGzG,MAAOkB,IAKT,OAAOnE,GAEXoE,8BAA+B,WAC3B,IAAIC,EAAW9B,EAAqBK,oBACpCyB,EAASxB,yBAA0B,EACnCwB,EAASvB,sBAAuB,EAChCuB,EAASrB,wBAAyB,EAClCqB,EAASpB,+BAAgC,EAEzCV,EAAqB+B,kBAAkBD,IAE3CE,oCAAqC,WACjC,IAAIF,EAAW9B,EAAqBK,oBACpCyB,EAASxB,yBAA0B,EACnCwB,EAAStB,+BAAgC,EACzCsB,EAASvB,sBAAuB,EAChCuB,EAASrB,wBAAyB,EAClCqB,EAASpB,+BAAgC,EAEzCV,EAAqB+B,kBAAkBD,IAE3CG,2BAA4B,WACxB,IAAIH,EAAW9B,EAAqBK,oBACpCyB,EAASvB,sBAAuB,EAChCuB,EAASpB,+BAAgC,EAEzCV,EAAqB+B,kBAAkBD,IAE3CI,gBAAiB,WACbC,QAAQ,kGACJ,SAAUC,GACN,GAAIA,EAAY,CACZ,IAAIN,EAAW9B,EAAqBK,oBACpCyB,EAASxB,yBAA0B,EACnCwB,EAASvB,sBAAuB,EAChCuB,EAASrB,wBAAyB,EAClCqB,EAASpB,+BAAgC,EAEzCV,EAAqB+B,kBAAkBD,MAG/C,iBACA,iBACA,WAERC,kBAAmB,SAAUM,GACzB,GAA8B,KAA1B1C,KAAKM,iBAAT,CAKA,IAAIqC,EAAeZ,KAAKa,UAAUF,GAK9BC,IADgBd,EAAU7B,KAAKM,oBAyDxBuC,EAvDG7C,KAAKM,iBAuDFrC,EAvDoB0E,EAwDrCG,EAAU,IAENC,EAAO,IAAInE,MACVoE,QAAQD,EAAKE,UAAY,SAC9BH,EAAU,aAAeC,EAAKG,cAElChC,SAASC,OAAS0B,EAAO,KAAO5E,GAAS,IAAM6E,EAAU,YAP7D,IAAmBD,EAAM5E,EACjB6E,EAEIC,GAvDRI,iBAAkB,WAKdX,QAJc,+IAIG,SAAUY,GAElBA,GACD/C,EAAqB6B,kCALjB,qBASR,QACA,sBAIA,KAsBZ,MAAMX,EAAgBsB,IAClB3B,SAASC,OAAS0B,EAAO,qDAG7B,SAAShB,EAAUwB,GACf,IAAIlC,EAAS,GAKb,OAJAD,SAASC,OAAOC,MAAM,KAAKkC,SAAQ,SAAUC,GACzC,IAAKC,EAAKvF,GAASsF,EAAGnC,MAAM,KAC5BD,EAAOqC,EAAIC,QAAUxF,KAElBkD,EAAOkC,6FClMjB,IAAIK,EAAWxC,SAASyC,uBAAuB,gBAC5CC,EAAmB1C,SAASyC,uBAAuB,cAAcE,KAAK,GAEtEC,EAAwB,WACxBC,KAWJ,SAASC,EAAoBT,GAazB,MAXA,CACI,KAAQA,EAAGU,aAAa,aACxB,GAAMV,EAAGU,aAAa,2BACfV,EAAGU,aAAa,oBAChBV,EAAGU,aAAa,WACvB,WAAcV,EAAGU,aAAa,oBAAsBV,EAAGU,aAAa,WACpE,MAASV,EAAGU,aAAa,cACzB,MAASV,EAAGU,aAAa,cACzB,SAAYV,EAAGU,aAAa,kBAMpC,SAASC,EAAcX,GAenB,MAbA,CACI,KAAQA,EAAGU,aAAa,aACxB,GAAMV,EAAGU,aAAa,2BACfV,EAAGU,aAAa,oBAChBV,EAAGU,aAAa,WACvB,WAAcV,EAAGU,aAAa,oBAAsBV,EAAGU,aAAa,WACpE,MAASV,EAAGU,aAAa,cACzB,MAASV,EAAGU,aAAa,cACzB,SAAYV,EAAGU,aAAa,iBAC5B,SAAYV,EAAGU,aAAa,iBAC5B,KAAQV,EAAGU,aAAa,cAMhC,SAASF,IACL,IAAII,EAgCR,WAGI,IAFA,IAAIA,EAAW,GAENC,EAAI,EAAGA,EAAIV,EAASW,OAAQD,IACjCV,EAASU,GAAGE,iBAAiB,QAASC,GAEtCJ,EAASK,KAAKN,EAAcR,EAASU,KAGzC,OAAOD,EAzCQM,GACXC,EAqDR,WACI,IAAIC,EAAUzD,SAAS0D,cAAc,iBACjCC,EAAgB,GAEpB,GAAIF,EACA,IAAK,IAAIP,EAAI,EAAGA,EAAIO,EAAQN,OAAQD,IAChCO,EAAQP,GAAGE,iBAAiB,QAASQ,GAErCD,EAAcL,KAAKO,EAAgBJ,EAAQP,KAInD,OAAOS,EAjEUG,GACbC,EA5CArB,EACOI,EAAoBJ,GAGxB,KA0CHsB,EAAe,CACfC,UAAW,CACPC,aAAc,QAIlBjB,EAASE,OAAS,IAClBa,EAAaC,UAAUE,IAAM,CACzBC,eAAgB,CAAEnB,SAAAA,KAItBO,EAAWL,OAAS,IACpBa,EAAaC,UAAUE,IAAIE,UAAY,CACnCA,UAAW,CAAEb,WAAYA,KAIX,MAAlBO,IACAC,EAAaC,UAAUE,IAAM,CACzBG,OAAQ,CAAErB,SAAU,CAACc,MAI7BQ,UAAUjB,KAAK,CAAEW,UAAW,OAC5BM,UAAUjB,KAAKU,GAenB,SAASX,EAAetC,GACpBA,EAAEyD,iBAEF,IA2DsBC,EAAYC,EA3D9BrC,EAAKtB,EAAE4D,cA2DWF,EA1DLzB,EAAcX,GA0DGqC,EAzDjBrC,EAAGU,aAAa,QA0DjCwB,UAAUjB,KAAK,CAAEW,UAAW,OAC5BM,UAAUjB,KAAK,CACX,MAAS,mBACT,UAAa,CACT,MAAS,CACL,SAAY,CAACmB,OAKrBC,IACA1E,SAAS4E,SAAWF,GAjD5B,SAASd,EAAc7C,GAGnB,IAmBkB8D,EArBlB9D,EAAEyD,iBAqBgBK,EAlBChB,EADV9C,EAAE4D,eAoBXJ,UAAUjB,KAAK,CAAEW,UAAW,OAC5BM,UAAUjB,KAAK,CACX,MAAS,iBACT,UAAa,CACT,WAAc,CACV,WAAc,CAACuB,OAK3B7E,SAAS4E,SAAWC,EAASC,eAxBjC,SAASjB,EAAgBxB,GAUrB,MARA,CACI,GAAMA,EAAGU,aAAa,WACtB,KAAQV,EAAGU,aAAa,aACxB,SAAYV,EAAGU,aAAa,iBAC5B,SAAYV,EAAGU,aAAa,iBAC5B,eAAkBV,EAAGU,aAAa,SAoC1C,SAASgC,EAAcC,EAAWC,EAAW,GACzC,IAAIC,EAAUC,EAAuBH,GACrCE,EAAQD,SAAWA,EAEnBV,UAAUjB,KAAK,CAAEW,UAAW,OAC5BM,UAAUjB,KAAK,CACX,MAAS,gBACT,UAAa,CACT,IAAO,CACH,SAAY,CAAC4B,OAM7B,SAASC,EAAuBH,GAC5B,IAAII,EAAmBpF,SAAS0D,cAAc,aAAasB,OAK3D,GAHKI,IACDA,EAAmBpF,SAAS0D,cAAc,qBAAqBsB,QAE9DI,EAGL,OAAOtC,EAAoBsC,GAG/B,SAASC,EAAmBL,EAAWC,EAAW,GAC9C,IAAIC,EAAUC,EAAuBH,GACrCE,EAAQD,SAAWA,EAEnBV,UAAUjB,KAAK,CAAEW,UAAW,OAC5BM,UAAUjB,KAAK,CACX,MAAS,qBACT,UAAa,CACT,OAAU,CACN,SAAY,CAAC4B,OAkD7B,SAASI,EAAWC,EAAMC,EAAQC,GAC1BA,EAjCR,SAAwBF,EAAMC,EAAQC,GAClCC,MAAMD,EAAgB,CAClBE,OAAQ,SACTC,MAAKC,GAAYA,EAASC,SACxBF,MAAK,SAAUhJ,GACZ,IAAIqG,EAAWrG,EAAOmJ,SAASC,MAC3BC,EAAkBjG,SAASkG,eAAe,wBAC1CC,EAAWnG,SAASoG,cAAc,MAClCC,EAAS,GAETpD,GACAA,EAASb,SAAQ,SAAUO,GACvB0D,GACI,4EACyB1D,EAAK2D,2DACJ3D,EAAK4D,8DACF5D,EAAK6D,2DACX7D,EAAK8D,oEACU9D,EAAK+D,iBAAmB,8DAC/B/D,EAAKgE,kEACPhE,EAAKiE,yEACRjE,EAAKkE,+DAK3CV,EAASW,UAAYT,EACrBJ,EAAgBc,OAAOZ,GACvBa,EAAazB,EAAMC,MAMvByB,CAAe1B,EAAMC,EAAQC,GAG7BuB,EAAazB,EAAMC,GAI3B,SAASwB,EAAazB,EAAMC,GACxB,IAAIvC,EArDR,WAII,IAHA,IAAIA,EAAW,GACXZ,EAAKrC,SAASyC,uBAAuB,eAEhCS,EAAI,EAAGA,EAAIb,EAAGc,OAAQD,IAC3BD,EAASK,KAAKR,EAAoBT,EAAGa,KAGzC,OAAOD,EA6CQiE,GACf3C,UAAUjB,KAAK,CAAEW,UAAW,OAE5B,IAAID,EAAe,CACfmD,MAAO,eACPlD,UAAW,CACPmD,SAAU,CACNC,YAAa,CAAE9B,KAAMA,MAK7BtC,GAAYA,EAASE,OAAS,IAC9Ba,EAAaC,UAAUmD,SAASnE,SAAWA,GAE3CuC,IACAxB,EAAaC,UAAUmD,SAASC,YAAY7B,OAASA,EAAO8B,eAEhE/C,UAAUjB,KAAKU,GAGnB,SAASuD,EAAiBhC,EAAMiC,GAC5BjD,UAAUjB,KAAK,CAAEW,UAAW,OAC5BM,UAAUjB,KAAK,CACX,MAAS,iBACT,UAAa,CACT,gBAAmB,CACf,YAAe,CAAE,KAAQiC,EAAM,OAAUiC,OAOzD,SAASC,IACLlD,UAAUjB,KAAK,CAAEW,UAAW,OAC5BM,UAAUjB,KAAK,CACX,MAAS,aACT,UAAa,CACT,OAAU,CACN,SAAY,CAACR,EAAoBJ,QAMjDgF,OAAOC,OAAS,WACZ9E,kCC1TI,SAAS+E,EAAkBC,EAASC,EAAQC,GAChD,IAAIC,EAASC,WAAWJ,GAQxB,OANIG,EAAS,EACQE,EAAiBF,EAAQF,EAAQC,GAGjC,OAKlB,SAASG,EAAiBC,EAAQL,EAAQC,GAC7C,OAAOD,GAAUK,EAASJ,GAAgBK,QAAQ,GAAGC,QAAQ,oBAAqB,+ECbrF,IAqEGC,EAAyB,CACzBC,oBAAqB,SAAUC,GAC3BC,EAAmB,gsBAcvBC,iBAAkB,SAAUvB,GACxBwB,EAAgB,iBAAiBxB,SAErCyB,OAAQ,WACJ,OAAOC,MAiBXF,EAAkB,SAAUG,GAC5B9I,SAAS+I,KAAKC,YAAYC,EAAoBH,KAI9CL,EAAqB,SAAUK,GAC/B9I,SAAS+I,KAAKG,aAAaD,EAAoBH,GAAS9I,SAAS+I,KAAKI,aAG1E,SAASF,EAAoBH,GACzB,IAAIM,EAAepJ,SAASoG,cAAc,UAEtCiD,EAAgBrJ,SAASsJ,eAAeR,GAG5C,OADAM,EAAaJ,YAAYK,GAClBD,+CCzHX,MAC8IrI,EAA9IwI,QAAQC,UAAUC,UAAUF,QAAQC,UAAUC,QAAQF,QAAQC,UAAUE,mBAAmBH,QAAQC,UAAUG,uBAAiC5I,OAA4I,IAAoB,EAAA6I,EAAO,EAAAA,EAAO,oBAAoBlC,OAAOA,OAAO5I,KAA5J,aAAa,OAAoJ,SAAUiC,GAAG,aAAa,IAAI8I,EAAE,CAACC,SAAS,gBAAgBC,QAAQ,wBAAwBC,EAAE,SAASjJ,GAAG,GAAGA,GAAG,QAAQA,EAAEgC,aAAa,iBAAiB,CAAC,IAAI8G,EAAE7J,SAAS0D,cAAc3C,EAAEkJ,MAAMJ,IAAI,SAAS9I,GAAG,IAAI8I,EAAE9I,EAAEmJ,QAAQ,oBAAoB,GAAGL,EAAE,CAAC,IAAIG,EAAEH,EAAEnG,cAAc,sCAAsC,GAAGsG,EAAE,CAAC,IAAIG,EAAEnK,SAAS0D,cAAcsG,EAAEC,MAAMD,EAAEI,aAAa,gBAAgB,SAASJ,EAAEI,aAAa,WAAW,MAAMD,GAAGA,EAAEC,aAAa,SAAS,YAAhQ,CAA6QrJ,GAAG,SAAUA,EAAE8I,GAAG9I,EAAEqJ,aAAa,gBAAgB,QAAQrJ,EAAEqJ,aAAa,WAAW,KAAKP,EAAEQ,gBAAgB,UAAUtJ,EAAEuJ,QAAnH,CAA6HvJ,EAAE8I,GAAG,SAAU9I,EAAE8I,GAAG,IAAIG,EAAE,IAAIO,YAAY,QAAQ,CAACC,SAAQ,EAAGC,YAAW,EAAGnG,OAAO,CAACoG,IAAI3J,EAAE4J,QAAQd,KAAK9I,EAAE6J,cAAcZ,GAAlH,CAAuHjJ,EAAE8I,MAAma,OAAO,SAASgB,EAAE3H,GAAG,IAAI4H,EAAEC,EAAEC,EAAE,CAAGA,QAAU,WAAW,IAAIjK,EAAEgK,EAAEE,iBAAiB,KAAKC,MAAM1B,UAAUpH,QAAQ+I,KAAKpK,GAAE,SAAUA,GAAG,IAAI8I,EAAE7J,SAAS0D,cAAc3C,EAAEkJ,MAAMJ,GAAG,SAAU9I,EAAE8I,EAAEG,GAAGjJ,EAAEqK,GAAGC,MAAM,EAAErB,EAAEF,SAAS3G,UAAU6G,EAAEF,WAAW/I,EAAEqK,GAAG,IAAIrK,EAAEsJ,gBAAgB,QAAQtJ,EAAEsJ,gBAAgB,iBAAiBtJ,EAAEsJ,gBAAgB,iBAAiBtJ,EAAEsJ,gBAAgB,YAAYtJ,EAAEmJ,QAAQ,MAAMG,gBAAgB,QAAQR,EAAEQ,gBAAgB,QAAQR,EAAEQ,gBAAgB,mBAAmBR,EAAEQ,gBAAgB,UAAhU,CAA4UtJ,EAAE8I,EAAEiB,MAAMC,EAAEV,gBAAgB,QAAQrK,SAASsL,gBAAgBC,oBAAoB,QAAQC,GAAE,GAAIT,EAAEQ,oBAAoB,UAAUE,GAAE,GAAIX,EAAE,KAAKC,EAAE,MAAMC,MAAQ,WAAW,GAAGD,EAAE/K,SAAS0D,cAAcmH,GAAG,CAAC,IAAI9J,EAAEgK,EAAEE,iBAAiB,KAAKF,EAAEX,aAAa,OAAO,WAAWc,MAAM1B,UAAUpH,QAAQ+I,KAAKpK,GAAE,SAAUA,GAAG,IAAI8I,EAAE7J,SAAS0D,cAAc3C,EAAEkJ,MAAMJ,GAAG,SAAU9I,EAAE8I,EAAEG,GAAGjJ,EAAEqK,KAAKrK,EAAEqK,GAAGpB,EAAEF,SAASD,EAAEuB,IAAIrK,EAAEqJ,aAAa,OAAO,OAAOrJ,EAAEqJ,aAAa,gBAAgBP,EAAEuB,IAAIrK,EAAEmJ,QAAQ,MAAME,aAAa,OAAO,gBAAgBP,EAAEO,aAAa,OAAO,YAAYP,EAAEO,aAAa,kBAAkBrJ,EAAEqK,IAAIrK,EAAE0I,QAAQO,EAAED,SAAShJ,EAAEqJ,aAAa,gBAAgB,SAASrJ,EAAEqJ,aAAa,gBAAgB,SAASrJ,EAAEqJ,aAAa,WAAW,MAAMP,EAAEO,aAAa,SAAS,WAA1Y,CAAuZrJ,EAAE8I,EAAEiB,QAAQE,OAAS,SAASjK,GAAG,IAAI8I,EAAE9I,EAAE,iBAAiBA,IAAI8I,EAAE7J,SAAS0D,cAAcmH,EAAE,wBAAwB9J,EAAE,OAAOiJ,EAAEH,KAAQ2B,EAAE,SAASzK,GAAG,IAAI8I,EAAE9I,EAAE2K,OAAOxB,QAAQW,EAAE,iBAAiBhB,IAAI9I,EAAEyD,iBAAiBwF,EAAEH,KAAK4B,EAAE,SAAS1K,GAAG,IAAI8I,EAAE7J,SAAS2L,cAAc9B,EAAEJ,QAAQoB,EAAE,mBAAmB,CAAC,UAAU,YAAY,YAAY,aAAa,KAAK,OAAO,OAAO,QAAQ,OAAO,OAAOzK,QAAQW,EAAEuB,KAAK,GAA7gE,SAASvB,EAAE8I,GAAG,IAAIM,EAAE,SAAUpJ,GAAG,IAAI8I,EAAE9I,EAAEmJ,QAAQ,oBAAoBF,EAAEH,EAAEA,EAAEoB,iBAAiB,gBAAgB,KAAK,GAAGjB,EAAE,MAAM,CAAC4B,KAAK5B,EAAE6B,MAAMX,MAAM1B,UAAUpJ,QAAQ+K,KAAKnB,EAAEjJ,IAArJ,CAA2JA,GAAG,GAAGoJ,EAAE,CAAC,IAAIU,EAAE3H,EAAEiH,EAAEyB,KAAKzI,OAAO,EAAE,CAAC,UAAU,YAAY,KAAK,QAAQ/C,QAAQyJ,IAAI,EAAEgB,EAAEV,EAAE0B,MAAM,EAAE3I,EAAEiH,EAAE0B,MAAM,EAAE,CAAC,YAAY,aAAa,OAAO,SAASzL,QAAQyJ,IAAI,EAAEgB,EAAEV,EAAE0B,QAAQ3I,EAAE,EAAEiH,EAAE0B,MAAM,EAAE,SAAShC,EAAEgB,EAAE,EAAE,QAAQhB,IAAIgB,EAAE3H,GAAG8G,EAAEG,EAAEyB,KAAKf,KAA2nDV,CAAEN,EAAE9I,EAAEuB,OAAO,OAAOwI,EAAE,WAAY,IAAI/J,EAAE,GAAG,OAAOmK,MAAM1B,UAAUpH,QAAQ+I,KAAKtM,WAAU,SAAUgL,GAAG,IAAI,IAAIG,KAAKH,EAAE,CAAC,IAAIA,EAAEiC,eAAe9B,GAAG,OAAOjJ,EAAEiJ,GAAGH,EAAEG,OAAOjJ,EAA7I,CAAiJ8I,EAAE3G,GAAG,IAAI8H,EAAEe,QAAQ,SAAUlC,GAAG,KAAK9I,EAAE6D,SAASqF,KAAK9G,OAAO,GAAG,CAAC,IAAIgH,EAAEnK,SAAS0D,cAAcmG,EAAE,wBAAwB9I,EAAE6D,SAASqF,KAAK,MAAMD,EAAEG,IAA5H,CAAkIU,GAAG7K,SAASsL,gBAAgBlI,iBAAiB,QAAQoI,GAAE,GAAIT,EAAE3H,iBAAiB,UAAUqI,GAAE,GAAIT,GAA1wGnB,CAAE9I,IAAG,QAA3B,SAA2B,gFCQ3N,SAASiL,EAAgBC,GAErB,IADA,IAAIJ,EAAQ,EACJI,EAAOA,EAAKC,wBAChBL,IAEJ,OAAOA,EAIX,SAASM,EAASC,WAEd,GAAIC,OAAOC,MAAQ,KAAM,CACrBF,EAAKhC,aAAa,eAAgB,KAClC,IAAImC,EAASvM,SAASiL,iBAAiB,yBAAyB,GAC5DsB,IAC8D,QAA9D,EAAAA,EAAO7I,cAAc,iDAAyC,SAAE0G,aAAa,eAAgB,QACxB,QAArE,EAAAmC,EAAO7I,cAAc,wDAAgD,SAAE0G,aAAa,gBAAiB,QACrGmC,EAAOtB,iBAAiB,wBAAwB,GAAGb,aAAa,cAAe,cAInFgC,EAAKhC,aAAa,eAAgB,KAK1C,SAASoC,EAAUJ,GACfA,EAAKnB,iBAAiB,mBAAmB7I,SAAQ,SAAUO,GACvDA,EAAKyH,aAAa,gBAAiB,YAEvCgC,EAAKnB,iBAAiB,0CAA0C7I,SAAQ,SAAUO,GAC9EA,EAAKyH,aAAa,cAAe,YAErCgC,EAAKnB,iBAAiB,kBAAkB7I,SAAQ,SAAUO,GACtDA,EAAKyH,aAAa,eAAgB,YAEtCgC,EAAKnB,iBAAiB,WAAW7I,SAAQ,SAAUO,GAC/CA,EAAK8J,UAAUC,OAAO,aAG1BP,EAASC,GAIb,SAASO,EAAWC,EAAsBC,aACtCD,EAAQxC,aAAa,gBAA6B,OAAXyC,EAAmB,OAAS,SACpD,OAAXA,EACqB,QAArB,EAAAD,EAAQE,qBAAa,SAAEL,UAAUM,IAAI,UAEhB,QAArB,EAAAH,EAAQE,qBAAa,SAAEL,UAAUC,OAAO,UAGlB,QAA1B,EAAAE,EAAQI,0BAAkB,SAAE5C,aAAa,cAA2B,OAAXyC,EAAmB,OAAS,SAsCzF,GAAI7M,SAASsL,gBAAgBmB,UAAUQ,SAAS,SAAU,CAItD,GAHAjN,SAASsL,gBAAgBmB,UAAUC,OAAO,SAC1C1M,SAASsL,gBAAgBmB,UAAUM,IAAI,MAEnC/M,SAASyC,uBAAuB,aAAaU,OAAQ,CAErD,IAAIiJ,EAAOpM,SAAS0D,cAAc,uBAElC,GAAI0I,EAAM,CAEND,EAASC,GAaTA,EAAKhJ,iBAAiB,SAAS,SAAUrC,mBACjCmM,EAAenM,EAAEoM,WAIrB,GAH2D,QAAtDD,EAA6BE,QAAQ9F,eAAkF,OAAtD4F,EAA6BE,QAAQ9F,gBACvG4F,EAAgBA,MAAAA,OAAY,EAAZA,EAA8BhD,QAAQ,WAErDgD,MAAAA,OAAY,EAAZA,EAA8BT,UAAUQ,SAAS,YAAa,CAC/D,IAAII,EAAiE,QAAxD,EAAAH,MAAAA,OAAY,EAAZA,EAA8BhD,QAAQ,0BAAkB,eAAEnH,aAAa,iBACpF,GAAa,KAATsK,EAEA,GAAoE,UAA/DH,MAAAA,OAAY,EAAZA,EAA8BnK,aAAa,kBAA6B,CAIzE,IAFA,IAAIuK,EAAkBtN,SAAS0D,cAAc,qBAAuB2J,EAAQ,MACxEE,EAAcD,MAAAA,OAAe,EAAfA,EAAiBrC,iBAAiB,gCAC3C/H,EAAI,EAAGnE,EAAMwO,MAAAA,OAAW,EAAXA,EAAapK,OAAQD,GAAKnE,GAAY,GAAImE,IACzC,MAAfqK,IAAiE,QAA1C,EAAc,QAAd,EAAAA,EAAYrK,UAAE,eAAEgH,QAAQ,0BAAkB,eAAEnH,aAAa,mBAAoBsK,GACpGV,EAAWY,EAAYrK,GAAmB,OAGlDyJ,EAAYO,EAA8B,WAG1CP,EAAYO,EAA8B,WAG7C,CAMD,IAJA,IAAIrB,EAAQG,EAAiBkB,MAAAA,OAAY,EAAZA,EAA8BJ,eACvDU,EAAWxN,SAASiL,iBAAiB,wBAErCwC,EAAU,KACEC,GAAPxK,EAAI,EAAUsK,EAASrK,QAAQD,EAAIwK,EAAMxK,IAC1C2I,GAAS3I,IACTuK,EAAUD,EAAStK,IAG3B,GAAmE,SAA9DgK,EAA6BnK,aAAa,iBAA6B,CAExE,IAAI4K,EAAa3N,SAAS0D,cAAc,+CACxC,GAAmB,OAAfiK,EAAqB,CACrB,IAAIC,EAAkB5B,EAAgB2B,GACtCA,EAAWvD,aAAa,eAAgB,SACN,QAAlC,EAAAuD,EAAWjK,cAAc,iBAAS,SAAE0G,aAAa,gBAAiB,SAElE,IADA,IAAIyD,EAAa,KACDC,GAAP5K,EAAI,EAAUsK,EAASrK,QAAQD,EAAI4K,EAAM5K,IAC1C0K,GAAmB1K,IACnB2K,EAAaL,EAAStK,IAG9B2K,MAAAA,GAAAA,EAAYzD,aAAa,cAAe,SAE3C8C,EAA6B9C,aAAa,gBAAiB,QACjB,QAA1C,EAAA8C,EAA6BJ,qBAAa,SAAE1C,aAAa,eAAgB,QAC1EqD,MAAAA,GAAAA,EAASrD,aAAa,cAAe,cAMkD,MAAnC,QAAxD,EAAC8C,EAA6BhD,QAAQ,0BAAkB,eAAEnH,aAAa,mBACvEyJ,EAAUJ,MAOtBpM,SAASoD,iBAAiB,SAAS,SAAUrC,GAEzC,IAAI2K,EAAS3K,EAAE2K,OACXU,GAAQV,IAAWU,EAAKa,SAASvB,IACjCc,EAAUJ,MAmBlB,IAFA,IAAI2B,EAAgB3B,EAAKnB,iBAAiB,wBACtClM,EAAMgP,EAAc5K,OACfD,EAAI,EAAGA,EAAInE,EAAKmE,IAGrB,IAFA,IAAI8K,EAAuBD,EAAc7K,GAAG+H,iBAAiB,KACzD6C,EAAOE,EAAqB7K,OACvB8K,EAAI,EAAGA,EAAIH,EAAMG,IAClBA,EAAI,GAAKH,GACTE,EAAqBC,GAAG7K,iBAAiB,WAAW,SAAUrC,WACzC,GAAbA,EAAEmN,UACsF,QAAxF,EAA+D,QAA/D,EAAA9B,MAAAA,OAAI,EAAJA,EAAM1I,cAAc,mDAA2C,eAAEA,cAAc,iBAAS,SAAE4G,YAQ9G,IAAI6D,EAAoB/B,EAAKnB,iBAAiB,4BAC1CmD,EAAiBD,EAAkBhL,OACvC,IAASD,EAAI,EAAGA,EAAIkL,EAAgBlL,IAChCiL,EAAkBjL,GAAGE,iBAAiB,SAAS,SAAUrC,GACrD,IAAIsN,EAAetN,EAAEoM,WAA2BjD,QAAQ,mBACpDoE,EAAWD,EAAYtL,aAAa,iBAsBxC,GArBIuL,GAAkC,GAAtB/Q,SAAS+Q,IACrBD,EAAcA,EAAYnE,QAAQ,OACtBE,aAAa,QAAS,SAGlCiE,EAAYjE,aAAa,cAAe,SAG5CiE,EAAYpD,iBAAiB,mBAAmB7I,SAAQ,SAAUO,GAC9DA,EAAKyH,aAAa,gBAAiB,YAEvCiE,EAAYpD,iBAAiB,0CAA0C7I,SAAQ,SAAUO,GACrFA,EAAKyH,aAAa,cAAe,YAErCiE,EAAYpD,iBAAiB,kBAAkB7I,SAAQ,SAAUO,GAC7DA,EAAKyH,aAAa,eAAgB,YAEtCiE,EAAYpD,iBAAiB,WAAW7I,SAAQ,SAAUO,GACtDA,EAAK8J,UAAUC,OAAO,aAGtB4B,GAAkC,GAAtB/Q,SAAS+Q,GAAgB,CAErC,IAAIC,EAAiBF,EAAYnE,QAAQ,oBAAsB3M,SAAS+Q,GAAY,GAAK,MACrFE,EAAuBD,MAAAA,OAAc,EAAdA,EAAgB7K,cAAc,gCAC7B,MAAxB8K,GACAA,EAAqBpE,aAAa,gBAAiB,aAOnE,IAAIqE,EAAazO,SAAS0D,cAAc,sBACxC+K,MAAAA,GAAAA,EAAYrL,iBAAiB,SA1MzC,mBACQsL,EAAW5P,KAAKiE,aAAa,iBAC7BgG,EAAO/I,SAAS+I,KACJ,SAAZ2F,GACA5P,KAAKsL,aAAa,gBAAiB,QACO,QAA1C,EAAApK,SAAS0D,cAAc,2BAAmB,SAAE0G,aAAa,sBAAuB,QAChFrB,EAAK0D,UAAUM,IAAI,eAEnBjO,KAAKsL,aAAa,gBAAiB,SACO,QAA1C,EAAApK,SAAS0D,cAAc,2BAAmB,SAAE0G,aAAa,sBAAuB,SAChFrB,EAAK0D,UAAUC,OAAO,iBAkMlB,IAAIiC,EAAW3O,SAAS0D,cAAc,sBAItC,GAHAiL,MAAAA,GAAAA,EAAUvL,iBAAiB,SA9LvC,mBACQ2F,EAAO/I,SAAS+I,KACwB,QAA5C,EAAA/I,SAAS0D,cAAc,6BAAqB,SAAE0G,aAAa,gBAAiB,SAClC,QAA1C,EAAApK,SAAS0D,cAAc,2BAAmB,SAAE0G,aAAa,sBAAuB,SAChFrB,EAAK0D,UAAUC,OAAO,gBA4LI1M,SAAS0D,cAAc,kBACtB+K,GAAcE,EAAU,CACvC,IAAIC,EAAa5O,SAASkG,eAAe,iBACrC0I,IACAA,EAAWC,MAAMC,IAAM,QAE1BH,EAAyBE,MAAMC,IAAM,QAQ9C,IAAIC,EAAK/O,SAAS0D,cAAc,cAC5BsL,EAAIhP,SAAS0D,cAAc,qBAC3BuL,GAAQ,EACRC,EAxMZ,SAAsBtC,GAGlB,IAFA,IAAIuC,EAAY,EACZC,EAAaxC,EACVwC,GACHD,GAAaC,EAAWD,UACxBC,EAAaA,EAAWC,aAE5B,OAAOF,EAiMcG,CAAaN,GAE9BtH,OAAO6H,SAAW,SAAUxO,GACxB,IAAIyO,EAAS9H,OAAO+H,aAEfR,GAASO,EAASN,GACfF,GAAGA,EAAEvC,UAAUM,IAAI,SACnBgC,GAAIA,EAAGtC,UAAUM,IAAI,SACzBkC,GAAQ,GACDA,GAASO,GAAUN,IACtBF,GAAGA,EAAEvC,UAAUC,OAAO,SACtBqC,GAAIA,EAAGtC,UAAUC,OAAO,SAC5BuC,GAAQ,IAMpB,IAAIS,EAAgB1P,SAASiL,iBAAiB,wBAC1CyE,EAAcvM,QACduM,EAActN,SAAQ,SAAUuN,GACvBA,EAAOlD,UAAUQ,SAAS,iBAC3B0C,EAAOlD,UAAUM,IAAI,eACrB4C,EAAOvM,iBAAiB,SAAS,SAAUrC,GACvC,IAAI6O,EAAO7O,EAAE2K,OAC6B,SAAtCkE,EAAK7M,aAAa,iBAClB6M,EAAKxF,aAAa,gBAAiB,QAGnCwF,EAAKxF,aAAa,gBAAiB,gBAUvD,IAAIyF,EAAe7P,SAAS0D,cAAc,iBACtCoM,EAAqB9P,SAASkG,eAAe,kBAE7C2J,GACIE,aAAeA,YAAYC,iBAC3BtK,MAAMqK,YAAYC,iBACbpK,MAAK,SAAAC,GAAY,OAAAA,EAASoK,UAC1BrK,MAAK,SAAUsK,GACRA,GAAQL,IACRA,EAAa/I,UAAYoJ,GAEzBA,GAAQJ,IACRA,EAAmBhJ,UAAYoJ,MAMnD,IAAIC,EAAenQ,SAAS0D,cAAc,kBAEtCyM,GACIJ,aAAeA,YAAYK,iBAC3B1K,MAAMqK,YAAYK,iBACbxK,MAAK,SAAAC,GAAY,OAAAA,EAASoK,UAC1BrK,MAAK,SAAUsK,GACZ,GAAIA,GAAQC,EAAc,CACtBA,EAAarJ,UAAYoJ,EACzB,IAAIG,EAAerQ,SAASkG,eAAe,gBACvCmK,IACAA,EAAajN,iBAAiB,SAAS,WACnCsE,OAAO9C,SAAS0L,KAAOD,EAActN,aAAa,eAGtDwN,SAgD5B,WACI,IAAIC,EAAK3F,EAWYO,EAVjB9N,EAAI0C,SAASyC,uBAAuB,kBACxC,IAAKoI,EAAI,EAAGA,EAAIvN,EAAE6F,OAAQ0H,KACtB2F,EAAMxQ,SAASoG,cAAc,QACzBgE,aAAa,UAAY9M,EAAEuN,GAAW4F,QAAQrF,IAClDoF,EAAI1J,WAMasE,EANY9N,EAAEuN,GAAW4F,QAAQrF,QAQ9CsF,EAAO,2BADC,+DAECrI,QAAQ,KAAM+C,GADhB,4BAPXoF,EAAIG,QAAUC,EACdtT,EAAEuN,GAAG7B,YAAYwH,GAUrB,SAASI,EAAaC,GAClB,IAAInF,EAAUmF,EAAInF,OAAuBoF,WACzC,GAAIpF,EAAQ,CACR,IAAIqF,EAAS/Q,SAASoG,cAAc,UAEhC4K,EAAUtF,EAAuB3I,aAAa,WAC9CiO,GAAQD,EAAO3G,aAAa,MAFpB,8CAEiC/B,QAAQ,KAAM2I,IAC3DD,EAAO3G,aAAa,cAAe,KACnC2G,EAAO3G,aAAa,kBAAmB,KACvC,IAAI,EAAUsB,EAAuBoB,cACjC,GAAQ,EAAOmE,aAAaF,EAAQrF,KAKhD,WACI,IASIwF,EAASlR,SAASiL,iBAAiB,iBACvC,IACI,IAAIkG,EAAW,IAAIC,sBAAqB,SAAUC,GAE9CA,EAAQjP,SAAQ,SAAUkP,GACtB,GAAIA,EAAMC,eAAgB,CAEtB,IAAIC,EAAUF,EAAM5F,OACpB+F,EAAuBD,GAEvBL,EAASO,UAAUF,SAnBb,CAGlBG,WAAY,OACZC,UAAW,IAsBXV,EAAO9O,SAAQ,SAAUyP,GACrBV,EAASW,QAAQD,MAGzB,MAAOE,IAIP,SAAqCb,GAGjC,IAAK,IAAIhO,EAAI,EAAG8O,EAAMd,EAAO/N,OAAQD,EAAI8O,EAAK9O,IAC1CuO,EAAuBP,EAAOhO,IAPlC+O,CAA4Bf,GAWhC,SAASO,EAAuBD,GAC5BtT,YAAW,WACP,IAAIgU,EAAUV,EAAQzO,aAAa,YAC/BmP,IACAV,EAAQpH,aAAa,MAAO8H,GAC5BV,EAAQnH,gBAAgB,eAE7B,IAzEX8H,GAnDAC,GAEApS,SAASoD,iBAAiB,oBAAoB,WAG1C,IAFA,IAAIiP,EAAoBrS,SAASiL,iBAAiB,+CAC9CqH,EAAY,EACP,EAAI,EAAG,EAAID,EAAkBlP,OAAQ,IAAK,CAC/C,IAAIoP,EAAa7K,OAAO8K,iBAAiBH,EAAkB,IAAII,iBAAiB,UAC5EC,OAAOH,EAAWlK,QAAQ,KAAK,KAAOiK,IACtCA,EAAYI,OAAOH,EAAWlK,QAAQ,KAAK,MAGnD,IAAIsK,EAAc3S,SAASkG,eAAe,gBACtCyM,IACAA,EAAY9D,MAAM+D,UAAaN,EAAY,GAAM,SAKtD,SAAS/B,IACZ,IAAIsC,EAAY7S,SAAS0D,cAAc,iCAEvC,GAAiB,MAAbmP,EACA,IACI,IAAI5S,EAAS,cAAgB6S,oBAAoBC,WACjD,GAAI9S,EAAQ,CACR,IAAI+S,EAAiBnS,KAAKC,MAAMJ,SAAST,IAEzC4S,EAAU/L,UAAYkM,EAAeC,mBAGrCJ,EAAU/L,UAAY,IAG9B,MAAOiL,GAAOmB,QAAQC,IAAIpB,+EChZlC,IAAIqB,EAAS,2BACTC,EAAe,4CACfC,EAA0B,mJA2C1BC,EAAgB,KAkDhBC,EAAa,SAAoBC,EAAa5V,EAAM6V,GACtD,GAAoB,OAAhBD,EACF,OAAO,KAGT,IAAIE,EAASF,EAAYzV,WAAMD,EAAWF,GAE1C,OArEoB,SAAyB8V,EAAQD,GAChDC,GAAWA,EAAOC,kBAIvBD,EAAOC,iBAAiB,CACtBjS,KAAM,YACNkS,QAAS,SACTH,UAAWA,IA4DbI,CAAgBH,EAAQD,GACjBC,GAKLI,EAAkBC,QAAQC,UAAUrO,MAAK,WAC3C,OA9DmCsO,EA8DjB,KA5DI,OAAlBX,IAIJA,EAAgB,IAAIS,SAAQ,SAAUC,EAASE,GAC7C,GAAsB,oBAAXzM,OAWX,GAJIA,OAAO0M,QAAUF,GACnBhB,QAAQmB,KAAKf,GAGX5L,OAAO0M,OACTH,EAAQvM,OAAO0M,aAIjB,IACE,IAAItL,EAnEO,WAGf,IAFA,IAAIwL,EAAUtU,SAASiL,iBAAiB,gBAAiBsJ,OAAOnB,EAAQ,OAE/DlQ,EAAI,EAAGA,EAAIoR,EAAQnR,OAAQD,IAAK,CACvC,IAAI4F,EAASwL,EAAQpR,GAErB,GAAKmQ,EAAamB,KAAK1L,EAAO2L,KAI9B,OAAO3L,EAGT,OAAO,KAsDU4L,GAET5L,GAAUoL,EACZhB,QAAQmB,KAAKf,GACHxK,IACVA,EAxDW,SAAsBoL,GACvC,IAAIS,EAAcT,IAAWA,EAAOU,qBAAuB,8BAAgC,GACvF9L,EAAS9I,SAASoG,cAAc,UACpC0C,EAAO2L,IAAM,GAAGF,OAAOnB,GAAQmB,OAAOI,GACtC,IAAIE,EAAa7U,SAAS8U,MAAQ9U,SAAS+I,KAE3C,IAAK8L,EACH,MAAM,IAAIE,MAAM,+EAIlB,OADAF,EAAW7L,YAAYF,GAChBA,EA6CQkM,CAAad,IAGxBpL,EAAO1F,iBAAiB,QAAQ,WAC1BsE,OAAO0M,OACTH,EAAQvM,OAAO0M,QAEfD,EAAO,IAAIY,MAAM,+BAGrBjM,EAAO1F,iBAAiB,SAAS,WAC/B+Q,EAAO,IAAIY,MAAM,gCAEnB,MAAOE,GAEP,YADAd,EAAOc,QAjCPhB,EAAQ,UAPHV,EAHM,IAAoBW,KAgEjCgB,GAAa,EACjBnB,EAAuB,OAAE,SAAUhC,GAC5BmD,GACHhC,QAAQmB,KAAKtC,MAGjB,IC3GIoD,EACAC,EAQOC,EASPC,EC1BAC,EACJ,CAEIC,8BAA+B,WAC3B,GAAI1W,KAAK2W,0BACL,OAAO/N,OAAOgO,eAAeC,QAAQ,sCAG7CC,+BAAgC,SAAUC,GAClC/W,KAAK2W,4BACAI,EAIDnO,OAAOgO,eAAeI,QAAQ,oCAAqCD,GAHnEnO,OAAOgO,eAAeK,WAAW,uCAO7CC,gCAAiC,WAC7BlX,KAAK8W,+BAA+B,OAGxCK,oBAAqB,WACjB,GAAInX,KAAK2W,0BAA2B,CAChC,IAAIS,EAAUxO,OAAOgO,eAAeC,QAAQ,gCAC5C,OAAOO,EAAUrV,KAAKC,MAAMoV,GAAW,OAG/CC,qBAAsB,SAAUC,EAAwBC,EAAsBC,GAC1E,GAAIA,GAAqBF,GAA0BC,EAAuB,CACtE,IAAIE,EAAS,CACTC,eAAgBJ,EAChBK,aAAcJ,GAEdvX,KAAK2W,2BACL/N,OAAOgO,eAAeI,QAAQ,+BAAgCjV,KAAKa,UAAU6U,MAKzFG,sBAAuB,WACnB5X,KAAKqX,qBAAqB,KAAM,MAAM,IAI1CQ,iBAAkB,WACd7X,KAAKkX,kCAELlX,KAAK4X,yBAETjB,wBAAyB,WACrB,IAAImB,EAAU,OAAQC,EAAUnP,OAAOgO,eACvC,IAGI,OAFAmB,EAAQf,QAAQc,EAAS,KACzBC,EAAQd,WAAWa,IACZ,EACT,MAAO3B,GAEL,OADA/B,QAAQC,IAAI8B,EAAO,0BAA2B,KACvC,gEDvCb6B,EAA8B,IAAIC,QAGjC,SAASC,EAAqBC,GACjC9B,EAAM8B,EAHVH,EAAeI,IAAI,eAAgB,oBAOnC,IAAIC,EAA0B,yBAC1BC,EAA2B,+BAC3BC,EAA4B,8BAEzB,SAASC,EAA2BC,GACvC,MAgsCIC,EACAC,EAjsCAC,GACC,QA0fL,SAA4BxH,GACxB,IAAIyH,EAAqB3X,SAASkG,eAAe,sBAEjDR,MAAMoN,oBAAoB8E,gBAAiB,CACvCjS,OAAQ,OACRoD,KAAMlI,KAAKa,UAAUwO,GACrB2H,QAASf,IACVlR,MAAK,SAAAC,GAAY,OAAAA,EAASoK,UACxBrK,MAAK,SAAUhJ,GAIZ,GAHaoD,SAAS0D,cAAcyT,GAC7BrQ,UAAYlK,EAEf+a,EAAoB,CACpB,IAAIG,EAAYH,EAAmBI,WAAU,GACzCJ,EAAmB7G,YACnB6G,EAAmB7G,WAAWG,aAAa6G,EAAWH,GAE9D,IAAIxC,EAAyBnV,SAASkG,eAAe,OACjDiP,GACA6B,EAAqB7B,EAAIpY,QAE7B,UACAua,GAA2B,GAE3B,IAAIU,EAAiChY,SAASkG,eAAe,gBACzD+R,EAAwBjY,SAASkG,eAAe,yBAChDgS,EAAelY,SAAS0D,cAAc,wCAEtCsU,GACAC,EAAsBnR,UAAY,UAAGkR,EAAajb,OAC9Cmb,GAAcA,EAAazL,UAAUM,IAAI,gBAG7CkL,EAAsBE,QAAS,EAC3BD,GAAcA,EAAazL,UAAUC,OAAO,oBA3hBxD,IACA,CAAE,SAAW,EAAO,UAAY,IAKxC,GAwrCI8K,EAAcxX,SAASkG,eAAe,oBACtCuR,EAAuE,QAAzD,EAAAzX,SAASyC,uBAAuB,iCAAyB,eAAEE,KAAK,MAE1E6U,EACAC,EAAYrN,aAAa,SAAU,UAEnCqN,EAAYpN,gBAAgB,WA9rChCkN,EACIpC,IACAE,EAAexU,KAAKC,MAAM,SAAWqU,SACtC,CACH,IAAIiD,EAA0BpY,SAASkG,eAAe,QAElDkS,IAEA9C,EAAQzU,KAAKC,MAAM,SAAWsX,EAAKrb,SAU3C,GAAKsY,GAAiBC,EAAtB,CAYA,IAAI+C,EAQJ,GAPM3Q,OAAQ4Q,oBAAsB,SAAUC,GAC1CF,EAAwBE,EACxBC,KAKAnD,GAAgBA,EAAaoD,aAAc,CAC3C,IAAIpW,EAAKrC,SAASkG,eAAe,kBAC7B7D,GACAA,EAAGoK,UAAUC,OAAO,UAK5B,IAspCIgM,EAtpCAC,EAA+B3Y,SAASkG,eAAe,oBACvD0S,EAAqC5Y,SAASkG,eAAe,0BASjE,GAPIyS,GACAA,EAAUvV,iBAAiB,SAAUyV,GAGrCD,GACAA,EAAgBxV,iBAAiB,SAAUyV,IAEhC,IAAXtB,GACA,GA6oCoB,OAFpBmB,EAAgB1Y,SAASkG,eAAe,qBAEKnI,MAAjB2a,EA7oCN,CAClB,IAAII,EAAYH,EAAU5b,MAE1Bgc,EAAwBD,EAAWvD,EAAuBC,iCAA4C,IAAX+B,SAG3FlC,IAAiBA,EAAa2D,YAAc3D,EAAa4D,yBACzDT,IAyYR,WACI,IAAIU,EAAsClZ,SAASkG,eAAe,eAC9DyR,EAAqB3X,SAASkG,eAAe,sBAC7CiT,EAAsBnZ,SAASiL,iBAAiB,8BAcpD,SAASmO,EAAyBrY,GAC9B,IAAIsY,EAActY,EAAE4D,cAAc5B,aAAa,aAG/C2U,EAFW,CAAE2B,YAAaA,EAAa3M,QAAQ,IAKnD,SAAS4M,EAAwBvY,GAC7BA,EAAEyD,iBAEF,IAAI+U,EAAiBL,EAAiBnc,MACtC,GAAKwc,GAAqC,KAAnBA,EAAvB,CAEA,IAAIrJ,EAAO,CAAEmJ,YAAaH,EAAiBnc,MAAO2P,QAAQ,GAE1DgL,EAAoBxH,IA5BpBgJ,GACAA,EAAiB9V,iBAAiB,YA8BtC,SAAwCrC,GAClB,KAAdA,EAAEmN,SACFoL,EAAwBvY,MA9B5B4W,GAAsBuB,GACtBvB,EAAmBvU,iBAAiB,QAASkW,GAG7CH,GAAuBA,EAAoBhW,OAAS,GACpDgW,EAAoB/W,SAAQ,SAAUoX,GAClCA,EAAOpW,iBAAiB,QAASgW,MAnZzCK,GAUJ,IAAIC,EAAa1Z,SAASiL,iBAAiB,UAAGmM,EAAwB,4CAElEsC,GACAA,EAAWtX,SAAQ,SAAUC,EAAIa,GAC7Bb,EAAGe,iBAAiB,SAAS,SAAUrC,GACnC,IAAI4Y,EAActX,EAAIU,aAAa,YAC/B6W,EAAOC,IAAyBD,KAChCE,EAAeF,KAGfA,GA6uBRtE,EAAaA,EAAMyE,IAAX,IA7uBwB7W,GAE5B,IAAI8W,EAAWC,EAAgBL,EAAMD,GAEhCK,GAAyB,IAAbA,IACbJ,EAiqBb,SAA6BD,GAChC,IAQIO,EARQC,IAAkBC,KAAI,SAAUC,GACxC,MAAO,CAAEC,IAAKD,EAAEnX,EAAG8E,OAASiS,EAAgBI,EAAEnX,EAAGyW,GAAeY,aAAcF,EAAEG,OAE3DC,QAAO,SAAUJ,GACtC,OAAoB,OAAbA,EAAErS,UAIiB0S,QAAO,SAAUC,EAAUC,GACrD,OAAQA,EAAI5S,OAAS2S,EAAI3S,OAAU4S,EAAMD,KAE7C,OAAKT,EAEEA,EAAWI,IAFM,KA7qBDO,CAAoBlB,GAC3BK,EAAWC,EAAgBL,EAAMD,IAGrCmB,EAAuBlB,EAAMD,EAAaK,GAAU,SAUhE,IAAMe,EAA6B,IAAIC,MAAM,8BAEzCC,EAAcjb,SAASiL,iBAAiB,UAAGmM,EAAwB,+CACnE6D,GACAA,EAAY7Y,SAAQ,SAAUC,EAAIa,GAC9Bb,EAAGe,iBAAiB,SAAU8X,GAC9B7Y,EAAGe,iBAAiB,6BAA8B8X,MAI1D,IAAIC,EAAenb,SAASkG,eAAe,gBAEvCiV,GACAA,EAAa/X,iBAAiB,QAASgY,GAgBT,IAAIJ,MAAM,6BAA5C,IASIK,EAAS9F,EAAuBU,sBAChCqF,EAAmBtb,SAAS0D,cAAc,UAAG0T,EAAwB,uDAErEiE,GAAUA,EAAO7E,gBAAkB6E,EAAO5E,cAEvCqE,EAAuBO,EAAO7E,eAAgB6E,EAAO5E,aAAcwD,EAAgBoB,EAAO7E,eAAgB6E,EAAO5E,gBAMhH6E,GACAA,EAAiB1Q,cAAcmQ,GA+iBvCQ,IAjlBA,SAASL,EAAsB7Y,GAC3B,IAAIuX,EAAOvX,EAAGqJ,OAAQ3I,aAAa,aAC/B4W,EAAcE,IAAyB2B,IACvCxB,EAAWC,EAAgBL,EAAMD,GAEhCK,GAAyB,IAAbA,IAEbA,EAAWC,EAAgBL,EAD3BD,EAAc8B,EAAc7B,KAIhCkB,EAAuBlB,EAAMD,EAAaK,GAK9C,SAASnB,EAAqBxW,GAC1B,IAAIqZ,EAAcrZ,EAAGqJ,OAAO3O,OAC5B,QAAgB2e,GAyBpB,SAAS5B,EAAeF,GACpB,IAAI+B,EAAOC,EAAUhC,GACrB,OAAK+B,GAAQA,EAAKxY,QAAU,EAAU,KAE/BwY,EAAK,GAAGnB,GAkBnB,SAASX,IACL,IAAIrD,EAAoCxW,SAASkG,eAAe,kBAC5DuQ,EAAkCzW,SAASkG,eAAe,gBAM9D,MALmB,CACf0T,KAAMpD,EAAezZ,MACrBye,IAAK/E,EAAa1Z,OAM1B,SAAS+d,EAAuBlB,EAAWD,EAAkBK,EAAe6B,sBAAA,IAAAA,IAAAA,GAAA,GAIlElC,GAAgBG,EAAeF,IAAWiC,IAC5ClC,EAAc8B,EAAc7B,IAGhC,IAAIkC,EAAmB,UAAG1E,EAAwB,yBAC9C2E,EAAU/b,SAAS0D,cAAc,UAAGoY,EAAgB,sBAAcnC,EAAW,OAC7EnD,EAAoCxW,SAASkG,eAAe,kBAC5D8V,EAAmChc,SAASkG,eAAe,iBAC3DuQ,EAAkCzW,SAASkG,eAAe,gBAE9D,IAAI6V,MAAAA,OAAO,EAAPA,EAAStP,UAAUQ,SAAS,iBAA8B,MAAZ+M,EAM9C,OALIiC,EAAgBjc,SAASkG,eAAe,2BAEvB8V,IACjBC,EAAcC,aAAc,OAAkBF,EAAcjf,MAAOof,yBAA0BC,4BAE1F,EAGX,IAAIC,EA5DR,SAAyCzC,GACrC,OAA0B5Z,SAAS0D,cAAc,UAAG0T,EAAwB,iEAAyDwC,EAAI,OA2D5H0C,CAAgC1C,GAGzC2C,IAAyB/F,GAAiBA,EAAezZ,OAAS6c,EAClE4C,IAA0BR,GAAgB/T,YAAW+T,MAAAA,OAAa,EAAbA,EAAejf,QAAS,QAAUkL,WAAW+R,GAAY,GAC9GyC,IAAyBhG,GAAeA,EAAa1Z,OAAS4c,EAGlE,GAFuBpC,KAAYgF,GAA0BC,GAA2BC,GAKpF,OAFIJ,IACAA,EAAOK,SAAU,IACd,EAG0D,QAArE,EAAA1c,SAAS0D,cAAc,UAAG0T,EAAwB,4BAAmB,SAAE3K,UAAUC,OAAO,iBACN,QAAlF,EAAA1M,SAAS0D,cAAc,UAAG0T,EAAwB,yCAAgC,SAAE3K,UAAUC,OAAO,gBAClF1M,SAAS0D,cAAc,UAAG0T,EAAwB,qCAAqChN,aAAa,UAAW,SAElIiS,EAAOK,SAAU,EACgB,QAAjC,EAAAL,EAAOnS,QAAQ,0BAAkB,SAAEuC,UAAUM,IAAI,gBAGjD,IAAI4P,EAAWC,EAAehD,EAAMD,GAGpC,GAAIG,EAAeF,GAAO,CACtB,IAAIiD,EAAwBF,EAAS,GAAGlR,EACxC,GAAIoR,GAAyBlD,EAEzB,YADAmB,EAAuBlB,EAAMiD,EAAuB7C,GAK5D,IAAI8C,EAAU9c,SAASiL,iBAAiB6Q,GAEpCgB,GACAA,EAAQ1a,SAAQ,SAAUrB,EAAGmC,GACzBnC,EAAE0L,UAAUC,OAAO,gBAIvBqP,GACAA,EAAQtP,UAAUM,IAAI,aAGJ/M,SAASiL,iBAAiB,UAAGmM,EAAwB,qBAE3DhV,SAAQ,SAAUC,EAAIa,SAC9B6Z,EAAsD,QAA7C,EAAA1a,EAAGqB,cAAc,oCAA4B,eAAEX,aAAa,aACrE8E,EAAUoS,EAAgB8C,EAAQpD,GAEvB,MAAX9R,IAEAA,EAAUoS,EAAgB8C,EAAQtB,EAAcsB,KAIpD,IAAIC,GAAiB,OAAkBnV,EAASsU,yBAA0BC,0BAEtEa,EAAY5a,EAAGqB,cAAc,wBAE7BuZ,IACAA,EAAUf,YAAcc,OAI5BxG,EAAoCxW,SAASkG,eAAe,qBAG5DsQ,EAAezZ,MAAQ6c,IAEvBnD,EAAkCzW,SAASkG,eAAe,mBAG1DuQ,EAAa1Z,MAAQ4c,GAGzB,IAAIuD,EAAYb,EAAOtZ,aAAa,kBAChCoa,EAAQ,KAEZ,GAAID,EAAW,CACX,IAAIE,EAAY7f,SAAS2f,GAAa,EAClCG,EA2ehB,SAA2BzD,EAAWD,EAAsB2D,GAExD,IAAIC,EAAQX,EAAehD,EAAMD,GACjC,IAAK4D,GAASA,EAAMpa,QAAU,EAAG,OAAO,KAExC,IAAIwZ,EAAWC,EAAehD,EAAM,MAChC4D,EAAWb,EAASvc,QAAQmd,EAAM,IACtC,GAAIC,EAAW,EAAG,OAAO,KAEzB,IADA,IAAIN,EAAY,GACPha,EAAIsa,EAAUta,GAAKsa,EAAWF,EAASpa,IAC5Cga,EAAU5Z,KAAKqZ,EAASzZ,GAAGuI,GAE/B,OAAOyR,EAvfsBO,CAAkB7D,EAAMD,EAAayD,GAE1DC,MAAAA,GAAAA,EAAgBjb,SAAQ,SAAUiY,EAAGxO,SAC6B,QAA9D,EAAA7L,SAAS0D,cAAc,UAAGoY,EAAgB,sBAAczB,EAAC,cAAK,SAAE5N,UAAUM,IAAI,gBAElFoQ,EAAQE,MAAAA,OAAc,EAAdA,EAAgBhS,OAAO,GAAG,GAEtC,IAWI4Q,EAXAyB,EAAsC1d,SAASkG,eAAe,oBAE9DwX,IACAA,EAAiB3gB,MAAQogB,IAGzBnB,EAAmChc,SAASkG,eAAe,oBAG3D8V,EAAcjf,MAAQid,IAEtBiC,EAAgBjc,SAASkG,eAAe,4BAGxC+V,EAAcC,aAAc,OAAkBlC,EAAUmC,yBAA0BC,2BAEtF,IAAIuB,EAAwB3d,SAASkG,eAAe,yBAEhDyX,GAAyBtI,EAAauI,kBACtCD,EAAsBzB,aAAc,OAAkB7G,EAAauI,gBAAiBzB,yBAA0BC,2BAElH,IAAIyB,EAAcxI,EAAayI,cAAgBzI,EAAayI,aAAaC,aACnE1I,EAAayI,aAAaE,cAAgB,EAC5CC,EAA+Bje,SAASkG,eAAe,gCACvD+X,GAAgC5I,EAAauI,kBAC7CK,EAA6B/B,aAAc,OAAkB7G,EAAauI,gBAAkB5D,EAAW6D,EAAa1B,yBAA0BC,2BAIlJ7G,EAAuBY,qBAAqBK,EAAezZ,MAAO0Z,EAAa1Z,OAG/EiD,SAAS0D,cAAc,UAAG0T,EAAwB,0CAA0CtQ,UA+fpG,SAA0C6S,GAItC,OAAOuE,EAAkCvE,EAH3B,CACVwE,MAAO,SAjgBiGC,CAAiCzE,GAGzI,IAAI0E,EA7KR,SAA6BzE,GACzB,IAAI+B,EAAOC,EAAUhC,GACrB,OAAK+B,GAAQA,EAAKxY,QAAU,EAAU,KAE/BwY,EAAK,GAAG2C,GAyKOC,CAAoB3E,GAAQ,2CAA6C,YAC3F4E,EAAazC,EAAUA,EAAQhZ,aAAa,mBAAqB,GAEjEsb,GADS,MAATlB,EACmB,WAAaqB,EAAa,YAG1B,mBAAqBA,EAAa,QA+ejE,SAAqC7E,GAKjC,OAAOuE,EAAkCvE,EAJ3B,CACV8E,QAAS,QAASC,KAAM,UAAWP,MAAO,QAC1C3C,IAAK,YAlf8DmD,CAA4BxB,GAAS,YAExG,IAAIyB,GAAuBvC,EAAOtZ,aAAa,yBAA2B,IAAIR,OAC9E8b,GAAmBO,EAAsB,KAAOA,EAAsB,GAGiB,QAAvF,EAAA5e,SAASiL,iBAAiB,UAAGmM,EAAwB,2CAAkC,SAAEhV,SAAQ,SAAUrB,EAAQmC,GAC/G,IAAI2b,EAAQ9d,EAAEgC,aAAa,cAC3BhC,EAAEmb,YAAc2C,KAGpB,IAAIC,EAAqD,QAAjC,EAAAzC,EAAOnS,QAAQ,0BAAkB,eAAExG,cAAc,kBAOzE,OALIob,IACAA,EAAkBhY,UAAYuX,GAElCU,EAAqBnF,EAAMD,IAEpB,EAGX,SAASoF,EAAqBnF,EAAWD,GACrC,QAA8B5b,IAA1Bsa,EAAJ,CA9VJ,IAEQ2G,EAiWAC,EAAoBjf,SAAS0D,cAAc2T,GAC3CnH,EAAO,CACP0J,KAAMA,EACNnO,EAAGkO,EACHuF,IAAKC,IACLC,QAAS/G,IAAyB,GAIT4G,EAAkBhU,iBAAiB,8KAEzB9H,OAAS,EA0C5CuC,MAAM2Z,aAAaC,wBAAyB,CACxC3Z,OAAQ,OACRoD,KAAMlI,KAAKa,UAAUwO,GACrB2H,QAASf,IACVlR,MAAK,SAACC,GACL,GAAIA,EAAS0Z,GACT,OAAO1Z,EAASC,QAEpB,QAAgB,iEACjBF,MAAK,SAAUhJ,GACd4iB,EAA+B5iB,EAAO6iB,WAAY7iB,EAAO8iB,eAAgB9iB,EAAO+iB,qBAC5E/iB,EAAOgjB,yBAA0BhjB,EAAOijB,gBAAiBjjB,EAAOkjB,UAAWljB,EAAOmjB,6BACtFC,EAAuBpjB,MAnD3B8I,MAAM2Z,aAAaY,kBAAmB,CAClCta,OAAQ,OACRoD,KAAMlI,KAAKa,UAAUwO,GACrB2H,QAASf,IACVlR,MAAK,SAACC,GACL,GAAIA,EAAS0Z,GACT,OAAO1Z,EAASoK,QAEpB,QAAgB,iEACjBrK,MAAK,SAAUhJ,GACd,GAAIA,EAAQ,CACRqiB,EAAkBnY,UAAYlK,EAC9BojB,EAAuBpjB,GAEvB,IACMsjB,GADO,IAAIC,WACEC,gBAAgBxjB,EAAQ,aAEvCyjB,EAA+BH,EAAIha,eAAe,cAClDoa,EAA6CJ,EAAIha,eAAe,4BAChEqa,EAAoCL,EAAIha,eAAe,mBACvDsa,EAA8BN,EAAIha,eAAe,aACjDua,EAAmCP,EAAIha,eAAe,kBACtDyZ,EAAyCO,EAAIha,eAAe,wBAC5Dwa,EAAgDR,EAAIha,eAAe,+BAEvEsZ,EAA+BvX,WAAWoY,EAAWtjB,OAAQkL,WAAWwY,EAAe1jB,OACnFkL,WAAW0X,EAAqB5iB,OAAQkL,WAAWqY,EAAyBvjB,OAC5EwjB,EAAgBxjB,MAAoC,QAAnByjB,EAAUzjB,MAAiB2jB,EAA4B3jB,OAE5F,IAAI4jB,EAAU3gB,SAASiL,iBAAiB,UAAGoM,EAAyB,YAEhE4H,GACA0B,EAAQve,SAAQ,SAAUoX,GACtBA,EAAOpW,iBAAiB,QAAS,iBA/Yb,mBADpC4b,EAAiCtX,OAAQsX,2BACsC,OAA7BA,GAClDA,IAqaR,SAASxG,IACL,IAAIoB,EAA0B5Z,SAASkG,eAAe,kBAClD0a,EAAwB5gB,SAASkG,eAAe,iBAE/C0T,GAASgH,KAEdrL,EAAuBY,qBAAqByD,EAAK7c,MAAO6jB,EAAG7jB,OAC3DgiB,EAAqBnF,EAAK7c,MAAO6jB,EAAG7jB,QAoFxC,SAASijB,EAAuBpjB,SAC5B,GAAIA,EAAOikB,QAAS,CAChB,IAAIC,EAAkB9gB,SAASiL,iBAAiB,2CAC5C8V,EAA0B/gB,SAAS0D,cAAc2T,GAEjDyJ,GACAA,EAAgB1e,SAAQ,SAAUoX,GAC9BA,EAAO9M,YAGf,IAAMsU,EAAchhB,SAASkG,eAAe,sBAExC8a,IACIpkB,EAAOqkB,kBACPD,EAAY3W,gBAAgB,UAE5B2W,EAAY5W,aAAa,SAAU,WAI3C,IAAI8W,EAAqE,QAAlD,EAAAlhB,SAASyC,uBAAuB,0BAAkB,eAAEE,KAAK,GAEhF,GAAIue,EAAkB,CAClB,IAAI,GAAY,EAChBtkB,EAAOikB,QAAQze,SAAQ,SAAUC,GAC7B,IA6BsB8e,EA7BhBC,EAAU/e,EACVgf,EAAkC,OAAjBD,EAAQrkB,MAAiB,kBAAoB,GAC9DukB,EAAoC,KAAvBF,EAAQG,WACrBH,EAAQI,YACR,sBAAeH,EAAc,kBAAUD,EAAQG,WAAWlZ,QAAQ,IAAK,IAAG,cAAM+Y,EAAQI,aAE9F,GAAqB,UAAjBJ,EAAQrkB,MACR,GAAsB,OAAlBqkB,EAAQrkB,MACR,GAAY,MACT,CACH,IAAMyc,QAmBQ,KAAA2H,GAnBeC,EAAQK,aAmBvBN,GAAA,GACX,qFAC4CC,EAAQrkB,MAAK,uEAC7BqkB,EAAQhW,GAAE,6DACpB+V,EAAc,gBAAkB,GAAE,8DAAsDC,EAAQM,SAAQ,6DACvHJ,EAAU,4CAvBVK,EAAYP,EAAQK,UAMlC,iBACI,IAAKV,EAAwBrd,cAAc,4BAA6B,CACpE,IAAMke,EAAwB5hB,SAASoG,cAAc,OAErDwb,EAAsBnV,UAAUM,IAAI,2BACpC6U,EAAsBxX,aAAa,eAAgB,IACnD2W,EAAwB/X,YAAY4Y,GAGxC,OAAiE,QAA1D,EAAA5hB,SAASyC,uBAAuB,kCAA0B,eAAEE,KAAK,GAf9Bkf,GAAyBX,GA2BvE,SAA8BS,EAAoBnI,GAC9CmI,EAAU7a,WAAa0S,EA1BnBsI,CAAqBH,EAAWnI,OA8B5C,IAAMuI,EAAwB/hB,SAASkG,eAAe,2BAClD8b,EAAYhiB,SAAS0D,cAAc,sBAElC,IAAaqe,MAAAA,OAAqB,EAArBA,EAAuBE,kBACrCF,EAAuBjb,UAAY,GAE/Bkb,GACAA,EAAUtV,WAEP,GAAeqV,GAA0BA,EAAsBE,kBACtEC,EAAgBtlB,EAAOmjB,8BAElBiC,GAAaD,KACdC,EAAYhiB,SAASoG,cAAc,QACzBgE,aAAa,kBAAmB,IAC1C4X,EAAU5X,aAAa,iBAAkBxN,EAAO6iB,YAChDuC,EAAU5X,aAAa,0BAA2B,MAElD2X,EAAsBI,sBAAsB,WAAYH,MAMxE,IAAIrB,EAAU3gB,SAASiL,iBAAiB,sCAEpC0V,GACAA,EAAQve,SAAQ,SAAUggB,GACtBA,EAAIhf,iBAAiB,QAAS,SAItC,IAAIif,EAA8BriB,SAASkG,eAAe,mBAE1D,GAAImc,EAAY,CACZ,IAAIC,EAA2CtiB,SAAS0D,cAAc,kCAClE4e,GACAA,EAAsB5V,SAE1B,IAAI6V,EAAqBviB,SAASoG,cAAc,SAChDmc,EAAmBnY,aAAa,OAAQ,sBACxCmY,EAAmBnY,aAAa,SAAU,UAE1CmY,EAAmBxlB,MAiMpB,SAAW8D,KAAKa,UAAUyd,MA/LzBkD,EAAWtb,OAAOwb,GAItBhH,IAGJ,SAASA,IAEL,IAsSAiH,EAtSIC,EAAYziB,SAASiL,iBAAiB,UAAGmM,EAAwB,gBACjEsL,EAAoB1iB,SAASiL,iBAAiB,UAAGkM,EAAuB,0CAExEgI,IAAcwD,+BAmSlBH,EAAsCxiB,SAASkG,eAAe,oBAAsBnJ,QAC7DylB,GAA0B9a,OAAQkb,oBAlSrDrN,EAAuBS,kCAGnByM,GACAA,EAAUrgB,SAAQ,SAAUC,EAAIa,GAC5Bb,EAAGoK,UAAUC,OAAO,aAKxBgW,GACAA,EAAkBtgB,SAAQ,SAAUC,EAAIa,GACpCb,EAAGoK,UAAUM,IAAI,eAMrB0V,GACAA,EAAUrgB,SAAQ,SAAUC,EAAIa,GAC5Bb,EAAGoK,UAAUM,IAAI,aAIrB2V,GACAA,EAAkBtgB,SAAQ,SAAUC,EAAIa,GACpCb,EAAGoK,UAAUC,OAAO,cAMhC,IAAImW,EAAa7iB,SAASiL,iBAAiB,UAAGmM,EAAwB,oBAElEyL,GACAA,EAAWzgB,SAAQ,SAAUC,GACzBA,EAAGe,iBAAiB,QAAS0f,MAKzC,SAASA,EAA4BzgB,GACjC,IAAI0gB,EAAa1gB,EAAGqJ,OAAO3I,aAAa,QACpCwS,EAAuBC,kCAAoCuN,IAC3DxN,EAAuBK,+BAA+BmN,GAEtDhK,EAAwBD,EAAWvD,EAAuBC,iCAAiC,KAQhG,SAASwN,EAAQC,GAChBA,IACA3N,EAAQzU,KAAKC,MAAM,SAAWmiB,KAI/B,SAASlK,EAAwByJ,EAAuBU,EAAiCC,GAC5F,IAAIpa,EAAO,CACPyZ,iBAAkBA,EAClBY,mBAAoBF,EACpB7N,aAAcA,GAGZyB,EAA8B,IAAIC,QACxCD,EAAeI,IAAI,eAAgB,oBACnCxR,MAAM2d,qBAAqBC,wBAAyB,CAChD3d,OAAQ,OACRoD,KAAMlI,KAAKa,UAAUqH,GACrB8O,QAASf,IACVlR,MAAK,SAACC,GACL,GAAIA,EAAS0Z,GACT,OAAO1Z,EAASoK,QAEpB,QAAgB,6DACjBrK,MAAK,SAAUsK,GACd,GAAIA,EAAM,CACN,IAAIqT,EAAevjB,SAAS0D,cAAc0T,GACtC+L,GAAiB5N,EAAuBmB,wBACxC6M,IAAcA,EAAazc,UAAYoJ,GAE3CoH,GAA2B,IAC3B,aAML,SAAS2C,EAAgBL,EAAWD,GACvC,IAAI4D,EAAQX,EAAehD,EAAMD,GACjC,OAAK4D,GAASA,EAAMpa,QAAU,EAAU,KAE1Boa,EAAM,GAAGiG,EAsB3B,SAAS/H,EAAc7B,GACnB,IAAI6J,EAAS7G,EAAehD,EAAM,MAElC,OAAK6J,GAAUA,EAAOtgB,QAAU,EAAU,KAG7BsgB,EAAO,GAAGhY,EAoB3B,SAASmR,EAAehD,EAAWD,GAC/B,IAAIgC,EAAOC,EAAUhC,GAErB,IAAK+B,GAAQA,EAAKxY,QAAU,EAAG,OAAO,KAEtC,IAAIwZ,EAAWhB,EAAK,GAAG+H,IAEvB,OAAmB,MAAf/J,EAA4BgD,EAGpBA,EAASlC,QAAO,SAAUJ,EAAQnX,GAC1C,OAAQmX,EAAE5O,GAAKkO,KAKvB,SAASiC,EAAUhC,GAKf,OAJWO,IAAkBM,QAAO,SAAUJ,EAAQnX,GAClD,OAAQmX,EAAEnX,GAAK0W,KAMhB,SAASO,IACZ,OAAQ7E,EAAaA,EAAM2N,IAAX,GAKpB,SAAS9D,IACL,OAAQ7J,GAAS,GAmBrB,SAAS4I,EAAkCvE,EAAkBnd,GAEzD,GAAImd,EAAa,CACb,IAAIgK,EAAYhK,EAAYzZ,MAAM,KAGlC,OAFa,IAAIxC,KAAKimB,EAAU,GAAIpmB,SAASomB,EAAU,IAAM,EAAGA,EAAU,IAE5DC,mBAAmB,QAASpnB,GAG9C,MAAO,GAIX,SAASgjB,EAA+Ba,EACpCI,EACAd,EACAkE,EACAC,EACAtD,EACAE,GAEA,IAAKljB,MAAM6iB,GAAa,CACpB,IAAI0D,EAAQ/jB,SAASkG,eAAe,gCAEhC6d,IACAA,EAAMjd,WAAY,OAAiBuZ,EAAYlE,yBAA0BC,2BAE7E,IAAI4H,EAAiBhkB,SAASiL,iBAAiB,4BAE3C+Y,GACAA,EAAe5hB,SAAQ,SAAUrB,GAC7BA,EAAEmb,aAAc,OAAiB2H,EAAiB1H,yBAA0BC,6BAGpF,IAAI6H,EAAiB5D,GAAc,EAEnC,GAAII,EAAiB,GAAKd,EAAuB,EAAG,CAChD,IAAIuE,EAAqBlkB,SAAS0D,cAAc,oDAC5CwgB,IACAA,EAAmBpd,UAAY,UAAG2Z,EAAc,0FACb,OAAiBd,EAAsBxD,yBAA0BC,0BAAyB,8GAClD,OAAiBiE,EAAaV,EAAsBxD,yBAA0BC,0BAAyB,YAClL8H,EAAmBzX,UAAUC,OAAO,WAId1M,SAASkG,eAAe,0BAEtB+d,GA+ExC,SAAuCE,GACnC,IAAI3mB,MAAM2mB,GAAV,CAIA,IAAIC,EAA+BpkB,SAASkG,eAAe,wBAA0BnJ,MACjFid,EAA8Bha,SAASkG,eAAe,iBAAmBnJ,ODp5BhE,WACf,IAAK,IAAIsnB,EAAOxlB,UAAUsE,OAAQtF,EAAO,IAAIqN,MAAMmZ,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IAC/EzmB,EAAKymB,GAAQzlB,UAAUylB,GAGzBpP,GAAa,EACb,IAAIxB,EAAYhW,KAAKD,MACrB,OAAOsW,EAAgBnO,MAAK,SAAU6N,GACpC,OAAOD,EAAWC,EAAa5V,EAAM6V,OC84BrC,CAAkB0Q,GAAWxe,MAAK,SAAU+N,GACxC,IAAI4Q,EAAuBvkB,SAASkG,eAAe,wBACnD,GAA+C,IAA3Cqe,MAAAA,OAAoB,EAApBA,EAAsBC,mBAAwB,CAC9CpP,EAAiBzB,EAAOyB,eA4K5B,SAAkC+O,EAAgBM,GAC9C,MAAO,CACHC,QAAS,KACTC,SAAU,MACVZ,MAAO,CACHa,MAAO,sBACPT,OAAQU,EAAiBV,IAE7BW,kBAAkB,EAClBC,mBAAmB,EACnBC,iBAAiB,EACjBC,mBAAmB,EACnBR,gBAAiBA,GAxLkBS,CAAyBf,EAAQgB,EAAyBnL,KAEjG,IACIoL,EADWzR,EAAOnR,WACE6iB,OAAO,uBAAwB,CACnDjQ,eAAgBA,IAIpBA,EAAekQ,iBAAiB1f,MAAK,SAAUhJ,SAC3C,GAAIA,EAAQ,CACRwoB,EAASG,MAAM,yBACf,IAAI,EAAwBvlB,SAAS0D,cAAc,oCAC/C,GAAuB,EAAsB+I,UAAUC,OAAO,eAC/D,CACH,IAAI8Y,EAAkF,QAA1D,EAAAxlB,SAASyC,uBAAuB,kCAA0B,eAAEE,KAAK,GACzF6iB,GACAA,EAAsBpb,aAAa,SAAU,UAIrDgL,EAAeqQ,GAAG,iBAAiB,SAAUC,GACzC,IAGQtN,EAEAuN,EAEAzV,EAPJmS,EAA8BriB,SAASkG,eAAe,mBA4E1D,SAAS0f,EAAkBC,EAAoBC,GAC3C,IAAI5V,EAAO,CACP4V,YAAaA,EACbD,cAAehlB,KAAKa,UAAUmkB,IAGlCngB,MAAM,6BAA8B,CAChCC,OAAQ,OACRoD,KAAMlI,KAAKa,UAAUwO,GACrB2H,QAASf,IAIjB,SAASiP,EAA4BL,EAASG,EAAoBG,GAC9D,IAAI9V,EAAO,CACP+V,gBAAiBP,EAAGO,gBACpBC,gBAAiBL,EAAcM,cAAc/a,GAC7Cgb,cAAeV,EAAGW,WAClBC,aAAcN,EAA4BO,aAC1CC,cAAed,EAAGe,YAEtB/gB,MAAM,2BACF,CACIC,OAAQ,OACRoD,KAAMlI,KAAKa,UAAUwO,GACrB2H,QAASf,IACVlR,MAAK,SAAAC,GAAY,OAAAA,EAASC,UAC5BF,MAAK,SAAUhJ,IACRA,EAAO8pB,SAAkC,KAAvB9pB,EAAO+pB,aAGG,KAAvB/pB,EAAO+pB,eAFZjf,OAAO9C,SAAWhI,EAAO+pB,gBAhCpCC,IAtEGxO,EAA0BpY,SAASkG,eAAe,QAElDyf,EAAMtD,EAAWtf,aAAa,WAE9BmN,EAAO,IAAI2W,SAASxE,IAEnBnL,IAAI,qBAAsBkB,EAAKrb,OACpCmT,EAAKgH,IAAI,WAAY,UACrBhH,EAAKgH,IAAI,kBAAmB,QAE5BxR,MAAMigB,EAAK,CACPhgB,OAAQ,OACRoD,KAAMmH,IACPtK,MAAK,SAACC,GACDA,EAAS0Z,KACTqH,GAAqB,EAErBlhB,MAAM,wDAAiDggB,EAAGoB,cAAc1b,GAAE,sBAAcsa,EAAGO,gBAAgBc,UAAS,0BAAkBrB,EAAGW,WAAU,wBAAgBX,EAAGe,aAAc7gB,MAAK,SAAUC,GAC/L,OAAOA,EAASC,UACjBF,MAAK,SAAUogB,GACdrS,EAAOqT,mBACHhB,EAA4BO,aAC5B,CACIU,eAAgBvB,EAAGoB,cAAc1b,GACjC8b,SAAU,CACNC,QAAS,CACLC,KAAM1B,EAAGO,gBAAgBmB,KACzB1C,QAASgB,EAAGO,gBAAgBvB,QAC5B2C,MAAO3B,EAAGO,gBAAgBqB,YAAY,GACtCC,MAAgD,GAAzC7B,EAAGO,gBAAgBqB,YAAYnkB,OAAcuiB,EAAGO,gBAAgBqB,YAAY,GAAK,KACxFE,YAAa9B,EAAGO,gBAAgBwB,WAChCC,MAAOhC,EAAGO,gBAAgB0B,QAE9BhmB,KAAM+jB,EAAGO,gBAAgBc,UACzBa,MAAOlC,EAAGe,aAGlB,CAAEoB,eAAe,IACnBjiB,MAAK,SAAUigB,GACbD,EAAkBC,GAAe,GAC7BA,EAAc5Q,OACd6S,MAAMjC,EAAc5Q,OACpByQ,EAAGqC,SAAS,UAIZrC,EAAGqC,SAAS,WAI+B,oBAAvClC,EAAcM,cAAc6B,OAE5BrU,EAAOqT,mBAAmBhB,EAA4BO,cAAc3gB,MAAK,SAAUhJ,GAC/EgpB,EAAkBhpB,GAAQ,GACtBA,EAAOqY,MACP6S,MAAMlrB,EAAOqY,OAEb8Q,EAA4BL,EAAIG,EAAeG,MAIvDD,EAA4BL,EAAIG,EAAeG,kBAkD/E5Q,EAAeqQ,GAAG,yBAAyB,SAAUC,GACjD,IAAI/M,EAA+B3Y,SAASkG,eAAe,oBAAsBnJ,MAC7EkrB,EAAyBpnB,KAAKC,MAAyBd,SAASkG,eAAe,qBAAuBnJ,OAC1G,GAAI2oB,EAAGO,gBAAgBvB,UAAYuD,EAAkBtP,GACjD+M,EAAGwC,WAAW,CAAEF,OAAQ,kCACrB,GAAkC,MAA9BtC,EAAGO,gBAAgBvB,QAAiB,CAC3C,IAAIxU,EAAO,CACP+V,gBAAiBP,EAAGO,gBACpBG,cAAeV,EAAGW,WAClBG,cAAed,EAAGe,YAGtB/gB,MAAM,qCACF,CACIC,OAAQ,OACRoD,KAAMlI,KAAKa,UAAUwO,GACrB2H,QAASf,IACVlR,MAAK,SAAAC,GAAY,OAAAA,EAASC,UAC5BF,MAAK,SAAUhJ,GACRA,EAAO8pB,SAAkC,KAAvB9pB,EAAO+pB,YACzBjB,EAAGwC,WAAW,CAAEF,OAAQ,UAAWvD,gBAAiBU,EAAyBnL,KAG7E0L,EAAGwC,WAAW,CAAEF,OAAQ,4CAShD5S,EAAe+S,OAqBnB,SAAwChE,EAAgBM,GACpD,MAAO,CACHV,MAAO,CACHa,MAAO,sBACPT,OAAQU,EAAiBV,IAE7BM,gBAAiBA,GA3BC2D,CAA+BjE,EAAQgB,EAAyBnL,KAG1F,IAAI4M,GAAqB,MAnQrByB,CAA8BhI,GAKtC,IAAIiI,EAAQtoB,SAASkG,eAAe,kCAChCoiB,GAEIA,EAAM7b,UAAUC,OAAO,UAO/B,IAAMqV,EAAwB/hB,SAASkG,eAAe,2BAClDsa,GAAsD,GAAzCuB,EAAsBwG,SAASplB,QAC5C+e,IAIJ,IAAIsG,EAASxoB,SAASkG,eAAe,UACjCsiB,IACAA,EAAO1hB,UAAY0hB,EAAO1hB,UAAY,OAG1C,IAAI2hB,EAAkBzoB,SAAS0D,cAAc,iDACzCglB,EAAgB1oB,SAAS0D,cAAc,kDACvCilB,EAA0B3oB,SAASkG,eAAe,wBAClD0iB,EAAkB5oB,SAASkG,eAAe,4BACzCsa,GAAaiI,GAAmBC,GAAiBC,GAAgE,IAArCA,EAAwB7hB,WACzG8hB,GAAgD,IAA7BA,EAAgB9hB,YAC/B2hB,EAAgBhc,UAAUC,OAAO,QACjCgc,EAAcjc,UAAUC,OAAO,SAIvC,SAASwV,EAAgB2G,IACrB,OAAiB,CACbC,SAAUhW,oBAAoBiW,gBAC9BpE,SAAU,MACVqE,cAAe,GACfC,WAAY,qBASpB,SAASpE,EAAiBV,GACtB,OAAO5mB,UAAmB,IAAT4mB,GAAc/b,WAGnC,SAAS8gB,EAAajZ,GAClB,OAAOA,EAAK5H,QAAQ,yBAA0B,IAGlD,SAAS8c,EAAyBnL,SAC9B,OAAiD,QAA7C,EAAAha,SAAS0D,cAAc,8BAAsB,eAAEylB,aAAa,cACrD,CACH,CACI/d,GAAIpL,SAAS0D,cAAc,uBAAwBX,aAAa,aAChE6hB,MAAOsE,EAAalpB,SAAS0D,cAAc,gCAAiCX,aAAa,eACzFuB,OAAQ4kB,EAAalpB,SAAS0D,cAAc,gCAAiCwY,aAC7EiI,OAAQU,EAAiB7K,KAG1B,CAAC,CACJ5O,GAAI,MACJwZ,MAA8E,MAAvE5kB,SAAS0D,cAAc,6CAAuDwlB,EAAalpB,SAAS0D,cAAc,6CAA8CwY,aAAgB,yBACvL5X,OAAgF,MAAxEtE,SAAS0D,cAAc,8CAAwDwlB,EAAalpB,SAAS0D,cAAc,8CAA+CwY,aAAgB,yBAC1LiI,OAAQU,EAAiB7K,KA0NrC,SAASoB,EAAa/Y,GAClBA,EAAGqJ,OAAOmD,MAAMua,QAAU,OAE1B,IAAIC,EAAWrpB,SAASyC,uBAAuB,oBAC3C4mB,GAAYA,EAAS1mB,KAAK,IAC1B0mB,EAAS1mB,KAAK,GAAI0H,gBAAgB,wCE3nC1C,SAASpB,EAAoB0c,EAAK2D,QACX,IAAfA,IAAyBA,EAAa,IAC1C,IAAIC,EAAYvpB,SAASoG,cAAc,UAQvC,OAPAmjB,EAAU9U,IAAMkR,EAChB6D,OAAOC,KAAKH,GAAYlnB,SAAQ,SAAUE,GACtCinB,EAAUnf,aAAa9H,EAAKgnB,EAAWhnB,IAC3B,mBAARA,GACAinB,EAAUnf,aAAa,QAASkf,EAAW,sBAG5CC,EAkEX,SAASG,EAAyBC,GAE9B,OAAOjiB,OAAOiiB,GAElB,SAASC,EAAkBptB,EAASqtB,GAChC,GAAuB,iBAAZrtB,GAAoC,OAAZA,EAC/B,MAAM,IAAIuY,MAAM,+BAEpB,QAA+B,IAApB8U,GACoB,mBAApBA,EACP,MAAM,IAAI9U,MAAM,+DAKxB,cCxLM+B,EAA8B,IAAIC,QAKjC,SAAS+S,EACZC,EACAnF,EAQAoF,GAmFA,SAASC,IACL,OAAOvkB,MAAMoN,oBAAoBmX,yBAA0B,CACvDtkB,OAAQ,OACRkS,QAASf,IACVlR,MAAK,SAAU+U,GACd,OAAOA,EAAI7U,UACZF,MAAK,SAAUsK,GACd,OAAOA,EAAKga,cA1FpB,IAAAF,IAAAA,GAAA,GAC4BhqB,SAASkG,eAAe,6BAEhD6jB,EAAcI,eAfG,kFD8GzB,SAAoB3tB,EAASqtB,GAIzB,QAHwB,IAApBA,IAA8BA,EAAkB7V,SACpD4V,EAAkBptB,EAASqtB,GAEH,oBAAb7pB,SACP,OAAO6pB,EAAgB5V,QAAQ,MACnC,IAAImW,EA9ER,SAAwB5tB,GACpB,IAAI6tB,EAAa,gCACb7tB,EAAQ6tB,aACRA,EAAa7tB,EAAQ6tB,kBACd7tB,EAAQ6tB,YAEnB,IAqCyBnW,EACrBS,EAtCA2V,EAAyB9tB,EACzB4tB,EAAKZ,OAAOC,KAAKa,GAChB7P,QAAO,SAAUnY,GAClB,YAA+C,IAAhCgoB,EAAuBhoB,IACF,OAAhCgoB,EAAuBhoB,IACS,KAAhCgoB,EAAuBhoB,MAE1BoY,QAAO,SAAU6P,EAAajoB,GAC/B,IAwBAkoB,EAxBIztB,EAAQutB,EAAuBhoB,GAAKmoB,WAQxC,OAgBAD,EAAW,SAAUE,EAAOC,GAC5B,OAAQA,EAAe,IAAM,IAAMD,EAAMpjB,eAvBb,UAD5BhF,EAA2BA,EA0BpB+F,QAAQ,yBAA0BmiB,IAzBjCI,UAAU,EAAG,GACjBL,EAAYM,eAAevoB,GAAOvF,EAGlCwtB,EAAYO,YAAYxoB,GAAOvF,EAE5BwtB,IACR,CACCO,YAAa,GACbD,eAAgB,KAChBC,EAAcV,EAAGU,YAAaD,EAAiBT,EAAGS,eAMtD,OALIC,EAAY,iBACiC,IAA7CA,EAAY,eAAe1qB,QAAQ,OACnCyqB,EAAe,oBAAsBC,EAAY,eACjDA,EAAY,eAAiB,KAE1B,CACHnF,IAAK,GAAGpR,OAAO8V,EAAY,KAAK9V,QAUXL,EAVsC4W,EAW3DnW,EAAc,GAClB6U,OAAOC,KAAKvV,GAAQ9R,SAAQ,SAAUE,GACP,IAAvBqS,EAAYxR,SACZwR,GAAe,KACnBA,GAAerS,EAAM,IAAM4R,EAAO5R,MAE/BqS,IAhBHkW,eAAgBA,GA4CXE,CAAevuB,GAAUmpB,EAAMyE,EAAGzE,IAAKkF,EAAiBT,EAAGS,eAChElB,EAAYkB,EAAe,mBAAqB,SAChDG,EAA0BtB,EAAyBC,GAEvD,OA/GJ,SAAoBhE,EAAK2D,GACrB,IAAI2B,EAAgBjrB,SAAS0D,cAAc,eAAgB6Q,OAAOoR,EAAK,OACvE,GAAsB,OAAlBsF,EACA,OAAO,KACX,IAAIC,EAAajiB,EAAoB0c,EAAK2D,GAEtC6B,EAAqBF,EAAclT,YAGvC,UAFOoT,EAAmB1a,QAAQ2a,QAE9B5B,OAAOC,KAAK0B,EAAmB1a,SAAStN,SACxCqmB,OAAOC,KAAKyB,EAAWza,SAAStN,OAChC,OAAO,KAEX,IAAIkoB,GAAe,EAOnB,OALA7B,OAAOC,KAAK0B,EAAmB1a,SAASrO,SAAQ,SAAUE,GAClD6oB,EAAmB1a,QAAQnO,KAAS4oB,EAAWza,QAAQnO,KACvD+oB,GAAe,MAGhBA,EAAeJ,EAAgB,KA2FlCvW,CAAWiR,EAAKkF,IAAmBG,EAC5BnB,EAAgB5V,QAAQ+W,GAoBvC,SAA0BxuB,EAASqtB,QACP,IAApBA,IAA8BA,EAAkB7V,SACpD4V,EAAkBptB,EAASqtB,GAC3B,IAAIlE,EAAMnpB,EAAQmpB,IAAK2D,EAAa9sB,EAAQ8sB,WAC5C,GAAmB,iBAAR3D,GAAmC,IAAfA,EAAIxiB,OAC/B,MAAM,IAAI4R,MAAM,gBAEpB,QAA0B,IAAfuU,GAAoD,iBAAfA,EAC5C,MAAM,IAAIvU,MAAM,wCAEpB,OAAO,IAAI8U,GAAgB,SAAU5V,EAASE,GAE1C,GAAwB,oBAAbnU,SACP,OAAOiU,KA3HnB,SAA6BmW,GACzB,IAA8CkB,EAAYlB,EAAGkB,UAAWC,EAAUnB,EAAGmB,QACjFhC,EAAYtgB,EADNmhB,EAAGzE,IAAkByE,EAAGd,YAElCC,EAAUiC,QAAUD,EACpBhC,EAAU5hB,OAAS2jB,EACnBtrB,SAAS8U,KAAK5L,aAAaqgB,EAAWvpB,SAAS8U,KAAK2W,mBAuHhDC,CAAoB,CAChB/F,IAAKA,EACL2D,WAAYA,EACZgC,UAAW,WAAc,OAAOrX,KAChCsX,QAAS,WACL,IAAII,EAAe,IAAI5W,MAAM,eAAgBR,OAAOoR,EAAK,8FACzD,OAAOxR,EAAOwX,SAtCnBC,CAAiB,CACpBjG,IAAKA,EACL2D,WAAYuB,GACbhB,GAAiBjkB,MAAK,WACrB,IAAIimB,EAAqBnC,EAAyBC,GAClD,GAAIkC,EACA,OAAOA,EAEX,MAAM,IAAI9W,MAAM,cAAcR,OAAOoV,EAAW,0CCnHhDmC,CAAW/B,GACNnkB,MAAK,SAACmmB,GACHA,EAAQlL,QAAS,CACbhS,MAAO,CACHmd,MAAO,OACPC,OAAQ,GACRrH,MAAOA,EACPsH,iBAAiB,GAErBC,YAAa,WACT,GAAInC,EACA,OAAOtkB,MAAMoN,oBAAoBsZ,sBAAuB,CACpDzmB,OAAQ,SACTC,MAAK,SAAU+U,GACd,GAAIA,EAAI4E,GACJ,OAAO0K,OAIf,IAAM5H,EAA8BriB,SAASkG,eAAe,mBACtDkS,EAA0BpY,SAASkG,eAAe,QAClDyf,EAAMtD,EAAWtf,aAAa,UAC9BmN,EAAO,IAAI2W,SAASxE,GAM1B,OAJAnS,EAAKgH,IAAI,qBAAsBkB,EAAKrb,OACpCmT,EAAKgH,IAAI,WAAY,MACrBhH,EAAKgH,IAAI,kBAAmB,SAErBxR,MAAMigB,EAAK,CACdhgB,OAAQ,OACRoD,KAAMmH,IACPtK,MAAK,WACJ,OAAOqkB,QAInBoC,UAAS,SAACnc,GACN,IAAMoc,EAAWtsB,SAASoG,cAAc,UAMxC,OAJAkmB,EAASliB,aAAa,sBAAuB,UAC7CkiB,EAASlpB,iBAAiB,QAAS,MACnCkpB,EAASC,QAEF7mB,MAAMoN,oBAAoB0Z,aAAc,CAC3C7mB,OAAQ,OACRkS,QAASf,EACT/N,KAAMlI,KAAKa,UAAU,CACjBwoB,MAAOha,EAAKuc,QACZC,QAASxc,EAAKyc,YAEnB/mB,MAAK,SAACC,GAAa,OAAAA,EAASC,UAC1BF,MAAK,SAACgnB,GACH,IAA0B,IAAtBA,EAAUlG,QAAkB,CAC5B,IAAImG,EAAU7sB,SAAS0D,cAAc,gCACjCmpB,GACAA,EAAQpgB,UAAUC,OAAO,UAG7B,IAAIogB,EAAc9sB,SAASkG,eAAe,eAEtC4mB,GACAA,EAAY1iB,aAAa,SAAU,UAEvC1C,OAAO9C,SAAS0L,KAAOwC,oBAAoBia,mBAE3CrlB,OAAO9C,SAAS0L,KAAOwC,oBAAoBka,mBAI3DzB,QAAO,SAACxZ,GACJrK,OAAO9C,SAAS0L,KAAOwC,oBAAoBka,kBAEhDC,OAAO,+BAEbC,OAAM,SAACnb,GACJmB,QAAQ+B,MAAM,0CAA2ClD,OA7FzE+E,EAAeI,IAAI,eAAgB,4CCHnC,IAAIiW,EAAcntB,SAASkG,eAAe,mBAEvB,MAAfinB,GACAA,EAAY/pB,iBAAiB,SAAS,WAClC,IAAIgqB,EAAmBptB,SAASyC,uBAAuB,iBAAkBE,KAAK,GAC1E0qB,EAAkBrtB,SAASyC,uBAAuB,eAAeU,OAC/DmqB,EAAoBC,qBAAqBC,iBAAmBH,EAElE3nB,MAAM,UAAG6nB,qBAAqBE,qBAAoB,wBAAgBH,EAAiB,aAAa,CAC5F3nB,OAAQ,QACTC,MAAK,SAAAC,GAAY,OAAAA,EAASoK,UACxBrK,MAAK,SAAUsK,GACZkd,EAAiBtmB,UAAYoJ,EAEzBod,GAAqBC,qBAAqBG,eAC1CP,EAAate,MAAMua,QAAU,wHCdjD,WAII,aACItqB,KAAK6uB,iBA+Db,OA5DW,YAAAA,eAAP,WACS7uB,KAAK8uB,yBACNloB,MAAMmoB,uBACF,CACIloB,OAAQ,SAEdC,KAAK9G,KAAK8uB,wBAIb,YAAAA,sBAAP,WACI,IAAI3tB,EAAS,cAAgB,OAC7B,OAAc,MAAVA,IACA6tB,EAAYC,aAAe9tB,EAAOC,MAAM,KAAKiD,OAAS,GAA8B,OAAzBlD,EAAOC,MAAM,KAAK,GACzE4tB,EAAYC,cACZD,EAAYE,mBAET,IAKD,EAAAA,gBAAd,WACmBhuB,SAASiL,iBAAiB,iCAEhC7I,SAAQ,SAAUC,eACvB,GAAUtE,MAANsE,EAAiB,CACrB,IAAI4rB,EAAgBvb,OAAwC,QAAjC,EAAwB,QAAxB,EAAArQ,EAAGqB,cAAc,eAAO,eAAE+M,eAAO,eAAEwd,OAC1DC,EAAqBxb,OAAwC,QAAjC,EAAwB,QAAxB,EAAArQ,EAAGqB,cAAc,eAAO,eAAE+M,eAAO,eAAE0d,YAE/DL,EAAYC,eAAiBvwB,MAAM0wB,GACnC7rB,EAAG6Z,YAAc4R,EAAYM,UAAUC,OAAOH,GACtCJ,EAAYC,cAAiBvwB,MAAMywB,KAC3C5rB,EAAG6Z,YAAc4R,EAAYM,UAAUC,OAAOJ,QAMhCjuB,SAASiL,iBAAiB,oBAEhC7I,SAAQ,SAAUC,GAC9BA,EAAGqB,cAAc,QAAS+M,QAAQ6d,QAAUC,OAAOT,EAAYC,kBAKhE,EAAAS,YAAP,SAAmBP,GACf,OAAOH,EAAYM,UAAUC,OAAOJ,IAGjC,EAAAQ,cAAP,WACIX,EAAYE,mBAET,EAAAU,WAAP,SAAkBT,EAAeU,GAC7B,OAAIV,EAAQ,EACDzvB,KAAKowB,MAAOX,GAAS,EAAIU,GAAS,KAAO,IAE7C,GAjEG,EAAAZ,cAAwB,EACxB,EAAAK,UAAY,IAAIS,KAAKC,aAAa,QAAS,CAAEjgB,MAAO,WAAY8V,SAAU,QAkE5F,EApEA,mEC6BA,SAASoK,IACL,IAAIC,EAAchvB,SAASkG,eAAe,eACtC+oB,EAAYjvB,SAAS0D,cAAc,kBAEnCsrB,GAAeC,IACfD,EAAYE,UAAY,yDACxBD,EAAU/S,YAAc,2BA+QhC,SAASiT,IACsBnvB,SAASiL,iBAAiB,oCAEhC7I,SAAQ,SAAUoX,GACnCA,EAAOpW,iBAAiB,SAAS,WAC7B,IAAMgsB,EAAc5V,EAAOtP,QAAQ,iBAGnCmlB,EAFkBD,EAAYrsB,aAAa,WAC7BqsB,EAAYrsB,aAAa,aACWwqB,qBAAqB+B,aAAc,SAIzDtvB,SAASiL,iBAAiB,8CAEhC7I,SAAQ,SAAUoX,GAC5CA,EAAOpW,iBAAiB,SAAS,WAC7B,IAAMmsB,EAAgB/V,EAAOtP,QAAQ,iBAC/BslB,EAAqBD,EAAcxsB,aAAa,WAChD0sB,EAAmBF,EAAcxsB,aAAa,2BAEhD0sB,GA4DT,SAA4CA,EAA0BC,GACzE,GAAyB,OAArBD,GAA4C,MAAfC,EAAjC,CAEA,IAAM5Y,EAA8B,IAAIC,QACxCD,EAAeI,IAAI,eAAgB,oBAEnC,IAAInO,EAAO,CAAE4mB,UAAWF,EAAkBC,YAAaA,GAEvDhqB,MAAMoN,oBAAoB8c,uBAAwB,CAC9CjqB,OAAQ,OACRkS,QAASf,EACT/N,KAAMlI,KAAKa,UAAUqH,KACtBnD,MAAK,SAAAC,GAAY,OAAAA,EAASC,UACxBF,MAAK,SAAUsK,GACZ,GAAIA,EAAKwW,QAAS,CAKd,GAJAmJ,GAAgB,YACZ,QAAcJ,EAAkB,MAGhCvf,EAAK4f,cAAe,CACpB,IAAIC,EAAc/vB,SAASkG,eAAe,gBACtCmK,EAAerQ,SAASkG,eAAe,gBACvC8pB,EAAW,UAAGld,oBAAoBmd,sBAAqB,oBAAY/f,EAAK4f,eACxEC,GACAA,EAAY3lB,aAAa,OAAQ4lB,GAEjC3f,GACAA,EAAajG,aAAa,WAAY4lB,GAG9CjB,KACA,cA1FAmB,EAAoCT,GAAmBD,SA+FhE,SAASH,EAAgCrqB,EAAmBmrB,EAAsBC,EAAqBC,EAAyBC,GACnI,GAAkB,OAAdtrB,EAAJ,CACA,IAAM8R,EAA8B,IAAIC,QACxCD,EAAeI,IAAI,eAAgB,oBAEnC,IAAInO,EAAO,CAAE/D,UAAWA,EAAWC,SAAUorB,GAEzCE,EAAqBvwB,SAASkG,eAAe,sBAC7CsqB,EAAqBxwB,SAASkG,eAAe,sBAC7CuqB,EAAoBzwB,SAASkG,eAAe,qBAEhDsqB,EAAmBnmB,gBAAgB,UACnComB,EAAkBpmB,gBAAgB,UAClCkmB,EAAmBnmB,aAAa,SAAU,UAE1C1E,MAAMoN,oBAAoB4d,qBAAsB,CAC5C/qB,OAAQ,OACRkS,QAASf,EACT/N,KAAMlI,KAAKa,UAAUqH,KACtBnD,MAAK,SAAAC,GAAY,OAAAA,EAASC,UACxBF,MAAK,SAAUsK,GACZ,GAAIA,EAAKwW,QAAS,CASd,GARAmJ,GAAgB,YACZ,QAAc7qB,EAAW,MAGzBsrB,GA/GpB,SAA0CF,EAAsBN,GACtC,MAAlBM,GAA4C,IAAlBA,GAAwB,EAAAO,EAAA,2BAKlD,0BAA2C,GACjC,aACV9nB,CAAI,QAAS,YAAa,CACtB+nB,aAAc,UACdC,YAAaT,KAKrB1oB,OAAO9C,SAAS0L,KAAOwC,oBAAoBmd,sBAiG3Ba,CAAiCV,EAAgBlgB,EAAK4f,eAGtD5f,EAAK4f,cAAe,CACpB,IAAIC,EAAc/vB,SAASkG,eAAe,gBACtCmK,EAAerQ,SAASkG,eAAe,gBACvC8pB,EAAW,UAAGld,oBAAoBmd,sBAAqB,oBAAY/f,EAAK4f,eACxEC,GACAA,EAAY3lB,aAAa,OAAQ4lB,GAEjC3f,GACAA,EAAajG,aAAa,WAAY4lB,GAG9CjB,KACA,cAuBT,SAASc,EAAgBkB,GAC5B,IACMja,EAA8B,IAAIC,QACxCD,EAAeI,IAAI,eAAgB,oBAEnCxR,MAAMoN,oBAAoBke,kBAAmB,CACzCrrB,OAAQ,OACRoD,KAAMlI,KAAKa,UANF,CAAEuvB,8BAA8B,IAOzCpZ,QAASf,IACVlR,MAAK,SAAAC,GAAY,OAAAA,EAASC,UACxBF,MAAK,SAAUsK,GACZ,IAAIghB,EAASlxB,SAASyC,uBAAuB,wBAAyBE,KAAK,GACvEwuB,EAAYnxB,SAASkG,eAAe,eACpCkrB,EAAepxB,SAASkG,eAAe,kBACvCmrB,EAAoBrxB,SAASkG,eAAe,yBAC5CorB,EAA0BtxB,SAASkG,eAAe,+BAClDqrB,EAA0BvxB,SAASkG,eAAe,+BAClDqqB,EAAqBvwB,SAASkG,eAAe,sBAC7CsqB,EAAqBxwB,SAASkG,eAAe,sBAC7CuqB,EAAoBzwB,SAASkG,eAAe,qBAEhD,GAAIgrB,GAAUhhB,EAAKnK,SAASC,MAAM7C,OAAS,EAAG,CAC1CqtB,EAAmBnmB,gBAAgB,UACnComB,EAAkBpmB,gBAAgB,UAClCkmB,EAAmBnmB,aAAa,SAAU,UAE1C,IAAIonB,EAAathB,EAAKnK,SAASC,MAAMyU,QAAO,SAAU9X,GAClD,OAAQA,EAAK8uB,iBAEbprB,EAAS,GACTqrB,EAAmB,EAEvB,GAAyB,GAArBF,EAAWruB,OACXkuB,EAAkBnV,aAAc,OAAkB,EAAGC,yBAA0BC,8BAC5E,EACH,QAAQlM,EAAKyhB,iBACb,IAAIC,EAAwB1hB,EAAK0hB,sBACjCF,EAAmBE,EAAsBC,aAAa,GAAGtrB,MACzD,IAAIyW,GAAiB,OAAkB0U,EAAkBvV,yBAA0BC,0BAEnFiV,EAAkBnV,YAAcc,EAChCsU,EAAwBpV,YAAc0V,EAAsBE,YAExDF,EAAsBG,iCACtBR,EAAwBrV,YAAc,kEAEtCqV,EAAwBrV,YAAc,wDAG9ChM,EAAKnK,SAASC,MAAM5D,SAAQ,SAAUO,GAClC0D,GACI,6CAAsC1D,EAAK2D,MAAK,yBAAiB3D,EAAK4D,MAAK,4BAAoB5D,EAAK6D,SAAQ,sBAAc7D,EAAK8D,GAAE,8BAAsB9D,EAAKgE,UAAS,kHAEtJhE,EAAKqvB,IAAG,yDACH,gBAAkB,GAAI,GAAIrvB,EAAKsvB,iBAAgB,kBAAUtvB,EAAK2D,MAAK,4OAKpE3D,EAAKqvB,IAAG,mDACbrvB,EAAK2D,MAAK,ugBAQV,cAAwB3D,EAAK4D,OAAM,iDAsEzE,SAAqB5D,GACjB,OAAIA,EAAK4D,MAAQ5D,EAAKuvB,IACX,iCAA0B,cAAwBvvB,EAAKuvB,KAAI,UAE/D,GAzE2BC,CAAYxvB,GAAK,2MAG+BA,EAAKyvB,WAAa,WAAa,GAAE,sDAC5EzvB,EAAKyvB,WACpB,wBAAiBzvB,EAAK6D,SAAQ,YAAI7D,EAAK6D,SAAQ,aAqDvE,SAA4BvB,GAGxB,IAFA,IAAIzI,EAAU,GAEL0G,EAAI,EAAGA,GALM,GAKkBA,IACpC1G,GAAW,wBAAiB0G,EAAC,YAAIA,GAAK+B,EAAW,WAAa,GAAE,YAAI/B,EAAC,aAGzE,OAAO1G,EA7D8C61B,CAAmB1vB,EAAK6D,UACC,qNAuEtF,SAAsB0J,SACdoiB,EAAapiB,EAAKqiB,iBAClBC,EAA2B,QAAb,EAAAtiB,EAAKnK,gBAAQ,eAAE0sB,kBAC7BC,EAAoBJ,MAAAA,OAAU,EAAVA,EAAY7X,QAAO,SAAU9X,GACjD,OAAOA,EAAKgwB,2BAEZC,EAAqBJ,MAAAA,OAAW,EAAXA,EAAa/X,QAAO,SAAU9X,GACnD,OAA4B,GAArBA,EAAKkwB,gBAGhB,GAAIH,GAAqBA,EAAkBvvB,OAAS,EAChD2vB,EAAgBJ,QACb,GAAIE,GAAsBA,EAAmBzvB,OAAS,EACzD2vB,EAAgBF,QACb,IAAIN,MAAAA,OAAU,EAAVA,EAAYnvB,QAAS,EAC5B2vB,EAAgBR,QACb,IAAIE,MAAAA,OAAW,EAAXA,EAAarvB,QAAS,EAC7B2vB,EAAgBN,OAEf,CACD,IAAIO,EAAS/yB,SAAS0D,cAAc,qCAEhCqvB,GACAA,EAAO7oB,QAAQ,WAAYE,aAAa,SAAU,WAtF9C4oB,CAAa9iB,GAETkhB,IACAA,EAAalV,YAAc,cAAwBhM,EAAKnK,SAAS6X,kBAErE,IAAImG,EAAQ7T,EAAKnK,SAAS6X,gBAEtB8T,EAAmB,IACnB3N,GAAS2N,GAETP,IACAA,EAAUjV,YAAc,cAAwB6H,IAGpDmN,EAAOpqB,UAAYT,GACnB,SAA0B,OAEzB,CACDmqB,EAAmBpmB,aAAa,SAAU,UAC1CqmB,EAAkBrmB,aAAa,SAAU,UACzCmmB,EAAmBlmB,gBAAgB,UACnC6mB,EAAOpqB,UAAY,GAEnB,IAAIisB,EAAS/yB,SAAS0D,cAAc,qCAEhCqvB,GACAA,EAAO7oB,QAAQ,WAAYE,aAAa,SAAU,WAG1D,SAIA,IAAI6oB,EAAcjzB,SAASkG,eAAe,eAC1C,GAAI+sB,GAAsD,OAAvCA,MAAAA,OAAW,EAAXA,EAAalwB,aAAa,WAAmB,CAC5D,IAAImwB,EAAclzB,SAAS0D,cAAc,uCACrCwvB,GAAaA,EAAY3G,QAG7BwE,GACAA,OAkDhB,SAAS+B,EAAgBK,GACrB,IAAIC,EAAa,GACbC,EAAU,EACVN,EAAS/yB,SAAS0D,cAAc,qCAsEpC,SAAS4vB,EAAa3wB,GAClB,OAAOA,EAAK4wB,YAAc/0B,KAAKC,IAAIkE,EAAK6wB,eAAgB7wB,EAAK4D,OAAS5D,EAAK4D,MArE1EwsB,GAAWI,IAIhBA,EAAM/wB,SAAQ,SAAUO,SACpBywB,GACI,2FAC2CzwB,EAAK2D,MAAK,+CACvB,QAAP,EAAA3D,EAAK8wB,UAAE,QAAI9wB,EAAK8D,GAAE,kDACf6sB,EAAa3wB,GAAK,kDAClBA,EAAKkE,iBAAgB,qDAClBlE,EAAKiE,oBAAmB,qDACxBysB,EAAO,iDAgE5C,SAAqB1wB,GACjB,OAAOA,EAAK4wB,YAAc,aAAe,cAhEZG,CAAY/wB,GAAK,8DACJA,EAAKgxB,iBAAgB,0EAEpChxB,EAAKixB,WAAU,iNAG+B,gBAAkB,IAAK,IAAKjxB,EAAKsvB,iBAAgB,aAAK,gBAAkB,IAAK,IAAKtvB,EAAKsvB,iBAAgB,mHACvG,gBAAkB,IAAK,IAAKtvB,EAAKsvB,iBAAgB,aAAK,gBAAkB,IAAK,IAAKtvB,EAAKsvB,iBAAgB,4HAC9F,gBAAkB,IAAK,IAAKtvB,EAAKsvB,iBAAgB,kBAAUtvB,EAAK2D,MAAK,oBAAY3D,EAAK2D,MAAK,gJAG/G3D,EAAK2D,MAAK,wMAIzC3D,EAAKixB,WAAU,+FACpBjxB,EAAK2D,MAAK,gMA4BxC,SAAoB3D,GAChB,IAAIkxB,EAAYP,EAAa3wB,GAEzBmxB,EADet1B,KAAKO,IAAI4D,EAAKuvB,IAAKvvB,EAAK4D,OACZstB,EAE/B,OAAIlxB,EAAK4wB,aAAeO,EAAY,EACzB,mCAA4B,cAAwBA,GAAU,UAElE,GA/BYC,CAAWpxB,GAAK,2KAIL,cAAwB2wB,EAAa3wB,IAAM,2OAkC7E,SAAiCA,GAC7B,OAAOA,EAAK4wB,YAAc,4CAA8C,kCA9BVS,CAAwBrxB,GAAK,0HAM3F0wB,OAGJN,EAAOjsB,UAAY,UAAGssB,EAAU,mEAChCL,EAAO7oB,QAAQ,WAAYG,gBAAgB,WAC3C,SACA8kB,KAhsBJznB,OAAOC,OAAS,YAuBhB,YAiGI,WACI,IAAMmP,EAA8B,IAAIC,QACxCD,EAAeI,IAAI,eAAgB,oBAEnC,IAAIhH,EAAO,CAAElL,UAAWuoB,qBAAqB5mB,WAqC7C,SAASstB,EAAuB/jB,GAC5B,GAAKA,EAAKgkB,QAKL,CACD,IAAIC,EAAUjkB,EAAKkkB,MAAQlkB,EAAKmkB,OAASnkB,EAAKgkB,QAAU,qBAAuBhkB,EAAKokB,0BAA4B,sBAAwB,IAAM,yCAC1IH,IAAY5G,qBAAqBgH,wBAAuBJ,EAAU,IACtE,IAAI,EAAsBjkB,EAAKkkB,MAAQlkB,EAAKmkB,OAASnkB,EAAKgkB,QAAU,qBAAuBhkB,EAAKokB,0BAA4B,sBAAwB,IAAM,yCAClIt0B,SAASiL,iBAAiB,uCAChC7I,SAAQ,SAAUwK,GAC/BA,EAAwBiC,MAAMua,QAAU,QACzCxc,EAAQ9F,UAAY,KAGxB,IAAI0tB,GAAQ,IAAK92B,MAAM+2B,qBAEnBlH,qBAAqBmH,yBAA2BxkB,EAAKykB,WAAazkB,EAAKgkB,SAAW3G,qBAAqBqH,iBAAmBJ,IAuiBxH3yB,EAtiBW0rB,qBAAqBqH,iBAuiB9CC,EAAgB,IAAIn3B,KAAKmE,GAAME,UAE/BsY,EAAIya,aAAY,WAEhB,IAAIr3B,GAAM,IAAIC,MAAOqE,UAEjBgzB,EAAWF,EAAgBp3B,EAC3Bu3B,EAAQx2B,KAAKy2B,MAAOF,EAAW,MAAyB,MACxDG,EAAU12B,KAAKy2B,MAAOF,EAAW,KAAoB,KACrDI,EAAU32B,KAAKy2B,MAAOF,EAAW,IAAe,KAEpD,GAAIA,EAAW,EACXK,cAAc/a,GACFra,SAASkG,eAAe,aACzBlG,SAASkG,eAAe,WAAY2I,MAAMua,QAAU,YAE5D,CACSppB,SAASkG,eAAe,wBACzBlG,SAASkG,eAAe,sBAAuB2I,MAAMua,QAAU,QAC1E,IAAIiM,EAAgBr1B,SAASkG,eAAe,iBACxCmvB,IACAA,EAAcvuB,UAAY,UAAGkuB,EAAMvK,WAAW6K,SAAS,EAAG,KAAI,YAAIJ,EAAQzK,WAAW6K,SAAS,EAAG,KAAI,YAAIH,EAAQ1K,WAAW6K,SAAS,EAAG,UAEjJ,WA/kBoBt1B,SAASkG,eAAe,aACzBlG,SAASkG,eAAe,WAAY2I,MAAMua,QAAU,SAuE9DmM,EAAav1B,SAASoG,cAAc,WAC7BgE,aAAa,MAAO,2CAC/BpK,SAAS+I,KAAKC,YAAYusB,GAE1B7vB,MAAM6nB,qBAAqBiI,YACvB,CACI7vB,OAAQ,MACR8vB,MAAO,aACR7vB,MAAK,SAAAC,GAAY,OAAAA,EAASoK,UAC5BrK,MAAK,SAAUsK,IAnDxB,SAA+BwlB,GAC3B,IAGIC,GAHS,IAAIxV,WACEC,gBAAgBsV,EAAa,aAEnBjzB,uBAAuB,0BAEhDkzB,GAAsBA,EAAmBhzB,KAAK,IAC9CgzB,EAAmBhzB,KAAK,GAAIizB,qBAAqB,UAAWjzB,KAAK,GAAI+J,SAE5C1M,SAASkG,eAAe,4BAGjDlG,SAASkG,eAAe,0BAA2BY,UAAY4uB,GAEnE,IAAIG,EAAgB71B,SAASyC,uBAAuB,eAC1B,oBAAfqzB,YAA8BA,YAAcA,WAAW7I,QAAU4I,EAAc1yB,OAAS,GAC/F2yB,WAAW7I,OAAqB4I,EAAclzB,KAAK,IAoC/CozB,CAAsB7lB,GACtB,IAAI8lB,EAAQh2B,SAASkG,eAAe,4BAEhC8vB,GACAA,EAAM5rB,aAAa,aAAc,IAErC,IAAI6rB,EAAcj2B,SAASyC,uBAAuB,0BAA2BE,KAAK,GAE9EszB,IAEAA,EAAY7rB,aAAa,kBAAmB,4BAE3C1C,OAAewuB,UAAUC,OAE1BF,EAAY7yB,iBAAiB,SAAS,WAClC,IAAIgzB,EAAcp2B,SAASkG,eAAe,4BAE1ClG,SAASkG,eAAe,kCAAmCuG,UAAUM,IAAI,UAE/C,oBAAf+oB,YAA8BA,YAAcA,WAAWO,OAC9DP,WAAWO,QAGfD,EAAYvnB,MAAMua,QAAU,YAGpC,IAAIkN,EAAYt2B,SAASkG,eAAe,aACpCowB,GACAA,EAAUlzB,iBAAiB,SAAS,SAAUrC,GAC1C,IAAIw1B,EAA+Bv2B,SAAS0D,cAAc,4BACtDwM,EAAO,IAAI2W,SAAS0P,GAExB7wB,MAAM6nB,qBAAqBiI,YAAa,CACpC7vB,OAAQ,OACRoD,KAAMmH,IACPtK,MAAK,SAAAC,GAAY,OAAAA,EAASC,UACxBF,MAAK,SAAUsK,IApExC,SAA+BnP,WAC3B,GAAIA,EAAE2lB,QAAS,CACC1mB,SAASkG,eAAe,4BAApC,IAEIswB,EAAS,gBADEz1B,EAAE2lB,QAAU,uBAAyB,eACX,KAAO3lB,EAAE01B,QAAU,SACxDjmB,EAAMxQ,SAASkG,eAAe,0BAC9BsK,IAAKA,EAAI1J,UAAY0vB,GACzB,IAAIE,EAAiB12B,SAASkG,eAAe,kBACzCywB,EAAiB32B,SAASkG,eAAe,kBACzCwwB,GAAgBA,EAAejqB,UAAUM,IAAI,UAC7C4pB,GAAgBA,EAAelqB,UAAUC,OAAO,cAEnD,CACD,IAAIkD,EAAO5P,SAASkG,eAAe,qCAC/B0J,IAAMA,EAAKsM,YAAcnb,EAAE01B,SACqC,QAApE,EAAyD,QAAzD,EAAAz2B,SAASkG,eAAe,yCAAiC,eAAEuG,iBAAS,SAAEC,OAAO,WAsDzDkqB,CAAsB1mB,YAjDlD,IAEQqlB,EA+eM1zB,EACdgzB,EAEAxa,EAtiBQnK,EAAKokB,2BACMt0B,SAASkG,eAAe,qBACzBlG,SAASkG,eAAe,mBAAoB2I,MAAMua,QAAU,QAG1E,IAAIyN,EAAO72B,SAASkG,eAAe,gBAC/B2wB,IAAMA,EAAKhoB,MAAMioB,QAAU,KA/DnCpxB,MAAM,UAAG6nB,qBAAqBwJ,qBAAoB,sBAAc7mB,EAAKlL,WAAa,CAC9EW,OAAQ,QACTC,MAAK,SAAAC,GACJ,GAAIA,EAAS0Z,GACT,OAAO1Z,EAASoK,UAErBrK,MAAK,SAAUsK,GACd,GAAIA,GAAQA,EAAK3N,OAAOY,OAAS,EAAG,CAChC,IAAI6zB,EAAeh3B,SAAS0D,cAAc,4BACtCuzB,EAAYj3B,SAASkG,eAAe,aAEpC+wB,GAAaD,IACbC,EAAUxqB,UAAUC,OAAO,mBAC3BsqB,EAAalwB,UAAYoJ,OAKhCqd,qBAAqB2J,oBACtBxxB,MAAM6nB,qBAAqB4J,kBAAmB,CAC1CxxB,OAAQ,OACRoD,KAAMlI,KAAKa,UAAUwO,GACrB2H,QAASf,IACVlR,MAAK,SAAAC,GAAY,OAAAA,EAASC,UACxBF,MAAK,SAAUsK,IAMxB,SAA0CA,GACtCqd,qBAAqBmH,wBAA0BxkB,EAAKknB,wBACpD7J,qBAAqB8J,sBAAwBnnB,EAAKonB,0BAClD/J,qBAAqBqH,iBAAmB1kB,EAAKqnB,gCARrCC,CAAiCtnB,EAAKunB,mBACtCxD,EAAuB/jB,EAAKwnB,qBAhI5CC,GAEwB33B,SAASiL,iBAAiB,yBAEhC7I,SAAQ,SAAUoX,GAChCA,EAAOpW,iBAAiB,SAAS,WAC7BisB,EAAgC9B,qBAAqB5mB,UAAW4mB,qBAAqBjnB,MAAOinB,qBAAqB+B,aAAc,MAEnI9V,EAAOnP,gBAAgB,YACvBmP,EAAOnP,gBAAgB,uBACvBmP,EAAO/M,UAAUC,OAAO,mBAG5ByiB,IAGA,IAAIyI,EAAc53B,SAAS0D,cAAc,4BACrCk0B,GACAA,EAAYx0B,iBAAiB,SAAS,SAAUyN,GAC5CA,EAAIrM,iBACJ,IAAIqzB,EAAa73B,SAASkG,eAAe,cACzC,GAAI2xB,EAAY,CACZA,EAAWtL,QACX,IAAIuL,EAAiB93B,SAAS0D,cAAc,sBACxCo0B,GACAA,EAAeC,eAAe,CAAEC,SAAU,eAO1D,IAAIC,EAAyBj4B,SAASkG,eAAe,MACrD,GAAI+xB,GACIA,EAAuBC,wBAAwBjM,OAAS,IAAK,CAC7D,IAAIkM,EAAiBn4B,SAAS0D,cAAc,sCACxCy0B,GACAA,EAAe1rB,UAAUM,IAAI,kBAEjC,IAAIqrB,EAAgBp4B,SAAS0D,cAAc,sCACvC00B,GACAA,EAAc3rB,UAAUC,OAAO,UAEnC2rB,IAIR,IAAI3oB,EAAgB1P,SAASiL,iBAAiB,wBAC1CyE,EAAcvM,QACduM,EAActN,SAAQ,SAAUuN,GACvBA,EAAOlD,UAAUQ,SAAS,iBAC3B0C,EAAOlD,UAAUM,IAAI,eACrB4C,EAAOvM,iBAAiB,SAAS,SAAUrC,GACvC,IAAI6O,EAAO7O,EAAE2K,OAC6B,SAAtCkE,EAAK7M,aAAa,iBAClB6M,EAAKxF,aAAa,gBAAiB,QAGnCwF,EAAKxF,aAAa,gBAAiB,gBAQvD,IAAIkuB,EAAmBt4B,SAASkG,eAAe,oBAE3CoyB,IACAA,EAAiBl1B,iBAAiB,SAAS,SAAUrC,IA8sBzD,SAA2BiE,EAAgBC,EAAeszB,GACtD,IAAIC,EAAMj7B,SAAS0H,GACnB,GAAIzH,MAAMg7B,GACN1Q,MAAM,sCACH,CACH,IAAMhR,EAA8B,IAAIC,QACxCD,EAAeI,IAAI,eAAgB,oBAEnC,IAAInO,EAAO,CAAE/D,UAAWA,EAAWC,SAAUuzB,EAAKD,eAAgBA,GAC9DE,EAAiBz4B,SAAS0D,cAAc,yBAExC+0B,IACAA,EAAehsB,UAAUM,IAAI,gBAC7B0rB,EAAeruB,aAAa,WAAY,SAE5C,IAAIkuB,EAAmBt4B,SAASkG,eAAe,oBAC3C2mB,EAAU7sB,SAAS0D,cAAc,gCAEjC40B,IACAA,EAAiB7rB,UAAUM,IAAI,gBAC/BurB,EAAiBluB,aAAa,WAAY,QAEtCyiB,GACAA,EAAQpgB,UAAUC,OAAO,WAIjChH,MAAMoN,oBAAoB4lB,oBACtB,CACI/yB,OAAQ,OACRkS,QAASf,EACT/N,KAAMlI,KAAKa,UAAUqH,KAE3BnD,MAAK,SAAAC,GAAY,OAAAA,EAASC,UACvBF,MAAK,SAAUsK,GACRA,EAAKwW,QACLhf,OAAO9C,SAAWsL,EAAKyW,YAGvBmB,MAAM5X,EAAKumB,YAEhBkC,SAAQ,WAEPz6B,YAAW,WACHo6B,IACAA,EAAiB7rB,UAAUC,OAAO,gBAClC4rB,EAAiBjuB,gBAAgB,YAE7BwiB,GACAA,EAAQpgB,UAAUM,IAAI,WAI1B0rB,IACAA,EAAehsB,UAAUC,OAAO,gBAChC+rB,EAAepuB,gBAAgB,eAEpC,UA3DnBuuB,CAAkBrL,qBAAqB5mB,UAAW,GA3sBtB,MAGxB2xB,EAAiB7rB,UAAUC,OAAO,iBAGR1M,SAASkG,eAAe,6BAGlD,OAAiB,CACb4iB,SAAUhW,oBAAoBiW,gBAC9BpE,SAAU,MACVsE,WAAY,oBACb,YAAY,GAGFjpB,SAASiL,iBAAiB,iBAClC7I,SAAQ,SAAUy2B,GACvBA,EAAYz1B,iBAAiB,aAAa,WACtCy1B,EAAYpsB,UAAUM,IAAI,YAE9B8rB,EAAYz1B,iBAAiB,YAAY,WACrCy1B,EAAYpsB,UAAUC,OAAO,eAnHrCosB,IACA,WACA,WA22BJ,IAAMC,EAAQ,EAAQ,KAwBtB,SAASC,EAAsBC,EAAoBC,EAAoBC,GAoBnE,OAnBgB,IAAI,KAAOF,EAAY,CACnCG,QAAS,CAAC,MACVC,UAAW,aACXC,SAAS,EACTC,cAAe,OACfC,MAAM,EACNC,MAAO,IACPC,WAAY,CACRC,OAAQT,EACRU,OAAQT,GAEZU,YAAa,CACT,KAAM,CACFP,SAAS,EACTC,cAAe,EACfO,aAAc,OAO9B,GA9CI95B,SAASyC,uBAAuB,QAAQU,SACnBnD,SAASiL,iBAAiB,eAElC7I,SAAQ,SAACwJ,EAAM1I,GACxB0I,EAAKxB,aAAa,oBAAalH,GAAK,IACpC,IAAI61B,EAAM,qBAAc71B,EAAC,SAQ7BlD,SAASiL,iBAAiB,YAAY7I,SAAQ,SAAC23B,GAC3CA,EAAQ32B,iBAAiB,SAAS,SAACwM,GAC7BA,EAAKjL,cAA8BmM,WAA2BkpB,WAAcpqB,EAAKjL,cAA8Bs1B,kBA+BzHj6B,SAAS0D,cAAc,8BAA+B,CACtD,IAAIw2B,EAAgB,IAAI,KAAO,6BAA8B,CACzDd,QAAS,CAAC,KAAY,MACtBe,gBAAgB,EAChBC,sBAAsB,EACtBb,cAAe,OACfF,UAAW,aACXK,WAAY,CACRC,OAAQ,yCACRC,OAAQ,0CAEZC,YAAa,CACT,IAAK,CACDR,UAAW,WACXE,cAAe,MAKP,IAAI,KAAO,wBAAyB,CACpDH,QAAS,CAAC,KAAY,KAAM,KAAY,MACxCG,cAAe,OACfc,MAAM,EACNb,MAAM,EACNC,MAAO,IACPC,WAAY,CACRC,OAAQ,yCACRC,OAAQ,0CAEZU,OAAQ,CACJvH,OAAQmH,KAGJzU,GAAG,cAAc,mBACrB8U,EAAUv6B,SAAS0D,cAAc,2DACjC82B,EAAMD,MAAAA,OAAO,EAAPA,EAAS72B,cAAc,OAC7B+2B,EAAYF,MAAAA,OAAO,EAAPA,EAAStvB,iBAAiB,UAC1C,GAAIuvB,GAAOA,EAAIrR,aAAa,iBAAmBsR,EAAW,CACtD,IAAK,IAAIv3B,EAAI,EAAGnE,EAAM07B,EAAUt3B,OAAQD,EAAInE,EAAKmE,IACzCu3B,IAAuB,QAAZ,EAAAA,EAAUv3B,UAAE,SAAEwJ,UAEjC,IAAIguB,EAA2C,QAAjC,EAAAF,MAAAA,OAAG,EAAHA,EAAKz3B,aAAa,uBAAe,eAAE0nB,WAC7CiQ,IAASF,MAAAA,GAAAA,EAAKpwB,aAAa,MAAOswB,QAuHlD,SAASrC,IACDr4B,SAASyC,uBAAuB,iBAAiBU,QAE3BnD,SAASiL,iBAAiB,wBAChC7I,SAAQ,SAAUuN,GACzBA,EAAOlD,UAAUQ,SAAS,iBAC3B0C,EAAOlD,UAAUM,IAAI,eACrB4C,EAAOvM,iBAAiB,SAAS,SAAUrC,WACnC6O,EAAO7O,EAAE2K,OAIb,IAHM3K,EAAE2K,OAAuBivB,UAAUC,WAAW,YAAchrB,EAAK9C,gBACnE8C,EAAOA,EAAK9C,eAEZ8C,EAAM,CACN,IAAIirB,EAAMjrB,EAAKzG,WACX2xB,EAAalrB,EAAK7M,aAAa,kBAC/Bg4B,EAAanrB,EAAK7M,aAAa,mBAC/BJ,EAAwC,QAAjC,EAAkB,QAAlB,EAAAiN,EAAK9C,qBAAa,eAAEA,qBAAa,eAAEpJ,cAAc,mBACxDf,GAAQk4B,GAAOl4B,EAAK8J,UAAUQ,SAAS,SACvCtK,EAAK8J,UAAUC,OAAO,QAClBouB,IAAYD,EAAI/zB,UAAYg0B,GAChClrB,EAAKxF,aAAa,gBAAiB,UAE9BzH,GAAQk4B,IACbl4B,EAAK8J,UAAUM,IAAI,QACfguB,IAAYF,EAAI/zB,UAAYi0B,GAChCnrB,EAAKxF,aAAa,gBAAiB,iBA5I3DpK,SAAS0D,cAAc,wBACHs1B,EAAsB,sBAAuB,6CAA8C,8CAqB/Gh5B,SAAS0D,cAAc,uBACJs1B,EAAsB,qBAAsB,4CAA6C,6CAqB5Gh5B,SAAS0D,cAAc,yBACFs1B,EAAsB,uBAAwB,8CAA+C,+CAqBlHh5B,SAAS0D,cAAc,wBACHs1B,EAAsB,sBAAuB,6CAA8C,8CAqB/Gh5B,SAAS0D,cAAc,oBACPs1B,EAAsB,kBAAmB,yCAA0C,0CAwBvGX,IAwCA3wB,OAAO6H,SAAW,SAAUxO,GAExB,GADkB2G,OAAOszB,WACP,KAAM,CACpB,IAAIC,EAAej7B,SAAS+I,KACxBmyB,GAAW,EAGXC,EADen7B,SAAS0D,cAAc,yBACNw0B,wBAGhCkD,EADcp7B,SAAS0D,cAAc,iBACPw0B,wBAE7BiD,EAAgBrsB,KAAO,GAAKqsB,EAAgBE,QAAU3zB,OAAO4zB,cAAgBJ,GAC7EE,EAAetsB,KAAO,GAAKssB,EAAeC,QAAU3zB,OAAO4zB,cAAgBJ,GAC5ED,EAAaxuB,UAAUC,OAAO,kBAC9BwuB,GAAW,IAEXD,EAAaxuB,UAAUM,IAAI,kBAC3BmuB,GAAW,uJC3nCnBK,GAAuB,EACvBC,GACC,OAAuBC,EACpB,IACA,CAAE,SAAW,EAAO,UAAY,IAEpCC,GACC,QA8BL,SAAoB36B,GAChB,IAAI46B,EAAe56B,EAAEoM,WACrB,IAAIwuB,EAAaC,SAAjB,CAEA,IAAIC,EAAWt+B,SAASo+B,EAAazxB,QAAQ,MAAMnH,aAAa,kBAC5D+4B,EAAWv+B,SAASo+B,EAAa5+B,OACjCS,MAAMs+B,IAEND,KADJC,EAAWC,EAAiBD,MAExBE,IACAC,GAAgB,GAChBC,EAAcn7B,EAAEoM,YAChBwuB,EAAarxB,YAzCb,IACA,CAAE,SAAW,EAAO,UAAY,IAExC,SAAS2xB,EAAgBE,GACrB,IAAIC,EAAWp8B,SAASyC,uBAAuB,gBAAiBE,KAAK,GACjEy5B,IACID,EAAMC,EAAS3vB,UAAUC,OAAO,UAC/B0vB,EAAS3vB,UAAUM,IAAI,WAIpC,SAASivB,IAESh8B,SAASiL,iBACnB,0MAII7I,SAAQ,SAAU6L,GACtBA,EAAExB,UAAUM,IAAI,gBAChBkB,EAAE7D,aAAa,WAAY,OAGpBpK,SAASiL,iBAAiB,mDAChC7I,SAAQ,SAAUi6B,GACnBA,EAAEjyB,aAAa,WAAY,OAoB5B,SAASqxB,EAAgBa,GAC5B,IAAIC,EAAcv8B,SAASiL,iBAAiB,gBACxCuxB,EAAO,IAAI3V,SAEX0V,GACAA,EAAYn6B,SAAQ,SAAUO,EAAMO,GAChC,IAAIkI,EAAKzI,EAAKI,aAAa,WACvBkC,EAAWtC,EAAKI,aAAa,iBAEjCy5B,EAAKz1B,OAAO,qBAAc7D,EAAC,SAASkI,GACpCoxB,EAAKz1B,OAAO,qBAAc7D,EAAC,eAAe+B,MAG9Cq3B,GACAE,EAAKz1B,OAAO,cAAeu1B,GAG/BE,EAAKz1B,OAAO,6BAA8Bw0B,GAAa9Q,YAEvD/kB,MAAMoN,oBAAoB2pB,cAAe,CACrC92B,OAAQ,OACRoD,KAAMyzB,IACP52B,MAAK,SAAAC,GAAY,OAAAA,EAASoK,UACxBrK,MAAK,SAAUsK,GAYxB,IACQ8e,EACAC,EAbQsM,GACA,UAGAmB,EAAoBxsB,GAQ5B8e,EAAchvB,SAASkG,eAAe,eACtC+oB,EAAYjvB,SAAS0D,cAAc,kBAEnCsrB,GAAeC,IACfD,EAAYE,UAAY,yDACxBD,EAAU/S,YAAc,yBAVpB+f,GAAgB,MAwB5B,SAASF,EAAiBh/B,GACtB,OAAIA,EAAQ,EACD,EACPA,EAAQ,IACD,IACJA,EAGX,SAASm/B,EAActvB,GACnB,IAAI+vB,EAAgB/vB,EAAQkE,WAAWpN,cAAc,SACjDk5B,EAAKhwB,EAAQ1C,QAAQ,mBACrBlF,EAAY43B,EAAG75B,aAAa,mBAChC,GAAI45B,EAAe,CACf,IAAIb,EAAWv+B,SAASo/B,EAAc5/B,OAClC8+B,EAAWt+B,SAASo/B,EAAc55B,aAAa,UAC/C0J,EAAYG,EAAQH,UACpBA,EAAUQ,SAAS,YACnB6uB,IACOrvB,EAAUQ,SAAS,aAC1B6uB,IAEJA,EAAWC,EAAiBD,GAC5Ba,EAAc5/B,MAAQ++B,EACtBa,EAAcvyB,aAAa,QAAS0xB,GACpCc,EAAGxyB,aAAa,gBAAiB0xB,GAE7BD,EAAWC,GACX,QAAmB92B,EAAW62B,EAAWC,IAEzC,QAAc92B,EAAW82B,EAAWD,GAG5CL,IAGG,SAASqB,EAA0BC,QAAA,IAAAA,IAAAA,GAAA,GACtCvB,EAAcuB,EACd,IAAIC,EAAe/8B,SAASiL,iBAAiB,4BACzC+xB,EAAeh9B,SAASiL,iBAAiB,4BACzCgyB,EAAaj9B,SAASiL,iBAAiB,6BACvCiyB,EAAYl9B,SAASiL,iBAAiB,iCAEpCkyB,EAAiBn9B,SAASiL,iBAAiB,oBAE7CkyB,GACAA,EAAe/6B,SAAQ,SAAUwK,GAC5BA,EAAQxJ,iBAAiB,UAAU,WAC/B44B,IACAC,GAAgB,GAELrvB,EAAQ1C,QAAQ,mBACxBE,aAAa,gBAAiBwC,EAAQ7P,OACzCy+B,UAKTuB,GACAA,EAAa36B,SAAQ,SAAUwK,GAC3BA,EAAQxJ,iBAAiB,SAAS,WAC9B44B,IACAC,GAAgB,GAChBC,EAActvB,SAKtBowB,GACAA,EAAa56B,SAAQ,SAAUwK,GAC3BA,EAAQxJ,iBAAiB,SAAS,WAC9B44B,IACAC,GAAgB,GAChBC,EAActvB,SAK1BqwB,EAAW76B,SAAQ,SAAUwK,GACzBA,EAAQxJ,iBAAiB,SAAS,WAC9B44B,IACAC,GAAgB,GA2C5B,SAAyBmB,GACrB,GAAmB,MAAfA,GAAsC,IAAfA,EAAmB,CAC1C,IAAIZ,EAAO,IAAI3V,SACf2V,EAAKz1B,OAAO,cAAeq2B,GAC3B13B,MAAMoN,oBAAoBuqB,oBAAqB,CAC3C13B,OAAQ,OACRoD,KAAMyzB,IACP52B,MAAK,SAACC,GACL,GAAIA,EAAS0Z,GACT,OAAO1Z,EAASoK,OAEpBqtB,EAAgB,qDAEf13B,MAAK,SAAUsK,GAlJ5B,IACQ8e,EACAC,EAiJYsM,IACA,UACAgC,EAAuBH,KAGvBG,EAAuBH,GACvBV,EAAoBxsB,IAExB+rB,GAAgB,GA1JxBjN,EAAchvB,SAASkG,eAAe,eACtC+oB,EAAYjvB,SAAS0D,cAAc,kBAEnCsrB,GAAeC,IACfD,EAAYE,UAAY,qDACxBD,EAAU/S,YAAc,mCAsFpBshB,CADmB5wB,EAAQ1C,QAAQ,MAAMnH,aAAa,kBAK9Dm6B,EAAU96B,SAAQ,SAAUo2B,GACpB,iEAAiEhkB,KAAKipB,UAAUC,YAAcD,UAAUC,UAAUhT,MAAM,QAAU+S,UAAUE,gBAAkBF,UAAUE,eAAiB,EACzLnF,EAAIp1B,iBAAiB,OAAQs4B,GAE7BlD,EAAIp1B,iBAAiB,QAASs4B,MAIlB,IAAI,KAAO,sBAAuB,CAClDtC,QAAS,CAAC,MACVC,UAAW,aACXC,SAAS,EACTC,cAAe,OACfC,MAAM,EACNC,MAAO,IACPC,WAAY,CACRC,OAAQ,6CACRC,OAAQ,8CAEZC,YAAa,CACT,KAAM,CACFP,SAAS,EACTC,cAAe,EACfO,aAAc,OAMvB,SAASwD,EAAgBzC,SACxB+C,EAA8E,QAAvD,EAAA59B,SAASyC,uBAAuB,+BAAuB,eAAEE,KAAK,GAErFi7B,IACAA,EAAqB1hB,YAAc2e,GAiC3C,SAAS0C,EAAuBH,GAC5B,IAAIl4B,EAAUlF,SAAS0D,cAAc,oBAAa05B,EAAW,OAC7D,GAAIl4B,EAAS,CACT,IAAIF,EAAYE,EAAQnC,aAAa,mBACrC,GAAIiC,EAAW,CACX,IAAIC,EAAWC,EAAQnC,aAAa,iBAChC86B,EAAa,EAEjB,GAAI54B,EACA44B,EAAatgC,SAAS0H,OACrB,CACD,IAAIlB,EAAiB/D,SAAS0D,cAAc,4BAAqBwB,EAAQkG,GAAE,OAEvErH,IACA85B,EAAatgC,SAASwG,EAAehB,aAAa,kBAAoB,OAG9E,QAAmBiC,EAAW64B,KAkB1C,SAASnB,EAAoBxsB,GACzB,IAAI4tB,EAAyB99B,SAASkG,eAAe,yBAEjD43B,IACAA,EAAuBh3B,UAAYoJ,GAEvC,IACI6tB,GADS,IAAI5d,WACCC,gBAAgBlQ,EAAM,aAExC,GAAI6tB,EAAM,CACN,IAAI5oB,EAAyB4oB,EAAK73B,eAAe,OAC7CiP,KACA,QAAqBA,EAAIpY,OACzB8/B,EAA0BtB,GACrBA,IACD,SAA2B,KAGnC,UAID,SAASyC,EAAiCj9B,GAC7C,IAAIk9B,EAAYl9B,EAAE4D,cACdu5B,EAAoCl+B,SAASkG,eAAe,kBAEhE,GAAI,MAAgB,iBAA6D,KAAhCg4B,EAAgBnhC,OAAS,IAItE,OAFAgE,EAAEyD,sBACFsjB,MAAM,qDAQV,0BAA2C,GAC3C,sBAAwC,oBAExC,IAAIqW,EAAen+B,SAAS0D,cAAc,qCAE1C,GAAIy6B,EAAc,CACd,IAAIC,EAAmBD,EAAap7B,aAAa,iBAE7Cq7B,IACA,OAAiB,EAAGA,GAG5B,IAAItX,EAAgBmX,EAAUl7B,aAAa,wBAE3C,OAAiB,EAAG+jB,GAyBxBpf,OAAOC,OAAS,WApBhB,IACQ+H,EApEJhK,MAAM2Z,aAAagf,UAAW,CAC1B14B,OAAQ,QACTC,MAAK,SAAAC,GAAY,OAAAA,EAASoK,UACxBrK,MAAK,SAAUsK,GACZwsB,EAAoBxsB,IACpB,WACA,QAAW,OA8DfR,EAAgB1P,SAASiL,iBAAiB,yBAC5B9H,QACduM,EAActN,SAAQ,SAAUuN,GACvBA,EAAOlD,UAAUQ,SAAS,iBAC3B0C,EAAOlD,UAAUM,IAAI,eACrB4C,EAAOvM,iBAAiB,SAAS,SAAUrC,GACvC,IAAI6O,EAAO7O,EAAE2K,OAC6B,SAAtCkE,EAAK7M,aAAa,iBAClB6M,EAAKxF,aAAa,gBAAiB,QAGnCwF,EAAKxF,aAAa,gBAAiB,6EChWpD,SAASk0B,IACa,IAAI,KAAO,4BAA6B,CAC7DlF,QAAS,CAAC,KAAY,MACtBC,UAAW,aACXC,SAAS,EACTC,cAAe,IACfgF,eAAgB,EAChBzE,aAAc,EACdN,MAAM,EACNC,MAAO,IACP+E,WAAY,CACRn8B,GAAI,qBACJo8B,WAAW,EACXzhC,KAAM,WAEV68B,YAAa,CACT,IAAK,CACDP,SAAS,EACTC,cAAe,IACfgF,eAAgB,yDC3C1BxF,EAAQ,EAAQ,KAGtB,SAAS2F,IACL,IAAIC,EAAW3+B,SAASiL,iBAAiB,eACrC0zB,GAAYA,EAASx7B,OAAS,IACnB,IAAI41B,EAAM,eACjB/4B,SAASyC,uBAAuB,QAAQU,SACnBnD,SAASiL,iBAAiB,WAClC7I,SAAQ,SAACsI,EAAKxH,GACvB,IAAI07B,EAAW,oBAAa17B,GAC3BwH,EAAoBN,aAAaw0B,EAAU,IAC5C,IAAI7F,EAAM,qBAAc71B,EAAC,SAI7BlD,SAASiL,iBAAiB,YAAY7I,SAAQ,SAAC23B,GAC3CA,EAAQ32B,iBAAiB,SAAS,SAACwM,GAC/B,GAAIlI,OAAOm3B,WAAW,uBAAuBp1B,QAAS,CAClD,IAAIq1B,EAAalvB,EAAKjL,cAA8BmM,WAA2BhE,cAC3E0C,EAAUI,EAAKjL,cAA8Bs1B,WAC7C6E,GAAatvB,EAAWI,EAAKjL,cAA8BmM,WAA2BiuB,YAAcD,EAASE,cAC7GxvB,EAAWI,EAAKjL,cAA8BmM,WAA2BiuB,YAAcD,EAASE,aAElGpvB,EAAKjL,cAA8BmM,WAA2BjC,MAAMowB,UAAY,cAAgBzvB,EAAS,MAC3G,IAAI2pB,EAAevpB,EAAKjL,cAA8BmM,WAA2B5E,uBAC7EgtB,EAAetpB,EAAKjL,cAA8BmM,WAA2B9D,mBACjFkyB,EAActvB,EAAKjL,cAA8BmM,WAA2BooB,EAAYC,QAGtFvpB,EAAKjL,cAA8BmM,WAA2BkpB,WAAcpqB,EAAKjL,cAA8Bs1B,iBAK7HvyB,OAAOy3B,SAAWC,EAClBA,MAKZ,SAASA,IACLp/B,SAASiL,iBAAiB,4BAA4B7I,SAAQ,SAAC40B,GAC3D,IAAIqI,EAAkBrI,EAAav0B,uBAAuB,QAAQE,KAAK,GACtE08B,EAA2Bh1B,gBAAgB,SAC5C,IAAI8uB,EAAanC,EAAav0B,uBAAuB,gBAAgBE,KAAK,GACzEw2B,EAA2B1sB,UAAUC,OAAO,YAC7C,IAAIwsB,EAAalC,EAAav0B,uBAAuB,YAAYE,KAAK,GACrEu2B,EAA2BzsB,UAAUC,OAAO,YACxC2yB,GAMAlG,EAA2B1sB,UAAUM,IAAI,YACtCuyB,EAAkBD,IAAeA,EAAW9W,SAASplB,OAAS,GAC7D+1B,EAA2BzsB,UAAUM,IAAI,cAP7CosB,EAA2B1sB,UAAUM,IAAI,YACzCmsB,EAA2BzsB,UAAUM,IAAI,aAW9CmsB,MAAAA,GAAAA,EAAY91B,iBAAiB,SAAS,SAACwM,GACnCA,EAAKpL,iBACL,IAAI+6B,EAAc3vB,EAAKjL,cACnB66B,EAAeD,EAAWrzB,uBAC1BitB,EAA0BqG,EAAQtzB,uBAClCL,EAAQyzB,EAAkBE,GAC9B,GAAI3zB,EAAQ2zB,EAAQjX,SAASplB,OAAS,EAAG,CACrC,IAAI27B,EAAYU,EAAwB1yB,cACpC0C,EAASgwB,EAAQjX,SAAS1c,EAAQ,GAAGouB,WACrC6E,GAAYtvB,EAAUgwB,EAAwBT,YAAcD,EAASE,YAAc,KACnFxvB,EAAUgwB,EAAwBT,YAAcD,EAASE,YAAc,IAE1EQ,EAAwB3wB,MAAMowB,UAAY,cAAgBzvB,EAAS,MACpE0vB,EAAcM,EAAyBD,EAAYpG,QAGnDoG,EAAW9yB,UAAUM,IAAI,eAGjCosB,MAAAA,GAAAA,EAAY/1B,iBAAiB,SAAS,SAACwM,GACnCA,EAAKpL,iBACL,IAAI+6B,EAAc3vB,EAAKjL,cACnB66B,EAAeD,EAAWvyB,mBAC1BksB,EAA0BsG,EAAQxyB,mBAClCnB,EAAQ4zB,EAAmBD,GAC/B,GAAI3zB,EAAQ,EAAG,CACX,IAAIizB,EAAYU,EAAwB1yB,cACpC0C,EAASgwB,EAAQjX,SAAS1c,EAAQ,GAAGouB,WACrC6E,GAAYtvB,EAAS,IACrBA,EAAS,GAEZgwB,EAAwB3wB,MAAMowB,UAAY,cAAgBzvB,EAAS,MACpE0vB,EAAcM,EAAyBtG,EAAYqG,QAGnDA,EAAW9yB,UAAUM,IAAI,kBAMzC,SAAS0yB,EAAmBC,WACpB7zB,EAAQ,EACRizB,EAAYY,EAAwB5yB,kBACxC,IAAkB,gTAAA4yB,EAAQnX,UAAQ,8BAAE,CAA/B,IAAIoX,EAAK,QACV,GAAIb,GAAYY,GACXC,EAAMzH,wBAAyB,GAAK4G,EAAS5G,wBAAwB7d,EACtE,MAEJxO,sGAEJ,OAAOA,EAGX,SAASyzB,EAAkBI,GACvB,IAAIE,EAASF,EAAgBnX,SAASplB,OAAS,EAC3C08B,EAAMD,EACNd,EAAYY,EAAwB5yB,cACxC,IAAK+yB,EAAMD,EAAOC,GAAO,KACjBf,GAAYY,GAAWA,EAAQnX,SAASsX,IACnCH,EAAQnX,SAASsX,GAAK3H,wBAAwB7d,EAAIqlB,EAAQnX,SAASsX,GAAK3H,wBAAwB5rB,MAAQ,IACxGwyB,EAAS5G,wBAAwB7d,EAAIykB,EAAS5G,wBAAwB5rB,OAHvDuzB,KAQ5B,OAAOA,EAGX,SAASX,EAAaM,EAAsBtG,EAAyBC,GACjEj7B,YAAW,WACHohC,EAAkBE,IAAaA,EAAQjX,SAASplB,OAAS,EACzD+1B,MAAAA,GAAAA,EAAYzsB,UAAUM,IAAI,YAG1BmsB,MAAAA,GAAAA,EAAYzsB,UAAUC,OAAO,YAE7B+yB,EAAmBD,GAAW,EAC9BrG,MAAAA,GAAAA,EAAY1sB,UAAUC,OAAO,YAG7BysB,MAAAA,GAAAA,EAAY1sB,UAAUM,IAAI,cAE/B,KAhJP2xB,yDCIA,yBAmGA,OA9FW,EAAA/9B,UAAP,SAAiBwB,GACb,IAAIlC,EAAc,GAMlB,OALAD,SAASC,OAAOC,MAAM,KAAKkC,SAAQ,SAAUC,GACrC,8RAAeA,EAAGnC,MAAM,KAAI,GAA3BoC,EAAG,KAAEvF,EAAK,KACfkD,EAAOqC,EAAIC,QAAUxF,KAGlBkD,EAAOkC,IAGX,EAAA29B,UAAP,SAAiBn+B,EAAc5E,EAAYgjC,GACvC,IAAIn+B,EAAU,GACd,GAAIm+B,EAAM,CACN,IAAIl+B,EAAO,IAAInE,KACfmE,EAAKC,QAAQD,EAAKE,UAAoB,GAAPg+B,EAAY,GAAK,GAAK,KACrDn+B,EAAU,aAAeC,EAAKG,mBAG9BJ,EAAU,oBAEd5B,SAASC,OAAS0B,EAAO,KAAO5E,GAAS,IAAM6E,EAAU,YAGtD,EAAAo+B,iBAAP,SAAwBr+B,EAAc5E,GAGlCiD,SAASC,OAAS0B,EAAO,KAAO5E,GAAS,IAAvB4E,6BAIf,EAAAs+B,qBAAP,WACI,OAAOnhC,KAAKohC,oBAAoBx4B,OAAO9C,SAASqF,OAG7C,EAAAk2B,qBAAP,WACI,OAAOrhC,KAAKohC,oBAAoBx4B,OAAO9C,SAASw7B,SAG7C,EAAAF,oBAAP,SAA2Bva,GACvB,IAAI/oB,EAAS,GAEb,GAAI+oB,EAGA,IAFA,IACI0a,EADO1a,EAAIiF,UAAU,GACR1qB,MAAM,KACdgD,EAAI,EAAGA,EAAIm9B,EAAMl9B,OAAQD,IAAK,CACnC,IAAIo9B,EAAYD,EAAMn9B,GAAGhD,MAAM,KAC/B,GAAwB,GAApBogC,EAAUn9B,OAAa,CACvB,IAAIb,EAAMg+B,EAAU,GAChBvjC,EAAQujC,EAAU,GACtB1jC,EAAO0G,KAAK,CAAEhB,IAAKA,EAAKvF,MAAOA,KAK3C,OAAOH,GAGJ,EAAA2jC,yCAAP,SAAgDC,GAC5C,IAAIC,EAAaD,EAAYE,SAAS,gBACtCF,EAAYG,KAAK,4BAA4BC,MAAK,SAAU/0B,GACxD,IAAI2uB,EAAMx6B,SAAS0D,cAAcmI,GACjC3N,YAAW,WACP,IAAI2iC,EAAYrG,EAAItwB,QAAQ,iBAAiBgG,KAAKuwB,EAAa,kBAAoB,mBAE/EjG,EAAIsG,KAAK,YACTtG,EAAIsG,KAAK,WAAYD,GAEhBrG,EAAI,GAAG/lB,MACZ+lB,EAAI,GAAG/lB,IAAMosB,KAElB,OAIJ,EAAAE,YAAP,SAAmBz0B,EAAe2f,EAAgB+U,GAC9C,OAAIC,aAAaC,kBACTF,EAAOpG,WAAW,OAClBoG,EAASA,EAAOpW,UAAU,IAEvB,mEAA4Dte,EAAK,mBAAW2f,EAAM,wBAAgB+U,IAGlG,sDAA+CC,aAAaE,sBAAqB,YAAIH,EAAM,YAAI10B,EAAK,YAAI2f,IAKhH,EAAAmV,KAAP,SAAYC,GACR,OAAOC,mBAAmBC,OAAOC,KAAKH,MAGnC,EAAAI,KAAP,SAAYvxB,GACR,OAAOwxB,KAAKhhC,SAASihC,mBAAmBzxB,MAhGrC,EAAA7P,aAAe,SAACsB,GACnB3B,SAASC,OAAS0B,EAAO,qDAiGjC,EAnGA,gCCOA,SAASigC,EAAShnB,GACd,OAAgB,OAARA,GACW,iBAARA,GACP,gBAAiBA,GACjBA,EAAIinB,cAAgBrY,OAE5B,SAASsY,EAAOp2B,EAAS,GAAI+I,EAAM,IAC/B+U,OAAOC,KAAKhV,GAAKrS,SAASE,SACK,IAAhBoJ,EAAOpJ,GACdoJ,EAAOpJ,GAAOmS,EAAInS,GACbs/B,EAASntB,EAAInS,KAClBs/B,EAASl2B,EAAOpJ,KAChBknB,OAAOC,KAAKhV,EAAInS,IAAMa,OAAS,GAC/B2+B,EAAOp2B,EAAOpJ,GAAMmS,EAAInS,kCAKpC,MAAMy/B,EAAc,CAChBh5B,KAAM,GACN3F,qBACAmI,wBACAI,cAAe,CACXq2B,SACAC,SAAU,IAEdv+B,cAAa,IACF,KAEXuH,iBAAgB,IACL,GAEX/E,eAAc,IACH,KAEXg8B,YAAW,KACA,CACHC,gBAGR/7B,cAAa,KACF,CACHmiB,SAAU,GACV6Z,WAAY,GACZvzB,MAAO,GACPzE,iBACAwrB,qBAAoB,IACT,KAInByM,gBAAe,KACJ,IAEXC,WAAU,IACC,KAEX19B,SAAU,CACNqF,KAAM,GACNs4B,KAAM,GACNC,SAAU,GACVlyB,KAAM,GACNmyB,OAAQ,GACRC,SAAU,GACVC,SAAU,GACVvC,OAAQ,KAGhB,SAASwC,IACL,MAAM1iB,EAA0B,oBAAblgB,SAA2BA,SAAW,GAEzD,OADA8hC,EAAO5hB,EAAK6hB,GACL7hB,EAGX,MAAM2iB,EAAY,CACd7iC,SAAU+hC,EACVtE,UAAW,CACPC,UAAW,IAEf94B,SAAU,CACNqF,KAAM,GACNs4B,KAAM,GACNC,SAAU,GACVlyB,KAAM,GACNmyB,OAAQ,GACRC,SAAU,GACVC,SAAU,GACVvC,OAAQ,IAEZ0C,QAAS,CACLC,iBACAC,cACAC,OACAC,UAEJ34B,YAAa,WACT,OAAOzL,MAEXsE,qBACAmI,wBACAiH,iBAAgB,KACL,CACHC,iBAAgB,IACL,KAInB0wB,UACAzlC,SACA2O,OAAQ,GACRnO,eACAe,iBACA4/B,WAAU,KACC,IAEXuE,sBAAsBrS,GACQ,oBAAf7yB,YACP6yB,IACO,MAEJ7yB,WAAW6yB,EAAU,GAEhCsS,qBAAqBj4B,GACS,oBAAflN,YAGXe,aAAamM,KAGrB,SAASk4B,IACL,MAAMC,EAAwB,oBAAX77B,OAAyBA,OAAS,GAErD,OADAo6B,EAAOyB,EAAKV,GACLU,+DC/II,SAASC,EAAc3J,EAAa4J,EAAO,SAAUC,GAClE,IAAK7J,GAAwB,cAAT4J,IAAyBC,EAAa,OAC1D,IAAIC,GAAa,EACjB,MAAMj8B,GAAS,UACTk8B,EAAyB,WAATH,EAAoB/7B,EAAO4zB,YAAcoI,EAAYG,aACrEC,EAASta,OAAOC,KAAKoQ,GAAazf,KAAI2pB,IAC1C,GAAqB,iBAAVA,GAA6C,IAAvBA,EAAM3jC,QAAQ,KAAY,CACzD,MAAM4jC,EAAW/7B,WAAW87B,EAAME,OAAO,IAEzC,MAAO,CACLlnC,MAFY6mC,EAAgBI,EAG5BD,MAAAA,GAGJ,MAAO,CACLhnC,MAAOgnC,EACPA,MAAAA,MAGJD,EAAOI,MAAK,CAACp5B,EAAGmD,IAAM1Q,SAASuN,EAAE/N,MAAO,IAAMQ,SAAS0Q,EAAElR,MAAO,MAChE,IAAK,IAAImG,EAAI,EAAGA,EAAI4gC,EAAO3gC,OAAQD,GAAK,EAAG,CACzC,MAAM,MACJ6gC,EAAK,MACLhnC,GACE+mC,EAAO5gC,GACE,WAATugC,EACE/7B,EAAOm3B,WAAW,eAAe9hC,QAAY0M,UAC/Ck6B,EAAaI,GAENhnC,GAAS2mC,EAAY1E,cAC9B2E,EAAaI,GAGjB,OAAOJ,GAAc,6EChCvB,SACEQ,cAAa,IACbX,cAAa,iECHf,MAAMY,EAAgB,CAACrR,EAAQ7e,IACtB6e,EAAOsR,MAAQnwB,EAAOmwB,MAAQnwB,EAAOmwB,KAAKC,KAAO,EAE3C,SAASH,IACtB,MAAMpR,EAASj0B,MACT,UACJylC,EAAS,YACTC,EAAW,OACXtwB,EAAM,GACN7R,GACE0wB,EACE8G,EAAc3lB,EAAO2lB,YAC3B,IAAKA,GAAeA,GAAmD,IAApCrQ,OAAOC,KAAKoQ,GAAa12B,OAAc,OAG1E,MAAMwgC,EAAa5Q,EAAOyQ,cAAc3J,EAAa9G,EAAO7e,OAAOuwB,gBAAiB1R,EAAO1wB,IAC3F,IAAKshC,GAAc5Q,EAAO2R,oBAAsBf,EAAY,OAC5D,MACMgB,GADuBhB,KAAc9J,EAAcA,EAAY8J,QAAc5lC,IAClCg1B,EAAO6R,eAClDC,EAAcT,EAAcrR,EAAQ7e,GACpC4wB,EAAaV,EAAcrR,EAAQ4R,GACnCI,EAAa7wB,EAAO8wB,QACtBH,IAAgBC,GAClBziC,EAAGoK,UAAUC,OAAO,GAAGwH,EAAO+wB,6BAA8B,GAAG/wB,EAAO+wB,qCACtElS,EAAOmS,yBACGL,GAAeC,IACzBziC,EAAGoK,UAAUM,IAAI,GAAGmH,EAAO+wB,+BACvBN,EAAiBN,KAAKc,MAAuC,WAA/BR,EAAiBN,KAAKc,OAAsBR,EAAiBN,KAAKc,MAA6B,WAArBjxB,EAAOmwB,KAAKc,OACtH9iC,EAAGoK,UAAUM,IAAI,GAAGmH,EAAO+wB,qCAE7BlS,EAAOmS,wBAIT,CAAC,aAAc,aAAc,aAAa9iC,SAAQgjC,IAChD,QAAsC,IAA3BT,EAAiBS,GAAuB,OACnD,MAAMC,EAAmBnxB,EAAOkxB,IAASlxB,EAAOkxB,GAAMJ,QAChDM,EAAkBX,EAAiBS,IAAST,EAAiBS,GAAMJ,QACrEK,IAAqBC,GACvBvS,EAAOqS,GAAMG,WAEVF,GAAoBC,GACvBvS,EAAOqS,GAAMI,YAGjB,MAAMC,EAAmBd,EAAiBtL,WAAasL,EAAiBtL,YAAcnlB,EAAOmlB,UACvFqM,EAAcxxB,EAAOslB,OAASmL,EAAiBpL,gBAAkBrlB,EAAOqlB,eAAiBkM,GAC3FA,GAAoBjB,GACtBzR,EAAO4S,mBAET,QAAO5S,EAAO7e,OAAQywB,GACtB,MAAMiB,EAAY7S,EAAO7e,OAAO8wB,QAChCxb,OAAOqc,OAAO9S,EAAQ,CACpB+S,eAAgB/S,EAAO7e,OAAO4xB,eAC9BC,eAAgBhT,EAAO7e,OAAO6xB,eAC9BC,eAAgBjT,EAAO7e,OAAO8xB,iBAE5BjB,IAAea,EACjB7S,EAAOwS,WACGR,GAAca,GACxB7S,EAAOyS,SAETzS,EAAO2R,kBAAoBf,EAC3B5Q,EAAOkT,KAAK,oBAAqBtB,GAC7Be,GAAelB,IACjBzR,EAAOmT,cACPnT,EAAOoT,WAAW5B,GAClBxR,EAAOqT,gBAETrT,EAAOkT,KAAK,aAActB,kDCzC5B,SACE0B,cA9BF,WACE,MAAMtT,EAASj0B,MAEbwnC,SAAUC,EAAS,OACnBryB,GACE6e,GACE,mBACJyT,GACEtyB,EACJ,GAAIsyB,EAAoB,CACtB,MAAMC,EAAiB1T,EAAO2T,OAAOvjC,OAAS,EACxCwjC,EAAqB5T,EAAO6T,WAAWH,GAAkB1T,EAAO8T,gBAAgBJ,GAAuC,EAArBD,EACxGzT,EAAOuT,SAAWvT,EAAO+T,KAAOH,OAEhC5T,EAAOuT,SAAsC,IAA3BvT,EAAOgU,SAAS5jC,QAEN,IAA1B+Q,EAAO6xB,iBACThT,EAAOgT,gBAAkBhT,EAAOuT,WAEJ,IAA1BpyB,EAAO8xB,iBACTjT,EAAOiT,gBAAkBjT,EAAOuT,UAE9BC,GAAaA,IAAcxT,EAAOuT,WACpCvT,EAAOiU,OAAQ,GAEbT,IAAcxT,EAAOuT,UACvBvT,EAAOkT,KAAKlT,EAAOuT,SAAW,OAAS,yCCX5B,SAASW,IACtB,MAAMlU,EAASj0B,MACT,WACJooC,EAAU,OACVhzB,EAAM,IACNizB,EAAG,GACH9kC,EAAE,OACF+kC,GACErU,EAEEsU,EAzBR,SAAwBh2B,EAASi2B,GAC/B,MAAMC,EAAgB,GAYtB,OAXAl2B,EAAQjP,SAAQO,IACM,iBAATA,EACT6mB,OAAOC,KAAK9mB,GAAMP,SAAQ8kC,IACpBvkC,EAAKukC,IACPK,EAAcjkC,KAAKgkC,EAASJ,MAGP,iBAATvkC,GAChB4kC,EAAcjkC,KAAKgkC,EAAS3kC,MAGzB4kC,EAYUC,CAAe,CAAC,cAAetzB,EAAOmlB,UAAW,CAChE,YAAatG,EAAO7e,OAAOuzB,UAAYvzB,EAAOuzB,SAASzC,SACtD,CACD,WAAc9wB,EAAOwzB,YACpB,CACD,IAAOP,GACN,CACD,KAAQjzB,EAAOmwB,MAAQnwB,EAAOmwB,KAAKC,KAAO,GACzC,CACD,cAAepwB,EAAOmwB,MAAQnwB,EAAOmwB,KAAKC,KAAO,GAA0B,WAArBpwB,EAAOmwB,KAAKc,MACjE,CACD,QAAWiC,EAAOO,SACjB,CACD,IAAOP,EAAOQ,KACb,CACD,WAAY1zB,EAAOolB,SAClB,CACD,SAAYplB,EAAOolB,SAAWplB,EAAOimB,gBACpC,CACD,iBAAkBjmB,EAAO2zB,sBACvB3zB,EAAO+wB,wBACXiC,EAAW5jC,QAAQ+jC,GACnBhlC,EAAGoK,UAAUM,OAAOm6B,GACpBnU,EAAOmS,8GC9CT,SACE+B,WAAU,IACVa,cAAa,kCCJA,SAASA,IACtB,MACM,GACJzlC,EAAE,WACF6kC,GAHapoC,KAKfuD,EAAGoK,UAAUC,UAAUw6B,GALRpoC,KAMRomC,4SCeT,MAAM6C,EAAa,CACjBC,cAAa,IACb7f,OAAM,IACN8f,UAAS,IACTC,WAAU,IACVC,MAAK,IACL3O,KAAI,IACJ4O,WAAU,IACVC,OAAM,IACNxO,YAAW,IACXwM,cAAa,IACbiC,QAAO,KAEHC,EAAmB,GACzB,MAAMC,EACJ3G,eAAehkC,GACb,IAAIwE,EACA6R,EACgB,IAAhBrW,EAAKsF,QAAgBtF,EAAK,GAAGgkC,aAAwE,WAAzDrY,OAAOhgB,UAAUihB,SAAStf,KAAKtN,EAAK,IAAIwN,MAAM,GAAI,GAChG6I,EAASrW,EAAK,IAEbwE,EAAI6R,GAAUrW,EAEZqW,IAAQA,EAAS,IACtBA,GAAS,QAAO,GAAIA,GAChB7R,IAAO6R,EAAO7R,KAAI6R,EAAO7R,GAAKA,GAClC,MAAMrC,GAAW,UACjB,GAAIkU,EAAO7R,IAA2B,iBAAd6R,EAAO7R,IAAmBrC,EAASiL,iBAAiBiJ,EAAO7R,IAAIc,OAAS,EAAG,CACjG,MAAMslC,EAAU,GAQhB,OAPAzoC,EAASiL,iBAAiBiJ,EAAO7R,IAAID,SAAQshC,IAC3C,MAAMgF,GAAY,QAAO,GAAIx0B,EAAQ,CACnC7R,GAAIqhC,IAEN+E,EAAQnlC,KAAK,IAAIklC,EAAOE,OAGnBD,EAIT,MAAM1V,EAASj0B,KACfi0B,EAAO4V,YAAa,EACpB5V,EAAO6V,SAAU,SACjB7V,EAAOqU,QAAS,OAAU,CACxB1J,UAAWxpB,EAAOwpB,YAEpB3K,EAAO8V,SAAU,SACjB9V,EAAO+V,gBAAkB,GACzB/V,EAAOgW,mBAAqB,GAC5BhW,EAAOqG,QAAU,IAAIrG,EAAOiW,aACxB90B,EAAOklB,SAAWluB,MAAM+9B,QAAQ/0B,EAAOklB,UACzCrG,EAAOqG,QAAQ91B,QAAQ4Q,EAAOklB,SAEhC,MAAM8P,EAAmB,GACzBnW,EAAOqG,QAAQh3B,SAAQ+mC,IACrBA,EAAI,CACFj1B,OAAAA,EACA6e,OAAAA,EACAqW,cAAc,OAAmBl1B,EAAQg1B,GACzCzjB,GAAIsN,EAAOtN,GAAG4jB,KAAKtW,GACnBuW,KAAMvW,EAAOuW,KAAKD,KAAKtW,GACvBwW,IAAKxW,EAAOwW,IAAIF,KAAKtW,GACrBkT,KAAMlT,EAAOkT,KAAKoD,KAAKtW,QAK3B,MAAMyW,GAAe,QAAO,GAAI,IAAUN,GAoG1C,OAjGAnW,EAAO7e,QAAS,QAAO,GAAIs1B,EAAcjB,EAAkBr0B,GAC3D6e,EAAO6R,gBAAiB,QAAO,GAAI7R,EAAO7e,QAC1C6e,EAAO0W,cAAe,QAAO,GAAIv1B,GAG7B6e,EAAO7e,QAAU6e,EAAO7e,OAAOuR,IACjC+D,OAAOC,KAAKsJ,EAAO7e,OAAOuR,IAAIrjB,SAAQsnC,IACpC3W,EAAOtN,GAAGikB,EAAW3W,EAAO7e,OAAOuR,GAAGikB,OAGtC3W,EAAO7e,QAAU6e,EAAO7e,OAAOy1B,OACjC5W,EAAO4W,MAAM5W,EAAO7e,OAAOy1B,OAI7BngB,OAAOqc,OAAO9S,EAAQ,CACpBiS,QAASjS,EAAO7e,OAAO8wB,QACvB3iC,GAAAA,EAEA6kC,WAAY,GAEZR,OAAQ,GACRE,WAAY,GACZG,SAAU,GACVF,gBAAiB,GAEjB+C,aAAY,IACyB,eAA5B7W,EAAO7e,OAAOmlB,UAEvBwQ,WAAU,IAC2B,aAA5B9W,EAAO7e,OAAOmlB,UAGvByQ,YAAa,EACbvF,UAAW,EAEXwF,aAAa,EACb/C,OAAO,EAEPiB,UAAW,EACX+B,kBAAmB,EACnBC,SAAU,EACVC,SAAU,EACVC,WAAW,EACXC,wBAGE,OAAO5rC,KAAK6rC,MAAMvrC,KAAKmpC,UAAY,GAAK,IAAM,GAAK,IAGrDlC,eAAgBhT,EAAO7e,OAAO6xB,eAC9BC,eAAgBjT,EAAO7e,OAAO8xB,eAE9BsE,gBAAiB,CACfC,eAAWxsC,EACXysC,aAASzsC,EACT0sC,yBAAqB1sC,EACrB2sC,oBAAgB3sC,EAChB4sC,iBAAa5sC,EACb6sC,sBAAkB7sC,EAClB8sC,oBAAgB9sC,EAChB+sC,wBAAoB/sC,EAEpBgtC,kBAAmBhY,EAAO7e,OAAO62B,kBAEjCC,cAAe,EACfC,kBAAcltC,EAEdmtC,WAAY,GACZC,yBAAqBptC,EACrBqtC,iBAAartC,EACbstC,QAAS,IAGXC,YAAY,EAEZxF,eAAgB/S,EAAO7e,OAAO4xB,eAC9ByF,QAAS,CACPC,OAAQ,EACRC,OAAQ,EACRC,SAAU,EACVC,SAAU,EACVC,KAAM,GAGRC,aAAc,GACdC,aAAc,IAEhB/Y,EAAOkT,KAAK,WAGRlT,EAAO7e,OAAOiiB,MAChBpD,EAAOoD,OAKFpD,EAETgZ,cAAcC,GACZ,MAAM,SACJC,EAAQ,OACR/3B,GACEpV,KACE4nC,GAAS,QAAgBuF,EAAU,IAAI/3B,EAAOg4B,4BAC9CC,GAAkB,QAAazF,EAAO,IAC5C,OAAO,QAAasF,GAAWG,EAEjCC,oBAAoBvgC,GAClB,OAAO/M,KAAKitC,cAAcjtC,KAAK4nC,OAAOjsB,QAAOuxB,GAA6D,EAAlDA,EAAQjpC,aAAa,6BAAmC8I,IAAO,IAEzHwgC,eACE,MACM,SACJJ,EAAQ,OACR/3B,GAHapV,KAAAA,KAKR4nC,QAAS,QAAgBuF,EAAU,IAAI/3B,EAAOg4B,4BAEvD1G,SACE,MAAMzS,EAASj0B,KACXi0B,EAAOiS,UACXjS,EAAOiS,SAAU,EACbjS,EAAO7e,OAAOk0B,YAChBrV,EAAOuZ,gBAETvZ,EAAOkT,KAAK,WAEdV,UACE,MAAMxS,EAASj0B,KACVi0B,EAAOiS,UACZjS,EAAOiS,SAAU,EACbjS,EAAO7e,OAAOk0B,YAChBrV,EAAOwZ,kBAETxZ,EAAOkT,KAAK,YAEduG,YAAYvC,EAAUxQ,GACpB,MAAM1G,EAASj0B,KACfmrC,EAAWzrC,KAAKC,IAAID,KAAKO,IAAIkrC,EAAU,GAAI,GAC3C,MAAMxrC,EAAMs0B,EAAO0Z,eAEbC,GADM3Z,EAAO4Z,eACIluC,GAAOwrC,EAAWxrC,EACzCs0B,EAAO6Z,YAAYF,OAA0B,IAAVjT,EAAwB,EAAIA,GAC/D1G,EAAO8Z,oBACP9Z,EAAO+Z,sBAET5H,uBACE,MAAMnS,EAASj0B,KACf,IAAKi0B,EAAO7e,OAAO64B,eAAiBha,EAAO1wB,GAAI,OAC/C,MAAM2qC,EAAMja,EAAO1wB,GAAG6sB,UAAUhvB,MAAM,KAAKua,QAAOyU,GACT,IAAhCA,EAAU9uB,QAAQ,WAA+E,IAA5D8uB,EAAU9uB,QAAQ2yB,EAAO7e,OAAO+wB,0BAE9ElS,EAAOkT,KAAK,oBAAqB+G,EAAIC,KAAK,MAE5CC,gBAAgBlB,GACd,MAAMjZ,EAASj0B,KACf,OAAIi0B,EAAOoa,UAAkB,GACtBnB,EAAQ9c,UAAUhvB,MAAM,KAAKua,QAAOyU,GACI,IAAtCA,EAAU9uB,QAAQ,iBAAyE,IAAhD8uB,EAAU9uB,QAAQ2yB,EAAO7e,OAAOg4B,cACjFe,KAAK,KAEVG,oBACE,MAAMra,EAASj0B,KACf,IAAKi0B,EAAO7e,OAAO64B,eAAiBha,EAAO1wB,GAAI,OAC/C,MAAMgrC,EAAU,GAChBta,EAAO2T,OAAOtkC,SAAQ4pC,IACpB,MAAM9E,EAAanU,EAAOma,gBAAgBlB,GAC1CqB,EAAQ/pC,KAAK,CACX0oC,QAAAA,EACA9E,WAAAA,IAEFnU,EAAOkT,KAAK,cAAe+F,EAAS9E,MAEtCnU,EAAOkT,KAAK,gBAAiBoH,GAE/BC,qBAAqBC,EAAO,UAAWC,GAAQ,GAC7C,MACM,OACJt5B,EAAM,OACNwyB,EAAM,WACNE,EAAU,gBACVC,EACAC,KAAM2G,EAAU,YAChB3D,GAPahrC,KASf,IAAI4uC,EAAM,EACV,GAAIx5B,EAAOimB,eAAgB,CACzB,IACIwT,EADAC,EAAYlH,EAAOoD,GAAepD,EAAOoD,GAAa+D,gBAAkB,EAE5E,IAAK,IAAI3qC,EAAI4mC,EAAc,EAAG5mC,EAAIwjC,EAAOvjC,OAAQD,GAAK,EAChDwjC,EAAOxjC,KAAOyqC,IAChBC,GAAalH,EAAOxjC,GAAG2qC,gBACvBH,GAAO,EACHE,EAAYH,IAAYE,GAAY,IAG5C,IAAK,IAAIzqC,EAAI4mC,EAAc,EAAG5mC,GAAK,EAAGA,GAAK,EACrCwjC,EAAOxjC,KAAOyqC,IAChBC,GAAalH,EAAOxjC,GAAG2qC,gBACvBH,GAAO,EACHE,EAAYH,IAAYE,GAAY,SAK5C,GAAa,YAATJ,EACF,IAAK,IAAIrqC,EAAI4mC,EAAc,EAAG5mC,EAAIwjC,EAAOvjC,OAAQD,GAAK,GAChCsqC,EAAQ5G,EAAW1jC,GAAK2jC,EAAgB3jC,GAAK0jC,EAAWkD,GAAe2D,EAAa7G,EAAW1jC,GAAK0jC,EAAWkD,GAAe2D,KAEhJC,GAAO,QAKX,IAAK,IAAIxqC,EAAI4mC,EAAc,EAAG5mC,GAAK,EAAGA,GAAK,EACrB0jC,EAAWkD,GAAelD,EAAW1jC,GAAKuqC,IAE5DC,GAAO,GAKf,OAAOA,EAETvlB,SACE,MAAM4K,EAASj0B,KACf,IAAKi0B,GAAUA,EAAOoa,UAAW,OACjC,MAAM,SACJpG,EAAQ,OACR7yB,GACE6e,EAcJ,SAAS+a,IACP,MAAMC,EAAiBhb,EAAOib,cAAmC,EAApBjb,EAAOkV,UAAiBlV,EAAOkV,UACtEgG,EAAezvC,KAAKC,IAAID,KAAKO,IAAIgvC,EAAgBhb,EAAO4Z,gBAAiB5Z,EAAO0Z,gBACtF1Z,EAAO+a,aAAaG,GACpBlb,EAAO8Z,oBACP9Z,EAAO+Z,sBAET,IAAIoB,EACJ,GApBIh6B,EAAO2lB,aACT9G,EAAOoR,gBAET,IAAIpR,EAAO1wB,GAAG4I,iBAAiB,qBAAqB7I,SAAQ+rC,IACtDA,EAAQpmB,WACV,OAAqBgL,EAAQob,MAGjCpb,EAAOqb,aACPrb,EAAOqT,eACPrT,EAAOsb,iBACPtb,EAAO+Z,sBASH54B,EAAOuzB,UAAYvzB,EAAOuzB,SAASzC,UAAY9wB,EAAOolB,QACxDwU,IACI55B,EAAOwzB,YACT3U,EAAOub,uBAEJ,CACL,IAA8B,SAAzBp6B,EAAOqlB,eAA4BrlB,EAAOqlB,cAAgB,IAAMxG,EAAOiU,QAAU9yB,EAAOimB,eAAgB,CAC3G,MAAMuM,EAAS3T,EAAOwb,SAAWr6B,EAAOq6B,QAAQvJ,QAAUjS,EAAOwb,QAAQ7H,OAAS3T,EAAO2T,OACzFwH,EAAanb,EAAOyb,QAAQ9H,EAAOvjC,OAAS,EAAG,GAAG,GAAO,QAEzD+qC,EAAanb,EAAOyb,QAAQzb,EAAO+W,YAAa,GAAG,GAAO,GAEvDoE,GACHJ,IAGA55B,EAAOu6B,eAAiB1H,IAAahU,EAAOgU,UAC9ChU,EAAOsT,gBAETtT,EAAOkT,KAAK,UAEdN,gBAAgB+I,EAAcC,GAAa,GACzC,MAAM5b,EAASj0B,KACT8vC,EAAmB7b,EAAO7e,OAAOmlB,UAKvC,OAJKqV,IAEHA,EAAoC,eAArBE,EAAoC,WAAa,cAE9DF,IAAiBE,GAAqC,eAAjBF,GAAkD,aAAjBA,IAG1E3b,EAAO1wB,GAAGoK,UAAUC,OAAO,GAAGqmB,EAAO7e,OAAO+wB,yBAAyB2J,KACrE7b,EAAO1wB,GAAGoK,UAAUM,IAAI,GAAGgmB,EAAO7e,OAAO+wB,yBAAyByJ,KAClE3b,EAAOmS,uBACPnS,EAAO7e,OAAOmlB,UAAYqV,EAC1B3b,EAAO2T,OAAOtkC,SAAQ4pC,IACC,aAAjB0C,EACF1C,EAAQn9B,MAAMvC,MAAQ,GAEtB0/B,EAAQn9B,MAAMod,OAAS,MAG3B8G,EAAOkT,KAAK,mBACR0I,GAAY5b,EAAO5K,UAdd4K,EAiBX8b,wBAAwBxV,GACtB,MAAMtG,EAASj0B,KACXi0B,EAAOoU,KAAqB,QAAd9N,IAAwBtG,EAAOoU,KAAqB,QAAd9N,IACxDtG,EAAOoU,IAAoB,QAAd9N,EACbtG,EAAOib,aAA2C,eAA5Bjb,EAAO7e,OAAOmlB,WAA8BtG,EAAOoU,IACrEpU,EAAOoU,KACTpU,EAAO1wB,GAAGoK,UAAUM,IAAI,GAAGgmB,EAAO7e,OAAO+wB,6BACzClS,EAAO1wB,GAAGysC,IAAM,QAEhB/b,EAAO1wB,GAAGoK,UAAUC,OAAO,GAAGqmB,EAAO7e,OAAO+wB,6BAC5ClS,EAAO1wB,GAAGysC,IAAM,OAElB/b,EAAO5K,UAET5C,MAAM3Y,GACJ,MAAMmmB,EAASj0B,KACf,GAAIi0B,EAAOgc,QAAS,OAAO,EAG3B,IAAI1sC,EAAKuK,GAAWmmB,EAAO7e,OAAO7R,GAIlC,GAHkB,iBAAPA,IACTA,EAAKrC,SAAS0D,cAAcrB,KAEzBA,EACH,OAAO,EAETA,EAAG0wB,OAASA,EACR1wB,EAAG2sC,WACLjc,EAAOkc,WAAY,GAErB,MAAMC,EAAqB,IAClB,KAAKnc,EAAO7e,OAAOi7B,cAAgB,IAAI5sC,OAAOrC,MAAM,KAAK+sC,KAAK,OAWvE,IAAImC,EARE/sC,GAAMA,EAAGgtC,YAAchtC,EAAGgtC,WAAW3rC,cAC3BrB,EAAGgtC,WAAW3rC,cAAcwrC,MAInC,QAAgB7sC,EAAI6sC,KAAsB,GAqBnD,OAjBKE,GAAarc,EAAO7e,OAAOo7B,iBAC9BF,GAAY,QAAc,MAAOrc,EAAO7e,OAAOi7B,cAC/C9sC,EAAG0E,OAAOqoC,IACV,QAAgB/sC,EAAI,IAAI0wB,EAAO7e,OAAOg4B,cAAc9pC,SAAQ4pC,IAC1DoD,EAAUroC,OAAOilC,OAGrBxiB,OAAOqc,OAAO9S,EAAQ,CACpB1wB,GAAAA,EACA+sC,UAAAA,EACAnD,SAAUlZ,EAAOkc,UAAY5sC,EAAK+sC,EAClCL,SAAS,EAET5H,IAA8B,QAAzB9kC,EAAGysC,IAAIxnC,eAA6D,SAAlC,QAAajF,EAAI,aACxD2rC,aAA0C,eAA5Bjb,EAAO7e,OAAOmlB,YAAwD,QAAzBh3B,EAAGysC,IAAIxnC,eAA6D,SAAlC,QAAajF,EAAI,cAC9GktC,SAAiD,iBAAvC,QAAaH,EAAW,cAE7B,EAETjZ,KAAK9zB,GACH,MAAM0wB,EAASj0B,KACf,OAAIi0B,EAAOyR,cAEK,IADAzR,EAAOxN,MAAMljB,KAE7B0wB,EAAOkT,KAAK,cAGRlT,EAAO7e,OAAO2lB,aAChB9G,EAAOoR,gBAITpR,EAAOkU,aAGPlU,EAAOqb,aAGPrb,EAAOqT,eACHrT,EAAO7e,OAAOu6B,eAChB1b,EAAOsT,gBAILtT,EAAO7e,OAAOk0B,YAAcrV,EAAOiS,SACrCjS,EAAOuZ,gBAILvZ,EAAO7e,OAAOslB,MAAQzG,EAAOwb,SAAWxb,EAAO7e,OAAOq6B,QAAQvJ,QAChEjS,EAAOyb,QAAQzb,EAAO7e,OAAOs7B,aAAezc,EAAOwb,QAAQkB,aAAc,EAAG1c,EAAO7e,OAAOw7B,oBAAoB,GAAO,GAErH3c,EAAOyb,QAAQzb,EAAO7e,OAAOs7B,aAAc,EAAGzc,EAAO7e,OAAOw7B,oBAAoB,GAAO,GAIrF3c,EAAO7e,OAAOslB,MAChBzG,EAAOoT,aAITpT,EAAO4c,eACP,IAAI5c,EAAO1wB,GAAG4I,iBAAiB,qBAAqB7I,SAAQ+rC,IACtDA,EAAQpmB,UACV,OAAqBgL,EAAQob,GAE7BA,EAAQ/qC,iBAAiB,QAAQrC,KAC/B,OAAqBgyB,EAAQhyB,EAAE2K,eAIrC,OAAQqnB,GAGRA,EAAOyR,aAAc,GACrB,OAAQzR,GAGRA,EAAOkT,KAAK,QACZlT,EAAOkT,KAAK,cA1DmBlT,EA6DjC6c,QAAQC,GAAiB,EAAMC,GAAc,GAC3C,MAAM/c,EAASj0B,MACT,OACJoV,EAAM,GACN7R,EAAE,UACF+sC,EAAS,OACT1I,GACE3T,EACJ,YAA6B,IAAlBA,EAAO7e,QAA0B6e,EAAOoa,YAGnDpa,EAAOkT,KAAK,iBAGZlT,EAAOyR,aAAc,EAGrBzR,EAAOgd,eAGH77B,EAAOslB,MACTzG,EAAOmT,cAIL4J,IACF/c,EAAO+U,gBACPzlC,EAAGgI,gBAAgB,SACnB+kC,EAAU/kC,gBAAgB,SACtBq8B,GAAUA,EAAOvjC,QACnBujC,EAAOtkC,SAAQ4pC,IACbA,EAAQv/B,UAAUC,OAAOwH,EAAO87B,kBAAmB97B,EAAO+7B,iBAAkB/7B,EAAOg8B,eAAgBh8B,EAAOi8B,gBAC1GnE,EAAQ3hC,gBAAgB,SACxB2hC,EAAQ3hC,gBAAgB,+BAI9B0oB,EAAOkT,KAAK,WAGZzc,OAAOC,KAAKsJ,EAAO+V,iBAAiB1mC,SAAQsnC,IAC1C3W,EAAOwW,IAAIG,OAEU,IAAnBmG,IACF9c,EAAO1wB,GAAG0wB,OAAS,MACnB,QAAYA,IAEdA,EAAOoa,WAAY,GAtCV,KAyCXiD,sBAAsBC,IACpB,QAAO9H,EAAkB8H,GAEhB9H,8BACT,OAAOA,EAEE+H,sBACT,OAAO,IAETF,qBAAqBjH,GACdX,EAAOh/B,UAAUw/B,cAAaR,EAAOh/B,UAAUw/B,YAAc,IAClE,MAAM5P,EAAUoP,EAAOh/B,UAAUw/B,YACd,mBAARG,GAAsB/P,EAAQh5B,QAAQ+oC,GAAO,GACtD/P,EAAQ91B,KAAK6lC,GAGjBiH,WAAWG,GACT,OAAIrlC,MAAM+9B,QAAQsH,IAChBA,EAAOnuC,SAAQouC,GAAKhI,EAAOiI,cAAcD,KAClChI,IAETA,EAAOiI,cAAcF,GACd/H,IAGXhf,OAAOC,KAAKse,GAAY3lC,SAAQsuC,IAC9BlnB,OAAOC,KAAKse,EAAW2I,IAAiBtuC,SAAQuuC,IAC9CnI,EAAOh/B,UAAUmnC,GAAe5I,EAAW2I,GAAgBC,SAG/DnI,EAAOoI,IAAI,CAAC,IAAQ,MACpB,wDCrlBA,SACEza,MAAM,EACNkD,UAAW,aACXwX,gBAAgB,EAChBC,kBAAmB,UACnBtB,aAAc,EACd/V,MAAO,IACPH,SAAS,EACTyX,sBAAsB,EACtBC,gBAAgB,EAChBC,QAAQ,EACR3B,gBAAgB,EAChBtK,SAAS,EACT+F,kBAAmB,wDAEnBz+B,MAAO,KACP2f,OAAQ,KAERilB,gCAAgC,EAEhCxT,UAAW,KACX/X,IAAK,KAELwrB,oBAAoB,EACpBC,mBAAoB,GAEpB1J,YAAY,EAEZ2J,gBAAgB,EAEhBC,kBAAkB,EAElBC,OAAQ,QAIR1X,iBAAa97B,EACb0mC,gBAAiB,SAEjB3K,aAAc,EACdP,cAAe,EACfgF,eAAgB,EAChBiT,mBAAoB,EACpBC,oBAAoB,EACpBtX,gBAAgB,EAChBC,sBAAsB,EACtBoM,mBAAoB,EAEpBkL,kBAAmB,EAEnBC,qBAAqB,EACrBC,0BAA0B,EAE1BnD,eAAe,EAEfoD,cAAc,EAEdC,WAAY,EACZC,WAAY,GACZC,eAAe,EACfC,aAAa,EACbC,YAAY,EACZC,gBAAiB,GACjBC,aAAc,IACdC,cAAc,EACdvM,gBAAgB,EAChBl0B,UAAW,EACX0gC,0BAA0B,EAC1BC,0BAA0B,EAC1BC,+BAA+B,EAC/BC,qBAAqB,EAErBC,mBAAmB,EAEnBC,YAAY,EACZC,gBAAiB,IAEjB/K,qBAAqB,EAErBO,YAAY,EAEZyK,eAAe,EACfC,0BAA0B,EAC1BC,qBAAqB,EAErBvZ,MAAM,EACNwZ,aAAc,KACdC,qBAAqB,EAErBC,QAAQ,EAERlN,gBAAgB,EAChBD,gBAAgB,EAChBoN,aAAc,KAEdC,WAAW,EACXC,eAAgB,oBAChBC,kBAAmB,KAEnBC,kBAAkB,EAClBC,wBAAyB,GAEzBvO,uBAAwB,UAExBiH,WAAY,eACZ+D,iBAAkB,sBAClBD,kBAAmB,uBACnBE,eAAgB,oBAChBC,eAAgB,oBAChBhB,aAAc,iBACdsE,mBAAoB,wBACpBC,oBAAqB,EAErBhE,oBAAoB,EAEpB3C,cAAc,iDCjHhB,SACEtnB,GAAG4iB,EAAQsL,EAASC,GAClB,MAAMC,EAAO/0C,KACb,IAAK+0C,EAAK/K,iBAAmB+K,EAAK1G,UAAW,OAAO0G,EACpD,GAAuB,mBAAZF,EAAwB,OAAOE,EAC1C,MAAMluC,EAASiuC,EAAW,UAAY,OAKtC,OAJAvL,EAAOnoC,MAAM,KAAKkC,SAAQ+E,IACnB0sC,EAAK/K,gBAAgB3hC,KAAQ0sC,EAAK/K,gBAAgB3hC,GAAS,IAChE0sC,EAAK/K,gBAAgB3hC,GAAOxB,GAAQguC,MAE/BE,GAETvK,KAAKjB,EAAQsL,EAASC,GACpB,MAAMC,EAAO/0C,KACb,IAAK+0C,EAAK/K,iBAAmB+K,EAAK1G,UAAW,OAAO0G,EACpD,GAAuB,mBAAZF,EAAwB,OAAOE,EAC1C,SAASC,KAAej2C,GACtBg2C,EAAKtK,IAAIlB,EAAQyL,GACbA,EAAYC,uBACPD,EAAYC,eAErBJ,EAAQ31C,MAAM61C,EAAMh2C,GAGtB,OADAi2C,EAAYC,eAAiBJ,EACtBE,EAAKpuB,GAAG4iB,EAAQyL,EAAaF,IAEtCjK,MAAMgK,EAASC,GACb,MAAMC,EAAO/0C,KACb,IAAK+0C,EAAK/K,iBAAmB+K,EAAK1G,UAAW,OAAO0G,EACpD,GAAuB,mBAAZF,EAAwB,OAAOE,EAC1C,MAAMluC,EAASiuC,EAAW,UAAY,OAItC,OAHIC,EAAK9K,mBAAmB3oC,QAAQuzC,GAAW,GAC7CE,EAAK9K,mBAAmBpjC,GAAQguC,GAE3BE,GAETG,OAAOL,GACL,MAAME,EAAO/0C,KACb,IAAK+0C,EAAK/K,iBAAmB+K,EAAK1G,UAAW,OAAO0G,EACpD,IAAKA,EAAK9K,mBAAoB,OAAO8K,EACrC,MAAMhoC,EAAQgoC,EAAK9K,mBAAmB3oC,QAAQuzC,GAI9C,OAHI9nC,GAAS,GACXgoC,EAAK9K,mBAAmBkL,OAAOpoC,EAAO,GAEjCgoC,GAETtK,IAAIlB,EAAQsL,GACV,MAAME,EAAO/0C,KACb,OAAK+0C,EAAK/K,iBAAmB+K,EAAK1G,UAAkB0G,EAC/CA,EAAK/K,iBACVT,EAAOnoC,MAAM,KAAKkC,SAAQ+E,SACD,IAAZwsC,EACTE,EAAK/K,gBAAgB3hC,GAAS,GACrB0sC,EAAK/K,gBAAgB3hC,IAC9B0sC,EAAK/K,gBAAgB3hC,GAAO/E,SAAQ,CAAC8xC,EAAcroC,MAC7CqoC,IAAiBP,GAAWO,EAAaH,gBAAkBG,EAAaH,iBAAmBJ,IAC7FE,EAAK/K,gBAAgB3hC,GAAO8sC,OAAOpoC,EAAO,SAK3CgoC,GAZ2BA,GAcpC5N,QAAQpoC,GACN,MAAMg2C,EAAO/0C,KACb,IAAK+0C,EAAK/K,iBAAmB+K,EAAK1G,UAAW,OAAO0G,EACpD,IAAKA,EAAK/K,gBAAiB,OAAO+K,EAClC,IAAIxL,EACAn4B,EACAikC,EAwBJ,MAvBuB,iBAAZt2C,EAAK,IAAmBqN,MAAM+9B,QAAQprC,EAAK,KACpDwqC,EAASxqC,EAAK,GACdqS,EAAOrS,EAAKwN,MAAM,EAAGxN,EAAKsF,QAC1BgxC,EAAUN,IAEVxL,EAASxqC,EAAK,GAAGwqC,OACjBn4B,EAAOrS,EAAK,GAAGqS,KACfikC,EAAUt2C,EAAK,GAAGs2C,SAAWN,GAE/B3jC,EAAKkkC,QAAQD,IACOjpC,MAAM+9B,QAAQZ,GAAUA,EAASA,EAAOnoC,MAAM,MACtDkC,SAAQ+E,IACd0sC,EAAK9K,oBAAsB8K,EAAK9K,mBAAmB5lC,QACrD0wC,EAAK9K,mBAAmB3mC,SAAQ8xC,IAC9BA,EAAal2C,MAAMm2C,EAAS,CAAChtC,KAAU+I,OAGvC2jC,EAAK/K,iBAAmB+K,EAAK/K,gBAAgB3hC,IAC/C0sC,EAAK/K,gBAAgB3hC,GAAO/E,SAAQ8xC,IAClCA,EAAal2C,MAAMm2C,EAASjkC,SAI3B2jC,qICvFX,IAAIQ,GAAqB,EACzB,SAASC,KACT,MAAMjM,EAAS,CAACtV,EAAQptB,KACtB,MAAM3F,GAAW,WACX,OACJkU,EAAM,GACN7R,EAAE,UACF+sC,EAAS,OACThI,GACErU,EACEwhB,IAAYrgC,EAAO+8B,OACnBuD,EAAuB,OAAX7uC,EAAkB,mBAAqB,sBACnD8uC,EAAe9uC,EAGrBtD,EAAGmyC,GAAW,cAAezhB,EAAO2hB,aAAc,CAChDC,SAAS,IAEX30C,EAASw0C,GAAW,cAAezhB,EAAO6hB,YAAa,CACrDD,SAAS,EACTJ,QAAAA,IAEFv0C,EAASw0C,GAAW,YAAazhB,EAAO8hB,WAAY,CAClDF,SAAS,IAEX30C,EAASw0C,GAAW,gBAAiBzhB,EAAO8hB,WAAY,CACtDF,SAAS,IAEX30C,EAASw0C,GAAW,aAAczhB,EAAO8hB,WAAY,CACnDF,SAAS,IAEX30C,EAASw0C,GAAW,eAAgBzhB,EAAO8hB,WAAY,CACrDF,SAAS,KAIPzgC,EAAO2+B,eAAiB3+B,EAAO4+B,2BACjCzwC,EAAGmyC,GAAW,QAASzhB,EAAO+hB,SAAS,GAErC5gC,EAAOolB,SACT8V,EAAUoF,GAAW,SAAUzhB,EAAOgiB,UAIpC7gC,EAAO68B,qBACThe,EAAO0hB,GAAcrN,EAAOQ,KAAOR,EAAOO,QAAU,0CAA4C,wBAAyB,KAAU,GAEnI5U,EAAO0hB,GAAc,iBAAkB,KAAU,GAInDpyC,EAAGmyC,GAAW,OAAQzhB,EAAOiiB,OAAQ,CACnCT,SAAS,KA2Bb,GACE5E,aAzBF,WACE,MAAM5c,EAASj0B,KACTkB,GAAW,WACX,OACJkU,GACE6e,EACJA,EAAO2hB,aAAe,SAAkB3hB,GACxCA,EAAO6hB,YAAc,SAAiB7hB,GACtCA,EAAO8hB,WAAa,SAAgB9hB,GAChC7e,EAAOolB,UACTvG,EAAOgiB,SAAW,SAAchiB,IAElCA,EAAO+hB,QAAU,SAAa/hB,GAC9BA,EAAOiiB,OAAS,SAAYjiB,GACvBshB,IACHr0C,EAASoD,iBAAiB,aAAckxC,GACxCD,GAAqB,GAEvBhM,EAAOtV,EAAQ,OAQfgd,aANF,WAEE1H,EADevpC,KACA,sCCrFF,SAASg2C,EAAQ/zC,GAC9B,MAAMgyB,EAASj0B,KACVi0B,EAAOiS,UACPjS,EAAOuY,aACNvY,EAAO7e,OAAO2+B,eAAe9xC,EAAEyD,iBAC/BuuB,EAAO7e,OAAO4+B,0BAA4B/f,EAAOoX,YACnDppC,EAAEk0C,kBACFl0C,EAAEm0C,2GCNO,SAASF,EAAOj0C,GAC7B,MAAMgyB,EAASj0B,MACf,OAAqBi0B,EAAQhyB,EAAE2K,QAC3BqnB,EAAO7e,OAAOolB,SAA2C,SAAhCvG,EAAO7e,OAAOqlB,gBAA6BxG,EAAO7e,OAAOwzB,YAGtF3U,EAAO5K,uCCPM,SAASgtB,IACtB,MAAMpiB,EAASj0B,MACT,OACJoV,EAAM,GACN7R,GACE0wB,EACJ,GAAI1wB,GAAyB,IAAnBA,EAAG+yC,YAAmB,OAG5BlhC,EAAO2lB,aACT9G,EAAOoR,gBAIT,MAAM,eACJ4B,EAAc,eACdC,EAAc,SACde,GACEhU,EACEsiB,EAAYtiB,EAAOwb,SAAWxb,EAAO7e,OAAOq6B,QAAQvJ,QAG1DjS,EAAOgT,gBAAiB,EACxBhT,EAAOiT,gBAAiB,EACxBjT,EAAOqb,aACPrb,EAAOqT,eACPrT,EAAO+Z,sBACP,MAAMwI,EAAgBD,GAAanhC,EAAOslB,OACZ,SAAzBtlB,EAAOqlB,eAA4BrlB,EAAOqlB,cAAgB,KAAMxG,EAAOiU,OAAUjU,EAAOgX,aAAgBhX,EAAO7e,OAAOimB,gBAAmBmb,EAGxIviB,EAAO7e,OAAOslB,OAAS6b,EACzBtiB,EAAOwiB,YAAYxiB,EAAOwR,UAAW,GAAG,GAAO,GAE/CxR,EAAOyb,QAAQzb,EAAO+W,YAAa,GAAG,GAAO,GAL/C/W,EAAOyb,QAAQzb,EAAO2T,OAAOvjC,OAAS,EAAG,GAAG,GAAO,GAQjD4vB,EAAOyiB,UAAYziB,EAAOyiB,SAASC,SAAW1iB,EAAOyiB,SAASE,SAChEz2C,aAAa8zB,EAAOyiB,SAASG,eAC7B5iB,EAAOyiB,SAASG,cAAgBz3C,YAAW,KACrC60B,EAAOyiB,UAAYziB,EAAOyiB,SAASC,SAAW1iB,EAAOyiB,SAASE,QAChE3iB,EAAOyiB,SAASI,WAEjB,MAGL7iB,EAAOiT,eAAiBA,EACxBjT,EAAOgT,eAAiBA,EACpBhT,EAAO7e,OAAOu6B,eAAiB1H,IAAahU,EAAOgU,UACrDhU,EAAOsT,8DCjDI,SAAS0O,IACtB,MAAMhiB,EAASj0B,MACT,UACJswC,EAAS,aACTpB,EAAY,QACZhJ,GACEjS,EACJ,IAAKiS,EAAS,OAWd,IAAI6Q,EAVJ9iB,EAAOiX,kBAAoBjX,EAAOkV,UAC9BlV,EAAO6W,eACT7W,EAAOkV,WAAamH,EAAUpV,WAE9BjH,EAAOkV,WAAamH,EAAU0G,UAGP,IAArB/iB,EAAOkV,YAAiBlV,EAAOkV,UAAY,GAC/ClV,EAAO8Z,oBACP9Z,EAAO+Z,sBAEP,MAAMiJ,EAAiBhjB,EAAO4Z,eAAiB5Z,EAAO0Z,eAEpDoJ,EADqB,IAAnBE,EACY,GAEChjB,EAAOkV,UAAYlV,EAAO0Z,gBAAkBsJ,EAEzDF,IAAgB9iB,EAAOkX,UACzBlX,EAAOsb,eAAeL,GAAgBjb,EAAOkV,UAAYlV,EAAOkV,WAElElV,EAAOkT,KAAK,eAAgBlT,EAAOkV,WAAW,+EC3BjC,SAAS4M,EAAW1tC,GACjC,MAAM4rB,EAASj0B,KACToR,EAAO6iB,EAAOuX,gBACd0L,EAAe9lC,EAAKm7B,QAAQ4K,WAAUC,GAAYA,EAASC,YAAchvC,EAAMgvC,YAIrF,GAHIH,GAAgB,GAClB9lC,EAAKm7B,QAAQ4I,OAAO+B,EAAc,GAEhC,CAAC,gBAAiB,aAAc,gBAAgBI,SAASjvC,EAAMnK,QAClC,kBAAfmK,EAAMnK,OAA6B+1B,EAAO8V,QAAQwN,WAAYtjB,EAAO8V,QAAQyN,WAE3F,OAGJ,MAAM,OACJpiC,EAAM,QACNq3B,EACAyC,aAAc7G,EAAG,WACjBP,EAAU,QACV5B,GACEjS,EACJ,IAAKiS,EAAS,OACd,IAAK9wB,EAAO89B,eAAuC,UAAtB7qC,EAAMovC,YAAyB,OAC5D,IAAIx1C,EAAIoG,EAMR,GALIpG,EAAEy1C,gBAAez1C,EAAIA,EAAEy1C,eACvBtmC,EAAKu6B,qBACP1X,EAAOkT,KAAK,WAAYllC,GAE1BmP,EAAKu6B,qBAAsB,GACtBv6B,EAAKq6B,UAMR,OALIr6B,EAAKs6B,SAAWt2B,EAAOk0B,YACzBrV,EAAOuZ,eAAc,GAEvBp8B,EAAKs6B,SAAU,OACft6B,EAAKk7B,aAAc,GAIjBl3B,EAAOk0B,YAAcl4B,EAAKs6B,SAAWt6B,EAAKq6B,aAAwC,IAA1BxX,EAAOgT,iBAAqD,IAA1BhT,EAAOiT,iBACnGjT,EAAOuZ,eAAc,GAIvB,MAAMmK,GAAe,UACfC,EAAWD,EAAevmC,EAAKw6B,eAGrC,GAAI3X,EAAOuY,WAAY,CACrB,MAAMqL,EAAW51C,EAAE61C,MAAQ71C,EAAE81C,cAAgB91C,EAAE81C,eAC/C9jB,EAAO+jB,mBAAmBH,GAAYA,EAAS,IAAM51C,EAAE2K,QACvDqnB,EAAOkT,KAAK,YAAallC,GACrB21C,EAAW,KAAOD,EAAevmC,EAAK86B,cAAgB,KACxDjY,EAAOkT,KAAK,wBAAyBllC,GAOzC,GAJAmP,EAAK86B,eAAgB,WACrB,SAAS,KACFjY,EAAOoa,YAAWpa,EAAOuY,YAAa,OAExCp7B,EAAKq6B,YAAcr6B,EAAKs6B,UAAYzX,EAAOgkB,gBAAmC,IAAjBxL,EAAQK,MAAc17B,EAAK06B,mBAAqB16B,EAAK26B,eAIrH,OAHA36B,EAAKq6B,WAAY,EACjBr6B,EAAKs6B,SAAU,OACft6B,EAAKk7B,aAAc,GAMrB,IAAI4L,EAMJ,GATA9mC,EAAKq6B,WAAY,EACjBr6B,EAAKs6B,SAAU,EACft6B,EAAKk7B,aAAc,EAGjB4L,EADE9iC,EAAOm+B,aACIlL,EAAMpU,EAAOkV,WAAalV,EAAOkV,WAEhC/3B,EAAK06B,iBAEjB12B,EAAOolB,QACT,OAEF,GAAIplB,EAAOuzB,UAAYvzB,EAAOuzB,SAASzC,QAIrC,YAHAjS,EAAO0U,SAASoN,WAAW,CACzBmC,WAAAA,IAMJ,IAAIC,EAAY,EACZC,EAAYnkB,EAAO8T,gBAAgB,GACvC,IAAK,IAAI3jC,EAAI,EAAGA,EAAI0jC,EAAWzjC,OAAQD,GAAKA,EAAIgR,EAAOs9B,mBAAqB,EAAIt9B,EAAOqqB,eAAgB,CACrG,MAAM4Y,EAAYj0C,EAAIgR,EAAOs9B,mBAAqB,EAAI,EAAIt9B,EAAOqqB,oBACxB,IAA9BqI,EAAW1jC,EAAIi0C,GACpBH,GAAcpQ,EAAW1jC,IAAM8zC,EAAapQ,EAAW1jC,EAAIi0C,KAC7DF,EAAY/zC,EACZg0C,EAAYtQ,EAAW1jC,EAAIi0C,GAAavQ,EAAW1jC,IAE5C8zC,GAAcpQ,EAAW1jC,KAClC+zC,EAAY/zC,EACZg0C,EAAYtQ,EAAWA,EAAWzjC,OAAS,GAAKyjC,EAAWA,EAAWzjC,OAAS,IAGnF,IAAIi0C,EAAmB,KACnBC,EAAkB,KAClBnjC,EAAOg/B,SACLngB,EAAOgX,YACTsN,EAAkBnjC,EAAOq6B,SAAWr6B,EAAOq6B,QAAQvJ,SAAWjS,EAAOwb,QAAUxb,EAAOwb,QAAQ7H,OAAOvjC,OAAS,EAAI4vB,EAAO2T,OAAOvjC,OAAS,EAChI4vB,EAAOiU,QAChBoQ,EAAmB,IAIvB,MAAME,GAASN,EAAapQ,EAAWqQ,IAAcC,EAC/CC,EAAYF,EAAY/iC,EAAOs9B,mBAAqB,EAAI,EAAIt9B,EAAOqqB,eACzE,GAAImY,EAAWxiC,EAAOk+B,aAAc,CAElC,IAAKl+B,EAAOg+B,WAEV,YADAnf,EAAOyb,QAAQzb,EAAO+W,aAGM,SAA1B/W,EAAOgkB,iBACLO,GAASpjC,EAAOi+B,gBAAiBpf,EAAOyb,QAAQt6B,EAAOg/B,QAAUngB,EAAOiU,MAAQoQ,EAAmBH,EAAYE,GAAgBpkB,EAAOyb,QAAQyI,IAEtH,SAA1BlkB,EAAOgkB,iBACLO,EAAQ,EAAIpjC,EAAOi+B,gBACrBpf,EAAOyb,QAAQyI,EAAYE,GACE,OAApBE,GAA4BC,EAAQ,GAAK94C,KAAK+4C,IAAID,GAASpjC,EAAOi+B,gBAC3Epf,EAAOyb,QAAQ6I,GAEftkB,EAAOyb,QAAQyI,QAGd,CAEL,IAAK/iC,EAAO+9B,YAEV,YADAlf,EAAOyb,QAAQzb,EAAO+W,cAGE/W,EAAO2G,YAAe34B,EAAE2K,SAAWqnB,EAAO2G,WAAWC,QAAU54B,EAAE2K,SAAWqnB,EAAO2G,WAAWE,QAExF,SAA1B7G,EAAOgkB,gBACThkB,EAAOyb,QAA6B,OAArB4I,EAA4BA,EAAmBH,EAAYE,GAE9C,SAA1BpkB,EAAOgkB,gBACThkB,EAAOyb,QAA4B,OAApB6I,EAA2BA,EAAkBJ,IAErDl2C,EAAE2K,SAAWqnB,EAAO2G,WAAWC,OACxC5G,EAAOyb,QAAQyI,EAAYE,GAE3BpkB,EAAOyb,QAAQyI,2EChJN,SAASrC,EAAYztC,GAClC,MAAMnH,GAAW,UACX+yB,EAASj0B,KACToR,EAAO6iB,EAAOuX,iBACd,OACJp2B,EAAM,QACNq3B,EACAyC,aAAc7G,EAAG,QACjBnC,GACEjS,EACJ,IAAKiS,EAAS,OACd,IAAK9wB,EAAO89B,eAAuC,UAAtB7qC,EAAMovC,YAAyB,OAC5D,IAAIx1C,EAAIoG,EAER,GADIpG,EAAEy1C,gBAAez1C,EAAIA,EAAEy1C,gBACtBtmC,EAAKq6B,UAIR,YAHIr6B,EAAKk7B,aAAel7B,EAAKy6B,aAC3B5X,EAAOkT,KAAK,oBAAqBllC,IAIrC,MAAMi1C,EAAe9lC,EAAKm7B,QAAQ4K,WAAUC,GAAYA,EAASC,YAAcp1C,EAAEo1C,YAC7EH,GAAgB,IAAG9lC,EAAKm7B,QAAQ2K,GAAgBj1C,GACpD,MAAMy2C,EAActnC,EAAKm7B,QAAQloC,OAAS,EAAI+M,EAAKm7B,QAAQ,GAAKtqC,EAC1D02C,EAAQD,EAAYC,MACpBC,EAAQF,EAAYE,MAC1B,GAAI32C,EAAE42C,wBAGJ,OAFApM,EAAQC,OAASiM,OACjBlM,EAAQE,OAASiM,GAGnB,IAAK3kB,EAAO+S,eAeV,OAdK/kC,EAAE2K,OAAOjC,QAAQyG,EAAK66B,qBACzBhY,EAAOuY,YAAa,QAElBp7B,EAAKq6B,YACP/gB,OAAOqc,OAAO0F,EAAS,CACrBC,OAAQiM,EACRhM,OAAQiM,EACRE,MAAO7kB,EAAOwY,QAAQG,SACtBmM,MAAO9kB,EAAOwY,QAAQI,SACtBD,SAAU+L,EACV9L,SAAU+L,IAEZxnC,EAAKw6B,gBAAiB,YAI1B,GAAIx2B,EAAOu+B,sBAAwBv+B,EAAOslB,KACxC,GAAIzG,EAAO8W,cAET,GAAI6N,EAAQnM,EAAQE,QAAU1Y,EAAOkV,WAAalV,EAAO4Z,gBAAkB+K,EAAQnM,EAAQE,QAAU1Y,EAAOkV,WAAalV,EAAO0Z,eAG9H,OAFAv8B,EAAKq6B,WAAY,OACjBr6B,EAAKs6B,SAAU,QAGZ,GAAIiN,EAAQlM,EAAQC,QAAUzY,EAAOkV,WAAalV,EAAO4Z,gBAAkB8K,EAAQlM,EAAQC,QAAUzY,EAAOkV,WAAalV,EAAO0Z,eACrI,OAGJ,GAAIzsC,EAAS2L,eACP5K,EAAE2K,SAAW1L,EAAS2L,eAAiB5K,EAAE2K,OAAOjC,QAAQyG,EAAK66B,mBAG/D,OAFA76B,EAAKs6B,SAAU,OACfzX,EAAOuY,YAAa,GAOxB,GAHIp7B,EAAKu6B,qBACP1X,EAAOkT,KAAK,YAAallC,GAEvBA,EAAE+2C,eAAiB/2C,EAAE+2C,cAAc30C,OAAS,EAAG,OACnDooC,EAAQG,SAAW+L,EACnBlM,EAAQI,SAAW+L,EACnB,MAAMK,EAAQxM,EAAQG,SAAWH,EAAQC,OACnCwM,EAAQzM,EAAQI,SAAWJ,EAAQE,OACzC,GAAI1Y,EAAO7e,OAAOtC,WAAapT,KAAKy5C,KAAKF,GAAS,EAAIC,GAAS,GAAKjlB,EAAO7e,OAAOtC,UAAW,OAC7F,QAAgC,IAArB1B,EAAKy6B,YAA6B,CAC3C,IAAIoH,EACAhf,EAAO6W,gBAAkB2B,EAAQI,WAAaJ,EAAQE,QAAU1Y,EAAO8W,cAAgB0B,EAAQG,WAAaH,EAAQC,OACtHt7B,EAAKy6B,aAAc,EAGfoN,EAAQA,EAAQC,EAAQA,GAAS,KACnCjG,EAA4D,IAA/CvzC,KAAK05C,MAAM15C,KAAK+4C,IAAIS,GAAQx5C,KAAK+4C,IAAIQ,IAAgBv5C,KAAK25C,GACvEjoC,EAAKy6B,YAAc5X,EAAO6W,eAAiBmI,EAAa79B,EAAO69B,WAAa,GAAKA,EAAa79B,EAAO69B,YAY3G,GARI7hC,EAAKy6B,aACP5X,EAAOkT,KAAK,oBAAqBllC,QAEH,IAArBmP,EAAKk7B,cACVG,EAAQG,WAAaH,EAAQC,QAAUD,EAAQI,WAAaJ,EAAQE,SACtEv7B,EAAKk7B,aAAc,IAGnBl7B,EAAKy6B,aAAe5X,EAAOsH,MAAQtH,EAAO7e,OAAOmmB,MAAQtH,EAAO7e,OAAOmmB,KAAK2K,SAAW90B,EAAKm7B,QAAQloC,OAAS,EAE/G,YADA+M,EAAKq6B,WAAY,GAGnB,IAAKr6B,EAAKk7B,YACR,OAEFrY,EAAOuY,YAAa,GACfp3B,EAAOolB,SAAWv4B,EAAE0J,YACvB1J,EAAEyD,iBAEA0P,EAAOo+B,2BAA6Bp+B,EAAO+8B,QAC7ClwC,EAAEk0C,kBAEJ,IAAIrJ,EAAO7Y,EAAO6W,eAAiBmO,EAAQC,EACvCI,EAAcrlB,EAAO6W,eAAiB2B,EAAQG,SAAWH,EAAQ8M,UAAY9M,EAAQI,SAAWJ,EAAQ+M,UACxGpkC,EAAO28B,iBACTjF,EAAOptC,KAAK+4C,IAAI3L,IAASzE,EAAM,GAAK,GACpCiR,EAAc55C,KAAK+4C,IAAIa,IAAgBjR,EAAM,GAAK,IAEpDoE,EAAQK,KAAOA,EACfA,GAAQ13B,EAAO49B,WACX3K,IACFyE,GAAQA,EACRwM,GAAeA,GAEjB,MAAMG,EAAuBxlB,EAAOylB,iBACpCzlB,EAAOgkB,eAAiBnL,EAAO,EAAI,OAAS,OAC5C7Y,EAAOylB,iBAAmBJ,EAAc,EAAI,OAAS,OACrD,MAAMK,EAAS1lB,EAAO7e,OAAOslB,OAAStlB,EAAOolB,QAC7C,IAAKppB,EAAKs6B,QAAS,CAQjB,GAPIiO,GACF1lB,EAAO2lB,QAAQ,CACbrf,UAAWtG,EAAOgkB,iBAGtB7mC,EAAK26B,eAAiB9X,EAAO4lB,eAC7B5lB,EAAO6lB,cAAc,GACjB7lB,EAAOoX,UAAW,CACpB,MAAMt5B,EAAM,IAAInJ,OAAO6C,YAAY,gBAAiB,CAClDC,SAAS,EACTC,YAAY,IAEdsoB,EAAOqc,UAAUxkC,cAAciG,GAEjCX,EAAKi7B,qBAAsB,GAEvBj3B,EAAOk0B,aAAyC,IAA1BrV,EAAOgT,iBAAqD,IAA1BhT,EAAOiT,gBACjEjT,EAAOuZ,eAAc,GAEvBvZ,EAAOkT,KAAK,kBAAmBllC,GAEjC,IAAI83C,EACA3oC,EAAKs6B,SAAW+N,IAAyBxlB,EAAOylB,kBAAoBC,GAAUj6C,KAAK+4C,IAAI3L,IAAS,IAElG7Y,EAAO2lB,QAAQ,CACbrf,UAAWtG,EAAOgkB,eAClBjJ,cAAc,IAEhB+K,GAAY,GAEd9lB,EAAOkT,KAAK,aAAcllC,GAC1BmP,EAAKs6B,SAAU,EACft6B,EAAK06B,iBAAmBgB,EAAO17B,EAAK26B,eACpC,IAAIiO,GAAsB,EACtBlG,EAAkB1+B,EAAO0+B,gBAiD7B,GAhDI1+B,EAAOu+B,sBACTG,EAAkB,GAEhBhH,EAAO,GACL6M,IAAWI,GAAa3oC,EAAK06B,kBAAoB12B,EAAOimB,eAAiBpH,EAAO0Z,eAAiB1Z,EAAO+T,KAAO,EAAI/T,EAAO0Z,iBAC5H1Z,EAAO2lB,QAAQ,CACbrf,UAAW,OACXyU,cAAc,EACdiL,iBAAkB,IAGlB7oC,EAAK06B,iBAAmB7X,EAAO0Z,iBACjCqM,GAAsB,EAClB5kC,EAAOy+B,aACTziC,EAAK06B,iBAAmB7X,EAAO0Z,eAAiB,IAAM1Z,EAAO0Z,eAAiBv8B,EAAK26B,eAAiBe,IAASgH,KAGxGhH,EAAO,IACZ6M,IAAWI,GAAa3oC,EAAK06B,kBAAoB12B,EAAOimB,eAAiBpH,EAAO4Z,eAAiB5Z,EAAO+T,KAAO,EAAI/T,EAAO4Z,iBAC5H5Z,EAAO2lB,QAAQ,CACbrf,UAAW,OACXyU,cAAc,EACdiL,iBAAkBhmB,EAAO2T,OAAOvjC,QAAmC,SAAzB+Q,EAAOqlB,cAA2BxG,EAAOua,uBAAyB9uC,KAAKw6C,KAAK/wC,WAAWiM,EAAOqlB,cAAe,QAGvJrpB,EAAK06B,iBAAmB7X,EAAO4Z,iBACjCmM,GAAsB,EAClB5kC,EAAOy+B,aACTziC,EAAK06B,iBAAmB7X,EAAO4Z,eAAiB,GAAK5Z,EAAO4Z,eAAiBz8B,EAAK26B,eAAiBe,IAASgH,KAI9GkG,IACF/3C,EAAE42C,yBAA0B,IAIzB5kB,EAAOgT,gBAA4C,SAA1BhT,EAAOgkB,gBAA6B7mC,EAAK06B,iBAAmB16B,EAAK26B,iBAC7F36B,EAAK06B,iBAAmB16B,EAAK26B,iBAE1B9X,EAAOiT,gBAA4C,SAA1BjT,EAAOgkB,gBAA6B7mC,EAAK06B,iBAAmB16B,EAAK26B,iBAC7F36B,EAAK06B,iBAAmB16B,EAAK26B,gBAE1B9X,EAAOiT,gBAAmBjT,EAAOgT,iBACpC71B,EAAK06B,iBAAmB16B,EAAK26B,gBAI3B32B,EAAOtC,UAAY,EAAG,CACxB,KAAIpT,KAAK+4C,IAAI3L,GAAQ13B,EAAOtC,WAAa1B,EAAK46B,oBAW5C,YADA56B,EAAK06B,iBAAmB16B,EAAK26B,gBAT7B,IAAK36B,EAAK46B,mBAMR,OALA56B,EAAK46B,oBAAqB,EAC1BS,EAAQC,OAASD,EAAQG,SACzBH,EAAQE,OAASF,EAAQI,SACzBz7B,EAAK06B,iBAAmB16B,EAAK26B,oBAC7BU,EAAQK,KAAO7Y,EAAO6W,eAAiB2B,EAAQG,SAAWH,EAAQC,OAASD,EAAQI,SAAWJ,EAAQE,QAQvGv3B,EAAOm+B,eAAgBn+B,EAAOolB,WAG/BplB,EAAOuzB,UAAYvzB,EAAOuzB,SAASzC,SAAWjS,EAAO0U,UAAYvzB,EAAO2zB,uBAC1E9U,EAAO8Z,oBACP9Z,EAAO+Z,uBAEL54B,EAAOuzB,UAAYvzB,EAAOuzB,SAASzC,SAAWjS,EAAO0U,UACvD1U,EAAO0U,SAASmN,cAGlB7hB,EAAOsb,eAAen+B,EAAK06B,kBAE3B7X,EAAO+a,aAAa59B,EAAK06B,0FC/NZ,SAAS8J,EAAavtC,GACnC,MAAM4rB,EAASj0B,KACTkB,GAAW,UACX0H,GAAS,UACTwI,EAAO6iB,EAAOuX,gBACpBp6B,EAAKm7B,QAAQ/nC,KAAK6D,GAClB,MAAM,OACJ+M,EAAM,QACNq3B,EAAO,QACPvG,GACEjS,EACJ,IAAKiS,EAAS,OACd,IAAK9wB,EAAO89B,eAAuC,UAAtB7qC,EAAMovC,YAAyB,OAC5D,GAAIxjB,EAAOoX,WAAaj2B,EAAOg9B,+BAC7B,QAEGne,EAAOoX,WAAaj2B,EAAOolB,SAAWplB,EAAOslB,MAChDzG,EAAO2lB,UAET,IAAI33C,EAAIoG,EACJpG,EAAEy1C,gBAAez1C,EAAIA,EAAEy1C,eAC3B,IAAIyC,EAAWl4C,EAAE2K,OACjB,GAAiC,YAA7BwI,EAAO48B,oBACJ/d,EAAOqc,UAAUniC,SAASgsC,GAAW,OAE5C,GAAI,UAAWl4C,GAAiB,IAAZA,EAAEm4C,MAAa,OACnC,GAAI,WAAYn4C,GAAKA,EAAEyY,OAAS,EAAG,OACnC,GAAItJ,EAAKq6B,WAAar6B,EAAKs6B,QAAS,OAGpC,MAAM2O,IAAyBjlC,EAAOm/B,gBAA4C,KAA1Bn/B,EAAOm/B,eAEzD+F,EAAYjyC,EAAM0vC,aAAe1vC,EAAM0vC,eAAiB1vC,EAAMyvC,KAChEuC,GAAwBp4C,EAAE2K,QAAU3K,EAAE2K,OAAO2jC,YAAc+J,IAC7DH,EAAWG,EAAU,IAEvB,MAAM9F,EAAoBp/B,EAAOo/B,kBAAoBp/B,EAAOo/B,kBAAoB,IAAIp/B,EAAOm/B,iBACrFgG,KAAoBt4C,EAAE2K,SAAU3K,EAAE2K,OAAO2jC,YAG/C,GAAIn7B,EAAOk/B,YAAciG,EApD3B,SAAwBza,EAAU6E,EAAO3kC,MAUvC,OATA,SAASw6C,EAAcj3C,GACrB,IAAKA,GAAMA,KAAO,WAAiBA,KAAO,UAAa,OAAO,KAC1DA,EAAGk3C,eAAcl3C,EAAKA,EAAGk3C,cAC7B,MAAMC,EAAQn3C,EAAG6H,QAAQ00B,GACzB,OAAK4a,GAAUn3C,EAAGo3C,YAGXD,GAASF,EAAcj3C,EAAGo3C,cAAclX,MAFtC,KAIJ+W,CAAc7V,GA0CqBiW,CAAepG,EAAmB2F,GAAYA,EAAS/uC,QAAQopC,IAEvG,YADAvgB,EAAOuY,YAAa,GAGtB,GAAIp3B,EAAOi/B,eACJ8F,EAAS/uC,QAAQgK,EAAOi/B,cAAe,OAE9C5H,EAAQG,SAAW3qC,EAAE02C,MACrBlM,EAAQI,SAAW5qC,EAAE22C,MACrB,MAAMlM,EAASD,EAAQG,SACjBD,EAASF,EAAQI,SAIjBwF,EAAqBj9B,EAAOi9B,oBAAsBj9B,EAAOylC,sBACzDvI,EAAqBl9B,EAAOk9B,oBAAsBl9B,EAAO0lC,sBAC/D,GAAIzI,IAAuB3F,GAAU4F,GAAsB5F,GAAU9jC,EAAOszB,WAAaoW,GAAqB,CAC5G,GAA2B,YAAvBD,EAGF,OAFAhqC,EAAM3C,iBAKVglB,OAAOqc,OAAO31B,EAAM,CAClBq6B,WAAW,EACXC,SAAS,EACTC,qBAAqB,EACrBE,iBAAa5sC,EACbqtC,iBAAartC,IAEfwtC,EAAQC,OAASA,EACjBD,EAAQE,OAASA,EACjBv7B,EAAKw6B,gBAAiB,UACtB3X,EAAOuY,YAAa,EACpBvY,EAAOqb,aACPrb,EAAOgkB,oBAAiBh5C,EACpBmW,EAAOtC,UAAY,IAAG1B,EAAK46B,oBAAqB,GACpD,IAAItmC,GAAiB,EACjBy0C,EAASxvC,QAAQyG,EAAK66B,qBACxBvmC,GAAiB,EACS,WAAtBy0C,EAAShX,WACX/xB,EAAKq6B,WAAY,IAGjBvqC,EAAS2L,eAAiB3L,EAAS2L,cAAclC,QAAQyG,EAAK66B,oBAAsB/qC,EAAS2L,gBAAkBstC,GACjHj5C,EAAS2L,cAAcq2B,OAEzB,MAAM6X,EAAuBr1C,GAAkBuuB,EAAO+S,gBAAkB5xB,EAAOq+B,0BAC1Er+B,EAAOs+B,gCAAiCqH,GAA0BZ,EAASa,mBAC9E/4C,EAAEyD,iBAEA0P,EAAOuzB,UAAYvzB,EAAOuzB,SAASzC,SAAWjS,EAAO0U,UAAY1U,EAAOoX,YAAcj2B,EAAOolB,SAC/FvG,EAAO0U,SAASiN,eAElB3hB,EAAOkT,KAAK,aAAcllC,0EC5G5B,SACEurC,cAAa,IACbC,gBAAe,kCCJF,SAASD,EAAcyN,GACpC,MAAMhnB,EAASj0B,KACf,IAAKi0B,EAAO7e,OAAO89B,eAAiBjf,EAAO7e,OAAOu6B,eAAiB1b,EAAOuT,UAAYvT,EAAO7e,OAAOolB,QAAS,OAC7G,MAAMj3B,EAAyC,cAApC0wB,EAAO7e,OAAO48B,kBAAoC/d,EAAO1wB,GAAK0wB,EAAOqc,UAC5Erc,EAAOkc,YACTlc,EAAOinB,qBAAsB,GAE/B33C,EAAGwM,MAAMorC,OAAS,OAClB53C,EAAGwM,MAAMorC,OAASF,EAAS,WAAa,OACpChnB,EAAOkc,WACT7L,uBAAsB,KACpBrQ,EAAOinB,qBAAsB,mDCXpB,SAASzN,IACtB,MAAMxZ,EAASj0B,KACXi0B,EAAO7e,OAAOu6B,eAAiB1b,EAAOuT,UAAYvT,EAAO7e,OAAOolB,UAGhEvG,EAAOkc,YACTlc,EAAOinB,qBAAsB,GAE/BjnB,EAA2C,cAApCA,EAAO7e,OAAO48B,kBAAoC,KAAO,aAAajiC,MAAMorC,OAAS,GACxFlnB,EAAOkc,WACT7L,uBAAsB,KACpBrQ,EAAOinB,qBAAsB,uGCRnC,SACE7T,WAAU,IACVuS,QAAO,IACPxS,YAAW,iECLE,SAASC,EAAW+T,GACjC,MAAMnnB,EAASj0B,MACT,OACJoV,EAAM,SACN+3B,GACElZ,GACC7e,EAAOslB,MAAQzG,EAAOwb,SAAWxb,EAAO7e,OAAOq6B,QAAQvJ,WAC7C,QAAgBiH,EAAU,IAAI/3B,EAAOg4B,4BAC7C9pC,SAAQ,CAACC,EAAIwJ,KAClBxJ,EAAG+H,aAAa,0BAA2ByB,MAE7CknB,EAAO2lB,QAAQ,CACbwB,eAAAA,EACA7gB,UAAWnlB,EAAOimB,oBAAiBp8B,EAAY,wCCdpC,SAASmoC,IACtB,MAAMnT,EAASj0B,MACT,OACJoV,EAAM,SACN+3B,GACElZ,EACJ,IAAK7e,EAAOslB,MAAQzG,EAAOwb,SAAWxb,EAAO7e,OAAOq6B,QAAQvJ,QAAS,OACrEjS,EAAOsZ,eACP,MAAM8N,EAAiB,GACvBpnB,EAAO2T,OAAOtkC,SAAQ4pC,IACpB,MAAMngC,OAA4C,IAA7BmgC,EAAQoO,iBAAqF,EAAlDpO,EAAQjpC,aAAa,2BAAiCipC,EAAQoO,iBAC9HD,EAAetuC,GAASmgC,KAE1BjZ,EAAO2T,OAAOtkC,SAAQ4pC,IACpBA,EAAQ3hC,gBAAgB,8BAE1B8vC,EAAe/3C,SAAQ4pC,IACrBC,EAASllC,OAAOilC,MAElBjZ,EAAOsZ,eACPtZ,EAAOyb,QAAQzb,EAAOwR,UAAW,iDCpBpB,SAASmU,GAAQ,eAC9BwB,EAAc,QACd1L,GAAU,EAAI,UACdnV,EAAS,aACTyU,EAAY,iBACZiL,EAAgB,aAChBsB,EAAY,aACZC,GACE,IACF,MAAMvnB,EAASj0B,KACf,IAAKi0B,EAAO7e,OAAOslB,KAAM,OACzBzG,EAAOkT,KAAK,iBACZ,MAAM,OACJS,EAAM,eACNV,EAAc,eACdD,EAAc,SACdkG,EAAQ,OACR/3B,GACE6e,EAGJ,GAFAA,EAAOiT,gBAAiB,EACxBjT,EAAOgT,gBAAiB,EACpBhT,EAAOwb,SAAWr6B,EAAOq6B,QAAQvJ,QAanC,OAZIwJ,IACGt6B,EAAOimB,gBAAuC,IAArBpH,EAAOwnB,UAE1BrmC,EAAOimB,gBAAkBpH,EAAOwnB,UAAYrmC,EAAOqlB,cAC5DxG,EAAOyb,QAAQzb,EAAOwb,QAAQ7H,OAAOvjC,OAAS4vB,EAAOwnB,UAAW,GAAG,GAAO,GACjExnB,EAAOwnB,YAAcxnB,EAAOgU,SAAS5jC,OAAS,GACvD4vB,EAAOyb,QAAQzb,EAAOwb,QAAQkB,aAAc,GAAG,GAAO,GAJtD1c,EAAOyb,QAAQzb,EAAOwb,QAAQ7H,OAAOvjC,OAAQ,GAAG,GAAO,IAO3D4vB,EAAOiT,eAAiBA,EACxBjT,EAAOgT,eAAiBA,OACxBhT,EAAOkT,KAAK,WAGd,MAAM1M,EAAyC,SAAzBrlB,EAAOqlB,cAA2BxG,EAAOua,uBAAyB9uC,KAAKw6C,KAAK/wC,WAAWiM,EAAOqlB,cAAe,KACnI,IAAIyZ,EAAe9+B,EAAO8+B,cAAgBzZ,EACtCyZ,EAAe9+B,EAAOqqB,gBAAmB,IAC3CyU,GAAgB9+B,EAAOqqB,eAAiByU,EAAe9+B,EAAOqqB,gBAEhExL,EAAOigB,aAAeA,EACtB,MAAMwH,EAAuB,GACvBC,EAAsB,GAC5B,IAAI3Q,EAAc/W,EAAO+W,iBACO,IAArBiP,EACTA,EAAmBhmB,EAAOgZ,cAAchZ,EAAO2T,OAAOjsB,QAAOpY,GAAMA,EAAGoK,UAAUQ,SAASiH,EAAO+7B,oBAAmB,IAEnHnG,EAAciP,EAEhB,MAAM2B,EAAuB,SAAdrhB,IAAyBA,EAClCshB,EAAuB,SAAdthB,IAAyBA,EACxC,IAAIuhB,EAAkB,EAClBC,EAAiB,EAErB,GAAI9B,EAAmB/F,EAAc,CACnC4H,EAAkBp8C,KAAKO,IAAIi0C,EAAe+F,EAAkB7kC,EAAOqqB,gBACnE,IAAK,IAAIr7B,EAAI,EAAGA,EAAI8vC,EAAe+F,EAAkB71C,GAAK,EAAG,CAC3D,MAAM2I,EAAQ3I,EAAI1E,KAAKy2B,MAAM/xB,EAAIwjC,EAAOvjC,QAAUujC,EAAOvjC,OACzDq3C,EAAqBl3C,KAAKojC,EAAOvjC,OAAS0I,EAAQ,SAE/C,GAAIktC,EAAyChmB,EAAO2T,OAAOvjC,OAAwB,EAAf6vC,EAAkB,CAC3F6H,EAAiBr8C,KAAKO,IAAIg6C,GAAoBhmB,EAAO2T,OAAOvjC,OAAwB,EAAf6vC,GAAmB9+B,EAAOqqB,gBAC/F,IAAK,IAAIr7B,EAAI,EAAGA,EAAI23C,EAAgB33C,GAAK,EAAG,CAC1C,MAAM2I,EAAQ3I,EAAI1E,KAAKy2B,MAAM/xB,EAAIwjC,EAAOvjC,QAAUujC,EAAOvjC,OACzDs3C,EAAoBn3C,KAAKuI,IAwB7B,GArBI8uC,GACFH,EAAqBp4C,SAAQyJ,IAC3BknB,EAAO2T,OAAO76B,GAAOivC,mBAAoB,EACzC7O,EAAS8O,QAAQhoB,EAAO2T,OAAO76B,IAC/BknB,EAAO2T,OAAO76B,GAAOivC,mBAAoB,KAGzCJ,GACFD,EAAoBr4C,SAAQyJ,IAC1BknB,EAAO2T,OAAO76B,GAAOivC,mBAAoB,EACzC7O,EAASllC,OAAOgsB,EAAO2T,OAAO76B,IAC9BknB,EAAO2T,OAAO76B,GAAOivC,mBAAoB,KAG7C/nB,EAAOsZ,eACsB,SAAzBn4B,EAAOqlB,eACTxG,EAAOqT,eAELlyB,EAAO2zB,qBACT9U,EAAOioB,qBAELxM,EACF,GAAIgM,EAAqBr3C,OAAS,GAAKw3C,EACrC,QAA8B,IAAnBT,EAAgC,CACzC,MAAMe,EAAwBloB,EAAO6T,WAAWkD,GAE1C8B,EADoB7Y,EAAO6T,WAAWkD,EAAc8Q,GACzBK,EAC7BX,EACFvnB,EAAO+a,aAAa/a,EAAOkV,UAAY2D,IAEvC7Y,EAAOyb,QAAQ1E,EAAc8Q,EAAiB,GAAG,GAAO,GACpD9M,IACF/a,EAAOwY,QAAQxY,EAAO6W,eAAiB,SAAW,WAAagC,SAI/DkC,GACF/a,EAAOwiB,YAAY2E,EAAgB,GAAG,GAAO,QAG5C,GAAIO,EAAoBt3C,OAAS,GAAKu3C,EAC3C,QAA8B,IAAnBR,EAAgC,CACzC,MAAMe,EAAwBloB,EAAO6T,WAAWkD,GAE1C8B,EADoB7Y,EAAO6T,WAAWkD,EAAc+Q,GACzBI,EAC7BX,EACFvnB,EAAO+a,aAAa/a,EAAOkV,UAAY2D,IAEvC7Y,EAAOyb,QAAQ1E,EAAc+Q,EAAgB,GAAG,GAAO,GACnD/M,IACF/a,EAAOwY,QAAQxY,EAAO6W,eAAiB,SAAW,WAAagC,SAInE7Y,EAAOwiB,YAAY2E,EAAgB,GAAG,GAAO,GAMnD,GAFAnnB,EAAOiT,eAAiBA,EACxBjT,EAAOgT,eAAiBA,EACpBhT,EAAOmoB,YAAcnoB,EAAOmoB,WAAWC,UAAYd,EAAc,CACnE,MAAMe,EAAa,CACjBlB,eAAAA,EACA1L,SAAS,EACTnV,UAAAA,EACAyU,aAAAA,EACAiL,iBAAAA,EACAsB,cAAc,GAEZnvC,MAAM+9B,QAAQlW,EAAOmoB,WAAWC,SAClCpoB,EAAOmoB,WAAWC,QAAQ/4C,SAAQoJ,KAC3BA,EAAE2hC,WAAa3hC,EAAE0I,OAAOslB,MAAMhuB,EAAEktC,QAAQ0C,MAEtCroB,EAAOmoB,WAAWC,mBAAmBpoB,EAAO8O,aAAe9O,EAAOmoB,WAAWC,QAAQjnC,OAAOslB,MACrGzG,EAAOmoB,WAAWC,QAAQzC,QAAQ0C,GAGtCroB,EAAOkT,KAAK,wFChJC,SAASoV,EAAmBnnC,EAAQg1B,GACjD,OAAO,SAAsBtuB,EAAM,IACjC,MAAM0gC,EAAkB9xB,OAAOC,KAAK7O,GAAK,GACnC2gC,EAAe3gC,EAAI0gC,GACG,iBAAjBC,GAA8C,OAAjBA,GAIpC,CAAC,aAAc,aAAc,aAAan7C,QAAQk7C,IAAoB,IAAiC,IAA5BpnC,EAAOonC,KACpFpnC,EAAOonC,GAAmB,CACxBE,MAAM,IAGJF,KAAmBpnC,GAAU,YAAaqnC,IAIhB,IAA5BrnC,EAAOonC,KACTpnC,EAAOonC,GAAmB,CACxBtW,SAAS,IAG0B,iBAA5B9wB,EAAOonC,IAAmC,YAAapnC,EAAOonC,KACvEpnC,EAAOonC,GAAiBtW,SAAU,GAE/B9wB,EAAOonC,KAAkBpnC,EAAOonC,GAAmB,CACtDtW,SAAS,KAEX,QAAOkE,EAAkBtuB,KAdvB,QAAOsuB,EAAkBtuB,KATzB,QAAOsuB,EAAkBtuB,2ECJhB,SAAS6gC,GAAS,OAC/B1oB,EAAM,aACNqW,EAAY,GACZ3jB,EAAE,KACFwgB,IAEA,MAAMyV,EAAY,GACZh0C,GAAS,UACTi0C,EAAS,CAACjwC,EAAQlP,EAAU,MAChC,MACM2U,EAAW,IADIzJ,EAAOk0C,kBAAoBl0C,EAAOm0C,yBACrBC,IAIhC,GAAI/oB,EAAOinB,oBAAqB,OAChC,GAAyB,IAArB8B,EAAU34C,OAEZ,YADA8iC,EAAK,iBAAkB6V,EAAU,IAGnC,MAAMC,EAAiB,WACrB9V,EAAK,iBAAkB6V,EAAU,KAE/Bp0C,EAAO07B,sBACT17B,EAAO07B,sBAAsB2Y,GAE7Br0C,EAAOxJ,WAAW69C,EAAgB,MAGtC5qC,EAASW,QAAQpG,EAAQ,CACvB4d,gBAA0C,IAAvB9sB,EAAQ8sB,YAAoC9sB,EAAQ8sB,WACvE0yB,eAAwC,IAAtBx/C,EAAQw/C,WAAmCx/C,EAAQw/C,UACrEC,mBAAgD,IAA1Bz/C,EAAQy/C,eAAuCz/C,EAAQy/C,gBAE/EP,EAAUp4C,KAAK6N,IA0BjBi4B,EAAa,CACXj4B,UAAU,EACV+qC,gBAAgB,EAChBC,sBAAsB,IAExB12B,EAAG,QA7BU,KACX,GAAKsN,EAAO7e,OAAO/C,SAAnB,CACA,GAAI4hB,EAAO7e,OAAOgoC,eAAgB,CAChC,MAAME,GAAmB,QAAerpB,EAAO1wB,IAC/C,IAAK,IAAIa,EAAI,EAAGA,EAAIk5C,EAAiBj5C,OAAQD,GAAK,EAChDy4C,EAAOS,EAAiBl5C,IAI5By4C,EAAO5oB,EAAO1wB,GAAI,CAChB25C,UAAWjpB,EAAO7e,OAAOioC,uBAI3BR,EAAO5oB,EAAOqc,UAAW,CACvB9lB,YAAY,QAehB7D,EAAG,WAZa,KACdi2B,EAAUt5C,SAAQ+O,IAChBA,EAASkrC,gBAEXX,EAAUzH,OAAO,EAAGyH,EAAUv4C,wEC1DnB,SAASm5C,GAAO,OAC7BvpB,EAAM,GACNtN,EAAE,KACFwgB,IAEA,MAAMv+B,GAAS,UACf,IAAIyJ,EAAW,KACXorC,EAAiB,KACrB,MAAMC,EAAgB,KACfzpB,IAAUA,EAAOoa,WAAcpa,EAAOyR,cAC3CyB,EAAK,gBACLA,EAAK,YAqCDwW,EAA2B,KAC1B1pB,IAAUA,EAAOoa,WAAcpa,EAAOyR,aAC3CyB,EAAK,sBAEPxgB,EAAG,QAAQ,KACLsN,EAAO7e,OAAO88B,qBAAmD,IAA1BtpC,EAAOg1C,eAvC7C3pB,IAAUA,EAAOoa,WAAcpa,EAAOyR,cAC3CrzB,EAAW,IAAIurC,gBAAerrC,IAC5BkrC,EAAiB70C,EAAO07B,uBAAsB,KAC5C,MAAM,MACJ92B,EAAK,OACL2f,GACE8G,EACJ,IAAI4pB,EAAWrwC,EACXswC,EAAY3wB,EAChB5a,EAAQjP,SAAQ,EACdy6C,eAAAA,EACAC,YAAAA,EACApxC,OAAAA,MAEIA,GAAUA,IAAWqnB,EAAO1wB,KAChCs6C,EAAWG,EAAcA,EAAYxwC,OAASuwC,EAAe,IAAMA,GAAgBE,WACnFH,EAAYE,EAAcA,EAAY7wB,QAAU4wB,EAAe,IAAMA,GAAgBG,cAEnFL,IAAarwC,GAASswC,IAAc3wB,GACtCuwB,UAINrrC,EAASW,QAAQihB,EAAO1wB,MAoBxBqF,EAAOtE,iBAAiB,SAAUo5C,GAClC90C,EAAOtE,iBAAiB,oBAAqBq5C,OAE/Ch3B,EAAG,WAAW,KApBR82B,GACF70C,EAAO27B,qBAAqBkZ,GAE1BprC,GAAYA,EAASO,WAAaqhB,EAAO1wB,KAC3C8O,EAASO,UAAUqhB,EAAO1wB,IAC1B8O,EAAW,MAiBbzJ,EAAO6D,oBAAoB,SAAUixC,GACrC90C,EAAO6D,oBAAoB,oBAAqBkxC,+HCzDpD,SACEjO,QAAO,IACP+G,YAAW,IACX0H,UAAS,IACTC,UAAS,IACTC,WAAU,IACVC,eAAc,IACdrK,oBAAmB,kCCbN,SAASkK,EAAUxjB,EAAQ36B,KAAKoV,OAAOulB,MAAO4jB,GAAe,EAAMC,GAChF,MAAMvqB,EAASj0B,MACT,QACJkmC,EAAO,OACP9wB,EAAM,UACNi2B,GACEpX,EACJ,IAAKiS,EAAS,OAAOjS,EACrB,IAAIwqB,EAAWrpC,EAAOqqB,eACO,SAAzBrqB,EAAOqlB,eAAsD,IAA1BrlB,EAAOqqB,gBAAwBrqB,EAAOu9B,qBAC3E8L,EAAW/+C,KAAKO,IAAIg0B,EAAOua,qBAAqB,WAAW,GAAO,IAEpE,MAAM6J,EAAYpkB,EAAO+W,YAAc51B,EAAOs9B,mBAAqB,EAAI+L,EACjElI,EAAYtiB,EAAOwb,SAAWr6B,EAAOq6B,QAAQvJ,QACnD,GAAI9wB,EAAOslB,KAAM,CACf,GAAI2Q,IAAckL,GAAanhC,EAAO++B,oBAAqB,OAAO,EAClElgB,EAAO2lB,QAAQ,CACbrf,UAAW,SAGbtG,EAAOyqB,YAAczqB,EAAOqc,UAAUqO,WAExC,OAAIvpC,EAAOg/B,QAAUngB,EAAOiU,MACnBjU,EAAOyb,QAAQ,EAAG/U,EAAO4jB,EAAcC,GAEzCvqB,EAAOyb,QAAQzb,EAAO+W,YAAcqN,EAAW1d,EAAO4jB,EAAcC,iDCzB9D,SAASJ,EAAUzjB,EAAQ36B,KAAKoV,OAAOulB,MAAO4jB,GAAe,EAAMC,GAChF,MAAMvqB,EAASj0B,MACT,OACJoV,EAAM,SACN6yB,EAAQ,WACRH,EAAU,aACVoH,EAAY,QACZhJ,EAAO,UACPmF,GACEpX,EACJ,IAAKiS,EAAS,OAAOjS,EACrB,MAAMsiB,EAAYtiB,EAAOwb,SAAWr6B,EAAOq6B,QAAQvJ,QACnD,GAAI9wB,EAAOslB,KAAM,CACf,GAAI2Q,IAAckL,GAAanhC,EAAO++B,oBAAqB,OAAO,EAClElgB,EAAO2lB,QAAQ,CACbrf,UAAW,SAGbtG,EAAOyqB,YAAczqB,EAAOqc,UAAUqO,WAGxC,SAASC,EAAUC,GACjB,OAAIA,EAAM,GAAWn/C,KAAKy2B,MAAMz2B,KAAK+4C,IAAIoG,IAClCn/C,KAAKy2B,MAAM0oB,GAEpB,MAAMC,EAAsBF,EALV1P,EAAejb,EAAOkV,WAAalV,EAAOkV,WAMtD4V,EAAqB9W,EAAS3sB,KAAIujC,GAAOD,EAAUC,KACzD,IAAIG,EAAW/W,EAAS8W,EAAmBz9C,QAAQw9C,GAAuB,GAC1E,QAAwB,IAAbE,GAA4B5pC,EAAOolB,QAAS,CACrD,IAAIykB,EACJhX,EAAS3kC,SAAQ,CAAC47C,EAAMzD,KAClBqD,GAAuBI,IAEzBD,EAAgBxD,WAGS,IAAlBwD,IACTD,EAAW/W,EAASgX,EAAgB,EAAIA,EAAgB,EAAIA,IAGhE,IAAIE,EAAY,EAShB,QARwB,IAAbH,IACTG,EAAYrX,EAAWxmC,QAAQ09C,GAC3BG,EAAY,IAAGA,EAAYlrB,EAAO+W,YAAc,GACvB,SAAzB51B,EAAOqlB,eAAsD,IAA1BrlB,EAAOqqB,gBAAwBrqB,EAAOu9B,qBAC3EwM,EAAYA,EAAYlrB,EAAOua,qBAAqB,YAAY,GAAQ,EACxE2Q,EAAYz/C,KAAKO,IAAIk/C,EAAW,KAGhC/pC,EAAOg/B,QAAUngB,EAAOgX,YAAa,CACvC,MAAMmU,EAAYnrB,EAAO7e,OAAOq6B,SAAWxb,EAAO7e,OAAOq6B,QAAQvJ,SAAWjS,EAAOwb,QAAUxb,EAAOwb,QAAQ7H,OAAOvjC,OAAS,EAAI4vB,EAAO2T,OAAOvjC,OAAS,EACvJ,OAAO4vB,EAAOyb,QAAQ0P,EAAWzkB,EAAO4jB,EAAcC,GAExD,OAAOvqB,EAAOyb,QAAQyP,EAAWxkB,EAAO4jB,EAAcC,iDCrDzC,SAASH,EAAW1jB,EAAQ36B,KAAKoV,OAAOulB,MAAO4jB,GAAe,EAAMC,GAEjF,OADex+C,KACD0vC,QADC1vC,KACcgrC,YAAarQ,EAAO4jB,EAAcC,gFCFlD,SAAS9O,EAAQ3iC,EAAQ,EAAG4tB,EAAQ36B,KAAKoV,OAAOulB,MAAO4jB,GAAe,EAAMC,EAAUa,GAC9E,iBAAVtyC,IACTA,EAAQtO,SAASsO,EAAO,KAE1B,MAAMknB,EAASj0B,KACf,IAAIs/C,EAAavyC,EACbuyC,EAAa,IAAGA,EAAa,GACjC,MAAM,OACJlqC,EAAM,SACN6yB,EAAQ,WACRH,EAAU,cACVyX,EAAa,YACbvU,EACAkE,aAAc7G,EAAG,UACjBiI,EAAS,QACTpK,GACEjS,EACJ,GAAIA,EAAOoX,WAAaj2B,EAAOg9B,iCAAmClM,IAAYsY,IAAaa,EACzF,OAAO,EAET,MAAMG,EAAO9/C,KAAKC,IAAIs0B,EAAO7e,OAAOs9B,mBAAoB4M,GACxD,IAAI7D,EAAY+D,EAAO9/C,KAAKy2B,OAAOmpB,EAAaE,GAAQvrB,EAAO7e,OAAOqqB,gBAClEgc,GAAaxT,EAAS5jC,SAAQo3C,EAAYxT,EAAS5jC,OAAS,GAChE,MAAM8kC,GAAalB,EAASwT,GAE5B,GAAIrmC,EAAOy9B,oBACT,IAAK,IAAIzuC,EAAI,EAAGA,EAAI0jC,EAAWzjC,OAAQD,GAAK,EAAG,CAC7C,MAAM06C,GAAuBp/C,KAAKy2B,MAAkB,IAAZgT,GAClCsW,EAAiB//C,KAAKy2B,MAAsB,IAAhB2R,EAAW1jC,IACvCs7C,EAAqBhgD,KAAKy2B,MAA0B,IAApB2R,EAAW1jC,EAAI,SACpB,IAAtB0jC,EAAW1jC,EAAI,GACpB06C,GAAuBW,GAAkBX,EAAsBY,GAAsBA,EAAqBD,GAAkB,EAC9HH,EAAal7C,EACJ06C,GAAuBW,GAAkBX,EAAsBY,IACxEJ,EAAal7C,EAAI,GAEV06C,GAAuBW,IAChCH,EAAal7C,GAKnB,GAAI6vB,EAAOyR,aAAe4Z,IAAetU,EAAa,CACpD,IAAK/W,EAAOgT,iBAAmBoB,EAAMc,EAAYlV,EAAOkV,WAAaA,EAAYlV,EAAO0Z,eAAiBxE,EAAYlV,EAAOkV,WAAaA,EAAYlV,EAAO0Z,gBAC1J,OAAO,EAET,IAAK1Z,EAAOiT,gBAAkBiC,EAAYlV,EAAOkV,WAAaA,EAAYlV,EAAO4Z,iBAC1E7C,GAAe,KAAOsU,EACzB,OAAO,EAUb,IAAI/kB,EAIJ,GAVI+kB,KAAgBC,GAAiB,IAAMhB,GACzCtqB,EAAOkT,KAAK,0BAIdlT,EAAOsb,eAAepG,GAEQ5O,EAA1B+kB,EAAatU,EAAyB,OAAgBsU,EAAatU,EAAyB,OAAwB,QAGpH3C,IAAQc,IAAclV,EAAOkV,YAAcd,GAAOc,IAAclV,EAAOkV,UAczE,OAbAlV,EAAO8Z,kBAAkBuR,GAErBlqC,EAAOwzB,YACT3U,EAAOub,mBAETvb,EAAO+Z,sBACe,UAAlB54B,EAAOq9B,QACTxe,EAAO+a,aAAa7F,GAEJ,UAAd5O,IACFtG,EAAO0rB,gBAAgBpB,EAAchkB,GACrCtG,EAAO2rB,cAAcrB,EAAchkB,KAE9B,EAET,GAAInlB,EAAOolB,QAAS,CAClB,MAAMqlB,EAAM5rB,EAAO6W,eACb//B,EAAIs9B,EAAMc,GAAaA,EAC7B,GAAc,IAAVxO,EAAa,CACf,MAAM4b,EAAYtiB,EAAOwb,SAAWxb,EAAO7e,OAAOq6B,QAAQvJ,QACtDqQ,IACFtiB,EAAOqc,UAAUvgC,MAAM+vC,eAAiB,OACxC7rB,EAAO8rB,mBAAoB,GAEzBxJ,IAActiB,EAAO+rB,2BAA6B/rB,EAAO7e,OAAOs7B,aAAe,GACjFzc,EAAO+rB,2BAA4B,EACnC1b,uBAAsB,KACpBgM,EAAUuP,EAAM,aAAe,aAAe90C,MAGhDulC,EAAUuP,EAAM,aAAe,aAAe90C,EAE5CwrC,GACFjS,uBAAsB,KACpBrQ,EAAOqc,UAAUvgC,MAAM+vC,eAAiB,GACxC7rB,EAAO8rB,mBAAoB,SAG1B,CACL,IAAK9rB,EAAO6V,QAAQmW,aAMlB,OALA,QAAqB,CACnBhsB,OAAAA,EACAisB,eAAgBn1C,EAChBo1C,KAAMN,EAAM,OAAS,SAEhB,EAETvP,EAAU8P,SAAS,CACjB,CAACP,EAAM,OAAS,OAAQ90C,EACxBmuB,SAAU,WAGd,OAAO,EAwBT,OAtBAjF,EAAO6lB,cAAcnf,GACrB1G,EAAO+a,aAAa7F,GACpBlV,EAAO8Z,kBAAkBuR,GACzBrrB,EAAO+Z,sBACP/Z,EAAOkT,KAAK,wBAAyBxM,EAAO6jB,GAC5CvqB,EAAO0rB,gBAAgBpB,EAAchkB,GACvB,IAAVI,EACF1G,EAAO2rB,cAAcrB,EAAchkB,GACzBtG,EAAOoX,YACjBpX,EAAOoX,WAAY,EACdpX,EAAOosB,gCACVpsB,EAAOosB,8BAAgC,SAAuBp+C,GACvDgyB,IAAUA,EAAOoa,WAClBpsC,EAAE2K,SAAW5M,OACjBi0B,EAAOqc,UAAU7jC,oBAAoB,gBAAiBwnB,EAAOosB,+BAC7DpsB,EAAOosB,8BAAgC,YAChCpsB,EAAOosB,8BACdpsB,EAAO2rB,cAAcrB,EAAchkB,MAGvCtG,EAAOqc,UAAUhsC,iBAAiB,gBAAiB2vB,EAAOosB,iCAErD,+DC3IM,SAASpM,IACtB,MAAMhgB,EAASj0B,MACT,OACJoV,EAAM,SACN+3B,GACElZ,EACEwG,EAAyC,SAAzBrlB,EAAOqlB,cAA2BxG,EAAOua,uBAAyBp5B,EAAOqlB,cAC/F,IACIgL,EADA6a,EAAersB,EAAOssB,aAE1B,MAAMC,EAAgBvsB,EAAOkc,UAAY,eAAiB,IAAI/6B,EAAOg4B,aACrE,GAAIh4B,EAAOslB,KAAM,CACf,GAAIzG,EAAOoX,UAAW,OACtB5F,EAAYhnC,SAASw1B,EAAOwsB,aAAax8C,aAAa,2BAA4B,IAC9EmR,EAAOimB,eACLilB,EAAersB,EAAOigB,aAAezZ,EAAgB,GAAK6lB,EAAersB,EAAO2T,OAAOvjC,OAAS4vB,EAAOigB,aAAezZ,EAAgB,GACxIxG,EAAO2lB,UACP0G,EAAersB,EAAOgZ,eAAc,QAAgBE,EAAU,GAAGqT,8BAA0C/a,OAAe,KAC1H,SAAS,KACPxR,EAAOyb,QAAQ4Q,OAGjBrsB,EAAOyb,QAAQ4Q,GAERA,EAAersB,EAAO2T,OAAOvjC,OAASo2B,GAC/CxG,EAAO2lB,UACP0G,EAAersB,EAAOgZ,eAAc,QAAgBE,EAAU,GAAGqT,8BAA0C/a,OAAe,KAC1H,SAAS,KACPxR,EAAOyb,QAAQ4Q,OAGjBrsB,EAAOyb,QAAQ4Q,QAGjBrsB,EAAOyb,QAAQ4Q,iCCjCJ,SAAShC,EAAe3jB,EAAQ36B,KAAKoV,OAAOulB,MAAO4jB,GAAe,EAAMC,EAAU1rC,EAAY,IAC3G,MAAMmhB,EAASj0B,KACf,IAAI+M,EAAQknB,EAAO+W,YACnB,MAAMwU,EAAO9/C,KAAKC,IAAIs0B,EAAO7e,OAAOs9B,mBAAoB3lC,GAClD0uC,EAAY+D,EAAO9/C,KAAKy2B,OAAOppB,EAAQyyC,GAAQvrB,EAAO7e,OAAOqqB,gBAC7D0J,EAAYlV,EAAOib,aAAejb,EAAOkV,WAAalV,EAAOkV,UACnE,GAAIA,GAAalV,EAAOgU,SAASwT,GAAY,CAG3C,MAAMiF,EAAczsB,EAAOgU,SAASwT,GAEhCtS,EAAYuX,GADCzsB,EAAOgU,SAASwT,EAAY,GACHiF,GAAe5tC,IACvD/F,GAASknB,EAAO7e,OAAOqqB,oBAEpB,CAGL,MAAMuf,EAAW/qB,EAAOgU,SAASwT,EAAY,GAEzCtS,EAAY6V,IADI/qB,EAAOgU,SAASwT,GACOuD,GAAYlsC,IACrD/F,GAASknB,EAAO7e,OAAOqqB,gBAK3B,OAFA1yB,EAAQrN,KAAKO,IAAI8M,EAAO,GACxBA,EAAQrN,KAAKC,IAAIoN,EAAOknB,EAAO6T,WAAWzjC,OAAS,GAC5C4vB,EAAOyb,QAAQ3iC,EAAO4tB,EAAO4jB,EAAcC,iDC1BrC,SAAS/H,EAAY1pC,EAAQ,EAAG4tB,EAAQ36B,KAAKoV,OAAOulB,MAAO4jB,GAAe,EAAMC,GACxE,iBAAVzxC,IAETA,EADsBtO,SAASsO,EAAO,KAGxC,MAAMknB,EAASj0B,KACf,IAAI2gD,EAAW5zC,EASf,OARIknB,EAAO7e,OAAOslB,OACZzG,EAAOwb,SAAWxb,EAAO7e,OAAOq6B,QAAQvJ,QAE1Cya,GAAsB1sB,EAAOwb,QAAQkB,aAErCgQ,EAAW1sB,EAAOqZ,oBAAoBqT,IAGnC1sB,EAAOyb,QAAQiR,EAAUhmB,EAAO4jB,EAAcC,oGCZvD,SACE1E,cAAa,IACb6F,gBAAe,IACfC,cAAa,kCCNA,SAAS9F,EAAc8G,EAAUrF,GAC9C,MAAMtnB,EAASj0B,KACVi0B,EAAO7e,OAAOolB,UACjBvG,EAAOqc,UAAUvgC,MAAM8wC,mBAAqB,GAAGD,OAEjD3sB,EAAOkT,KAAK,gBAAiByZ,EAAUrF,iDCL1B,SAASuF,GAAe,OACrC7sB,EAAM,aACNsqB,EAAY,UACZhkB,EAAS,KACT9zB,IAEA,MAAM,YACJukC,EAAW,cACXuU,GACEtrB,EACJ,IAAI+b,EAAMzV,EAKV,GAJKyV,IAC8BA,EAA7BhF,EAAcuU,EAAqB,OAAgBvU,EAAcuU,EAAqB,OAAkB,SAE9GtrB,EAAOkT,KAAK,aAAa1gC,KACrB83C,GAAgBvT,IAAgBuU,EAAe,CACjD,GAAY,UAARvP,EAEF,YADA/b,EAAOkT,KAAK,uBAAuB1gC,KAGrCwtB,EAAOkT,KAAK,wBAAwB1gC,KACxB,SAARupC,EACF/b,EAAOkT,KAAK,sBAAsB1gC,KAElCwtB,EAAOkT,KAAK,sBAAsB1gC,mFCvBzB,SAASm5C,EAAcrB,GAAe,EAAMhkB,GACzD,MAAMtG,EAASj0B,MACT,OACJoV,GACE6e,EACJA,EAAOoX,WAAY,EACfj2B,EAAOolB,UACXvG,EAAO6lB,cAAc,IACrB,OAAe,CACb7lB,OAAAA,EACAsqB,aAAAA,EACAhkB,UAAAA,EACA9zB,KAAM,sECZK,SAASk5C,EAAgBpB,GAAe,EAAMhkB,GAC3D,MAAMtG,EAASj0B,MACT,OACJoV,GACE6e,EACA7e,EAAOolB,UACPplB,EAAOwzB,YACT3U,EAAOub,oBAET,OAAe,CACbvb,OAAAA,EACAsqB,aAAAA,EACAhkB,UAAAA,EACA9zB,KAAM,wECbK,SAASs6C,EAAmBC,GAAOhhD,KAAK8qC,eAAiB,IAAM,MAC5E,MACM,OACJ11B,EACA85B,aAAc7G,EAAG,UACjBc,EAAS,UACTmH,GALatwC,KAOf,GAAIoV,EAAOo9B,iBACT,OAAOnK,GAAOc,EAAYA,EAE5B,GAAI/zB,EAAOolB,QACT,OAAO2O,EAET,IAAI2C,GAAmB,QAAawE,EAAW0Q,GAG/C,OAFAlV,GAde9rC,KAcYsrC,wBACvBjD,IAAKyD,GAAoBA,GACtBA,GAAoB,qGCb7B,SACE+N,aAAY,IACZ7K,aAAY,IACZrB,aAAY,IACZE,aAAY,IACZC,YAAW,kCCVE,SAASD,IACtB,OAAQ7tC,KAAKioC,SAASjoC,KAAKioC,SAAS5jC,OAAS,iDCDhC,SAASspC,IACtB,OAAQ3tC,KAAKioC,SAAS,gDCDT,SAAS+G,EAAa7F,EAAWoS,GAC9C,MAAMtnB,EAASj0B,MAEbkvC,aAAc7G,EAAG,OACjBjzB,EAAM,UACNk7B,EAAS,SACTnF,GACElX,EACJ,IA0BI8iB,EA1BAx7B,EAAI,EACJ0lC,EAAI,EAEJhtB,EAAO6W,eACTvvB,EAAI8sB,GAAOc,EAAYA,EAEvB8X,EAAI9X,EAEF/zB,EAAO29B,eACTx3B,EAAI7b,KAAKy2B,MAAM5a,GACf0lC,EAAIvhD,KAAKy2B,MAAM8qB,IAEjBhtB,EAAOiX,kBAAoBjX,EAAOkV,UAClClV,EAAOkV,UAAYlV,EAAO6W,eAAiBvvB,EAAI0lC,EAC3C7rC,EAAOolB,QACT8V,EAAUrc,EAAO6W,eAAiB,aAAe,aAAe7W,EAAO6W,gBAAkBvvB,GAAK0lC,EACpF7rC,EAAOo9B,mBACbve,EAAO6W,eACTvvB,GAAK0Y,EAAOqX,wBAEZ2V,GAAKhtB,EAAOqX,wBAEdgF,EAAUvgC,MAAMowB,UAAY,eAAe5kB,QAAQ0lC,aAKrD,MAAMhK,EAAiBhjB,EAAO4Z,eAAiB5Z,EAAO0Z,eAEpDoJ,EADqB,IAAnBE,EACY,GAEC9N,EAAYlV,EAAO0Z,gBAAkBsJ,EAElDF,IAAgB5L,GAClBlX,EAAOsb,eAAepG,GAExBlV,EAAOkT,KAAK,eAAgBlT,EAAOkV,UAAWoS,+EC3CjC,SAASzN,EAAY3E,EAAY,EAAGxO,EAAQ36B,KAAKoV,OAAOulB,MAAO4jB,GAAe,EAAM2C,GAAkB,EAAM1C,GACzH,MAAMvqB,EAASj0B,MACT,OACJoV,EAAM,UACNk7B,GACErc,EACJ,GAAIA,EAAOoX,WAAaj2B,EAAOg9B,+BAC7B,OAAO,EAET,MAAMzE,EAAe1Z,EAAO0Z,eACtBE,EAAe5Z,EAAO4Z,eAC5B,IAAIsB,EAKJ,GAJiDA,EAA7C+R,GAAmB/X,EAAYwE,EAA6BA,EAAsBuT,GAAmB/X,EAAY0E,EAA6BA,EAAiC1E,EAGnLlV,EAAOsb,eAAeJ,GAClB/5B,EAAOolB,QAAS,CAClB,MAAMqlB,EAAM5rB,EAAO6W,eACnB,GAAc,IAAVnQ,EACF2V,EAAUuP,EAAM,aAAe,cAAgB1Q,MAC1C,CACL,IAAKlb,EAAO6V,QAAQmW,aAMlB,OALA,QAAqB,CACnBhsB,OAAAA,EACAisB,gBAAiB/Q,EACjBgR,KAAMN,EAAM,OAAS,SAEhB,EAETvP,EAAU8P,SAAS,CACjB,CAACP,EAAM,OAAS,QAAS1Q,EACzBjW,SAAU,WAGd,OAAO,EAiCT,OA/Bc,IAAVyB,GACF1G,EAAO6lB,cAAc,GACrB7lB,EAAO+a,aAAaG,GAChBoP,IACFtqB,EAAOkT,KAAK,wBAAyBxM,EAAO6jB,GAC5CvqB,EAAOkT,KAAK,oBAGdlT,EAAO6lB,cAAcnf,GACrB1G,EAAO+a,aAAaG,GAChBoP,IACFtqB,EAAOkT,KAAK,wBAAyBxM,EAAO6jB,GAC5CvqB,EAAOkT,KAAK,oBAETlT,EAAOoX,YACVpX,EAAOoX,WAAY,EACdpX,EAAOktB,oCACVltB,EAAOktB,kCAAoC,SAAuBl/C,GAC3DgyB,IAAUA,EAAOoa,WAClBpsC,EAAE2K,SAAW5M,OACjBi0B,EAAOqc,UAAU7jC,oBAAoB,gBAAiBwnB,EAAOktB,mCAC7DltB,EAAOktB,kCAAoC,YACpCltB,EAAOktB,kCACV5C,GACFtqB,EAAOkT,KAAK,oBAIlBlT,EAAOqc,UAAUhsC,iBAAiB,gBAAiB2vB,EAAOktB,sCAGvD,6IC3DT,SACE7R,WAAU,IACVhI,aAAY,IACZkI,iBAAgB,IAChB0M,mBAAkB,IAClBkF,qBAAoB,IACpB7R,eAAc,IACdvB,oBAAmB,IACnBD,kBAAiB,IACjBiK,mBAAkB,iECOL,SAASjK,EAAkBsT,GACxC,MAAMptB,EAASj0B,KACTmpC,EAAYlV,EAAOib,aAAejb,EAAOkV,WAAalV,EAAOkV,WAC7D,SACJlB,EAAQ,OACR7yB,EACA41B,YAAauU,EACb9Z,UAAW6b,EACX7F,UAAW8F,GACTttB,EACJ,IACIwnB,EADAzQ,EAAcqW,EAElB,MAAMG,EAAsBC,IAC1B,IAAIhc,EAAYgc,EAASxtB,EAAOwb,QAAQkB,aAOxC,OANIlL,EAAY,IACdA,EAAYxR,EAAOwb,QAAQ7H,OAAOvjC,OAASohC,GAEzCA,GAAaxR,EAAOwb,QAAQ7H,OAAOvjC,SACrCohC,GAAaxR,EAAOwb,QAAQ7H,OAAOvjC,QAE9BohC,GAKT,QAH2B,IAAhBuF,IACTA,EA/CG,SAAmC/W,GACxC,MAAM,WACJ6T,EAAU,OACV1yB,GACE6e,EACEkV,EAAYlV,EAAOib,aAAejb,EAAOkV,WAAalV,EAAOkV,UACnE,IAAI6B,EACJ,IAAK,IAAI5mC,EAAI,EAAGA,EAAI0jC,EAAWzjC,OAAQD,GAAK,OACT,IAAtB0jC,EAAW1jC,EAAI,GACpB+kC,GAAarB,EAAW1jC,IAAM+kC,EAAYrB,EAAW1jC,EAAI,IAAM0jC,EAAW1jC,EAAI,GAAK0jC,EAAW1jC,IAAM,EACtG4mC,EAAc5mC,EACL+kC,GAAarB,EAAW1jC,IAAM+kC,EAAYrB,EAAW1jC,EAAI,KAClE4mC,EAAc5mC,EAAI,GAEX+kC,GAAarB,EAAW1jC,KACjC4mC,EAAc5mC,GAOlB,OAHIgR,EAAOy9B,sBACL7H,EAAc,QAA4B,IAAhBA,KAA6BA,EAAc,GAEpEA,EAyBS0W,CAA0BztB,IAEtCgU,EAAS3mC,QAAQ6nC,IAAc,EACjCsS,EAAYxT,EAAS3mC,QAAQ6nC,OACxB,CACL,MAAMqW,EAAO9/C,KAAKC,IAAIyV,EAAOs9B,mBAAoB1H,GACjDyQ,EAAY+D,EAAO9/C,KAAKy2B,OAAO6U,EAAcwU,GAAQpqC,EAAOqqB,gBAG9D,GADIgc,GAAaxT,EAAS5jC,SAAQo3C,EAAYxT,EAAS5jC,OAAS,GAC5D2mC,IAAgBuU,EAQlB,OAPI9D,IAAc8F,IAChBttB,EAAOwnB,UAAYA,EACnBxnB,EAAOkT,KAAK,yBAEVlT,EAAO7e,OAAOslB,MAAQzG,EAAOwb,SAAWxb,EAAO7e,OAAOq6B,QAAQvJ,UAChEjS,EAAOwR,UAAY+b,EAAoBxW,KAK3C,IAAIvF,EAEFA,EADExR,EAAOwb,SAAWr6B,EAAOq6B,QAAQvJ,SAAW9wB,EAAOslB,KACzC8mB,EAAoBxW,GACvB/W,EAAO2T,OAAOoD,GACXvsC,SAASw1B,EAAO2T,OAAOoD,GAAa/mC,aAAa,4BAA8B+mC,EAAa,IAE5FA,EAEdtgB,OAAOqc,OAAO9S,EAAQ,CACpBstB,kBAAAA,EACA9F,UAAAA,EACA6F,kBAAAA,EACA7b,UAAAA,EACA8Z,cAAAA,EACAvU,YAAAA,IAEE/W,EAAOyR,cACT,OAAQzR,GAEVA,EAAOkT,KAAK,qBACZlT,EAAOkT,KAAK,mBACRma,IAAsB7b,GACxBxR,EAAOkT,KAAK,oBAEVlT,EAAOyR,aAAezR,EAAO7e,OAAOw7B,qBACtC3c,EAAOkT,KAAK,6CC7FD,SAASqI,EAAiB7U,GACvC,MAAM1G,EAASj0B,KACT2hD,EAAe,GACfpL,EAAYtiB,EAAOwb,SAAWxb,EAAO7e,OAAOq6B,QAAQvJ,QAC1D,IACI9hC,EADA05C,EAAY,EAEK,iBAAVnjB,EACT1G,EAAO6lB,cAAcnf,IACF,IAAVA,GACT1G,EAAO6lB,cAAc7lB,EAAO7e,OAAOulB,OAErC,MAAMinB,EAAkB70C,GAClBwpC,EACKtiB,EAAO2T,OAAO3T,EAAOqZ,oBAAoBvgC,IAE3CknB,EAAO2T,OAAO76B,GAGvB,GAAoC,SAAhCknB,EAAO7e,OAAOqlB,eAA4BxG,EAAO7e,OAAOqlB,cAAgB,EAC1E,GAAIxG,EAAO7e,OAAOimB,gBACfpH,EAAO4tB,eAAiB,IAAIv+C,SAAQ+lC,IACnCsY,EAAan9C,KAAK6kC,WAGpB,IAAKjlC,EAAI,EAAGA,EAAI1E,KAAKw6C,KAAKjmB,EAAO7e,OAAOqlB,eAAgBr2B,GAAK,EAAG,CAC9D,MAAM2I,EAAQknB,EAAO+W,YAAc5mC,EACnC,GAAI2I,EAAQknB,EAAO2T,OAAOvjC,SAAWkyC,EAAW,MAChDoL,EAAan9C,KAAKo9C,EAAgB70C,SAItC40C,EAAan9C,KAAKo9C,EAAgB3tB,EAAO+W,cAI3C,IAAK5mC,EAAI,EAAGA,EAAIu9C,EAAat9C,OAAQD,GAAK,EACxC,QAA+B,IAApBu9C,EAAav9C,GAAoB,CAC1C,MAAM+oB,EAASw0B,EAAav9C,GAAG09C,aAC/BhE,EAAY3wB,EAAS2wB,EAAY3wB,EAAS2wB,GAK1CA,GAA2B,IAAdA,KAAiB7pB,EAAOqc,UAAUvgC,MAAMod,OAAS,GAAG2wB,qDC3CxD,SAAS9F,EAAmB/1C,GACzC,MAAMgyB,EAASj0B,KACToV,EAAS6e,EAAO7e,OAChBi0B,EAAQpnC,EAAEmJ,QAAQ,IAAIgK,EAAOg4B,4BACnC,IACIkS,EADAyC,GAAa,EAEjB,GAAI1Y,EACF,IAAK,IAAIjlC,EAAI,EAAGA,EAAI6vB,EAAO2T,OAAOvjC,OAAQD,GAAK,EAC7C,GAAI6vB,EAAO2T,OAAOxjC,KAAOilC,EAAO,CAC9B0Y,GAAa,EACbzC,EAAal7C,EACb,MAIN,IAAIilC,IAAS0Y,EAUX,OAFA9tB,EAAOwsB,kBAAexhD,OACtBg1B,EAAOssB,kBAAethD,GARtBg1B,EAAOwsB,aAAepX,EAClBpV,EAAOwb,SAAWxb,EAAO7e,OAAOq6B,QAAQvJ,QAC1CjS,EAAOssB,aAAe9hD,SAAS4qC,EAAMplC,aAAa,2BAA4B,IAE9EgwB,EAAOssB,aAAejB,EAOtBlqC,EAAO6+B,0BAA+Ch1C,IAAxBg1B,EAAOssB,cAA8BtsB,EAAOssB,eAAiBtsB,EAAO+W,aACpG/W,EAAOggB,mEC5BI,SAAS1E,EAAepG,GACrC,MAAMlV,EAASj0B,KACf,QAAyB,IAAdmpC,EAA2B,CACpC,MAAM6Y,EAAa/tB,EAAOib,cAAgB,EAAI,EAE9C/F,EAAYlV,GAAUA,EAAOkV,WAAalV,EAAOkV,UAAY6Y,GAAc,EAE7E,MAAM5sC,EAAS6e,EAAO7e,OAChB6hC,EAAiBhjB,EAAO4Z,eAAiB5Z,EAAO0Z,eACtD,IAAI,SACFxC,EAAQ,YACRF,EAAW,MACX/C,EAAK,aACL+Z,GACEhuB,EACJ,MAAMiuB,EAAejX,EACfkX,EAASja,EACf,GAAuB,IAAnB+O,EACF9L,EAAW,EACXF,GAAc,EACd/C,GAAQ,MACH,CACLiD,GAAYhC,EAAYlV,EAAO0Z,gBAAkBsJ,EACjD,MAAMmL,EAAqB1iD,KAAK+4C,IAAItP,EAAYlV,EAAO0Z,gBAAkB,EACnE0U,EAAe3iD,KAAK+4C,IAAItP,EAAYlV,EAAO4Z,gBAAkB,EACnE5C,EAAcmX,GAAsBjX,GAAY,EAChDjD,EAAQma,GAAgBlX,GAAY,EAChCiX,IAAoBjX,EAAW,GAC/BkX,IAAclX,EAAW,GAE/B,GAAI/1B,EAAOslB,KAAM,CACf,MAAM2S,EAAkBpZ,EAAOqZ,oBAAoB,GAC7C3F,EAAiB1T,EAAOqZ,oBAAoBrZ,EAAO2T,OAAOvjC,OAAS,GACnEi+C,EAAsBruB,EAAO6T,WAAWuF,GACxCkV,EAAqBtuB,EAAO6T,WAAWH,GACvC6a,EAAevuB,EAAO6T,WAAW7T,EAAO6T,WAAWzjC,OAAS,GAC5Do+C,EAAe/iD,KAAK+4C,IAAItP,GAE5B8Y,EADEQ,GAAgBH,GACFG,EAAeH,GAAuBE,GAEtCC,EAAeD,EAAeD,GAAsBC,EAElEP,EAAe,IAAGA,GAAgB,GAExCv3B,OAAOqc,OAAO9S,EAAQ,CACpBkX,SAAAA,EACA8W,aAAAA,EACAhX,YAAAA,EACA/C,MAAAA,KAEE9yB,EAAO2zB,qBAAuB3zB,EAAOimB,gBAAkBjmB,EAAOwzB,aAAY3U,EAAOmtB,qBAAqBjY,GACtG8B,IAAgBiX,GAClBjuB,EAAOkT,KAAK,yBAEVe,IAAUia,GACZluB,EAAOkT,KAAK,oBAEV+a,IAAiBjX,GAAekX,IAAWja,IAC7CjU,EAAOkT,KAAK,YAEdlT,EAAOkT,KAAK,WAAYgE,gFC3DX,SAASmE,IACtB,MAAMrb,EAASj0B,KACf,IAAIwN,EACA2f,EACJ,MAAM5pB,EAAK0wB,EAAO1wB,GAEhBiK,OADiC,IAAxBymB,EAAO7e,OAAO5H,OAAiD,OAAxBymB,EAAO7e,OAAO5H,MACtDymB,EAAO7e,OAAO5H,MAEdjK,EAAG28B,YAGX/S,OADkC,IAAzB8G,EAAO7e,OAAO+X,QAAmD,OAAzB8G,EAAO7e,OAAO+X,OACtD8G,EAAO7e,OAAO+X,OAEd5pB,EAAGwhC,aAEA,IAAVv3B,GAAeymB,EAAO6W,gBAA6B,IAAX3d,GAAgB8G,EAAO8W,eAKnEv9B,EAAQA,EAAQ/O,UAAS,QAAa8E,EAAI,iBAAmB,EAAG,IAAM9E,UAAS,QAAa8E,EAAI,kBAAoB,EAAG,IACvH4pB,EAASA,EAAS1uB,UAAS,QAAa8E,EAAI,gBAAkB,EAAG,IAAM9E,UAAS,QAAa8E,EAAI,mBAAqB,EAAG,IACrHqQ,OAAOlV,MAAM8O,KAAQA,EAAQ,GAC7BoG,OAAOlV,MAAMyuB,KAASA,EAAS,GACnCzC,OAAOqc,OAAO9S,EAAQ,CACpBzmB,MAAAA,EACA2f,OAAAA,EACA6a,KAAM/T,EAAO6W,eAAiBt9B,EAAQ2f,iEC3B3B,SAASma,IACtB,MAAMrT,EAASj0B,KACf,SAAS0iD,EAAkBC,GACzB,OAAI1uB,EAAO6W,eACF6X,EAGF,CACL,MAAS,SACT,aAAc,cACd,iBAAkB,eAClB,cAAe,aACf,eAAgB,gBAChB,eAAgB,cAChB,gBAAiB,iBACjB,YAAe,gBACfA,GAEJ,SAASC,EAA0Bz1C,EAAM2Y,GACvC,OAAO3c,WAAWgE,EAAKwG,iBAAiB+uC,EAAkB58B,KAAW,GAEvE,MAAM1Q,EAAS6e,EAAO7e,QAChB,UACJk7B,EAAS,SACTnD,EACAnF,KAAM2G,EACNO,aAAc7G,EAAG,SACjBoI,GACExc,EACEsiB,EAAYtiB,EAAOwb,SAAWr6B,EAAOq6B,QAAQvJ,QAC7C2c,EAAuBtM,EAAYtiB,EAAOwb,QAAQ7H,OAAOvjC,OAAS4vB,EAAO2T,OAAOvjC,OAChFujC,GAAS,QAAgBuF,EAAU,IAAIlZ,EAAO7e,OAAOg4B,4BACrD0V,EAAevM,EAAYtiB,EAAOwb,QAAQ7H,OAAOvjC,OAASujC,EAAOvjC,OACvE,IAAI4jC,EAAW,GACf,MAAMH,EAAa,GACbC,EAAkB,GACxB,IAAIgb,EAAe3tC,EAAOsyB,mBACE,mBAAjBqb,IACTA,EAAe3tC,EAAOsyB,mBAAmBr7B,KAAK4nB,IAEhD,IAAI+uB,EAAc5tC,EAAOw9B,kBACE,mBAAhBoQ,IACTA,EAAc5tC,EAAOw9B,kBAAkBvmC,KAAK4nB,IAE9C,MAAMgvB,EAAyBhvB,EAAOgU,SAAS5jC,OACzC6+C,EAA2BjvB,EAAO6T,WAAWzjC,OACnD,IAAI22B,EAAe5lB,EAAO4lB,aACtBmoB,GAAiBJ,EACjBK,EAAgB,EAChBr2C,EAAQ,EACZ,QAA0B,IAAf4hC,EACT,OAE0B,iBAAjB3T,GAA6BA,EAAa15B,QAAQ,MAAQ,EACnE05B,EAAe7xB,WAAW6xB,EAAazxB,QAAQ,IAAK,KAAO,IAAMolC,EAChC,iBAAjB3T,IAChBA,EAAe7xB,WAAW6xB,IAE5B/G,EAAOovB,aAAeroB,EAGtB4M,EAAOtkC,SAAQ4pC,IACT7E,EACF6E,EAAQn9B,MAAMuzC,WAAa,GAE3BpW,EAAQn9B,MAAMwzC,YAAc,GAE9BrW,EAAQn9B,MAAMyzC,aAAe,GAC7BtW,EAAQn9B,MAAM0zC,UAAY,MAIxBruC,EAAOimB,gBAAkBjmB,EAAOolB,WAClC,QAAe8V,EAAW,kCAAmC,KAC7D,QAAeA,EAAW,iCAAkC,KAE9D,MAAMoT,EAActuC,EAAOmwB,MAAQnwB,EAAOmwB,KAAKC,KAAO,GAAKvR,EAAOsR,KAMlE,IAAIuJ,EALA4U,GACFzvB,EAAOsR,KAAKoe,WAAWb,GAKzB,MAAMc,EAAgD,SAAzBxuC,EAAOqlB,eAA4BrlB,EAAO2lB,aAAerQ,OAAOC,KAAKvV,EAAO2lB,aAAapf,QAAOnY,QACnE,IAA1C4R,EAAO2lB,YAAYv3B,GAAKi3B,gBACrCp2B,OAAS,EACZ,IAAK,IAAID,EAAI,EAAGA,EAAI0+C,EAAc1+C,GAAK,EAAG,CAExC,IAAIilC,EAKJ,GANAyF,EAAY,EAERlH,EAAOxjC,KAAIilC,EAAQzB,EAAOxjC,IAC1Bs/C,GACFzvB,EAAOsR,KAAKse,YAAYz/C,EAAGilC,EAAOyZ,EAAcJ,IAE9C9a,EAAOxjC,IAAyC,UAAnC,QAAailC,EAAO,WAArC,CAEA,GAA6B,SAAzBj0B,EAAOqlB,cAA0B,CAC/BmpB,IACFhc,EAAOxjC,GAAG2L,MAAM2yC,EAAkB,UAAY,IAEhD,MAAMoB,EAAcpwC,iBAAiB21B,GAC/B0a,EAAmB1a,EAAMt5B,MAAMowB,UAC/B6jB,EAAyB3a,EAAMt5B,MAAMk0C,gBAO3C,GANIF,IACF1a,EAAMt5B,MAAMowB,UAAY,QAEtB6jB,IACF3a,EAAMt5B,MAAMk0C,gBAAkB,QAE5B7uC,EAAO29B,aACTjE,EAAY7a,EAAO6W,gBAAiB,QAAiBzB,EAAO,SAAS,IAAQ,QAAiBA,EAAO,UAAU,OAC1G,CAEL,MAAM77B,EAAQo1C,EAA0BkB,EAAa,SAC/CI,EAActB,EAA0BkB,EAAa,gBACrDK,EAAevB,EAA0BkB,EAAa,iBACtDR,EAAaV,EAA0BkB,EAAa,eACpDP,EAAcX,EAA0BkB,EAAa,gBACrDM,EAAYN,EAAYnwC,iBAAiB,cAC/C,GAAIywC,GAA2B,eAAdA,EACftV,EAAYthC,EAAQ81C,EAAaC,MAC5B,CACL,MAAM,YACJrjB,EAAW,YACXoW,GACEjN,EACJyF,EAAYthC,EAAQ02C,EAAcC,EAAeb,EAAaC,GAAejN,EAAcpW,IAG3F6jB,IACF1a,EAAMt5B,MAAMowB,UAAY4jB,GAEtBC,IACF3a,EAAMt5B,MAAMk0C,gBAAkBD,GAE5B5uC,EAAO29B,eAAcjE,EAAYpvC,KAAKy2B,MAAM2Y,SAEhDA,GAAaH,GAAcv5B,EAAOqlB,cAAgB,GAAKO,GAAgB5lB,EAAOqlB,cAC1ErlB,EAAO29B,eAAcjE,EAAYpvC,KAAKy2B,MAAM2Y,IAC5ClH,EAAOxjC,KACTwjC,EAAOxjC,GAAG2L,MAAM2yC,EAAkB,UAAY,GAAG5T,OAGjDlH,EAAOxjC,KACTwjC,EAAOxjC,GAAG2qC,gBAAkBD,GAE9B/G,EAAgBvjC,KAAKsqC,GACjB15B,EAAOimB,gBACT8nB,EAAgBA,EAAgBrU,EAAY,EAAIsU,EAAgB,EAAIpoB,EAC9C,IAAlBooB,GAA6B,IAANh/C,IAAS++C,EAAgBA,EAAgBxU,EAAa,EAAI3T,GAC3E,IAAN52B,IAAS++C,EAAgBA,EAAgBxU,EAAa,EAAI3T,GAC1Dt7B,KAAK+4C,IAAI0K,GAAiB,OAAUA,EAAgB,GACpD/tC,EAAO29B,eAAcoQ,EAAgBzjD,KAAKy2B,MAAMgtB,IAChDp2C,EAAQqI,EAAOqqB,gBAAmB,GAAGwI,EAASzjC,KAAK2+C,GACvDrb,EAAWtjC,KAAK2+C,KAEZ/tC,EAAO29B,eAAcoQ,EAAgBzjD,KAAKy2B,MAAMgtB,KAC/Cp2C,EAAQrN,KAAKC,IAAIs0B,EAAO7e,OAAOs9B,mBAAoB3lC,IAAUknB,EAAO7e,OAAOqqB,gBAAmB,GAAGwI,EAASzjC,KAAK2+C,GACpHrb,EAAWtjC,KAAK2+C,GAChBA,EAAgBA,EAAgBrU,EAAY9T,GAE9C/G,EAAOovB,aAAevU,EAAY9T,EAClCooB,EAAgBtU,EAChB/hC,GAAS,GAcX,GAZAknB,EAAOovB,YAAc3jD,KAAKO,IAAIg0B,EAAOovB,YAAa1U,GAAcqU,EAC5D3a,GAAOoI,IAA+B,UAAlBr7B,EAAOq9B,QAAwC,cAAlBr9B,EAAOq9B,UAC1DnC,EAAUvgC,MAAMvC,MAAQ,GAAGymB,EAAOovB,YAAcroB,OAE9C5lB,EAAOm9B,iBACTjC,EAAUvgC,MAAM2yC,EAAkB,UAAY,GAAGzuB,EAAOovB,YAAcroB,OAEpE0oB,GACFzvB,EAAOsR,KAAK8e,kBAAkBvV,EAAW7G,EAAUya,IAIhDttC,EAAOimB,eAAgB,CAC1B,MAAMipB,EAAgB,GACtB,IAAK,IAAIlgD,EAAI,EAAGA,EAAI6jC,EAAS5jC,OAAQD,GAAK,EAAG,CAC3C,IAAImgD,EAAiBtc,EAAS7jC,GAC1BgR,EAAO29B,eAAcwR,EAAiB7kD,KAAKy2B,MAAMouB,IACjDtc,EAAS7jC,IAAM6vB,EAAOovB,YAAc1U,GACtC2V,EAAc9/C,KAAK+/C,GAGvBtc,EAAWqc,EACP5kD,KAAKy2B,MAAMlC,EAAOovB,YAAc1U,GAAcjvC,KAAKy2B,MAAM8R,EAASA,EAAS5jC,OAAS,IAAM,GAC5F4jC,EAASzjC,KAAKyvB,EAAOovB,YAAc1U,GAGvC,GAAI4H,GAAanhC,EAAOslB,KAAM,CAC5B,MAAMsN,EAAOD,EAAgB,GAAK/M,EAClC,GAAI5lB,EAAOqqB,eAAiB,EAAG,CAC7B,MAAM+kB,EAAS9kD,KAAKw6C,MAAMjmB,EAAOwb,QAAQkB,aAAe1c,EAAOwb,QAAQgV,aAAervC,EAAOqqB,gBACvF2Y,EAAYpQ,EAAO5yB,EAAOqqB,eAChC,IAAK,IAAIr7B,EAAI,EAAGA,EAAIogD,EAAQpgD,GAAK,EAC/B6jC,EAASzjC,KAAKyjC,EAASA,EAAS5jC,OAAS,GAAK+zC,GAGlD,IAAK,IAAIh0C,EAAI,EAAGA,EAAI6vB,EAAOwb,QAAQkB,aAAe1c,EAAOwb,QAAQgV,YAAargD,GAAK,EACnD,IAA1BgR,EAAOqqB,gBACTwI,EAASzjC,KAAKyjC,EAASA,EAAS5jC,OAAS,GAAK2jC,GAEhDF,EAAWtjC,KAAKsjC,EAAWA,EAAWzjC,OAAS,GAAK2jC,GACpD/T,EAAOovB,aAAerb,EAI1B,GADwB,IAApBC,EAAS5jC,SAAc4jC,EAAW,CAAC,IAClB,IAAjBjN,EAAoB,CACtB,MAAMx3B,EAAMywB,EAAO6W,gBAAkBzC,EAAM,aAAeqa,EAAkB,eAC5E9a,EAAOjsB,QAAO,CAAC+oC,EAAGpF,MACXlqC,EAAOolB,UAAWplB,EAAOslB,OAC1B4kB,IAAe1X,EAAOvjC,OAAS,IAIlCf,SAAQ4pC,IACTA,EAAQn9B,MAAMvM,GAAO,GAAGw3B,SAG5B,GAAI5lB,EAAOimB,gBAAkBjmB,EAAOkmB,qBAAsB,CACxD,IAAIqpB,EAAgB,EACpB5c,EAAgBzkC,SAAQshD,IACtBD,GAAiBC,GAAkB5pB,GAAgB,MAErD2pB,GAAiB3pB,EACjB,MAAM6pB,EAAUF,EAAgBhW,EAChC1G,EAAWA,EAAS3sB,KAAI4jC,GAClBA,GAAQ,GAAW6D,EACnB7D,EAAO2F,EAAgBA,EAAU7B,EAC9B9D,IAGX,GAAI9pC,EAAO09B,yBAA0B,CACnC,IAAI6R,EAAgB,EAKpB,GAJA5c,EAAgBzkC,SAAQshD,IACtBD,GAAiBC,GAAkB5pB,GAAgB,MAErD2pB,GAAiB3pB,EACb2pB,EAAgBhW,EAAY,CAC9B,MAAMmW,GAAmBnW,EAAagW,GAAiB,EACvD1c,EAAS3kC,SAAQ,CAAC47C,EAAMzD,KACtBxT,EAASwT,GAAayD,EAAO4F,KAE/Bhd,EAAWxkC,SAAQ,CAAC47C,EAAMzD,KACxB3T,EAAW2T,GAAayD,EAAO4F,MAUrC,GANAp6B,OAAOqc,OAAO9S,EAAQ,CACpB2T,OAAAA,EACAK,SAAAA,EACAH,WAAAA,EACAC,gBAAAA,IAEE3yB,EAAOimB,gBAAkBjmB,EAAOolB,UAAYplB,EAAOkmB,qBAAsB,EAC3E,QAAegV,EAAW,mCAAuCrI,EAAS,GAAb,OAC7D,QAAeqI,EAAW,iCAAqCrc,EAAO+T,KAAO,EAAID,EAAgBA,EAAgB1jC,OAAS,GAAK,EAAnE,MAC5D,MAAM0gD,GAAiB9wB,EAAOgU,SAAS,GACjC+c,GAAmB/wB,EAAO6T,WAAW,GAC3C7T,EAAOgU,SAAWhU,EAAOgU,SAAS3sB,KAAI9c,GAAKA,EAAIumD,IAC/C9wB,EAAO6T,WAAa7T,EAAO6T,WAAWxsB,KAAI9c,GAAKA,EAAIwmD,IAerD,GAbIlC,IAAiBD,GACnB5uB,EAAOkT,KAAK,sBAEVc,EAAS5jC,SAAW4+C,IAClBhvB,EAAO7e,OAAOu6B,eAAe1b,EAAOsT,gBACxCtT,EAAOkT,KAAK,yBAEVW,EAAWzjC,SAAW6+C,GACxBjvB,EAAOkT,KAAK,0BAEV/xB,EAAO2zB,qBACT9U,EAAOioB,uBAEJ3F,GAAcnhC,EAAOolB,SAA8B,UAAlBplB,EAAOq9B,QAAwC,SAAlBr9B,EAAOq9B,QAAoB,CAC5F,MAAMwS,EAAsB,GAAG7vC,EAAO+wB,wCAChC+e,EAA6BjxB,EAAO1wB,GAAGoK,UAAUQ,SAAS82C,GAC5DnC,GAAgB1tC,EAAOs/B,wBACpBwQ,GAA4BjxB,EAAO1wB,GAAGoK,UAAUM,IAAIg3C,GAChDC,GACTjxB,EAAO1wB,GAAGoK,UAAUC,OAAOq3C,iEC1RlB,SAASjX,IACtB,MAAM/Z,EAASj0B,MACT,OACJ4nC,EAAM,OACNxyB,EAAM,SACN+3B,EAAQ,YACRnC,GACE/W,EACEsiB,EAAYtiB,EAAOwb,SAAWr6B,EAAOq6B,QAAQvJ,QAC7Cif,EAAmBrlB,IAChB,QAAgBqN,EAAU,IAAI/3B,EAAOg4B,aAAatN,kBAAyBA,KAAY,GAKhG,IAAIslB,EACJ,GAJAxd,EAAOtkC,SAAQ4pC,IACbA,EAAQv/B,UAAUC,OAAOwH,EAAO+7B,iBAAkB/7B,EAAOg8B,eAAgBh8B,EAAOi8B,mBAG9EkF,EACF,GAAInhC,EAAOslB,KAAM,CACf,IAAI4kB,EAAatU,EAAc/W,EAAOwb,QAAQkB,aAC1C2O,EAAa,IAAGA,EAAarrB,EAAOwb,QAAQ7H,OAAOvjC,OAASi7C,GAC5DA,GAAcrrB,EAAOwb,QAAQ7H,OAAOvjC,SAAQi7C,GAAcrrB,EAAOwb,QAAQ7H,OAAOvjC,QACpF+gD,EAAcD,EAAiB,6BAA6B7F,YAE5D8F,EAAcD,EAAiB,6BAA6Bna,YAG9Doa,EAAcxd,EAAOoD,GAEvB,GAAIoa,EAAa,CAEfA,EAAYz3C,UAAUM,IAAImH,EAAO+7B,kBAGjC,IAAIkU,GAAY,QAAeD,EAAa,IAAIhwC,EAAOg4B,4BAA4B,GAC/Eh4B,EAAOslB,OAAS2qB,IAClBA,EAAYzd,EAAO,IAEjByd,GACFA,EAAU13C,UAAUM,IAAImH,EAAOg8B,gBAGjC,IAAIkU,GAAY,QAAeF,EAAa,IAAIhwC,EAAOg4B,4BAA4B,GAC/Eh4B,EAAOslB,MAAuB,KAAd4qB,IAClBA,EAAY1d,EAAOA,EAAOvjC,OAAS,IAEjCihD,GACFA,EAAU33C,UAAUM,IAAImH,EAAOi8B,gBAGnCpd,EAAOqa,kDClDM,SAAS4N,IACtB,MAAMjoB,EAASj0B,KACT4nC,EAAS3T,EAAO2T,OAEhB2d,EAActxB,EAAOkc,UAAYlc,EAAO6W,eAAiB7W,EAAOqc,UAAUnV,WAAalH,EAAOqc,UAAUjgC,UAAY,EAC1H,IAAK,IAAIjM,EAAI,EAAGA,EAAIwjC,EAAOvjC,OAAQD,GAAK,EACtCwjC,EAAOxjC,GAAGohD,mBAAqBvxB,EAAO6W,eAAiBlD,EAAOxjC,GAAG+2B,WAAayM,EAAOxjC,GAAGiM,WAAak1C,EAActxB,EAAOqX,sECN/G,SAAS8V,EAAqBjY,EAAYnpC,MAAQA,KAAKmpC,WAAa,GACjF,MAAMlV,EAASj0B,KACToV,EAAS6e,EAAO7e,QAChB,OACJwyB,EACAsH,aAAc7G,EAAG,SACjBJ,GACEhU,EACJ,GAAsB,IAAlB2T,EAAOvjC,OAAc,YACkB,IAAhCujC,EAAO,GAAG4d,mBAAmCvxB,EAAOioB,qBAC/D,IAAIuJ,GAAgBtc,EAChBd,IAAKod,EAAetc,GAGxBvB,EAAOtkC,SAAQ4pC,IACbA,EAAQv/B,UAAUC,OAAOwH,EAAO87B,sBAElCjd,EAAOyxB,qBAAuB,GAC9BzxB,EAAO4tB,cAAgB,GACvB,IAAI7mB,EAAe5lB,EAAO4lB,aACE,iBAAjBA,GAA6BA,EAAa15B,QAAQ,MAAQ,EACnE05B,EAAe7xB,WAAW6xB,EAAazxB,QAAQ,IAAK,KAAO,IAAM0qB,EAAO+T,KACvC,iBAAjBhN,IAChBA,EAAe7xB,WAAW6xB,IAE5B,IAAK,IAAI52B,EAAI,EAAGA,EAAIwjC,EAAOvjC,OAAQD,GAAK,EAAG,CACzC,MAAMilC,EAAQzB,EAAOxjC,GACrB,IAAIuhD,EAActc,EAAMmc,kBACpBpwC,EAAOolB,SAAWplB,EAAOimB,iBAC3BsqB,GAAe/d,EAAO,GAAG4d,mBAE3B,MAAMI,GAAiBH,GAAgBrwC,EAAOimB,eAAiBpH,EAAO0Z,eAAiB,GAAKgY,IAAgBtc,EAAM0F,gBAAkB/T,GAC9H6qB,GAAyBJ,EAAexd,EAAS,IAAM7yB,EAAOimB,eAAiBpH,EAAO0Z,eAAiB,GAAKgY,IAAgBtc,EAAM0F,gBAAkB/T,GACpJ8qB,IAAgBL,EAAeE,GAC/BI,EAAaD,EAAc7xB,EAAO8T,gBAAgB3jC,IACtC0hD,GAAe,GAAKA,EAAc7xB,EAAO+T,KAAO,GAAK+d,EAAa,GAAKA,GAAc9xB,EAAO+T,MAAQ8d,GAAe,GAAKC,GAAc9xB,EAAO+T,QAE7J/T,EAAO4tB,cAAcr9C,KAAK6kC,GAC1BpV,EAAOyxB,qBAAqBlhD,KAAKJ,GACjCwjC,EAAOxjC,GAAGuJ,UAAUM,IAAImH,EAAO87B,oBAEjC7H,EAAM8B,SAAW9C,GAAOud,EAAgBA,EACxCvc,EAAM2c,iBAAmB3d,GAAOwd,EAAwBA,ktBCzC7C,SAASI,GAAW,OACjChyB,EAAM,aACNqW,EAAY,GACZ3jB,EAAE,KACFwgB,IAEAmD,EAAa,CACX1P,WAAY,CACVC,OAAQ,KACRC,OAAQ,KACRorB,aAAa,EACbC,cAAe,yBACfC,YAAa,uBACbC,UAAW,qBACXC,wBAAyB,gCAG7BryB,EAAO2G,WAAa,CAClBC,OAAQ,KACRC,OAAQ,MAEV,MAAMyrB,EAAoBhjD,IACnB6I,MAAM+9B,QAAQ5mC,KAAKA,EAAK,CAACA,GAAIoY,QAAO1Z,KAAOA,KACzCsB,GAET,SAASijD,EAAMjjD,GACb,IAAIsY,EACJ,OAAItY,GAAoB,iBAAPA,GAAmB0wB,EAAOkc,YACzCt0B,EAAMoY,EAAO1wB,GAAGgtC,WAAW3rC,cAAcrB,GACrCsY,GAAYA,GAEdtY,IACgB,iBAAPA,IAAiBsY,EAAM,IAAI3a,SAASiL,iBAAiB5I,KAC5D0wB,EAAO7e,OAAOw+B,mBAAmC,iBAAPrwC,GAAmBsY,EAAIxX,OAAS,GAA+C,IAA1C4vB,EAAO1wB,GAAG4I,iBAAiB5I,GAAIc,SAChHwX,EAAMoY,EAAO1wB,GAAGqB,cAAcrB,KAG9BA,IAAOsY,EAAYtY,EAEhBsY,GAET,SAAS4qC,EAASljD,EAAImjD,GACpB,MAAMtxC,EAAS6e,EAAO7e,OAAOwlB,YAC7Br3B,EAAKgjD,EAAkBhjD,IACpBD,SAAQqjD,IACLA,IACFA,EAAMh5C,UAAU+4C,EAAW,MAAQ,aAAatxC,EAAO+wC,cAAc/kD,MAAM,MACrD,WAAlBulD,EAAMr4C,UAAsBq4C,EAAMD,SAAWA,GAC7CzyB,EAAO7e,OAAOu6B,eAAiB1b,EAAOiS,SACxCygB,EAAMh5C,UAAUsmB,EAAOuT,SAAW,MAAQ,UAAUpyB,EAAOixC,eAKnE,SAASh9B,IAEP,MAAM,OACJwR,EAAM,OACNC,GACE7G,EAAO2G,WACX,GAAI3G,EAAO7e,OAAOslB,KAGhB,OAFA+rB,EAAS3rB,GAAQ,QACjB2rB,EAAS5rB,GAAQ,GAGnB4rB,EAAS3rB,EAAQ7G,EAAOgX,cAAgBhX,EAAO7e,OAAOg/B,QACtDqS,EAAS5rB,EAAQ5G,EAAOiU,QAAUjU,EAAO7e,OAAOg/B,QAElD,SAASwS,EAAY3kD,GACnBA,EAAEyD,mBACEuuB,EAAOgX,aAAgBhX,EAAO7e,OAAOslB,MAASzG,EAAO7e,OAAOg/B,UAChEngB,EAAOmqB,YACPjX,EAAK,mBAEP,SAAS0f,EAAY5kD,GACnBA,EAAEyD,mBACEuuB,EAAOiU,OAAUjU,EAAO7e,OAAOslB,MAASzG,EAAO7e,OAAOg/B,UAC1DngB,EAAOkqB,YACPhX,EAAK,mBAEP,SAAS9P,IACP,MAAMjiB,EAAS6e,EAAO7e,OAAOwlB,WAK7B,GAJA3G,EAAO7e,OAAOwlB,YAAa,OAA0B3G,EAAQA,EAAO6R,eAAelL,WAAY3G,EAAO7e,OAAOwlB,WAAY,CACvHC,OAAQ,qBACRC,OAAQ,wBAEJ1lB,EAAOylB,SAAUzlB,EAAO0lB,OAAS,OACvC,IAAID,EAAS2rB,EAAMpxC,EAAOylB,QACtBC,EAAS0rB,EAAMpxC,EAAO0lB,QAC1BpQ,OAAOqc,OAAO9S,EAAO2G,WAAY,CAC/BC,OAAAA,EACAC,OAAAA,IAEFD,EAAS0rB,EAAkB1rB,GAC3BC,EAASyrB,EAAkBzrB,GAC3B,MAAMgsB,EAAa,CAACvjD,EAAIysC,KAClBzsC,GACFA,EAAGe,iBAAiB,QAAiB,SAAR0rC,EAAiB6W,EAAcD,IAEzD3yB,EAAOiS,SAAW3iC,GACrBA,EAAGoK,UAAUM,OAAOmH,EAAOixC,UAAUjlD,MAAM,OAG/Cy5B,EAAOv3B,SAAQC,GAAMujD,EAAWvjD,EAAI,UACpCu3B,EAAOx3B,SAAQC,GAAMujD,EAAWvjD,EAAI,UAEtC,SAASutC,IACP,IAAI,OACFjW,EAAM,OACNC,GACE7G,EAAO2G,WACXC,EAAS0rB,EAAkB1rB,GAC3BC,EAASyrB,EAAkBzrB,GAC3B,MAAMisB,EAAgB,CAACxjD,EAAIysC,KACzBzsC,EAAGkJ,oBAAoB,QAAiB,SAARujC,EAAiB6W,EAAcD,GAC/DrjD,EAAGoK,UAAUC,UAAUqmB,EAAO7e,OAAOwlB,WAAWurB,cAAc/kD,MAAM,OAEtEy5B,EAAOv3B,SAAQC,GAAMwjD,EAAcxjD,EAAI,UACvCu3B,EAAOx3B,SAAQC,GAAMwjD,EAAcxjD,EAAI,UAEzCojB,EAAG,QAAQ,MACgC,IAArCsN,EAAO7e,OAAOwlB,WAAWsL,QAE3BO,KAEApP,IACAhO,QAGJ1C,EAAG,+BAA+B,KAChC0C,OAEF1C,EAAG,WAAW,KACZmqB,OAEFnqB,EAAG,kBAAkB,KACnB,IAAI,OACFkU,EAAM,OACNC,GACE7G,EAAO2G,WACXC,EAAS0rB,EAAkB1rB,GAC3BC,EAASyrB,EAAkBzrB,GAC3B,IAAID,KAAWC,GAAQnf,QAAOpY,KAAQA,IAAID,SAAQC,GAAMA,EAAGoK,UAAUsmB,EAAOiS,QAAU,SAAW,OAAOjS,EAAO7e,OAAOwlB,WAAWyrB,gBAEnI1/B,EAAG,SAAS,CAACqgC,EAAI/kD,KACf,IAAI,OACF44B,EAAM,OACNC,GACE7G,EAAO2G,WACXC,EAAS0rB,EAAkB1rB,GAC3BC,EAASyrB,EAAkBzrB,GAC3B,MAAMqf,EAAWl4C,EAAE2K,OACnB,GAAIqnB,EAAO7e,OAAOwlB,WAAWsrB,cAAgBprB,EAAOwc,SAAS6C,KAActf,EAAOyc,SAAS6C,GAAW,CACpG,GAAIlmB,EAAOyL,YAAczL,EAAO7e,OAAOsqB,YAAczL,EAAO7e,OAAOsqB,WAAWC,YAAc1L,EAAOyL,WAAWn8B,KAAO42C,GAAYlmB,EAAOyL,WAAWn8B,GAAG4K,SAASgsC,IAAY,OAC3K,IAAI8M,EACApsB,EAAOx2B,OACT4iD,EAAWpsB,EAAO,GAAGltB,UAAUQ,SAAS8lB,EAAO7e,OAAOwlB,WAAWwrB,aACxDtrB,EAAOz2B,SAChB4iD,EAAWnsB,EAAO,GAAGntB,UAAUQ,SAAS8lB,EAAO7e,OAAOwlB,WAAWwrB,cAGjEjf,GADe,IAAb8f,EACG,iBAEA,kBAEP,IAAIpsB,KAAWC,GAAQnf,QAAOpY,KAAQA,IAAID,SAAQC,GAAMA,EAAGoK,UAAUkD,OAAOojB,EAAO7e,OAAOwlB,WAAWwrB,mBAGzG,MAKM3f,EAAU,KACdxS,EAAO1wB,GAAGoK,UAAUM,OAAOgmB,EAAO7e,OAAOwlB,WAAW0rB,wBAAwBllD,MAAM,MAClF0vC,KAEFpmB,OAAOqc,OAAO9S,EAAO2G,WAAY,CAC/B8L,OAVa,KACbzS,EAAO1wB,GAAGoK,UAAUC,UAAUqmB,EAAO7e,OAAOwlB,WAAW0rB,wBAAwBllD,MAAM,MACrFi2B,IACAhO,KAQAod,QAAAA,EACApd,OAAAA,EACAgO,KAAAA,EACAyZ,QAAAA,qFCpLW,SAASoW,GAAW,OACjCjzB,EAAM,aACNqW,EAAY,GACZ3jB,EAAE,KACFwgB,IAEA,MAAMggB,EAAM,oBAqCZ,IAAIC,EApCJ9c,EAAa,CACX5K,WAAY,CACVn8B,GAAI,KACJ8jD,cAAe,OACf1nB,WAAW,EACXumB,aAAa,EACboB,aAAc,KACdC,kBAAmB,KACnBC,eAAgB,KAChBC,aAAc,KACdC,qBAAqB,EACrBxpD,KAAM,UAENypD,gBAAgB,EAChBC,mBAAoB,EACpBC,sBAAuBx+C,GAAUA,EACjCy+C,oBAAqBz+C,GAAUA,EAC/B0+C,YAAa,GAAGZ,WAChBa,kBAAmB,GAAGb,kBACtBc,cAAe,GAAGd,KAClBe,aAAc,GAAGf,YACjBgB,WAAY,GAAGhB,UACff,YAAa,GAAGe,WAChBiB,qBAAsB,GAAGjB,qBACzBkB,yBAA0B,GAAGlB,yBAC7BmB,eAAgB,GAAGnB,cACnBd,UAAW,GAAGc,SACdoB,gBAAiB,GAAGpB,eACpBqB,cAAe,GAAGrB,aAClBsB,wBAAyB,GAAGtB,gBAGhClzB,EAAOyL,WAAa,CAClBn8B,GAAI,KACJmlD,QAAS,IAGX,IAAIC,EAAqB,EACzB,MAAMpC,EAAoBhjD,IACnB6I,MAAM+9B,QAAQ5mC,KAAKA,EAAK,CAACA,GAAIoY,QAAO1Z,KAAOA,KACzCsB,GAET,SAASqlD,IACP,OAAQ30B,EAAO7e,OAAOsqB,WAAWn8B,KAAO0wB,EAAOyL,WAAWn8B,IAAM6I,MAAM+9B,QAAQlW,EAAOyL,WAAWn8B,KAAuC,IAAhC0wB,EAAOyL,WAAWn8B,GAAGc,OAE9H,SAASwkD,EAAeC,EAAUC,GAChC,MAAM,kBACJf,GACE/zB,EAAO7e,OAAOsqB,WACbopB,IACLA,EAAWA,GAAyB,SAAbC,EAAsB,WAAa,QAAtC,qBAElBD,EAASn7C,UAAUM,IAAI,GAAG+5C,KAAqBe,MAC/CD,EAAWA,GAAyB,SAAbC,EAAsB,WAAa,QAAtC,oBAElBD,EAASn7C,UAAUM,IAAI,GAAG+5C,KAAqBe,KAAYA,MAIjE,SAASC,EAAc/mD,GACrB,MAAM6mD,EAAW7mD,EAAE2K,OAAOxB,SAAQ,OAAkB6oB,EAAO7e,OAAOsqB,WAAWqoB,cAC7E,IAAKe,EACH,OAEF7mD,EAAEyD,iBACF,MAAMqH,GAAQ,QAAa+7C,GAAY70B,EAAO7e,OAAOqqB,eACrD,GAAIxL,EAAO7e,OAAOslB,KAAM,CACtB,GAAIzG,EAAOwR,YAAc14B,EAAO,OAChC,MAAMk8C,EAAgBh1B,EAAOqZ,oBAAoBvgC,GAC3Cm8C,EAAoBj1B,EAAOqZ,oBAAoBrZ,EAAOwR,WACxDwjB,EAAgBh1B,EAAO2T,OAAOvjC,OAAS4vB,EAAOigB,cAChDjgB,EAAO2lB,QAAQ,CACbrf,UAAW0uB,EAAgBC,EAAoB,OAAS,OACxDjP,iBAAkBgP,EAClBvZ,SAAS,IAGbzb,EAAOwiB,YAAY1pC,QAEnBknB,EAAOyb,QAAQ3iC,GAGnB,SAASsc,IAEP,MAAMgf,EAAMpU,EAAOoU,IACbjzB,EAAS6e,EAAO7e,OAAOsqB,WAC7B,GAAIkpB,IAAwB,OAC5B,IAGIhb,EACA2R,EAJAh8C,EAAK0wB,EAAOyL,WAAWn8B,GAC3BA,EAAKgjD,EAAkBhjD,GAIvB,MAAMu/C,EAAe7uB,EAAOwb,SAAWxb,EAAO7e,OAAOq6B,QAAQvJ,QAAUjS,EAAOwb,QAAQ7H,OAAOvjC,OAAS4vB,EAAO2T,OAAOvjC,OAC9G4gB,EAAQgP,EAAO7e,OAAOslB,KAAOh7B,KAAKw6C,KAAK4I,EAAe7uB,EAAO7e,OAAOqqB,gBAAkBxL,EAAOgU,SAAS5jC,OAY5G,GAXI4vB,EAAO7e,OAAOslB,MAChB6kB,EAAgBtrB,EAAOqtB,mBAAqB,EAC5C1T,EAAU3Z,EAAO7e,OAAOqqB,eAAiB,EAAI//B,KAAKy2B,MAAMlC,EAAOwR,UAAYxR,EAAO7e,OAAOqqB,gBAAkBxL,EAAOwR,gBAC7E,IAArBxR,EAAOwnB,WACvB7N,EAAU3Z,EAAOwnB,UACjB8D,EAAgBtrB,EAAOstB,oBAEvBhC,EAAgBtrB,EAAOsrB,eAAiB,EACxC3R,EAAU3Z,EAAO+W,aAAe,GAGd,YAAhB51B,EAAOlX,MAAsB+1B,EAAOyL,WAAWgpB,SAAWz0B,EAAOyL,WAAWgpB,QAAQrkD,OAAS,EAAG,CAClG,MAAMqkD,EAAUz0B,EAAOyL,WAAWgpB,QAClC,IAAIS,EACA/J,EACAgK,EAsBJ,GArBIh0C,EAAOuyC,iBACTP,GAAa,QAAiBsB,EAAQ,GAAIz0B,EAAO6W,eAAiB,QAAU,UAAU,GACtFvnC,EAAGD,SAAQqjD,IACTA,EAAM52C,MAAMkkB,EAAO6W,eAAiB,QAAU,UAAesc,GAAchyC,EAAOwyC,mBAAqB,GAA7C,QAExDxyC,EAAOwyC,mBAAqB,QAAuB3oD,IAAlBsgD,IACnCoJ,GAAsB/a,GAAW2R,GAAiB,GAC9CoJ,EAAqBvzC,EAAOwyC,mBAAqB,EACnDe,EAAqBvzC,EAAOwyC,mBAAqB,EACxCe,EAAqB,IAC9BA,EAAqB,IAGzBQ,EAAazpD,KAAKO,IAAI2tC,EAAU+a,EAAoB,GACpDvJ,EAAY+J,GAAczpD,KAAKC,IAAI+oD,EAAQrkD,OAAQ+Q,EAAOwyC,oBAAsB,GAChFwB,GAAYhK,EAAY+J,GAAc,GAExCT,EAAQplD,SAAQwlD,IACd,MAAMO,EAAkB,IAAI,CAAC,GAAI,QAAS,aAAc,QAAS,aAAc,SAAS/tC,KAAIguC,GAAU,GAAGl0C,EAAO4yC,oBAAoBsB,OAAWhuC,KAAIiuC,GAAkB,iBAANA,GAAkBA,EAAEjS,SAAS,KAAOiS,EAAEnoD,MAAM,KAAOmoD,IAAGC,OACrNV,EAASn7C,UAAUC,UAAUy7C,MAE3B9lD,EAAGc,OAAS,EACdqkD,EAAQplD,SAAQmmD,IACd,MAAMC,GAAc,QAAaD,GAC7BC,IAAgB9b,EAClB6b,EAAO97C,UAAUM,OAAOmH,EAAO4yC,kBAAkB5mD,MAAM,MAC9C6yB,EAAOkc,WAChBsZ,EAAOn+C,aAAa,OAAQ,UAE1B8J,EAAOuyC,iBACL+B,GAAeP,GAAcO,GAAetK,GAC9CqK,EAAO97C,UAAUM,OAAO,GAAGmH,EAAO4yC,yBAAyB5mD,MAAM,MAE/DsoD,IAAgBP,GAClBN,EAAeY,EAAQ,QAErBC,IAAgBtK,GAClByJ,EAAeY,EAAQ,gBAIxB,CACL,MAAMA,EAASf,EAAQ9a,GASvB,GARI6b,GACFA,EAAO97C,UAAUM,OAAOmH,EAAO4yC,kBAAkB5mD,MAAM,MAErD6yB,EAAOkc,WACTuY,EAAQplD,SAAQ,CAACwlD,EAAUY,KACzBZ,EAASx9C,aAAa,OAAQo+C,IAAgB9b,EAAU,gBAAkB,aAG1Ex4B,EAAOuyC,eAAgB,CACzB,MAAMgC,EAAuBjB,EAAQS,GAC/BS,EAAsBlB,EAAQtJ,GACpC,IAAK,IAAIh7C,EAAI+kD,EAAY/kD,GAAKg7C,EAAWh7C,GAAK,EACxCskD,EAAQtkD,IACVskD,EAAQtkD,GAAGuJ,UAAUM,OAAO,GAAGmH,EAAO4yC,yBAAyB5mD,MAAM,MAGzEynD,EAAec,EAAsB,QACrCd,EAAee,EAAqB,SAGxC,GAAIx0C,EAAOuyC,eAAgB,CACzB,MAAMkC,EAAuBnqD,KAAKC,IAAI+oD,EAAQrkD,OAAQ+Q,EAAOwyC,mBAAqB,GAC5EkC,GAAiB1C,EAAayC,EAAuBzC,GAAc,EAAIgC,EAAWhC,EAClF2C,EAAa1hB,EAAM,QAAU,OACnCqgB,EAAQplD,SAAQmmD,IACdA,EAAO15C,MAAMkkB,EAAO6W,eAAiBif,EAAa,OAAS,GAAGD,UAIpEvmD,EAAGD,SAAQ,CAACqjD,EAAOqD,KASjB,GARoB,aAAhB50C,EAAOlX,OACTyoD,EAAMx6C,kBAAiB,OAAkBiJ,EAAO8yC,eAAe5kD,SAAQ2mD,IACrEA,EAAW7sC,YAAchI,EAAOyyC,sBAAsBja,EAAU,MAElE+Y,EAAMx6C,kBAAiB,OAAkBiJ,EAAO+yC,aAAa7kD,SAAQ4mD,IACnEA,EAAQ9sC,YAAchI,EAAO0yC,oBAAoB7iC,OAGjC,gBAAhB7P,EAAOlX,KAAwB,CACjC,IAAIisD,EAEFA,EADE/0C,EAAOsyC,oBACczzB,EAAO6W,eAAiB,WAAa,aAErC7W,EAAO6W,eAAiB,aAAe,WAEhE,MAAMsf,GAASxc,EAAU,GAAK3oB,EAC9B,IAAIolC,EAAS,EACTC,EAAS,EACgB,eAAzBH,EACFE,EAASD,EAETE,EAASF,EAEXzD,EAAMx6C,kBAAiB,OAAkBiJ,EAAOgzC,uBAAuB9kD,SAAQinD,IAC7EA,EAAWx6C,MAAMowB,UAAY,6BAA6BkqB,aAAkBC,KAC5EC,EAAWx6C,MAAM8wC,mBAAqB,GAAG5sB,EAAO7e,OAAOulB,aAGvC,WAAhBvlB,EAAOlX,MAAqBkX,EAAOqyC,cACrCd,EAAM3+C,UAAYoN,EAAOqyC,aAAaxzB,EAAQ2Z,EAAU,EAAG3oB,GACxC,IAAf+kC,GAAkB7iB,EAAK,mBAAoBwf,KAE5B,IAAfqD,GAAkB7iB,EAAK,mBAAoBwf,GAC/Cxf,EAAK,mBAAoBwf,IAEvB1yB,EAAO7e,OAAOu6B,eAAiB1b,EAAOiS,SACxCygB,EAAMh5C,UAAUsmB,EAAOuT,SAAW,MAAQ,UAAUpyB,EAAOixC,cAIjE,SAASl4B,IAEP,MAAM/Y,EAAS6e,EAAO7e,OAAOsqB,WAC7B,GAAIkpB,IAAwB,OAC5B,MAAM9F,EAAe7uB,EAAOwb,SAAWxb,EAAO7e,OAAOq6B,QAAQvJ,QAAUjS,EAAOwb,QAAQ7H,OAAOvjC,OAAS4vB,EAAO2T,OAAOvjC,OACpH,IAAId,EAAK0wB,EAAOyL,WAAWn8B,GAC3BA,EAAKgjD,EAAkBhjD,GACvB,IAAIinD,EAAiB,GACrB,GAAoB,YAAhBp1C,EAAOlX,KAAoB,CAC7B,IAAIusD,EAAkBx2B,EAAO7e,OAAOslB,KAAOh7B,KAAKw6C,KAAK4I,EAAe7uB,EAAO7e,OAAOqqB,gBAAkBxL,EAAOgU,SAAS5jC,OAChH4vB,EAAO7e,OAAOuzB,UAAY1U,EAAO7e,OAAOuzB,SAASzC,SAAWukB,EAAkB3H,IAChF2H,EAAkB3H,GAEpB,IAAK,IAAI1+C,EAAI,EAAGA,EAAIqmD,EAAiBrmD,GAAK,EACpCgR,EAAOkyC,aACTkD,GAAkBp1C,EAAOkyC,aAAaj7C,KAAK4nB,EAAQ7vB,EAAGgR,EAAO2yC,aAG7DyC,GAAkB,IAAIp1C,EAAOiyC,iBAAiBpzB,EAAOkc,UAAY,gBAAkB,aAAa/6B,EAAO2yC,kBAAkB3yC,EAAOiyC,iBAIlH,aAAhBjyC,EAAOlX,OAEPssD,EADEp1C,EAAOoyC,eACQpyC,EAAOoyC,eAAen7C,KAAK4nB,EAAQ7e,EAAO8yC,aAAc9yC,EAAO+yC,YAE/D,gBAAgB/yC,EAAO8yC,wCAAkD9yC,EAAO+yC,uBAGjF,gBAAhB/yC,EAAOlX,OAEPssD,EADEp1C,EAAOmyC,kBACQnyC,EAAOmyC,kBAAkBl7C,KAAK4nB,EAAQ7e,EAAOgzC,sBAE7C,gBAAgBhzC,EAAOgzC,iCAG5Cn0B,EAAOyL,WAAWgpB,QAAU,GAC5BnlD,EAAGD,SAAQqjD,IACW,WAAhBvxC,EAAOlX,OACTyoD,EAAM3+C,UAAYwiD,GAAkB,IAElB,YAAhBp1C,EAAOlX,MACT+1B,EAAOyL,WAAWgpB,QAAQlkD,QAAQmiD,EAAMx6C,kBAAiB,OAAkBiJ,EAAO2yC,kBAGlE,WAAhB3yC,EAAOlX,MACTipC,EAAK,mBAAoB5jC,EAAG,IAGhC,SAAS8zB,IACPpD,EAAO7e,OAAOsqB,YAAa,OAA0BzL,EAAQA,EAAO6R,eAAepG,WAAYzL,EAAO7e,OAAOsqB,WAAY,CACvHn8B,GAAI,sBAEN,MAAM6R,EAAS6e,EAAO7e,OAAOsqB,WAC7B,IAAKtqB,EAAO7R,GAAI,OAChB,IAAIA,EACqB,iBAAd6R,EAAO7R,IAAmB0wB,EAAOkc,YAC1C5sC,EAAK0wB,EAAO1wB,GAAGgtC,WAAW3rC,cAAcwQ,EAAO7R,KAE5CA,GAA2B,iBAAd6R,EAAO7R,KACvBA,EAAK,IAAIrC,SAASiL,iBAAiBiJ,EAAO7R,MAEvCA,IACHA,EAAK6R,EAAO7R,IAETA,GAAoB,IAAdA,EAAGc,SACV4vB,EAAO7e,OAAOw+B,mBAA0C,iBAAdx+B,EAAO7R,IAAmB6I,MAAM+9B,QAAQ5mC,IAAOA,EAAGc,OAAS,IACvGd,EAAK,IAAI0wB,EAAO1wB,GAAG4I,iBAAiBiJ,EAAO7R,KAEvCA,EAAGc,OAAS,IACdd,EAAKA,EAAGoY,QAAOgrC,IACT,QAAeA,EAAO,WAAW,KAAO1yB,EAAO1wB,KAElD,KAGH6I,MAAM+9B,QAAQ5mC,IAAqB,IAAdA,EAAGc,SAAcd,EAAKA,EAAG,IAClDmnB,OAAOqc,OAAO9S,EAAOyL,WAAY,CAC/Bn8B,GAAAA,IAEFA,EAAKgjD,EAAkBhjD,GACvBA,EAAGD,SAAQqjD,IACW,YAAhBvxC,EAAOlX,MAAsBkX,EAAOuqB,WACtCgnB,EAAMh5C,UAAUM,IAAImH,EAAOkzC,gBAE7B3B,EAAMh5C,UAAUM,IAAImH,EAAO6yC,cAAgB7yC,EAAOlX,MAClDyoD,EAAMh5C,UAAUM,IAAIgmB,EAAO6W,eAAiB11B,EAAOmzC,gBAAkBnzC,EAAOozC,eACxD,YAAhBpzC,EAAOlX,MAAsBkX,EAAOuyC,iBACtChB,EAAMh5C,UAAUM,IAAI,GAAGmH,EAAO6yC,gBAAgB7yC,EAAOlX,gBACrDyqD,EAAqB,EACjBvzC,EAAOwyC,mBAAqB,IAC9BxyC,EAAOwyC,mBAAqB,IAGZ,gBAAhBxyC,EAAOlX,MAA0BkX,EAAOsyC,qBAC1Cf,EAAMh5C,UAAUM,IAAImH,EAAOizC,0BAEzBjzC,EAAOuqB,WACTgnB,EAAMriD,iBAAiB,QAAS0kD,GAE7B/0B,EAAOiS,SACVygB,EAAMh5C,UAAUM,IAAImH,EAAOixC,eAIjC,SAASvV,IACP,MAAM17B,EAAS6e,EAAO7e,OAAOsqB,WAC7B,GAAIkpB,IAAwB,OAC5B,IAAIrlD,EAAK0wB,EAAOyL,WAAWn8B,GACvBA,IACFA,EAAKgjD,EAAkBhjD,GACvBA,EAAGD,SAAQqjD,IACTA,EAAMh5C,UAAUC,OAAOwH,EAAOgxC,aAC9BO,EAAMh5C,UAAUC,OAAOwH,EAAO6yC,cAAgB7yC,EAAOlX,MACrDyoD,EAAMh5C,UAAUC,OAAOqmB,EAAO6W,eAAiB11B,EAAOmzC,gBAAkBnzC,EAAOozC,eAC3EpzC,EAAOuqB,WACTgnB,EAAMl6C,oBAAoB,QAASu8C,OAIrC/0B,EAAOyL,WAAWgpB,SAASz0B,EAAOyL,WAAWgpB,QAAQplD,SAAQqjD,GAASA,EAAMh5C,UAAUC,UAAUwH,EAAO4yC,kBAAkB5mD,MAAM,QAErIulB,EAAG,mBAAmB,KACpB,IAAKsN,EAAOyL,aAAezL,EAAOyL,WAAWn8B,GAAI,OACjD,MAAM6R,EAAS6e,EAAO7e,OAAOsqB,WAC7B,IAAI,GACFn8B,GACE0wB,EAAOyL,WACXn8B,EAAKgjD,EAAkBhjD,GACvBA,EAAGD,SAAQqjD,IACTA,EAAMh5C,UAAUC,OAAOwH,EAAOmzC,gBAAiBnzC,EAAOozC,eACtD7B,EAAMh5C,UAAUM,IAAIgmB,EAAO6W,eAAiB11B,EAAOmzC,gBAAkBnzC,EAAOozC,qBAGhF7hC,EAAG,QAAQ,MACgC,IAArCsN,EAAO7e,OAAOsqB,WAAWwG,QAE3BO,KAEApP,IACAlJ,IACA9E,QAGJ1C,EAAG,qBAAqB,UACU,IAArBsN,EAAOwnB,WAChBpyB,OAGJ1C,EAAG,mBAAmB,KACpB0C,OAEF1C,EAAG,wBAAwB,KACzBwH,IACA9E,OAEF1C,EAAG,WAAW,KACZmqB,OAEFnqB,EAAG,kBAAkB,KACnB,IAAI,GACFpjB,GACE0wB,EAAOyL,WACPn8B,IACFA,EAAKgjD,EAAkBhjD,GACvBA,EAAGD,SAAQqjD,GAASA,EAAMh5C,UAAUsmB,EAAOiS,QAAU,SAAW,OAAOjS,EAAO7e,OAAOsqB,WAAW2mB,iBAGpG1/B,EAAG,eAAe,KAChB0C,OAEF1C,EAAG,SAAS,CAACqgC,EAAI/kD,KACf,MAAMk4C,EAAWl4C,EAAE2K,OACnB,IAAI,GACFrJ,GACE0wB,EAAOyL,WAEX,GADKtzB,MAAM+9B,QAAQ5mC,KAAKA,EAAK,CAACA,GAAIoY,QAAO7N,KAAaA,KAClDmmB,EAAO7e,OAAOsqB,WAAWn8B,IAAM0wB,EAAO7e,OAAOsqB,WAAWwmB,aAAe3iD,GAAMA,EAAGc,OAAS,IAAM81C,EAASxsC,UAAUQ,SAAS8lB,EAAO7e,OAAOsqB,WAAWqoB,aAAc,CACpK,GAAI9zB,EAAO2G,aAAe3G,EAAO2G,WAAWC,QAAUsf,IAAalmB,EAAO2G,WAAWC,QAAU5G,EAAO2G,WAAWE,QAAUqf,IAAalmB,EAAO2G,WAAWE,QAAS,OACnK,MAAMmsB,EAAW1jD,EAAG,GAAGoK,UAAUQ,SAAS8lB,EAAO7e,OAAOsqB,WAAW0mB,aAEjEjf,GADe,IAAb8f,EACG,iBAEA,kBAEP1jD,EAAGD,SAAQqjD,GAASA,EAAMh5C,UAAUkD,OAAOojB,EAAO7e,OAAOsqB,WAAW0mB,mBAGxE,MAaM3f,EAAU,KACdxS,EAAO1wB,GAAGoK,UAAUM,IAAIgmB,EAAO7e,OAAOsqB,WAAW+oB,yBACjD,IAAI,GACFllD,GACE0wB,EAAOyL,WACPn8B,IACFA,EAAKgjD,EAAkBhjD,GACvBA,EAAGD,SAAQqjD,GAASA,EAAMh5C,UAAUM,IAAIgmB,EAAO7e,OAAOsqB,WAAW+oB,4BAEnE3X,KAEFpmB,OAAOqc,OAAO9S,EAAOyL,WAAY,CAC/BgH,OAzBa,KACbzS,EAAO1wB,GAAGoK,UAAUC,OAAOqmB,EAAO7e,OAAOsqB,WAAW+oB,yBACpD,IAAI,GACFllD,GACE0wB,EAAOyL,WACPn8B,IACFA,EAAKgjD,EAAkBhjD,GACvBA,EAAGD,SAAQqjD,GAASA,EAAMh5C,UAAUC,OAAOqmB,EAAO7e,OAAOsqB,WAAW+oB,4BAEtEpxB,IACAlJ,IACA9E,KAeAod,QAAAA,EACAtY,OAAAA,EACA9E,OAAAA,EACAgO,KAAAA,EACAyZ,QAAAA,qKCjcW,SAAS4Z,GAAM,OAC5Bz2B,EAAM,aACNqW,EAAY,GACZ3jB,IAEA2jB,EAAa,CACX9O,OAAQ,CACNvH,OAAQ,KACR02B,sBAAsB,EACtBC,iBAAkB,EAClBC,sBAAuB,4BACvBC,qBAAsB,mBAG1B,IAAIplB,GAAc,EACdqlB,GAAgB,EAIpB,SAASC,IACP,MAAMC,EAAeh3B,EAAOuH,OAAOvH,OACnC,IAAKg3B,GAAgBA,EAAa5c,UAAW,OAC7C,MAAMkS,EAAe0K,EAAa1K,aAC5BE,EAAewK,EAAaxK,aAClC,GAAIA,GAAgBA,EAAa9yC,UAAUQ,SAAS8lB,EAAO7e,OAAOomB,OAAOqvB,uBAAwB,OACjG,GAAI,MAAOtK,EAAuD,OAClE,IAAID,EAEFA,EADE2K,EAAa71C,OAAOslB,KACPj8B,SAASwsD,EAAaxK,aAAax8C,aAAa,2BAA4B,IAE5Es8C,EAEbtsB,EAAO7e,OAAOslB,KAChBzG,EAAOwiB,YAAY6J,GAEnBrsB,EAAOyb,QAAQ4Q,GAGnB,SAASjpB,IACP,MACEmE,OAAQ0vB,GACNj3B,EAAO7e,OACX,GAAIswB,EAAa,OAAO,EACxBA,GAAc,EACd,MAAMylB,EAAcl3B,EAAO8O,YAC3B,GAAImoB,EAAaj3B,kBAAkBk3B,EACjCl3B,EAAOuH,OAAOvH,OAASi3B,EAAaj3B,OACpCvJ,OAAOqc,OAAO9S,EAAOuH,OAAOvH,OAAO6R,eAAgB,CACjDiD,qBAAqB,EACrBkL,qBAAqB,IAEvBvpB,OAAOqc,OAAO9S,EAAOuH,OAAOvH,OAAO7e,OAAQ,CACzC2zB,qBAAqB,EACrBkL,qBAAqB,IAEvBhgB,EAAOuH,OAAOvH,OAAO5K,cAChB,IAAI,QAAS6hC,EAAaj3B,QAAS,CACxC,MAAMm3B,EAAqB1gC,OAAOqc,OAAO,GAAImkB,EAAaj3B,QAC1DvJ,OAAOqc,OAAOqkB,EAAoB,CAChCriB,qBAAqB,EACrBkL,qBAAqB,IAEvBhgB,EAAOuH,OAAOvH,OAAS,IAAIk3B,EAAYC,GACvCL,GAAgB,EAIlB,OAFA92B,EAAOuH,OAAOvH,OAAO1wB,GAAGoK,UAAUM,IAAIgmB,EAAO7e,OAAOomB,OAAOsvB,sBAC3D72B,EAAOuH,OAAOvH,OAAOtN,GAAG,MAAOqkC,IACxB,EAET,SAAS3hC,EAAOg2B,GACd,MAAM4L,EAAeh3B,EAAOuH,OAAOvH,OACnC,IAAKg3B,GAAgBA,EAAa5c,UAAW,OAC7C,MAAM5T,EAAsD,SAAtCwwB,EAAa71C,OAAOqlB,cAA2BwwB,EAAazc,uBAAyByc,EAAa71C,OAAOqlB,cAG/H,IAAI4wB,EAAmB,EACvB,MAAMC,EAAmBr3B,EAAO7e,OAAOomB,OAAOqvB,sBAS9C,GARI52B,EAAO7e,OAAOqlB,cAAgB,IAAMxG,EAAO7e,OAAOimB,iBACpDgwB,EAAmBp3B,EAAO7e,OAAOqlB,eAE9BxG,EAAO7e,OAAOomB,OAAOmvB,uBACxBU,EAAmB,GAErBA,EAAmB3rD,KAAKy2B,MAAMk1B,GAC9BJ,EAAarjB,OAAOtkC,SAAQ4pC,GAAWA,EAAQv/B,UAAUC,OAAO09C,KAC5DL,EAAa71C,OAAOslB,MAAQuwB,EAAa71C,OAAOq6B,SAAWwb,EAAa71C,OAAOq6B,QAAQvJ,QACzF,IAAK,IAAI9hC,EAAI,EAAGA,EAAIinD,EAAkBjnD,GAAK,GACzC,QAAgB6mD,EAAa9d,SAAU,6BAA6BlZ,EAAOwR,UAAYrhC,OAAOd,SAAQ4pC,IACpGA,EAAQv/B,UAAUM,IAAIq9C,WAI1B,IAAK,IAAIlnD,EAAI,EAAGA,EAAIinD,EAAkBjnD,GAAK,EACrC6mD,EAAarjB,OAAO3T,EAAOwR,UAAYrhC,IACzC6mD,EAAarjB,OAAO3T,EAAOwR,UAAYrhC,GAAGuJ,UAAUM,IAAIq9C,GAI9D,MAAMV,EAAmB32B,EAAO7e,OAAOomB,OAAOovB,iBACxCW,EAAYX,IAAqBK,EAAa71C,OAAOslB,KAC3D,GAAIzG,EAAOwR,YAAcwlB,EAAaxlB,WAAa8lB,EAAW,CAC5D,MAAMC,EAAqBP,EAAajgB,YACxC,IAAIygB,EACAlxB,EACJ,GAAI0wB,EAAa71C,OAAOslB,KAAM,CAC5B,MAAMgxB,EAAiBT,EAAarjB,OAAOjsB,QAAOuxB,GAAWA,EAAQjpC,aAAa,6BAA+B,GAAGgwB,EAAOwR,cAAa,GACxIgmB,EAAiBR,EAAarjB,OAAOtmC,QAAQoqD,GAC7CnxB,EAAYtG,EAAO+W,YAAc/W,EAAOsrB,cAAgB,OAAS,YAEjEkM,EAAiBx3B,EAAOwR,UACxBlL,EAAYkxB,EAAiBx3B,EAAOsrB,cAAgB,OAAS,OAE3DgM,IACFE,GAAgC,SAAdlxB,EAAuBqwB,GAAoB,EAAIA,GAE/DK,EAAavF,sBAAwBuF,EAAavF,qBAAqBpkD,QAAQmqD,GAAkB,IAC/FR,EAAa71C,OAAOimB,eAEpBowB,EADEA,EAAiBD,EACFC,EAAiB/rD,KAAKy2B,MAAMsE,EAAgB,GAAK,EAEjDgxB,EAAiB/rD,KAAKy2B,MAAMsE,EAAgB,GAAK,EAE3DgxB,EAAiBD,GAAsBP,EAAa71C,OAAOqqB,eAGtEwrB,EAAavb,QAAQ+b,EAAgBpM,EAAU,OAAIpgD,KA7GzDg1B,EAAOuH,OAAS,CACdvH,OAAQ,MAgHVtN,EAAG,cAAc,KACf,MAAM,OACJ6U,GACEvH,EAAO7e,OACX,GAAKomB,GAAWA,EAAOvH,OACvB,GAA6B,iBAAlBuH,EAAOvH,QAAuBuH,EAAOvH,kBAAkB03B,YAAa,CAC7E,MAAMzqD,GAAW,UACX0qD,EAA0B,KAC9B,MAAMC,EAAyC,iBAAlBrwB,EAAOvH,OAAsB/yB,EAAS0D,cAAc42B,EAAOvH,QAAUuH,EAAOvH,OACzG,GAAI43B,GAAiBA,EAAc53B,OACjCuH,EAAOvH,OAAS43B,EAAc53B,OAC9BoD,IACAhO,GAAO,QACF,GAAIwiC,EAAe,CACxB,MAAMC,EAAiB7pD,IACrBu5B,EAAOvH,OAAShyB,EAAEuD,OAAO,GACzBqmD,EAAcp/C,oBAAoB,OAAQq/C,GAC1Cz0B,IACAhO,GAAO,GACPmS,EAAOvH,OAAO5K,SACd4K,EAAO5K,UAETwiC,EAAcvnD,iBAAiB,OAAQwnD,GAEzC,OAAOD,GAEHE,EAAyB,KACzB93B,EAAOoa,WACWud,KAEpBtnB,sBAAsBynB,IAG1BznB,sBAAsBynB,QAEtB10B,IACAhO,GAAO,MAGX1C,EAAG,4CAA4C,KAC7C0C,OAEF1C,EAAG,iBAAiB,CAACqgC,EAAIpG,KACvB,MAAMqK,EAAeh3B,EAAOuH,OAAOvH,OAC9Bg3B,IAAgBA,EAAa5c,WAClC4c,EAAanR,cAAc8G,MAE7Bj6B,EAAG,iBAAiB,KAClB,MAAMskC,EAAeh3B,EAAOuH,OAAOvH,OAC9Bg3B,IAAgBA,EAAa5c,WAC9B0c,GACFE,EAAana,aAGjBpmB,OAAOqc,OAAO9S,EAAOuH,OAAQ,CAC3BnE,KAAAA,EACAhO,OAAAA,wHCzLW,SAAS2iC,GAAK,OAC3B/3B,EAAM,aACNqW,EAAY,GACZ3jB,EAAE,KACFwgB,IAEA,MAAMv+B,GAAS,UACf0hC,EAAa,CACX/O,KAAM,CACJ2K,SAAS,EACT+lB,SAAU,EACV/mB,SAAU,EACVr0B,QAAQ,EACRq7C,eAAgB,wBAChBC,iBAAkB,yBAGtBl4B,EAAOsH,KAAO,CACZ2K,SAAS,GAEX,IAEIkmB,EACAC,EAHAC,EAAe,EACfC,GAAY,EAGhB,MAAMhgB,EAAU,GACVigB,EAAU,CACdC,QAAS,EACTC,QAAS,EACTxf,aAASjuC,EACT0tD,gBAAY1tD,EACZ2tD,iBAAa3tD,EACbowC,aAASpwC,EACT4tD,iBAAa5tD,EACbgtD,SAAU,GAENl5C,EAAQ,CACZ04B,eAAWxsC,EACXysC,aAASzsC,EACT2tC,cAAU3tC,EACV4tC,cAAU5tC,EACV6tD,UAAM7tD,EACN8tD,UAAM9tD,EACN+tD,UAAM/tD,EACNguD,UAAMhuD,EACNuO,WAAOvO,EACPkuB,YAAQluB,EACRytC,YAAQztC,EACR0tC,YAAQ1tC,EACRiuD,aAAc,GACdC,eAAgB,IAEZ/hB,EAAW,CACf7vB,OAAGtc,EACHgiD,OAAGhiD,EACHmuD,mBAAenuD,EACfouD,mBAAepuD,EACfquD,cAAUruD,GAEZ,IAAImrD,EAAQ,EAcZ,SAASmD,IACP,GAAIhhB,EAAQloC,OAAS,EAAG,OAAO,EAC/B,MAAMmpD,EAAKjhB,EAAQ,GAAGoM,MAChB8U,EAAKlhB,EAAQ,GAAGqM,MAChB8U,EAAKnhB,EAAQ,GAAGoM,MAChBgV,EAAKphB,EAAQ,GAAGqM,MAEtB,OADiBl5C,KAAKy5C,MAAMuU,EAAKF,IAAO,GAAKG,EAAKF,IAAO,GAc3D,SAASG,EAAiB3rD,GACxB,MAAMu+C,EAHCvsB,EAAOkc,UAAY,eAAiB,IAAIlc,EAAO7e,OAAOg4B,aAI7D,QAAInrC,EAAE2K,OAAOjC,QAAQ61C,IACjBvsB,EAAO2T,OAAOjsB,QAAOuxB,GAAWA,EAAQ/+B,SAASlM,EAAE2K,UAASvI,OAAS,EAW3E,SAASwpD,EAAe5rD,GAItB,GAHsB,UAAlBA,EAAEw1C,aACJlL,EAAQ4I,OAAO,EAAG5I,EAAQloC,SAEvBupD,EAAiB3rD,GAAI,OAC1B,MAAMmT,EAAS6e,EAAO7e,OAAOmmB,KAI7B,GAHA6wB,GAAqB,EACrBC,GAAmB,EACnB9f,EAAQ/nC,KAAKvC,KACTsqC,EAAQloC,OAAS,GAArB,CAKA,GAFA+nD,GAAqB,EACrBI,EAAQsB,WAAaP,KAChBf,EAAQtf,QAAS,CACpBsf,EAAQtf,QAAUjrC,EAAE2K,OAAOxB,QAAQ,IAAI6oB,EAAO7e,OAAOg4B,4BAChDof,EAAQtf,UAASsf,EAAQtf,QAAUjZ,EAAO2T,OAAO3T,EAAO+W,cAC7D,IAAIqE,EAAUmd,EAAQtf,QAAQtoC,cAAc,IAAIwQ,EAAO82C,kBAUvD,GATI7c,IACFA,EAAUA,EAAQljC,iBAAiB,kDAAkD,IAEvFqgD,EAAQnd,QAAUA,EAEhBmd,EAAQK,YADNxd,GACoB,QAAemd,EAAQnd,QAAS,IAAIj6B,EAAO82C,kBAAkB,QAE7DjtD,GAEnButD,EAAQK,YAEX,YADAL,EAAQnd,aAAUpwC,GAGpButD,EAAQP,SAAWO,EAAQK,YAAY5oD,aAAa,qBAAuBmR,EAAO62C,SAEpF,GAAIO,EAAQnd,QAAS,CACnB,MAAOod,EAASC,GA3DpB,WACE,GAAIngB,EAAQloC,OAAS,EAAG,MAAO,CAC7BkX,EAAG,KACH0lC,EAAG,MAEL,MAAM8M,EAAMvB,EAAQnd,QAAQjW,wBAC5B,MAAO,EAAEmT,EAAQ,GAAGoM,OAASpM,EAAQ,GAAGoM,MAAQpM,EAAQ,GAAGoM,OAAS,EAAIoV,EAAIxyC,GAAK+wC,GAAe/f,EAAQ,GAAGqM,OAASrM,EAAQ,GAAGqM,MAAQrM,EAAQ,GAAGqM,OAAS,EAAImV,EAAI9M,GAAKqL,GAqD3I0B,GAC3BxB,EAAQC,QAAUA,EAClBD,EAAQE,QAAUA,EAClBF,EAAQnd,QAAQt/B,MAAM8wC,mBAAqB,MAE7C0L,GAAY,GAEd,SAAS0B,EAAgBhsD,GACvB,IAAK2rD,EAAiB3rD,GAAI,OAC1B,MAAMmT,EAAS6e,EAAO7e,OAAOmmB,KACvBA,EAAOtH,EAAOsH,KACd2b,EAAe3K,EAAQ4K,WAAUC,GAAYA,EAASC,YAAcp1C,EAAEo1C,YACxEH,GAAgB,IAAG3K,EAAQ2K,GAAgBj1C,GAC3CsqC,EAAQloC,OAAS,IAGrBgoD,GAAmB,EACnBG,EAAQ0B,UAAYX,IACff,EAAQnd,UAGb9T,EAAK6uB,MAAQoC,EAAQ0B,UAAY1B,EAAQsB,WAAaxB,EAClD/wB,EAAK6uB,MAAQoC,EAAQP,WACvB1wB,EAAK6uB,MAAQoC,EAAQP,SAAW,GAAK1wB,EAAK6uB,MAAQoC,EAAQP,SAAW,IAAM,IAEzE1wB,EAAK6uB,MAAQh1C,EAAO8vB,WACtB3J,EAAK6uB,MAAQh1C,EAAO8vB,SAAW,GAAK9vB,EAAO8vB,SAAW3J,EAAK6uB,MAAQ,IAAM,IAE3EoC,EAAQnd,QAAQt/B,MAAMowB,UAAY,4BAA4B5E,EAAK6uB,WAErE,SAAS+D,EAAalsD,GACpB,IAAK2rD,EAAiB3rD,GAAI,OAC1B,GAAsB,UAAlBA,EAAEw1C,aAAsC,eAAXx1C,EAAE/D,KAAuB,OAC1D,MAAMkX,EAAS6e,EAAO7e,OAAOmmB,KACvBA,EAAOtH,EAAOsH,KACd2b,EAAe3K,EAAQ4K,WAAUC,GAAYA,EAASC,YAAcp1C,EAAEo1C,YACxEH,GAAgB,GAAG3K,EAAQ4I,OAAO+B,EAAc,GAC/CkV,GAAuBC,IAG5BD,GAAqB,EACrBC,GAAmB,EACdG,EAAQnd,UACb9T,EAAK6uB,MAAQ1qD,KAAKO,IAAIP,KAAKC,IAAI47B,EAAK6uB,MAAOoC,EAAQP,UAAW72C,EAAO8vB,UACrEsnB,EAAQnd,QAAQt/B,MAAM8wC,mBAAqB,GAAG5sB,EAAO7e,OAAOulB,UAC5D6xB,EAAQnd,QAAQt/B,MAAMowB,UAAY,4BAA4B5E,EAAK6uB,SACnEkC,EAAe/wB,EAAK6uB,MACpBmC,GAAY,EACRhxB,EAAK6uB,MAAQ,GAAKoC,EAAQtf,QAC5Bsf,EAAQtf,QAAQv/B,UAAUM,IAAI,GAAGmH,EAAO+2C,oBAC/B5wB,EAAK6uB,OAAS,GAAKoC,EAAQtf,SACpCsf,EAAQtf,QAAQv/B,UAAUC,OAAO,GAAGwH,EAAO+2C,oBAE1B,IAAf5wB,EAAK6uB,QACPoC,EAAQC,QAAU,EAClBD,EAAQE,QAAU,EAClBF,EAAQtf,aAAUjuC,KAatB,SAAS62C,EAAY7zC,GACnB,IAAK2rD,EAAiB3rD,KAhHxB,SAAkCA,GAChC,MAAM69B,EAAW,IAAI7L,EAAO7e,OAAOmmB,KAAK2wB,iBACxC,QAAIjqD,EAAE2K,OAAOjC,QAAQm1B,IACjB,IAAI7L,EAAO1wB,GAAG4I,iBAAiB2zB,IAAWnkB,QAAOipB,GAAeA,EAAYz2B,SAASlM,EAAE2K,UAASvI,OAAS,EA6GhF+pD,CAAyBnsD,GAAI,OAC1D,MAAMs5B,EAAOtH,EAAOsH,KACpB,IAAKixB,EAAQnd,QAAS,OACtB,IAAKt8B,EAAM04B,YAAc+gB,EAAQtf,QAAS,OACrCn6B,EAAM24B,UACT34B,EAAMvF,MAAQg/C,EAAQnd,QAAQiH,YAC9BvjC,EAAMoa,OAASq/B,EAAQnd,QAAQyS,aAC/B/uC,EAAM25B,QAAS,QAAa8f,EAAQK,YAAa,MAAQ,EACzD95C,EAAM45B,QAAS,QAAa6f,EAAQK,YAAa,MAAQ,EACzDL,EAAQG,WAAaH,EAAQtf,QAAQoJ,YACrCkW,EAAQI,YAAcJ,EAAQtf,QAAQ4U,aACtC0K,EAAQK,YAAY98C,MAAM8wC,mBAAqB,OAGjD,MAAMwN,EAAct7C,EAAMvF,MAAQ+tB,EAAK6uB,MACjCkE,EAAev7C,EAAMoa,OAASoO,EAAK6uB,MACzC,GAAIiE,EAAc7B,EAAQG,YAAc2B,EAAe9B,EAAQI,YAAa,OAW5E,GAVA75C,EAAM+5C,KAAOptD,KAAKC,IAAI6sD,EAAQG,WAAa,EAAI0B,EAAc,EAAG,GAChEt7C,EAAMi6C,MAAQj6C,EAAM+5C,KACpB/5C,EAAMg6C,KAAOrtD,KAAKC,IAAI6sD,EAAQI,YAAc,EAAI0B,EAAe,EAAG,GAClEv7C,EAAMk6C,MAAQl6C,EAAMg6C,KACpBh6C,EAAMo6C,eAAe5xC,EAAIgxB,EAAQloC,OAAS,EAAIkoC,EAAQ,GAAGoM,MAAQ12C,EAAE02C,MACnE5lC,EAAMo6C,eAAelM,EAAI1U,EAAQloC,OAAS,EAAIkoC,EAAQ,GAAGqM,MAAQ32C,EAAE22C,MAC/Cl5C,KAAKO,IAAIP,KAAK+4C,IAAI1lC,EAAMo6C,eAAe5xC,EAAIxI,EAAMm6C,aAAa3xC,GAAI7b,KAAK+4C,IAAI1lC,EAAMo6C,eAAelM,EAAIluC,EAAMm6C,aAAajM,IACzH,IAChBhtB,EAAOuY,YAAa,IAEjBz5B,EAAM24B,UAAY6gB,EAAW,CAChC,GAAIt4B,EAAO6W,iBAAmBprC,KAAKy2B,MAAMpjB,EAAM+5C,QAAUptD,KAAKy2B,MAAMpjB,EAAM25B,SAAW35B,EAAMo6C,eAAe5xC,EAAIxI,EAAMm6C,aAAa3xC,GAAK7b,KAAKy2B,MAAMpjB,EAAMi6C,QAAUttD,KAAKy2B,MAAMpjB,EAAM25B,SAAW35B,EAAMo6C,eAAe5xC,EAAIxI,EAAMm6C,aAAa3xC,GAEvO,YADAxI,EAAM04B,WAAY,GAGpB,IAAKxX,EAAO6W,iBAAmBprC,KAAKy2B,MAAMpjB,EAAMg6C,QAAUrtD,KAAKy2B,MAAMpjB,EAAM45B,SAAW55B,EAAMo6C,eAAelM,EAAIluC,EAAMm6C,aAAajM,GAAKvhD,KAAKy2B,MAAMpjB,EAAMk6C,QAAUvtD,KAAKy2B,MAAMpjB,EAAM45B,SAAW55B,EAAMo6C,eAAelM,EAAIluC,EAAMm6C,aAAajM,GAExO,YADAluC,EAAM04B,WAAY,GAIlBxpC,EAAE0J,YACJ1J,EAAEyD,iBAEJzD,EAAEk0C,kBACFpjC,EAAM24B,SAAU,EAChB,MAAM6iB,GAAchzB,EAAK6uB,MAAQkC,IAAiBE,EAAQP,SAAWh4B,EAAO7e,OAAOmmB,KAAK2J,WAClF,QACJunB,EAAO,QACPC,GACEF,EACJz5C,EAAM65B,SAAW75B,EAAMo6C,eAAe5xC,EAAIxI,EAAMm6C,aAAa3xC,EAAIxI,EAAM25B,OAAS6hB,GAAcx7C,EAAMvF,MAAkB,EAAVi/C,GAC5G15C,EAAM85B,SAAW95B,EAAMo6C,eAAelM,EAAIluC,EAAMm6C,aAAajM,EAAIluC,EAAM45B,OAAS4hB,GAAcx7C,EAAMoa,OAAmB,EAAVu/B,GACzG35C,EAAM65B,SAAW75B,EAAM+5C,OACzB/5C,EAAM65B,SAAW75B,EAAM+5C,KAAO,GAAK/5C,EAAM+5C,KAAO/5C,EAAM65B,SAAW,IAAM,IAErE75B,EAAM65B,SAAW75B,EAAMi6C,OACzBj6C,EAAM65B,SAAW75B,EAAMi6C,KAAO,GAAKj6C,EAAM65B,SAAW75B,EAAMi6C,KAAO,IAAM,IAErEj6C,EAAM85B,SAAW95B,EAAMg6C,OACzBh6C,EAAM85B,SAAW95B,EAAMg6C,KAAO,GAAKh6C,EAAMg6C,KAAOh6C,EAAM85B,SAAW,IAAM,IAErE95B,EAAM85B,SAAW95B,EAAMk6C,OACzBl6C,EAAM85B,SAAW95B,EAAMk6C,KAAO,GAAKl6C,EAAM85B,SAAW95B,EAAMk6C,KAAO,IAAM,IAIpE7hB,EAASgiB,gBAAehiB,EAASgiB,cAAgBr6C,EAAMo6C,eAAe5xC,GACtE6vB,EAASiiB,gBAAejiB,EAASiiB,cAAgBt6C,EAAMo6C,eAAelM,GACtE7V,EAASkiB,WAAUliB,EAASkiB,SAAW1uD,KAAKD,OACjDysC,EAAS7vB,GAAKxI,EAAMo6C,eAAe5xC,EAAI6vB,EAASgiB,gBAAkBxuD,KAAKD,MAAQysC,EAASkiB,UAAY,EACpGliB,EAAS6V,GAAKluC,EAAMo6C,eAAelM,EAAI7V,EAASiiB,gBAAkBzuD,KAAKD,MAAQysC,EAASkiB,UAAY,EAChG5tD,KAAK+4C,IAAI1lC,EAAMo6C,eAAe5xC,EAAI6vB,EAASgiB,eAAiB,IAAGhiB,EAAS7vB,EAAI,GAC5E7b,KAAK+4C,IAAI1lC,EAAMo6C,eAAelM,EAAI7V,EAASiiB,eAAiB,IAAGjiB,EAAS6V,EAAI,GAChF7V,EAASgiB,cAAgBr6C,EAAMo6C,eAAe5xC,EAC9C6vB,EAASiiB,cAAgBt6C,EAAMo6C,eAAelM,EAC9C7V,EAASkiB,SAAW1uD,KAAKD,MACzB6tD,EAAQK,YAAY98C,MAAMowB,UAAY,eAAeptB,EAAM65B,eAAe75B,EAAM85B,gBAqClF,SAAS2hB,IACP,MAAMjzB,EAAOtH,EAAOsH,KAChBixB,EAAQtf,SAAWjZ,EAAO+W,cAAgB/W,EAAO2T,OAAOtmC,QAAQkrD,EAAQtf,WACtEsf,EAAQnd,UACVmd,EAAQnd,QAAQt/B,MAAMowB,UAAY,+BAEhCqsB,EAAQK,cACVL,EAAQK,YAAY98C,MAAMowB,UAAY,sBAExCqsB,EAAQtf,QAAQv/B,UAAUC,OAAO,GAAGqmB,EAAO7e,OAAOmmB,KAAK4wB,oBACvD5wB,EAAK6uB,MAAQ,EACbkC,EAAe,EACfE,EAAQtf,aAAUjuC,EAClButD,EAAQnd,aAAUpwC,EAClButD,EAAQK,iBAAc5tD,EACtButD,EAAQC,QAAU,EAClBD,EAAQE,QAAU,GAGtB,SAAS+B,EAAOxsD,GACd,MAAMs5B,EAAOtH,EAAOsH,KACdnmB,EAAS6e,EAAO7e,OAAOmmB,KAC7B,IAAKixB,EAAQtf,QAAS,CAChBjrC,GAAKA,EAAE2K,SACT4/C,EAAQtf,QAAUjrC,EAAE2K,OAAOxB,QAAQ,IAAI6oB,EAAO7e,OAAOg4B,6BAElDof,EAAQtf,UACPjZ,EAAO7e,OAAOq6B,SAAWxb,EAAO7e,OAAOq6B,QAAQvJ,SAAWjS,EAAOwb,QACnE+c,EAAQtf,SAAU,QAAgBjZ,EAAOkZ,SAAU,IAAIlZ,EAAO7e,OAAO+7B,oBAAoB,GAEzFqb,EAAQtf,QAAUjZ,EAAO2T,OAAO3T,EAAO+W,cAG3C,IAAIqE,EAAUmd,EAAQtf,QAAQtoC,cAAc,IAAIwQ,EAAO82C,kBACnD7c,IACFA,EAAUA,EAAQljC,iBAAiB,kDAAkD,IAEvFqgD,EAAQnd,QAAUA,EAEhBmd,EAAQK,YADNxd,GACoB,QAAemd,EAAQnd,QAAS,IAAIj6B,EAAO82C,kBAAkB,QAE7DjtD,EAG1B,IAAKutD,EAAQnd,UAAYmd,EAAQK,YAAa,OAM9C,IAAI6B,EACAC,EACAC,EACAC,EACA5V,EACAC,EACA4V,EACAC,EACAC,EACAC,EACAZ,EACAC,EACAY,EACAC,EACAC,EACAC,EACA1C,EACAC,EAtBA34B,EAAO7e,OAAOolB,UAChBvG,EAAOqc,UAAUvgC,MAAMu/C,SAAW,SAClCr7B,EAAOqc,UAAUvgC,MAAMw/C,YAAc,QAEvC/C,EAAQtf,QAAQv/B,UAAUM,IAAI,GAAGmH,EAAO+2C,yBAmBJ,IAAzBp5C,EAAMm6C,aAAa3xC,GAAqBtZ,GACjDysD,EAASzsD,EAAE02C,MACXgW,EAAS1sD,EAAE22C,QAEX8V,EAAS37C,EAAMm6C,aAAa3xC,EAC5BozC,EAAS57C,EAAMm6C,aAAajM,GAE9B,MAAMuO,EAA8B,iBAANvtD,EAAiBA,EAAI,KAC9B,IAAjBqqD,GAAsBkD,IACxBd,OAASzvD,EACT0vD,OAAS1vD,GAEXs8B,EAAK6uB,MAAQoF,GAAkBhD,EAAQK,YAAY5oD,aAAa,qBAAuBmR,EAAO62C,SAC9FK,EAAekD,GAAkBhD,EAAQK,YAAY5oD,aAAa,qBAAuBmR,EAAO62C,UAC5FhqD,GAAwB,IAAjBqqD,GAAsBkD,GA8B/BV,EAAa,EACbC,EAAa,IA9BbpC,EAAaH,EAAQtf,QAAQoJ,YAC7BsW,EAAcJ,EAAQtf,QAAQ4U,aAC9B8M,GAAU,QAAcpC,EAAQtf,SAASuiB,KAAO7mD,EAAO8mD,QACvDb,GAAU,QAAcrC,EAAQtf,SAASl9B,IAAMpH,EAAO+mD,QACtD1W,EAAQ2V,EAAUjC,EAAa,EAAI+B,EACnCxV,EAAQ2V,EAAUjC,EAAc,EAAI+B,EACpCK,EAAaxC,EAAQnd,QAAQiH,YAC7B2Y,EAAczC,EAAQnd,QAAQyS,aAC9BuM,EAAcW,EAAazzB,EAAK6uB,MAChCkE,EAAeW,EAAc1zB,EAAK6uB,MAClC8E,EAAgBxvD,KAAKC,IAAIgtD,EAAa,EAAI0B,EAAc,EAAG,GAC3Dc,EAAgBzvD,KAAKC,IAAIitD,EAAc,EAAI0B,EAAe,EAAG,GAC7Dc,GAAiBF,EACjBG,GAAiBF,EACjBL,EAAa7V,EAAQ1d,EAAK6uB,MAC1B2E,EAAa7V,EAAQ3d,EAAK6uB,MACtB0E,EAAaI,IACfJ,EAAaI,GAEXJ,EAAaM,IACfN,EAAaM,GAEXL,EAAaI,IACfJ,EAAaI,GAEXJ,EAAaM,IACfN,EAAaM,IAMbG,GAAiC,IAAfj0B,EAAK6uB,QACzBoC,EAAQC,QAAU,EAClBD,EAAQE,QAAU,GAEpBF,EAAQK,YAAY98C,MAAM8wC,mBAAqB,QAC/C2L,EAAQK,YAAY98C,MAAMowB,UAAY,eAAe2uB,QAAiBC,SACtEvC,EAAQnd,QAAQt/B,MAAM8wC,mBAAqB,QAC3C2L,EAAQnd,QAAQt/B,MAAMowB,UAAY,4BAA4B5E,EAAK6uB,SAErE,SAASwF,IACP,MAAMr0B,EAAOtH,EAAOsH,KACdnmB,EAAS6e,EAAO7e,OAAOmmB,KAC7B,IAAKixB,EAAQtf,QAAS,CAChBjZ,EAAO7e,OAAOq6B,SAAWxb,EAAO7e,OAAOq6B,QAAQvJ,SAAWjS,EAAOwb,QACnE+c,EAAQtf,SAAU,QAAgBjZ,EAAOkZ,SAAU,IAAIlZ,EAAO7e,OAAO+7B,oBAAoB,GAEzFqb,EAAQtf,QAAUjZ,EAAO2T,OAAO3T,EAAO+W,aAEzC,IAAIqE,EAAUmd,EAAQtf,QAAQtoC,cAAc,IAAIwQ,EAAO82C,kBACnD7c,IACFA,EAAUA,EAAQljC,iBAAiB,kDAAkD,IAEvFqgD,EAAQnd,QAAUA,EAEhBmd,EAAQK,YADNxd,GACoB,QAAemd,EAAQnd,QAAS,IAAIj6B,EAAO82C,kBAAkB,QAE7DjtD,EAGrButD,EAAQnd,SAAYmd,EAAQK,cAC7B54B,EAAO7e,OAAOolB,UAChBvG,EAAOqc,UAAUvgC,MAAMu/C,SAAW,GAClCr7B,EAAOqc,UAAUvgC,MAAMw/C,YAAc,IAEvCh0B,EAAK6uB,MAAQ,EACbkC,EAAe,EACfE,EAAQK,YAAY98C,MAAM8wC,mBAAqB,QAC/C2L,EAAQK,YAAY98C,MAAMowB,UAAY,qBACtCqsB,EAAQnd,QAAQt/B,MAAM8wC,mBAAqB,QAC3C2L,EAAQnd,QAAQt/B,MAAMowB,UAAY,8BAClCqsB,EAAQtf,QAAQv/B,UAAUC,OAAO,GAAGwH,EAAO+2C,oBAC3CK,EAAQtf,aAAUjuC,EAClButD,EAAQC,QAAU,EAClBD,EAAQE,QAAU,GAIpB,SAASmD,EAAW5tD,GAClB,MAAMs5B,EAAOtH,EAAOsH,KAChBA,EAAK6uB,OAAwB,IAAf7uB,EAAK6uB,MAErBwF,IAGAnB,EAAOxsD,GAGX,SAAS6tD,IASP,MAAO,CACLC,kBATsB97B,EAAO7e,OAAOq/B,kBAAmB,CACvDoB,SAAS,EACTJ,SAAS,GAQTua,2BANgC/7B,EAAO7e,OAAOq/B,kBAAmB,CACjEoB,SAAS,EACTJ,SAAS,IASb,SAAS/O,IACP,MAAMnL,EAAOtH,EAAOsH,KACpB,GAAIA,EAAK2K,QAAS,OAClB3K,EAAK2K,SAAU,EACf,MAAM,gBACJ6pB,EAAe,0BACfC,GACEF,IAGJ77B,EAAOqc,UAAUhsC,iBAAiB,cAAeupD,EAAgBkC,GACjE97B,EAAOqc,UAAUhsC,iBAAiB,cAAe2pD,EAAiB+B,GAClE,CAAC,YAAa,gBAAiB,cAAc1sD,SAAQsnC,IACnD3W,EAAOqc,UAAUhsC,iBAAiBsmC,EAAWujB,EAAc4B,MAI7D97B,EAAOqc,UAAUhsC,iBAAiB,cAAewxC,EAAaka,GAEhE,SAASvpB,IACP,MAAMlL,EAAOtH,EAAOsH,KACpB,IAAKA,EAAK2K,QAAS,OACnB3K,EAAK2K,SAAU,EACf,MAAM,gBACJ6pB,EAAe,0BACfC,GACEF,IAGJ77B,EAAOqc,UAAU7jC,oBAAoB,cAAeohD,EAAgBkC,GACpE97B,EAAOqc,UAAU7jC,oBAAoB,cAAewhD,EAAiB+B,GACrE,CAAC,YAAa,gBAAiB,cAAc1sD,SAAQsnC,IACnD3W,EAAOqc,UAAU7jC,oBAAoBm+B,EAAWujB,EAAc4B,MAIhE97B,EAAOqc,UAAU7jC,oBAAoB,cAAeqpC,EAAaka,GArenEtlC,OAAOulC,eAAeh8B,EAAOsH,KAAM,QAAS,CAC1C20B,IAAG,IACM9F,EAEThyC,IAAIna,GACF,GAAImsD,IAAUnsD,EAAO,CACnB,MAAMoxC,EAAUmd,EAAQnd,QAClBnC,EAAUsf,EAAQtf,QACxB/F,EAAK,aAAclpC,EAAOoxC,EAASnC,GAErCkd,EAAQnsD,KA6dZ0oB,EAAG,QAAQ,KACLsN,EAAO7e,OAAOmmB,KAAK2K,SACrBQ,OAGJ/f,EAAG,WAAW,KACZ8f,OAEF9f,EAAG,cAAc,CAACqgC,EAAI/kD,KACfgyB,EAAOsH,KAAK2K,SApWnB,SAAsBjkC,GACpB,MAAMqmC,EAASrU,EAAOqU,OACtB,IAAKkkB,EAAQnd,QAAS,OACtB,GAAIt8B,EAAM04B,UAAW,OACjBnD,EAAOO,SAAW5mC,EAAE0J,YAAY1J,EAAEyD,iBACtCqN,EAAM04B,WAAY,EAClB,MAAMpjC,EAAQkkC,EAAQloC,OAAS,EAAIkoC,EAAQ,GAAKtqC,EAChD8Q,EAAMm6C,aAAa3xC,EAAIlT,EAAMswC,MAC7B5lC,EAAMm6C,aAAajM,EAAI54C,EAAMuwC,MA6V7BhD,CAAa3zC,MAEf0kB,EAAG,YAAY,CAACqgC,EAAI/kD,KACbgyB,EAAOsH,KAAK2K,SAlRnB,WACE,MAAM3K,EAAOtH,EAAOsH,KACpB,IAAKixB,EAAQnd,QAAS,OACtB,IAAKt8B,EAAM04B,YAAc14B,EAAM24B,QAG7B,OAFA34B,EAAM04B,WAAY,OAClB14B,EAAM24B,SAAU,GAGlB34B,EAAM04B,WAAY,EAClB14B,EAAM24B,SAAU,EAChB,IAAIykB,EAAoB,IACpBC,EAAoB,IACxB,MAAMC,EAAoBjlB,EAAS7vB,EAAI40C,EACjCG,EAAev9C,EAAM65B,SAAWyjB,EAChCE,EAAoBnlB,EAAS6V,EAAImP,EACjCI,EAAez9C,EAAM85B,SAAW0jB,EAGnB,IAAfnlB,EAAS7vB,IAAS40C,EAAoBzwD,KAAK+4C,KAAK6X,EAAev9C,EAAM65B,UAAYxB,EAAS7vB,IAC3E,IAAf6vB,EAAS6V,IAASmP,EAAoB1wD,KAAK+4C,KAAK+X,EAAez9C,EAAM85B,UAAYzB,EAAS6V,IAC9F,MAAMwP,EAAmB/wD,KAAKO,IAAIkwD,EAAmBC,GACrDr9C,EAAM65B,SAAW0jB,EACjBv9C,EAAM85B,SAAW2jB,EAEjB,MAAMnC,EAAct7C,EAAMvF,MAAQ+tB,EAAK6uB,MACjCkE,EAAev7C,EAAMoa,OAASoO,EAAK6uB,MACzCr3C,EAAM+5C,KAAOptD,KAAKC,IAAI6sD,EAAQG,WAAa,EAAI0B,EAAc,EAAG,GAChEt7C,EAAMi6C,MAAQj6C,EAAM+5C,KACpB/5C,EAAMg6C,KAAOrtD,KAAKC,IAAI6sD,EAAQI,YAAc,EAAI0B,EAAe,EAAG,GAClEv7C,EAAMk6C,MAAQl6C,EAAMg6C,KACpBh6C,EAAM65B,SAAWltC,KAAKO,IAAIP,KAAKC,IAAIoT,EAAM65B,SAAU75B,EAAMi6C,MAAOj6C,EAAM+5C,MACtE/5C,EAAM85B,SAAWntC,KAAKO,IAAIP,KAAKC,IAAIoT,EAAM85B,SAAU95B,EAAMk6C,MAAOl6C,EAAMg6C,MACtEP,EAAQK,YAAY98C,MAAM8wC,mBAAqB,GAAG4P,MAClDjE,EAAQK,YAAY98C,MAAMowB,UAAY,eAAeptB,EAAM65B,eAAe75B,EAAM85B,gBAkPhFkJ,MAEFpvB,EAAG,aAAa,CAACqgC,EAAI/kD,MACdgyB,EAAOoX,WAAapX,EAAO7e,OAAOmmB,KAAK2K,SAAWjS,EAAOsH,KAAK2K,SAAWjS,EAAO7e,OAAOmmB,KAAK1qB,QAC/Fg/C,EAAW5tD,MAGf0kB,EAAG,iBAAiB,KACdsN,EAAOsH,KAAK2K,SAAWjS,EAAO7e,OAAOmmB,KAAK2K,SAC5CsoB,OAGJ7nC,EAAG,eAAe,KACZsN,EAAOsH,KAAK2K,SAAWjS,EAAO7e,OAAOmmB,KAAK2K,SAAWjS,EAAO7e,OAAOolB,SACrEg0B,OAGJ9jC,OAAOqc,OAAO9S,EAAOsH,KAAM,CACzBmL,OAAAA,EACAD,QAAAA,EACAiqB,GAAIjC,EACJkC,IAAKf,EACL/+C,OAAQg/C,kCCxkBG,SAASe,EAAkBpnB,EAAU,IAClD,MAAO,IAAIA,EAAQ/lC,OAAO8F,QAAQ,eAAgB,QACjDA,QAAQ,KAAM,oFCDF,SAASsnD,EAA0B58B,EAAQ6R,EAAgB1wB,EAAQ07C,GAehF,OAdI78B,EAAO7e,OAAOo7B,gBAChB9lB,OAAOC,KAAKmmC,GAAYxtD,SAAQE,IAC9B,IAAK4R,EAAO5R,KAAwB,IAAhB4R,EAAOsnC,KAAe,CACxC,IAAI5uC,GAAU,QAAgBmmB,EAAO1wB,GAAI,IAAIutD,EAAWttD,MAAQ,GAC3DsK,IACHA,GAAU,QAAc,MAAOgjD,EAAWttD,IAC1CsK,EAAQsiB,UAAY0gC,EAAWttD,GAC/BywB,EAAO1wB,GAAG0E,OAAO6F,IAEnBsH,EAAO5R,GAAOsK,EACdg4B,EAAetiC,GAAOsK,MAIrBsH,8KCfT,IAAI20B,EAqBJ,SAASgnB,IAIP,OAHKhnB,IACHA,EAtBJ,WACE,MAAMnhC,GAAS,UACf,IAAIooD,GAAqB,EACzB,SAASzZ,IACP,MAAM0Z,EAAKroD,EAAO+1B,UAAUC,UAAUp2B,cACtC,OAAOyoD,EAAG3vD,QAAQ,WAAa,GAAK2vD,EAAG3vD,QAAQ,UAAY,GAAK2vD,EAAG3vD,QAAQ,WAAa,EAE1F,GAAIi2C,IAAY,CACd,MAAM0Z,EAAKxhC,OAAO7mB,EAAO+1B,UAAUC,WACnC,GAAIqyB,EAAG3Z,SAAS,YAAa,CAC3B,MAAO4Z,EAAOC,GAASF,EAAG7vD,MAAM,YAAY,GAAGA,MAAM,KAAK,GAAGA,MAAM,KAAKka,KAAI81C,GAAOx9C,OAAOw9C,KAC1FJ,EAAqBE,EAAQ,IAAgB,KAAVA,GAAgBC,EAAQ,GAG/D,MAAO,CACL5Z,SAAUyZ,GAAsBzZ,IAChCyZ,mBAAAA,EACAxZ,UAAW,+CAA+C9hC,KAAK9M,EAAO+1B,UAAUC,YAKtEyyB,IAELtnB,yECxBT,IAAIunB,EA0CJ,SAASC,EAAUC,EAAY,IAI7B,OAHKF,IACHA,EA3CJ,UAAoB,UAClB1yB,GACE,IACF,MAAMkL,GAAU,SACVlhC,GAAS,UACT6oD,EAAW7oD,EAAO+1B,UAAU8yB,SAC5BR,EAAKryB,GAAah2B,EAAO+1B,UAAUC,UACnC0J,EAAS,CACbQ,KAAK,EACLD,SAAS,GAEL6oB,EAAc9oD,EAAO2E,OAAOC,MAC5BmkD,EAAe/oD,EAAO2E,OAAO4f,OAC7B0b,EAAUooB,EAAGrlC,MAAM,+BACzB,IAAIgmC,EAAOX,EAAGrlC,MAAM,wBACpB,MAAMimC,EAAOZ,EAAGrlC,MAAM,2BAChBkmC,GAAUF,GAAQX,EAAGrlC,MAAM,8BAC3BmmC,EAAuB,UAAbN,EAChB,IAAIO,EAAqB,aAAbP,EAqBZ,OAjBKG,GAAQI,GAASloB,EAAQmoB,OADV,CAAC,YAAa,YAAa,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YACxG3wD,QAAQ,GAAGowD,KAAeC,MAAmB,IAC9FC,EAAOX,EAAGrlC,MAAM,uBACXgmC,IAAMA,EAAO,CAAC,EAAG,EAAG,WACzBI,GAAQ,GAINnpB,IAAYkpB,IACdzpB,EAAO4pB,GAAK,UACZ5pB,EAAOO,SAAU,IAEf+oB,GAAQE,GAAUD,KACpBvpB,EAAO4pB,GAAK,MACZ5pB,EAAOQ,KAAM,GAIRR,EAIU6pB,CAAWX,IAErBF,+DC/CT,IAAIxnB,EASJ,SAASsoB,IAIP,OAHKtoB,IACHA,EAVJ,WACE,MAAMlhC,GAAS,UACT1H,GAAW,UACjB,MAAO,CACL++C,aAAc/+C,EAASsL,iBAAmBtL,EAASsL,gBAAgBuD,OAAS,mBAAoB7O,EAASsL,gBAAgBuD,MACzHkiD,SAAU,iBAAkBrpD,GAAUA,EAAOypD,eAAiBnxD,aAAoB0H,EAAOypD,gBAK/EC,IAELxoB,yDCdF,MAAMyoB,EAAuB,CAACt+B,EAAQob,KAC3C,IAAKpb,GAAUA,EAAOoa,YAAcpa,EAAO7e,OAAQ,OACnD,MACM83B,EAAUmC,EAAQjkC,QADI6oB,EAAOkc,UAAY,eAAiB,IAAIlc,EAAO7e,OAAOg4B,cAElF,GAAIF,EAAS,CACX,MAAMslB,EAAStlB,EAAQtoC,cAAc,IAAIqvB,EAAO7e,OAAOu/B,sBACnD6d,GAAQA,EAAO5kD,WAGjB6kD,EAAS,CAACx+B,EAAQlnB,KACtB,IAAKknB,EAAO2T,OAAO76B,GAAQ,OAC3B,MAAMsiC,EAAUpb,EAAO2T,OAAO76B,GAAOnI,cAAc,oBAC/CyqC,GAASA,EAAQ9jC,gBAAgB,YAE1BmnD,EAAUz+B,IACrB,IAAKA,GAAUA,EAAOoa,YAAcpa,EAAO7e,OAAQ,OACnD,IAAIiQ,EAAS4O,EAAO7e,OAAOw/B,oBAC3B,MAAM1hC,EAAM+gB,EAAO2T,OAAOvjC,OAC1B,IAAK6O,IAAQmS,GAAUA,EAAS,EAAG,OACnCA,EAAS3lB,KAAKC,IAAI0lB,EAAQnS,GAC1B,MAAMunB,EAAgD,SAAhCxG,EAAO7e,OAAOqlB,cAA2BxG,EAAOua,uBAAyB9uC,KAAKw6C,KAAKjmB,EAAO7e,OAAOqlB,eACjHuQ,EAAc/W,EAAO+W,YAC3B,GAAI/W,EAAO7e,OAAOmwB,MAAQtR,EAAO7e,OAAOmwB,KAAKC,KAAO,EAAG,CACrD,MAAMmtB,EAAe3nB,EACf4nB,EAAiB,CAACD,EAAettC,GASvC,OARAutC,EAAepuD,QAAQ4H,MAAMymD,KAAK,CAChCxuD,OAAQghB,IACP/J,KAAI,CAACopC,EAAGtgD,IACFuuD,EAAel4B,EAAgBr2B,UAExC6vB,EAAO2T,OAAOtkC,SAAQ,CAAC4pC,EAAS9oC,KAC1BwuD,EAAetb,SAASpK,EAAQ4lB,SAASL,EAAOx+B,EAAQ7vB,MAIhE,MAAM2uD,EAAuB/nB,EAAcvQ,EAAgB,EAC3D,GAAIxG,EAAO7e,OAAOg/B,QAAUngB,EAAO7e,OAAOslB,KACxC,IAAK,IAAIt2B,EAAI4mC,EAAc3lB,EAAQjhB,GAAK2uD,EAAuB1tC,EAAQjhB,GAAK,EAAG,CAC7E,MAAMqhC,GAAarhC,EAAI8O,EAAMA,GAAOA,GAChCuyB,EAAYuF,GAAevF,EAAYstB,IAAsBN,EAAOx+B,EAAQwR,QAGlF,IAAK,IAAIrhC,EAAI1E,KAAKO,IAAI+qC,EAAc3lB,EAAQ,GAAIjhB,GAAK1E,KAAKC,IAAIozD,EAAuB1tC,EAAQnS,EAAM,GAAI9O,GAAK,EACtGA,IAAM4mC,IAAgB5mC,EAAI2uD,GAAwB3uD,EAAI4mC,IACxDynB,EAAOx+B,EAAQ7vB,iNC3CvB,SAAS4uD,EAAYl3C,GACnB,MAAMm3C,EAASn3C,EACf4O,OAAOC,KAAKsoC,GAAQ3vD,SAAQE,IAC1B,IACEyvD,EAAOzvD,GAAO,KACd,MAAOvB,IAGT,WACSgxD,EAAOzvD,GACd,MAAOvB,QAKb,SAASixD,EAASjhC,EAAUkhC,EAAQ,GAClC,OAAO/zD,WAAW6yB,EAAUkhC,GAE9B,SAASx0D,IACP,OAAOC,KAAKD,MAgBd,SAASk7C,EAAat2C,EAAIy9C,EAAO,KAC/B,MAAMp4C,GAAS,UACf,IAAIwqD,EACAC,EACAC,EACJ,MAAMC,EAnBR,SAA0BhwD,GACxB,MAAMqF,GAAS,UACf,IAAImH,EAUJ,OATInH,EAAO8K,mBACT3D,EAAQnH,EAAO8K,iBAAiBnQ,EAAI,QAEjCwM,GAASxM,EAAGiwD,eACfzjD,EAAQxM,EAAGiwD,cAERzjD,IACHA,EAAQxM,EAAGwM,OAENA,EAOU2D,CAAiBnQ,GA6BlC,OA5BIqF,EAAO6qD,iBACTJ,EAAeE,EAASpzB,WAAaozB,EAAStP,gBAC1CoP,EAAajyD,MAAM,KAAKiD,OAAS,IACnCgvD,EAAeA,EAAajyD,MAAM,MAAMka,KAAItP,GAAKA,EAAEzC,QAAQ,IAAK,OAAM4kC,KAAK,OAI7EmlB,EAAkB,IAAI1qD,EAAO6qD,gBAAiC,SAAjBJ,EAA0B,GAAKA,KAE5EC,EAAkBC,EAASG,cAAgBH,EAASI,YAAcJ,EAASK,aAAeL,EAASM,aAAeN,EAASpzB,WAAaozB,EAAS5/C,iBAAiB,aAAapK,QAAQ,aAAc,sBACrM6pD,EAASE,EAAgB3nC,WAAWvqB,MAAM,MAE/B,MAAT4/C,IAE0BqS,EAAxBzqD,EAAO6qD,gBAAgCH,EAAgBQ,IAEhC,KAAlBV,EAAO/uD,OAA8B8E,WAAWiqD,EAAO,KAE5CjqD,WAAWiqD,EAAO,KAE3B,MAATpS,IAE0BqS,EAAxBzqD,EAAO6qD,gBAAgCH,EAAgBS,IAEhC,KAAlBX,EAAO/uD,OAA8B8E,WAAWiqD,EAAO,KAE5CjqD,WAAWiqD,EAAO,KAEjCC,GAAgB,EAEzB,SAASvwB,EAASz3B,GAChB,MAAoB,iBAANA,GAAwB,OAANA,GAAcA,EAAE03B,aAAkE,WAAnDrY,OAAOhgB,UAAUihB,SAAStf,KAAKhB,GAAGkB,MAAM,GAAI,GAS7G,SAASy2B,KAAUjkC,GACjB,MAAMi1D,EAAKtpC,OAAO3rB,EAAK,IACjBk1D,EAAW,CAAC,YAAa,cAAe,aAC9C,IAAK,IAAI7vD,EAAI,EAAGA,EAAIrF,EAAKsF,OAAQD,GAAK,EAAG,CACvC,MAAM8vD,EAAan1D,EAAKqF,GACxB,GAAI8vD,MAAAA,IAZQ/mD,EAYmD+mD,IAV3C,oBAAXtrD,aAAwD,IAAvBA,OAAO+iD,YAC1Cx+C,aAAgBw+C,YAElBx+C,IAA2B,IAAlBA,EAAKgnD,UAAoC,KAAlBhnD,EAAKgnD,YAOkC,CAC1E,MAAMC,EAAY1pC,OAAOC,KAAKD,OAAOwpC,IAAav4C,QAAOnY,GAAOywD,EAAS3yD,QAAQkC,GAAO,IACxF,IAAK,IAAI6wD,EAAY,EAAGnhD,EAAMkhD,EAAU/vD,OAAQgwD,EAAYnhD,EAAKmhD,GAAa,EAAG,CAC/E,MAAMC,EAAUF,EAAUC,GACpBE,EAAO7pC,OAAO8pC,yBAAyBN,EAAYI,QAC5Cr1D,IAATs1D,GAAsBA,EAAKE,aACzB3xB,EAASkxB,EAAGM,KAAaxxB,EAASoxB,EAAWI,IAC3CJ,EAAWI,GAASzqB,WACtBmqB,EAAGM,GAAWJ,EAAWI,GAEzBtxB,EAAOgxB,EAAGM,GAAUJ,EAAWI,KAEvBxxB,EAASkxB,EAAGM,KAAaxxB,EAASoxB,EAAWI,KACvDN,EAAGM,GAAW,GACVJ,EAAWI,GAASzqB,WACtBmqB,EAAGM,GAAWJ,EAAWI,GAEzBtxB,EAAOgxB,EAAGM,GAAUJ,EAAWI,KAGjCN,EAAGM,GAAWJ,EAAWI,MAhCrC,IAAgBnnD,EAsCd,OAAO6mD,EAET,SAASU,EAAenxD,EAAIoxD,EAASC,GACnCrxD,EAAGwM,MAAM8kD,YAAYF,EAASC,GAEhC,SAASE,GAAqB,OAC5B7gC,EAAM,eACNisB,EAAc,KACdC,IAEA,MAAMv3C,GAAS,UACTmsD,GAAiB9gC,EAAOkV,UAC9B,IACIrqC,EADA8V,EAAY,KAEhB,MAAMgsC,EAAW3sB,EAAO7e,OAAOulB,MAC/B1G,EAAOqc,UAAUvgC,MAAM+vC,eAAiB,OACxCl3C,EAAO27B,qBAAqBtQ,EAAO+gC,gBACnC,MAAMhlB,EAAMkQ,EAAiB6U,EAAgB,OAAS,OAChDE,EAAe,CAACrnB,EAAShhC,IACd,SAARojC,GAAkBpC,GAAWhhC,GAAkB,SAARojC,GAAkBpC,GAAWhhC,EAEvEsoD,EAAU,KACdp2D,GAAO,IAAIF,MAAOqE,UACA,OAAd2R,IACFA,EAAY9V,GAEd,MAAMqsC,EAAWzrC,KAAKO,IAAIP,KAAKC,KAAKb,EAAO8V,GAAagsC,EAAU,GAAI,GAChEuU,EAAe,GAAMz1D,KAAK01D,IAAIjqB,EAAWzrC,KAAK25C,IAAM,EAC1D,IAAIgc,EAAkBN,EAAgBI,GAAgBjV,EAAiB6U,GAOvE,GANIE,EAAaI,EAAiBnV,KAChCmV,EAAkBnV,GAEpBjsB,EAAOqc,UAAU8P,SAAS,CACxB,CAACD,GAAOkV,IAENJ,EAAaI,EAAiBnV,GAUhC,OATAjsB,EAAOqc,UAAUvgC,MAAMu/C,SAAW,SAClCr7B,EAAOqc,UAAUvgC,MAAM+vC,eAAiB,GACxC1gD,YAAW,KACT60B,EAAOqc,UAAUvgC,MAAMu/C,SAAW,GAClCr7B,EAAOqc,UAAU8P,SAAS,CACxB,CAACD,GAAOkV,YAGZzsD,EAAO27B,qBAAqBtQ,EAAO+gC,gBAGrC/gC,EAAO+gC,eAAiBpsD,EAAO07B,sBAAsB4wB,IAEvDA,IAYF,SAASI,EAAgBxnD,EAASgyB,EAAW,IAC3C,MAAO,IAAIhyB,EAAQ2b,UAAU9N,QAAOpY,GAAMA,EAAGoH,QAAQm1B,KAEvD,SAASx4B,EAAciuD,EAAK/rB,EAAU,IACpC,MAAMjmC,EAAKrC,SAASoG,cAAciuD,GAElC,OADAhyD,EAAGoK,UAAUM,OAAQ7B,MAAM+9B,QAAQX,GAAWA,EAAU,CAACA,IAClDjmC,EAET,SAASiyD,EAAcjyD,GACrB,MAAMqF,GAAS,UACT1H,GAAW,UACX6sD,EAAMxqD,EAAG61B,wBACTnvB,EAAO/I,EAAS+I,KAChBwrD,EAAYlyD,EAAGkyD,WAAaxrD,EAAKwrD,WAAa,EAC9C9W,EAAap7C,EAAGo7C,YAAc10C,EAAK00C,YAAc,EACjD3H,EAAYzzC,IAAOqF,EAASA,EAAO+mD,QAAUpsD,EAAGyzC,UAChD9b,EAAa33B,IAAOqF,EAASA,EAAO8mD,QAAUnsD,EAAG23B,WACvD,MAAO,CACLlrB,IAAK+9C,EAAI/9C,IAAMgnC,EAAYye,EAC3BhG,KAAM1B,EAAI0B,KAAOv0B,EAAayjB,GAGlC,SAAS+W,EAAenyD,EAAIu8B,GAC1B,MAAM61B,EAAU,GAChB,KAAOpyD,EAAG6J,wBAAwB,CAChC,MAAMwoD,EAAOryD,EAAG6J,uBACZ0yB,EACE81B,EAAKjrD,QAAQm1B,IAAW61B,EAAQnxD,KAAKoxD,GACpCD,EAAQnxD,KAAKoxD,GACpBryD,EAAKqyD,EAEP,OAAOD,EAET,SAASE,EAAetyD,EAAIu8B,GAC1B,MAAMg2B,EAAU,GAChB,KAAOvyD,EAAG2K,oBAAoB,CAC5B,MAAM6nD,EAAOxyD,EAAG2K,mBACZ4xB,EACEi2B,EAAKprD,QAAQm1B,IAAWg2B,EAAQtxD,KAAKuxD,GACpCD,EAAQtxD,KAAKuxD,GACpBxyD,EAAKwyD,EAEP,OAAOD,EAET,SAASE,EAAazyD,EAAI+iC,GAExB,OADe,UACD5yB,iBAAiBnQ,EAAI,MAAMoQ,iBAAiB2yB,GAE5D,SAAS2vB,EAAa1yD,GACpB,IACIa,EADAy8B,EAAQt9B,EAEZ,GAAIs9B,EAAO,CAGT,IAFAz8B,EAAI,EAEuC,QAAnCy8B,EAAQA,EAAMq1B,kBACG,IAAnBr1B,EAAMszB,WAAgB/vD,GAAK,GAEjC,OAAOA,GAIX,SAAS+xD,EAAe5yD,EAAIu8B,GAC1B,MAAMs2B,EAAU,GAChB,IAAIC,EAAS9yD,EAAGyK,cAChB,KAAOqoD,GACDv2B,EACEu2B,EAAO1rD,QAAQm1B,IAAWs2B,EAAQ5xD,KAAK6xD,GAE3CD,EAAQ5xD,KAAK6xD,GAEfA,EAASA,EAAOroD,cAElB,OAAOooD,EAYT,SAASE,EAAiB/yD,EAAIykC,EAAMuuB,GAClC,MAAM3tD,GAAS,UACf,OAAI2tD,EACKhzD,EAAY,UAATykC,EAAmB,cAAgB,gBAAkB7+B,WAAWP,EAAO8K,iBAAiBnQ,EAAI,MAAMoQ,iBAA0B,UAATq0B,EAAmB,eAAiB,eAAiB7+B,WAAWP,EAAO8K,iBAAiBnQ,EAAI,MAAMoQ,iBAA0B,UAATq0B,EAAmB,cAAgB,kBAE9QzkC,EAAG+yC,4SCtQRkgB,EAA2B,GAG/B,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBz3D,IAAjB03D,EACH,OAAOA,EAAaC,QAGrB,IAAInlB,EAAS+kB,EAAyBE,GAAY,CAGjDE,QAAS,IAOV,OAHAC,EAAoBH,GAAUrqD,KAAKolC,EAAOmlB,QAASnlB,EAAQA,EAAOmlB,QAASH,GAGpEhlB,EAAOmlB,QCpBfH,EAAoB9pD,EAAI,CAACiqD,EAASE,KACjC,IAAI,IAAItzD,KAAOszD,EACXL,EAAoBprD,EAAEyrD,EAAYtzD,KAASizD,EAAoBprD,EAAEurD,EAASpzD,IAC5EknB,OAAOulC,eAAe2G,EAASpzD,EAAK,CAAEixD,YAAY,EAAMvE,IAAK4G,EAAWtzD,MCJ3EizD,EAAoB3rD,EAAI,WACvB,GAA0B,iBAAfisD,WAAyB,OAAOA,WAC3C,IACC,OAAO/2D,MAAQ,IAAIg3D,SAAS,cAAb,GACd,MAAO/0D,GACR,GAAsB,iBAAX2G,OAAqB,OAAOA,QALjB,GCAxB6tD,EAAoBprD,EAAI,CAACyQ,EAAKwqB,IAAU5b,OAAOhgB,UAAUsC,eAAeX,KAAKyP,EAAKwqB,GCGlFmwB,EAAoB,MACpBA,EAAoB,KACpBA,EAAoB,MACpBA,EAAoB,MACMA,EAAoB","sources":["webpack://gak.frontend/./ReskinScripts/Debounce.js","webpack://gak.frontend/./ReskinScripts/cookie-consent.js","webpack://gak.frontend/./ReskinScripts/enhanced-ecommerce.js","webpack://gak.frontend/./ReskinScripts/price-formatter.js","webpack://gak.frontend/./ReskinScripts/tracking-scripts.js","webpack://gak.frontend/./node_modules/tabbyjs/dist/js/tabby.min.js","webpack://gak.frontend/./ReskinScripts/common.ts","webpack://gak.frontend/./node_modules/@stripe/stripe-js/dist/stripe.esm.js","webpack://gak.frontend/./ReskinScripts/gak-DeliveryOptions.ts","webpack://gak.frontend/./ReskinScripts/gak-DeliveryOptions-persist.js","webpack://gak.frontend/./node_modules/@paypal/paypal-js/dist/esm/paypal-js.js","webpack://gak.frontend/./ReskinScripts/gak-PayPalButton.ts","webpack://gak.frontend/./ReskinScripts/gak-ProductDetail-productReviews.ts","webpack://gak.frontend/./ReskinScripts/price-helper.ts","webpack://gak.frontend/./ReskinScripts/gak-ProductDetail.ts","webpack://gak.frontend/./ReskinScripts/gak-ShoppingBasket.ts","webpack://gak.frontend/./ReskinScripts/shopping-basket-panel.ts","webpack://gak.frontend/./ReskinScripts/tabs.ts","webpack://gak.frontend/./ReskinScripts/utils.ts","webpack://gak.frontend/./node_modules/ssr-window/ssr-window.esm.js","webpack://gak.frontend/./node_modules/swiper/core/breakpoints/getBreakpoint.js","webpack://gak.frontend/./node_modules/swiper/core/breakpoints/index.js","webpack://gak.frontend/./node_modules/swiper/core/breakpoints/setBreakpoint.js","webpack://gak.frontend/./node_modules/swiper/core/check-overflow/index.js","webpack://gak.frontend/./node_modules/swiper/core/classes/addClasses.js","webpack://gak.frontend/./node_modules/swiper/core/classes/index.js","webpack://gak.frontend/./node_modules/swiper/core/classes/removeClasses.js","webpack://gak.frontend/./node_modules/swiper/core/core.js","webpack://gak.frontend/./node_modules/swiper/core/defaults.js","webpack://gak.frontend/./node_modules/swiper/core/events-emitter.js","webpack://gak.frontend/./node_modules/swiper/core/events/index.js","webpack://gak.frontend/./node_modules/swiper/core/events/onClick.js","webpack://gak.frontend/./node_modules/swiper/core/events/onLoad.js","webpack://gak.frontend/./node_modules/swiper/core/events/onResize.js","webpack://gak.frontend/./node_modules/swiper/core/events/onScroll.js","webpack://gak.frontend/./node_modules/swiper/core/events/onTouchEnd.js","webpack://gak.frontend/./node_modules/swiper/core/events/onTouchMove.js","webpack://gak.frontend/./node_modules/swiper/core/events/onTouchStart.js","webpack://gak.frontend/./node_modules/swiper/core/grab-cursor/index.js","webpack://gak.frontend/./node_modules/swiper/core/grab-cursor/setGrabCursor.js","webpack://gak.frontend/./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js","webpack://gak.frontend/./node_modules/swiper/core/loop/index.js","webpack://gak.frontend/./node_modules/swiper/core/loop/loopCreate.js","webpack://gak.frontend/./node_modules/swiper/core/loop/loopDestroy.js","webpack://gak.frontend/./node_modules/swiper/core/loop/loopFix.js","webpack://gak.frontend/./node_modules/swiper/core/moduleExtendParams.js","webpack://gak.frontend/./node_modules/swiper/core/modules/observer/observer.js","webpack://gak.frontend/./node_modules/swiper/core/modules/resize/resize.js","webpack://gak.frontend/./node_modules/swiper/core/slide/index.js","webpack://gak.frontend/./node_modules/swiper/core/slide/slideNext.js","webpack://gak.frontend/./node_modules/swiper/core/slide/slidePrev.js","webpack://gak.frontend/./node_modules/swiper/core/slide/slideReset.js","webpack://gak.frontend/./node_modules/swiper/core/slide/slideTo.js","webpack://gak.frontend/./node_modules/swiper/core/slide/slideToClickedSlide.js","webpack://gak.frontend/./node_modules/swiper/core/slide/slideToClosest.js","webpack://gak.frontend/./node_modules/swiper/core/slide/slideToLoop.js","webpack://gak.frontend/./node_modules/swiper/core/transition/index.js","webpack://gak.frontend/./node_modules/swiper/core/transition/setTransition.js","webpack://gak.frontend/./node_modules/swiper/core/transition/transitionEmit.js","webpack://gak.frontend/./node_modules/swiper/core/transition/transitionEnd.js","webpack://gak.frontend/./node_modules/swiper/core/transition/transitionStart.js","webpack://gak.frontend/./node_modules/swiper/core/translate/getTranslate.js","webpack://gak.frontend/./node_modules/swiper/core/translate/index.js","webpack://gak.frontend/./node_modules/swiper/core/translate/maxTranslate.js","webpack://gak.frontend/./node_modules/swiper/core/translate/minTranslate.js","webpack://gak.frontend/./node_modules/swiper/core/translate/setTranslate.js","webpack://gak.frontend/./node_modules/swiper/core/translate/translateTo.js","webpack://gak.frontend/./node_modules/swiper/core/update/index.js","webpack://gak.frontend/./node_modules/swiper/core/update/updateActiveIndex.js","webpack://gak.frontend/./node_modules/swiper/core/update/updateAutoHeight.js","webpack://gak.frontend/./node_modules/swiper/core/update/updateClickedSlide.js","webpack://gak.frontend/./node_modules/swiper/core/update/updateProgress.js","webpack://gak.frontend/./node_modules/swiper/core/update/updateSize.js","webpack://gak.frontend/./node_modules/swiper/core/update/updateSlides.js","webpack://gak.frontend/./node_modules/swiper/core/update/updateSlidesClasses.js","webpack://gak.frontend/./node_modules/swiper/core/update/updateSlidesOffset.js","webpack://gak.frontend/./node_modules/swiper/core/update/updateSlidesProgress.js","webpack://gak.frontend/./node_modules/swiper/modules/navigation/navigation.js","webpack://gak.frontend/./node_modules/swiper/modules/pagination/pagination.js","webpack://gak.frontend/./node_modules/swiper/modules/thumbs/thumbs.js","webpack://gak.frontend/./node_modules/swiper/modules/zoom/zoom.js","webpack://gak.frontend/./node_modules/swiper/shared/classes-to-selector.js","webpack://gak.frontend/./node_modules/swiper/shared/create-element-if-not-defined.js","webpack://gak.frontend/./node_modules/swiper/shared/get-browser.js","webpack://gak.frontend/./node_modules/swiper/shared/get-device.js","webpack://gak.frontend/./node_modules/swiper/shared/get-support.js","webpack://gak.frontend/./node_modules/swiper/shared/process-lazy-preloader.js","webpack://gak.frontend/./node_modules/swiper/shared/utils.js","webpack://gak.frontend/webpack/bootstrap","webpack://gak.frontend/webpack/runtime/define property getters","webpack://gak.frontend/webpack/runtime/global","webpack://gak.frontend/webpack/runtime/hasOwnProperty shorthand","webpack://gak.frontend/webpack/startup"],"sourcesContent":["/*\r\n * Debounce (with a few helpers as local functions, changes to remove dependencies)\r\n * extracted from Lohash (V4.17.4)\r\n * LoHash:\r\n * Copyright JS Foundation and other contributors \r\n * Released under MIT license \r\n */\r\n\r\n/**\r\n * Creates a debounced function that delays invoking `func` until after `wait`\r\n * milliseconds have elapsed since the last time the debounced function was\r\n * invoked. The debounced function comes with a `cancel` method to cancel\r\n * delayed `func` invocations and a `flush` method to immediately invoke them.\r\n * Provide `options` to indicate whether `func` should be invoked on the\r\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\r\n * with the last arguments provided to the debounced function. Subsequent\r\n * calls to the debounced function return the result of the last `func`\r\n * invocation.\r\n *\r\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\r\n * invoked on the trailing edge of the timeout only if the debounced function\r\n * is invoked more than once during the `wait` timeout.\r\n *\r\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\r\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\r\n *\r\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\r\n * for details over the differences between `_.debounce` and `_.throttle`.\r\n *\r\n * @static\r\n * @memberOf _\r\n * @since 0.1.0\r\n * @category Function\r\n * @param {Function} func The function to debounce.\r\n * @param {number} [wait=0] The number of milliseconds to delay.\r\n * @param {Object} [options={}] The options object.\r\n * @param {boolean} [options.leading=false]\r\n * Specify invoking on the leading edge of the timeout.\r\n * @param {number} [options.maxWait]\r\n * The maximum time `func` is allowed to be delayed before it's invoked.\r\n * @param {boolean} [options.trailing=true]\r\n * Specify invoking on the trailing edge of the timeout.\r\n * @returns {Function} Returns the new debounced function.\r\n * @example\r\n *\r\n * // Avoid costly calculations while the window size is in flux.\r\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\r\n *\r\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\r\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\r\n * 'leading': true,\r\n * 'trailing': false\r\n * }));\r\n *\r\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\r\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\r\n * var source = new EventSource('/stream');\r\n * jQuery(source).on('message', debounced);\r\n *\r\n * // Cancel the trailing debounced invocation.\r\n * jQuery(window).on('popstate', debounced.cancel);\r\n */\r\nvar debounceScript = function debounce(func, wait, options) {\r\n var lastArgs,\r\n lastThis,\r\n maxWait,\r\n result,\r\n timerId,\r\n lastCallTime,\r\n lastInvokeTime = 0,\r\n leading = false,\r\n maxing = false,\r\n trailing = true;\r\n\r\n function toNumber(value) {\r\n if (typeof value == 'Number') {\r\n return value;\r\n } else {\r\n var v = parseInt(value);\r\n return isNaN(v) ? 0 : v;\r\n }\r\n }\r\n function isObject(value) {\r\n var type = typeof value;\r\n return value != null && (type == 'object' || type == 'function');\r\n }\r\n function now() {\r\n return Date.now();\r\n }\r\n\r\n if (typeof func != 'function') {\r\n throw \"debounce: param 'func' must be a function\";\r\n }\r\n wait = toNumber(wait) || 0;\r\n\r\n if (isObject(options)) {\r\n leading = !!options.leading;\r\n maxing = 'maxWait' in options;\r\n maxWait = maxing ? Math.max(toNumber(options.maxWait) || 0, wait) : maxWait;\r\n trailing = 'trailing' in options ? !!options.trailing : trailing;\r\n }\r\n\r\n function invokeFunc(time) {\r\n var args = lastArgs,\r\n thisArg = lastThis;\r\n\r\n lastArgs = lastThis = undefined;\r\n lastInvokeTime = time;\r\n result = func.apply(thisArg, args);\r\n return result;\r\n }\r\n\r\n function leadingEdge(time) {\r\n // Reset any `maxWait` timer.\r\n lastInvokeTime = time;\r\n // Start the timer for the trailing edge.\r\n timerId = setTimeout(timerExpired, wait);\r\n // Invoke the leading edge.\r\n return leading ? invokeFunc(time) : result;\r\n }\r\n\r\n function remainingWait(time) {\r\n var timeSinceLastCall = time - lastCallTime,\r\n timeSinceLastInvoke = time - lastInvokeTime,\r\n result = wait - timeSinceLastCall;\r\n\r\n return maxing ? Math.min(result, maxWait - timeSinceLastInvoke) : result;\r\n }\r\n\r\n function shouldInvoke(time) {\r\n var timeSinceLastCall = time - lastCallTime,\r\n timeSinceLastInvoke = time - lastInvokeTime;\r\n\r\n // Either this is the first call, activity has stopped and we're at the\r\n // trailing edge, the system time has gone backwards and we're treating\r\n // it as the trailing edge, or we've hit the `maxWait` limit.\r\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\r\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\r\n }\r\n\r\n function timerExpired() {\r\n var time = now();\r\n if (shouldInvoke(time)) {\r\n return trailingEdge(time);\r\n }\r\n // Restart the timer.\r\n timerId = setTimeout(timerExpired, remainingWait(time));\r\n }\r\n\r\n function trailingEdge(time) {\r\n timerId = undefined;\r\n\r\n // Only invoke if we have `lastArgs` which means `func` has been\r\n // debounced at least once.\r\n if (trailing && lastArgs) {\r\n return invokeFunc(time);\r\n }\r\n lastArgs = lastThis = undefined;\r\n return result;\r\n }\r\n\r\n function cancel() {\r\n if (timerId !== undefined) {\r\n clearTimeout(timerId);\r\n }\r\n lastInvokeTime = 0;\r\n lastArgs = lastCallTime = lastThis = timerId = undefined;\r\n }\r\n\r\n function flush() {\r\n return timerId === undefined ? result : trailingEdge(now());\r\n }\r\n\r\n function debounced() {\r\n\r\n var time = now(),\r\n isInvoking = shouldInvoke(time);\r\n\r\n lastArgs = arguments;\r\n lastThis = this;\r\n lastCallTime = time;\r\n\r\n if (isInvoking) {\r\n if (timerId === undefined) {\r\n return leadingEdge(lastCallTime);\r\n }\r\n if (maxing) {\r\n // Handle invocations in a tight loop.\r\n timerId = setTimeout(timerExpired, wait);\r\n return invokeFunc(lastCallTime);\r\n }\r\n }\r\n if (timerId === undefined) {\r\n timerId = setTimeout(timerExpired, wait);\r\n }\r\n return result;\r\n }\r\n debounced.cancel = cancel;\r\n debounced.flush = flush;\r\n return debounced;\r\n}\r\n\r\n\r\n\r\nexport { debounceScript }","var CookieConsentService = {\r\n CookieConsentKey: \"\",\r\n EnableImpliedCookieConsent: false,\r\n didConsentToAllCookies: function () {\r\n //Logic shared with MvcExtensions.DidConsentToCookie\r\n //Please keep in sync\r\n \r\n if (this.CookieConsentKey === \"\") {\r\n //console.log(\"Cookie consent key was not set\");\r\n return false;\r\n }\r\n\r\n var cookieSettings = this.getCookieSettings();\r\n\r\n var didConsent = cookieSettings.didConsentToAllManually ||\r\n (this.EnableImpliedCookieConsent && cookieSettings.didConsentImplicitly && !cookieSettings.didConsentToEssentialManually);\r\n return didConsent;\r\n },\r\n shouldShowCookieBanner: function () {\r\n var cookieSettings = this.getCookieSettings();\r\n\r\n return (this.EnableImpliedCookieConsent && cookieSettings.shouldShowImpliedCookieBanner) ||\r\n (!this.EnableImpliedCookieConsent && cookieSettings.shouldShowCookieBanner);\r\n },\r\n clearAllCookiesIfConsentNotGiven: function () {\r\n //Clearing all cookies but consent cookie and essential cookies\r\n var cookieSettings = this.getCookieSettings();\r\n\r\n if (!this.didConsentToAllCookies()) {\r\n var cookies = document.cookie.split(\";\");\r\n for (var cookie in cookies) {\r\n if (cookie !== this.CookieConsentKey && cookieSettings.essentialCookies.indexOf(cookie) == -1) {\r\n deleteCookie(cookie);\r\n }\r\n }\r\n }\r\n },\r\n getCookieSettings: function () {\r\n //Logic shared with MvcExtensions.DidConsentToCookie\r\n //Please keep in sync\r\n var result = {\r\n didConsentImplicitly: this.EnableImpliedCookieConsent,\r\n didConsentToAllManually: false,\r\n didConsentToEssentialManually: false,\r\n shouldShowCookieBanner: true,\r\n shouldShowImpliedCookieBanner: true,\r\n essentialCookies: [\"pdt\", \"GAK_ShoppinBasket\", \"GAK_CookieConsent\", \"GAK_SearchRef\",\r\n \"GAK_VoucherPromoPopup\", \"LocationId\", \"ChannelID\", \"__RequestVerificationToken\",\r\n \"GAK_FinanceOptions\", \"amazon-pay-connectedAuth\", \"apay-session-set\",\r\n \"GAK_FE_Email\", \".AspNet.ApplicationCookie\"]\r\n };\r\n\r\n ///Returning boolValue if it's a bool, fallbackBool otherwise\r\n function getSafeBool(boolValue, fallbackBool) {\r\n if (typeof (boolValue) === \"boolean\") {\r\n return boolValue;\r\n }\r\n\r\n return fallbackBool;\r\n }\r\n\r\n try {\r\n var consentCookie = unescape(getCookie(this.CookieConsentKey));\r\n var cookieObj = JSON.parse(consentCookie);\r\n\r\n if (cookieObj === true) {\r\n result.didConsentImplicitly = true;\r\n result.didConsentToAllManually = false;\r\n result.didConsentToEssentialManually = true;\r\n result.shouldShowCookieBanner = false;\r\n result.shouldShowImpliedCookieBanner = false;\r\n }\r\n else if (cookieObj != null && typeof (cookieObj) === \"object\") {\r\n result.didConsentImplicitly = getSafeBool(cookieObj.didConsentImplicitly, result.didConsentImplicitly);\r\n result.didConsentToAllManually = getSafeBool(cookieObj.didConsentToAllManually, result.didConsentToAllManually);\r\n result.didConsentToEssentialManually = getSafeBool(cookieObj.didConsentToEssentialManually, result.didConsentToEssentialManually);\r\n result.shouldShowCookieBanner = getSafeBool(cookieObj.shouldShowCookieBanner, result.shouldShowCookieBanner);\r\n result.shouldShowImpliedCookieBanner = getSafeBool(cookieObj.shouldShowImpliedCookieBanner, result.shouldShowImpliedCookieBanner);\r\n }\r\n\r\n } catch (e) {\r\n //In case of exception assume cookie doesn't exist\r\n //Nothing to do\r\n }\r\n\r\n return result;\r\n },\r\n onManuallyConsentToAllCookies: function () {\r\n var settings = CookieConsentService.getCookieSettings();\r\n settings.didConsentToAllManually = true;\r\n settings.didConsentImplicitly = true;\r\n settings.shouldShowCookieBanner = false;\r\n settings.shouldShowImpliedCookieBanner = false;\r\n\r\n CookieConsentService.saveCookieConsent(settings);\r\n },\r\n onManuallyConsentToEssentialCookies: function () {\r\n var settings = CookieConsentService.getCookieSettings();\r\n settings.didConsentToAllManually = false;\r\n settings.didConsentToEssentialManually = true;\r\n settings.didConsentImplicitly = true;\r\n settings.shouldShowCookieBanner = false;\r\n settings.shouldShowImpliedCookieBanner = false;\r\n\r\n CookieConsentService.saveCookieConsent(settings);\r\n },\r\n onHideImpliedConsentBanner: function () {\r\n var settings = CookieConsentService.getCookieSettings();\r\n settings.didConsentImplicitly = true;\r\n settings.shouldShowImpliedCookieBanner = false;\r\n\r\n CookieConsentService.saveCookieConsent(settings);\r\n },\r\n onRevokeConsent: function () {\r\n confirm(\"Checkout cannot work without cookies.
Are you sure you want to revoke your cookie consent?\",\r\n function (didConfirm) {\r\n if (didConfirm) {\r\n var settings = CookieConsentService.getCookieSettings();\r\n settings.didConsentToAllManually = false;\r\n settings.didConsentImplicitly = false;\r\n settings.shouldShowCookieBanner = true;\r\n settings.shouldShowImpliedCookieBanner = true;\r\n\r\n CookieConsentService.saveCookieConsent(settings);\r\n }\r\n },\r\n \"Cookie consent\",\r\n \"REVOKE CONSENT\",\r\n \"CANCEL\");\r\n },\r\n saveCookieConsent: function (consentSettings) {\r\n if (this.CookieConsentKey === \"\") {\r\n //console.log(\"Cookie consent key was not set\");\r\n return;\r\n }\r\n\r\n var settingsJson = JSON.stringify(consentSettings);\r\n\r\n //Checking if settings changed\r\n //If changed, cookie will be set and page reloaded\r\n var consentCookie = getCookie(this.CookieConsentKey);\r\n if (settingsJson !== consentCookie) {\r\n setCookie(this.CookieConsentKey, settingsJson, 730);\r\n }\r\n },\r\n showConsentModal: function () {\r\n var message = \"This feature is not available without cookie consent.\" +\r\n \"Learn more\";\r\n var title = \"Consent to cookies\";\r\n\r\n confirm(message, function (didNotConsent) {\r\n //We're inversing button names and hence meaning so that Consent is shown as blue (ie: safe option)\r\n if (!didNotConsent) {\r\n CookieConsentService.onManuallyConsentToAllCookies();\r\n }\r\n },\r\n title,\r\n \"CLOSE\",\r\n \"ACCEPT & CLOSE\",\r\n //Hiding close button for express consent\r\n //Putting back close button will also need extra work since \r\n //close and 'Consent to cookies' will have same meaning\r\n false);\r\n }\r\n};\r\n\r\n//Cookie consent bindings\r\n\r\n//Preventing redirect\r\n\r\nfunction ConsentBinding(event) {\r\n //TODO: improve on design so that instead of refresh we redirect to basket/account login\r\n if (!CookieConsentService.didConsentToAllCookies()) {\r\n //Preventing redirect\r\n event.preventDefault();\r\n\r\n CookieConsentService.showConsentModal();\r\n }\r\n}\r\n\r\n//document.getElementById(\"basketLink\").addEventListener(ConsentBinding);\r\n//document.getElementById(\"accountLoginLink\").addEventListener(ConsentBinding);\r\n\r\n//End - cookie consent bindings\r\nconst deleteCookie = (name) => {\r\n document.cookie = name + \"=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;\";\r\n};\r\n\r\nfunction getCookie(cookieName) {\r\n let cookie = {};\r\n document.cookie.split(';').forEach(function (el) {\r\n let [key, value] = el.split('=');\r\n cookie[key.trim()] = value;\r\n })\r\n return cookie[cookieName];\r\n}\r\n\r\nfunction setCookie(name, value, days) {\r\n var expires = \"\";\r\n if (days) {\r\n var date = new Date();\r\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\r\n expires = \"; expires=\" + date.toUTCString();\r\n }\r\n document.cookie = name + \"=\" + (value || \"\") + expires + \"; path=/\";\r\n}\r\n\r\n\r\n\r\nexport { CookieConsentService }\r\n\r\n","var elements = document.getElementsByClassName(\"product-card\");\r\nvar productDetailsEl = document.getElementsByClassName(\"pdp-basket\").item(0);\r\n\r\nvar pushEnhancedEcommerce = function () {\r\n pushEcommerce();\r\n}\r\n\r\nfunction getProductDetails() {\r\n if (productDetailsEl) {\r\n return getProductDetailObj(productDetailsEl);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction getProductDetailObj(el) {\r\n var productObj =\r\n {\r\n 'name': el.getAttribute(\"data-name\"),\r\n 'id': el.getAttribute(\"data-google-product-id\")\r\n ?? el.getAttribute(\"data-product-id\")\r\n ?? el.getAttribute(\"data-id\"),\r\n 'internalId': el.getAttribute(\"data-product-id\") ?? el.getAttribute(\"data-id\"),\r\n 'price': el.getAttribute(\"data-price\"),\r\n 'brand': el.getAttribute(\"data-brand\"),\r\n 'category': el.getAttribute(\"data-category\")\r\n };\r\n\r\n return productObj;\r\n}\r\n\r\nfunction getProductObj(el) {\r\n var productObj =\r\n {\r\n 'name': el.getAttribute(\"data-name\"),\r\n 'id': el.getAttribute(\"data-google-product-id\") \r\n ?? el.getAttribute(\"data-product-id\")\r\n ?? el.getAttribute(\"data-id\"),\r\n 'internalId': el.getAttribute(\"data-product-id\") ?? el.getAttribute(\"data-id\"),\r\n 'price': el.getAttribute(\"data-price\"),\r\n 'brand': el.getAttribute(\"data-brand\"),\r\n 'category': el.getAttribute(\"data-category\"),\r\n 'position': el.getAttribute(\"data-position\"),\r\n 'list': el.getAttribute(\"data-list\")\r\n };\r\n\r\n return productObj;\r\n}\r\n\r\nfunction pushEcommerce() {\r\n var products = getProducts();\r\n var promotions = getPromotions();\r\n var productDetails = getProductDetails();\r\n\r\n var ecommerceObj = {\r\n ecommerce: {\r\n currencyCode: 'GBP'\r\n },\r\n }\r\n\r\n if (products.length > 0) {\r\n ecommerceObj.ecommerce.eec = {\r\n impressionView: { products }\r\n };\r\n }\r\n\r\n if (promotions.length > 0) {\r\n ecommerceObj.ecommerce.eec.promoView = {\r\n promoView: { promotions: promotions }\r\n };\r\n }\r\n\r\n if (productDetails != null) {\r\n ecommerceObj.ecommerce.eec = {\r\n detail: { products: [productDetails] }\r\n };\r\n }\r\n\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push(ecommerceObj);\r\n}\r\n\r\nfunction getProducts() {\r\n var products = [];\r\n\r\n for (var i = 0; i < elements.length; i++) {\r\n elements[i].addEventListener('click', onProductClick);\r\n\r\n products.push(getProductObj(elements[i]));\r\n }\r\n\r\n return products;\r\n}\r\n\r\nfunction onProductClick(e) {\r\n e.preventDefault();\r\n\r\n var el = e.currentTarget;\r\n var productObj = getProductObj(el);\r\n var productUrl = el.getAttribute(\"href\");\r\n\r\n pushProductClick(productObj, productUrl);\r\n}\r\n\r\nfunction getPromotions() {\r\n var banners = document.querySelector('a.hero-banner');\r\n var promotionsObj = [];\r\n\r\n if (banners) {\r\n for (var i = 0; i < banners.length; i++) {\r\n banners[i].addEventListener('click', onBannerClick);\r\n\r\n promotionsObj.push(getPromotionObj(banners[i]));\r\n }\r\n }\r\n\r\n return promotionsObj;\r\n}\r\n\r\nfunction onBannerClick(e) {\r\n e.preventDefault();\r\n\r\n var el = e.currentTarget;\r\n var promotionObj = getPromotionObj(el);\r\n\r\n onPromoClick(promotionObj);\r\n}\r\n\r\nfunction getPromotionObj(el) {\r\n var promotionObj =\r\n {\r\n 'id': el.getAttribute(\"data-id\"),\r\n 'name': el.getAttribute(\"data-name\"),\r\n 'creative': el.getAttribute(\"data-creative\"),\r\n 'position': el.getAttribute(\"data-position\"),\r\n 'destinationUrl': el.getAttribute(\"href\")\r\n }\r\n\r\n return promotionObj;\r\n}\r\n\r\nfunction onPromoClick(promoObj) {\r\n dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\r\n dataLayer.push({\r\n 'event': 'eec.promoClick',\r\n 'ecommerce': {\r\n 'promoClick': {\r\n 'promotions': [promoObj]\r\n }\r\n }\r\n });\r\n\r\n document.location = promoObj.destinationUrl;\r\n\r\n}\r\n\r\nfunction pushProductClick(productObj, productUrl) {\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push({\r\n 'event': 'eec.productClick',\r\n 'ecommerce': {\r\n 'click': {\r\n 'products': [productObj]\r\n }\r\n }\r\n });\r\n\r\n if (productUrl)\r\n document.location = productUrl;\r\n}\r\n\r\nfunction pushAddToCart(productId, quantity = 1) {\r\n var product = getProductsToAddRemove(productId);\r\n product.quantity = quantity;\r\n\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push({\r\n 'event': 'eec.addToCart',\r\n 'ecommerce': {\r\n 'add': {\r\n 'products': [product]\r\n }\r\n }\r\n });\r\n}\r\n\r\nfunction getProductsToAddRemove(productId) {\r\n var productContainer = document.querySelector(`[data-id=\"${productId}\"]`);\r\n\r\n if (!productContainer)\r\n productContainer = document.querySelector(`[data-product-id='${productId}']`);\r\n\r\n if (!productContainer)\r\n return;\r\n\r\n return getProductDetailObj(productContainer);\r\n}\r\n\r\nfunction pushRemoveFromCart(productId, quantity = 1) {\r\n var product = getProductsToAddRemove(productId);\r\n product.quantity = quantity;\r\n\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push({\r\n 'event': 'eec.removeFromCart',\r\n 'ecommerce': {\r\n 'remove': {\r\n 'products': [product]\r\n }\r\n }\r\n });\r\n\r\n}\r\n\r\nfunction getCheckoutProducts() {\r\n var products = [];\r\n var el = document.getElementsByClassName(\"basket-item\");\r\n\r\n for (var i = 0; i < el.length; i++) {\r\n products.push(getProductDetailObj(el[i]));\r\n }\r\n\r\n return products;\r\n}\r\n\r\nfunction getBasketItems(step, option, basketItemsURL) {\r\n fetch(basketItemsURL, {\r\n method: \"POST\"\r\n }).then(response => response.json())\r\n .then(function (result) {\r\n var products = result.basketVm.Items;\r\n var basketContainer = document.getElementById(\"basketItemsContainer\");\r\n var ulElemen = document.createElement(\"ul\")\r\n var liElem = \"\";\r\n\r\n if (products) {\r\n products.forEach(function (item) {\r\n liElem +=\r\n `
  • \r\n
  • `\r\n });\r\n }\r\n\r\n ulElemen.innerHTML = liElem;\r\n basketContainer.append(ulElemen);\r\n pushCheckout(step, option);\r\n });\r\n}\r\n\r\nfunction onCheckout(step, option, basketItemsURL) {\r\n if (basketItemsURL) {\r\n getBasketItems(step, option, basketItemsURL);\r\n }\r\n else {\r\n pushCheckout(step, option);\r\n }\r\n}\r\n\r\nfunction pushCheckout(step, option) {\r\n var products = getCheckoutProducts();\r\n dataLayer.push({ ecommerce: null });\r\n\r\n var ecommerceObj = {\r\n event: 'eec.checkout',\r\n ecommerce: {\r\n checkout: {\r\n actionField: { step: step },\r\n }\r\n }\r\n }\r\n\r\n if (products && products.length > 0)\r\n ecommerceObj.ecommerce.checkout.products = products;\r\n\r\n if (option)\r\n ecommerceObj.ecommerce.checkout.actionField.option = option.toLowerCase();\r\n\r\n dataLayer.push(ecommerceObj);\r\n}\r\n\r\nfunction onCheckoutOption(step, checkoutOption) {\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push({\r\n 'event': 'checkoutOption',\r\n 'ecommerce': {\r\n 'checkout_option': {\r\n 'actionField': { 'step': step, 'option': checkoutOption }\r\n }\r\n }\r\n });\r\n}\r\n\r\n\r\nfunction pushProductView() {\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push({\r\n 'event': 'eec.detail',\r\n 'ecommerce': {\r\n 'detail': {\r\n 'products': [getProductDetailObj(productDetailsEl)]\r\n }\r\n }\r\n });\r\n}\r\n\r\nwindow.onload = function () {\r\n pushEcommerce();\r\n}\r\n\r\nexport { pushEnhancedEcommerce, pushAddToCart, pushRemoveFromCart, onCheckout, onCheckoutOption, pushProductView };","export function getFormattedPrice(myPrice, symbol, conversionRate) {\r\n var xPrice = parseFloat(myPrice);\r\n var formattedPrice = \"\";\r\n if (xPrice > 0) {\r\n formattedPrice = numberToCurrency(xPrice, symbol, conversionRate);\r\n }\r\n else {\r\n formattedPrice = \"FREE\";\r\n }\r\n return formattedPrice;\r\n};\r\n\r\nexport function numberToCurrency(number, symbol, conversionRate) {\r\n return symbol + (number * conversionRate).toFixed(2).replace(/\\d(?=(\\d{3})+\\.)/g, '$&,');\r\n};","var GoogleScriptsService = {\r\n addTagManager: function (id) {\r\n addScriptOnHead(`(function (w, d, s, l, i) {\r\n w[l] = w[l] || []; w[l].push({\r\n 'gtm.start':\r\n new Date().getTime(), event: 'gtm.js'\r\n }); var f = d.getElementsByTagName(s)[0],\r\n j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src =\r\n '//www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);\r\n })(window, document, 'script', 'dataLayer', '${id}');`);\r\n },\r\n addOptmise: function (analyticsId, optmiseId) {\r\n //addScriptOnHead(`(function (i, s, o, g, r, a, m) {\r\n // i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {\r\n // (i[r].q = i[r].q || []).push(arguments)\r\n // }, i[r].l = 1 * new Date(); a = s.createElement(o),\r\n // m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)\r\n //})(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\r\n\r\n //ga('create', '${analyticsId}', 'auto');\r\n //ga('require', '${optmiseId}');`);\r\n },\r\n addConversionPage: function (paymentAmount) {\r\n addScriptOnBody(`gtag('event', 'conversion', {\r\n 'send_to': 'AW-1071972399/zlivCL7EpLoBEK-AlP8D',\r\n 'value': ${paymentAmount},\r\n 'currency': 'GBP',\r\n 'transaction_id': ''\r\n });`);\r\n },\r\n //commented as it was causing page flickers\r\n addAntiFlicker: function (id) {\r\n //addScriptOnHead(`(function(a,s,y,n,c,h,i,d,e){s.className += ' ' + y; h.start=1*new Date;\r\n // h.end=i=function(){s.className = s.className.replace(RegExp(' ?' + y), '')};\r\n // (a[n]=a[n]||[]).hide=h;setTimeout(function(){i(); h.end=null},c);h.timeout=c;\r\n // })(window,document.documentElement,'async-hide','dataLayer',4000,{'${id}': true});`);\r\n },\r\n consentGranted: function () {\r\n gtag('consent', 'update', {\r\n 'ad_storage': 'granted',\r\n 'analytics_storage': 'granted',\r\n 'security_storage': 'granted'\r\n });\r\n\r\n addScriptOnHead(`window.dataLayer.push({\r\n 'event': 'cookieConsent',\r\n 'consentStatus': true\r\n })`);\r\n\r\n },\r\n consentRevoked: function () {\r\n gtag('consent', 'update', {\r\n 'ad_storage': 'denied',\r\n 'analytics_storage': 'denied',\r\n 'security_storage': 'granted'\r\n });\r\n\r\n addScriptOnHead(`window.dataLayer.push({\r\n 'event': 'cookieConsent',\r\n 'consentStatus': false\r\n })`);\r\n\r\n },\r\n pushEvent: function (event) {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push(event);\r\n }\r\n}\r\n\r\nvar FacebookScriptsService = {\r\n addFacebookTracking: function (isSearch) {\r\n addScriptOnBodyTop(`!function (f, b, e, v, n, t, s) {\r\n if (f.fbq) return; n = f.fbq = function () {\r\n n.callMethod ?\r\n n.callMethod.apply(n, arguments) : n.queue.push(arguments)\r\n };\r\n if (!f._fbq) f._fbq = n; n.push = n; n.loaded = !0; n.version = '2.0';\r\n n.queue = []; t = b.createElement(e); t.async = !0;\r\n t.src = v; s = b.getElementsByTagName(e)[0];\r\n s.parentNode.insertBefore(t, s)\r\n }(window, document, 'script',\r\n 'https://connect.facebook.net/en_US/fbevents.js');\r\n fbq('init', '1755089831374739');\r\n fbq('track', 'PageView');`);\r\n },\r\n addFacebookEvent: function (event) {\r\n addScriptOnBody(`fbq('track', '${event}');`);\r\n },\r\n getFbq: function () {\r\n return fbq;\r\n }\r\n}\r\n\r\nvar BingScriptsService = {\r\n addBingTracking: function () {\r\n addScriptOnBody(`(function (w, d, t, r, u) { var f, n, i; w[u] = w[u] || [], f = function () { var o = { ti: \"5296147\" }; \r\n o.q = w[u], w[u] = new UET(o), w[u].push(\"pageLoad\") }, n = d.createElement(t), n.src = r, n.async = 1, n.onload = n.onreadystatechange = function () {\r\n var s = this.readyState; s && s !== \"loaded\" && s !== \"complete\" || (f(), n.onload = n.onreadystatechange = null) }, i = d.getElementsByTagName(t)[0], i.parentNode.insertBefore(n, i)\r\n })(window, document, \"script\", \"//bat.bing.com/bat.js\", \"uetq\");`)\r\n }\r\n}\r\n\r\nvar addScriptOnHead = function (script) {\r\n document.head.appendChild(createScriptElement(script));\r\n}\r\n\r\nvar addScriptOnBody = function (script) {\r\n document.body.appendChild(createScriptElement(script));\r\n}\r\n\r\n\r\nvar addScriptOnBodyTop = function (script) {\r\n document.body.insertBefore(createScriptElement(script), document.body.firstChild);\r\n}\r\n\r\nfunction createScriptElement(script) {\r\n var addDataLayer = document.createElement(\"script\");\r\n\r\n var dataLayerData = document.createTextNode(script);\r\n\r\n addDataLayer.appendChild(dataLayerData);\r\n return addDataLayer;\r\n}\r\n\r\nexport { GoogleScriptsService, FacebookScriptsService, BingScriptsService }","/*! tabbyjs v12.0.1 | (c) 2019 Chris Ferdinandi | MIT License | http://github.com/cferdinandi/tabby */\nElement.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),(function(e,t){\"function\"==typeof define&&define.amd?define([],(function(){return t(e)})):\"object\"==typeof exports?module.exports=t(e):e.Tabby=t(e)})(\"undefined\"!=typeof global?global:\"undefined\"!=typeof window?window:this,(function(e){\"use strict\";var t={idPrefix:\"tabby-toggle_\",default:\"[data-tabby-default]\"},r=function(e){if(e&&\"true\"!=e.getAttribute(\"aria-selected\")){var t=document.querySelector(e.hash);t&&(function(e){var t=e.closest('[role=\"tablist\"]');if(t){var r=t.querySelector('[role=\"tab\"][aria-selected=\"true\"]');if(r){var o=document.querySelector(r.hash);r.setAttribute(\"aria-selected\",\"false\"),r.setAttribute(\"tabindex\",\"-1\"),o&&o.setAttribute(\"hidden\",\"hidden\")}}}(e),(function(e,t){e.setAttribute(\"aria-selected\",\"true\"),e.setAttribute(\"tabindex\",\"0\"),t.removeAttribute(\"hidden\"),e.focus()})(e,t),(function(e,t){var r=new CustomEvent(\"tabby\",{bubbles:!0,cancelable:!0,detail:{tab:e,content:t}});e.dispatchEvent(r)})(e,t))}},o=function(e,t){var o=(function(e){var t=e.closest('[role=\"tablist\"]'),r=t?t.querySelectorAll('[role=\"tab\"]'):null;if(r)return{tabs:r,index:Array.prototype.indexOf.call(r,e)}})(e);if(o){var n,i=o.tabs.length-1;[\"ArrowUp\",\"ArrowLeft\",\"Up\",\"Left\"].indexOf(t)>-1?n=o.index<1?i:o.index-1:[\"ArrowDown\",\"ArrowRight\",\"Down\",\"Right\"].indexOf(t)>-1?n=o.index===i?0:o.index+1:\"Home\"===t?n=0:\"End\"===t&&(n=i),r(o.tabs[n])}};return function(n,i){var a,l,u={};u.destroy=function(){var e=l.querySelectorAll(\"a\");Array.prototype.forEach.call(e,(function(e){var t=document.querySelector(e.hash);t&&(function(e,t,r){e.id.slice(0,r.idPrefix.length)===r.idPrefix&&(e.id=\"\"),e.removeAttribute(\"role\"),e.removeAttribute(\"aria-controls\"),e.removeAttribute(\"aria-selected\"),e.removeAttribute(\"tabindex\"),e.closest(\"li\").removeAttribute(\"role\"),t.removeAttribute(\"role\"),t.removeAttribute(\"aria-labelledby\"),t.removeAttribute(\"hidden\")})(e,t,a)})),l.removeAttribute(\"role\"),document.documentElement.removeEventListener(\"click\",c,!0),l.removeEventListener(\"keydown\",d,!0),a=null,l=null},u.setup=function(){if(l=document.querySelector(n)){var e=l.querySelectorAll(\"a\");l.setAttribute(\"role\",\"tablist\"),Array.prototype.forEach.call(e,(function(e){var t=document.querySelector(e.hash);t&&(function(e,t,r){e.id||(e.id=r.idPrefix+t.id),e.setAttribute(\"role\",\"tab\"),e.setAttribute(\"aria-controls\",t.id),e.closest(\"li\").setAttribute(\"role\",\"presentation\"),t.setAttribute(\"role\",\"tabpanel\"),t.setAttribute(\"aria-labelledby\",e.id),e.matches(r.default)?e.setAttribute(\"aria-selected\",\"true\"):(e.setAttribute(\"aria-selected\",\"false\"),e.setAttribute(\"tabindex\",\"-1\"),t.setAttribute(\"hidden\",\"hidden\"))})(e,t,a)}))}},u.toggle=function(e){var t=e;\"string\"==typeof e&&(t=document.querySelector(n+' [role=\"tab\"][href*=\"'+e+'\"]')),r(t)};var c=function(e){var t=e.target.closest(n+' [role=\"tab\"]');t&&(e.preventDefault(),r(t))},d=function(e){var t=document.activeElement;t.matches(n+' [role=\"tab\"]')&&([\"ArrowUp\",\"ArrowDown\",\"ArrowLeft\",\"ArrowRight\",\"Up\",\"Down\",\"Left\",\"Right\",\"Home\",\"End\"].indexOf(e.key)<0||o(t,e.key))};return a=(function(){var e={};return Array.prototype.forEach.call(arguments,(function(t){for(var r in t){if(!t.hasOwnProperty(r))return;e[r]=t[r]}})),e})(t,i||{}),u.setup(),(function(t){if(!(e.location.hash.length<1)){var o=document.querySelector(t+' [role=\"tab\"][href*=\"'+e.location.hash+'\"]');r(o)}})(n),document.documentElement.addEventListener(\"click\",c,!0),l.addEventListener(\"keydown\",d,!0),u}}));","import Utils from './utils';\r\n\r\ndeclare var ShoppingBasketParms: any;\r\ndeclare var globalParms: any;\r\n\r\n/**********************************\r\n* Mega Menu Functions \r\n**********************************/\r\n\r\nfunction getElementIndex(node: HTMLElement): number {\r\n var index = 0;\r\n while ((node = node.previousElementSibling as HTMLElement)) {\r\n index++;\r\n }\r\n return index;\r\n}\r\n\r\n//Initialise menu\r\nfunction initMenu(menu: any): void {\r\n //Only load the initial menu for desktop\r\n if (screen.width > 1023) {\r\n menu.setAttribute('data-display', 'd');\r\n var level2 = document.querySelectorAll('[data-navLevel = \"2\"]')[0];\r\n if (level2) {\r\n level2.querySelector('.category-column > ul > li:first-child')?.setAttribute('data-hovered', 'true')\r\n level2.querySelector('.category-column > ul > li:first-child button')?.setAttribute('aria-expanded', 'true');\r\n level2.querySelectorAll('.category-column-sub')[0].setAttribute('data-active', 'true');\r\n }\r\n }\r\n else {\r\n menu.setAttribute('data-display', 'm');\r\n }\r\n}\r\n\r\n//Reset menu\r\nfunction resetMenu(menu: any): void {\r\n menu.querySelectorAll('[aria-expanded]').forEach(function (item: any) {\r\n item.setAttribute('aria-expanded', 'false');\r\n });\r\n menu.querySelectorAll('[data-active]:not([data-navlevel=\"3\"])').forEach(function (item: any) {\r\n item.setAttribute('data-active', 'false');\r\n });\r\n menu.querySelectorAll('[data-hovered]').forEach(function (item: any) {\r\n item.setAttribute('data-hovered', 'false');\r\n });\r\n menu.querySelectorAll('.active').forEach(function (item: any) {\r\n item.classList.remove('active');\r\n });\r\n\r\n initMenu(menu);\r\n}\r\n\r\n//action: on|off\r\nfunction onOffItems(element: HTMLElement, action: string): void {\r\n element.setAttribute('aria-expanded', (action === \"on\") ? 'true' : 'false');\r\n if (action === \"on\") {\r\n element.parentElement?.classList.add('active');\r\n } else {\r\n element.parentElement?.classList.remove('active');\r\n }\r\n\r\n element.nextElementSibling?.setAttribute('data-active', (action === \"on\") ? 'true' : 'false');\r\n}\r\n\r\nfunction handleMobileMenu(this: HTMLElement) {\r\n var expanded = this.getAttribute('aria-expanded');\r\n var body = document.body;\r\n if (expanded == \"false\") {\r\n this.setAttribute('aria-expanded', \"true\");\r\n document.querySelector('header.site-head')?.setAttribute('data-mobile-toggled', \"true\");\r\n body.classList.add(\"menu-open\");\r\n } else {\r\n this.setAttribute('aria-expanded', \"false\");\r\n document.querySelector('header.site-head')?.setAttribute('data-mobile-toggled', \"false\");\r\n body.classList.remove(\"menu-open\");\r\n //TODO: what are we resetting? resetMenu();\r\n }\r\n}\r\n\r\nfunction closeMobileMenu() {\r\n var body = document.body;\r\n document.querySelector('button.mobile-menu')?.setAttribute('aria-expanded', \"false\");\r\n document.querySelector('header.site-head')?.setAttribute('data-mobile-toggled', \"false\");\r\n body.classList.remove(\"menu-open\");\r\n // handleMobileMenu;\r\n}\r\n\r\n// Standard offset.top not working properly: https://medium.com/@alexcambose/js-offsettop-property-is-not-great-and-here-is-why-b79842ef7582\r\nfunction getOffsetTop(element: any) {\r\n let offsetTop = 0;\r\n let parentElem = element;\r\n while (parentElem) {\r\n offsetTop += parentElem.offsetTop;\r\n parentElem = parentElem.offsetParent;\r\n }\r\n return offsetTop;\r\n}\r\n\r\n//we have js\r\nif (document.documentElement.classList.contains('no-js')) {\r\n document.documentElement.classList.remove('no-js');\r\n document.documentElement.classList.add('js');\r\n\r\n if (document.getElementsByClassName('site-head').length) {\r\n\r\n var menu = document.querySelector('#primary-navigation');\r\n\r\n if (menu) {\r\n\r\n initMenu(menu);\r\n\r\n //TODO - add debounce - resize init();\r\n //window.addEventListener('resize', function (e) {\r\n // if (screen.width > 1023 && menu.getAttribute('data-display') != \"d\") {\r\n // resetMenu(menu);\r\n // }\r\n // else if (screen.width <= 1023 && menu.getAttribute('data-display') != \"m\") {\r\n // resetMenu(menu);\r\n // }\r\n //});\r\n\r\n //Main menu click event\r\n menu.addEventListener('click', function (e) {\r\n let clickElement = e.srcElement;\r\n if ((clickElement as HTMLElement).tagName.toLowerCase() == 'span' || (clickElement as HTMLElement).tagName.toLowerCase() == 'svg') {\r\n clickElement = (clickElement as HTMLElement)?.closest('button')\r\n }\r\n if ((clickElement as HTMLElement)?.classList.contains('cat-link')) {\r\n var level = (clickElement as HTMLElement)?.closest('[data-navLevel]')?.getAttribute(\"data-navLevel\");\r\n if (level != \"2\") {\r\n //Simple toggle\r\n if ((clickElement as HTMLElement)?.getAttribute('aria-expanded') == \"false\") {\r\n //Switch off any items that are active\r\n var activeItemLevel = document.querySelector('[data-navLevel = \"' + level + '\"]');\r\n var activeItems = activeItemLevel?.querySelectorAll('button[aria-expanded=\"true\"]');\r\n for (var i = 0, max = activeItems?.length; i < (max ? max : 0); i++) {\r\n if (activeItems != null && activeItems[i]?.closest('[data-navLevel]')?.getAttribute(\"data-navLevel\") == level) {\r\n onOffItems(activeItems[i] as HTMLElement, 'off');\r\n }\r\n }\r\n onOffItems((clickElement as HTMLElement), 'on');\r\n }\r\n else {\r\n onOffItems((clickElement as HTMLElement), 'off');\r\n }\r\n }\r\n else {\r\n //Level 2 items\r\n var index = getElementIndex((clickElement as HTMLElement)?.parentElement as HTMLElement);\r\n var menuSubs = document.querySelectorAll('.category-column-sub');\r\n\r\n var menuSub = null;\r\n for (var i = 0, max1 = menuSubs.length; i < max1; i++) {\r\n if (index == i) {\r\n menuSub = menuSubs[i];\r\n }\r\n }\r\n if ((clickElement as HTMLElement).getAttribute('aria-expanded') == \"false\") {\r\n //Switch off any active items first\r\n var activeItem = document.querySelector('.category-column ul li[data-hovered=\"true\"]');\r\n if (activeItem !== null) {\r\n var activeItemIndex = getElementIndex(activeItem as HTMLElement);\r\n activeItem.setAttribute('data-hovered', 'false');//li\r\n activeItem.querySelector('button')?.setAttribute('aria-expanded', 'false');//button\r\n var menuSubOff = null;\r\n for (var i = 0, max2 = menuSubs.length; i < max2; i++) {\r\n if (activeItemIndex == i) {\r\n menuSubOff = menuSubs[i];\r\n }\r\n }\r\n menuSubOff?.setAttribute('data-active', 'false');\r\n }\r\n (clickElement as HTMLElement).setAttribute('aria-expanded', 'true');\r\n (clickElement as HTMLElement).parentElement?.setAttribute('data-hovered', 'true');\r\n menuSub?.setAttribute('data-active', 'true');\r\n }\r\n }\r\n }\r\n else {\r\n // if non .cat-link\r\n if ((clickElement as HTMLElement).closest('[data-navLevel]')?.getAttribute(\"data-navLevel\") == \"1\") {\r\n resetMenu(menu);\r\n }\r\n }\r\n\r\n });\r\n\r\n //Close menu when user clicks outside\r\n document.addEventListener('click', function (e) {\r\n // This closes menu on click outside\r\n let target = e.target;\r\n if (menu && target && !menu.contains(target as HTMLElement)) {\r\n resetMenu(menu);\r\n }\r\n });\r\n\r\n //TODO // key functions for keyboard navigation\r\n //var level2MenuCatColumns = menu.querySelectorAll('.category-column');\r\n //for (var i = 0, max = level2MenuCatColumns.length; i < max; i++) {\r\n // var level2MenuCatColumn = level2MenuCatColumns[i];\r\n // level2MenuCatColumn.addEventListener('keyup', function (e) {\r\n // if ((e as Event).key == \"Enter\") {\r\n // console.log(e.srcElement);\r\n // var firstElementSub = document.querySelectorAll('.category-column-sub[data-active=\"true\"] ul li a')[0];\r\n // firstElementSub.focus();\r\n // }\r\n // });\r\n //}\r\n\r\n var level2MenuSub = menu.querySelectorAll('.category-column-sub');\r\n let max = level2MenuSub.length;\r\n for (var i = 0; i < max; i++) {\r\n var level2MenuSubAnchors = level2MenuSub[i].querySelectorAll('a');\r\n let max2 = level2MenuSubAnchors.length;\r\n for (var b = 0; b < max2; b++) {\r\n if (b + 1 == max2) {\r\n level2MenuSubAnchors[b].addEventListener('keydown', function (e) {\r\n if (e.keyCode == 9) {\r\n menu?.querySelector('.category-column li[data-hovered=\"true\"]')?.querySelector('button')?.focus();\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n //Breadcrumb functions\r\n var breadcrumbButtons = menu.querySelectorAll('.breadcrumb .parent-page');\r\n var maxBreadcrumbs = breadcrumbButtons.length;\r\n for (var i = 0; i < maxBreadcrumbs; i++) {\r\n breadcrumbButtons[i].addEventListener('click', function (e) {\r\n var navLevelElm = (e.srcElement as HTMLElement).closest('[data-navlevel]') as HTMLElement;\r\n var navLevel = navLevelElm.getAttribute('data-navlevel');\r\n if (navLevel && parseInt(navLevel) != 2) {\r\n navLevelElm = navLevelElm.closest('li') as HTMLElement;\r\n navLevelElm.setAttribute('class', 'false');\r\n }\r\n else {\r\n navLevelElm.setAttribute('data-active', 'false');\r\n }\r\n\r\n navLevelElm.querySelectorAll('[aria-expanded]').forEach(function (item: any) {\r\n item.setAttribute('aria-expanded', 'false');\r\n });\r\n navLevelElm.querySelectorAll('[data-active]:not([data-navlevel=\"3\"])').forEach(function (item: any) {\r\n item.setAttribute('data-active', 'false');\r\n });\r\n navLevelElm.querySelectorAll('[data-hovered]').forEach(function (item: any) {\r\n item.setAttribute('data-hovered', 'false');\r\n });\r\n navLevelElm.querySelectorAll('.active').forEach(function (item: any) {\r\n item.classList.remove('active');\r\n });\r\n\r\n if (navLevel && parseInt(navLevel) == 2) {\r\n //Go up a level and switch off the button that opened the level\r\n var navLevelElmUp1 = navLevelElm.closest('[data-navlevel=\"' + (parseInt(navLevel) - 1) + '\"]');\r\n var navLevelElmUp1Button = navLevelElmUp1?.querySelector('button[aria-expanded=\"true\"]');\r\n if (navLevelElmUp1Button != null) {\r\n navLevelElmUp1Button.setAttribute('aria-expanded', 'false');\r\n }\r\n }\r\n });\r\n }\r\n\r\n //Mobile menu functions\r\n var mobilemenu = document.querySelector('button.mobile-menu');\r\n mobilemenu?.addEventListener(\"click\", handleMobileMenu); \r\n\r\n var mobilebg = document.querySelector('.mobile-background');\r\n mobilebg?.addEventListener(\"click\", closeMobileMenu);\r\n\r\n var tertiarynav = document.querySelector('.tertiary-nav');\r\n if (tertiarynav && mobilemenu && mobilebg) {\r\n var primarynav = document.getElementById('nav-container');\r\n if (primarynav) {\r\n primarynav.style.top = \"81px\";\r\n }\r\n (mobilebg as HTMLElement).style.top = \"81px\";\r\n }\r\n }\r\n\r\n ///////////////////////////////////////////////////////////////////\r\n // Sticky search bar on mobile //\r\n ///////////////////////////////////////////////////////////////////\r\n\r\n var sh = document.querySelector(\".site-head\");\r\n var h = document.querySelector(\".search-container\");\r\n var stuck = false;\r\n var stickPoint = getOffsetTop(h);\r\n\r\n window.onscroll = function (e) {\r\n var offset = window.pageYOffset;\r\n\r\n if (!stuck && offset > stickPoint) {\r\n if (h) h.classList.add('stuck');\r\n if (sh) sh.classList.add('stuck');\r\n stuck = true;\r\n } else if (stuck && offset <= stickPoint) {\r\n if (h) h.classList.remove('stuck');;\r\n if (sh) sh.classList.remove('stuck');\r\n stuck = false\r\n }\r\n }\r\n }\r\n\r\n /*toggles, used in mobile footer used in all pages*/\r\n var ToggleButtons = document.querySelectorAll('[data-toggle-parent]');\r\n if (ToggleButtons.length) {\r\n ToggleButtons.forEach(function (toggle) {\r\n if (!toggle.classList.contains('click-bound')) {\r\n toggle.classList.add('click-bound');\r\n toggle.addEventListener('click', function (e) {\r\n let elem = e.target as HTMLElement;\r\n if (elem.getAttribute('aria-expanded') == \"false\") {\r\n elem.setAttribute('aria-expanded', 'true')\r\n }\r\n else {\r\n elem.setAttribute('aria-expanded', 'false');\r\n }\r\n })\r\n }\r\n })\r\n }\r\n\r\n\r\n\r\n\r\n var loginPartial = document.querySelector(\".loginPartial\");\r\n var loginPartialMobile = document.getElementById(\"sign-in-mobile\");\r\n\r\n if (loginPartial) {\r\n if (globalParms && globalParms.LoginPartialURL) {\r\n fetch(globalParms.LoginPartialURL)\r\n .then(response => response.text())\r\n .then(function (data) {\r\n if (data && loginPartial) {\r\n loginPartial.innerHTML = data;\r\n }\r\n if (data && loginPartialMobile) {\r\n loginPartialMobile.innerHTML = data;\r\n }\r\n });\r\n }\r\n }\r\n\r\n var accountLinks = document.querySelector(\".account-links\");\r\n\r\n if (accountLinks) {\r\n if (globalParms && globalParms.AccountLinksURL) {\r\n fetch(globalParms.AccountLinksURL)\r\n .then(response => response.text())\r\n .then(function (data) {\r\n if (data && accountLinks) {\r\n accountLinks.innerHTML = data;\r\n var basketButton = document.getElementById(\"basketButton\");\r\n if (basketButton) {\r\n basketButton.addEventListener(\"click\", function () {\r\n window.location.href = basketButton!.getAttribute(\"data-url\")!;\r\n });\r\n\r\n ShoppingBasket_UpdateItemCount();\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n initLightYouTube();\r\n\r\n document.addEventListener('DOMContentLoaded', function () {\r\n let mainNavContainers = document.querySelectorAll('#nav-container ul li div[data-navlevel=\"2\"]')\r\n let navHeight = 0;\r\n for (let i = 0; i < mainNavContainers.length; i++) { \r\n let elemHeight = window.getComputedStyle(mainNavContainers[i]).getPropertyValue(\"height\");\r\n if (Number(elemHeight.replace('px','')) > navHeight) {\r\n navHeight = Number(elemHeight.replace('px',''));\r\n }\r\n }\r\n let mainContent = document.getElementById('main-content');\r\n if (mainContent) {\r\n mainContent.style.minHeight = (navHeight - 86) + 'px';\r\n }\r\n });\r\n}\r\n\r\nexport function ShoppingBasket_UpdateItemCount() {\r\n var itemCount = document.querySelector(\".basket--link span.item-count\");\r\n\r\n if (itemCount != null) {\r\n try {\r\n var cookie = Utils.getCookie(ShoppingBasketParms.CookieKey);\r\n if (cookie) {\r\n var basketDataJSON = JSON.parse(unescape(cookie));\r\n\r\n itemCount.innerHTML = basketDataJSON.NumberOfItems;\r\n\r\n } else {\r\n itemCount.innerHTML = \"0\";\r\n }\r\n }\r\n catch (err) { console.log(err) }\r\n }\r\n}\r\n\r\n/* Light YouTube Embeds by @labnol */\r\n/* and img lazy loads */\r\n/* Web: http://labnol.org/?p=27941 */\r\n\r\nfunction initLightYouTube() {\r\n var div, n,\r\n v = document.getElementsByClassName(\"youtube-player\");\r\n for (n = 0; n < v.length; n++) {\r\n div = document.createElement(\"div\");\r\n div.setAttribute(\"data-id\", (v[n] as any).dataset.id);\r\n div.innerHTML = labnolThumb((v[n] as any).dataset.id);\r\n div.onclick = labnolIframe;\r\n v[n].appendChild(div);\r\n }\r\n loadLazyImages();\r\n\r\n function labnolThumb(id: string) {\r\n var thumb = '', //hqdefault\r\n play = '
    ';\r\n return thumb.replace(\"ID\", id) + play;\r\n }\r\n\r\n function labnolIframe(evt: Event) {\r\n let target = (evt.target as HTMLElement).parentNode;\r\n if (target) {\r\n var iframe = document.createElement(\"iframe\");\r\n var embed = \"https://www.youtube.com/embed/ID?autoplay=1\";\r\n let dataID = (target as HTMLElement).getAttribute(\"data-id\");\r\n if (dataID) iframe.setAttribute(\"src\", embed.replace(\"ID\", dataID as string));\r\n iframe.setAttribute(\"frameborder\", \"0\");\r\n iframe.setAttribute(\"allowfullscreen\", \"1\");\r\n let parent = (target as HTMLElement).parentElement;\r\n if (parent) parent.replaceChild(iframe, target);\r\n }\r\n }\r\n\r\n // Lazy-load images. Observe images until they are loaded.\r\n function loadLazyImages() {\r\n var lazyLoadOptions = {\r\n // https://www.competa.com/blog/lazy-loading-with-the-intersection-observer/\r\n //root: document.querySelector('div.gak-container'), // Comment this to use the default browser's viewport.\r\n rootMargin: '25px',\r\n threshold: 0//1.0\r\n };\r\n\r\n //initImagesForProductListings();\r\n\r\n var myImgs = document.querySelectorAll('img[lazy-src]');\r\n try {\r\n var observer = new IntersectionObserver(function (entries) {\r\n //console.log('loadLazyImages: entries ' + entries.length);\r\n entries.forEach(function (entry) {\r\n if (entry.isIntersecting) {\r\n // Load image\r\n var imgElem = entry.target;\r\n loadLazyImages_doImage(imgElem as HTMLElement);\r\n //console.log('in the view');\r\n observer.unobserve(imgElem);\r\n } else {\r\n //console.log('out of view');\r\n }\r\n });\r\n }, lazyLoadOptions);\r\n\r\n myImgs.forEach(function (image) {\r\n observer.observe(image);\r\n });\r\n }\r\n catch (err) {\r\n loadLazyImages_notSupported(myImgs);\r\n }\r\n\r\n function loadLazyImages_notSupported(myImgs: any) {\r\n // IntersectionObserver (and forEach()) not supported on Safari and old versions of IE 28/01/2019.\r\n //console.log(\"lazy load images not supported\");\r\n for (var i = 0, len = myImgs.length; i < len; i++) {\r\n loadLazyImages_doImage(myImgs[i]);\r\n }\r\n }\r\n\r\n function loadLazyImages_doImage(imgElem: HTMLElement) {\r\n setTimeout(function () {\r\n var realSrc = imgElem.getAttribute(\"lazy-src\"); //$(imgElem).attr(\"lazy-src\");\r\n if (realSrc) {\r\n imgElem.setAttribute(\"src\", realSrc); //.src = realSrc;\r\n imgElem.removeAttribute(\"lazy-src\"); //$(imgElem).removeAttr(\"lazy-src\");\r\n }\r\n }, 1);\r\n }\r\n\r\n //function initImagesForProductListings() {\r\n // $('ul.productListing').each(function (index) {\r\n // var curProdList = $(this);\r\n // loadImagesForProductListings_BasedOnView(curProdList);\r\n // });\r\n //}\r\n }\r\n\r\n};\r\n\r\n//function loadImagesForProductListings_BasedOnView(prodListing) {\r\n// var isGridView = prodListing.hasClass('view-as-grid');\r\n// prodListing.find('.productImageWrapper img').each(function (index) {\r\n// var img = $(this);\r\n// setTimeout(function () {\r\n// var newImgUrl = img.closest('.innerwrapper').data(isGridView ? 'prodimggridview' : 'prodimglistview');\r\n// // Set the new Img Url to the proper attribute src or lazy-src.\r\n// if (img.attr(\"lazy-src\")) {\r\n// img.attr(\"lazy-src\", newImgUrl);\r\n// }\r\n// else if (img[0].src) {\r\n// img[0].src = newImgUrl;\r\n// }\r\n// }, 1);\r\n// });\r\n//}","var V3_URL = 'https://js.stripe.com/v3';\nvar V3_URL_REGEX = /^https:\\/\\/js\\.stripe\\.com\\/v3\\/?(\\?.*)?$/;\nvar EXISTING_SCRIPT_MESSAGE = 'loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used';\nvar findScript = function findScript() {\n var scripts = document.querySelectorAll(\"script[src^=\\\"\".concat(V3_URL, \"\\\"]\"));\n\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i];\n\n if (!V3_URL_REGEX.test(script.src)) {\n continue;\n }\n\n return script;\n }\n\n return null;\n};\n\nvar injectScript = function injectScript(params) {\n var queryString = params && !params.advancedFraudSignals ? '?advancedFraudSignals=false' : '';\n var script = document.createElement('script');\n script.src = \"\".concat(V3_URL).concat(queryString);\n var headOrBody = document.head || document.body;\n\n if (!headOrBody) {\n throw new Error('Expected document.body not to be null. Stripe.js requires a element.');\n }\n\n headOrBody.appendChild(script);\n return script;\n};\n\nvar registerWrapper = function registerWrapper(stripe, startTime) {\n if (!stripe || !stripe._registerWrapper) {\n return;\n }\n\n stripe._registerWrapper({\n name: 'stripe-js',\n version: \"1.34.0\",\n startTime: startTime\n });\n};\n\nvar stripePromise = null;\nvar loadScript = function loadScript(params) {\n // Ensure that we only attempt to load Stripe.js at most once\n if (stripePromise !== null) {\n return stripePromise;\n }\n\n stripePromise = new Promise(function (resolve, reject) {\n if (typeof window === 'undefined') {\n // Resolve to null when imported server side. This makes the module\n // safe to import in an isomorphic code base.\n resolve(null);\n return;\n }\n\n if (window.Stripe && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n }\n\n if (window.Stripe) {\n resolve(window.Stripe);\n return;\n }\n\n try {\n var script = findScript();\n\n if (script && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n } else if (!script) {\n script = injectScript(params);\n }\n\n script.addEventListener('load', function () {\n if (window.Stripe) {\n resolve(window.Stripe);\n } else {\n reject(new Error('Stripe.js not available'));\n }\n });\n script.addEventListener('error', function () {\n reject(new Error('Failed to load Stripe.js'));\n });\n } catch (error) {\n reject(error);\n return;\n }\n });\n return stripePromise;\n};\nvar initStripe = function initStripe(maybeStripe, args, startTime) {\n if (maybeStripe === null) {\n return null;\n }\n\n var stripe = maybeStripe.apply(undefined, args);\n registerWrapper(stripe, startTime);\n return stripe;\n}; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\n// own script injection.\n\nvar stripePromise$1 = Promise.resolve().then(function () {\n return loadScript(null);\n});\nvar loadCalled = false;\nstripePromise$1[\"catch\"](function (err) {\n if (!loadCalled) {\n console.warn(err);\n }\n});\nvar loadStripe = function loadStripe() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n loadCalled = true;\n var startTime = Date.now();\n return stripePromise$1.then(function (maybeStripe) {\n return initStripe(maybeStripe, args, startTime);\n });\n};\n\nexport { loadStripe };\n","import * as Stripe from '@stripe/stripe-js';\r\nimport { deliveryOptionsPersist } from './gak-DeliveryOptions-persist';\r\nimport Utils from './utils';\r\nimport { updateWholeCart, ShoppingBasket_BindEvents, ShoppingBasket_ProceedToCheckout, showBasketError } from './gak-ShoppingBasket';\r\nimport { initTabs } from \"./tabs\"\r\nimport { debounceScript } from './Debounce.js';\r\nimport { loadPayPalButton } from './gak-PayPalButton';\r\nimport { getFormattedPrice, numberToCurrency } from './price-formatter';\r\n\r\nvar bpj: any;\r\nvar paymentRequest: any;\r\n\r\ndeclare var DeliveryOptionsParms: any;\r\ndeclare var EuroPrice_CurrencySymbol: any;\r\ndeclare var EuroPrice_ConversionRate: any;\r\ndeclare var basketConfig: any;\r\ndeclare var ShoppingBasketParms: any;\r\n\r\nexport var basketParams: any;\r\n\r\nconst requestHeaders: HeadersInit = new Headers();\r\nrequestHeaders.set('Content-Type', 'application/json');\r\n\r\nexport function DeliveryOptions_Init(bpjValue: any) {\r\n bpj = bpjValue;\r\n}\r\n\r\nvar pdojj: any;\r\nvar shoppingBasketContainer = \"#shoppingBasketContent\";\r\nvar deliveryOptionsContainer = \"#divDeliveryOptionsContainer\";\r\nvar divPaymentButtonsSelector = \"#divBasketPaymentsButtonRow\";\r\n\r\nexport function DeliveryOptions_BindEvents(isInit: boolean): void {\r\n var requestApplyVoucher =\r\n (debounceScript as any)(invokeApplyVoucher,\r\n 500,\r\n { 'leading': false, 'trailing': true });\r\n /***** PARAMETERS SECTION ******/\r\n\r\n /* Delivery options JSON, containing the reduced necessary data for all delivery options available and the defaults (window.dojj) */\r\n showHideCheckoutBox();\r\n if (isInit) {\r\n if (bpj)\r\n basketParams = JSON.parse(Utils.atou(bpj));\r\n } else {\r\n var dojj = (document.getElementById(\"dojj\"));\r\n\r\n if (dojj) {\r\n /* Delivery options JSON, containing the reduced necessary data for all delivery options available and the defaults */\r\n pdojj = JSON.parse(Utils.atou(dojj.value));\r\n /* This pdojj will contain:\r\n pdojj.doj: Reduced Deliver Options data\r\n pdojj.dodj: Reduced Default data\r\n pdojj.pdj: Payment data containing the data necessary to display the payment buttons.\r\n */\r\n }\r\n }\r\n\r\n // No params whatsoever: return\r\n if (!basketParams && !pdojj) return;\r\n\r\n /***** END PARAMETERS SECTION ******/\r\n\r\n function triggerFinance() {\r\n //FinanceTab callback\r\n var financeTabInitializeData = (window).financeTabInitializeData;\r\n if (typeof financeTabInitializeData === 'function' && financeTabInitializeData !== null) {\r\n financeTabInitializeData();\r\n }\r\n }\r\n //Defines callback used by FinanceTab\r\n var lastHasFinanceOptions: boolean;\r\n (window).onHasFinanceOptions = function (hasFinanceOptions: boolean) {\r\n lastHasFinanceOptions = hasFinanceOptions;\r\n setCurrentDeliveryOptions();\r\n };\r\n\r\n // Perform processing that does not depend on having dojj & dodjj defined (eg. when there is nothing\r\n // in stock in the current basket)\r\n if (basketParams && basketParams.showLowStock) {\r\n var el = document.getElementById('delvStockIsLow');\r\n if (el) {\r\n el.classList.remove('hidden');\r\n }\r\n }\r\n\r\n // Region / Country changed.\r\n var delvRegId = (document.getElementById(\"DeliveryRegionId\")!);\r\n var delvRegIdSelect = (document.getElementById(\"DeliveryRegionIdSelect\")!);\r\n\r\n if (delvRegId) {\r\n delvRegId.addEventListener(\"change\", handledelvRgIdChange);\r\n }\r\n\r\n if (delvRegIdSelect) {\r\n delvRegIdSelect.addEventListener(\"change\", handledelvRgIdChange);\r\n }\r\n if (isInit === true) {\r\n if (!isBasketEmpty()) {\r\n var selDlvReg = delvRegId.value;\r\n\r\n DeliveryOptions_refresh(selDlvReg, deliveryOptionsPersist.getSelectedDeliveryTypeOption(), isInit !== true);\r\n }\r\n } else {\r\n if (basketParams && (basketParams.OutOfStock || basketParams.IsGiftVoucherOnlyOrder)) {\r\n setCurrentDeliveryOptions();\r\n }\r\n\r\n Voucher_BindEvents();\r\n }\r\n\r\n /*\r\n When clicking a DAY in the calendar:\r\n *\tIf currently selected Delivery Option is not available for that day,\r\n -\tSelect default Delivery Option for that day\r\n *\tUpdate price from matrix [DeliveryOption][Day]\r\n */\r\n\r\n var speficDays = document.querySelectorAll(`${deliveryOptionsContainer} #specificDayTable td:not(.unavailable)`);\r\n\r\n if (speficDays) {\r\n speficDays.forEach(function (el, i) {\r\n el.addEventListener('click', function (e) {\r\n var internalDay = el!.getAttribute(\"data-day\");\r\n var dtid = getSelectedDelvOptData().dtid;\r\n if (isSuperSaverDt(dtid)) {\r\n // reset to default delivery type if current is super saved\r\n // (maybe override again below)\r\n dtid = getDefaultData().i;\r\n }\r\n var selPrice = getDelvOptPrice(dtid, internalDay);\r\n // Null, undefined, and 0 are falsey, but 0 is a valid price.\r\n if (!selPrice && selPrice !== 0) {\r\n dtid = getDefaultDelvOptID(internalDay);\r\n selPrice = getDelvOptPrice(dtid, internalDay);\r\n }\r\n\r\n setSelectedDelvOptData(dtid, internalDay, selPrice, true);\r\n });\r\n });\r\n }\r\n /*\r\n When clicking a DELIVERY OPTION item in the list:\r\n *\tIf currently selected Day is not available for that Delivery Option,\r\n -\tSelect default DAY for that Delivery Option\r\n *\tUpdate price from matrix [DeliveryOption][Day]\r\n */\r\n const handleOptionBoxChangeEvent = new Event('handleOptionBoxChangeEvent');\r\n\r\n var optionBoxes = document.querySelectorAll(`${deliveryOptionsContainer} .deliveryOption .input-checkbox.optionBox`);\r\n if (optionBoxes) {\r\n optionBoxes.forEach(function (el, i) {\r\n el.addEventListener(\"change\", handleOptionBoxChange);\r\n el.addEventListener(\"handleOptionBoxChangeEvent\", handleOptionBoxChange);\r\n });\r\n }\r\n\r\n var calendarLink = document.getElementById(\"openCalendar\");\r\n\r\n if (calendarLink)\r\n calendarLink.addEventListener(\"click\", openCalendar);\r\n\r\n\r\n function handleOptionBoxChange(el: any) {\r\n var dtid = el.target!.getAttribute(\"data-dtid\");\r\n var internalDay = getSelectedDelvOptData().day;\r\n var selPrice = getDelvOptPrice(dtid, internalDay);\r\n // Null, undefined, and 0 are falsey, but 0 is a valid price.\r\n if (!selPrice && selPrice !== 0) {\r\n internalDay = getDefaultDay(dtid);\r\n selPrice = getDelvOptPrice(dtid, internalDay);\r\n }\r\n\r\n setSelectedDelvOptData(dtid, internalDay, selPrice);\r\n }\r\n\r\n const handledelvRgIdChangeEvent = new Event('handledelvRgIdChangeEvent');\r\n\r\n function handledelvRgIdChange(el: any) {\r\n var delvRgIdVal = el.target.value\r\n updateWholeCart(delvRgIdVal);\r\n }\r\n\r\n // Trigger the selection.\r\n\r\n var selDlv = deliveryOptionsPersist.getSelectedDelivery();\r\n var defaultSelection = document.querySelector(`${deliveryOptionsContainer} .deliveryOption .input-checkbox.optionBox.default`);\r\n\r\n if (selDlv && selDlv.deliveryTypeID && selDlv.deliveryDate\r\n // The Price might change for the same delivery, depending on the value of the basket.\r\n && setSelectedDelvOptData(selDlv.deliveryTypeID, selDlv.deliveryDate, getDelvOptPrice(selDlv.deliveryTypeID, selDlv.deliveryDate))\r\n ) {\r\n // Nothing, already done.\r\n }\r\n else {\r\n // Trigger the default selection.\r\n if (defaultSelection) {\r\n defaultSelection.dispatchEvent(handleOptionBoxChangeEvent)\r\n }\r\n }\r\n\r\n function getCheckboxInputForDeliveryType(dtid: any): HTMLInputElement {\r\n return (document.querySelector(`${deliveryOptionsContainer} .deliveryOption .input-checkbox.optionBox[data-dtid='${dtid}']`));\r\n }\r\n\r\n function isSuperSaverDt(dtid: any) {\r\n var myDt = getDtById(dtid);\r\n if (!myDt || myDt.length <= 0) return null;\r\n\r\n return myDt[0].ss;\r\n }\r\n\r\n function isClickAndCollectDt(dtid: any) {\r\n var myDt = getDtById(dtid);\r\n if (!myDt || myDt.length <= 0) return null;\r\n\r\n return myDt[0].cc;\r\n }\r\n\r\n //function isAllDaysAvbleDt(dtid) {\r\n // var myDt = getDtById(dtid);\r\n // if (!myDt || myDt.length <= 0) return null;\r\n\r\n // return myDt[0].ada;\r\n //}\r\n\r\n // *********** gak-DeliveryOptions internal use\r\n function getSelectedDelvOptData() {\r\n var deliveryTypeID = (document.getElementById(\"deliveryTypeID\"))!;\r\n var deliveryDate = (document.getElementById(\"deliveryDate\"))!;\r\n var selectedData = {\r\n dtid: deliveryTypeID.value, // Get dtid from the selected item in DT List.\r\n day: deliveryDate.value // Get day from the selected day in Calendar.\r\n };\r\n\r\n return selectedData;\r\n }\r\n\r\n function setSelectedDelvOptData(dtid: any, internalDay: any, selPrice: any, fromCalendar: boolean = false) {\r\n // Update UI:\r\n // Update DT List\r\n // Remove all selections\r\n if ((!internalDay || !isSuperSaverDt(dtid)) && !fromCalendar) {\r\n internalDay = getDefaultDay(dtid);\r\n }\r\n\r\n var calendarSelector = `${deliveryOptionsContainer} #specificDayTable td`;\r\n var elemDay = document.querySelector(`${calendarSelector}[data-day='${internalDay}']`);\r\n var deliveryTypeID = (document.getElementById(\"deliveryTypeID\"))!;\r\n var deliveryPrice = (document.getElementById(\"deliveryPrice\"))!;\r\n var deliveryDate = (document.getElementById(\"deliveryDate\"))!;\r\n \r\n if (elemDay?.classList.contains('unavailable') || selPrice == null) {\r\n var checkoutPrice = document.getElementById(\"checkoutDeliveryPrice\");\r\n\r\n if (checkoutPrice && deliveryPrice)\r\n checkoutPrice.textContent = getFormattedPrice(deliveryPrice.value, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate);\r\n\r\n return false;\r\n }\r\n\r\n var elemDt = getCheckboxInputForDeliveryType(dtid);\r\n // Anything changed?\r\n\r\n var isDeliveryTypeChangedx = deliveryTypeID ? deliveryTypeID.value != dtid : false;\r\n var isDeliveryPriceChangedx = deliveryPrice ? parseFloat(deliveryPrice?.value || \"-1\") !== parseFloat(selPrice || 0) : false;\r\n var isDeliveryDateChangedx = deliveryDate ? deliveryDate.value != internalDay : false;\r\n var isNothingChanged = isInit || !(isDeliveryTypeChangedx || isDeliveryPriceChangedx || isDeliveryDateChangedx);\r\n\r\n if (isNothingChanged) {\r\n if (elemDt)\r\n elemDt.checked = true;\r\n return true;\r\n }\r\n\r\n document.querySelector(`${deliveryOptionsContainer} .deliveryOption`)?.classList.remove('highlightBlue');\r\n document.querySelector(`${deliveryOptionsContainer} .deliveryOption.chosenOption`)?.classList.remove('chosenOption');\r\n (document.querySelector(`${deliveryOptionsContainer} .deliveryOption .input-checkbox`)).setAttribute('checked', \"false\");\r\n // Select current item\r\n elemDt.checked = true;\r\n elemDt.closest(\".deliveryOption\")?.classList.add('chosenOption');\r\n\r\n // Current item's day-type prefix\r\n var myDtDays = getDaysForDtid(dtid, internalDay);\r\n // Don't prefix Super Saver (only super saver's input has a truthy value for 'daywindow' data value)\r\n // Plus always switch to first possible dates\r\n if (isSuperSaverDt(dtid)) {\r\n var superSaverinternalDay = myDtDays[0].d;\r\n if (superSaverinternalDay != internalDay) {\r\n setSelectedDelvOptData(dtid, superSaverinternalDay, selPrice);\r\n return; // Make sure we don't process the rest of the current function.\r\n }\r\n }\r\n\r\n var allDays = document.querySelectorAll(calendarSelector);\r\n\r\n if (allDays) {\r\n allDays.forEach(function (e, i) {\r\n e.classList.remove('chosenDay')\r\n });\r\n }\r\n\r\n if (elemDay)\r\n elemDay.classList.add('chosenDay');\r\n\r\n // When a day is selected, the prices displayed for all the items in DT List must be updated.\r\n var deliveryOptions = document.querySelectorAll(`${deliveryOptionsContainer} .deliveryOption`);\r\n\r\n deliveryOptions.forEach(function (el, i) {\r\n var myDtid = el.querySelector(\".input-checkbox.optionBox\")?.getAttribute(\"data-dtid\");\r\n var myPrice = getDelvOptPrice(myDtid, internalDay);\r\n\r\n if (myPrice == null) {\r\n // Dt not available for the day. Get Default price.\r\n myPrice = getDelvOptPrice(myDtid, getDefaultDay(myDtid)); //\"-\";\r\n }\r\n\r\n // Format Price\r\n var formattedPrice = getFormattedPrice(myPrice, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate);\r\n\r\n var priceSpan = el.querySelector(\".deliveryOptionPrice\");\r\n\r\n if (priceSpan)\r\n priceSpan.textContent = formattedPrice;\r\n });\r\n\r\n // Update form data\r\n var deliveryTypeID = (document.getElementById(\"deliveryTypeID\"));\r\n\r\n if (deliveryTypeID)\r\n deliveryTypeID.value = dtid;\r\n\r\n var deliveryDate = (document.getElementById(\"deliveryDate\"));\r\n\r\n if (deliveryDate)\r\n deliveryDate.value = internalDay;\r\n\r\n // DeliveryLastDate. Is there a dayWindow?\r\n var dayWindow = elemDt.getAttribute(\"data-daywindow\");\r\n var dayTo = null;\r\n\r\n if (dayWindow) {\r\n var daysToAdd = parseInt(dayWindow) - 1;\r\n var dayWindowArray = getDayWindowForDt(dtid, internalDay, daysToAdd);\r\n // Select the whole set of days in the window\r\n dayWindowArray?.forEach(function (x, index) {\r\n document.querySelector(`${calendarSelector}[data-day='${x}']`)?.classList.add('chosenDay');\r\n });\r\n dayTo = dayWindowArray?.slice(-1)[0];\r\n }\r\n var deliveryLastDate = (document.getElementById(\"deliveryLastDate\"));\r\n\r\n if (deliveryLastDate)\r\n deliveryLastDate.value = dayTo;\r\n //// Note \"|| -1\"\r\n //var isDeliveryPriceChanged = parseFloat($('#deliveryPrice').val() || -1) !== parseFloat(selPrice || 0);\r\n var deliveryPrice = (document.getElementById(\"deliveryPrice\"));\r\n\r\n if (deliveryPrice)\r\n deliveryPrice.value = selPrice;\r\n\r\n var checkoutPrice = document.getElementById(\"checkoutDeliveryPrice\");\r\n\r\n if (checkoutPrice)\r\n checkoutPrice.textContent = getFormattedPrice(selPrice, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate);\r\n\r\n var checkoutSubtotalPrice = document.getElementById(\"checkoutSubtotalPrice\");\r\n\r\n if (checkoutSubtotalPrice && basketParams.PriceTotalItems)\r\n checkoutSubtotalPrice.textContent = getFormattedPrice(basketParams.PriceTotalItems, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate);\r\n\r\n var giftVoucher = basketParams.GiftVouchers && basketParams.GiftVouchers.IsAnyApplied\r\n ? basketParams.GiftVouchers.DiscountValue : 0;\r\n var totalIncludingVATAndDelivery = document.getElementById(\"TotalIncludingVATAndDelivery\");\r\n if (totalIncludingVATAndDelivery && basketParams.PriceTotalItems) {\r\n totalIncludingVATAndDelivery.textContent = getFormattedPrice(basketParams.PriceTotalItems + selPrice - giftVoucher, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate);\r\n }\r\n\r\n // Keep selected values.\r\n deliveryOptionsPersist.saveSelectedDelivery(deliveryTypeID.value, deliveryDate.value);\r\n\r\n // Update calendar header.\r\n document.querySelector(`${deliveryOptionsContainer} .deliveryCalendar #deliveryMonthName`)!.innerHTML = internaldateToMonthDisplayString(internalDay);\r\n\r\n // Update Delivery Date field\r\n var newDeliveryHtml = isClickAndCollectDt(dtid) ? \"Click & Collect from our Brighton store \" : \"Delivery \";\r\n var displayDay = elemDay ? elemDay.getAttribute(\"data-displayday\") : \"\";\r\n if (dayTo == null) {\r\n newDeliveryHtml += \"\" + displayDay + \"\";\r\n }\r\n else {\r\n newDeliveryHtml += \"between \" + displayDay + \" and \" + internaldateToDisplayString(dayTo) + \"\";\r\n }\r\n var confirmationMessage = (elemDt.getAttribute(\"data-confirmationmsg\") || '').trim();\r\n newDeliveryHtml += confirmationMessage ? \", \" + confirmationMessage : \"\"; //Add confirmation message to the delivery text\r\n\r\n //Setting back previous title\r\n document.querySelectorAll(`${deliveryOptionsContainer} .deliveryOption .dtDescription`)?.forEach(function (e: any, i: any) {\r\n var title = e.getAttribute(\"data-title\");\r\n e.textContent = title;\r\n });\r\n\r\n var elemDtDescription = elemDt.closest(\".deliveryOption\")?.querySelector(\".dtDescription\");\r\n\r\n if (elemDtDescription)\r\n elemDtDescription.innerHTML = newDeliveryHtml;\r\n\r\n updatePaymentButtons(dtid, internalDay);\r\n\r\n return true;\r\n }\r\n\r\n function updatePaymentButtons(dtid: any, internalDay: any) {\r\n if (lastHasFinanceOptions === undefined) {\r\n triggerFinance();\r\n return;\r\n }\r\n\r\n var divPaymentButtons = document.querySelector(divPaymentButtonsSelector)!;\r\n var data = {\r\n dtid: dtid,\r\n d: internalDay,\r\n dop: getDelvOpts(),\r\n finance: lastHasFinanceOptions || false\r\n };\r\n\r\n //We need to work out if payment buttons are rendered, without considering STRIPE\r\n var paymentButtonsRendered = divPaymentButtons.querySelectorAll(`.payment-buttons button[name='checkout']:not([data-payment-mehtod='STRIPE']),\r\n .payment-buttons-finance,\r\n #paypal-button-container`).length > 0;\r\n\r\n if (!paymentButtonsRendered) {\r\n fetch(basketConfig.paymentButtonsUrl, {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n headers: requestHeaders\r\n }).then((response) => {\r\n if (response.ok) {\r\n return response.text();\r\n }\r\n showBasketError(\"Sorry but there was an error when loading payment buttons.\");\r\n }).then(function (result) {\r\n if (result) {\r\n divPaymentButtons.innerHTML = result;\r\n PaymentData_BindEvents(result);\r\n\r\n let parser = new DOMParser();\r\n const doc = parser.parseFromString(result, 'text/html');\r\n\r\n var netPayment = doc.getElementById(\"NetPayment\")!;\r\n var giftVoucherTotalRedeemed = doc.getElementById(\"GiftVoucherTotalRedeemed\")!;\r\n var hasPayPalCredit = doc.getElementById(\"HasPayPalCredit\")!;\r\n var hasPayPal = doc.getElementById(\"HasPayPal\")!;\r\n var highestDeposit = doc.getElementById(\"highestDeposit\")!;\r\n var highestDepositAmount = doc.getElementById(\"highestDepositAmount\")!;\r\n var shouldDisplayFinanceOptions = doc.getElementById(\"ShouldDisplayFinanceOptions\")!;\r\n\r\n DeliveryOptions_UpdatePdParams(parseFloat(netPayment.value), parseFloat(highestDeposit.value),\r\n parseFloat(highestDepositAmount.value), parseFloat(giftVoucherTotalRedeemed.value),\r\n hasPayPalCredit.value == 'True', hasPayPal.value == 'True', shouldDisplayFinanceOptions.value == 'True');\r\n\r\n var buttons = document.querySelectorAll(`${divPaymentButtonsSelector} button`);\r\n\r\n if (divPaymentButtons)\r\n buttons.forEach(function (button) {\r\n button.addEventListener('click', ShoppingBasket_ProceedToCheckout);\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n fetch(basketConfig.updatePaymentButtonsUrl, {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n headers: requestHeaders\r\n }).then((response) => {\r\n if (response.ok) {\r\n return response.json();\r\n }\r\n showBasketError(\"Sorry but there was an error when loading payment buttons.\");\r\n }).then(function (result: any) {\r\n DeliveryOptions_UpdatePdParams(result.NetPayment, result.HighestDeposit, result.highestDepositAmount,\r\n result.GiftVoucherTotalRedeemed, result.HasPayPalCredit, result.HasPayPal, result.ShouldDisplayFinanceOptions);\r\n PaymentData_BindEvents(result);\r\n });\r\n }\r\n }\r\n\r\n function setCurrentDeliveryOptions() {\r\n var dtid = (document.getElementById('deliveryTypeID'));\r\n var dd = (document.getElementById('deliveryDate'));\r\n\r\n if (!dtid && !dd) return;\r\n\r\n deliveryOptionsPersist.saveSelectedDelivery(dtid.value, dd.value);\r\n updatePaymentButtons(dtid.value, dd.value);\r\n }\r\n\r\n function Voucher_BindEvents() {\r\n var voucherCodeInput = (document.getElementById(\"voucherCode\"));\r\n var applyVoucherButton = document.getElementById(\"applyVoucherButton\");\r\n var removeVoucherButton = document.querySelectorAll(\"button.removeVoucherButton\");\r\n if (voucherCodeInput) {\r\n voucherCodeInput.addEventListener(\"keypress\", handleVoucherCodeInputKeyPress);\r\n }\r\n if (applyVoucherButton && voucherCodeInput) {\r\n applyVoucherButton.addEventListener(\"click\", handleApplyVoucherClick);\r\n }\r\n\r\n if (removeVoucherButton && removeVoucherButton.length > 0) {\r\n removeVoucherButton.forEach(function (button) {\r\n button.addEventListener(\"click\", handleRemoveVoucherClick);\r\n });\r\n }\r\n\r\n function handleRemoveVoucherClick(e: any) {\r\n var voucherCode = e.currentTarget.getAttribute(\"data-code\");\r\n var data = { voucherCode: voucherCode, remove: true };\r\n\r\n requestApplyVoucher(data);\r\n }\r\n\r\n function handleApplyVoucherClick(e: any) {\r\n e.preventDefault();\r\n\r\n var voucherCodeVal = voucherCodeInput.value;\r\n if (!voucherCodeVal || voucherCodeVal === \"\") return;\r\n\r\n var data = { voucherCode: voucherCodeInput.value, remove: false };\r\n\r\n requestApplyVoucher(data);\r\n }\r\n\r\n function handleVoucherCodeInputKeyPress(e: any) {\r\n if (e.keyCode === 13) {\r\n handleApplyVoucherClick(e);\r\n }\r\n }\r\n }\r\n\r\n function invokeApplyVoucher(data: any) {\r\n var applyVoucherButton = document.getElementById(\"applyVoucherButton\");\r\n\r\n fetch(ShoppingBasketParms.ApplyVoucherURL, {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n headers: requestHeaders\r\n }).then(response => response.text())\r\n .then(function (result) {\r\n var basket = document.querySelector(shoppingBasketContainer)!;\r\n basket.innerHTML = result;\r\n\r\n if (applyVoucherButton) {\r\n var newButton = applyVoucherButton.cloneNode(true);\r\n if (applyVoucherButton.parentNode)\r\n applyVoucherButton.parentNode.replaceChild(newButton, applyVoucherButton);\r\n }\r\n var bpj = (document.getElementById(\"bpj\")!);\r\n if (bpj)\r\n DeliveryOptions_Init(bpj.value);\r\n\r\n ShoppingBasket_BindEvents();\r\n DeliveryOptions_BindEvents(true);\r\n\r\n var voucherError = document.getElementById(\"voucherError\");\r\n var voucherErrorContainer = document.getElementById(\"voucherErrorContainer\")!;\r\n let voucherInput = document.querySelector(\"#gift-voucher-input .floating-button\");\r\n\r\n if (voucherError) {\r\n voucherErrorContainer.innerHTML = `${voucherError.value}`;\r\n if (voucherInput) voucherInput.classList.add('is-invalid');\r\n }\r\n else {\r\n voucherErrorContainer.hidden = true;\r\n if (voucherInput) voucherInput.classList.remove('is-invalid');\r\n }\r\n });\r\n }\r\n\r\n function PaymentData_BindEvents(result: any) {\r\n if (result.Buttons) {\r\n var buttonsSelector = document.querySelectorAll(\".btn-item:not(.stripe-button-container)\");\r\n var paymentButtonsContainer = document.querySelector(divPaymentButtonsSelector)!;\r\n\r\n if (buttonsSelector)\r\n buttonsSelector.forEach(function (button) {\r\n button.remove();\r\n });\r\n\r\n const financeText = document.getElementById(\"financeOptionsText\");\r\n\r\n if (financeText) {\r\n if (result.HasFinanceOptions) {\r\n financeText.removeAttribute(\"hidden\");\r\n } else {\r\n financeText.setAttribute(\"hidden\", \"hidden\");\r\n }\r\n }\r\n\r\n var buttonsContainer = document.getElementsByClassName(\"payment-buttons\")?.item(0);\r\n\r\n if (buttonsContainer) {\r\n let hasPayPal = false;\r\n result.Buttons.forEach(function (el: any) {\r\n const btnData = el;\r\n const amazonPayStyle = btnData.value == \"amz\" ? \"margin-top: 8px\" : \"\";\r\n const btnContent = btnData.displayImg === \"\"\r\n ? btnData.displayText\r\n : `${btnData.displayText}`;\r\n\r\n if (btnData.value != 'stripe') {\r\n if (btnData.value === 'pp') {\r\n hasPayPal = true;\r\n } else {\r\n const button = renderButton(!btnData.isFinance);\r\n const container = btnData.isFinance ? getFinanceContainer()! : buttonsContainer!\r\n\r\n addButtonToContainer(container, button);\r\n }\r\n }\r\n\r\n function getFinanceContainer() {\r\n if (!paymentButtonsContainer.querySelector(\".payment-buttons-finance\")) {\r\n const paymentButtonsFinance = document.createElement(\"div\");\r\n\r\n paymentButtonsFinance.classList.add(\"payment-buttons-finance\");\r\n paymentButtonsFinance.setAttribute(\"data-columns\", \"\");\r\n paymentButtonsContainer.appendChild(paymentButtonsFinance);\r\n }\r\n\r\n return document.getElementsByClassName(\"payment-buttons-finance\")?.item(0);\r\n }\r\n\r\n function renderButton(isFullWidth: boolean = true) {\r\n return `\r\n `;\r\n }\r\n\r\n function addButtonToContainer(container: Element, button: string) {\r\n container.innerHTML += button;\r\n }\r\n });\r\n\r\n const payPalButtonContainer = document.getElementById(\"paypal-button-container\");\r\n let ppMessage = document.querySelector(\"[data-pp-message]\");\r\n\r\n if (!hasPayPal && payPalButtonContainer?.hasChildNodes()) {\r\n payPalButtonContainer!.innerHTML = '';\r\n\r\n if (ppMessage) {\r\n ppMessage.remove();\r\n }\r\n } else if (hasPayPal && (!payPalButtonContainer || !payPalButtonContainer.hasChildNodes())) {\r\n setPayPalButton(result.ShouldDisplayFinanceOptions);\r\n\r\n if (!ppMessage && payPalButtonContainer) {\r\n ppMessage = document.createElement(\"div\");\r\n ppMessage.setAttribute(\"data-pp-message\", \"\");\r\n ppMessage.setAttribute(\"data-pp-amount\", result.NetPayment);\r\n ppMessage.setAttribute(\"data-pp-style-text-size\", \"11\");\r\n\r\n payPalButtonContainer.insertAdjacentElement(\"afterend\", ppMessage)\r\n }\r\n }\r\n }\r\n }\r\n\r\n var buttons = document.querySelectorAll(\"#divBasketPaymentsButtonRow button\");\r\n\r\n if (buttons) {\r\n buttons.forEach(function (btn) {\r\n btn.addEventListener('click', ShoppingBasket_ProceedToCheckout);\r\n });\r\n }\r\n\r\n var updateForm = document.getElementById(\"UpdateStockForm\");\r\n\r\n if (updateForm) {\r\n var oldBtoajDelvOptParams = (document.querySelector(\"input[name=btoajDelvOptParams]\"));\r\n if (oldBtoajDelvOptParams)\r\n oldBtoajDelvOptParams.remove();\r\n\r\n var btoajDelvOptParams = document.createElement(\"input\");\r\n btoajDelvOptParams.setAttribute(\"name\", \"btoajDelvOptParams\");\r\n btoajDelvOptParams.setAttribute(\"hidden\", \"hidden\");\r\n\r\n btoajDelvOptParams.value = getDelvOptsSerialised();\r\n\r\n updateForm.append(btoajDelvOptParams);\r\n\r\n }\r\n\r\n DeliveryOptionsButtons_BindEvents();\r\n }\r\n\r\n function DeliveryOptionsButtons_BindEvents() {\r\n // Show warning.\r\n var ccwarning = document.querySelectorAll(`${deliveryOptionsContainer} .ccwarning`);\r\n var ccEarliestwarning = document.querySelectorAll(`${shoppingBasketContainer} .basket-item-stock.ccEarliestwarning`);\r\n\r\n if (getDelvOpts().IsClickAndCollectShowWarning && isUKMainland()) {\r\n // Reset Delivered / Click & Collect buttons.\r\n deliveryOptionsPersist.resetSelectedDeliveryTypeOption();\r\n\r\n // Display warning\r\n if (ccwarning) {\r\n ccwarning.forEach(function (el, i) {\r\n el.classList.remove('hidden');\r\n });\r\n }\r\n\r\n // Hide Earliest c&c warning from basket items.\r\n if (ccEarliestwarning) {\r\n ccEarliestwarning.forEach(function (el, i) {\r\n el.classList.add('hidden');\r\n });\r\n }\r\n }\r\n else {\r\n // Hide warning\r\n if (ccwarning) {\r\n ccwarning.forEach(function (el, i) {\r\n el.classList.add('hidden');\r\n });\r\n }\r\n // Show Earliest c&c warning from basket items.\r\n if (ccEarliestwarning) {\r\n ccEarliestwarning.forEach(function (el, i) {\r\n el.classList.remove('hidden');\r\n });\r\n }\r\n }\r\n\r\n // Show buttons\r\n var devOptBtns = document.querySelectorAll(`${deliveryOptionsContainer} a.devOptsLinks`);\r\n\r\n if (devOptBtns) {\r\n devOptBtns.forEach(function (el) {\r\n el.addEventListener('click', handleDeliveryOptionClicked);\r\n });\r\n }\r\n }\r\n\r\n function handleDeliveryOptionClicked(el: any) {\r\n var curBtnName = el.target.getAttribute('name');\r\n if (deliveryOptionsPersist.getSelectedDeliveryTypeOption() !== curBtnName) {\r\n deliveryOptionsPersist.saveSelectedDeliveryTypeOption(curBtnName);\r\n\r\n DeliveryOptions_refresh(selDlvReg, deliveryOptionsPersist.getSelectedDeliveryTypeOption(), false);\r\n }\r\n }\r\n\r\n DeliveryOptionsButtons_BindEvents();\r\n // *********** gak-DeliveryOptions internal use\r\n}\r\n\r\nexport function SetDojj(doj: string) {\r\n if (doj) {\r\n pdojj = JSON.parse(Utils.atou(doj));\r\n }\r\n}\r\n\r\nexport function DeliveryOptions_refresh(deliveryRegionId: any, deliveryOptionTypeSelected: any, isResetDelivery: boolean) {\r\n var body = {\r\n deliveryRegionId: deliveryRegionId,\r\n deliveryOptionType: deliveryOptionTypeSelected,\r\n basketParams: basketParams\r\n };\r\n\r\n const requestHeaders: HeadersInit = new Headers();\r\n requestHeaders.set('Content-Type', 'application/json');\r\n fetch(DeliveryOptionsParms.IndexDeliveryOptionsURL, {\r\n method: 'POST',\r\n body: JSON.stringify(body),\r\n headers: requestHeaders\r\n }).then((response) => {\r\n if (response.ok) {\r\n return response.text();\r\n }\r\n showBasketError(\"Sorry but there was an error: Invalid delivery options\");\r\n }).then(function (data) {\r\n if (data) {\r\n var divContainer = document.querySelector(deliveryOptionsContainer)!;\r\n if (isResetDelivery) deliveryOptionsPersist.resetSelectedDelivery();\r\n if (divContainer) divContainer.innerHTML = data;\r\n\r\n DeliveryOptions_BindEvents(false);\r\n initTabs();\r\n }\r\n });\r\n}\r\n\r\n// JSON Data. Get the Price for a delivery option and a day. Returns NULL if not found.\r\nexport function getDelvOptPrice(dtid: any, internalDay: any) {\r\n var myDay = getDaysForDtid(dtid, internalDay);\r\n if (!myDay || myDay.length <= 0) return null;\r\n\r\n var myPrice = myDay[0].p;\r\n\r\n return myPrice;\r\n}\r\n// JSON Data. Get the default (cheapest) delivery option available for a day.\r\nexport function getDefaultDelvOptID(internalDay: any) {\r\n var myDts = getDelvOptsData().map(function (x: any) {\r\n return { xID: x.i, xPrice: (getDelvOptPrice(x.i, internalDay)), isSuperSaver: x.ss };\r\n });\r\n var availableDts = myDts.filter(function (x: any) {\r\n return x.xPrice !== null;\r\n });\r\n\r\n // Get Delv opt with min value\r\n var minPriceDt = availableDts.reduce(function (res: any, obj: any) {\r\n return (obj.xPrice < res.xPrice) ? obj : res;\r\n });\r\n if (!minPriceDt) return null;\r\n\r\n return minPriceDt.xID;\r\n}\r\n// JSON Data. Get the default (first) day available for a delivery option.\r\nfunction getDefaultDay(dtid: any) {\r\n var myDays = getDaysForDtid(dtid, null);\r\n\r\n if (!myDays || myDays.length <= 0) return null;\r\n\r\n // Get the first available\r\n var minDay = myDays[0].d;\r\n return minDay;\r\n}\r\n\r\n// JSON Data. Returns the day available in the future: from the base internalDay + daysAdd forward.\r\nfunction getDayWindowForDt(dtid: any, internalDay: boolean, daysAdd: number) {\r\n // Get the index of the base internalDay\r\n var myDay = getDaysForDtid(dtid, internalDay);\r\n if (!myDay || myDay.length <= 0) return null;\r\n\r\n var myDtDays = getDaysForDtid(dtid, null);\r\n var dayIndex = myDtDays.indexOf(myDay[0]);\r\n if (dayIndex < 0) return null;\r\n var dayWindow = [];\r\n for (var i = dayIndex; i <= dayIndex + daysAdd; i++) {\r\n dayWindow.push(myDtDays[i].d);\r\n }\r\n return dayWindow;\r\n}\r\n\r\nfunction getDaysForDtid(dtid: any, internalDay: any) {\r\n var myDt = getDtById(dtid);\r\n\r\n if (!myDt || myDt.length <= 0) return null;\r\n\r\n var myDtDays = myDt[0].dpl;\r\n\r\n if (internalDay == null) return myDtDays;\r\n\r\n // Ability to filter by day.\r\n var myDay = myDtDays.filter(function (x: any, i: any) {\r\n return (x.d == internalDay);\r\n });\r\n return myDay;\r\n}\r\n\r\nfunction getDtById(dtid: any) {\r\n var myDt = getDelvOptsData().filter(function (x: any, i: any) {\r\n return (x.i == dtid);\r\n });\r\n\r\n return myDt;\r\n}\r\n\r\nexport function getDelvOptsData() {\r\n return !pdojj ? [] : pdojj.doj; // Array expected\r\n}\r\nexport function getDefaultData() {\r\n return !pdojj ? {} : pdojj.dod; // Object expected\r\n}\r\nfunction getDelvOpts() {\r\n return (pdojj || {}); // Object expected\r\n}\r\nfunction getDelvOptsSerialised() {\r\n return Utils.utoa(JSON.stringify(getDelvOpts()));\r\n}\r\n\r\nfunction internaldateToDisplayString(internalDay: any) {\r\n var options = {\r\n weekday: \"short\", year: \"numeric\", month: \"short\",\r\n day: \"numeric\"\r\n };\r\n return internalDayToDisplayStringOptions(internalDay, options);\r\n}\r\nfunction internaldateToMonthDisplayString(internalDay: any) {\r\n var options = {\r\n month: \"long\"\r\n };\r\n return internalDayToDisplayStringOptions(internalDay, options);\r\n}\r\nfunction internalDayToDisplayStringOptions(internalDay: any, options: any) {\r\n // Parse date dd/MM/yyyy (LogicConstants.Formats.DateTime.DeliveryDate)\r\n if (internalDay) {\r\n var dateSplit = internalDay.split(\"/\");\r\n var myDate = new Date(dateSplit[2], parseInt(dateSplit[1]) - 1, dateSplit[0]);\r\n // Convert to short string\r\n return myDate.toLocaleDateString(\"en-GB\", options);\r\n }\r\n\r\n return \"\";\r\n}\r\n\r\n// Update Payment data.\r\nfunction DeliveryOptions_UpdatePdParams(netPayment: number,\r\n highestDeposit: number,\r\n highestDepositAmount: number,\r\n gvTotalRedeemed: number,\r\n hasPayPalCreditPayment: boolean,\r\n hasPayPal: boolean,\r\n shouldDisplayFinanceOptions: boolean) {\r\n // New payment value\r\n if (!isNaN(netPayment)) {\r\n var total = document.getElementById(\"TotalIncludingVATAndDelivery\");\r\n\r\n if (total)\r\n total.innerHTML = numberToCurrency(netPayment, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate);\r\n\r\n var voucherApplied = document.querySelectorAll('.giftVoucherValueApplied');\r\n\r\n if (voucherApplied)\r\n voucherApplied.forEach(function (e: any) {\r\n e.textContent = numberToCurrency(gvTotalRedeemed, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate)\r\n });\r\n\r\n var isNoNetPayment = netPayment <= 0;\r\n\r\n if (highestDeposit > 0 && highestDepositAmount > 0) {\r\n var depositPlaceholder = document.querySelector('#divDeliveryOptionsContainer .depositPlaceholder');\r\n if (depositPlaceholder) {\r\n depositPlaceholder.innerHTML = `${highestDeposit} % deposit required today: \r\n ${numberToCurrency(highestDepositAmount, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate)}\r\n
    Balance payable upon collection: ${numberToCurrency(netPayment - highestDepositAmount, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate)} `\r\n depositPlaceholder.classList.remove('hidden');\r\n }\r\n }\r\n\r\n var stripePaymentRequestBtn = document.getElementById(\"paymentRequestButton\");\r\n\r\n if (stripePaymentRequestBtn && !isNoNetPayment) {\r\n setStripePaymentRequestButton(netPayment);\r\n }\r\n }\r\n\r\n // Paypal Credit\r\n var ppDiv = document.getElementById('paypal-credit-section-contents');\r\n if (ppDiv) {\r\n if (hasPayPalCreditPayment || hasPayPal) {\r\n ppDiv.classList.remove('hidden');\r\n }\r\n else {\r\n ppDiv.classList.remove('hidden');\r\n }\r\n }\r\n\r\n const payPalButtonContainer = document.getElementById(\"paypal-button-container\")!;\r\n if (hasPayPal && payPalButtonContainer.children.length == 0) {\r\n setPayPalButton(false);\r\n }\r\n\r\n //do we need express checkout section\r\n var h1text = document.getElementById(\"h1text\");\r\n if (h1text) {\r\n h1text.innerHTML = h1text.innerHTML + '**1';\r\n }\r\n\r\n var expresscheckout = document.querySelector(\"#divBasketPaymentsButtonRow .express-checkout\");\r\n var othercheckout = document.querySelector(\"#divBasketPaymentsButtonRow .other-checkout h2\");\r\n var expressbuttonsContainer = document.getElementById(\"paymentRequestButton\");\r\n var paypalContainer = document.getElementById(\"paypal-button-container\");\r\n if (!hasPayPal && expresscheckout && othercheckout && expressbuttonsContainer && expressbuttonsContainer.innerHTML == '' && \r\n paypalContainer && paypalContainer.innerHTML == '') {\r\n expresscheckout.classList.remove('show');\r\n othercheckout.classList.remove('show');\r\n }\r\n}\r\n\r\nfunction setPayPalButton(enablePayLater: boolean) {\r\n loadPayPalButton({\r\n clientId: ShoppingBasketParms.PaylPalClientId,\r\n currency: \"GBP\",\r\n enableFunding: \"\",\r\n components: \"messages,buttons\"\r\n });\r\n}\r\n\r\nfunction isUKMainland() {\r\n var deliveryRegionId = (document.getElementById(\"DeliveryRegionId\")!).value;\r\n return deliveryRegionId && deliveryRegionId == (window).ukMainlandRegionId;\r\n}\r\n\r\nfunction getAmountInCents(amount: any) {\r\n return parseInt((amount * 100).toFixed());\r\n}\r\n\r\nfunction getPlainText(text: string) {\r\n return text.replace(/(\\r\\n|\\n|\\r)|(\\s\\s+)/gm, \"\");\r\n}\r\n\r\nfunction getStripeShippingOptions(selPrice: any) {\r\n if (document.querySelector(`.chosenOption>input`)?.hasAttribute(\"data-dtid\")) {\r\n return [\r\n {\r\n id: document.querySelector(\".chosenOption>input\")!.getAttribute(\"data-dtid\"),\r\n label: getPlainText(document.querySelector(\".chosenOption .dtDescription\")!.getAttribute(\"data-title\")!),\r\n detail: getPlainText(document.querySelector(\".chosenOption .dtDescription\")!.textContent!),\r\n amount: getAmountInCents(selPrice)\r\n }];\r\n } else {\r\n return [{\r\n id: \"oos\",\r\n label: document.querySelector(\".delivery-out-of-stock > #outOfStockLabel\") != null ? getPlainText(document.querySelector(\".delivery-out-of-stock > #outOfStockLabel\")!.textContent!) : \"Delivery not available\",\r\n detail: document.querySelector(\".delivery-out-of-stock > #outOfStockDetail\") != null ? getPlainText(document.querySelector(\".delivery-out-of-stock > #outOfStockDetail\")!.textContent!) : \"Delivery not available\",\r\n amount: getAmountInCents(selPrice)\r\n }];\r\n }\r\n}\r\n\r\nfunction setStripePaymentRequestButton(amount: any) {\r\n if (isNaN(amount)) {\r\n return;\r\n }\r\n\r\n var stripeKey = (document.getElementById('StripePublishableKey'))!.value;\r\n var selPrice = (document.getElementById('deliveryPrice'))!.value;\r\n //var shippingOptions = getStripeShippingOptions(selPrice);\r\n Stripe.loadStripe(stripeKey).then(function (stripe: any) {\r\n var paymentRequestButton = document.getElementById(\"paymentRequestButton\");\r\n if (paymentRequestButton?.childElementCount == 0) {\r\n paymentRequest = stripe.paymentRequest(getPaymentRequestOptions(amount, getStripeShippingOptions(selPrice)));\r\n\r\n var elements = stripe.elements();\r\n var prButton = elements.create('paymentRequestButton', {\r\n paymentRequest: paymentRequest,\r\n });\r\n\r\n // Check the availability of the Payment Request API first.\r\n paymentRequest.canMakePayment().then(function (result: any) {\r\n if (result) {\r\n prButton.mount('#paymentRequestButton');\r\n let stripeButtonContainer = document.querySelector(\".stripe-button-container.loading\");\r\n if (stripeButtonContainer) stripeButtonContainer.classList.remove('loading');\r\n } else {\r\n var stripeButtonContainer = document.getElementsByClassName(\"stripe-button-container\")?.item(0);\r\n if (stripeButtonContainer) {\r\n stripeButtonContainer.setAttribute(\"hidden\", \"hidden\");\r\n }\r\n }\r\n\r\n paymentRequest.on('paymentmethod', function (ev: any) {\r\n var updateForm = document.getElementById('UpdateStockForm');\r\n\r\n function submitForm() {\r\n var dojj = (document.getElementById(\"dojj\"))!;\r\n\r\n var url = updateForm.getAttribute('action')!;\r\n\r\n var data = new FormData(updateForm);\r\n\r\n data.set(\"btoajDelvOptParams\", dojj.value);\r\n data.set(\"checkout\", \"stripe\");\r\n data.set(\"IsDigitalWallet\", \"true\");\r\n\r\n fetch(url, {\r\n method: 'POST',\r\n body: data\r\n }).then((response) => {\r\n if (response.ok) {\r\n isPaymentRequested = true;\r\n\r\n fetch(`/checkout/createPaymentIntent?paymentmethodId=${ev.paymentMethod.id}&recipient=${ev.shippingAddress.recipient}&customerEmail=${ev.payerEmail}&payerPhone==${ev.payerPhone}`).then(function (response) {\r\n return response.json();\r\n }).then(function (createPaymentIntentResponse) {\r\n stripe.confirmCardPayment(\r\n createPaymentIntentResponse.ClientSecret,\r\n {\r\n payment_method: ev.paymentMethod.id,\r\n shipping: {\r\n address: {\r\n city: ev.shippingAddress.city,\r\n country: ev.shippingAddress.country,\r\n line1: ev.shippingAddress.addressLine[0],\r\n line2: ev.shippingAddress.addressLine.length == 2 ? ev.shippingAddress.addressLine[1] : null,\r\n postal_code: ev.shippingAddress.postalCode,\r\n state: ev.shippingAddress.region\r\n },\r\n name: ev.shippingAddress.recipient,\r\n phone: ev.payerPhone\r\n }\r\n },\r\n { handleActions: false }\r\n ).then(function (confirmResult: any) {\r\n LogStripeResponse(confirmResult, false);\r\n if (confirmResult.error) {\r\n alert(confirmResult.error);\r\n ev.complete('fail');\r\n } else {\r\n // Report to the browser that the confirmation was successful, prompting\r\n // it to close the browser payment method collection interface.\r\n ev.complete('success');\r\n // Check if the PaymentIntent requires any actions and if so let Stripe.js\r\n // handle the flow. If using an API version older than \"2019-02-11\"\r\n // instead check for: `paymentIntent.status === \"requires_source_action\"`.\r\n if (confirmResult.paymentIntent.status === \"requires_action\") {\r\n // Let Stripe.js handle the rest of the payment flow.\r\n stripe.confirmCardPayment(createPaymentIntentResponse.ClientSecret).then(function (result: any) {\r\n LogStripeResponse(result, true);\r\n if (result.error) {\r\n alert(result.error);\r\n } else {\r\n ProcessDigitalWalletPayment(ev, confirmResult, createPaymentIntentResponse);\r\n }\r\n });\r\n } else {\r\n ProcessDigitalWalletPayment(ev, confirmResult, createPaymentIntentResponse);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n });\r\n }\r\n\r\n if (!isPaymentRequested)\r\n submitForm();\r\n\r\n function LogStripeResponse(confirmResult: any, is3DSResult: boolean) {\r\n var data = {\r\n is3DSResult: is3DSResult,\r\n confirmResult: JSON.stringify(confirmResult)\r\n };\r\n\r\n fetch('Checkout/LogStripeResponse', {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n headers: requestHeaders\r\n });\r\n }\r\n\r\n function ProcessDigitalWalletPayment(ev: any, confirmResult: any, createPaymentIntentResponse: any) {\r\n var data = {\r\n shippingAddress: ev.shippingAddress,\r\n paymentIntentId: confirmResult.paymentIntent.id,\r\n customerEmail: ev.payerEmail,\r\n clientSecret: createPaymentIntentResponse.ClientSecret,\r\n customerPhone: ev.payerPhone\r\n };\r\n fetch('Checkout/ValidateAddress',\r\n {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n headers: requestHeaders\r\n }).then(response => response.json())\r\n .then(function (result) {\r\n if (result.success && result.redirectUrl !== \"\") {\r\n window.location = result.redirectUrl;\r\n }\r\n else if (result.redirectUrl !== \"\") {\r\n window.location = result.redirectUrl;\r\n }\r\n });\r\n }\r\n });\r\n\r\n paymentRequest.on('shippingaddresschange', function (ev: any) {\r\n var delvRegId = (document.getElementById(\"DeliveryRegionId\"))!.value;\r\n var deliveryRegionMap: any = JSON.parse((document.getElementById(\"deliveryRegionMap\"))!.value);\r\n if (ev.shippingAddress.country !== deliveryRegionMap[delvRegId]) {\r\n ev.updateWith({ status: 'invalid_shipping_address' });\r\n } else if (ev.shippingAddress.country == 'GB') {\r\n var data = {\r\n shippingAddress: ev.shippingAddress,\r\n customerEmail: ev.payerEmail,\r\n customerPhone: ev.payerPhone\r\n };\r\n\r\n fetch('Checkout/ValidatePostCodeAndRegion',\r\n {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n headers: requestHeaders\r\n }).then(response => response.json())\r\n .then(function (result) {\r\n if (result.success && result.redirectUrl !== \"\") {\r\n ev.updateWith({ status: 'success', shippingOptions: getStripeShippingOptions(selPrice) });\r\n }\r\n else {\r\n ev.updateWith({ status: 'invalid_shipping_address' });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n \r\n }\r\n else {\r\n paymentRequest.update(getPaymentRequestUpdateOptions(amount, getStripeShippingOptions(selPrice)));\r\n }\r\n\r\n var isPaymentRequested = false;\r\n\r\n function getPaymentRequestOptions(amount: number, shippingOptions: any) {\r\n return {\r\n country: 'GB',\r\n currency: 'gbp',\r\n total: {\r\n label: 'Total including VAT',\r\n amount: getAmountInCents(amount),\r\n },\r\n requestPayerName: true,\r\n requestPayerEmail: true,\r\n requestShipping: true,\r\n requestPayerPhone: true,\r\n shippingOptions: shippingOptions\r\n }\r\n }\r\n\r\n function getPaymentRequestUpdateOptions(amount: number, shippingOptions: any) {\r\n return {\r\n total: {\r\n label: 'Total including VAT',\r\n amount: getAmountInCents(amount),\r\n },\r\n shippingOptions: shippingOptions,\r\n }\r\n }\r\n\r\n\r\n });\r\n}\r\n\r\nfunction openCalendar(el: any) {\r\n el.target.style.display = \"none\";\r\n\r\n var calendar = document.getElementsByClassName(\"deliveryCalendar\");\r\n if (calendar && calendar.item(0)) {\r\n calendar.item(0)!.removeAttribute(\"hidden\");\r\n }\r\n}\r\n\r\nfunction showHideCheckoutBox() {\r\n var basketEmpty = document.getElementById(\"basketEmptyText\");\r\n var checkoutBox = document.getElementsByClassName(\"checkout-box-container\")?.item(0);\r\n if (checkoutBox) {\r\n if (basketEmpty) {\r\n checkoutBox.setAttribute(\"hidden\", \"hidden\");\r\n } else {\r\n checkoutBox.removeAttribute(\"hidden\");\r\n }\r\n }\r\n}\r\n\r\nfunction isBasketEmpty() {\r\n var basketEmptyEl = document.getElementById(\"basketEmptyText\");\r\n\r\n return basketEmptyEl != null && basketEmptyEl != undefined;\r\n}\r\n","// Getter&Setter Delivered / Click & Collect buttons\r\nvar deliveryOptionsPersist =\r\n{\r\n\r\n getSelectedDeliveryTypeOption: function () {\r\n if (this.isLocalStorageSupported()) {\r\n return window.sessionStorage.getItem('gak_selected_delivery_type_option');\r\n }\r\n },\r\n saveSelectedDeliveryTypeOption: function (selectedDot) {\r\n if (this.isLocalStorageSupported()) {\r\n if (!selectedDot) {\r\n window.sessionStorage.removeItem('gak_selected_delivery_type_option');\r\n }\r\n else {\r\n window.sessionStorage.setItem('gak_selected_delivery_type_option', selectedDot);\r\n }\r\n }\r\n },\r\n resetSelectedDeliveryTypeOption: function () {\r\n this.saveSelectedDeliveryTypeOption(null);\r\n },\r\n\r\n getSelectedDelivery: function () {\r\n if (this.isLocalStorageSupported()) {\r\n var tempObj = window.sessionStorage.getItem('gak_selected_delivery_option');\r\n return tempObj ? JSON.parse(tempObj) : null;\r\n }\r\n },\r\n saveSelectedDelivery: function (selectedDeliveryTypeID, selectedDeliveryDate, isForceSetValues) {\r\n if (isForceSetValues || (selectedDeliveryTypeID && selectedDeliveryDate)) {\r\n var newDlv = {\r\n deliveryTypeID: selectedDeliveryTypeID,\r\n deliveryDate: selectedDeliveryDate\r\n };\r\n if (this.isLocalStorageSupported()) {\r\n window.sessionStorage.setItem('gak_selected_delivery_option', JSON.stringify(newDlv));\r\n }\r\n }\r\n },\r\n\r\n resetSelectedDelivery: function () {\r\n this.saveSelectedDelivery(null, null, true);\r\n },\r\n\r\n // Other functions\r\n resetAllDelvOpts: function () {\r\n this.resetSelectedDeliveryTypeOption();\r\n //saveSelectedDeliveryRegion(null);\r\n this.resetSelectedDelivery();\r\n },\r\n isLocalStorageSupported: function () {\r\n var testKey = 'test', storage = window.sessionStorage;\r\n try {\r\n storage.setItem(testKey, '1');\r\n storage.removeItem(testKey);\r\n return true;\r\n } catch (error) {\r\n console.log(error, \"isLocalStorageSupported\", 59);\r\n return false;\r\n }\r\n }\r\n}\r\n\r\nexport { deliveryOptionsPersist }","/*!\n * paypal-js v7.0.3 (2023-09-19T14:17:47.731Z)\n * Copyright 2020-present, PayPal, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction findScript(url, attributes) {\n var currentScript = document.querySelector(\"script[src=\\\"\".concat(url, \"\\\"]\"));\n if (currentScript === null)\n return null;\n var nextScript = createScriptElement(url, attributes);\n // ignore the data-uid-auto attribute that gets auto-assigned to every script tag\n var currentScriptClone = currentScript.cloneNode();\n delete currentScriptClone.dataset.uidAuto;\n // check if the new script has the same number of data attributes\n if (Object.keys(currentScriptClone.dataset).length !==\n Object.keys(nextScript.dataset).length) {\n return null;\n }\n var isExactMatch = true;\n // check if the data attribute values are the same\n Object.keys(currentScriptClone.dataset).forEach(function (key) {\n if (currentScriptClone.dataset[key] !== nextScript.dataset[key]) {\n isExactMatch = false;\n }\n });\n return isExactMatch ? currentScript : null;\n}\nfunction insertScriptElement(_a) {\n var url = _a.url, attributes = _a.attributes, onSuccess = _a.onSuccess, onError = _a.onError;\n var newScript = createScriptElement(url, attributes);\n newScript.onerror = onError;\n newScript.onload = onSuccess;\n document.head.insertBefore(newScript, document.head.firstElementChild);\n}\nfunction processOptions(options) {\n var sdkBaseUrl = \"https://www.paypal.com/sdk/js\";\n if (options.sdkBaseUrl) {\n sdkBaseUrl = options.sdkBaseUrl;\n delete options.sdkBaseUrl;\n }\n var optionsWithStringIndex = options;\n var _a = Object.keys(optionsWithStringIndex)\n .filter(function (key) {\n return (typeof optionsWithStringIndex[key] !== \"undefined\" &&\n optionsWithStringIndex[key] !== null &&\n optionsWithStringIndex[key] !== \"\");\n })\n .reduce(function (accumulator, key) {\n var value = optionsWithStringIndex[key].toString();\n key = camelCaseToKebabCase(key);\n if (key.substring(0, 4) === \"data\") {\n accumulator.dataAttributes[key] = value;\n }\n else {\n accumulator.queryParams[key] = value;\n }\n return accumulator;\n }, {\n queryParams: {},\n dataAttributes: {},\n }), queryParams = _a.queryParams, dataAttributes = _a.dataAttributes;\n if (queryParams[\"merchant-id\"] &&\n queryParams[\"merchant-id\"].indexOf(\",\") !== -1) {\n dataAttributes[\"data-merchant-id\"] = queryParams[\"merchant-id\"];\n queryParams[\"merchant-id\"] = \"*\";\n }\n return {\n url: \"\".concat(sdkBaseUrl, \"?\").concat(objectToQueryString(queryParams)),\n dataAttributes: dataAttributes,\n };\n}\nfunction camelCaseToKebabCase(str) {\n var replacer = function (match, indexOfMatch) {\n return (indexOfMatch ? \"-\" : \"\") + match.toLowerCase();\n };\n return str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, replacer);\n}\nfunction objectToQueryString(params) {\n var queryString = \"\";\n Object.keys(params).forEach(function (key) {\n if (queryString.length !== 0)\n queryString += \"&\";\n queryString += key + \"=\" + params[key];\n });\n return queryString;\n}\nfunction createScriptElement(url, attributes) {\n if (attributes === void 0) { attributes = {}; }\n var newScript = document.createElement(\"script\");\n newScript.src = url;\n Object.keys(attributes).forEach(function (key) {\n newScript.setAttribute(key, attributes[key]);\n if (key === \"data-csp-nonce\") {\n newScript.setAttribute(\"nonce\", attributes[\"data-csp-nonce\"]);\n }\n });\n return newScript;\n}\n\n/**\n * Load the Paypal JS SDK script asynchronously.\n *\n * @param {Object} options - used to configure query parameters and data attributes for the JS SDK.\n * @param {PromiseConstructor} [PromisePonyfill=window.Promise] - optional Promise Constructor ponyfill.\n * @return {Promise} paypalObject - reference to the global window PayPal object.\n */\nfunction loadScript(options, PromisePonyfill) {\n if (PromisePonyfill === void 0) { PromisePonyfill = Promise; }\n validateArguments(options, PromisePonyfill);\n // resolve with null when running in Node or Deno\n if (typeof document === \"undefined\")\n return PromisePonyfill.resolve(null);\n var _a = processOptions(options), url = _a.url, dataAttributes = _a.dataAttributes;\n var namespace = dataAttributes[\"data-namespace\"] || \"paypal\";\n var existingWindowNamespace = getPayPalWindowNamespace(namespace);\n // resolve with the existing global paypal namespace when a script with the same params already exists\n if (findScript(url, dataAttributes) && existingWindowNamespace) {\n return PromisePonyfill.resolve(existingWindowNamespace);\n }\n return loadCustomScript({\n url: url,\n attributes: dataAttributes,\n }, PromisePonyfill).then(function () {\n var newWindowNamespace = getPayPalWindowNamespace(namespace);\n if (newWindowNamespace) {\n return newWindowNamespace;\n }\n throw new Error(\"The window.\".concat(namespace, \" global variable is not available.\"));\n });\n}\n/**\n * Load a custom script asynchronously.\n *\n * @param {Object} options - used to set the script url and attributes.\n * @param {PromiseConstructor} [PromisePonyfill=window.Promise] - optional Promise Constructor ponyfill.\n * @return {Promise} returns a promise to indicate if the script was successfully loaded.\n */\nfunction loadCustomScript(options, PromisePonyfill) {\n if (PromisePonyfill === void 0) { PromisePonyfill = Promise; }\n validateArguments(options, PromisePonyfill);\n var url = options.url, attributes = options.attributes;\n if (typeof url !== \"string\" || url.length === 0) {\n throw new Error(\"Invalid url.\");\n }\n if (typeof attributes !== \"undefined\" && typeof attributes !== \"object\") {\n throw new Error(\"Expected attributes to be an object.\");\n }\n return new PromisePonyfill(function (resolve, reject) {\n // resolve with undefined when running in Node or Deno\n if (typeof document === \"undefined\")\n return resolve();\n insertScriptElement({\n url: url,\n attributes: attributes,\n onSuccess: function () { return resolve(); },\n onError: function () {\n var defaultError = new Error(\"The script \\\"\".concat(url, \"\\\" failed to load. Check the HTTP status code and response body in DevTools to learn more.\"));\n return reject(defaultError);\n },\n });\n });\n}\nfunction getPayPalWindowNamespace(namespace) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return window[namespace];\n}\nfunction validateArguments(options, PromisePonyfill) {\n if (typeof options !== \"object\" || options === null) {\n throw new Error(\"Expected an options object.\");\n }\n if (typeof PromisePonyfill !== \"undefined\" &&\n typeof PromisePonyfill !== \"function\") {\n throw new Error(\"Expected PromisePonyfill to be a function.\");\n }\n}\n\n// replaced with the package.json version at build time\nvar version = \"7.0.3\";\n\nexport { loadCustomScript, loadScript, version };\n","import { loadScript, PayPalScriptOptions } from \"@paypal/paypal-js\";\r\nimport { ShoppingBasket_ProceedToCheckout } from './gak-ShoppingBasket';\r\n\r\ndeclare const ShoppingBasketParms: any;\r\nconst requestHeaders: HeadersInit = new Headers();\r\nrequestHeaders.set('Content-Type', 'application/json');\r\n\r\nconst DisabledFundings = \"card,bancontact,blik,eps,giropay,ideal,mercadopago,mybank,p24,sepa,sofort,venmo\";\r\n\r\nexport function loadPayPalButton(\r\n scriptOptions: PayPalScriptOptions,\r\n label?:\r\n | \"paypal\"\r\n | \"checkout\"\r\n | \"buynow\"\r\n | \"pay\"\r\n | \"installment\"\r\n | \"subscribe\"\r\n | \"donate\",\r\n isSlideOutBasket = false) {\r\n var paypalButtonContainer = document.getElementById(\"paypal-button-container\");\r\n if (paypalButtonContainer) {\r\n scriptOptions.disableFunding = DisabledFundings;\r\n loadScript(scriptOptions)\r\n .then((paypal) => {\r\n paypal!.Buttons!({\r\n style: {\r\n shape: \"pill\",\r\n height: 41,\r\n label: label,\r\n disableMaxWidth: true\r\n },\r\n createOrder: function () {\r\n if (isSlideOutBasket) {\r\n return fetch(ShoppingBasketParms.CheckoutWithPayPalURL, {\r\n method: 'POST',\r\n }).then(function (res) {\r\n if (res.ok)\r\n return PayPalSetExpressCheckout();\r\n });\r\n }\r\n else {\r\n const updateForm = document.getElementById(\"UpdateStockForm\");\r\n const dojj = (document.getElementById(\"dojj\"))!;\r\n const url = updateForm.getAttribute('action')!;\r\n const data = new FormData(updateForm);\r\n\r\n data.set(\"btoajDelvOptParams\", dojj.value);\r\n data.set(\"checkout\", \"pp\");\r\n data.set(\"IsDigitalWallet\", \"false\");\r\n\r\n return fetch(url, {\r\n method: 'POST',\r\n body: data,\r\n }).then(function () {\r\n return PayPalSetExpressCheckout();\r\n })\r\n }\r\n },\r\n onApprove(data) {\r\n const ppButton = document.createElement(\"button\");\r\n\r\n ppButton.setAttribute(\"data-payment-mehtod\", \"PAYPAL\")\r\n ppButton.addEventListener(\"click\", ShoppingBasket_ProceedToCheckout);\r\n ppButton.click();\r\n\r\n return fetch(ShoppingBasketParms.PayPalSettle, {\r\n method: \"POST\",\r\n headers: requestHeaders,\r\n body: JSON.stringify({\r\n token: data.orderID,\r\n payerId: data.payerID\r\n })\r\n }).then((response) => response.json())\r\n .then((orderData) => {\r\n if (orderData.success === true) {\r\n let spinner = document.querySelector(\".page-loading-spinner.darker\");\r\n if (spinner) {\r\n spinner.classList.remove(\"hidden\");\r\n }\r\n\r\n let modalBasket = document.getElementById(\"modalbasket\");\r\n\r\n if (modalBasket) {\r\n modalBasket.setAttribute(\"hidden\", \"hidden\");\r\n }\r\n window.location.href = ShoppingBasketParms.PayPalConfirm;\r\n } else {\r\n window.location.href = ShoppingBasketParms.PayPalErrorURL;\r\n }\r\n });\r\n },\r\n onError(err) {\r\n window.location.href = ShoppingBasketParms.PayPalErrorURL;\r\n }\r\n }).render('#paypal-button-container');\r\n })\r\n .catch((err) => {\r\n console.error(\"failed to load the PayPal JS SDK script\", err);\r\n });\r\n }\r\n\r\n function PayPalSetExpressCheckout() {\r\n return fetch(ShoppingBasketParms.PayPalSetExpressCheckout, {\r\n method: 'post',\r\n headers: requestHeaders\r\n }).then(function (res) {\r\n return res.json();\r\n }).then(function (data) {\r\n return data.token;\r\n });\r\n }\r\n}","declare var productDetailsParams: any;\r\n\r\nvar loadMoreBtn = document.getElementById(\"loadMoreReviews\");\r\n\r\nif (loadMoreBtn != null) {\r\n loadMoreBtn.addEventListener(\"click\", function () {\r\n var reviewsContainer = document.getElementsByClassName('reviews-items')!.item(0)!;\r\n var reviewsRendered = document.getElementsByClassName('review-item').length;\r\n const reviewsToRetrieve = productDetailsParams.ReviewsToDisplay + reviewsRendered;\r\n\r\n fetch(`${productDetailsParams.GetProductReviewsURL}&noOfReviews=${reviewsToRetrieve}&offset=0`, {\r\n method: 'GET'\r\n }).then(response => response.text())\r\n .then(function (data) {\r\n reviewsContainer.innerHTML = data;\r\n\r\n if (reviewsToRetrieve >= productDetailsParams.ReviewsCount) {\r\n loadMoreBtn!.style.display = \"none\";\r\n }\r\n });\r\n });\r\n}\r\n","import Utils from './utils'\r\ndeclare var setPriceDisplayTypeUrl: string;\r\n\r\nexport default class PriceHelper {\r\n public static isVATExPrice: boolean = false;\r\n public static formatter = new Intl.NumberFormat('en-GB', { style: 'currency', currency: 'GBP' });\r\n\r\n constructor() {\r\n this.initVATExPrice();\r\n }\r\n\r\n public initVATExPrice() {\r\n if (!this.getPDCookieAndSetFlag()) {\r\n fetch(setPriceDisplayTypeUrl,\r\n {\r\n method: 'POST'\r\n }\r\n ).then(this.getPDCookieAndSetFlag);\r\n }\r\n }\r\n\r\n public getPDCookieAndSetFlag(): boolean {\r\n var cookie = Utils.getCookie('pdt');\r\n if (cookie != null) {\r\n PriceHelper.isVATExPrice = cookie.split(',').length > 0 && cookie.split(',')[0] === \"VE\";\r\n if (PriceHelper.isVATExPrice) {\r\n PriceHelper.setPriceDisplay();\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n public static setPriceDisplay() {\r\n var elements = document.querySelectorAll('[data-price][data-pricevatex]');\r\n\r\n elements.forEach(function (el) {\r\n if (el != undefined) {\r\n var price: number = Number(el.querySelector('span')?.dataset?.price);\r\n var priceVATEx: number = Number(el.querySelector('span')?.dataset?.pricevatex);\r\n\r\n if (PriceHelper.isVATExPrice && !isNaN(priceVATEx)) {\r\n el.textContent = PriceHelper.formatter.format(priceVATEx);\r\n } else if (!PriceHelper.isVATExPrice && !isNaN(price)) {\r\n el.textContent = PriceHelper.formatter.format(price);\r\n }\r\n }\r\n });\r\n\r\n //For listing pages\r\n var isVatExelements = document.querySelectorAll('[data - isvatex]')!;\r\n\r\n isVatExelements.forEach(function (el) {\r\n el.querySelector('span')!.dataset.isvatex = String(PriceHelper.isVATExPrice)\r\n });\r\n }\r\n\r\n\r\n static formatPrice(price: number) {\r\n return PriceHelper.formatter.format(price);\r\n };\r\n\r\n static displayPrices() {\r\n PriceHelper.setPriceDisplay();\r\n }\r\n static excludeVAT(price: number, rate: number) {\r\n if (price > 0) {\r\n return Math.round((price / (1 + rate)) * 100) / 100;\r\n }\r\n return 0;\r\n }\r\n}","import { CookieConsentService } from \"./cookie-consent.js\";\r\nimport { GoogleScriptsService, FacebookScriptsService } from \"./tracking-scripts.js\";\r\nimport Swiper, { Navigation, Zoom, Pagination, Thumbs } from 'swiper';\r\nimport { pushEnhancedEcommerce, pushAddToCart, pushProductView } from \"./enhanced-ecommerce.js\";\r\nimport Utils from \"./utils\";\r\nimport PriceHelper from \"./price-helper\";\r\nimport { ShoppingBasket_BindEvents } from './gak-ShoppingBasket'\r\nimport { SetDojj } from './gak-DeliveryOptions';\r\nimport { ShoppingBasket_UpdateItemCount } from './common';\r\nimport { initBasketPanelSwiper } from './shopping-basket-panel';\r\nimport { loadPayPalButton } from './gak-PayPalButton';\r\nimport { getFormattedPrice } from './price-formatter';\r\n\r\ndeclare var ShoppingBasketParms: any;\r\ndeclare var productDetailsParams: any;\r\ndeclare var EuroPrice_CurrencySymbol: any;\r\ndeclare var EuroPrice_ConversionRate: any;\r\n\r\nwindow.onload = function () {\r\n ProductDetails_BindEvents();\r\n pushEnhancedEcommerce();\r\n pushProductView();\r\n};\r\n\r\nfunction showWaitElement(show: any) {\r\n var waitElem = document.getElementsByClassName(\"wait-spinner\")!.item(0)!;\r\n if (waitElem) {\r\n if (show) waitElem.classList.remove('hidden');\r\n else waitElem.classList.add('hidden');\r\n }\r\n}\r\n\r\nfunction showItemAddedAlert() {\r\n var basketAlert = document.getElementById(\"basketAlert\");\r\n var alertText = document.querySelector(\"#basketAlert p\");\r\n\r\n if (basketAlert && alertText) {\r\n basketAlert.className = \"[ alert ] [ bg-green-1 text-green text-15 text-md-16 ]\";\r\n alertText.textContent = \"1x item added to basket\";\r\n }\r\n}\r\nfunction ProductDetails_BindEvents() {\r\n getDynamicData();\r\n\r\n var addToBasketButton = document.querySelectorAll(\".add-to-basket-button\");\r\n\r\n addToBasketButton.forEach(function (button) {\r\n button.addEventListener(\"click\", function () {\r\n ProductDetail_AddProductToOrder(productDetailsParams.ProductID, productDetailsParams.Title, productDetailsParams.FbContentIDS, 1);\r\n });\r\n button.removeAttribute(\"disabled\");\r\n button.removeAttribute(\"data-modal-disabled\");\r\n button.classList.remove(\"btn-disabled\");\r\n });\r\n\r\n bindAddToBasketFromPanel();\r\n\r\n //about finance link\r\n var financeLink = document.querySelector(\"a[href='#about-finance']\");\r\n if (financeLink) {\r\n financeLink.addEventListener(\"click\", function (evt) {\r\n evt.preventDefault();\r\n let financeTab = document.getElementById(\"financeTab\");\r\n if (financeTab) {\r\n financeTab.click();\r\n let detailsSection = document.querySelector('.pdp-full-details ');\r\n if (detailsSection) {\r\n detailsSection.scrollIntoView({ behavior: \"smooth\" });\r\n }\r\n }\r\n });\r\n }\r\n\r\n //description read more button\r\n let descriptionTabContents = document.getElementById(\"t1\");\r\n if (descriptionTabContents) {\r\n if (descriptionTabContents.getBoundingClientRect().height > 550) {\r\n let toggleContents = document.querySelector(\"#t1 .toggle-parent .toggle-content\");\r\n if (toggleContents) {\r\n toggleContents.classList.add('show-more-item');\r\n }\r\n let toggleButtons = document.querySelector(\"#t1 .toggle-parent .toggle-control\");\r\n if (toggleButtons) {\r\n toggleButtons.classList.remove('hidden');\r\n }\r\n addToggleEvent();\r\n }\r\n }\r\n\r\n var ToggleButtons = document.querySelectorAll('[data-toggle-parent]');\r\n if (ToggleButtons.length) {\r\n ToggleButtons.forEach(function (toggle) {\r\n if (!toggle.classList.contains('click-bound')) {\r\n toggle.classList.add('click-bound');\r\n toggle.addEventListener('click', function (e) {\r\n let elem = e.target as HTMLElement;\r\n if (elem.getAttribute('aria-expanded') == \"false\") {\r\n elem.setAttribute('aria-expanded', 'true')\r\n }\r\n else {\r\n elem.setAttribute('aria-expanded', 'false');\r\n }\r\n })\r\n }\r\n })\r\n }\r\n\r\n\r\n let buyNowWithPayPal = document.getElementById(\"buyNowWithPayPal\");\r\n\r\n if (buyNowWithPayPal) {\r\n buyNowWithPayPal.addEventListener(\"click\", function (e: any) {\r\n buyNowWithPayPal_do(false);\r\n });\r\n\r\n buyNowWithPayPal.classList.remove(\"btn-disabled\");\r\n }\r\n\r\n const checkoutWithPayPalbtn = document.getElementById(\"paypal-button-container\");\r\n\r\n if (checkoutWithPayPalbtn) {\r\n loadPayPalButton({\r\n clientId: ShoppingBasketParms.PaylPalClientId,\r\n currency: \"GBP\",\r\n components: \"messages,buttons\"\r\n }, \"checkout\", true);\r\n }\r\n\r\n const products = document.querySelectorAll(\".list-view li\");\r\n products.forEach(function (productItem) {\r\n productItem.addEventListener('mouseover', function () {\r\n productItem.classList.add('hover');\r\n });\r\n productItem.addEventListener('mouseout', function () {\r\n productItem.classList.remove('hover');\r\n });\r\n });\r\n\r\n function getDynamicData() {\r\n const requestHeaders: HeadersInit = new Headers();\r\n requestHeaders.set('Content-Type', 'application/json');\r\n\r\n var data = { productId: productDetailsParams.ProductID };\r\n\r\n fetch(`${productDetailsParams.GetBStockProductsURL}?productId=${data.productId}`, {\r\n method: 'GET'\r\n }).then(response => {\r\n if (response.ok) {\r\n return response.text();\r\n }\r\n }).then(function (data: any) {\r\n if (data && data.trim().length > 0) {\r\n var tabContainer = document.querySelector(\"[data-tab-name='bstock']\");\r\n var bStockTab = document.getElementById(\"bStockTab\");\r\n\r\n if (bStockTab && tabContainer) {\r\n bStockTab.classList.remove(\"visually-hidden\");\r\n tabContainer.innerHTML = data;\r\n }\r\n }\r\n });\r\n\r\n if (!productDetailsParams.SkipGetDynamicData) {\r\n fetch(productDetailsParams.GetDynamicDataURL, {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n headers: requestHeaders\r\n }).then(response => response.json())\r\n .then(function (data: any) {\r\n processDeliveryTimingDisplayData(data.timingDisplayData);\r\n processStockStatusData(data.stockStatusData);\r\n });\r\n }\r\n\r\n function processDeliveryTimingDisplayData(data: any) {\r\n productDetailsParams.DeliveryNextDayPossible = data.nextDayDeliveryPossible;\r\n productDetailsParams.DeliveryCutOffDisplay = data.deliveryCutOffTimeDisplay;\r\n productDetailsParams.DeliveryCutOffms = data.deliveryCutOffMsSinceUnixEpoch;\r\n }\r\n function processStockStatusData(data: any) {\r\n if (!data.inStock) {\r\n let elem = document.getElementById('inStock');\r\n if (elem) document.getElementById('inStock')!.style.display = \"none\";\r\n loadNotifyMeDiv();\r\n }\r\n else {\r\n var msgHtml = data.msg2 || data.msg1 || (data.inStock ? \"Next day delivery\" + (data.isEligibleClickAndCollect ? \" or Click & Collect\" : \"\") : \"Out of stock,
    available to order\");\r\n if (msgHtml === productDetailsParams.CollectionDeliveryMsg) msgHtml = \"\";\r\n let deliveryInfoMessage = data.msg2 || data.msg1 || (data.inStock ? \"Next day delivery\" + (data.isEligibleClickAndCollect ? \" or Click & Collect\" : \"\") : \"Out of stock,
    available to order\");\r\n let deliveryInfoElems = document.querySelectorAll('.pdp-heading-reviews .delivery-info');\r\n deliveryInfoElems.forEach(function (element) {\r\n (element as HTMLElement).style.display = \"block\";\r\n element.innerHTML = deliveryInfoMessage;\r\n });\r\n\r\n var nowMs = (new Date).getUTCMilliseconds();\r\n\r\n if (productDetailsParams.DeliveryNextDayPossible && data.isNextDay && data.inStock && productDetailsParams.DeliveryCutOffms > nowMs)\r\n setCountDown(productDetailsParams.DeliveryCutOffms);\r\n }\r\n\r\n if (data.isEligibleClickAndCollect) {\r\n let elem = document.getElementById('clickAndCollect');\r\n if (elem) document.getElementById('clickAndCollect')!.style.display = \"flex\";\r\n }\r\n\r\n let usps = document.getElementById('product-usps');\r\n if (usps) usps.style.opacity = \"1\";\r\n }\r\n\r\n\r\n function loadHtmlWithRecaptcha(htmlContent: string) {\r\n let parser = new DOMParser();\r\n const doc = parser.parseFromString(htmlContent, 'text/html');\r\n\r\n var recaptchaContainer = doc.getElementsByClassName('ajaxRecaptchaContainer');\r\n\r\n if (recaptchaContainer && recaptchaContainer.item(0))\r\n recaptchaContainer.item(0)!.getElementsByTagName('script')!.item(0)!.remove();\r\n\r\n var notifyMeWhenInStockDiv = document.getElementById(\"notifyMeWhenInStockDiv\");\r\n\r\n if (notifyMeWhenInStockDiv)\r\n document.getElementById(\"notifyMeWhenInStockDiv\")!.innerHTML = htmlContent;\r\n\r\n var recaptchaElem = document.getElementsByClassName('g-recaptcha')!;\r\n if (typeof grecaptcha !== 'undefined' && grecaptcha && grecaptcha.render && recaptchaElem.length > 0) {\r\n grecaptcha.render((recaptchaElem.item(0)));\r\n }\r\n }\r\n\r\n function onNotifyMeWhenInStock(e: any) {\r\n if (e.success) {\r\n let modal = document.getElementById('notifyMeWhenInStockModal');\r\n var msgClass = e.success ? 'text-success success' : 'text-danger';\r\n var newDiv = '
    ' + e.message + '
    ';\r\n let div = document.getElementById(\"notifyMeWhenInStockDiv\");\r\n if (div) div.innerHTML = newDiv;\r\n let defaultContent = document.getElementById('notify-default');\r\n let defaultSuccess = document.getElementById('notify-success');\r\n if (defaultContent) defaultContent.classList.add(\"hidden\");\r\n if (defaultSuccess) defaultSuccess.classList.remove(\"hidden\");\r\n }\r\n else {\r\n let elem = document.getElementById('notifyMeWhenInStockModalErrorList')\r\n if (elem) elem.textContent = e.message;\r\n document.getElementById('notifyMeWhenInStockModalErrors')?.classList?.remove('hidden');\r\n }\r\n }\r\n\r\n // Notify Me When In Stock Div\r\n function loadNotifyMeDiv() {\r\n\r\n var recaptchaS = document.createElement(\"script\");\r\n recaptchaS.setAttribute(\"src\", \"https://www.google.com/recaptcha/api.js\");\r\n document.body.appendChild(recaptchaS);\r\n\r\n fetch(productDetailsParams.NotifyMeURL,\r\n {\r\n method: 'GET',\r\n cache: 'no-cache'\r\n }).then(response => response.text())\r\n .then(function (data) {\r\n loadHtmlWithRecaptcha(data);\r\n var modal = document.getElementById(\"notifyMeWhenInStockModal\");\r\n\r\n if (modal)\r\n modal.setAttribute('data-modal', '');\r\n\r\n var notifyMeBtn = document.getElementsByClassName('notifyMeWhenInStockBtn')!.item(0)!;\r\n\r\n if (notifyMeBtn) {\r\n\r\n notifyMeBtn.setAttribute('data-modal-open', 'notifyMeWhenInStockModal');\r\n\r\n (window as any).ARIAmodal.init();\r\n\r\n notifyMeBtn.addEventListener('click', function () {\r\n let notifyModal = document.getElementById('notifyMeWhenInStockModal')!;\r\n\r\n document.getElementById('notifyMeWhenInStockModalErrors')!.classList.add('hidden');\r\n\r\n if (typeof grecaptcha !== 'undefined' && grecaptcha && grecaptcha.reset) {\r\n grecaptcha.reset();\r\n }\r\n\r\n notifyModal.style.display = \"block\";\r\n });\r\n }\r\n var btnSubmit = document.getElementById(\"btnSubmit\")!;\r\n if (btnSubmit) {\r\n btnSubmit.addEventListener(\"click\", function (e) {\r\n var notifyForm = (document.querySelector('#notifyMeWhenInStockForm')!);\r\n let data = new FormData(notifyForm);\r\n\r\n fetch(productDetailsParams.NotifyMeURL, {\r\n method: 'POST',\r\n body: data\r\n }).then(response => response.json())\r\n .then(function (data) {\r\n onNotifyMeWhenInStock(data);\r\n });\r\n });\r\n }\r\n });\r\n }\r\n }\r\n}\r\n\r\nfunction bindAddToBasketFromPanel() {\r\n var addToBasketFromPanel = document.querySelectorAll(\".add-to-basket-from-panel-button\");\r\n\r\n addToBasketFromPanel.forEach(function (button: any) {\r\n button.addEventListener(\"click\", function () {\r\n const productCard = button.closest(\".product-card\");\r\n const productId = productCard.getAttribute(\"data-id\");\r\n const title = productCard.getAttribute(\"data-name\");\r\n ProductDetail_AddProductToOrder(productId, title, productDetailsParams.FbContentIDS, 1);\r\n });\r\n });\r\n\r\n var addCompanionToBasketFromPanel = document.querySelectorAll(\".add-companion-to-basket-from-panel-button\");\r\n\r\n addCompanionToBasketFromPanel.forEach(function (button: any) {\r\n button.addEventListener(\"click\", function () {\r\n const companionCard = button.closest(\".product-card\");\r\n const companionProductId = companionCard.getAttribute(\"data-id\");\r\n const primaryProductId = companionCard.getAttribute(\"data-primary-product-id\");\r\n\r\n if (primaryProductId)\r\n ProductDetail_AddCompanaionToOrder(+primaryProductId, +companionProductId);\r\n });\r\n });\r\n}\r\n\r\n//function loadVideo(url) {\r\n// $('#videoIframe').prop('src', url);\r\n// $('#remoteVideoModal').modal('show');\r\n//}\r\n\r\nfunction ProductDetail_GoToShoppingBasket(facebookFeedId?: any, basketErrorId?: number) {\r\n if (facebookFeedId != null && facebookFeedId != \"\" && CookieConsentService.didConsentToAllCookies()) {\r\n // Facebook Track code\r\n // AddToCart\r\n // Track when items are added to a shopping cart (ex. click/landing page on Add to Cart button)\r\n\r\n FacebookScriptsService.addFacebookTracking(false);\r\n var fbq = FacebookScriptsService.getFbq();\r\n fbq('track', 'AddToCart', {\r\n content_type: 'product', // Required for Dynamic Product Ads\r\n content_ids: facebookFeedId // Required for Dynamic Product Ads\r\n });\r\n // End Facebook Track code\r\n }\r\n\r\n window.location.href = ShoppingBasketParms.GoToShoppingBasketURL;\r\n}\r\n\r\n// It will add the product and quantity to the basket, taking into account that the underlyingProduct must be created as an order item also.\r\nfunction ProductDetail_AddFreeGift(theModalDialog: any, theSlickElement: any, theJqueryProduct: any, underlyingProductId: number, underlyingProductFacebookFeedId: any, maxItemsAllowed: number) {\r\n\r\n ShoppingBasketParms.FreeGiftList.push({\r\n productId: parseInt(theJqueryProduct.attr(\"myId\")),\r\n //quantity: parseInt(theJqueryProduct.attr(\"myQuantity\")),\r\n masterProductId: underlyingProductId,\r\n facebookFeedId: underlyingProductFacebookFeedId\r\n });\r\n\r\n //if (ShoppingBasketParms.FreeGiftList.length >= maxItemsAllowed) {\r\n // // Proceed to add the FreeGifts To Order.\r\n // //ProductDetail_AddFreeGiftsToOrder();\r\n // theModalDialog.modal('toggle'); // Closing the modal makes the AddFreeGiftsToOrder being invoked.\r\n //}\r\n //else {\r\n // // Remove the selected item\r\n // // http://stackoverflow.com/questions/30739499/slick-js-how-to-remove-current-slide\r\n // //theJqueryProduct.addClass(\"hidden\");\r\n // var i = theJqueryProduct.attr(\"data-slick-index\");\r\n // theSlickElement.slick('slickRemove', i);\r\n // $(\"div.slick-slide\").each(function () {\r\n // var j = $(this).attr(\"data-slick-index\");\r\n // if (j > i) {\r\n // $(this).attr(\"data-slick-index\", j - 1);\r\n // }\r\n // });\r\n\r\n //}\r\n}\r\n\r\nexport function ProductDetail_AddCompanaionToOrder(primaryProductId: number, companionId: number) {\r\n if (primaryProductId === null || companionId == null) return;\r\n\r\n const requestHeaders: HeadersInit = new Headers();\r\n requestHeaders.set('Content-Type', 'application/json');\r\n\r\n var body = { primaryId: primaryProductId, companionId: companionId };\r\n\r\n fetch(ShoppingBasketParms.AddCompanionToOrderURL, {\r\n method: 'POST',\r\n headers: requestHeaders,\r\n body: JSON.stringify(body)\r\n }).then(response => response.json())\r\n .then(function (data: any) {\r\n if (data.success) {\r\n loadBasketPanel(function () {\r\n pushAddToCart(primaryProductId, 1);\r\n });\r\n\r\n if (data.basketErrorId) {\r\n var checkoutBtn = document.getElementById(\"checkout-btn\");\r\n var basketButton = document.getElementById(\"basketButton\");\r\n var errorUrl = `${ShoppingBasketParms.GoToShoppingBasketURL}?errorId=${data.basketErrorId}`;\r\n if (checkoutBtn)\r\n checkoutBtn.setAttribute(\"href\", errorUrl);\r\n\r\n if (basketButton)\r\n basketButton.setAttribute(\"data-url\", errorUrl);\r\n }\r\n\r\n showItemAddedAlert();\r\n ShoppingBasket_UpdateItemCount();\r\n }\r\n });\r\n}\r\n\r\nexport function ProductDetail_AddProductToOrder(productId: number, productTitle: string, facebookFeedId: any, productQuantity: number, redirectToBasket?: any) {\r\n if (productId === null) return;\r\n const requestHeaders: HeadersInit = new Headers();\r\n requestHeaders.set('Content-Type', 'application/json');\r\n\r\n var body = { productId: productId, quantity: productQuantity }\r\n\r\n var basketEmptyMessage = document.getElementById(\"basketEmptyMessage\")!;\r\n var modalBasketContent = document.getElementById(\"modalBasketContent\")!;\r\n var modalBasketTotals = document.getElementById(\"modalBasketTotals\")!;\r\n\r\n modalBasketContent.removeAttribute(\"hidden\");\r\n modalBasketTotals.removeAttribute(\"hidden\");\r\n basketEmptyMessage.setAttribute(\"hidden\", \"hidden\");\r\n\r\n fetch(ShoppingBasketParms.AddProductToOrderURL, {\r\n method: 'POST',\r\n headers: requestHeaders,\r\n body: JSON.stringify(body)\r\n }).then(response => response.json())\r\n .then(function (data: any) {\r\n if (data.success) {\r\n loadBasketPanel(function () {\r\n pushAddToCart(productId, 1);\r\n });\r\n\r\n if (redirectToBasket) {\r\n ProductDetail_GoToShoppingBasket(facebookFeedId, data.basketErrorId);\r\n }\r\n\r\n if (data.basketErrorId) {\r\n let checkoutBtn = document.getElementById(\"checkout-btn\");\r\n let basketButton = document.getElementById(\"basketButton\");\r\n let errorUrl = `${ShoppingBasketParms.GoToShoppingBasketURL}?errorId=${data.basketErrorId}`;\r\n if (checkoutBtn)\r\n checkoutBtn.setAttribute(\"href\", errorUrl);\r\n\r\n if (basketButton)\r\n basketButton.setAttribute(\"data-url\", errorUrl);\r\n }\r\n\r\n showItemAddedAlert();\r\n ShoppingBasket_UpdateItemCount();\r\n }\r\n });\r\n}\r\nfunction waitForElm(selector: string) {\r\n return new Promise(resolve => {\r\n if (document.querySelector(selector)) {\r\n return resolve(document.querySelector(selector));\r\n }\r\n\r\n const observer = new MutationObserver(mutations => {\r\n if (document.querySelector(selector)) {\r\n resolve(document.querySelector(selector));\r\n observer.disconnect();\r\n }\r\n });\r\n\r\n observer.observe(document.body, {\r\n childList: true,\r\n subtree: true\r\n });\r\n });\r\n}\r\nexport function loadBasketPanel(callback?: any) {\r\n const body = { includeEarliestDeliveryDates: true }\r\n const requestHeaders: HeadersInit = new Headers();\r\n requestHeaders.set('Content-Type', 'application/json');\r\n\r\n fetch(ShoppingBasketParms.GetBasketItemsURL, {\r\n method: 'POST',\r\n body: JSON.stringify(body),\r\n headers: requestHeaders\r\n }).then(response => response.json())\r\n .then(function (data: any) {\r\n var ulElem = document.getElementsByClassName(\"order-process-basket\")!.item(0)!;\r\n var totalElem = document.getElementById(\"basketTotal\")!;\r\n var subTotalElem = document.getElementById(\"basketSubTotal\")!;\r\n var deliveryPriceElem = document.getElementById(\"checkoutDeliveryPrice\")!;\r\n var deliveryDescriptionElem = document.getElementById(\"checkoutDeliveryDescription\")!;\r\n var deliveryMoreOptionsElem = document.getElementById(\"checkoutDeliveryMoreOptions\")!;\r\n var basketEmptyMessage = document.getElementById(\"basketEmptyMessage\")!;\r\n var modalBasketContent = document.getElementById(\"modalBasketContent\")!;\r\n var modalBasketTotals = document.getElementById(\"modalBasketTotals\")!;\r\n\r\n if (ulElem && data.basketVm.Items.length > 0) {\r\n modalBasketContent.removeAttribute(\"hidden\");\r\n modalBasketTotals.removeAttribute(\"hidden\");\r\n basketEmptyMessage.setAttribute(\"hidden\", \"hidden\");\r\n\r\n var nonGVItems = data.basketVm.Items.filter(function (item: any) {\r\n return !item.IsGiftVoucher\r\n });\r\n var liElem = \"\";\r\n var minDeliveryPrice = 0;\r\n\r\n if (nonGVItems.length == 0) {\r\n deliveryPriceElem.textContent = getFormattedPrice(0, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate);\r\n } else {\r\n SetDojj(data.deliveryOptions);\r\n var defaultDeliveryOption = data.defaultDeliveryOption;\r\n minDeliveryPrice = defaultDeliveryOption.DayPriceList[0].Price;\r\n var formattedPrice = getFormattedPrice(minDeliveryPrice, EuroPrice_CurrencySymbol, EuroPrice_ConversionRate);\r\n\r\n deliveryPriceElem.textContent = formattedPrice;\r\n deliveryDescriptionElem.textContent = defaultDeliveryOption.Description;\r\n\r\n if (defaultDeliveryOption.IsSuperSaverNationalRatioApplied) {\r\n deliveryMoreOptionsElem.textContent = \"For next day, special and international delivery go to checkout\";\r\n } else {\r\n deliveryMoreOptionsElem.textContent = \"For special and international delivery go to checkout\";\r\n }\r\n }\r\n data.basketVm.Items.forEach(function (item: any) {\r\n liElem +=\r\n `
  • \r\n
    \r\n \r\n \"${item.Title}\"\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n ${PriceHelper.formatPrice(item.Price)}\r\n ${setOldPrice(item)}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
  • `\r\n });\r\n\r\n setQuickBuys(data);\r\n\r\n if (subTotalElem) {\r\n subTotalElem.textContent = PriceHelper.formatPrice(data.basketVm.PriceTotalItems);\r\n }\r\n var total = data.basketVm.PriceTotalItems;\r\n\r\n if (minDeliveryPrice > 0)\r\n total += minDeliveryPrice;\r\n\r\n if (totalElem) {\r\n totalElem.textContent = PriceHelper.formatPrice(total);\r\n }\r\n\r\n ulElem.innerHTML = liElem;\r\n ShoppingBasket_BindEvents(true);\r\n }\r\n else {\r\n modalBasketContent.setAttribute(\"hidden\", \"hidden\");\r\n modalBasketTotals.setAttribute(\"hidden\", \"hidden\");\r\n basketEmptyMessage.removeAttribute(\"hidden\");\r\n ulElem.innerHTML = \"\";\r\n\r\n var swiper = document.querySelector(\"#quickBuysSection .swiper-wrapper\");\r\n\r\n if (swiper)\r\n swiper.closest(\"section\")!.setAttribute(\"hidden\", \"hidden\");\r\n }\r\n\r\n ShoppingBasket_UpdateItemCount();\r\n\r\n\r\n //sometime basket panel loads and disappears leaving the mask on. check if this happened\r\n let basketpanel = document.getElementById('modalbasket');\r\n if (basketpanel && basketpanel?.getAttribute('hidden') != null) {\r\n let closeButton = document.querySelector('#modalbasket .a11y-modal__close-btn') as HTMLButtonElement;\r\n if (closeButton) closeButton.click(); \r\n }\r\n\r\n if (callback)\r\n callback();\r\n });\r\n\r\n const quantitySelectMax = 20\r\n\r\n function getQuantityOptions(quantity: number) {\r\n let options = \"\";\r\n\r\n for (var i = 1; i <= quantitySelectMax; i++) {\r\n options += ``\r\n }\r\n\r\n return options;\r\n }\r\n}\r\n\r\nfunction setOldPrice(item: any) {\r\n if (item.Price < item.RRP)\r\n return `
    ${PriceHelper.formatPrice(item.RRP)}
    `;\r\n\r\n return \"\";\r\n}\r\n\r\nfunction setQuickBuys(data: any) {\r\n var companions = data.basketCompanions;\r\n var accessories = data.basketVm?.CrossSellProducts;\r\n var inStockCompanions = companions?.filter(function (item: any) {\r\n return item.IsProductStockAvailable;\r\n });\r\n var inStockAccessories = accessories?.filter(function (item: any) {\r\n return item.Availability == 1; // In Stock\r\n });\r\n\r\n if (inStockCompanions && inStockCompanions.length > 0) {\r\n renderQuickBuys(inStockCompanions);\r\n } else if (inStockAccessories && inStockAccessories.length > 0) {\r\n renderQuickBuys(inStockAccessories);\r\n } else if (companions?.length > 0) {\r\n renderQuickBuys(companions)\r\n } else if (accessories?.length > 0) {\r\n renderQuickBuys(accessories)\r\n }\r\n else {\r\n var swiper = document.querySelector(\"#quickBuysSection .swiper-wrapper\");\r\n\r\n if (swiper)\r\n swiper.closest(\"section\")!.setAttribute(\"hidden\", \"hidden\");\r\n }\r\n}\r\n\r\nfunction renderQuickBuys(items: any) {\r\n let swiperElem = \"\";\r\n let counter = 1;\r\n let swiper = document.querySelector(\"#quickBuysSection .swiper-wrapper\");\r\n\r\n if (!swiper || !items) {\r\n return;\r\n }\r\n\r\n items.forEach(function (item: any) {\r\n swiperElem +=\r\n `
    \r\n
    \r\n \r\n
    \r\n ${setSavings(item)}\r\n
    \r\n
    \r\n \r\n ${PriceHelper.formatPrice(getItemPrice(item))}\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    `;\r\n\r\n counter++;\r\n });\r\n\r\n swiper.innerHTML = `${swiperElem}
     
    `;\r\n swiper.closest(\"section\")!.removeAttribute(\"hidden\");\r\n initBasketPanelSwiper();\r\n bindAddToBasketFromPanel();\r\n\r\n function setSavings(item: any) {\r\n var itemPrice = getItemPrice(item);\r\n var itemRRPPrice = Math.max(item.RRP, item.Price);\r\n var savePrice = itemRRPPrice - itemPrice;\r\n\r\n if (item.IsCompanion && savePrice > 0)\r\n return `
    Save ${PriceHelper.formatPrice(savePrice)}
    `\r\n\r\n return \"\";\r\n }\r\n\r\n function getItemPrice(item: any) {\r\n return item.IsCompanion ? Math.min(item.CompanionPrice, item.Price) : item.Price;\r\n }\r\n\r\n function getItemAddToBasketClass(item: any) {\r\n return item.IsCompanion ? 'add-companion-to-basket-from-panel-button' : 'add-to-basket-from-panel-button';\r\n }\r\n\r\n function getListName(item: any) {\r\n return item.IsCompanion ? \"Companions\" : \"Accessories\";\r\n }\r\n}\r\n\r\nfunction setCountDown(date: any) {\r\n var countDownDate = new Date(date).getTime();\r\n // Update the count down every 1 second\r\n var x = setInterval(function () {\r\n\r\n var now = new Date().getTime();\r\n\r\n var distance = countDownDate - now;\r\n var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\r\n var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\r\n var seconds = Math.floor((distance % (1000 * 60)) / 1000);\r\n\r\n if (distance < 0) {\r\n clearInterval(x);\r\n let elem1 = document.getElementById('inStock');\r\n if (elem1) document.getElementById('inStock')!.style.display = \"none\";\r\n\r\n } else {\r\n let elem2 = document.getElementById('coundDownContainer');\r\n if (elem2) document.getElementById('coundDownContainer')!.style.display = \"flex\";\r\n let countdownTime = document.getElementById(\"countdownTime\")\r\n if (countdownTime)\r\n countdownTime.innerHTML = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\r\n }\r\n }, 1000);\r\n}\r\n\r\nfunction checkoutWithPayPal() {\r\n const requestHeaders: HeadersInit = new Headers();\r\n\r\n let checkoutWithPayPal = document.getElementById(\"checkoutWithPayPal\");\r\n let spinner = document.querySelector(\".page-loading-spinner.darker\");\r\n let addToBasketBtn = document.querySelector(\".add-to-basket-button\");\r\n let modalBasket = document.getElementById(\"modalbasket\");\r\n\r\n if (modalBasket) {\r\n modalBasket.setAttribute(\"hidden\", \"hidden\");\r\n }\r\n\r\n if (spinner) {\r\n spinner.classList.remove(\"hidden\");\r\n }\r\n\r\n requestHeaders.set('Content-Type', 'application/json');\r\n fetch(ShoppingBasketParms.CheckoutWithPayPalURL,\r\n {\r\n method: 'POST',\r\n headers: requestHeaders\r\n }\r\n ).then(response => response.json())\r\n .then(function (data: any) {\r\n if (data.success) {\r\n window.location = data.redirectUrl;\r\n }\r\n else {\r\n alert(data.message);\r\n }\r\n }).finally(() => {\r\n //On a timeout as loading Paypal takes some time\r\n setTimeout(() => {\r\n if (checkoutWithPayPal) {\r\n checkoutWithPayPal.classList.remove(\"btn-disabled\");\r\n checkoutWithPayPal.removeAttribute(\"disabled\");\r\n\r\n if (spinner) {\r\n spinner.classList.add(\"hidden\");\r\n }\r\n }\r\n\r\n if (addToBasketBtn) {\r\n addToBasketBtn.classList.remove(\"btn-disabled\");\r\n addToBasketBtn.removeAttribute(\"disabled\");\r\n }\r\n }, 3500);\r\n });\r\n}\r\n\r\n\r\nfunction buyNowWithPayPal_do(isPayPalCredit: boolean) {\r\n buyNowWithPayment(productDetailsParams.ProductID, 1, isPayPalCredit);\r\n\r\n function buyNowWithPayment(productId: any, quantity: any, isPayPalCredit: boolean) {\r\n var qty = parseInt(quantity);\r\n if (isNaN(qty)) {\r\n alert(\"Please insert a valid quantity\");\r\n } else {\r\n const requestHeaders: HeadersInit = new Headers();\r\n requestHeaders.set('Content-Type', 'application/json');\r\n\r\n var body = { productId: productId, quantity: qty, isPayPalCredit: isPayPalCredit }\r\n var addToBasketBtn = document.querySelector(\".add-to-basket-button\");\r\n\r\n if (addToBasketBtn) {\r\n addToBasketBtn.classList.add(\"btn-disabled\");\r\n addToBasketBtn.setAttribute(\"disabled\", \"true\");\r\n }\r\n var buyNowWithPayPal = document.getElementById(\"buyNowWithPayPal\");\r\n var spinner = document.querySelector(\".page-loading-spinner.darker\");\r\n\r\n if (buyNowWithPayPal) {\r\n buyNowWithPayPal.classList.add(\"btn-disabled\");\r\n buyNowWithPayPal.setAttribute(\"disabled\", \"true\");\r\n\r\n if (spinner) {\r\n spinner.classList.remove(\"hidden\");\r\n }\r\n }\r\n\r\n fetch(ShoppingBasketParms.BuyNowWithPayPalURL,\r\n {\r\n method: 'POST',\r\n headers: requestHeaders,\r\n body: JSON.stringify(body)\r\n }\r\n ).then(response => response.json())\r\n .then(function (data: any) {\r\n if (data.success) {\r\n window.location = data.redirectUrl;\r\n }\r\n else {\r\n alert(data.message);\r\n }\r\n }).finally(() => {\r\n //On a timeout as loading Paypal takes some time\r\n setTimeout(() => {\r\n if (buyNowWithPayPal) {\r\n buyNowWithPayPal.classList.remove(\"btn-disabled\");\r\n buyNowWithPayPal.removeAttribute(\"disabled\");\r\n\r\n if (spinner) {\r\n spinner.classList.add(\"hidden\");\r\n }\r\n }\r\n\r\n if (addToBasketBtn) {\r\n addToBasketBtn.classList.remove(\"btn-disabled\");\r\n addToBasketBtn.removeAttribute(\"disabled\");\r\n }\r\n }, 3500);\r\n });\r\n }\r\n }\r\n}\r\n\r\n///////////////////////////////////////////////////////////////////\r\n// Tabs //\r\n///////////////////////////////////////////////////////////////////\r\n\r\nconst Tabby = require('tabbyjs');\r\nif (document.getElementsByClassName('tabs').length) {\r\n const tabSelectors = document.querySelectorAll('[data-tabs]');\r\n\r\n tabSelectors.forEach((tabs, i) => {\r\n tabs.setAttribute(`data-tabs-${i}`, '');\r\n new Tabby(`[data-tabs-${i}]`);\r\n });\r\n\r\n\r\n\r\n /* The below code is used to scroll the tabs along when mobile users click,\r\n so they can see there are more tabs available. Safari doesn't yet support scroll-behaviour:smooth thouhg, but will soon */\r\n\r\n document.querySelectorAll('.tabs li').forEach((tabItem) => {\r\n tabItem.addEventListener('click', (elem) => {\r\n ((elem.currentTarget as HTMLElement).parentNode as HTMLElement).scrollLeft = (elem.currentTarget as HTMLElement).offsetLeft;\r\n });\r\n });\r\n}\r\n\r\n///////////////////////////////////////////////////////////////////\r\n// Carousels //\r\n///////////////////////////////////////////////////////////////////\r\nfunction initNavigationSwipers(swiperName: string, nextButton: string, prevButton: string) {\r\n let newSwiper = new Swiper(swiperName, {\r\n modules: [Navigation],\r\n direction: 'horizontal',\r\n cssMode: true,\r\n slidesPerView: \"auto\",\r\n loop: false,\r\n speed: 600,\r\n navigation: {\r\n nextEl: nextButton,\r\n prevEl: prevButton,\r\n },\r\n breakpoints: {\r\n 1024: {\r\n cssMode: false,\r\n slidesPerView: 4,\r\n spaceBetween: 40,\r\n },\r\n },\r\n });\r\n return newSwiper;\r\n}\r\n\r\nif (document.querySelector(\".thumbnail-gallery .swiper\")) {\r\n var galleryThumbs = new Swiper(\".thumbnail-gallery .swiper\", {\r\n modules: [Navigation, Pagination],\r\n centeredSlides: true,\r\n centeredSlidesBounds: true,\r\n slidesPerView: \"auto\",\r\n direction: 'horizontal',\r\n navigation: {\r\n nextEl: '.thumbnail-gallery .swiper-button-next',\r\n prevEl: '.thumbnail-gallery .swiper-button-prev',\r\n },\r\n breakpoints: {\r\n 900: {\r\n direction: 'vertical',\r\n slidesPerView: 5,\r\n },\r\n },\r\n });\r\n\r\n const gallerymain = new Swiper('.main-gallery .swiper', {\r\n modules: [Navigation, Zoom, Pagination, Thumbs],\r\n slidesPerView: \"auto\",\r\n zoom: true,\r\n loop: false,\r\n speed: 600,\r\n navigation: {\r\n nextEl: '.thumbnail-gallery .swiper-button-next',\r\n prevEl: '.thumbnail-gallery .swiper-button-prev',\r\n },\r\n thumbs: {\r\n swiper: galleryThumbs\r\n },\r\n });\r\n gallerymain.on('zoomChange', function () {\r\n var picture = document.querySelector('.main-gallery .swiper-slide.swiper-slide-active picture');\r\n var img = picture?.querySelector('img');\r\n var sourceAll = picture?.querySelectorAll('source');\r\n if (img && img.hasAttribute('data-zoomsrc') && sourceAll) {\r\n for (var i = 0, max = sourceAll.length; i < max; i++) {\r\n if (sourceAll) sourceAll[i]?.remove();\r\n }\r\n let zoomSrc = img?.getAttribute('data-zoomsrc')?.toString();\r\n if (zoomSrc) img?.setAttribute('src', zoomSrc);\r\n }\r\n });\r\n}\r\nif (document.querySelector(\".swiper.recommended\")) {\r\n const recommended = initNavigationSwipers('.swiper.recommended', '.recommended-container .swiper-button-next', '.recommended-container .swiper-button-prev');\r\n //const recommended = new Swiper('.swiper.recommended', {\r\n // modules: [Navigation],\r\n // direction: 'horizontal',\r\n // cssMode: true,\r\n // slidesPerView: \"auto\",\r\n // loop: false,\r\n // speed: 600,\r\n // navigation: {\r\n // nextEl: '.recommended-container .swiper-button-next',\r\n // prevEl: '.recommended-container .swiper-button-prev',\r\n // },\r\n // breakpoints: {\r\n // 1024: {\r\n // cssMode: false,\r\n // slidesPerView: 4,\r\n // spaceBetween: 40,\r\n // },\r\n // },\r\n //});\r\n}\r\nif (document.querySelector(\".swiper.alsobought\")) {\r\n const alsobought = initNavigationSwipers('.swiper.alsobought', '.alsobought-container .swiper-button-next', '.alsobought-container .swiper-button-prev');\r\n //const alsobought = new Swiper('.swiper.alsobought', {\r\n // modules: [Navigation],\r\n // direction: 'horizontal',\r\n // cssMode: true,\r\n // slidesPerView: \"auto\",\r\n // loop: false,\r\n // speed: 600,\r\n // navigation: {\r\n // nextEl: '.alsobought-container .swiper-button-next',\r\n // prevEl: '.alsobought-container .swiper-button-prev',\r\n // },\r\n // breakpoints: {\r\n // 1024: {\r\n // cssMode: false,\r\n // slidesPerView: 4,\r\n // spaceBetween: 40,\r\n // },\r\n // },\r\n //});\r\n}\r\nif (document.querySelector(\".swiper.packagedeals\")) {\r\n const packagedeals = initNavigationSwipers('.swiper.packagedeals', '.packagedeals-container .swiper-button-next', '.packagedeals-container .swiper-button-prev');\r\n //const alsobought = new Swiper('.swiper.packagedeals', {\r\n // modules: [Navigation],\r\n // direction: 'horizontal',\r\n // cssMode: true,\r\n // slidesPerView: \"auto\",\r\n // loop: false,\r\n // speed: 600,\r\n // navigation: {\r\n // nextEl: '.packagedeals-container .swiper-button-next',\r\n // prevEl: '.packagedeals-container .swiper-button-prev',\r\n // },\r\n // breakpoints: {\r\n // 1024: {\r\n // cssMode: false,\r\n // slidesPerView: 4,\r\n // spaceBetween: 40,\r\n // },\r\n // },\r\n //});\r\n}\r\nif (document.querySelector(\".swiper.accessories\")) {\r\n const accessories = initNavigationSwipers('.swiper.accessories', '.accessories-container .swiper-button-next', '.accessories-container .swiper-button-prev');\r\n //const alsobought = new Swiper('.swiper.accessories', {\r\n // modules: [Navigation],\r\n // direction: 'horizontal',\r\n // cssMode: true,\r\n // slidesPerView: \"auto\",\r\n // loop: false,\r\n // speed: 600,\r\n // navigation: {\r\n // nextEl: '.accessories-container .swiper-button-next',\r\n // prevEl: '.accessories-container .swiper-button-prev',\r\n // },\r\n // breakpoints: {\r\n // 1024: {\r\n // cssMode: false,\r\n // slidesPerView: 4,\r\n // spaceBetween: 40,\r\n // },\r\n // },\r\n //});\r\n}\r\nif (document.querySelector(\".swiper.upgrade\")) {\r\n const upgrade = initNavigationSwipers('.swiper.upgrade', '.upgrade-container .swiper-button-next', '.upgrade-container .swiper-button-prev');\r\n //const alsobought = new Swiper('.swiper.upgrade', {\r\n // modules: [Navigation],\r\n // direction: 'horizontal',\r\n // cssMode: true,\r\n // slidesPerView: \"auto\",\r\n // loop: false,\r\n // speed: 600,\r\n // navigation: {\r\n // nextEl: '.upgrade-container .swiper-button-next',\r\n // prevEl: '.upgrade-container .swiper-button-prev',\r\n // },\r\n // breakpoints: {\r\n // 1024: {\r\n // cssMode: false,\r\n // slidesPerView: 4,\r\n // spaceBetween: 40,\r\n // },\r\n // },\r\n //});\r\n}\r\n///////////////////////////////////////////////////////////////////\r\n// Toggle function (Show more) //\r\n///////////////////////////////////////////////////////////////////\r\naddToggleEvent();\r\n\r\nfunction addToggleEvent() {\r\n if (document.getElementsByClassName('toggle-parent').length) {\r\n // Show more boxes\r\n var showMoreToggles = document.querySelectorAll('.toggle-control .btn');\r\n showMoreToggles.forEach(function (toggle) {\r\n if (!toggle.classList.contains('event-added')) {\r\n toggle.classList.add('event-added');\r\n toggle.addEventListener('click', function (e) {\r\n let elem = e.target as HTMLElement;\r\n if (!(e.target as HTMLElement).outerHTML.startsWith('= 0 && basketButtonPos.bottom <= window.innerHeight && !isSticky) ||\r\n (footerPosition.top >= 0 && footerPosition.bottom <= window.innerHeight && !isSticky)) {\r\n documentBody.classList.remove('sticky-buy-now');\r\n isSticky = false\r\n } else {\r\n documentBody.classList.add('sticky-buy-now');\r\n isSticky = true;\r\n }\r\n }\r\n}\r\n","import { DeliveryOptions_BindEvents, DeliveryOptions_Init } from \"./gak-DeliveryOptions\"\r\nimport { FacebookScriptsService } from \"./tracking-scripts.js\";\r\nimport { basketParams } from './gak-DeliveryOptions'\r\nimport { debounceScript } from './Debounce.js';\r\nimport { loadBasketPanel } from './gak-ProductDetail';\r\nimport { ShoppingBasket_UpdateItemCount } from './common';\r\nimport { pushRemoveFromCart, pushAddToCart, onCheckout, onCheckoutOption, pushEnhancedEcommerce } from \"./enhanced-ecommerce.js\";\r\nimport Swiper, { Navigation } from 'swiper';\r\n\r\ndeclare var ShoppingBasketParms: any;\r\ndeclare var basketConfig: any;\r\ndeclare var bpj: any;\r\n\r\nvar basketPanel: boolean = false;\r\nvar requestBasketUpdate =\r\n (debounceScript as any)(updateWholeCart,\r\n 500,\r\n { 'leading': false, 'trailing': true });\r\n\r\nvar qtyUpdateKeyUp =\r\n (debounceScript as any)(onQtyKeyUp,\r\n 500,\r\n { 'leading': false, 'trailing': true });\r\n\r\nfunction showWaitElement(show: any) {\r\n var waitElem = document.getElementsByClassName(\"wait-spinner\")!.item(0)!;\r\n if (waitElem) {\r\n if (show) waitElem.classList.remove('hidden');\r\n else waitElem.classList.add('hidden');\r\n }\r\n}\r\n\r\nfunction disableBasketButtons() {\r\n //Disable +, - and remove buttons\r\n var buttons = document.querySelectorAll(\r\n \".order-process-basket button.decrease, \\\r\n .order-process-basket button.increase, \\\r\n .order-process-basket button.remove-order-item-button, \\\r\n .order-process-basket .quantity-select\");\r\n buttons.forEach(function (b) {\r\n b.classList.add(\"btn-disabled\");\r\n b.setAttribute(\"disabled\", \"\");\r\n });\r\n\r\n var qtys = document.querySelectorAll(\".order-process-basket input.js-stepper.quantity\");\r\n qtys.forEach(function (q) {\r\n q.setAttribute(\"readonly\", \"\");\r\n });\r\n}\r\n\r\nfunction onQtyKeyUp(e: any) {\r\n let inputElement = e.srcElement;\r\n if (inputElement.readOnly) return;\r\n\r\n let oldValue = parseInt(inputElement.closest('li').getAttribute('data-quantity'));\r\n let newValue = parseInt(inputElement.value);\r\n if (isNaN(newValue)) return;\r\n newValue = sanitizeQtyInput(newValue);\r\n if (oldValue !== newValue) {\r\n disableBasketButtons();\r\n showWaitElement(true);\r\n updateStepper(e.srcElement);\r\n inputElement.focus();\r\n }\r\n}\r\n\r\nexport function updateWholeCart(newRegionId: any) {\r\n var basketItems = document.querySelectorAll(\".basket-item\");\r\n var form = new FormData();\r\n\r\n if (basketItems)\r\n basketItems.forEach(function (item, i) {\r\n var id = item.getAttribute(\"data-id\")!;\r\n var quantity = item.getAttribute(\"data-quantity\")!;\r\n\r\n form.append(`orderItems[${i}][ID]`, id);\r\n form.append(`orderItems[${i}][Quantity]`, quantity);\r\n });\r\n\r\n if (newRegionId) {\r\n form.append(\"newRegionId\", newRegionId);\r\n }\r\n\r\n form.append(\"redirectToShoppingBasket\", (!basketPanel).toString());\r\n\r\n fetch(ShoppingBasketParms.UpdateCartURL, {\r\n method: 'POST',\r\n body: form\r\n }).then(response => response.text())\r\n .then(function (data: any) {\r\n if (basketPanel) {\r\n loadBasketPanel();\r\n }\r\n else {\r\n updateBasketContent(data);\r\n }\r\n showItemUpdatedAlert();\r\n showWaitElement(false);\r\n });\r\n}\r\n\r\nfunction showItemUpdatedAlert() {\r\n var basketAlert = document.getElementById(\"basketAlert\");\r\n var alertText = document.querySelector(\"#basketAlert p\");\r\n\r\n if (basketAlert && alertText) {\r\n basketAlert.className = \"[ alert ] [ bg-green-1 text-green text-15 text-md-16 ]\";\r\n alertText.textContent = \"Item quantity updated\";\r\n }\r\n}\r\n\r\nfunction showItemRemovedAlert() {\r\n var basketAlert = document.getElementById(\"basketAlert\");\r\n var alertText = document.querySelector(\"#basketAlert p\");\r\n\r\n if (basketAlert && alertText) {\r\n basketAlert.className = \"[ alert ] [ bg-red-1 text-red text-15 text-md-16 ]\";\r\n alertText.textContent = \"1x item removed from basket\";\r\n }\r\n}\r\n\r\nfunction sanitizeQtyInput(value: number) {\r\n if (value < 0)\r\n return 0;\r\n if (value > 1000)\r\n return 1000;\r\n return value;\r\n}\r\n\r\nfunction updateStepper(element: any) {\r\n var quantityInput = element.parentNode.querySelector(\"input\");\r\n var li = element.closest(\"[data-quantity]\");\r\n var productId = li.getAttribute(\"data-product-id\");\r\n if (quantityInput) {\r\n var newValue = parseInt(quantityInput.value);\r\n var oldValue = parseInt(quantityInput.getAttribute('value'));\r\n var classList = element.classList;\r\n if (classList.contains(\"decrease\")) {\r\n newValue--;\r\n } else if (classList.contains(\"increase\")) {\r\n newValue++;\r\n }\r\n newValue = sanitizeQtyInput(newValue);\r\n quantityInput.value = newValue;\r\n quantityInput.setAttribute(\"value\", newValue);\r\n li.setAttribute(\"data-quantity\", newValue);\r\n\r\n if (oldValue > newValue)\r\n pushRemoveFromCart(productId, oldValue - newValue);\r\n else\r\n pushAddToCart(productId, newValue - oldValue);\r\n }\r\n\r\n requestBasketUpdate();\r\n}\r\n\r\nexport function ShoppingBasket_BindEvents(isBasketPanel: boolean = false) {\r\n basketPanel = isBasketPanel;\r\n let decreaseBtns = document.querySelectorAll(\".stepper button.decrease\");\r\n let increaseBtns = document.querySelectorAll(\".stepper button.increase\");\r\n let removeBtns = document.querySelectorAll(\".remove-order-item-button\");\r\n let qtyInputs = document.querySelectorAll(\".stepper .js-stepper.quantity\");\r\n\r\n const quantitySelect = document.querySelectorAll(\".quantity-select\");\r\n\r\n if (quantitySelect) {\r\n quantitySelect.forEach(function (element: any) {\r\n element.addEventListener(\"change\", function () {\r\n disableBasketButtons();\r\n showWaitElement(true);\r\n\r\n const li = element.closest(\"[data-quantity]\");\r\n li.setAttribute(\"data-quantity\", element.value);\r\n requestBasketUpdate();\r\n });\r\n });\r\n }\r\n\r\n if (decreaseBtns) {\r\n decreaseBtns.forEach(function (element: any) {\r\n element.addEventListener(\"click\", function () {\r\n disableBasketButtons();\r\n showWaitElement(true);\r\n updateStepper(element);\r\n });\r\n });\r\n }\r\n\r\n if (increaseBtns) {\r\n increaseBtns.forEach(function (element: any) {\r\n element.addEventListener(\"click\", function () {\r\n disableBasketButtons();\r\n showWaitElement(true);\r\n updateStepper(element);\r\n });\r\n });\r\n }\r\n\r\n removeBtns.forEach(function (element: any) {\r\n element.addEventListener(\"click\", function () {\r\n disableBasketButtons();\r\n showWaitElement(true);\r\n var ordermItemId = element.closest(\"li\").getAttribute(\"data-id\");\r\n removeOrderItem(ordermItemId);\r\n });\r\n });\r\n\r\n qtyInputs.forEach(function (qty) {\r\n if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || navigator.userAgent.match(/Mac/) && navigator.maxTouchPoints && navigator.maxTouchPoints > 2) {\r\n qty.addEventListener(\"blur\", qtyUpdateKeyUp);\r\n } else {\r\n qty.addEventListener(\"keyup\", qtyUpdateKeyUp);\r\n }\r\n });\r\n\r\n const recommended = new Swiper('.swiper.recommended', {\r\n modules: [Navigation],\r\n direction: 'horizontal',\r\n cssMode: true,\r\n slidesPerView: \"auto\",\r\n loop: false,\r\n speed: 600,\r\n navigation: {\r\n nextEl: '.recommended-container .swiper-button-next',\r\n prevEl: '.recommended-container .swiper-button-prev',\r\n },\r\n breakpoints: {\r\n 1024: {\r\n cssMode: false,\r\n slidesPerView: 4,\r\n spaceBetween: 40,\r\n },\r\n },\r\n });\r\n}\r\n\r\nexport function showBasketError(msg: string) {\r\n var basketErrorContainer = document.getElementsByClassName(\"basketErrorContainer\")?.item(0);\r\n\r\n if (basketErrorContainer)\r\n basketErrorContainer.textContent = msg;\r\n}\r\n\r\n\r\nfunction removeOrderItem(orderItemId: any) {\r\n if (orderItemId != null && orderItemId != \"\") {\r\n var form = new FormData();\r\n form.append(\"orderItemId\", orderItemId)\r\n fetch(ShoppingBasketParms.DestroyOrderItemURL, {\r\n method: \"POST\",\r\n body: form\r\n }).then((response) => {\r\n if (response.ok) {\r\n return response.text();\r\n }\r\n showBasketError(\"Unable to remove from basket, please try again\");\r\n })\r\n .then(function (data) {\r\n if (basketPanel) {\r\n loadBasketPanel();\r\n pushProductRemovalToGA(orderItemId);\r\n }\r\n else {\r\n pushProductRemovalToGA(orderItemId);\r\n updateBasketContent(data);\r\n }\r\n showWaitElement(true);\r\n showItemRemovedAlert();\r\n });\r\n }\r\n}\r\n\r\n\r\nfunction pushProductRemovalToGA(orderItemId: any) {\r\n var product = document.querySelector(`[data-id=\"${orderItemId}\"]`);\r\n if (product) {\r\n var productId = product.getAttribute(\"data-product-id\");\r\n if (productId) {\r\n var quantity = product.getAttribute(\"data-quantity\");\r\n var quantityNo = 0;\r\n\r\n if (quantity)\r\n quantityNo = parseInt(quantity);\r\n else {\r\n var productDetails = document.querySelector(`[data-product-id='${product.id}']`);\r\n\r\n if (productDetails)\r\n quantityNo = parseInt(productDetails.getAttribute(\"data-quantity\") || \"0\");\r\n }\r\n\r\n pushRemoveFromCart(productId, quantityNo);\r\n }\r\n }\r\n}\r\n\r\n\r\nfunction loadShoppingBasket() {\r\n fetch(basketConfig.basketUrl, {\r\n method: 'GET',\r\n }).then(response => response.text())\r\n .then(function (data: any) {\r\n updateBasketContent(data);\r\n pushEnhancedEcommerce();\r\n onCheckout(1);\r\n });\r\n}\r\n\r\n\r\nfunction updateBasketContent(data: any) {\r\n var currentBasketContainer = document.getElementById(\"shoppingBasketContent\")\r\n\r\n if (currentBasketContainer)\r\n currentBasketContainer.innerHTML = data;\r\n\r\n var parser = new DOMParser();\r\n var html = parser.parseFromString(data, 'text/html');\r\n\r\n if (html) {\r\n var bpj = (html.getElementById(\"bpj\")!);\r\n if (bpj) {\r\n DeliveryOptions_Init(bpj.value);\r\n ShoppingBasket_BindEvents(basketPanel);\r\n if (!basketPanel) {\r\n DeliveryOptions_BindEvents(true);\r\n }\r\n }\r\n ShoppingBasket_UpdateItemCount();\r\n }\r\n}\r\n\r\nexport function ShoppingBasket_ProceedToCheckout(e: any) {\r\n var theButton = e.currentTarget;\r\n var deliveryTypeId = (document.getElementById(\"deliveryTypeID\"));\r\n\r\n if (basketParams && basketParams.OutOfStock && ((deliveryTypeId!.value || '') == '')) {\r\n // Monkeypatched alert is async... so prevent first!\r\n e.preventDefault();\r\n alert(\"You must select a Delivery Option before Checkout\");\r\n return;\r\n }\r\n\r\n // Facebook Track code\r\n // InitiateCheckout\r\n // Track when people enter the checkout flow (ex. click/landing page on checkout button)\r\n\r\n FacebookScriptsService.addFacebookTracking(false);\r\n FacebookScriptsService.addFacebookEvent('InitiateCheckout');\r\n\r\n var chosenOption = document.querySelector(\".chosenOption span[data-helptext]\");\r\n\r\n if (chosenOption) {\r\n var chosenOptionDesc = chosenOption.getAttribute(\"data-helptext\");\r\n\r\n if (chosenOptionDesc)\r\n onCheckoutOption(1, chosenOptionDesc);\r\n }\r\n\r\n var paymentMethod = theButton.getAttribute(\"data-payment-mehtod\");\r\n\r\n onCheckoutOption(1, paymentMethod);\r\n\r\n //(document.getElementById(\"UpdateStockForm\") as any).submit();\r\n}\r\n\r\nfunction toggleFooter() {\r\n var ToggleButtons = document.querySelectorAll('[data-toggle-parent]');\r\n if (ToggleButtons.length) {\r\n ToggleButtons.forEach(function (toggle) {\r\n if (!toggle.classList.contains('click-bound')) {\r\n toggle.classList.add('click-bound');\r\n toggle.addEventListener('click', function (e) {\r\n let elem = e.target as HTMLElement;\r\n if (elem.getAttribute('aria-expanded') == \"false\") {\r\n elem.setAttribute('aria-expanded', 'true')\r\n }\r\n else {\r\n elem.setAttribute('aria-expanded', 'false');\r\n }\r\n })\r\n }\r\n })\r\n }\r\n}\r\n\r\nwindow.onload = function () {\r\n loadShoppingBasket();\r\n toggleFooter();\r\n}","import Swiper, { Navigation, Pagination } from 'swiper';\r\n\r\ndeclare var ShoppingBasketParms: any;\r\n\r\nfunction waitForElm(selector: string) {\r\n return new Promise(resolve => {\r\n if (document.querySelector(selector)) {\r\n return resolve(document.querySelector(selector));\r\n }\r\n\r\n const observer = new MutationObserver(mutations => {\r\n if (document.querySelector(selector)) {\r\n resolve(document.querySelector(selector));\r\n observer.disconnect();\r\n }\r\n });\r\n\r\n observer.observe(document.body, {\r\n childList: true,\r\n subtree: true\r\n });\r\n });\r\n}\r\n\r\nexport function initBasketPanelSwiper() {\r\n const basketalsobought = new Swiper('.swiper.basket-alsobought', {\r\n modules: [Navigation, Pagination],\r\n direction: 'horizontal',\r\n cssMode: true,\r\n slidesPerView: 3.5,\r\n slidesPerGroup: 3,\r\n spaceBetween: 8,\r\n loop: false,\r\n speed: 600,\r\n pagination: {\r\n el: '.swiper-pagination',\r\n clickable: true,\r\n type: 'bullets',\r\n },\r\n breakpoints: {\r\n 500: {\r\n cssMode: false,\r\n slidesPerView: 4.5,\r\n slidesPerGroup: 4,\r\n },\r\n },\r\n });\r\n}\r\n\r\n\r\n","const Tabby = require('tabbyjs');\r\ninitTabs();\r\n\r\nfunction initTabs() {\r\n let tabsList = document.querySelectorAll('[data-tabs]');\r\n if (tabsList && tabsList.length > 0) {\r\n var tabs = new Tabby('[data-tabs]');\r\n if (document.getElementsByClassName('tabs').length) {\r\n const tabSelectors = document.querySelectorAll('ul.tabs') as NodeList;\r\n tabSelectors.forEach((tab, i) => {\r\n let selector = `data-tabs-${i}`;\r\n (tab as HTMLElement).setAttribute(selector, '');\r\n new Tabby(`[data-tabs-${i}]`);\r\n });\r\n\r\n //Scroll the tabs along when mobile/desktop users click\r\n document.querySelectorAll('.tabs li').forEach((tabItem) => {\r\n tabItem.addEventListener('click', (elem) => {\r\n if (window.matchMedia(\"(min-width: 1024px)\").matches) {\r\n let viewport = ((elem.currentTarget as HTMLElement).parentNode as HTMLElement).parentElement;\r\n let offset = (elem.currentTarget as HTMLElement).offsetLeft;\r\n if (viewport && (offset > ((elem.currentTarget as HTMLElement).parentNode as HTMLElement).scrollWidth - viewport.clientWidth)) {\r\n offset = ((elem.currentTarget as HTMLElement).parentNode as HTMLElement).scrollWidth - viewport.clientWidth;\r\n }\r\n ((elem.currentTarget as HTMLElement).parentNode as HTMLElement).style.transform = 'translate(-' + offset + 'px)';\r\n let prevButton = ((elem.currentTarget as HTMLElement).parentNode as HTMLElement).previousElementSibling as HTMLElement;\r\n let nextButton = ((elem.currentTarget as HTMLElement).parentNode as HTMLElement).nextElementSibling as HTMLElement;\r\n checkButtons((elem.currentTarget as HTMLElement).parentNode as HTMLElement, nextButton, prevButton);\r\n }\r\n else {\r\n ((elem.currentTarget as HTMLElement).parentNode as HTMLElement).scrollLeft = (elem.currentTarget as HTMLElement).offsetLeft;\r\n }\r\n });\r\n });\r\n\r\n window.onresize = checkScrollingTabContainers;\r\n checkScrollingTabContainers();\r\n }\r\n }\r\n}\r\n\r\nfunction checkScrollingTabContainers(): void {\r\n document.querySelectorAll('.scrolling-tab-container').forEach((tabContainer) => {\r\n let tablisting: any = tabContainer.getElementsByClassName('tabs').item(0);\r\n (tablisting as HTMLElement).removeAttribute('style');\r\n let prevButton = tabContainer.getElementsByClassName('tab-previous').item(0);\r\n (prevButton as HTMLElement).classList.remove('disabled');\r\n let nextButton = tabContainer.getElementsByClassName('tab-next').item(0);\r\n (nextButton as HTMLElement).classList.remove('disabled');\r\n if (!tablisting) {\r\n (prevButton as HTMLElement).classList.add('disabled');\r\n (nextButton as HTMLElement).classList.add('disabled');\r\n }\r\n else {\r\n //initial state\r\n (prevButton as HTMLElement).classList.add('disabled');\r\n if (getLastVisibleTab(tablisting) == tablisting.children.length - 1) {\r\n (nextButton as HTMLElement).classList.add('disabled');\r\n }\r\n }\r\n\r\n //click events\r\n nextButton?.addEventListener('click', (elem) => {\r\n elem.preventDefault();\r\n let buttonElem = (elem.currentTarget as HTMLElement);\r\n let tablist: any = buttonElem.previousElementSibling;\r\n let prevButton: HTMLElement = tablist.previousElementSibling;\r\n let index = getLastVisibleTab(tablist);\r\n if (index < tablist.children.length - 1) {\r\n let viewport = (tablist as HTMLElement).parentElement;\r\n let offset = tablist.children[index + 1].offsetLeft;\r\n if (viewport && offset > (tablist as HTMLElement).scrollWidth - viewport.clientWidth + 45) {\r\n offset = (tablist as HTMLElement).scrollWidth - viewport.clientWidth + 45;\r\n }\r\n (tablist as HTMLElement).style.transform = 'translate(-' + offset + 'px)';\r\n checkButtons((tablist as HTMLElement), buttonElem, prevButton);\r\n }\r\n else {\r\n buttonElem.classList.add('disabled');\r\n }\r\n });\r\n prevButton?.addEventListener('click', (elem) => {\r\n elem.preventDefault();\r\n let buttonElem = (elem.currentTarget as HTMLElement);\r\n let tablist: any = buttonElem.nextElementSibling;\r\n let nextButton: HTMLElement = tablist.nextElementSibling;\r\n let index = getFirstVisibleTab(tablist);\r\n if (index > 0) {\r\n let viewport = (tablist as HTMLElement).parentElement;\r\n let offset = tablist.children[index - 1].offsetLeft;\r\n if (viewport && offset < 0) {\r\n offset = 0;\r\n }\r\n (tablist as HTMLElement).style.transform = 'translate(-' + offset + 'px)';\r\n checkButtons((tablist as HTMLElement), nextButton, buttonElem);\r\n }\r\n else {\r\n buttonElem.classList.add('disabled');\r\n }\r\n });\r\n });\r\n}\r\n\r\nfunction getFirstVisibleTab(tabList: any): number {\r\n let index = 0;\r\n let viewport = (tabList as HTMLElement).parentElement;\r\n for (let child of tabList.children) {\r\n if (viewport && tabList &&\r\n (child.getBoundingClientRect().x) >= viewport.getBoundingClientRect().x) {\r\n break;\r\n }\r\n index++;\r\n }\r\n return index;\r\n}\r\n\r\nfunction getLastVisibleTab(tabList: any): number {\r\n let count = (tabList as any).children.length - 1;\r\n let ctr = count;\r\n let viewport = (tabList as HTMLElement).parentElement;\r\n for (ctr = count; ctr >= 0; ctr--) {\r\n if (viewport && tabList && tabList.children[ctr]) {\r\n if ((tabList.children[ctr].getBoundingClientRect().x + tabList.children[ctr].getBoundingClientRect().width + 20) <=\r\n (viewport.getBoundingClientRect().x + viewport.getBoundingClientRect().width)) {\r\n break;\r\n }\r\n }\r\n }\r\n return ctr;\r\n}\r\n\r\nfunction checkButtons(tablist: HTMLElement, nextButton: HTMLElement, prevButton: HTMLElement): void {\r\n setTimeout(() => {\r\n if (getLastVisibleTab(tablist) == (tablist.children.length - 1)) {\r\n nextButton?.classList.add('disabled');\r\n }\r\n else {\r\n nextButton?.classList.remove('disabled');\r\n }\r\n if (getFirstVisibleTab(tablist) > 0) {\r\n prevButton?.classList.remove('disabled');\r\n }\r\n else {\r\n prevButton?.classList.add('disabled');\r\n }\r\n }, 500);\r\n}\r\n\r\n\r\nexport { initTabs };","declare var ImagesParams: {\r\n UseCDNImageCache: boolean,\r\n CloudflareAccountHash: string\r\n};\r\n\r\nexport default class Utils {\r\n static deleteCookie = (name: string) => {\r\n document.cookie = name + \"=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;\";\r\n };\r\n\r\n static getCookie(cookieName: string) {\r\n let cookie: any = {};\r\n document.cookie.split(';').forEach(function (el) {\r\n let [key, value] = el.split('=');\r\n cookie[key.trim()] = value;\r\n })\r\n\r\n return cookie[cookieName];\r\n }\r\n\r\n static setCookie(name: string, value: any, days: number) {\r\n var expires = \"\";\r\n if (days) {\r\n var date = new Date();\r\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\r\n expires = \"; expires=\" + date.toUTCString();\r\n }\r\n else {\r\n expires = \"; expires=Session\";\r\n }\r\n document.cookie = name + \"=\" + (value || \"\") + expires + \"; path=/\";\r\n }\r\n\r\n static setSessionCookie(name: string, value: any) {\r\n var expires = \"\";\r\n expires = \"; expires=Session\";\r\n document.cookie = name + \"=\" + (value || \"\") + expires + \"; path=/\";\r\n }\r\n\r\n\r\n static getHashKeyValuePairs() {\r\n return this.getUrlKeyValuePairs(window.location.hash);\r\n }\r\n\r\n static getHrefKeyValuePairs() {\r\n return this.getUrlKeyValuePairs(window.location.search);\r\n }\r\n\r\n static getUrlKeyValuePairs(url: string) {\r\n var result = [];\r\n\r\n if (url) {\r\n var hash = url.substring(1); //removes the # or ? character for hash or queryString repectively.\r\n var pairs = hash.split('&');\r\n for (var i = 0; i < pairs.length; i++) {\r\n var pairParts = pairs[i].split('=');\r\n if (pairParts.length == 2) {\r\n var key = pairParts[0];\r\n var value = pairParts[1];\r\n result.push({ key: key, value: value });\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n static loadImagesForProductListings_BasedOnView(prodListing: any) {\r\n var isGridView = prodListing.hasClass('view-as-grid');\r\n prodListing.find('.productImageWrapper img').each(function (index: any) {\r\n var img = document.querySelector(index);\r\n setTimeout(function () {\r\n var newImgUrl = img.closest('.innerwrapper').data(isGridView ? 'prodimggridview' : 'prodimglistview');\r\n // Set the new Img Url to the proper attribute src or lazy-src.\r\n if (img.attr(\"lazy-src\")) {\r\n img.attr(\"lazy-src\", newImgUrl);\r\n }\r\n else if (img[0].src) {\r\n img[0].src = newImgUrl;\r\n }\r\n }, 1);\r\n });\r\n }\r\n\r\n static getImageURL(width: number, height: number, imgUrl: string): string {\r\n if (ImagesParams.UseCDNImageCache) {\r\n if (imgUrl.startsWith('~')) {\r\n imgUrl = imgUrl.substring(1);\r\n }\r\n return `https://www.gak.co.uk/cdn-cgi/image/fit=scale-down,width=${width},height=${height},format=auto/${imgUrl}`;\r\n }\r\n else {\r\n return `https://www.gak.co.uk/cdn-cgi/imagedelivery/${ImagesParams.CloudflareAccountHash}/${imgUrl}/${width}x${height}`;\r\n }\r\n \r\n }\r\n\r\n static atou(b64: string) {\r\n return decodeURIComponent(escape(atob(b64)));\r\n }\r\n\r\n static utoa(data: any) {\r\n return btoa(unescape(encodeURIComponent(data)));\r\n }\r\n}","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","import { getWindow } from 'ssr-window';\nexport default function getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\nexport default {\n setBreakpoint,\n getBreakpoint\n};","import { extend } from '../../shared/utils.js';\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nexport default function setBreakpoint() {\n const swiper = this;\n const {\n realIndex,\n initialized,\n params,\n el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n\n // Get breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n\n // Toggle navigation, pagination, scrollbar\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n if (typeof breakpointParams[prop] === 'undefined') return;\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n }\n swiper.emit('breakpoint', breakpointParams);\n}","function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\nexport default {\n checkOverflow\n};","function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\nexport default function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n el,\n device\n } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n el.classList.add(...classNames);\n swiper.emitContainerClasses();\n}","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\nexport default {\n addClasses,\n removeClasses\n};","export default function removeClasses() {\n const swiper = this;\n const {\n el,\n classNames\n } = swiper;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport { extend, deleteProps, createElement, elementChildren, elementStyle, elementIndex } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\nimport eventsEmitter from './events-emitter.js';\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport checkOverflow from './check-overflow/index.js';\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\nimport { processLazyPreloader, preload } from '../shared/process-lazy-preloader.js';\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n const document = getDocument();\n if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document.querySelectorAll(params.el).forEach(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n params,\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n evCache: []\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n getSlideIndex(slideEl) {\n const {\n slidesEl,\n params\n } = this;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n const firstSlideIndex = elementIndex(slides[0]);\n return elementIndex(slideEl) - firstSlideIndex;\n }\n getSlideIndexByData(index) {\n return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]);\n }\n recalcSlides() {\n const swiper = this;\n const {\n slidesEl,\n params\n } = swiper;\n swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n }\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.forEach(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n slidesPerViewDynamic(view = 'current', exact = false) {\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex] ? slides[activeIndex].swiperSlideSize : 0;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n }\n });\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n setTranslate();\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n translated = swiper.slideTo(slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n mount(element) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.shadowEl) {\n swiper.isElement = true;\n }\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = el.shadowRoot.querySelector(getWrapperSelector());\n // Children needs to return slot items\n return res;\n }\n return elementChildren(el, getWrapperSelector())[0];\n };\n // Find Wrapper\n let wrapperEl = getWrapper();\n if (!wrapperEl && swiper.params.createElements) {\n wrapperEl = createElement('div', swiper.params.wrapperClass);\n el.append(wrapperEl);\n elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n wrapperEl.append(slideEl);\n });\n }\n Object.assign(swiper, {\n el,\n wrapperEl,\n slidesEl: swiper.isElement ? el : wrapperEl,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n });\n return true;\n }\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Attach events\n swiper.attachEvents();\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n } else {\n imageEl.addEventListener('load', e => {\n processLazyPreloader(swiper, e.target);\n });\n }\n });\n preload(swiper);\n\n // Init Flag\n swiper.initialized = true;\n preload(swiper);\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n el,\n wrapperEl,\n slides\n } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n el.removeAttribute('style');\n wrapperEl.removeAttribute('style');\n if (slides && slides.length) {\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n }\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n swiper.el.swiper = null;\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n static get extendedDefaults() {\n return extendedDefaults;\n }\n static get defaults() {\n return defaults;\n }\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\nexport default Swiper;","export default {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 5,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // loop\n loop: false,\n loopedSlides: null,\n loopPreventsSliding: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n lazyPreloadPrevNext: 0,\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};","/* eslint-disable no-underscore-dangle */\n\nexport default {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n function onceHandler(...args) {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit(...args) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\nimport onLoad from './onLoad.js';\nlet dummyEventAttached = false;\nfunction dummyEventListener() {}\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n el,\n wrapperEl,\n device\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n\n // Touch Events\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerout', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerleave', swiper.onTouchEnd, {\n passive: true\n });\n\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n\n // Images loader\n el[domMethod]('load', swiper.onLoad, {\n capture: true\n });\n};\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n swiper.onClick = onClick.bind(swiper);\n swiper.onLoad = onLoad.bind(swiper);\n if (!dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n events(swiper, 'on');\n}\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\nexport default {\n attachEvents,\n detachEvents\n};","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}","import { processLazyPreloader } from '../../shared/process-lazy-preloader.js';\nexport default function onLoad(e) {\n const swiper = this;\n processLazyPreloader(swiper, e.target);\n if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n return;\n }\n swiper.update();\n}","export default function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n const isVirtualLoop = isVirtual && params.loop;\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n if (swiper.params.loop && !isVirtual) {\n swiper.slideToLoop(swiper.realIndex, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n clearTimeout(swiper.autoplay.resizeTimeout);\n swiper.autoplay.resizeTimeout = setTimeout(() => {\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.resume();\n }\n }, 500);\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}","export default function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n swiper.emit('setTranslate', swiper.translate, false);\n}","import { now, nextTick } from '../../shared/utils.js';\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === event.pointerId);\n if (pointerIndex >= 0) {\n data.evCache.splice(pointerIndex, 1);\n }\n if (['pointercancel', 'pointerout', 'pointerleave'].includes(event.type)) {\n const proceed = event.type === 'pointercancel' && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n if (params.cssMode) {\n return;\n }\n if (params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n }\n\n // Find current slide\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n }\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}","import { getDocument } from 'ssr-window';\nimport { now } from '../../shared/utils.js';\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) data.evCache[pointerIndex] = e;\n const targetTouch = data.evCache.length > 1 ? data.evCache[0] : e;\n const pageX = targetTouch.pageX;\n const pageY = targetTouch.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!e.target.matches(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n prevX: swiper.touches.currentX,\n prevY: swiper.touches.currentY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n if (document.activeElement) {\n if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling || swiper.zoom && swiper.params.zoom && swiper.params.zoom.enabled && data.evCache.length > 1) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n let diff = swiper.isHorizontal() ? diffX : diffY;\n let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n if (params.oneWayMovement) {\n diff = Math.abs(diff) * (rtl ? 1 : -1);\n touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n }\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) {\n diff = -diff;\n touchesDiff = -touchesDiff;\n }\n const prevTouchesDirection = swiper.touchesDirection;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n const isLoop = swiper.params.loop && !params.cssMode;\n if (!data.isMoved) {\n if (isLoop) {\n swiper.loopFix({\n direction: swiper.swipeDirection\n });\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true\n });\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n let loopFixed;\n if (data.isMoved && prevTouchesDirection !== swiper.touchesDirection && isLoop && Math.abs(diff) >= 1) {\n // need another loop fix\n swiper.loopFix({\n direction: swiper.swipeDirection,\n setTranslate: true\n });\n loopFixed = true;\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0) {\n if (isLoop && !loopFixed && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.size / 2 : swiper.minTranslate())) {\n swiper.loopFix({\n direction: 'prev',\n setTranslate: true,\n activeSlideIndex: 0\n });\n }\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n }\n }\n } else if (diff < 0) {\n if (isLoop && !loopFixed && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.size / 2 : swiper.maxTranslate())) {\n swiper.loopFix({\n direction: 'next',\n setTranslate: true,\n activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n });\n }\n if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n }\n }\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}","import { getWindow, getDocument } from 'ssr-window';\nimport { now } from '../../shared/utils.js';\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n data.evCache.push(event);\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!swiper.wrapperEl.contains(targetEl)) return;\n }\n if ('which' in e && e.which === 3) return;\n if ('button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n const eventPath = event.composedPath ? event.composedPath() : event.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n targetEl = eventPath[0];\n }\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!targetEl.closest(params.swipeHandler)) return;\n }\n touches.currentX = e.pageX;\n touches.currentY = e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n let preventDefault = true;\n if (targetEl.matches(data.focusableElements)) {\n preventDefault = false;\n if (targetEl.nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) {\n document.activeElement.blur();\n }\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n e.preventDefault();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\nexport default {\n setGrabCursor,\n unsetGrabCursor\n};","export default function setGrabCursor(moving) {\n const swiper = this;\n if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}","export default function unsetGrabCursor() {\n const swiper = this;\n if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\nexport default {\n loopCreate,\n loopFix,\n loopDestroy\n};","import { elementChildren } from '../../shared/utils.js';\nexport default function loopCreate(slideRealIndex) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index) => {\n el.setAttribute('data-swiper-slide-index', index);\n });\n swiper.loopFix({\n slideRealIndex,\n direction: params.centeredSlides ? undefined : 'next'\n });\n}","export default function loopDestroy() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n swiper.recalcSlides();\n const newSlidesOrder = [];\n swiper.slides.forEach(slideEl => {\n const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n newSlidesOrder[index] = slideEl;\n });\n swiper.slides.forEach(slideEl => {\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n newSlidesOrder.forEach(slideEl => {\n slidesEl.append(slideEl);\n });\n swiper.recalcSlides();\n swiper.slideTo(swiper.realIndex, 0);\n}","export default function loopFix({\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n byController,\n byMousewheel\n} = {}) {\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const {\n slides,\n allowSlidePrev,\n allowSlideNext,\n slidesEl,\n params\n } = swiper;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!params.centeredSlides && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {\n swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n return;\n }\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10));\n let loopedSlides = params.loopedSlides || slidesPerView;\n if (loopedSlides % params.slidesPerGroup !== 0) {\n loopedSlides += params.slidesPerGroup - loopedSlides % params.slidesPerGroup;\n }\n swiper.loopedSlides = loopedSlides;\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n let activeIndex = swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(swiper.slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);\n } else {\n activeIndex = activeSlideIndex;\n }\n const isNext = direction === 'next' || !direction;\n const isPrev = direction === 'prev' || !direction;\n let slidesPrepended = 0;\n let slidesAppended = 0;\n // prepend last slides before start\n if (activeSlideIndex < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeSlideIndex, params.slidesPerGroup);\n for (let i = 0; i < loopedSlides - activeSlideIndex; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n prependSlidesIndexes.push(slides.length - index - 1);\n }\n } else if (activeSlideIndex /* + slidesPerView */ > swiper.slides.length - loopedSlides * 2) {\n slidesAppended = Math.max(activeSlideIndex - (swiper.slides.length - loopedSlides * 2), params.slidesPerGroup);\n for (let i = 0; i < slidesAppended; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n appendSlidesIndexes.push(index);\n }\n }\n if (isPrev) {\n prependSlidesIndexes.forEach(index => {\n swiper.slides[index].swiperLoopMoveDOM = true;\n slidesEl.prepend(swiper.slides[index]);\n swiper.slides[index].swiperLoopMoveDOM = false;\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach(index => {\n swiper.slides[index].swiperLoopMoveDOM = true;\n slidesEl.append(swiper.slides[index]);\n swiper.slides[index].swiperLoopMoveDOM = false;\n });\n }\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') {\n swiper.updateSlides();\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (slideTo) {\n if (prependSlidesIndexes.length > 0 && isPrev) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex + slidesPrepended, 0, false, true);\n if (setTranslate) {\n swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;\n }\n }\n } else {\n if (setTranslate) {\n swiper.slideToLoop(slideRealIndex, 0, false, true);\n }\n }\n } else if (appendSlidesIndexes.length > 0 && isNext) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;\n }\n }\n } else {\n swiper.slideToLoop(slideRealIndex, 0, false, true);\n }\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.controller && swiper.controller.control && !byController) {\n const loopParams = {\n slideRealIndex,\n slideTo: false,\n direction,\n setTranslate,\n activeSlideIndex,\n byController: true\n };\n if (Array.isArray(swiper.controller.control)) {\n swiper.controller.control.forEach(c => {\n if (!c.destroyed && c.params.loop) c.loopFix(loopParams);\n });\n } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n swiper.controller.control.loopFix(loopParams);\n }\n }\n swiper.emit('loopFix');\n}","import { extend } from '../shared/utils.js';\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}","import { getWindow } from 'ssr-window';\nimport { elementParents } from '../../../shared/utils.js';\nexport default function Observer({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = elementParents(swiper.el);\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.el, {\n childList: swiper.params.observeSlideChildren\n });\n\n // Observe wrapper\n attach(swiper.wrapperEl, {\n attributes: false\n });\n };\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}","import { getWindow } from 'ssr-window';\nexport default function Resize({\n swiper,\n on,\n emit\n}) {\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({\n contentBoxSize,\n contentRect,\n target\n }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n enabled,\n params,\n animating\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'next'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled) return swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'prev'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) {\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex];\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) {\n return false;\n }\n }\n }\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n // Update progress\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n // Update Index\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n swiper._cssModeVirtualInitialSet = true;\n requestAnimationFrame(() => {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._immediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n return true;\n }\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n }\n return true;\n}","import { elementChildren, nextTick } from '../../shared/utils.js';\nexport default function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}","export default function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n let newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n // eslint-disable-next-line\n newIndex = newIndex + swiper.virtual.slidesBefore;\n } else {\n newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\nexport default {\n setTransition,\n transitionStart,\n transitionEnd\n};","export default function setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n }\n swiper.emit('setTransition', duration, byController);\n}","export default function transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step\n}) {\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}","import { getTranslate } from '../../shared/utils.js';\nexport default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n wrapperEl\n } = swiper;\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n let currentTranslate = getTranslate(wrapperEl, axis);\n currentTranslate += swiper.cssOverflowAdjustment();\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}","export default function minTranslate() {\n return -this.snapGrid[0];\n}","export default function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n if (swiper.isHorizontal()) {\n x -= swiper.cssOverflowAdjustment();\n } else {\n y -= swiper.cssOverflowAdjustment();\n }\n wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n }\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n swiper.emit('setTranslate', swiper.translate, byController);\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};","import { preload } from '../../shared/process-lazy-preloader.js';\nexport function getActiveIndexByTranslate(swiper) {\n const {\n slidesGrid,\n params\n } = swiper;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n let activeIndex;\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n return activeIndex;\n}\nexport default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n const getVirtualRealIndex = aIndex => {\n let realIndex = aIndex - swiper.virtual.slidesBefore;\n if (realIndex < 0) {\n realIndex = swiper.virtual.slides.length + realIndex;\n }\n if (realIndex >= swiper.virtual.slides.length) {\n realIndex -= swiper.virtual.slides.length;\n }\n return realIndex;\n };\n if (typeof activeIndex === 'undefined') {\n activeIndex = getActiveIndexByTranslate(swiper);\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n }\n return;\n }\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual.enabled && params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n } else if (swiper.slides[activeIndex]) {\n realIndex = parseInt(swiper.slides[activeIndex].getAttribute('data-swiper-slide-index') || activeIndex, 10);\n } else {\n realIndex = activeIndex;\n }\n Object.assign(swiper, {\n previousSnapIndex,\n snapIndex,\n previousRealIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n if (swiper.initialized) {\n preload(swiper);\n }\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}","export default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides[swiper.getSlideIndexByData(index)];\n }\n return swiper.slides[index];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || []).forEach(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}","export default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = e.closest(`.${params.slideClass}, swiper-slide`);\n let slideFound = false;\n let slideIndex;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}","export default function updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd,\n progressLoop\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n isBeginning = isBeginningRounded || progress <= 0;\n isEnd = isEndRounded || progress >= 1;\n if (isBeginningRounded) progress = 0;\n if (isEndRounded) progress = 1;\n }\n if (params.loop) {\n const firstSlideIndex = swiper.getSlideIndexByData(0);\n const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n const translateAbs = Math.abs(translate);\n if (translateAbs >= firstSlideTranslate) {\n progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n } else {\n progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n }\n if (progressLoop > 1) progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress,\n progressLoop,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n swiper.emit('progress', progress);\n}","import { elementStyle } from '../../shared/utils.js';\nexport default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const el = swiper.el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = el.clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = el.clientHeight;\n }\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}","import { elementChildren, elementOuterSize, elementStyle, setCSSProperty } from '../../shared/utils.js';\nexport default function updateSlides() {\n const swiper = this;\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n const params = swiper.params;\n const {\n wrapperEl,\n slidesEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n slides.forEach(slideEl => {\n if (rtl) {\n slideEl.style.marginLeft = '';\n } else {\n slideEl.style.marginRight = '';\n }\n slideEl.style.marginBottom = '';\n slideEl.style.marginTop = '';\n });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n }\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n }\n\n // Calc slides\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n let slide;\n if (slides[i]) slide = slides[i];\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide);\n const currentTransform = slide.style.transform;\n const currentWebKitTransform = slide.style.webkitTransform;\n if (currentTransform) {\n slide.style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide;\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide.style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (params.setWrapperSize) {\n wrapperEl.style[getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (isVirtual && params.loop) {\n const size = slidesSizesGrid[0] + spaceBetween;\n if (params.slidesPerGroup > 1) {\n const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n const groupSize = size * params.slidesPerGroup;\n for (let i = 0; i < groups; i += 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n }\n }\n for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n if (params.slidesPerGroup === 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n }\n slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n swiper.virtualSize += size;\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n if (spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode || params.loop) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }).forEach(slideEl => {\n slideEl.style[key] = `${spaceBetween}px`;\n });\n }\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap <= 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.el.classList.remove(backFaceHiddenClass);\n }\n }\n}","import { elementChildren, elementNextAll, elementPrevAll } from '../../shared/utils.js';\nexport default function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n slidesEl,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const getFilteredSlide = selector => {\n return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n });\n let activeSlide;\n if (isVirtual) {\n if (params.loop) {\n let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n } else {\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n }\n } else {\n activeSlide = slides[activeIndex];\n }\n if (activeSlide) {\n // Active classes\n activeSlide.classList.add(params.slideActiveClass);\n\n // Next Slide\n let nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n if (nextSlide) {\n nextSlide.classList.add(params.slideNextClass);\n }\n // Prev Slide\n let prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n if (prevSlide) {\n prevSlide.classList.add(params.slidePrevClass);\n }\n }\n swiper.emitSlidesClasses();\n}","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n // eslint-disable-next-line\n const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n }\n}","export default function updateSlidesProgress(translate = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n\n // Visible Slides\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass);\n });\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n let spaceBetween = params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides[i].classList.add(params.slideVisibleClass);\n }\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Navigation({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n prevEl: null\n };\n const makeElementsArray = el => {\n if (!Array.isArray(el)) el = [el].filter(e => !!e);\n return el;\n };\n function getEl(el) {\n let res;\n if (el && typeof el === 'string' && swiper.isElement) {\n res = swiper.el.shadowRoot.querySelector(el);\n if (res) return res;\n }\n if (el) {\n if (typeof el === 'string') res = [...document.querySelectorAll(el)];\n if (swiper.params.uniqueNavElements && typeof el === 'string' && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n res = swiper.el.querySelector(el);\n }\n }\n if (el && !res) return el;\n // if (Array.isArray(res) && res.length === 1) res = res[0];\n return res;\n }\n function toggleEl(el, disabled) {\n const params = swiper.params.navigation;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (subEl) {\n subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n }\n });\n }\n function update() {\n // Update Navigation Buttons\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (swiper.params.loop) {\n toggleEl(prevEl, false);\n toggleEl(nextEl, false);\n return;\n }\n toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n let nextEl = getEl(params.nextEl);\n let prevEl = getEl(params.prevEl);\n Object.assign(swiper.navigation, {\n nextEl,\n prevEl\n });\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const initButton = (el, dir) => {\n if (el) {\n el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n }\n if (!swiper.enabled && el) {\n el.classList.add(...params.lockClass.split(' '));\n }\n };\n nextEl.forEach(el => initButton(el, 'next'));\n prevEl.forEach(el => initButton(el, 'prev'));\n }\n function destroy() {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const destroyButton = (el, dir) => {\n el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\n };\n nextEl.forEach(el => destroyButton(el, 'next'));\n prevEl.forEach(el => destroyButton(el, 'prev'));\n }\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.navigation.lockClass));\n });\n on('click', (_s, e) => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const targetEl = e.target;\n if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n if (nextEl.length) {\n isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n } else if (prevEl.length) {\n isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\n init();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\n destroy();\n };\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}","import classesToSelector from '../../shared/classes-to-selector.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nimport { elementIndex, elementOuterSize, elementParents } from '../../shared/utils.js';\nexport default function Pagination({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n const makeElementsArray = el => {\n if (!Array.isArray(el)) el = [el].filter(e => !!e);\n return el;\n };\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\n }\n function setSideBullets(bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n if (!bulletEl) return;\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}`);\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n }\n }\n }\n function onBulletClick(e) {\n const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));\n if (!bulletEl) {\n return;\n }\n e.preventDefault();\n const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;\n if (swiper.params.loop) {\n if (swiper.realIndex === index) return;\n const newSlideIndex = swiper.getSlideIndexByData(index);\n const currentSlideIndex = swiper.getSlideIndexByData(swiper.realIndex);\n if (newSlideIndex > swiper.slides.length - swiper.loopedSlides) {\n swiper.loopFix({\n direction: newSlideIndex > currentSlideIndex ? 'next' : 'prev',\n activeSlideIndex: newSlideIndex,\n slideTo: false\n });\n }\n swiper.slideToLoop(index);\n } else {\n swiper.slideTo(index);\n }\n }\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n // Current/Total\n let current;\n let previousIndex;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n previousIndex = swiper.previousRealIndex || 0;\n current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n previousIndex = swiper.previousSnapIndex;\n } else {\n previousIndex = swiper.previousIndex || 0;\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\n el.forEach(subEl => {\n subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\n });\n if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {\n dynamicBulletIndex += current - (previousIndex || 0);\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.forEach(bulletEl => {\n const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();\n bulletEl.classList.remove(...classesToRemove);\n });\n if (el.length > 1) {\n bullets.forEach(bullet => {\n const bulletIndex = elementIndex(bullet);\n if (bulletIndex === current) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n } else if (swiper.isElement) {\n bullet.setAttribute('part', 'bullet');\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n if (bulletIndex === firstIndex) {\n setSideBullets(bullet, 'prev');\n }\n if (bulletIndex === lastIndex) {\n setSideBullets(bullet, 'next');\n }\n }\n });\n } else {\n const bullet = bullets[current];\n if (bullet) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n }\n if (swiper.isElement) {\n bullets.forEach((bulletEl, bulletIndex) => {\n bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');\n });\n }\n if (params.dynamicBullets) {\n const firstDisplayedBullet = bullets[firstIndex];\n const lastDisplayedBullet = bullets[lastIndex];\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n if (bullets[i]) {\n bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n }\n setSideBullets(firstDisplayedBullet, 'prev');\n setSideBullets(lastDisplayedBullet, 'next');\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.forEach(bullet => {\n bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\n });\n }\n }\n el.forEach((subEl, subElIndex) => {\n if (params.type === 'fraction') {\n subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {\n fractionEl.textContent = params.formatFractionCurrent(current + 1);\n });\n subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {\n totalEl.textContent = params.formatFractionTotal(total);\n });\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {\n progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n });\n }\n if (params.type === 'custom' && params.renderCustom) {\n subEl.innerHTML = params.renderCustom(swiper, current + 1, total);\n if (subElIndex === 0) emit('paginationRender', subEl);\n } else {\n if (subElIndex === 0) emit('paginationRender', subEl);\n emit('paginationUpdate', subEl);\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n });\n }\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n let paginationHTML = '';\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n // prettier-ignore\n paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part=\"bullet\"' : ''} class=\"${params.bulletClass}\">`;\n }\n }\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `` + ' / ' + ``;\n }\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n }\n swiper.pagination.bullets = [];\n el.forEach(subEl => {\n if (params.type !== 'custom') {\n subEl.innerHTML = paginationHTML || '';\n }\n if (params.type === 'bullets') {\n swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));\n }\n });\n if (params.type !== 'custom') {\n emit('paginationRender', el[0]);\n }\n }\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.shadowRoot.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = [...document.querySelectorAll(params.el)];\n }\n if (!el) {\n el = params.el;\n }\n if (!el || el.length === 0) return;\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n el = [...swiper.el.querySelectorAll(params.el)];\n // check if it belongs to another nested Swiper\n if (el.length > 1) {\n el = el.filter(subEl => {\n if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n return true;\n })[0];\n }\n }\n if (Array.isArray(el) && el.length === 1) el = el[0];\n Object.assign(swiper.pagination, {\n el\n });\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (params.type === 'bullets' && params.clickable) {\n subEl.classList.add(params.clickableClass);\n }\n subEl.classList.add(params.modifierClass + params.type);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.type === 'bullets' && params.dynamicBullets) {\n subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n subEl.classList.add(params.progressbarOppositeClass);\n }\n if (params.clickable) {\n subEl.addEventListener('click', onBulletClick);\n }\n if (!swiper.enabled) {\n subEl.classList.add(params.lockClass);\n }\n });\n }\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.hiddenClass);\n subEl.classList.remove(params.modifierClass + params.type);\n subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.clickable) {\n subEl.removeEventListener('click', onBulletClick);\n }\n });\n }\n if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));\n }\n on('changeDirection', () => {\n if (!swiper.pagination || !swiper.pagination.el) return;\n const params = swiper.params.pagination;\n let {\n el\n } = swiper.pagination;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.horizontalClass, params.verticalClass);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n });\n });\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n update();\n });\n on('snapGridLengthChange', () => {\n render();\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n let {\n el\n } = swiper.pagination;\n if (!Array.isArray(el)) el = [el].filter(element => !!element);\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\n }\n init();\n render();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}","import { getDocument } from 'ssr-window';\nimport { elementChildren, isObject } from '../../shared/utils.js';\nexport default function Thumb({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs'\n }\n });\n let initialized = false;\n let swiperCreated = false;\n swiper.thumbs = {\n swiper: null\n };\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n if (swiper.params.loop) {\n swiper.slideToLoop(slideToIndex);\n } else {\n swiper.slideTo(slideToIndex);\n }\n }\n function init() {\n const {\n thumbs: thumbsParams\n } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Object.assign(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n Object.assign(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper.update();\n } else if (isObject(thumbsParams.swiper)) {\n const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n Object.assign(thumbsSwiperParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n swiperCreated = true;\n }\n swiper.thumbs.swiper.el.classList.add(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\n\n // Activate thumbs\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n thumbsToActivate = Math.floor(thumbsToActivate);\n thumbsSwiper.slides.forEach(slideEl => slideEl.classList.remove(thumbActiveClass));\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n elementChildren(thumbsSwiper.slidesEl, `[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).forEach(slideEl => {\n slideEl.classList.add(thumbActiveClass);\n });\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n if (thumbsSwiper.slides[swiper.realIndex + i]) {\n thumbsSwiper.slides[swiper.realIndex + i].classList.add(thumbActiveClass);\n }\n }\n }\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n const currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n if (thumbsSwiper.params.loop) {\n const newThumbsSlide = thumbsSwiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`)[0];\n newThumbsIndex = thumbsSwiper.slides.indexOf(newThumbsSlide);\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) {\n // newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n }\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n }\n on('beforeInit', () => {\n const {\n thumbs\n } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n if (typeof thumbs.swiper === 'string' || thumbs.swiper instanceof HTMLElement) {\n const document = getDocument();\n const getThumbsElementAndInit = () => {\n const thumbsElement = typeof thumbs.swiper === 'string' ? document.querySelector(thumbs.swiper) : thumbs.swiper;\n if (thumbsElement && thumbsElement.swiper) {\n thumbs.swiper = thumbsElement.swiper;\n init();\n update(true);\n } else if (thumbsElement) {\n const onThumbsSwiper = e => {\n thumbs.swiper = e.detail[0];\n thumbsElement.removeEventListener('init', onThumbsSwiper);\n init();\n update(true);\n thumbs.swiper.update();\n swiper.update();\n };\n thumbsElement.addEventListener('init', onThumbsSwiper);\n }\n return thumbsElement;\n };\n const watchForThumbsToAppear = () => {\n if (swiper.destroyed) return;\n const thumbsElement = getThumbsElementAndInit();\n if (!thumbsElement) {\n requestAnimationFrame(watchForThumbsToAppear);\n }\n };\n requestAnimationFrame(watchForThumbsToAppear);\n } else {\n init();\n update(true);\n }\n });\n on('slideChange update resize observerUpdate', () => {\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n if (swiperCreated) {\n thumbsSwiper.destroy();\n }\n });\n Object.assign(swiper.thumbs, {\n init,\n update\n });\n}","import { getWindow } from 'ssr-window';\nimport { elementChildren, elementOffset, elementParents, getTranslate } from '../../shared/utils.js';\nexport default function Zoom({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const window = getWindow();\n extendParams({\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed'\n }\n });\n swiper.zoom = {\n enabled: false\n };\n let currentScale = 1;\n let isScaling = false;\n let fakeGestureTouched;\n let fakeGestureMoved;\n const evCache = [];\n const gesture = {\n originX: 0,\n originY: 0,\n slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n imageEl: undefined,\n imageWrapEl: undefined,\n maxRatio: 3\n };\n const image = {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {}\n };\n const velocity = {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined\n };\n let scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get() {\n return scale;\n },\n set(value) {\n if (scale !== value) {\n const imageEl = gesture.imageEl;\n const slideEl = gesture.slideEl;\n emit('zoomChange', value, imageEl, slideEl);\n }\n scale = value;\n }\n });\n function getDistanceBetweenTouches() {\n if (evCache.length < 2) return 1;\n const x1 = evCache[0].pageX;\n const y1 = evCache[0].pageY;\n const x2 = evCache[1].pageX;\n const y2 = evCache[1].pageY;\n const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n return distance;\n }\n function getScaleOrigin() {\n if (evCache.length < 2) return {\n x: null,\n y: null\n };\n const box = gesture.imageEl.getBoundingClientRect();\n return [(evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x) / currentScale, (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y) / currentScale];\n }\n function getSlideSelector() {\n return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n }\n function eventWithinSlide(e) {\n const slideSelector = getSlideSelector();\n if (e.target.matches(slideSelector)) return true;\n if (swiper.slides.filter(slideEl => slideEl.contains(e.target)).length > 0) return true;\n return false;\n }\n function eventWithinZoomContainer(e) {\n const selector = `.${swiper.params.zoom.containerClass}`;\n if (e.target.matches(selector)) return true;\n if ([...swiper.el.querySelectorAll(selector)].filter(containerEl => containerEl.contains(e.target)).length > 0) return true;\n return false;\n }\n\n // Events\n function onGestureStart(e) {\n if (e.pointerType === 'mouse') {\n evCache.splice(0, evCache.length);\n }\n if (!eventWithinSlide(e)) return;\n const params = swiper.params.zoom;\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n evCache.push(e);\n if (evCache.length < 2) {\n return;\n }\n fakeGestureTouched = true;\n gesture.scaleStart = getDistanceBetweenTouches();\n if (!gesture.slideEl) {\n gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n if (!gesture.slideEl) gesture.slideEl = swiper.slides[swiper.activeIndex];\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n if (!gesture.imageWrapEl) {\n gesture.imageEl = undefined;\n return;\n }\n gesture.maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n }\n if (gesture.imageEl) {\n const [originX, originY] = getScaleOrigin();\n gesture.originX = originX;\n gesture.originY = originY;\n gesture.imageEl.style.transitionDuration = '0ms';\n }\n isScaling = true;\n }\n function onGestureChange(e) {\n if (!eventWithinSlide(e)) return;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) evCache[pointerIndex] = e;\n if (evCache.length < 2) {\n return;\n }\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches();\n if (!gesture.imageEl) {\n return;\n }\n zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n }\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n }\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n }\n function onGestureEnd(e) {\n if (!eventWithinSlide(e)) return;\n if (e.pointerType === 'mouse' && e.type === 'pointerout') return;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) evCache.splice(pointerIndex, 1);\n if (!fakeGestureTouched || !fakeGestureMoved) {\n return;\n }\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n if (!gesture.imageEl) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`;\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n currentScale = zoom.scale;\n isScaling = false;\n if (zoom.scale > 1 && gesture.slideEl) {\n gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n } else if (zoom.scale <= 1 && gesture.slideEl) {\n gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n }\n if (zoom.scale === 1) {\n gesture.originX = 0;\n gesture.originY = 0;\n gesture.slideEl = undefined;\n }\n }\n function onTouchStart(e) {\n const device = swiper.device;\n if (!gesture.imageEl) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) e.preventDefault();\n image.isTouched = true;\n const event = evCache.length > 0 ? evCache[0] : e;\n image.touchesStart.x = event.pageX;\n image.touchesStart.y = event.pageY;\n }\n function onTouchMove(e) {\n if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return;\n const zoom = swiper.zoom;\n if (!gesture.imageEl) return;\n if (!image.isTouched || !gesture.slideEl) return;\n if (!image.isMoved) {\n image.width = gesture.imageEl.offsetWidth;\n image.height = gesture.imageEl.offsetHeight;\n image.startX = getTranslate(gesture.imageWrapEl, 'x') || 0;\n image.startY = getTranslate(gesture.imageWrapEl, 'y') || 0;\n gesture.slideWidth = gesture.slideEl.offsetWidth;\n gesture.slideHeight = gesture.slideEl.offsetHeight;\n gesture.imageWrapEl.style.transitionDuration = '0ms';\n }\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.touchesCurrent.x = evCache.length > 0 ? evCache[0].pageX : e.pageX;\n image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY;\n const touchesDiff = Math.max(Math.abs(image.touchesCurrent.x - image.touchesStart.x), Math.abs(image.touchesCurrent.y - image.touchesStart.y));\n if (touchesDiff > 5) {\n swiper.allowClick = false;\n }\n if (!image.isMoved && !isScaling) {\n if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\n image.isTouched = false;\n return;\n }\n if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\n image.isTouched = false;\n return;\n }\n }\n if (e.cancelable) {\n e.preventDefault();\n }\n e.stopPropagation();\n image.isMoved = true;\n const scaleRatio = (zoom.scale - currentScale) / (gesture.maxRatio - swiper.params.zoom.minRatio);\n const {\n originX,\n originY\n } = gesture;\n image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX + scaleRatio * (image.width - originX * 2);\n image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY + scaleRatio * (image.height - originY * 2);\n if (image.currentX < image.minX) {\n image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n }\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n }\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n }\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n }\n\n // Velocity\n if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n if (!velocity.prevTime) velocity.prevTime = Date.now();\n velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n }\n function onTouchEnd() {\n const zoom = swiper.zoom;\n if (!gesture.imageEl) return;\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n image.isTouched = false;\n image.isMoved = false;\n let momentumDurationX = 300;\n let momentumDurationY = 300;\n const momentumDistanceX = velocity.x * momentumDurationX;\n const newPositionX = image.currentX + momentumDistanceX;\n const momentumDistanceY = velocity.y * momentumDurationY;\n const newPositionY = image.currentY + momentumDistanceY;\n\n // Fix duration\n if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n image.currentX = newPositionX;\n image.currentY = newPositionY;\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n gesture.imageWrapEl.style.transitionDuration = `${momentumDuration}ms`;\n gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n }\n function onTransitionEnd() {\n const zoom = swiper.zoom;\n if (gesture.slideEl && swiper.activeIndex !== swiper.slides.indexOf(gesture.slideEl)) {\n if (gesture.imageEl) {\n gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n }\n if (gesture.imageWrapEl) {\n gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n }\n gesture.slideEl.classList.remove(`${swiper.params.zoom.zoomedSlideClass}`);\n zoom.scale = 1;\n currentScale = 1;\n gesture.slideEl = undefined;\n gesture.imageEl = undefined;\n gesture.imageWrapEl = undefined;\n gesture.originX = 0;\n gesture.originY = 0;\n }\n }\n function zoomIn(e) {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n if (!gesture.slideEl) {\n if (e && e.target) {\n gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n }\n if (!gesture.slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n } else {\n gesture.slideEl = swiper.slides[swiper.activeIndex];\n }\n }\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n }\n if (!gesture.imageEl || !gesture.imageWrapEl) return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.touchAction = 'none';\n }\n gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n let touchX;\n let touchY;\n let offsetX;\n let offsetY;\n let diffX;\n let diffY;\n let translateX;\n let translateY;\n let imageWidth;\n let imageHeight;\n let scaledWidth;\n let scaledHeight;\n let translateMinX;\n let translateMinY;\n let translateMaxX;\n let translateMaxY;\n let slideWidth;\n let slideHeight;\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.pageX;\n touchY = e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n const forceZoomRatio = typeof e === 'number' ? e : null;\n if (currentScale === 1 && forceZoomRatio) {\n touchX = undefined;\n touchY = undefined;\n }\n zoom.scale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n currentScale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n if (e && !(currentScale === 1 && forceZoomRatio)) {\n slideWidth = gesture.slideEl.offsetWidth;\n slideHeight = gesture.slideEl.offsetHeight;\n offsetX = elementOffset(gesture.slideEl).left + window.scrollX;\n offsetY = elementOffset(gesture.slideEl).top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n imageWidth = gesture.imageEl.offsetWidth;\n imageHeight = gesture.imageEl.offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n if (forceZoomRatio && zoom.scale === 1) {\n gesture.originX = 0;\n gesture.originY = 0;\n }\n gesture.imageWrapEl.style.transitionDuration = '300ms';\n gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`;\n gesture.imageEl.style.transitionDuration = '300ms';\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n }\n function zoomOut() {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n if (!gesture.slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n } else {\n gesture.slideEl = swiper.slides[swiper.activeIndex];\n }\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n }\n if (!gesture.imageEl || !gesture.imageWrapEl) return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.style.touchAction = '';\n }\n zoom.scale = 1;\n currentScale = 1;\n gesture.imageWrapEl.style.transitionDuration = '300ms';\n gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n gesture.imageEl.style.transitionDuration = '300ms';\n gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n gesture.slideEl = undefined;\n gesture.originX = 0;\n gesture.originY = 0;\n }\n\n // Toggle Zoom\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoomOut();\n } else {\n // Zoom In\n zoomIn(e);\n }\n }\n function getListeners() {\n const passiveListener = swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n const activeListenerWithCapture = swiper.params.passiveListeners ? {\n passive: false,\n capture: true\n } : true;\n return {\n passiveListener,\n activeListenerWithCapture\n };\n }\n\n // Attach/Detach Events\n function enable() {\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n\n // Scale image\n swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener);\n swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener);\n });\n\n // Move image\n swiper.wrapperEl.addEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n }\n function disable() {\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n zoom.enabled = false;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n\n // Scale image\n swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener);\n swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener);\n });\n\n // Move image\n swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n }\n on('init', () => {\n if (swiper.params.zoom.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n disable();\n });\n on('touchStart', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchStart(e);\n });\n on('touchEnd', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchEnd(e);\n });\n on('doubleTap', (_s, e) => {\n if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n zoomToggle(e);\n }\n });\n on('transitionEnd', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n onTransitionEnd();\n }\n });\n on('slideChange', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n onTransitionEnd();\n }\n });\n Object.assign(swiper.zoom, {\n enable,\n disable,\n in: zoomIn,\n out: zoomOut,\n toggle: zoomToggle\n });\n}","export default function classesToSelector(classes = '') {\n return `.${classes.trim().replace(/([\\.:!+\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}","import { createElement, elementChildren } from './utils.js';\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n if (!element) {\n element = createElement('div', checkProps[key]);\n element.className = checkProps[key];\n swiper.el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}","import { getWindow } from 'ssr-window';\nlet browser;\nfunction calcBrowser() {\n const window = getWindow();\n let needPerspectiveFix = false;\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n if (isSafari()) {\n const ua = String(window.navigator.userAgent);\n if (ua.includes('Version/')) {\n const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n }\n }\n return {\n isSafari: needPerspectiveFix || isSafari(),\n needPerspectiveFix,\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\nexport { getBrowser };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCached;\nfunction calcDevice({\n userAgent\n} = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\nexport { getDevice };","import { getWindow, getDocument } from 'ssr-window';\nlet support;\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n };\n}\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\nexport { getSupport };","export const processLazyPreloader = (swiper, imageEl) => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n const slideEl = imageEl.closest(slideSelector());\n if (slideEl) {\n const lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (lazyEl) lazyEl.remove();\n }\n};\nconst unlazy = (swiper, index) => {\n if (!swiper.slides[index]) return;\n const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n if (imageEl) imageEl.removeAttribute('loading');\n};\nexport const preload = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n let amount = swiper.params.lazyPreloadPrevNext;\n const len = swiper.slides.length;\n if (!len || !amount || amount < 0) return;\n amount = Math.min(amount, len);\n const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n const activeIndex = swiper.activeIndex;\n if (swiper.params.grid && swiper.params.grid.rows > 1) {\n const activeColumn = activeIndex;\n const preloadColumns = [activeColumn - amount];\n preloadColumns.push(...Array.from({\n length: amount\n }).map((_, i) => {\n return activeColumn + slidesPerView + i;\n }));\n swiper.slides.forEach((slideEl, i) => {\n if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n });\n return;\n }\n const slideIndexLastInView = activeIndex + slidesPerView - 1;\n if (swiper.params.rewind || swiper.params.loop) {\n for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n const realIndex = (i % len + len) % len;\n if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n }\n } else {\n for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n unlazy(swiper, i);\n }\n }\n }\n};","import { getWindow, getDocument } from 'ssr-window';\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n return style;\n}\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el, null);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll({\n swiper,\n targetPosition,\n side\n}) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\nfunction getSlideTransformEl(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowEl && slideEl.shadowEl.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction findElementsInElements(elements = [], selector = '') {\n const found = [];\n elements.forEach(el => {\n found.push(...el.querySelectorAll(selector));\n });\n return found;\n}\nfunction elementChildren(element, selector = '') {\n return [...element.children].filter(el => el.matches(selector));\n}\nfunction createElement(tag, classes = []) {\n const el = document.createElement(tag);\n el.classList.add(...(Array.isArray(classes) ? classes : [classes]));\n return el;\n}\nfunction elementOffset(el) {\n const window = getWindow();\n const document = getDocument();\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n}\nfunction elementPrevAll(el, selector) {\n const prevEls = [];\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if (prev.matches(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n el = prev;\n }\n return prevEls;\n}\nfunction elementNextAll(el, selector) {\n const nextEls = [];\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if (next.matches(selector)) nextEls.push(next);\n } else nextEls.push(next);\n el = next;\n }\n return nextEls;\n}\nfunction elementStyle(el, prop) {\n const window = getWindow();\n return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n let child = el;\n let i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\nfunction elementParents(el, selector) {\n const parents = []; // eslint-disable-line\n let parent = el.parentElement; // eslint-disable-line\n while (parent) {\n if (selector) {\n if (parent.matches(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n function fireCallBack(e) {\n if (e.target !== el) return;\n callback.call(el, e);\n el.removeEventListener('transitionend', fireCallBack);\n }\n if (callback) {\n el.addEventListener('transitionend', fireCallBack);\n }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n const window = getWindow();\n if (includeMargins) {\n return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n }\n return el.offsetWidth;\n}\nexport { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty, getSlideTransformEl,\n// dom\nfindElementsInElements, createElement, elementChildren, elementOffset, elementPrevAll, elementNextAll, elementStyle, elementIndex, elementParents, elementTransitionEnd, elementOuterSize };","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\n__webpack_require__(8250);\n__webpack_require__(402);\n__webpack_require__(3689);\n__webpack_require__(8838);\nvar __webpack_exports__ = __webpack_require__(4691);\n"],"names":["debounceScript","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","value","type","lastInvokeTime","leading","maxing","trailing","toNumber","v","parseInt","isNaN","now","Date","invokeFunc","time","args","thisArg","undefined","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeSinceLastInvoke","Math","min","remainingWait","debounced","isInvoking","arguments","this","max","cancel","clearTimeout","flush","CookieConsentService","CookieConsentKey","EnableImpliedCookieConsent","didConsentToAllCookies","cookieSettings","getCookieSettings","didConsentToAllManually","didConsentImplicitly","didConsentToEssentialManually","shouldShowCookieBanner","shouldShowImpliedCookieBanner","clearAllCookiesIfConsentNotGiven","cookies","document","cookie","split","essentialCookies","indexOf","deleteCookie","getSafeBool","boolValue","fallbackBool","consentCookie","unescape","getCookie","cookieObj","JSON","parse","e","onManuallyConsentToAllCookies","settings","saveCookieConsent","onManuallyConsentToEssentialCookies","onHideImpliedConsentBanner","onRevokeConsent","confirm","didConfirm","consentSettings","settingsJson","stringify","name","expires","date","setTime","getTime","toUTCString","showConsentModal","didNotConsent","cookieName","forEach","el","key","trim","elements","getElementsByClassName","productDetailsEl","item","pushEnhancedEcommerce","pushEcommerce","getProductDetailObj","getAttribute","getProductObj","products","i","length","addEventListener","onProductClick","push","getProducts","promotions","banners","querySelector","promotionsObj","onBannerClick","getPromotionObj","getPromotions","productDetails","ecommerceObj","ecommerce","currencyCode","eec","impressionView","promoView","detail","dataLayer","preventDefault","productObj","productUrl","currentTarget","location","promoObj","destinationUrl","pushAddToCart","productId","quantity","product","getProductsToAddRemove","productContainer","pushRemoveFromCart","onCheckout","step","option","basketItemsURL","fetch","method","then","response","json","basketVm","Items","basketContainer","getElementById","ulElemen","createElement","liElem","Title","Price","Quantity","ID","GoogleProductID","ProductID","CategoryDescription","BrandDescription","innerHTML","append","pushCheckout","getBasketItems","getCheckoutProducts","event","checkout","actionField","toLowerCase","onCheckoutOption","checkoutOption","pushProductView","window","onload","getFormattedPrice","myPrice","symbol","conversionRate","xPrice","parseFloat","numberToCurrency","number","toFixed","replace","FacebookScriptsService","addFacebookTracking","isSearch","addScriptOnBodyTop","addFacebookEvent","addScriptOnBody","getFbq","fbq","script","body","appendChild","createScriptElement","insertBefore","firstChild","addDataLayer","dataLayerData","createTextNode","Element","prototype","matches","msMatchesSelector","webkitMatchesSelector","g","t","idPrefix","default","r","hash","closest","o","setAttribute","removeAttribute","focus","CustomEvent","bubbles","cancelable","tab","content","dispatchEvent","n","a","l","u","querySelectorAll","Array","call","id","slice","documentElement","removeEventListener","c","d","target","activeElement","tabs","index","hasOwnProperty","setup","getElementIndex","node","previousElementSibling","initMenu","menu","screen","width","level2","resetMenu","classList","remove","onOffItems","element","action","parentElement","add","nextElementSibling","contains","clickElement","srcElement","tagName","level","activeItemLevel","activeItems","menuSubs","menuSub","max1","activeItem","activeItemIndex","menuSubOff","max2","level2MenuSub","level2MenuSubAnchors","b","keyCode","breadcrumbButtons","maxBreadcrumbs","navLevelElm","navLevel","navLevelElmUp1","navLevelElmUp1Button","mobilemenu","expanded","mobilebg","primarynav","style","top","sh","h","stuck","stickPoint","offsetTop","parentElem","offsetParent","getOffsetTop","onscroll","offset","pageYOffset","ToggleButtons","toggle","elem","loginPartial","loginPartialMobile","globalParms","LoginPartialURL","text","data","accountLinks","AccountLinksURL","basketButton","href","ShoppingBasket_UpdateItemCount","div","dataset","play","onclick","labnolIframe","evt","parentNode","iframe","dataID","replaceChild","myImgs","observer","IntersectionObserver","entries","entry","isIntersecting","imgElem","loadLazyImages_doImage","unobserve","rootMargin","threshold","image","observe","err","len","loadLazyImages_notSupported","realSrc","loadLazyImages","initLightYouTube","mainNavContainers","navHeight","elemHeight","getComputedStyle","getPropertyValue","Number","mainContent","minHeight","itemCount","ShoppingBasketParms","CookieKey","basketDataJSON","NumberOfItems","console","log","V3_URL","V3_URL_REGEX","EXISTING_SCRIPT_MESSAGE","stripePromise","initStripe","maybeStripe","startTime","stripe","_registerWrapper","version","registerWrapper","stripePromise$1","Promise","resolve","params","reject","Stripe","warn","scripts","concat","test","src","findScript","queryString","advancedFraudSignals","headOrBody","head","Error","injectScript","error","loadCalled","bpj","paymentRequest","basketParams","pdojj","deliveryOptionsPersist","getSelectedDeliveryTypeOption","isLocalStorageSupported","sessionStorage","getItem","saveSelectedDeliveryTypeOption","selectedDot","setItem","removeItem","resetSelectedDeliveryTypeOption","getSelectedDelivery","tempObj","saveSelectedDelivery","selectedDeliveryTypeID","selectedDeliveryDate","isForceSetValues","newDlv","deliveryTypeID","deliveryDate","resetSelectedDelivery","resetAllDelvOpts","testKey","storage","requestHeaders","Headers","DeliveryOptions_Init","bpjValue","set","shoppingBasketContainer","deliveryOptionsContainer","divPaymentButtonsSelector","DeliveryOptions_BindEvents","isInit","basketEmpty","checkoutBox","requestApplyVoucher","applyVoucherButton","ApplyVoucherURL","headers","newButton","cloneNode","voucherError","voucherErrorContainer","voucherInput","hidden","dojj","lastHasFinanceOptions","onHasFinanceOptions","hasFinanceOptions","setCurrentDeliveryOptions","showLowStock","basketEmptyEl","delvRegId","delvRegIdSelect","handledelvRgIdChange","selDlvReg","DeliveryOptions_refresh","OutOfStock","IsGiftVoucherOnlyOrder","voucherCodeInput","removeVoucherButton","handleRemoveVoucherClick","voucherCode","handleApplyVoucherClick","voucherCodeVal","button","Voucher_BindEvents","speficDays","internalDay","dtid","getSelectedDelvOptData","isSuperSaverDt","dod","selPrice","getDelvOptPrice","minPriceDt","getDelvOptsData","map","x","xID","isSuperSaver","ss","filter","reduce","res","obj","getDefaultDelvOptID","setSelectedDelvOptData","handleOptionBoxChangeEvent","Event","optionBoxes","handleOptionBoxChange","calendarLink","openCalendar","selDlv","defaultSelection","DeliveryOptionsButtons_BindEvents","day","getDefaultDay","delvRgIdVal","myDt","getDtById","fromCalendar","calendarSelector","elemDay","deliveryPrice","checkoutPrice","textContent","EuroPrice_CurrencySymbol","EuroPrice_ConversionRate","elemDt","getCheckboxInputForDeliveryType","isDeliveryTypeChangedx","isDeliveryPriceChangedx","isDeliveryDateChangedx","checked","myDtDays","getDaysForDtid","superSaverinternalDay","allDays","myDtid","formattedPrice","priceSpan","dayWindow","dayTo","daysToAdd","dayWindowArray","daysAdd","myDay","dayIndex","getDayWindowForDt","deliveryLastDate","checkoutSubtotalPrice","PriceTotalItems","giftVoucher","GiftVouchers","IsAnyApplied","DiscountValue","totalIncludingVATAndDelivery","internalDayToDisplayStringOptions","month","internaldateToMonthDisplayString","newDeliveryHtml","cc","isClickAndCollectDt","displayDay","weekday","year","internaldateToDisplayString","confirmationMessage","title","elemDtDescription","updatePaymentButtons","financeTabInitializeData","divPaymentButtons","dop","getDelvOpts","finance","basketConfig","updatePaymentButtonsUrl","ok","DeliveryOptions_UpdatePdParams","NetPayment","HighestDeposit","highestDepositAmount","GiftVoucherTotalRedeemed","HasPayPalCredit","HasPayPal","ShouldDisplayFinanceOptions","PaymentData_BindEvents","paymentButtonsUrl","doc","DOMParser","parseFromString","netPayment","giftVoucherTotalRedeemed","hasPayPalCredit","hasPayPal","highestDeposit","shouldDisplayFinanceOptions","buttons","dd","Buttons","buttonsSelector","paymentButtonsContainer","financeText","HasFinanceOptions","buttonsContainer","isFullWidth","btnData","amazonPayStyle","btnContent","displayImg","displayText","isFinance","cssClass","container","paymentButtonsFinance","getFinanceContainer","addButtonToContainer","payPalButtonContainer","ppMessage","hasChildNodes","setPayPalButton","insertAdjacentElement","btn","updateForm","oldBtoajDelvOptParams","btoajDelvOptParams","deliveryRegionId","ccwarning","ccEarliestwarning","IsClickAndCollectShowWarning","ukMainlandRegionId","devOptBtns","handleDeliveryOptionClicked","curBtnName","SetDojj","doj","deliveryOptionTypeSelected","isResetDelivery","deliveryOptionType","DeliveryOptionsParms","IndexDeliveryOptionsURL","divContainer","p","myDays","dpl","dateSplit","toLocaleDateString","gvTotalRedeemed","hasPayPalCreditPayment","total","voucherApplied","isNoNetPayment","depositPlaceholder","amount","stripeKey","_len","_key","paymentRequestButton","childElementCount","shippingOptions","country","currency","label","getAmountInCents","requestPayerName","requestPayerEmail","requestShipping","requestPayerPhone","getPaymentRequestOptions","getStripeShippingOptions","prButton","create","canMakePayment","mount","stripeButtonContainer","on","ev","url","LogStripeResponse","confirmResult","is3DSResult","ProcessDigitalWalletPayment","createPaymentIntentResponse","shippingAddress","paymentIntentId","paymentIntent","customerEmail","payerEmail","clientSecret","ClientSecret","customerPhone","payerPhone","success","redirectUrl","isPaymentRequested","FormData","paymentMethod","recipient","confirmCardPayment","payment_method","shipping","address","city","line1","addressLine","line2","postal_code","postalCode","state","region","phone","handleActions","alert","complete","status","deliveryRegionMap","updateWith","update","getPaymentRequestUpdateOptions","setStripePaymentRequestButton","ppDiv","children","h1text","expresscheckout","othercheckout","expressbuttonsContainer","paypalContainer","enablePayLater","clientId","PaylPalClientId","enableFunding","components","getPlainText","hasAttribute","display","calendar","attributes","newScript","Object","keys","getPayPalWindowNamespace","namespace","validateArguments","PromisePonyfill","loadPayPalButton","scriptOptions","isSlideOutBasket","PayPalSetExpressCheckout","token","disableFunding","_a","sdkBaseUrl","optionsWithStringIndex","accumulator","replacer","toString","match","indexOfMatch","substring","dataAttributes","queryParams","processOptions","existingWindowNamespace","currentScript","nextScript","currentScriptClone","uidAuto","isExactMatch","onSuccess","onError","onerror","firstElementChild","insertScriptElement","defaultError","loadCustomScript","newWindowNamespace","loadScript","paypal","shape","height","disableMaxWidth","createOrder","CheckoutWithPayPalURL","onApprove","ppButton","click","PayPalSettle","orderID","payerId","payerID","orderData","spinner","modalBasket","PayPalConfirm","PayPalErrorURL","render","catch","loadMoreBtn","reviewsContainer","reviewsRendered","reviewsToRetrieve","productDetailsParams","ReviewsToDisplay","GetProductReviewsURL","ReviewsCount","initVATExPrice","getPDCookieAndSetFlag","setPriceDisplayTypeUrl","PriceHelper","isVATExPrice","setPriceDisplay","price","priceVATEx","pricevatex","formatter","format","isvatex","String","formatPrice","displayPrices","excludeVAT","rate","round","Intl","NumberFormat","showItemAddedAlert","basketAlert","alertText","className","bindAddToBasketFromPanel","productCard","ProductDetail_AddProductToOrder","FbContentIDS","companionCard","companionProductId","primaryProductId","companionId","primaryId","AddCompanionToOrderURL","loadBasketPanel","basketErrorId","checkoutBtn","errorUrl","GoToShoppingBasketURL","ProductDetail_AddCompanaionToOrder","productTitle","facebookFeedId","productQuantity","redirectToBasket","basketEmptyMessage","modalBasketContent","modalBasketTotals","AddProductToOrderURL","C","content_type","content_ids","ProductDetail_GoToShoppingBasket","callback","GetBasketItemsURL","includeEarliestDeliveryDates","ulElem","totalElem","subTotalElem","deliveryPriceElem","deliveryDescriptionElem","deliveryMoreOptionsElem","nonGVItems","IsGiftVoucher","minDeliveryPrice","deliveryOptions","defaultDeliveryOption","DayPriceList","Description","IsSuperSaverNationalRatioApplied","Url","ProductImageUrl","RRP","setOldPrice","IsFreeGift","getQuantityOptions","companions","basketCompanions","accessories","CrossSellProducts","inStockCompanions","IsProductStockAvailable","inStockAccessories","Availability","renderQuickBuys","swiper","setQuickBuys","basketpanel","closeButton","items","swiperElem","counter","getItemPrice","IsCompanion","CompanionPrice","Id","getListName","PrimaryProductID","WebsiteUrl","itemPrice","savePrice","setSavings","getItemAddToBasketClass","processStockStatusData","inStock","msgHtml","msg2","msg1","isEligibleClickAndCollect","CollectionDeliveryMsg","nowMs","getUTCMilliseconds","DeliveryNextDayPossible","isNextDay","DeliveryCutOffms","countDownDate","setInterval","distance","hours","floor","minutes","seconds","clearInterval","countdownTime","padStart","recaptchaS","NotifyMeURL","cache","htmlContent","recaptchaContainer","getElementsByTagName","recaptchaElem","grecaptcha","loadHtmlWithRecaptcha","modal","notifyMeBtn","ARIAmodal","init","notifyModal","reset","btnSubmit","notifyForm","newDiv","message","defaultContent","defaultSuccess","onNotifyMeWhenInStock","usps","opacity","GetBStockProductsURL","tabContainer","bStockTab","SkipGetDynamicData","GetDynamicDataURL","nextDayDeliveryPossible","DeliveryCutOffDisplay","deliveryCutOffTimeDisplay","deliveryCutOffMsSinceUnixEpoch","processDeliveryTimingDisplayData","timingDisplayData","stockStatusData","getDynamicData","financeLink","financeTab","detailsSection","scrollIntoView","behavior","descriptionTabContents","getBoundingClientRect","toggleContents","toggleButtons","addToggleEvent","buyNowWithPayPal","isPayPalCredit","qty","addToBasketBtn","BuyNowWithPayPalURL","finally","buyNowWithPayment","productItem","ProductDetails_BindEvents","Tabby","initNavigationSwipers","swiperName","nextButton","prevButton","modules","direction","cssMode","slidesPerView","loop","speed","navigation","nextEl","prevEl","breakpoints","spaceBetween","tabItem","scrollLeft","offsetLeft","galleryThumbs","centeredSlides","centeredSlidesBounds","zoom","thumbs","picture","img","sourceAll","zoomSrc","outerHTML","startsWith","msg","closeddmsg","toggledmsg","innerWidth","documentBody","isSticky","basketButtonPos","footerPosition","bottom","innerHeight","basketPanel","requestBasketUpdate","updateWholeCart","qtyUpdateKeyUp","inputElement","readOnly","oldValue","newValue","sanitizeQtyInput","disableBasketButtons","showWaitElement","updateStepper","show","waitElem","q","newRegionId","basketItems","form","UpdateCartURL","updateBasketContent","quantityInput","li","ShoppingBasket_BindEvents","isBasketPanel","decreaseBtns","increaseBtns","removeBtns","qtyInputs","quantitySelect","orderItemId","DestroyOrderItemURL","showBasketError","pushProductRemovalToGA","removeOrderItem","navigator","userAgent","maxTouchPoints","basketErrorContainer","quantityNo","currentBasketContainer","html","ShoppingBasket_ProceedToCheckout","theButton","deliveryTypeId","chosenOption","chosenOptionDesc","basketUrl","initBasketPanelSwiper","slidesPerGroup","pagination","clickable","initTabs","tabsList","selector","matchMedia","viewport","scrollWidth","clientWidth","transform","checkButtons","onresize","checkScrollingTabContainers","tablisting","getLastVisibleTab","buttonElem","tablist","getFirstVisibleTab","tabList","child","count","ctr","setCookie","days","setSessionCookie","getHashKeyValuePairs","getUrlKeyValuePairs","getHrefKeyValuePairs","search","pairs","pairParts","loadImagesForProductListings_BasedOnView","prodListing","isGridView","hasClass","find","each","newImgUrl","attr","getImageURL","imgUrl","ImagesParams","UseCDNImageCache","CloudflareAccountHash","atou","b64","decodeURIComponent","escape","atob","utoa","btoa","encodeURIComponent","isObject","constructor","extend","ssrDocument","blur","nodeName","createEvent","initEvent","childNodes","createElementNS","importNode","host","hostname","origin","pathname","protocol","getDocument","ssrWindow","history","replaceState","pushState","go","back","Image","requestAnimationFrame","cancelAnimationFrame","getWindow","win","getBreakpoint","base","containerEl","breakpoint","currentHeight","clientHeight","points","point","minRatio","substr","sort","setBreakpoint","isGridEnabled","grid","rows","realIndex","initialized","breakpointsBase","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","enabled","containerModifierClass","emitContainerClasses","fill","prop","wasModuleEnabled","isModuleEnabled","disable","enable","directionChanged","needsReLoop","changeDirection","isEnabled","assign","allowTouchMove","allowSlideNext","allowSlidePrev","emit","loopDestroy","loopCreate","updateSlides","checkOverflow","isLocked","wasLocked","slidesOffsetBefore","lastSlideIndex","slides","lastSlideRightEdge","slidesGrid","slidesSizesGrid","size","snapGrid","isEnd","addClasses","classNames","rtl","device","suffixes","prefix","resultClasses","prepareClasses","freeMode","autoHeight","android","ios","watchSlidesProgress","removeClasses","prototypes","eventsEmitter","translate","transition","slide","grabCursor","events","classes","extendedDefaults","Swiper","swipers","newParams","__swiper__","support","browser","eventsListeners","eventsAnyListeners","__modules__","isArray","allModulesParams","mod","extendParams","bind","once","off","swiperParams","passedParams","eventName","onAny","isHorizontal","isVertical","activeIndex","isBeginning","previousTranslate","progress","velocity","animating","cssOverflowAdjustment","trunc","touchEventsData","isTouched","isMoved","allowTouchCallbacks","touchStartTime","isScrolling","currentTranslate","startTranslate","allowThresholdMove","focusableElements","lastClickTime","clickTimeout","velocities","allowMomentumBounce","startMoving","evCache","allowClick","touches","startX","startY","currentX","currentY","diff","imagesToLoad","imagesLoaded","getSlideIndex","slideEl","slidesEl","slideClass","firstSlideIndex","getSlideIndexByData","recalcSlides","setGrabCursor","unsetGrabCursor","setProgress","minTranslate","current","maxTranslate","translateTo","updateActiveIndex","updateSlidesClasses","_emitClasses","cls","join","getSlideClasses","destroyed","emitSlidesClasses","updates","slidesPerViewDynamic","view","exact","swiperSize","spv","breakLoop","slideSize","swiperSlideSize","setTranslate","translateValue","rtlTranslate","newTranslate","translated","imageEl","updateSize","updateProgress","updateAutoHeight","virtual","slideTo","watchOverflow","newDirection","needUpdate","currentDirection","changeLanguageDirection","dir","mounted","shadowEl","isElement","getWrapperSelector","wrapperClass","wrapperEl","shadowRoot","createElements","wrongRTL","initialSlide","slidesBefore","runCallbacksOnInit","attachEvents","destroy","deleteInstance","cleanStyles","detachEvents","slideVisibleClass","slideActiveClass","slideNextClass","slidePrevClass","static","newDefaults","defaults","module","m","installModule","prototypeGroup","protoMethod","use","oneWayMovement","touchEventsTarget","updateOnWindowResize","resizeObserver","nested","preventInteractionOnTransition","edgeSwipeDetection","edgeSwipeThreshold","setWrapperSize","virtualTranslate","effect","slidesPerGroupSkip","slidesPerGroupAuto","slidesOffsetAfter","normalizeSlideIndex","centerInsufficientSlides","roundLengths","touchRatio","touchAngle","simulateTouch","shortSwipes","longSwipes","longSwipesRatio","longSwipesMs","followFinger","touchMoveStopPropagation","touchStartPreventDefault","touchStartForcePreventDefault","touchReleaseOnEdges","uniqueNavElements","resistance","resistanceRatio","preventClicks","preventClicksPropagation","slideToClickedSlide","loopedSlides","loopPreventsSliding","rewind","swipeHandler","noSwiping","noSwipingClass","noSwipingSelector","passiveListeners","maxBackfaceHiddenSlides","lazyPreloaderClass","lazyPreloadPrevNext","handler","priority","self","onceHandler","__emitterProxy","offAny","splice","eventHandler","context","unshift","dummyEventAttached","dummyEventListener","capture","domMethod","swiperMethod","onTouchStart","passive","onTouchMove","onTouchEnd","onClick","onScroll","onLoad","stopPropagation","stopImmediatePropagation","onResize","offsetWidth","isVirtual","isVirtualLoop","slideToLoop","autoplay","running","paused","resizeTimeout","resume","newProgress","scrollTop","translatesDiff","pointerIndex","findIndex","cachedEv","pointerId","includes","isSafari","isWebView","pointerType","originalEvent","touchEndTime","timeDiff","pathTree","path","composedPath","updateClickedSlide","swipeDirection","currentPos","stopIndex","groupSize","increment","rewindFirstIndex","rewindLastIndex","ratio","abs","targetTouch","pageX","pageY","preventedByNestedSwiper","prevX","prevY","targetTouches","diffX","diffY","sqrt","atan2","PI","touchesDiff","previousX","previousY","prevTouchesDirection","touchesDirection","isLoop","loopFix","getTranslate","setTransition","loopFixed","disableParentSwiper","activeSlideIndex","ceil","targetEl","which","swipingClassHasValue","eventPath","isTargetShadow","__closestFrom","assignedSlot","found","getRootNode","closestElement","iOSEdgeSwipeDetection","iOSEdgeSwipeThreshold","shouldPreventDefault","isContentEditable","moving","__preventObserver__","cursor","slideRealIndex","newSlidesOrder","swiperSlideIndex","byController","byMousewheel","snapIndex","prependSlidesIndexes","appendSlidesIndexes","isNext","isPrev","slidesPrepended","slidesAppended","swiperLoopMoveDOM","prepend","updateSlidesOffset","currentSlideTranslate","controller","control","loopParams","moduleExtendParams","moduleParamName","moduleParams","auto","Observer","observers","attach","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","Resize","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","newHeight","contentBoxSize","contentRect","inlineSize","blockSize","slideNext","slidePrev","slideReset","slideToClosest","runCallbacks","internal","perGroup","_clientLeft","clientLeft","normalize","val","normalizedTranslate","normalizedSnapGrid","prevSnap","prevSnapIndex","snap","prevIndex","lastIndex","initial","slideIndex","previousIndex","skip","normalizedGrid","normalizedGridNext","transitionStart","transitionEnd","isH","scrollSnapType","_immediateVirtual","_cssModeVirtualInitialSet","smoothScroll","targetPosition","side","scrollTo","onSlideToWrapperTransitionEnd","slideToIndex","clickedIndex","slideSelector","clickedSlide","currentSnap","newIndex","duration","transitionDuration","transitionEmit","getSwiperTranslate","axis","y","translateBounds","onTranslateToWrapperTransitionEnd","updateSlidesProgress","newActiveIndex","previousRealIndex","previousSnapIndex","getVirtualRealIndex","aIndex","getActiveIndexByTranslate","activeSlides","getSlideByIndex","visibleSlides","offsetHeight","slideFound","multiplier","progressLoop","wasBeginning","wasEnd","isBeginningRounded","isEndRounded","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","getDirectionLabel","property","getDirectionPropertyValue","previousSlidesLength","slidesLength","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","slidePosition","prevSlideSize","virtualSize","marginLeft","marginRight","marginBottom","marginTop","gridEnabled","initSlides","shouldResetSlideSize","updateSlide","slideStyles","currentTransform","currentWebKitTransform","webkitTransform","paddingLeft","paddingRight","boxSizing","updateWrapperSize","newSlidesGrid","slidesGridItem","groups","slidesAfter","_","allSlidesSize","slideSizeValue","maxSnap","allSlidesOffset","addToSnapGrid","addToSlidesGrid","backFaceHiddenClass","hasClassBackfaceClassAdded","getFilteredSlide","activeSlide","nextSlide","prevSlide","minusOffset","swiperSlideOffset","offsetCenter","visibleSlidesIndexes","slideOffset","slideProgress","originalSlideProgress","slideBefore","slideAfter","originalProgress","Navigation","hideOnClick","disabledClass","hiddenClass","lockClass","navigationDisabledClass","makeElementsArray","getEl","toggleEl","disabled","subEl","onPrevClick","onNextClick","initButton","destroyButton","_s","isHidden","Pagination","pfx","bulletSize","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","paginationDisabledClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","bulletEl","position","onBulletClick","newSlideIndex","currentSlideIndex","firstIndex","midIndex","classesToRemove","suffix","s","flat","bullet","bulletIndex","firstDisplayedBullet","lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","subElIndex","fractionEl","totalEl","progressbarDirection","scale","scaleX","scaleY","progressEl","paginationHTML","numberOfBullets","Thumb","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","swiperCreated","onThumbClick","thumbsSwiper","thumbsParams","SwiperClass","thumbsSwiperParams","thumbsToActivate","thumbActiveClass","useOffset","currentThumbsIndex","newThumbsIndex","newThumbsSlide","HTMLElement","getThumbsElementAndInit","thumbsElement","onThumbsSwiper","watchForThumbsToAppear","Zoom","maxRatio","containerClass","zoomedSlideClass","fakeGestureTouched","fakeGestureMoved","currentScale","isScaling","gesture","originX","originY","slideWidth","slideHeight","imageWrapEl","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","x2","y2","eventWithinSlide","onGestureStart","scaleStart","box","getScaleOrigin","onGestureChange","scaleMove","onGestureEnd","eventWithinZoomContainer","scaledWidth","scaledHeight","scaleRatio","onTransitionEnd","zoomIn","touchX","touchY","offsetX","offsetY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","overflow","touchAction","forceZoomRatio","left","scrollX","scrollY","zoomOut","zoomToggle","getListeners","passiveListener","activeListenerWithCapture","defineProperty","get","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","momentumDuration","in","out","classesToSelector","createElementIfNotDefined","checkProps","getBrowser","needPerspectiveFix","ua","major","minor","num","calcBrowser","deviceCached","getDevice","overrides","platform","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","touch","os","calcDevice","getSupport","DocumentTouch","calcSupport","processLazyPreloader","lazyEl","unlazy","preload","activeColumn","preloadColumns","from","column","slideIndexLastInView","deleteProps","object","nextTick","delay","matrix","curTransform","transformMatrix","curStyle","currentStyle","WebKitCSSMatrix","MozTransform","OTransform","MsTransform","msTransform","m41","m42","to","noExtend","nextSource","nodeType","keysArray","nextIndex","nextKey","desc","getOwnPropertyDescriptor","enumerable","setCSSProperty","varName","varValue","setProperty","animateCSSModeScroll","startPosition","cssModeFrameID","isOutOfBound","animate","easeProgress","cos","currentPosition","elementChildren","tag","elementOffset","clientTop","elementPrevAll","prevEls","prev","elementNextAll","nextEls","next","elementStyle","elementIndex","previousSibling","elementParents","parents","parent","elementOuterSize","includeMargins","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","__webpack_modules__","definition","globalThis","Function"],"sourceRoot":""}