{"version":3,"file":"UmbracoForms.chunk-107928.js","mappings":";kQA+DA,SAASA,EAAaC,GAGrB,OAFoBA,EAAIC,cAAcC,QAAQ,OAAQ,IAGvD,CAxDAC,OAAOC,UAAYD,OAAOC,WAAa,GCNvC,IAAMC,EAAYC,OAAOC,OAAO,CAC/BC,YAAa,0BACbC,KAAM,+BACNC,WAAY,4BAGPC,EAAiBL,OAAOC,OAAO,CACpCK,SAAU,yBAWPC,EAAuC,KAKvCC,GAAqB,EAmBzB,SAASC,EAAaC,GAOrB,IAAMC,EAAQD,EAAEE,OAEZD,GAASA,aAAiBE,iBAAmBF,EAAMG,QAAQf,EAAUI,QACxEK,GAAqB,EAevB,SAA8BG,GAC7BJ,EAAeI,EACfd,OAAOkB,YAAW,WAAQR,EAAe,IAAK,GAxDxB,GAyDvB,CAjBES,CAAqBL,GAuBtBd,OAAOoB,iBAAiB,eAAgBC,GAExCrB,OAAOkB,YAAW,WAAQlB,OAAOsB,oBAAoB,eAAgBD,EAAgB,GAjE/D,IAwEtBrB,OAAOkB,YAAW,WAanB,IAAwCK,EACnCC,GAXgB,KAWhBA,GAAa,EAED,QAAhBD,EAAIb,SAAY,IAAAa,GAAZA,EAAcE,cAAcvB,EAAUK,cACzCiB,GAAa,GAGPA,IAfLH,GAEF,GAAG,GA3BJ,CA2DA,SAASA,IACR,IAA2B,IAAvBV,EAA8B,CACjCA,GAAqB,EAErB,IAAMF,EAjBR,WAAgE,IAA1CK,EAAKY,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAGhB,EACvBmB,EAAWf,aAAK,EAALA,EAAOgB,QAAQ5B,EAAUG,aAC1C,GAAIwB,EAAU,CACb,IAAMpB,EAAWoB,EAASE,aAAavB,EAAeC,UACtD,GAAIA,EACH,OAAOA,CAET,CACD,CASmBuB,GACbvB,GD9DN,SAAoBwB,GAEnB,IA3CMC,EAqDN,GARID,SAAAA,EAAcE,eACjBF,EAAaE,aAAevC,EAAaqC,EAAaE,eAGnDF,SAAAA,EAAcG,gBACjBH,EAAaG,cAAgBxC,EAAaqC,EAAaG,iBAlDlDF,EAqDcD,IA/CdC,EAAIG,UAAoC,iBAAjBH,EAAIG,UAI3BH,EAAII,QAAgC,iBAAfJ,EAAII,QAIzBJ,EAAIK,OAA8B,iBAAdL,EAAIK,SAI1BL,EAAIC,cAA4C,iBAArBD,EAAIC,iBAI/BD,EAAIE,eAA8C,iBAAtBF,EAAIE,eA+BD,CAClC,IAAMI,EAAW,CAChBC,MAZY,cAaZR,aAAAA,GAGDjC,OAAOC,UAAUyC,KAAKF,EACvB,CACD,CCoDGG,CATsC,CACrCN,SAAU,OACVC,OAAQ,SACRC,MAAO9B,EAEP2B,cAAe3B,EACf0B,aAAc,uBAKjB,CACD,CAEA,IAAMS,EApHN,YAQCC,EAAAA,EAAAA,IAAO3C,EAAUI,KAAM,SAAUM,EANlC,ECtBIV,EAAYC,OAAOC,OAAO,CAC7B0C,YAAa,2BACbC,aAAc,0BACdC,UAAW,yBAGRC,EAAe,CAClBC,KAAM,WACLD,EAAaE,eAEb,IAAIC,EAAgBC,IAAE,oBAEtB,GAAID,EAAczB,OAAQ,KACrB2B,EAAeF,EAAcG,KAAK,oBAClCD,EAAa3B,QAChB2B,EAAaE,MAAK,WACjB,IAAIC,EAAcJ,IAAEK,MAEhB1D,OAAO2D,WAAW,qBAAqB1C,SAC1CwC,EAAYG,KAAK,WAAY,YAE9B,IAAIC,IAAJ,CAAY,CACXC,MAAOJ,KACPK,UAAW,GACXC,SAAU,SAASC,IAOtB,SAAmBC,EAAID,GACtB,IAAIE,EAAQC,IAAOH,GAAMI,OAAO,cACpBC,SAASC,eAAeL,GAC9BC,MAAQA,CACf,CAVIK,CAAUf,EAAY,GAAGS,GAAGnE,QAAQ,KAAM,IAAKkE,EAChD,GAEF,IASDZ,IAAEnD,EAAU4C,aAAa2B,GAAG,UAAU,SAAUhC,GAC/C,IAAI3B,EAAQuC,IAAEZ,EAAM1B,QAGpBf,OAAOkB,YAAW,WACjB,IACIwD,EADAC,EAAiB7D,EAAMyC,KAAMrD,EAAU6C,cAGvC4B,EAAehD,SAClB+C,EAAmBC,EAAeC,GAAG,GAAG9C,QAAQ5B,EAAU8C,WAC1D6B,EAAAA,GAAkBxB,IAAGqB,EAAiB,IAAM,KAE9C,GAAG,EACJ,GACD,CACD,EAEAvB,aAAc,WACTmB,SAAS7C,cAAc,4BAC1BqD,GAEF,0BCjEA,SAAUC,EAAMC,GAEb,aAEA,IAAIZ,EAIA,IAAMA,EAAS,EAAQ,IAAW,CAAE,MAAOvD,GAAI,CAC/CoE,EAAOC,QAaP,SAAUd,GAOd,IAAIe,EAA8B,mBAAXf,EAEvBgB,IAAsBpF,OAAOoB,iBAE7BkD,EAAWtE,OAAOsE,SAElBe,EAAMrF,OAAOkB,WAEboE,EAAW,SAASC,EAAI1E,EAAG2E,EAAUC,GAE7BL,EACAG,EAAGnE,iBAAiBP,EAAG2E,IAAYC,GAEnCF,EAAGG,YAAY,KAAO7E,EAAG2E,EAEjC,EAEAG,EAAc,SAASJ,EAAI1E,EAAG2E,EAAUC,GAEhCL,EACAG,EAAGjE,oBAAoBT,EAAG2E,IAAYC,GAEtCF,EAAGK,YAAY,KAAO/E,EAAG2E,EAEjC,EAOAK,EAAW,SAASN,EAAIO,GAEpB,OAA+D,KAAvD,IAAMP,EAAGQ,UAAY,KAAKC,QAAQ,IAAMF,EAAK,IACzD,EAEAG,EAAW,SAASV,EAAIO,GAEfD,EAASN,EAAIO,KACdP,EAAGQ,UAA8B,KAAjBR,EAAGQ,UAAoBD,EAAKP,EAAGQ,UAAY,IAAMD,EAEzE,EAEAI,EAAc,SAASX,EAAIO,GAjBpB,IAASjG,EAmBZ0F,EAAGQ,WAnBSlG,GAmBS,IAAM0F,EAAGQ,UAAY,KAAKhG,QAAQ,IAAM+F,EAAK,IAAK,MAjB5DK,KAAOtG,EAAIsG,OAAStG,EAAIE,QAAQ,aAAa,GAkB5D,EAEAqG,EAAU,SAASC,GAEf,MAAO,QAAUC,KAAKnG,OAAOoG,UAAUC,SAASC,KAAKJ,GACzD,EAEAK,EAAS,SAASL,GAEd,MAAO,OAASC,KAAKnG,OAAOoG,UAAUC,SAASC,KAAKJ,MAAUM,MAAMN,EAAIO,UAC5E,EAEAC,EAAY,SAAS5C,GAEjB,IAAI6C,EAAM7C,EAAK8C,SACf,OAAe,IAARD,GAAqB,IAARA,CACxB,EAEAE,EAAa,SAASC,GAGlB,OAASA,EAAO,GAAM,GAAKA,EAAO,KAAQ,GAAMA,EAAO,KAAQ,CACnE,EAEAC,EAAiB,SAASD,EAAME,GAE5B,MAAO,CAAC,GAAIH,EAAWC,GAAQ,GAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAIE,EACpF,EAEAC,EAAkB,SAASnD,GAEnByC,EAAOzC,IAAOA,EAAKoD,SAAS,EAAE,EAAE,EAAE,EAC1C,EAEAC,EAAe,SAASC,EAAEC,GAGtB,OAAOD,EAAEX,YAAcY,EAAEZ,SAC7B,EAEAa,EAAS,SAASC,EAAIC,EAAMC,GAExB,IAAIC,EAAMC,EACV,IAAKD,KAAQF,GACTG,OAAuBlG,IAAb8F,EAAGG,KACwB,iBAAfF,EAAKE,IAAqC,OAAfF,EAAKE,SAA0CjG,IAAxB+F,EAAKE,GAAME,SAC3ErB,EAAOiB,EAAKE,IACRD,IACAF,EAAGG,GAAQ,IAAIG,KAAKL,EAAKE,GAAMjB,YAG9BR,EAAQuB,EAAKE,IACdD,IACAF,EAAGG,GAAQF,EAAKE,GAAMI,MAAM,IAGhCP,EAAGG,GAAQJ,EAAO,CAAC,EAAGE,EAAKE,GAAOD,IAE/BA,GAAcE,IACrBJ,EAAGG,GAAQF,EAAKE,IAGxB,OAAOH,CACX,EAEAQ,EAAY,SAAS3C,EAAI4C,EAAWC,GAEhC,IAAIC,EAEA/D,EAASgE,cACTD,EAAK/D,EAASgE,YAAY,eACvBC,UAAUJ,GAAW,GAAM,GAC9BE,EAAKZ,EAAOY,EAAID,GAChB7C,EAAGiD,cAAcH,IACV/D,EAASmE,oBAChBJ,EAAK/D,EAASmE,oBACdJ,EAAKZ,EAAOY,EAAID,GAChB7C,EAAG2C,UAAU,KAAOC,EAAWE,GAEvC,EAEAK,EAAiB,SAASC,GAStB,OARIA,EAASxB,MAAQ,IACjBwB,EAAS1B,MAAQ2B,KAAKC,KAAKD,KAAKE,IAAIH,EAASxB,OAAO,IACpDwB,EAASxB,OAAS,IAElBwB,EAASxB,MAAQ,KACjBwB,EAAS1B,MAAQ2B,KAAKG,MAAMH,KAAKE,IAAIH,EAASxB,OAAO,IACrDwB,EAASxB,OAAS,IAEfwB,CACX,EAKAK,EAAW,CAGPlF,MAAO,KAGPmF,WAAOrH,EAGPsH,UAAW,oCAIXC,SAAU,cAGVC,YAAY,EAGZ/E,OAAQ,aAIRmC,SAAU,KAGV6C,MAAO,KAGPC,YAAa,KAGbC,gBAAgB,EAGhBC,SAAU,EAIVC,uBAAwB,EAGxBC,cAAc,EAGdC,QAAS,KAETC,QAAS,KAGT7F,UAAW,GAGX8F,gBAAgB,EAGhBC,eAAe,EAGfC,QAAS,EACTC,QAAS,KACTC,cAAUrI,EACVsI,cAAUtI,EAEVuI,WAAY,KACZC,SAAU,KAEVC,OAAO,EAGPC,WAAY,GAGZC,oBAAoB,EAGpBC,iCAAiC,EAGjCC,4CAA4C,EAG5CC,eAAgB,EAIhBC,aAAc,OAGdC,eAAWhJ,EAGXiJ,mBAAoB,EAGpBC,KAAM,CACFC,cAAgB,iBAChBC,UAAgB,aAChBC,OAAgB,CAAC,UAAU,WAAW,QAAQ,QAAQ,MAAM,OAAO,OAAO,SAAS,YAAY,UAAU,WAAW,YACpHC,SAAgB,CAAC,SAAS,SAAS,UAAU,YAAY,WAAW,SAAS,YAC7EC,cAAgB,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAIzDC,MAAO,KAGPC,OAAQ,GAGRrH,SAAU,KACVsH,OAAQ,KACRC,QAAS,KACTC,OAAQ,KAGRC,eAAe,GAOnBC,EAAgB,SAASC,EAAM7E,EAAK8E,GAGhC,IADA9E,GAAO6E,EAAKnC,SACL1C,GAAO,GACVA,GAAO,EAEX,OAAO8E,EAAOD,EAAKb,KAAKK,cAAcrE,GAAO6E,EAAKb,KAAKI,SAASpE,EACpE,EAEA+E,EAAY,SAASF,GAEjB,IAAIG,EAAM,GACNC,EAAe,QACnB,GAAIJ,EAAKK,QAAS,CACd,IAAIL,EAAKnB,gCAQL,MAAO,6BAPPsB,EAAIpJ,KAAK,4BAELiJ,EAAKlB,4CACLqB,EAAIpJ,KAAK,wBAMrB,CAuBA,OAtBIiJ,EAAKM,YACLH,EAAIpJ,KAAK,eAETiJ,EAAKO,SACLJ,EAAIpJ,KAAK,YAETiJ,EAAKQ,aACLL,EAAIpJ,KAAK,eACTqJ,EAAe,QAEfJ,EAAKS,UACLN,EAAIpJ,KAAK,aAETiJ,EAAKU,WACLP,EAAIpJ,KAAK,cAETiJ,EAAKW,cACLR,EAAIpJ,KAAK,iBAETiJ,EAAKY,YACLT,EAAIpJ,KAAK,eAEN,iBAAmBiJ,EAAK7E,IAAM,YAAcgF,EAAIU,KAAK,KAAO,oBAAsBT,EAAlF,wEAE0BJ,EAAK1E,KAAO,sBAAwB0E,EAAKxE,MAAQ,oBAAsBwE,EAAK7E,IAAM,KACnG6E,EAAK7E,IAHd,gBAMX,EA0BA2F,EAAa,SAAUC,EAAGC,EAAGC,EAAGnD,GAC5B,IAAIxF,EAAO,IAAI+D,KAAK4E,EAAGD,EAAGD,GAG1B,MAAO,0BAFIvH,EAAYf,EAAOH,GAAM4I,UA1B9B,SAAS5I,EAAMwF,GAErBxF,EAAKoD,SAAS,EAAG,EAAG,EAAG,GAIvB,IAAIyF,EAAiB7I,EAAK8I,UACtBC,EAAiB/I,EAAK8C,SACtBkG,EAAiBxD,EACjByD,EAAiBD,EAAiB,EAElCE,EAAiB,SAASrG,GAAO,OAAQA,EADxB,EAC4C,GAD5C,CAC8D,EAGnF7C,EAAKmJ,QAAQN,EAAUI,EAAWC,EAAYH,IAE9C,IAAIK,EAAc,IAAIrF,KAAK/D,EAAKqJ,cAAe,EAAGL,GAE9CM,GAAetJ,EAAK2C,UAAYyG,EAAOzG,WADzB,MAIlB,OAFkB,EAAIgC,KAAK4E,OAAOD,EAAcL,EAAWC,EAAYE,EAAOtG,WATzD,EAYzB,CAIoD8F,CAAQ5I,EAAMwF,IAErB,OAC7C,EAEAgE,EAAY,SAASC,EAAMrD,EAAOP,EAAe6D,GAE7C,MAAO,uBAAyB7D,EAAgB,mBAAqB,KAAO6D,EAAgB,eAAiB,IAAM,MAAQtD,EAAQqD,EAAKE,UAAYF,GAAMlB,KAAK,IAAM,OACzK,EAmBAqB,EAAc,SAASC,EAAUC,EAAG9G,EAAME,EAAO6G,EAASC,GAEtD,IAAIC,EAAGC,EAAGrC,EAKNsC,EACAC,EALA1C,EAAOmC,EAASQ,GAChBC,EAAYtH,IAAS0E,EAAK5B,QAC1ByE,EAAYvH,IAAS0E,EAAK3B,QAC1ByE,EAAO,YAAcR,EAAS,6DAG9BS,GAAO,EACPC,GAAO,EAEX,IAAK7C,EAAM,GAAIoC,EAAI,EAAGA,EAAI,GAAIA,IAC1BpC,EAAIpJ,KAAK,mBAAqBuE,IAAS+G,EAAUE,EAAIH,EAAI,GAAKG,EAAIH,GAAK,KAClEG,IAAM/G,EAAQ,uBAAwB,KACrCoH,GAAaL,EAAIvC,EAAK1B,UAAcuE,GAAaN,EAAIvC,EAAKzB,SAAY,uBAAyB,IAAM,IACvGyB,EAAKb,KAAKG,OAAOiD,GAAK,aAa9B,IAVAE,EAAY,2BAA6BzC,EAAKb,KAAKG,OAAO9D,GAAS,+DAAiE2E,EAAIU,KAAK,IAAM,kBAE/IpG,EAAQuF,EAAK5H,YACbmK,EAAIvC,EAAK5H,UAAU,GACnBoK,EAAIxC,EAAK5H,UAAU,GAAK,IAExBmK,EAAIjH,EAAO0E,EAAK5H,UAChBoK,EAAI,EAAIlH,EAAO0E,EAAK5H,WAGnB+H,EAAM,GAAIoC,EAAIC,GAAKD,GAAKvC,EAAK3B,QAASkE,IACnCA,GAAKvC,EAAK5B,SACV+B,EAAIpJ,KAAK,kBAAoBwL,EAAI,KAAOA,IAAMjH,EAAO,uBAAwB,IAAM,IAAM,EAAM,aA0BvG,OAvBAoH,EAAW,2BAA6BpH,EAAO0E,EAAKrB,WAAa,8DAAgEwB,EAAIU,KAAK,IAAM,kBAE5Ib,EAAKpB,mBACLkE,GAAQJ,EAAWD,EAEnBK,GAAQL,EAAYC,EAGpBE,IAAwB,IAAVpH,GAAewE,EAAK1B,UAAY9C,KAC9CuH,GAAO,GAGPF,IAAwB,KAAVrH,GAAgBwE,EAAKzB,UAAY/C,KAC/CwH,GAAO,GAGD,IAANZ,IACAU,GAAQ,4BAA8BC,EAAO,GAAK,gBAAkB,mBAAqB/C,EAAKb,KAAKC,cAAgB,aAEnHgD,IAAOD,EAASQ,GAAG5D,eAAiB,IACpC+D,GAAQ,4BAA8BE,EAAO,GAAK,gBAAkB,mBAAqBhD,EAAKb,KAAKE,UAAY,aAG5GyD,EAAQ,QACnB,EAEAG,EAAc,SAASjD,EAAMvD,EAAM6F,GAE/B,MAAO,0FAA4FA,EAAS,KA1EnG,SAAStC,GAElB,IAAIuC,EAAGpC,EAAM,GAIb,IAHIH,EAAK9B,gBACLiC,EAAIpJ,KAAK,aAERwL,EAAI,EAAGA,EAAI,EAAGA,IACfpC,EAAIpJ,KAAK,gCAAkCgJ,EAAcC,EAAMuC,GAAK,KAAOxC,EAAcC,EAAMuC,GAAG,GAAQ,gBAE9G,MAAO,eAAiBvC,EAAKtB,MAAQyB,EAAI8B,UAAY9B,GAAKU,KAAK,IAAM,eACzE,CAgEuHqC,CAAWlD,IA7EvH,UA6E0IvD,EA7EzHoE,KAAK,IA6EtB,mBACX,EAMA3I,EAAU,SAASiL,GAEf,IAAIC,EAAOrL,KACPiI,EAAOoD,EAAKC,OAAOF,GAEvBC,EAAKE,aAAe,SAASpO,GAEzB,GAAKkO,EAAKG,GAAV,CAIA,IAAInO,GADJF,EAAIA,GAAKb,OAAOyC,OACD1B,QAAUF,EAAEsO,WAC3B,GAAKpO,EAuBL,GAnBK8E,EAAS9E,EAAQ,kBACd8E,EAAS9E,EAAQ,gBAAmB8E,EAAS9E,EAAQ,aAAgB8E,EAAS9E,EAAOqO,WAAY,eAW5FvJ,EAAS9E,EAAQ,aACtBgO,EAAKM,YAEAxJ,EAAS9E,EAAQ,cACtBgO,EAAK/D,aAdL+D,EAAK3B,QAAQ,IAAIpF,KAAKjH,EAAOgB,aAAa,kBAAmBhB,EAAOgB,aAAa,mBAAoBhB,EAAOgB,aAAa,mBACrH4J,EAAK1C,OACL5D,GAAI,WACA0J,EAAKO,OACD3D,EAAKd,mBAAqBc,EAAK7H,OAC/B6H,EAAK7H,MAAMyL,MAEnB,GAAG,OAUV1J,EAAS9E,EAAQ,eASlBgO,EAAKS,IAAK,MATwB,CAElC,IAAI3O,EAAE4O,eAIF,OADA5O,EAAE6O,aAAc,GACT,EAHP7O,EAAE4O,gBAKV,CAlCA,CAqCJ,EAEAV,EAAKY,UAAY,SAAS9O,GAGtB,IAAIE,GADJF,EAAIA,GAAKb,OAAOyC,OACD1B,QAAUF,EAAEsO,WACtBpO,IAGD8E,EAAS9E,EAAQ,qBACjBgO,EAAKa,UAAU7O,EAAOoD,OAEjB0B,EAAS9E,EAAQ,qBACtBgO,EAAKc,SAAS9O,EAAOoD,OAE7B,EAEA4K,EAAKe,aAAe,SAASjP,GAIzB,GAFAA,EAAIA,GAAKb,OAAOyC,MAEZsM,EAAKgB,YAEL,OAAOlP,EAAEmP,SACL,KAAK,GACL,KAAK,GACGrE,EAAK7H,OACL6H,EAAK7H,MAAMyL,OAEf,MACJ,KAAK,GACDR,EAAKkB,WAAW,WAAY,GAC5B,MACJ,KAAK,GACDlB,EAAKkB,WAAW,WAAY,GAC5B,MACJ,KAAK,GACDlB,EAAKkB,WAAW,MAAO,GACvB,MACJ,KAAK,GACDlB,EAAKkB,WAAW,MAAO,GACvB,MACJ,KAAK,EACL,KAAK,GACDlB,EAAK3B,QAAQ,MAI7B,EAEA2B,EAAKmB,iBAAmB,WAEpB,GAAIvE,EAAKtC,MACL,OAAOsC,EAAKtC,MAAMsC,EAAK7H,MAAMK,MAAOwH,EAAKtH,QACtC,GAAIc,EAAW,CAClB,IAAIlB,EAAOG,EAAOuH,EAAK7H,MAAMK,MAAOwH,EAAKtH,OAAQsH,EAAKjC,cACtD,OAAQzF,GAAQA,EAAKkM,UAAalM,EAAKmM,SAAW,IACtD,CACI,OAAO,IAAIpI,KAAKA,KAAKqB,MAAMsC,EAAK7H,MAAMK,OAE9C,EAEA4K,EAAKsB,eAAiB,SAASxP,GAE3B,IAAIoD,EAEApD,EAAEyP,UAAYvB,IAGlB9K,EAAO8K,EAAKmB,mBACRxJ,EAAOzC,IACT8K,EAAK3B,QAAQnJ,GAEV8K,EAAKG,IACNH,EAAKwB,OAEb,EAEAxB,EAAKyB,cAAgB,WAEjBzB,EAAKwB,MACT,EAEAxB,EAAK0B,cAAgB,WAEjB1B,EAAKwB,MACT,EAEAxB,EAAK2B,aAAe,WAGhB,IAAIC,EAAMrM,EAASsM,cACnB,GACI,GAAI/K,EAAS8K,EAAK,eACd,aAGAA,EAAMA,EAAIvB,YAEbL,EAAKS,KACNT,EAAK8B,GAAKxL,GAAI,WACV0J,EAAKO,MACT,GAAG,KAEPP,EAAKS,IAAK,CACd,EAEAT,EAAK+B,SAAW,SAASjQ,GAGrB,IAAIE,GADJF,EAAIA,GAAKb,OAAOyC,OACD1B,QAAUF,EAAEsO,WACvBwB,EAAM5P,EACV,GAAKA,EAAL,EAGKqE,GAAqBS,EAAS9E,EAAQ,iBAClCA,EAAOgQ,WACRhQ,EAAOiQ,aAAa,WAAY,WAChC1L,EAASvE,EAAQ,SAAUgO,EAAKY,aAGxC,GACI,GAAI9J,EAAS8K,EAAK,gBAAkBA,IAAQhF,EAAKsF,QAC7C,aAGAN,EAAMA,EAAIvB,YACdL,EAAKG,IAAMnO,IAAW4K,EAAKsF,SAAWN,IAAQhF,EAAKsF,SACnDlC,EAAKO,MAdT,CAgBJ,EAEAP,EAAKxJ,GAAKjB,EAAS4M,cAAc,OACjCnC,EAAKxJ,GAAGQ,UAAY,eAAiB4F,EAAKtB,MAAQ,UAAY,KAAOsB,EAAKP,MAAQ,IAAMO,EAAKP,MAAQ,IAErG9F,EAASyJ,EAAKxJ,GAAI,YAAawJ,EAAKE,cAAc,GAClD3J,EAASyJ,EAAKxJ,GAAI,WAAYwJ,EAAKE,cAAc,GACjD3J,EAASyJ,EAAKxJ,GAAI,SAAUwJ,EAAKY,WAE7BhE,EAAKF,eACLnG,EAAShB,EAAU,UAAWyK,EAAKe,cAGnCnE,EAAK7H,QACD6H,EAAKf,UACLe,EAAKf,UAAUuG,YAAYpC,EAAKxJ,IACzBoG,EAAK1C,MACZ3E,EAAS8M,KAAKD,YAAYpC,EAAKxJ,IAE/BoG,EAAK7H,MAAMsL,WAAWiC,aAAatC,EAAKxJ,GAAIoG,EAAK7H,MAAMwN,aAE3DhM,EAASqG,EAAK7H,MAAO,SAAUiL,EAAKsB,gBAE/B1E,EAAKrC,cACNqC,EAAKrC,YAAcyF,EAAKmB,mBACxBvE,EAAKpC,gBAAiB,IAI9B,IAAIgI,EAAU5F,EAAKrC,YAEf5C,EAAO6K,GACH5F,EAAKpC,eACLwF,EAAK3B,QAAQmE,GAAS,GAEtBxC,EAAKyC,SAASD,GAGlBxC,EAAKyC,SAAS,IAAIxJ,MAGlB2D,EAAK1C,OACLvF,KAAK4L,OACLP,EAAKxJ,GAAGQ,WAAa,YACrBT,EAASqG,EAAKsF,QAAS,QAASlC,EAAK0B,eACrCnL,EAASqG,EAAKsF,QAAS,QAASlC,EAAKyB,eACrClL,EAASqG,EAAKsF,QAAS,OAAQlC,EAAK2B,eAEpChN,KAAK6M,MAEb,EAilBA,OA3kBA1M,EAAQ0C,UAAY,CAMhByI,OAAQ,SAASF,GAERpL,KAAK4K,KACN5K,KAAK4K,GAAK7G,EAAO,CAAC,EAAGuB,GAAU,IAGnC,IAAI2C,EAAOlE,EAAO/D,KAAK4K,GAAIQ,GAAS,GAEpCnD,EAAKtB,QAAUsB,EAAKtB,MAEpBsB,EAAK7H,MAAS6H,EAAK7H,OAAS6H,EAAK7H,MAAMiE,SAAY4D,EAAK7H,MAAQ,KAEhE6H,EAAKP,MAAgC,iBAAhBO,EAAKP,OAAuBO,EAAKP,MAAQO,EAAKP,MAAQ,KAE3EO,EAAK1C,cAA0BrH,IAAf+J,EAAK1C,MAAsB0C,EAAK7H,OAAS6H,EAAK1C,MAAQ0C,EAAK7H,OAE3E6H,EAAKsF,QAAWtF,EAAKsF,SAAWtF,EAAKsF,QAAQlJ,SAAY4D,EAAKsF,QAAUtF,EAAK7H,MAE7E6H,EAAK8F,kBAAoB9F,EAAK8F,gBAE9B9F,EAAK+F,aAA8C,mBAAvB/F,EAAK+F,aAA+B/F,EAAK+F,aAAe,KAEpF,IAAIC,EAAMC,SAASjG,EAAKjB,eAAgB,KAAO,EAmB/C,GAlBAiB,EAAKjB,eAAiBiH,EAAM,EAAI,EAAIA,EAE/BjL,EAAOiF,EAAKhC,WACbgC,EAAKhC,SAAU,GAEdjD,EAAOiF,EAAK/B,WACb+B,EAAK/B,SAAU,GAEd+B,EAAKhC,SAAWgC,EAAK/B,SAAY+B,EAAK/B,QAAU+B,EAAKhC,UACtDgC,EAAK/B,QAAU+B,EAAKhC,SAAU,GAE9BgC,EAAKhC,SACLjG,KAAKmO,WAAWlG,EAAKhC,SAErBgC,EAAK/B,SACLlG,KAAKoO,WAAWnG,EAAK/B,SAGrBxD,EAAQuF,EAAK5H,WAAY,CACzB,IAAIgO,GAAW,IAAI/J,MAAOsF,cAAgB,GAC1C3B,EAAK5H,UAAU,GAAK6N,SAASjG,EAAK5H,UAAU,GAAI,KAAOgO,EACvDpG,EAAK5H,UAAU,GAAK6N,SAASjG,EAAK5H,UAAU,GAAI,KAAOgO,CAC3D,MACIpG,EAAK5H,UAAY6E,KAAKE,IAAI8I,SAASjG,EAAK5H,UAAW,MAAQiF,EAASjF,UAChE4H,EAAK5H,UAAY,MACjB4H,EAAK5H,UAAY,KAIzB,OAAO4H,CACX,EAKAnF,SAAU,SAASnC,GAGf,OADAA,EAASA,GAAUX,KAAK4K,GAAGjK,OACtBqC,EAAOhD,KAAKsO,IAGbtO,KAAK4K,GAAG9H,SACH9C,KAAK4K,GAAG9H,SAAS9C,KAAKsO,GAAI3N,GAE/Bc,EACKf,EAAOV,KAAKsO,IAAI3N,OAAOA,GAEzBX,KAAKsO,GAAGC,eARJ,EASf,EAKAC,UAAW,WAEP,OAAO/M,EAAYf,EAAOV,KAAKsO,IAAM,IACzC,EAKAG,UAAW,SAASlO,EAAMmO,GAElBjN,GAAaf,EAAOiO,SAASpO,IAC7BP,KAAK0J,QAAQnJ,EAAKmM,SAAUgC,EAEpC,EAKArF,QAAS,WAEL,OAAOrG,EAAOhD,KAAKsO,IAAM,IAAIhK,KAAKtE,KAAKsO,GAAGpL,WAAa,IAC3D,EAKAwG,QAAS,SAASnJ,EAAMmO,GAEpB,IAAKnO,EAQD,OAPAP,KAAKsO,GAAK,KAENtO,KAAK4K,GAAGxK,QACRJ,KAAK4K,GAAGxK,MAAMK,MAAQ,GACtB+D,EAAUxE,KAAK4K,GAAGxK,MAAO,SAAU,CAAEwM,QAAS5M,QAG3CA,KAAK4O,OAKhB,GAHoB,iBAATrO,IACPA,EAAO,IAAI+D,KAAKA,KAAKqB,MAAMpF,KAE1ByC,EAAOzC,GAAZ,CAIA,IAAIsO,EAAM7O,KAAK4K,GAAG3E,QACd6I,EAAM9O,KAAK4K,GAAG1E,QAEdlD,EAAO6L,IAAQtO,EAAOsO,EACtBtO,EAAOsO,EACA7L,EAAO8L,IAAQvO,EAAOuO,IAC7BvO,EAAOuO,GAGX9O,KAAKsO,GAAK,IAAIhK,KAAK/D,EAAK2C,WACxBQ,EAAgB1D,KAAKsO,IACrBtO,KAAK8N,SAAS9N,KAAKsO,IAEftO,KAAK4K,GAAGxK,QACRJ,KAAK4K,GAAGxK,MAAMK,MAAQT,KAAK8C,WAC3B0B,EAAUxE,KAAK4K,GAAGxK,MAAO,SAAU,CAAEwM,QAAS5M,QAE7C0O,GAA+C,mBAArB1O,KAAK4K,GAAGtK,UACnCN,KAAK4K,GAAGtK,SAASyC,KAAK/C,KAAMA,KAAKqJ,UApBrC,CAsBJ,EAKA0F,MAAO,WAEH/O,KAAK0J,QAAQ,KACjB,EAKAoE,SAAU,SAASvN,GAEf,IAAIyO,GAAc,EAElB,GAAKhM,EAAOzC,GAAZ,CAIA,GAAIP,KAAKiP,UAAW,CAChB,IAAIC,EAAmB,IAAI5K,KAAKtE,KAAKiP,UAAU,GAAG1L,KAAMvD,KAAKiP,UAAU,GAAGxL,MAAO,GAC7E0L,EAAkB,IAAI7K,KAAKtE,KAAKiP,UAAUjP,KAAKiP,UAAUhR,OAAO,GAAGsF,KAAMvD,KAAKiP,UAAUjP,KAAKiP,UAAUhR,OAAO,GAAGwF,MAAO,GACxH2L,EAAc7O,EAAK2C,UAEvBiM,EAAgBE,SAASF,EAAgBG,WAAW,GACpDH,EAAgBzF,QAAQyF,EAAgB9F,UAAU,GAClD2F,EAAeI,EAAcF,EAAiBhM,WAAaiM,EAAgBjM,UAAYkM,CAC3F,CAEIJ,IACAhP,KAAKiP,UAAY,CAAC,CACdxL,MAAOlD,EAAK+O,WACZ/L,KAAMhD,EAAKqJ,gBAEc,UAAzB5J,KAAK4K,GAAG3D,eACRjH,KAAKiP,UAAU,GAAGxL,OAAS,EAAIzD,KAAK4K,GAAG5D,iBAI/ChH,KAAKuP,iBAtBL,CAuBJ,EAEAhD,WAAY,SAASiD,EAAMxF,GAEvB,IAGIyF,EAHArM,EAAMpD,KAAKqJ,WAAa,IAAI/E,KAC5BoL,EAA4B,GAAfxB,SAASlE,GAAS,GAAG,GAAG,IAI5B,QAATwF,EACAC,EAAS,IAAInL,KAAKlB,EAAIuM,UAAYD,GAClB,aAATF,IACPC,EAAS,IAAInL,KAAKlB,EAAIuM,UAAYD,IAGtC1P,KAAK0J,QAAQ+F,EACjB,EAEAF,gBAAiB,WACbvP,KAAKiP,UAAU,GAAKjK,EAAehF,KAAKiP,UAAU,IAClD,IAAK,IAAI5E,EAAI,EAAGA,EAAIrK,KAAK4K,GAAG5D,eAAgBqD,IACxCrK,KAAKiP,UAAU5E,GAAKrF,EAAe,CAC/BvB,MAAOzD,KAAKiP,UAAU,GAAGxL,MAAQ4G,EACjC9G,KAAMvD,KAAKiP,UAAU,GAAG1L,OAGhCvD,KAAK4O,MACT,EAEAgB,UAAW,WAEP5P,KAAK8N,SAAS,IAAIxJ,KACtB,EAKA4H,UAAW,SAASzI,GAEXR,MAAMQ,KACPzD,KAAKiP,UAAU,GAAGxL,MAAQyK,SAASzK,EAAO,IAC1CzD,KAAKuP,kBAEb,EAEAjI,UAAW,WAEPtH,KAAKiP,UAAU,GAAGxL,QAClBzD,KAAKuP,iBACT,EAEA5D,UAAW,WAEP3L,KAAKiP,UAAU,GAAGxL,QAClBzD,KAAKuP,iBACT,EAKApD,SAAU,SAAS5I,GAEVN,MAAMM,KACPvD,KAAKiP,UAAU,GAAG1L,KAAO2K,SAAS3K,EAAM,IACxCvD,KAAKuP,kBAEb,EAKApB,WAAY,SAAS1N,GAEdA,aAAiB6D,MAChBZ,EAAgBjD,GAChBT,KAAK4K,GAAG3E,QAAUxF,EAClBT,KAAK4K,GAAGvE,QAAW5F,EAAMmJ,cACzB5J,KAAK4K,GAAGrE,SAAW9F,EAAM6O,aAEzBtP,KAAK4K,GAAG3E,QAAUX,EAASW,QAC3BjG,KAAK4K,GAAGvE,QAAWf,EAASe,QAC5BrG,KAAK4K,GAAGrE,SAAWjB,EAASiB,SAC5BvG,KAAK4K,GAAGnE,WAAanB,EAASmB,YAGlCzG,KAAK4O,MACT,EAKAR,WAAY,SAAS3N,GAEdA,aAAiB6D,MAChBZ,EAAgBjD,GAChBT,KAAK4K,GAAG1E,QAAUzF,EAClBT,KAAK4K,GAAGtE,QAAU7F,EAAMmJ,cACxB5J,KAAK4K,GAAGpE,SAAW/F,EAAM6O,aAEzBtP,KAAK4K,GAAG1E,QAAUZ,EAASY,QAC3BlG,KAAK4K,GAAGtE,QAAUhB,EAASgB,QAC3BtG,KAAK4K,GAAGpE,SAAWlB,EAASkB,SAC5BxG,KAAK4K,GAAGlE,SAAWpB,EAASoB,UAGhC1G,KAAK4O,MACT,EAEAiB,cAAe,SAASpP,GAEpBT,KAAK4K,GAAGnE,WAAahG,CACzB,EAEAqP,YAAa,SAASrP,GAElBT,KAAK4K,GAAGlE,SAAWjG,CACvB,EAKAmO,KAAM,SAASmB,GAEX,GAAK/P,KAAKwL,IAAOuE,EAAjB,CAGA,IAMIxF,EANAtC,EAAOjI,KAAK4K,GACZvE,EAAU4B,EAAK5B,QACfC,EAAU2B,EAAK3B,QACfC,EAAW0B,EAAK1B,SAChBC,EAAWyB,EAAKzB,SAChBuE,EAAO,GAGP/K,KAAKgQ,IAAM3J,IACXrG,KAAKgQ,GAAK3J,GACLpD,MAAMsD,IAAavG,KAAKiQ,GAAK1J,IAC9BvG,KAAKiQ,GAAK1J,IAGdvG,KAAKgQ,IAAM1J,IACXtG,KAAKgQ,GAAK1J,GACLrD,MAAMuD,IAAaxG,KAAKiQ,GAAKzJ,IAC9BxG,KAAKiQ,GAAKzJ,IAIlB,IAAK,IAAI6D,EAAI,EAAGA,EAAIpC,EAAKjB,eAAgBqD,IACrCE,EAAS,cAAgBrF,KAAKgL,SAASpN,SAAS,IAAIzG,QAAQ,WAAY,IAAI8T,OAAO,EAAG,GACtFpF,GAAQ,4BAA8BZ,EAAYnK,KAAMqK,EAAGrK,KAAKiP,UAAU5E,GAAG9G,KAAMvD,KAAKiP,UAAU5E,GAAG5G,MAAOzD,KAAKiP,UAAU,GAAG1L,KAAMgH,GAAUvK,KAAKoQ,OAAOpQ,KAAKiP,UAAU5E,GAAG9G,KAAMvD,KAAKiP,UAAU5E,GAAG5G,MAAO8G,GAAU,SAGzNvK,KAAK6B,GAAGwO,UAAYtF,EAEhB9C,EAAK1C,OACkB,WAApB0C,EAAK7H,MAAMkQ,MACV3O,GAAI,WACAsG,EAAKsF,QAAQgD,OACjB,GAAG,GAImB,mBAAnBvQ,KAAK4K,GAAG9C,QACf9H,KAAK4K,GAAG9C,OAAO9H,MAGfiI,EAAK1C,OAEL0C,EAAK7H,MAAMkN,aAAa,aAAcrF,EAAKzC,UA3C/C,CA6CJ,EAEAgL,eAAgB,WAEZ,IAAIpQ,EAAO6M,EAAKwD,EAAOC,EAAQC,EAAeC,EAAgBC,EAAWC,EAAMC,EAAKC,EAAYC,EAAaC,EAE7G,IAAIlR,KAAK4K,GAAG1D,UAAZ,CAcA,GAZAlH,KAAK6B,GAAGsP,MAAM1L,SAAW,WAGzBwH,EADA7M,EAAQJ,KAAK4K,GAAG2C,QAEhBkD,EAAQzQ,KAAK6B,GAAGuP,YAChBV,EAAS1Q,KAAK6B,GAAGwP,aACjBV,EAAgBrU,OAAOgV,YAAc1Q,EAAS2Q,gBAAgBC,YAC9DZ,EAAiBtU,OAAOmV,aAAe7Q,EAAS2Q,gBAAgBG,aAChEb,EAAYvU,OAAOqV,aAAe/Q,EAAS8M,KAAKmD,WAAajQ,EAAS2Q,gBAAgBV,UACtFI,GAAc,EACdC,GAAgB,EAE2B,mBAAhC9Q,EAAMwR,sBAEbd,GADAE,EAAa5Q,EAAMwR,yBACDd,KAAOxU,OAAOuV,YAChCd,EAAMC,EAAWc,OAASxV,OAAOqV,iBAIjC,IAFAb,EAAO7D,EAAI8E,WACXhB,EAAO9D,EAAI+E,UAAY/E,EAAIoE,aACpBpE,EAAMA,EAAIgF,cACbnB,GAAQ7D,EAAI8E,WACZhB,GAAQ9D,EAAI+E,WAKfhS,KAAK4K,GAAGlF,YAAcoL,EAAOL,EAAQE,GAElC3Q,KAAK4K,GAAGnF,SAASnD,QAAQ,UAAY,GACrCwO,EAAOL,EAAQrQ,EAAMgR,YAAc,KAGvCN,EAAOA,EAAOL,EAAQrQ,EAAMgR,YAC5BH,GAAc,IAEbjR,KAAK4K,GAAGlF,YAAcqL,EAAML,EAASE,EAAiBC,GAEnD7Q,KAAK4K,GAAGnF,SAASnD,QAAQ,QAAU,GACnCyO,EAAML,EAAStQ,EAAMiR,aAAe,KAGxCN,EAAMA,EAAML,EAAStQ,EAAMiR,aAC3BH,GAAgB,GAGpBlR,KAAK6B,GAAGsP,MAAML,KAAOA,EAAO,KAC5B9Q,KAAK6B,GAAGsP,MAAMJ,IAAMA,EAAM,KAE1BxO,EAASvC,KAAK6B,GAAIoP,EAAc,eAAiB,iBACjD1O,EAASvC,KAAK6B,GAAIqP,EAAgB,iBAAmB,eACrD1O,EAAYxC,KAAK6B,GAAKoP,EAA+B,gBAAjB,gBACpCzO,EAAYxC,KAAK6B,GAAKqP,EAAmC,cAAnB,iBArDT,CAsDjC,EAKAd,OAAQ,SAAS7M,EAAME,EAAO8G,GAE1B,IAAItC,EAASjI,KAAK4K,GACdsH,EAAS,IAAI5N,KACb0F,EAASxG,EAAeD,EAAME,GAC9B0O,EAAS,IAAI7N,KAAKf,EAAME,EAAO,GAAGJ,SAClCqB,EAAS,GACT0N,EAAS,GACb1O,EAAgBwO,GACZjK,EAAKnC,SAAW,IAChBqM,GAAUlK,EAAKnC,UACF,IACTqM,GAAU,GAUlB,IAPA,IAAI9K,EAA0B,IAAV5D,EAAc,GAAKA,EAAQ,EAC3C6D,EAAsB,KAAV7D,EAAe,EAAIA,EAAQ,EACvC4O,EAAgC,IAAV5O,EAAcF,EAAO,EAAIA,EAC/C+O,EAA4B,KAAV7O,EAAeF,EAAO,EAAIA,EAC5CgP,EAAsB/O,EAAe6O,EAAqBhL,GAC1DmL,EAAQxI,EAAOmI,EACfM,EAAQD,EACNC,EAAQ,GACVA,GAAS,EAEbD,GAAS,EAAIC,EAEb,IADA,IAAIC,GAAiB,EACZlI,EAAI,EAAGmI,EAAI,EAAGnI,EAAIgI,EAAOhI,IAClC,CACI,IAAIpH,EAAM,IAAIkB,KAAKf,EAAME,EAAY+G,EAAI2H,EAAT,GAC5B1J,IAAazF,EAAOhD,KAAKsO,KAAM1K,EAAaR,EAAKpD,KAAKsO,IACtD9F,EAAU5E,EAAaR,EAAK8O,GAC5BxJ,GAAwD,IAA7CT,EAAKN,OAAOrF,QAAQc,EAAImL,gBACnCjG,EAAUkC,EAAI2H,GAAU3H,GAAMR,EAAOmI,EACrCS,EAAiBpI,EAAI2H,EAAT,EACZU,EAAcpP,EACdqP,EAAavP,EACbqF,EAAeX,EAAKxB,YAAc7C,EAAaqE,EAAKxB,WAAYrD,GAChEyF,EAAaZ,EAAKvB,UAAY9C,EAAaqE,EAAKvB,SAAUtD,GAC1DuF,EAAYV,EAAKxB,YAAcwB,EAAKvB,UAAYuB,EAAKxB,WAAarD,GAAOA,EAAM6E,EAAKvB,SAMpF4B,IACIkC,EAAI2H,GACJS,EAAYL,EAAsBK,EAClCC,EAAcxL,EACdyL,EAAaT,IAEbO,GAAwB5I,EACxB6I,EAAcvL,EACdwL,EAAaR,IAIrB,IAAIS,EAAY,CACR3P,IAAKwP,EACLnP,MAAOoP,EACPtP,KAAMuP,EACNpK,SAAUA,EACVD,WAAYA,EACZD,QAASA,EACTD,WAxBUN,EAAKhC,SAAW7C,EAAM6E,EAAKhC,SAC3BgC,EAAK/B,SAAW9C,EAAM6E,EAAK/B,SAC3B+B,EAAK8F,iBAAmB5K,EAAUC,IAClC6E,EAAK+F,cAAgB/F,EAAK+F,aAAa5K,GAsBjDkF,QAASA,EACTM,aAAcA,EACdC,WAAYA,EACZF,UAAWA,EACX7B,gCAAiCmB,EAAKnB,gCACtCC,2CAA4CkB,EAAKlB,4CAGrDkB,EAAK7B,eAAiBqC,IACtBiK,GAAiB,GAGrBN,EAAIpT,KAAKmJ,EAAU4K,IAEP,KAANJ,IACE1K,EAAK9B,gBACLiM,EAAIY,QAAQjK,EAAWyB,EAAI2H,EAAQ1O,EAAOF,EAAM0E,EAAKlC,yBAEzDrB,EAAK1F,KAAK+K,EAAUqI,EAAKnK,EAAKtB,MAAOsB,EAAK7B,cAAesM,IACzDN,EAAM,GACNO,EAAI,EACJD,GAAiB,EAEzB,CACA,OAAOxH,EAAYjD,EAAMvD,EAAM6F,EACnC,EAEA8B,UAAW,WAEP,OAAOrM,KAAKwL,EAChB,EAEAqB,KAAM,WAEG7M,KAAKqM,cACNrM,KAAKwL,IAAK,EACVxL,KAAK4O,OACLpM,EAAYxC,KAAK6B,GAAI,aACjB7B,KAAK4K,GAAGrF,QACR3D,EAAShB,EAAU,QAASZ,KAAKoN,UACjCpN,KAAKwQ,kBAEqB,mBAAnBxQ,KAAK4K,GAAGhD,QACf5H,KAAK4K,GAAGhD,OAAO7E,KAAK/C,MAGhC,EAEA4L,KAAM,WAEF,IAAIqH,EAAIjT,KAAKwL,IACH,IAANyH,IACIjT,KAAK4K,GAAGrF,OACRtD,EAAYrB,EAAU,QAASZ,KAAKoN,UAGnCpN,KAAK4K,GAAG1D,YACTlH,KAAK6B,GAAGsP,MAAM1L,SAAW,SACzBzF,KAAK6B,GAAGsP,MAAML,KAAO,OACrB9Q,KAAK6B,GAAGsP,MAAMJ,IAAM,QAExBxO,EAASvC,KAAK6B,GAAI,aAClB7B,KAAKwL,IAAK,OACAtN,IAAN+U,GAA8C,mBAApBjT,KAAK4K,GAAG/C,SAClC7H,KAAK4K,GAAG/C,QAAQ9E,KAAK/C,MAGjC,EAKAkT,QAAS,WAEL,IAAIjL,EAAOjI,KAAK4K,GAEhB5K,KAAK4L,OACL3J,EAAYjC,KAAK6B,GAAI,YAAa7B,KAAKuL,cAAc,GACrDtJ,EAAYjC,KAAK6B,GAAI,WAAY7B,KAAKuL,cAAc,GACpDtJ,EAAYjC,KAAK6B,GAAI,SAAU7B,KAAKiM,WAChChE,EAAKF,eACL9F,EAAYrB,EAAU,UAAWZ,KAAKoM,cAEtCnE,EAAK7H,QACL6B,EAAYgG,EAAK7H,MAAO,SAAUJ,KAAK2M,gBACnC1E,EAAK1C,QACLtD,EAAYgG,EAAKsF,QAAS,QAASvN,KAAK+M,eACxC9K,EAAYgG,EAAKsF,QAAS,QAASvN,KAAK8M,eACxC7K,EAAYgG,EAAKsF,QAAS,OAAQvN,KAAKgN,gBAG3ChN,KAAK6B,GAAG6J,YACR1L,KAAK6B,GAAG6J,WAAWyH,YAAYnT,KAAK6B,GAE5C,GAIG1B,CACX,CAlwCyBmB,CAAQZ,EAajC,CAtBA","sources":["webpack://top10/./wwwroot/Content/scripts/src/util/track.ts","webpack://top10/./wwwroot/Content/scripts/src/app/ui/track/umbraco-form.ts","webpack://top10/./wwwroot/Content/scripts/src/app/ui/form/form.umbraco.js","webpack://top10/./node_modules/pikaday/pikaday.js"],"sourcesContent":["/* util/track */\n\n// Intended for easily tracking events using Google Tag Manager's dataLayer\n\n// This declaration is necessary to tell TypeScript about window.dataLayer\ndeclare global {\n\tinterface Window {\n\t\tdataLayer: any[];\n\t}\n}\n\nwindow.dataLayer = window.dataLayer || [];\n\n/**\n * Event details for Google Analytics Universal,\n * with optional properties for GA4. The GA4 properties\n * should be in snake_case.\n */\ninterface IEventDetails {\n\tcategory: string,\n\taction: string,\n\tlabel: string,\n\n\tga4EventName?: string,\n\tga4EventLabel?: string,\n}\n\n/**\n * Checks if a given value is an EventDetails.\n */\nfunction _isEventDetails(testVal: unknown): testVal is IEventDetails {\n\tconst val = testVal as IEventDetails;\n\n\tif (!val) {\n\t\treturn false;\n\t}\n\n\tif (!(val.category && typeof val.category === 'string')) {\n\t\treturn false;\n\t}\n\n\tif (!(val.action && typeof val.action === 'string')) {\n\t\treturn false;\n\t}\n\n\tif (!(val.label && typeof val.label === 'string')) {\n\t\treturn false;\n\t}\n\n\tif (val.ga4EventName && typeof val.ga4EventName !== 'string') {\n\t\treturn false;\n\t}\n\n\tif (val.ga4EventLabel && typeof val.ga4EventLabel !== 'string') {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n/**\n * Convert a string to snake_case.\n */\nfunction _toSnakeCase(str: string): string {\n\tconst snakeString = str.toLowerCase().replace(/\\s+/g, '_');\n\n\treturn snakeString;\n}\n\n/**\n * Track a GA event.\n */\nfunction trackEvent(eventDetails: IEventDetails): void {\n\t// Use the same name for each event to minimise setup in GTM\n\tconst event = 'customEvent';\n\n\tif (eventDetails?.ga4EventName) {\n\t\teventDetails.ga4EventName = _toSnakeCase(eventDetails.ga4EventName);\n\t}\n\n\tif (eventDetails?.ga4EventLabel) {\n\t\teventDetails.ga4EventLabel = _toSnakeCase(eventDetails.ga4EventLabel);\n\t}\n\n\tif (_isEventDetails(eventDetails)) {\n\t\tconst eventObj = {\n\t\t\tevent,\n\t\t\teventDetails,\n\t\t};\n\n\t\twindow.dataLayer.push(eventObj);\n\t}\n}\n\nexport {\n\tIEventDetails,\n\n\ttrackEvent as event,\n};\n","/* app/ui/track/umbraco-form */\n\nimport { listen } from 'Util/core';\nimport * as track from 'Util/track';\n\nconst selectors = Object.freeze({\n\tformWrapper: '.js-track__umbraco-form',\n\tform: `.js-track__umbraco-form form`,\n\terrorField: '.input-validation-error',\n} as const);\n\nconst dataAttributes = Object.freeze({\n\tformName: 'data-track-form-name',\n} as const);\n\n/**\n * The duration (in milliseconds) to listen for successful form submissions following the 'submit' event.\n */\nconst listenDuration = 10;\n\n/**\n * The Umbraco Form that is being checked for submission.\n */\nlet $currentForm: HTMLFormElement | null = null;\n\n/**\n * Whether or not the current submission being listened to has been detected as being successful.\n */\nlet submissionDetected = false;\n\n/**\n * Initialise the Umbraco Form tracking module.\n */\nfunction init() {\n\t_initEvents();\n}\n\n/**\n * Bind event listeners for the Umbraco Form tracking module.\n */\nfunction _initEvents() {\n\tlisten(selectors.form, 'submit', _submitEvent);\n}\n\n/**\n * Callback for the form submit event.\n */\nfunction _submitEvent(e: SubmitEvent) {\n\t// This is called before Umbraco Forms' submit handler, so errors are not yet shown. There are three potential outcomes from this:\n\t// A. The validation fails, preventing the default submit action and marking forms as being in an error state.\n\t// B. The validation succeeds, allowing the default submit action to take place and reloading the page.\n\t// C. The valiation succeeds, but the default submit action is still prevented so the form can be replaced with a message without reloading the page.\n\n\t/** The form currently being submitted */\n\tconst $form = e.target;\n\n\tif ($form && $form instanceof HTMLFormElement && $form.matches(selectors.form)) {\n\t\tsubmissionDetected = false;\n\t\t_rememberCurrentForm($form);\n\n\t\t// A. The validation fails\n\t\t// Because we don't need to track validation failing, we can ignore this state.\n\n\t\t// B. The default action occurs\n\t\t// This will trigger an unload event immediately, so we can detect it. If it doesn't happen immediately, stop listening\n\t\t_listenForDefaultFormAction();\n\n\t\t// C. The form it replaced without a page reload\n\t\t_listenForFormReplacement();\n\t}\n}\n\nfunction _rememberCurrentForm($form: HTMLFormElement) {\n\t$currentForm = $form;\n\twindow.setTimeout(() => { $currentForm = null }, listenDuration);\n}\n\n/**\n * Set up a listener for the 'unload' event to see if the default form submission causes a page reload. Only listen for listenDuration.\n */\nfunction _listenForDefaultFormAction() {\n\twindow.addEventListener('beforeunload', _formSubmitted);\n\n\twindow.setTimeout(() => { window.removeEventListener('beforeunload', _formSubmitted) }, listenDuration);\n}\n\n/**\n * After the main thread is complete, check if the form is in an error state. If not, assume it has been successfully submitted.\n */\nfunction _listenForFormReplacement() {\n\twindow.setTimeout(() => {\n\t\tconst errorState = _isFormInErrorState();\n\n\t\tif (errorState === false) {\n\t\t\t// The form is not in an error state, so it was submitted successfully\n\t\t\t_formSubmitted();\n\t\t}\n\t}, 0);\n}\n\n/**\n * Checks if a given Umbraco Form is in an error state.\n */\nfunction _isFormInErrorState(): boolean {\n\tlet errorState = false;\n\n\tif ($currentForm?.querySelector(selectors.errorField)) {\n\t\terrorState = true;\n\t}\n\n\treturn errorState;\n}\n\n/**\n * Get the name of a given Umbraco Form.\n */\nfunction _getFormName($form = $currentForm): string | undefined {\n\tconst $wrapper = $form?.closest(selectors.formWrapper);\n\tif ($wrapper) {\n\t\tconst formName = $wrapper.getAttribute(dataAttributes.formName);\n\t\tif (formName) {\n\t\t\treturn formName;\n\t\t}\n\t}\n}\n\n/**\n * Track a form submission.\n */\nfunction _formSubmitted() {\n\tif (submissionDetected === false) {\n\t\tsubmissionDetected = true;\n\n\t\tconst formName = _getFormName();\n\t\tif (formName) {\n\t\t\tconst eventObj: track.IEventDetails = {\n\t\t\t\tcategory: 'Form',\n\t\t\t\taction: 'Submit',\n\t\t\t\tlabel: formName,\n\n\t\t\t\tga4EventLabel: formName,\n\t\t\t\tga4EventName: 'umbraco_form_submit',\n\t\t\t};\n\n\t\t\ttrack.event(eventObj);\n\t\t}\n\t}\n}\n\nconst Track = {\n\tinit\n};\n\nexport { Track };\n","/* app/ui/form/form.umbraco */\n\nimport $ from 'jquery';\n\nimport moment from 'moment';\nimport Pikaday from 'pikaday';\n\n// Umbraco Forms JS is loaded separately in _Layout.cshtml\n\nimport { Track as UmbracoFormTracking } from 'App/track/umbraco-form';\n\nimport * as util from 'Util/core';\n\nvar selectors = Object.freeze({\n\tumbracoForm: '.umbraco-forms-form form',\n\terrorMessage: '.field-validation-error',\n\tformField: '.umbraco-forms-field',\n});\n\nvar UmbracoForms = {\n\tinit: function () {\n\t\tUmbracoForms.initTracking();\n\n\t\tvar $umbracoForms = $('.js-umbraco-form');\n\n\t\tif ($umbracoForms.length) {\n\t\t\tvar $datepickers = $umbracoForms.find('.datepickerfield');\n\t\t\tif ($datepickers.length) {\n\t\t\t\t$datepickers.each(function () {\n\t\t\t\t\tvar $datepicker = $(this);\n\n\t\t\t\t\tif (window.matchMedia('(pointer: coarse)').matches) {\n\t\t\t\t\t\t$datepicker.attr('readonly', 'readonly');\n\t\t\t\t\t}\n\t\t\t\t\tnew Pikaday({\n\t\t\t\t\t\tfield: this,\n\t\t\t\t\t\tyearRange: 10,\n\t\t\t\t\t\tonSelect: function(date) {\n\t\t\t\t\t\t\tsetShadow($datepicker[0].id.replace(\"_1\", \"\"), date);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction setShadow(id, date) {\n\t\t\t\tvar value = moment(date).format('YYYY-MM-DD');\n\t\t\t\tvar field = document.getElementById(id);\n\t\t\t\tfield.value = value;\n\t\t\t}\n\n\t\t\t$(selectors.umbracoForm).on('submit', function (event) {\n\t\t\t\tvar $form = $(event.target);\n\n\t\t\t\t// Make asynchronous to let other submit handlers complete\n\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\tvar $errorMessages = $form.find( selectors.errorMessage );\n\t\t\t\t\tvar $firstErrorField;\n\n\t\t\t\t\tif ($errorMessages.length) {\n\t\t\t\t\t\t$firstErrorField = $errorMessages.eq(0).closest(selectors.formField);\n\t\t\t\t\t\tutil.scrollToElm( $( $firstErrorField[0] ), 100 );\n\t\t\t\t\t}\n\t\t\t\t}, 0);\n\t\t\t});\n\t\t}\n\t},\n\n\tinitTracking: function () {\n\t\tif (document.querySelector('.js-track__umbraco-form')) {\n\t\t\tUmbracoFormTracking.init();\n\t\t}\n\t},\n};\n\nexport { UmbracoForms };\n","/*!\n * Pikaday\n *\n * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/Pikaday/Pikaday\n */\n\n(function (root, factory)\n{\n    'use strict';\n\n    var moment;\n    if (typeof exports === 'object') {\n        // CommonJS module\n        // Load moment.js as an optional dependency\n        try { moment = require('moment'); } catch (e) {}\n        module.exports = factory(moment);\n    } else if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(function (req)\n        {\n            // Load moment.js as an optional dependency\n            var id = 'moment';\n            try { moment = req(id); } catch (e) {}\n            return factory(moment);\n        });\n    } else {\n        root.Pikaday = factory(root.moment);\n    }\n}(this, function (moment)\n{\n    'use strict';\n\n    /**\n     * feature detection and helper functions\n     */\n    var hasMoment = typeof moment === 'function',\n\n    hasEventListeners = !!window.addEventListener,\n\n    document = window.document,\n\n    sto = window.setTimeout,\n\n    addEvent = function(el, e, callback, capture)\n    {\n        if (hasEventListeners) {\n            el.addEventListener(e, callback, !!capture);\n        } else {\n            el.attachEvent('on' + e, callback);\n        }\n    },\n\n    removeEvent = function(el, e, callback, capture)\n    {\n        if (hasEventListeners) {\n            el.removeEventListener(e, callback, !!capture);\n        } else {\n            el.detachEvent('on' + e, callback);\n        }\n    },\n\n    trim = function(str)\n    {\n        return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g,'');\n    },\n\n    hasClass = function(el, cn)\n    {\n        return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1;\n    },\n\n    addClass = function(el, cn)\n    {\n        if (!hasClass(el, cn)) {\n            el.className = (el.className === '') ? cn : el.className + ' ' + cn;\n        }\n    },\n\n    removeClass = function(el, cn)\n    {\n        el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' '));\n    },\n\n    isArray = function(obj)\n    {\n        return (/Array/).test(Object.prototype.toString.call(obj));\n    },\n\n    isDate = function(obj)\n    {\n        return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());\n    },\n\n    isWeekend = function(date)\n    {\n        var day = date.getDay();\n        return day === 0 || day === 6;\n    },\n\n    isLeapYear = function(year)\n    {\n        // solution lifted from date.js (MIT license): https://github.com/datejs/Datejs\n        return ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n    },\n\n    getDaysInMonth = function(year, month)\n    {\n        return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n    },\n\n    setToStartOfDay = function(date)\n    {\n        if (isDate(date)) date.setHours(0,0,0,0);\n    },\n\n    compareDates = function(a,b)\n    {\n        // weak date comparison (use setToStartOfDay(date) to ensure correct result)\n        return a.getTime() === b.getTime();\n    },\n\n    extend = function(to, from, overwrite)\n    {\n        var prop, hasProp;\n        for (prop in from) {\n            hasProp = to[prop] !== undefined;\n            if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) {\n                if (isDate(from[prop])) {\n                    if (overwrite) {\n                        to[prop] = new Date(from[prop].getTime());\n                    }\n                }\n                else if (isArray(from[prop])) {\n                    if (overwrite) {\n                        to[prop] = from[prop].slice(0);\n                    }\n                } else {\n                    to[prop] = extend({}, from[prop], overwrite);\n                }\n            } else if (overwrite || !hasProp) {\n                to[prop] = from[prop];\n            }\n        }\n        return to;\n    },\n\n    fireEvent = function(el, eventName, data)\n    {\n        var ev;\n\n        if (document.createEvent) {\n            ev = document.createEvent('HTMLEvents');\n            ev.initEvent(eventName, true, false);\n            ev = extend(ev, data);\n            el.dispatchEvent(ev);\n        } else if (document.createEventObject) {\n            ev = document.createEventObject();\n            ev = extend(ev, data);\n            el.fireEvent('on' + eventName, ev);\n        }\n    },\n\n    adjustCalendar = function(calendar) {\n        if (calendar.month < 0) {\n            calendar.year -= Math.ceil(Math.abs(calendar.month)/12);\n            calendar.month += 12;\n        }\n        if (calendar.month > 11) {\n            calendar.year += Math.floor(Math.abs(calendar.month)/12);\n            calendar.month -= 12;\n        }\n        return calendar;\n    },\n\n    /**\n     * defaults and localisation\n     */\n    defaults = {\n\n        // bind the picker to a form field\n        field: null,\n\n        // automatically show/hide the picker on `field` focus (default `true` if `field` is set)\n        bound: undefined,\n\n        // data-attribute on the input field with an aria assistance text (only applied when `bound` is set)\n        ariaLabel: 'Use the arrow keys to pick a date',\n\n        // position of the datepicker, relative to the field (default to bottom & left)\n        // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)\n        position: 'bottom left',\n\n        // automatically fit in the viewport even if it means repositioning from the position option\n        reposition: true,\n\n        // the default output format for `.toString()` and `field` value\n        format: 'YYYY-MM-DD',\n\n        // the toString function which gets passed a current date object and format\n        // and returns a string\n        toString: null,\n\n        // used to create date object from current input string\n        parse: null,\n\n        // the initial date to view when first opened\n        defaultDate: null,\n\n        // make the `defaultDate` the initial selected value\n        setDefaultDate: false,\n\n        // first day of week (0: Sunday, 1: Monday etc)\n        firstDay: 0,\n\n        // minimum number of days in the week that gets week number one\n        // default ISO 8601, week 01 is the week with the first Thursday (4)\n        firstWeekOfYearMinDays: 4,\n\n        // the default flag for moment's strict date parsing\n        formatStrict: false,\n\n        // the minimum/earliest date that can be selected\n        minDate: null,\n        // the maximum/latest date that can be selected\n        maxDate: null,\n\n        // number of years either side, or array of upper/lower range\n        yearRange: 10,\n\n        // show week numbers at head of row\n        showWeekNumber: false,\n\n        // Week picker mode\n        pickWholeWeek: false,\n\n        // used internally (don't config outside)\n        minYear: 0,\n        maxYear: 9999,\n        minMonth: undefined,\n        maxMonth: undefined,\n\n        startRange: null,\n        endRange: null,\n\n        isRTL: false,\n\n        // Additional text to append to the year in the calendar title\n        yearSuffix: '',\n\n        // Render the month after year in the calendar title\n        showMonthAfterYear: false,\n\n        // Render days of the calendar grid that fall in the next or previous month\n        showDaysInNextAndPreviousMonths: false,\n\n        // Allows user to select days that fall in the next or previous month\n        enableSelectionDaysInNextAndPreviousMonths: false,\n\n        // how many months are visible\n        numberOfMonths: 1,\n\n        // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)\n        // only used for the first display or when a selected date is not visible\n        mainCalendar: 'left',\n\n        // Specify a DOM element to render the calendar in\n        container: undefined,\n\n        // Blur field when date is selected\n        blurFieldOnSelect : true,\n\n        // internationalization\n        i18n: {\n            previousMonth : 'Previous Month',\n            nextMonth     : 'Next Month',\n            months        : ['January','February','March','April','May','June','July','August','September','October','November','December'],\n            weekdays      : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],\n            weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']\n        },\n\n        // Theme Classname\n        theme: null,\n\n        // events array\n        events: [],\n\n        // callback function\n        onSelect: null,\n        onOpen: null,\n        onClose: null,\n        onDraw: null,\n\n        // Enable keyboard input\n        keyboardInput: true\n    },\n\n\n    /**\n     * templating functions to abstract HTML rendering\n     */\n    renderDayName = function(opts, day, abbr)\n    {\n        day += opts.firstDay;\n        while (day >= 7) {\n            day -= 7;\n        }\n        return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];\n    },\n\n    renderDay = function(opts)\n    {\n        var arr = [];\n        var ariaSelected = 'false';\n        if (opts.isEmpty) {\n            if (opts.showDaysInNextAndPreviousMonths) {\n                arr.push('is-outside-current-month');\n\n                if(!opts.enableSelectionDaysInNextAndPreviousMonths) {\n                    arr.push('is-selection-disabled');\n                }\n\n            } else {\n                return '<td class=\"is-empty\"></td>';\n            }\n        }\n        if (opts.isDisabled) {\n            arr.push('is-disabled');\n        }\n        if (opts.isToday) {\n            arr.push('is-today');\n        }\n        if (opts.isSelected) {\n            arr.push('is-selected');\n            ariaSelected = 'true';\n        }\n        if (opts.hasEvent) {\n            arr.push('has-event');\n        }\n        if (opts.isInRange) {\n            arr.push('is-inrange');\n        }\n        if (opts.isStartRange) {\n            arr.push('is-startrange');\n        }\n        if (opts.isEndRange) {\n            arr.push('is-endrange');\n        }\n        return '<td data-day=\"' + opts.day + '\" class=\"' + arr.join(' ') + '\" aria-selected=\"' + ariaSelected + '\">' +\n                 '<button class=\"pika-button pika-day\" type=\"button\" ' +\n                    'data-pika-year=\"' + opts.year + '\" data-pika-month=\"' + opts.month + '\" data-pika-day=\"' + opts.day + '\">' +\n                        opts.day +\n                 '</button>' +\n               '</td>';\n    },\n\n    isoWeek = function(date, firstWeekOfYearMinDays) {\n        // Ensure we're at the start of the day.\n        date.setHours(0, 0, 0, 0);\n\n        // Thursday in current week decides the year because January 4th\n        // is always in the first week according to ISO8601.\n        var yearDay        = date.getDate(),\n            weekDay        = date.getDay(),\n            dayInFirstWeek = firstWeekOfYearMinDays,\n            dayShift       = dayInFirstWeek - 1, // counting starts at 0\n            daysPerWeek    = 7,\n            prevWeekDay    = function(day) { return (day + daysPerWeek - 1) % daysPerWeek; };\n\n        // Adjust to Thursday in week 1 and count number of weeks from date to week 1.\n        date.setDate(yearDay + dayShift - prevWeekDay(weekDay));\n\n        var jan4th      = new Date(date.getFullYear(), 0, dayInFirstWeek),\n            msPerDay    = 24 * 60 * 60 * 1000,\n            daysBetween = (date.getTime() - jan4th.getTime()) / msPerDay,\n            weekNum     = 1 + Math.round((daysBetween - dayShift + prevWeekDay(jan4th.getDay())) / daysPerWeek);\n\n        return weekNum;\n    },\n\n    renderWeek = function (d, m, y, firstWeekOfYearMinDays) {\n        var date = new Date(y, m, d),\n            week = hasMoment ? moment(date).isoWeek() : isoWeek(date, firstWeekOfYearMinDays);\n\n        return '<td class=\"pika-week\">' + week + '</td>';\n    },\n\n    renderRow = function(days, isRTL, pickWholeWeek, isRowSelected)\n    {\n        return '<tr class=\"pika-row' + (pickWholeWeek ? ' pick-whole-week' : '') + (isRowSelected ? ' is-selected' : '') + '\">' + (isRTL ? days.reverse() : days).join('') + '</tr>';\n    },\n\n    renderBody = function(rows)\n    {\n        return '<tbody>' + rows.join('') + '</tbody>';\n    },\n\n    renderHead = function(opts)\n    {\n        var i, arr = [];\n        if (opts.showWeekNumber) {\n            arr.push('<th></th>');\n        }\n        for (i = 0; i < 7; i++) {\n            arr.push('<th scope=\"col\"><abbr title=\"' + renderDayName(opts, i) + '\">' + renderDayName(opts, i, true) + '</abbr></th>');\n        }\n        return '<thead><tr>' + (opts.isRTL ? arr.reverse() : arr).join('') + '</tr></thead>';\n    },\n\n    renderTitle = function(instance, c, year, month, refYear, randId)\n    {\n        var i, j, arr,\n            opts = instance._o,\n            isMinYear = year === opts.minYear,\n            isMaxYear = year === opts.maxYear,\n            html = '<div id=\"' + randId + '\" class=\"pika-title\" role=\"heading\" aria-live=\"assertive\">',\n            monthHtml,\n            yearHtml,\n            prev = true,\n            next = true;\n\n        for (arr = [], i = 0; i < 12; i++) {\n            arr.push('<option value=\"' + (year === refYear ? i - c : 12 + i - c) + '\"' +\n                (i === month ? ' selected=\"selected\"': '') +\n                ((isMinYear && i < opts.minMonth) || (isMaxYear && i > opts.maxMonth) ? ' disabled=\"disabled\"' : '') + '>' +\n                opts.i18n.months[i] + '</option>');\n        }\n\n        monthHtml = '<div class=\"pika-label\">' + opts.i18n.months[month] + '<select class=\"pika-select pika-select-month\" tabindex=\"-1\">' + arr.join('') + '</select></div>';\n\n        if (isArray(opts.yearRange)) {\n            i = opts.yearRange[0];\n            j = opts.yearRange[1] + 1;\n        } else {\n            i = year - opts.yearRange;\n            j = 1 + year + opts.yearRange;\n        }\n\n        for (arr = []; i < j && i <= opts.maxYear; i++) {\n            if (i >= opts.minYear) {\n                arr.push('<option value=\"' + i + '\"' + (i === year ? ' selected=\"selected\"': '') + '>' + (i) + '</option>');\n            }\n        }\n        yearHtml = '<div class=\"pika-label\">' + year + opts.yearSuffix + '<select class=\"pika-select pika-select-year\" tabindex=\"-1\">' + arr.join('') + '</select></div>';\n\n        if (opts.showMonthAfterYear) {\n            html += yearHtml + monthHtml;\n        } else {\n            html += monthHtml + yearHtml;\n        }\n\n        if (isMinYear && (month === 0 || opts.minMonth >= month)) {\n            prev = false;\n        }\n\n        if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {\n            next = false;\n        }\n\n        if (c === 0) {\n            html += '<button class=\"pika-prev' + (prev ? '' : ' is-disabled') + '\" type=\"button\">' + opts.i18n.previousMonth + '</button>';\n        }\n        if (c === (instance._o.numberOfMonths - 1) ) {\n            html += '<button class=\"pika-next' + (next ? '' : ' is-disabled') + '\" type=\"button\">' + opts.i18n.nextMonth + '</button>';\n        }\n\n        return html += '</div>';\n    },\n\n    renderTable = function(opts, data, randId)\n    {\n        return '<table cellpadding=\"0\" cellspacing=\"0\" class=\"pika-table\" role=\"grid\" aria-labelledby=\"' + randId + '\">' + renderHead(opts) + renderBody(data) + '</table>';\n    },\n\n\n    /**\n     * Pikaday constructor\n     */\n    Pikaday = function(options)\n    {\n        var self = this,\n            opts = self.config(options);\n\n        self._onMouseDown = function(e)\n        {\n            if (!self._v) {\n                return;\n            }\n            e = e || window.event;\n            var target = e.target || e.srcElement;\n            if (!target) {\n                return;\n            }\n\n            if (!hasClass(target, 'is-disabled')) {\n                if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty') && !hasClass(target.parentNode, 'is-disabled')) {\n                    self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day')));\n                    if (opts.bound) {\n                        sto(function() {\n                            self.hide();\n                            if (opts.blurFieldOnSelect && opts.field) {\n                                opts.field.blur();\n                            }\n                        }, 100);\n                    }\n                }\n                else if (hasClass(target, 'pika-prev')) {\n                    self.prevMonth();\n                }\n                else if (hasClass(target, 'pika-next')) {\n                    self.nextMonth();\n                }\n            }\n            if (!hasClass(target, 'pika-select')) {\n                // if this is touch event prevent mouse events emulation\n                if (e.preventDefault) {\n                    e.preventDefault();\n                } else {\n                    e.returnValue = false;\n                    return false;\n                }\n            } else {\n                self._c = true;\n            }\n        };\n\n        self._onChange = function(e)\n        {\n            e = e || window.event;\n            var target = e.target || e.srcElement;\n            if (!target) {\n                return;\n            }\n            if (hasClass(target, 'pika-select-month')) {\n                self.gotoMonth(target.value);\n            }\n            else if (hasClass(target, 'pika-select-year')) {\n                self.gotoYear(target.value);\n            }\n        };\n\n        self._onKeyChange = function(e)\n        {\n            e = e || window.event;\n\n            if (self.isVisible()) {\n\n                switch(e.keyCode){\n                    case 13:\n                    case 27:\n                        if (opts.field) {\n                            opts.field.blur();\n                        }\n                        break;\n                    case 37:\n                        self.adjustDate('subtract', 1);\n                        break;\n                    case 38:\n                        self.adjustDate('subtract', 7);\n                        break;\n                    case 39:\n                        self.adjustDate('add', 1);\n                        break;\n                    case 40:\n                        self.adjustDate('add', 7);\n                        break;\n                    case 8:\n                    case 46:\n                        self.setDate(null);\n                        break;\n                }\n            }\n        };\n\n        self._parseFieldValue = function()\n        {\n            if (opts.parse) {\n                return opts.parse(opts.field.value, opts.format);\n            } else if (hasMoment) {\n                var date = moment(opts.field.value, opts.format, opts.formatStrict);\n                return (date && date.isValid()) ? date.toDate() : null;\n            } else {\n                return new Date(Date.parse(opts.field.value));\n            }\n        };\n\n        self._onInputChange = function(e)\n        {\n            var date;\n\n            if (e.firedBy === self) {\n                return;\n            }\n            date = self._parseFieldValue();\n            if (isDate(date)) {\n              self.setDate(date);\n            }\n            if (!self._v) {\n                self.show();\n            }\n        };\n\n        self._onInputFocus = function()\n        {\n            self.show();\n        };\n\n        self._onInputClick = function()\n        {\n            self.show();\n        };\n\n        self._onInputBlur = function()\n        {\n            // IE allows pika div to gain focus; catch blur the input field\n            var pEl = document.activeElement;\n            do {\n                if (hasClass(pEl, 'pika-single')) {\n                    return;\n                }\n            }\n            while ((pEl = pEl.parentNode));\n\n            if (!self._c) {\n                self._b = sto(function() {\n                    self.hide();\n                }, 50);\n            }\n            self._c = false;\n        };\n\n        self._onClick = function(e)\n        {\n            e = e || window.event;\n            var target = e.target || e.srcElement,\n                pEl = target;\n            if (!target) {\n                return;\n            }\n            if (!hasEventListeners && hasClass(target, 'pika-select')) {\n                if (!target.onchange) {\n                    target.setAttribute('onchange', 'return;');\n                    addEvent(target, 'change', self._onChange);\n                }\n            }\n            do {\n                if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) {\n                    return;\n                }\n            }\n            while ((pEl = pEl.parentNode));\n            if (self._v && target !== opts.trigger && pEl !== opts.trigger) {\n                self.hide();\n            }\n        };\n\n        self.el = document.createElement('div');\n        self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : '');\n\n        addEvent(self.el, 'mousedown', self._onMouseDown, true);\n        addEvent(self.el, 'touchend', self._onMouseDown, true);\n        addEvent(self.el, 'change', self._onChange);\n\n        if (opts.keyboardInput) {\n            addEvent(document, 'keydown', self._onKeyChange);\n        }\n\n        if (opts.field) {\n            if (opts.container) {\n                opts.container.appendChild(self.el);\n            } else if (opts.bound) {\n                document.body.appendChild(self.el);\n            } else {\n                opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);\n            }\n            addEvent(opts.field, 'change', self._onInputChange);\n\n            if (!opts.defaultDate) {\n                opts.defaultDate = self._parseFieldValue();\n                opts.setDefaultDate = true;\n            }\n        }\n\n        var defDate = opts.defaultDate;\n\n        if (isDate(defDate)) {\n            if (opts.setDefaultDate) {\n                self.setDate(defDate, true);\n            } else {\n                self.gotoDate(defDate);\n            }\n        } else {\n            self.gotoDate(new Date());\n        }\n\n        if (opts.bound) {\n            this.hide();\n            self.el.className += ' is-bound';\n            addEvent(opts.trigger, 'click', self._onInputClick);\n            addEvent(opts.trigger, 'focus', self._onInputFocus);\n            addEvent(opts.trigger, 'blur', self._onInputBlur);\n        } else {\n            this.show();\n        }\n    };\n\n\n    /**\n     * public Pikaday API\n     */\n    Pikaday.prototype = {\n\n\n        /**\n         * configure functionality\n         */\n        config: function(options)\n        {\n            if (!this._o) {\n                this._o = extend({}, defaults, true);\n            }\n\n            var opts = extend(this._o, options, true);\n\n            opts.isRTL = !!opts.isRTL;\n\n            opts.field = (opts.field && opts.field.nodeName) ? opts.field : null;\n\n            opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null;\n\n            opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field);\n\n            opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field;\n\n            opts.disableWeekends = !!opts.disableWeekends;\n\n            opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null;\n\n            var nom = parseInt(opts.numberOfMonths, 10) || 1;\n            opts.numberOfMonths = nom > 4 ? 4 : nom;\n\n            if (!isDate(opts.minDate)) {\n                opts.minDate = false;\n            }\n            if (!isDate(opts.maxDate)) {\n                opts.maxDate = false;\n            }\n            if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) {\n                opts.maxDate = opts.minDate = false;\n            }\n            if (opts.minDate) {\n                this.setMinDate(opts.minDate);\n            }\n            if (opts.maxDate) {\n                this.setMaxDate(opts.maxDate);\n            }\n\n            if (isArray(opts.yearRange)) {\n                var fallback = new Date().getFullYear() - 10;\n                opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;\n                opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;\n            } else {\n                opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;\n                if (opts.yearRange > 100) {\n                    opts.yearRange = 100;\n                }\n            }\n\n            return opts;\n        },\n\n        /**\n         * return a formatted string of the current selection (using Moment.js if available)\n         */\n        toString: function(format)\n        {\n            format = format || this._o.format;\n            if (!isDate(this._d)) {\n                return '';\n            }\n            if (this._o.toString) {\n              return this._o.toString(this._d, format);\n            }\n            if (hasMoment) {\n              return moment(this._d).format(format);\n            }\n            return this._d.toDateString();\n        },\n\n        /**\n         * return a Moment.js object of the current selection (if available)\n         */\n        getMoment: function()\n        {\n            return hasMoment ? moment(this._d) : null;\n        },\n\n        /**\n         * set the current selection from a Moment.js object (if available)\n         */\n        setMoment: function(date, preventOnSelect)\n        {\n            if (hasMoment && moment.isMoment(date)) {\n                this.setDate(date.toDate(), preventOnSelect);\n            }\n        },\n\n        /**\n         * return a Date object of the current selection\n         */\n        getDate: function()\n        {\n            return isDate(this._d) ? new Date(this._d.getTime()) : null;\n        },\n\n        /**\n         * set the current selection\n         */\n        setDate: function(date, preventOnSelect)\n        {\n            if (!date) {\n                this._d = null;\n\n                if (this._o.field) {\n                    this._o.field.value = '';\n                    fireEvent(this._o.field, 'change', { firedBy: this });\n                }\n\n                return this.draw();\n            }\n            if (typeof date === 'string') {\n                date = new Date(Date.parse(date));\n            }\n            if (!isDate(date)) {\n                return;\n            }\n\n            var min = this._o.minDate,\n                max = this._o.maxDate;\n\n            if (isDate(min) && date < min) {\n                date = min;\n            } else if (isDate(max) && date > max) {\n                date = max;\n            }\n\n            this._d = new Date(date.getTime());\n            setToStartOfDay(this._d);\n            this.gotoDate(this._d);\n\n            if (this._o.field) {\n                this._o.field.value = this.toString();\n                fireEvent(this._o.field, 'change', { firedBy: this });\n            }\n            if (!preventOnSelect && typeof this._o.onSelect === 'function') {\n                this._o.onSelect.call(this, this.getDate());\n            }\n        },\n\n        /**\n         * clear and reset the date\n         */\n        clear: function()\n        {\n            this.setDate(null);\n        },\n\n        /**\n         * change view to a specific date\n         */\n        gotoDate: function(date)\n        {\n            var newCalendar = true;\n\n            if (!isDate(date)) {\n                return;\n            }\n\n            if (this.calendars) {\n                var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),\n                    lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1),\n                    visibleDate = date.getTime();\n                // get the end of the month\n                lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);\n                lastVisibleDate.setDate(lastVisibleDate.getDate()-1);\n                newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate);\n            }\n\n            if (newCalendar) {\n                this.calendars = [{\n                    month: date.getMonth(),\n                    year: date.getFullYear()\n                }];\n                if (this._o.mainCalendar === 'right') {\n                    this.calendars[0].month += 1 - this._o.numberOfMonths;\n                }\n            }\n\n            this.adjustCalendars();\n        },\n\n        adjustDate: function(sign, days) {\n\n            var day = this.getDate() || new Date();\n            var difference = parseInt(days)*24*60*60*1000;\n\n            var newDay;\n\n            if (sign === 'add') {\n                newDay = new Date(day.valueOf() + difference);\n            } else if (sign === 'subtract') {\n                newDay = new Date(day.valueOf() - difference);\n            }\n\n            this.setDate(newDay);\n        },\n\n        adjustCalendars: function() {\n            this.calendars[0] = adjustCalendar(this.calendars[0]);\n            for (var c = 1; c < this._o.numberOfMonths; c++) {\n                this.calendars[c] = adjustCalendar({\n                    month: this.calendars[0].month + c,\n                    year: this.calendars[0].year\n                });\n            }\n            this.draw();\n        },\n\n        gotoToday: function()\n        {\n            this.gotoDate(new Date());\n        },\n\n        /**\n         * change view to a specific month (zero-index, e.g. 0: January)\n         */\n        gotoMonth: function(month)\n        {\n            if (!isNaN(month)) {\n                this.calendars[0].month = parseInt(month, 10);\n                this.adjustCalendars();\n            }\n        },\n\n        nextMonth: function()\n        {\n            this.calendars[0].month++;\n            this.adjustCalendars();\n        },\n\n        prevMonth: function()\n        {\n            this.calendars[0].month--;\n            this.adjustCalendars();\n        },\n\n        /**\n         * change view to a specific full year (e.g. \"2012\")\n         */\n        gotoYear: function(year)\n        {\n            if (!isNaN(year)) {\n                this.calendars[0].year = parseInt(year, 10);\n                this.adjustCalendars();\n            }\n        },\n\n        /**\n         * change the minDate\n         */\n        setMinDate: function(value)\n        {\n            if(value instanceof Date) {\n                setToStartOfDay(value);\n                this._o.minDate = value;\n                this._o.minYear  = value.getFullYear();\n                this._o.minMonth = value.getMonth();\n            } else {\n                this._o.minDate = defaults.minDate;\n                this._o.minYear  = defaults.minYear;\n                this._o.minMonth = defaults.minMonth;\n                this._o.startRange = defaults.startRange;\n            }\n\n            this.draw();\n        },\n\n        /**\n         * change the maxDate\n         */\n        setMaxDate: function(value)\n        {\n            if(value instanceof Date) {\n                setToStartOfDay(value);\n                this._o.maxDate = value;\n                this._o.maxYear = value.getFullYear();\n                this._o.maxMonth = value.getMonth();\n            } else {\n                this._o.maxDate = defaults.maxDate;\n                this._o.maxYear = defaults.maxYear;\n                this._o.maxMonth = defaults.maxMonth;\n                this._o.endRange = defaults.endRange;\n            }\n\n            this.draw();\n        },\n\n        setStartRange: function(value)\n        {\n            this._o.startRange = value;\n        },\n\n        setEndRange: function(value)\n        {\n            this._o.endRange = value;\n        },\n\n        /**\n         * refresh the HTML\n         */\n        draw: function(force)\n        {\n            if (!this._v && !force) {\n                return;\n            }\n            var opts = this._o,\n                minYear = opts.minYear,\n                maxYear = opts.maxYear,\n                minMonth = opts.minMonth,\n                maxMonth = opts.maxMonth,\n                html = '',\n                randId;\n\n            if (this._y <= minYear) {\n                this._y = minYear;\n                if (!isNaN(minMonth) && this._m < minMonth) {\n                    this._m = minMonth;\n                }\n            }\n            if (this._y >= maxYear) {\n                this._y = maxYear;\n                if (!isNaN(maxMonth) && this._m > maxMonth) {\n                    this._m = maxMonth;\n                }\n            }\n\n            for (var c = 0; c < opts.numberOfMonths; c++) {\n                randId = 'pika-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2);\n                html += '<div class=\"pika-lendar\">' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + '</div>';\n            }\n\n            this.el.innerHTML = html;\n\n            if (opts.bound) {\n                if(opts.field.type !== 'hidden') {\n                    sto(function() {\n                        opts.trigger.focus();\n                    }, 1);\n                }\n            }\n\n            if (typeof this._o.onDraw === 'function') {\n                this._o.onDraw(this);\n            }\n\n            if (opts.bound) {\n                // let the screen reader user know to use arrow keys\n                opts.field.setAttribute('aria-label', opts.ariaLabel);\n            }\n        },\n\n        adjustPosition: function()\n        {\n            var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect, leftAligned, bottomAligned;\n\n            if (this._o.container) return;\n\n            this.el.style.position = 'absolute';\n\n            field = this._o.trigger;\n            pEl = field;\n            width = this.el.offsetWidth;\n            height = this.el.offsetHeight;\n            viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n            viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n            scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n            leftAligned = true;\n            bottomAligned = true;\n\n            if (typeof field.getBoundingClientRect === 'function') {\n                clientRect = field.getBoundingClientRect();\n                left = clientRect.left + window.pageXOffset;\n                top = clientRect.bottom + window.pageYOffset;\n            } else {\n                left = pEl.offsetLeft;\n                top  = pEl.offsetTop + pEl.offsetHeight;\n                while((pEl = pEl.offsetParent)) {\n                    left += pEl.offsetLeft;\n                    top  += pEl.offsetTop;\n                }\n            }\n\n            // default position is bottom & left\n            if ((this._o.reposition && left + width > viewportWidth) ||\n                (\n                    this._o.position.indexOf('right') > -1 &&\n                    left - width + field.offsetWidth > 0\n                )\n            ) {\n                left = left - width + field.offsetWidth;\n                leftAligned = false;\n            }\n            if ((this._o.reposition && top + height > viewportHeight + scrollTop) ||\n                (\n                    this._o.position.indexOf('top') > -1 &&\n                    top - height - field.offsetHeight > 0\n                )\n            ) {\n                top = top - height - field.offsetHeight;\n                bottomAligned = false;\n            }\n\n            this.el.style.left = left + 'px';\n            this.el.style.top = top + 'px';\n\n            addClass(this.el, leftAligned ? 'left-aligned' : 'right-aligned');\n            addClass(this.el, bottomAligned ? 'bottom-aligned' : 'top-aligned');\n            removeClass(this.el, !leftAligned ? 'left-aligned' : 'right-aligned');\n            removeClass(this.el, !bottomAligned ? 'bottom-aligned' : 'top-aligned');\n        },\n\n        /**\n         * render HTML for a particular month\n         */\n        render: function(year, month, randId)\n        {\n            var opts   = this._o,\n                now    = new Date(),\n                days   = getDaysInMonth(year, month),\n                before = new Date(year, month, 1).getDay(),\n                data   = [],\n                row    = [];\n            setToStartOfDay(now);\n            if (opts.firstDay > 0) {\n                before -= opts.firstDay;\n                if (before < 0) {\n                    before += 7;\n                }\n            }\n            var previousMonth = month === 0 ? 11 : month - 1,\n                nextMonth = month === 11 ? 0 : month + 1,\n                yearOfPreviousMonth = month === 0 ? year - 1 : year,\n                yearOfNextMonth = month === 11 ? year + 1 : year,\n                daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);\n            var cells = days + before,\n                after = cells;\n            while(after > 7) {\n                after -= 7;\n            }\n            cells += 7 - after;\n            var isWeekSelected = false;\n            for (var i = 0, r = 0; i < cells; i++)\n            {\n                var day = new Date(year, month, 1 + (i - before)),\n                    isSelected = isDate(this._d) ? compareDates(day, this._d) : false,\n                    isToday = compareDates(day, now),\n                    hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false,\n                    isEmpty = i < before || i >= (days + before),\n                    dayNumber = 1 + (i - before),\n                    monthNumber = month,\n                    yearNumber = year,\n                    isStartRange = opts.startRange && compareDates(opts.startRange, day),\n                    isEndRange = opts.endRange && compareDates(opts.endRange, day),\n                    isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,\n                    isDisabled = (opts.minDate && day < opts.minDate) ||\n                                 (opts.maxDate && day > opts.maxDate) ||\n                                 (opts.disableWeekends && isWeekend(day)) ||\n                                 (opts.disableDayFn && opts.disableDayFn(day));\n\n                if (isEmpty) {\n                    if (i < before) {\n                        dayNumber = daysInPreviousMonth + dayNumber;\n                        monthNumber = previousMonth;\n                        yearNumber = yearOfPreviousMonth;\n                    } else {\n                        dayNumber = dayNumber - days;\n                        monthNumber = nextMonth;\n                        yearNumber = yearOfNextMonth;\n                    }\n                }\n\n                var dayConfig = {\n                        day: dayNumber,\n                        month: monthNumber,\n                        year: yearNumber,\n                        hasEvent: hasEvent,\n                        isSelected: isSelected,\n                        isToday: isToday,\n                        isDisabled: isDisabled,\n                        isEmpty: isEmpty,\n                        isStartRange: isStartRange,\n                        isEndRange: isEndRange,\n                        isInRange: isInRange,\n                        showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths,\n                        enableSelectionDaysInNextAndPreviousMonths: opts.enableSelectionDaysInNextAndPreviousMonths\n                    };\n\n                if (opts.pickWholeWeek && isSelected) {\n                    isWeekSelected = true;\n                }\n\n                row.push(renderDay(dayConfig));\n\n                if (++r === 7) {\n                    if (opts.showWeekNumber) {\n                        row.unshift(renderWeek(i - before, month, year, opts.firstWeekOfYearMinDays));\n                    }\n                    data.push(renderRow(row, opts.isRTL, opts.pickWholeWeek, isWeekSelected));\n                    row = [];\n                    r = 0;\n                    isWeekSelected = false;\n                }\n            }\n            return renderTable(opts, data, randId);\n        },\n\n        isVisible: function()\n        {\n            return this._v;\n        },\n\n        show: function()\n        {\n            if (!this.isVisible()) {\n                this._v = true;\n                this.draw();\n                removeClass(this.el, 'is-hidden');\n                if (this._o.bound) {\n                    addEvent(document, 'click', this._onClick);\n                    this.adjustPosition();\n                }\n                if (typeof this._o.onOpen === 'function') {\n                    this._o.onOpen.call(this);\n                }\n            }\n        },\n\n        hide: function()\n        {\n            var v = this._v;\n            if (v !== false) {\n                if (this._o.bound) {\n                    removeEvent(document, 'click', this._onClick);\n                }\n\n                if (!this._o.container) {\n                    this.el.style.position = 'static'; // reset\n                    this.el.style.left = 'auto';\n                    this.el.style.top = 'auto';\n                }\n                addClass(this.el, 'is-hidden');\n                this._v = false;\n                if (v !== undefined && typeof this._o.onClose === 'function') {\n                    this._o.onClose.call(this);\n                }\n            }\n        },\n\n        /**\n         * GAME OVER\n         */\n        destroy: function()\n        {\n            var opts = this._o;\n\n            this.hide();\n            removeEvent(this.el, 'mousedown', this._onMouseDown, true);\n            removeEvent(this.el, 'touchend', this._onMouseDown, true);\n            removeEvent(this.el, 'change', this._onChange);\n            if (opts.keyboardInput) {\n                removeEvent(document, 'keydown', this._onKeyChange);\n            }\n            if (opts.field) {\n                removeEvent(opts.field, 'change', this._onInputChange);\n                if (opts.bound) {\n                    removeEvent(opts.trigger, 'click', this._onInputClick);\n                    removeEvent(opts.trigger, 'focus', this._onInputFocus);\n                    removeEvent(opts.trigger, 'blur', this._onInputBlur);\n                }\n            }\n            if (this.el.parentNode) {\n                this.el.parentNode.removeChild(this.el);\n            }\n        }\n\n    };\n\n    return Pikaday;\n}));\n"],"names":["_toSnakeCase","str","toLowerCase","replace","window","dataLayer","selectors","Object","freeze","formWrapper","form","errorField","dataAttributes","formName","$currentForm","submissionDetected","_submitEvent","e","$form","target","HTMLFormElement","matches","setTimeout","_rememberCurrentForm","addEventListener","_formSubmitted","removeEventListener","_$currentForm","errorState","querySelector","arguments","length","undefined","$wrapper","closest","getAttribute","_getFormName","eventDetails","val","ga4EventName","ga4EventLabel","category","action","label","eventObj","event","push","track","Track","listen","umbracoForm","errorMessage","formField","UmbracoForms","init","initTracking","$umbracoForms","$","$datepickers","find","each","$datepicker","this","matchMedia","attr","Pikaday","field","yearRange","onSelect","date","id","value","moment","format","document","getElementById","setShadow","on","$firstErrorField","$errorMessages","eq","util","UmbracoFormTracking","root","factory","module","exports","hasMoment","hasEventListeners","sto","addEvent","el","callback","capture","attachEvent","removeEvent","detachEvent","hasClass","cn","className","indexOf","addClass","removeClass","trim","isArray","obj","test","prototype","toString","call","isDate","isNaN","getTime","isWeekend","day","getDay","isLeapYear","year","getDaysInMonth","month","setToStartOfDay","setHours","compareDates","a","b","extend","to","from","overwrite","prop","hasProp","nodeName","Date","slice","fireEvent","eventName","data","ev","createEvent","initEvent","dispatchEvent","createEventObject","adjustCalendar","calendar","Math","ceil","abs","floor","defaults","bound","ariaLabel","position","reposition","parse","defaultDate","setDefaultDate","firstDay","firstWeekOfYearMinDays","formatStrict","minDate","maxDate","showWeekNumber","pickWholeWeek","minYear","maxYear","minMonth","maxMonth","startRange","endRange","isRTL","yearSuffix","showMonthAfterYear","showDaysInNextAndPreviousMonths","enableSelectionDaysInNextAndPreviousMonths","numberOfMonths","mainCalendar","container","blurFieldOnSelect","i18n","previousMonth","nextMonth","months","weekdays","weekdaysShort","theme","events","onOpen","onClose","onDraw","keyboardInput","renderDayName","opts","abbr","renderDay","arr","ariaSelected","isEmpty","isDisabled","isToday","isSelected","hasEvent","isInRange","isStartRange","isEndRange","join","renderWeek","d","m","y","isoWeek","yearDay","getDate","weekDay","dayInFirstWeek","dayShift","prevWeekDay","setDate","jan4th","getFullYear","daysBetween","round","renderRow","days","isRowSelected","reverse","renderTitle","instance","c","refYear","randId","i","j","monthHtml","yearHtml","_o","isMinYear","isMaxYear","html","prev","next","renderTable","renderHead","options","self","config","_onMouseDown","_v","srcElement","parentNode","prevMonth","hide","blur","_c","preventDefault","returnValue","_onChange","gotoMonth","gotoYear","_onKeyChange","isVisible","keyCode","adjustDate","_parseFieldValue","isValid","toDate","_onInputChange","firedBy","show","_onInputFocus","_onInputClick","_onInputBlur","pEl","activeElement","_b","_onClick","onchange","setAttribute","trigger","createElement","appendChild","body","insertBefore","nextSibling","defDate","gotoDate","disableWeekends","disableDayFn","nom","parseInt","setMinDate","setMaxDate","fallback","_d","toDateString","getMoment","setMoment","preventOnSelect","isMoment","draw","min","max","clear","newCalendar","calendars","firstVisibleDate","lastVisibleDate","visibleDate","setMonth","getMonth","adjustCalendars","sign","newDay","difference","valueOf","gotoToday","setStartRange","setEndRange","force","_y","_m","random","substr","render","innerHTML","type","focus","adjustPosition","width","height","viewportWidth","viewportHeight","scrollTop","left","top","clientRect","leftAligned","bottomAligned","style","offsetWidth","offsetHeight","innerWidth","documentElement","clientWidth","innerHeight","clientHeight","pageYOffset","getBoundingClientRect","pageXOffset","bottom","offsetLeft","offsetTop","offsetParent","now","before","row","yearOfPreviousMonth","yearOfNextMonth","daysInPreviousMonth","cells","after","isWeekSelected","r","dayNumber","monthNumber","yearNumber","dayConfig","unshift","v","destroy","removeChild"],"sourceRoot":""}