{"version":3,"file":"sections-donation.js","mappings":";gKAEA,MA6CA,EA/BiB,SAACA,GAAiC,IAAzBC,EAAgBC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAC3C,MAAMG,GAAgC,EAflBC,MACpB,IAAIC,EAAS,EAIb,GAFmBC,SAASC,cAAc,gBAE1B,CACd,MAAMC,EAAmBC,iBAAiBH,SAASI,iBAAiBC,iBAAiB,wBAErFN,GAAUO,SAASJ,EACrB,CAEA,OAAOH,CAAM,EAIMD,GAEfN,EAAOe,QAAQC,eACjBf,EAAmBa,SAASd,EAAOe,QAAQC,eAG7C,IAAIT,EAASF,EAAaJ,EAE1B,OAAO,IAAIgB,SAASC,KAClBC,EAAAA,EAAAA,GAAKnB,EAAQ,CACXoB,SAAU,IACVb,SACAc,SAAUA,KACRH,GAAS,GAEX,GAEN,qEC/BAI,EAAAA,WAAqBC,cAAgB,SAASC,EAAGC,GAC/C,OAAIA,GACcA,EAAMC,iBAAiB,gCAE3BvB,OACH,KAIJ,oBACT,EAEA,MAAMwB,EAAoBC,IACxB,GAAIA,EAAI,CACN,GAAIA,EAAGC,QAAQ,uBACb,OAAOD,EAAGC,QAAQ,uBAGpB,GAAID,EAAGC,QAAQ,eACb,OAAOD,EAAGC,QAAQ,eAGpB,GAAID,EAAGC,QAAQ,iBACb,OAAOD,EAAGC,QAAQ,iBAGpB,GAAID,EAAGC,QAAQ,UACb,OAAOD,EAAGC,QAAQ,SAEtB,GAGWC,EAAcC,IACzB,MAAMC,EAAeL,EAAiBI,EAAE/B,QAExC,GAAIgC,EAAc,CAChBA,EAAaC,UAAUC,OAAO,aAE9B,MAAMC,EAAuBH,EAAavB,cAAc,uBAEpD0B,GACFA,EAAqBD,QAEzB,CAEIH,EAAE/B,OAAOiC,UAAUG,SAAS,cAC9BL,EAAE/B,OAAOiC,UAAUC,OAAO,YAC5B,EA8GWG,EAAoBC,IAC/B,MAAMC,EA5GmBD,KACzB,MAAMC,EAAQ,CAAC,EAuGf,OArGAD,EACGZ,iBAAiB,sHACjBc,SAASC,IAER,GAAKd,EAAiBc,IAAmD,IAAzCd,EAAiBc,GAAOC,cAAuBD,EAAME,aAAa,YAChG,OAGF,MAAMC,EAAYH,EAAM1B,QAAQ8B,KAAOJ,EAAM1B,QAAQ8B,KAAOJ,EAAMI,KAElEN,EAAMK,GAAa,CACjBE,SAAU,CACRC,YAAY,EACZC,QAAS,cAIM,UAAfP,EAAMQ,OACRV,EAAME,EAAMI,MAAMK,OAAQ,EAC5B,IAGJZ,EAAKZ,iBAAiB,aAAac,SAASC,IAEG,IAAzCd,EAAiBc,GAAOC,cAAsBD,EAAMU,WAIxDZ,EAAME,EAAMI,MAAQ,CAClBO,OAAQ,CACNC,QAASZ,EAAME,aAAa,WAC5BK,QAAS,cAEZ,IAGHV,EAAKZ,iBAAiB,SAASc,SAASC,IAEO,IAAzCd,EAAiBc,GAAOC,cAAsBD,EAAMU,WAIxDZ,EAAME,EAAMI,MAAQ,CAClB1C,OAAQ,CACNmD,QAASxC,SAAS2B,EAAMc,OAE3B,IAGHjB,EAAKZ,iBAAiB,iBAAiBc,SAASC,IAED,IAAzCd,EAAiBc,GAAOC,cAAsBD,EAAMU,WAIxDZ,EAAME,EAAMI,MAAQ,CAClBW,SAAUf,EAAM1B,QAAQ0C,QACzB,IAGHnB,EAAKZ,iBAAiB,oCAAoCc,SAASC,IAEjE,KAAKd,EAAiBc,IAAmD,IAAzCd,EAAiBc,GAAOC,cAAuBD,EAAMU,WAIjFV,EAAMR,UAAUG,SAAS,aAAc,CACzC,MAAMsB,EAAQjB,EAAMhC,cAAc,qBAC5BkD,EAAWlB,EAAMhC,cAAc,wBAEjCiD,IACFnB,EAAMmB,EAAMb,MAAQ,CAClBC,SAAU,CACRE,QAAS,eAKXW,IACFpB,EAAMoB,EAASd,MAAQ,CACrBtB,cAAeoC,EAAS9B,QAAQ,eAGtC,KAGFS,EAAKZ,iBAAiB,wBAAwBc,SAASC,IAErD,GAAKd,EAAiBc,IAAmD,IAAzCd,EAAiBc,GAAOC,cAAuBD,EAAMU,SACnF,OAGF,MAAMQ,EAAWlB,EAAMhC,cAAc,wBAEjCkD,IACFpB,EAAMoB,EAASd,MAAQ,CACrBtB,cAAeoC,EAAS9B,QAAQ,yBAEpC,IAGKU,CAAK,EAIEqB,CAAWtB,GACnBuB,EAASC,EAASxB,EAAMC,GAE9B,QAAenC,IAAXyD,EAAsB,CACxB,IAAK,MAAOhB,EAAMkB,KAAaC,OAAOC,QAAQJ,GAAS,CACrD,MAAMpB,EAAQH,EAAK7B,cAAe,UAASoC,OACrCb,EAAeL,EAAiBc,GAGtC,GAAIT,EAAc,CAChB,MAAMG,EAAuBH,EAAavB,cAAc,uBAEpD0B,GACFA,EAAqBD,SAGvB,MAAMc,EAAW,iEAEXe,EAAS,iCAGf/B,EAAakC,mBAAmB,YAAalB,GAC7ChB,EAAaC,UAAUkC,IAAI,YAC7B,CAEA1B,EAAMR,UAAUkC,IAAI,YACtB,CAEA,MAAMC,OAA2ChE,IAA5BkC,EAAKvB,QAAQsD,WAE5BC,EAAahC,EAAK7B,cAAc,cAUtC,OARI2D,GAAgBE,IAClBC,EAAAA,EAAAA,GAASD,EAAY,KAAK,KACxBE,YAAW,KACTF,EAAW7D,cAAc,UAAY6D,EAAW7D,cAAc,SAASgE,OAAO,GAC7E,EAAE,KAIF,CACT,CAEA,OAAO,CAAI,EAGAX,EAAWxC,uFC5MxBoD,EAAAA,EAAOC,QAAQ,CACbC,QAAS,CAAE,mBAAoB,oBAGjC,SAAeF,EAAAA,EAAAA,KAASG,MAAMC,EAAAA,iBCPiBtE,SAASI,gBAGtD,mBAAmBmE,KAAKC,UAAUC,WAAqC,aAAvBD,UAAUC,UAA2BD,UAAUE,eAH1F,MCmHDC,EAAqBpD,IACzB,MAAMqD,EAASrD,EAAE/B,OAAO6B,QAAQ,qBAC1BwD,EAASD,EAAOvD,QAAQ,2BAE1BuD,GAAUC,IACGA,EAAO5E,cAAc,8BAC7B6E,YAAe,IAAGF,EAAOG,MAAMpF,UAAUiF,EAAOI,aACzD,EAGIC,EAAgB1D,IACpB,MAAMO,EAAOP,EAAE/B,OAAO6B,QAAQ,QACxBY,EAAQV,EAAE/B,OACV6C,EAAOd,EAAE/B,OAAO6C,KAChB6C,EAAgB3D,EAAE/B,OAAOuF,MAE/BjD,EAAKZ,iBAAkB,qBAAoBmB,QAAWL,SAASmD,IAC7D,MAAMC,EAAcD,EAAM9D,QAAQ,iBAClC,IAAIgE,GAAa,EAEjB,GAAKD,EAAL,CAIA,GAAmB,UAAfnD,EAAMQ,KAAkB,CAC1B,MAAM6C,EAAeH,EAAM5E,QAAQgF,SAASC,MAAM,KAClDF,EAAaG,QACbJ,GAAsD,IAAzCC,EAAaI,QAAQR,EACpC,CAEA,GAAIjD,EAAMQ,KAAKkD,cAAcC,SAAS,UAAW,CAC/C,MAAMN,EAAeH,EAAM5E,QAAQgF,SAASC,MAAM,KAClDF,EAAaG,QACbJ,GAAsD,IAAzCC,EAAaI,QAAQR,EACpC,CAEmB,aAAfjD,EAAMQ,OACR4C,EAAapD,EAAM4D,SAGjBR,EACFD,EAAY3D,UAAUC,OAAO,WAE7B0D,EAAY3D,UAAUkC,IAAI,UAE1ByB,EAAYlE,iBAAiB,gDAAgDc,SAAS8D,GAAOA,EAAEf,MAAQ,OAEvGK,EAAYlE,iBAAiB,iBAAiBc,SAAS8D,IAChDV,EAAY3D,UAAUG,SAAS,kBAClCkE,EAAED,SAAU,GAGd/D,EAAKZ,iBAAkB,qBAAoB4E,EAAEzD,WAAWL,SAASmD,IAC/D,MAAMC,EAAcD,EAAM9D,QAAQ,iBAClC+D,EAAY3D,UAAUkC,IAAI,UAE1ByB,EAAYlE,iBAAiB,gDAAgDc,SAAS8D,GAAOA,EAAEf,MAAQ,MAAM,GAC7G,IAnCN,CAqCA,GACA,EAGEgB,EAAgBC,IACpBA,EAAaC,UAAYD,EAAaC,SACtCD,EAAavE,UAAUyE,OAAO,cAAc,EAGxCC,EAAmBA,CAACC,EAAQ5D,EAAS6D,EAASC,KAClDF,EAAOG,MAAMC,QAAU,QACvBJ,EAAOK,UAAYjE,EAEf6D,EACFD,EAAO3E,UAAUC,OAAO,sBAExB0E,EAAO3E,UAAUkC,IAAI,sBAGnB2C,GACFtC,YAAW,KACToC,EAAOG,MAAMC,QAAU,MAAM,GAC5B,IACL,EAGWE,EAAoBnF,IAC/BA,EAAEoF,iBAEF,MAAM7E,EAAOP,EAAE/B,OAGf,IAFgBqC,EAAAA,EAAAA,IAAiBC,GAEpB,CACX,MAAM8E,EAAe9E,EAAK7B,cAAc,kBAClC+F,EAAelE,EAAK7B,cAAc,iBACxC,IAAI4G,GAAkB/E,EAAKvB,QAAQsG,iBAAmD,SAAjC/E,EAAKvB,QAAQsG,gBAClEd,EAAaC,GAEb,MAAMc,EAAW,IAAIC,SAASjF,GAE9BkF,EACGC,IAAInF,EAAKoF,QACTC,KAAKL,GACLM,OACAC,MAAMC,IACL,GAAIA,EAAIjB,QAAS,CAUf,GATIiB,EAAIC,IACND,EAAIC,GAAGvF,SAASwF,GDjKSA,KAC/BC,OAAOC,WACTD,OAAOC,UAAUC,KAAKH,EACxB,EC8JoCI,CAAqBJ,KAGjD1F,EAAK+F,QACL/F,EAAKZ,iBAAiB,UAAUc,SAAS8D,GAAOA,EAAEf,MAAQ,OAC1DjD,EAAKZ,iBAAiB,kBAAkBc,SAAS8D,GAAMA,EAAErE,UAAUkC,IAAI,YACvE7B,EAAKZ,iBAAiB,iBAAiBc,SAAS8D,GAAMA,EAAErE,UAAUkC,IAAI,YAElE7B,EAAKvB,QAAQuH,aAAc,CAC7BhG,EAAKZ,iBAAiB,iBAAiBc,SAAS8D,GAAMA,EAAErE,UAAUkC,IAAI,YACtE3D,SAASkB,iBAAiB,wBAAwBc,SAAS8D,GAAMA,EAAErE,UAAUkC,IAAI,eAEjF,MAAMoE,EAAY/H,SAASC,cAAc,eACnC+H,EAAchI,SAASC,cAAc,mBAEvC8H,GAAaC,KACfD,EAAUtG,UAAUkC,IAAI,UACxBqE,EAAYvG,UAAUC,OAAO,WAG/BmF,GAAkB,OAE+BjH,IAA5BkC,EAAKvB,QAAQsD,aAGhCE,EAAAA,EAAAA,GAASjC,EAAM,GAEnB,EAGAmG,EAAAA,EAAAA,GAAKjI,SAASI,gBAAiB,kBAAmB,CAChD0B,KAAMA,EACNW,KAAM,OACNwE,IAAK,IAAIiB,IAAIpG,EAAKoF,QAClBiB,gBAAiB,IAAIC,gBAAgBtB,GAAUuB,YAEnD,CAEIf,EAAI9E,SACN2D,EAAiBS,EAAcU,EAAI9E,QAAS8E,EAAIjB,QAASQ,GAGvDS,EAAIjB,SACqBrG,SAASC,cAAc,qBAC7BwB,UAAUC,OAAO,SACxC,IAED4G,OAAM,KACLnC,EAAiBS,EAAc,kDAAkD,IAElF2B,SAAQ,KACPxC,EAAaC,EAAa,GAEhC,GAGIwC,EAAgBjH,IACpB,MAAMO,EAAOP,EAAE/B,OACTiJ,GAAU5G,EAAAA,EAAAA,IAAiBC,GAC3BkE,EAAelE,EAAK7B,cAAc,iBACxC8F,EAAaC,GAERyC,IACHlH,EAAEoF,iBACFZ,EAAaC,GACf,EAGI0C,EAAa5G,IACbA,IA5RiB6G,WACrB,MAAMC,EAAY9G,EAAKZ,iBAAiB,2CAExC,IAAK0H,EAAUjJ,OACb,OAGF,MAAQkJ,QAASC,SAAuB,8BACxC,8BAEAF,EAAU5G,SAASZ,IACjB,MAAM2H,EAAS3H,EAAGnB,cAAc,UAEhC,IAAK8I,EACH,OAGF,MAAMC,EAAc5H,EAAGnB,cAAc,oBAEjC+I,IAAgBA,EAAYC,aAAa,qBAC3CD,EAAYE,aAAa,oBAAoB,GAY/CJ,EAAaC,EATA,CACXI,SAAU,CACRC,aAAa,EACbC,gBAAiB,EACjBC,aAAa,EACbC,qBAAqB,IAIC,GAC1B,EA4PAC,CAAe1H,GAzPA6G,WACjB,MAAMc,EAAS3H,EAAKZ,iBAAiB,2CAErC,IAAKuI,EAAO9J,OACV,OAGF,MAAQkJ,QAASa,SAAgB,4DAC3B,oCACA,8BAEND,EAAOzH,SAASC,IAOd,GANmB,QAAfA,EAAMQ,MACRiH,EAAMzH,EAAO,CACX0H,KAAM,wBAIqB/J,IAA3BqC,EAAM1B,QAAQqJ,SAAwB,CACxC,MAAMD,EAAOD,EAAMzH,EAAO,CACxB0H,KAAME,OACNC,MAAO,EACPC,mBAAoB,IACpBhH,IAAK,IAGPd,EAAM+H,iBAAiB,eAAgBzI,IACrCU,EAAM8C,MAAQxD,EAAE0I,OAChBN,EAAKO,cACLjI,EAAMkI,cAAc,IAAIC,MAAM,QAAQ,GAE1C,IACA,EA0NAC,CAAWvI,GAvNaA,KAE1BA,EAAKZ,iBAAiB,oBAAoBc,SAASmD,IACjD,MAAM6D,EAAchJ,SAASsK,cAAc,OAC3CtB,EAAYvH,UAAUkC,IAAI,0BAEtBwB,EAAMJ,MACRiE,EAAYlE,YAAcK,EAAMoF,MAAM,GAAGlI,KAEzC2G,EAAYlE,YAAcK,EAAM6D,YAGlC7D,EAAMqF,WAAWC,aAAazB,EAAa7D,GAE3C6D,EAAYgB,iBAAiB,SAAS,IAAM7E,EAAMuF,UAElDvF,EAAM6E,iBAAiB,UAAWzI,IAChCyH,EAAYlE,YAAcvD,EAAE/B,OAAO+K,MAAM,GAAGlI,IAAI,GAChD,IAGJP,EAAKZ,iBAAiB,wCAAwCc,SAASC,IACrE,MAAMkD,EAAQlD,EAAMhC,cAAc,qBAElC,GAAIkF,GAASA,EAAMH,UAAW,CAC5B,MAAM2F,EAAU3K,SAASsK,cAAc,OACvCK,EAAQlJ,UAAUkC,IAAI,wBAEtB,MAAMiH,EAAQ5K,SAASsK,cAAc,QACrCM,EAAM9F,YAAe,IAAGK,EAAMJ,MAAMpF,UAAUwF,EAAMH,aAEpD2F,EAAQE,YAAYD,GAEpB3I,EAAMhC,cAAc,eAAe4K,YAAYF,EACjD,IACA,EAqLAG,CAAmBhJ,GACrB,EAuBF,GAAiBiJ,KApBJA,KACX/K,SAASkB,iBAAiB,gBAAgBc,SAASF,IACjD4G,EAAU5G,EAAK,KAGjBkJ,EAAAA,EAAAA,IAAG,OAAQ,aAAc1J,EAAAA,GAAY,CAAE2J,SAAS,KAChDD,EAAAA,EAAAA,IAAG,SAAU,aAAc1J,EAAAA,GAAY,CAAE2J,SAAS,KAClDD,EAAAA,EAAAA,IAAG,SAAU,kBAAmB1J,EAAAA,GAAY,CAC1C2J,SAAS,KAEXD,EAAAA,EAAAA,IAAG,SAAU,+BAAgCtE,IAC7CsE,EAAAA,EAAAA,IAAG,SAAU,oDAAqDxC,IAClEwC,EAAAA,EAAAA,IAAG,SAAU,oBAAqB/F,IAClC+F,EAAAA,EAAAA,IAAG,SAAU,uBAAwB/F,IACrC+F,EAAAA,EAAAA,IAAG,SAAU,SAAU/F,IACvB+F,EAAAA,EAAAA,IAAG,QAAS,4BAA6BrG,EAAmB,CAC1DsG,SAAS,GACT,EAGmBvC,qDC7ThB,MAAMwC,UAAkBC,MAC3BC,SACAC,QACAlH,QACA,WAAAmH,CAAYF,EAAUC,EAASlH,GAC3B,MAEMoH,EAAS,GAFDH,EAASG,QAA8B,IAApBH,EAASG,OAAgBH,EAASG,OAAS,MAC9DH,EAASI,YAAc,KACHC,OAElCC,MAAM,uBADSH,EAAS,eAAeA,IAAW,uBACVF,EAAQM,UAAUN,EAAQpE,OAClE2E,KAAKvJ,KAAO,YACZuJ,KAAKR,SAAWA,EAChBQ,KAAKP,QAAUA,EACfO,KAAKzH,QAAUA,CACnB,ECdG,MAAM0H,UAAqBV,MAC9BE,QACA,WAAAC,CAAYD,GACRK,MAAM,sBAAsBL,EAAQM,UAAUN,EAAQpE,OACtD2E,KAAKvJ,KAAO,eACZuJ,KAAKP,QAAUA,CACnB,ECLG,MAAMS,EAAY/G,GAAoB,OAAVA,GAAmC,iBAAVA,ECA/CgH,EAAmB,IAAIC,KAChC,IAAK,MAAMC,KAAUD,EACjB,KAAMF,EAASG,IAAWC,MAAMC,QAAQF,UAAuBrM,IAAXqM,EAChD,MAAM,IAAIG,UAAU,4CAG5B,OAAOC,EAAU,CAAC,KAAML,EAAQ,EAEvBM,EAAe,CAACC,EAAU,CAAC,EAAGC,EAAU,CAAC,KAClD,MAAMnJ,EAAS,IAAIoJ,WAAWC,QAAQH,GAChCI,EAAoBH,aAAmBC,WAAWC,QAClDT,EAAS,IAAIQ,WAAWC,QAAQF,GACtC,IAAK,MAAOI,EAAK7H,KAAUkH,EAAOxI,UACzBkJ,GAA+B,cAAV5H,QAAoCnF,IAAVmF,EAChD1B,EAAOwJ,OAAOD,GAGdvJ,EAAOyJ,IAAIF,EAAK7H,GAGxB,OAAO1B,CAAM,EAEjB,SAAS0J,EAAaC,EAAUC,EAAUC,GACtC,OAAQ1J,OAAO2J,OAAOF,EAAUC,SAAoCtN,IAAvBqN,EAASC,GAChD,GACAb,EAAUW,EAASE,IAAa,GAAID,EAASC,IAAa,GACpE,CACO,MAAME,EAAa,CAACJ,EAAW,CAAC,EAAGC,EAAW,CAAC,KAAM,CACxDI,cAAeN,EAAaC,EAAUC,EAAU,iBAChDK,YAAaP,EAAaC,EAAUC,EAAU,eAC9CM,cAAeR,EAAaC,EAAUC,EAAU,iBAChDO,YAAaT,EAAaC,EAAUC,EAAU,iBAGrCZ,EAAY,IAAIL,KACzB,IAAIyB,EAAc,CAAC,EACfrJ,EAAU,CAAC,EACXsJ,EAAQ,CAAC,EACb,IAAK,MAAMzB,KAAUD,EACjB,GAAIE,MAAMC,QAAQF,GACTC,MAAMC,QAAQsB,KACfA,EAAc,IAElBA,EAAc,IAAIA,KAAgBxB,QAEjC,GAAIH,EAASG,GAAS,CACvB,IAAK,IAAKW,EAAK7H,KAAUvB,OAAOC,QAAQwI,GAChCH,EAAS/G,IAAU6H,KAAOa,IAC1B1I,EAAQsH,EAAUoB,EAAYb,GAAM7H,IAExC0I,EAAc,IAAKA,EAAa,CAACb,GAAM7H,GAEvC+G,EAASG,EAAOyB,SAChBA,EAAQN,EAAWM,EAAOzB,EAAOyB,OACjCD,EAAYC,MAAQA,GAEpB5B,EAASG,EAAO7H,WAChBA,EAAUkI,EAAalI,EAAS6H,EAAO7H,SACvCqJ,EAAYrJ,QAAUA,EAE9B,CAEJ,OAAOqJ,CAAW,EC/DTE,EAAyB,MAClC,IAAIC,GAAiB,EACjBC,GAAiB,EACrB,MAAMC,EAA8D,mBAA9BrB,WAAWsB,eAC3CC,EAAgD,mBAAvBvB,WAAWwB,QAC1C,GAAIH,GAA0BE,EAC1B,IACIH,EAAiB,IAAIpB,WAAWwB,QAAQ,wBAAyB,CAC7D9G,KAAM,IAAIsF,WAAWsB,eACrBpC,OAAQ,OAER,UAAIuC,GAEA,OADAN,GAAiB,EACV,MACX,IACDxJ,QAAQ+J,IAAI,eACnB,CACA,MAAOC,GAEH,GAAIA,aAAiBjD,OAA2B,8BAAlBiD,EAAM5L,QAChC,OAAO,EAEX,MAAM4L,CACV,CAEJ,OAAOR,IAAmBC,CAC7B,EA1BqC,GA2BzBQ,EAAgE,mBAA/B5B,WAAW6B,gBAC5CC,EAA+D,mBAA9B9B,WAAWsB,eAC5CS,EAAkD,mBAAxB/B,WAAW1F,SACrC0H,EAAiB,CAAC,MAAO,OAAQ,MAAO,QAAS,OAAQ,UAGzDC,EAAgB,CACzBrH,KAAM,mBACNsH,KAAM,SACN7H,SAAU,sBACV8H,YAAa,MACbC,KAAM,OAGGC,EAAiB,WACjBC,EAAOC,OAAO,QACdC,EAAe,CACxB5H,MAAM,EACN6H,WAAW,EACXC,eAAe,EACfC,cAAc,EACdC,WAAW,EACXC,OAAO,EACPC,SAAS,EACT7B,OAAO,EACP8B,iBAAiB,EACjBC,oBAAoB,EACpBC,OAAO,GAEEC,EAAyB,CAClChE,QAAQ,EACRvH,SAAS,EACT+C,MAAM,EACNyI,MAAM,EACNC,aAAa,EACbC,OAAO,EACPC,UAAU,EACVC,UAAU,EACVC,gBAAgB,EAChBC,WAAW,EACXC,WAAW,EACXC,QAAQ,EACR3I,QAAQ,EACR4I,YAAY,EACZnC,QAAQ,EACRoC,UAAU,GCvEDC,EAA0BpL,GAAUsJ,EAAe7I,SAAST,GAASA,EAAMqL,cAAgBrL,EAIlGsL,EAAsB,CACxBC,MAAO,EACPC,QALiB,CAAC,MAAO,MAAO,OAAQ,SAAU,UAAW,SAM7DC,YALqB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAMpDC,iBAL0B,CAAC,IAAK,IAAK,KAMrCC,cAAejH,OAAOkH,kBACtBC,aAAcnH,OAAOkH,kBACrBE,MAAOC,GAAgB,GAAO,IAAMA,EAAe,GAAM,KAEhDC,EAAwB,CAAC7B,EAAQ,CAAC,KAC3C,GAAqB,iBAAVA,EACP,MAAO,IACAmB,EACHC,MAAOpB,GAGf,GAAIA,EAAMqB,UAAYzE,MAAMC,QAAQmD,EAAMqB,SACtC,MAAM,IAAIxF,MAAM,kCAEpB,GAAImE,EAAMsB,cAAgB1E,MAAMC,QAAQmD,EAAMsB,aAC1C,MAAM,IAAIzF,MAAM,sCAEpB,MAAO,IACAsF,KACAnB,EACN,ECtBE,MAAM8B,EACT,aAAOC,CAAOlM,EAAOhB,GACjB,MAAMmN,EAAK,IAAIF,EAAGjM,EAAOhB,GACnBoN,EAAY5I,UACd,GAAmC,iBAAxB2I,EAAGE,SAASjC,SAAwB+B,EAAGE,SAASjC,QAAUT,EACjE,MAAM,IAAI2C,WAAW,gEAGnBhR,QAAQC,UACd,IAAI0K,QAAiBkG,EAAGI,SACxB,IAAK,MAAMC,KAAQL,EAAGE,SAAS9D,MAAMH,cAAe,CAEhD,MAAMqE,QAAyBD,EAAKL,EAAGjG,QAASiG,EAAGE,SAAUF,EAAGO,kBAAkBzG,EAAS0G,UACvFF,aAA4BnF,WAAWsF,WACvC3G,EAAWwG,EAEnB,CAEA,GADAN,EAAGO,kBAAkBzG,IAChBA,EAAS4G,IAAMV,EAAGE,SAAShC,gBAAiB,CAC7C,IAAIpB,EAAQ,IAAIlD,EAAUE,EAAUkG,EAAGjG,QAASiG,EAAGE,UACnD,IAAK,MAAMG,KAAQL,EAAGE,SAAS9D,MAAMF,YAEjCY,QAAcuD,EAAKvD,GAEvB,MAAMA,CACV,CAGA,GAAIkD,EAAGE,SAAS/B,mBAAoB,CAChC,GAA8C,mBAAnC6B,EAAGE,SAAS/B,mBACnB,MAAM,IAAIrD,UAAU,sDAExB,IAAKmC,EACD,MAAM,IAAIpD,MAAM,+EAEpB,OAAOmG,EAAGW,QAAQ7G,EAAS0G,QAASR,EAAGE,SAAS/B,mBACpD,CACA,OAAOrE,CAAQ,EAGb/H,EADoBiO,EAAGE,SAASlC,MAAMqB,QAAQ/K,SAAS0L,EAAGjG,QAAQM,OAAOhG,eAC3C2L,EAAGY,OAAOX,GAAaA,IAC3D,IAAK,MAAO9O,EAAM0P,KAAa3O,OAAOC,QAAQiL,GAC1CrL,EAAOZ,GAAQkG,UAEX2I,EAAGjG,QAAQjH,QAAQ0I,IAAI,SAAUwE,EAAGjG,QAAQjH,QAAQgO,IAAI,WAAaD,GACrE,MACM/G,SADsB/H,GACGyO,QAC/B,GAAa,SAATrP,EAAiB,CACjB,GAAwB,MAApB2I,EAASG,OACT,MAAO,GAIX,GAAqB,WAFKH,EAAS0G,QAAQlD,eACVyD,WAE7B,MAAO,GAEX,GAAIlO,EAAQ+K,UACR,OAAO/K,EAAQ+K,gBAAgB9D,EAASuD,OAEhD,CACA,OAAOvD,EAAS3I,IAAO,EAG/B,OAAOY,CACX,CACAgI,QACAiH,gBACAC,YAAc,EACdC,OACAhB,SAEA,WAAAlG,CAAYnG,EAAOhB,EAAU,CAAC,GAmB1B,GAlBAyH,KAAK4G,OAASrN,EACdyG,KAAK4F,SAAW,IACTrN,EACHC,QAASkI,EAAaV,KAAK4G,OAAOpO,QAASD,EAAQC,SACnDsJ,MAAON,EAAW,CACdC,cAAe,GACfC,YAAa,GACbE,YAAa,GACbD,cAAe,IAChBpJ,EAAQuJ,OACX/B,OAAQ4E,EAAuBpM,EAAQwH,QAAUC,KAAK4G,OAAO7G,QAE7D0D,UAAWoD,OAAOtO,EAAQkL,WAAa,IACvCC,MAAO6B,EAAsBhN,EAAQmL,OACrCE,iBAA6C,IAA5BrL,EAAQqL,gBACzBD,QAASpL,EAAQoL,SAAW,IAC5BG,MAAOvL,EAAQuL,OAASjD,WAAWiD,MAAMgD,KAAKjG,aAEvB,iBAAhBb,KAAK4G,UAAyB5G,KAAK4G,kBAAkBtK,KAAO0D,KAAK4G,kBAAkB/F,WAAWwB,SACrG,MAAM,IAAI7B,UAAU,6CAExB,GAAIR,KAAK4F,SAASnC,WAAoC,iBAAhBzD,KAAK4G,OAAqB,CAC5D,GAAI5G,KAAK4G,OAAOG,WAAW,KACvB,MAAM,IAAIxH,MAAM,8DAEfS,KAAK4F,SAASnC,UAAUuD,SAAS,OAClChH,KAAK4F,SAASnC,WAAa,KAE/BzD,KAAK4G,OAAS5G,KAAK4F,SAASnC,UAAYzD,KAAK4G,MACjD,CACA,GAAInE,EAAyB,CACzBzC,KAAK0G,gBAAkB,IAAI7F,WAAW6B,gBACtC,MAAMuE,EAAiBjH,KAAK4F,SAASpB,QAAUxE,KAAK4G,OAAOpC,OAC3DyC,GAAgB7I,iBAAiB,SAAS,KACtC4B,KAAK0G,gBAAgBQ,MAAMD,EAAeE,OAAO,IAErDnH,KAAK4F,SAASpB,OAASxE,KAAK0G,gBAAgBlC,MAChD,CAUA,GATIzC,IAEA/B,KAAK4F,SAAStD,OAAS,aAEAtO,IAAvBgM,KAAK4F,SAASnK,OACduE,KAAK4F,SAASrK,KAAOyE,KAAK4F,SAASrC,gBAAgBvD,KAAK4F,SAASnK,OAAS2L,KAAKC,UAAUrH,KAAK4F,SAASnK,MACvGuE,KAAK4F,SAASpN,QAAQ0I,IAAI,eAAgBlB,KAAK4F,SAASpN,QAAQgO,IAAI,iBAAmB,qBAE3FxG,KAAKP,QAAU,IAAIoB,WAAWwB,QAAQrC,KAAK4G,OAAQ5G,KAAK4F,UACpD5F,KAAK4F,SAASpC,aAAc,CAE5B,MAIMA,EAAe,KAJ0C,iBAA/BxD,KAAK4F,SAASpC,aACxCxD,KAAK4F,SAASpC,aAAa8D,QAAQ,MAAO,IAC1C,IAAI9K,gBAAgBwD,KAAK4F,SAASpC,cAAc/G,YAGhDpB,EAAM2E,KAAKP,QAAQpE,IAAIiM,QAAQ,oBAAqB9D,KAEpDZ,GAAoB5C,KAAK4F,SAASrK,gBAAgBsF,WAAW1F,UAC5D6E,KAAK4F,SAASrK,gBAAgBiB,kBAAsBwD,KAAK4F,SAASpN,SAAWwH,KAAK4F,SAASpN,QAAQ,iBACtGwH,KAAKP,QAAQjH,QAAQyI,OAAO,gBAGhCjB,KAAKP,QAAU,IAAIoB,WAAWwB,QAAQ,IAAIxB,WAAWwB,QAAQhH,EAAK,IAAK2E,KAAKP,UAAYO,KAAK4F,SACjG,CACJ,CACA,oBAAA2B,CAAqB/E,GAEjB,GADAxC,KAAK2G,cACD3G,KAAK2G,YAAc3G,KAAK4F,SAASlC,MAAMoB,OAAStC,aAAiBvC,EACjE,MAAMuC,EAEV,GAAIA,aAAiBlD,EAAW,CAC5B,IAAKU,KAAK4F,SAASlC,MAAMsB,YAAYhL,SAASwI,EAAMhD,SAASG,QACzD,MAAM6C,EAEV,MAAMgF,EAAahF,EAAMhD,SAAShH,QAAQgO,IAAI,gBACvChE,EAAMhD,SAAShH,QAAQgO,IAAI,oBAC3BhE,EAAMhD,SAAShH,QAAQgO,IAAI,sBAC3BhE,EAAMhD,SAAShH,QAAQgO,IAAI,sBAClC,GAAIgB,GAAcxH,KAAK4F,SAASlC,MAAMuB,iBAAiBjL,SAASwI,EAAMhD,SAASG,QAAS,CACpF,IAAI8H,EAA6B,IAArBxJ,OAAOuJ,GACfvJ,OAAOyJ,MAAMD,GACbA,EAAQE,KAAKC,MAAMJ,GAAcG,KAAKE,MAEjCJ,GAASE,KAAKC,MAAM,gBAEzBH,GAASE,KAAKE,OAElB,MAAMC,EAAM9H,KAAK4F,SAASlC,MAAMwB,eAAiBuC,EACjD,OAAOA,EAAQK,EAAML,EAAQK,CACjC,CACA,GAA8B,MAA1BtF,EAAMhD,SAASG,OACf,MAAM6C,CAEd,CACA,MAAMuF,EAAa/H,KAAK4F,SAASlC,MAAM2B,MAAMrF,KAAK2G,aAClD,OAAOqB,KAAK7Q,IAAI6I,KAAK4F,SAASlC,MAAM0B,aAAc2C,EACtD,CACA,iBAAA9B,CAAkBzG,GAId,OAHIQ,KAAK4F,SAAStC,YACd9D,EAAS/D,KAAOsB,SAAYiD,KAAK4F,SAAStC,gBAAgB9D,EAASuD,SAEhEvD,CACX,CACA,YAAM8G,CAAOX,GACT,IACI,aAAaA,GACjB,CACA,MAAOnD,GACH,MAAMyF,EAAKD,KAAK7Q,IAAI6I,KAAKuH,qBAAqB/E,GAAQU,GACtD,GAAIlD,KAAK2G,YAAc,EACnB,MAAMnE,QC5LPzF,eAAqBkL,GAAI,OAAEzD,IACtC,OAAO,IAAI3P,SAAQ,CAACC,EAASoT,KAKzB,SAASC,IACLC,aAAaC,GACbH,EAAO1D,EAAO2C,OAClB,CAPI3C,IACAA,EAAO8D,iBACP9D,EAAOpG,iBAAiB,QAAS+J,EAAc,CAAEI,MAAM,KAM3D,MAAMF,EAAYjQ,YAAW,KACzBoM,GAAQgE,oBAAoB,QAASL,GACrCrT,GAAS,GACVmT,EAAG,GAEd,CD+KkB5C,CAAM4C,EAAI,CAAEzD,OAAQxE,KAAK4F,SAASpB,SACxC,IAAK,MAAMuB,KAAQ/F,KAAK4F,SAAS9D,MAAMJ,YASnC,SAPyBqE,EAAK,CAC1BtG,QAASO,KAAKP,QACdlH,QAASyH,KAAK4F,SACdpD,MAAOA,EACPiG,WAAYzI,KAAK2G,gBAGFxD,EACf,OAGR,OAAOnD,KAAKsG,OAAOX,EACvB,CACJ,CACA,YAAMG,GACF,IAAK,MAAMC,KAAQ/F,KAAK4F,SAAS9D,MAAML,cAAe,CAElD,MAAMhK,QAAesO,EAAK/F,KAAKP,QAASO,KAAK4F,UAC7C,GAAInO,aAAkB4K,QAAS,CAC3BrC,KAAKP,QAAUhI,EACf,KACJ,CACA,GAAIA,aAAkB0O,SAClB,OAAO1O,CAEf,CACA,MAAMiR,EE3NoB,EAACjJ,EAASlH,KACxC,MAAMoQ,EAAiB,CAAC,EACxB,IAAK,MAAM3H,KAAOzI,EACRyI,KAAO+C,GAA6B/C,KAAOqC,GAAmBrC,KAAOvB,IACvEkJ,EAAe3H,GAAOzI,EAAQyI,IAGtC,OAAO2H,CAAc,EFoNSC,CAAmB5I,KAAKP,QAASO,KAAK4F,UAE1DiD,EAAc7I,KAAKP,QAEzB,OADAO,KAAKP,QAAUoJ,EAAY3C,SACG,IAA1BlG,KAAK4F,SAASjC,QACP3D,KAAK4F,SAAS9B,MAAM+E,EAAaH,GG/NrC3L,eAAuB0C,EAASN,EAAMuH,EAAiBnO,GAClE,OAAO,IAAI1D,SAAQ,CAACC,EAASoT,KACzB,MAAMG,EAAYjQ,YAAW,KACrBsO,GACAA,EAAgBQ,QAEpBgB,EAAO,IAAIjI,EAAaR,GAAS,GAClClH,EAAQoL,SACNpL,EACAuL,MAAMrE,EAASN,GACf2J,KAAKhU,GACL4H,MAAMwL,GACNY,MAAK,KACNV,aAAaC,EAAU,GACzB,GAEV,CHiNe1E,CAAQkF,EAAaH,EAAmB1I,KAAK0G,gBAAiB1G,KAAK4F,SAC9E,CAEA,OAAAS,CAAQ7G,EAAUqE,GACd,MAAMkF,EAAa9K,OAAOuB,EAAShH,QAAQgO,IAAI,oBAAsB,EACrE,IAAIwC,EAAmB,EACvB,OAAwB,MAApBxJ,EAASG,QACLkE,GACAA,EAAmB,CAAEoF,QAAS,EAAGF,aAAYC,oBAAoB,IAAIE,YAElE,IAAIrI,WAAWsF,SAAS,KAAM,CACjCxG,OAAQH,EAASG,OACjBC,WAAYJ,EAASI,WACrBpH,QAASgH,EAAShH,WAGnB,IAAIqI,WAAWsF,SAAS,IAAItF,WAAWsB,eAAe,CACzD,WAAMgH,CAAMC,GACR,MAAMC,EAAS7J,EAASjE,KAAK+N,YACzBzF,GACAA,EAAmB,CAAEoF,QAAS,EAAGD,iBAAkB,EAAGD,cAAc,IAAIG,kBAE5EnM,eAAewM,IACX,MAAM,KAAEC,EAAI,MAAErQ,SAAgBkQ,EAAOE,OACjCC,EACAJ,EAAWK,SAGX5F,IACAmF,GAAoB7P,EAAMsN,WAE1B5C,EAAmB,CAAEoF,QADU,IAAfF,EAAmB,EAAIC,EAAmBD,EAC5BC,mBAAkBD,cAAc5P,IAElEiQ,EAAWM,QAAQvQ,SACboQ,IACV,CACMA,EACV,IACA,CACA5J,OAAQH,EAASG,OACjBC,WAAYJ,EAASI,WACrBpH,QAASgH,EAAShH,SAE1B,EI1QJ,MAAMmR,EAAkBC,IAEpB,MAAMlE,EAAK,CAACnM,EAAOhB,IAAYiN,EAAGC,OAAOlM,EAAO4G,EAAiByJ,EAAUrR,IAC3E,IAAK,MAAMwH,KAAU8C,EAEjB6C,EAAG3F,GAAU,CAACxG,EAAOhB,IAAYiN,EAAGC,OAAOlM,EAAO4G,EAAiByJ,EAAUrR,EAAS,CAAEwH,YAU5F,OARA2F,EAAGD,OAAUoE,GAAgBF,EAAexJ,EAAiB0J,IAC7DnE,EAAGoE,OAAUD,IACkB,mBAAhBA,IACPA,EAAcA,EAAYD,GAAY,CAAC,IAEpCD,EAAexJ,EAAiByJ,EAAUC,KAErDnE,EAAGvC,KAAOA,EACHuC,CAAE,ECjBb,EDmBWiE,ICnBOlE,OAAO,CACvBjN,QAAS,CAAE,mBAAoB,0ECIjC,MAAMuR,EAAU3V,SAASC,cAAc,wBACjC6B,EAAO9B,SAASC,cAAc,gBAC9B+F,EAAelE,EAAK7B,cAAc,iBAClC2V,EAAa9T,EAAK7B,cAAc,gBAChC4V,EAAc/T,EAAK7B,cAAc,iBACjC6V,EAAchU,EAAK7B,cAAc,sBACjC8V,EAAejU,EAAK7B,cAAc,oBAElC+V,EAAkB,CACtBC,SAAU,UACVC,QAAS,QACTC,UAAW,WACXC,SAAU,OACVC,WAAY,YAGRC,EAAQ,CACZC,KAAM,SACNC,UAAW1U,EAAK7B,cAAc,mCAAmC8E,MACjE0R,mBAAoB3U,EAAK7B,cAAc,qCAAqC8E,OAG9E,IAAI2R,EACAC,EAEJ,MA4DMC,EAAsBjO,UAC1BpH,EAAEoF,iBAEF,MAAM7E,EAAOP,EAAEsV,cAGf,KAFgBhV,EAAAA,EAAAA,IAAiBC,GAG/B,OAGF,MAAMgF,EAAW,IAAIC,SAASjF,GAExBgV,EAAiB,CAAC,EAExBA,EAAezU,KAAQ,GAAEyE,EAASsL,IAAI,gBAAgBtL,EAASsL,IAAI,cACnE0E,EAAepU,MAAQoE,EAASsL,IAAI,SACpC0E,EAAeC,MAAQjQ,EAASsL,IAAI,SACpC0E,EAAeE,QAAU,CACvBC,MAAOnQ,EAASsL,IAAI,kBACpB8E,MAAOpQ,EAASsL,IAAI,mBACpB+E,KAAMrQ,EAASsL,IAAI,eACnBkE,MAAOxP,EAASsL,IAAI,iBAGtBpM,EAAaC,UAAW,EACxBD,EAAavE,UAAUkC,IAAI,cAE3B,MAAM,MAAEyK,EAAK,cAAEgJ,SAAwBV,EAAOW,eAAe,CAC3DV,SAAQ,EACRW,cAAe,CACbC,WAAY,2BACZC,oBAAqB,CACnBC,gBAAiBX,IAGrB/G,SAAU,gBAGZ,IAAI3B,GAAyB,eAAfA,EAAM3L,MAAwC,qBAAf2L,EAAM3L,KAI5C,GAAI2U,GAA0C,cAAzBA,EAAc7L,OAAwB,CAEhE,MAAMmM,EAAkBN,EAAcO,GACP3X,SAASC,cAAc,oDAC7B8E,MAAQ2S,GAEjChR,EAAAA,EAAAA,GAAiBnF,EACnB,MACEqW,EAAY,iCACZ5R,EAAaC,UAAW,EACxBD,EAAavE,UAAUC,OAAO,mBAb9BkW,EAAYxJ,EAAM5L,SAClBwD,EAAaC,UAAW,EACxBD,EAAavE,UAAUC,OAAO,aAYhC,EAGF,SAASkW,EAAYC,GACnB,MAAMC,EAAmB9X,SAASC,cAAc,oBAEhD6X,EAAiBrW,UAAUC,OAAO,UAClCoW,EAAiBhT,YAAc+S,EAE/B7T,YAAW,WACT8T,EAAiBrW,UAAUkC,IAAI,UAC/BmU,EAAiBhT,YAAc,EACjC,GAAG,IACL,CAEA,MAAMiT,EAASA,KAMb,GALmB,WAAfzB,EAAMC,OACRX,EAAWnU,UAAUkC,IAAI,aACzBkS,EAAYpU,UAAUC,OAAO,cAGZ,YAAf4U,EAAMC,KAAoB,CAC5BX,EAAWnU,UAAUC,OAAO,aAC5BmU,EAAYpU,UAAUkC,IAAI,aAE1B,MAAMqU,EAAMnC,EAAY3U,iBAAkB,2BAE1C,IAAIN,EAAW,EAEXoX,EAAIrY,SACNsY,EAAAA,EAAAA,GACEpC,GACA,MACEqC,EAAAA,EAAAA,GAAQF,EAAK,CAAEG,QAAS,CAAC,EAAG,GAAIC,EAAI,CAAC,IAAK,IAAM,CAACxX,WAAUqQ,OAAOoH,EAAAA,EAAAA,IAAQ,MACvEC,SAAS5D,MAAM6D,IAChBA,GAAYvW,SAASwW,IACnBA,EAAUC,QAAQjZ,QAAQ0J,aAAa,gBAAgB,EAAK,GAC5D,GACF,GAEJ,CACEwP,OAAQ,qBAMd,IAAIC,EAAW,KAAI7C,EAAY/Q,WAEP,cAApBuR,EAAME,YACRmC,EAAW,GAAEA,WAAiB3C,EAAgBM,EAAMG,uBAGtDV,EAAahR,MAAQ4T,CACvB,EAEA5U,EAAAA,EAAAA,GAAS4R,EAAQ,GAKjB3K,EAAAA,EAAAA,IAAG,QAAS,sBAAuBzJ,IACjCuU,EAAY5M,aAAa,QAAS3H,EAAE/B,OAAOuF,MAAM,KAGnDiG,EAAAA,EAAAA,IAAG,QAAS,oBAAqBzJ,IAC/B,MAAMqX,EAASrX,EAAE/B,OAAOe,QAAQwE,MAGhC/E,SAASkB,iBAAiB,oBAAoBc,SAAS8D,GAAMA,EAAErE,UAAUC,OAAO,eAGhFH,EAAE/B,OAAOiC,UAAUkC,IAAI,aAEvB,MAAMkV,EAAc,IAAIC,YAAY,cAAe,CAAE7O,OAAQ2O,IAE7D9C,EAAY3L,cAAc0O,GAE1B/C,EAAY5M,aAAa,QAAS0P,EAAO,KAG3C5N,EAAAA,EAAAA,IAAG,QAAS,2BAA4BzJ,IAClCA,EAAE/B,OAAOqG,UACXyQ,EAAME,UAAYjV,EAAE/B,OAAOuF,MAC7B,KAGFiG,EAAAA,EAAAA,IAAG,SAAU,qCAAsCzJ,IACjD+U,EAAMG,mBAAqBlV,EAAE/B,OAAOuF,KAAK,KAG3CiG,EAAAA,EAAAA,IAAG,QAAS,wBAAwB,KAClCsL,EAAMC,KAAO,SACbwB,GAAQ,KAGV/M,EAAAA,EAAAA,IAAG,QAAS,yBAAyB,KAInC,KAFgBnJ,EAAAA,EAAAA,IAAiBC,GAG/B,OAMF,GAHAwU,EAAMC,KAAO,UACbwB,KAEKjW,EACH,OAIF,MAAMW,EAAOX,EAAK7B,cAAc,mCAAmC8E,MAjOzC4D,OAAO7G,EAAMW,KACzCiU,EAASjP,OAAOsR,OAAOjX,EAAKvB,QAAQyY,WAEpC,MAAMC,EAAa,CACjBC,OAAQ,WACRC,MAAO,SACPC,UAAW,CACTC,aAAc,UACdC,gBAAiB,UACjBC,YAAa,UACbC,aAAc,OACdC,kBAAmB,OACnBC,eAAgB,QAElB3X,MAAO,CACL,SAAU,CACR4X,WAAY,qBACZC,WAAY,IACZC,qBAAsB,UACtBC,WAAY,OACZC,YAAa,OACbC,OAAQ,QACRC,UAAW,SAEb,OAAQ,CACNF,YAAa,QAEf,SAAU,CACRA,YAAa,OACbD,WAAY,OACZI,cAAe,QAEjB,YAAa,CACXP,WAAY,qBACZC,WAAY,IACZC,qBAAsB,aAK5B,IACE,MAAMM,EAAWrY,EAAKvB,QAAQ6Z,gBAExBC,EAAO,IAAItT,SAASjF,GAC1BuY,EAAKvN,IAAI,OAAQrK,GACjB4X,EAAKvN,IAAI,SAAUwN,WAAWxE,EAAY/Q,MAAMwV,WAAW,IAAK,MAEhE,MAAMjT,QAAYgK,EAAGlK,KAAK+S,EAAU,CAAEhT,KAAMkT,IAAQhT,OAEpDsP,EAAWD,EAAOC,SAAS,CAAE6D,aAAclT,EAAIkT,aAAcvB,eAEtCtC,EAAStF,OAAO,UAAW,CAChDoJ,OAAQ,SAEKC,MAAM,mBACvB,CAAE,MAAOtM,GACPuM,QAAQvM,MAAMA,EAChB,GA0KEwM,CAAsB9Y,EAAMW,GAE5BX,EAAKkI,iBAAiB,SAAU4M,EAAoB,KAGtD5L,EAAAA,EAAAA,IAAG,QAAS,uBAAwBzJ,IAElCA,EAAEoF,iBACF,MAAMkU,EAAetZ,EAAE/B,OAAOe,QAAQua,eACtC,IAAIC,EAAaF,EAAa3H,QAAQ,QAAS,IAC3C8H,EAAiB1a,SAASya,EAAY,IAE5B/a,SAASkB,iBAAiB,wBAChCc,SAAQ,SAASiZ,GACvBA,EAAOxZ,UAAUC,OAAO,YAC1B,IAEA,IAAIuZ,EAASjb,SAASC,cAAe,sBAAqB+a,OACtDC,GACFA,EAAOxZ,UAAUkC,IAAI,aAGvBmS,EAAY/Q,MAAQ8V,EAAa3H,QAAQ,OAAQ,IACjD4C,EAAY5M,aAAa,QAAS6R,EAAW","sources":["webpack://silverstripe-base/./themes/app/src/scripts/common/scroll-to.js","webpack://silverstripe-base/./themes/app/src/scripts/common/validation.js","webpack://silverstripe-base/./themes/app/src/scripts/common/ajax.js","webpack://silverstripe-base/./themes/app/src/scripts/common/util.js","webpack://silverstripe-base/./themes/app/src/scripts/components/styled-form.js","webpack://silverstripe-base/./node_modules/ky/distribution/errors/HTTPError.js","webpack://silverstripe-base/./node_modules/ky/distribution/errors/TimeoutError.js","webpack://silverstripe-base/./node_modules/ky/distribution/utils/is.js","webpack://silverstripe-base/./node_modules/ky/distribution/utils/merge.js","webpack://silverstripe-base/./node_modules/ky/distribution/core/constants.js","webpack://silverstripe-base/./node_modules/ky/distribution/utils/normalize.js","webpack://silverstripe-base/./node_modules/ky/distribution/core/Ky.js","webpack://silverstripe-base/./node_modules/ky/distribution/utils/delay.js","webpack://silverstripe-base/./node_modules/ky/distribution/utils/options.js","webpack://silverstripe-base/./node_modules/ky/distribution/utils/timeout.js","webpack://silverstripe-base/./node_modules/ky/distribution/index.js","webpack://silverstripe-base/./themes/app/src/scripts/common/ky.js","webpack://silverstripe-base/./themes/app/src/sections/donation.js"],"sourcesContent":["import jump from \"jump.js\";\n\nconst getPageOffset = () => {\n let offset = 0;\n\n const siteHeader = document.querySelector(\".site-header\");\n\n if (siteHeader) {\n const siteHeaderHeight = getComputedStyle(document.documentElement).getPropertyValue(\"--site-header-height\");\n\n offset += parseInt(siteHeaderHeight);\n }\n\n return offset;\n};\n\nconst scrollTo = (target, additionalOffset = 0) => {\n const pageOffset = getPageOffset() * -1;\n\n if (target.dataset.scrollOffset) {\n additionalOffset = parseInt(target.dataset.scrollOffset);\n }\n\n let offset = pageOffset - additionalOffset;\n\n return new Promise((resolve) => {\n jump(target, {\n duration: 600,\n offset,\n callback: () => {\n resolve();\n },\n });\n });\n};\n\nexport const scrollToIfNeeded = (target, additionalOffset = 0) => {\n const rect = target.getBoundingClientRect();\n const viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n const isInViewport = rect.top >= 0 && rect.bottom <= viewportHeight;\n const is50PercentFromTop = rect.top <= viewportHeight / 2;\n\n if (!isInViewport || !is50PercentFromTop) {\n return scrollTo(target, additionalOffset);\n }\n};\n\nexport default scrollTo;\n","import * as validator from 'validate.js'\nimport scrollTo from '@common/scroll-to'\n\nvalidator.validators.checkboxGroup = function(_, group) {\n if (group) {\n const checked = group.querySelectorAll('input[type=checkbox]:checked')\n\n if (checked.length) {\n return null\n }\n }\n\n return '^Please select one'\n}\n\nconst findFieldWrapper = (el) => {\n if (el) {\n if (el.closest('.form-field-wrapper')) {\n return el.closest('.form-field-wrapper')\n }\n\n if (el.closest('.form-field')) {\n return el.closest('.form-field')\n }\n\n if (el.closest('.middleColumn')) {\n return el.closest('.middleColumn')\n }\n\n if (el.closest('.field')) {\n return el.closest('.field')\n }\n }\n}\n\nexport const handleBlur = (e) => {\n const fieldWrapper = findFieldWrapper(e.target)\n\n if (fieldWrapper) {\n fieldWrapper.classList.remove('has-error')\n\n const existingErrorMessage = fieldWrapper.querySelector('.form-field-message')\n\n if (existingErrorMessage) {\n existingErrorMessage.remove()\n }\n }\n\n if (e.target.classList.contains('has-error')) {\n e.target.classList.remove('has-error')\n }\n}\n\nexport const buildRules = (form) => {\n const rules = {}\n\n form\n .querySelectorAll('[required], input.required-if, textarea.required-if, .js-dropdown.required-if select, .optionset.required-if input')\n .forEach((field) => {\n // Ignore hidden fields\n if ((findFieldWrapper(field) && findFieldWrapper(field).offsetHeight === 0) || field.getAttribute('readonly')) {\n return\n }\n\n const fieldName = field.dataset.name ? field.dataset.name : field.name\n\n rules[fieldName] = {\n presence: {\n allowEmpty: false,\n message: '^Required',\n },\n }\n\n if (field.type === 'email') {\n rules[field.name].email = true\n }\n })\n\n form.querySelectorAll('[pattern]').forEach((field) => {\n // Ignore hidden fields\n if (findFieldWrapper(field).offsetHeight === 0 || field.readonly) {\n return\n }\n\n rules[field.name] = {\n format: {\n pattern: field.getAttribute('pattern'),\n message: '^Required',\n },\n }\n })\n\n form.querySelectorAll('[min]').forEach((field) => {\n // Ignore hidden fields\n if (findFieldWrapper(field).offsetHeight === 0 || field.readonly) {\n return\n }\n\n rules[field.name] = {\n length: {\n minimum: parseInt(field.min),\n },\n }\n })\n\n form.querySelectorAll('[data-equals]').forEach((field) => {\n // Ignore hidden fields\n if (findFieldWrapper(field).offsetHeight === 0 || field.readonly) {\n return\n }\n\n rules[field.name] = {\n equality: field.dataset.equals,\n }\n })\n\n form.querySelectorAll('[aria-required], [data-required]').forEach((field) => {\n // Ignore hidden fields\n if ((findFieldWrapper(field) && findFieldWrapper(field).offsetHeight === 0) || field.readonly) {\n return\n }\n\n if (field.classList.contains('optionset')) {\n const radio = field.querySelector('input[type=radio]')\n const checkbox = field.querySelector('input[type=checkbox]')\n\n if (radio) {\n rules[radio.name] = {\n presence: {\n message: '^Required',\n },\n }\n }\n\n if (checkbox) {\n rules[checkbox.name] = {\n checkboxGroup: checkbox.closest('.optionset'),\n }\n }\n }\n })\n\n form.querySelectorAll('.requiredcheckboxset').forEach((field) => {\n // Ignore hidden fields\n if ((findFieldWrapper(field) && findFieldWrapper(field).offsetHeight === 0) || field.readonly) {\n return\n }\n\n const checkbox = field.querySelector('input[type=checkbox]')\n\n if (checkbox) {\n rules[checkbox.name] = {\n checkboxGroup: checkbox.closest('.requiredcheckboxset'),\n }\n }\n })\n\n return rules\n}\n\nexport const handleValidation = (form) => {\n const rules = buildRules(form)\n const result = validate(form, rules)\n\n if (result !== undefined) {\n for (const [name, messages] of Object.entries(result)) {\n const field = form.querySelector(`[name=\"${name}\"]`)\n const fieldWrapper = findFieldWrapper(field)\n\n // Place error message\n if (fieldWrapper) {\n const existingErrorMessage = fieldWrapper.querySelector('.form-field-message')\n\n if (existingErrorMessage) {\n existingErrorMessage.remove()\n }\n\n const message = `\n
\n ${messages[0]}\n
\n `\n fieldWrapper.insertAdjacentHTML('beforeend', message)\n fieldWrapper.classList.add('has-error')\n }\n\n field.classList.add('has-error')\n }\n\n const shouldScroll = form.dataset.formScroll !== undefined\n\n const firstError = form.querySelector('.has-error')\n\n if (shouldScroll && firstError) {\n scrollTo(firstError, 150, () => {\n setTimeout(() => {\n firstError.querySelector('input') && firstError.querySelector('input').focus()\n }, 0)\n })\n }\n\n return false\n }\n\n return true\n}\n\nexport const validate = validator\n","import wretch from 'wretch'\nimport QueryStringAddon from 'wretch/addons/queryString'\n\nwretch.options({\n headers: { 'X-Requested-With': 'XMLHttpRequest' },\n})\n\nexport default wretch().addon(QueryStringAddon)\n","export const isTouchDevice = 'ontouchstart' in document.documentElement\n\nexport const isIos =\n /iPad|iPhone|iPod/.test(navigator.platform) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)\n\nexport const createUrl = (base, formData = {}, append = false) => {\n let data = formData\n\n if (formData instanceof FormData === false) {\n data = new FormData()\n\n for (const [key, value] of Object.entries(formData)) {\n data.append(key, value)\n }\n }\n\n if (typeof base === 'object') {\n const baseUrl = new URL(base)\n\n if (append) {\n const searchParams = baseUrl.searchParams\n\n const params = {}\n\n for (const [key, value] of data) {\n const normalizedKey = key.replace('[]', '')\n\n if (normalizedKey in params) {\n params[normalizedKey].push(value)\n } else {\n params[normalizedKey] = [value]\n }\n }\n\n for (const [key, value] of Object.entries(params)) {\n const _value = value.filter((x) => x)\n\n if (_value.length === 0) {\n searchParams.delete(key)\n } else {\n searchParams.set(key, _value.join(','))\n }\n }\n\n return baseUrl\n } else {\n const params = new URLSearchParams(data)\n\n return new URL(`${base}?${params}`)\n }\n }\n\n if (typeof base === 'string') {\n const params = new URLSearchParams(formData)\n const url = new URL(`${base}?${params}`)\n\n return url\n }\n}\n\nexport const trackGoogleAnalytics = (event) => {\n if (window.dataLayer) {\n window.dataLayer.push(event)\n }\n}\n","import { on, fire } from 'delegated-events'\nimport { handleValidation, handleBlur } from '@common/validation'\nimport ajax from '@common/ajax'\nimport scrollTo from '@common/scroll-to'\nimport { trackGoogleAnalytics } from '@common/util'\n\nconst setupDropdowns = async (form) => {\n const dropdowns = form.querySelectorAll('.js-dropdown, .userform .field.dropdown')\n\n if (!dropdowns.length) {\n return\n }\n\n const { default: easydropdown } = await import('easydropdown-a11y')\n import('@styles/components/dropdown.css')\n\n dropdowns.forEach((el) => {\n const select = el.querySelector('select')\n\n if (!select) {\n return\n }\n\n const placeholder = el.querySelector('option[value=\"\"]')\n\n if (placeholder && !placeholder.hasAttribute('data-placeholder')) {\n placeholder.setAttribute('data-placeholder', true)\n }\n\n const opts = {\n behavior: {\n openOnFocus: true,\n maxVisibleItems: 5,\n liveUpdates: true,\n useNativeUiOnMobile: false,\n },\n }\n\n easydropdown(select, opts)\n })\n}\n\nconst setupMasks = async (form) => {\n const fields = form.querySelectorAll('input[type=\"tel\"], input[data-currency]')\n\n if (!fields.length) {\n return\n }\n\n const { default: IMask } = await import('imask/esm/imask')\n await import('imask/esm/masked/number')\n await import('imask/esm/masked/pattern')\n\n fields.forEach((field) => {\n if (field.type === 'tel') {\n IMask(field, {\n mask: '(000) 000-0000',\n })\n }\n\n if (field.dataset.currency !== undefined) {\n const mask = IMask(field, {\n mask: Number,\n scale: 0,\n thousandsSeparator: ',',\n min: 1,\n })\n\n field.addEventListener('updateValue', (e) => {\n field.value = e.detail\n mask.updateValue()\n field.dispatchEvent(new Event('blur'))\n })\n }\n })\n}\n\nconst setupSpecialFields = (form) => {\n // Setup file inputs\n form.querySelectorAll('input[type=file]').forEach((input) => {\n const placeholder = document.createElement('div')\n placeholder.classList.add('file-input-placeholder')\n\n if (input.value) {\n placeholder.textContent = input.files[0].name\n } else {\n placeholder.textContent = input.placeholder\n }\n\n input.parentNode.insertBefore(placeholder, input)\n\n placeholder.addEventListener('click', () => input.click())\n\n input.addEventListener('change', (e) => {\n placeholder.textContent = e.target.files[0].name\n })\n })\n\n form.querySelectorAll('.form-field-wrapper.has-length-limit').forEach((field) => {\n const input = field.querySelector('.has-length-limit')\n\n if (input && input.maxLength) {\n const counter = document.createElement('div')\n counter.classList.add('length-limit-counter')\n\n const count = document.createElement('span')\n count.textContent = `(${input.value.length}/${input.maxLength})`\n\n counter.appendChild(count)\n\n field.querySelector('.form-field').appendChild(counter)\n }\n })\n}\n\nconst handleLengthLimit = (e) => {\n const $input = e.target.closest('.has-length-limit')\n const $field = $input.closest('.field.has-length-limit')\n\n if ($input && $field) {\n const $count = $field.querySelector('.length-limit-counter span')\n $count.textContent = `(${$input.value.length}/${$input.maxLength})`\n }\n}\n\nconst handleToggle = (e) => {\n const form = e.target.closest('form')\n const field = e.target\n const name = e.target.name\n const selectedValue = e.target.value\n\n form.querySelectorAll(`[data-toggle-if^=\"${name}|\"]`).forEach((input) => {\n const toggleGroup = input.closest('.toggle-group')\n let shouldShow = false\n\n if (!toggleGroup) {\n return\n }\n\n if (field.type === 'radio') {\n const targetValues = input.dataset.toggleIf.split('|')\n targetValues.shift()\n shouldShow = targetValues.indexOf(selectedValue) !== -1\n }\n\n if (field.type.toLowerCase().includes('select')) {\n const targetValues = input.dataset.toggleIf.split('|')\n targetValues.shift()\n shouldShow = targetValues.indexOf(selectedValue) !== -1\n }\n\n if (field.type === 'checkbox') {\n shouldShow = field.checked\n }\n\n if (shouldShow) {\n toggleGroup.classList.remove('hidden')\n } else {\n toggleGroup.classList.add('hidden')\n\n toggleGroup.querySelectorAll('input:not([type=checkbox]):not([type=radio])').forEach((x) => (x.value = null))\n\n toggleGroup.querySelectorAll('input:checked').forEach((x) => {\n if (!toggleGroup.classList.contains('ignore-clear')) {\n x.checked = false\n }\n\n form.querySelectorAll(`[data-toggle-if^=\"${x.name}|\"]`).forEach((input) => {\n const toggleGroup = input.closest('.toggle-group')\n toggleGroup.classList.add('hidden')\n\n toggleGroup.querySelectorAll('input:not([type=checkbox]):not([type=radio])').forEach((x) => (x.value = null))\n })\n })\n }\n })\n}\n\nconst toggleSubmit = (submitButton) => {\n submitButton.disabled = !submitButton.disabled\n submitButton.classList.toggle('btn-loading')\n}\n\nconst showFormMessages = (holder, message, success, autoHide) => {\n holder.style.display = 'block'\n holder.innerHTML = message\n\n if (success) {\n holder.classList.remove('form-message-error')\n } else {\n holder.classList.add('form-message-error')\n }\n\n if (autoHide) {\n setTimeout(() => {\n holder.style.display = 'none'\n }, 5000)\n }\n}\n\nexport const handleAjaxSubmit = (e) => {\n e.preventDefault()\n\n const form = e.target\n const isValid = handleValidation(form)\n\n if (isValid) {\n const formMessages = form.querySelector('.form-messages')\n const submitButton = form.querySelector('[type=submit]')\n let autoHideMessage = form.dataset.autoHideMessage ? form.dataset.autoHideMessage === 'true' : true\n toggleSubmit(submitButton)\n\n const formData = new FormData(form)\n\n ajax\n .url(form.action)\n .body(formData)\n .post()\n .json((res) => {\n if (res.success) {\n if (res.ga) {\n res.ga.forEach((event) => trackGoogleAnalytics(event))\n }\n\n form.reset()\n form.querySelectorAll('select').forEach((x) => (x.value = null))\n form.querySelectorAll('.toggle-fields').forEach((x) => x.classList.add('hidden'))\n form.querySelectorAll('.toggle-group').forEach((x) => x.classList.add('hidden'))\n\n if (form.dataset.hideOnSubmit) {\n form.querySelectorAll('.form-content').forEach((x) => x.classList.add('hidden'))\n document.querySelectorAll('.hide-on-form-submit').forEach((x) => x.classList.add('invisible'))\n\n const donateSVG = document.querySelector('.donate-svg')\n const thankYouSVG = document.querySelector('.thank-you-svg')\n\n if (donateSVG || thankYouSVG) {\n donateSVG.classList.add('hidden')\n thankYouSVG.classList.remove('hidden')\n }\n\n autoHideMessage = false\n\n const shouldScroll = form.dataset.formScroll !== undefined\n\n if (shouldScroll) {\n scrollTo(form, 32)\n }\n }\n\n // Allow other scripts to hook into this submit\n fire(document.documentElement, 'ajaxform:submit', {\n form: form,\n type: 'post',\n url: new URL(form.action),\n queryParameters: new URLSearchParams(formData).toString(),\n })\n }\n\n if (res.message) {\n showFormMessages(formMessages, res.message, res.success, autoHideMessage)\n }\n\n if (res.success) {\n let viewYourImpactButton = document.querySelector('.view-your-impact')\n viewYourImpactButton.classList.remove('hidden')\n }\n })\n .catch(() => {\n showFormMessages(formMessages, 'Sorry, there was a problem with your submission')\n })\n .finally(() => {\n toggleSubmit(submitButton)\n })\n }\n}\n\nconst handleSubmit = (e) => {\n const form = e.target\n const isValid = handleValidation(form)\n const submitButton = form.querySelector('[type=submit]')\n toggleSubmit(submitButton)\n\n if (!isValid) {\n e.preventDefault()\n toggleSubmit(submitButton)\n }\n}\n\nconst setupForm = (form) => {\n if (form) {\n setupDropdowns(form)\n setupMasks(form)\n setupSpecialFields(form)\n }\n}\n\nconst init = () => {\n document.querySelectorAll('.styled-form').forEach((form) => {\n setupForm(form)\n })\n\n on('blur', '.has-error', handleBlur, { capture: true })\n on('change', '.has-error', handleBlur, { capture: true })\n on('change', '.has-error blur', handleBlur, {\n capture: true,\n })\n on('submit', '.styled-form[data-form-ajax]', handleAjaxSubmit)\n on('submit', '.styled-form:not([data-form-ajax]):not(.userform)', handleSubmit)\n on('change', 'input[type=radio]', handleToggle)\n on('change', 'input[type=checkbox]', handleToggle)\n on('change', 'select', handleToggle)\n on('keyup', 'textarea.has-length-limit', handleLengthLimit, {\n capture: true,\n })\n}\n\nexport default { init, setupForm }\n","export class HTTPError extends Error {\n response;\n request;\n options;\n constructor(response, request, options) {\n const code = (response.status || response.status === 0) ? response.status : '';\n const title = response.statusText || '';\n const status = `${code} ${title}`.trim();\n const reason = status ? `status code ${status}` : 'an unknown error';\n super(`Request failed with ${reason}: ${request.method} ${request.url}`);\n this.name = 'HTTPError';\n this.response = response;\n this.request = request;\n this.options = options;\n }\n}\n//# sourceMappingURL=HTTPError.js.map","export class TimeoutError extends Error {\n request;\n constructor(request) {\n super(`Request timed out: ${request.method} ${request.url}`);\n this.name = 'TimeoutError';\n this.request = request;\n }\n}\n//# sourceMappingURL=TimeoutError.js.map","// eslint-disable-next-line @typescript-eslint/ban-types\nexport const isObject = (value) => value !== null && typeof value === 'object';\n//# sourceMappingURL=is.js.map","import { isObject } from './is.js';\nexport const validateAndMerge = (...sources) => {\n for (const source of sources) {\n if ((!isObject(source) || Array.isArray(source)) && source !== undefined) {\n throw new TypeError('The `options` argument must be an object');\n }\n }\n return deepMerge({}, ...sources);\n};\nexport const mergeHeaders = (source1 = {}, source2 = {}) => {\n const result = new globalThis.Headers(source1);\n const isHeadersInstance = source2 instanceof globalThis.Headers;\n const source = new globalThis.Headers(source2);\n for (const [key, value] of source.entries()) {\n if ((isHeadersInstance && value === 'undefined') || value === undefined) {\n result.delete(key);\n }\n else {\n result.set(key, value);\n }\n }\n return result;\n};\nfunction newHookValue(original, incoming, property) {\n return (Object.hasOwn(incoming, property) && incoming[property] === undefined)\n ? []\n : deepMerge(original[property] ?? [], incoming[property] ?? []);\n}\nexport const mergeHooks = (original = {}, incoming = {}) => ({\n beforeRequest: newHookValue(original, incoming, 'beforeRequest'),\n beforeRetry: newHookValue(original, incoming, 'beforeRetry'),\n afterResponse: newHookValue(original, incoming, 'afterResponse'),\n beforeError: newHookValue(original, incoming, 'beforeError'),\n});\n// TODO: Make this strongly-typed (no `any`).\nexport const deepMerge = (...sources) => {\n let returnValue = {};\n let headers = {};\n let hooks = {};\n for (const source of sources) {\n if (Array.isArray(source)) {\n if (!Array.isArray(returnValue)) {\n returnValue = [];\n }\n returnValue = [...returnValue, ...source];\n }\n else if (isObject(source)) {\n for (let [key, value] of Object.entries(source)) {\n if (isObject(value) && key in returnValue) {\n value = deepMerge(returnValue[key], value);\n }\n returnValue = { ...returnValue, [key]: value };\n }\n if (isObject(source.hooks)) {\n hooks = mergeHooks(hooks, source.hooks);\n returnValue.hooks = hooks;\n }\n if (isObject(source.headers)) {\n headers = mergeHeaders(headers, source.headers);\n returnValue.headers = headers;\n }\n }\n }\n return returnValue;\n};\n//# sourceMappingURL=merge.js.map","export const supportsRequestStreams = (() => {\n let duplexAccessed = false;\n let hasContentType = false;\n const supportsReadableStream = typeof globalThis.ReadableStream === 'function';\n const supportsRequest = typeof globalThis.Request === 'function';\n if (supportsReadableStream && supportsRequest) {\n try {\n hasContentType = new globalThis.Request('https://empty.invalid', {\n body: new globalThis.ReadableStream(),\n method: 'POST',\n // @ts-expect-error - Types are outdated.\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n }\n catch (error) {\n // QQBrowser on iOS throws \"unsupported BodyInit type\" error (see issue #581)\n if (error instanceof Error && error.message === 'unsupported BodyInit type') {\n return false;\n }\n throw error;\n }\n }\n return duplexAccessed && !hasContentType;\n})();\nexport const supportsAbortController = typeof globalThis.AbortController === 'function';\nexport const supportsResponseStreams = typeof globalThis.ReadableStream === 'function';\nexport const supportsFormData = typeof globalThis.FormData === 'function';\nexport const requestMethods = ['get', 'post', 'put', 'patch', 'head', 'delete'];\nconst validate = () => undefined;\nvalidate();\nexport const responseTypes = {\n json: 'application/json',\n text: 'text/*',\n formData: 'multipart/form-data',\n arrayBuffer: '*/*',\n blob: '*/*',\n};\n// The maximum value of a 32bit int (see issue #117)\nexport const maxSafeTimeout = 2_147_483_647;\nexport const stop = Symbol('stop');\nexport const kyOptionKeys = {\n json: true,\n parseJson: true,\n stringifyJson: true,\n searchParams: true,\n prefixUrl: true,\n retry: true,\n timeout: true,\n hooks: true,\n throwHttpErrors: true,\n onDownloadProgress: true,\n fetch: true,\n};\nexport const requestOptionsRegistry = {\n method: true,\n headers: true,\n body: true,\n mode: true,\n credentials: true,\n cache: true,\n redirect: true,\n referrer: true,\n referrerPolicy: true,\n integrity: true,\n keepalive: true,\n signal: true,\n window: true,\n dispatcher: true,\n duplex: true,\n priority: true,\n};\n//# sourceMappingURL=constants.js.map","import { requestMethods } from '../core/constants.js';\nexport const normalizeRequestMethod = (input) => requestMethods.includes(input) ? input.toUpperCase() : input;\nconst retryMethods = ['get', 'put', 'head', 'delete', 'options', 'trace'];\nconst retryStatusCodes = [408, 413, 429, 500, 502, 503, 504];\nconst retryAfterStatusCodes = [413, 429, 503];\nconst defaultRetryOptions = {\n limit: 2,\n methods: retryMethods,\n statusCodes: retryStatusCodes,\n afterStatusCodes: retryAfterStatusCodes,\n maxRetryAfter: Number.POSITIVE_INFINITY,\n backoffLimit: Number.POSITIVE_INFINITY,\n delay: attemptCount => 0.3 * (2 ** (attemptCount - 1)) * 1000,\n};\nexport const normalizeRetryOptions = (retry = {}) => {\n if (typeof retry === 'number') {\n return {\n ...defaultRetryOptions,\n limit: retry,\n };\n }\n if (retry.methods && !Array.isArray(retry.methods)) {\n throw new Error('retry.methods must be an array');\n }\n if (retry.statusCodes && !Array.isArray(retry.statusCodes)) {\n throw new Error('retry.statusCodes must be an array');\n }\n return {\n ...defaultRetryOptions,\n ...retry,\n };\n};\n//# sourceMappingURL=normalize.js.map","import { HTTPError } from '../errors/HTTPError.js';\nimport { TimeoutError } from '../errors/TimeoutError.js';\nimport { mergeHeaders, mergeHooks } from '../utils/merge.js';\nimport { normalizeRequestMethod, normalizeRetryOptions } from '../utils/normalize.js';\nimport timeout from '../utils/timeout.js';\nimport delay from '../utils/delay.js';\nimport { findUnknownOptions } from '../utils/options.js';\nimport { maxSafeTimeout, responseTypes, stop, supportsAbortController, supportsFormData, supportsResponseStreams, supportsRequestStreams, } from './constants.js';\nexport class Ky {\n static create(input, options) {\n const ky = new Ky(input, options);\n const function_ = async () => {\n if (typeof ky._options.timeout === 'number' && ky._options.timeout > maxSafeTimeout) {\n throw new RangeError(`The \\`timeout\\` option cannot be greater than ${maxSafeTimeout}`);\n }\n // Delay the fetch so that body method shortcuts can set the Accept header\n await Promise.resolve();\n let response = await ky._fetch();\n for (const hook of ky._options.hooks.afterResponse) {\n // eslint-disable-next-line no-await-in-loop\n const modifiedResponse = await hook(ky.request, ky._options, ky._decorateResponse(response.clone()));\n if (modifiedResponse instanceof globalThis.Response) {\n response = modifiedResponse;\n }\n }\n ky._decorateResponse(response);\n if (!response.ok && ky._options.throwHttpErrors) {\n let error = new HTTPError(response, ky.request, ky._options);\n for (const hook of ky._options.hooks.beforeError) {\n // eslint-disable-next-line no-await-in-loop\n error = await hook(error);\n }\n throw error;\n }\n // If `onDownloadProgress` is passed, it uses the stream API internally\n /* istanbul ignore next */\n if (ky._options.onDownloadProgress) {\n if (typeof ky._options.onDownloadProgress !== 'function') {\n throw new TypeError('The `onDownloadProgress` option must be a function');\n }\n if (!supportsResponseStreams) {\n throw new Error('Streams are not supported in your environment. `ReadableStream` is missing.');\n }\n return ky._stream(response.clone(), ky._options.onDownloadProgress);\n }\n return response;\n };\n const isRetriableMethod = ky._options.retry.methods.includes(ky.request.method.toLowerCase());\n const result = (isRetriableMethod ? ky._retry(function_) : function_());\n for (const [type, mimeType] of Object.entries(responseTypes)) {\n result[type] = async () => {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n ky.request.headers.set('accept', ky.request.headers.get('accept') || mimeType);\n const awaitedResult = await result;\n const response = awaitedResult.clone();\n if (type === 'json') {\n if (response.status === 204) {\n return '';\n }\n const arrayBuffer = await response.clone().arrayBuffer();\n const responseSize = arrayBuffer.byteLength;\n if (responseSize === 0) {\n return '';\n }\n if (options.parseJson) {\n return options.parseJson(await response.text());\n }\n }\n return response[type]();\n };\n }\n return result;\n }\n request;\n abortController;\n _retryCount = 0;\n _input;\n _options;\n // eslint-disable-next-line complexity\n constructor(input, options = {}) {\n this._input = input;\n this._options = {\n ...options,\n headers: mergeHeaders(this._input.headers, options.headers),\n hooks: mergeHooks({\n beforeRequest: [],\n beforeRetry: [],\n beforeError: [],\n afterResponse: [],\n }, options.hooks),\n method: normalizeRequestMethod(options.method ?? this._input.method),\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n prefixUrl: String(options.prefixUrl || ''),\n retry: normalizeRetryOptions(options.retry),\n throwHttpErrors: options.throwHttpErrors !== false,\n timeout: options.timeout ?? 10_000,\n fetch: options.fetch ?? globalThis.fetch.bind(globalThis),\n };\n if (typeof this._input !== 'string' && !(this._input instanceof URL || this._input instanceof globalThis.Request)) {\n throw new TypeError('`input` must be a string, URL, or Request');\n }\n if (this._options.prefixUrl && typeof this._input === 'string') {\n if (this._input.startsWith('/')) {\n throw new Error('`input` must not begin with a slash when using `prefixUrl`');\n }\n if (!this._options.prefixUrl.endsWith('/')) {\n this._options.prefixUrl += '/';\n }\n this._input = this._options.prefixUrl + this._input;\n }\n if (supportsAbortController) {\n this.abortController = new globalThis.AbortController();\n const originalSignal = this._options.signal ?? this._input.signal;\n originalSignal?.addEventListener('abort', () => {\n this.abortController.abort(originalSignal.reason);\n });\n this._options.signal = this.abortController.signal;\n }\n if (supportsRequestStreams) {\n // @ts-expect-error - Types are outdated.\n this._options.duplex = 'half';\n }\n if (this._options.json !== undefined) {\n this._options.body = this._options.stringifyJson?.(this._options.json) ?? JSON.stringify(this._options.json);\n this._options.headers.set('content-type', this._options.headers.get('content-type') ?? 'application/json');\n }\n this.request = new globalThis.Request(this._input, this._options);\n if (this._options.searchParams) {\n // eslint-disable-next-line unicorn/prevent-abbreviations\n const textSearchParams = typeof this._options.searchParams === 'string'\n ? this._options.searchParams.replace(/^\\?/, '')\n : new URLSearchParams(this._options.searchParams).toString();\n // eslint-disable-next-line unicorn/prevent-abbreviations\n const searchParams = '?' + textSearchParams;\n const url = this.request.url.replace(/(?:\\?.*?)?(?=#|$)/, searchParams);\n // To provide correct form boundary, Content-Type header should be deleted each time when new Request instantiated from another one\n if (((supportsFormData && this._options.body instanceof globalThis.FormData)\n || this._options.body instanceof URLSearchParams) && !(this._options.headers && this._options.headers['content-type'])) {\n this.request.headers.delete('content-type');\n }\n // The spread of `this.request` is required as otherwise it misses the `duplex` option for some reason and throws.\n this.request = new globalThis.Request(new globalThis.Request(url, { ...this.request }), this._options);\n }\n }\n _calculateRetryDelay(error) {\n this._retryCount++;\n if (this._retryCount > this._options.retry.limit || error instanceof TimeoutError) {\n throw error;\n }\n if (error instanceof HTTPError) {\n if (!this._options.retry.statusCodes.includes(error.response.status)) {\n throw error;\n }\n const retryAfter = error.response.headers.get('Retry-After')\n ?? error.response.headers.get('RateLimit-Reset')\n ?? error.response.headers.get('X-RateLimit-Reset') // GitHub\n ?? error.response.headers.get('X-Rate-Limit-Reset'); // Twitter\n if (retryAfter && this._options.retry.afterStatusCodes.includes(error.response.status)) {\n let after = Number(retryAfter) * 1000;\n if (Number.isNaN(after)) {\n after = Date.parse(retryAfter) - Date.now();\n }\n else if (after >= Date.parse('2024-01-01')) {\n // A large number is treated as a timestamp (fixed threshold protects against clock skew)\n after -= Date.now();\n }\n const max = this._options.retry.maxRetryAfter ?? after;\n return after < max ? after : max;\n }\n if (error.response.status === 413) {\n throw error;\n }\n }\n const retryDelay = this._options.retry.delay(this._retryCount);\n return Math.min(this._options.retry.backoffLimit, retryDelay);\n }\n _decorateResponse(response) {\n if (this._options.parseJson) {\n response.json = async () => this._options.parseJson(await response.text());\n }\n return response;\n }\n async _retry(function_) {\n try {\n return await function_();\n }\n catch (error) {\n const ms = Math.min(this._calculateRetryDelay(error), maxSafeTimeout);\n if (this._retryCount < 1) {\n throw error;\n }\n await delay(ms, { signal: this._options.signal });\n for (const hook of this._options.hooks.beforeRetry) {\n // eslint-disable-next-line no-await-in-loop\n const hookResult = await hook({\n request: this.request,\n options: this._options,\n error: error,\n retryCount: this._retryCount,\n });\n // If `stop` is returned from the hook, the retry process is stopped\n if (hookResult === stop) {\n return;\n }\n }\n return this._retry(function_);\n }\n }\n async _fetch() {\n for (const hook of this._options.hooks.beforeRequest) {\n // eslint-disable-next-line no-await-in-loop\n const result = await hook(this.request, this._options);\n if (result instanceof Request) {\n this.request = result;\n break;\n }\n if (result instanceof Response) {\n return result;\n }\n }\n const nonRequestOptions = findUnknownOptions(this.request, this._options);\n // Cloning is done here to prepare in advance for retries\n const mainRequest = this.request;\n this.request = mainRequest.clone();\n if (this._options.timeout === false) {\n return this._options.fetch(mainRequest, nonRequestOptions);\n }\n return timeout(mainRequest, nonRequestOptions, this.abortController, this._options);\n }\n /* istanbul ignore next */\n _stream(response, onDownloadProgress) {\n const totalBytes = Number(response.headers.get('content-length')) || 0;\n let transferredBytes = 0;\n if (response.status === 204) {\n if (onDownloadProgress) {\n onDownloadProgress({ percent: 1, totalBytes, transferredBytes }, new Uint8Array());\n }\n return new globalThis.Response(null, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n return new globalThis.Response(new globalThis.ReadableStream({\n async start(controller) {\n const reader = response.body.getReader();\n if (onDownloadProgress) {\n onDownloadProgress({ percent: 0, transferredBytes: 0, totalBytes }, new Uint8Array());\n }\n async function read() {\n const { done, value } = await reader.read();\n if (done) {\n controller.close();\n return;\n }\n if (onDownloadProgress) {\n transferredBytes += value.byteLength;\n const percent = totalBytes === 0 ? 0 : transferredBytes / totalBytes;\n onDownloadProgress({ percent, transferredBytes, totalBytes }, value);\n }\n controller.enqueue(value);\n await read();\n }\n await read();\n },\n }), {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n}\n//# sourceMappingURL=Ky.js.map","// https://github.com/sindresorhus/delay/tree/ab98ae8dfcb38e1593286c94d934e70d14a4e111\nexport default async function delay(ms, { signal }) {\n return new Promise((resolve, reject) => {\n if (signal) {\n signal.throwIfAborted();\n signal.addEventListener('abort', abortHandler, { once: true });\n }\n function abortHandler() {\n clearTimeout(timeoutId);\n reject(signal.reason);\n }\n const timeoutId = setTimeout(() => {\n signal?.removeEventListener('abort', abortHandler);\n resolve();\n }, ms);\n });\n}\n//# sourceMappingURL=delay.js.map","import { kyOptionKeys, requestOptionsRegistry } from '../core/constants.js';\nexport const findUnknownOptions = (request, options) => {\n const unknownOptions = {};\n for (const key in options) {\n if (!(key in requestOptionsRegistry) && !(key in kyOptionKeys) && !(key in request)) {\n unknownOptions[key] = options[key];\n }\n }\n return unknownOptions;\n};\n//# sourceMappingURL=options.js.map","import { TimeoutError } from '../errors/TimeoutError.js';\n// `Promise.race()` workaround (#91)\nexport default async function timeout(request, init, abortController, options) {\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n if (abortController) {\n abortController.abort();\n }\n reject(new TimeoutError(request));\n }, options.timeout);\n void options\n .fetch(request, init)\n .then(resolve)\n .catch(reject)\n .then(() => {\n clearTimeout(timeoutId);\n });\n });\n}\n//# sourceMappingURL=timeout.js.map","/*! MIT License © Sindre Sorhus */\nimport { Ky } from './core/Ky.js';\nimport { requestMethods, stop } from './core/constants.js';\nimport { validateAndMerge } from './utils/merge.js';\nconst createInstance = (defaults) => {\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n const ky = (input, options) => Ky.create(input, validateAndMerge(defaults, options));\n for (const method of requestMethods) {\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n ky[method] = (input, options) => Ky.create(input, validateAndMerge(defaults, options, { method }));\n }\n ky.create = (newDefaults) => createInstance(validateAndMerge(newDefaults));\n ky.extend = (newDefaults) => {\n if (typeof newDefaults === 'function') {\n newDefaults = newDefaults(defaults ?? {});\n }\n return createInstance(validateAndMerge(defaults, newDefaults));\n };\n ky.stop = stop;\n return ky;\n};\nconst ky = createInstance();\nexport default ky;\nexport { HTTPError } from './errors/HTTPError.js';\nexport { TimeoutError } from './errors/TimeoutError.js';\n//# sourceMappingURL=index.js.map","import ky from \"ky\";\n\nexport default ky.create({\n headers: { \"X-Requested-With\": \"XMLHttpRequest\" },\n});\n","import { on } from 'delegated-events'\nimport { handleValidation } from '@common/validation'\nimport ky from '@common/ky'\nimport scrollTo from '@common/scroll-to'\nimport { handleAjaxSubmit } from '../scripts/components/styled-form.js'\nimport { animate, inView, stagger } from \"motion\";\n\nconst wrapper = document.querySelector('.donate-form-wrapper')\nconst form = document.querySelector('.donate-form')\nconst submitButton = form.querySelector('[type=submit]')\nconst amountView = form.querySelector('.amount-view')\nconst paymentView = form.querySelector('.payment-view')\nconst amountField = form.querySelector('input[name=Amount]')\nconst summaryField = form.querySelector('.payment-summary')\n\nconst recurringLabels = {\n biweekly: '2 weeks',\n monthly: 'month',\n quarterly: '3 months',\n annually: 'year',\n biannually: '6 months',\n}\n\nconst state = {\n view: 'amount',\n frequency: form.querySelector('input[name=\"Frequency\"]:checked').value,\n recurringFrequency: form.querySelector('select[name=\"RecurringFrequency\"]').value,\n}\n\nlet stripe;\nlet elements;\n\nconst initializePaymentForm = async (form, type) => {\n stripe = window.Stripe(form.dataset.stripeKey);\n\n const appearance = {\n labels: \"floating\",\n theme: \"stripe\",\n variables: {\n colorPrimary: \"#158F58\",\n colorBackground: \"#ffffff\",\n colorDanger: \"#DE1D1D\",\n borderRadius: \"50px\",\n gridColumnSpacing: \"24px\",\n gridRowSpacing: \"16px\",\n },\n rules: {\n '.Input': {\n fontFamily: \"Gotham, sans-serif\",\n fontWeight: 500,\n colorTextPlaceholder: \"#484848\",\n paddingTop: \"10px\",\n paddingLeft: \"25px\",\n border: \"unset\",\n boxShadow: \"unset\",\n },\n '.Tab': {\n paddingLeft: \"25px\",\n },\n '.Block': {\n paddingLeft: \"25px\",\n paddingTop: \"25px\",\n paddingBottom: \"25px\",\n },\n '.TabLabel': {\n fontFamily: \"Gotham, sans-serif\",\n fontWeight: 600,\n colorTextPlaceholder: \"#484848\",\n },\n },\n };\n\n try {\n const endpoint = form.dataset.paymentEndpoint;\n\n const data = new FormData(form);\n data.set(\"type\", type);\n data.set(\"amount\", parseFloat(amountField.value.replaceAll(',', '')));\n\n const res = await ky.post(endpoint, { body: data }).json();\n\n elements = stripe.elements({ clientSecret: res.clientSecret, appearance });\n\n const paymentElement = elements.create(\"payment\", {\n layout: \"tabs\",\n });\n paymentElement.mount(\"#payment-element\");\n } catch (error) {\n console.error(error);\n }\n};\n\nconst handlePaymentSubmit = async (e) => {\n e.preventDefault();\n\n const form = e.currentTarget;\n const isValid = handleValidation(form);\n\n if (!isValid) {\n return;\n }\n\n const formData = new FormData(form);\n\n const billingDetails = {};\n\n billingDetails.name = `${formData.get(\"FirstName\")} ${formData.get(\"LastName\")}`;\n billingDetails.email = formData.get(\"Email\");\n billingDetails.phone = formData.get(\"Phone\");\n billingDetails.address = {\n line1: formData.get(\"BillingAddress\"),\n line2: formData.get(\"BillingAddress2\"),\n city: formData.get(\"BillingCity\"),\n state: formData.get(\"BillingState\"),\n };\n\n submitButton.disabled = true;\n submitButton.classList.add(\"is-loading\");\n\n const { error, paymentIntent } = await stripe.confirmPayment({\n elements,\n confirmParams: {\n return_url: \"https://healthyshelf.org\",\n payment_method_data: {\n billing_details: billingDetails,\n },\n },\n redirect: \"if_required\",\n });\n\n if (error && (error.type === \"card_error\" || error.type === \"validation_error\")) {\n showMessage(error.message);\n submitButton.disabled = false;\n submitButton.classList.remove(\"is-loading\");\n } else if (paymentIntent && paymentIntent.status === \"succeeded\") {\n // Get the payment intent id and set it to the hidden field\n const paymentIntentId = paymentIntent.id;\n let paymentIntentHiddenField = document.querySelector(\"#DonationForm_DonationForm_StripePaymentIntentId\");\n paymentIntentHiddenField.value = paymentIntentId;\n\n handleAjaxSubmit(e);\n } else {\n showMessage(\"An unexpected error occurred.\");\n submitButton.disabled = false;\n submitButton.classList.remove(\"is-loading\");\n }\n};\n\nfunction showMessage(messageText) {\n const messageContainer = document.querySelector(\"#payment-message\");\n\n messageContainer.classList.remove(\"hidden\");\n messageContainer.textContent = messageText;\n\n setTimeout(function () {\n messageContainer.classList.add(\"hidden\");\n messageContainer.textContent = \"\";\n }, 4000);\n}\n\nconst render = () => {\n if (state.view === 'amount') {\n amountView.classList.add('is-active')\n paymentView.classList.remove('is-active')\n }\n\n if (state.view === 'payment') {\n amountView.classList.remove('is-active')\n paymentView.classList.add('is-active')\n\n const els = paymentView.querySelectorAll(`[data-reveal=\"fade-up\"]`);\n\n let duration = 1;\n\n if (els.length) {\n inView(\n paymentView,\n () => {\n animate(els, { opacity: [0, 1], y : [100, 0] }, {duration, delay: stagger(0.2),\n }).finished.then((animations) => {\n animations?.forEach((animation) => {\n animation.effect?.target?.setAttribute(\"data-sr-done\", true);\n });\n });\n },\n {\n margin: \"0px 0px -25% 0px\",\n },\n );\n }\n\n\n let summary = `$ ${amountField.value}.00`\n\n if (state.frequency === 'Recurring') {\n summary = `${summary} every ${recurringLabels[state.recurringFrequency]}`\n }\n\n summaryField.value = summary\n }\n\n scrollTo(wrapper)\n}\n\nconst init = () => {\n\n on('input', 'input[name=Amount]', (e) => {\n amountField.setAttribute('value', e.target.value)\n })\n\n on('click', '.donation-amount', (e) => {\n const amount = e.target.dataset.value\n\n // Remove active class from all other amounts\n document.querySelectorAll('.donation-amount').forEach((x) => x.classList.remove('is-active'))\n\n // Add active class to the selected amount\n e.target.classList.add('is-active')\n\n const updateEvent = new CustomEvent('updateValue', { detail: amount })\n\n amountField.dispatchEvent(updateEvent)\n\n amountField.setAttribute('value', amount)\n })\n\n on('click', 'input[name=\"Frequency\"]', (e) => {\n if (e.target.checked) {\n state.frequency = e.target.value\n }\n })\n\n on('change', 'select[name=\"RecurringFrequency\"]', (e) => {\n state.recurringFrequency = e.target.value\n })\n\n on('click', '.amount-view-trigger', () => {\n state.view = 'amount'\n render()\n })\n\n on('click', '.payment-view-trigger', () => {\n\n const isValid = handleValidation(form);\n\n if (!isValid) {\n return;\n }\n\n state.view = 'payment'\n render()\n\n if (!form) {\n return;\n }\n\n //get frequency type\n const type = form.querySelector('input[name=\"Frequency\"]:checked').value;\n\n initializePaymentForm(form, type);\n\n form.addEventListener(\"submit\", handlePaymentSubmit);\n })\n\n on('click', '.donation-form-link', (e) => {\n\n e.preventDefault()\n const buttonAmount = e.target.dataset.donationAmount\n let cleanPrice = buttonAmount.replace(/[$,]/g, '');\n let priceAsInteger = parseInt(cleanPrice, 10);\n\n let buttons = document.querySelectorAll('.donation-amount-btn');\n buttons.forEach(function(button) {\n button.classList.remove('is-active');\n });\n\n let button = document.querySelector(`button[data-value=\"${priceAsInteger}\"]`);\n if (button) {\n button.classList.add(\"is-active\");\n }\n\n amountField.value = buttonAmount.replace(/[$]/g, '');;\n amountField.setAttribute('value', cleanPrice)\n\n })\n\n}\n\ninit()\n"],"names":["target","additionalOffset","arguments","length","undefined","pageOffset","getPageOffset","offset","document","querySelector","siteHeaderHeight","getComputedStyle","documentElement","getPropertyValue","parseInt","dataset","scrollOffset","Promise","resolve","jump","duration","callback","validator","checkboxGroup","_","group","querySelectorAll","findFieldWrapper","el","closest","handleBlur","e","fieldWrapper","classList","remove","existingErrorMessage","contains","handleValidation","form","rules","forEach","field","offsetHeight","getAttribute","fieldName","name","presence","allowEmpty","message","type","email","readonly","format","pattern","minimum","min","equality","equals","radio","checkbox","buildRules","result","validate","messages","Object","entries","insertAdjacentHTML","add","shouldScroll","formScroll","firstError","scrollTo","setTimeout","focus","wretch","options","headers","addon","QueryStringAddon","test","navigator","platform","maxTouchPoints","handleLengthLimit","$input","$field","textContent","value","maxLength","handleToggle","selectedValue","input","toggleGroup","shouldShow","targetValues","toggleIf","split","shift","indexOf","toLowerCase","includes","checked","x","toggleSubmit","submitButton","disabled","toggle","showFormMessages","holder","success","autoHide","style","display","innerHTML","handleAjaxSubmit","preventDefault","formMessages","autoHideMessage","formData","FormData","ajax","url","action","body","post","json","res","ga","event","window","dataLayer","push","trackGoogleAnalytics","reset","hideOnSubmit","donateSVG","thankYouSVG","fire","URL","queryParameters","URLSearchParams","toString","catch","finally","handleSubmit","isValid","setupForm","async","dropdowns","default","easydropdown","select","placeholder","hasAttribute","setAttribute","behavior","openOnFocus","maxVisibleItems","liveUpdates","useNativeUiOnMobile","setupDropdowns","fields","IMask","mask","currency","Number","scale","thousandsSeparator","addEventListener","detail","updateValue","dispatchEvent","Event","setupMasks","createElement","files","parentNode","insertBefore","click","counter","count","appendChild","setupSpecialFields","init","on","capture","HTTPError","Error","response","request","constructor","status","statusText","trim","super","method","this","TimeoutError","isObject","validateAndMerge","sources","source","Array","isArray","TypeError","deepMerge","mergeHeaders","source1","source2","globalThis","Headers","isHeadersInstance","key","delete","set","newHookValue","original","incoming","property","hasOwn","mergeHooks","beforeRequest","beforeRetry","afterResponse","beforeError","returnValue","hooks","supportsRequestStreams","duplexAccessed","hasContentType","supportsReadableStream","ReadableStream","supportsRequest","Request","duplex","has","error","supportsAbortController","AbortController","supportsResponseStreams","supportsFormData","requestMethods","responseTypes","text","arrayBuffer","blob","maxSafeTimeout","stop","Symbol","kyOptionKeys","parseJson","stringifyJson","searchParams","prefixUrl","retry","timeout","throwHttpErrors","onDownloadProgress","fetch","requestOptionsRegistry","mode","credentials","cache","redirect","referrer","referrerPolicy","integrity","keepalive","signal","dispatcher","priority","normalizeRequestMethod","toUpperCase","defaultRetryOptions","limit","methods","statusCodes","afterStatusCodes","maxRetryAfter","POSITIVE_INFINITY","backoffLimit","delay","attemptCount","normalizeRetryOptions","Ky","create","ky","function_","_options","RangeError","_fetch","hook","modifiedResponse","_decorateResponse","clone","Response","ok","_stream","_retry","mimeType","get","byteLength","abortController","_retryCount","_input","String","bind","startsWith","endsWith","originalSignal","abort","reason","JSON","stringify","replace","_calculateRetryDelay","retryAfter","after","isNaN","Date","parse","now","max","retryDelay","Math","ms","reject","abortHandler","clearTimeout","timeoutId","throwIfAborted","once","removeEventListener","retryCount","nonRequestOptions","unknownOptions","findUnknownOptions","mainRequest","then","totalBytes","transferredBytes","percent","Uint8Array","start","controller","reader","getReader","read","done","close","enqueue","createInstance","defaults","newDefaults","extend","wrapper","amountView","paymentView","amountField","summaryField","recurringLabels","biweekly","monthly","quarterly","annually","biannually","state","view","frequency","recurringFrequency","stripe","elements","handlePaymentSubmit","currentTarget","billingDetails","phone","address","line1","line2","city","paymentIntent","confirmPayment","confirmParams","return_url","payment_method_data","billing_details","paymentIntentId","id","showMessage","messageText","messageContainer","render","els","inView","animate","opacity","y","stagger","finished","animations","animation","effect","margin","summary","amount","updateEvent","CustomEvent","Stripe","stripeKey","appearance","labels","theme","variables","colorPrimary","colorBackground","colorDanger","borderRadius","gridColumnSpacing","gridRowSpacing","fontFamily","fontWeight","colorTextPlaceholder","paddingTop","paddingLeft","border","boxShadow","paddingBottom","endpoint","paymentEndpoint","data","parseFloat","replaceAll","clientSecret","layout","mount","console","initializePaymentForm","buttonAmount","donationAmount","cleanPrice","priceAsInteger","button"],"sourceRoot":""}