{"version":3,"file":"js/main.min.js","mappings":";8BACiEA,EAAOC,QAG/D,WAAe,aAEtB,IAAIC,EAAqB,CACvB,+BACA,kCACA,sFACA,2DACA,8CACA,gDACA,8CACA,8BACA,uCACA,uCACA,yCACA,mCAGEC,EAAU,MACVC,EAAa,SAQjB,SAASC,EAAWC,GAGlBC,KAAKC,MAAQD,KAAKE,KAAKC,KAAKH,MAC5BA,KAAKI,MAAQJ,KAAKK,KAAKF,KAAKH,MAC5BA,KAAKM,eAAiBN,KAAKM,eAAeH,KAAKH,MAC/CA,KAAKO,cAAgBP,KAAKO,cAAcJ,KAAKH,MAE7CA,KAAKQ,IAAMT,EACXC,KAAKS,OAAQ,EACbT,KAAKU,IAAMV,KAAKQ,IAAIG,aAAa,qBAAuBX,KAAKQ,IAAII,GACjEZ,KAAKa,mBAAqB,KAC1Bb,KAAKc,WAAa,CAAC,EAGnBd,KAAKe,QACP,CAkRA,SAASC,EAAQC,GACf,OAAOC,MAAMC,UAAUC,MAAMC,KAAKJ,EACpC,CAUA,SAASK,EAAGC,EAAUC,GACpB,OAAOR,GAASQ,GAAWC,UAAUC,iBAAiBH,GACxD,CAQA,SAASI,EAAkBC,IACXA,EAAKC,cAAc,gBAAkBD,GAE3CE,OACV,CAQA,SAASC,EAAqBH,GAC5B,OAAON,EAAG3B,EAAmBqC,KAAK,KAAMJ,GAAMK,QAAO,SAAUC,GAC7D,SACEA,EAAMC,aACND,EAAME,cACNF,EAAMG,iBAAiBC,OAE3B,GACF,CAQA,SAASC,EAAWX,EAAMY,GACxB,IAAIC,EAAoBV,EAAqBH,GACzCc,EAAmBD,EAAkBE,QAAQlB,SAASmB,eAKtDJ,EAAMK,UAAiC,IAArBH,GACpBD,EAAkBA,EAAkBH,OAAS,GAAGR,QAChDU,EAAMM,kBAKLN,EAAMK,UACPH,IAAqBD,EAAkBH,OAAS,IAEhDG,EAAkB,GAAGX,QACrBU,EAAMM,iBAEV,CAEA,SAASC,IACPzB,EAAG,sBAAsB0B,SAAQ,SAAUpB,GACzC,IAAI9B,EAAW8B,EACjB,GACF,CAcA,OApWA9B,EAAWqB,UAAUJ,OAAS,WAC5Bf,KAAKQ,IAAIyC,aAAa,eAAe,GACrCjD,KAAKQ,IAAIyC,aAAa,cAAc,GACpCjD,KAAKQ,IAAIyC,aAAa,YAAa,GAE9BjD,KAAKQ,IAAI0C,aAAa,SACzBlD,KAAKQ,IAAIyC,aAAa,OAAQ,UAKhCjD,KAAKmD,SAAW7B,EAAG,2BAA6BtB,KAAKU,IAAM,MAC3DV,KAAKmD,SAASH,QACZ,SAAUI,GACRA,EAAOC,iBAAiB,QAASrD,KAAKC,MACxC,EAAEE,KAAKH,OAKT,MAAMQ,EAAMR,KAAKQ,IAyBjB,OAvBAR,KAAKsD,SAAWhC,EAAG,0BAA2BtB,KAAKQ,KAGhDyB,QAAO,SAAUsB,GAOhB,OAAOA,EAAOC,QAAQ,6CAA+ChD,CACvE,IACCiD,OAAOnC,EAAG,2BAA6BtB,KAAKU,IAAM,OAErDV,KAAKsD,SAASN,QACZ,SAAUO,GACRA,EAAOF,iBAAiB,QAASrD,KAAKI,MACxC,EAAED,KAAKH,OAITA,KAAK0D,MAAM,UAEJ1D,IACT,EAUAF,EAAWqB,UAAUjB,KAAO,SAAUsC,GAEpC,OAAIxC,KAAKS,QAMTT,KAAKa,mBAAqBY,SAASmB,cACnC5C,KAAKQ,IAAImD,gBAAgB,eACzB3D,KAAKS,OAAQ,EAGbkB,EAAkB3B,KAAKQ,KAKvBiB,SAASmC,KAAKP,iBAAiB,QAASrD,KAAKM,gBAAgB,GAC7DmB,SAAS4B,iBAAiB,UAAWrD,KAAKO,eAG1CP,KAAK0D,MAAM,OAAQlB,IAnBVxC,IAsBX,EAUAF,EAAWqB,UAAUd,KAAO,SAAUmC,GAEpC,OAAKxC,KAAKS,OAIVT,KAAKS,OAAQ,EACbT,KAAKQ,IAAIyC,aAAa,cAAe,QAKjCjD,KAAKa,oBAAsBb,KAAKa,mBAAmBiB,OACrD9B,KAAKa,mBAAmBiB,QAK1BL,SAASmC,KAAKC,oBAAoB,QAAS7D,KAAKM,gBAAgB,GAChEmB,SAASoC,oBAAoB,UAAW7D,KAAKO,eAG7CP,KAAK0D,MAAM,OAAQlB,GAEZxC,MArBEA,IAsBX,EAQAF,EAAWqB,UAAU2C,QAAU,WAwB7B,OAtBA9D,KAAKK,OAGLL,KAAKmD,SAASH,QACZ,SAAUI,GACRA,EAAOS,oBAAoB,QAAS7D,KAAKC,MAC3C,EAAEE,KAAKH,OAITA,KAAKsD,SAASN,QACZ,SAAUO,GACRA,EAAOM,oBAAoB,QAAS7D,KAAKI,MAC3C,EAAED,KAAKH,OAITA,KAAK0D,MAAM,WAGX1D,KAAKc,WAAa,CAAC,EAEZd,IACT,EAQAF,EAAWqB,UAAU4C,GAAK,SAAUC,EAAMC,GAOxC,YANqC,IAA1BjE,KAAKc,WAAWkD,KACzBhE,KAAKc,WAAWkD,GAAQ,IAG1BhE,KAAKc,WAAWkD,GAAME,KAAKD,GAEpBjE,IACT,EAQAF,EAAWqB,UAAUgD,IAAM,SAAUH,EAAMC,GACzC,IAAIG,GAASpE,KAAKc,WAAWkD,IAAS,IAAIrB,QAAQsB,GAMlD,OAJIG,GAAS,GACXpE,KAAKc,WAAWkD,GAAMK,OAAOD,EAAO,GAG/BpE,IACT,EAYAF,EAAWqB,UAAUuC,MAAQ,SAAUM,EAAMxB,GAC3C,IAAI8B,EAAYtE,KAAKc,WAAWkD,IAAS,GACrCO,EAAW,IAAIC,YAAYR,EAAM,CAAES,OAAQjC,IAE/CxC,KAAKQ,IAAIkE,cAAcH,GAEvBD,EAAUtB,QACR,SAAU2B,GACRA,EAAS3E,KAAKQ,IAAKgC,EACrB,EAAErC,KAAKH,MAEX,EASAF,EAAWqB,UAAUZ,cAAgB,SAAUiC,GAG7C,MAAMoC,EAAUnD,SAASmB,cACrBgC,GAAWA,EAAQpB,QAAQ,yBAA2BxD,KAAKQ,MAM7DR,KAAKS,OACL+B,EAAMqC,MAAQhF,GACoB,gBAAlCG,KAAKQ,IAAIG,aAAa,UAEtB6B,EAAMM,iBACN9C,KAAKK,KAAKmC,IAKRxC,KAAKS,OAAS+B,EAAMqC,MAAQjF,GAC9B2C,EAAWvC,KAAKQ,IAAKgC,GAEzB,EASA1C,EAAWqB,UAAUb,eAAiB,SAAUkC,IAO5CxC,KAAKS,OACJ+B,EAAMsC,OAAOtB,QAAQ,wBACrBhB,EAAMsC,OAAOtB,QAAQ,yCAEtB7B,EAAkB3B,KAAKQ,IAE3B,EAsFwB,oBAAbiB,WACmB,YAAxBA,SAASsD,WACXtD,SAAS4B,iBAAiB,mBAAoBN,GAE1CiC,OAAOC,sBACTD,OAAOC,sBAAsBlC,GAE7BiC,OAAOE,WAAWnC,EAAoB,KAKrCjD,CAER,CA3ZiFqF,gCCmBtE,0BAANC,EAIH,WACA,aAGD,IAAMC,EAA4B,oBAAXL,OAAyBA,OAAShF,KAEnDsF,EAAUD,EAAQC,OAAS,SAAUvF,EAASwF,GAClD,IAAMC,EAAIxF,KAEV,GAAID,EAAQ0F,QAAS,OAAO1F,EAAQ0F,QAgCpC,GA9BAD,EAAEE,IAAM3F,EACRyF,EAAEE,IAAIC,UAAUC,IAAI,UAGpBJ,EAAEE,IAAID,QAAUD,EAGhBA,EAAEK,IAAMC,OAAOC,OACb,CAAC,EACD,CACEC,eAAgB,EAChBC,aAAc,EACdC,YAAY,EACZC,SAAU,GAEVC,OAAQ,SAAUC,EAAGC,EAAGC,EAAGC,EAAGC,GAC5B,OAAOD,GAAKF,GAAKG,GAAKH,EAAIC,CAC3B,GAEHhB,GAIFC,EAAEkB,WAAalB,EAAEmB,KAAOnB,EAAEoB,MAAQ,EAClCpB,EAAEqB,OAAS,CAAC,EAIZrB,EAAEsB,KAAOtB,EAAEK,IAEPL,EAAEK,IAAIkB,UAERvB,EAAEwB,MAAQxB,EAAEE,IAAIuB,SAAS,QAKzB,IAFAzB,EAAEwB,MAAQvF,SAASyF,cAAc,OACjC1B,EAAEE,IAAIyB,YAAY3B,EAAEwB,OACa,IAA1BxB,EAAEE,IAAIuB,SAAS3E,QACpBkD,EAAEwB,MAAMG,YAAY3B,EAAEE,IAAIuB,SAAS,IAIvCzB,EAAEwB,MAAMrB,UAAUC,IAAI,gBAGtBJ,EAAE4B,OAGF5B,EAAE6B,OAAS7B,EAAE4B,KAAKjH,KAAKqF,GAAG,GAC1BA,EAAEhD,MAAMgD,EAAEE,IAAK,MAAO,CACpB4B,OAAQ9B,EAAE+B,eAAepH,KAAKqF,KAEhCA,EAAEhD,MAAM6C,EAAS,MAAO,CACtBgC,OAAQ7B,EAAE6B,QAEb,EAEKG,EAAkBlC,EAAOnE,UAwf/B,OAvfAqG,EAAgBJ,KAAO,SAAUK,EAASC,GACxC,IAAMlC,EAAIxF,KAEN2H,EAAQ,EAERC,EAAS,EAEbpC,EAAEqC,OAASrC,EAAEwB,MAAMC,SAEnB,GAAGjE,QAAQ3B,KAAKmE,EAAEqC,QAAQ,SAAUrC,EAAGsC,GACrCtC,EAAEG,UAAUC,IAAI,gBAChBJ,EAAEvC,aAAa,cAAe6E,EAC/B,IAEDtC,EAAEuC,eAAiBvC,EAAEE,IAAIsC,YAEzB,IAAMC,EAAoBzC,EAAE0C,qBAG5B,GAFKR,IAAQA,EAASO,GAGG,SAAvBzC,EAAEK,IAAII,mBACsB,IAArBT,EAAEK,IAAIsC,WACb,CACA,IAAMC,EAAa5C,EAAEuC,eAAiBvC,EAAEK,IAAIwC,UAE5C7C,EAAEK,IAAIsC,WAAa3C,EAAEK,IAAII,aAAeT,EAAEK,IAAIyC,WAC1CF,EACAG,KAAKC,IAAI,EAAGD,KAAKE,MAAML,GAC5B,CAC4B,SAAzB5C,EAAEK,IAAIG,iBACRR,EAAEK,IAAIG,eAAiBuC,KAAKE,MAAMjD,EAAEK,IAAII,eAG1CT,EAAE6C,UAAY7C,EAAEK,IAAIyC,WAChB9C,EAAEK,IAAIwC,UACN7C,EAAEuC,eAAiBvC,EAAEK,IAAII,aAG7B,GAAGjD,QAAQ3B,KAAKmE,EAAEqC,QAAQ,SAAUa,GAClCA,EAAGC,MAAMf,OAAS,OAClBc,EAAGC,MAAMhB,MAAQnC,EAAE6C,UAAY,KAC/BV,GAASnC,EAAE6C,UACXT,EAASW,KAAKC,IAAIE,EAAGtG,aAAcwF,EACpC,IAEDpC,EAAEwB,MAAM2B,MAAMhB,MAAQA,EAAQ,KAC9BnC,EAAEoD,WAAajB,EACfnC,EAAEqD,QAAS,EACXrD,EAAEsD,cAAe,EACjBtD,EAAEuD,MAAO,EAETvD,EAAEK,IAAIK,YAAcV,EAAEwD,SAASxD,EAAEoB,MAAQpB,EAAE6C,UAAW,IAElDJ,GAAqBP,KACvBlC,EAAEyD,aACFzD,EAAE0D,YACF1D,EAAE2D,YAGJ3D,EAAE+B,iBAEF/B,EAAE4D,KAAK3B,EAAU,UAAY,SAC9B,EAEDD,EAAgB2B,SAAW,WACzB,IAAM3D,EAAIxF,KACVwF,EAAE6D,MAAQ7D,EAAE6D,OAAS7D,EAAE8D,YAAYnJ,KAAKqF,GAExC,IAAM+D,EAAU,WACd/D,EAAEgE,eAAYC,EACdjE,EAAEE,IAAIC,UAAU+D,OAAO,QACnBlE,EAAEqD,SACJrD,EAAEsD,cAAe,GAEnBtD,EAAEqD,QAAS,CACZ,EAEKE,EAAO,WACXvD,EAAEuD,MAAO,CACV,EAEKY,EAAS,CACbJ,QAASA,EACTK,WAAYL,EACZM,UAAW,SAAUC,GACnBA,EAAEhH,iBACFgH,EAAEC,kBACFvE,EAAEgE,UAAYM,EAAEE,QAChBxE,EAAEE,IAAIC,UAAUC,IAAI,QACpBJ,EAAEuD,MAAO,EACT7D,WAAW6D,EAAM,IAClB,EACDkB,WAAY,SAAUH,GACpBtE,EAAEE,IAAIC,UAAUC,IAAI,QACpBJ,EAAEuD,MAAO,EACT7D,WAAW6D,EAAM,IAClB,EACDmB,UAAW1E,EAAE6D,MACbc,MAAO,SAAUL,GACXtE,EAAEsD,cAAgBtD,EAAEuD,OACtBe,EAAEhH,iBACFgH,EAAEC,mBAEJvE,EAAEsD,cAAe,EACjBtD,EAAEuD,MAAO,CACV,GAGHvD,EAAEE,IAAIC,UAAUyE,OAAO,aAAiC,IAApB5E,EAAEK,IAAIwE,WAC1C7E,EAAEhD,MAAMgD,EAAEE,IAAK,SAAUiE,GACrBnE,EAAEK,IAAIwE,WAAW7E,EAAEhD,MAAMgD,EAAEE,IAAK,MAAOiE,EAC5C,EAEDnC,EAAgB0B,UAAY,WAC1B,IAAM1D,EAAIxF,KAEV,GAAKwF,EAAEK,IAAIyE,MAQX,GAH0B,iBAAf9E,EAAEK,IAAIyE,KACf9E,EAAE8E,KAAO7I,SAASI,cAAc2D,EAAEK,IAAIyE,MACjC9E,EAAE8E,KAAO9E,EAAEK,IAAIyE,KACjB9E,EAAE8E,KAAP,CAEA9E,EAAE8E,KAAKC,UAAY,GACnB/E,EAAE8E,KAAKrH,aAAa,OAAQ,WAC5BuC,EAAE8E,KAAK3E,UAAUC,IAAI,eAErB,IAAK,IAAIkC,EAAI,EAAGA,EAAIS,KAAKiC,KAAKhF,EAAEqC,OAAOvF,OAASkD,EAAEK,IAAII,gBAAiB6B,EAAG,CACxE,IAAM2C,EAAMhJ,SAASyF,cAAc,UACnCuD,EAAIC,QAAQtG,MAAQ0D,EACpB2C,EAAIxH,aAAa,aAAc,SAAW6E,EAAI,IAC9C2C,EAAIxH,aAAa,OAAQ,OACzBwH,EAAIE,UAAY,eAAiB7C,EAAI,GAAK,UAC1CtC,EAAEhD,MAAMiI,EAAK,MAAO,CAClBN,MAAO3E,EAAEoF,WAAWzK,KAAKqF,EAAGsC,GAAG,KAEjCtC,EAAE8E,KAAKnD,YAAYsD,EACpB,CAhBkB,OAPbjF,EAAE8E,OAAM9E,EAAE8E,KAAKC,UAAY,GAwBlC,EAED/C,EAAgByB,WAAa,WAC3B,IAAMzD,EAAIxF,KACLwF,EAAEK,IAAIgB,OAOX,CAAC,OAAQ,QAAQ7D,SAAQ,SAAU6H,GACjC,IAAIC,EAAQtF,EAAEK,IAAIgB,OAAOgE,GACrBC,IACmB,iBAAVA,IAAoBA,EAAQrJ,SAASI,cAAciJ,IAC1DA,IACFA,EAAMC,MAAQD,EAAMC,OAASvF,EAAEoF,WAAWzK,KAAKqF,EAAGqF,GAClDrF,EAAEhD,MAAMsI,EAAO,SAAU,CACvBX,MAAOW,EAAMC,QAEfvF,EAAEhD,MAAMsI,EAAO,MAAO,CACpBX,MAAOW,EAAMC,QAEfvF,EAAEqB,OAAOgE,GAAaC,GAG3B,IArBChF,OAAOkF,KAAKxF,EAAEqB,QAAQ7D,SAAQ,SAAU6H,GACtC,IAAM9K,EAAUyF,EAAEqB,OAAOgE,GACzBrF,EAAEhD,MAAMzC,EAAS,SAAU,CAAEoK,MAAOpK,EAAQgL,OAC7C,GAmBJ,EAEDvD,EAAgBD,eAAiB,SAAU/E,GACzC,IAAMgD,EAAIxF,KAENwC,IAAUgD,EAAEK,IAAIoF,iBAClBzI,EAAMuH,kBAGR,IAAMmB,EAAgB1F,EAAEuC,gBAAkBvC,EAAEoD,WAEvCpD,EAAEK,IAAIsF,SACL3F,EAAEqB,OAAOuE,OACX5F,EAAEqB,OAAOuE,KAAKzF,UAAUyE,OACtB,WACA5E,EAAEE,IAAI2F,YAAc,GAAKH,GAG3B1F,EAAEqB,OAAOuE,KAAKnI,aACZ,gBACAuC,EAAEqB,OAAOuE,KAAKzF,UAAU2F,SAAS,cAGjC9F,EAAEqB,OAAO0E,OACX/F,EAAEqB,OAAO0E,KAAK5F,UAAUyE,OACtB,WACA7B,KAAKiC,KAAKhF,EAAEE,IAAI2F,WAAa7F,EAAEuC,iBAC7BQ,KAAKE,MAAMjD,EAAEoD,aAAesC,GAGhC1F,EAAEqB,OAAO0E,KAAKtI,aACZ,gBACAuC,EAAEqB,OAAO0E,KAAK5F,UAAU2F,SAAS,eAKvC9F,EAAEoB,MAAQ2B,KAAKiD,MAAMhG,EAAEE,IAAI2F,WAAa7F,EAAE6C,WAC1C7C,EAAEmB,KAAO4B,KAAKiD,MAAMhG,EAAEE,IAAI2F,WAAa7F,EAAEuC,gBAEzC,IAAM0D,EAASjG,EAAEoB,MAAQ2B,KAAKE,MAAMF,KAAKE,MAAMjD,EAAEK,IAAII,cAAgB,GAEjEyF,EAAcnD,KAAKE,MAAMjD,EAAEK,IAAII,cAAgB,EAAI,EAAIwF,EAAS,EAC7B,IAAnClD,KAAKE,MAAMjD,EAAEK,IAAII,gBACnByF,EAAc,GAKZlG,EAAEE,IAAI2F,WAAa7F,EAAEuC,gBAAkBQ,KAAKE,MAAMjD,EAAEoD,cACtDpD,EAAEmB,KAAOnB,EAAE8E,KAAO9E,EAAE8E,KAAKrD,SAAS3E,OAAS,EAAI,GAGjD,GAAGU,QAAQ3B,KAAKmE,EAAEqC,QAAQ,SAAUjB,EAAOxC,GACzC,IAAMuH,EAAe/E,EAAMjB,UAErBiG,EAAaD,EAAaL,SAAS,WAEnCO,EAAQrG,EAAEE,IAAI2F,WAEdS,EAAMtG,EAAEE,IAAI2F,WAAa7F,EAAEuC,eAE3BgE,EAAYvG,EAAE6C,UAAYjE,EAE1B4H,EAAUD,EAAYvG,EAAE6C,UAE9B,GAAGrF,QAAQ3B,KAAKsK,GAAc,SAAUhB,GACtC,cAAcsB,KAAKtB,IAAcgB,EAAajC,OAAOiB,EACtD,IACDgB,EAAavB,OAAO,SAAU5E,EAAEoB,QAAUxC,GACtCqH,IAAWrH,GAAUsH,GAAeA,IAAgBtH,EACtDuH,EAAa/F,IAAI,WAEjB+F,EAAajC,OAAO,UACpBiC,EAAa/F,IACX,CACExB,EAAQqH,EAAS,OAAS,QAC1BlD,KAAK2D,IAAI9H,GAASA,EAAQqH,EAASA,EAASC,GAAeD,KAC3DzJ,KAAK,OAIX,IAAMmK,EACJ5D,KAAKiC,KAAKuB,IAAcxD,KAAKE,MAAMoD,IACnCtD,KAAKE,MAAMuD,IAAYzD,KAAKiC,KAAKsB,GACnCH,EAAavB,OAAO,UAAW+B,GAC3BA,IAAcP,GAChBpG,EAAE4D,KAAK,UAAY+C,EAAY,UAAY,UAAW,CACpDvF,MAAOxC,GAGZ,IACGoB,EAAE8E,MACJ,GAAGtH,QAAQ3B,KAAKmE,EAAE8E,KAAKrD,UAAU,SAAUwD,EAAKrG,GAC9CqG,EAAI9E,UAAUyE,OAAO,SAAU5E,EAAEmB,OAASvC,EAC3C,IAGC5B,GAASgD,EAAEK,IAAIuG,aACjBC,aAAa7G,EAAE4G,YACf5G,EAAE4G,WAAalH,YAAW,WACxBmH,aAAa7G,EAAE4G,YAEX7D,KAAK2D,IAAI1G,EAAEE,IAAI2F,WAAa7F,EAAE6C,UAAY7C,EAAEoB,OAAS,MAClDpB,EAAEgE,WAEDhE,EAAEoD,WAAapD,EAAEuC,eAAiBvC,EAAEE,IAAI2F,YAC1C7F,EAAEoF,WAAWpF,EAAE8G,mBAItB,GAAE9G,EAAEK,IAAI0G,iBAAmB,KAE/B,EAED/E,EAAgB8E,gBAAkB,WAChC,IAAM9G,EAAIxF,KACV,OAAOwF,EAAEgG,MAAMhG,EAAEE,IAAI2F,WAAa7F,EAAE6C,UACrC,EAEDb,EAAgBoD,WAAa,SAAUhE,EAAO6D,EAAKX,GAC7CA,GAAGA,EAAEhH,iBAET,IAAM0C,EAAIxF,KAEJwM,EAAgB5F,IACpBpB,EAAEkB,WAEJ,IACI+F,EADEC,EAAYlH,EAAEoB,MAGpB,IAAY,IAAR6D,EAEFgC,GADA7F,EAAQ2B,KAAKiD,MAAO5E,EAAQpB,EAAEuC,eAAkBvC,EAAE6C,YAC/B7C,EAAE6C,cAChB,CACL,GAAqB,iBAAVzB,EAAoB,CAC7B,IAAM+F,EAAsB,SAAV/F,EAYlB,GAREA,EADEpB,EAAEK,IAAIG,eAAiB,GAAKR,EAAEK,IAAII,aAAe,EAC3CT,EAAE8G,kBAEF9G,EAAEoB,MAGR+F,EAAW/F,GAASpB,EAAEK,IAAIG,eACzBY,GAASpB,EAAEK,IAAIG,eAEhBR,EAAEK,IAAIsF,OAAQ,CAChB,IAAME,EAAa7F,EAAEE,IAAI2F,WACzBzE,EACE+F,IAActB,EACV7F,EAAEqC,OAAOvF,QACRqK,GACDtB,EAAa7F,EAAEuC,gBAAkBQ,KAAKE,MAAMjD,EAAEoD,YAC1C,EACAhC,CACX,CACF,CAEDA,EAAQ2B,KAAKC,IAAID,KAAKqE,IAAIhG,EAAOpB,EAAEqC,OAAOvF,QAAS,GAEnDkD,EAAEoB,MAAQA,EACV6F,EAAWjH,EAAE6C,UAAYzB,CAC1B,CAiBD,OAfApB,EAAE4D,KAAK,cAAe,CAAEsD,UAAAA,EAAW9F,MAAAA,IAEnCpB,EAAEwD,SACAyD,EACAjH,EAAEK,IAAIM,SAAWoC,KAAK2D,IAAI1G,EAAEE,IAAI2F,WAAaoB,IAC7C,WACEjH,EAAE+B,iBACF/B,EAAE4D,KAAK,WAAY,CACjByD,MAAOL,EACPxI,KAC2B,iBAAlBwI,EAA6B,QAAU/B,EAAM,MAAQ,SAEjE,KAGI,CACR,EAEDjD,EAAgBU,mBAAqB,WACnC,IAAM1C,EAAIxF,KAEJ8M,EAAOtH,EAAEsB,KAAKiG,WAEpB,GAAID,EAAM,CAERA,EAAKE,MAAK,SAAUC,EAAG1G,GACrB,OAAOA,EAAE2G,WAAaD,EAAEC,UACzB,IAED,IAAK,IAAIpF,EAAI,EAAGA,EAAIgF,EAAKxK,SAAUwF,EAAG,CACpC,IAAMqF,EAAOL,EAAKhF,GAClB,GAAIzC,EAAQ+H,YAAcD,EAAKD,WAC7B,OAAI1H,EAAE0H,aAAeC,EAAKD,aACxB1H,EAAEK,IAAMC,OAAOC,OAAO,CAAC,EAAGP,EAAEsB,KAAMqG,EAAK5H,UACvCC,EAAE0H,WAAaC,EAAKD,YACb,EAIZ,CACF,CAED,IAAMjF,EAAqC,IAAjBzC,EAAE0H,WAG5B,OAFA1H,EAAEK,IAAMC,OAAOC,OAAO,CAAC,EAAGP,EAAEsB,MAC5BtB,EAAE0H,WAAa,EACRjF,CACR,EAEDT,EAAgBwB,SAAW,SAAUqE,EAAcC,EAAgBC,GACjE,IAAM/H,EAAIxF,KAEJ6L,GAAQ,IAAI2B,MAAOC,UAEnBC,EAAelI,EAAEkB,WAEnBiH,EAAU,SAAVA,IACF,IAAMC,GAAM,IAAIJ,MAAOC,UAAY5B,EACnCrG,EAAEE,IAAI2F,WACJ7F,EAAEE,IAAI2F,YACLgC,EAAe7H,EAAEE,IAAI2F,YACpB7F,EAAEK,IAAIO,OAAO,EAAGwH,EAAK,EAAG,EAAGN,GAC3BM,EAAMN,GAAkBI,IAAiBlI,EAAEkB,WAC7CrB,EAAQJ,sBAAsB0I,IAE9BnI,EAAEE,IAAI2F,WAAagC,EACnBE,GAAYA,EAASlM,KAAKmE,GAE7B,EAEDH,EAAQJ,sBAAsB0I,EAC/B,EAEDnG,EAAgBqG,WAAa,SAAUzJ,GACrC,IAAMoB,EAAIxF,KAENwF,EAAEqC,OAAOvF,SACXkD,EAAEwB,MAAM8G,YAAYtI,EAAEqC,OAAOzD,IAC7BoB,EAAEiC,SAAQ,GACVjC,EAAE4D,KAAK,UAEV,EAED5B,EAAgBuG,QAAU,SAAUrI,GAClC,IAAMF,EAAIxF,KAEVwF,EAAEwB,MAAMG,YAAYzB,GACpBF,EAAEiC,SAAQ,GACVjC,EAAE4D,KAAK,MACR,EAED5B,EAAgB8B,YAAc,SAAUQ,GACtC,IAAMtE,EAAIxF,KACNwF,EAAEgE,YACJhE,EAAEqD,QAAS,EACXrD,EAAEE,IAAI2F,aACH7F,EAAEgE,UAAYM,EAAEE,UAAYxE,EAAEK,IAAImI,cAAgB,KACrDxI,EAAEgE,UAAYM,EAAEE,QAEnB,EAGDxC,EAAgBgE,MAAQ,SAAUyC,GAChC,IAEMC,EAAM,GAFFlO,KACK6F,IAAIG,eAAiB,GAAK,GAEzC,OAAOuC,KAAKiD,MAAMyC,EAASC,GAAOA,CACnC,EAED1G,EAAgBC,QAAU,SAAUC,GACxB1H,KACRoH,MAAK,EAAMM,EACd,EAEDF,EAAgB2G,UAAY,SAAUtI,EAAKuI,GACzC,IAAM5I,EAAIxF,KAENwF,EAAE0H,aAAekB,EACnB5I,EAAEsB,KAAKiG,WAAW/J,SAAQ,SAAUqL,GAC9BA,EAAEnB,aAAe1H,EAAE0H,aACrBmB,EAAE9I,SAAWO,OAAOC,OAAO,CAAC,EAAGsI,EAAE9I,SAAUM,GAE9C,IAEDL,EAAEsB,KAAOhB,OAAOC,OAAO,CAAC,EAAGP,EAAEsB,KAAMjB,GAGrCL,EAAE0H,WAAa,EACf1H,EAAE0C,oBACH,EAEDV,EAAgB1D,QAAU,WACxB,IAAM0B,EAAIxF,KAEJsO,EAAU9I,EAAEE,IAAI6I,WAAU,GAE1BC,EAAQ,SAAU9I,GACtBA,EAAI/B,gBAAgB,SACpB,GAAGX,QAAQ3B,KAAKqE,EAAIC,WAAW,SAAUgF,GACvC,UAAUsB,KAAKtB,IAAcjF,EAAIC,UAAU+D,OAAOiB,EACnD,GACF,EAED2D,EAAQrH,SAAS,GAAGwH,UAAYH,EAAQrH,SAAS,GAAGsD,UACpDiE,EAAMF,GACN,GAAGtL,QAAQ3B,KAAKiN,EAAQI,qBAAqB,KAAMF,GACnDhJ,EAAEE,IAAIiJ,WAAWC,aAAaN,EAAS9I,EAAEE,KACzCF,EAAEhD,MAAM6C,EAAS,SAAU,CACzBgC,OAAQ7B,EAAE6B,SAEZ7B,EAAE4D,KAAK,UACR,EAED5B,EAAgB4B,KAAO,SAAUyF,EAAMC,GACrC,IAAMtJ,EAAIxF,KAEJ8J,EAAI,IAAIzE,EAAQb,YAAY,UAAYqK,EAAM,CAClDE,SAAUvJ,EAAEK,IAAImJ,eAChBvK,OAAQqK,IAEVtJ,EAAEE,IAAIhB,cAAcoF,EACrB,EAEDtC,EAAgBhF,MAAQ,SAAUkD,EAAK1B,EAAMiL,GAC3C,IAAMC,EAAexJ,EAAI1B,EAAO,iBAAiB7D,KAAKuF,GACtDI,OAAOkF,KAAKiE,GAAMjM,SAAQ,SAAUmM,GAClCD,EAAaC,EAAGF,EAAKE,GACtB,GACF,EAEM7J,CACR,GAjkBW,gEChBQH,wOAAAA,EAIX,WAAc,aAEnB,IAAIiK,EAAO,CACPC,GAAI,CACAC,SAAU,yBACVC,MAAO,6CACPC,OAAQ,+BACRC,QAAS,uCACTC,IAAK,0CACLC,IAAK,+CACLC,UAAW,oCACXC,UAAW,oCACXjD,IAAK,uCACLpE,IAAK,uCACLsH,QAAS,oCACTC,OAAQ,gCAShB,SAASC,EAAKC,GACV,IAAIC,EAAaC,UAEjB,OAAOnQ,KAAKsO,QAAQ,iBAAiB,SAAUrB,EAAG1G,GAC9C,OAAO2J,EAAW3J,EACrB,GACJ,CAED,SAAS6J,EAAiBC,GACtB,OAAOA,EAAMC,SAASC,KAAKC,KAAK9O,iBAAiB,eAAiB2O,EAAM1P,aAAa,QAAU,cAAc2B,MAChH,CAWD,IAAImO,EAAgB,CAChBC,QAAS,aACTC,WAAY,aACZC,aAAc,cACdC,gBAAiB,aACjBC,aAAc,MACdC,eAAgB,aAKhBC,EAAqB,CAAC,WAAY,MAAO,MAAO,YAAa,YAAa,WAC1EC,EAAc,yJAEdC,EAAgB,yCAChBC,EAAgB,KAChBC,EAAa,CAAC,EAEd5L,EAAI,SAAWqJ,EAAMwC,GACrBA,EAAUxC,KAAOA,OACUpF,IAAvB4H,EAAUC,WAAwBD,EAAUC,SAAW,GAC3DF,EAAWvC,GAAQwC,CACtB,EAoCD,SAASE,EAASf,EAAMgB,EAAQC,GAE5B,IAAIlB,EAAOvQ,KAgDX,SAAS0R,EAAqBC,EAAKC,EAAQ/C,EAAMhC,GAC7C,IAAIwE,EAAYD,EAAWvC,GAC3B,GAAIwC,IACAM,EAAIzN,KAAKmN,GACLxE,GAAO,CACP,IAAIgF,EAAuB,YAAThD,EAAqB,CAAChC,GAASA,EAAMiF,MAAM,KAC7DD,EAAYE,QAAQ,MACpBH,EAAO/C,GAAQgD,CAClB,CAER,CAoED,SAASG,EAAeC,GAGpB,IAFA,IAAIC,EAAS,GACTC,GAAQ,EACHrK,EAAI,EAAGmK,EAAMb,WAAWtJ,GAAIA,IAAK,CACtC,IAAIuJ,EAAYY,EAAMb,WAAWtJ,GAC7B8J,EAASK,EAAML,OAAOP,EAAUxC,MAAQoD,EAAML,OAAOP,EAAUxC,MAAQ,GAE3E,GADA+C,EAAO,GAAKK,EAAM5B,MAAMxD,OACnBwE,EAAUe,GAAGC,MAAMJ,EAAM5B,MAAOuB,KACjCO,GAAQ,EAEqB,mBAAlBd,EAAUiB,IACjBJ,EAAOhO,KAAKmN,EAAUiB,IAAIL,EAAM5B,MAAMxD,MAAO+E,IACb,iBAAlBP,EAAUiB,IACxBJ,EAAOhO,KAAK8L,EAAKqC,MAAMhB,EAAUiB,IAAKV,IAC/BP,EAAUiB,MAAQxM,OAAOuL,EAAUiB,MAAQjB,EAAUiB,IAAInB,GAEhEe,EAAOhO,KAAK8L,EAAKqC,MAAMhB,EAAUiB,IAAInB,GAAgBS,IAC9CK,EAAMM,SAASpB,IAAkBc,EAAMM,SAASpB,GAAeE,EAAUxC,MAChFqD,EAAOhO,KAAK8L,EAAKqC,MAAMJ,EAAMM,SAASpB,GAAeE,EAAUxC,MAAO+C,IAC/DxC,EAAK+B,IAAkB/B,EAAK+B,GAAeE,EAAUxC,OAC5DqD,EAAOhO,KAAK8L,EAAKqC,MAAMjD,EAAK+B,GAAeE,EAAUxC,MAAO+C,KAGzC,IAAnBP,EAAUmB,MACV,KAGX,CAED,OADAP,EAAMC,OAASA,EACRC,CACV,CA6BD,SAASM,EAAkBR,GACvB,GAAIA,EAAMS,cACN,OAAOT,EAAMS,cAEjB,IAAIC,EAnRZ,SAAsBC,EAAIC,GACtB,MAAQD,EAAKA,EAAGE,iBAAmBF,EAAGjN,UAAU2F,SAASuH,KACzD,OAAOD,CACV,CAgR+BG,CAAad,EAAM5B,MAAOE,EAAKiB,OAAOd,SAC1DG,EAAkB,KAClBmC,EAAmB,KAevB,OAbInC,EADAN,EAAKiB,OAAOd,UAAYH,EAAKiB,OAAOX,gBAClB8B,EAEAA,EAAoBA,EAAkB9Q,cAAc,IAAM0O,EAAKiB,OAAOX,iBAAmB,OAG3GmC,EAAmBnC,EAAgBhP,cAAc,uBAE7CmR,EAAmBvR,SAASyF,cAAcqJ,EAAKiB,OAAOV,eACrCnG,UAAYsI,kBAAuB1C,EAAKiB,OAAOT,eAChEF,EAAgB1J,YAAY6L,GAC5BA,EAAiBE,gBAAkBF,EAAiBrK,MAAMwK,UAG3DlB,EAAMS,cAAgB,CAACC,EAAmBK,EACpD,CAED,SAASI,EAAWnB,GAChB,IAAIS,EAAgBD,EAAkBR,GAClCU,EAAoBD,EAAc,GAClCM,EAAmBN,EAAc,GAEjCC,IACAA,EAAkBhN,UAAU+D,OAAO6G,EAAKiB,OAAOZ,cAC/C+B,EAAkBhN,UAAUC,IAAI2K,EAAKiB,OAAOb,aAE5CqC,IACAA,EAAiBzI,UAAY0H,EAAMC,OAAOlQ,KAAK,SAC/CgR,EAAiBrK,MAAMwK,QAAUH,EAAiBE,iBAAmB,GAE5E,CA6BD,SAASG,EAAapB,GAClB,IAAIU,EAjBR,SAAsBV,GAClB,IAAIS,EAAgBD,EAAkBR,GAClCU,EAAoBD,EAAc,GAClCM,EAAmBN,EAAc,GAUrC,OATIC,IAEAA,EAAkBhN,UAAU+D,OAAO6G,EAAKiB,OAAOb,YAC/CgC,EAAkBhN,UAAU+D,OAAO6G,EAAKiB,OAAOZ,eAE/CoC,IACAA,EAAiBzI,UAAY,GAC7ByI,EAAiBrK,MAAMwK,QAAU,QAE9BT,CACV,CAG2BY,CAAarB,GAAO,GAC5CU,GAAqBA,EAAkBhN,UAAUC,IAAI2K,EAAKiB,OAAOZ,aACpE,CAiCD,OA3RA,SAAcJ,EAAMgB,EAAQC,GAExBjB,EAAKvN,aAAa,aAAc,QAEhCsN,EAAKC,KAAOA,EACZD,EAAKiB,OA9Eb,SAAqB+B,EAAMC,GACvB,IAAK,IAAIC,KAAQD,EACPC,KAAQF,IACVA,EAAKE,GAAQD,EAAKC,IAG1B,OAAOF,CACV,CAuEqBG,CAAYlC,GAAU,CAAC,EAAGf,GACxCF,EAAKkB,QAAkB,IAATA,GACdlB,EAAKoD,OAASzS,MAAM0S,KAAKpD,EAAK9O,iBA7DvB,oEA6DmDmS,IAAI,SAAUxD,GAEpE,IAAIsB,EAAM,GACNC,EAAS,CAAC,EACVW,EAAW,CAAC,EA6BhB,MA3BA,GAAGvP,QAAQ3B,KAAKgP,EAAMyD,YAAY,SAAUL,GACxC,GAAI,kBAAkBxH,KAAKwH,EAAK5E,MAAO,CACnC,IAAIA,EAAO4E,EAAK5E,KAAKkF,OAAO,IACxBC,EAAenF,EAAKoF,MAAM/C,GAC9B,GAAqB,OAAjB8C,EAAuB,CACvB,IAAIE,OAA6BzK,IAApBuK,EAAa,GAAmB,KAAOA,EAAa,GAGjE,OAFKzB,EAAS4B,eAAeD,KAAS3B,EAAS2B,GAAU,CAAC,QAC1D3B,EAAS2B,GAAQrF,EAAKzN,MAAM,EAAGyN,EAAKvM,OAAS0R,EAAa,GAAG1R,SAAWmR,EAAK5G,MAEhF,CACY,SAATgC,IAAiBA,EAAO4E,EAAK5G,OACjC6E,EAAqBC,EAAKC,EAAQ/C,EAAM4E,EAAK5G,MAChD,MAAWmE,EAAmBrO,QAAQ8Q,EAAK5E,MACxC6C,EAAqBC,EAAKC,EAAQ6B,EAAK5E,KAAM4E,EAAK5G,OAC7B,SAAd4G,EAAK5E,MACZ6C,EAAqBC,EAAKC,EAAQ6B,EAAK5G,MAE9C,IAED8E,EAAI3E,MAAK,SAAUC,EAAG1G,GAClB,OAAOA,EAAE+K,SAAWrE,EAAEqE,QACzB,IAEDf,EAAKkB,MAAQpB,EAAMhN,kBAAmB,CAAC,QAAS,YAAYV,QAAQ0N,EAAM1P,aAAa,SAAqB,SAAV,QAAoB,SAAUmJ,GAC5HyG,EAAK6D,SAAStK,EAAEhF,OAAQ,MAAM,EACjC,EAAC3E,KAAKoQ,IAEAF,EAAMC,SAAW,CAAED,MAAOA,EAAOe,WAAYO,EAAKC,OAAQA,EAAQW,SAAUA,EAAUhC,KAAMA,EACtG,EAACpQ,KAAKoQ,GACV,CA5CDnJ,CAAKoJ,EAAMgB,EAAQC,GAgEnBlB,EAAK6D,SAAW,SAAU/D,EAAOgE,GAAwB,IAAhBC,EAAgB,wDACrDD,EAAShE,IAAoB,IAAXgE,IAA6B,IAAVhE,EACrC,IAAIsD,EAASpD,EAAKoD,QACJ,IAAVtD,IAA4B,IAAVA,IACdA,aAAiBkE,YACjBZ,EAAS,CAACtD,EAAMC,WACTD,aAAiBmE,UAAYnE,aAAkBrL,OAAOyP,GAAKvT,QAAUmP,aAAiBnP,SAC7FyS,EAASzS,MAAM0S,KAAKvD,GAAOwD,KAAI,SAAUjB,GACrC,OAAOA,EAAGtC,QACb,MAMT,IAFA,IAAI6B,GAAQ,EAEHrK,EAAI,EAAG6L,EAAO7L,GAAIA,IAAK,CAC5B,IAAImK,EAAQ0B,EAAO7L,GACfkK,EAAeC,IACdoC,GAAUhB,EAAapB,IAExBE,GAAQ,GACPkC,GAAUjB,EAAWnB,GAE7B,CAKD,OAHIqC,GAAUtU,KAAKwR,QAAiD,mBAAhCxR,KAAKwR,OAAOkD,iBAC5C1U,KAAKwR,OAAOkD,kBAETvC,CACV,EAOD5B,EAAKoE,UAAY,SAAUtE,GACvB,IAAKA,EAAO,CAER,IADA,IAAIuE,EAAkB,GACb9M,EAAI,EAAGA,EAAIyI,EAAKoD,OAAOrR,OAAQwF,IAAK,CACzC,IAAImK,EAAQ1B,EAAKoD,OAAO7L,GACpBmK,EAAMC,OAAO5P,QACbsS,EAAgB1Q,KAAK,CAAEmM,MAAO4B,EAAM5B,MAAO6B,OAAQD,EAAMC,QAEhE,CACD,OAAO0C,CACV,CACD,OAAIvE,EAAMwE,SAA2C,WAAhCxE,EAAMwE,QAAQC,cACxBzE,EAAMC,SAAS4B,OAEnB7B,EAAM/N,OAAS+N,EAAM,GAAGC,SAAS4B,OAAS7B,EAAMC,SAAS4B,MACnE,EAkDD3B,EAAKwE,aAAe,SAAUC,EAAM5C,EAAIE,EAAKhB,EAAUkB,GAC/CwC,aAAgBT,cAChBS,EAAK1E,SAASc,WAAWlN,KAAK,CAAEkO,GAAIA,EAAIE,IAAKA,EAAKhB,SAAUA,EAAUkB,KAAMA,IAC5EwC,EAAK1E,SAASc,WAAWpE,MAAK,SAAUC,EAAG1G,GACvC,OAAOA,EAAE+K,SAAWrE,EAAEqE,QACzB,IAIR,EAqDDf,EAAK0E,SAAW,SAAU5E,EAAO6E,IAC7B7E,EAAQA,EAAM/N,OAAS+N,EAAM,GAAKA,GAC5BC,SAAS4B,OAAOhO,KAAKgR,GAC3B9B,EAAW/C,EAAMC,SACpB,EA0BDC,EAAK4E,MAAQ,WACT,IAAK,IAAIrN,EAAI,EAAGyI,EAAKoD,OAAO7L,GAAIA,IAC5ByI,EAAKoD,OAAO7L,GAAG4K,cAAgB,KAEnCxR,MAAM0S,KAAKrD,EAAKC,KAAK9O,iBAAiB,oBAAuBmS,KAAI,SAAUmB,GACvEA,EAAKrG,WAAWb,YAAYkH,EAC/B,IACD9T,MAAM0S,KAAKrD,EAAKC,KAAK9O,iBAAiB,IAAM6O,EAAKiB,OAAOd,UAAUmD,KAAI,SAAUmB,GAC5EA,EAAKrP,UAAU+D,OAAO6G,EAAKiB,OAAOZ,cAClCoE,EAAKrP,UAAU+D,OAAO6G,EAAKiB,OAAOb,WACrC,GACJ,EAKDJ,EAAKzM,QAAU,WACXyM,EAAK4E,QACL5E,EAAKoD,OAAO3Q,SAAQ,SAAUiP,UACnBA,EAAM5B,MAAMC,QACtB,IACDC,EAAKoD,OAAS,EACjB,EAEDpD,EAAK6E,gBAAkB,SAAU5D,GAC7Bf,EAAgBe,CACnB,EAEMjB,CACV,CA2BD,OA/VA/K,EAAE,OAAQ,CAAE4M,GAAI,SAAYiD,GACpB,OAAO,CACV,EAAE/D,SAAU,IACjB9L,EAAE,WAAY,CAAE4M,GAAI,SAAYiD,GACxB,MAAqB,UAAdrV,KAAKgE,MAAkC,aAAdhE,KAAKgE,KAAsBoM,EAAiBpQ,WAAgByJ,IAAR4L,GAA6B,KAARA,CAC5G,EAAE/D,SAAU,GAAIkB,MAAM,IAC3BhN,EAAE,QAAS,CAAE4M,GAAI,SAAYiD,GACrB,OAAQA,GAAOpE,EAAYhF,KAAKoJ,EACnC,IACL7P,EAAE,SAAU,CAAE4M,GAAI,SAAYiD,GACtB,OAAQA,IAAQC,MAAMC,WAAWF,GACpC,EAAE/D,SAAU,IACjB9L,EAAE,UAAW,CAAE4M,GAAI,SAAYiD,GACvB,OAAQA,GAAO,QAAQpJ,KAAKoJ,EAC/B,IACL7P,EAAE,YAAa,CAAE4M,GAAI,SAAYiD,EAAK/S,GAC9B,OAAQ+S,GAAOA,EAAI/S,QAAUkT,SAASlT,EACzC,IACLkD,EAAE,YAAa,CAAE4M,GAAI,SAAYiD,EAAK/S,GAC9B,OAAQ+S,GAAOA,EAAI/S,QAAUkT,SAASlT,EACzC,IACLkD,EAAE,MAAO,CAAE4M,GAAI,SAAYiD,EAAKI,GACxB,OAAQJ,IAAsB,aAAdrV,KAAKgE,KAAsBoM,EAAiBpQ,OAASwV,SAASC,GAASF,WAAWF,IAAQE,WAAWE,GACxH,IACLjQ,EAAE,MAAO,CAAE4M,GAAI,SAAYiD,EAAKI,GACxB,OAAQJ,IAAsB,aAAdrV,KAAKgE,KAAsBoM,EAAiBpQ,OAASwV,SAASC,GAASF,WAAWF,IAAQE,WAAWE,GACxH,IACLjQ,EAAE,UAAW,CAAE4M,GAAI,SAAYiD,EAAKvF,GAC5B,IAAI4F,EAAI5F,EAAQmE,MAAM,IAAI0B,OAAO,uBAAuB,OAAQN,GAAO,IAAIM,OAAOD,EAAE,GAAIA,EAAE,IAAIzJ,KAAKoJ,EACtG,IACL7P,EAAE,SAAU,CAAE4M,GAAI,SAAYiD,EAAKO,GAC3B,IAAIC,EAAQpU,SAASI,cAAc+T,GAAoB,OAAOC,KAAWR,IAAQQ,EAAMhJ,OAASgJ,EAAMhJ,QAAUwI,EACnH,IA+SL9D,EAASwD,aAAe,SAAUlG,EAAMuD,EAAIE,EAAKhB,EAAUkB,GACvDhN,EAAEqJ,EAAM,CAAEuD,GAAIA,EAAIE,IAAKA,EAAKhB,SAAUA,EAAUkB,KAAMA,GACzD,EAEDjB,EAASuE,YAAc,SAAU5B,EAAQ3B,GACrC,IAAIwD,EAAU3G,EAAK+E,eAAeD,GAAU9E,EAAK8E,GAAU9E,EAAK8E,GAAU,CAAC,EAE3EpO,OAAOkF,KAAKuH,GAAUvP,SAAQ,SAAU6B,EAAKT,GACzC2R,EAAQlR,GAAO0N,EAAS1N,EAC3B,GACJ,EAED0M,EAASyE,UAAY,SAAU9B,GAC3B/C,EAAgB+C,CACnB,EAEM3C,CAEV,EAzasB,WAAnB,EAAO7R,GAAwDD,EAAOC,QAAUyF,SAC7B,0BAANC,EAAAA,GAAM,mcCoBvD,SAAS+O,EAAe8B,EAAKC,GAC3B,OAAOpQ,OAAO3E,UAAUgT,eAAe9S,KAAK4U,EAAKC,EACnD,CAEAzW,EAAOC,QAAU,SAASyW,EAAIC,EAAKC,EAAIC,GACrCF,EAAMA,GAAO,IACbC,EAAKA,GAAM,IACX,IAAIJ,EAAM,CAAC,EAEX,GAAkB,iBAAPE,GAAiC,IAAdA,EAAG7T,OAC/B,OAAO2T,EAGT,IAAIM,EAAS,MACbJ,EAAKA,EAAGrE,MAAMsE,GAEd,IAAII,EAAU,IACVF,GAAsC,iBAApBA,EAAQE,UAC5BA,EAAUF,EAAQE,SAGpB,IAAIC,EAAMN,EAAG7T,OAETkU,EAAU,GAAKC,EAAMD,IACvBC,EAAMD,GAGR,IAAK,IAAI1O,EAAI,EAAGA,EAAI2O,IAAO3O,EAAG,CAC5B,IAEI4O,EAAMC,EAAMxH,EAAGd,EAFfhI,EAAI8P,EAAGrO,GAAGwG,QAAQiI,EAAQ,OAC1BK,EAAMvQ,EAAE1D,QAAQ0T,GAGhBO,GAAO,GACTF,EAAOrQ,EAAE0N,OAAO,EAAG6C,GACnBD,EAAOtQ,EAAE0N,OAAO6C,EAAM,KAEtBF,EAAOrQ,EACPsQ,EAAO,IAGTxH,EAAI0H,mBAAmBH,GACvBrI,EAAIwI,mBAAmBF,GAElBxC,EAAe8B,EAAK9G,GAEdjO,MAAM4V,QAAQb,EAAI9G,IAC3B8G,EAAI9G,GAAGjL,KAAKmK,GAEZ4H,EAAI9G,GAAK,CAAC8G,EAAI9G,GAAId,GAJlB4H,EAAI9G,GAAKd,CAMb,CAEA,OAAO4H,CACT,yBCxDA,IAAIc,EAAqB,SAAS1I,GAChC,cAAeA,GACb,IAAK,SACH,OAAOA,EAET,IAAK,UACH,OAAOA,EAAI,OAAS,QAEtB,IAAK,SACH,OAAO2I,SAAS3I,GAAKA,EAAI,GAE3B,QACE,MAAO,GAEb,EAEA5O,EAAOC,QAAU,SAASuW,EAAKG,EAAKC,EAAIxH,GAOtC,OANAuH,EAAMA,GAAO,IACbC,EAAKA,GAAM,IACC,OAARJ,IACFA,OAAMxM,GAGW,iBAARwM,EACFnQ,OAAOkF,KAAKiL,GAAKpC,KAAI,SAAS1E,GACnC,IAAI8H,EAAKC,mBAAmBH,EAAmB5H,IAAMkH,EACrD,OAAInV,MAAM4V,QAAQb,EAAI9G,IACb8G,EAAI9G,GAAG0E,KAAI,SAASxF,GACzB,OAAO4I,EAAKC,mBAAmBH,EAAmB1I,GACpD,IAAGrM,KAAKoU,GAEDa,EAAKC,mBAAmBH,EAAmBd,EAAI9G,IAE1D,IAAGnN,KAAKoU,GAILvH,EACEqI,mBAAmBH,EAAmBlI,IAASwH,EAC/Ca,mBAAmBH,EAAmBd,IAF3B,EAGpB,+BC7DAvW,EAAQyX,OAASzX,EAAQ0X,MAAQ,EAAhB,MACjB1X,EAAQ2X,OAAS3X,EAAQ4X,UAAY,EAApB,4BCHjB,iBACE,SAASC,GAGsC7X,GAC9CA,EAAQ8X,SACoC/X,GAC5CA,EAAO+X,SAHT,IAIIC,EAA8B,iBAAV,EAAAC,GAAsB,EAAAA,EAE7CD,EAAWrJ,SAAWqJ,GACtBA,EAAWzS,SAAWyS,GACtBA,EAAWlH,KAUZ,IAAIoH,EAGJC,EAAS,WAGTC,EAAO,GAUPC,EAAgB,QAChBC,EAAgB,eAChBC,EAAkB,4BAGlB9F,EAAS,CACR,SAAY,kDACZ,YAAa,iDACb,gBAAiB,iBAKlBzJ,EAAQF,KAAKE,MACbwP,EAAqBC,OAAOC,aAa5B,SAASjD,EAAMlR,GACd,MAAMoU,WAAWlG,EAAOlO,GACzB,CAUA,SAAS6P,EAAIwE,EAAOjG,GAGnB,IAFA,IAAI9P,EAAS+V,EAAM/V,OACfgW,EAAS,GACNhW,KACNgW,EAAOhW,GAAU8P,EAAGiG,EAAM/V,IAE3B,OAAOgW,CACR,CAYA,SAASC,EAAUC,EAAQpG,GAC1B,IAAIqG,EAAQD,EAAO1G,MAAM,KACrBwG,EAAS,GAWb,OAVIG,EAAMnW,OAAS,IAGlBgW,EAASG,EAAM,GAAK,IACpBD,EAASC,EAAM,IAMTH,EADOzE,GAFd2E,EAASA,EAAOlK,QAAQ0J,EAAiB,MACrBlG,MAAM,KACAM,GAAIpQ,KAAK,IAEpC,CAeA,SAAS0W,EAAWF,GAMnB,IALA,IAGI3L,EACA8L,EAJAC,EAAS,GACTC,EAAU,EACVvW,EAASkW,EAAOlW,OAGbuW,EAAUvW,IAChBuK,EAAQ2L,EAAOM,WAAWD,OACb,OAAUhM,GAAS,OAAUgM,EAAUvW,EAG3B,QAAX,OADbqW,EAAQH,EAAOM,WAAWD,OAEzBD,EAAO1U,OAAe,KAAR2I,IAAkB,KAAe,KAAR8L,GAAiB,QAIxDC,EAAO1U,KAAK2I,GACZgM,KAGDD,EAAO1U,KAAK2I,GAGd,OAAO+L,CACR,CAUA,SAASG,EAAWV,GACnB,OAAOxE,EAAIwE,GAAO,SAASxL,GAC1B,IAAI+L,EAAS,GAOb,OANI/L,EAAQ,QAEX+L,GAAUX,GADVpL,GAAS,SAC8B,GAAK,KAAQ,OACpDA,EAAQ,MAAiB,KAARA,GAElB+L,GAAUX,EAAmBpL,EAE9B,IAAG7K,KAAK,GACT,CAmCA,SAASgX,EAAaC,EAAOC,GAG5B,OAAOD,EAAQ,GAAK,IAAMA,EAAQ,MAAgB,GAARC,IAAc,EACzD,CAOA,SAASC,EAAMC,EAAOC,EAAWC,GAChC,IAAInK,EAAI,EAGR,IAFAiK,EAAQE,EAAY7Q,EAAM2Q,EA1LpB,KA0LoCA,GAAS,EACnDA,GAAS3Q,EAAM2Q,EAAQC,GACOD,EAAQG,IAA2BpK,GAAK0I,EACrEuB,EAAQ3Q,EAAM2Q,EA3KAvB,IA6Kf,OAAOpP,EAAM0G,EAAI,GAAsBiK,GAASA,EAhM1C,IAiMP,CASA,SAASjC,EAAO9G,GAEf,IAEImJ,EAIAC,EACAC,EACAtV,EACAuV,EACAC,EACAzK,EACA8J,EACA3S,EAEAuT,EArEiBC,EAsDjBlB,EAAS,GACTmB,EAAc1J,EAAM/N,OAEpBwF,EAAI,EACJkS,EA7MM,IA8MNC,EA/MS,GAoOb,KALAR,EAAQpJ,EAAM6J,YA7NH,MA8NC,IACXT,EAAQ,GAGJC,EAAI,EAAGA,EAAID,IAASC,EAEpBrJ,EAAMyI,WAAWY,IAAM,KAC1BxE,EAAM,aAEP0D,EAAO1U,KAAKmM,EAAMyI,WAAWY,IAM9B,IAAKtV,EAAQqV,EAAQ,EAAIA,EAAQ,EAAI,EAAGrV,EAAQ2V,GAAwC,CAOvF,IAAKJ,EAAO7R,EAAG8R,EAAI,EAAGzK,EAAI0I,EAErBzT,GAAS2V,GACZ7E,EAAM,mBAGP+D,GAxGmBa,EAwGEzJ,EAAMyI,WAAW1U,MAvGxB,GAAK,GACb0V,EAAY,GAEhBA,EAAY,GAAK,GACbA,EAAY,GAEhBA,EAAY,GAAK,GACbA,EAAY,GAEbjC,IAgGQA,GAAQoB,EAAQxQ,GAAOmP,EAAS9P,GAAK8R,KACjD1E,EAAM,YAGPpN,GAAKmR,EAAQW,IAGTX,GAFJ3S,EAAI6I,GAAK8K,EAvQL,EAuQoB9K,GAAK8K,EAtQzB,MAsQ8C9K,EAAI8K,IAbH9K,GAAK0I,EAoBpD+B,EAAInR,EAAMmP,GADdiC,EAAahC,EAAOvR,KAEnB4O,EAAM,YAGP0E,GAAKC,EAKNI,EAAOd,EAAMrR,EAAI6R,EADjBH,EAAMZ,EAAOtW,OAAS,EACc,GAARqX,GAIxBlR,EAAMX,EAAI0R,GAAO5B,EAASoC,GAC7B9E,EAAM,YAGP8E,GAAKvR,EAAMX,EAAI0R,GACf1R,GAAK0R,EAGLZ,EAAOvU,OAAOyD,IAAK,EAAGkS,EAEvB,CAEA,OAAOjB,EAAWH,EACnB,CASA,SAASvB,EAAOhH,GACf,IAAI2J,EACAZ,EACAe,EACAC,EACAH,EACAP,EACAhE,EACA2E,EACAlL,EACA7I,EACAgU,EAGAP,EAEAQ,EACAV,EACAW,EANA5B,EAAS,GAoBb,IARAmB,GAHA1J,EAAQqI,EAAWrI,IAGC/N,OAGpB0X,EAvUU,IAwUVZ,EAAQ,EACRa,EA1Ua,GA6URP,EAAI,EAAGA,EAAIK,IAAeL,GAC9BY,EAAejK,EAAMqJ,IACF,KAClBd,EAAO1U,KAAK+T,EAAmBqC,IAejC,IAXAH,EAAiBC,EAAcxB,EAAOtW,OAMlC8X,GACHxB,EAAO1U,KAzVG,KA6VJiW,EAAiBJ,GAAa,CAIpC,IAAKrE,EAAIkC,EAAQ8B,EAAI,EAAGA,EAAIK,IAAeL,GAC1CY,EAAejK,EAAMqJ,KACDM,GAAKM,EAAe5E,IACvCA,EAAI4E,GAcN,IAPI5E,EAAIsE,EAAIvR,GAAOmP,EAASwB,IAD5BmB,EAAwBJ,EAAiB,KAExCjF,EAAM,YAGPkE,IAAU1D,EAAIsE,GAAKO,EACnBP,EAAItE,EAECgE,EAAI,EAAGA,EAAIK,IAAeL,EAO9B,IANAY,EAAejK,EAAMqJ,IAEFM,KAAOZ,EAAQxB,GACjC1C,EAAM,YAGHoF,GAAgBN,EAAG,CAEtB,IAAKK,EAAIjB,EAAOjK,EAAI0I,IAEfwC,GADJ/T,EAAI6I,GAAK8K,EAlYP,EAkYsB9K,GAAK8K,EAjY3B,MAiYgD9K,EAAI8K,IADT9K,GAAK0I,EAKlD2C,EAAUH,EAAI/T,EACduT,EAAahC,EAAOvR,EACpBsS,EAAO1U,KACN+T,EAAmBe,EAAa1S,EAAIkU,EAAUX,EAAY,KAE3DQ,EAAI5R,EAAM+R,EAAUX,GAGrBjB,EAAO1U,KAAK+T,EAAmBe,EAAaqB,EAAG,KAC/CJ,EAAOd,EAAMC,EAAOmB,EAAuBJ,GAAkBC,GAC7DhB,EAAQ,IACNe,CACH,GAGCf,IACAY,CAEH,CACA,OAAOpB,EAAO5W,KAAK,GACpB,CA2CA2V,EAAW,CAMV,QAAW,QAQX,KAAQ,CACP,OAAUe,EACV,OAAUK,GAEX,OAAU5B,EACV,OAAUE,EACV,QA/BD,SAAiBhH,GAChB,OAAOkI,EAAUlI,GAAO,SAASmI,GAChC,OAAOT,EAAc9L,KAAKuM,GACvB,OAASnB,EAAOmB,GAChBA,CACJ,GACD,EA0BC,UAnDD,SAAmBnI,GAClB,OAAOkI,EAAUlI,GAAO,SAASmI,GAChC,OAAOV,EAAc7L,KAAKuM,GACvBrB,EAAOqB,EAAOpX,MAAM,GAAG0T,eACvB0D,CACJ,GACD,QA0DE,KAFD,aACC,OAAOb,CACP,+BAaH,CAhhBC,oCCsBGA,EAAW,EAAQ,MACnB8C,EAAO,EAAQ,MASnB,SAASC,IACP1a,KAAK2a,SAAW,KAChB3a,KAAK4a,QAAU,KACf5a,KAAK6a,KAAO,KACZ7a,KAAK8a,KAAO,KACZ9a,KAAK+a,KAAO,KACZ/a,KAAKgb,SAAW,KAChBhb,KAAKib,KAAO,KACZjb,KAAKkb,OAAS,KACdlb,KAAKmb,MAAQ,KACbnb,KAAKob,SAAW,KAChBpb,KAAKqb,KAAO,KACZrb,KAAKsb,KAAO,IACd,CAMA,IAAIC,EAAkB,oBAClBC,EAAc,WAGdC,EAAoB,qCAOpBC,EAAS,CAAC,IAAK,IAAK,IAAK,KAAM,IAAK,KAAKjY,OAHhC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,OAM/CkY,EAAa,CAAC,KAAMlY,OAAOiY,GAK3BE,EAAe,CAAC,IAAK,IAAK,IAAK,IAAK,KAAKnY,OAAOkY,GAChDE,EAAkB,CAAC,IAAK,IAAK,KAE7BC,EAAsB,yBACtBC,EAAoB,+BAEpBC,EAAiB,CACf,YAAc,EACd,eAAe,GAGjBC,EAAmB,CACjB,YAAc,EACd,eAAe,GAGjBC,EAAkB,CAChB,MAAQ,EACR,OAAS,EACT,KAAO,EACP,QAAU,EACV,MAAQ,EACR,SAAS,EACT,UAAU,EACV,QAAQ,EACR,WAAW,EACX,SAAS,GAEXC,EAAc,EAAQ,MAE1B,SAASC,EAAS1M,EAAK2M,EAAkBC,GACvC,GAAI5M,GAAO+K,EAAK8B,SAAS7M,IAAQA,aAAegL,EAAK,OAAOhL,EAE5D,IAAI8M,EAAI,IAAI9B,EAEZ,OADA8B,EAAEpF,MAAM1H,EAAK2M,EAAkBC,GACxBE,CACT,CAEA9B,EAAIvZ,UAAUiW,MAAQ,SAAS1H,EAAK2M,EAAkBC,GACpD,IAAK7B,EAAKgC,SAAS/M,GACjB,MAAM,IAAIgN,UAAU,gDAAkDhN,GAMxE,IAAIiN,EAAajN,EAAI/M,QAAQ,KACzBia,GACqB,IAAhBD,GAAqBA,EAAajN,EAAI/M,QAAQ,KAAQ,IAAM,IACjEka,EAASnN,EAAIoC,MAAM8K,GAEvBC,EAAO,GAAKA,EAAO,GAAGvO,QADL,MACyB,KAG1C,IAAIwO,EAFJpN,EAAMmN,EAAO7a,KAAK4a,GAQlB,GAFAE,EAAOA,EAAKC,QAEPT,GAA+C,IAA1B5M,EAAIoC,MAAM,KAAKxP,OAAc,CAErD,IAAI0a,EAAavB,EAAkBwB,KAAKH,GACxC,GAAIE,EAeF,OAdAhd,KAAKqb,KAAOyB,EACZ9c,KAAKsb,KAAOwB,EACZ9c,KAAKob,SAAW4B,EAAW,GACvBA,EAAW,IACbhd,KAAKkb,OAAS8B,EAAW,GAEvBhd,KAAKmb,MADHkB,EACWF,EAAY/E,MAAMpX,KAAKkb,OAAOnH,OAAO,IAErC/T,KAAKkb,OAAOnH,OAAO,IAEzBsI,IACTrc,KAAKkb,OAAS,GACdlb,KAAKmb,MAAQ,CAAC,GAETnb,IAEX,CAEA,IAAIkd,EAAQ3B,EAAgB0B,KAAKH,GACjC,GAAII,EAAO,CAET,IAAIC,GADJD,EAAQA,EAAM,IACSpI,cACvB9U,KAAK2a,SAAWwC,EAChBL,EAAOA,EAAK/I,OAAOmJ,EAAM5a,OAC3B,CAMA,GAAIga,GAAqBY,GAASJ,EAAK7I,MAAM,wBAAyB,CACpE,IAAI2G,EAAgC,OAAtBkC,EAAK/I,OAAO,EAAG,IACzB6G,GAAasC,GAASjB,EAAiBiB,KACzCJ,EAAOA,EAAK/I,OAAO,GACnB/T,KAAK4a,SAAU,EAEnB,CAEA,IAAKqB,EAAiBiB,KACjBtC,GAAYsC,IAAUhB,EAAgBgB,IAAU,CAmBnD,IADA,IASIrC,EAAMuC,EATNC,GAAW,EACNvV,EAAI,EAAGA,EAAI+T,EAAgBvZ,OAAQwF,IAAK,EAElC,KADTwV,EAAMR,EAAKna,QAAQkZ,EAAgB/T,QACP,IAAbuV,GAAkBC,EAAMD,KACzCA,EAAUC,EACd,EAgBgB,KATdF,GAFe,IAAbC,EAEOP,EAAK5C,YAAY,KAIjB4C,EAAK5C,YAAY,IAAKmD,MAM/BxC,EAAOiC,EAAK1b,MAAM,EAAGgc,GACrBN,EAAOA,EAAK1b,MAAMgc,EAAS,GAC3Bpd,KAAK6a,KAAOhE,mBAAmBgE,IAIjCwC,GAAW,EACX,IAASvV,EAAI,EAAGA,EAAI8T,EAAatZ,OAAQwF,IAAK,CAC5C,IAAIwV,GACS,KADTA,EAAMR,EAAKna,QAAQiZ,EAAa9T,QACJ,IAAbuV,GAAkBC,EAAMD,KACzCA,EAAUC,EACd,EAEiB,IAAbD,IACFA,EAAUP,EAAKxa,QAEjBtC,KAAK8a,KAAOgC,EAAK1b,MAAM,EAAGic,GAC1BP,EAAOA,EAAK1b,MAAMic,GAGlBrd,KAAKud,YAILvd,KAAKgb,SAAWhb,KAAKgb,UAAY,GAIjC,IAAIwC,EAAoC,MAArBxd,KAAKgb,SAAS,IACe,MAA5Chb,KAAKgb,SAAShb,KAAKgb,SAAS1Y,OAAS,GAGzC,IAAKkb,EAEH,IADA,IAAIC,EAAYzd,KAAKgb,SAASlJ,MAAM,MACpB4L,GAAP5V,EAAI,EAAO2V,EAAUnb,QAAQwF,EAAI4V,EAAG5V,IAAK,CAChD,IAAI6V,EAAOF,EAAU3V,GACrB,GAAK6V,IACAA,EAAK1J,MAAM6H,GAAsB,CAEpC,IADA,IAAI8B,EAAU,GACLlE,EAAI,EAAGvK,EAAIwO,EAAKrb,OAAQoX,EAAIvK,EAAGuK,IAClCiE,EAAK7E,WAAWY,GAAK,IAIvBkE,GAAW,IAEXA,GAAWD,EAAKjE,GAIpB,IAAKkE,EAAQ3J,MAAM6H,GAAsB,CACvC,IAAI+B,EAAaJ,EAAUrc,MAAM,EAAG0G,GAChCgW,EAAUL,EAAUrc,MAAM0G,EAAI,GAC9BiW,EAAMJ,EAAK1J,MAAM8H,GACjBgC,IACFF,EAAW3Z,KAAK6Z,EAAI,IACpBD,EAAQ/L,QAAQgM,EAAI,KAElBD,EAAQxb,SACVwa,EAAO,IAAMgB,EAAQ9b,KAAK,KAAO8a,GAEnC9c,KAAKgb,SAAW6C,EAAW7b,KAAK,KAChC,KACF,CACF,CACF,CAGEhC,KAAKgb,SAAS1Y,OAjND,IAkNftC,KAAKgb,SAAW,GAGhBhb,KAAKgb,SAAWhb,KAAKgb,SAASlG,cAG3B0I,IAKHxd,KAAKgb,SAAWrD,EAASqG,QAAQhe,KAAKgb,WAGxC,IAAIiD,EAAIje,KAAK+a,KAAO,IAAM/a,KAAK+a,KAAO,GAClCmD,EAAIle,KAAKgb,UAAY,GACzBhb,KAAK8a,KAAOoD,EAAID,EAChBje,KAAKsb,MAAQtb,KAAK8a,KAId0C,IACFxd,KAAKgb,SAAWhb,KAAKgb,SAASjH,OAAO,EAAG/T,KAAKgb,SAAS1Y,OAAS,GAC/C,MAAZwa,EAAK,KACPA,EAAO,IAAMA,GAGnB,CAIA,IAAKd,EAAemB,GAKlB,IAASrV,EAAI,EAAG4V,EAAI/B,EAAWrZ,OAAQwF,EAAI4V,EAAG5V,IAAK,CACjD,IAAIqW,EAAKxC,EAAW7T,GACpB,IAA0B,IAAtBgV,EAAKna,QAAQwb,GAAjB,CAEA,IAAIC,EAAMlH,mBAAmBiH,GACzBC,IAAQD,IACVC,EAAMC,OAAOF,IAEfrB,EAAOA,EAAKhL,MAAMqM,GAAInc,KAAKoc,EALjB,CAMZ,CAKF,IAAInD,EAAO6B,EAAKna,QAAQ,MACV,IAAVsY,IAEFjb,KAAKib,KAAO6B,EAAK/I,OAAOkH,GACxB6B,EAAOA,EAAK1b,MAAM,EAAG6Z,IAEvB,IAAIqD,EAAKxB,EAAKna,QAAQ,KAoBtB,IAnBY,IAAR2b,GACFte,KAAKkb,OAAS4B,EAAK/I,OAAOuK,GAC1Bte,KAAKmb,MAAQ2B,EAAK/I,OAAOuK,EAAK,GAC1BjC,IACFrc,KAAKmb,MAAQgB,EAAY/E,MAAMpX,KAAKmb,QAEtC2B,EAAOA,EAAK1b,MAAM,EAAGkd,IACZjC,IAETrc,KAAKkb,OAAS,GACdlb,KAAKmb,MAAQ,CAAC,GAEZ2B,IAAM9c,KAAKob,SAAW0B,GACtBZ,EAAgBiB,IAChBnd,KAAKgb,WAAahb,KAAKob,WACzBpb,KAAKob,SAAW,KAIdpb,KAAKob,UAAYpb,KAAKkb,OAAQ,CAC5B+C,EAAIje,KAAKob,UAAY,GAAzB,IACImD,EAAIve,KAAKkb,QAAU,GACvBlb,KAAKqb,KAAO4C,EAAIM,CAClB,CAIA,OADAve,KAAKsb,KAAOtb,KAAKwe,SACVxe,IACT,EAaA0a,EAAIvZ,UAAUqd,OAAS,WACrB,IAAI3D,EAAO7a,KAAK6a,MAAQ,GACpBA,IAEFA,GADAA,EAAO3D,mBAAmB2D,IACdvM,QAAQ,OAAQ,KAC5BuM,GAAQ,KAGV,IAAIF,EAAW3a,KAAK2a,UAAY,GAC5BS,EAAWpb,KAAKob,UAAY,GAC5BH,EAAOjb,KAAKib,MAAQ,GACpBH,GAAO,EACPK,EAAQ,GAERnb,KAAK8a,KACPA,EAAOD,EAAO7a,KAAK8a,KACV9a,KAAKgb,WACdF,EAAOD,IAAwC,IAAhC7a,KAAKgb,SAASrY,QAAQ,KACjC3C,KAAKgb,SACL,IAAMhb,KAAKgb,SAAW,KACtBhb,KAAK+a,OACPD,GAAQ,IAAM9a,KAAK+a,OAInB/a,KAAKmb,OACLV,EAAK8B,SAASvc,KAAKmb,QACnBrV,OAAOkF,KAAKhL,KAAKmb,OAAO7Y,SAC1B6Y,EAAQgB,EAAY7E,UAAUtX,KAAKmb,QAGrC,IAAID,EAASlb,KAAKkb,QAAWC,GAAU,IAAMA,GAAW,GAsBxD,OApBIR,GAAoC,MAAxBA,EAAS5G,QAAQ,KAAY4G,GAAY,KAIrD3a,KAAK4a,WACHD,GAAYuB,EAAgBvB,MAAuB,IAATG,GAC9CA,EAAO,MAAQA,GAAQ,IACnBM,GAAmC,MAAvBA,EAASqD,OAAO,KAAYrD,EAAW,IAAMA,IACnDN,IACVA,EAAO,IAGLG,GAA2B,MAAnBA,EAAKwD,OAAO,KAAYxD,EAAO,IAAMA,GAC7CC,GAA+B,MAArBA,EAAOuD,OAAO,KAAYvD,EAAS,IAAMA,GAOhDP,EAAWG,GALlBM,EAAWA,EAAS9M,QAAQ,SAAS,SAAS2F,GAC5C,OAAOiD,mBAAmBjD,EAC5B,MACAiH,EAASA,EAAO5M,QAAQ,IAAK,QAEgB2M,CAC/C,EAMAP,EAAIvZ,UAAUud,QAAU,SAASC,GAC/B,OAAO3e,KAAK4e,cAAcxC,EAASuC,GAAU,GAAO,IAAOH,QAC7D,EAOA9D,EAAIvZ,UAAUyd,cAAgB,SAASD,GACrC,GAAIlE,EAAKgC,SAASkC,GAAW,CAC3B,IAAIE,EAAM,IAAInE,EACdmE,EAAIzH,MAAMuH,GAAU,GAAO,GAC3BA,EAAWE,CACb,CAIA,IAFA,IAAIvG,EAAS,IAAIoC,EACboE,EAAQhZ,OAAOkF,KAAKhL,MACf+e,EAAK,EAAGA,EAAKD,EAAMxc,OAAQyc,IAAM,CACxC,IAAIC,EAAOF,EAAMC,GACjBzG,EAAO0G,GAAQhf,KAAKgf,EACtB,CAOA,GAHA1G,EAAO2C,KAAO0D,EAAS1D,KAGD,KAAlB0D,EAASrD,KAEX,OADAhD,EAAOgD,KAAOhD,EAAOkG,SACdlG,EAIT,GAAIqG,EAAS/D,UAAY+D,EAAShE,SAAU,CAG1C,IADA,IAAIsE,EAAQnZ,OAAOkF,KAAK2T,GACfO,EAAK,EAAGA,EAAKD,EAAM3c,OAAQ4c,IAAM,CACxC,IAAIC,EAAOF,EAAMC,GACJ,aAATC,IACF7G,EAAO6G,GAAQR,EAASQ,GAC5B,CASA,OANIjD,EAAgB5D,EAAOqC,WACvBrC,EAAO0C,WAAa1C,EAAO8C,WAC7B9C,EAAO+C,KAAO/C,EAAO8C,SAAW,KAGlC9C,EAAOgD,KAAOhD,EAAOkG,SACdlG,CACT,CAEA,GAAIqG,EAAShE,UAAYgE,EAAShE,WAAarC,EAAOqC,SAAU,CAS9D,IAAKuB,EAAgByC,EAAShE,UAAW,CAEvC,IADA,IAAI3P,EAAOlF,OAAOkF,KAAK2T,GACdtQ,EAAI,EAAGA,EAAIrD,EAAK1I,OAAQ+L,IAAK,CACpC,IAAIc,EAAInE,EAAKqD,GACbiK,EAAOnJ,GAAKwP,EAASxP,EACvB,CAEA,OADAmJ,EAAOgD,KAAOhD,EAAOkG,SACdlG,CACT,CAGA,GADAA,EAAOqC,SAAWgE,EAAShE,SACtBgE,EAAS7D,MAASmB,EAAiB0C,EAAShE,UAS/CrC,EAAO8C,SAAWuD,EAASvD,aAT+B,CAE1D,IADA,IAAIgE,GAAWT,EAASvD,UAAY,IAAItJ,MAAM,KACvCsN,EAAQ9c,UAAYqc,EAAS7D,KAAOsE,EAAQC,WAC9CV,EAAS7D,OAAM6D,EAAS7D,KAAO,IAC/B6D,EAAS3D,WAAU2D,EAAS3D,SAAW,IACzB,KAAfoE,EAAQ,IAAWA,EAAQrN,QAAQ,IACnCqN,EAAQ9c,OAAS,GAAG8c,EAAQrN,QAAQ,IACxCuG,EAAO8C,SAAWgE,EAAQpd,KAAK,IACjC,CAUA,GAPAsW,EAAO4C,OAASyD,EAASzD,OACzB5C,EAAO6C,MAAQwD,EAASxD,MACxB7C,EAAOwC,KAAO6D,EAAS7D,MAAQ,GAC/BxC,EAAOuC,KAAO8D,EAAS9D,KACvBvC,EAAO0C,SAAW2D,EAAS3D,UAAY2D,EAAS7D,KAChDxC,EAAOyC,KAAO4D,EAAS5D,KAEnBzC,EAAO8C,UAAY9C,EAAO4C,OAAQ,CACpC,IAAI+C,EAAI3F,EAAO8C,UAAY,GACvBmD,EAAIjG,EAAO4C,QAAU,GACzB5C,EAAO+C,KAAO4C,EAAIM,CACpB,CAGA,OAFAjG,EAAOsC,QAAUtC,EAAOsC,SAAW+D,EAAS/D,QAC5CtC,EAAOgD,KAAOhD,EAAOkG,SACdlG,CACT,CAEA,IAAIgH,EAAehH,EAAO8C,UAA0C,MAA9B9C,EAAO8C,SAASqD,OAAO,GACzDc,EACIZ,EAAS7D,MACT6D,EAASvD,UAA4C,MAAhCuD,EAASvD,SAASqD,OAAO,GAElDe,EAAcD,GAAYD,GACXhH,EAAOwC,MAAQ6D,EAASvD,SACvCqE,EAAgBD,EAChBE,EAAUpH,EAAO8C,UAAY9C,EAAO8C,SAAStJ,MAAM,MAAQ,GAE3D6N,GADAP,EAAUT,EAASvD,UAAYuD,EAASvD,SAAStJ,MAAM,MAAQ,GACnDwG,EAAOqC,WAAauB,EAAgB5D,EAAOqC,WA2B3D,GApBIgF,IACFrH,EAAO0C,SAAW,GAClB1C,EAAOyC,KAAO,KACVzC,EAAOwC,OACU,KAAf4E,EAAQ,GAAWA,EAAQ,GAAKpH,EAAOwC,KACtC4E,EAAQ3N,QAAQuG,EAAOwC,OAE9BxC,EAAOwC,KAAO,GACV6D,EAAShE,WACXgE,EAAS3D,SAAW,KACpB2D,EAAS5D,KAAO,KACZ4D,EAAS7D,OACQ,KAAfsE,EAAQ,GAAWA,EAAQ,GAAKT,EAAS7D,KACxCsE,EAAQrN,QAAQ4M,EAAS7D,OAEhC6D,EAAS7D,KAAO,MAElB0E,EAAaA,IAA8B,KAAfJ,EAAQ,IAA4B,KAAfM,EAAQ,KAGvDH,EAEFjH,EAAOwC,KAAQ6D,EAAS7D,MAA0B,KAAlB6D,EAAS7D,KAC3B6D,EAAS7D,KAAOxC,EAAOwC,KACrCxC,EAAO0C,SAAY2D,EAAS3D,UAAkC,KAAtB2D,EAAS3D,SAC/B2D,EAAS3D,SAAW1C,EAAO0C,SAC7C1C,EAAO4C,OAASyD,EAASzD,OACzB5C,EAAO6C,MAAQwD,EAASxD,MACxBuE,EAAUN,OAEL,GAAIA,EAAQ9c,OAGZod,IAASA,EAAU,IACxBA,EAAQE,MACRF,EAAUA,EAAQjc,OAAO2b,GACzB9G,EAAO4C,OAASyD,EAASzD,OACzB5C,EAAO6C,MAAQwD,EAASxD,WACnB,IAAKV,EAAKoF,kBAAkBlB,EAASzD,QAAS,CAInD,GAAIyE,EACFrH,EAAO0C,SAAW1C,EAAOwC,KAAO4E,EAAQL,SAIpCS,KAAaxH,EAAOwC,MAAQxC,EAAOwC,KAAKnY,QAAQ,KAAO,IAC1C2V,EAAOwC,KAAKhJ,MAAM,QAEjCwG,EAAOuC,KAAOiF,EAAWT,QACzB/G,EAAOwC,KAAOxC,EAAO0C,SAAW8E,EAAWT,SAW/C,OARA/G,EAAO4C,OAASyD,EAASzD,OACzB5C,EAAO6C,MAAQwD,EAASxD,MAEnBV,EAAKsF,OAAOzH,EAAO8C,WAAcX,EAAKsF,OAAOzH,EAAO4C,UACvD5C,EAAO+C,MAAQ/C,EAAO8C,SAAW9C,EAAO8C,SAAW,KACpC9C,EAAO4C,OAAS5C,EAAO4C,OAAS,KAEjD5C,EAAOgD,KAAOhD,EAAOkG,SACdlG,CACT,CAEA,IAAKoH,EAAQpd,OAWX,OARAgW,EAAO8C,SAAW,KAEd9C,EAAO4C,OACT5C,EAAO+C,KAAO,IAAM/C,EAAO4C,OAE3B5C,EAAO+C,KAAO,KAEhB/C,EAAOgD,KAAOhD,EAAOkG,SACdlG,EAcT,IARA,IAAI0H,EAAON,EAAQte,OAAO,GAAG,GACzB6e,GACC3H,EAAOwC,MAAQ6D,EAAS7D,MAAQ4E,EAAQpd,OAAS,KACxC,MAAT0d,GAAyB,OAATA,IAA2B,KAATA,EAInCE,EAAK,EACApY,EAAI4X,EAAQpd,OAAQwF,GAAK,EAAGA,IAEtB,OADbkY,EAAON,EAAQ5X,IAEb4X,EAAQrb,OAAOyD,EAAG,GACA,OAATkY,GACTN,EAAQrb,OAAOyD,EAAG,GAClBoY,KACSA,IACTR,EAAQrb,OAAOyD,EAAG,GAClBoY,KAKJ,IAAKV,IAAeC,EAClB,KAAOS,IAAMA,EACXR,EAAQ3N,QAAQ,OAIhByN,GAA6B,KAAfE,EAAQ,IACpBA,EAAQ,IAA+B,MAAzBA,EAAQ,GAAGjB,OAAO,IACpCiB,EAAQ3N,QAAQ,IAGdkO,GAAsD,MAAjCP,EAAQ1d,KAAK,KAAK+R,QAAQ,IACjD2L,EAAQxb,KAAK,IAGf,IAUM4b,EAVFK,EAA4B,KAAfT,EAAQ,IACpBA,EAAQ,IAA+B,MAAzBA,EAAQ,GAAGjB,OAAO,GAGjCkB,IACFrH,EAAO0C,SAAW1C,EAAOwC,KAAOqF,EAAa,GACbT,EAAQpd,OAASod,EAAQL,QAAU,IAI/DS,KAAaxH,EAAOwC,MAAQxC,EAAOwC,KAAKnY,QAAQ,KAAO,IAC1C2V,EAAOwC,KAAKhJ,MAAM,QAEjCwG,EAAOuC,KAAOiF,EAAWT,QACzB/G,EAAOwC,KAAOxC,EAAO0C,SAAW8E,EAAWT,UAyB/C,OArBAG,EAAaA,GAAelH,EAAOwC,MAAQ4E,EAAQpd,UAEhC6d,GACjBT,EAAQ3N,QAAQ,IAGb2N,EAAQpd,OAIXgW,EAAO8C,SAAWsE,EAAQ1d,KAAK,MAH/BsW,EAAO8C,SAAW,KAClB9C,EAAO+C,KAAO,MAMXZ,EAAKsF,OAAOzH,EAAO8C,WAAcX,EAAKsF,OAAOzH,EAAO4C,UACvD5C,EAAO+C,MAAQ/C,EAAO8C,SAAW9C,EAAO8C,SAAW,KACpC9C,EAAO4C,OAAS5C,EAAO4C,OAAS,KAEjD5C,EAAOuC,KAAO8D,EAAS9D,MAAQvC,EAAOuC,KACtCvC,EAAOsC,QAAUtC,EAAOsC,SAAW+D,EAAS/D,QAC5CtC,EAAOgD,KAAOhD,EAAOkG,SACdlG,CACT,EAEAoC,EAAIvZ,UAAUoc,UAAY,WACxB,IAAIzC,EAAO9a,KAAK8a,KACZC,EAAOS,EAAYyB,KAAKnC,GACxBC,IAEW,OADbA,EAAOA,EAAK,MAEV/a,KAAK+a,KAAOA,EAAKhH,OAAO,IAE1B+G,EAAOA,EAAK/G,OAAO,EAAG+G,EAAKxY,OAASyY,EAAKzY,SAEvCwY,IAAM9a,KAAKgb,SAAWF,EAC5B,yBCztBArb,EAAOC,QAAU,CACf+c,SAAU,SAAS3N,GACjB,MAAuB,iBAAV,CACf,EACAyN,SAAU,SAASzN,GACjB,MAAuB,iBAAV,GAA8B,OAARA,CACrC,EACAiR,OAAQ,SAASjR,GACf,OAAe,OAARA,CACT,EACA+Q,kBAAmB,SAAS/Q,GAC1B,OAAc,MAAPA,CACT,KCbEsR,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqB7W,IAAjB8W,EACH,OAAOA,EAAa7gB,QAGrB,IAAID,EAAS2gB,EAAyBE,GAAY,CACjD1f,GAAI0f,EACJE,QAAQ,EACR9gB,QAAS,CAAC,GAUX,OANA+gB,EAAoBH,GAAUjf,KAAK5B,EAAOC,QAASD,EAAQA,EAAOC,QAAS2gB,GAG3E5gB,EAAO+gB,QAAS,EAGT/gB,EAAOC,OACf,CCxBA2gB,EAAoBrG,EAAKva,IACxB,IAAIihB,EAASjhB,GAAUA,EAAOkhB,WAC7B,IAAOlhB,EAAiB,QACxB,IAAM,EAEP,OADA4gB,EAAoB5Z,EAAEia,EAAQ,CAAEzT,EAAGyT,IAC5BA,CAAM,ECLdL,EAAoB5Z,EAAI,CAAC/G,EAASkhB,KACjC,IAAI,IAAI/b,KAAO+b,EACXP,EAAoBpQ,EAAE2Q,EAAY/b,KAASwb,EAAoBpQ,EAAEvQ,EAASmF,IAC5EiB,OAAO+a,eAAenhB,EAASmF,EAAK,CAAEic,YAAY,EAAMC,IAAKH,EAAW/b,IAE1E,ECNDwb,EAAoB3I,EAAI,WACvB,GAA0B,iBAAfsJ,WAAyB,OAAOA,WAC3C,IACC,OAAOhhB,MAAQ,IAAIihB,SAAS,cAAb,EAGhB,CAFE,MAAOnX,GACR,GAAsB,iBAAX9E,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBqb,EAAoBpQ,EAAI,CAACgG,EAAKC,IAAUpQ,OAAO3E,UAAUgT,eAAe9S,KAAK4U,EAAKC,GCClFmK,EAAoBa,EAAKxhB,IACH,oBAAXyhB,QAA0BA,OAAOC,aAC1Ctb,OAAO+a,eAAenhB,EAASyhB,OAAOC,YAAa,CAAEvU,MAAO,WAE7D/G,OAAO+a,eAAenhB,EAAS,aAAc,CAAEmN,OAAO,GAAO,ECL9DwT,EAAoBgB,IAAO5hB,IAC1BA,EAAO6hB,MAAQ,GACV7hB,EAAOwH,WAAUxH,EAAOwH,SAAW,IACjCxH,SCHR,IAAI8hB,EACAlB,EAAoB3I,EAAE8J,gBAAeD,EAAYlB,EAAoB3I,EAAE+J,SAAW,IACtF,IAAIhgB,EAAW4e,EAAoB3I,EAAEjW,SACrC,IAAK8f,GAAa9f,IACbA,EAASigB,gBACZH,EAAY9f,EAASigB,cAAcC,MAC/BJ,GAAW,CACf,IAAIK,EAAUngB,EAASiN,qBAAqB,UACzCkT,EAAQtf,SAAQif,EAAYK,EAAQA,EAAQtf,OAAS,GAAGqf,IAC5D,CAID,IAAKJ,EAAW,MAAM,IAAIM,MAAM,yDAChCN,EAAYA,EAAUjT,QAAQ,OAAQ,IAAIA,QAAQ,QAAS,IAAIA,QAAQ,YAAa,KACpF+R,EAAoBpC,EAAIsD,EAAY,wkCCbpCO,EAAQ,MACRA,EAAQ,MAER,IAEMC,EAAgB,CAEpB3a,KAAM,SAAUrH,GACd,IAAMyF,EAAIxF,KACJgiB,EAAgBjiB,EAAQ8B,cAAc,WAG5C,IAAwB,IAFA9B,EAAQ4F,UAAU2F,SAAS,YAErB,CAE5B,IAAM2W,EAAwE,IAArDliB,EAAQ+T,WAAW,0BAA0BjH,MAElEoV,EAAmB,GAErBD,EAAc3e,iBAAiB,iBAAiB,SAACb,GAC/Cwf,EAAc/e,aAAa,qBAAsB,GACjD,IAAIif,EAAW,KACfA,EAAW1c,EAAE2c,eAAeH,EAAeC,EAAkBC,EAAU1c,GACvE,IAAM4c,EAAcriB,EAAQ8B,cAAc,4BACtB,OAAhBugB,IACFA,EAAYzc,UAAUC,IAAI,WAC1Bwc,EAAY/e,iBAAiB,SAAS,SAACyG,GAAQtE,EAAE6c,sBAAsBvY,EAAEwY,cAAeN,EAAeC,EAAkBC,EAAU1c,EAAI,IAE1I,GAEJ,CAED,IAAM+c,EAAS,IAAIjd,IAAJ,CAAW0c,EAAe,CACvC/b,aAAc,EACdD,eAAgB,EAChBqE,WAAW,EAEXxD,OAAQ,CACNuE,KAAMrL,EAAQ8B,cAAc,gBAC5B0J,KAAMxL,EAAQ8B,cAAc,iBAE9BkL,WAAY,CACV,CACEG,WAAY,IACZ3H,SAAU,CACRU,aAAc,IAGlB,CACEiH,WAAY,IACZ3H,SAAU,CACRU,aAAc,OAKtBjB,OAAO3B,iBAAiB,QAAQ,WAC9B6B,YAAW,WAAQqd,EAAO9a,SAAW,GAAE,IACxC,IACD,IAAM+a,EAAmBziB,EAAQ2B,iBAvDR,kDAwDzB1B,KAAKyiB,gBAAgBD,EACtB,EACDL,eAAgB,SAACH,EAAeC,EAAkBC,EAAU1c,GAE1D,OADWkd,aAAY,WAAQld,EAAEmd,cAAcX,EAAgB,GAAEC,EAElE,EACDW,eAAgB,SAACpd,EAAG0c,GAClBld,OAAO6d,cAAcX,EACtB,EACDS,cAAe,SAACX,GACd,IAAMO,EAASjd,IAAO0c,GAElBc,EAAYP,EAAO3b,MAAQ,EAC3B2b,EAAO1a,OAAO0a,EAAO1a,OAAOvF,OAAS,GAAGqD,UAAU2F,SAAS,aAC7DwX,EAAY,GAGdP,EAAO3X,WAAWkY,GAClBd,EAAc/e,aAAa,qBAAsB6f,EAClD,EACDT,sBAAuB,SAACzP,EAAIoP,EAAeC,EAAkBC,EAAU1c,GACjEA,EAAEud,iBAAiBf,IACrBxc,EAAEmd,cAAcX,GAChBxc,EAAE2c,eAAeH,EAAeC,EAAkBC,EAAU1c,GAC5DoN,EAAGjN,UAAU+D,OAAO,UACpBkJ,EAAGjN,UAAUC,IAAI,WACjBgN,EAAGkB,WAAW,cAAcjH,MAAQ,oBAEpCrH,EAAEod,eAAepd,EAAG0c,GACpBtP,EAAGjN,UAAU+D,OAAO,WACpBkJ,EAAGjN,UAAUC,IAAI,UACjBgN,EAAGkB,WAAW,cAAcjH,MAAQ,iBAEvC,EACDkW,iBAAkB,SAACf,GAEjB,OADoBA,EAAcrT,WAAWA,WAAW9M,cAAc,4BACnD8D,UAAU2F,SAAS,SACvC,EACDmX,gBAAiB,SAACD,GAAqB,UACRA,GADQ,IACrC,2BAA+C,SAC7B7Z,MAAMwK,QAAU,MACjC,CAHoC,+BAItC,GAIH,UCzGA2O,EAAQ,MACRA,EAAQ,MACR,IACMkB,EAAwB,CAE5B5b,KAAM,SAAUrH,GACd,IAAMyF,EAAIxF,KACJgiB,EAAgBjiB,EAAQ8B,cAAc,WAG5C,GAAmB,IAFA9B,EAAQ2B,iBAAiB,kCAAkCY,OAE9E,CASA,IAAwB,IAFAvC,EAAQ4F,UAAU2F,SAAS,YAErB,CAE5B,IAAM2W,EAAwE,IAArDliB,EAAQ+T,WAAW,0BAA0BjH,MAElEoV,EAAmB,GAErBD,EAAc3e,iBAAiB,iBAAiB,SAACb,GAC/Cwf,EAAc/e,aAAa,qBAAsB,GACjD,IAAIif,EAAW,KACfA,EAAW1c,EAAE2c,eAAeH,EAAeC,EAAkBC,EAAU1c,GACvE,IAAM4c,EAAcriB,EAAQ8B,cAAc,4BACtB,OAAhBugB,IACFA,EAAYzc,UAAUC,IAAI,WAC1Bwc,EAAY/e,iBAAiB,SAAS,SAACyG,GAAQtE,EAAE6c,sBAAsBvY,EAAEwY,cAAeN,EAAeC,EAAkBC,EAAU1c,EAAI,IAE1I,GAEJ,CAED,IAAM+c,EAAS,IAAIjd,IAAJ,CAAW0c,EAAe,CACvC/b,aAAc,EACdD,eAAgB,EAChBqE,WAAW,EACX+B,YAAY,EACZlG,YAAY,EACZW,OAAQ,CACNuE,KAAMrL,EAAQ8B,cAAc,gBAC5B0J,KAAMxL,EAAQ8B,cAAc,mBAIhC0gB,EAAOU,UAAYljB,EAAQ8B,cAAc,4BAEzCmD,OAAO3B,iBAAiB,QAAQ,WAC9BmC,EAAE0d,iBAAiBX,EACpB,IAEDP,EAAc3e,iBAAiB,mBAAmB,SAAUyG,GAC1DtE,EAAE0d,iBAAiBX,EACpB,IAEDP,EAAc3e,iBAAiB,kBAAkB,SAAUyG,GACzDtE,EAAE0d,iBAAiBX,EACpB,GA/CA,MAFCxiB,EAAQ4F,UAAUC,IAAI,cAkDzB,EAEDsd,iBAAkB,SAAUX,GAC1B,IAAM1b,EAAS0b,EAAO1b,OAChBoc,EAAYV,EAAOU,UAEnBrb,EADQ2a,EAAO7c,IAAI7D,cAAc,6DAClBO,aAnEH,GAqEdmgB,EAAO7c,KACT6c,EAAO7c,IAAIoN,cAAcnK,MAAMwa,YAAY,iBAAkBvb,EAAS,MAGpEf,GACF,CAAC,OAAQ,QAAQ7D,SAAQ,SAAUqL,GAC7BxH,EAAOwH,KACTxH,EAAOwH,GAAG1F,MAAMya,IAAOxb,EAAS,EAAK,KAExC,IAGCqb,IACFA,EAAUta,MAAM0a,OAAS,OACzBJ,EAAUta,MAAMya,IAAOxb,EAASqb,EAAU7gB,aAAgB,KAE7D,EAED+f,eAAgB,SAACH,EAAeC,EAAkBC,EAAU1c,GAE1D,OADWkd,aAAY,WAAQld,EAAEmd,cAAcX,EAAgB,GAAEC,EAElE,EACDW,eAAgB,SAACpd,EAAG0c,GAClBld,OAAO6d,cAAcX,EACtB,EACDS,cAAe,SAACX,GACd,IAAMO,EAASjd,IAAO0c,GAElBc,EAAYP,EAAO3b,MAAQ,EAC3B2b,EAAO1a,OAAO0a,EAAO1a,OAAOvF,OAAS,GAAGqD,UAAU2F,SAAS,aAC7DwX,EAAY,GAGdP,EAAO3X,WAAWkY,GAClBd,EAAc/e,aAAa,qBAAsB6f,EAClD,EACDT,sBAAuB,SAACzP,EAAIoP,EAAeC,EAAkBC,EAAU1c,GACjEA,EAAEud,iBAAiBf,IACrBxc,EAAEmd,cAAcX,GAChBxc,EAAE2c,eAAeH,EAAeC,EAAkBC,EAAU1c,GAC5DoN,EAAGjN,UAAU+D,OAAO,UACpBkJ,EAAGjN,UAAUC,IAAI,WACjBgN,EAAGkB,WAAW,cAAcjH,MAAQ,oBAEpCrH,EAAEod,eAAepd,EAAG0c,GACpBtP,EAAGjN,UAAU+D,OAAO,WACpBkJ,EAAGjN,UAAUC,IAAI,UACjBgN,EAAGkB,WAAW,cAAcjH,MAAQ,iBAEvC,EACDkW,iBAAkB,SAACf,GAEjB,OADe1c,IAAO0c,GACRiB,UAAUtd,UAAU2F,SAAS,SAC5C,GAGH,UC/HAwW,EAAQ,KACRA,EAAQ,MACR,IACMwB,EAAoB,CAExBlc,KAAM,SAAUrH,GACd,IAAMyF,EAAIxF,KACJgiB,EAAgBjiB,EAAQ8B,cAAc,WAG5C,GAAmB,IAFA9B,EAAQ2B,iBAAiB,8BAA8BY,OAE1E,CASA,IAAwB,IAFAvC,EAAQ4F,UAAU2F,SAAS,YAErB,CAE5B,IAAM2W,EAAwE,IAArDliB,EAAQ+T,WAAW,0BAA0BjH,MAElEoV,EAAmB,GAErBD,EAAc3e,iBAAiB,iBAAiB,SAACb,GAC/Cwf,EAAc/e,aAAa,qBAAsB,GACjD,IAAIif,EAAW,KACfA,EAAW1c,EAAE2c,eAAeH,EAAeC,EAAkBC,EAAU1c,GACvE,IAAM4c,EAAcriB,EAAQ8B,cAAc,4BACtB,OAAhBugB,IACFA,EAAYzc,UAAUC,IAAI,WAC1Bwc,EAAY/e,iBAAiB,SAAS,SAACyG,GAAQtE,EAAE6c,sBAAsBvY,EAAEwY,cAAeN,EAAeC,EAAkBC,EAAU1c,EAAI,IAE1I,GAEJ,CAED,IAAM+c,EAAS,IAAIjd,IAAJ,CAAW0c,EAAe,CACvC/b,aAAc,EACdD,eAAgB,EAChBmF,QAAQ,EACRd,WAAW,EACX+B,YAAY,EACZlG,YAAY,EACZoE,KAAMvK,EAAQ8B,cAAc,SAC5BgF,OAAQ,CACNuE,KAAMrL,EAAQ8B,cAAc,gBAC5B0J,KAAMxL,EAAQ8B,cAAc,mBAIhC0gB,EAAOU,UAAYljB,EAAQ8B,cAAc,4BAEzCmD,OAAO3B,iBAAiB,QAAQ,WAC9BmC,EAAE0d,iBAAiBX,EACpB,IAEDP,EAAc3e,iBAAiB,mBAAmB,SAAUyG,GAC1DtE,EAAE0d,iBAAiBX,EACpB,IAEDP,EAAc3e,iBAAiB,kBAAkB,SAAUyG,GACzDtE,EAAE0d,iBAAiBX,EACpB,GAjDA,MAFCxiB,EAAQ4F,UAAUC,IAAI,cAoDzB,EAEDsd,iBAAkB,SAAUX,GAC1B,IAAM1b,EAAS0b,EAAO1b,OAChByD,EAAOiY,EAAOjY,KACd2Y,EAAYV,EAAOU,UAEnBrb,EADQ2a,EAAO7c,IAAI7D,cAAc,yDAClBO,aAtEH,GAwEdmgB,EAAO7c,KACT6c,EAAO7c,IAAIoN,cAAcnK,MAAMwa,YAAY,iBAAkBvb,EAAS,MAGpEf,GACF,CAAC,OAAQ,QAAQ7D,SAAQ,SAAUqL,GAC7BxH,EAAOwH,KACTxH,EAAOwH,GAAG1F,MAAMya,IAAOxb,EAAS,EAAK,KAExC,IAGC0C,IACFA,EAAK3B,MAAM0a,OAAS,OACpB/Y,EAAK3B,MAAMya,IAAOxb,EAAS0C,EAAKlI,aAAgB,MAG9C6gB,IACFA,EAAUta,MAAM0a,OAAS,OACzBJ,EAAUta,MAAMya,IAAOxb,EAASqb,EAAU7gB,aAAgB,KAE7D,EACD+f,eAAgB,SAACH,EAAeC,EAAkBC,EAAU1c,GAE1D,OADWkd,aAAY,WAAQld,EAAEmd,cAAcX,EAAgB,GAAEC,EAElE,EACDW,eAAgB,SAACpd,EAAG0c,GAClBld,OAAO6d,cAAcX,EACtB,EACDS,cAAe,SAACX,GACd,IAAMO,EAASjd,IAAO0c,GAElBc,EAAYP,EAAO3b,MAAQ,EAC3B2b,EAAO1a,OAAO0a,EAAO1a,OAAOvF,OAAS,GAAGqD,UAAU2F,SAAS,aAC7DwX,EAAY,GAGdP,EAAO3X,WAAWkY,GAClBd,EAAc/e,aAAa,qBAAsB6f,EAClD,EACDT,sBAAuB,SAACzP,EAAIoP,EAAeC,EAAkBC,EAAU1c,GACjEA,EAAEud,iBAAiBf,IACrBxc,EAAEmd,cAAcX,GAChBxc,EAAE2c,eAAeH,EAAeC,EAAkBC,EAAU1c,GAC5DoN,EAAGjN,UAAU+D,OAAO,UACpBkJ,EAAGjN,UAAUC,IAAI,WACjBgN,EAAGkB,WAAW,cAAcjH,MAAQ,oBAEpCrH,EAAEod,eAAepd,EAAG0c,GACpBtP,EAAGjN,UAAU+D,OAAO,WACpBkJ,EAAGjN,UAAUC,IAAI,UACjBgN,EAAGkB,WAAW,cAAcjH,MAAQ,iBAEvC,EACDkW,iBAAkB,SAACf,GAEjB,OADe1c,IAAO0c,GACRiB,UAAUtd,UAAU2F,SAAS,SAC5C,GAGH,UCtIAwW,EAAQ,MACRA,EAAQ,MAER,IAAMyB,EAAW,CAEfnc,KAAM,SAAUrH,GACd,IAAMyF,EAAIxF,KACJgiB,EAAgBjiB,EAAQ8B,cAAc,WAI5C,GAAmB,IAFA9B,EAAQ2B,iBAAiB,mBAAmBY,OAE/D,CASA,IAAwB,IAFAvC,EAAQ4F,UAAU2F,SAAS,YAErB,CAE5B,IAAM2W,EAAwE,IAArDliB,EAAQ+T,WAAW,0BAA0BjH,MAElEoV,EAAmB,GAErBD,EAAc3e,iBAAiB,iBAAiB,SAACb,GAC/Cwf,EAAc/e,aAAa,qBAAsB,GACjD,IAAIif,EAAW,KACfA,EAAW1c,EAAE2c,eAAeH,EAAeC,EAAkBC,EAAU1c,GACvE,IAAM4c,EAAcriB,EAAQ8B,cAAc,4BACtB,OAAhBugB,IACFA,EAAYzc,UAAUC,IAAI,WAC1Bwc,EAAY/e,iBAAiB,SAAS,SAACyG,GAAQtE,EAAE6c,sBAAsBvY,EAAEwY,cAAeN,EAAeC,EAAkBC,EAAU1c,EAAI,IAE1I,GAEJ,CAEc,IAAIF,IAAJ,CAAW0c,EAAe,CACvC/b,aAAc,EACdD,eAAgB,EAChBmF,QAAQ,EACRd,WAAW,EACX+B,YAAY,EACZlG,YAAY,EACZoE,KAAMvK,EAAQ8B,cAAc,SAC5BgF,OAAQ,CACNuE,KAAMrL,EAAQ8B,cAAc,gBAC5B0J,KAAMxL,EAAQ8B,cAAc,kBAjC/B,MAFC9B,EAAQ4F,UAAUC,IAAI,cAsCzB,EACDuc,eAAgB,SAACH,EAAeC,EAAkBC,EAAU1c,GAE1D,OADWkd,aAAY,WAAQld,EAAEmd,cAAcX,EAAgB,GAAEC,EAElE,EACDW,eAAgB,SAACpd,EAAG0c,GAClBld,OAAO6d,cAAcX,EACtB,EACDS,cAAe,SAACX,GACd,IAAMO,EAASjd,IAAO0c,GAElBc,EAAYP,EAAO3b,MAAQ,EAC3B2b,EAAO1a,OAAO0a,EAAO1a,OAAOvF,OAAS,GAAGqD,UAAU2F,SAAS,aAC7DwX,EAAY,GAGdP,EAAO3X,WAAWkY,GAClBd,EAAc/e,aAAa,qBAAsB6f,EAClD,EACDT,sBAAuB,SAACzP,EAAIoP,EAAeC,EAAkBC,EAAU1c,GACjEA,EAAEud,iBAAiBf,IACrBxc,EAAEmd,cAAcX,GAChBxc,EAAE2c,eAAeH,EAAeC,EAAkBC,EAAU1c,GAC5DoN,EAAGjN,UAAU+D,OAAO,UACpBkJ,EAAGjN,UAAUC,IAAI,WACjBgN,EAAGkB,WAAW,cAAcjH,MAAQ,oBAEpCrH,EAAEod,eAAepd,EAAG0c,GACpBtP,EAAGjN,UAAU+D,OAAO,WACpBkJ,EAAGjN,UAAUC,IAAI,UACjBgN,EAAGkB,WAAW,cAAcjH,MAAQ,iBAEvC,EACDkW,iBAAkB,SAACf,GAEjB,OADoBA,EAAcrT,WAAWA,WAAW9M,cAAc,4BACnD8D,UAAU2F,SAAS,SACvC,GAGH,8hCC7FAwW,EAAQ,MAER,IAAM0B,EAAY,CAEhBpc,KAAM,SAAUrH,GACd,IAAMyF,EAAIxF,KACJyjB,EAAW1jB,EAAQ2B,iBAAiB,yBAC1C8D,EAAEoN,GAAK7S,EAHgB,UAID0jB,GAJC,IAIvB,IAAK,EAAL,qBAAgC,SACtBpgB,iBAAiB,SAAS,SAACyG,GACjCtE,EAAEke,aAAa5Z,EAAEwY,cAAe9c,EACjC,IAAE,EACJ,CARsB,+BASxB,EAEDke,aAAc,SAAU5e,EAAQU,GAC9B,IAAMme,EAAS7e,EAAO6J,WACjBgV,EAAOhe,UAAU2F,SAAS,UAM7B9F,EAAEoe,WAAWD,GAAQ,IALrBziB,MAAM0S,KAAKpO,EAAEoN,GAAGlR,iBAAiB,4BAA4BsB,SAAQ,SAAU4P,GAC7EpN,EAAEoe,WAAWhR,GAAI,EAClB,IACDpN,EAAEoe,WAAWD,GAAQ,GAIxB,EAEDC,WAAY,SAAUC,EAAMC,GAC1B,IAAMC,EAAcF,EAAKhiB,cAAc,4BACjCmiB,EAAcH,EAAKhiB,cAAc,4BACjCoiB,EAAoBD,EAAYE,aAEtCL,EAAKle,UAAUC,IAAI,aACnBoe,EAAYrb,MAAMf,OAASqc,EAAoB,KAE3CH,GACF5e,YAAW,WACT2e,EAAKle,UAAU+D,OAAO,aACtBsa,EAAYrb,MAAMf,OAAS,IAC5B,GAAE,KACHic,EAAKle,UAAUC,IAAI,YAEnBV,YAAW,WAAQ8e,EAAYrb,MAAMf,OAAS,IAAM,GAAE,GACtD1C,YAAW,WACT2e,EAAKle,UAAU+D,OAAO,YACvB,GAAE,KACHma,EAAKle,UAAU+D,OAAO,WAGxBqa,EAAY9gB,aAAa,gBAAzB,UAA6C6gB,IAC7CE,EAAY/gB,aAAa,cAAzB,WAA4C6gB,GAC7C,GAGH,8hCCtDAhC,EAAQ,MAER,IAAMqC,EAAS,CAEb/c,KAAM,SAAUrH,GACd,IAAMyF,EAAIxF,KACVwF,EAAEoN,GAAK7S,EACPyF,EAAE4e,MAAQpkB,KAAK4S,GAAGlR,iBAAiB,wBAHZ,UAKJ1B,KAAKokB,OALD,IAKvB,IAAK,EAAL,qBAA+B,SACxB/gB,iBAAiB,SAAS,SAACyG,GAC9BtE,EAAE6e,WAAWva,EAAEwY,cAAe9c,EAC/B,IAAE,EACJ,CATsB,+BAUxB,EAED6e,WAAY,SAACvf,EAAQU,GACnB,IAAMme,EAAS7e,EAAO6J,WAClBgV,EAAOhe,UAAU2F,SAAS,UAC5B9F,EAAE8e,UAAUX,GAEZne,EAAE+e,UAAUZ,EAEf,EAEDY,UAAW,SAACzf,GACVA,EAAOa,UAAUC,IAAI,UACrB,IAAM4e,EAAS1f,EAAOjD,cAAc,UAC9B4iB,EAAS3f,EAAOjD,cAAc,wBACpC2iB,EAAO1Q,WAAW,iBAAiBjH,OAAQ,EAC3C4X,EAAO3Q,WAAW,eAAejH,OAAQ,CAC1C,EAEDyX,UAAW,SAACxf,GACVA,EAAOa,UAAU+D,OAAO,UACxB,IAAM8a,EAAS1f,EAAOjD,cAAc,UAC9B4iB,EAAS3f,EAAOjD,cAAc,wBACpC2iB,EAAO1Q,WAAW,iBAAiBjH,OAAQ,EAC3C4X,EAAO3Q,WAAW,eAAejH,OAAQ,CAC1C,GAGH,gLC1CO,IAAM6X,EAAb,WACI,0GAAc,SACV1kB,KAAK2kB,gBAAkB,EAC1B,WAHL,uCAQI,SAAY7f,EAAQ8f,EAAKxS,GAAe,IAAXyS,EAAW,uDAAJ,CAAC,EAC7B/f,GAAUA,EAAOzB,mBACjByB,EAAOzB,iBAAiBuhB,EAAKxS,EAAIyS,GACjC7kB,KAAK2kB,gBAAgBzgB,KAAK,CACtBY,OAAAA,EACA8f,IAAAA,EACAxS,GAAAA,EACAyS,KAAAA,IAGX,GAlBL,6BAuBK,WACG7kB,KAAK2kB,gBAAkB3kB,KAAK2kB,gBAAgB9Q,KAAI,SAAAlP,GAC5C,GAAIA,EAASG,QAAUH,EAASG,OAAOjB,oBAEnC,OADAc,EAASG,OAAOjB,oBAAoBc,EAASigB,IAAKjgB,EAASyN,GAAIzN,EAASkgB,MACjE,IAEd,IAAE5iB,OAAO6iB,QACb,qFA9BL,2KCAO,IAAMC,EAAb,6KACE,SAAiBnjB,GAIf,IAHA,IAAIhB,GAAK,EACLokB,EAAOpjB,EAAKjB,aAAa,QAEtBiB,GAAiB,SAATojB,GAA4B,YAATA,GAA+B,UAATA,IACtDpjB,EAAOA,EAAK+M,cAEVqW,EAAOpjB,EAAKjB,aAAa,SAQ7B,OAJIiB,IACFhB,EAAKokB,EAAO,IAAMhlB,KAAKilB,mBAAmBrjB,IAGrChB,CACR,GAjBH,gCAmBE,SAA0BgB,GACxB,IAAIhB,EAAKgB,EAAKjB,aAAa,cAI3B,OAHIC,IACFA,EAAKA,EAAGmc,OAAOjI,cAAcxG,QAAQ,IAAK,KAAKA,QAAQ,IAAK,MAEvD1N,CACR,GAzBH,gCA2BE,SAA0BgB,GACxB,IAAIsjB,EAActjB,EAAKjB,aAAa,oBACpC,IAAKukB,EAEH,OADatjB,EAAKjB,aAAa,SAE7B,IAAK,UACHukB,EAAc,aACd,MACF,IAAK,OACHA,EACEhN,OAAOtW,aAAD,EAACA,EAAM+D,WAAWhD,QAAQ,cAAgB,EAC5C,aACA,WAOZ,OAAOuiB,CACR,GA/CH,sBAiDE,SAAgBC,GACd,MAAkD,SAA3CA,EAASxkB,aAAa,gBAC9B,GAnDH,wBAqDE,SAAkBwkB,GAChB,MAAkD,SAA3CA,EAASxkB,aAAa,gBAC9B,GAvDH,qBA0DE,SAAewkB,GACb,MAAyC,MAAlCA,EAASxkB,aAAa,OAC9B,GA5DH,oBA8DE,SAAcwkB,GACZ,MAAkD,SAA3CA,EAASxkB,aAAa,gBAC9B,GAhEH,iCAkEE,SAA2BwkB,GACzB,OAA8D,OAAvDA,EAAS3hB,QAAQ,iCACzB,GApEH,0BAsEE,SAAoB4hB,GAClB,OAAOplB,KAAKqlB,UAAU5jB,SAASI,cAAT,WAA2BujB,EAA3B,qBACvB,GAxEH,4BA0EE,SAAsBE,EAAOH,GAC3B,OAAIA,IACMG,EAAMC,mBAAmBja,SAAS6Z,EAG7C,GA/EH,kCAiFE,SAA4BK,GAC1B,OAAsB,IAAfA,EAAIljB,QAAgBkjB,EAAIvR,MAAM,KACtC,GAnFH,qBAqFE,SAAekR,GAIb,IAJ0C,IAAnBM,EAAmB,wDACtCC,EAAOP,EACPH,EAAOG,EAASxkB,aAAa,QAEzB8kB,GAAsB,UAATT,IAAuBS,GAAaC,GAAiB,SAATV,GAA4B,UAATA,GAA6B,YAATA,IACtGU,EAAOA,EAAK/W,cAEVqW,EAAOU,EAAK/kB,aAAa,SAI7B,OAAO+kB,CACR,GAjGH,yBAmGE,SAAmBC,GACjB,IAAM/kB,EAAK,OAAH,OAAU2H,KAAKiC,KAAmB,IAAdjC,KAAKqd,UAAzB,aAA6C,IAAIpY,MAEzD,OADAmY,SAAAA,EAAS1iB,aAAa,KAAMrC,GACrBA,CACR,GAvGH,sBAyGE,SAAgB+kB,GACd,OAAOA,aAAP,EAAOA,EAAShlB,aAAa,KAC9B,GA3GH,iCA6GE,WAEE,OAAOqE,OAAOoI,YADwB,IAEvC,OAhHH,yxFCEA,IAAMyY,EAAyB,2BAElBC,EAAb,yTAEE,WAAYH,EAASI,GAAW,MAU9B,mGAV8B,UAC9B,gBAEKA,UAAYA,EACdJ,EAAQhgB,UAAU2F,SAASua,GAC5B,EAAKF,QAAUA,EAEf,EAAKA,QAAUA,EAAQ9jB,cAAcgkB,GAGlCF,GAILzkB,MAAM0S,KAAK+R,EAAQjkB,iBAAiB,0BAA0BsB,SAAQ,SAAC6gB,GACrE,EAAKmC,YAAYnC,EAAM,QAAS,EAAKoC,gBAAgB9lB,KAArB,MAAiC,CAAE+lB,SAAS,GAC7E,IACD,EAAKF,YAAYhhB,OAAQ,cAAe,EAAKmhB,wBAAwBhmB,KAA7B,OAAyC,GACjF,EAAKimB,gBAlByB,GAW1B,IAQL,CArBH,0CAuBE,SAAcjB,GAGZ,GAAGA,EAAU,CAMX,IALA,IAAM7M,EAAS,GAGX1W,EAFWujB,EAASxW,WACDA,WACJ0X,WAEZzkB,GACDA,IAASujB,GAAYvjB,EAAK4V,WAAa8O,KAAKC,cAC9CjO,EAAOpU,KAAKtC,GAEdA,EAAOA,EAAK2jB,oBAAsB3jB,EAAK4kB,YAEzClO,EAAOtV,SAAQ,SAACyjB,GACd,IAAMC,EAAQD,EAAO5kB,cAAc,kCAC/B6kB,GACFA,EAAMzjB,aAAa,gBAAiB,QAEvC,GAGF,MACC/B,MAAM0S,KAAK5T,KAAK2lB,QAAQjkB,iBAAiB,0BAA0BsB,SAAQ,SAAC6gB,GAC1EA,EAAK5gB,aAAa,gBAAiB,QACpC,GAGJ,GApDH,wBAsDE,SAAWkiB,GACNA,GAAYA,EAASliB,cACpBkiB,EAASliB,aAAa,gBAAiB,QAE5C,GA1DH,uBA4DE,SAAUkiB,GAER,IAAIA,EAAU,OAAO,EAMrB,GAJAA,EAASliB,aAAa,gBAAiB,QAIH,YAFrBkiB,EAASxW,WACDA,WACZhO,aAAa,QAAuB,CAE7C,IAAMgmB,EAAqBxB,EAASI,mBAC9BqB,EAAkBD,EAAmBjlB,iBACzC1B,KAAK+lB,UAAY,uBAAyB,mBAS5C,GAPA7kB,MAAM0S,KAAKgT,GAAiB5jB,SAAQ,SAAA6jB,GAE9BA,GAAeA,EAAY5jB,cAC7B4jB,EAAY5jB,aAAa,gBAAiB,QAE7C,IAEGjD,KAAK+lB,UAAW,CAClB,IAAMe,EAAgBH,EAAmB9kB,cAAc,wBACnDilB,GAAiBA,EAAc7jB,cACjC6jB,EAAc7jB,aAAa,gBAAiB,OAE/C,CACF,CAED,OAAO,CACR,oFA1FH,GCDA,yTAEE,aAAc,wHAEb,CAJH,oDAME,SAAwBT,GACjBxC,KAAK2lB,QAAQra,SAAS9I,EAAMsC,SAC/B9E,KAAKomB,eAER,GAVH,6BAYE,SAAgB5jB,GACd,IAAIukB,EAAMvkB,EAAM8f,cAEhB,GAAIyC,EAAaiC,SAASD,KAAShC,EAAakC,oBAAoBF,GAC9DhC,EAAamC,OAAOH,IAAQhC,EAAaoC,WAAWJ,GACpD/mB,KAAKonB,WAAWL,IAElB/mB,KAAKomB,cAAcW,GACnB/mB,KAAKqnB,UAAUN,SAEZ,GAAGhC,EAAauC,QAAQP,GAG7B,YAFA/mB,KAAKomB,gBAIP5jB,EAAMuH,kBACNvH,EAAMM,gBACP,oFA7BH,GAAqC4hB,+lECArC,IAAM6C,EACI,2BADJA,EAES,iCAFTA,EAGI,gDAHJA,EAIK,iDAJLA,EAKK,sDALLA,EAMQ,sBANRA,GAOI,OAPJA,GAQI,OAIJC,GAAqB,qBACdC,GAAb,yTACI,WAAY9B,GAAS,mHACjB,gBAEKA,QAAUA,EACf,EAAK+B,eAAiB/B,EAAQ9jB,cAAc0lB,GAC5C,EAAKI,eAAiBhC,EAAQ9jB,cAAc0lB,GAC5C,EAAKK,gBAAkBjC,EAAQ9jB,cAAc0lB,GAC7C,EAAKM,gBAAkBlC,EAAQ9jB,cAAc0lB,GAC7C,EAAKO,eAAiBnC,EAAQ9jB,cAAc0lB,GAC5C,EAAKQ,mBAAqB,KAC1B,EAAKC,YAAc,KACnB,EAAKC,aAAe,GAEpB,EAAKC,cACDvC,EAAQhgB,UAAU2F,SAASic,GACvB5B,EACAA,EAAQ9jB,cAAc0lB,IAE9B,EAAKY,2BAlBY,CAmBpB,CApBL,0CAsBI,SAAexC,GAAS,WACpBA,EAAQjkB,iBAAiB,eAAesB,SAAQ,SAAC6gB,GAE7C,IAAKA,EAAKle,UAAU2F,SAAS,eAAgB,CAEzC,IAAM8c,EAAavE,EAAKhiB,cAAc,cACtC,GAAIumB,GAAcrD,EAAaiC,SAASoB,GAAa,CACjDA,EAAWnlB,aAAa,iBAAiB,GAEzCmlB,EAAWziB,UAAUC,IAAI,eAEzB,IAAMyiB,EAAmBxE,EAAKhiB,cAAc,gBACxCwmB,GACA,EAAKC,oBAAqBD,GAG9BD,GAAc,EAAKpC,YAAYoC,EAAY,QAAS,EAAKG,gBAAgBpoB,KAAK,GAAO,CAAE+lB,SAAS,GACnG,CACJ,CACJ,GACJ,GA1CL,iCA4CI,SAAqBP,GAAS,WAK1BA,EAAQjkB,iBAAiB,oBAAoBsB,SAAQ,SAAC6gB,GAElD,IAAM2E,EAA4B3E,EAAKhiB,cAAc,gBAEjD2mB,IACAA,EAA0B7iB,UAAUC,IAAI,0BACxC4iB,EAA0B9mB,iBAAiB,eAAesB,SAAQ,SAACylB,GAE/D,GAA+B,IAA3BA,EAAOxhB,SAAS3E,OAChBmmB,EAAO9iB,UAAUC,IAAI,mBAClB,CACH,IAAM8iB,EAAeD,EAAO5mB,cAAc,YACtCkjB,EAAaiC,SAAS0B,GACtBD,EAAO9iB,UAAUC,IAAI,aAErB6iB,EAAO9iB,UAAUC,IAAI,YAE5B,CACJ,KAGL,IAAMwiB,EAAavE,EAAKhiB,cAAc,cAClCumB,GAAcrD,EAAaiC,SAASoB,KAEpCA,EAAWnlB,aAAa,iBAAiB,GACzCmlB,EAAWziB,UAAUC,IAAI,eAEzB+f,EAAQjkB,iBAAiB,kBAAkBsB,SAAQ,SAAC2lB,GAC5C5D,EAAaiC,SAAS2B,IACtBP,EAAWnlB,aAAa,iBAAiB,EAEhD,IAEDmlB,GAAc,EAAKpC,YAAYoC,EAAY,QAAS,EAAKG,gBAAgBpoB,KAAK,GAAO,CAAE+lB,SAAS,IAEvG,GACJ,GArFL,6BAuFI,SAAiBtB,GACbA,GAAOA,EAAI9hB,gBAAkB8hB,EAAI9hB,iBAGjC8hB,EAAItC,cAAcrf,aAAa,iBAAiB,GAG/BjD,KAAK4oB,YAAYhE,EAAItC,cAAc3T,YAC3C3L,SAAQ,SAAA6gB,GAAI,OAAIA,EAAKle,UAAUC,IAAI,WAAvB,IACrBgf,EAAItC,cAAc3T,WAAWhJ,UAAU+D,OAAO,YAC9Ckb,EAAItC,cAAc3T,WAAWhJ,UAAU+D,OAAO,YAC9Ckb,EAAItC,cAAc3c,UAAUC,IAAI,YAGhC5F,KAAK2nB,eAAehiB,UAAUC,IAAI,YAClC5F,KAAK6nB,gBAAgBgB,YAAcjE,EAAItC,cAAcuG,YAEjD7oB,KAAKgoB,aACLhoB,KAAKioB,aAAa/jB,KAAKlE,KAAKgoB,aAEhChoB,KAAKgoB,YAAcpD,EAAItC,aAC1B,GA5GL,sCA8GI,WACItiB,KAAKgmB,YAAYhmB,KAAK0nB,eAAgB,QAAS1nB,KAAK8oB,gBAAgB3oB,KAAKH,MAAO,CAAEkmB,SAAS,IAC3FlmB,KAAKgmB,YAAYhmB,KAAK4nB,gBAAiB,QAAS5nB,KAAK+oB,iBAAiB5oB,KAAKH,MAAO,CAAEkmB,SAAS,IAC7FlmB,KAAKgmB,YAAYhmB,KAAK8nB,eAAgB,cAAe9nB,KAAK+oB,iBAAiB5oB,KAAKH,MAAO,CAAEkmB,SAAS,IAClGlmB,KAAKgmB,YAAYhmB,KAAK2nB,eAAgB,cAAe3nB,KAAKgpB,gBAAgB7oB,KAAKH,MAAO,CAAEkmB,SAAS,GACpG,GAnHL,6BAqHI,WACIlmB,KAAKipB,eACLjpB,KAAK2lB,QAAQhgB,UAAUC,IAAI,aAC3B,IAAMhC,EAAOnC,SAASI,cAAc0lB,IAC9B2B,EAAOznB,SAASI,cAAc0lB,IACpC3jB,EAAK+B,UAAUC,IAAI4hB,IACnB0B,EAAKvjB,UAAUC,IAAI4hB,IACnBxnB,KAAK+nB,mBAAqB/iB,OAAOmkB,QACjCnkB,OAAOgE,SAAS,EAAG,EACtB,GA9HL,8BAgII,SAAkB4b,GACdA,SAAAA,EAAK9hB,iBACL9C,KAAK2lB,QAAQhgB,UAAU+D,OAAO,aAC9B,IAAM9F,EAAOnC,SAASI,cAAc0lB,IAC9B2B,EAAOznB,SAASI,cAAc0lB,IACpC3jB,EAAK+B,UAAU+D,OAAO8d,IACtB0B,EAAKvjB,UAAU+D,OAAO8d,IACjBlS,MAAMtV,KAAK+nB,qBACZ/iB,OAAOgE,SAAS,EAAGhJ,KAAK+nB,mBAE/B,GA1IL,yBA4II,SAAanmB,GACT,OAAO,EAAIA,EAAK+M,WAAW1H,UAAUhF,QAAO,SAAAuE,GAAC,OAAIA,IAAM5E,CAAV,GAChD,GA9IL,6BAgJI,SAAiBgjB,GAGb,GAFAA,GAAOA,EAAI9hB,gBAAkB8hB,EAAI9hB,iBAE9B9C,KAAKgoB,YAAa,CACjB,IAAMoB,EAAUppB,KAAKgoB,YACJhoB,KAAK4oB,YAAYQ,EAAQza,YACjC3L,SAAQ,SAAA6gB,GAAI,OAAIA,EAAKle,UAAU+D,OAAO,WAA1B,IACrB0f,EAAQza,WAAWhJ,UAAU+D,OAAO,UACpC0f,EAAQzjB,UAAU+D,OAAO,YACzB0f,EAAQnmB,aAAa,iBAAiB,GAEtC,IAAMomB,EAAWrpB,KAAKioB,aAAarI,MAC/ByJ,GACArpB,KAAK6nB,gBAAgBgB,YAAcQ,EAASR,YAC5C7oB,KAAKgoB,YAAcqB,IAEnBrpB,KAAKgoB,YAAc,KACnBhoB,KAAK2nB,eAAehiB,UAAU+D,OAAO,YAE5C,CACJ,GApKL,iCAsKI,WACI1J,KAAK2lB,QACLjkB,iBADA,UACoB6lB,EADpB,QAEIvkB,SAAQ,SAAA6gB,GAAUA,EAAKle,UAAU+D,OAAO,YAAama,EAAKle,UAAU+D,OAAO,SAAY,IAE3F1J,KAAK2lB,QACLjkB,iBADA,UACoB6lB,EADpB,OAEIvkB,SAAQ,SAAA6gB,GAAUA,EAAKle,UAAU+D,OAAO,YAAama,EAAK5gB,aAAa,iBAAiB,EAAS,IAErGjD,KAAK2lB,QACLjkB,iBAAiB,6BACbsB,SAAQ,SAAA6gB,GAAUA,EAAK5gB,aAAa,iBAAiB,EAAQ,GACpE,GAlLL,6BAoLI,WACIjD,KAAK2nB,eAAehiB,UAAU+D,OAAO,YACrC1J,KAAK6nB,gBAAgBgB,YAAc,EACtC,GAvLL,0BAyLI,WACI7oB,KAAKspB,sBACLtpB,KAAKupB,iBACR,oFA5LL,GAAmC7E,0KCfnC,aAAM8E,GAAY,CACdC,IAAK,CACD,CACIC,MAAO,yBACPD,IAAK,CACD,CACIC,MAAO,qBAEX,CACIA,MAAO,UACPD,IAAK,CACD,CACIC,MAAO,OAEX,CACIA,MAAO,QAEX,CACIA,MAAO,eAInB,CACIA,MAAO,WACPD,IAAK,CACD,CACIC,MAAO,SAEX,CACIA,MAAO,UAEX,CACIA,MAAO,WAInB,CACIA,MAAO,cACPD,IAAK,CACD,CACIC,MAAO,WAEX,CACIA,MAAO,OAEX,CACIA,MAAO,aACPD,IAAK,CACD,CACIC,MAAO,OAEX,CACIA,MAAO,UAEX,CACIA,MAAO,SAEX,CACIA,MAAO,WAInB,CACIA,MAAO,YAEX,CACIA,MAAO,QAEX,CACIA,MAAO,YAEX,CACIA,MAAO,QACPD,IAAK,CACD,CACIC,MAAO,aAEX,CACIA,MAAO,cAM3B,CACIA,MAAO,WACPD,IAAK,CACD,CACIC,MAAO,OAEX,CACIA,MAAO,aAEX,CACIA,MAAO,iBAEX,CACIA,MAAO,QAEX,CACIA,MAAO,QAEX,CACIA,MAAO,SAEX,CACIA,MAAO,MAEX,CACIA,MAAO,WAEX,CACIA,MAAO,QAEX,CACIA,MAAO,iBAM3B,CACIA,MAAO,cACPD,IAAK,CACD,CACIC,MAAO,QAEX,CACIA,MAAO,QACPD,IAAK,CACD,CACIC,MAAO,OAEX,CACIA,MAAO,QAEX,CACIA,MAAO,WAInB,CACIA,MAAO,WAEX,CACIA,MAAO,SACPC,kBAAkB,EAClBF,IAAK,CACD,CACIC,MAAO,QACPD,IAAK,CACD,CACIC,MAAO,YACPD,IAAK,CACD,CACIC,MAAO,YAEX,CACIA,MAAO,MAEX,CACIA,MAAO,cAEX,CACIA,MAAO,UAEX,CACIA,MAAO,cAInB,CACIA,MAAO,OACPD,IAAK,CACD,CACIC,MAAO,YAEX,CACIA,MAAO,SAEX,CACIA,MAAO,UAEX,CACIA,MAAO,SAEX,CACIA,MAAO,eAEX,CACIA,MAAO,gBAEX,CACIA,MAAO,eAEX,CACIA,MAAO,cAInB,CACIA,MAAO,gBACPD,IAAK,CACD,CACIC,MAAO,YAEX,CACIA,MAAO,SAEX,CACIA,MAAO,UAEX,CACIA,MAAO,SAEX,CACIA,MAAO,eAEX,CACIA,MAAO,kBAInB,CACIA,MAAO,OACPD,IAAK,CACD,CACIC,MAAO,YAEX,CACIA,MAAO,SAEX,CACIA,MAAO,YAInB,CACIA,MAAO,QACPD,IAAK,CACD,CACIC,MAAO,YAEX,CACIA,MAAO,SAEX,CACIA,MAAO,cAM3B,CACIA,MAAO,MACPD,IAAK,CACD,CACIC,MAAO,KACPD,IAAK,CACD,CACIC,MAAO,YAEX,CACIA,MAAO,SAEX,CACIA,MAAO,YAInB,CACIA,MAAO,UACPD,IAAK,CACD,CACIC,MAAO,YAEX,CACIA,MAAO,SAEX,CACIA,MAAO,UAEX,CACIA,MAAO,WAInB,CACIA,MAAO,OACPD,IAAK,CACD,CACIC,MAAO,YAEX,CACIA,MAAO,SAEX,CACIA,MAAO,YAInB,CACIA,MAAO,QACPD,IAAK,CACD,CACIC,MAAO,YAEX,CACIA,MAAO,SAEX,CACIA,MAAO,kBAU3C,CACIA,MAAO,WAEX,CACIA,MAAO,QACPD,IAAK,CACD,CACIC,MAAO,aACPD,IAAK,CACD,CACIC,MAAO,QAEX,CACIA,MAAO,OAEX,CACIA,MAAO,WAInB,CACIA,MAAO,kBAEX,CACIA,MAAO,2BAInB,CACIA,MAAO,YAEX,CACIA,MAAO,cAMNE,GAAb,2KAII,SAAeC,GAA8B,IAAzB7C,EAAyB,wDAAP8C,EAAO,uCACnCC,EAAStoB,SAASyF,cAAc,KAItC,GAHA6iB,EAAOlB,YAAcgB,EACrBE,EAAO9mB,aAAa,OAAQ,YAC5B8mB,EAAO9mB,aAAa,OAAQ,KACxB+jB,EAGA,GAFA+C,EAAO9mB,aAAa,iBAAiB,GACrC8mB,EAAO9mB,aAAa,iBAAiB,GACjC6mB,EAAQ,GAAK9pB,KAAKgqB,UAAW,CAC7B,GAAc,IAAVF,EAAa,CACb,IAAMG,EAAOxoB,SAASyF,cAAc,OACpC+iB,EAAKhnB,aAAa,MAAO,2BACzBgnB,EAAKhnB,aAAa,MAAO,IACzBgnB,EAAKtkB,UAAUC,IAAI,gBAAiB,iBACpCmkB,EAAOG,OAAOD,EACjB,CACD,IAAME,EAAO1oB,SAASyF,cAAc,OACpCijB,EAAKlnB,aAAa,MAAO,+BACzBknB,EAAKlnB,aAAa,MAAO,IACzBknB,EAAKxkB,UAAUC,IAAI,gBAAiB,gBACpCmkB,EAAOG,OAAOC,EACjB,MAAM,GAAc,IAAVL,IAAgB9pB,KAAKgqB,UAAW,CACvC,IAAMG,EAAO1oB,SAASyF,cAAc,OACpCijB,EAAKlnB,aAAa,MAAO,+BACzBknB,EAAKlnB,aAAa,MAAO,IACzBknB,EAAKxkB,UAAUC,IAAI,gBAAiB,gBACpCmkB,EAAOG,OAAOC,EACjB,CAEL,OAAOJ,CACV,GAlCL,sBAoCI,SAAgB9T,GAA+B,IAA1B+O,EAA0B,uDAAnB,OAAQ8E,EAAW,uDAAH,EAClCM,EAAK3oB,SAASyF,cAAc,MAElCkjB,EAAGnnB,aAAa,OAAQ+hB,GAGxB,IAAMqF,EAAapU,EAAIwT,KAAOxT,EAAIwT,IAAInnB,OAChCynB,EAAS/pB,KAAKsqB,QAAQrU,EAAIyT,MAAOW,EAAYP,GAEnD,GADAM,EAAGjjB,YAAY4iB,GACXM,EAAY,CACZ,IAAME,EAAQvqB,KAAKwqB,cAAcvU,EAAIyT,MAAOzT,EAAIwT,IAAKK,EAAQ,EAAa,IAAVA,EAAc,QAAU,OAAQ7T,EAAI0T,kBACpGS,EAAGjjB,YAAYojB,EAClB,CACD,OAAOH,CACV,GAlDL,2BAoDI,SAAsBV,EAAOD,EAAKK,EAAO9E,EAAM2E,GAAkB,WACvDc,EAAKhpB,SAASyF,cAAc,MAclC,OAbAujB,EAAGxnB,aAAa,OAAQ+hB,GACxByF,EAAGxnB,aAAa,aAAc6mB,GAC9BW,EAAGxnB,aAAa,aAAcymB,GAE1BC,GACAc,EAAG9kB,UAAUC,IAAI,oCAErB6kB,EAAG9kB,UAAUC,IAAb,wBAAkCkkB,IAElCL,EAAIzmB,SAAQ,SAAAjD,GACT,IAAM2qB,EAAQ,EAAKC,SAAS5qB,EAAS,OAAQ+pB,GAC7CW,EAAGtjB,YAAYujB,EACjB,IACMD,CACV,GApEL,sBAsEI,SAAgB1qB,EAASiqB,GAAW,WAChChqB,KAAKgqB,UAAYA,EAEjB,IAAMY,EAAS7qB,EAAQ8B,cAAc,mCACvB+oB,EAAOlpB,iBAAiB,eAC5BY,OAAS,GAInBknB,GAAUC,IAAIoB,UAAU7nB,SAAS,SAAAjD,GAC7B,IAAM2qB,EAAQ,EAAKC,SAAS5qB,GAC5B6qB,EAAOE,sBAAsB,aAAcJ,EAC9C,GAEJ,OApFL,oGAAad,MAAAA,kBAAAA,gGCrWb,IAAMmB,GACU,oBADVA,GAES,0BAFTA,GAGU,iBAHVA,GAIW,sBAJXA,GAKY,oBAMZC,GAAS,CAEb5jB,KAAM,SAAU6jB,GACdjrB,KAAKD,QAAUkrB,EAAcppB,cAAc,mBAC3C7B,KAAK+lB,UAAYkF,EAActlB,UAAU2F,SAAS,gBAClDtL,KAAKgqB,UAAYjF,EAAamG,sBAC9BlrB,KAAKmrB,iBAAmB,KACHnrB,KAAKD,SAAWC,KAAKD,QAAQ2K,SAAWoa,QAAQ9kB,KAAKD,QAAQ2K,QAAQ0gB,eAExFxB,GAAayB,SAASrrB,KAAKD,QAASC,KAAKgqB,WAEvChqB,KAAKgqB,UACPhqB,KAAKmrB,iBAAmB,IAAIrF,EAAe9lB,KAAKD,QAASC,KAAK+lB,WAE9D/lB,KAAKmrB,iBAAmB,IAAI1D,GAAcznB,KAAKD,SAGjDkrB,EAAcppB,cAAc,WAAW8D,UAAUC,IAAI,eAErDZ,OAAO3B,iBAAiB,SAAUrD,KAAKsrB,eAAenrB,KAAKH,OAE3D,IAAMurB,EAAeN,EAAcppB,cAAckpB,IAC3CS,EAAcP,EAAcppB,cAAckpB,IAEhD,SAASU,IACLF,GAAgBA,EAAa5lB,UAAU+D,OAAOqhB,IAC9CS,IAAgBA,EAAY3e,MAAQ,GACvC,CAED,GAAI0e,EAAc,CACd,IAAMG,EAAYT,EAAcppB,cAAckpB,IACxCY,EAAWV,EAAcppB,cAAckpB,IAE7CW,GAAaA,EAAUroB,iBAAiB,SAAS,WAC7CkoB,GACAA,EAAa5lB,UAAU2F,SAASyf,IAC5BU,IACAF,EAAa5lB,UAAUC,IAAImlB,GAClC,IACDY,GAAYA,EAAStoB,iBAAiB,SAAS,WAC3CooB,GACH,GACJ,CA7CO,yBA+CJR,EAAcW,YAChBX,EAAcppB,cAAc,sBAAsBiD,OAAS,SAC3DmmB,EAAcppB,cAAc,qBAAqBiD,OAAS,UAhDnD,oCAmDLmmB,EAAcW,YAChBX,EAAcppB,cAAc,+CAA+CiD,OAAS,SAGvF,EAEDwmB,eAAgB,SAAU1G,GACxB,IAAMiH,EAAoB9G,EAAamG,sBACnCW,IAAsB7rB,KAAKgqB,YAC3BhqB,KAAKgqB,UAAY6B,EAEb7rB,KAAKmrB,kBAAoBnrB,KAAKmrB,iBAAiBW,iBACjD9rB,KAAKmrB,iBAAiBW,kBAEpB9rB,KAAKgqB,UACLhqB,KAAKmrB,iBAAmB,IAAIrF,EAAe9lB,KAAKD,SAEhDC,KAAKmrB,iBAAmB,IAAI1D,GAAcznB,KAAKD,SAGxD,GC5BH,SArDgB,CAEdqH,KAAM,SAAUrH,GACd,IAAMyF,EAAIxF,KACJgiB,EAAgBjiB,EAAQ8B,cAAc,WACtCkqB,EAAQhsB,EAAQ8B,cAAc,mBAC9BmqB,EAAcjsB,EAAQ8B,cAAc,gCAEvB,MAAfmqB,GACFA,EAAY3oB,iBAAiB,SAAS,SAACyG,GACrCtE,EAAEymB,YAAYF,EACf,IAGU,MAATA,GACFA,EAAM1oB,iBAAiB,SAAS,SAACyG,GAC3BA,EAAEhF,OAAOa,UAAU2F,SAAS,mBAC9B9F,EAAEymB,YAAYF,EAEjB,IAcH,IAXA,IAAMxJ,EAAS,IAAIjd,IAAJ,CAAW0c,EAAe,CACvC/b,aAAc,EACdD,eAAgB,EAChBqE,WAAW,EACXxD,OAAQ,CACNuE,KAAMrL,EAAQ8B,cAAc,gBAC5B0J,KAAMxL,EAAQ8B,cAAc,mBAI1BqqB,EAAansB,EAAQ2B,iBAAiB,6BA9BrB,WA+BdoG,GACPokB,EAAWpkB,GAAGzE,iBAAiB,SAAS,SAACyG,GACvCtE,EAAE2mB,WAAWJ,EAAOjkB,EAAGya,GACvBA,EAAOlb,QACR,GAnCoB,EA+BdS,EAAI,EAAGA,EAAIokB,EAAW5pB,SAAUwF,EAAG,EAAnCA,EAMV,EACDqkB,WAAY,SAACJ,EAAOK,EAAS7J,GAC3B9gB,SAASI,cAAc,QAAQ8D,UAAUC,IAAI,aAC7CmmB,EAAMpmB,UAAUC,IAAI,QACpBmmB,EAAMjY,WAAW,eAAejH,MAAQ,QACxC0V,EAAO3X,WAAWwhB,EACnB,EACDH,YAAa,SAACF,GACZtqB,SAASI,cAAc,QAAQ8D,UAAU+D,OAAO,aAChDqiB,EAAMpmB,UAAU+D,OAAO,QACvBqiB,EAAMjY,WAAW,eAAejH,MAAQ,MACzC,GCnDH,IAAMwf,GAAa,CACjBjlB,KAAM,SAAUrH,GACd,IAAMyF,EAAIxF,KAGV,GADiBD,EAAQ2B,iBAAiB,uBAAuBY,OAAS,EAC1E,CAEA,IAAMgqB,EAAavsB,EAAQ8B,cAAc,6BACnCugB,EAAcriB,EAAQ8B,cAAc,8BACpC0qB,EAAQxsB,EAAQ8B,cAAc,8BAGpCyqB,EAAWjpB,iBAAiB,SAAS,SAACyG,GACpCtE,EAAEgnB,aAAaD,EAAO,QACtBxsB,EAAQ4F,UAAU+D,OAAO,SAC1B,IAED0Y,EAAY/e,iBAAiB,SAAS,SAACyG,GACrCtE,EAAEgnB,aAAaD,EAAO,SACtBxsB,EAAQ4F,UAAUC,IAAI,SACvB,GAfoB,CAgBtB,EAED4mB,aAAc,SAACD,EAAOE,GACpB,IAAMC,EAAO,CAAEC,OAAQF,GACjB/c,EAAM6c,EAAM5K,IAAI7P,MAAM,KAAK,QAErBrI,IAARiG,GACF6c,EAAMK,cAAcC,YAAYC,KAAKxV,UAAUoV,GAAOhd,EAEzD,GAGH,w9BClCA,IAwBMqd,GAA4B,SAACvc,GACjC,IAAMwc,EAAWC,KACXC,EAAcC,KAEdC,EAAmB,CACvB5qB,MAAO,UACP6qB,gBAAiBL,EACjBM,wBAAyBJ,EAAYK,SACrCC,wBAAyBN,EAAYO,SACrCC,oBAAqBR,EAAYS,SAEjCC,cAAepd,EAAK3B,KAAO2B,EAAK3B,KAAO,kBACvCgf,cAAe,WACfC,wBAAyB,EACzBC,qBAAsB,IAElBC,EAAeloB,OAAOmoB,YAAYnoB,OAAOooB,QAAQd,GAAkBnrB,QAAO,gDAEhF+C,OAAOmpB,UAAYnpB,OAAOmpB,WAAa,GACvCnpB,OAAOmpB,UAAUjqB,KAAK8pB,EACvB,EA+GD,IAAIxN,IAAS,EAEb,SAAS4N,GAAeC,GACtB,IAAI7N,GAAO,CACTxb,OAAOmpB,UAAYnpB,OAAOmpB,WAAa,GAEvC,IAAMnB,EAAWC,KAEXC,EAAcC,KACdQ,EAAWU,EACbnB,EAAYS,SAAW,IAAMU,EAC7BnB,EAAYS,SAEVW,EAAiB,CACrB9rB,MAAO,YACP6qB,gBAAiBL,EACjBM,wBAAyBJ,EAAYK,SACrCC,wBAAyBN,EAAYO,SACrCC,oBAAqBC,EACrBY,0BAA2B,GAEvBC,EAAa1oB,OAAOmoB,YAAYnoB,OAAOooB,QAAQI,GAAgBrsB,QAAO,gDAG5E+C,OAAOmpB,UAAUjqB,KAAKsqB,GACtBhO,IAAS,CACV,CACF,CAED,IAAIiO,IAAc,EAoFlB,SAASxB,KACP,IAAID,EAAWvrB,SAASI,cAAc,QAAQ6I,QAAQgkB,UAItD,OAFA1B,OAAwBvjB,IAAbujB,EAAyBA,EAAW,SAGhD,CAED,SAASG,KACP,IAAIwB,EACEC,EAAgBntB,SAASI,cAAc,mBACvCmrB,EAAWC,KACjB,GAAI2B,EAAe,CACjB,IAAMC,EAAeD,EAAcltB,iBAAiB,WAC9C6rB,EAAWsB,EAAa,GAAKC,GAAeD,EAAa,GAAGE,WAAa,GACzEtB,EAAWoB,EAAa,GAAKC,GAAeD,EAAa,GAAGE,WAAa,GACzEC,EAAWH,EAAa,GAAKC,GAAeD,EAAa,GAAGE,WAAa,GACzEE,EAAWJ,EAAa,GAAKC,GAAeD,EAAa,GAAGE,WAAa,GACzEG,EAAWL,EAAa,GAAKC,GAAeD,EAAa,GAAGE,WAAa,GACzEI,EAAWN,EAAa,GAAKC,GAAeD,EAAa,GAAGE,WAAa,GACzEpB,EACJX,GACCO,IAAaA,EAAS6B,SAAS,QAAU,IAAM7B,EAAW,KAC1DE,EAAW,IAAMA,EAAW,KAC5BuB,EAAW,IAAMA,EAAW,KAC5BC,EAAW,IAAMA,EAAW,KAC5BC,EAAW,IAAMA,EAAW,KAC5BC,EAAW,IAAMA,EAAW,IAE7BR,EADEpB,EAAS6B,SAAS,QACT,CACT7B,SAAUE,EACVA,SAAUuB,EACVrB,SAAUA,GAGD,CACTJ,SAAUA,EACVE,SAAUA,EACVuB,SAAUA,EACVrB,SAAUA,EAGf,KAAM,CACL,IAAIkB,EAAe7pB,OAAOyc,SAASrG,SAAStJ,MAAM,KAI5Cyb,GAHNsB,EAAeA,EAAa5sB,QAAO,SAAClC,GAClC,MAAmB,KAAZA,CACR,KAC6B,GAAK+uB,GAAeD,EAAa,IAAM,OAC/DpB,EAAWoB,EAAa,GAAKC,GAAeD,EAAa,IAAM,GAC/DG,EAAWH,EAAa,GAAKC,GAAeD,EAAa,IAAM,GAC/DI,EAAWJ,EAAa,GAAKC,GAAeD,EAAa,IAAM,GAC/DK,EAAWL,EAAa,GAAKC,GAAeD,EAAa,GAAGE,WAAa,GACzEI,EAAWN,EAAa,GAAKC,GAAeD,EAAa,GAAGE,WAAa,GAU/EJ,EAAW,CACTpB,SAAUA,EACVE,SAAUA,EACVuB,SAAUA,EACVrB,SAZAX,GACCO,EAAW,IAAMA,EAAW,KAC5BE,EAAW,IAAMA,EAAW,KAC5BuB,EAAW,IAAMA,EAAW,KAC5BC,EAAW,IAAMA,EAAW,KAC5BC,EAAW,IAAMA,EAAW,KAC5BC,EAAW,IAAMA,EAAW,IAQhC,CAED,OAAOR,CACR,CAED,SAASG,GAAetW,GACtB,IAAI6W,EAAe7W,EAAS,GAM5B,MAH6B,MAD7B6W,GADAA,EAAeA,EAAava,eACAxG,QAAQ,MAAO,MAC3BlN,OAAO,KACrBiuB,EAAeA,EAAajuB,MAAM,GAAI,IAEjCiuB,CACR,kxBCzVD,IAAMC,GAAgB,4DAEhBC,GAAiB,yFAEjBC,GAAe,sFAEfC,GACkB,cADlBA,GAEc,QAFdA,GAGY,qBAHZA,GAIe,mCAJfA,GAKgB,4BALhBA,GAMoB,uBANpBA,GAOc,6BAPdA,GAQoB,gCARpBA,GASsB,kCAItBC,GAA0B,qBAE1BC,GACuB,oCADvBA,GAEc,aAGdC,GAAiB,CACrBxoB,KAAM,SAAUrH,GAAmC,IAA1B8vB,IAA0B,yDAOjD,GANA9vB,EAAQ+vB,cAAgB9vB,KACxBA,KAAKwQ,KAAOzQ,EACZC,KAAK6vB,kBAAoBA,EACzB7vB,KAAKwQ,KAAKnN,iBAAiB,SAAUrD,KAAK+vB,aAAa5vB,KAAKH,OAC5DA,KAAKwQ,KAAKnN,iBAAiB,QAASrD,KAAKgwB,sBAAsB7vB,KAAKH,OAE/D6vB,EAAL,CAIA7vB,KAAKiwB,qBAAuB,IAAI1e,GAASxR,EAAS,CAChD2Q,QAAS+e,GACT9e,WAAY8e,GACZ/a,gBAAiB1U,KAAKkwB,0BAA0B/vB,KAAKH,QAIvD,IAAMmwB,EAAanwB,KAAKwQ,KAAK3O,cAAc,UACvCsuB,GACAnwB,KAAKiwB,qBAAqBlb,aAAaob,GAAY,SAAStjB,GACxD,OAAOyiB,GAAcrjB,KAAKY,EAC7B,IAIL,IAAMujB,EAAWpwB,KAAKwQ,KAAK3O,cAAc,YACrCuuB,GACApwB,KAAKiwB,qBAAqBlb,aAAaqb,GAAU,SAASvjB,GACtD,OAAO0iB,GAAetjB,KAAKY,EAC9B,IAIL,IAAMwjB,EAAcrwB,KAAKwQ,KAAK3O,cAAc,WACxCwuB,GAEFrwB,KAAKiwB,qBAAqBlb,aAAasb,GAAa,SAASxjB,GAC3D,OAAO2iB,GAAavjB,KAAKY,EAC1B,IAIH,IAAMyjB,EAAatwB,KAAKwQ,KAAK3O,cAAc,eACvCyuB,GAEFA,EAAWjtB,iBAAiB,UAAU,SAASyG,GACzCA,EAAEhF,OAAO+H,MAAMvK,OAAS,GAE1B+tB,EAAY1sB,gBAAgB,WAE/B,GA1CF,CA4CF,EAED4sB,4BAA6B,SAAUC,GACrC,IAAM3M,EAAOpiB,SAASyF,cAAc,OAEpC,OADA2c,EAAKgF,YAAc2H,EACZ3M,CACR,EAEDqM,0BAA2B,WACzBlwB,KAAKywB,aAAY,EAClB,EAEDC,YAAa,WACX,IAAMC,EAAmB3wB,KAAKwQ,KAAK3O,cACjC4tB,IAEFkB,EAAiBhrB,UAAU+D,OAAOimB,IAClCgB,EAAiB1tB,aAAaysB,GAAyB,GACxD,EAEDe,YAAa,WAAkC,WAAxBG,IAAwB,yDACvCC,EAAY7wB,KAAKwQ,KAAK9O,iBAC1B+tB,IAEIqB,EAAgB5vB,MAAM0S,KAAKid,GACjC,GAAIC,EAAcxuB,OAAQ,CACxB,IAAMyuB,EAAkBD,EACrBjd,KAAI,SAACgQ,GACJ,IAAMmN,EAAqBnN,EAAKniB,iBAC9B+tB,IAEF,OAAIuB,EAAmB1uB,OAAS,EACvB,EAAK2uB,uBAAuBpN,GAE5BmN,EAAmB,GAAGnI,WAEhC,IACA5mB,OAAO6iB,SAEV9kB,KAAKkxB,wBAAwBH,EAAiBH,EAC/C,MACC5wB,KAAK0wB,aAER,EASDO,uBAAwB,SAAUE,GAChC,IAAMC,EAAiBD,EAAUtvB,cAC/B4tB,IAGF,GAA4C,KAAxCvX,OAAOkZ,EAAevkB,OAAOkQ,OAAe,CAE9C,IAAMsU,EAAgBF,EAAUtvB,cAC9B4tB,IAEE4B,GACFA,EAAc1rB,UAAUC,IAAI+pB,IAG9B,IAAM2B,EAAmBH,EAAUtvB,cACjC4tB,IAEF,GAAI6B,EAEF,OADAA,EAAiB3rB,UAAU+D,OAAOimB,IAC3B2B,EAAiBzI,WAI3B,KAAM,CAEL,IAAMyI,EAAmBH,EAAUtvB,cACjC4tB,IAEE6B,GACFA,EAAiB3rB,UAAUC,IAAI+pB,IAGjC,IAAM0B,EAAgBF,EAAUtvB,cAC9B4tB,IAEF,GAAI4B,EAEF,OADAA,EAAc1rB,UAAU+D,OAAOimB,IACxB0B,EAAcxI,WAExB,CACD,MAAO,EACR,EAEDqI,wBAAyB,SAAUH,EAAiB/nB,GAAU,WACtD2nB,EAAmB3wB,KAAKwQ,KAAK3O,cACjC4tB,IAEI8B,EAAqBR,EAAgBld,KAAI,SAACqB,GAAD,OAC7C,EAAKqb,4BAA4Brb,EADY,IAG/Cyb,GAAoBA,EAAiBa,gBAAjB,MAAAb,EAAgB,GAAoBY,IACxDZ,EAAiBhrB,UAAUC,IAAI+pB,IAC/BgB,EAAiB1tB,aACfysB,GAvK2B,sBA0KzB1mB,GACFhJ,KAAKyxB,kBAAkBd,EAE1B,EAEDc,kBAAmB,SAAUC,GAA6D,IAAhD7M,EAAgD,uDAAzC,CAAE8M,SAAU,SAAUC,MAAO,UAC5E,CAACF,GAAsC,iBAAhBA,EACrBjwB,SAASI,cAAc6vB,GACvBA,GACGzvB,QAAO,SAACgU,GAAD,OAASA,GAAOA,EAAI4b,cAApB,IACP7uB,SAAQ,SAAC6gB,GACRA,EAAKgO,eAAehN,EACrB,GACN,EAEDkL,aAAc,SAAUnL,GACtB,GAAK5kB,KAAK6vB,kBAAV,CAKA,IAAMiC,EAAWrwB,SAASI,cAAc,cACxC,GAAGiwB,GAA+B,KAAnBA,EAASjlB,MACpB+X,EAAI9hB,sBAKR,GADuB9C,KAAKiwB,qBAAqB7b,WAI1C,CAELpU,KAAK0wB,cACL9L,EAAI9hB,iBAEJ,MAA8C9C,KAAK+xB,oBAAdvhB,GAArC,EAAQwhB,QAAR,EAAiB9c,MAAjB,EAAwB+c,YAAxB,EAAqCzhB,MACjCic,EAASjc,EAAKic,OAEdC,EAAO,IAAIwF,SAAS1hB,GAExBxQ,KAAKmyB,SAAS1F,EAAOC,EACtB,MAbC9H,EAAI9hB,iBACJ9C,KAAKywB,aAXN,MAFC7L,EAAI9hB,gBA0BP,EAEDqvB,SAAU,SAAS1F,EAAQ2F,GAAU,WAE/B1iB,EAAM,uBADDjO,SAAS4wB,eAAe,YACKxlB,MACtCylB,MAAM5iB,EAAK,CACTid,OAAQ,QACP4F,MAAK,SAACC,GACP,OAAOA,EAASC,MACjB,IAAEF,MAAK,SAAC7F,GACP,EAAKgG,SAASjG,EAAO2F,EAAS1F,EAAKpU,OACpC,IAND,OAMS,SAACqa,GAET,GACF,EAEDD,SAAU,SAASjG,EAAOC,EAAKkG,GAAO,WAIpC,EAA8C5yB,KAAK+xB,oBAA3CC,EAAR,EAAQA,QAAS9c,EAAjB,EAAiBA,MAAO+c,EAAxB,EAAwBA,YAAazhB,EAArC,EAAqCA,KACrC8hB,MAAM7F,EAAQ,CACZE,OAAQ,OACR/oB,KAAM8oB,EACNmG,QAAS,CACP,cAAiB,OAASD,KAE3BL,MAAK,SAACC,GACP,OAAOA,EAASC,MACjB,IAAEF,MAAK,SAAC7F,GACP,GAAIA,EAAKsF,QACPxhB,EAAK7H,MAAMwK,QAAU,OACjB6e,IACAA,EAAQrpB,MAAMwK,QAAU,OACxB,EAAKse,kBAAkBO,IAE3BjF,GAA0Bvc,QAM1B,GAJI0E,IACFA,EAAMvM,MAAMwK,QAAU,OACtB+B,EAAMvM,MAAMmqB,MAAQ,WAElBb,EAAa,CACfA,EAAYtpB,MAAMmqB,MAAQ,UAC1B,IAAIC,EAAUrG,EAAKqG,QACnB,GAAIA,EAAQzwB,OAAS,EAAG,CACtB,IAAIvC,EAAU0B,SAASyF,cAAc,KACrCnH,EAAQkD,aAAa,QAAQ,gCAC7BlD,EAAQ4I,MAAMwK,QAAU,OACxBpT,EAAQ8oB,YAAckK,EACtBd,EAAY9qB,YAAYpH,EAMzB,CACD,EAAK0xB,kBAAkBO,EACxB,CAEJ,IAvCD,OAuCS,SAACW,GACJzd,IACFA,EAAMvM,MAAMwK,QAAU,OACtB+B,EAAMvM,MAAMmqB,MAAQ,UACpB,EAAKrB,kBAAkBvc,GAE1B,GACF,EAED6c,kBAAmB,WACjB,MAAO,CACHC,QAASvwB,SAASI,cAAc,cAChCqT,MAAOzT,SAASI,cAAc,kBAC9BowB,YAAaxwB,SAASI,cAAc,kBACpC2O,KAAM/O,SAASI,cAAc,aAElC,EAEDmuB,sBAAuB,WACrB,IAAMW,EAAmB3wB,KAAKwQ,KAAK3O,cACjC4tB,IAEFzvB,KAAKyxB,kBAAkBd,GACvB3wB,KAAKgzB,uBACN,EAEDA,sBAAuB,WACjBhzB,KAAKiwB,uBACLjwB,KAAKiwB,qBAAqB9a,QAC1BnV,KAAK0wB,eAET,MAA8C1wB,KAAK+xB,oBAA3CC,EAAR,EAAQA,QAAS9c,EAAjB,EAAiBA,MAAO+c,EAAxB,EAAwBA,YAAazhB,EAArC,EAAqCA,KACjCwhB,IACAA,EAAQrpB,MAAMwK,QAAU,QAExB+B,IACAA,EAAMvM,MAAMwK,QAAU,QAEtB8e,IACAA,EAAYtpB,MAAMwK,QAAU,QAE5B3C,IACAA,EAAK7H,MAAMwK,QAAU,UAE1B,GAIH,YCpVA,IAAMsc,GACoB,cADpBA,GAEgB,QAFhBA,GASa,sBAqGjB,SAlGuB,CACrBroB,KAAM,SAAUrH,GAAmC,IAA1B8vB,IAA0B,yDACjD9vB,EAAQ+vB,cAAgB9vB,KACxBA,KAAKwQ,KAAOzQ,EACZC,KAAK6vB,kBAAoBA,EACzB7vB,KAAKiwB,qBAAuB,IAAI1e,GAASxR,EAAS,CAChD2Q,QAAS+e,GACT9e,WAAY8e,KAEdzvB,KAAKizB,UAAYjzB,KAAKwQ,KAAK3O,cAAc4tB,IACrCzvB,KAAKizB,WAAajzB,KAAKizB,UAAU5vB,iBACnCrD,KAAKizB,UAAU5vB,iBAAiB,QAASrD,KAAKkzB,iBAAiB/yB,KAAKH,OAEpEA,KAAKwQ,KAAKnN,iBAAiB,SAAUrD,KAAKkzB,iBAAiB/yB,KAAKH,MAMnE,EAEDkzB,iBAAkB,SAAUtO,GAAK,WAC/B,GAAK5kB,KAAK6vB,mBAMV,GADuB7vB,KAAKiwB,qBAAqB7b,WACjD,CAGE,IAAQ+e,EAAqBnzB,KAAK+xB,oBAA1BoB,iBACJ1G,EAASzsB,KAAKwQ,KAAKic,OAEnBC,EAAO,IAAIwF,SAASlyB,KAAKwQ,MAC7Buc,GAA0B/sB,KAAKwQ,MAC/B4iB,MAAM,+CAENd,MAAM7F,EAAQ,CACZE,OAAQ,OACR/oB,KAAM8oB,IAEL6F,MAAK,SAACC,GACL,OAAOA,EAASC,MACjB,IACAF,MAAK,SAAC7F,GACL,GAAIA,EAAKsF,QACP,EAAKxhB,KAAK7H,MAAMwK,QAAU,YAE1B,GAAIggB,EAAkB,CACpB,IAAIJ,EAAUrG,EAAKqG,QACnBI,EAAiBtmB,MAAQkmB,CAC1B,CAEH,EAAKviB,KAAK6iB,QACX,IAjBH,OAkBS,SAACV,GACFQ,IACAA,EAAiBtmB,MAAQ8lB,EAE9B,IAtBH,SAsBa,WACT,IAAMtiB,EAAQ,EAAKG,KAAK3O,cAAc,eAClCwO,IACAA,EAAMxD,MAAQ,GACd7H,OAAOgE,SAAS,CAACoa,IAAK,EAAGuO,SAAU,WAExC,GACJ,OA5CC/M,EAAI9hB,gBA6CP,EAEDivB,kBAAmB,WACjB,MAAO,CACHvhB,KAAM/O,SAASI,cAAc,aAC7BsxB,iBAAkB1xB,SAASI,cAAc,wBAE9C,EAEDmxB,sBAAuB,WACjBhzB,KAAKiwB,sBACLjwB,KAAKiwB,qBAAqB9a,QAE9B,MAA8CnV,KAAK+xB,oBAA3CC,EAAR,EAAQA,QAAS9c,EAAjB,EAAiBA,MAAO+c,EAAxB,EAAwBA,YAAazhB,EAArC,EAAqCA,KACjCwhB,IACAA,EAAQrpB,MAAMwK,QAAU,QAExB+B,IACAA,EAAMvM,MAAMwK,QAAU,QAEtB8e,IACAA,EAAYtpB,MAAMwK,QAAU,QAE5B3C,IACAA,EAAK7H,MAAMwK,QAAU,UAE1B,mTC1GL2O,EAAQ,MACRA,EAAQ,MA8BR,SA3BMwR,IACF,WAAYvzB,GAAS,iHACjB,IAAMmpB,EAAOznB,SAAS8xB,gBACtBvzB,KAAKD,QAAUA,EACfC,KAAKwzB,YAAc,IAAI1zB,KAAJ,CAAeC,GAElCC,KAAKwzB,YAAYzvB,GAAG,QAAQ,SAACgoB,EAAOvpB,GHiC1C4rB,GG/BmCrC,EAAMnrB,IAC/BsoB,EAAKvgB,MAAM8qB,UAAY,QAC1B,IAEDzzB,KAAKwzB,YAAYzvB,GAAG,QAAQ,SAACgoB,GACzB,IAAMvb,EAAO,EAAKzQ,QAAQ8B,cAAc,QACpC2O,IAEAA,EAAK2E,QACD3E,EAAKsf,eAAiBtf,EAAKsf,cAAckD,uBAEzCxiB,EAAKsf,cAAckD,yBAG3B9J,EAAKvgB,MAAM8qB,UAAY,EAC1B,GACJ,4hCC5BL3R,EAAQ,KACRA,EAAQ,MACRA,EAAQ,MAER,IAAM4R,GAAe,CAEnBtsB,KAAM,SAAUrH,GACd,IAAM4zB,EAAW5zB,EAAQY,aAAa,MAChCizB,EAAS,IAAI9zB,KAAJ,CAAeC,GACxB0jB,EAAWhiB,SAASC,iBAAiB,2BAA6BiyB,EAAW,MAGnFC,EAAO7vB,GAAG,QAAQ,SAAUhE,EAASyC,GACnCwC,OAAON,cAAc,IAAImvB,MAAM,UAChC,IARsB,WAUDpQ,GAVC,yBAUZqQ,EAVY,QAWrBA,EAAQzwB,iBAAiB,SAAS,SAACyG,GACjCA,EAAEhH,iBACF,IAAMixB,EAAeD,EAAQnzB,aAAa,sBACpCqhB,EAAgB1c,IAAOvF,EAAQ8B,cAAc,YAGnDmD,OAAON,cAAc,IAAImvB,MAAM,WAG5BE,IACD/R,EAAc7T,UAAU,CAAEhI,SAAU,IACpC6b,EAAcpX,WAAWmpB,GAAc,GACvC/R,EAAc7T,UAAU,CAAEhI,SAAU,MAEvC,IAAE,EAzBkB,EAUvB,IAAK,EAAL,qBAAgC,GAVT,+BA2BxB,GAGH,YCvCA,IACM6tB,GAAsB,2BAGtBC,GAAqC,WACrCC,GAAkB,YA8DxB,SA3DuB,CACrB9sB,KAAM,SAAUrH,GACd,IAAMo0B,EAAmBp0B,EAAQ2B,iBAVH,qBAW1ByyB,EAAiB7xB,QACnBb,SAAS4B,iBAAiB,UAAU,WAClCnC,MAAM0S,KAAKugB,GAAkBnxB,SAAQ,SAAA6gB,GACnC,IAAMuQ,EAAOvQ,EAAKwQ,wBACdD,IAAS9e,MAAM8e,EAAKhR,OAClBgR,EAAKhR,KAAO,EACdS,EAAKle,UAAUC,IAAIouB,IAEnBnQ,EAAKle,UAAU+D,OAAOsqB,IAG3B,GACF,IAEH,IAAMM,EAAiBv0B,EAAQ2B,iBAvBF,qBAwBzB4yB,EAAehyB,SAEjB0C,OAAO3B,iBAAiB,UAAU,WAChC,IAAMkxB,EAAe,GAKrB,GAJArzB,MAAM0S,KAAK0gB,GAAgBtxB,SAAQ,SAAA6gB,GACjCA,EAAKlb,MAAMf,OAAS,KACpB2sB,EAAarwB,KAAK2f,EAAKzhB,aACxB,IACG4C,OAAOoI,YAAc,IAAK,CAC5B,IAAMonB,EAAqBjsB,KAAKC,IAAL,MAAAD,KAAYgsB,GACvCrzB,MAAM0S,KAAK0gB,GAAgBtxB,SAAQ,SAAA6gB,GACjCA,EAAKlb,MAAMf,OAAS4sB,EAAqB,IAC1C,GACF,CACF,IACDxvB,OAAON,cAAc,IAAImvB,MAAM,YAEjC,IAAMY,EAAqB10B,EAAQ2B,iBAxCF,cAyC7B+yB,EAAmBnyB,QAErBpB,MAAM0S,KAAK6gB,GAAoBzxB,SAAQ,SAAA0xB,GACrC,IAAMC,EAAgBlzB,SAASyF,cAAc,KAC7CytB,EAAc9L,YAAcqL,GAC5BS,EAAchqB,UAAY,8CAC1BgqB,EAAc1xB,aAAa,OAAQ,KACnC0xB,EAActxB,iBAAiB,SAAS,SAACyG,GACvCA,EAAEhH,iBACE4xB,EAAkB/uB,UAAU2F,SAAS2oB,KACvCU,EAAc9L,YAAcqL,GAC5BQ,EAAkB/uB,UAAU+D,OAAOuqB,MAEnCU,EAAc9L,YAnDF,YAoDZ6L,EAAkB/uB,UAAUC,IAAIquB,IAEnC,IAAE,GACHS,EAAkBvtB,YAAYwtB,EAC/B,GAEJ,2hCChEH7S,EAAQ,MAER,IAAM8S,GAAsB,CACxBxtB,KAAM,SAAUrH,GAII,QAAZA,IAEAC,KAAK60B,qBACL70B,KAAK80B,uBAEZ,EACDD,mBAAoB,WAChB,IAD4B,OACVpzB,SAASiN,qBAAqB,MADpB,yBAEjBqmB,EAFiB,QAGpBA,EAASzZ,MAAQyZ,EAASzZ,KAAK0Z,WAAW,UAE1CD,EAASpqB,UAAY,4CACrBoqB,EAASE,YAAc,WACnBF,EAASpqB,UAAY,iDACxB,EACDoqB,EAASG,WAAa,WAClBH,EAASpqB,UAAY,2CACxB,EAXmB,EAE5B,IAAK,EAAL,qBAAkC,GAFN,+BAc/B,EACDmqB,qBAAsB,WAClB,IAD8B,OACPrzB,SAASiN,qBAAqB,WADvB,IAE9B,IAAK,EAAL,qBAA4C,SAC1B/F,MAAM,eAAiB,MACxC,CAJ6B,+BAKjC,GAGL,mLCjCA,IAAMwsB,GAA6B,wBAC7BC,GAA8B,yBAC9BC,GAAyB,4BACzBC,GAA0B,WAgFhC,SA5EMC,WACJ,WAAax1B,gGAAS,SACpBC,KAAKD,QAAUA,EACfC,KAAKw1B,kBAAoBz1B,EAAQ8B,cAAcwzB,IAC/Cr1B,KAAKuiB,OAAS,KACdviB,KAAKgqB,UAAY,KACjBhqB,KAAKy1B,mBACLz1B,KAAK01B,mBACN,wDAED,WACE,IAAM7J,EAAoB9G,EAAamG,sBACnCW,IAAsB7rB,KAAKgqB,YAC7BhqB,KAAKgqB,UAAY6B,EACjB7rB,KAAKD,QAAQ4F,UAAU+D,OAAOyrB,GAA4BC,IACtDp1B,KAAKgqB,WACPhqB,KAAKD,QAAQ4F,UAAUC,IAAIwvB,IACvBp1B,KAAKuiB,SACPviB,KAAKuiB,OAAOze,UACZ9D,KAAKw1B,kBAAoBx1B,KAAKD,QAAQ8B,cAAcwzB,OAGtDr1B,KAAKD,QAAQ4F,UAAUC,IAAIuvB,IAC3Bn1B,KAAKw1B,kBAAkB7vB,UAAUC,IAAI,UACrC5F,KAAKuiB,OAAS,IAAIjd,IAAJ,CAAWtF,KAAKw1B,kBAAmB,CAC/CvvB,aAAc,EACdD,eAAgB,EAChBmF,QAAQ,EACRd,WAAW,EACX+B,YAAY,EACZlG,YAAY,EACZ6G,WAAY,CAAC,CACXG,WAAY,IACZ3H,SAAU,CACRU,aAAc,IAEf,CACDiH,WAAY,IACZ3H,SAAU,CACRU,aAAc,KAGlBY,OAAQ,CACNuE,KAAMpL,KAAKD,QAAQ8B,cAAc,gBACjC0J,KAAMvL,KAAKD,QAAQ8B,cAAc,oBAK1C,kCAED,WAAqB,QACnB7B,KAAK21B,kBAAoB31B,KAAKD,QAAQ8B,cAAc,iCACpD7B,KAAK41B,kBAAoB51B,KAAKD,QAAQ8B,cAAc,iCACpD,UAAA7B,KAAK21B,yBAAL,SAAwBtyB,iBAAiB,QAASrD,KAAK61B,mBAAmB11B,KAAKH,OAC/E,UAAAA,KAAK41B,yBAAL,SAAwBvyB,iBAAiB,QAASrD,KAAK61B,mBAAmB11B,KAAKH,OAC/EgF,OAAO3B,iBAAiB,SAAUrD,KAAKy1B,iBAAiBt1B,KAAKH,MAC9D,mCAED,WACMA,KAAKw1B,kBAAkB7vB,UAAU2F,SAASgqB,KAC5Ct1B,KAAKw1B,kBAAkB7vB,UAAU+D,OAAO4rB,IACxCt1B,KAAK81B,oBAjEa,eAmElB91B,KAAKw1B,kBAAkB7vB,UAAUC,IAAI0vB,IACrCt1B,KAAK81B,oBAnEa,aAqErB,oCAED,SAAqBjM,GAAK,MACxB3oB,MAAM0S,KAAN,UAAW5T,KAAK21B,yBAAhB,aAAW,EAAwBj0B,iBAAiB,SACjD+B,OAAOvC,MAAM0S,KAAK5T,KAAK41B,kBAAkBl0B,iBAAiB,UAC1DsB,SAAQ,SAAA+yB,GAAI,OAAIA,EAAKlN,YAAcgB,CAAvB,GAChB,wFAzEG0L,kLCRN,IAAMS,GAA2B,WAG3BC,GAAAA,WACF,WAAYl2B,gGAAS,SACjBC,KAAKD,QAAUA,EACfC,KAAKw1B,kBAAoBz1B,EAAQ8B,cAAc,6BAE/C7B,KAAKk2B,gBAAkBn2B,EAAQ8B,cAAc,sBAC7C7B,KAAKm2B,aAAep2B,EAAQ8B,cAAc,mBAC1C7B,KAAKo2B,oBAAsBr2B,EAAQ8B,cAAc,+BACjD7B,KAAKq2B,uBAAyBt2B,EAAQ8B,cAAc,kCAEpD7B,KAAK01B,oBACL11B,KAAKs2B,uBACR,wDAED,WACIt2B,KAAKk2B,gBAAgB7yB,iBAAiB,QAASrD,KAAKs2B,sBAAsBn2B,KAAKH,OAC/EA,KAAKm2B,aAAa9yB,iBAAiB,QAASrD,KAAKu2B,mBAAmBp2B,KAAKH,OACzEA,KAAKD,QAAQ8B,cAAc,aAAawB,iBAAiB,SAAUrD,KAAKw2B,8BAA8Br2B,KAAKH,MAC9G,sCAED,WACIA,KAAKy2B,oBAAoBT,IACzBh2B,KAAKk2B,gBAAgBvwB,UAAUC,IAAI,UACnC5F,KAAKm2B,aAAaxwB,UAAU+D,OAAO,SACtC,mCACD,WACI1J,KAAKy2B,oBA5BiB,SA6BtBz2B,KAAKm2B,aAAaxwB,UAAUC,IAAI,UAChC5F,KAAKk2B,gBAAgBvwB,UAAU+D,OAAO,SACzC,oCAED,SAAoB1F,GAChBhE,KAAKo2B,oBAAoBztB,MAAMwK,QAAU,OACzCnT,KAAKq2B,uBAAuB1tB,MAAMwK,QAAU,OACxCnP,IAASgyB,GACTh2B,KAAKq2B,uBAAuB1tB,MAAMwK,QAAU,OAE5CnT,KAAKo2B,oBAAoBztB,MAAMwK,QAAU,OAEhD,8CAED,WAAgC,WACxBujB,EAAUj1B,SAAS4wB,eAAe,YAClC5Q,EAAW,WACXkV,EAAmBl1B,SAAS4wB,eAAe,YAC/C,GAAIsE,EACJ,CACI,IAAIC,EAAmBD,EAAiBE,gBAAgB,GACpDD,IAEAnV,EAAWmV,EAAiB/pB,OAGhC,IAAI6C,EAAM,2BAA6BgnB,EAAQ7pB,MAAQ,IAAM4U,EAE7D6Q,MAAM5iB,EAAK,CACPid,OAAQ,QACT4F,MAAK,SAACC,GACL,OAAOA,EAASC,MACnB,IAAEF,MAAK,SAAC7F,IACDA,EAAKoK,WAAa,MAElB,EAAKC,iBAAiBrK,EAAKpU,OAIlC,IAXD,OAWS,SAACqa,GAET,GACJ,CACJ,iCAED,SAAiBjG,GAKb,IAHA,IAAI/I,EAASliB,SAAS4wB,eAAe,cAG9B1O,EAAO0C,YAEV1C,EAAO7V,YAAY6V,EAAO0C,YAIX5kB,SAAS4wB,eAAe,iBAC9BtD,UAAYrC,EAAKsK,aAENv1B,SAAS4wB,eAAe,uBAC9B1pB,MAAMwK,QAAU,QAG9BuZ,EAAKuK,SAAS30B,OAAS,GAGPb,SAAS4wB,eAAe,yBAC9B1pB,MAAMwK,QAAU,OAG1BuZ,EAAKuK,SAASj0B,SAAQ,SAASk0B,GAE3B,GAA2B,gBAAvBA,EAAQC,YACZ,CAEI,IAAIC,EAAO31B,SAASyF,cAAc,OAClCkwB,EAAKzsB,UAAY,8CAGjB,IAAI0sB,EAAiB51B,SAASyF,cAAc,OAC5CmwB,EAAe1sB,UAAY,sBAG3B,IAAI2sB,EAAU71B,SAASyF,cAAc,OACrCowB,EAAQ3sB,UAAY,yBAEpB,IAAI+e,EAAQjoB,SAASyF,cAAc,OACnCwiB,EAAM/e,UAAW,qCACjB,IAAI4sB,EAAe91B,SAAS+1B,eAAeN,EAAQxN,OAmCnD,GAlCAA,EAAMviB,YAAYowB,GAClBD,EAAQnwB,YAAYuiB,GAEpBwN,EAAQI,QAAQt0B,SAAQ,SAASyB,GAC7B,GAAoB,UAAhBA,EAAO+rB,KACX,CACI,IAAIiH,EAAQh2B,SAASyF,cAAc,OACnCuwB,EAAM9sB,UAAW,+BACjB,IAAIke,EAAcpnB,SAAS+1B,eAAe/yB,EAAO+rB,MACjDiH,EAAMtwB,YAAY0hB,GAClByO,EAAQnwB,YAAYswB,EACvB,CACD,GAAIhzB,EAAOoI,MAAMvK,OAAS,EAEtB,GAAmB,UAAhBmC,EAAO+rB,KAAkB,CACxB,IAAI3jB,EAAQpL,SAASyF,cAAc,OACnC2F,EAAMlC,UAAW,0CACjB,IAAI+sB,EAAej2B,SAAS+1B,eAAe/yB,EAAOoI,OAClDA,EAAM1F,YAAYuwB,GAClBJ,EAAQnwB,YAAY0F,EACvB,KACI,CACD,IAAIA,EAAQpL,SAASyF,cAAc,QAC/BwwB,EAAej2B,SAAS+1B,eAAe/yB,EAAOoI,OAClDA,EAAM1F,YAAYuwB,GAClBJ,EAAQnwB,YAAY0F,EACvB,CAER,IAGDwqB,EAAelwB,YAAYmwB,GAGvBJ,EAAQS,SAASr1B,OAAS,EAC9B,CACI,IAAIs1B,EAAiBn2B,SAASyF,cAAc,OAC5C0wB,EAAejtB,UAAY,+BAE3B,IAAIktB,EAAQp2B,SAASyF,cAAc,OACnC2wB,EAAM50B,aAAa,MAAMi0B,EAAQS,UAEjCC,EAAezwB,YAAY0wB,GAC3BR,EAAelwB,YAAYywB,EAC9B,CAGDR,EAAKjwB,YAAYkwB,GAGjB,IAAIS,EAAar2B,SAASyF,cAAc,OACxC4wB,EAAWntB,UAAY,gCAGvB,IAAIotB,EAAWt2B,SAASyF,cAAc,OAGlC8wB,EAAUv2B,SAASyF,cAAc,KACrC8wB,EAAQrtB,UAAY,yBACpBqtB,EAAQ/0B,aAAa,OAAQi0B,EAAQe,SACrCD,EAAQ/0B,aAAa,SAAUi0B,EAAQgB,YACvCF,EAAQ/0B,aAAa,QAASi0B,EAAQiB,WAGtC,IAAIC,EAAkB32B,SAASyF,cAAc,QACzCmxB,EAAyB52B,SAAS+1B,eAAeN,EAAQoB,UAC7DF,EAAgBjxB,YAAYkxB,GAC5BL,EAAQ7wB,YAAYixB,GAapB,IAAIG,EAAc92B,SAASyF,cAAc,QACzCqxB,EAAYC,UAAY,wCAExB,IAAIC,EAAch3B,SAASyF,cAAc,OACzCuxB,EAAYx1B,aAAa,MAAM,kCAC/Bs1B,EAAYpxB,YAAYsxB,GACxBT,EAAQ7wB,YAAYoxB,GAEpBR,EAAS5wB,YAAY6wB,GACrBF,EAAW3wB,YAAY4wB,GAGvB,IAAIW,EAAiBj3B,SAASyF,cAAc,OACxCyxB,EAAUl3B,SAASyF,cAAc,KACrCyxB,EAAQhuB,UAAY,2BACpBguB,EAAQ11B,aAAa,OAAQypB,EAAKkM,iBAGlC,IAAIC,EAAkBp3B,SAASyF,cAAc,QACzC4xB,EAAyBr3B,SAAS+1B,eAAe9K,EAAKqM,kBAK1D,GAJAF,EAAgB1xB,YAAY2xB,GAC5BH,EAAQxxB,YAAY0xB,GAGhBnM,EAAKsM,8BAA8B12B,OAAS,EAChD,CACI,IAAI22B,EAA2Bx3B,SAASyF,cAAc,QACtD+xB,EAAyBtuB,UAAY,kBACrC,IAAIuuB,EAAkCz3B,SAAS+1B,eAAe9K,EAAKsM,+BACnEC,EAAyB9xB,YAAY+xB,GACrCP,EAAQxxB,YAAY8xB,EACvB,CAGDN,EAAQxxB,YAAYoxB,GAGpBG,EAAevxB,YAAY6wB,GAC3BF,EAAW3wB,YAAYuxB,GAGvBtB,EAAKjwB,YAAY2wB,GAGjBnU,EAAOxc,YAAYiwB,EACtB,MAAM,GAA2B,mBAAvBF,EAAQC,YACnB,CAEI,IAAIC,EAAO31B,SAASyF,cAAc,OAClCkwB,EAAKzsB,UAAY,8CAGjB,IAAIwuB,EAAS13B,SAASyF,cAAc,OACpCiyB,EAAOxuB,UAAY,wBACnB,IAAI+e,EAAQjoB,SAAS+1B,eAAeN,EAAQxN,OAC5CyP,EAAOhyB,YAAYuiB,GAGnB0N,EAAKjwB,YAAYgyB,GAGjB,IAAIv1B,EAAOnC,SAASyF,cAAc,OAClCtD,EAAK+G,UAAY,sBAGjB,IAAIyuB,EAAU33B,SAASyF,cAAc,OACrCkyB,EAAQ7uB,UAAY2sB,EAAQmC,SAC5Bz1B,EAAKuD,YAAYiyB,GAGjB,IAAItB,EAAar2B,SAASyF,cAAc,OACxC4wB,EAAWntB,UAAY,gCAGvB,IAAIotB,EAAWt2B,SAASyF,cAAc,OAGlC8wB,EAAUv2B,SAASyF,cAAc,KACrC8wB,EAAQrtB,UAAY,yBACpBqtB,EAAQ/0B,aAAa,OAAQi0B,EAAQe,SACrCD,EAAQ/0B,aAAa,SAAUi0B,EAAQgB,YACvCF,EAAQ/0B,aAAa,QAASi0B,EAAQiB,WAItC,IAAIC,EAAkB32B,SAASyF,cAAc,QACzCmxB,EAAyB52B,SAAS+1B,eAAeN,EAAQoB,UAC7DF,EAAgBjxB,YAAYkxB,GAC5BL,EAAQ7wB,YAAYixB,GAapB,IAAIG,EAAc92B,SAASyF,cAAc,QACzCqxB,EAAYC,UAAY,wCAExB,IAAIC,EAAch3B,SAASyF,cAAc,OACzCuxB,EAAYx1B,aAAa,MAAM,kCAC/Bs1B,EAAYpxB,YAAYsxB,GACxBT,EAAQ7wB,YAAYoxB,GAEpBR,EAAS5wB,YAAY6wB,GACrBF,EAAW3wB,YAAY4wB,GAGvB,IAAIW,EAAiBj3B,SAASyF,cAAc,OACxCyxB,EAAUl3B,SAASyF,cAAc,KACrCyxB,EAAQhuB,UAAY,2BACpBguB,EAAQ11B,aAAa,OAAQypB,EAAKkM,iBAGlC,IAAIC,EAAkBp3B,SAASyF,cAAc,QACzC4xB,EAAyBr3B,SAAS+1B,eAAe9K,EAAKqM,kBAK1D,GAJAF,EAAgB1xB,YAAY2xB,GAC5BH,EAAQxxB,YAAY0xB,GAGhBnM,EAAKsM,8BAA8B12B,OAAS,EAChD,CACI,IAAI22B,EAA2Bx3B,SAASyF,cAAc,QACtD+xB,EAAyBtuB,UAAY,kBACrC,IAAIuuB,EAAkCz3B,SAAS+1B,eAAe9K,EAAKsM,+BACnEC,EAAyB9xB,YAAY+xB,GACrCP,EAAQxxB,YAAY8xB,EACvB,CAGDN,EAAQxxB,YAAYoxB,GAGpBG,EAAevxB,YAAY6wB,GAC3BF,EAAW3wB,YAAYuxB,GAGvBtB,EAAKjwB,YAAYvD,GAEjBwzB,EAAKjwB,YAAY2wB,GAGjBnU,EAAOxc,YAAYiwB,EACtB,CACJ,KAGe31B,SAAS4wB,eAAe,yBAC9B1pB,MAAMwK,QAAU,OAEjC,yFA/VC8iB,GAmWN,oiCCxWA,IAAMqD,GAAmB,CACvBlyB,KAAM,SAAUrH,GACdC,KAAKD,QAAUA,EAEfC,KAAKu5B,uBAAuBp5B,KAAKH,KAAjCA,EACD,EAEDu5B,uBAAwB,WAAY,kBACVv5B,KAAKD,QAAQ2B,iBAAiB,yCADpB,yBAGvB3B,EAHuB,QAKxBusB,EAAavsB,EAAQ8B,cAAc,+BACnCugB,EAAcriB,EAAQ8B,cAAc,gCACpC23B,EAAkBz5B,EAAQ8B,cAAc,kCACxC0qB,EAAQxsB,EAAQ8B,cAAc,UAEpCyqB,SAAAA,EAAYjpB,iBAAiB,SAAS,WACpC,EAAKo2B,YAAYlN,EAAO,QACxBiN,EAAgB7zB,UAAUC,IAAI,UAC/B,IAEDwc,SAAAA,EAAa/e,iBAAiB,SAAS,WACrC,EAAKo2B,YAAYlN,EAAO,SACxBiN,EAAgB7zB,UAAU+D,OAAO,UAClC,GAlB6B,EAGlC,IAAK,EAAL,qBAAuC,GAHL,+BAqBnC,EAED+vB,YAAa,SAAUlN,EAAOE,GAC5B,IAAMC,EAAO,CAAEC,OAAQF,GACjB/c,EAAM6c,EAAM5K,IAAI7P,MAAM,KAAK,QAErBrI,IAARiG,GACF6c,EAAMK,cAAcC,YAAYC,KAAKxV,UAAUoV,GAAOhd,EAEzD,GAIH,oiCCvCAoS,EAAQ,MAER,IAAM4X,GACK,GADLA,GAEK,GAFLA,GAGG,EAGHC,GAAe,CACnBvyB,KAAM,SAAUrH,GAAS,WACvBC,KAAKgiB,cAAgBjiB,EAAQ8B,cAAc,WAC3C7B,KAAKD,QAAUA,EAEf,IAAMqI,EAAarI,EAAQ2B,iBAAiB,uBAAuBY,OAC7Ds3B,EAAkB75B,EAAQ4F,UAAU2F,SAAS,YAEnDtL,KAAKu5B,uBAAuBp5B,KAAKH,KAAjCA,GAEmB,IAAfoI,GAKJpI,KAAKmG,SAAWpG,EAAQ+T,WAAW,0BAAiF,IAArD/T,EAAQ+T,WAAW,0BAA0BjH,MAAe,EAC3H7M,KAAK65B,mBAEL75B,KAAKgiB,cAAc3e,iBAAiB,uBAAwBrD,KAAK85B,2BAA2B35B,KAAKH,OACjGA,KAAKgiB,cAAc3e,iBAAiB,kBAAmBrD,KAAK85B,2BAA2B35B,KAAKH,QAEpE,IAApB45B,GACI55B,KAAKmG,SAAW,GAClBnG,KAAKgiB,cAAc3e,iBAAiB,iBAAiB,WACnD,EAAK2e,cAAc/e,aAAa,qBAAsB,GACtD,EAAKif,SAAW,EAAK6X,sBACrB,EAAKC,QAAQC,SAASt0B,UAAUC,IAAI,UACpC,EAAKo0B,QAAQE,QAAQv0B,UAAU+D,OAAO,SACvC,IAIP1J,KAAKuiB,OAAS,IAAIjd,IAAJ,CAAWtF,KAAKgiB,cAAe,CAC3C/b,aAAc,EACdD,eAAgB,EAChBoG,YAAY,EACZ/B,WAAW,KAzBXtK,EAAQ4F,UAAUC,IAAI,cA4BzB,EAEDk0B,2BAA4B,SAAUlV,GAAK,QACnCuV,GAAWvV,SAAA,UAAAA,EAAKngB,cAAL,eAAaoI,SAAS+X,SAAtB,UAAsBA,EAAKngB,cAA3B,aAAsB,EAAamC,OACpD,IAAK0O,MAAM6kB,KAAcA,IAAcn6B,KAAKgiB,cAActX,QAAQ0vB,aAAc,CAC5E,IAAMC,EAAar6B,KAAKD,QAAQ8B,cAAb,2DAA+Es4B,EAAW,EAA1F,MACnB,GAAIE,EAAY,CACZ,IAAMC,EAAQt6B,KAAKD,QAAQ2B,iBAAiB,0CAC5CR,MAAM0S,KAAK0mB,GACNt3B,SAAQ,SAAAu3B,GAAG,OAAIA,aAAJ,EAAIA,EAAK50B,UAAU+D,OAAO,SAA1B,IAChB2wB,SAAAA,EAAY10B,UAAUC,IAAI,UAC1B5F,KAAKgiB,cAActX,QAAQ0vB,aAAeD,CAC7C,CACJ,CACF,EAEDZ,uBAAwB,WAAY,kBACVv5B,KAAKD,QAAQ2B,iBAAiB,yCADpB,yBAEvB3B,EAFuB,QAIxBusB,EAAavsB,EAAQ8B,cAAc,+BACnCugB,EAAcriB,EAAQ8B,cAAc,gCACpC23B,EAAkBz5B,EAAQ8B,cAAc,kCACxC0qB,EAAQxsB,EAAQ8B,cAAc,UAEhCyqB,GAAcA,EAAWjpB,kBAC3BipB,EAAWjpB,iBAAiB,SAAS,WACnC,EAAKo2B,YAAYlN,EAAO,QACxBiN,EAAgB7zB,UAAUC,IAAI,UAC/B,IAGCwc,GAAeA,EAAY/e,kBAC7B+e,EAAY/e,iBAAiB,SAAS,WACpC,EAAKo2B,YAAYlN,EAAO,SACxBiN,EAAgB7zB,UAAU+D,OAAO,UAClC,GApB2B,EAElC,IAAK,EAAL,qBAAuC,GAFL,+BAwBnC,EAED+vB,YAAa,SAAUlN,EAAOE,GAC5B,IAAMC,EAAO,CAAEC,OAAQF,GACjB/c,EAAM6c,EAAM5K,IAAI7P,MAAM,KAAK,QAErBrI,IAARiG,GACF6c,EAAMK,cAAcC,YAAYC,KAAKxV,UAAUoV,GAAOhd,EAEzD,EAED8qB,oBAAqB,SAAU5V,GACzBA,EAAI9f,QAAuD,IAA5C8f,EAAI9f,OAAO4F,QAAQ+vB,sBAGlC7V,EAAI8V,UAAYhB,IAAiB9U,EAAI/hB,WACrC+hB,EAAI9hB,iBACJ9C,KAAK26B,kBAEV,EAEDd,iBAAkB,WAAY,WACX75B,KAAKD,QAAQ2B,iBAC5B,2CAF0B,IAC5B,IAAK,EAAL,qBAEG,KAFQkR,EAER,QACGA,GAAMA,EAAGvP,mBACXuP,EAAGvP,iBAAiB,QAASrD,KAAK46B,mBAAmBz6B,KAAKH,OAC1D4S,EAAGvP,iBAAiB,UAAWrD,KAAKw6B,oBAAoBr6B,KAAKH,OAEhE,CAR2B,+BAU5B,IAAMk6B,EAAUl6B,KAAKD,QAAQ8B,cAAc,sCACrCo4B,EAAWj6B,KAAKD,QAAQ8B,cAAc,uCAExCq4B,GAAWA,EAAQ72B,mBACrB62B,EAAQ72B,iBAAiB,QAASrD,KAAK66B,aAAa16B,KAAKH,OACzDk6B,EAAQ72B,iBAAiB,UAAWrD,KAAK86B,oBAAoB36B,KAAKH,QAGhEi6B,GAAYA,EAAS52B,mBACvB42B,EAAS52B,iBAAiB,QAASrD,KAAK+6B,cAAc56B,KAAKH,OAC3Di6B,EAAS52B,iBAAiB,UAAWrD,KAAKg7B,qBAAqB76B,KAAKH,QAGtEA,KAAKg6B,QAAU,CACXE,QAAAA,EACAD,SAAAA,EAEL,EAEDa,oBAAqB,SAAUlW,GACzBA,EAAI8V,UAAYhB,IAAmB9U,EAAI8V,UAAYhB,IACnD9U,EAAI9hB,iBACJ9C,KAAK66B,aAAajW,GACD5kB,KAAKD,QAAQ8B,cAAc,uCACnCC,SACF8iB,EAAI8V,UAAYhB,IAAkB9U,EAAI/hB,WAC7C+hB,EAAI9hB,iBACJ9C,KAAK26B,kBAEV,EAEDK,qBAAsB,SAAUpW,GAC1BA,EAAI8V,UAAYhB,IAAmB9U,EAAI8V,UAAYhB,IACnD9U,EAAI9hB,iBACJ9C,KAAK+6B,cAAcnW,GACH5kB,KAAKD,QAAQ8B,cAAc,sCACnCC,SACD8iB,EAAI8V,UAAYhB,IAAkB9U,EAAI/hB,WAC7C+hB,EAAI9hB,iBACJ9C,KAAK26B,kBAEV,EAEDA,gBAAiB,WACf,IAAMM,EAAYx5B,SAASI,cAAc,iFACrCo5B,GACAA,EAAUn5B,MAAM,CAAEo5B,cAAc,EAAM5zB,QAAQ,GAEnD,EAEDyyB,oBAAqB,WAAY,WAC/B,OAAOrX,aAAY,WACf,IAAII,EAAY,EAAKP,OAAO3b,MAAQ,EAChC,EAAK2b,OAAO1a,OAAO,EAAK0a,OAAO1a,OAAOvF,OAAS,GAAGqD,UAAU2F,SAAS,aACrEwX,EAAY,GAEhB,EAAKP,OAAO3X,WAAWkY,GACvB,EAAKqY,yBACL,IAAMC,EAAU,EAAKr7B,QAAQ2B,iBAAiB,0CAA0CohB,GACpFsY,GACAA,EAAQz1B,UAAUC,IAAI,SAE7B,GAAE5F,KAAKmG,SACT,EAED00B,aAAc,SAAUjW,GACtB5kB,KAAKg6B,QAAQE,QAAQv0B,UAAU+D,OAAO,UACtC1J,KAAKg6B,QAAQC,SAASt0B,UAAUC,IAAI,UACpC5F,KAAKkiB,SAAWliB,KAAK+5B,qBACtB,EAEDgB,cAAe,SAAUnW,GACvB5kB,KAAKg6B,QAAQC,SAASt0B,UAAU+D,OAAO,UACvC1J,KAAKg6B,QAAQE,QAAQv0B,UAAUC,IAAI,UAC/B5F,KAAKkiB,UACLW,cAAc7iB,KAAKkiB,SAExB,EAED0Y,mBAAoB,SAAUhW,GAAK,MACjC5kB,KAAKm7B,yBACL,IAAME,EAAczW,EAAI9f,OAAO4F,QAAQ+vB,qBAEnCa,EAAmBhmB,MAAM+lB,GAA8B,GAAdA,EAC7CzW,SAAA,UAAAA,EAAK9f,cAAL,SAAaa,UAAUC,IAAI,UAE3B5F,KAAKuiB,OAAO3X,WAAW0wB,GACvBt7B,KAAKgiB,cAAc/e,aAAa,qBAAsBq4B,GACtDt7B,KAAK+6B,eACN,EAEDI,uBAAwB,WAAY,WACjBn7B,KAAKD,QAAQ2B,iBAC1B,2CAF8B,IAClC,IAAK,EAAL,qBAEK,SACEiE,UAAU+D,OAAO,SACrB,CAL+B,+BAMnC,GAGH,YC5NAoY,EAAQ,MAoER,SAlEoB,CAEhB1a,KAAM,SAAUrH,GAAS,WACfyF,EAAIxF,KACVwF,EAAEoN,GAAK7S,EACPyF,EAAE+1B,eAAiBx7B,EAAQ8B,cAAc,8BACzC2D,EAAEg2B,gBAAkBz7B,EAAQ8B,cAAc,+BAC1C2D,EAAEi2B,aAAe17B,EAAQ8B,cAAc,yBACvC2D,EAAEk2B,eAAiB37B,EAAQ8B,cAAc,4BACzC2D,EAAEm2B,eAAgB,EAElB37B,KAAKu7B,eAAel4B,iBAAiB,SAAS,SAACyG,GAC3CA,EAAEwY,cAAcxO,WAAW,iBAAiBjH,OAAQ,EACpD,EAAK4uB,aAAa3nB,WAAW,eAAejH,OAAQ,EACpD,EAAK+F,GAAGjN,UAAUC,IAAI,UACtB,EAAK61B,aAAa35B,QAClB,EAAK65B,eAAgB,CACxB,IACD37B,KAAKw7B,gBAAgBn4B,iBAAiB,SAAS,SAACyG,GAC5C,EAAKyxB,eAAeznB,WAAW,iBAAiBjH,OAAQ,EACxD,EAAK4uB,aAAa3nB,WAAW,eAAejH,OAAQ,EACpD,EAAK+F,GAAGjN,UAAU+D,OAAO,UACzB,EAAKiyB,eAAgB,EACrB,EAAKJ,eAAez5B,OACvB,IACD9B,KAAK07B,eAAer4B,iBAAiB,SAAS,SAACyG,GACxC,EAAK6xB,eACJ,EAAKH,gBAAgBrxB,OAE5B,IACD3E,EAAEo2B,WAAW57B,KAAKy7B,aACrB,EACDG,WAAY,SAAC92B,GACT,IAMM+2B,EAAe/2B,EAAOpD,iBALE,uSAMxBo6B,EAAmBD,EAAa,GAChCE,EAAkBF,EAAaA,EAAav5B,OAAS,GAC3DwC,EAAOzB,iBAAiB,WAAW,SAACyG,IACA,QAAVA,EAAEjF,KAVR,IAUyBiF,EAAE4wB,WAMtC5wB,EAAEjH,SACDpB,SAASmB,gBAAkBk5B,IAC7BC,EAAgBj6B,QACdgI,EAAEhH,kBAGFrB,SAASmB,gBAAkBm5B,IAC7BD,EAAiBh6B,QACfgI,EAAEhH,kBAGX,GAEJ,GC9BL,SAlCsB,CACpBsE,KAAM,SAAUrH,GAAS,WAEjBi8B,EAAcj8B,EAAQ8B,cAAc,cACpCo6B,EAAel8B,EAAQ8B,cAAc,sCACrCq6B,EAAqBn8B,EAAQ8B,cAAc,iCAC3Cs6B,EAAoBp8B,EAAQ8B,cAAc,+BAC1Cu6B,EAAgBr8B,EAAQ8B,cAAc,2BAEzCm6B,GAAeC,GAAgBC,GAAsBC,GAAqBC,EACzEJ,EAAY34B,iBAAkB,SAAS,SAACyG,GACpC,EAAKuyB,YAAYD,EAAeD,EAAmBF,EAAcC,EACpE,IAGH9I,MAAM,qDAET,EACDiJ,YAAa,SAAClD,EAAQmD,EAAYzE,EAAO0E,GACfD,EAAW/tB,WAAU,GAA7C,IACMiuB,EAAmBD,EAAYhuB,WAAU,GAU/C,OALGspB,EAAMh2B,cAAc,gBACnB26B,EAAiB72B,UAAUC,IAAI,aAC/BiyB,EAAM3N,OAAOsS,IAEjBx3B,OAAOy3B,SACA,CACR,GC/BH3a,EAAQ,8hCCAR,IACM4a,GAAgB,4CAehBC,GAA8B,WAChC,IAAMC,EAAqBn7B,SAASC,iBAbjB,sDAcnB,GAAIk7B,GAAsBA,EAAmBt6B,OAAS,EAAG,YACrBs6B,GADqB,IACrD,IAAK,EAAL,qBAAoD,KAAzCC,EAAyC,QAChDC,GAAiBD,GACjBE,GAAuBF,EAC1B,CAJoD,+BAKxD,CACJ,EAEKC,GAAmB,SAACD,GACtB,IAD4C,OAC1BA,EAAkBnuB,qBAnBzB,MAkBiC,yBAEjCqmB,EAFiC,QAGpCA,EAASzZ,MAAQyZ,EAASzZ,KAAK0Z,WA1B/B,UA2BAD,EAASpqB,UAAY+xB,GACrB3H,EAASE,YAAc,WACnBF,EAASpqB,UA9BL,iDA+BP,EACDoqB,EAASG,WAAa,WAClBH,EAASpqB,UAAY+xB,EACxB,EAVmC,EAE5C,IAAK,EAAL,qBAAkC,GAFU,+BAa/C,EAEKK,GAAyB,SAACF,GAC5B,IADkD,OAC3BA,EAAkBnuB,qBArC9B,WAoCuC,IAElD,IAAK,EAAL,qBAA4C,SAC1B/F,MArCF,eADP,MAuCR,CAJiD,+BAKrD,0hCC9CD,IACMq0B,GAAS,SAGXC,GAAc,EAWZC,GAAe,SAAC3a,GAClB,IAAM6X,EAAe7X,EAAO9c,QAAQ6G,kBAChC2wB,KAAgB7C,IAChB6C,GAAc7C,EACd7X,EAAO5Z,MAAMw0B,UAjBN,SAkBPj4B,YAAW,WACPqd,EAAO5Z,MAAMw0B,UAAYH,EAC5B,GAAE,GAEV,0hCCxBD,IAUMI,GAAiB,SAACC,GAAoB,WACXA,GADW,IACxC,IAAK,EAAL,qBAA8C,KAAnCC,EAAmC,QAEjB,IADPA,EAAe5uB,qBAX7B,OAYUpM,QACVi7B,GAAaD,EAEpB,CANuC,+BAO3C,EAEKC,GAAe,SAACF,GAElB,IADA,IAAI9X,EAAqB8X,EAAgB9X,mBAClCA,GACHA,EAAmB5c,MAAMwK,QApBZ,OAqBboS,EAAqBA,EAAmBA,kBAE/C,6GCID,IA2BmBiY,GA3BbC,GAAmB,CACvB1b,cAAAA,EACA2b,QAAAA,GACAla,UAAAA,EACAW,OAAAA,EACAnB,sBAAAA,EACAM,kBAAAA,EACA+I,WAAAA,GACAuD,eAAAA,GACA+N,iBAAAA,GACA3S,OAAAA,GACAsI,WAAAA,GACAI,aAAAA,GACAkK,eAAAA,GACAhJ,oBAAAA,GACAW,aAAAA,GACAU,mBAAAA,GACAqD,iBAAAA,GACAK,aAAAA,GACApW,SAAAA,EACAsa,YAAAA,GACAC,cAAAA,GACAC,YJjDkB,CAChB32B,KAAM,SAAU42B,GACMv8B,SAASI,cAAc,YAKzCm8B,EAAUr4B,UAAU+D,OAAO,4BAF3Bs0B,EAAUr4B,UAAUC,IAAI,2BAI3B,II2CLZ,OAAOi5B,qBjBrDLj5B,OAAO3B,iBAAiB,QAAQ,SAACb,GAC/B4rB,KAEA,IAsLgB8P,EAtLVC,EAAa18B,SAASC,iBAAiB,+CAsL7Bw8B,EArLLC,EAsLT1P,KACFyP,EAAKl7B,SAAQ,SAACo7B,GACZA,EAAI/6B,iBAAiB,SAAS,SAAUyG,GACtC,IAAMkjB,EAAWC,KACXC,EAAcC,KAEhBkR,EAAU,MACd,GAAGD,EAAIrP,UAAU,CACf,IAAMuP,EAAYF,EAAIrP,UAAUjd,MAAM,MACtCusB,EAAUC,EAAYxP,GAAewP,EAAU,IAAM,KACtD,CACD,IAAMC,EAAcH,EAAIz9B,aAAa,uBAAyBmuB,GAAesP,EAAIz9B,aAAa,wBAA0By9B,EAAIzvB,WAAWhE,UAAUykB,SAAS,KAAOgP,EAAIzvB,WAAWhE,UAAUmH,MAAM,KAAK,GAAK,mBACpM0sB,EAAmBJ,EAAIz9B,aAAa,cAAgBmuB,GAAesP,EAAIz9B,aAAa,eAAiBy9B,EAAIzvB,WAAWA,WAAW9M,cAAc,oDAAsDitB,GAAesP,EAAIzvB,WAAWA,WAAW9M,cAAc,oDAAoDktB,WAAY,MAC1T0P,EAA4B3P,GAAVuP,EAAyBG,EAAmB,IAAMH,EAA0BG,GAC9FE,EAAkB5P,GAAe5B,EAAYS,SAAW,IAAM8Q,GAC9DE,EAAyBP,EAAI9iB,KAAO8iB,EAAI9iB,KAAO+iB,EAC/CO,EAAuB,CAC3Bp8B,MAAO,cACP6qB,gBAAiBL,EACjBM,wBAAyBJ,EAAYK,SACrCC,wBAAyBN,EAAYO,SACrCC,oBAAqBR,EAAYS,SAEjCkR,kBAAmBN,EACnBO,kBAAmBL,EACnBM,kBAAmBL,EACnBM,yBAA0BL,EAE1BpQ,0BAA2B,GAEvB0Q,EAAmBn5B,OAAOmoB,YAAYnoB,OAAOooB,QAAQ0Q,GAAsB38B,QAAO,iDAExF+C,OAAOmpB,UAAYnpB,OAAOmpB,WAAa,GACvCnpB,OAAOmpB,UAAUjqB,KAAK+6B,EACvB,GACF,IACDxQ,IAAc,GAIlB,WACE,IAAMyQ,EAAmBz9B,SAASC,iBAAiB,mBACnDw9B,EAAiBl8B,SAAQ,SAACm8B,GACxBA,EAAS97B,iBAAiB,SAAS,SAAUyG,GAAK,GACnD,IAED,IAAK,IAAIhC,EAAI,EAAGA,EAAIo3B,EAAiB58B,OAAQwF,IAC3Co3B,EAAiBp3B,GAAGzE,iBAAiB,SAAS,SAAUyG,GACtD,IAAIs1B,EAEFA,OADoB31B,IAAlBK,EAAEhF,OAAOwW,KACGxR,EAAEhF,OAAO6J,WAAW2M,KAAKhN,QAAQ,OAAQ,IAEzCxE,EAAEhF,OAAOwW,KAAKhN,QAAQ,OAAQ,IAG9C,IAAM0e,EAAWC,KACXC,EAAcC,KAEduR,EAAkBxR,EAAYS,SAAW,IAAM0Q,QAAQvpB,cAEvD8pB,EAAuB,CAC3Bp8B,MAAO,cACP6qB,gBAAiBL,EACjBM,wBAAyBJ,EAAYK,SACrCC,wBAAyBN,EAAYO,SACrCC,oBAAqBR,EAAYS,SAEjCkR,kBAAmB,gBACnBC,kBAAmBM,EACnBL,kBAAmBL,EAEnBnQ,0BAA2B,GAEvB0Q,EAAmBn5B,OAAOmoB,YAAYnoB,OAAOooB,QAAQ0Q,GAAsB38B,QAAO,iDAExF+C,OAAOmpB,UAAYnpB,OAAOmpB,WAAa,GACvCnpB,OAAOmpB,UAAUjqB,KAAK+6B,EACvB,GAEJ,CAnQGI,GAGA,IAsVI7uB,EACA8uB,EACAC,EACFC,EAzVIC,EAAch+B,SAASC,iBAAiB,0BAC1C+9B,EAAYn9B,OAAS,GAqC7B,SAAwBm9B,GACtB,IAAK,IAAIr7B,EAAQ,EAAGA,EAAQq7B,EAAYn9B,OAAQ8B,IAAS,CACvD,IAAMs7B,EAAWD,EAAYr7B,GACNs7B,EAASh+B,iBAC9B,uCAEasB,SAAQ,SAAC8H,GACtBA,EAAMzH,iBAAiB,SAAS,SAAUyG,GACxC,IAAMkjB,EAAWC,KACXC,EAAcC,KAEduR,EAAkBxR,EAAYS,SAAW,IAAM7iB,EAAM8gB,UAAU9W,cAE/D6qB,EAAmB,CACvBn9B,MAAO,cACP6qB,gBAAiBL,EACjBM,wBAAyBJ,EAAYK,SACrCC,wBAAyBN,EAAYO,SACrCC,oBAAqBR,EAAYS,SAEjCkR,kBAAmB,eACnBC,kBAAmBh0B,EAAM8gB,UACzBmT,kBAAmBL,EAEnBnQ,0BAA2B,GAEvBqR,EAAe95B,OAAOmoB,YAAYnoB,OAAOooB,QAAQyR,GAAkB19B,QAAO,iDAEhF+C,OAAOmpB,UAAYnpB,OAAOmpB,WAAa,GACvCnpB,OAAOmpB,UAAUjqB,KAAK07B,EACvB,GACF,IAED,IAAMC,EAAeH,EAASh+B,iBAAiB,0BAC3Cm+B,EAAav9B,OAAS,GACxBu9B,EAAa78B,SAAQ,SAACyH,GACpBA,EAAIpH,iBAAiB,SAAS,SAAUyG,GACtC,IAAMkjB,EAAWC,KACXC,EAAcC,KAEduR,EAAkBxR,EAAYS,SAAW,IAAMljB,EAAImhB,UAAU9W,cAE7DgrB,EAAiB,CACrBt9B,MAAO,cACP6qB,gBAAiBL,EACjBM,wBAAyBJ,EAAYK,SACrCC,wBAAyBN,EAAYO,SACrCC,oBAAqBR,EAAYS,SAEjCkR,kBAAmB,eACnBC,kBAAmBr0B,EAAImhB,UACvBmT,kBAAmBL,EAEnBnQ,0BAA2B,GAEvBwR,EAAaj6B,OAAOmoB,YAAYnoB,OAAOooB,QAAQ4R,GAAgB79B,QAAO,iDAE5E+C,OAAOmpB,UAAYnpB,OAAOmpB,WAAa,GACvCnpB,OAAOmpB,UAAUjqB,KAAK67B,EACvB,GACF,IAGH,IAAMC,EAAoBN,EAASh+B,iBACjC,6BAGEs+B,EAAkB19B,OAAS,GAC7B09B,EAAkBh9B,SAAQ,SAACo7B,GACzBA,EAAI/6B,iBAAiB,SAAS,SAAUyG,GACtC,IAAMkjB,EAAWC,KACXC,EAAcC,KAEhBkR,EAAU,MACd,GAAGD,EAAIrP,UAAU,CACf,IAAMuP,EAAYF,EAAIrP,UAAUjd,MAAM,MACtCusB,EAAUC,EAAYxP,GAAewP,EAAU,IAAM,KACtD,CACD,IAAMC,EAAcH,EAAIz9B,aAAa,uBAAyBmuB,GAAesP,EAAIz9B,aAAa,wBAA0By9B,EAAIzvB,WAAWhE,UAAUykB,SAAS,KAAOgP,EAAIzvB,WAAWhE,UAAUmH,MAAM,KAAK,GAAK,mBACpM0sB,EAAmBJ,EAAIz9B,aAAa,cAAgBmuB,GAAesP,EAAIz9B,aAAa,eAAiBy9B,EAAIzvB,WAAWA,WAAW9M,cAAc,oDAAsDitB,GAAesP,EAAIzvB,WAAWA,WAAW9M,cAAc,oDAAoDktB,WAAY,MAC1T0P,EAAkBJ,EAAWvP,GAAe0P,GAAoB,IAAMH,EAAWvP,GAAe0P,GAChGE,EAAkB5P,GAAe5B,EAAYS,SAAW,IAAM8Q,GAC9DE,EAAyBP,EAAI9iB,KAAOwT,GAAesP,EAAI9iB,MAAQ+iB,EAC/DO,EAAuB,CAC3Bp8B,MAAO,cACP6qB,gBAAiBL,EACjBM,wBAAyBJ,EAAYK,SACrCC,wBAAyBN,EAAYO,SACrCC,oBAAqBR,EAAYS,SAEjCkR,kBAAmBN,EACnBO,kBAAmBL,EACnBM,kBAAmBL,EACnBM,yBAA0BL,EAE1BpQ,0BAA2B,GAEvB0Q,EAAmBn5B,OAAOmoB,YAAYnoB,OAAOooB,QAAQ0Q,GAAsB38B,QAAO,iDAExF+C,OAAOmpB,UAAYnpB,OAAOmpB,WAAa,GACvCnpB,OAAOmpB,UAAUjqB,KAAK+6B,EACvB,GACF,GAEJ,CACF,CA7IKgB,CAAeR,GAoVbjvB,EAAO/O,SAAS4wB,eAAe,QAC/BiN,EAAW9uB,GAAQA,EAAK3B,KAAO2B,EAAK3B,KAAiB,OACrD0wB,EAAS99B,SAASC,iBAAiB,8DACrC89B,GAAU,EACdD,EAAOv8B,SAAQ,SAACqN,GACdA,EAAMhN,iBAAiB,QAAQ,SAACyG,GAC9B,GAAoB,KAAhBuG,EAAMxD,QAAiB2yB,EAAS,CAClC,IAAMxS,EAAWC,KACXC,EAAcC,KACpBqS,GAAU,EAEV,IAAMU,EAAkB,CACtB19B,MAAO,UACP6qB,gBAAiBL,EACjBM,wBAAyBJ,EAAYK,SACrCC,wBAAyBN,EAAYO,SACrCC,oBAAqBR,EAAYS,SAEjCC,cAAe0R,EACfzR,cAAe,QACfE,qBAAsB,GAElBoS,EAAcr6B,OAAOmoB,YAAYnoB,OAAOooB,QAAQgS,GAAiBj+B,QAAO,iDAE9E+C,OAAOmpB,UAAYnpB,OAAOmpB,WAAa,GACvCnpB,OAAOmpB,UAAUjqB,KAAKi8B,EACvB,CACF,GACF,IAGH,WACE,IAAMb,EAAW,kBACXC,EAAS99B,SAASC,iBAAiB,wCACrC89B,GAAU,EACdD,EAAOv8B,SAAQ,SAACqN,GACdA,EAAMhN,iBAAiB,QAAQ,SAACyG,GAC9B,GAAoB,KAAhBuG,EAAMxD,QAAiB2yB,EAAS,CAClC,IAAMxS,EAAWC,KACXC,EAAcC,KACpBqS,GAAU,EAEV,IAAMU,EAAkB,CACtB19B,MAAO,UACP6qB,gBAAiBL,EACjBM,wBAAyBJ,EAAYK,SACrCC,wBAAyBN,EAAYO,SACrCC,oBAAqBR,EAAYS,SAEjCC,cAAe0R,EACfzR,cAAe,QACfE,qBAAsB,GAElBoS,EAAcr6B,OAAOmoB,YAAYnoB,OAAOooB,QAAQgS,GAAiBj+B,QAAO,iDAE9E+C,OAAOmpB,UAAYnpB,OAAOmpB,WAAa,GACvCnpB,OAAOmpB,UAAUjqB,KAAKi8B,EACvB,CACF,GACF,GACF,CA3YGC,GA6YJ,WACE,IAAMC,EAAgB5+B,SAASI,cAAc,0BAC7C,GAAIw+B,EAAe,CACjB,IAAMC,EAAaD,EAAc31B,QAAQ41B,WACnCC,EAAgB/qB,SAAS6qB,EAAc31B,QAAQ21B,eAC/CrT,EAAWC,KACXC,EAAcC,KAEdqT,EAAiB,CACrBh+B,MAAO,SACP6qB,gBAAiBL,EACjBM,wBAAyBJ,EAAYK,SACrCC,wBAAyBN,EAAYO,SACrCC,oBAAqBR,EAAYS,SAEjC8S,aAAc,cACdC,aAAcJ,EACdK,sBAAuBJ,EACvBK,eAAgB,GAEZC,EAAa/6B,OAAOmoB,YAAYnoB,OAAOooB,QAAQsS,GAAgBv+B,QAAO,iDAE5E+C,OAAOmpB,UAAYnpB,OAAOmpB,WAAa,GACvCnpB,OAAOmpB,UAAUjqB,KAAK28B,EACvB,CACF,CAnaGC,EACD,IiBqCH,ODpDUzD,i7BCoDgB57B,SAASC,iBAAiB,yBAEpD,IAAK,GAAL,uBAAoC,KAAzBkR,GAAyB,cAKH,KAF/B4qB,GAAkBC,GAFF7qB,GAAGjS,aAAa,sBAM1B68B,GAAgBp2B,KAClBo2B,GAAgBp2B,KAAKwL,IAEe,mBAApB4qB,IAChB,IAAIA,GAAgB5qB,IAGzB,kCH9DQnR,SAASmC,KAAK+B,UAAU2F,SAZf,QAadqxB,KEPMU,GAAkB57B,SAASC,iBANH,2BAO9B07B,GAAeC,IDDK,WACpB,IAD0B,OACV57B,SAASC,iBAPd,YAMe,yBAEf6gB,EAFe,QAGtBA,EAAOlf,iBAAiB25B,IAAQ,WAC5BE,GAAa3a,EAChB,GALqB,EAE1B,IAAK,EAAL,qBAA8B,GAFJ,+BAO7B,CEiEDwe","sources":["webpack://@hero-digital/hero-fed-minimal-webpack/./node_modules/a11y-dialog/dist/a11y-dialog.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/js/glider.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/js/vendor/Pristine.js","webpack://@hero-digital/hero-fed-minimal-webpack/./node_modules/querystring/decode.js","webpack://@hero-digital/hero-fed-minimal-webpack/./node_modules/querystring/encode.js","webpack://@hero-digital/hero-fed-minimal-webpack/./node_modules/querystring/index.js","webpack://@hero-digital/hero-fed-minimal-webpack/./node_modules/url/node_modules/punycode/punycode.js","webpack://@hero-digital/hero-fed-minimal-webpack/./node_modules/url/url.js","webpack://@hero-digital/hero-fed-minimal-webpack/./node_modules/url/util.js","webpack://@hero-digital/hero-fed-minimal-webpack/webpack/bootstrap","webpack://@hero-digital/hero-fed-minimal-webpack/webpack/runtime/compat get default export","webpack://@hero-digital/hero-fed-minimal-webpack/webpack/runtime/define property getters","webpack://@hero-digital/hero-fed-minimal-webpack/webpack/runtime/global","webpack://@hero-digital/hero-fed-minimal-webpack/webpack/runtime/hasOwnProperty shorthand","webpack://@hero-digital/hero-fed-minimal-webpack/webpack/runtime/make namespace object","webpack://@hero-digital/hero-fed-minimal-webpack/webpack/runtime/node module decorator","webpack://@hero-digital/hero-fed-minimal-webpack/webpack/runtime/publicPath","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/content/imagecarousel/image-carousel.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/content/featuredimagecarousel/featured-image-carousel.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/content/fullimagecarousel/full-image-carousel.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/content/carousel/carousel.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/content/accordion/accordion.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/content/drawer/drawer.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/header/MenuNav/MenuNavBase.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/header/MenuNav/MenuNavUtils.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/header/MenuNav/MenuDesktopNav.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/header/MenuNav/MenuNavHandlers.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/header/MenuNav/MenuMobileNav.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/header/MenuNav/GenerateMenu.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/header/header.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/content/gallery/gallery.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/content/herobanner/hero-banner.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/js/datalayer.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/atoms/forms/form-validation.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/atoms/forms/newsletter-signup.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/content/modalpopup/modal-popup.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/content/modalgallery/modal-gallery.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/content/locationdetail/location-detail.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/content/locationinformation/location-information.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/content/specials/specials-list.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/content/specials/region-specials-list.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/content/herocarouselcard/hero-carousel-card.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/content/herocarousel/hero-carousel.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/content/modelsearch/model-search.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/content/vehicledetail/vehicle-detail.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/components/campaign/cta/cta.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/js/custom/cv-solutions.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/js/custom/glider-swipe.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/js/common/carousel.js","webpack://@hero-digital/hero-fed-minimal-webpack/./src/js/index.js"],"sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.A11yDialog = factory());\n})(this, (function () { 'use strict';\n\n var focusableSelectors = [\n 'a[href]:not([tabindex^=\"-\"])',\n 'area[href]:not([tabindex^=\"-\"])',\n 'input:not([type=\"hidden\"]):not([type=\"radio\"]):not([disabled]):not([tabindex^=\"-\"])',\n 'input[type=\"radio\"]:not([disabled]):not([tabindex^=\"-\"])',\n 'select:not([disabled]):not([tabindex^=\"-\"])',\n 'textarea:not([disabled]):not([tabindex^=\"-\"])',\n 'button:not([disabled]):not([tabindex^=\"-\"])',\n 'iframe:not([tabindex^=\"-\"])',\n 'audio[controls]:not([tabindex^=\"-\"])',\n 'video[controls]:not([tabindex^=\"-\"])',\n '[contenteditable]:not([tabindex^=\"-\"])',\n '[tabindex]:not([tabindex^=\"-\"])',\n ];\n\n var TAB_KEY = 'Tab';\n var ESCAPE_KEY = 'Escape';\n\n /**\n * Define the constructor to instantiate a dialog\n *\n * @constructor\n * @param {Element} element\n */\n function A11yDialog(element) {\n // Prebind the functions that will be bound in addEventListener and\n // removeEventListener to avoid losing references\n this._show = this.show.bind(this);\n this._hide = this.hide.bind(this);\n this._maintainFocus = this._maintainFocus.bind(this);\n this._bindKeypress = this._bindKeypress.bind(this);\n\n this.$el = element;\n this.shown = false;\n this._id = this.$el.getAttribute('data-a11y-dialog') || this.$el.id;\n this._previouslyFocused = null;\n this._listeners = {};\n\n // Initialise everything needed for the dialog to work properly\n this.create();\n }\n\n /**\n * Set up everything necessary for the dialog to be functioning\n *\n * @param {(NodeList | Element | string)} targets\n * @return {this}\n */\n A11yDialog.prototype.create = function () {\n this.$el.setAttribute('aria-hidden', true);\n this.$el.setAttribute('aria-modal', true);\n this.$el.setAttribute('tabindex', -1);\n\n if (!this.$el.hasAttribute('role')) {\n this.$el.setAttribute('role', 'dialog');\n }\n\n // Keep a collection of dialog openers, each of which will be bound a click\n // event listener to open the dialog\n this._openers = $$('[data-a11y-dialog-show=\"' + this._id + '\"]');\n this._openers.forEach(\n function (opener) {\n opener.addEventListener('click', this._show);\n }.bind(this)\n );\n\n // Keep a collection of dialog closers, each of which will be bound a click\n // event listener to close the dialog\n const $el = this.$el;\n\n this._closers = $$('[data-a11y-dialog-hide]', this.$el)\n // This filter is necessary in case there are nested dialogs, so that\n // only closers from the current dialog are retrieved and effective\n .filter(function (closer) {\n // Testing for `[aria-modal=\"true\"]` is not enough since this attribute\n // and the collect of closers is done at instantation time, when nested\n // dialogs might not have yet been instantiated. Note that if the dialogs\n // are manually instantiated, this could still fail because none of these\n // selectors would match; this would cause closers to close all parent\n // dialogs instead of just the current one\n return closer.closest('[aria-modal=\"true\"], [data-a11y-dialog]') === $el\n })\n .concat($$('[data-a11y-dialog-hide=\"' + this._id + '\"]'));\n\n this._closers.forEach(\n function (closer) {\n closer.addEventListener('click', this._hide);\n }.bind(this)\n );\n\n // Execute all callbacks registered for the `create` event\n this._fire('create');\n\n return this\n };\n\n /**\n * Show the dialog element, disable all the targets (siblings), trap the\n * current focus within it, listen for some specific key presses and fire all\n * registered callbacks for `show` event\n *\n * @param {CustomEvent} event\n * @return {this}\n */\n A11yDialog.prototype.show = function (event) {\n // If the dialog is already open, abort\n if (this.shown) {\n return this\n }\n\n // Keep a reference to the currently focused element to be able to restore\n // it later\n this._previouslyFocused = document.activeElement;\n this.$el.removeAttribute('aria-hidden');\n this.shown = true;\n\n // Set the focus to the dialog element\n moveFocusToDialog(this.$el);\n\n // Bind a focus event listener to the body element to make sure the focus\n // stays trapped inside the dialog while open, and start listening for some\n // specific key presses (TAB and ESC)\n document.body.addEventListener('focus', this._maintainFocus, true);\n document.addEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `show` event\n this._fire('show', event);\n\n return this\n };\n\n /**\n * Hide the dialog element, enable all the targets (siblings), restore the\n * focus to the previously active element, stop listening for some specific\n * key presses and fire all registered callbacks for `hide` event\n *\n * @param {CustomEvent} event\n * @return {this}\n */\n A11yDialog.prototype.hide = function (event) {\n // If the dialog is already closed, abort\n if (!this.shown) {\n return this\n }\n\n this.shown = false;\n this.$el.setAttribute('aria-hidden', 'true');\n\n // If there was a focused element before the dialog was opened (and it has a\n // `focus` method), restore the focus back to it\n // See: https://github.com/KittyGiraudel/a11y-dialog/issues/108\n if (this._previouslyFocused && this._previouslyFocused.focus) {\n this._previouslyFocused.focus();\n }\n\n // Remove the focus event listener to the body element and stop listening\n // for specific key presses\n document.body.removeEventListener('focus', this._maintainFocus, true);\n document.removeEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `hide` event\n this._fire('hide', event);\n\n return this\n };\n\n /**\n * Destroy the current instance (after making sure the dialog has been hidden)\n * and remove all associated listeners from dialog openers and closers\n *\n * @return {this}\n */\n A11yDialog.prototype.destroy = function () {\n // Hide the dialog to avoid destroying an open instance\n this.hide();\n\n // Remove the click event listener from all dialog openers\n this._openers.forEach(\n function (opener) {\n opener.removeEventListener('click', this._show);\n }.bind(this)\n );\n\n // Remove the click event listener from all dialog closers\n this._closers.forEach(\n function (closer) {\n closer.removeEventListener('click', this._hide);\n }.bind(this)\n );\n\n // Execute all callbacks registered for the `destroy` event\n this._fire('destroy');\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n return this\n };\n\n /**\n * Register a new callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.on = function (type, handler) {\n if (typeof this._listeners[type] === 'undefined') {\n this._listeners[type] = [];\n }\n\n this._listeners[type].push(handler);\n\n return this\n };\n\n /**\n * Unregister an existing callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.off = function (type, handler) {\n var index = (this._listeners[type] || []).indexOf(handler);\n\n if (index > -1) {\n this._listeners[type].splice(index, 1);\n }\n\n return this\n };\n\n /**\n * Iterate over all registered handlers for given type and call them all with\n * the dialog element as first argument, event as second argument (if any). Also\n * dispatch a custom event on the DOM element itself to make it possible to\n * react to the lifecycle of auto-instantiated dialogs.\n *\n * @access private\n * @param {string} type\n * @param {CustomEvent} event\n */\n A11yDialog.prototype._fire = function (type, event) {\n var listeners = this._listeners[type] || [];\n var domEvent = new CustomEvent(type, { detail: event });\n\n this.$el.dispatchEvent(domEvent);\n\n listeners.forEach(\n function (listener) {\n listener(this.$el, event);\n }.bind(this)\n );\n };\n\n /**\n * Private event handler used when listening to some specific key presses\n * (namely ESCAPE and TAB)\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._bindKeypress = function (event) {\n // This is an escape hatch in case there are nested dialogs, so the keypresses\n // are only reacted to for the most recent one\n const focused = document.activeElement;\n if (focused && focused.closest('[aria-modal=\"true\"]') !== this.$el) return\n\n // If the dialog is shown and the ESCAPE key is being pressed, prevent any\n // further effects from the ESCAPE key and hide the dialog, unless its role\n // is 'alertdialog', which should be modal\n if (\n this.shown &&\n event.key === ESCAPE_KEY &&\n this.$el.getAttribute('role') !== 'alertdialog'\n ) {\n event.preventDefault();\n this.hide(event);\n }\n\n // If the dialog is shown and the TAB key is being pressed, make sure the\n // focus stays trapped within the dialog element\n if (this.shown && event.key === TAB_KEY) {\n trapTabKey(this.$el, event);\n }\n };\n\n /**\n * Private event handler used when making sure the focus stays within the\n * currently open dialog\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._maintainFocus = function (event) {\n // If the dialog is shown and the focus is not within a dialog element (either\n // this one or another one in case of nested dialogs) or within an element\n // with the `data-a11y-dialog-focus-trap-ignore` attribute, move it back to\n // its first focusable child.\n // See: https://github.com/KittyGiraudel/a11y-dialog/issues/177\n if (\n this.shown &&\n !event.target.closest('[aria-modal=\"true\"]') &&\n !event.target.closest('[data-a11y-dialog-ignore-focus-trap]')\n ) {\n moveFocusToDialog(this.$el);\n }\n };\n\n /**\n * Convert a NodeList into an array\n *\n * @param {NodeList} collection\n * @return {Array}\n */\n function toArray(collection) {\n return Array.prototype.slice.call(collection)\n }\n\n /**\n * Query the DOM for nodes matching the given selector, scoped to context (or\n * the whole document)\n *\n * @param {String} selector\n * @param {Element} [context = document]\n * @return {Array}\n */\n function $$(selector, context) {\n return toArray((context || document).querySelectorAll(selector))\n }\n\n /**\n * Set the focus to the first element with `autofocus` with the element or the\n * element itself\n *\n * @param {Element} node\n */\n function moveFocusToDialog(node) {\n var focused = node.querySelector('[autofocus]') || node;\n\n focused.focus();\n }\n\n /**\n * Get the focusable children of the given element\n *\n * @param {Element} node\n * @return {Array}\n */\n function getFocusableChildren(node) {\n return $$(focusableSelectors.join(','), node).filter(function (child) {\n return !!(\n child.offsetWidth ||\n child.offsetHeight ||\n child.getClientRects().length\n )\n })\n }\n\n /**\n * Trap the focus inside the given element\n *\n * @param {Element} node\n * @param {Event} event\n */\n function trapTabKey(node, event) {\n var focusableChildren = getFocusableChildren(node);\n var focusedItemIndex = focusableChildren.indexOf(document.activeElement);\n\n // If the SHIFT key is being pressed while tabbing (moving backwards) and\n // the currently focused item is the first one, move the focus to the last\n // focusable item from the dialog element\n if (event.shiftKey && focusedItemIndex === 0) {\n focusableChildren[focusableChildren.length - 1].focus();\n event.preventDefault();\n // If the SHIFT key is not being pressed (moving forwards) and the currently\n // focused item is the last one, move the focus to the first focusable item\n // from the dialog element\n } else if (\n !event.shiftKey &&\n focusedItemIndex === focusableChildren.length - 1\n ) {\n focusableChildren[0].focus();\n event.preventDefault();\n }\n }\n\n function instantiateDialogs() {\n $$('[data-a11y-dialog]').forEach(function (node) {\n new A11yDialog(node);\n });\n }\n\n if (typeof document !== 'undefined') {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', instantiateDialogs);\n } else {\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(instantiateDialogs);\n } else {\n window.setTimeout(instantiateDialogs, 16);\n }\n }\n }\n\n return A11yDialog;\n\n}));\n","/* @preserve\r\n _____ __ _ __ _\r\n / ___// /(_)___/ /___ ____ (_)___\r\n / (_ // // // _ // -_)/ __/_ / /(_-<\r\n \\___//_//_/ \\_,_/ \\__//_/ (_)__/ //___/\r\n |___/\r\n\r\n Version: 1.7.4\r\n Author: Nick Piscitelli (pickykneee)\r\n Website: https://nickpiscitelli.com\r\n Documentation: http://nickpiscitelli.github.io/Glider.js\r\n License: MIT License\r\n Release Date: October 25th, 2018\r\n\r\n*/\r\n\r\n/* global define */\r\n\r\n(function (factory) {\r\n typeof define === 'function' && define.amd\r\n ? define(factory)\r\n : typeof exports === 'object'\r\n ? (module.exports = factory())\r\n : factory()\r\n})(function () {\r\n ('use strict') // eslint-disable-line no-unused-expressions\r\n\r\n /* globals window:true */\r\n const _window = typeof window !== 'undefined' ? window : this\r\n\r\n const Glider = (_window.Glider = function (element, settings) {\r\n const _ = this\r\n\r\n if (element._glider) return element._glider\r\n\r\n _.ele = element\r\n _.ele.classList.add('glider')\r\n\r\n // expose glider object to its DOM element\r\n _.ele._glider = _\r\n\r\n // merge user setting with defaults\r\n _.opt = Object.assign(\r\n {},\r\n {\r\n slidesToScroll: 1,\r\n slidesToShow: 1,\r\n resizeLock: true,\r\n duration: 0.5,\r\n // easeInQuad\r\n easing: function (x, t, b, c, d) {\r\n return c * (t /= d) * t + b\r\n }\r\n },\r\n settings\r\n )\r\n\r\n // set defaults\r\n _.animate_id = _.page = _.slide = 0\r\n _.arrows = {}\r\n\r\n // preserve original options to\r\n // extend breakpoint settings\r\n _._opt = _.opt\r\n\r\n if (_.opt.skipTrack) {\r\n // first and only child is the track\r\n _.track = _.ele.children[0]\r\n } else {\r\n // create track and wrap slides\r\n _.track = document.createElement('div')\r\n _.ele.appendChild(_.track)\r\n while (_.ele.children.length !== 1) {\r\n _.track.appendChild(_.ele.children[0])\r\n }\r\n }\r\n\r\n _.track.classList.add('glider-track')\r\n\r\n // start glider\r\n _.init()\r\n\r\n // set events\r\n _.resize = _.init.bind(_, true)\r\n _.event(_.ele, 'add', {\r\n scroll: _.updateControls.bind(_)\r\n })\r\n _.event(_window, 'add', {\r\n resize: _.resize\r\n })\r\n })\r\n\r\n const gliderPrototype = Glider.prototype\r\n gliderPrototype.init = function (refresh, paging) {\r\n const _ = this\r\n\r\n let width = 0\r\n\r\n let height = 0\r\n\r\n _.slides = _.track.children;\r\n\r\n [].forEach.call(_.slides, function (_, i) {\r\n _.classList.add('glider-slide')\r\n _.setAttribute('data-gslide', i)\r\n })\r\n\r\n _.containerWidth = _.ele.clientWidth\r\n\r\n const breakpointChanged = _.settingsBreakpoint()\r\n if (!paging) paging = breakpointChanged\r\n\r\n if (\r\n _.opt.slidesToShow === 'auto' ||\r\n typeof _.opt._autoSlide !== 'undefined'\r\n ) {\r\n const slideCount = _.containerWidth / _.opt.itemWidth\r\n\r\n _.opt._autoSlide = _.opt.slidesToShow = _.opt.exactWidth\r\n ? slideCount\r\n : Math.max(1, Math.floor(slideCount))\r\n }\r\n if (_.opt.slidesToScroll === 'auto') {\r\n _.opt.slidesToScroll = Math.floor(_.opt.slidesToShow)\r\n }\r\n\r\n _.itemWidth = _.opt.exactWidth\r\n ? _.opt.itemWidth\r\n : _.containerWidth / _.opt.slidesToShow;\r\n\r\n // set slide dimensions\r\n [].forEach.call(_.slides, function (__) {\r\n __.style.height = 'auto'\r\n __.style.width = _.itemWidth + 'px'\r\n width += _.itemWidth\r\n height = Math.max(__.offsetHeight, height)\r\n })\r\n\r\n _.track.style.width = width + 'px'\r\n _.trackWidth = width\r\n _.isDrag = false\r\n _.preventClick = false\r\n _.move = false\r\n\r\n _.opt.resizeLock && _.scrollTo(_.slide * _.itemWidth, 0)\r\n\r\n if (breakpointChanged || paging) {\r\n _.bindArrows()\r\n _.buildDots()\r\n _.bindDrag()\r\n }\r\n\r\n _.updateControls()\r\n\r\n _.emit(refresh ? 'refresh' : 'loaded')\r\n }\r\n\r\n gliderPrototype.bindDrag = function () {\r\n const _ = this\r\n _.mouse = _.mouse || _.handleMouse.bind(_)\r\n\r\n const mouseup = function () {\r\n _.mouseDown = undefined\r\n _.ele.classList.remove('drag')\r\n if (_.isDrag) {\r\n _.preventClick = true\r\n }\r\n _.isDrag = false\r\n }\r\n\r\n const move = function () {\r\n _.move = true\r\n }\r\n\r\n const events = {\r\n mouseup: mouseup,\r\n mouseleave: mouseup,\r\n mousedown: function (e) {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n _.mouseDown = e.clientX\r\n _.ele.classList.add('drag')\r\n _.move = false\r\n setTimeout(move, 300)\r\n },\r\n touchstart: function (e) {\r\n _.ele.classList.add('drag')\r\n _.move = false\r\n setTimeout(move, 300)\r\n },\r\n mousemove: _.mouse,\r\n click: function (e) {\r\n if (_.preventClick && _.move) {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n }\r\n _.preventClick = false\r\n _.move = false\r\n }\r\n }\r\n\r\n _.ele.classList.toggle('draggable', _.opt.draggable === true)\r\n _.event(_.ele, 'remove', events)\r\n if (_.opt.draggable) _.event(_.ele, 'add', events)\r\n }\r\n\r\n gliderPrototype.buildDots = function () {\r\n const _ = this\r\n\r\n if (!_.opt.dots) {\r\n if (_.dots) _.dots.innerHTML = ''\r\n return\r\n }\r\n\r\n if (typeof _.opt.dots === 'string') {\r\n _.dots = document.querySelector(_.opt.dots)\r\n } else _.dots = _.opt.dots\r\n if (!_.dots) return\r\n\r\n _.dots.innerHTML = ''\r\n _.dots.setAttribute('role', 'tablist')\r\n _.dots.classList.add('glider-dots')\r\n\r\n for (let i = 0; i < Math.ceil(_.slides.length / _.opt.slidesToShow); ++i) {\r\n const dot = document.createElement('button')\r\n dot.dataset.index = i\r\n dot.setAttribute('aria-label', 'Page ' + (i + 1))\r\n dot.setAttribute('role', 'tab')\r\n dot.className = 'glider-dot ' + (i ? '' : 'active')\r\n _.event(dot, 'add', {\r\n click: _.scrollItem.bind(_, i, true)\r\n })\r\n _.dots.appendChild(dot)\r\n }\r\n }\r\n\r\n gliderPrototype.bindArrows = function () {\r\n const _ = this\r\n if (!_.opt.arrows) {\r\n Object.keys(_.arrows).forEach(function (direction) {\r\n const element = _.arrows[direction]\r\n _.event(element, 'remove', { click: element._func })\r\n })\r\n return\r\n }\r\n ['prev', 'next'].forEach(function (direction) {\r\n let arrow = _.opt.arrows[direction]\r\n if (arrow) {\r\n if (typeof arrow === 'string') arrow = document.querySelector(arrow)\r\n if (arrow) {\r\n arrow._func = arrow._func || _.scrollItem.bind(_, direction)\r\n _.event(arrow, 'remove', {\r\n click: arrow._func\r\n })\r\n _.event(arrow, 'add', {\r\n click: arrow._func\r\n })\r\n _.arrows[direction] = arrow\r\n }\r\n }\r\n })\r\n }\r\n\r\n gliderPrototype.updateControls = function (event) {\r\n const _ = this\r\n\r\n if (event && !_.opt.scrollPropagate) {\r\n event.stopPropagation()\r\n }\r\n\r\n const disableArrows = _.containerWidth >= _.trackWidth\r\n\r\n if (!_.opt.rewind) {\r\n if (_.arrows.prev) {\r\n _.arrows.prev.classList.toggle(\r\n 'disabled',\r\n _.ele.scrollLeft <= 0 || disableArrows\r\n )\r\n\r\n _.arrows.prev.setAttribute(\r\n 'aria-disabled',\r\n _.arrows.prev.classList.contains('disabled')\r\n )\r\n }\r\n if (_.arrows.next) {\r\n _.arrows.next.classList.toggle(\r\n 'disabled',\r\n Math.ceil(_.ele.scrollLeft + _.containerWidth) >=\r\n Math.floor(_.trackWidth) || disableArrows\r\n )\r\n\r\n _.arrows.next.setAttribute(\r\n 'aria-disabled',\r\n _.arrows.next.classList.contains('disabled')\r\n )\r\n }\r\n }\r\n\r\n _.slide = Math.round(_.ele.scrollLeft / _.itemWidth)\r\n _.page = Math.round(_.ele.scrollLeft / _.containerWidth)\r\n\r\n const middle = _.slide + Math.floor(Math.floor(_.opt.slidesToShow) / 2)\r\n\r\n let extraMiddle = Math.floor(_.opt.slidesToShow) % 2 ? 0 : middle + 1\r\n if (Math.floor(_.opt.slidesToShow) === 1) {\r\n extraMiddle = 0\r\n }\r\n\r\n // the last page may be less than one half of a normal page width so\r\n // the page is rounded down. when at the end, force the page to turn\r\n if (_.ele.scrollLeft + _.containerWidth >= Math.floor(_.trackWidth)) {\r\n _.page = _.dots ? _.dots.children.length - 1 : 0\r\n }\r\n\r\n [].forEach.call(_.slides, function (slide, index) {\r\n const slideClasses = slide.classList\r\n\r\n const wasVisible = slideClasses.contains('visible')\r\n\r\n const start = _.ele.scrollLeft\r\n\r\n const end = _.ele.scrollLeft + _.containerWidth\r\n\r\n const itemStart = _.itemWidth * index\r\n\r\n const itemEnd = itemStart + _.itemWidth;\r\n\r\n [].forEach.call(slideClasses, function (className) {\r\n /^left|right/.test(className) && slideClasses.remove(className)\r\n })\r\n slideClasses.toggle('active', _.slide === index)\r\n if (middle === index || (extraMiddle && extraMiddle === index)) {\r\n slideClasses.add('center')\r\n } else {\r\n slideClasses.remove('center')\r\n slideClasses.add(\r\n [\r\n index < middle ? 'left' : 'right',\r\n Math.abs(index - (index < middle ? middle : extraMiddle || middle))\r\n ].join('-')\r\n )\r\n }\r\n\r\n const isVisible =\r\n Math.ceil(itemStart) >= Math.floor(start) &&\r\n Math.floor(itemEnd) <= Math.ceil(end)\r\n slideClasses.toggle('visible', isVisible)\r\n if (isVisible !== wasVisible) {\r\n _.emit('slide-' + (isVisible ? 'visible' : 'hidden'), {\r\n slide: index\r\n })\r\n }\r\n })\r\n if (_.dots) {\r\n [].forEach.call(_.dots.children, function (dot, index) {\r\n dot.classList.toggle('active', _.page === index)\r\n })\r\n }\r\n\r\n if (event && _.opt.scrollLock) {\r\n clearTimeout(_.scrollLock)\r\n _.scrollLock = setTimeout(function () {\r\n clearTimeout(_.scrollLock)\r\n // dont attempt to scroll less than a pixel fraction - causes looping\r\n if (Math.abs(_.ele.scrollLeft / _.itemWidth - _.slide) > 0.02) {\r\n if (!_.mouseDown) {\r\n // Only scroll if not at the end (#94)\r\n if (_.trackWidth > _.containerWidth + _.ele.scrollLeft) {\r\n _.scrollItem(_.getCurrentSlide())\r\n }\r\n }\r\n }\r\n }, _.opt.scrollLockDelay || 250)\r\n }\r\n }\r\n\r\n gliderPrototype.getCurrentSlide = function () {\r\n const _ = this\r\n return _.round(_.ele.scrollLeft / _.itemWidth)\r\n }\r\n\r\n gliderPrototype.scrollItem = function (slide, dot, e) {\r\n if (e) e.preventDefault()\r\n\r\n const _ = this\r\n\r\n const originalSlide = slide\r\n ++_.animate_id\r\n\r\n const prevSlide = _.slide\r\n let position\r\n\r\n if (dot === true) {\r\n slide = Math.round((slide * _.containerWidth) / _.itemWidth)\r\n position = slide * _.itemWidth\r\n } else {\r\n if (typeof slide === 'string') {\r\n const backwards = slide === 'prev'\r\n\r\n // use precise location if fractional slides are on\r\n if (_.opt.slidesToScroll % 1 || _.opt.slidesToShow % 1) {\r\n slide = _.getCurrentSlide()\r\n } else {\r\n slide = _.slide\r\n }\r\n\r\n if (backwards) slide -= _.opt.slidesToScroll\r\n else slide += _.opt.slidesToScroll\r\n\r\n if (_.opt.rewind) {\r\n const scrollLeft = _.ele.scrollLeft\r\n slide =\r\n backwards && !scrollLeft\r\n ? _.slides.length\r\n : !backwards &&\r\n scrollLeft + _.containerWidth >= Math.floor(_.trackWidth)\r\n ? 0\r\n : slide\r\n }\r\n }\r\n\r\n slide = Math.max(Math.min(slide, _.slides.length), 0)\r\n\r\n _.slide = slide\r\n position = _.itemWidth * slide\r\n }\r\n\r\n _.emit('scroll-item', { prevSlide, slide })\r\n\r\n _.scrollTo(\r\n position,\r\n _.opt.duration * Math.abs(_.ele.scrollLeft - position),\r\n function () {\r\n _.updateControls()\r\n _.emit('animated', {\r\n value: originalSlide,\r\n type:\r\n typeof originalSlide === 'string' ? 'arrow' : dot ? 'dot' : 'slide'\r\n })\r\n }\r\n )\r\n\r\n return false\r\n }\r\n\r\n gliderPrototype.settingsBreakpoint = function () {\r\n const _ = this\r\n\r\n const resp = _._opt.responsive\r\n\r\n if (resp) {\r\n // Sort the breakpoints in mobile first order\r\n resp.sort(function (a, b) {\r\n return b.breakpoint - a.breakpoint\r\n })\r\n\r\n for (let i = 0; i < resp.length; ++i) {\r\n const size = resp[i]\r\n if (_window.innerWidth >= size.breakpoint) {\r\n if (_.breakpoint !== size.breakpoint) {\r\n _.opt = Object.assign({}, _._opt, size.settings)\r\n _.breakpoint = size.breakpoint\r\n return true\r\n }\r\n return false\r\n }\r\n }\r\n }\r\n // set back to defaults in case they were overriden\r\n const breakpointChanged = _.breakpoint !== 0\r\n _.opt = Object.assign({}, _._opt)\r\n _.breakpoint = 0\r\n return breakpointChanged\r\n }\r\n\r\n gliderPrototype.scrollTo = function (scrollTarget, scrollDuration, callback) {\r\n const _ = this\r\n\r\n const start = new Date().getTime()\r\n\r\n const animateIndex = _.animate_id\r\n\r\n var animate = function () {\r\n const now = new Date().getTime() - start\r\n _.ele.scrollLeft =\r\n _.ele.scrollLeft +\r\n (scrollTarget - _.ele.scrollLeft) *\r\n _.opt.easing(0, now, 0, 1, scrollDuration)\r\n if (now < scrollDuration && animateIndex === _.animate_id) {\r\n _window.requestAnimationFrame(animate)\r\n } else {\r\n _.ele.scrollLeft = scrollTarget\r\n callback && callback.call(_)\r\n }\r\n }\r\n\r\n _window.requestAnimationFrame(animate)\r\n }\r\n\r\n gliderPrototype.removeItem = function (index) {\r\n const _ = this\r\n\r\n if (_.slides.length) {\r\n _.track.removeChild(_.slides[index])\r\n _.refresh(true)\r\n _.emit('remove')\r\n }\r\n }\r\n\r\n gliderPrototype.addItem = function (ele) {\r\n const _ = this\r\n\r\n _.track.appendChild(ele)\r\n _.refresh(true)\r\n _.emit('add')\r\n }\r\n\r\n gliderPrototype.handleMouse = function (e) {\r\n const _ = this\r\n if (_.mouseDown) {\r\n _.isDrag = true\r\n _.ele.scrollLeft +=\r\n (_.mouseDown - e.clientX) * (_.opt.dragVelocity || 3.3)\r\n _.mouseDown = e.clientX\r\n }\r\n }\r\n\r\n // used to round to the nearest 0.XX fraction\r\n gliderPrototype.round = function (double) {\r\n const _ = this\r\n const step = _.opt.slidesToScroll % 1 || 1\r\n const inv = 1.0 / step\r\n return Math.round(double * inv) / inv\r\n }\r\n\r\n gliderPrototype.refresh = function (paging) {\r\n const _ = this\r\n _.init(true, paging)\r\n }\r\n\r\n gliderPrototype.setOption = function (opt, global) {\r\n const _ = this\r\n\r\n if (_.breakpoint && !global) {\r\n _._opt.responsive.forEach(function (v) {\r\n if (v.breakpoint === _.breakpoint) {\r\n v.settings = Object.assign({}, v.settings, opt)\r\n }\r\n })\r\n } else {\r\n _._opt = Object.assign({}, _._opt, opt)\r\n }\r\n\r\n _.breakpoint = 0\r\n _.settingsBreakpoint()\r\n }\r\n\r\n gliderPrototype.destroy = function () {\r\n const _ = this\r\n\r\n const replace = _.ele.cloneNode(true)\r\n\r\n const clear = function (ele) {\r\n ele.removeAttribute('style');\r\n [].forEach.call(ele.classList, function (className) {\r\n /^glider/.test(className) && ele.classList.remove(className)\r\n })\r\n }\r\n // remove track\r\n replace.children[0].outerHTML = replace.children[0].innerHTML\r\n clear(replace);\r\n [].forEach.call(replace.getElementsByTagName('*'), clear)\r\n _.ele.parentNode.replaceChild(replace, _.ele)\r\n _.event(_window, 'remove', {\r\n resize: _.resize\r\n })\r\n _.emit('destroy')\r\n }\r\n\r\n gliderPrototype.emit = function (name, arg) {\r\n const _ = this\r\n\r\n const e = new _window.CustomEvent('glider-' + name, {\r\n bubbles: !_.opt.eventPropagate,\r\n detail: arg\r\n })\r\n _.ele.dispatchEvent(e)\r\n }\r\n\r\n gliderPrototype.event = function (ele, type, args) {\r\n const eventHandler = ele[type + 'EventListener'].bind(ele)\r\n Object.keys(args).forEach(function (k) {\r\n eventHandler(k, args[k])\r\n })\r\n }\r\n\r\n return Glider\r\n})\r\n","/**\r\n * Pristine - Vanilla javascript form validation library\r\n * https://github.com/sha256/Pristine\r\n */\r\n (function (global, factory) {\r\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n typeof define === 'function' && define.amd ? define(factory) :\r\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Pristine = factory());\r\n}(this, (function () { 'use strict';\r\n\r\n var lang = {\r\n en: {\r\n required: \"This field is required\",\r\n email: \"This field requires a valid e-mail address\",\r\n number: \"This field requires a number\",\r\n integer: \"This field requires an integer value\",\r\n url: \"This field requires a valid website URL\",\r\n tel: \"This field requires a valid telephone number\",\r\n maxlength: \"This fields length must be < ${1}\",\r\n minlength: \"This fields length must be > ${1}\",\r\n min: \"Minimum value for this field is ${1}\",\r\n max: \"Maximum value for this field is ${1}\",\r\n pattern: \"Please match the requested format\",\r\n equals: \"The two fields do not match\"\r\n }\r\n };\r\n\r\n function findAncestor(el, cls) {\r\n while ((el = el.parentElement) && !el.classList.contains(cls)) {}\r\n return el;\r\n }\r\n\r\n function tmpl(o) {\r\n var _arguments = arguments;\r\n\r\n return this.replace(/\\${([^{}]*)}/g, function (a, b) {\r\n return _arguments[b];\r\n });\r\n }\r\n\r\n function groupedElemCount(input) {\r\n return input.pristine.self.form.querySelectorAll('input[name=\"' + input.getAttribute('name') + '\"]:checked').length;\r\n }\r\n\r\n function mergeConfig(obj1, obj2) {\r\n for (var attr in obj2) {\r\n if (!(attr in obj1)) {\r\n obj1[attr] = obj2[attr];\r\n }\r\n }\r\n return obj1;\r\n }\r\n\r\n var defaultConfig = {\r\n classTo: 'form-group',\r\n errorClass: 'has-danger',\r\n successClass: 'has-success',\r\n errorTextParent: 'form-group',\r\n errorTextTag: 'div',\r\n errorTextClass: 'text-help'\r\n };\r\n\r\n var PRISTINE_ERROR = 'pristine-error';\r\n var SELECTOR = \"input:not([type^=hidden]):not([type^=submit]), select, textarea\";\r\n var ALLOWED_ATTRIBUTES = [\"required\", \"min\", \"max\", 'minlength', 'maxlength', 'pattern'];\r\n var EMAIL_REGEX = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n\r\n var MESSAGE_REGEX = /-message(?:-([a-z]{2}(?:_[A-Z]{2})?))?/; // matches, -message, -message-en, -message-en_US\r\n var currentLocale = 'en';\r\n var validators = {};\r\n\r\n var _ = function _(name, validator) {\r\n validator.name = name;\r\n if (validator.priority === undefined) validator.priority = 1;\r\n validators[name] = validator;\r\n };\r\n\r\n _('text', { fn: function fn(val) {\r\n return true;\r\n }, priority: 0 });\r\n _('required', { fn: function fn(val) {\r\n return this.type === 'radio' || this.type === 'checkbox' ? groupedElemCount(this) : val !== undefined && val !== '';\r\n }, priority: 99, halt: true });\r\n _('email', { fn: function fn(val) {\r\n return !val || EMAIL_REGEX.test(val);\r\n } });\r\n _('number', { fn: function fn(val) {\r\n return !val || !isNaN(parseFloat(val));\r\n }, priority: 2 });\r\n _('integer', { fn: function fn(val) {\r\n return !val || /^\\d+$/.test(val);\r\n } });\r\n _('minlength', { fn: function fn(val, length) {\r\n return !val || val.length >= parseInt(length);\r\n } });\r\n _('maxlength', { fn: function fn(val, length) {\r\n return !val || val.length <= parseInt(length);\r\n } });\r\n _('min', { fn: function fn(val, limit) {\r\n return !val || (this.type === 'checkbox' ? groupedElemCount(this) >= parseInt(limit) : parseFloat(val) >= parseFloat(limit));\r\n } });\r\n _('max', { fn: function fn(val, limit) {\r\n return !val || (this.type === 'checkbox' ? groupedElemCount(this) <= parseInt(limit) : parseFloat(val) <= parseFloat(limit));\r\n } });\r\n _('pattern', { fn: function fn(val, pattern) {\r\n var m = pattern.match(new RegExp('^/(.*?)/([gimy]*)$'));return !val || new RegExp(m[1], m[2]).test(val);\r\n } });\r\n _('equals', { fn: function fn(val, otherFieldSelector) {\r\n var other = document.querySelector(otherFieldSelector);return other && (!val && !other.value || other.value === val);\r\n } });\r\n\r\n function Pristine(form, config, live) {\r\n\r\n var self = this;\r\n\r\n init(form, config, live);\r\n\r\n function init(form, config, live) {\r\n\r\n form.setAttribute(\"novalidate\", \"true\");\r\n\r\n self.form = form;\r\n self.config = mergeConfig(config || {}, defaultConfig);\r\n self.live = !(live === false);\r\n self.fields = Array.from(form.querySelectorAll(SELECTOR)).map(function (input) {\r\n\r\n var fns = [];\r\n var params = {};\r\n var messages = {};\r\n\r\n [].forEach.call(input.attributes, function (attr) {\r\n if (/^data-pristine-/.test(attr.name)) {\r\n var name = attr.name.substr(14);\r\n var messageMatch = name.match(MESSAGE_REGEX);\r\n if (messageMatch !== null) {\r\n var locale = messageMatch[1] === undefined ? 'en' : messageMatch[1];\r\n if (!messages.hasOwnProperty(locale)) messages[locale] = {};\r\n messages[locale][name.slice(0, name.length - messageMatch[0].length)] = attr.value;\r\n return;\r\n }\r\n if (name === 'type') name = attr.value;\r\n _addValidatorToField(fns, params, name, attr.value);\r\n } else if (~ALLOWED_ATTRIBUTES.indexOf(attr.name)) {\r\n _addValidatorToField(fns, params, attr.name, attr.value);\r\n } else if (attr.name === 'type') {\r\n _addValidatorToField(fns, params, attr.value);\r\n }\r\n });\r\n\r\n fns.sort(function (a, b) {\r\n return b.priority - a.priority;\r\n });\r\n\r\n self.live && input.addEventListener(!~['radio', 'checkbox'].indexOf(input.getAttribute('type')) ? 'input' : 'change', function (e) {\r\n self.validate(e.target, null, true);\r\n }.bind(self));\r\n\r\n return input.pristine = { input: input, validators: fns, params: params, messages: messages, self: self };\r\n }.bind(self));\r\n }\r\n\r\n function _addValidatorToField(fns, params, name, value) {\r\n var validator = validators[name];\r\n if (validator) {\r\n fns.push(validator);\r\n if (value) {\r\n var valueParams = name === \"pattern\" ? [value] : value.split(',');\r\n valueParams.unshift(null); // placeholder for input's value\r\n params[name] = valueParams;\r\n }\r\n }\r\n }\r\n\r\n /***\r\n * Checks whether the form/input elements are valid\r\n * @param input => input element(s) or a jquery selector, null for full form validation\r\n * @param silent => do not show error messages, just return true/false\r\n * @returns {boolean} return true when valid false otherwise\r\n */\r\n self.validate = function (input, silent, isLive = false) {\r\n silent = input && silent === true || input === true;\r\n var fields = self.fields;\r\n if (input !== true && input !== false) {\r\n if (input instanceof HTMLElement) {\r\n fields = [input.pristine];\r\n } else if (input instanceof NodeList || input instanceof (window.$ || Array) || input instanceof Array) {\r\n fields = Array.from(input).map(function (el) {\r\n return el.pristine;\r\n });\r\n }\r\n }\r\n\r\n var valid = true;\r\n\r\n for (var i = 0; fields[i]; i++) {\r\n var field = fields[i];\r\n if (_validateField(field)) {\r\n !silent && _showSuccess(field);\r\n } else {\r\n valid = false;\r\n !silent && _showError(field);\r\n }\r\n }\r\n // Callback call when 'live' is active\r\n if (isLive && this.config && typeof this.config.onLiveCompleted === 'function') {\r\n this.config.onLiveCompleted();\r\n }\r\n return valid;\r\n };\r\n\r\n /***\r\n * Get errors of a specific field or the whole form\r\n * @param input\r\n * @returns {Array|*}\r\n */\r\n self.getErrors = function (input) {\r\n if (!input) {\r\n var erroneousFields = [];\r\n for (var i = 0; i < self.fields.length; i++) {\r\n var field = self.fields[i];\r\n if (field.errors.length) {\r\n erroneousFields.push({ input: field.input, errors: field.errors });\r\n }\r\n }\r\n return erroneousFields;\r\n }\r\n if (input.tagName && input.tagName.toLowerCase() === \"select\") {\r\n return input.pristine.errors;\r\n }\r\n return input.length ? input[0].pristine.errors : input.pristine.errors;\r\n };\r\n\r\n /***\r\n * Validates a single field, all validator functions are called and error messages are generated\r\n * when a validator fails\r\n * @param field\r\n * @returns {boolean}\r\n * @private\r\n */\r\n function _validateField(field) {\r\n var errors = [];\r\n var valid = true;\r\n for (var i = 0; field.validators[i]; i++) {\r\n var validator = field.validators[i];\r\n var params = field.params[validator.name] ? field.params[validator.name] : [];\r\n params[0] = field.input.value;\r\n if (!validator.fn.apply(field.input, params)) {\r\n valid = false;\r\n\r\n if (typeof validator.msg === \"function\") {\r\n errors.push(validator.msg(field.input.value, params));\r\n } else if (typeof validator.msg === \"string\") {\r\n errors.push(tmpl.apply(validator.msg, params));\r\n } else if (validator.msg === Object(validator.msg) && validator.msg[currentLocale]) {\r\n // typeof generates unnecessary babel code\r\n errors.push(tmpl.apply(validator.msg[currentLocale], params));\r\n } else if (field.messages[currentLocale] && field.messages[currentLocale][validator.name]) {\r\n errors.push(tmpl.apply(field.messages[currentLocale][validator.name], params));\r\n } else if (lang[currentLocale] && lang[currentLocale][validator.name]) {\r\n errors.push(tmpl.apply(lang[currentLocale][validator.name], params));\r\n }\r\n\r\n if (validator.halt === true) {\r\n break;\r\n }\r\n }\r\n }\r\n field.errors = errors;\r\n return valid;\r\n }\r\n\r\n /***\r\n * Add a validator to a specific dom element in a form\r\n * @param elem => The dom element where the validator is applied to\r\n * @param fn => validator function\r\n * @param msg => message to show when validation fails. Supports templating. ${0} for the input's value, ${1} and\r\n * so on are for the attribute values\r\n * @param priority => priority of the validator function, higher valued function gets called first.\r\n * @param halt => whether validation should stop for this field after current validation function\r\n */\r\n self.addValidator = function (elem, fn, msg, priority, halt) {\r\n if (elem instanceof HTMLElement) {\r\n elem.pristine.validators.push({ fn: fn, msg: msg, priority: priority, halt: halt });\r\n elem.pristine.validators.sort(function (a, b) {\r\n return b.priority - a.priority;\r\n });\r\n } else {\r\n console.warn(\"The parameter elem must be a dom element\");\r\n }\r\n };\r\n\r\n /***\r\n * An utility function that returns a 2-element array, first one is the element where error/success class is\r\n * applied. 2nd one is the element where error message is displayed. 2nd element is created if doesn't exist and cached.\r\n * @param field\r\n * @returns {*}\r\n * @private\r\n */\r\n function _getErrorElements(field) {\r\n if (field.errorElements) {\r\n return field.errorElements;\r\n }\r\n var errorClassElement = findAncestor(field.input, self.config.classTo);\r\n var errorTextParent = null,\r\n errorTextElement = null;\r\n if (self.config.classTo === self.config.errorTextParent) {\r\n errorTextParent = errorClassElement;\r\n } else {\r\n errorTextParent = errorClassElement ? errorClassElement.querySelector('.' + self.config.errorTextParent) : '';\r\n }\r\n if (errorTextParent) {\r\n errorTextElement = errorTextParent.querySelector('.' + PRISTINE_ERROR);\r\n if (!errorTextElement) {\r\n errorTextElement = document.createElement(self.config.errorTextTag);\r\n errorTextElement.className = PRISTINE_ERROR + ' ' + self.config.errorTextClass;\r\n errorTextParent.appendChild(errorTextElement);\r\n errorTextElement.pristineDisplay = errorTextElement.style.display;\r\n }\r\n }\r\n return field.errorElements = [errorClassElement, errorTextElement];\r\n }\r\n\r\n function _showError(field) {\r\n var errorElements = _getErrorElements(field);\r\n var errorClassElement = errorElements[0],\r\n errorTextElement = errorElements[1];\r\n\r\n if (errorClassElement) {\r\n errorClassElement.classList.remove(self.config.successClass);\r\n errorClassElement.classList.add(self.config.errorClass);\r\n }\r\n if (errorTextElement) {\r\n errorTextElement.innerHTML = field.errors.join('
');\r\n errorTextElement.style.display = errorTextElement.pristineDisplay || '';\r\n }\r\n }\r\n\r\n /***\r\n * Adds error to a specific field\r\n * @param input\r\n * @param error\r\n */\r\n self.addError = function (input, error) {\r\n input = input.length ? input[0] : input;\r\n input.pristine.errors.push(error);\r\n _showError(input.pristine);\r\n };\r\n\r\n function _removeError(field) {\r\n var errorElements = _getErrorElements(field);\r\n var errorClassElement = errorElements[0],\r\n errorTextElement = errorElements[1];\r\n if (errorClassElement) {\r\n // IE > 9 doesn't support multiple class removal\r\n errorClassElement.classList.remove(self.config.errorClass);\r\n errorClassElement.classList.remove(self.config.successClass);\r\n }\r\n if (errorTextElement) {\r\n errorTextElement.innerHTML = '';\r\n errorTextElement.style.display = 'none';\r\n }\r\n return errorElements;\r\n }\r\n\r\n function _showSuccess(field) {\r\n var errorClassElement = _removeError(field)[0];\r\n errorClassElement && errorClassElement.classList.add(self.config.successClass);\r\n }\r\n\r\n /***\r\n * Resets the errors\r\n */\r\n self.reset = function () {\r\n for (var i = 0; self.fields[i]; i++) {\r\n self.fields[i].errorElements = null;\r\n }\r\n Array.from(self.form.querySelectorAll('.' + PRISTINE_ERROR)).map(function (elem) {\r\n elem.parentNode.removeChild(elem);\r\n });\r\n Array.from(self.form.querySelectorAll('.' + self.config.classTo)).map(function (elem) {\r\n elem.classList.remove(self.config.successClass);\r\n elem.classList.remove(self.config.errorClass);\r\n });\r\n };\r\n\r\n /***\r\n * Resets the errors and deletes all pristine fields\r\n */\r\n self.destroy = function () {\r\n self.reset();\r\n self.fields.forEach(function (field) {\r\n delete field.input.pristine;\r\n });\r\n self.fields = [];\r\n };\r\n\r\n self.setGlobalConfig = function (config) {\r\n defaultConfig = config;\r\n };\r\n\r\n return self;\r\n }\r\n\r\n /***\r\n *\r\n * @param name => Name of the global validator\r\n * @param fn => validator function\r\n * @param msg => message to show when validation fails. Supports templating. ${0} for the input's value, ${1} and\r\n * so on are for the attribute values\r\n * @param priority => priority of the validator function, higher valued function gets called first.\r\n * @param halt => whether validation should stop for this field after current validation function\r\n */\r\n Pristine.addValidator = function (name, fn, msg, priority, halt) {\r\n _(name, { fn: fn, msg: msg, priority: priority, halt: halt });\r\n };\r\n\r\n Pristine.addMessages = function (locale, messages) {\r\n var langObj = lang.hasOwnProperty(locale) ? lang[locale] : lang[locale] = {};\r\n\r\n Object.keys(messages).forEach(function (key, index) {\r\n langObj[key] = messages[key];\r\n });\r\n };\r\n\r\n Pristine.setLocale = function (locale) {\r\n currentLocale = locale;\r\n };\r\n\r\n return Pristine;\r\n\r\n})));","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (Array.isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return Object.keys(obj).map(function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (Array.isArray(obj[k])) {\n return obj[k].map(function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","/*! https://mths.be/punycode v1.3.2 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see \n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * http://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.3.2',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see \n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && util.isObject(url) && url instanceof Url) return url;\n\n var u = new Url;\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n if (!util.isString(url)) {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n var queryIndex = url.indexOf('?'),\n splitter =\n (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n uSplit = url.split(splitter),\n slashRegex = /\\\\/g;\n uSplit[0] = uSplit[0].replace(slashRegex, '/');\n url = uSplit.join(splitter);\n\n var rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.path = rest;\n this.href = rest;\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n if (parseQueryString) {\n this.query = querystring.parse(this.search.substr(1));\n } else {\n this.query = this.search.substr(1);\n }\n } else if (parseQueryString) {\n this.search = '';\n this.query = {};\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1)\n hostEnd = rest.length;\n\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a punycoded representation of \"domain\".\n // It only converts parts of the domain name that\n // have non-ASCII characters, i.e. it doesn't matter if\n // you call it with a domain that already is ASCII-only.\n this.hostname = punycode.toASCII(this.hostname);\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host;\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n // now rest is set to the post-host stuff.\n // chop off any delim chars.\n if (!unsafeProtocol[lowerProto]) {\n\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n if (rest.indexOf(ae) === -1)\n continue;\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n if (rest) this.pathname = rest;\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '/';\n }\n\n //to support http.request\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href = this.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n // ensure it's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (util.isString(obj)) obj = urlParse(obj);\n if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n return obj.format();\n}\n\nUrl.prototype.format = function() {\n var auth = this.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ?\n this.hostname :\n '[' + this.hostname + ']');\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query &&\n util.isObject(this.query) &&\n Object.keys(this.query).length) {\n query = querystring.stringify(this.query);\n }\n\n var search = this.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n if (this.slashes ||\n (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n if (search && search.charAt(0) !== '?') search = '?' + search;\n\n pathname = pathname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n if (util.isString(relative)) {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n var tkeys = Object.keys(this);\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n }\n\n // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol')\n result[rkey] = relative[rkey];\n }\n\n //urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] &&\n result.hostname && !result.pathname) {\n result.path = result.pathname = '/';\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n var keys = Object.keys(relative);\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift()));\n if (!relative.host) relative.host = '';\n if (!relative.hostname) relative.hostname = '';\n if (relPath[0] !== '') relPath.unshift('');\n if (relPath.length < 2) relPath.unshift('');\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n isRelAbs = (\n relative.host ||\n relative.pathname && relative.pathname.charAt(0) === '/'\n ),\n mustEndAbs = (isRelAbs || isSourceAbs ||\n (result.host && relative.pathname)),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;\n else srcPath.unshift(result.host);\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;\n else relPath.unshift(relative.host);\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = (relative.host || relative.host === '') ?\n relative.host : result.host;\n result.hostname = (relative.hostname || relative.hostname === '') ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (!util.isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo'.\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n //to support http.request\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null;\n //to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host || srcPath.length > 1) &&\n (last === '.' || last === '..') || last === '');\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last === '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' &&\n (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' ||\n (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' :\n srcPath.length ? srcPath.shift() : '';\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n }\n\n //to support request.http\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function() {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) this.hostname = host;\n};\n","'use strict';\n\nmodule.exports = {\n isString: function(arg) {\n return typeof(arg) === 'string';\n },\n isObject: function(arg) {\n return typeof(arg) === 'object' && arg !== null;\n },\n isNull: function(arg) {\n return arg === null;\n },\n isNullOrUndefined: function(arg) {\n return arg == null;\n }\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl + \"../\";","import Glider from '../../../js/glider'\r\n\r\nrequire('./_image-carousel.scss')\r\nrequire('../../../js/glider')\r\n\r\nconst LINKED_TEXT_ELEMENTS = '.image-carousel__item-cta.link.link--secondary';\r\n\r\nconst ImageCarousel = {\r\n\r\n init: function (element) {\r\n const _ = this\r\n const gliderElement = element.querySelector('.glider')\r\n const autoplayEnabled = element.classList.contains('autoplay')\r\n\r\n if (autoplayEnabled === true) {\r\n // autoplayDuration value in seconds\r\n const autoplayDuration = element.attributes['data-autoplay-duration'].value * 1000\r\n\r\n if (autoplayDuration > 0) {\r\n // bind glider-slide-visible event only if autoplayEnabled is true and autoplayDuration > 0\r\n gliderElement.addEventListener('glider-loaded', (event) => {\r\n gliderElement.setAttribute('data-current-slide', 0)\r\n let interval = null\r\n interval = _.startSlideshow(gliderElement, autoplayDuration, interval, _)\r\n const pauseButton = element.querySelector('.carousel__button--pause')\r\n if (pauseButton !== null) {\r\n pauseButton.classList.add('playing')\r\n pauseButton.addEventListener('click', (e) => { _.pauseSlideshow_toggle(e.currentTarget, gliderElement, autoplayDuration, interval, _) })\r\n }\r\n })\r\n }\r\n }\r\n\r\n const glider = new Glider(gliderElement, {\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n draggable: true,\r\n\r\n arrows: {\r\n prev: element.querySelector('.glider-prev'),\r\n next: element.querySelector('.glider-next')\r\n },\r\n responsive: [\r\n {\r\n breakpoint: 500,\r\n settings: {\r\n slidesToShow: 2\r\n }\r\n },\r\n {\r\n breakpoint: 992,\r\n settings: {\r\n slidesToShow: 4\r\n }\r\n }\r\n ]\r\n })\r\n window.addEventListener('load', () => {\r\n setTimeout(() => { glider.refresh() }, 1000)\r\n });\r\n const linkTextElements = element.querySelectorAll(LINKED_TEXT_ELEMENTS) ;\r\n this.hideAllLinkText(linkTextElements);\r\n },\r\n startSlideshow: (gliderElement, autoplayDuration, interval, _) => {\r\n interval = setInterval(() => { _.playNextSlide(gliderElement) }, autoplayDuration)\r\n return interval\r\n },\r\n pauseSlideshow: (_, interval) => {\r\n window.clearInterval(interval)\r\n },\r\n playNextSlide: (gliderElement) => {\r\n const glider = Glider(gliderElement)\r\n\r\n let nextSlide = glider.slide + 1\r\n if (glider.slides[glider.slides.length - 1].classList.contains('visible')) {\r\n nextSlide = 0\r\n }\r\n\r\n glider.scrollItem(nextSlide)\r\n gliderElement.setAttribute('data-current-slide', nextSlide)\r\n },\r\n pauseSlideshow_toggle: (el, gliderElement, autoplayDuration, interval, _) => {\r\n if (_.IsAutoplayPaused(gliderElement)) {\r\n _.playNextSlide(gliderElement)\r\n _.startSlideshow(gliderElement, autoplayDuration, interval, _)\r\n el.classList.remove('paused')\r\n el.classList.add('playing')\r\n el.attributes['aria-label'].value = 'Pause slideshow'\r\n } else {\r\n _.pauseSlideshow(_, interval)\r\n el.classList.remove('playing')\r\n el.classList.add('paused')\r\n el.attributes['aria-label'].value = 'Play slideshow'\r\n }\r\n },\r\n IsAutoplayPaused: (gliderElement) => {\r\n const pauseButton = gliderElement.parentNode.parentNode.querySelector('.carousel__button--pause')\r\n return pauseButton.classList.contains('paused')\r\n },\r\n hideAllLinkText: (linkTextElements) => {\r\n for(const linkTextElement of linkTextElements) {\r\n linkTextElement.style.display = \"none\";\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default ImageCarousel\r\n","import Glider from '../../../js/glider'\r\n\r\nrequire('./_featured-image-carousel.scss')\r\nrequire('../../../js/glider')\r\nconst MARGIN_BOTTOM = 25\r\nconst FeaturedImageCarousel = {\r\n\r\n init: function (element) {\r\n const _ = this\r\n const gliderElement = element.querySelector('.glider')\r\n const slideCount = element.querySelectorAll('.featured-image-carousel__item').length\r\n\r\n if (slideCount === 1) {\r\n // disable carousel if only one slide\r\n // also hides buttons via css\r\n element.classList.add('no-carousel')\r\n return\r\n }\r\n\r\n const autoplayEnabled = element.classList.contains('autoplay')\r\n\r\n if (autoplayEnabled === true) {\r\n // autoplayDuration value in seconds\r\n const autoplayDuration = element.attributes['data-autoplay-duration'].value * 1000\r\n\r\n if (autoplayDuration > 0) {\r\n // bind glider-slide-visible event only if autoplayEnabled is true and autoplayDuration > 0\r\n gliderElement.addEventListener('glider-loaded', (event) => {\r\n gliderElement.setAttribute('data-current-slide', 0)\r\n let interval = null\r\n interval = _.startSlideshow(gliderElement, autoplayDuration, interval, _)\r\n const pauseButton = element.querySelector('.carousel__button--pause')\r\n if (pauseButton !== null) {\r\n pauseButton.classList.add('playing')\r\n pauseButton.addEventListener('click', (e) => { _.pauseSlideshow_toggle(e.currentTarget, gliderElement, autoplayDuration, interval, _) })\r\n }\r\n })\r\n }\r\n }\r\n\r\n const glider = new Glider(gliderElement, {\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n draggable: true,\r\n scrollLock: true,\r\n resizeLock: true,\r\n arrows: {\r\n prev: element.querySelector('.glider-prev'),\r\n next: element.querySelector('.glider-next')\r\n }\r\n })\r\n\r\n glider.playPause = element.querySelector('.carousel__button--pause')\r\n\r\n window.addEventListener('load', function () {\r\n _.centerNavigation(glider)\r\n })\r\n\r\n gliderElement.addEventListener('glider-animated', function (e) {\r\n _.centerNavigation(glider)\r\n })\r\n\r\n gliderElement.addEventListener('glider-refresh', function (e) {\r\n _.centerNavigation(glider)\r\n })\r\n },\r\n\r\n centerNavigation: function (glider) {\r\n const arrows = glider.arrows\r\n const playPause = glider.playPause\r\n const image = glider.ele.querySelector('.glider-slide.active .featured-image-carousel__item-image')\r\n const height = image.offsetHeight + MARGIN_BOTTOM\r\n\r\n if (glider.ele) {\r\n glider.ele.parentElement.style.setProperty('--image-height', height + 'px')\r\n }\r\n \r\n if (arrows) {\r\n ['prev', 'next'].forEach(function (v) {\r\n if (arrows[v]) {\r\n arrows[v].style.top = (height / 2) + 'px'\r\n }\r\n })\r\n }\r\n\r\n if (playPause) {\r\n playPause.style.bottom = 'auto'\r\n playPause.style.top = (height - playPause.offsetHeight) + 'px'\r\n }\r\n },\r\n\r\n startSlideshow: (gliderElement, autoplayDuration, interval, _) => {\r\n interval = setInterval(() => { _.playNextSlide(gliderElement) }, autoplayDuration)\r\n return interval\r\n },\r\n pauseSlideshow: (_, interval) => {\r\n window.clearInterval(interval)\r\n },\r\n playNextSlide: (gliderElement) => {\r\n const glider = Glider(gliderElement)\r\n\r\n let nextSlide = glider.slide + 1\r\n if (glider.slides[glider.slides.length - 1].classList.contains('visible')) {\r\n nextSlide = 0\r\n }\r\n\r\n glider.scrollItem(nextSlide)\r\n gliderElement.setAttribute('data-current-slide', nextSlide)\r\n },\r\n pauseSlideshow_toggle: (el, gliderElement, autoplayDuration, interval, _) => {\r\n if (_.IsAutoplayPaused(gliderElement)) {\r\n _.playNextSlide(gliderElement)\r\n _.startSlideshow(gliderElement, autoplayDuration, interval, _)\r\n el.classList.remove('paused')\r\n el.classList.add('playing')\r\n el.attributes['aria-label'].value = 'Pause slideshow'\r\n } else {\r\n _.pauseSlideshow(_, interval)\r\n el.classList.remove('playing')\r\n el.classList.add('paused')\r\n el.attributes['aria-label'].value = 'Play slideshow'\r\n }\r\n },\r\n IsAutoplayPaused: (gliderElement) => {\r\n const glider = Glider(gliderElement)\r\n return glider.playPause.classList.contains('paused')\r\n }\r\n}\r\n\r\nexport default FeaturedImageCarousel\r\n","import Glider from '../../../js/glider'\r\n\r\nrequire('./_full-image-carousel.scss')\r\nrequire('../../../js/glider')\r\nconst MARGIN_BOTTOM = 35\r\nconst FullImageCarousel = {\r\n\r\n init: function (element) {\r\n const _ = this\r\n const gliderElement = element.querySelector('.glider')\r\n const slideCount = element.querySelectorAll('.full-image-carousel__item').length\r\n\r\n if (slideCount === 1) {\r\n // disable carousel if only one slide\r\n // also hides buttons via css\r\n element.classList.add('no-carousel')\r\n return\r\n }\r\n\r\n const autoplayEnabled = element.classList.contains('autoplay')\r\n\r\n if (autoplayEnabled === true) {\r\n // autoplayDuration value in seconds\r\n const autoplayDuration = element.attributes['data-autoplay-duration'].value * 1000\r\n\r\n if (autoplayDuration > 0) {\r\n // bind glider-slide-visible event only if autoplayEnabled is true and autoplayDuration > 0\r\n gliderElement.addEventListener('glider-loaded', (event) => {\r\n gliderElement.setAttribute('data-current-slide', 0)\r\n let interval = null\r\n interval = _.startSlideshow(gliderElement, autoplayDuration, interval, _)\r\n const pauseButton = element.querySelector('.carousel__button--pause')\r\n if (pauseButton !== null) {\r\n pauseButton.classList.add('playing')\r\n pauseButton.addEventListener('click', (e) => { _.pauseSlideshow_toggle(e.currentTarget, gliderElement, autoplayDuration, interval, _) })\r\n }\r\n })\r\n }\r\n }\r\n\r\n const glider = new Glider(gliderElement, {\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n rewind: true,\r\n draggable: true,\r\n scrollLock: true,\r\n resizeLock: true,\r\n dots: element.querySelector('.dots'),\r\n arrows: {\r\n prev: element.querySelector('.glider-prev'),\r\n next: element.querySelector('.glider-next')\r\n }\r\n })\r\n\r\n glider.playPause = element.querySelector('.carousel__button--pause')\r\n\r\n window.addEventListener('load', function () {\r\n _.centerNavigation(glider)\r\n })\r\n\r\n gliderElement.addEventListener('glider-animated', function (e) {\r\n _.centerNavigation(glider)\r\n })\r\n\r\n gliderElement.addEventListener('glider-refresh', function (e) {\r\n _.centerNavigation(glider)\r\n })\r\n },\r\n\r\n centerNavigation: function (glider) {\r\n const arrows = glider.arrows\r\n const dots = glider.dots\r\n const playPause = glider.playPause\r\n const image = glider.ele.querySelector('.glider-slide.active .full-image-carousel__item-image')\r\n const height = image.offsetHeight + MARGIN_BOTTOM\r\n\r\n if (glider.ele) {\r\n glider.ele.parentElement.style.setProperty('--image-height', height + 'px')\r\n }\r\n\r\n if (arrows) {\r\n ['prev', 'next'].forEach(function (v) {\r\n if (arrows[v]) {\r\n arrows[v].style.top = (height / 2) + 'px'\r\n }\r\n })\r\n }\r\n\r\n if (dots) {\r\n dots.style.bottom = 'auto'\r\n dots.style.top = (height - dots.offsetHeight) + 'px'\r\n }\r\n\r\n if (playPause) {\r\n playPause.style.bottom = 'auto'\r\n playPause.style.top = (height - playPause.offsetHeight) + 'px'\r\n }\r\n },\r\n startSlideshow: (gliderElement, autoplayDuration, interval, _) => {\r\n interval = setInterval(() => { _.playNextSlide(gliderElement) }, autoplayDuration)\r\n return interval\r\n },\r\n pauseSlideshow: (_, interval) => {\r\n window.clearInterval(interval)\r\n },\r\n playNextSlide: (gliderElement) => {\r\n const glider = Glider(gliderElement)\r\n\r\n let nextSlide = glider.slide + 1\r\n if (glider.slides[glider.slides.length - 1].classList.contains('visible')) {\r\n nextSlide = 0\r\n }\r\n\r\n glider.scrollItem(nextSlide)\r\n gliderElement.setAttribute('data-current-slide', nextSlide)\r\n },\r\n pauseSlideshow_toggle: (el, gliderElement, autoplayDuration, interval, _) => {\r\n if (_.IsAutoplayPaused(gliderElement)) {\r\n _.playNextSlide(gliderElement)\r\n _.startSlideshow(gliderElement, autoplayDuration, interval, _)\r\n el.classList.remove('paused')\r\n el.classList.add('playing')\r\n el.attributes['aria-label'].value = 'Pause slideshow'\r\n } else {\r\n _.pauseSlideshow(_, interval)\r\n el.classList.remove('playing')\r\n el.classList.add('paused')\r\n el.attributes['aria-label'].value = 'Play slideshow'\r\n }\r\n },\r\n IsAutoplayPaused: (gliderElement) => {\r\n const glider = Glider(gliderElement)\r\n return glider.playPause.classList.contains('paused')\r\n }\r\n}\r\n\r\nexport default FullImageCarousel\r\n","import Glider from '../../../js/glider'\r\n\r\nrequire('./_carousel.scss')\r\nrequire('../../../js/glider')\r\n\r\nconst Carousel = {\r\n\r\n init: function (element) {\r\n const _ = this\r\n const gliderElement = element.querySelector('.glider')\r\n\r\n const slideCount = element.querySelectorAll('.carousel__item').length\r\n\r\n if (slideCount === 1) {\r\n // disable carousel if only one slide\r\n // also hides buttons via css\r\n element.classList.add('no-carousel')\r\n return\r\n }\r\n\r\n const autoplayEnabled = element.classList.contains('autoplay')\r\n\r\n if (autoplayEnabled === true) {\r\n // autoplayDuration value in seconds\r\n const autoplayDuration = element.attributes['data-autoplay-duration'].value * 1000\r\n\r\n if (autoplayDuration > 0) {\r\n // bind glider-slide-visible event only if autoplayEnabled is true and autoplayDuration > 0\r\n gliderElement.addEventListener('glider-loaded', (event) => {\r\n gliderElement.setAttribute('data-current-slide', 0)\r\n let interval = null\r\n interval = _.startSlideshow(gliderElement, autoplayDuration, interval, _)\r\n const pauseButton = element.querySelector('.carousel__button--pause')\r\n if (pauseButton !== null) {\r\n pauseButton.classList.add('playing')\r\n pauseButton.addEventListener('click', (e) => { _.pauseSlideshow_toggle(e.currentTarget, gliderElement, autoplayDuration, interval, _) })\r\n }\r\n })\r\n }\r\n }\r\n\r\n const glider = new Glider(gliderElement, {\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n rewind: true,\r\n draggable: true,\r\n scrollLock: true,\r\n resizeLock: true,\r\n dots: element.querySelector('.dots'),\r\n arrows: {\r\n prev: element.querySelector('.glider-prev'),\r\n next: element.querySelector('.glider-next')\r\n }\r\n })\r\n },\r\n startSlideshow: (gliderElement, autoplayDuration, interval, _) => {\r\n interval = setInterval(() => { _.playNextSlide(gliderElement) }, autoplayDuration)\r\n return interval\r\n },\r\n pauseSlideshow: (_, interval) => {\r\n window.clearInterval(interval)\r\n },\r\n playNextSlide: (gliderElement) => {\r\n const glider = Glider(gliderElement)\r\n\r\n let nextSlide = glider.slide + 1\r\n if (glider.slides[glider.slides.length - 1].classList.contains('visible')) {\r\n nextSlide = 0\r\n }\r\n\r\n glider.scrollItem(nextSlide)\r\n gliderElement.setAttribute('data-current-slide', nextSlide)\r\n },\r\n pauseSlideshow_toggle: (el, gliderElement, autoplayDuration, interval, _) => {\r\n if (_.IsAutoplayPaused(gliderElement)) {\r\n _.playNextSlide(gliderElement)\r\n _.startSlideshow(gliderElement, autoplayDuration, interval, _)\r\n el.classList.remove('paused')\r\n el.classList.add('playing')\r\n el.attributes['aria-label'].value = 'Pause slideshow'\r\n } else {\r\n _.pauseSlideshow(_, interval)\r\n el.classList.remove('playing')\r\n el.classList.add('paused')\r\n el.attributes['aria-label'].value = 'Play slideshow'\r\n }\r\n },\r\n IsAutoplayPaused: (gliderElement) => {\r\n const pauseButton = gliderElement.parentNode.parentNode.querySelector('.carousel__button--pause')\r\n return pauseButton.classList.contains('paused')\r\n }\r\n}\r\n\r\nexport default Carousel\r\n","require('./_accordion.scss')\r\n\r\nconst Accordion = {\r\n\r\n init: function (element) {\r\n const _ = this\r\n const triggers = element.querySelectorAll('button[aria-expanded]')\r\n _.el = element\r\n for (const trigger of triggers) {\r\n trigger.addEventListener('click', (e) => {\r\n _.triggerClick(e.currentTarget, _)\r\n }, false)\r\n }\r\n },\r\n\r\n triggerClick: function (target, _) {\r\n const parent = target.parentNode\r\n if (!parent.classList.contains('active')) {\r\n Array.from(_.el.querySelectorAll('.accordion__item.active')).forEach(function (el) {\r\n _.toggleItem(el, false)\r\n })\r\n _.toggleItem(parent, true)\r\n } else {\r\n _.toggleItem(parent, false)\r\n }\r\n },\r\n\r\n toggleItem: function (item, open) {\r\n const itemTrigger = item.querySelector('.accordion__item-trigger')\r\n const itemContent = item.querySelector('.accordion__item-content')\r\n const itemContentHeight = itemContent.scrollHeight\r\n\r\n item.classList.add('animating')\r\n itemContent.style.height = itemContentHeight + 'px'\r\n\r\n if (open) {\r\n setTimeout(function () {\r\n item.classList.remove('animating')\r\n itemContent.style.height = null\r\n }, 350)\r\n item.classList.add('active')\r\n } else {\r\n setTimeout(() => { itemContent.style.height = null }, 0)\r\n setTimeout(() => {\r\n item.classList.remove('animating')\r\n }, 350)\r\n item.classList.remove('active')\r\n }\r\n\r\n itemTrigger.setAttribute('aria-expanded', `${open}`)\r\n itemContent.setAttribute('aria-hidden', `${!open}`)\r\n }\r\n}\r\n\r\nexport default Accordion\r\n","require('./_drawer.scss')\r\n\r\nconst Drawer = {\r\n\r\n init: function (element) {\r\n const _ = this\r\n _.el = element\r\n _.items = this.el.querySelectorAll('.drawer__item-button')\r\n\r\n for (const item of this.items) {\r\n item.addEventListener('click', (e) => {\r\n _.item_click(e.currentTarget, _)\r\n }, false)\r\n }\r\n },\r\n\r\n item_click: (target, _) => {\r\n const parent = target.parentNode\r\n if (parent.classList.contains('active')) {\r\n _.item_hide(parent)\r\n } else {\r\n _.item_show(parent)\r\n }\r\n },\r\n\r\n item_show: (target) => {\r\n target.classList.add('active')\r\n const button = target.querySelector('button')\r\n const drawer = target.querySelector('.drawer__item-drawer')\r\n button.attributes['aria-expanded'].value = true\r\n drawer.attributes['aria-hidden'].value = false\r\n },\r\n\r\n item_hide: (target) => {\r\n target.classList.remove('active')\r\n const button = target.querySelector('button')\r\n const drawer = target.querySelector('.drawer__item-drawer')\r\n button.attributes['aria-expanded'].value = false\r\n drawer.attributes['aria-hidden'].value = true\r\n }\r\n}\r\n\r\nexport default Drawer\r\n","export class MenuNavBase {\r\n constructor() {\r\n this.activeListeners = [];\r\n }\r\n\r\n /**\r\n * 'addListener' Method to centralize and register 'addEventListener' calls \r\n */\r\n addListener(target, evt, fn, opts = {}) {\r\n if (target && target.addEventListener) {\r\n target.addEventListener(evt, fn, opts);\r\n this.activeListeners.push({\r\n target,\r\n evt,\r\n fn,\r\n opts\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * 'removeListeners' Method to remove all listeners attached to this instance.\r\n */\r\n removeListeners() {\r\n this.activeListeners = this.activeListeners.map(listener => {\r\n if (listener.target && listener.target.removeEventListener) {\r\n listener.target.removeEventListener(listener.evt, listener.fn, listener.opts);\r\n return null;\r\n }\r\n }).filter(Boolean);\r\n }\r\n}","export class MenuNavUtils {\r\n static getMenuId(node) {\r\n let id = false;\r\n let role = node.getAttribute(\"role\");\r\n\r\n while (node && role !== \"menu\" && role !== \"menubar\" && role !== \"group\") {\r\n node = node.parentNode;\r\n if (node) {\r\n role = node.getAttribute(\"role\");\r\n }\r\n }\r\n\r\n if (node) {\r\n id = role + \"-\" + this.getIdFromAriaLabel(node);\r\n }\r\n\r\n return id;\r\n }\r\n\r\n static getIdFromAriaLabel(node) {\r\n let id = node.getAttribute(\"aria-label\");\r\n if (id) {\r\n id = id.trim().toLowerCase().replace(\" \", \"-\").replace(\"/\", \"-\");\r\n }\r\n return id;\r\n }\r\n\r\n static getMenuOrientation(node) {\r\n let orientation = node.getAttribute(\"aria-orientation\");\r\n if (!orientation) {\r\n const role = node.getAttribute(\"role\");\r\n switch (role) {\r\n case \"menubar\":\r\n orientation = \"horizontal\";\r\n break;\r\n case \"menu\":\r\n orientation =\r\n String(node?.classList).indexOf(\"--columns\") > -1\r\n ? \"horizontal\"\r\n : \"vertical\";\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n return orientation;\r\n }\r\n\r\n static hasPopup(menuitem) {\r\n return menuitem.getAttribute(\"aria-haspopup\") === \"true\";\r\n }\r\n\r\n static isTopLevel(menuitem) {\r\n return menuitem.getAttribute(\"aria-toplevel\") === \"true\";\r\n }\r\n\r\n\r\n static hasLink(menuitem) {\r\n return menuitem.getAttribute(\"href\") !== \"#\";\r\n }\r\n\r\n static isOpen(menuitem) {\r\n return menuitem.getAttribute(\"aria-expanded\") === \"true\";\r\n }\r\n\r\n static isInFullContentView(menuitem) {\r\n return menuitem.closest('div[role=group] div[role=menu]') !== null;\r\n }\r\n\r\n static getMenubarId(domId) {\r\n return this.getMenuId(document.querySelector(`#${domId}[role=\"menubar\"]`));\r\n }\r\n\r\n static doesNotContain(popup, menuitem) {\r\n if (menuitem) {\r\n return !popup.nextElementSibling.contains(menuitem);\r\n }\r\n return true;\r\n }\r\n\r\n static isPrintableCharacter(str) {\r\n return str.length === 1 && str.match(/\\S/);\r\n }\r\n\r\n static getMenu(menuitem, onlyGroup = false) {\r\n let menu = menuitem;\r\n let role = menuitem.getAttribute(\"role\");\r\n\r\n while ((onlyGroup && role !== \"group\") || (!onlyGroup && menu && role !== \"menu\" && role !== \"group\" && role !== \"menubar\")) {\r\n menu = menu.parentNode;\r\n if (menu) {\r\n role = menu.getAttribute(\"role\");\r\n }\r\n }\r\n\r\n return menu;\r\n }\r\n\r\n static createDomId(domNode) {\r\n const id = `nav-${Math.ceil(Math.random()*1000)}-${(+new Date())}`;\r\n domNode?.setAttribute('id', id);\r\n return id;\r\n }\r\n\r\n static getDomId(domNode) {\r\n return domNode?.getAttribute('id');\r\n }\r\n\r\n static isDesktopScreenSize() {\r\n const BREAKPOINT_XLARGE_SCREEN_SIZE = 1360; // (1200 + 80 + 80 from abstracts/_breakpoints.scss 'xlarge')\r\n return window.innerWidth >= BREAKPOINT_XLARGE_SCREEN_SIZE;\r\n }\r\n}\r\n","import { MenuNavHandlers } from \"./MenuNavHandlers\";\r\n\r\nconst MENU_NAV_CTAS_SELECTOR = '.main-nav__ctas-menu-nav';\r\n\r\nexport class MenuDesktopNav extends MenuNavHandlers {\r\n\r\n constructor(domNode, isMegaNav) {\r\n super();\r\n\r\n this.isMegaNav = isMegaNav;\r\n if(domNode.classList.contains(MENU_NAV_CTAS_SELECTOR)) {\r\n this.domNode = domNode;\r\n } else {\r\n this.domNode = domNode.querySelector(MENU_NAV_CTAS_SELECTOR);\r\n }\r\n\r\n if (!domNode) {\r\n return;\r\n }\r\n\r\n Array.from(domNode.querySelectorAll('a[aria-haspopup=true]')).forEach((item) => {\r\n this.addListener(item, \"click\", this.onMenuitemClick.bind(this), { capture: true });\r\n });\r\n this.addListener(window, \"pointerdown\", this.onBackgroundPointerdown.bind(this), true);\r\n this.closePopupAll();\r\n }\r\n\r\n closePopupAll(menuitem) {\r\n\r\n // close all siblinblings from same ul group\r\n if(menuitem) {\r\n const result = [];\r\n const liItem = menuitem.parentNode;\r\n const ulGroup = liItem.parentNode;\r\n let node = ulGroup.firstChild;\r\n\r\n while (node) {\r\n if (node !== menuitem && node.nodeType === Node.ELEMENT_NODE) {\r\n result.push(node);\r\n }\r\n node = node.nextElementSibling || node.nextSibling;\r\n }\r\n result.forEach((itemLi) => {\r\n const aElem = itemLi.querySelector(':scope > a[aria-haspopup=true]');\r\n if (aElem) {\r\n aElem.setAttribute(\"aria-expanded\", \"false\");\r\n };\r\n })\r\n\r\n // close all popups\r\n } else {\r\n Array.from(this.domNode.querySelectorAll('a[aria-haspopup=true]')).forEach((item) => {\r\n item.setAttribute(\"aria-expanded\", \"false\");\r\n });\r\n }\r\n\r\n }\r\n\r\n closePopup(menuitem) {\r\n if(menuitem && menuitem.setAttribute) {\r\n menuitem.setAttribute(\"aria-expanded\", \"false\");\r\n }\r\n }\r\n\r\n openPopup(menuitem) {\r\n\r\n if(!menuitem) return false;\r\n\r\n menuitem.setAttribute(\"aria-expanded\", \"true\");\r\n\r\n const liItem = menuitem.parentNode;\r\n const ulGroup = liItem.parentNode;\r\n if(ulGroup.getAttribute('role') === 'menubar') {\r\n\r\n const popupMenuContainer = menuitem.nextElementSibling;\r\n const allSubMenuItems = popupMenuContainer.querySelectorAll(\r\n this.isMegaNav ? ':scope > ul > li > a' : ':scope > li > a'\r\n );\r\n Array.from(allSubMenuItems).forEach(submenuitem => {\r\n // close all submenues when open a menu\r\n if (submenuitem && submenuitem.setAttribute) {\r\n submenuitem.setAttribute(\"aria-expanded\", \"false\");\r\n }\r\n });\r\n \r\n if (this.isMegaNav) {\r\n const firstMenuItem = popupMenuContainer.querySelector(':scope > ul > li > a');\r\n if (firstMenuItem && firstMenuItem.setAttribute) {\r\n firstMenuItem.setAttribute(\"aria-expanded\", \"true\");\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n}\r\n","import { MenuNavBase } from \"./MenuNavBase\";\r\nimport { MenuNavUtils } from \"./MenuNavUtils\";\r\n\r\nexport class MenuNavHandlers extends MenuNavBase {\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n onBackgroundPointerdown(event) {\r\n if (!this.domNode.contains(event.target)) {\r\n this.closePopupAll();\r\n }\r\n }\r\n\r\n onMenuitemClick(event) {\r\n var tgt = event.currentTarget;\r\n\r\n if (MenuNavUtils.hasPopup(tgt) && !MenuNavUtils.isInFullContentView(tgt)) {\r\n if (MenuNavUtils.isOpen(tgt) && MenuNavUtils.isTopLevel(tgt)) {\r\n this.closePopup(tgt);\r\n } else {\r\n this.closePopupAll(tgt);\r\n this.openPopup(tgt);\r\n }\r\n } else if(MenuNavUtils.hasLink(tgt)) {\r\n this.closePopupAll();\r\n // should navigate to the appropriate URL in anchor tag\r\n return;\r\n }\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n\r\n}\r\n","import { MenuNavUtils } from \"./MenuNavUtils\";\r\nimport { MenuNavBase } from \"./MenuNavBase\";\r\n\r\nconst MENU_MOBILE = {\r\n CTAS: '.main-nav__ctas-menu-nav',\r\n HAMBURGER: '.main-nav__ctas-hamburger-menu',\r\n BACK: '.main-nav__ctas__mobile-header .btn-menu-back',\r\n CLOSE: '.main-nav__ctas__mobile-header .btn-menu-close',\r\n LABEL: '.main-nav__ctas__mobile-header .btn-menu-back label',\r\n BACKDROP: '.main-nav__backdrop',\r\n BODY: 'body',\r\n HTML: 'html'\r\n};\r\n\r\n// defined in _general.scss (hide body scroll when menu is open in mobile/tablet)\r\nconst ACTIVE_MOBILE_MENU = 'mobile-menu-active'; \r\nexport class MenuMobileNav extends MenuNavBase {\r\n constructor(domNode) {\r\n super();\r\n\r\n this.domNode = domNode;\r\n this.headerHambNode = domNode.querySelector(MENU_MOBILE.HAMBURGER);\r\n this.headerBackNode = domNode.querySelector(MENU_MOBILE.BACK);\r\n this.headerCloseNode = domNode.querySelector(MENU_MOBILE.CLOSE);\r\n this.headerLabelNode = domNode.querySelector(MENU_MOBILE.LABEL);\r\n this.headerBackdrop = domNode.querySelector(MENU_MOBILE.BACKDROP);\r\n this.lastScrollPosition = null;\r\n this.currentMenu = null;\r\n this.previousMenu = [];\r\n\r\n this.initMenuItems(\r\n domNode.classList.contains(MENU_MOBILE.CTAS) ?\r\n domNode :\r\n domNode.querySelector(MENU_MOBILE.CTAS)\r\n );\r\n this.initOpenBackCloseButtons();\r\n }\r\n\r\n initMenuItems (domNode) {\r\n domNode.querySelectorAll(':scope > li').forEach((item) => {\r\n // select all items from main menu\r\n if (!item.classList.contains('utility-nav')) {\r\n // for each item in main menu, initialize ctas and sub menues\r\n const ctaSubMenu = item.querySelector(':scope > a');\r\n if (ctaSubMenu && MenuNavUtils.hasPopup(ctaSubMenu)) {\r\n ctaSubMenu.setAttribute('aria-expanded', false);\r\n // with 'active-menu' we can attach submenu behavior on first and second level submenues\r\n ctaSubMenu.classList.add('active-menu');\r\n // initialize other nested submenues\r\n const subMenuContainer = item.querySelector(':scope > div');\r\n if (subMenuContainer) {\r\n this.initializeSubMenues (subMenuContainer);\r\n }\r\n // add listener to each ctaSubMenu\r\n ctaSubMenu && this.addListener(ctaSubMenu, \"click\", this.onMenuitemTouch.bind(this), { capture: true });\r\n }\r\n }\r\n });\r\n }\r\n\r\n initializeSubMenues (domNode) {\r\n // From level 3, html structure may vary (special UI for those submenu levels)\r\n // level 2 -------------- case 1- div > ul > li* (One ul with Multiple li)\r\n // level 3 and others --- case 1- div > ul > li* || case 2- div > ul* > li\r\n\r\n domNode.querySelectorAll(':scope > ul > li').forEach((item) => {\r\n // configure class for special styling for 3rd level of submenu\r\n const nextLevelSubMenuContainer = item.querySelector(':scope > div');\r\n\r\n if (nextLevelSubMenuContainer) {\r\n nextLevelSubMenuContainer.classList.add('inactive-expanded-menu');\r\n nextLevelSubMenuContainer.querySelectorAll(':scope > ul').forEach((ulItem) => {\r\n // submenus with special styling (+3rd level) hide/show and render in one or two columns\r\n if (ulItem.children.length === 0) {\r\n ulItem.classList.add('not-visible');\r\n } else {\r\n const submenuTitle = ulItem.querySelector(':scope a');\r\n if (MenuNavUtils.hasPopup(submenuTitle)) {\r\n ulItem.classList.add('half-line');\r\n } else {\r\n ulItem.classList.add('full-line');\r\n }\r\n }\r\n });\r\n }\r\n\r\n const ctaSubMenu = item.querySelector(':scope > a');\r\n if (ctaSubMenu && MenuNavUtils.hasPopup(ctaSubMenu)) {\r\n // configure initial state\r\n ctaSubMenu.setAttribute('aria-expanded', false);\r\n ctaSubMenu.classList.add('active-menu');\r\n // initialize other nested submenues as expanded\r\n domNode.querySelectorAll(':scope > div a').forEach((aItem) => {\r\n if (MenuNavUtils.hasPopup(aItem)) {\r\n ctaSubMenu.setAttribute('aria-expanded', true);\r\n }\r\n });\r\n // add event listener\r\n ctaSubMenu && this.addListener(ctaSubMenu, \"click\", this.onMenuitemTouch.bind(this), { capture: true });\r\n }\r\n });\r\n }\r\n\r\n onMenuitemTouch (evt) {\r\n evt && evt.preventDefault && evt.preventDefault();\r\n\r\n // show submenu\r\n evt.currentTarget.setAttribute('aria-expanded', true);\r\n\r\n // hide siblings from parent\r\n const siblings = this.getSiblings(evt.currentTarget.parentNode);\r\n siblings.forEach(item => item.classList.add('inactive'));\r\n evt.currentTarget.parentNode.classList.remove('inactive');\r\n evt.currentTarget.parentNode.classList.remove('inactive');\r\n evt.currentTarget.classList.add('inactive');\r\n\r\n // set title and show back btn\r\n this.headerBackNode.classList.add('show-btn');\r\n this.headerLabelNode.textContent = evt.currentTarget.textContent;\r\n \r\n if (this.currentMenu) {\r\n this.previousMenu.push(this.currentMenu);\r\n }\r\n this.currentMenu = evt.currentTarget;\r\n }\r\n\r\n initOpenBackCloseButtons () {\r\n this.addListener(this.headerHambNode, \"click\", this.onOpenMenuTouch.bind(this), { capture: true });\r\n this.addListener(this.headerCloseNode, \"click\", this.onCloseMenuTouch.bind(this), { capture: true });\r\n this.addListener(this.headerBackdrop, \"pointerdown\", this.onCloseMenuTouch.bind(this), { capture: true });\r\n this.addListener(this.headerBackNode, \"pointerdown\", this.onBackMenuTouch.bind(this), { capture: true });\r\n }\r\n\r\n onOpenMenuTouch () {\r\n this.resetMenuNav();\r\n this.domNode.classList.add('show-menu');\r\n const body = document.querySelector(MENU_MOBILE.BODY);\r\n const html = document.querySelector(MENU_MOBILE.HTML);\r\n body.classList.add(ACTIVE_MOBILE_MENU);\r\n html.classList.add(ACTIVE_MOBILE_MENU);\r\n this.lastScrollPosition = window.scrollY;\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n onCloseMenuTouch (evt) {\r\n evt?.preventDefault();\r\n this.domNode.classList.remove('show-menu');\r\n const body = document.querySelector(MENU_MOBILE.BODY);\r\n const html = document.querySelector(MENU_MOBILE.HTML);\r\n body.classList.remove(ACTIVE_MOBILE_MENU);\r\n html.classList.remove(ACTIVE_MOBILE_MENU);\r\n if (!isNaN(this.lastScrollPosition)) {\r\n window.scrollTo(0, this.lastScrollPosition);\r\n }\r\n }\r\n\r\n getSiblings (node) {\r\n return [...node.parentNode.children].filter(c => c !== node);\r\n }\r\n\r\n onBackMenuTouch (evt) {\r\n evt && evt.preventDefault && evt.preventDefault();\r\n\r\n if(this.currentMenu) {\r\n const itemObj = this.currentMenu;\r\n const siblings = this.getSiblings(itemObj.parentNode);\r\n siblings.forEach(item => item.classList.remove('inactive'));\r\n itemObj.parentNode.classList.remove('active');\r\n itemObj.classList.remove('inactive');\r\n itemObj.setAttribute('aria-expanded', false);\r\n\r\n const prevMenu = this.previousMenu.pop();\r\n if (prevMenu) {\r\n this.headerLabelNode.textContent = prevMenu.textContent;\r\n this.currentMenu = prevMenu;\r\n } else {\r\n this.currentMenu = null;\r\n this.headerBackNode.classList.remove('show-btn');\r\n }\r\n }\r\n }\r\n\r\n clearInactiveMenues() {\r\n this.domNode.\r\n querySelectorAll(`${MENU_MOBILE.CTAS} li`).\r\n forEach(item => { item.classList.remove('inactive'); item.classList.remove('active'); } );\r\n\r\n this.domNode.\r\n querySelectorAll(`${MENU_MOBILE.CTAS} a`).\r\n forEach(item => { item.classList.remove('inactive'); item.setAttribute('aria-expanded', false); } );\r\n \r\n this.domNode.\r\n querySelectorAll('.inactive-expanded-menu a').\r\n forEach(item => { item.setAttribute('aria-expanded', true); } );\r\n }\r\n \r\n clearMenuHeader () {\r\n this.headerBackNode.classList.remove('show-btn');\r\n this.headerLabelNode.textContent = '';\r\n }\r\n\r\n resetMenuNav () {\r\n this.clearInactiveMenues();\r\n this.clearMenuHeader();\r\n }\r\n}","// To generate menubar only for demo/FED catalog\r\nconst structure = {\r\n lis: [\r\n {\r\n title: 'Search Truck Inventory',\r\n lis: [\r\n {\r\n title: 'search all trucks'\r\n },\r\n {\r\n title: 'by type',\r\n lis: [\r\n {\r\n title: 'new'\r\n },\r\n {\r\n title: 'used'\r\n },\r\n {\r\n title: 'certified'\r\n },\r\n ]\r\n },\r\n {\r\n title: 'by class',\r\n lis: [\r\n {\r\n title: 'heavy'\r\n },\r\n {\r\n title: 'medium'\r\n },\r\n {\r\n title: 'light'\r\n },\r\n ]\r\n },\r\n {\r\n title: 'by category',\r\n lis: [\r\n {\r\n title: 'tractor'\r\n },\r\n {\r\n title: 'cab'\r\n },\r\n {\r\n title: 'vocational',\r\n lis: [\r\n {\r\n title: 'Tow'\r\n },\r\n {\r\n title: 'refuse'\r\n },\r\n {\r\n title: 'crane'\r\n },\r\n {\r\n title: 'mixer'\r\n },\r\n ]\r\n },\r\n {\r\n title: 'trailers'\r\n },\r\n {\r\n title: 'work'\r\n },\r\n {\r\n title: 'Electric'\r\n },\r\n {\r\n title: 'buses',\r\n lis: [\r\n {\r\n title: 'comercial'\r\n },\r\n {\r\n title: 'school'\r\n },\r\n ]\r\n },\r\n ]\r\n },\r\n {\r\n title: 'by brand',\r\n lis: [\r\n {\r\n title: 'Tow'\r\n },\r\n {\r\n title: 'peterbilt'\r\n },\r\n {\r\n title: 'international'\r\n },\r\n {\r\n title: 'ford'\r\n },\r\n {\r\n title: 'hino'\r\n },\r\n {\r\n title: 'izusu'\r\n },\r\n {\r\n title: 'ic'\r\n },\r\n {\r\n title: 'collins'\r\n },\r\n {\r\n title: 'blue'\r\n },\r\n {\r\n title: 'microbird'\r\n },\r\n ]\r\n },\r\n ]\r\n },\r\n {\r\n title: 'Truck Sales',\r\n lis: [\r\n {\r\n title: 'find'\r\n },\r\n {\r\n title: 'sales',\r\n lis: [\r\n {\r\n title: 'new'\r\n },\r\n {\r\n title: 'used'\r\n },\r\n {\r\n title: 'ready'\r\n },\r\n ]\r\n },\r\n {\r\n title: 'leasing'\r\n },\r\n {\r\n title: 'brands',\r\n showMenuAsColumn: true,\r\n lis: [\r\n {\r\n title: 'truck',\r\n lis: [\r\n {\r\n title: 'peterbilt',\r\n lis: [\r\n {\r\n title: 'overview',\r\n },\r\n {\r\n title: 'on',\r\n },\r\n {\r\n title: 'vocational',\r\n },\r\n {\r\n title: 'medium',\r\n },\r\n {\r\n title: 'electric',\r\n },\r\n ] \r\n },\r\n {\r\n title: 'ford',\r\n lis: [\r\n {\r\n title: 'overview',\r\n },\r\n {\r\n title: 'light',\r\n },\r\n {\r\n title: 'medium',\r\n },\r\n {\r\n title: 'super',\r\n },\r\n {\r\n title: 'light dutty',\r\n },\r\n {\r\n title: 'medium dutty',\r\n },\r\n {\r\n title: 'super dutty',\r\n },\r\n {\r\n title: 'e-series',\r\n },\r\n ] \r\n },\r\n {\r\n title: 'international',\r\n lis: [\r\n {\r\n title: 'overview',\r\n },\r\n {\r\n title: 'light',\r\n },\r\n {\r\n title: 'medium',\r\n },\r\n {\r\n title: 'super',\r\n },\r\n {\r\n title: 'light dutty',\r\n },\r\n {\r\n title: 'medium dutty',\r\n },\r\n ]\r\n },\r\n {\r\n title: 'hino',\r\n lis: [\r\n {\r\n title: 'overview',\r\n },\r\n {\r\n title: 'light',\r\n },\r\n {\r\n title: 'medium',\r\n },\r\n ]\r\n },\r\n {\r\n title: 'isuzu',\r\n lis: [\r\n {\r\n title: 'overview',\r\n },\r\n {\r\n title: 'light',\r\n },\r\n {\r\n title: 'medium',\r\n },\r\n ]\r\n },\r\n ]\r\n },\r\n {\r\n title: 'bus',\r\n lis: [\r\n {\r\n title: 'ic',\r\n lis: [\r\n {\r\n title: 'overview',\r\n },\r\n {\r\n title: 'light',\r\n },\r\n {\r\n title: 'medium',\r\n },\r\n ]\r\n },\r\n {\r\n title: 'collins',\r\n lis: [\r\n {\r\n title: 'overview',\r\n },\r\n {\r\n title: 'light',\r\n },\r\n {\r\n title: 'medium',\r\n },\r\n {\r\n title: 'extra',\r\n },\r\n ]\r\n },\r\n {\r\n title: 'blue',\r\n lis: [\r\n {\r\n title: 'overview',\r\n },\r\n {\r\n title: 'light',\r\n },\r\n {\r\n title: 'medium',\r\n },\r\n ]\r\n },\r\n {\r\n title: 'micro',\r\n lis: [\r\n {\r\n title: 'overview',\r\n },\r\n {\r\n title: 'light',\r\n },\r\n {\r\n title: 'medium',\r\n },\r\n ]\r\n },\r\n ]\r\n },\r\n ]\r\n },\r\n ]\r\n },\r\n {\r\n title: 'Service',\r\n },\r\n {\r\n title: 'Parts',\r\n lis: [\r\n {\r\n title: 'shop parts',\r\n lis: [\r\n {\r\n title: 'used',\r\n },\r\n {\r\n title: 'new',\r\n },\r\n {\r\n title: 'ready',\r\n },\r\n ]\r\n },\r\n {\r\n title: 'parts specials',\r\n },\r\n {\r\n title: 'rig tough truck parts',\r\n },\r\n ] \r\n },\r\n {\r\n title: 'Electric',\r\n },\r\n {\r\n title: 'About us',\r\n },\r\n ]\r\n}\r\n\r\n// To generate menubar only for demo/FED catalog\r\nexport class GenerateMenu {\r\n\r\n static isDesktop;\r\n\r\n static createA(txt, hasPopup = false, level) {\r\n const anchor = document.createElement('a');\r\n anchor.textContent = txt;\r\n anchor.setAttribute('role', 'menuitem');\r\n anchor.setAttribute('href', '#');\r\n if (hasPopup) {\r\n anchor.setAttribute('aria-haspopup', true);\r\n anchor.setAttribute('aria-expanded', false);\r\n if (level < 3 && this.isDesktop) {\r\n if (level === 1) {\r\n const imgD = document.createElement('img');\r\n imgD.setAttribute('src', 'images/chevron-down.svg');\r\n imgD.setAttribute('alt', '');\r\n imgD.classList.add('color--dark50', 'arrow-desktop');\r\n anchor.append(imgD);\r\n }\r\n const imgM = document.createElement('img');\r\n imgM.setAttribute('src', 'images/breadcrumb-right.svg');\r\n imgM.setAttribute('alt', '');\r\n imgM.classList.add('color--dark50', 'arrow-mobile');\r\n anchor.append(imgM);\r\n } else if (level === 1 && !this.isDesktop) {\r\n const imgM = document.createElement('img');\r\n imgM.setAttribute('src', 'images/breadcrumb-right.svg');\r\n imgM.setAttribute('alt', '');\r\n imgM.classList.add('color--dark50', 'arrow-mobile');\r\n anchor.append(imgM);\r\n }\r\n }\r\n return anchor;\r\n }\r\n\r\n static createLi(obj, role = 'none', level = 1) {\r\n const li = document.createElement('li');\r\n\r\n li.setAttribute('role', role);\r\n // li.classList.add(`menu-option-level-${level}`);\r\n\r\n const hasSubMenu = obj.lis && obj.lis.length;\r\n const anchor = this.createA(obj.title, hasSubMenu, level);\r\n li.appendChild(anchor);\r\n if (hasSubMenu) {\r\n const newUL = this.createSubmenu(obj.title, obj.lis, level + 1, level === 1 ? 'group' : 'menu', obj.showMenuAsColumn);\r\n li.appendChild(newUL);\r\n }\r\n return li;\r\n }\r\n\r\n static createSubmenu (title, lis, level, role, showMenuAsColumn) {\r\n const ul = document.createElement('ul');\r\n ul.setAttribute('role', role);\r\n ul.setAttribute('data-level', level);\r\n ul.setAttribute('aria-label', title);\r\n\r\n if (showMenuAsColumn) {\r\n ul.classList.add('main-nav__ctas-menu-nav--columns');\r\n }\r\n ul.classList.add(`menubar-level-${level}`);\r\n\r\n lis.forEach(element => {\r\n const newLI = this.createLi(element, 'none', level);\r\n ul.appendChild(newLI);\r\n });\r\n return ul;\r\n }\r\n\r\n static generate(element, isDesktop) {\r\n this.isDesktop = isDesktop;\r\n\r\n const mainUL = element.querySelector(':scope .main-nav__ctas-menu-nav');\r\n const lisLI = mainUL.querySelectorAll(':scope > li');\r\n if (lisLI.length > 1) {\r\n return;\r\n }\r\n\r\n structure.lis.reverse().forEach( element => {\r\n const newLI = this.createLi(element);\r\n mainUL.insertAdjacentElement('afterbegin', newLI);\r\n });\r\n\r\n }\r\n}","import { MenuDesktopNav, MenuMobileNav, MenuNavUtils } from \"./MenuNav\";\r\nimport { GenerateMenu } from './MenuNav/GenerateMenu';\r\n\r\nconst HEADER_FLYOUT = {\r\n SEARCH_CTA: 'button.search-cta',\r\n CLOSE_CTA: 'button.close-flyout-cta',\r\n FLYOUT_SEL: '.search-flyout',\r\n FLYOUT_SHOW: 'search-flyout--show',\r\n INPUT_SEARCH: 'input.form__input'\r\n}\r\n\r\nconst RTI = \"Rush Truck Insurance\";\r\nconst CCFT = \"Cummins Clean Fuel Technologies\"\r\n\r\nconst Header = {\r\n\r\n init: function (rootComponent) {\r\n this.element = rootComponent.querySelector(\".main-nav__ctas\");\r\n this.isMegaNav = rootComponent.classList.contains('header--mega');\r\n this.isDesktop = MenuNavUtils.isDesktopScreenSize();\r\n this.currMenuInstance = null;\r\n const localFEDMode = this.element && this.element.dataset && Boolean(this.element.dataset.localFedMode);\r\n if (localFEDMode) {\r\n GenerateMenu.generate(this.element, this.isDesktop);\r\n }\r\n if (this.isDesktop) {\r\n this.currMenuInstance = new MenuDesktopNav(this.element, this.isMegaNav);\r\n } else {\r\n this.currMenuInstance = new MenuMobileNav(this.element)\r\n }\r\n\r\n rootComponent.querySelector(\".invert\").classList.add(\"search-icon\");\r\n\r\n window.addEventListener('resize', this.onWindowResize.bind(this));\r\n\r\n const searchFlyout = rootComponent.querySelector(HEADER_FLYOUT.FLYOUT_SEL);\r\n const inputSearch = rootComponent.querySelector(HEADER_FLYOUT.INPUT_SEARCH);\r\n\r\n function closeFlyout () {\r\n searchFlyout && searchFlyout.classList.remove(HEADER_FLYOUT.FLYOUT_SHOW);\r\n inputSearch && (inputSearch.value = '');\r\n }\r\n \r\n if (searchFlyout) {\r\n const searchCta = rootComponent.querySelector(HEADER_FLYOUT.SEARCH_CTA);\r\n const closeCta = rootComponent.querySelector(HEADER_FLYOUT.CLOSE_CTA);\r\n\r\n searchCta && searchCta.addEventListener('click', () => {\r\n searchFlyout &&\r\n searchFlyout.classList.contains(HEADER_FLYOUT.FLYOUT_SHOW) ?\r\n closeFlyout() :\r\n searchFlyout.classList.add(HEADER_FLYOUT.FLYOUT_SHOW);\r\n });\r\n closeCta && closeCta.addEventListener('click', () => {\r\n closeFlyout();\r\n });\r\n }\r\n\r\n if (rootComponent.ariaLabel === RTI) {\r\n rootComponent.querySelector(\"a[href='/careers']\").target = \"_blank\";\r\n rootComponent.querySelector(\"a[href='/log-in']\").target = \"_blank\";\r\n }\r\n\r\n if (rootComponent.ariaLabel === CCFT) {\r\n rootComponent.querySelector(\"a[href='/customer-support/training-videos']\").target = \"_blank\";\r\n }\r\n \r\n },\r\n\r\n onWindowResize: function (evt) {\r\n const newIsDesktopState = MenuNavUtils.isDesktopScreenSize();\r\n if (newIsDesktopState !== this.isDesktop) {\r\n this.isDesktop = newIsDesktopState;\r\n\r\n if (this.currMenuInstance && this.currMenuInstance.removeListeners) {\r\n this.currMenuInstance.removeListeners();\r\n }\r\n if (this.isDesktop) {\r\n this.currMenuInstance = new MenuDesktopNav(this.element);\r\n } else {\r\n this.currMenuInstance = new MenuMobileNav(this.element)\r\n }\r\n }\r\n }\r\n\r\n};\r\n\r\nexport { Header };\r\n","import Glider from '../../../js/glider'\r\n\r\nconst Gallery = {\r\n\r\n init: function (element) {\r\n const _ = this\r\n const gliderElement = element.querySelector('.glider')\r\n const modal = element.querySelector('.gallery__modal')\r\n const closeButton = element.querySelector('.gallery__modal-close-button')\r\n\r\n if (closeButton != null) {\r\n closeButton.addEventListener('click', (e) => {\r\n _.Modal_Close(modal)\r\n })\r\n }\r\n\r\n if (modal != null) {\r\n modal.addEventListener('click', (e) => {\r\n if (e.target.classList.contains('gallery__modal')) {\r\n _.Modal_Close(modal)\r\n }\r\n })\r\n }\r\n\r\n const glider = new Glider(gliderElement, {\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n draggable: false,\r\n arrows: {\r\n prev: element.querySelector('.glider-prev'),\r\n next: element.querySelector('.glider-next')\r\n }\r\n })\r\n\r\n const thumbnails = element.querySelectorAll('.gallery__thumbnail-image')\r\n for (let i = 0; i < thumbnails.length; ++i) {\r\n thumbnails[i].addEventListener('click', (e) => {\r\n _.Modal_Open(modal, i, glider)\r\n glider.resize()\r\n })\r\n }\r\n },\r\n Modal_Open: (modal, slideId, glider) => {\r\n document.querySelector('body').classList.add('no-scroll')\r\n modal.classList.add('open')\r\n modal.attributes['aria-hidden'].value = 'false'\r\n glider.scrollItem(slideId)\r\n },\r\n Modal_Close: (modal) => {\r\n document.querySelector('body').classList.remove('no-scroll')\r\n modal.classList.remove('open')\r\n modal.attributes['aria-hidden'].value = 'true'\r\n }\r\n}\r\n\r\nexport default Gallery\r\n","\r\nconst HeroBanner = {\r\n init: function (element) {\r\n const _ = this\r\n // only init if banner has video\r\n const hasVideo = element.querySelectorAll('.hero-banner__video').length > 0\r\n if (!hasVideo) return\r\n\r\n const playButton = element.querySelector('.hero-banner__button-play')\r\n const pauseButton = element.querySelector('.hero-banner__button-pause')\r\n const video = element.querySelector('.hero-banner__video iframe')\r\n console.log(video)\r\n\r\n playButton.addEventListener('click', (e) => {\r\n _.video_toggle(video, 'play')\r\n element.classList.remove('paused')\r\n })\r\n\r\n pauseButton.addEventListener('click', (e) => {\r\n _.video_toggle(video, 'pause')\r\n element.classList.add('paused')\r\n })\r\n },\r\n\r\n video_toggle: (video, action) => {\r\n const data = { method: action }\r\n const url = video.src.split('?')[0]\r\n\r\n if (url !== undefined) {\r\n video.contentWindow.postMessage(JSON.stringify(data), url)\r\n }\r\n }\r\n}\r\n\r\nexport default HeroBanner\r\n","const googleAnalytics = () => {\r\n window.addEventListener('load', (event) => {\r\n handlePageLoad()\r\n\r\n const ctasButton = document.querySelectorAll('a.js-analytics-cta, button.js-analytics-cta')\r\n handleCtas(ctasButton)\r\n\r\n handleCallLinks()\r\n\r\n // check for carousel\r\n const cmpCarousel = document.querySelectorAll('.js-analytics-carousel')\r\n if (cmpCarousel.length > 0) {\r\n handleCarousel(cmpCarousel)\r\n }\r\n\r\n // Forms\r\n handleForms()\r\n handleNewsletterForm()\r\n\r\n // Simple search\r\n handleSimpleSearch()\r\n })\r\n}\r\n\r\nconst googleAnalyticsSubmitForm = (form) => {\r\n const siteName = getSiteName()\r\n const urlSections = getUrlSections()\r\n\r\n const formCompleteFull = {\r\n event: 'process',\r\n page_view__site: siteName,\r\n page_view__siteSection1: urlSections.section1,\r\n page_view__siteSection2: urlSections.section2,\r\n page_view__pageName: urlSections.pageName,\r\n\r\n process__name: form.name ? form.name : 'newsletter-form',\r\n process__step: 'complete',\r\n process__metricComplete: 1,\r\n process__metricStart: ''\r\n }\r\n const formComplete = Object.fromEntries(Object.entries(formCompleteFull).filter(([_, v]) => !!v))\r\n console.log('GA - Form Complete', formComplete)\r\n window.dataLayer = window.dataLayer || []\r\n window.dataLayer.push(formComplete)\r\n}\r\nconst googleAnalyticsLoadModal = (modalName) => {\r\n handlePageLoad(modalName)\r\n}\r\nfunction handleCarousel(cmpCarousel) {\r\n for (let index = 0; index < cmpCarousel.length; index++) {\r\n const carousel = cmpCarousel[index]\r\n const carouselArrows = carousel.querySelectorAll(\r\n 'button.js-analytics-carousel-button'\r\n )\r\n carouselArrows.forEach((arrow) => {\r\n arrow.addEventListener('click', function (e) {\r\n const siteName = getSiteName()\r\n const urlSections = getUrlSections()\r\n\r\n const interactionName = urlSections.pageName + ':' + arrow.ariaLabel.toLowerCase()\r\n\r\n const clickOnArrowFull = {\r\n event: 'interaction',\r\n page_view__site: siteName,\r\n page_view__siteSection1: urlSections.section1,\r\n page_view__siteSection2: urlSections.section2,\r\n page_view__pageName: urlSections.pageName,\r\n\r\n interaction__type: 'carousel-nav',\r\n interaction__text: arrow.ariaLabel,\r\n interaction__name: interactionName,\r\n\r\n page_view__metricInstance: 1,\r\n }\r\n const clickOnArrow = Object.fromEntries(Object.entries(clickOnArrowFull).filter(([_, v]) => !!v))\r\n console.log('GA - Click on Carousel Arrow', clickOnArrow)\r\n window.dataLayer = window.dataLayer || []\r\n window.dataLayer.push(clickOnArrow)\r\n })\r\n })\r\n\r\n const carouselDots = carousel.querySelectorAll('.carousel__dots button')\r\n if (carouselDots.length > 0) {\r\n carouselDots.forEach((dot) => {\r\n dot.addEventListener('click', function (e) {\r\n const siteName = getSiteName()\r\n const urlSections = getUrlSections()\r\n\r\n const interactionName = urlSections.pageName + ':' + dot.ariaLabel.toLowerCase()\r\n\r\n const clickOnDotFull = {\r\n event: 'interaction',\r\n page_view__site: siteName,\r\n page_view__siteSection1: urlSections.section1,\r\n page_view__siteSection2: urlSections.section2,\r\n page_view__pageName: urlSections.pageName,\r\n\r\n interaction__type: 'carousel-nav',\r\n interaction__text: dot.ariaLabel,\r\n interaction__name: interactionName,\r\n\r\n page_view__metricInstance: 1,\r\n }\r\n const clickOnDot = Object.fromEntries(Object.entries(clickOnDotFull).filter(([_, v]) => !!v))\r\n console.log('GA - Click on Carousel dot', clickOnDot)\r\n window.dataLayer = window.dataLayer || []\r\n window.dataLayer.push(clickOnDot)\r\n })\r\n })\r\n }\r\n\r\n const carouselImageCtas = carousel.querySelectorAll(\r\n '.image-carousel__item-cta'\r\n )\r\n console.log('ctas', carouselImageCtas)\r\n if (carouselImageCtas.length > 0) {\r\n carouselImageCtas.forEach((cta) => {\r\n cta.addEventListener('click', function (e) {\r\n const siteName = getSiteName()\r\n const urlSections = getUrlSections()\r\n\r\n let ctaText = 'cta'\r\n if(cta.innerText){\r\n const ctaSplits = cta.innerText.split('\\n')\r\n ctaText = ctaSplits ? fixStringForGA(ctaSplits[0]) : 'cta'\r\n }\r\n const interaction = cta.getAttribute(\"data-component-name\") ? fixStringForGA(cta.getAttribute(\"data-component-name\")) : cta.parentNode.className.includes('_') ? cta.parentNode.className.split('_')[0] : 'rich-text-editor'\r\n const interactionTitle = cta.getAttribute(\"data-title\") ? fixStringForGA(cta.getAttribute(\"data-title\")) : cta.parentNode.parentNode.querySelector('h1,h2,h3,h4,h5,h6,.title,.h1,.h2,.h3,.h4,.h5,.h6') ? fixStringForGA(cta.parentNode.parentNode.querySelector('h1,h2,h3,h4,h5,h6,.title,.h1,.h2,.h3,.h4,.h5,.h6').innerText) :'N/a'\r\n const interactionText = ctaText ? (fixStringForGA(interactionTitle) + '_' + ctaText) : fixStringForGA(interactionTitle)\r\n const interactionName = fixStringForGA(urlSections.pageName + ':' + interactionText)\r\n const interactionDestination = cta.href ? fixStringForGA(cta.href) : ctaText\r\n const clickInteractionFull = {\r\n event: 'interaction',\r\n page_view__site: siteName,\r\n page_view__siteSection1: urlSections.section1,\r\n page_view__siteSection2: urlSections.section2,\r\n page_view__pageName: urlSections.pageName,\r\n\r\n interaction__type: interaction,\r\n interaction__text: interactionText,\r\n interaction__name: interactionName,\r\n interaction__destination: interactionDestination,\r\n\r\n page_view__metricInstance: 1,\r\n }\r\n const clickInteraction = Object.fromEntries(Object.entries(clickInteractionFull).filter(([_, v]) => !!v))\r\n console.log('GA - Carousel click on image', clickInteraction)\r\n window.dataLayer = window.dataLayer || []\r\n window.dataLayer.push(clickInteraction)\r\n })\r\n })\r\n }\r\n }\r\n}\r\n\r\nlet loaded = false;\r\n\r\nfunction handlePageLoad(modalName) {\r\n if(!loaded){\r\n window.dataLayer = window.dataLayer || []\r\n\r\n const siteName = getSiteName()\r\n\r\n const urlSections = getUrlSections()\r\n const pageName = modalName\r\n ? urlSections.pageName + ':' + modalName\r\n : urlSections.pageName\r\n\r\n const pageLoadedFull = {\r\n event: 'page_view',\r\n page_view__site: siteName,\r\n page_view__siteSection1: urlSections.section1,\r\n page_view__siteSection2: urlSections.section2,\r\n page_view__pageName: pageName,\r\n page_view__metricInstance: 1,\r\n }\r\n const pageLoaded = Object.fromEntries(Object.entries(pageLoadedFull).filter(([_, v]) => !!v))\r\n const msg = modalName ? 'GA - Modal Loaded' : 'GA - Page Loaded'\r\n console.log(msg, pageLoaded)\r\n window.dataLayer.push(pageLoaded)\r\n loaded = true;\r\n }\r\n}\r\n\r\nlet ctasHandled = false\r\n\r\nfunction handleCtas(ctas) {\r\n if(!ctasHandled){\r\n ctas.forEach((cta) => {\r\n cta.addEventListener('click', function (e) {\r\n const siteName = getSiteName()\r\n const urlSections = getUrlSections()\r\n\r\n let ctaText = 'cta'\r\n if(cta.innerText){\r\n const ctaSplits = cta.innerText.split('\\n')\r\n ctaText = ctaSplits ? fixStringForGA(ctaSplits[0]) : 'cta'\r\n }\r\n const interaction = cta.getAttribute(\"data-component-name\") ? fixStringForGA(cta.getAttribute(\"data-component-name\")) : cta.parentNode.className.includes('_') ? cta.parentNode.className.split('_')[0] : 'rich-text-editor'\r\n const interactionTitle = cta.getAttribute(\"data-title\") ? fixStringForGA(cta.getAttribute(\"data-title\")) : cta.parentNode.parentNode.querySelector('h1,h2,h3,h4,h5,h6,.title,.h1,.h2,.h3,.h4,.h5,.h6') ? fixStringForGA(cta.parentNode.parentNode.querySelector('h1,h2,h3,h4,h5,h6,.title,.h1,.h2,.h3,.h4,.h5,.h6').innerText) :'N/a'\r\n const interactionText = ctaText ? fixStringForGA(interactionTitle + '_' + ctaText) : fixStringForGA(interactionTitle)\r\n const interactionName = fixStringForGA(urlSections.pageName + ':' + interactionText)\r\n const interactionDestination = cta.href ? cta.href : ctaText\r\n const clickInteractionFull = {\r\n event: 'interaction',\r\n page_view__site: siteName,\r\n page_view__siteSection1: urlSections.section1,\r\n page_view__siteSection2: urlSections.section2,\r\n page_view__pageName: urlSections.pageName,\r\n\r\n interaction__type: interaction,\r\n interaction__text: interactionText,\r\n interaction__name: interactionName,\r\n interaction__destination: interactionDestination,\r\n\r\n page_view__metricInstance: 1,\r\n }\r\n const clickInteraction = Object.fromEntries(Object.entries(clickInteractionFull).filter(([_, v]) => !!v))\r\n console.log('GA - CTA click', clickInteraction)\r\n window.dataLayer = window.dataLayer || []\r\n window.dataLayer.push(clickInteraction)\r\n })\r\n })\r\n ctasHandled = true;\r\n }\r\n}\r\n\r\nfunction handleCallLinks() {\r\n const clickToCallLinks = document.querySelectorAll('a[href^=\"tel:\"]')\r\n clickToCallLinks.forEach((callLink) => {\r\n callLink.addEventListener('click', function (e) {})\r\n })\r\n\r\n for (let i = 0; i < clickToCallLinks.length; i++) {\r\n clickToCallLinks[i].addEventListener('click', function (e) {\r\n let phoneNumber\r\n if (e.target.href === undefined) {\r\n phoneNumber = e.target.parentNode.href.replace('tel:', '')\r\n } else {\r\n phoneNumber = e.target.href.replace('tel:', '')\r\n }\r\n\r\n const siteName = getSiteName()\r\n const urlSections = getUrlSections()\r\n\r\n const interactionName = urlSections.pageName + ':' + ctaText.toLowerCase()\r\n\r\n const clickInteractionFull = {\r\n event: 'interaction',\r\n page_view__site: siteName,\r\n page_view__siteSection1: urlSections.section1,\r\n page_view__siteSection2: urlSections.section2,\r\n page_view__pageName: urlSections.pageName,\r\n\r\n interaction__type: 'click-to-call',\r\n interaction__text: phoneNumber,\r\n interaction__name: interactionName,\r\n\r\n page_view__metricInstance: 1,\r\n }\r\n const clickInteraction = Object.fromEntries(Object.entries(clickInteractionFull).filter(([_, v]) => !!v))\r\n console.log('GA - CTA click', clickInteraction)\r\n window.dataLayer = window.dataLayer || []\r\n window.dataLayer.push(clickInteraction)\r\n })\r\n }\r\n}\r\n\r\nfunction getSiteName() {\r\n let siteName = document.querySelector('body').dataset.layerSite\r\n // set default?\r\n siteName = siteName !== undefined ? siteName : 'rush-tc'\r\n\r\n return siteName\r\n}\r\n\r\nfunction getUrlSections() {\r\n let sections\r\n const cmpBreadcrumb = document.querySelector('.cmp-breadcrumb')\r\n const siteName = getSiteName()\r\n if (cmpBreadcrumb) {\r\n const pageSections = cmpBreadcrumb.querySelectorAll('a, span')\r\n const section1 = pageSections[0] ? fixStringForGA(pageSections[0].innerText) : ''\r\n const section2 = pageSections[1] ? fixStringForGA(pageSections[1].innerText) : ''\r\n const section3 = pageSections[2] ? fixStringForGA(pageSections[2].innerText) : ''\r\n const section4 = pageSections[3] ? fixStringForGA(pageSections[3].innerText) : ''\r\n const section5 = pageSections[4] ? fixStringForGA(pageSections[4].innerText) : ''\r\n const section6 = pageSections[5] ? fixStringForGA(pageSections[5].innerText) : ''\r\n const pageName =\r\n siteName +\r\n (section1 && !section1.includes('home') ? '|' + section1 : '') +\r\n (section2 ? '|' + section2 : '') +\r\n (section3 ? '|' + section3 : '') +\r\n (section4 ? '|' + section4 : '') +\r\n (section5 ? '|' + section5 : '') +\r\n (section6 ? '|' + section6 : '')\r\n if (section1.includes(\"home\")) {\r\n sections = {\r\n section1: section2,\r\n section2: section3,\r\n pageName: pageName,\r\n };\r\n } else {\r\n sections = {\r\n section1: section1,\r\n section2: section2,\r\n section3: section3,\r\n pageName: pageName,\r\n };\r\n }\r\n } else {\r\n let pageSections = window.location.pathname.split('/')\r\n pageSections = pageSections.filter((element) => {\r\n return element !== ''\r\n })\r\n const section1 = pageSections[0] ? fixStringForGA(pageSections[0]) : 'home'\r\n const section2 = pageSections[1] ? fixStringForGA(pageSections[1]) : ''\r\n const section3 = pageSections[2] ? fixStringForGA(pageSections[2]) : ''\r\n const section4 = pageSections[3] ? fixStringForGA(pageSections[3]) : ''\r\n const section5 = pageSections[4] ? fixStringForGA(pageSections[4].innerText) : ''\r\n const section6 = pageSections[5] ? fixStringForGA(pageSections[5].innerText) : ''\r\n const pageName =\r\n siteName +\r\n (section1 ? '|' + section1 : '') +\r\n (section2 ? '|' + section2 : '') +\r\n (section3 ? '|' + section3 : '') +\r\n (section4 ? '|' + section4 : '') +\r\n (section5 ? '|' + section5 : '') +\r\n (section6 ? '|' + section6 : '')\r\n\r\n sections = {\r\n section1: section1,\r\n section2: section2,\r\n section3: section3,\r\n pageName: pageName,\r\n }\r\n }\r\n\r\n return sections\r\n}\r\n/* Set string to lower case and replaces empty string with hyphens */\r\nfunction fixStringForGA(string) {\r\n let returnString = string + ''\r\n returnString = returnString.toLowerCase()\r\n returnString = returnString.replace(/\\s/g, '-')\r\n if(returnString.slice(-1) == '-'){\r\n returnString = returnString.slice(0, -1)\r\n }\r\n return returnString\r\n}\r\n\r\nfunction handleForms() {\r\n const form = document.getElementById('form');\r\n const formName = form ? (form.name ? form.name : 'form') : 'form'\r\n const inputs = document.querySelectorAll('form.form input[type=\"text\"], form#form input[type=\"text\"]')\r\n let started = false\r\n inputs.forEach((input) => {\r\n input.addEventListener('blur', (e) => {\r\n if (input.value !== '' && !started) {\r\n const siteName = getSiteName()\r\n const urlSections = getUrlSections()\r\n started = true\r\n\r\n const formStartedFull = {\r\n event: 'process',\r\n page_view__site: siteName,\r\n page_view__siteSection1: urlSections.section1,\r\n page_view__siteSection2: urlSections.section2,\r\n page_view__pageName: urlSections.pageName,\r\n\r\n process__name: formName,\r\n process__step: 'start',\r\n process__metricStart: 1,\r\n }\r\n const formStarted = Object.fromEntries(Object.entries(formStartedFull).filter(([_, v]) => !!v));\r\n console.log('GA - Form Started', formStarted)\r\n window.dataLayer = window.dataLayer || []\r\n window.dataLayer.push(formStarted)\r\n }\r\n })\r\n })\r\n}\r\n\r\nfunction handleNewsletterForm(){\r\n const formName = 'newsletter-form'\r\n const inputs = document.querySelectorAll('.newsletter__form input[type=\"text\"]')\r\n let started = false\r\n inputs.forEach((input) => {\r\n input.addEventListener('blur', (e) => {\r\n if (input.value !== '' && !started) {\r\n const siteName = getSiteName()\r\n const urlSections = getUrlSections()\r\n started = true\r\n\r\n const formStartedFull = {\r\n event: 'process',\r\n page_view__site: siteName,\r\n page_view__siteSection1: urlSections.section1,\r\n page_view__siteSection2: urlSections.section2,\r\n page_view__pageName: urlSections.pageName,\r\n\r\n process__name: formName,\r\n process__step: 'start',\r\n process__metricStart: 1,\r\n }\r\n const formStarted = Object.fromEntries(Object.entries(formStartedFull).filter(([_, v]) => !!v));\r\n console.log('GA - Form Started', formStarted)\r\n window.dataLayer = window.dataLayer || []\r\n window.dataLayer.push(formStarted)\r\n }\r\n })\r\n })\r\n}\r\n\r\nfunction handleSimpleSearch() {\r\n const searchResults = document.querySelector('.search-results__state')\r\n if (searchResults) {\r\n const searchTerm = searchResults.dataset.searchTerm\r\n const resultsAmount = parseInt(searchResults.dataset.searchResults)\r\n const siteName = getSiteName()\r\n const urlSections = getUrlSections()\r\n\r\n const siteSearchFull = {\r\n event: 'search',\r\n page_view__site: siteName,\r\n page_view__siteSection1: urlSections.section1,\r\n page_view__siteSection2: urlSections.section2,\r\n page_view__pageName: urlSections.pageName,\r\n\r\n search__type: 'site-search',\r\n search__term: searchTerm,\r\n search__resultsNumber: resultsAmount,\r\n search__metric: 1,\r\n }\r\n const siteSearch = Object.fromEntries(Object.entries(siteSearchFull).filter(([_, v]) => !!v))\r\n console.log('GA - Site Search', siteSearch)\r\n window.dataLayer = window.dataLayer || []\r\n window.dataLayer.push(siteSearch)\r\n }\r\n}\r\n\r\nconst googleAnalyticsStoreLocator = (total, location) => {\r\n const storeLocatorDiv = document.querySelector('.store-locator-page')\r\n if(storeLocatorDiv){\r\n const searchTerm = location ? location : 'no location searched'\r\n const siteName = getSiteName()\r\n const urlSections = getUrlSections()\r\n\r\n const storeLoadFull = {\r\n event: 'search',\r\n page_view__site: siteName,\r\n page_view__siteSection1: urlSections.section1,\r\n page_view__siteSection2: urlSections.section2,\r\n page_view__pageName: urlSections.pageName,\r\n\r\n search__type: 'location-search',\r\n search__term: searchTerm,\r\n search__resultsNumber: parseInt(total),\r\n search__metric: 1,\r\n }\r\n const storeLoad = Object.fromEntries(Object.entries(storeLoadFull).filter(([_, v]) => !!v))\r\n console.log('GA - Store Locator', storeLoad)\r\n window.dataLayer = window.dataLayer || []\r\n window.dataLayer.push(storeLoad)\r\n }\r\n}\r\n\r\nlet firstSearch = true;\r\nconst googleAnalyticsInventorySearch = (event, total) => {\r\n const inventorySearchDiv = document.querySelector('.inventory-search-page')\r\n const params = getSearchParameters()\r\n let keys = {}\r\n let values = {}\r\n let refinements = ''\r\n Object.keys(params).forEach((prop, index)=> keys[index] = prop);\r\n Object.values(params).forEach((prop, index)=> values[index] = prop ? prop : 'N/A');\r\n Object.keys(params).forEach((prop, index)=> {\r\n refinements = refinements + keys[index] + '|' + values[index].replaceAll(',', '+') + ','\r\n });\r\n refinements = refinements.slice(0, -1)\r\n refinements = fixStringForGA(refinements);\r\n\r\n if(inventorySearchDiv && event === 'load'){\r\n const siteName = getSiteName()\r\n const urlSections = getUrlSections()\r\n const inventoryLoadFull = {\r\n event: 'search',\r\n page_view__site: siteName,\r\n page_view__siteSection1: urlSections.section1,\r\n page_view__siteSection2: urlSections.section2,\r\n page_view__pageName: urlSections.pageName,\r\n\r\n search__type: 'inventory-search',\r\n search__refinements: refinements,\r\n search__resultsNumber: parseInt(total),\r\n search__metric: 1,\r\n }\r\n const inventoryLoad = Object.fromEntries(Object.entries(inventoryLoadFull).filter(([_, v]) => !!v))\r\n inventoryLoad.search__resultsNumber ? inventoryLoad.search__resultsNumber : inventoryLoad.search__resultsNumber = 0\r\n console.log('GA - Inventory Search', inventoryLoad)\r\n window.dataLayer = window.dataLayer || []\r\n window.dataLayer.push(inventoryLoad)\r\n }\r\n\r\n if(inventorySearchDiv && event === 'filter'){\r\n const siteName = getSiteName()\r\n const urlSections = getUrlSections()\r\n const inventoryLoadFull = {\r\n event: \"search\",\r\n page_view__site: siteName,\r\n page_view__siteSection1: urlSections.section1,\r\n page_view__siteSection2: urlSections.section2,\r\n page_view__pageName: urlSections.pageName,\r\n\r\n search__type: \"inventory-search-refinement\",\r\n search__refinements: refinements,\r\n search__resultsNumber: parseInt(total),\r\n search__refinementMetric: 1\r\n };\r\n if(firstSearch){\r\n inventoryLoadFull.search__type = \"inventory-search\"\r\n firstSearch = false\r\n }\r\n const inventoryLoad = Object.fromEntries(Object.entries(inventoryLoadFull).filter(([_, v]) => !!v))\r\n inventoryLoad.search__resultsNumber ? inventoryLoad.search__resultsNumber : inventoryLoad.search__resultsNumber = 0\r\n console.log('GA - Inventory Search', inventoryLoad)\r\n window.dataLayer = window.dataLayer || []\r\n window.dataLayer.push(inventoryLoad)\r\n }\r\n}\r\n\r\nfunction getSearchParameters () {\r\n const url = new URL(window.location)\r\n let searchParams = new URLSearchParams(url.search)\r\n searchParams.delete('pageNumber')\r\n searchParams.delete('latitude')\r\n searchParams.delete('longitude')\r\n searchParams.delete('condition')\r\n const paramObj = {}\r\n for (const key of searchParams.keys()) {\r\n paramObj[key] = searchParams.getAll(key).length > 1\r\n ? searchParams.getAll(key)\r\n : searchParams.get(key)\r\n }\r\n return paramObj\r\n}\r\n\r\nexport { googleAnalytics, googleAnalyticsSubmitForm, googleAnalyticsLoadModal, googleAnalyticsStoreLocator, googleAnalyticsInventorySearch }","import { SelectMultipleControlValueAccessor } from '@angular/forms';\r\nimport { googleAnalyticsSubmitForm } from '../../../js/datalayer'\r\nimport * as Pristine from '../../../js/vendor/Pristine'\r\n\r\nconst PHONE_ALL_REG = /^[\\+]?[(]?[0-9]{3}[)]?[-\\s\\.]?[0-9]{3}[-\\s\\.]?[0-9]{4,6}$/;\r\n//Pass (example): 1234567890 / 123-456-7890 / (001) 123 456789 / +(001).123.456789 / +(001)-123-456789\r\nconst ZIP_US_CAN_REG = /(^\\d{5}([ \\-]\\d{4})?$)|(^[ABCEGHJKLMNPRSTVXY]{1}\\d{1}[A-Z]{1}[ \\-]\\d{1}[A-Z]{1}\\d{1}$)/;\r\n//Pass (example): (CAN) R2H 1L5 / R2H-1L5 --- (USA) 90210 / 90210-1234 / 90210 1234\r\nconst FILE_EXT_REG = /([a-zA-Z0-9\\s_\\\\.\\-\\(\\):])+(.doc|.docx|.xls|.xlsx|.txt|.pdf|.jpeg|.jpg|.png|.svg)$/i;\r\n\r\nconst FORM_SELECTORS = {\r\n VALIDATION_CONTAINER: 'form__group',\r\n VALIDATION_ERROR: 'error',\r\n HINT_CONTAINER: ':scope .form__hint',\r\n SUMMARY_CONTAINER: ':scope .form__validation-summary',\r\n ACTIVE_ERROR_LISTS: ':scope .form__group.error',\r\n ACTIVE_ERROR_LIST_ITEM: '.form__error-message',\r\n INPUT_NON_HIDDEN: \"input:not([type='hidden'])\",\r\n ERROR_MESSAGE_REQUIRED: '.form__error-message.required',\r\n ERROR_MESSAGE_VALIDATION: '.form__error-message.validation',\r\n}\r\n\r\nconst VALIDATION_SUMMARY_TITLE = 'Validation Errors:'\r\nconst VALIDATION_SUMMARY_ATTR = 'data-summary-title'\r\n\r\nconst FORM_CLASSES = {\r\n SUMMARY_CONTAINER_VISIBLE: 'form__validation-summary--visible',\r\n ERROR_HIDE_ERROR: 'hide-error',\r\n}\r\n\r\nconst FormValidation = {\r\n init: function (element, validationEnabled = true) { \r\n element.formValidator = this;\r\n this.form = element\r\n this.validationEnabled = validationEnabled \r\n this.form.addEventListener('submit', this.onSubmitForm.bind(this))\r\n this.form.addEventListener('reset', this.resetValidationFromUI.bind(this))\r\n\r\n if (!validationEnabled) {\r\n return\r\n }\r\n\r\n this.pristineFormInstance = new Pristine(element, {\r\n classTo: FORM_SELECTORS.VALIDATION_CONTAINER,\r\n errorClass: FORM_SELECTORS.VALIDATION_ERROR,\r\n onLiveCompleted: this.onLiveValidationCompleted.bind(this),\r\n });\r\n\r\n //add phone validation if element exists\r\n const inputPhone = this.form.querySelector('#Phone');\r\n if (inputPhone) {\r\n this.pristineFormInstance.addValidator(inputPhone, function(value) {\r\n return PHONE_ALL_REG.test(value);\r\n });\r\n }\r\n\r\n //add zip validation if element exists\r\n const inputZip = this.form.querySelector('#ZipCode');\r\n if (inputZip) {\r\n this.pristineFormInstance.addValidator(inputZip, function(value) {\r\n return ZIP_US_CAN_REG.test(value);\r\n });\r\n }\r\n\r\n //add file validation if element exists\r\n const uploadField = this.form.querySelector('#Upload');\r\n if (uploadField)\r\n {\r\n this.pristineFormInstance.addValidator(uploadField, function(value) {\r\n return FILE_EXT_REG.test(value)\r\n });\r\n }\r\n\r\n // enable upload enabled\r\n const uploadType = this.form.querySelector('#UploadType');\r\n if (uploadType)\r\n {\r\n uploadType.addEventListener('change', function(e) {\r\n if (e.target.value.length > 0)\r\n {\r\n uploadField.removeAttribute('disabled');\r\n }\r\n });\r\n }\r\n },\r\n\r\n createValidationSummaryItem: function (text) {\r\n const item = document.createElement('div')\r\n item.textContent = text\r\n return item\r\n },\r\n\r\n onLiveValidationCompleted: function () {\r\n this.showSummary(false)\r\n },\r\n\r\n hideSummary: function () {\r\n const summaryContainer = this.form.querySelector(\r\n FORM_SELECTORS.SUMMARY_CONTAINER\r\n )\r\n summaryContainer.classList.remove(FORM_CLASSES.SUMMARY_CONTAINER_VISIBLE)\r\n summaryContainer.setAttribute(VALIDATION_SUMMARY_ATTR, '')\r\n },\r\n\r\n showSummary: function (scrollToSummary = true) {\r\n const domErrors = this.form.querySelectorAll(\r\n FORM_SELECTORS.ACTIVE_ERROR_LISTS\r\n )\r\n const domErrorsList = Array.from(domErrors)\r\n if (domErrorsList.length) {\r\n const activeErrorList = domErrorsList\r\n .map((item) => {\r\n const errorFeedbackItems = item.querySelectorAll(\r\n FORM_SELECTORS.ACTIVE_ERROR_LIST_ITEM\r\n )\r\n if (errorFeedbackItems.length > 1) {\r\n return this.processFormGroupErrors(item)\r\n } else {\r\n return errorFeedbackItems[0].textContent\r\n }\r\n })\r\n .filter(Boolean)\r\n\r\n this.updateValidationSummary(activeErrorList, scrollToSummary)\r\n } else {\r\n this.hideSummary()\r\n }\r\n },\r\n\r\n /**\r\n *\r\n * @param {HtmlEntity} formGroup Form Group that includes: input(text/select/etc), error-message(s), input(s)hidden\r\n * This method show or hide 'error-message(s)' to have only one error-message visible at the same time.\r\n * Also return the appropriate text to show in the summary errors section.\r\n * @returns {String} A text to add in errors summary block\r\n */\r\n processFormGroupErrors: function (formGroup) {\r\n const formGroupInput = formGroup.querySelector(\r\n FORM_SELECTORS.INPUT_NON_HIDDEN\r\n )\r\n // if the input has some value, show only 'validation' error-message (and hide 'required' error-message).\r\n if (String(formGroupInput.value).trim() !== '') {\r\n //get 'required' error-message and hide\r\n const requiredError = formGroup.querySelector(\r\n FORM_SELECTORS.ERROR_MESSAGE_REQUIRED\r\n )\r\n if (requiredError) {\r\n requiredError.classList.add(FORM_CLASSES.ERROR_HIDE_ERROR)\r\n }\r\n //get 'validation' error-message and show\r\n const nonRequiredError = formGroup.querySelector(\r\n FORM_SELECTORS.ERROR_MESSAGE_VALIDATION\r\n )\r\n if (nonRequiredError) {\r\n nonRequiredError.classList.remove(FORM_CLASSES.ERROR_HIDE_ERROR)\r\n return nonRequiredError.textContent\r\n }\r\n\r\n // if the input is empty, show only 'required' error-message (and hide 'validation' error-message).\r\n } else {\r\n //get 'validation' error-message and hide\r\n const nonRequiredError = formGroup.querySelector(\r\n FORM_SELECTORS.ERROR_MESSAGE_VALIDATION\r\n )\r\n if (nonRequiredError) {\r\n nonRequiredError.classList.add(FORM_CLASSES.ERROR_HIDE_ERROR)\r\n }\r\n //get 'required' error-message and show\r\n const requiredError = formGroup.querySelector(\r\n FORM_SELECTORS.ERROR_MESSAGE_REQUIRED\r\n )\r\n if (requiredError) {\r\n requiredError.classList.remove(FORM_CLASSES.ERROR_HIDE_ERROR)\r\n return requiredError.textContent\r\n }\r\n }\r\n return ''\r\n },\r\n\r\n updateValidationSummary: function (activeErrorList, scrollTo) {\r\n const summaryContainer = this.form.querySelector(\r\n FORM_SELECTORS.SUMMARY_CONTAINER\r\n )\r\n const domActiveErrorList = activeErrorList.map((error) =>\r\n this.createValidationSummaryItem(error)\r\n )\r\n summaryContainer && summaryContainer.replaceChildren(...domActiveErrorList)\r\n summaryContainer.classList.add(FORM_CLASSES.SUMMARY_CONTAINER_VISIBLE)\r\n summaryContainer.setAttribute(\r\n VALIDATION_SUMMARY_ATTR,\r\n VALIDATION_SUMMARY_TITLE\r\n )\r\n if (scrollTo) {\r\n this.scrollToContainer(summaryContainer);\r\n }\r\n },\r\n\r\n scrollToContainer: function (scrollToObj, opts = { behavior: 'smooth', block: 'center' }) {\r\n [scrollToObj && typeof scrollToObj === 'string' ?\r\n document.querySelector(scrollToObj) :\r\n scrollToObj]\r\n .filter((obj) => obj && obj.scrollIntoView)\r\n .forEach((item) => {\r\n item.scrollIntoView(opts);\r\n })\r\n },\r\n\r\n onSubmitForm: function (evt) {\r\n if (!this.validationEnabled) {\r\n evt.preventDefault()\r\n return\r\n }\r\n\r\n const honeyPot = document.querySelector('input.nogo');\r\n if(honeyPot && honeyPot.value !== '') {\r\n evt.preventDefault();\r\n return;\r\n }\r\n\r\n const validateResult = this.pristineFormInstance.validate();\r\n if (!validateResult) {\r\n evt.preventDefault()\r\n this.showSummary()\r\n } else {\r\n\r\n this.hideSummary()\r\n evt.preventDefault()\r\n\r\n const { success, error, errorDetail, form } = this.getFormContainers()\r\n let action = form.action;\r\n\r\n let data = new FormData(form) \r\n\r\n this.getToken(action,data); \r\n }\r\n },\r\n\r\n getToken: function(action, formData) { \r\n let id = document.getElementById('clientid'); \r\n let url = '/api/auth/get-token/' + id.value; \r\n fetch(url, {\r\n method: 'GET'\r\n }).then((response) => { \r\n return response.json();\r\n }).then((data) => {\r\n this.postForm(action,formData,data.result);\r\n }).catch((err) => {\r\n console.log(err);\r\n })\r\n },\r\n\r\n postForm: function(action,data,token) {\r\n console.log(action);\r\n console.log(data);\r\n console.log(token);\r\n const { success, error, errorDetail, form } = this.getFormContainers()\r\n fetch(action, {\r\n method: 'POST',\r\n body: data,\r\n headers: {\r\n 'Authorization': 'amx ' + token\r\n }\r\n }).then((response) => {\r\n return response.json();\r\n }).then((data) => {\r\n if (data.success) {\r\n form.style.display = 'none';\r\n if (success) {\r\n success.style.display = 'grid'\r\n this.scrollToContainer(success);\r\n }\r\n googleAnalyticsSubmitForm(form);\r\n } else {\r\n if (error) {\r\n error.style.display = 'grid';\r\n error.style.color = '#ce2027'\r\n } \r\n if (errorDetail) {\r\n errorDetail.style.color = '#ce2027'\r\n let message = data.message\r\n if (message.length > 0) {\r\n let element = document.createElement('p');\r\n element.setAttribute('class','form__error-message required')\r\n element.style.display = 'grid'\r\n element.textContent = message\r\n errorDetail.appendChild(element)\r\n // To scroll and show the error call 'this.scrollToContainer'\r\n // method (1rst arg accept an string or a DOM obj). For example:\r\n // - this.scrollToContainer(error);\r\n // - this.scrollToContainer('.some-error-container');\r\n // - this.scrollToContainer('#error-message');\r\n }\r\n this.scrollToContainer(success);\r\n }\r\n }\r\n }).catch((err) => {\r\n if (error) {\r\n error.style.display = 'grid';\r\n error.style.color = '#ce2027'\r\n this.scrollToContainer(error);\r\n }\r\n })\r\n },\r\n\r\n getFormContainers: function () {\r\n return {\r\n success: document.querySelector('#thank-you'),\r\n error: document.querySelector('#error-message'),\r\n errorDetail: document.querySelector('#error-details'),\r\n form: document.querySelector('form.form')\r\n }\r\n },\r\n\r\n resetValidationFromUI: function () {\r\n const summaryContainer = this.form.querySelector(\r\n FORM_SELECTORS.HINT_CONTAINER\r\n );\r\n this.scrollToContainer(summaryContainer);\r\n this.resetValidationErrors();\r\n },\r\n\r\n resetValidationErrors: function () {\r\n if (this.pristineFormInstance) {\r\n this.pristineFormInstance.reset();\r\n this.hideSummary();\r\n }\r\n const { success, error, errorDetail, form } = this.getFormContainers();\r\n if (success) {\r\n success.style.display = 'none';\r\n }\r\n if (error) {\r\n error.style.display = 'none';\r\n }\r\n if (errorDetail) {\r\n errorDetail.style.display = 'none';\r\n }\r\n if (form) {\r\n form.style.display = 'initial';\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default FormValidation\r\n","import { googleAnalyticsSubmitForm } from '../../../js/datalayer'\r\nimport * as Pristine from '../../../js/vendor/Pristine'\r\n\r\nconst FORM_SELECTORS = {\r\n VALIDATION_CONTAINER: 'form__group',\r\n VALIDATION_ERROR: 'error',\r\n SUMMARY_CONTAINER: ':scope .form__validation-summary',\r\n ACTIVE_ERROR_LISTS: ':scope .form__group.error',\r\n ACTIVE_ERROR_LIST_ITEM: '.form__error-message',\r\n INPUT_NON_HIDDEN: \"input:not([type='hidden'])\",\r\n ERROR_MESSAGE_REQUIRED: '.form__error-message.required',\r\n ERROR_MESSAGE_VALIDATION: '.form__error-message.validation',\r\n SUBMIT_BUTTON: '.button-form-submit',\r\n }\r\n\r\nconst NewsletterSignup = {\r\n init: function (element, validationEnabled = true) {\r\n element.formValidator = this;\r\n this.form = element\r\n this.validationEnabled = validationEnabled\r\n this.pristineFormInstance = new Pristine(element, {\r\n classTo: FORM_SELECTORS.VALIDATION_CONTAINER,\r\n errorClass: FORM_SELECTORS.VALIDATION_ERROR,\r\n });\r\n this.submitBtn = this.form.querySelector(FORM_SELECTORS.SUBMIT_BUTTON);\r\n if (this.submitBtn && this.submitBtn.addEventListener) {\r\n this.submitBtn.addEventListener('click', this.onClickSubmitBtn.bind(this));\r\n } else{\r\n this.form.addEventListener('submit', this.onClickSubmitBtn.bind(this))\r\n }\r\n\r\n if (!validationEnabled) {\r\n return\r\n }\r\n },\r\n\r\n onClickSubmitBtn: function (evt) {\r\n if (!this.validationEnabled) {\r\n evt.preventDefault();\r\n return;\r\n }\r\n\r\n const validateResult = this.pristineFormInstance.validate();\r\n if (!validateResult) {\r\n return;\r\n } else {\r\n const { newsletterSignup } = this.getFormContainers()\r\n let action = this.form.action;\r\n\r\n let data = new FormData(this.form)\r\n googleAnalyticsSubmitForm(this.form);\r\n alert(\"Thanks for Joining! You're in good company!\")\r\n\r\n fetch(action, {\r\n method: 'POST',\r\n body: data,\r\n })\r\n .then((response) => {\r\n return response.json();\r\n })\r\n .then((data) => {\r\n if (data.success) {\r\n this.form.style.display = 'none';\r\n } else {\r\n if (newsletterSignup) {\r\n let message = data.message\r\n newsletterSignup.value = message\r\n }\r\n }\r\n this.form.submit();\r\n })\r\n .catch((err) => {\r\n if (newsletterSignup) {\r\n newsletterSignup.value = err\r\n }\r\n }).finally(() => {\r\n const input = this.form.querySelector('.text-field');\r\n if (input) {\r\n input.value = '';\r\n window.scrollTo({top: 0, behavior: 'smooth'});\r\n }\r\n });\r\n }\r\n },\r\n\r\n getFormContainers: function () {\r\n return {\r\n form: document.querySelector('form.form'),\r\n newsletterSignup: document.querySelector('#email-signup__input')\r\n }\r\n },\r\n\r\n resetValidationErrors: function () {\r\n if (this.pristineFormInstance) {\r\n this.pristineFormInstance.reset();\r\n }\r\n const { success, error, errorDetail, form } = this.getFormContainers();\r\n if (success) {\r\n success.style.display = 'none';\r\n }\r\n if (error) {\r\n error.style.display = 'none';\r\n }\r\n if (errorDetail) {\r\n errorDetail.style.display = 'none';\r\n }\r\n if (form) {\r\n form.style.display = 'initial';\r\n }\r\n }\r\n\r\n }\r\n\r\n export default NewsletterSignup\r\n","import A11yDialog from '../../../../node_modules/a11y-dialog/dist/a11y-dialog'\r\nimport { googleAnalyticsLoadModal } from '../../../js/datalayer'\r\n\r\nrequire('./_modal-popup.scss')\r\nrequire('../../../../node_modules/a11y-dialog/dist/a11y-dialog')\r\n\r\n\r\nclass ModalPopup {\r\n constructor(element) {\r\n const html = document.documentElement\r\n this.element = element\r\n this.instanceA11 = new A11yDialog(element)\r\n\r\n this.instanceA11.on('show', (modal, event) => {\r\n // After modal opens\r\n googleAnalyticsLoadModal(modal.id)\r\n html.style.overflowY = 'hidden'\r\n })\r\n\r\n this.instanceA11.on('hide', (modal) => {\r\n const form = this.element.querySelector('form')\r\n if (form) {\r\n //reset form values\r\n form.reset()\r\n if (form.formValidator && form.formValidator.resetValidationErrors) {\r\n //reset form feedback errors\r\n form.formValidator.resetValidationErrors()\r\n }\r\n }\r\n html.style.overflowY = ''\r\n })\r\n }\r\n}\r\n\r\nexport default ModalPopup\r\n","import A11yDialog from '../../../../node_modules/a11y-dialog/dist/a11y-dialog'\r\nimport Glider from '../../../js/glider'\r\n\r\nrequire('./_modal-gallery.scss')\r\nrequire('../../../../node_modules/a11y-dialog/dist/a11y-dialog')\r\nrequire('../../../js/glider')\r\n\r\nconst ModalGallery = {\r\n\r\n init: function (element) {\r\n const dialogId = element.getAttribute('id')\r\n const dialog = new A11yDialog(element)\r\n const triggers = document.querySelectorAll('[data-a11y-dialog-show=\"' + dialogId + '\"]')\r\n\r\n // fix carousel not displaying properly when opened\r\n dialog.on('show', function (element, event) {\r\n window.dispatchEvent(new Event('resize'))\r\n })\r\n\r\n for (const trigger of triggers) {\r\n trigger.addEventListener('click', (e) => {\r\n e.preventDefault()\r\n const galleryIndex = trigger.getAttribute('data-gallery-index')\r\n const gliderElement = Glider(element.querySelector('.glider'))\r\n\r\n // fix carousel not displaying properly when opened\r\n window.dispatchEvent(new Event('resize'))\r\n\r\n // scroll to correct item without animation if specified\r\n if(galleryIndex) {\r\n gliderElement.setOption({ duration: 0 })\r\n gliderElement.scrollItem(galleryIndex, true)\r\n gliderElement.setOption({ duration: 0.25 })\r\n }\r\n }, false)\r\n }\r\n }\r\n}\r\n\r\nexport default ModalGallery\r\n","const STICKY_CONTAINER_SELECTOR = '.sticky-container'\r\nconst STICKY_SHADOW_CLASS = 'sticky-container--shadow'\r\nconst LIST_INFO_TITLE_SELECTOR = '.list-info__title'\r\nconst LIST_INFO_CONTAINER_SELECTOR = '.list-info'\r\nconst LIST_INFO_CONTAINER_EXPANDED_CLASS = 'expanded'\r\nconst LABEL_SHOW_MORE = 'Show More'\r\nconst LABEL_SHOW_LESS = 'Show Less'\r\n\r\nconst LocationDetail = {\r\n init: function (element) {\r\n const stickyContainers = element.querySelectorAll(STICKY_CONTAINER_SELECTOR)\r\n if (stickyContainers.length) {\r\n document.addEventListener('scroll', () => {\r\n Array.from(stickyContainers).forEach(item => {\r\n const rect = item.getBoundingClientRect()\r\n if (rect && !isNaN(rect.top)) {\r\n if (rect.top <= 0) {\r\n item.classList.add(STICKY_SHADOW_CLASS)\r\n } else {\r\n item.classList.remove(STICKY_SHADOW_CLASS)\r\n }\r\n }\r\n })\r\n })\r\n }\r\n const listInfoTitles = element.querySelectorAll(LIST_INFO_TITLE_SELECTOR)\r\n if (listInfoTitles.length) {\r\n // height will be updated to max height of all titles so they are all bottom aligned on desktop\r\n window.addEventListener('resize', () => {\r\n const titleHeights = []\r\n Array.from(listInfoTitles).forEach(item => {\r\n item.style.height = null\r\n titleHeights.push(item.offsetHeight)\r\n })\r\n if (window.innerWidth >= 768) {\r\n const tallestTitleHeight = Math.max(...titleHeights)\r\n Array.from(listInfoTitles).forEach(item => {\r\n item.style.height = tallestTitleHeight + 'px'\r\n })\r\n }\r\n })\r\n window.dispatchEvent(new Event('resize'))\r\n }\r\n const listInfoContainers = element.querySelectorAll(LIST_INFO_CONTAINER_SELECTOR)\r\n if (listInfoContainers.length) {\r\n // collapse list info lists on mobile\r\n Array.from(listInfoContainers).forEach(listInfoContainer => {\r\n const toggleElement = document.createElement('a')\r\n toggleElement.textContent = LABEL_SHOW_MORE\r\n toggleElement.className = 'list-info__toggle link link--external-small'\r\n toggleElement.setAttribute('href', '#')\r\n toggleElement.addEventListener('click', (e) => {\r\n e.preventDefault()\r\n if (listInfoContainer.classList.contains(LIST_INFO_CONTAINER_EXPANDED_CLASS)) {\r\n toggleElement.textContent = LABEL_SHOW_MORE\r\n listInfoContainer.classList.remove(LIST_INFO_CONTAINER_EXPANDED_CLASS)\r\n } else {\r\n toggleElement.textContent = LABEL_SHOW_LESS\r\n listInfoContainer.classList.add(LIST_INFO_CONTAINER_EXPANDED_CLASS)\r\n }\r\n }, false)\r\n listInfoContainer.appendChild(toggleElement)\r\n })\r\n }\r\n }\r\n}\r\n\r\nexport default LocationDetail\r\n","require('./_location-information.scss')\r\n\r\nconst LocationInformation = {\r\n init: function (element) {\r\n const _ = this;\r\n console.log(\"SHOW LOCATION INFORMATION\");\r\n // BUG ITEM is related to only CVS\r\n if (element === \"cvs\") {\r\n console.log(\"CVS\");\r\n this.modifyLinkElements();\r\n this.modifyStrongElements();\r\n }\r\n },\r\n modifyLinkElements: function () {\r\n const aElements = document.getElementsByTagName('a');\r\n for (const aElement of aElements) {\r\n if (aElement.href && aElement.href.startsWith('tel:')) {\r\n console.log(\"START TEL\");\r\n aElement.className = \"link link--primary link--accent-underline\";\r\n aElement.onmouseover = function () {\r\n aElement.className = \"link link--primary link--accent-underline hover\";\r\n }\r\n aElement.onmouseout = function () {\r\n aElement.className = \"link link--primary link--accent-underline\";\r\n }\r\n }\r\n }\r\n },\r\n modifyStrongElements: function () {\r\n const strongElements = document.getElementsByTagName('strong');\r\n for (const strongElement of strongElements) {\r\n strongElement.style[\"font-weight\"] = \"bold\";\r\n }\r\n }\r\n}\r\n\r\nexport default LocationInformation\r\n","import { MenuNavUtils } from '../../header/MenuNav'\r\nimport Glider from '../../../js/glider'\r\n\r\nconst SPECIALS_LIST_MOBILE_CLASS = 'specials-list--mobile'\r\nconst SPECIALS_LIST_DESKTOP_CLASS = 'specials-list--desktop'\r\nconst SPECIALS_LIST_SELECTOR = '.specials-list__container'\r\nconst SHOW_ALL_SPECIALS_CLASS = 'show-all'\r\nconst LABEL_SHOW_MORE = 'Show More'\r\nconst LABEL_SHOW_LESS = 'Show Less'\r\n\r\nclass SpecialsList {\r\n constructor (element) {\r\n this.element = element\r\n this.specialsContainer = element.querySelector(SPECIALS_LIST_SELECTOR)\r\n this.glider = null\r\n this.isDesktop = null\r\n this.updateAppearance()\r\n this.addEventListeners()\r\n }\r\n\r\n updateAppearance () {\r\n const newIsDesktopState = MenuNavUtils.isDesktopScreenSize()\r\n if (newIsDesktopState !== this.isDesktop) {\r\n this.isDesktop = newIsDesktopState\r\n this.element.classList.remove(SPECIALS_LIST_MOBILE_CLASS, SPECIALS_LIST_DESKTOP_CLASS)\r\n if (this.isDesktop) {\r\n this.element.classList.add(SPECIALS_LIST_DESKTOP_CLASS)\r\n if (this.glider) {\r\n this.glider.destroy()\r\n this.specialsContainer = this.element.querySelector(SPECIALS_LIST_SELECTOR)\r\n }\r\n } else {\r\n this.element.classList.add(SPECIALS_LIST_MOBILE_CLASS)\r\n this.specialsContainer.classList.add('glider')\r\n this.glider = new Glider(this.specialsContainer, {\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n rewind: true,\r\n draggable: true,\r\n scrollLock: true,\r\n resizeLock: true,\r\n responsive: [{\r\n breakpoint: 500,\r\n settings: {\r\n slidesToShow: 2\r\n }\r\n }, {\r\n breakpoint: 768,\r\n settings: {\r\n slidesToShow: 3\r\n }\r\n }],\r\n arrows: {\r\n prev: this.element.querySelector('.glider-prev'),\r\n next: this.element.querySelector('.glider-next')\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n addEventListeners () {\r\n this.headerShowMoreBtn = this.element.querySelector('.specials-list__header button')\r\n this.footerShowMoreBtn = this.element.querySelector('.specials-list__footer button')\r\n this.headerShowMoreBtn?.addEventListener('click', this.toggleShowHideMore.bind(this))\r\n this.footerShowMoreBtn?.addEventListener('click', this.toggleShowHideMore.bind(this))\r\n window.addEventListener('resize', this.updateAppearance.bind(this))\r\n }\r\n\r\n toggleShowHideMore () {\r\n if (this.specialsContainer.classList.contains(SHOW_ALL_SPECIALS_CLASS)) {\r\n this.specialsContainer.classList.remove(SHOW_ALL_SPECIALS_CLASS)\r\n this.updateLabelsShowBtn(LABEL_SHOW_MORE)\r\n } else {\r\n this.specialsContainer.classList.add(SHOW_ALL_SPECIALS_CLASS)\r\n this.updateLabelsShowBtn(LABEL_SHOW_LESS)\r\n }\r\n }\r\n\r\n updateLabelsShowBtn (txt) {\r\n Array.from(this.headerShowMoreBtn?.querySelectorAll('span'))\r\n .concat(Array.from(this.footerShowMoreBtn.querySelectorAll('span')))\r\n .forEach(span => span.textContent = txt)\r\n }\r\n}\r\n\r\nexport default SpecialsList\r\n","import { URLSearchParams } from \"url\";\r\n\r\nconst REGION_CATEGORY_NATIONAL = 'national';\r\nconst REGION_CATEGORY_LOCAL = 'local';\r\n\r\nclass RegionSpecialsList {\r\n constructor(element) {\r\n this.element = element;\r\n this.specialsContainer = element.querySelector(\".specials-list__container\");\r\n\r\n this.showNationalBtn = element.querySelector(\".show-national-btn\");\r\n this.showLocalBtn = element.querySelector(\".show-local-btn\");\r\n this.itemsContainerLocal = element.querySelector(\".specials-list__local-items\");\r\n this.itemsContainerNational = element.querySelector(\".specials-list__national-items\");\r\n\r\n this.addEventListeners();\r\n this.filterAndShowNational();\r\n }\r\n\r\n addEventListeners () {\r\n this.showNationalBtn.addEventListener(\"click\", this.filterAndShowNational.bind(this));\r\n this.showLocalBtn.addEventListener(\"click\", this.filterAndShowLocal.bind(this));\r\n this.element.querySelector('#location').addEventListener(\"change\", this.onChangeSelectLocationSpecial.bind(this));\r\n } \r\n\r\n filterAndShowNational () {\r\n this.showItemsFromRegion(REGION_CATEGORY_NATIONAL);\r\n this.showNationalBtn.classList.add('active');\r\n this.showLocalBtn.classList.remove('active');\r\n }\r\n filterAndShowLocal () {\r\n this.showItemsFromRegion(REGION_CATEGORY_LOCAL);\r\n this.showLocalBtn.classList.add('active');\r\n this.showNationalBtn.classList.remove('active');\r\n }\r\n\r\n showItemsFromRegion(type) {\r\n this.itemsContainerLocal.style.display = 'none';\r\n this.itemsContainerNational.style.display = 'none';\r\n if (type === REGION_CATEGORY_NATIONAL) {\r\n this.itemsContainerNational.style.display = 'grid';\r\n } else {\r\n this.itemsContainerLocal.style.display = 'block'; \r\n }\r\n }\r\n\r\n onChangeSelectLocationSpecial() { \r\n let blockId = document.getElementById('block-id');\r\n let location = '00000000';\r\n let locationSelector = document.getElementById('location');\r\n if (locationSelector)\r\n { \r\n let selectedLocation = locationSelector.selectedOptions[0];\r\n if (selectedLocation)\r\n {\r\n location = selectedLocation.value;\r\n }\r\n \r\n let url = '/api/localpartsspecials/' + blockId.value + '/' + location; \r\n \r\n fetch(url, {\r\n method: 'GET'\r\n }).then((response) => {\r\n return response.json();\r\n }).then((data) => { \r\n if (data.statusCode = 200)\r\n {\r\n this.populateSpecials(data.result);\r\n } else {\r\n\r\n }\r\n }).catch((err) => {\r\n\r\n }) \r\n }\r\n }\r\n\r\n populateSpecials(data) {\r\n // Get the container\r\n let parent = document.getElementById('local-list');\r\n\r\n // Remove existing specials\r\n while (parent.firstChild)\r\n {\r\n parent.removeChild(parent.firstChild)\r\n } \r\n\r\n // Update the location name\r\n let locationName = document.getElementById('location-name'); \r\n locationName.innerText = data.locationName;\r\n\r\n let locationNameTitle = document.getElementById('location-name-title'); \r\n locationNameTitle.style.display = 'block'; \r\n\r\n // If there are specials\r\n if (data.specials.length > 0)\r\n { \r\n //hide no results\r\n let noResults = document.getElementById('local-list-no-results');\r\n noResults.style.display = 'none';\r\n \r\n // Loop through the specials\r\n data.specials.forEach(function(special) { \r\n\r\n if (special.specialType == 'PartsSpecial')\r\n {\r\n // Make the card\r\n let card = document.createElement('div');\r\n card.className = 'specials-card specials-card--national-local'; \r\n \r\n // Make the content section\r\n let contentSection = document.createElement('div');\r\n contentSection.className = 'grid grid-md-2-cols'; \r\n \r\n // Make the details\r\n let details = document.createElement('div');\r\n details.className = 'specials-card__details';\r\n\r\n let title = document.createElement('div');\r\n title.className ='specials-card__details-title--main';\r\n let titleContent = document.createTextNode(special.title);\r\n title.appendChild(titleContent);\r\n details.appendChild(title);\r\n \r\n special.details.forEach(function(detail){ \r\n if (detail.text !== \"Price\")\r\n {\r\n let label = document.createElement('div');\r\n label.className ='specials-card__details-title';\r\n let textContent = document.createTextNode(detail.text);\r\n label.appendChild(textContent);\r\n details.appendChild(label);\r\n }\r\n if (detail.value.length > 0)\r\n {\r\n if(detail.text === \"Price\") {\r\n let value = document.createElement('div');\r\n value.className ='specials-card__details-title--highlight';\r\n let valueContent = document.createTextNode(detail.value);\r\n value.appendChild(valueContent);\r\n details.appendChild(value)\r\n }\r\n else {\r\n let value = document.createElement('span');\r\n let valueContent = document.createTextNode(detail.value);\r\n value.appendChild(valueContent);\r\n details.appendChild(value)\r\n }\r\n } \r\n })\r\n\r\n // Add details to content section\r\n contentSection.appendChild(details);\r\n\r\n // Add the image\r\n if (special.imageUrl.length > 0)\r\n {\r\n let imageContainer = document.createElement('div');\r\n imageContainer.className = 'specials-card__img-container';\r\n\r\n let image = document.createElement('img');\r\n image.setAttribute('src',special.imageUrl);\r\n\r\n imageContainer.appendChild(image);\r\n contentSection.appendChild(imageContainer);\r\n }\r\n\r\n // Add the content to the card\r\n card.appendChild(contentSection); \r\n \r\n // Make the cta section\r\n let ctaSection = document.createElement('div');\r\n ctaSection.className = 'specials-card__ctas-container';\r\n\r\n // Make the first link\r\n let innerDiv = document.createElement('div');\r\n\r\n // Make the link\r\n let linkOne = document.createElement('a');\r\n linkOne.className = \"button button--primary\";\r\n linkOne.setAttribute('href', special.linkUrl);\r\n linkOne.setAttribute('target', special.linkTarget)\r\n linkOne.setAttribute('title', special.linkTitle)\r\n\r\n // Make the link text\r\n let linkOneTextSpan = document.createElement('span');\r\n let linkOneTextSpanContent = document.createTextNode(special.linkText);\r\n linkOneTextSpan.appendChild(linkOneTextSpanContent);\r\n linkOne.appendChild(linkOneTextSpan);\r\n \r\n // Make the link accessibility text\r\n // if (data.findLocationCtaAccessibilityText.length > 0)\r\n // {\r\n // let linkOneAccessibilitySpan = document.createElement('span');\r\n // linkOneAccessibilitySpan.className = 'visually-hidden';\r\n // let linkOneAccessibilitySpanContent = document.createTextNode(data.findLocationCtaAccessibilityText);\r\n // linkOneAccessibilitySpan.appendChild(linkOneAccessibilitySpanContent);\r\n // linkOne.appendChild(linkOneAccessibilitySpan);\r\n // }\r\n\r\n // Make the link chevron\r\n let chevronSpan = document.createElement('span');\r\n chevronSpan.classNAme = 'button__icon button__icon--right icon';\r\n\r\n let chevronIcon = document.createElement('img');\r\n chevronIcon.setAttribute('src','/dist/images/chevron-right.svg');\r\n chevronSpan.appendChild(chevronIcon);\r\n linkOne.appendChild(chevronSpan);\r\n\r\n innerDiv.appendChild(linkOne);\r\n ctaSection.appendChild(innerDiv);\r\n\r\n // Make the second link\r\n let secondInnerDiv = document.createElement('div');\r\n let linkTwo = document.createElement('a');\r\n linkTwo.className = \"button button--secondary\";\r\n linkTwo.setAttribute('href', data.partsConnectUrl);\r\n\r\n // Make the link text\r\n let linkTwoTextSpan = document.createElement('span');\r\n let linkTwoTextSpanContent = document.createTextNode(data.showPartsCtaText);\r\n linkTwoTextSpan.appendChild(linkTwoTextSpanContent);\r\n linkTwo.appendChild(linkTwoTextSpan);\r\n \r\n // Make the link accesibility text\r\n if (data.showPartsCtaAccessibilityText.length > 0)\r\n {\r\n let linkTwoAccessibilitySpan = document.createElement('span');\r\n linkTwoAccessibilitySpan.className = 'visually-hidden';\r\n let linkTwoAccessibilitySpanContent = document.createTextNode(data.showPartsCtaAccessibilityText);\r\n linkTwoAccessibilitySpan.appendChild(linkTwoAccessibilitySpanContent);\r\n linkTwo.appendChild(linkTwoAccessibilitySpan);\r\n }\r\n \r\n // Add the chevron\r\n linkTwo.appendChild(chevronSpan);\r\n\r\n // Add to the section\r\n secondInnerDiv.appendChild(linkOne);\r\n ctaSection.appendChild(secondInnerDiv);\r\n\r\n // Add the section to the card\r\n card.appendChild(ctaSection);\r\n \r\n // Add the card to the page\r\n parent.appendChild(card); \r\n } else if (special.specialType == 'RichTextSpecial')\r\n {\r\n // Make the card\r\n let card = document.createElement('div');\r\n card.className = 'specials-card specials-card--national-local';\r\n \r\n // Make the details\r\n let header = document.createElement('div');\r\n header.className = 'specials-card__header';\r\n let title = document.createTextNode(special.title);\r\n header.appendChild(title); \r\n\r\n // Add the content to the card\r\n card.appendChild(header); \r\n \r\n // Make the cta section\r\n let body = document.createElement('div');\r\n body.className = 'specials-card__body';\r\n\r\n // Set the body text\r\n let bodyDiv = document.createElement('div');\r\n bodyDiv.innerHTML = special.bodyText;\r\n body.appendChild(bodyDiv);\r\n\r\n // Make the cta section\r\n let ctaSection = document.createElement('div');\r\n ctaSection.className = 'specials-card__ctas-container';\r\n\r\n // Make the first link\r\n let innerDiv = document.createElement('div');\r\n\r\n // Make the link\r\n let linkOne = document.createElement('a');\r\n linkOne.className = \"button button--primary\";\r\n linkOne.setAttribute('href', special.linkUrl);\r\n linkOne.setAttribute('target', special.linkTarget)\r\n linkOne.setAttribute('title', special.linkTitle)\r\n\r\n\r\n // Make the link text\r\n let linkOneTextSpan = document.createElement('span');\r\n let linkOneTextSpanContent = document.createTextNode(special.linkText);\r\n linkOneTextSpan.appendChild(linkOneTextSpanContent);\r\n linkOne.appendChild(linkOneTextSpan);\r\n \r\n // Make the link accessibility text\r\n // if (data.findLocationCtaAccessibilityText.length > 0)\r\n // {\r\n // let linkOneAccessibilitySpan = document.createElement('span');\r\n // linkOneAccessibilitySpan.className = 'visually-hidden';\r\n // let linkOneAccessibilitySpanContent = document.createTextNode(data.findLocationCtaAccessibilityText);\r\n // linkOneAccessibilitySpan.appendChild(linkOneAccessibilitySpanContent);\r\n // linkOne.appendChild(linkOneAccessibilitySpan);\r\n // }\r\n\r\n // Make the link chevron\r\n let chevronSpan = document.createElement('span');\r\n chevronSpan.classNAme = 'button__icon button__icon--right icon';\r\n\r\n let chevronIcon = document.createElement('img');\r\n chevronIcon.setAttribute('src','/dist/images/chevron-right.svg');\r\n chevronSpan.appendChild(chevronIcon);\r\n linkOne.appendChild(chevronSpan);\r\n\r\n innerDiv.appendChild(linkOne);\r\n ctaSection.appendChild(innerDiv);\r\n\r\n // Make the second link\r\n let secondInnerDiv = document.createElement('div');\r\n let linkTwo = document.createElement('a');\r\n linkTwo.className = \"button button--secondary\";\r\n linkTwo.setAttribute('href', data.partsConnectUrl);\r\n\r\n // Make the link text\r\n let linkTwoTextSpan = document.createElement('span');\r\n let linkTwoTextSpanContent = document.createTextNode(data.showPartsCtaText);\r\n linkTwoTextSpan.appendChild(linkTwoTextSpanContent);\r\n linkTwo.appendChild(linkTwoTextSpan);\r\n \r\n // Make the link accesibility text\r\n if (data.showPartsCtaAccessibilityText.length > 0)\r\n {\r\n let linkTwoAccessibilitySpan = document.createElement('span');\r\n linkTwoAccessibilitySpan.className = 'visually-hidden';\r\n let linkTwoAccessibilitySpanContent = document.createTextNode(data.showPartsCtaAccessibilityText);\r\n linkTwoAccessibilitySpan.appendChild(linkTwoAccessibilitySpanContent);\r\n linkTwo.appendChild(linkTwoAccessibilitySpan);\r\n }\r\n \r\n // Add the chevron\r\n linkTwo.appendChild(chevronSpan);\r\n\r\n // Add to the section\r\n secondInnerDiv.appendChild(linkOne);\r\n ctaSection.appendChild(secondInnerDiv);\r\n\r\n // Add the section to the card\r\n card.appendChild(body);\r\n\r\n card.appendChild(ctaSection);\r\n \r\n // Add the card to the page\r\n parent.appendChild(card); \r\n } \r\n }) \r\n } else {\r\n // Show no results\r\n let noResults = document.getElementById('local-list-no-results');\r\n noResults.style.display = 'block';\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default RegionSpecialsList;\r\n","const HeroCarouselCard = {\r\n init: function (element) {\r\n this.element = element;\r\n\r\n this.configureMediaControls.bind(this)();\r\n },\r\n\r\n configureMediaControls: function () {\r\n const arrMediaWrapper = this.element.querySelectorAll('.hero-carousel-card__bg-media--video');\r\n\r\n for (const element of arrMediaWrapper) {\r\n\r\n const playButton = element.querySelector('.hero-carousel__button-play');\r\n const pauseButton = element.querySelector('.hero-carousel__button-pause');\r\n const controlsWrapper = element.querySelector('.hero-carousel__video-controls');\r\n const video = element.querySelector('iframe');\r\n\r\n playButton?.addEventListener('click', () => {\r\n this.videoToggle(video, 'play');\r\n controlsWrapper.classList.add('playing');\r\n })\r\n\r\n pauseButton?.addEventListener('click', () => {\r\n this.videoToggle(video, 'pause');\r\n controlsWrapper.classList.remove('playing');\r\n })\r\n \r\n }\r\n },\r\n\r\n videoToggle: function (video, action) {\r\n const data = { method: action };\r\n const url = video.src.split('?')[0];\r\n\r\n if (url !== undefined) {\r\n video.contentWindow.postMessage(JSON.stringify(data), url);\r\n }\r\n }\r\n\r\n};\r\n\r\nexport default HeroCarouselCard;\r\n","import Glider from \"../../../js/glider\";\r\n\r\nrequire(\"../../../js/glider\");\r\n\r\nconst KEY_CODES = {\r\n ENTER: 13,\r\n SPACE: 32,\r\n TAB: 9,\r\n};\r\n\r\nconst HeroCarousel = {\r\n init: function (element) {\r\n this.gliderElement = element.querySelector(\".glider\");\r\n this.element = element;\r\n\r\n const slideCount = element.querySelectorAll(\".hero-carousel-card\").length;\r\n const autoplayEnabled = element.classList.contains('autoplay')\r\n\r\n this.configureMediaControls.bind(this)();\r\n\r\n if (slideCount === 1) {\r\n element.classList.add(\"no-carousel\");\r\n return;\r\n }\r\n\r\n this.duration = element.attributes['data-autoplay-duration'] ? element.attributes['data-autoplay-duration'].value * 1000 : 0;\r\n this.addCtasListeners();\r\n\r\n this.gliderElement.addEventListener('glider-slide-visible', this.updateControlsAndGliderPos.bind(this));\r\n this.gliderElement.addEventListener('glider-animated', this.updateControlsAndGliderPos.bind(this));\r\n\r\n if (autoplayEnabled === true) {\r\n if (this.duration > 0) {\r\n this.gliderElement.addEventListener('glider-loaded', () => {\r\n this.gliderElement.setAttribute('data-current-slide', 0);\r\n this.interval = this.startGlideAutoSlide();\r\n this.buttons.pauseBtn.classList.add('active');\r\n this.buttons.playBtn.classList.remove('active');\r\n })\r\n }\r\n }\r\n\r\n this.glider = new Glider(this.gliderElement, {\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n scrollLock: true,\r\n draggable: false,\r\n });\r\n\r\n },\r\n\r\n updateControlsAndGliderPos: function (evt) {\r\n const currPage = evt?.detail?.value || evt?.detail?.slide;\r\n if (!isNaN(currPage) && +currPage !== +this.gliderElement.dataset.currentSlide) {\r\n const controlBtn = this.element.querySelector(`.hero-carousel__bottom-controls button:nth-child(${currPage + 1})`);\r\n if (controlBtn) {\r\n const btnss = this.element.querySelectorAll('.hero-carousel__bottom-controls button');\r\n Array.from(btnss)\r\n .forEach(btn => btn?.classList.remove(\"active\"));\r\n controlBtn?.classList.add(\"active\");\r\n this.gliderElement.dataset.currentSlide = currPage;\r\n }\r\n }\r\n },\r\n\r\n configureMediaControls: function () {\r\n const arrMediaWrapper = this.element.querySelectorAll('.hero-carousel-card__bg-media--video');\r\n for (const element of arrMediaWrapper) {\r\n\r\n const playButton = element.querySelector('.hero-carousel__button-play');\r\n const pauseButton = element.querySelector('.hero-carousel__button-pause');\r\n const controlsWrapper = element.querySelector('.hero-carousel__video-controls');\r\n const video = element.querySelector('iframe');\r\n\r\n if (playButton && playButton.addEventListener) {\r\n playButton.addEventListener('click', () => {\r\n this.videoToggle(video, 'play');\r\n controlsWrapper.classList.add('playing');\r\n })\r\n }\r\n\r\n if (pauseButton && pauseButton.addEventListener) {\r\n pauseButton.addEventListener('click', () => {\r\n this.videoToggle(video, 'pause');\r\n controlsWrapper.classList.remove('playing');\r\n })\r\n }\r\n\r\n }\r\n },\r\n\r\n videoToggle: function (video, action) {\r\n const data = { method: action };\r\n const url = video.src.split('?')[0];\r\n\r\n if (url !== undefined) {\r\n video.contentWindow.postMessage(JSON.stringify(data), url);\r\n }\r\n },\r\n\r\n onKeyDownCtaControl: function (evt) {\r\n if (evt.target && +evt.target.dataset.heroCarouselPosition !== 0) {\r\n return;\r\n }\r\n if (evt.keyCode === KEY_CODES.TAB && evt.shiftKey) {\r\n evt.preventDefault();\r\n this.focusActiveCard();\r\n }\r\n },\r\n\r\n addCtasListeners: function () {\r\n for (const el of this.element.querySelectorAll(\r\n \".hero-carousel__bottom-controls button\"\r\n )) {\r\n if (el && el.addEventListener) {\r\n el.addEventListener(\"click\", this.onClickSlideButton.bind(this));\r\n el.addEventListener(\"keydown\", this.onKeyDownCtaControl.bind(this));\r\n }\r\n }\r\n\r\n const playBtn = this.element.querySelector('.hero-carousel__top-controls .play');\r\n const pauseBtn = this.element.querySelector('.hero-carousel__top-controls .pause');\r\n\r\n if (playBtn && playBtn.addEventListener) {\r\n playBtn.addEventListener('click', this.onPlayGlider.bind(this));\r\n playBtn.addEventListener(\"keydown\", this.onKeyDownPlayGlider.bind(this));\r\n }\r\n\r\n if (pauseBtn && pauseBtn.addEventListener) {\r\n pauseBtn.addEventListener('click', this.onPauseGlider.bind(this));\r\n pauseBtn.addEventListener('keydown', this.onKeyDownPauseGlider.bind(this));\r\n }\r\n\r\n this.buttons = {\r\n playBtn,\r\n pauseBtn\r\n }\r\n },\r\n\r\n onKeyDownPlayGlider: function (evt) {\r\n if (evt.keyCode === KEY_CODES.ENTER || evt.keyCode === KEY_CODES.SPACE) {\r\n evt.preventDefault();\r\n this.onPlayGlider(evt);\r\n const pauseBtn = this.element.querySelector('.hero-carousel__top-controls .pause');\r\n pauseBtn.focus();\r\n } else if (evt.keyCode === KEY_CODES.TAB && !evt.shiftKey) {\r\n evt.preventDefault();\r\n this.focusActiveCard();\r\n }\r\n },\r\n\r\n onKeyDownPauseGlider: function (evt) {\r\n if (evt.keyCode === KEY_CODES.ENTER || evt.keyCode === KEY_CODES.SPACE) {\r\n evt.preventDefault();\r\n this.onPauseGlider(evt);\r\n const playBtn = this.element.querySelector('.hero-carousel__top-controls .play');\r\n playBtn.focus();\r\n } else if (evt.keyCode === KEY_CODES.TAB && !evt.shiftKey) {\r\n evt.preventDefault();\r\n this.focusActiveCard();\r\n }\r\n },\r\n\r\n focusActiveCard: function () {\r\n const activeCta = document.querySelector('.hero-carousel-card.glider-slide.active .hero-carousel-card__info-cta .button');\r\n if (activeCta) {\r\n activeCta.focus({ focusVisible: true, scroll: false });\r\n }\r\n },\r\n\r\n startGlideAutoSlide: function () {\r\n return setInterval(() => {\r\n let nextSlide = this.glider.slide + 1;\r\n if (this.glider.slides[this.glider.slides.length - 1].classList.contains('visible')) {\r\n nextSlide = 0\r\n }\r\n this.glider.scrollItem(nextSlide);\r\n this.resetActiveControlCtas();\r\n const nextBtn = this.element.querySelectorAll('.hero-carousel__bottom-controls button')[nextSlide];\r\n if (nextBtn) {\r\n nextBtn.classList.add('active');\r\n }\r\n }, this.duration);\r\n },\r\n\r\n onPlayGlider: function (evt) {\r\n this.buttons.playBtn.classList.remove('active');\r\n this.buttons.pauseBtn.classList.add('active');\r\n this.interval = this.startGlideAutoSlide();\r\n },\r\n\r\n onPauseGlider: function (evt) {\r\n this.buttons.pauseBtn.classList.remove('active');\r\n this.buttons.playBtn.classList.add('active');\r\n if (this.interval) {\r\n clearInterval(this.interval);\r\n }\r\n },\r\n\r\n onClickSlideButton: function (evt) {\r\n this.resetActiveControlCtas();\r\n const carouselPos = evt.target.dataset.heroCarouselPosition;\r\n\r\n let nextGliderSlide = !isNaN(carouselPos) ? +carouselPos : 0;\r\n evt?.target?.classList.add(\"active\");\r\n\r\n this.glider.scrollItem(nextGliderSlide);\r\n this.gliderElement.setAttribute(\"data-current-slide\", nextGliderSlide);\r\n this.onPauseGlider();\r\n },\r\n\r\n resetActiveControlCtas: function () {\r\n for (const el of this.element.querySelectorAll(\r\n \".hero-carousel__bottom-controls button\"\r\n )) {\r\n el.classList.remove(\"active\");\r\n }\r\n }\r\n};\r\n\r\nexport default HeroCarousel;\r\n","require('./_model-search.scss')\r\n\r\nconst ModelSearch = {\r\n\r\n init: function (element) {\r\n const _ = this\r\n _.el = element\r\n _.openFiltersBtn = element.querySelector('#model-filters-open-button')\r\n _.closeFiltersBtn = element.querySelector('#model-filters-close-button')\r\n _.filterFlyout = element.querySelector('#model-filters-flyout')\r\n _.filterFlyoutBg = element.querySelector('#model-filters-flyout-bg')\r\n _.isFlyoutShown = false\r\n\r\n this.openFiltersBtn.addEventListener('click', (e)=> {\r\n e.currentTarget.attributes['aria-expanded'].value = true\r\n this.filterFlyout.attributes['aria-hidden'].value = false\r\n this.el.classList.add('flyout')\r\n this.filterFlyout.focus()\r\n this.isFlyoutShown = true\r\n })\r\n this.closeFiltersBtn.addEventListener('click', (e)=> {\r\n this.openFiltersBtn.attributes['aria-expanded'].value = false\r\n this.filterFlyout.attributes['aria-hidden'].value = true\r\n this.el.classList.remove('flyout')\r\n this.isFlyoutShown = false\r\n this.openFiltersBtn.focus()\r\n })\r\n this.filterFlyoutBg.addEventListener('click', (e) => {\r\n if(this.isFlyoutShown) {\r\n this.closeFiltersBtn.click()\r\n }\r\n })\r\n _.trap_focus(this.filterFlyout)\r\n },\r\n trap_focus: (target) => {\r\n const KEYCODE_TAB = 9\r\n const focusableElsSelectors = `\r\n #model-filters-close-button, button.drawer__item-button,\r\n .drawer__item.active button:not([disabled]), .drawer__item.active input[type=\"checkbox\"]:not([disabled]),\r\n button.inventory-search-page__filter-apply, button.inventory-search-page__filter-clear-all\r\n `\r\n const focusableEls = target.querySelectorAll(focusableElsSelectors)\r\n const firstFocusableEl = focusableEls[0]\r\n const lastFocusableEl = focusableEls[focusableEls.length - 1]\r\n target.addEventListener('keydown', (e) => {\r\n const isTabPressed = (e.key === 'Tab' || e.keyCode === KEYCODE_TAB)\r\n\r\n if (!isTabPressed) {\r\n return;\r\n }\r\n\r\n if ( e.shiftKey ) /* shift + tab */ {\r\n if (document.activeElement === firstFocusableEl) {\r\n lastFocusableEl.focus();\r\n e.preventDefault();\r\n }\r\n } else /* tab */ {\r\n if (document.activeElement === lastFocusableEl) {\r\n firstFocusableEl.focus();\r\n e.preventDefault();\r\n }\r\n }\r\n })\r\n\r\n }\r\n\r\n}\r\n\r\nexport default ModelSearch\r\n","const VehicleDetail = {\r\n init: function (element) {\r\n const _ = this\r\n const printButton = element.querySelector('.print-css')\r\n const vehicleImage = element.querySelector('.vehicle-detail__left-column > div')\r\n const vehicleDescription = element.querySelector('.vehicle-detail__right-column')\r\n const vehicleDisclaimer = element.querySelector('.vehicle-detail__disclaimer')\r\n const vehicleHeader = element.querySelector('.vehicle-detail__header')\r\n\r\n if(printButton && vehicleImage && vehicleDescription && vehicleDisclaimer && vehicleHeader){\r\n printButton.addEventListener (\"click\", (e) => {\r\n this.appendPrint(vehicleHeader ,vehicleDisclaimer, vehicleImage, vehicleDescription)\r\n })\r\n }\r\n else {\r\n alert('An error occurred while trying to print this page.')\r\n }\r\n },\r\n appendPrint: (header, disclaimer, image, description) => {\r\n const disclaimerClone = disclaimer.cloneNode(true)\r\n const descriptionClone = description.cloneNode(true)\r\n // if(header.querySelector('.printable')){} else{\r\n // disclaimerClone.classList.add('printable')\r\n // header.append(disclaimerClone)\r\n // }\r\n if(image.querySelector('.printable')){} else{\r\n descriptionClone.classList.add('printable')\r\n image.append(descriptionClone)\r\n }\r\n window.print()\r\n return false\r\n }\r\n}\r\n\r\nexport default VehicleDetail\r\n","require('./_cta.scss')\r\n\r\nconst CampaignCta = {\r\n init: function (stickyCTA) {;\r\n const contactForm = document.querySelector(\"#contact\");\r\n \r\n if (!contactForm) {\r\n stickyCTA.classList.add(\"sticky-CTA--display-none\")\r\n } else {\r\n stickyCTA.classList.remove(\"sticky-CTA--display-none\")\r\n }\r\n },\r\n };\r\n \r\n export default CampaignCta;","const CLASS_CVS = \"cvs\";\r\nconst PHONE_DEFAULT = \"link link--primary link--accent-underline\";\r\nconst PHONE_HOVER = \"link link--primary link--accent-underline hover\";\r\nconst TEL = \"tel:\";\r\nconst FIFTY_FIFTY_UP = \".cmp-container-50-50__half.cmp-container-50-50__up\";\r\nconst STRONG = \"strong\";\r\nconst BOLD = \"bold\"\r\nconst FONT_WEIGHT = \"font-weight\";\r\nconst ANCHOR = \"a\";\r\n\r\n\r\nconst initCvSolutions = () => {\r\n if (!document.body.classList.contains(CLASS_CVS)) return;\r\n transformFiftyFiftyElements();\r\n}\r\n\r\nconst transformFiftyFiftyElements = () => {\r\n const fiftyFiftyElements = document.querySelectorAll(FIFTY_FIFTY_UP);\r\n if (fiftyFiftyElements && fiftyFiftyElements.length > 0) {\r\n for (const fiftyFiftyElement of fiftyFiftyElements) {\r\n changePhoneStyle(fiftyFiftyElement);\r\n changeTitleStyleToBold(fiftyFiftyElement);\r\n }\r\n }\r\n}\r\n\r\nconst changePhoneStyle = (fiftyFiftyElement) => {\r\n const aElements = fiftyFiftyElement.getElementsByTagName(ANCHOR);\r\n for (const aElement of aElements) {\r\n if (aElement.href && aElement.href.startsWith(TEL)) {\r\n aElement.className = PHONE_DEFAULT;\r\n aElement.onmouseover = function () {\r\n aElement.className = PHONE_HOVER;\r\n }\r\n aElement.onmouseout = function () {\r\n aElement.className = PHONE_DEFAULT;\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst changeTitleStyleToBold = (fiftyFiftyElement) => {\r\n const strongElements = fiftyFiftyElement.getElementsByTagName(STRONG);\r\n for (const strongElement of strongElements) {\r\n strongElement.style[FONT_WEIGHT] = BOLD;\r\n }\r\n}\r\n\r\nexport { initCvSolutions };","const GLIDER = \".glider\";\r\nconst SCROLL = \"scroll\";\r\nconst HIDDEN = \"hidden\";\r\n\r\nlet slideNumber = 0;\r\n\r\nconst initGliderSwipe = () => {\r\n const gliders = document.querySelectorAll(GLIDER);\r\n for (const glider of gliders) {\r\n glider.addEventListener(SCROLL, () => {\r\n touchHandler(glider);\r\n });\r\n }\r\n}\r\n\r\nconst touchHandler = (glider) => {\r\n const currentSlide = glider._glider.getCurrentSlide();\r\n if (slideNumber !== currentSlide) {\r\n slideNumber = currentSlide;\r\n glider.style.overflowX = HIDDEN;\r\n setTimeout(() => {\r\n glider.style.overflowX = SCROLL;\r\n }, 1);\r\n }\r\n}\r\nexport { initGliderSwipe };\r\n","const CAROUSEL_GLIDER_DRAGGABLE = \".carousel__items.glider\";\r\nconst IMG = \"img\";\r\nconst DISPLAY_NONE = \"none\";\r\n\r\n\r\nconst initCarousel = () => {\r\n const carouselGliders = document.querySelectorAll(CAROUSEL_GLIDER_DRAGGABLE);\r\n iterateGliders(carouselGliders);\r\n}\r\n\r\nconst iterateGliders = (carouselGliders) => {\r\n for (const carouselGlider of carouselGliders) {\r\n const imageTags = carouselGlider.getElementsByTagName(IMG);\r\n if (imageTags.length === 1) {\r\n hideSiblings(carouselGlider);\r\n }\r\n }\r\n}\r\n\r\nconst hideSiblings = (carouselGliders) => {\r\n let nextElementSibling = carouselGliders.nextElementSibling;\r\n while (nextElementSibling) {\r\n nextElementSibling.style.display = DISPLAY_NONE;\r\n nextElementSibling = nextElementSibling.nextElementSibling;\r\n }\r\n}\r\n\r\nexport { initCarousel };","import ImageCarousel from '../components/content/imagecarousel/image-carousel'\r\nimport FeaturedImageCarousel from '../components/content/featuredimagecarousel/featured-image-carousel'\r\nimport FullImageCarousel from '../components/content/fullimagecarousel/full-image-carousel'\r\nimport Carousel from '../components/content/carousel/carousel'\r\nimport Accordion from '../components/content/accordion/accordion'\r\nimport Drawer from '../components/content/drawer/drawer'\r\nimport { Header } from '../components/header/header'\r\nimport Gallery from '../components/content/gallery/gallery'\r\nimport HeroBanner from '../components/content/herobanner/hero-banner'\r\nimport FormValidation from '../components/atoms/forms/form-validation'\r\nimport NewsletterSignup from '../components/atoms/forms/newsletter-signup'\r\nimport ModalPopup from '../components/content/modalpopup/modal-popup'\r\nimport ModalGallery from '../components/content/modalgallery/modal-gallery'\r\nimport LocationDetail from '../components/content/locationdetail/location-detail';\r\nimport LocationInformation from '../components/content/locationinformation/location-information';\r\nimport SpecialsList from '../components/content/specials/specials-list';\r\nimport RegionSpecialsList from '../components/content/specials/region-specials-list';\r\nimport HeroCarouselCard from '../components/content/herocarouselcard/hero-carousel-card';\r\nimport HeroCarousel from '../components/content/herocarousel/hero-carousel';\r\nimport ModelSearch from '../components/content/modelsearch/model-search';\r\nimport VehicleDetail from '../components/content/vehicledetail/vehicle-detail'\r\nimport { googleAnalytics } from './datalayer'\r\nimport CampaignCta from '../components/campaign/cta/cta'\r\n\r\nimport { initCvSolutions } from \"./custom/cv-solutions\";\r\nimport { initGliderSwipe } from \"./custom/glider-swipe\";\r\n\r\nimport { initCarousel } from \"./common/carousel\";\r\n\r\nconst componentScripts = {\r\n ImageCarousel,\r\n Gallery,\r\n Accordion,\r\n Drawer,\r\n FeaturedImageCarousel,\r\n FullImageCarousel,\r\n HeroBanner,\r\n FormValidation,\r\n NewsletterSignup,\r\n Header,\r\n ModalPopup,\r\n ModalGallery,\r\n LocationDetail,\r\n LocationInformation,\r\n SpecialsList,\r\n RegionSpecialsList,\r\n HeroCarouselCard,\r\n HeroCarousel,\r\n Carousel,\r\n ModelSearch,\r\n VehicleDetail,\r\n CampaignCta\r\n};\r\n\r\nwindow.GoogleAnalytics = googleAnalytics();\r\n\r\nlet componentName, componentScript;\r\n\r\nconst componentElements = document.querySelectorAll('[data-component]');\r\n// iterate over all component elements\r\nfor (const el of componentElements) {\r\n componentName = el.getAttribute('data-component');\r\n // get the script that matches the component\r\n componentScript = componentScripts[componentName];\r\n // if the script exists\r\n if (typeof componentScript !== 'undefined') {\r\n // and init method exists, initialize the script\r\n if (componentScript.init) {\r\n componentScript.init(el);\r\n // if not but script is a class/fn-type, instantiate the class/fn\r\n } else if (typeof componentScript === 'function') {\r\n new componentScript(el);\r\n }\r\n }\r\n}\r\n\r\ninitCvSolutions();\r\ninitCarousel();\r\ninitGliderSwipe();"],"names":["module","exports","focusableSelectors","TAB_KEY","ESCAPE_KEY","A11yDialog","element","this","_show","show","bind","_hide","hide","_maintainFocus","_bindKeypress","$el","shown","_id","getAttribute","id","_previouslyFocused","_listeners","create","toArray","collection","Array","prototype","slice","call","$$","selector","context","document","querySelectorAll","moveFocusToDialog","node","querySelector","focus","getFocusableChildren","join","filter","child","offsetWidth","offsetHeight","getClientRects","length","trapTabKey","event","focusableChildren","focusedItemIndex","indexOf","activeElement","shiftKey","preventDefault","instantiateDialogs","forEach","setAttribute","hasAttribute","_openers","opener","addEventListener","_closers","closer","closest","concat","_fire","removeAttribute","body","removeEventListener","destroy","on","type","handler","push","off","index","splice","listeners","domEvent","CustomEvent","detail","dispatchEvent","listener","focused","key","target","readyState","window","requestAnimationFrame","setTimeout","factory","define","_window","Glider","settings","_","_glider","ele","classList","add","opt","Object","assign","slidesToScroll","slidesToShow","resizeLock","duration","easing","x","t","b","c","d","animate_id","page","slide","arrows","_opt","skipTrack","track","children","createElement","appendChild","init","resize","scroll","updateControls","gliderPrototype","refresh","paging","width","height","slides","i","containerWidth","clientWidth","breakpointChanged","settingsBreakpoint","_autoSlide","slideCount","itemWidth","exactWidth","Math","max","floor","__","style","trackWidth","isDrag","preventClick","move","scrollTo","bindArrows","buildDots","bindDrag","emit","mouse","handleMouse","mouseup","mouseDown","undefined","remove","events","mouseleave","mousedown","e","stopPropagation","clientX","touchstart","mousemove","click","toggle","draggable","dots","innerHTML","ceil","dot","dataset","className","scrollItem","direction","arrow","_func","keys","scrollPropagate","disableArrows","rewind","prev","scrollLeft","contains","next","round","middle","extraMiddle","slideClasses","wasVisible","start","end","itemStart","itemEnd","test","abs","isVisible","scrollLock","clearTimeout","getCurrentSlide","scrollLockDelay","originalSlide","position","prevSlide","backwards","min","value","resp","responsive","sort","a","breakpoint","size","innerWidth","scrollTarget","scrollDuration","callback","Date","getTime","animateIndex","animate","now","removeItem","removeChild","addItem","dragVelocity","double","inv","setOption","global","v","replace","cloneNode","clear","outerHTML","getElementsByTagName","parentNode","replaceChild","name","arg","bubbles","eventPropagate","args","eventHandler","k","lang","en","required","email","number","integer","url","tel","maxlength","minlength","pattern","equals","tmpl","o","_arguments","arguments","groupedElemCount","input","pristine","self","form","defaultConfig","classTo","errorClass","successClass","errorTextParent","errorTextTag","errorTextClass","ALLOWED_ATTRIBUTES","EMAIL_REGEX","MESSAGE_REGEX","currentLocale","validators","validator","priority","Pristine","config","live","_addValidatorToField","fns","params","valueParams","split","unshift","_validateField","field","errors","valid","fn","apply","msg","messages","halt","_getErrorElements","errorElements","errorClassElement","el","cls","parentElement","findAncestor","errorTextElement","PRISTINE_ERROR","pristineDisplay","display","_showError","_showSuccess","_removeError","obj1","obj2","attr","mergeConfig","fields","from","map","attributes","substr","messageMatch","match","locale","hasOwnProperty","validate","silent","isLive","HTMLElement","NodeList","$","onLiveCompleted","getErrors","erroneousFields","tagName","toLowerCase","addValidator","elem","addError","error","reset","setGlobalConfig","val","isNaN","parseFloat","parseInt","limit","m","RegExp","otherFieldSelector","other","addMessages","langObj","setLocale","obj","prop","qs","sep","eq","options","regexp","maxKeys","len","kstr","vstr","idx","decodeURIComponent","isArray","stringifyPrimitive","isFinite","ks","encodeURIComponent","decode","parse","encode","stringify","root","nodeType","freeGlobal","g","punycode","maxInt","base","regexPunycode","regexNonASCII","regexSeparators","stringFromCharCode","String","fromCharCode","RangeError","array","result","mapDomain","string","parts","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","baseMinusTMin","out","basic","j","oldi","w","baseMinusT","codePoint","inputLength","n","bias","lastIndexOf","handledCPCount","basicLength","q","currentValue","handledCPCountPlusOne","qMinusT","util","Url","protocol","slashes","auth","host","port","hostname","hash","search","query","pathname","path","href","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","unsafeProtocol","hostlessProtocol","slashedProtocol","querystring","urlParse","parseQueryString","slashesDenoteHost","isObject","u","isString","TypeError","queryIndex","splitter","uSplit","rest","trim","simplePath","exec","proto","lowerProto","atSign","hostEnd","hec","parseHost","ipv6Hostname","hostparts","l","part","newpart","validParts","notHost","bit","toASCII","p","h","ae","esc","escape","qm","s","format","charAt","resolve","relative","resolveObject","rel","tkeys","tk","tkey","rkeys","rk","rkey","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","pop","isNullOrUndefined","authInHost","isNull","last","hasTrailingSlash","up","isAbsolute","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","getter","__esModule","definition","defineProperty","enumerable","get","globalThis","Function","r","Symbol","toStringTag","nmd","paths","scriptUrl","importScripts","location","currentScript","src","scripts","Error","require","ImageCarousel","gliderElement","autoplayDuration","interval","startSlideshow","pauseButton","pauseSlideshow_toggle","currentTarget","glider","linkTextElements","hideAllLinkText","setInterval","playNextSlide","pauseSlideshow","clearInterval","nextSlide","IsAutoplayPaused","FeaturedImageCarousel","playPause","centerNavigation","setProperty","top","bottom","FullImageCarousel","Carousel","Accordion","triggers","triggerClick","parent","toggleItem","item","open","itemTrigger","itemContent","itemContentHeight","scrollHeight","Drawer","items","item_click","item_hide","item_show","button","drawer","MenuNavBase","activeListeners","evt","opts","Boolean","MenuNavUtils","role","getIdFromAriaLabel","orientation","menuitem","domId","getMenuId","popup","nextElementSibling","str","onlyGroup","menu","domNode","random","MENU_NAV_CTAS_SELECTOR","MenuDesktopNav","isMegaNav","addListener","onMenuitemClick","capture","onBackgroundPointerdown","closePopupAll","firstChild","Node","ELEMENT_NODE","nextSibling","itemLi","aElem","popupMenuContainer","allSubMenuItems","submenuitem","firstMenuItem","tgt","hasPopup","isInFullContentView","isOpen","isTopLevel","closePopup","openPopup","hasLink","MENU_MOBILE","ACTIVE_MOBILE_MENU","MenuMobileNav","headerHambNode","headerBackNode","headerCloseNode","headerLabelNode","headerBackdrop","lastScrollPosition","currentMenu","previousMenu","initMenuItems","initOpenBackCloseButtons","ctaSubMenu","subMenuContainer","initializeSubMenues","onMenuitemTouch","nextLevelSubMenuContainer","ulItem","submenuTitle","aItem","getSiblings","textContent","onOpenMenuTouch","onCloseMenuTouch","onBackMenuTouch","resetMenuNav","html","scrollY","itemObj","prevMenu","clearInactiveMenues","clearMenuHeader","structure","lis","title","showMenuAsColumn","GenerateMenu","txt","level","anchor","isDesktop","imgD","append","imgM","li","hasSubMenu","createA","newUL","createSubmenu","ul","newLI","createLi","mainUL","reverse","insertAdjacentElement","HEADER_FLYOUT","Header","rootComponent","isDesktopScreenSize","currMenuInstance","localFedMode","generate","onWindowResize","searchFlyout","inputSearch","closeFlyout","searchCta","closeCta","ariaLabel","newIsDesktopState","removeListeners","modal","closeButton","Modal_Close","thumbnails","Modal_Open","slideId","HeroBanner","playButton","video","video_toggle","action","data","method","contentWindow","postMessage","JSON","googleAnalyticsSubmitForm","siteName","getSiteName","urlSections","getUrlSections","formCompleteFull","page_view__site","page_view__siteSection1","section1","page_view__siteSection2","section2","page_view__pageName","pageName","process__name","process__step","process__metricComplete","process__metricStart","formComplete","fromEntries","entries","dataLayer","handlePageLoad","modalName","pageLoadedFull","page_view__metricInstance","pageLoaded","ctasHandled","layerSite","sections","cmpBreadcrumb","pageSections","fixStringForGA","innerText","section3","section4","section5","section6","includes","returnString","PHONE_ALL_REG","ZIP_US_CAN_REG","FILE_EXT_REG","FORM_SELECTORS","VALIDATION_SUMMARY_ATTR","FORM_CLASSES","FormValidation","validationEnabled","formValidator","onSubmitForm","resetValidationFromUI","pristineFormInstance","onLiveValidationCompleted","inputPhone","inputZip","uploadField","uploadType","createValidationSummaryItem","text","showSummary","hideSummary","summaryContainer","scrollToSummary","domErrors","domErrorsList","activeErrorList","errorFeedbackItems","processFormGroupErrors","updateValidationSummary","formGroup","formGroupInput","requiredError","nonRequiredError","domActiveErrorList","replaceChildren","scrollToContainer","scrollToObj","behavior","block","scrollIntoView","honeyPot","getFormContainers","success","errorDetail","FormData","getToken","formData","getElementById","fetch","then","response","json","postForm","err","token","headers","color","message","resetValidationErrors","submitBtn","onClickSubmitBtn","newsletterSignup","alert","submit","ModalPopup","documentElement","instanceA11","overflowY","ModalGallery","dialogId","dialog","Event","trigger","galleryIndex","STICKY_SHADOW_CLASS","LIST_INFO_CONTAINER_EXPANDED_CLASS","LABEL_SHOW_MORE","stickyContainers","rect","getBoundingClientRect","listInfoTitles","titleHeights","tallestTitleHeight","listInfoContainers","listInfoContainer","toggleElement","LocationInformation","modifyLinkElements","modifyStrongElements","aElement","startsWith","onmouseover","onmouseout","SPECIALS_LIST_MOBILE_CLASS","SPECIALS_LIST_DESKTOP_CLASS","SPECIALS_LIST_SELECTOR","SHOW_ALL_SPECIALS_CLASS","SpecialsList","specialsContainer","updateAppearance","addEventListeners","headerShowMoreBtn","footerShowMoreBtn","toggleShowHideMore","updateLabelsShowBtn","span","REGION_CATEGORY_NATIONAL","RegionSpecialsList","showNationalBtn","showLocalBtn","itemsContainerLocal","itemsContainerNational","filterAndShowNational","filterAndShowLocal","onChangeSelectLocationSpecial","showItemsFromRegion","blockId","locationSelector","selectedLocation","selectedOptions","statusCode","populateSpecials","locationName","specials","special","specialType","card","contentSection","details","titleContent","createTextNode","label","valueContent","imageUrl","imageContainer","image","ctaSection","innerDiv","linkOne","linkUrl","linkTarget","linkTitle","linkOneTextSpan","linkOneTextSpanContent","linkText","chevronSpan","classNAme","chevronIcon","secondInnerDiv","linkTwo","partsConnectUrl","linkTwoTextSpan","linkTwoTextSpanContent","showPartsCtaText","showPartsCtaAccessibilityText","linkTwoAccessibilitySpan","linkTwoAccessibilitySpanContent","header","bodyDiv","bodyText","HeroCarouselCard","configureMediaControls","controlsWrapper","videoToggle","KEY_CODES","HeroCarousel","autoplayEnabled","addCtasListeners","updateControlsAndGliderPos","startGlideAutoSlide","buttons","pauseBtn","playBtn","currPage","currentSlide","controlBtn","btnss","btn","onKeyDownCtaControl","heroCarouselPosition","keyCode","focusActiveCard","onClickSlideButton","onPlayGlider","onKeyDownPlayGlider","onPauseGlider","onKeyDownPauseGlider","activeCta","focusVisible","resetActiveControlCtas","nextBtn","carouselPos","nextGliderSlide","openFiltersBtn","closeFiltersBtn","filterFlyout","filterFlyoutBg","isFlyoutShown","trap_focus","focusableEls","firstFocusableEl","lastFocusableEl","printButton","vehicleImage","vehicleDescription","vehicleDisclaimer","vehicleHeader","appendPrint","disclaimer","description","descriptionClone","print","PHONE_DEFAULT","transformFiftyFiftyElements","fiftyFiftyElements","fiftyFiftyElement","changePhoneStyle","changeTitleStyleToBold","SCROLL","slideNumber","touchHandler","overflowX","iterateGliders","carouselGliders","carouselGlider","hideSiblings","componentScript","componentScripts","Gallery","NewsletterSignup","LocationDetail","ModelSearch","VehicleDetail","CampaignCta","stickyCTA","GoogleAnalytics","ctas","ctasButton","cta","ctaText","ctaSplits","interaction","interactionTitle","interactionText","interactionName","interactionDestination","clickInteractionFull","interaction__type","interaction__text","interaction__name","interaction__destination","clickInteraction","clickToCallLinks","callLink","phoneNumber","handleCallLinks","formName","inputs","started","cmpCarousel","carousel","clickOnArrowFull","clickOnArrow","carouselDots","clickOnDotFull","clickOnDot","carouselImageCtas","handleCarousel","formStartedFull","formStarted","handleNewsletterForm","searchResults","searchTerm","resultsAmount","siteSearchFull","search__type","search__term","search__resultsNumber","search__metric","siteSearch","handleSimpleSearch","initGliderSwipe"],"sourceRoot":""}