{"version":3,"file":"a12b2aa3a93589168db6-main.js","mappings":"uBAAIA,E,iHCAJ,gBAEA,UA8GA,UA5GkKC,I,gBAW9J,OACI,2BAASC,UAAU,gBACf,wBAAMC,GAAG,eAAeC,OAAO,QAC3B,yBAAOC,KAAK,SAASC,KAAK,6BAA6BC,MAAON,EAAMO,QACpE,yBAAOH,KAAK,SAASC,KAAK,OAAOC,MAAyB,QAAlB,EAAAN,EAAMQ,QAAQJ,YAAI,QAAI,KAC9D,yBAAOA,KAAK,SAASC,KAAK,WAAWC,MAA6B,QAAtB,EAAAN,EAAMQ,QAAQC,gBAAQ,eAAEC,aACpE,yBAAON,KAAK,SAASC,KAAK,OAAOC,OAAO,IAAAK,YAAWX,EAAMQ,QAAQI,QACjE,yBAAOR,KAAK,SAASC,KAAK,OAAOC,MAAyB,QAAlB,EAAAN,EAAMQ,QAAQK,YAAI,eAAEC,QAExDd,EAAMQ,QAAQO,qBAAqBC,KAC/BC,GAAK,yBAAOb,KAAK,SAASC,KAAK,uBAAuBC,MAAOW,EAAEC,QAGvE,gCACI,+CACA,uBAAKjB,UAAU,iBACX,uBAAKA,UAAU,cACX,6CACA,uBAAKA,UAAU,iBACX,yBAAOG,KAAK,OAAOC,KAAK,YAAYc,UAAU,EAAMC,aAAa,iBAGzE,uBAAKnB,UAAU,cACX,4CACA,uBAAKA,UAAU,iBACX,yBAAOG,KAAK,OAAOC,KAAK,WAAWc,UAAU,EAAMC,aAAa,kBAGxE,uBAAKnB,UAAU,cACX,4CACA,uBAAKA,UAAU,iBACX,yBAAOG,KAAK,MAAMC,KAAK,YAAYc,UAAU,EAAMC,aAAa,UAGxE,uBAAKnB,UAAU,cACX,wCACA,uBAAKA,UAAU,iBACX,yBAAOG,KAAK,QAAQC,KAAK,QAAQc,UAAU,EAAMC,aAAa,cAK9E,4BAAUnB,UAAU,mBAChB,0CACA,uBAAKA,UAAU,OACX,uBAAKA,UAAsC,MAA1BD,EAAMQ,QAAQC,SAAmB,WAAa,YAC3D,sCACwB,mBAAvBT,EAAMQ,QAAQJ,KAEX,yB,iBACkB,2BACd,mEAGJ,yBACKJ,EAAMqB,SAASC,KAAK,2BACrB,6BAAQtB,EAAMqB,SAASE,QAAQC,Q,KAAWxB,EAAMqB,SAASE,QAAQE,K,IAAOzB,EAAMqB,SAASE,QAAQG,cAK7E,MAA1B1B,EAAMQ,QAAQC,SAEN,uBAAKR,UAAU,YACX,0CAEgC,IAA5BD,EAAMQ,QAAQC,SACR,2CAC4B,IAA3BT,EAAMQ,QAAQC,SACX,yBAAIT,EAAMQ,QAAQC,S,wBAClB,yBAAIT,EAAMQ,QAAQC,S,wBAKtC,KAEV,uBAAKR,UAAU,YACX,mCACA,yBAAsB,QAAlB,EAAAD,EAAMQ,QAAQI,YAAI,eAAEe,mBAAmB,QAAS,CAAEC,UAAW,WAErE,uBAAK3B,UAAU,YACX,mCACA,yBAAsB,QAAlB,EAAAD,EAAMQ,QAAQK,YAAI,a,EAAEC,M,MAA4B,QAAlB,EAAAd,EAAMQ,QAAQK,YAAI,a,EAAEgB,QAIlE,4BAAU5B,UAAU,eAChB,0BAAQG,KAAK,SAASH,UAAU,kBAAkB6B,QAAS,IAjG3E,WAEI,MAAMC,EAAOC,SAASC,cAAc,qBAChCF,EAAKG,kBAELH,EAAKI,QAEb,CA0FiFC,I,UACtD,qBAAGnC,UAAU,aAAY,cAAa,YAKhE,C,0FC7GL,gBACA,UACA,QACA,gBACA,UACA,UACA,UACA,UACA,UAUA,MAAaoC,UAAuBC,EAAMC,UAEtC,WAAAC,CAAYxC,GAERyC,MAAMzC,GAEN0C,KAAKC,MAAQ,CACTvC,KAAkC,IAA5BJ,EAAMqB,SAASuB,SAAiB,iBAAmB,KACzDnC,SAAU,KACVG,KAAM,KACNC,KAAM,KACNE,qBAAsB,GAE9B,CAEA,UAAA8B,CAAWzC,GAEPsC,KAAKI,SAAS,CACV1C,QAER,CAEA,cAAA2C,CAAetC,GAEXiC,KAAKI,SAAS,CACVrC,YAER,CAEA,UAAAuC,CAAWpC,GAEP8B,KAAKI,SAAS,CACVlC,QAER,CAEA,UAAAqC,CAAWpC,GAEP6B,KAAKI,SAAS,CACVjC,QAER,CAEA,0BAAAqC,CAA2BC,GAEvBT,KAAKI,SAAS,CACV/B,qBAAsBoC,GAE9B,CAEA,MAAAC,GAEI,MAAMC,EAAuB,GAe7B,OAdqC,IAAjCX,KAAK1C,MAAMqB,SAASuB,UAEpBS,EAAMC,KAAK,gBAAC,UAAc,CAACjC,SAAUqB,KAAK1C,MAAMqB,SAAUwB,WAAazC,GAASsC,KAAKG,WAAWzC,MAE5E,8BAApBsC,KAAKC,MAAMvC,MAEXiD,EAAMC,KAAK,gBAAC,UAAyB,CAACvC,qBAAsB2B,KAAKC,MAAM5B,qBAAsBwC,yBAA2BJ,GAAeT,KAAKQ,2BACvIC,GAAa9B,SAAUqB,KAAK1C,MAAMqB,YAG3CgC,EAAMC,KAAK,gBAAC,UAAc,CAACE,aAAcd,KAAK1C,MAAMwD,aAAcC,QAASf,KAAK1C,MAAMyD,QAASrD,KAAMsC,KAAKC,MAAMvC,KAAMK,SAAUiC,KAAKC,MAAMlC,SAAUsC,eAAiBtC,GAAaiC,KAAKK,eAAetC,GAAWuC,WAAapC,GAAS8B,KAAKM,WAAWpC,MACxPyC,EAAMC,KAAK,gBAAC,UAAc,CAACL,WAAapC,GAAS6B,KAAKO,WAAWpC,GAAOQ,SAAUqB,KAAK1C,MAAMqB,SAAUjB,KAAMsC,KAAKC,MAAMvC,KAAMQ,KAAM8B,KAAKC,MAAM/B,QAC/IyC,EAAMC,KAAK,gBAAC,UAAe,CAACjC,SAAUqB,KAAK1C,MAAMqB,SAAUd,MAAOmC,KAAK1C,MAAMO,MAAOC,QAASkC,KAAKC,SAG9F,gBAACL,EAAMoB,WAAU,KACb,gBAAC,UAAU,CAACC,aAAc,KAAK,MAAC,OAAAC,OAAOC,SAAS,CAAEC,IAAgD,QAA3C,EAAA9B,SAASC,cAAc,4BAAoB,eAAE8B,WAAY,EAAEC,SAAUX,EAAOY,IAAK,gBAAC,UAAoB,QAGzK,EAxEJ,kB,kEClBA,gBAEA,QACA,UA4EA,UAzE0PjE,IAEtP,MAAMkE,EAAUlE,EAAMwD,aAEtB,SAASW,EAAe1D,GAEpBT,EAAM+C,eAAetC,EACzB,CAkBA,MAAM2D,EAAM,IAAIC,KACVC,EAAQ,IAAID,KAAKD,EAAIG,cAAeH,EAAII,WAAYJ,EAAIK,WACxDC,EAAc,IAAIL,KAAKC,EAAMK,WACnCD,EAAYE,QAAQF,EAAYD,UAAY,GAC5C,MAAMI,EAAW7E,EAAMyD,QAAQqB,MAAM,KAC/BC,EAA0B,IAApBF,EAASG,OACf,IAAIX,KAAKY,SAASJ,EAAS,IAAKI,SAASJ,EAAS,IAAM,EAAGI,SAASJ,EAAS,KAC7EH,EACAQ,EAAM,IAAIb,KAAKU,EAAIJ,WAGzB,OAFAO,EAAIN,QAAQG,EAAIN,UAAY,IAGxB,+BAEuB,mBAAfzE,EAAMI,KAEE,uBAAKH,UAAU,kBACX,iEACA,4RACA,yJACA,gDACA,0BACI,sBAAIA,UAA8B,IAAnBD,EAAMS,SAAiB,SAAW,GAAIqB,QAAS,IAAMqC,EAAe,IAAE,KACrF,sBAAIlE,UAA8B,IAAnBD,EAAMS,SAAiB,SAAW,GAAIqB,QAAS,IAAMqC,EAAe,IAAE,KACrF,sBAAIlE,UAA8B,IAAnBD,EAAMS,SAAiB,SAAW,GAAIqB,QAAS,IAAMqC,EAAe,IAAE,KACrF,sBAAIlE,UAA8B,IAAnBD,EAAMS,SAAiB,SAAW,GAAIqB,QAAS,IAAMqC,EAAe,IAAE,KACrF,sBAAIlE,UAA8B,IAAnBD,EAAMS,SAAiB,SAAW,GAAIqB,QAAS,IAAMqC,EAAe,IAAE,KACrF,sBAAIlE,UAA8B,IAAnBD,EAAMS,SAAiB,SAAW,GAAIqB,QAAS,IAAMqC,EAAe,IAAE,KACrF,sBAAIlE,UAA8B,IAAnBD,EAAMS,SAAiB,SAAW,GAAIqB,QAAS,IAAMqC,EAAe,IAAE,MACrF,sBAAIlE,WAA+B,IAApBD,EAAMS,SAAkB,SAAW,GAAIqB,QAAS,IAAMqC,GAAgB,IAAE,SAK/F,uBAAKlE,UAAU,kBACX,0JAKG,mBAAfD,EAAMI,MAA6BJ,EAAMS,SACnC,gBAAC,UAAQ,CAACgD,QAASsB,EAAKI,QAASD,EAAKE,aAAepF,GAhDvE,SAAwBA,GAEpB,MAAMqF,EAAMrF,EAAMY,KAAK0E,SACjBC,GAAa,IAAA5E,YAAWX,EAAMY,MACpC,OAAwC,IAAjCsD,EAAQsB,QAAQD,IAA6B,GAAPF,GAAmB,GAAPA,CAC7D,CA2CiFI,CAAezF,GAAQ0F,SAAWpF,IAAgBqF,OAzD/G/E,EAyD0HN,EAvD1IN,EAAMgD,WAAWpC,QACbZ,EAAM4F,UAEN5F,EAAM4F,YALd,IAAoBhF,CAyDgI,IAClI,KAGjB,C,kEC5EL,gBACA,UAkMA,UAtKoPZ,I,MAEhP,MAAO6F,EAAMC,IAAW,IAAAC,UAAqC,CACzDC,QAAQ,EACRC,OAAO,EACPC,cAAc,EACdC,YAAa,KACbhD,WAAY,KAgBhB,SAASiD,IAELN,EAAQ,CAAEE,OAAQH,EAAKG,OAAQC,MAAOJ,EAAKI,MAAOC,cAAc,EAAOC,YAAaN,EAAKM,YAAahD,WAAY0C,EAAK1C,YAC3H,CAgCA,MAAMkD,EAAM,aAAarG,EAAMqB,SAASH,2CACnC2E,EAAKG,QAENM,MAAMD,GACDE,MAAKC,IAEFA,EAASC,OACJF,MAAME,IAEHX,EAAQ,CAAEE,QAAQ,EAAMC,OAAO,EAAOC,aAAcL,EAAKK,aAAcC,YAAa,KAAMhD,WAAYsD,GAAO,IAEhHC,OAAM,KAEHZ,EAAQ,CAAEE,QAAQ,EAAMC,OAAO,EAAMC,cAAc,EAAOC,YAAa,KAAMhD,WAAY,IAAK,GAChG,IAETuD,OAAM,KAEHZ,EAAQ,CAAEE,QAAQ,EAAMC,OAAO,EAAMC,cAAc,EAAOC,YAAa,KAAMhD,WAAY,IAAK,IAI1G,MAAMwD,EAAe3G,EAAMe,qBAAqBC,KAAIC,GAAKA,EAAEC,MAC3D,IAAI0F,EAAqBf,EAAK1C,WAAW0D,QAAO5F,IAAsC,IAAjC0F,EAAanB,QAAQvE,EAAEoF,OAC5E,GAAIR,EAAKM,aAAeN,EAAKM,YAAYnB,OAAS,EAClD,CACI,MAAM8B,EAAQjB,EAAKM,YAAYY,cAC/BH,EAAqBA,EAAmBC,QAAO5F,IACF,IAAzCA,EAAEZ,KAAK0G,cAAcvB,QAAQsB,KAC0B,IAApD7F,EAAE+F,QAAQC,QAAQF,cAAcvB,QAAQsB,KACe,IAAvD7F,EAAE+F,QAAQE,WAAWH,cAAcvB,QAAQsB,I,CAGlDF,EAAmB5B,OAAS,IAE5B4B,EAAqBA,EAAmBO,MAAM,EAAG,IAGrD,MAAMC,EAA8C,IAA9BR,EAAmB5B,OAEzC,OACI,+BACI,uBAAK/E,UAAU,kBACX,+CACA,wEAEI4F,EAAKG,OACCH,EAAKI,MAEH,uBAAKhG,UAAU,iCAA+B,yDAC5CD,EAAMe,qBAAqBiE,QAAU,EACjC,KAEF,uBAAK/E,UAAU,gBACX,uBAAKA,UAAU,UACX,uBAAKA,UAAU,yBAAyBoH,MAAO,CAAEC,QAASzB,EAAKK,aAAe,QAAU,QAAUpE,QAAS,IAAMsE,MACjH,uBAAKnG,UAAU,aAAasH,QAAS,KA9FrEzB,EAAQ,CAAEE,OAAQH,EAAKG,OAAQC,MAAOJ,EAAKI,MAAOC,cAAc,EAAMC,YAAaN,EAAKM,YAAahD,WAAY0C,EAAK1C,YA8F7B,GACrD,yBAAOkE,MAAO,CAAEG,UAAW,SAAQ,4EACnC,uBAAKvH,UAAU,2CACX,yBAAOG,KAAK,OAAOqH,YAAa,mCAAmCzH,EAAMqB,SAASuB,oBAAqB8C,SAAWgC,IAAOC,OAzFhJb,EAyF4JY,EAAGE,cAActH,WAvF9LwF,EAAQ,CAAEE,OAAQH,EAAKG,OAAQC,MAAOJ,EAAKI,MAAOC,cAAc,EAAMC,YAAaW,EAAO3D,WAAY0C,EAAK1C,aAF/G,IAAqB2D,CAyFmL,EAAExG,MAAuB,QAAhB,EAAAuF,EAAKM,mBAAW,QAAI,KACzL,uBAAKlG,UAAU,oBAAoBoH,MAAO,CAAEC,QAASzB,EAAKK,aAAe,QAAU,SAE3EkB,EACM,uBAAKnH,UAAU,2BAAyB,qDACxC2G,EAAmB5F,KAAIC,GACrB,uBAAKhB,UAAU,yBAAyB4H,IAAK,qBAAqB5G,EAAEoF,MAAOvE,QAAS,IArFhJ,SAA+BT,GAE3B,MAAM8B,EAAanD,EAAMe,qBACzBoC,EAAWG,KAAK,CACZhC,KAAMD,EAAShB,KACfa,IAAKG,EAASgF,IACdyB,SAAUzG,EAAS0G,SACnBnF,SAAUvB,EAASZ,SACnBc,QAAS,CACLC,QAASH,EAAS2F,QAAQC,QAC1Be,QAAS3G,EAAS2F,QAAQiB,QAC1BxG,KAAMJ,EAAS2F,QAAQkB,KACvBC,OAAQ9G,EAAS2F,QAAQoB,OACzB1G,WAAYL,EAAS2F,QAAQE,cAGrClH,EAAMuD,yBAAyBJ,GAC/BiD,GACJ,CAmEsJiC,CAAsBpH,IAC5G,uBAAKqH,IAAKrH,EAAE8G,SAAUQ,IAAKtH,EAAEZ,OAC7B,2BACI,0BAAKY,EAAEZ,MACP,yBAAIY,EAAE+F,QAAQC,Q,KAAWhG,EAAE+F,QAAQkB,K,IAAOjH,EAAE+F,QAAQE,aAExD,qBAAGjH,UAAU,aAAY,cAAa,iBAShF,uBAAKA,UAAU,eAAc,qBAAGA,UAAU,gC,uCAGxD,uBAAKA,UAAU,mCACX,uBAAKA,UAAU,2BACX,uBAAKqI,IAAKtI,EAAMqB,SAASyG,SAAUS,IAAKvI,EAAMqB,SAASC,KAAMrB,UAAU,iBACvE,0BAAKD,EAAMqB,SAASC,MACpB,yBAAItB,EAAMqB,SAASE,QAAQC,Q,KAAWxB,EAAMqB,SAASE,QAAQE,K,IAAOzB,EAAMqB,SAASE,QAAQG,aAG3F1B,EAAMe,qBAAqBC,KAAIwH,GAC3B,uBAAKvI,UAAU,0BAA0B4H,IAAK,uBAAuBW,EAAEtH,OACnE,0BAAQd,KAAK,SAASH,UAAU,kBAAkB6B,QAAS,KAAM2G,OArHvDC,EAqHgFF,EAAEtH,SAnHhHlB,EAAMuD,yBAAyBvD,EAAMe,qBAAqB8F,QAAO5F,GAAKA,EAAEC,MAAQwH,KAFpF,IAAkCA,CAqHsF,QAChG,uBAAKJ,IAAKE,EAAEV,SAAUS,IAAKC,EAAElH,KAAMrB,UAAU,iBAC7C,0BAAKuI,EAAElH,MACP,yBAAIkH,EAAEjH,QAAQC,Q,KAAWgH,EAAEjH,QAAQE,K,IAAO+G,EAAEjH,QAAQG,gBAIpE,4BAAUzB,UAAU,eAChB,0BAAQG,KAAK,SAASH,UAAU,kBAAkB6B,QAAS,KAlJ/D9B,EAAM4F,UAEN5F,EAAM4F,UAgJ4E,G,UACnE,qBAAG3F,UAAU,aAAY,cAAa,WAI5D,C,kEChML,gBACA,UAEA,UA+GA,UAhGuMD,IAEnM,IAAKA,EAAMI,OAASJ,EAAMY,KAEtB,OAAO,KAGX,MAAOiF,EAAMC,IAAW,IAAAC,UAA0B,CAC9CC,QAAQ,EACRC,OAAO,EACP0C,GAAI,GACJC,GAAI,GACJC,YAAa,KACbC,YAAa,KACbC,cAAe,OAGnB,SAASC,EAAWnI,GAEhBb,EAAMiD,WAAWpC,GACbb,EAAM4F,UAEN5F,EAAM4F,UAEd,CAEA,SAASqD,EAAgBC,GAErBpD,EAAQ,CAAEE,OAAQH,EAAKG,OAAQC,MAAOJ,EAAKI,MAAO0C,GAAI9C,EAAK8C,GAAIC,GAAI/C,EAAK+C,GAAIC,YAAahD,EAAKgD,YAAaC,YAAajD,EAAKiD,YAAaC,cAAeG,GAC7J,CAEA,MAAMtI,GAAO,IAAAD,YAAWX,EAAMY,MAC9B,IAAKiF,EAAKgD,cAAgB7I,EAAMI,MAAQyF,EAAKiD,cAAgBlI,KAAUiF,EAAKI,MAC5E,CACI,MAAMI,EAAkC,IAA5BrG,EAAMqB,SAASuB,SACrB,iCAAiC5C,EAAMI,QAAQQ,IAC/C,aAAaZ,EAAMqB,SAASH,oCAAoClB,EAAMI,QAAQQ,IAEpF0F,MAAMD,GACDE,MAAKC,IAEFA,EAASC,OACJF,MAAME,IAEHX,EAAQ,CAAEE,QAAQ,EAAMC,OAAO,EAAO0C,GAAIlC,EAAKkC,GAAIC,GAAInC,EAAKmC,GAAIC,YAAa7I,EAAMI,KAAM0I,YAAalI,EAAMmI,cAAe,MAAO,IAErIrC,OAAM,KAEHZ,EAAQ,CAAEE,OAAQH,EAAKG,OAAQC,OAAO,EAAM0C,GAAI9C,EAAK8C,GAAIC,GAAI/C,EAAK+C,GAAIC,YAAa,KAAMC,YAAa,KAAMC,cAAe,MAAO,GACpI,IAETrC,OAAM,KAEHZ,EAAQ,CAAEE,OAAQH,EAAKG,OAAQC,OAAO,EAAM0C,GAAI9C,EAAK8C,GAAIC,GAAI/C,EAAK+C,GAAIC,YAAa,KAAMC,YAAa,KAAMC,cAAe,MAAO,G,CAI9I,OAAIlD,EAAKI,MAEG,2BAAShG,UAAU,qBAAmB,mDAEzC4F,EAAKG,OAGN,+BACI,uBAAK/F,UAAU,iBACX,uBAAKA,UAAU,eACX,0BAAKD,EAAMY,KAAKe,mBAAmB,QAAS,CAAEC,UAAW,WAE7D,uBAAK3B,UAAU,cACX,0BAAQG,KAAK,SAASH,UAAkC,OAAvB4F,EAAKkD,cAAyB,SAAW,GAAIjH,QAAS,IAAMmH,EAAgB,OAAK,MAClH,0BAAQ7I,KAAK,SAASH,UAAkC,OAAvB4F,EAAKkD,cAAyB,SAAW,GAAIjH,QAAS,IAAMmH,EAAgB,OAAK,OAEtH,uBAAKhJ,UAAU,gBACa,OAAvB4F,EAAKkD,cAEF,0BACKlD,EAAK8C,GAAG3H,KAAIC,GAAK,sBAAI4G,IAAK,GAAG5G,EAAEH,SAASG,EAAEY,MAAOC,QAAS,IAAMkH,EAAW/H,IAAKA,EAAEH,M,MAAUG,EAAEY,QAGnG,0BACKgE,EAAK+C,GAAG5H,KAAIC,GAAK,sBAAI4G,IAAK,GAAG5G,EAAEH,SAASG,EAAEY,MAAOC,QAAS,IAAMkH,EAAW/H,IAAKA,EAAEH,M,MAAUG,EAAEY,SAI3G,qBAAG5B,UAAU,e,iDAA4D,qBAAGkJ,KAAK,eAAa,c,OAOlG,2BAASlJ,UAAU,eAAc,qBAAGA,UAAU,gC,iFC9G9D,gBA4EA,UAxEwJD,IAEpJ,SAASoJ,EAAWhJ,GAEhBJ,EAAM6C,WAAWzC,GACbJ,EAAM4F,UAEN5F,EAAM4F,UAEd,CAEA,OACI,2BAAS3F,UAAU,gBACf,yBAAO6B,QAAS,IAAMsH,EAAW,kBAC7B,uBAAKnJ,UAAU,UACX,uBAAKA,UAAU,gBACX,uBAAKoJ,MAAM,6BAA6BC,QAAQ,uBAC5C,qBAAGC,UAAU,wBACT,wBAAMC,EAAE,wXAAwXD,UAAU,qBAAqBE,KAAK,YACpa,qBAAGF,UAAU,8BACT,wBAAMC,EAAE,yKAAyKD,UAAU,+BAA+BE,KAAK,gBAM/O,uBAAMxJ,UAAU,kBACZ,iDAEJ,uBAAMA,UAAU,eACZ,yBACI,8BAASD,EAAMqB,SAASC,MAAc,2BACtC,6BAAQtB,EAAMqB,SAASE,QAAQC,Q,KAAWxB,EAAMqB,SAASE,QAAQE,K,IAAOzB,EAAMqB,SAASE,QAAQG,gBAK/G,yBAAQI,QAAS,IAAMsH,EAAW,8BAC9B,uBAAKnJ,UAAU,UACX,uBAAKA,UAAU,gBACX,uBAAKoJ,MAAM,6BAA6BC,QAAQ,uBAC5C,qBAAGC,UAAU,wBACT,wBAAMC,EAAE,wXAAwXD,UAAU,qBAAqBE,KAAK,YACpa,wBAAMD,EAAE,sLAAsLD,UAAU,qBAAqBE,KAAK,eAK9O,uBAAMxJ,UAAU,kBACZ,0EAIZ,yBAAQ6B,QAAS,IAAMsH,EAAW,mBAC9B,uBAAKnJ,UAAU,UACX,uBAAKA,UAAU,gBACX,uBAAKoJ,MAAM,6BAA6BC,QAAQ,uBAC5C,qBAAGC,UAAU,8BACT,wBAAMC,EAAE,yXAAyXC,KAAK,YACtY,wBAAMD,EAAE,k7BAAk7BC,KAAK,eAI38B,uBAAMxJ,UAAU,kBACZ,qEAKnB,C,oFC1CL,sBAA2BW,GAEvB,IAAKA,EAED,MAAO,GAGX,MAAM8I,EAAO9I,EAAK2D,cACZoF,EAAQ/I,EAAK4D,WAAa,EAC1Ba,EAAMzE,EAAK6D,UAEjB,MAAO,GAAGiF,KAAQC,EAAQ,GAAK,IAAM,KAAKA,KAAStE,EAAM,GAAK,IAAM,KAAKA,GAC7E,C,YC3CA,IAAIuE,EAAiC,KACjCC,EAAwB,KACxBC,EAAwB,KAE5B,SAASC,EAAWrC,GAEhB,IAAKkC,IAAUC,IAAWC,EAEtB,OAGJ,MAAME,EAAatC,EAAGE,cAChBqC,EAAajI,SAASC,cAAc,cAAc+H,EAAW3J,KAAK6J,QAAQL,EAAQC,OACnFG,IAAcL,EAAMO,UAKzBF,EAAW3J,MAAQ0J,EAAW1J,MAClC,CAEA,SAAS8J,EAAgB1C,GAErB,IAAKkC,IAAUC,IAAWC,EAEtB,OAGJ,MAAMO,EAA4CrI,SAASsI,iBAAiB,eAAeR,MAC3F,IAAK,MAAMS,KAAQF,EAGf,GADAE,EAAKC,UAAYZ,EAAMO,QACb,MAANzC,GAA0B,WAAZA,EAAGtH,KAEjB,GAAIwJ,EAAMO,QAEVI,EAAKjK,MAAQ,OAGb,CACI,MAAM0J,EAAahI,SAASC,cAAc,cAAcsI,EAAKlK,KAAK6J,QAAQJ,EAAQD,OAC9EG,IAEAO,EAAKjK,MAAQ0J,EAAW1J,M,CAMxC,MAAMmK,EAAWzI,SAASC,cAAc,4BACpCwI,IAEAA,EAASpD,MAAMC,QAAUsC,EAAMO,QAAU,QAAU,OAE3D,CA8BAvG,OAAO8G,iBAAiB,QA5BxB,WAGI,GADAd,EAAQ5H,SAAS2I,eAAe,0BAC3Bf,IAAUA,EAAMgB,QAAQC,YAAcjB,EAAMgB,QAAQE,UAErD,OAGJjB,EAASD,EAAMgB,QAAQC,UACvBf,EAASF,EAAMgB,QAAQE,UAEvBlB,EAAMc,iBAAiB,SAAUN,GACjCA,EAAgB,MAEhB,MAAMW,EAA+C/I,SAASsI,iBAAiB,eAAeT,MAC9F,IAAK,MAAMU,KAAQQ,EACnB,CACI,MAAMd,EAAajI,SAASC,cAAc,cAAcsI,EAAKlK,KAAK6J,QAAQL,EAAQD,EAAMgB,QAAQE,eAC3Fb,IAKLe,QAAQC,IAAI,SAAShB,EAAW5J,QAChCkK,EAAKG,iBAAiB,SAAUX,G,CAExC,G,oFClFA,MAAMmB,EAAkC,GAExC,MAAMC,EAQF,WAAA3I,CAAY4I,G,QAHJ,KAAAC,MAAiC,KAKrC3I,KAAK0I,UAAYA,EACjB1I,KAAK4I,MAAQ5I,KAAK0I,UAAUR,QAAQU,MAC9BrG,SAASvC,KAAK0I,UAAUR,QAAQU,OAChC,IAEN5I,KAAK6I,KAAmC,QAA5B,EAAA7I,KAAK0I,UAAUI,qBAAa,eAAEvJ,cAAc,aACpDS,KAAK6I,MAEL7I,KAAK6I,KAAKb,iBAAiB,SAAUhD,IAEjCA,EAAG+D,iBACH/I,KAAKgJ,cAAc,IAI3BhJ,KAAKiJ,KAAmC,QAA5B,EAAAjJ,KAAK0I,UAAUI,qBAAa,eAAEvJ,cAAc,aACpDS,KAAKiJ,MAELjJ,KAAKiJ,KAAKjB,iBAAiB,SAAUhD,IAEjCA,EAAG+D,iBACH/I,KAAKkJ,eAAe,IAIxBlJ,KAAK0I,UAAUR,QAAQd,SAEvBpH,KAAK2I,MAAQrJ,SAASC,cAAcS,KAAK0I,UAAUR,QAAQd,SAG/D,MAAM+B,EAAmB,GACzB,IAAK,IAAIC,EAAI,EAAGA,EAAIpJ,KAAK0I,UAAUW,WAAW/G,OAAQ8G,IACtD,CACI,MAAME,EAAQtJ,KAAK0I,UAAUW,WAAWD,GAEpCE,EAAMC,UAAYC,KAAKC,aAEvBN,EAASvI,KAAK0I,EAAMI,WAAU,IAI9BJ,EAAMK,Q,CAIV3J,KAAK4I,MAAQ,GAEbgB,aAAY,IAAM5J,KAAKkJ,iBAAiBlJ,KAAK4I,MAErD,CAEQ,aAAAM,GAIJ,GAFAlJ,KAAK0I,UAAUmB,UAAUC,IAAI,QAEzB9J,KAAK2I,OAAS3I,KAAK0I,UAAUW,WAAW/G,QAAU,EACtD,CACI,MACMyH,EADY/J,KAAK0I,UAAUW,WAAWW,KAAK,GACrBzK,cAAc,OACtCwK,IAEA/J,KAAK2I,MAAM/C,IAAMmE,EAAUnE,I,CAInCqE,YAAW,IAAMjK,KAAKkK,sBAAsB,IAChD,CAEQ,kBAAAA,GAEJ,MAAMC,EAAQnK,KAAK0I,UAAUW,WAAWW,KAAK,GAC7ChK,KAAK0I,UAAU0B,YAAYD,GAE3BnK,KAAK0I,UAAUmB,UAAUF,OAAO,OACpC,CAEQ,YAAAX,GAEJ,MAAMqB,EAAOrK,KAAK0I,UAAUW,WAAWW,KAAKhK,KAAK0I,UAAUW,WAAW/G,OAAS,GAC/E,GAAItC,KAAK2I,MACT,CACI,MAAM2B,EAAaD,EAAqB9K,cAAc,OAClD+K,IAEAtK,KAAK2I,MAAM/C,IAAM0E,EAAU1E,I,CAInC5F,KAAK0I,UAAU6B,QAAQF,GAEvBrK,KAAK0I,UAAUmB,UAAUC,IAAI,QAC7B5I,OAAOsJ,uBAAsB,IAAMxK,KAAK0I,UAAUmB,UAAUC,IAAI,SAChEG,YAAW,IAAMjK,KAAKyK,qBAAqB,IAC/C,CAEQ,iBAAAA,GAEJzK,KAAK0I,UAAUmB,UAAUF,OAAO,QAChC3J,KAAK0I,UAAUmB,UAAUF,OAAO,MACpC,EAGJ,wBAEI,MAAMe,EAAUpL,SAASsI,iBAAiB,kBAE1C,IAAK,IAAIwB,EAAI,EAAGA,EAAIsB,EAAQpI,OAAQ8G,IAEhCZ,EAAgB5H,KAAK,IAAI6H,EAAaiC,EAAQtB,IAEtD,C,kEClGA,gBACA,UAUA,MAAMuB,EAEF,MAAAjK,EAAO,MAAEkK,EAAK,SAAEC,GAAqBC,GAEjC,MAAMC,EAAM7J,OAAO8J,KAAK,uQAQxB,OAAO,IAAIC,OAAOC,KAAKC,OAAO,CAC1BN,WACAO,KAAM,CACFzH,IAAK,6BAA6BoH,IAClCM,WAAY,IAAIJ,OAAOC,KAAKI,KAAK,GAAI,KAEzCC,MAAO,CACHC,KAAMC,OAAOb,GACbc,MAAO,OACPC,SAAU,QAEdC,MAAO,cAAchB,YAErBiB,OAAQC,OAAOb,OAAOC,KAAKC,OAAOY,YAAcnB,GAExD,EAIJ,IAAItM,EACA0N,EACAC,EAQAC,EACAC,EAEAC,EATAC,EAAiC,KACjCC,EAAoC,KACpCC,EAAwC,KACxCC,EAAmC,KAEnCC,EAAe,IAAIC,MAMvB,SAASC,EAAaC,EAA0BC,GAE1B,MAAdb,GAEAA,EAAWc,QAGf,IAAIC,EAAc,kCACdH,EAAUjJ,MAEVoJ,GAAe,YAAYH,EAAUjJ,SAErCiJ,EAAUI,gBAEVD,GAAe,aAAaH,EAAUI,4BAE1CD,GAAe,OAAOH,EAAUjP,eAAeiP,EAAUtI,QAAQC,UAC7DqI,EAAUtI,QAAQiB,UAElBwH,GAAe,SAASH,EAAUtI,QAAQiB,WAE1CqH,EAAUtI,QAAQkB,OAElBuH,GAAe,SAASH,EAAUtI,QAAQkB,QAE1CoH,EAAUtI,QAAQoB,SAElBqH,GAAe,SAASH,EAAUtI,QAAQoB,UAE1CkH,EAAUtI,QAAQE,aAElBuI,GAAe,SAASH,EAAUtI,QAAQE,cAE9CuI,GAAe,OACXH,EAAUjJ,MAEVoJ,GAAe,QAEnBA,GAAe,SACff,EAAa,IAAIf,OAAOC,KAAK+B,WAAW,CACpCC,QAASH,IAGbf,EAAWmB,KAAK7O,EAAKuO,EACzB,CAEA,SAASO,EAAUjK,GAIf,GAFAiJ,EAAWjJ,EAAKkK,aAEE,MAAdhB,EAEA,OAGJ,IAAIiB,EAAUjB,EAAWnE,QAAQoF,QAClB,MAAXA,GAEAC,EAAEC,KAAK,CACH7J,IAAK2J,EACLG,SAAUC,GAGtB,CAEA,SAASA,EAAgBvK,G,MAErB,GAAkB,MAAdkJ,EAEA,OAGJ,MAAMsB,EAAaC,KAAKC,MAAM1K,EAAK2K,cAEnCxP,EAAM,IAAI2M,OAAOC,KAAK6C,IAAI1B,EACtB,CACI2B,KAAM,GACNC,OAAQ,IAAIhD,OAAOC,KAAKgD,OAAO,EAAG,GAClCC,UAAWlD,OAAOC,KAAKkD,UAAUC,QACjCC,OAAQlC,IAGhB,IAAK,IAAIhD,EAAI,EAAGA,EAAIuE,EAAWrL,OAAQ8G,IACvC,CACI,MAAMwD,EAAYe,EAAWvE,GACvBmF,EAAQ,IAAItD,OAAOC,KAAKgD,OAAOtB,EAAU4B,SAAU5B,EAAU6B,WAE7D5B,EAAS,IAAI5B,OAAOC,KAAKC,OAAO,CAClC7M,IAAKA,EACLuM,SAAU0D,EACV3C,MAAOgB,EAAUjP,KACjByN,KAAgC,QAA1B,EAAAwB,EAAU8B,wBAAgB,QAAI,gCAGxCzD,OAAOC,KAAKyD,MAAMC,YAAY/B,EAC1B,SACA,WAEIF,EAAaC,EAAW5M,KAC5B,IAEsB,IAAtB2N,EAAWrL,QAA+C,SAA/B+J,EAAWnE,QAAQ2G,SAE9ClC,EAAaC,EAAWC,GAG5BJ,EAAa7L,KAAKiM,E,CAGtB,IAAI,EAAAiC,gBAAgB,CAAEC,QAAStC,EAAcnO,MAAK0Q,SAAU,IAAIrE,IAMpE,WAEI,GAAW,MAAPrM,EAEA,OAGJ,MAAM2Q,EAAS,IAAIhE,OAAOC,KAAKgE,aAC/BzC,EAAa0C,SAASvR,IAElB,IAAI2Q,EAAQ3Q,EAAMwR,cACL,MAATb,GAEAU,EAAOI,OAAOd,E,IAItBtD,OAAOC,KAAKyD,MAAMC,YAAYtQ,EAC1B,gBACA,KAEI,MAAMgR,EAA2BrE,OAAOC,KAAKyD,MAAMC,YAAYtQ,EAC3D,kBACA,WAEI,MAAMiR,EAAcvP,KAAKwP,UACrBD,GAAeA,EAAc,IAAMtD,IAGnCjM,KAAKyP,QAAQ,IACbxD,GAAc,GAElBhB,OAAOC,KAAKyD,MAAMe,eAAeJ,EACrC,GAAE,IAGd,MAAMK,EAAYrQ,SAASC,cAAc,yBACrCoQ,GAEAA,EAAU3H,iBAAiB,gBAAgB,KAEvCM,QAAQC,IAAI,cACZ,MAAM0G,EAAS,IAAIhE,OAAOC,KAAKgE,aAC/BzC,EAAa0C,SAASvR,IAElB,IAAI2Q,EAAQ3Q,EAAMwR,cACL,MAATb,GAEAU,EAAOI,OAAOd,E,IAGtBtC,GAAc,EACd3N,EAAIsR,UAAUX,EAAO,IAI7BhD,GAAc,EACd3N,EAAIsR,UAAUX,EAClB,CA9DIY,GA6JJ,WAEI,GAAqB,MAAjBvD,EAEA,OAGJ,MAAM9F,EAAQlH,SAASwQ,cAAc,OACrCtJ,EAAMjJ,UAAY,cAElB,MAAMwS,EAAczQ,SAASwQ,cAAc,SAC3CC,EAAYrS,KAAO,OACnBqS,EAAYC,aAAe,cAC3BD,EAAYhL,YAAc,yBAC1BgL,EAAYxS,UAAY,eACxBwS,EAAY/H,iBAAiB,UAAWiI,GACxCzJ,EAAM4D,YAAY2F,GAElB,MAAMG,EAAS5Q,SAASwQ,cAAc,UACtCI,EAAOxS,KAAO,SACdwS,EAAO3S,UAAY,eACnB2S,EAAOlI,iBAAiB,SAAUhD,GAAOmL,EAAenL,KAExD,MAAMoG,EAAO9L,SAASwQ,cAAc,KAOpC,GANA1E,EAAK7N,UAAY,oBAEjB2S,EAAO9F,YAAYgB,GACnB5E,EAAM4D,YAAY8F,GAClB5D,EAAclC,YAAY5D,GAEtBiG,EAAanK,OAAS,EAC1B,CACI,MAAM8N,EAAS9Q,SAASwQ,cAAc,UACtCM,EAAO7S,UAAY,oBAEnB,IAAK,IAAI6L,EAAI,EAAGA,EAAIqD,EAAanK,OAAQ8G,IACzC,CACI,MAAMmC,EAAQkB,EAAarD,GAAGiH,WAC9B,GAAa,MAAT9E,EAEA,SAGJ,MAAM+E,EAAShR,SAASwQ,cAAc,UACtCQ,EAAO1S,MAAQwL,EAAEmH,QAAQ,GACzBD,EAAO9E,KAAOD,EAEd6E,EAAOhG,YAAYkG,E,CAGvBF,EAAOpI,iBAAiB,UAAWhD,IAAkC,IAArB+K,EAAYnS,OAAauS,EAAenL,EAAG,IAE3FsH,EAAc/B,QAAQ6F,E,CAG1B5D,EAAelN,SAASwQ,cAAc,OACtCtD,EAAajP,UAAY,0BACzBiP,EAAa7H,MAAMC,QAAU,OAC7B4H,EAAagE,UAAY,2DACzBlE,EAAclC,YAAYoC,GAE1BN,EAAoB,IAAIjB,OAAOC,KAAKuF,kBACpCtE,EAAoB,IAAIlB,OAAOC,KAAKwF,kBACxC,CA3NIC,EACJ,CA8DA,SAASV,EAAsBjL,GAEZ,UAAXA,EAAGG,MAEHH,EAAG+D,iBACHoH,EAAenL,GAEvB,CAEA,SAASmL,EAAenL,GAEpB,GAAwB,MAApBA,EAAGE,cAEH,OAGJ,IAAI0L,EAAc5L,EAAGE,cACrB,KAA4D,MAArD0L,EAAYC,WAAWC,aAAa,eAC3C,CACI,GAAiC,MAA7BF,EAAY9H,cAEZ,OAGJ8H,EAAcA,EAAY9H,a,CAG9B,MAAMiI,EAAYH,EAAYrR,cAAc,SAC5C,GAAiB,MAAbwR,EAEA,OAGJ,MAAMC,EAAcD,EAAUnT,MAE9B,GAAyB,MAArB2O,EAEA,OAGJJ,EAAkB8E,OAAO3S,GACzB6N,EAAkB+E,SAAS3E,GAG3B,IAAIwD,EAAqD,KAEzD,GAAItD,EAAanK,OAAS,EAC1B,CACI,MAAM6O,EAAiB7E,aAAa,EAAbA,EAAe/M,cAAc,UAC9B,MAAlB4R,IAEApB,EAActD,EAAalK,SAAS4O,EAAevT,QAAQwR,c,MAK/DW,EAActD,EAAa,GAAG2C,cAGf,MAAfW,GAKJ7D,EAAkBkF,MAAM,CACpBC,OAAQL,EACRjB,YAAaA,EACbuB,WAAYrG,OAAOC,KAAKqG,WAAWC,QACnCC,WAAYxG,OAAOC,KAAKwG,WAAWC,SACnCC,0BAA0B,GAC3BC,EACP,CAEA,SAASA,EAAkBC,EAA6CC,GAE3C,MAArBxF,GAA6C,MAAhBC,GAAkC,MAAVsF,IAKrDC,IAAW9G,OAAOC,KAAK8G,iBAAiBC,IAExC1F,EAAkB5H,MAAMC,QAAU,QAClC4H,EAAa7H,MAAMC,QAAU,OAC7BuH,EAAkB+F,cAAcJ,KAIhCvF,EAAkB5H,MAAMC,QAAU,OAClC4H,EAAa7H,MAAMC,QAAU,SAErC,CA8FA1D,OAAOiR,kBA3BP,W,MAEI,IAAItK,EAAOvI,SAASC,cAAc,oBAClC,GAAY,MAARsI,GAAiBA,aAAgBuK,YACrC,CACI/F,EAAaxE,EAEb,MAAMwK,EAAoC,QAAxB,EAAAhG,EAAWnE,QAAQoK,aAAK,QAAI,uBAC9C/E,EAAEC,KAAK,CACH7J,IAAK0O,EACL5E,SAAUL,G,CAIlBvF,EAAOvI,SAASC,cAAc,mBAClB,MAARsI,GAAiBA,aAAgBuK,cAEjC9F,EAAgBzE,GAGpBA,EAAOvI,SAASC,cAAc,uBAClB,MAARsI,GAAiBA,aAAgBuK,cAEjC7F,EAAoB1E,EAE5B,C,kECvbA,gBA6BA,UA1BsFvK,IAElF,IAAKA,EAAMiV,aAAejV,EAAMkV,YAE5B,OAAO,KAWX,MAAMC,EAA0B,GAChC,IAAK,IAAIrJ,EAAI,EAAGA,GAAK9L,EAAMiV,WAAYnJ,IAEnCqJ,EAAS7R,KAAK,sBAAIuE,IAAK,mBAAmBiE,IAAK7L,UAAY6L,IAAM9L,EAAMkV,YAAc,SAAW,GAAKpT,QAAS,KAAMsT,OAXxFC,EAW+GvJ,OATvI9L,EAAMkV,aAAelV,EAAMsV,UAAYD,EAAOrV,EAAMkV,aAEpDlV,EAAMsV,SAASD,IAJvB,IAAgCA,CAWiH,GAAGvJ,IAGpJ,OACI,sBAAI7L,UAAU,cAAc+D,SAAUmR,GACzC,C,kEC1BL,gBACA,UAYMI,EAAa,CACf,EAAG,IACH,EAAG,KACH,EAAG,IACH,EAAG,IACH,EAAG,IACH,EAAG,IACH,EAAG,IACH,EAAG,IACH,EAAG,IACH,GAAI,MA+MR,UA5MwD,KAEpD,MAAO1P,EAAMC,IAAW,IAAAC,UAAkC,CACtDyP,UAAMC,EACNC,aAASD,EACTE,aAASF,EACTG,aAASH,EACTI,cAAUJ,EACVK,cAAUL,IAgFd,MAAMM,EAAQlQ,EAAK6P,QAAUH,EAAW1P,EAAK6P,SAAW,EACxD,IAAIM,EAAQnQ,EAAK8P,SAAW9P,EAAK+P,QAAU/P,EAAK+P,QAAU/P,EAAK8P,QAAU,EAMzE,MALkB,UAAd9P,EAAK2P,MAAoB3P,EAAKgQ,UAAYhQ,EAAKiQ,WAE/CE,GAAUnQ,EAAKiQ,SAAWjQ,EAAKgQ,UAI/B,2BAAS5V,UAAU,gBACf,uBAAKA,UAAU,kBACX,sCACA,mdACA,yBAAG,qBAAGkJ,KAAK,4BAA0B,c,uGAEzC,4BACI,uBAAKlJ,UAAU,UACX,uBAAKA,UAAU,cACX,2DACA,uBAAKA,UAAU,iBACX,0BAAQK,MAAOuF,EAAK2P,KAAM9P,SAhGlD,SAAoBgC,GAEhB5B,EAAQ,CACJ0P,KAA0B,WAApB9N,EAAGoC,OAAOxJ,OAA0C,UAApBoH,EAAGoC,OAAOxJ,MAAoBoH,EAAGoC,OAAOxJ,WAAQmV,EACtFC,QAAS7P,EAAK6P,QACdC,QAAS9P,EAAK8P,QACdC,QAAS/P,EAAK+P,QACdC,SAA8B,UAApBnO,EAAGoC,OAAOxJ,MAAoBuF,EAAKgQ,cAAWJ,EACxDK,SAA8B,UAApBpO,EAAGoC,OAAOxJ,MAAoBuF,EAAKiQ,cAAWL,GAEhE,GAuF4B,0BAAQnV,MAAM,GAAGuH,IAAK,MAAI,oBAC1B,0BAAQvH,MAAM,SAASuH,IAAI,YAAU,eACrC,0BAAQvH,MAAM,QAAQuH,IAAI,UAAQ,iBAI9C,uBAAK5H,UAAU,cACX,oDACA,uBAAKA,UAAU,iBACX,0BAAQK,MAAOuF,EAAK6P,QAAShQ,SA9FrD,SAAuBgC,GAEnB,MAAM8M,EAASvP,SAASyC,EAAGoC,OAAOxJ,OAClCwF,EAAQ,CACJ0P,KAAM3P,EAAK2P,KACXE,QAASlB,EAAS,GAAKA,GAAU,GAAKA,OAAqDiB,EAC3FE,QAAS9P,EAAK8P,QACdC,QAAS/P,EAAK+P,QACdC,SAAUhQ,EAAKgQ,SACfC,SAAUjQ,EAAKiQ,UAEvB,GAoF4B,0BAAQxV,MAAM,GAAGuH,IAAK,MAAI,oBACzB,IAAIuH,MAAM,IAAI6G,QAAQjV,KAAK8K,GAAM,0BAAQxL,MAAOwL,EAAI,EAAGjE,IAAKiE,EAAI,GAAIA,EAAI,SAKzF,uBAAK7L,UAAU,iBACX,uBAAKA,UAAU,cACX,6B,mBAAsC,UAAd4F,EAAK2P,KAAmB,WAAa,G,YAC7D,uBAAKvV,UAAU,iBACX,yBAAOG,KAAK,SAASe,UAAU,EAAM4D,IAAI,IAAIsQ,KAAK,MAAM/U,MAAOuF,EAAK8P,QAASjQ,SA5FrG,SAAuBgC,GAEnB,MAAM8M,EAASvP,SAASyC,EAAGoC,OAAOxJ,OAClCwF,EAAQ,CACJ0P,KAAM3P,EAAK2P,KACXE,QAAS7P,EAAK6P,QACdC,QAASnB,EAAS,EAAIA,OAASiB,EAC/BG,QAAS/P,EAAK+P,QACdC,SAAUhQ,EAAKgQ,SACfC,SAAUjQ,EAAKiQ,UAEvB,MAoFgB,uBAAK7V,UAAU,cACX,6B,mBAAsC,UAAd4F,EAAK2P,KAAmB,WAAa,G,YAC7D,uBAAKvV,UAAU,iBACX,yBAAOG,KAAK,SAASe,UAAU,EAAM4D,IAAI,IAAIsQ,KAAK,MAAM/U,MAAOuF,EAAK+P,QAASlQ,SArFrG,SAAuBgC,GAEnB,MAAM8M,EAASvP,SAASyC,EAAGoC,OAAOxJ,OAClCwF,EAAQ,CACJ0P,KAAM3P,EAAK2P,KACXE,QAAS7P,EAAK6P,QACdC,QAAS9P,EAAK8P,QACdC,QAASpB,EAAS,EAAIA,OAASiB,EAC/BI,SAAUhQ,EAAKgQ,SACfC,SAAUjQ,EAAKiQ,UAEvB,KA6EwBjQ,EAAK8P,SAAW9P,EAAK+P,SAAW/P,EAAK8P,SAAW9P,EAAK+P,QAC/C,wBAAM3V,UAAU,2CAAyC,kEACzD,OAKA,UAAd4F,EAAK2P,KAED,uBAAKvV,UAAU,iBACX,uBAAKA,UAAU,cACX,iEACA,uBAAKA,UAAU,iBACX,yBAAOG,KAAK,SAASe,UAAU,EAAM4D,IAAI,IAAIsQ,KAAK,MAAM/U,MAAOuF,EAAKgQ,SAAUnQ,SAxF9G,SAAwBgC,GAEpB,MAAM8M,EAASvP,SAASyC,EAAGoC,OAAOxJ,OAClCwF,EAAQ,CACJ0P,KAAM3P,EAAK2P,KACXE,QAAS7P,EAAK6P,QACdC,QAAS9P,EAAK8P,QACdC,QAAS/P,EAAK+P,QACdC,SAAUrB,EAAS,EAAIA,OAASiB,EAChCK,SAAUjQ,EAAKiQ,UAEvB,MAgFwB,uBAAK7V,UAAU,cACX,iEACA,uBAAKA,UAAU,iBACX,yBAAOG,KAAK,SAASe,UAAU,EAAM4D,IAAI,IAAIsQ,KAAK,MAAM/U,MAAOuF,EAAKiQ,SAAUpQ,SAjF9G,SAAwBgC,GAEpB,MAAM8M,EAASvP,SAASyC,EAAGoC,OAAOxJ,OAClCwF,EAAQ,CACJ0P,KAAM3P,EAAK2P,KACXE,QAAS7P,EAAK6P,QACdC,QAAS9P,EAAK8P,QACdC,QAAS/P,EAAK+P,QACdC,SAAUhQ,EAAKgQ,SACfC,SAAUtB,EAAS,EAAIA,OAASiB,GAExC,KAyEgC5P,EAAKgQ,UAAYhQ,EAAKiQ,UAAYjQ,EAAKgQ,UAAYhQ,EAAKiQ,SAClD,wBAAM7V,UAAU,2CAAyC,kEACzD,OAIhB,MAIV4F,EAAK2P,MACE3P,EAAK6P,SACL7P,EAAK8P,SACL9P,EAAK+P,SACJ/P,EAAK8P,QAAU9P,EAAK+P,UACN,WAAd/P,EAAK2P,MAAsB3P,EAAKgQ,UAAYhQ,EAAKiQ,UAAajQ,EAAKgQ,SAAWhQ,EAAKiQ,UAEvF,uBAAK7V,UAAU,kBACX,qBAAGA,UAAU,oBACT,+BACM+V,EAAQD,GAAOG,eAAe,QAAS,CAAE7O,MAAO,UAAW8O,sBAAuB,K,sBAG5F,uBAAKlW,UAAU,+BACX,uBAAKA,UAAU,cACX,6DACA,qBAAGA,UAAU,eAAe+V,EAAME,eAAe,QAAS,CAAEC,sBAAuB,I,SAEvF,uBAAKlW,UAAU,cACX,iDACA,qBAAGA,UAAU,eAAe8V,E,UAGpC,2EACA,yB,8cAA8c,qBAAG5M,KAAK,2BAAyB,a,oKAC/e,+gBACA,gOACA,8KAEF,KAGjB,C,kECnOL,gBACA,UASMoM,EAAa,CACf,EAAG,IACH,EAAG,KACH,EAAG,KACH,EAAG,IACH,EAAG,KACH,EAAG,IACH,EAAG,KACH,EAAG,KACH,EAAG,KACH,GAAI,MAsHR,UAnHmD,KAE/C,MAAO1P,EAAMC,IAAW,IAAAC,UAA6B,CACjD2P,aAASD,EACTE,aAASF,EACTG,aAASH,IAiCb,MAAMM,EAAQlQ,EAAK6P,QAAUH,EAAW1P,EAAK6P,SAAW,EACxD,IAAIM,EAAQnQ,EAAK8P,SAAW9P,EAAK+P,QAAU/P,EAAK+P,QAAU/P,EAAK8P,QAAU,EAGzE,OAFAK,GAAU,QAAe,IAGrB,2BAAS/V,UAAU,gBACf,uBAAKA,UAAU,kBACX,iCACA,yB,+MAA+M,qBAAGkJ,KAAK,4BAA0B,c,yJAAqK,qLACtZ,yB,uYAAuY,qBAAGA,KAAK,sEAAsEW,OAAO,UAAQ,U,MAExe,4BACI,uBAAK7J,UAAU,UACX,uBAAKA,UAAU,cACX,oDACA,uBAAKA,UAAU,iBACX,0BAAQK,MAAOuF,EAAK6P,QAAShQ,SA9CrD,SAAuBgC,GAEnB,MAAM8M,EAASvP,SAASyC,EAAGoC,OAAOxJ,OAClCwF,EAAQ,CACJ4P,QAASlB,EAAS,GAAKA,GAAU,GAAKA,OAAqDiB,EAC3FE,QAAS9P,EAAK8P,QACdC,QAAS/P,EAAK+P,SAEtB,GAuC4B,0BAAQtV,MAAM,GAAGuH,IAAK,MAAI,oBACzB,IAAIuH,MAAM,IAAI6G,QAAQjV,KAAK8K,GAAM,0BAAQxL,MAAOwL,EAAI,EAAGjE,IAAKiE,EAAI,GAAIA,EAAI,SAKzF,uBAAK7L,UAAU,iBACX,uBAAKA,UAAU,cACX,uDACA,uBAAKA,UAAU,iBACX,yBAAOG,KAAK,SAASe,UAAU,EAAM4D,IAAI,IAAIsQ,KAAK,MAAM/U,MAAOuF,EAAK8P,QAASjQ,SA/CrG,SAAuBgC,GAEnB,MAAM8M,EAASvP,SAASyC,EAAGoC,OAAOxJ,OAClCwF,EAAQ,CACJ4P,QAAS7P,EAAK6P,QACdC,QAASnB,EAAS,EAAIA,OAASiB,EAC/BG,QAAS/P,EAAK+P,SAEtB,MA0CgB,uBAAK3V,UAAU,cACX,uDACA,uBAAKA,UAAU,iBACX,yBAAOG,KAAK,SAASe,UAAU,EAAM4D,IAAI,IAAIsQ,KAAK,MAAM/U,MAAOuF,EAAK+P,QAASlQ,SA3CrG,SAAuBgC,GAEnB,MAAM8M,EAASvP,SAASyC,EAAGoC,OAAOxJ,OAClCwF,EAAQ,CACJ4P,QAAS7P,EAAK6P,QACdC,QAAS9P,EAAK8P,QACdC,QAASpB,EAAS,EAAIA,OAASiB,GAEvC,KAsCwB5P,EAAK8P,SAAW9P,EAAK+P,SAAW/P,EAAK8P,SAAW9P,EAAK+P,QAC/C,wBAAM3V,UAAU,2CAAyC,kEACzD,QAMlB4F,EAAK6P,SACE7P,EAAK8P,SACL9P,EAAK+P,SACJ/P,EAAK8P,QAAU9P,EAAK+P,QAExB,uBAAK3V,UAAU,kBACX,qBAAGA,UAAU,oBACT,+BACM+V,EAAQD,GAAOG,eAAe,QAAS,CAAE7O,MAAO,UAAW8O,sBAAuB,K,sBAG5F,uBAAKlW,UAAU,+BACX,uBAAKA,UAAU,cACX,6DACA,qBAAGA,UAAU,eAAe+V,EAAME,eAAe,QAAS,CAAEC,sBAAuB,I,SAEvF,uBAAKlW,UAAU,cACX,iDACA,qBAAGA,UAAU,eAAe8V,E,UAGpC,2EACA,yB,8cAA8c,qBAAG5M,KAAK,2BAAyB,a,oKAC/e,+gBACA,gOACA,8KAEF,KAGjB,C,+FCvIL,gBACA,UACA,UACA,UACA,UACA,UACA,UAEA,QASA,MAAaiN,UAA4B9T,EAAMC,UAE3C,WAAAC,CAAYxC,GAERyC,MAAMzC,GACN0C,KAAKC,MAAQ,CACTvC,KAAO,KAEf,CAEA,UAAAyC,CAAWzC,GAEPsC,KAAKI,SAAS,CACV1C,QAER,CAEA,MAAAgD,GAEI,MAAMC,EAAuB,GAG7B,OADAA,EAAMC,KAAK,gBAAC,UAAgB,CAACT,WAAazC,GAASsC,KAAKG,WAAWzC,MAC3DsC,KAAKC,MAAMvC,MAEf,IAAK,MACDiD,EAAMC,KAAK,gBAAC,UAAiB,OAC7B,MACJ,IAAK,WACDD,EAAMC,KAAK,gBAAC,UAAsB,OAClC,MACJ,IAAK,QACDD,EAAMC,KAAK,gBAAC,UAAmB,OAC/B,MACJ,QACID,EAAMC,KAAK,iCAInB,OACI,gBAAC,UAAU,CAACK,aAAc,KAAK,MAAC,OAAAC,OAAOC,SAAS,CAAEC,IAAqD,QAAhD,EAAA9B,SAASC,cAAc,iCAAyB,eAAE8B,WAAY,EAAEC,SAAUX,EAAOY,IAAK,gBAAC,UAAoB,OAE1K,EAzCJ,uB,kECjBA,gBA+DA,UA5D+HjE,IAE3H,SAASoJ,EAAWhJ,GAEhBJ,EAAM6C,WAAWzC,GACbJ,EAAM4F,UAEN5F,EAAM4F,UAEd,CAEA,OACI,+BACI,uBAAK3F,UAAU,kBACX,wDACA,mTACA,6VAEJ,uBAAKA,UAAU,gBACX,yBAAO6B,QAAS,IAAMsH,EAAW,QAC7B,uBAAKnJ,UAAU,UACX,uBAAKA,UAAU,gBACX,uBAAKoJ,MAAM,6BAA6BC,QAAQ,mBAC5C,wBAAME,EAAE,k7BAAk7BD,UAAU,6BAA6BE,KAAK,cAG9+B,uBAAKxJ,UAAU,kBACX,oCAIZ,yBAAO6B,QAAS,IAAMsH,EAAW,aAC7B,uBAAKnJ,UAAU,UACX,uBAAKA,UAAU,gBACX,uBAAKoJ,MAAM,6BAA6BC,QAAQ,mBAC5C,wBAAME,EAAE,ggBAAggBD,UAAU,6BAA6BE,KAAK,cAG5jB,uBAAKxJ,UAAU,kBACX,yCAIZ,yBAAO6B,QAAS,IAAMsH,EAAW,UAC7B,uBAAKnJ,UAAU,UACX,uBAAKA,UAAU,gBACX,uBAAKoJ,MAAM,6BAA6BC,QAAQ,mBAC5C,wBAAME,EAAE,qhCAAqhCD,UAAU,4BAA4BE,KAAK,cAGhlC,uBAAKxJ,UAAU,kBACX,uCAMvB,C,kEC5DL,gBACA,UASMsV,EAAa,CACf,EAAG,IACH,EAAG,IACH,EAAG,IACH,EAAG,IACH,EAAG,IACH,EAAG,IACH,EAAG,IACH,EAAG,IACH,EAAG,IACH,GAAI,KA+GR,UA5GqD,KAEjD,MAAO1P,EAAMC,IAAW,IAAAC,UAA+B,CACnD2P,aAASD,EACTG,aAASH,EACTE,aAASF,IAiCb,MAAMM,EAAQlQ,EAAK6P,QAAUH,EAAW1P,EAAK6P,SAAW,EACxD,IAAIM,EAAQnQ,EAAK8P,SAAW9P,EAAK+P,QAAU/P,EAAK+P,QAAU/P,EAAK8P,QAAU,EAEzE,OACI,2BAAS1V,UAAU,gBACf,uBAAKA,UAAU,kBACX,mCACA,wMAEJ,4BACI,uBAAKA,UAAU,UACX,uBAAKA,UAAU,cACX,oDACA,uBAAKA,UAAU,iBACX,0BAAQK,MAAOuF,EAAK6P,QAAShQ,SA5CrD,SAAuBgC,GAEnB,MAAM8M,EAASvP,SAASyC,EAAGoC,OAAOxJ,OAClCwF,EAAQ,CACJ4P,QAASlB,EAAS,GAAKA,GAAU,GAAKA,OAAqDiB,EAC3FE,QAAS9P,EAAK8P,QACdC,QAAS/P,EAAK+P,SAEtB,GAqC4B,0BAAQtV,MAAM,GAAGuH,IAAK,MAAI,oBACzB,IAAIuH,MAAM,IAAI6G,QAAQjV,KAAK8K,GAAM,0BAAQxL,MAAOwL,EAAI,EAAGjE,IAAKiE,EAAI,GAAIA,EAAI,SAKzF,uBAAK7L,UAAU,iBACX,uBAAKA,UAAU,cACX,uDACA,uBAAKA,UAAU,iBACX,yBAAOG,KAAK,SAASe,UAAU,EAAM4D,IAAI,IAAIsQ,KAAK,MAAM/U,MAAOuF,EAAK8P,QAASjQ,SA7CrG,SAAuBgC,GAEnB,MAAM8M,EAASvP,SAASyC,EAAGoC,OAAOxJ,OAClCwF,EAAQ,CACJ4P,QAAS7P,EAAK6P,QACdC,QAASnB,EAAS,EAAIA,OAASiB,EAC/BG,QAAS/P,EAAK+P,SAEtB,MAwCgB,uBAAK3V,UAAU,cACX,uDACA,uBAAKA,UAAU,iBACX,yBAAOG,KAAK,SAASe,UAAU,EAAM4D,IAAI,IAAIsQ,KAAK,MAAM/U,MAAOuF,EAAK+P,QAASlQ,SAzCrG,SAAuBgC,GAEnB,MAAM8M,EAASvP,SAASyC,EAAGoC,OAAOxJ,OAClCwF,EAAQ,CACJ4P,QAAS7P,EAAK6P,QACdC,QAAS9P,EAAK8P,QACdC,QAASpB,EAAS,EAAIA,OAASiB,GAEvC,KAoCwB5P,EAAK8P,SAAW9P,EAAK+P,SAAW/P,EAAK8P,SAAW9P,EAAK+P,QAC/C,wBAAM3V,UAAU,2CAAyC,kEACzD,QAMlB4F,EAAK6P,SACF7P,EAAK8P,SACL9P,EAAK+P,SACJ/P,EAAK8P,QAAU9P,EAAK+P,QAEpB,uBAAK3V,UAAU,kBACX,qBAAGA,UAAU,oBACT,+BACM+V,EAAQD,GAAOG,eAAe,QAAS,CAAE7O,MAAO,UAAW8O,sBAAuB,K,sBAG5F,uBAAKlW,UAAU,+BACX,uBAAKA,UAAU,cACX,6DACA,qBAAGA,UAAU,eAAe+V,EAAME,eAAe,QAAS,CAAEC,sBAAuB,I,QAEvF,uBAAKlW,UAAU,cACX,iDACA,qBAAGA,UAAU,eAAe8V,E,UAItC,KAGjB,C,iBChIL,QAEA,QACA9F,EAAEoG,UAAUC,YAAc,EAAQ,MAClC,QAEA,gBACA,SACA,UAEA,UAGA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QAMA,QAEA,QAEA,QACA,gBACA,UACA,QACA,QACA,QAGA,gBAEAtU,SAASuU,KAAKhK,UAAUF,OAAO,SAC/BrK,SAASuU,KAAKhK,UAAUC,IAAI,MA0J5BxK,SAAS0I,iBAAiB,oBAX1B,YAhGA,WAEI,MAAM8L,EAAQxU,SAASsI,iBAAiB,mBACxC,IAAK,IAAIwB,EAAI,EAAGA,EAAI0K,EAAMxR,OAAQ8G,IAEzB0K,EAAM1K,GAAuBlB,QAAQ6L,WAEtC,gBAAwBD,EAAM1K,KAI9B,0BAAmB0K,EAAM1K,GAGrC,CAoFI4K,IACA,IAAAC,cAnFJ,WAEIC,UAAUC,OAAOC,SAASC,SAAW,qCACrC,MAAMC,EAAchV,SAASiV,uBAAuB,eACpD,IAAK,IAAInL,EAAI,EAAGA,EAAIkL,EAAYhS,OAAQ8G,IACxC,CACI,MAAMoL,EAAaF,EAAYlL,GAEzBqL,EAAS,CACXC,WAAW,EACXC,WAAW,EACXhR,IAAK6Q,EAAWtM,QAAgB,OAChCsD,KAAMgJ,EAAWtM,QAAc,KAC/BiM,OAAQ,CACJ,CACIS,MAAO,WACPC,KAAM,oBAEV,CACID,MAAO,UACPC,KAAM,iBAEV,CACID,MAAO,WACPC,KAAM,kBAEV,CACID,MAAO,QACPC,KAAM,cAKlBtH,EAAEiH,GAAYN,UAAUO,E,CAEhC,CAiDIK,GA/CJ,WAEI,MAAMC,EAAczV,SAASC,cAAc,uBACtCwV,GAKLA,EAAY/M,iBAAiB,SAAS,SAAUhD,GAI5C,GAFAA,EAAG+D,kBAEEgM,EAAY1V,KAEb,OAGJ,MAAM2V,EAAYD,EAAY1V,KAAKuI,iBAAiB,UACpD,IAAK,IAAIqN,KAAYD,EAEjBC,EAASC,cAAgB,EAI7B,MAAMC,EAAQJ,EAAY1V,KAAKuI,iBAAiB,oBAChD,IAAK,IAAI4D,KAAQ2J,EAEZ3J,EAA0B5N,MAAQ,GAGvC,MAAMwX,EAAWL,EAAY1V,KAAKE,cAAc,8BAC5C6V,IAEAA,EAAS3N,SAAU,EAE3B,GACJ,CAYI4N,GAlJJ,WAEI,MAAMC,EAAQhW,SAASsI,iBAAiB,qBAExC,IAAK,IAAIwB,EAAI,EAAGA,EAAIkM,EAAMhT,OAAQ8G,IAClC,CACI,MAAMY,EAAOsL,EAAMlM,GAEnB,IAAKY,EAAK9B,QAAQvJ,WAAaqL,EAAK9B,QAAQrK,QAAUmM,EAAK9B,QAAQnH,QAE/D,OAGJ,MAAMpC,EAAWiP,KAAKC,MAAM7D,EAAK9B,QAAQvJ,UACnCmC,EAAekJ,EAAK9B,QAAQ1G,QAAUoM,KAAKC,MAAM7D,EAAK9B,QAAQ1G,SAAuB,GAIrFlE,EAA6B,CAC/BqB,WACAd,MALUmM,EAAK9B,QAAQrK,MAMvBiD,eACAC,QANYiJ,EAAK9B,QAAQnH,UAShB,IAAAwU,YAAWvL,GACnBtJ,OAAOd,EAAMkQ,cAAc,EAAAnQ,eAAgBrC,G,CAExD,CAuHIkY,GArHJ,WAEI,MAAMF,EAAQhW,SAASsI,iBAAiB,0BAExC,IAAK,IAAIwB,EAAI,EAAGA,EAAIkM,EAAMhT,OAAQ8G,IAClC,CACI,MAAMY,EAAOsL,EAAMlM,GACb9L,EAAkC,CAAC,GAG5B,IAAAiY,YAAWvL,GACnBtJ,OAAOd,EAAMkQ,cAAc,EAAA4D,oBAAqBpW,G,CAE7D,CAyGImY,GAVAC,OAAO,4BAA4BC,MAAM,OAY7C,G,YChMA,MAAMC,EAeM,YAAAC,GAEJ,MAAMC,EAAWxW,SAASwQ,cAAc,OACxCgG,EAAS5N,QAAQ6N,KAAO/V,KAAKgW,YAAYzF,QAAQ,GACjDuF,EAASG,UAAYjW,KAAKkW,IAAIpI,aAE9B9N,KAAKgW,cACLhW,KAAKmW,OAAOC,aAAaN,EAASO,kBAA8BrW,KAAKsW,QACzE,CAEQ,WAAAC,GAEAvW,KAAKkW,IAAIM,aAAeC,eAAeC,OAEvC1W,KAAK2W,aAAc,EACnB3W,KAAK4W,WAAa,KAElB5W,KAAKsW,QAAQzM,UAAUF,OAAO,QACN,MAApB3J,KAAKkW,IAAInE,QAET/R,KAAK6V,eAGjB,CAEQ,YAAAgB,GAEJ,OAAO7W,KAAKgW,YAAchW,KAAK8W,UACnC,CAEO,gBAAAC,GAEH,GAAoB,MAAhB/W,KAAKgX,UAAoBhX,KAAK6W,eAE9B,OAGJ7W,KAAKsW,QAAQzM,UAAUC,IAAI,QAC3B,MAAMnG,EAAM3D,KAAKgX,QAAQxP,QAAQ,KAAMxH,KAAKgW,YAAc,GAAGzF,QAAQ,IACrEvQ,KAAKkW,IAAI/I,KAAK,MAAOxJ,GAAK,GAC1B3D,KAAKkW,IAAIe,iBAAiB,qBAAsB,YAChDjX,KAAKkW,IAAIgB,MACb,CAEO,iBAAAC,GAEH,GAA0B,MAAtBnX,KAAKoX,eAA0C,MAAjBpX,KAAKqX,UAA+C,MAA3BrX,KAAKoX,cAAc/X,OAAiBW,KAAK6W,eAEhG,OAGJ7W,KAAKqX,SAASC,IAAItX,KAAKoX,cAAczZ,KAAMqC,KAAKgW,YAAYzF,QAAQ,IAEpEvQ,KAAKsW,QAAQzM,UAAUC,IAAI,QAC3B,MAAMyN,EAAY,IAAIC,gBAAgBxX,KAAKqX,UAC3CrX,KAAKkW,IAAI/I,KAAK,MAAO,GAAGnN,KAAKoX,cAAc/X,KAAKoY,UAAUF,EAAUvZ,cACpEgC,KAAKkW,IAAIe,iBAAiB,qBAAsB,YAChDjX,KAAKkW,IAAIgB,KAAKlX,KAAKqX,SACvB,CAEQ,aAAAK,GAEJ,MAAMC,EAAiB3X,KAAKmW,OAAOyB,wBAC7BC,EAAUF,EAAeG,EAAIH,EAAeI,OAC9C7W,OAAO8W,QAAUH,GAAUA,EAAS,IAEpC7X,KAAK2W,aAAc,EACf3W,KAAKgX,QAELhX,KAAK+W,mBAEA/W,KAAKoX,eAEVpX,KAAKmX,oBAGjB,CAEQ,UAAAc,GAEAjY,KAAK2W,cAKL3W,KAAK4W,YAELsB,aAAalY,KAAK4W,YAGtB5W,KAAK4W,WAAa3M,YAAW,IAAOjK,KAAK0X,iBAAkC,IAC/E,CAEO,aAAOS,CAAOC,GAEjB,MAAMC,EAAWD,EAAWlQ,QAAQmQ,SAC9BC,EAAYF,EAAWlQ,QAAQoQ,UAC/BC,EAAaH,EAAWlQ,QAAQqQ,WAEtC,GAAkB,MAAdA,GAAqC,KAAfA,EAEtB,OAAO,KAGX,GAAiB,MAAbD,GAAmC,KAAdA,EACzB,CACI,MAAMjZ,EAAOC,SAAS2I,eAAeqQ,GAErC,OAAY,MAARjZ,GAAiC,UAAjBA,EAAKmZ,SAA0D,MAAlCnZ,EAA0BA,KAEhE,KAGJ,IAAIuW,EAASwC,EAAY/Y,EAA0BkD,SAASgW,G,CAGvE,OAAgB,MAAZF,GAAiC,KAAbA,EAEb,IAAIzC,EAASwC,EAAYC,EAAU9V,SAASgW,IAGhD,IACX,CAEA,YAAoBH,EAAyBK,EAAuCC,GAlI5E,KAAA1C,YAAsB,EAGtB,KAAAW,aAAuB,EACvB,KAAAC,WAA4B,KAgIhC5W,KAAKmW,OAASiC,EACdpY,KAAK8W,WAAa4B,EAClB1Y,KAAKkW,IAAM,IAAIO,eACfzW,KAAKkW,IAAIyC,mBAAqB,IAAM3Y,KAAKuW,cAEf,iBAAfkC,GAEPzY,KAAKgX,QAAUyB,EACfzY,KAAKoX,cAAgB,KACrBpX,KAAKqX,SAAW,MAEW,iBAAfoB,GAEZzY,KAAKgX,QAAU,KACfhX,KAAKoX,cAAgBqB,EAEK,MAAtBzY,KAAKoX,eAAoD,MAA3BpX,KAAKoX,cAAc/X,KAEjDW,KAAKqX,SAAW,IAAIuB,SAAS5Y,KAAKoX,cAAc/X,MAIhDW,KAAKqX,SAAW,OAKpBrX,KAAKgX,QAAU,KACfhX,KAAKoX,cAAgB,KACrBpX,KAAKqX,SAAW,MAGpBrX,KAAKsW,QAAUhX,SAASwQ,cAAc,OACtC9P,KAAKsW,QAAQ/Y,UAAY,mBACzByC,KAAKsW,QAAQL,UAAY,oDACzBjW,KAAKmW,OAAO/L,YAAYpK,KAAKsW,SAE7BpV,OAAO8G,iBAAiB,UAAU,IAAMhI,KAAKiY,cAAc,CAAEY,SAAS,GAC1E,EAGJ,MAAMC,EAAexZ,SAASsI,iBAAiB,gBAC/C,IAAK,IAAIwB,EAAI,EAAGA,EAAI0P,EAAaxW,OAAQ8G,IAErCwM,EAASuC,OAAOW,EAAa1P,G,eC1LjC,IAAI2P,E,sIASJ,MAAaC,EAOT,YAAmBC,GAEfjZ,KAAK2D,IAAMsV,EAAOtV,IAClB3D,KAAKkZ,SAAWD,EAAOC,SACvBlZ,KAAKkN,QAAU+L,EAAO/L,QACtBlN,KAAKkW,IAAM,IAAIO,eACfzW,KAAKkW,IAAIyC,mBAAqB,IAAM3Y,KAAKuW,aAC7C,CAEO,KAAA4C,GAECnZ,KAAKkW,IAAIM,aAAeC,eAAeC,MAEvC1W,KAAKkW,IAAIiD,OAEjB,CAEO,MAAAC,GAEH,MAAM3b,EAAyB,MAAhBuC,KAAKkN,QAAkB,OAAS,MAC/ClN,KAAKkW,IAAI/I,KAAK1P,EAAQuC,KAAK2D,KAAK,GAChC3D,KAAKkW,IAAIgB,KAAKlX,KAAKkN,QACvB,CAEO,WAAAqJ,GAECvW,KAAKkW,IAAIM,aAAeC,eAAeC,MAA4B,MAApB1W,KAAKkW,IAAInE,aAEzB,IAAnB/R,KAAa,UAErBA,KAAKkZ,SAASlZ,KAG1B,CAEO,WAAAqZ,GAEH,OAAOrZ,KAAKkW,IAAIpI,YACpB,EASJ,SAASwL,EAAkBrZ,EAAoBsZ,GAE3CA,EAActD,UAAYhW,EAAMoZ,cAChC,MAAMG,EAAUD,EAAc3R,iBAAiB,UAC/C,IAAK,IAAIwB,EAAI,EAAGA,EAAIoQ,EAAQlX,OAAQ8G,IACpC,CACI,MAAMqQ,EAAaD,EAAQpQ,GACrBsQ,EAAepa,SAASwQ,cAAc,UACrB,KAAnB2J,EAAW7T,IAEX8T,EAAa9T,IAAM4T,EAAQpQ,GAAGxD,IAI9B8T,EAAatP,YAAY9K,SAASqa,eAAeH,EAAQpQ,GAAGoH,UAAUoJ,SAE1EJ,EAAQpQ,GAAGO,SACX4P,EAAcnP,YAAYsP,E,CAG9B,MAAM5F,EAAQyF,EAAc3R,iBAAiB,QAC7C,IAAK,IAAIwB,EAAI,EAAGA,EAAI0K,EAAMxR,OAAQ8G,IAClC,CACI,MAAM/J,EAAOyU,EAAM1K,GACnBmE,EAAEoG,UAAUC,YAAY/F,MAAMxO,GAC9BkO,EAAElO,GAAMwa,WAAWC,SAASC,cAAgB,KAE1B,IAAIf,EAAY,CAC1BrV,IAAKtE,EAAKoY,OACVvK,QAAS,IAAI0L,SAASvZ,GACtB6Z,SAAWc,GAA0BV,EAAkBU,EAAU3a,EAAKyJ,iBAEpEsQ,QAAQ,C,CAItBa,GACJ,CAEA,SAAgBA,IAGZ,IADAlB,EAAeA,GAAgB,GACA,IAAxBA,EAAazW,QACpB,CACI,MAAM0H,EAAO+O,EAAamB,MACd,MAARlQ,GAEAA,G,CAGZ,CAxGA,gBAgDA,uBAA4BiP,GAEV,IAAID,EAAYC,GACxBG,QACV,EAyCA,aAaA,gCAAqC/Z,GAEjCkO,EAAElO,GAAMwa,WAAWM,UACnB5M,EAAEoG,UAAUC,YAAY/F,MAAMxO,GAG9BkO,EAAElO,GAAMwa,WAAWC,SAASC,cAAgB,KAE1B,IAAIf,EAAY,CAC1BrV,IAAKtE,EAAKoY,OACVvK,QAAS,IAAI0L,SAASvZ,GACtB6Z,SAAWc,GAA0BV,EAAkBU,EAAU3a,EAAKyJ,iBAEpEsQ,QAAQ,CAEtB,EAEA,yBAA8B/Z,GAEZ,IAAI2Z,EAAY,CAC1BrV,IAAKtE,EAAKoY,OACVvK,QAAS,IAAI0L,SAASvZ,GACtB6Z,SAAWc,GAA0BV,EAAkBU,EAAU3a,EAAKyJ,iBAEpEsQ,QACV,EAEAlY,OAAO8G,iBAAiB,OAAQiS,E,sFC7IhC,gBAEA,MAAMG,EAIM,iBAAAC,CAAkBxc,GAEtB,IAAKmC,KAAK4Q,cAAgB/S,EAEtB,OAGJ,MAAMyc,EAAYhb,SAASwQ,cAAc,SACzCwK,EAAU5c,KAAO,SACjB4c,EAAU3c,KAAO,kBACjB2c,EAAU1c,MAAQC,EAClBmC,KAAK4Q,YAAY2J,OAAOD,IAExB,IAAAE,eAAcxa,KAAK4Q,YACvB,CAEA,YAAmB6J,G,MAGf,GArBa,KAAA7J,YAAsC,KAoBnD5Q,KAAK4Q,YAAc6J,GACdza,KAAK4Q,YAEN,OAGJ,MAAM8J,EAAU1a,KAAK4Q,YAAY1I,QAAQ6L,UACzC,IAAK2G,EAED,OAGJ,MAAMjD,EAAiD,QAAxC,EAAAzX,KAAK4Q,YAAY1I,QAAQyS,uBAAe,QAAI,cAE3DpN,EAAEvN,KAAK4Q,aAAaiJ,WAAWM,UAC/B5M,EAAEoG,UAAUC,YAAY/F,MAAMN,EAAEvN,KAAK4Q,cAErCrD,EAAEvN,KAAK4Q,aAAaiJ,WAAWC,SAASC,cAAgB,KAEpDa,WAAWC,OAAM,KAEbD,WAAWE,QAAQJ,EAAS,CAAEjD,OAAQA,IAAU5T,MAAMhG,GAAUmC,KAAKqa,kBAAkBxc,IAAO,GAChG,CAEV,EAGJ,sBAA2B4c,GAEvB,OAAO,IAAIL,EAAcK,EAC7B,C,eCuCA,SAAgBM,EAAoBnP,GAEhC,IAAIxC,EACA4R,EACJ,IAAK5R,EAAI,EAAI4R,EAAI1b,SAAS2b,qBAAqB,QAAQ7R,GAAKA,IAC5D,CACI,MAAM8R,EAAUF,EAAEG,aAAa,OAChB,MAAXD,GAA+B,yBAAZA,GAAsCF,EAAEG,aAAa,WAExEH,EAAEI,UAAW,EACTJ,EAAEG,aAAa,WAAavP,IAE5BoP,EAAEI,UAAW,G,CAI7B,C,8EAhBA,wBAkBAla,OAAO8G,iBAAiB,QAlCxB,WAEI,MAAMqT,EAxEV,SAAoB1d,GAEhB,MAAM2d,EAAS3d,EAAO,IAChB4d,EAAKjc,SAAS+b,OAAOjZ,MAAM,KACjC,IAAK,IAAIgH,EAAI,EAAGA,EAAImS,EAAGjZ,OAAQ8G,IAC/B,CACI,IAAIoS,EAAID,EAAGnS,GACX,KAAuB,MAAhBoS,EAAEC,OAAO,IAEZD,EAAIA,EAAEE,UAAU,EAAGF,EAAElZ,QAEzB,GAA0B,IAAtBkZ,EAAE1Y,QAAQwY,GAEV,OAAOE,EAAEE,UAAUJ,EAAOhZ,OAAQkZ,EAAElZ,O,CAG5C,OAAO,IACX,CAuDmBqZ,CAAW,SAI1BZ,EAHcM,GApClB,WAEI,IAAIjS,EACA4R,EACJ,IAAK5R,EAAI,EAAI4R,EAAI1b,SAAS2b,qBAAqB,QAAQ7R,GAAKA,IAC5D,CACI,MAAM8R,EAAUF,EAAEG,aAAa,OAC/B,GAAe,MAAXD,IAC8B,IAA9BA,EAAQpY,QAAQ,WACY,IAA5BoY,EAAQpY,QAAQ,QAChBkY,EAAEG,aAAa,SAEf,OAAOH,EAAEG,aAAa,Q,CAG9B,OAAO,IACX,CAsBUS,GAEV,IA4BA1a,OAAO8G,iBAAiB,gBA1BxB,WAEI,MAAM6T,EA1BV,WAEI,IAAIzS,EACA4R,EACJ,IAAK5R,EAAI,EAAI4R,EAAI1b,SAAS2b,qBAAqB,QAAQ7R,GAAKA,IAC5D,CACI,MAAM8R,EAAUF,EAAEG,aAAa,OAC/B,GAAe,MAAXD,GAA+B,yBAAZA,GAAsCF,EAAEG,aAAa,SAAWH,EAAEG,aAAa,WAAaH,EAAEI,SAEjH,OAAOJ,EAAEG,aAAa,Q,CAG9B,OAAO,IACX,CAakBW,IA9DlB,SAAsBne,EAAcC,EAAeme,GAE/C,IAAIC,EAEJ,GAAID,EACJ,CACI,MAAM7d,EAAO,IAAIyD,KACjBzD,EAAK+d,QAAQ/d,EAAKge,UAAoB,GAAPH,EAAY,GAAK,GAAK,KACrDC,EAAU,aAAa9d,EAAKie,e,MAI5BH,EAAU,GAGd1c,SAAS+b,OAAS1d,EAAO,IAAMC,EAAQoe,EAAU,UACrD,CAgDII,CAAa,QADc,MAATP,EAAgBA,EAAQ,GACT,IACrC,IAsBA3a,OAAO6Z,oBAAsBA,C,6FClH7B,+BAAoCjd,EAAcue,EAAkBze,GAEhEE,EAAQwe,MAAMD,GAAYze,EAEtBE,EAAQye,UAERze,EAAQ0e,SAASH,GAAYve,EAAQye,QAE7C,C,kECRA,gBAEAhP,EAAEoG,UAAU8I,YAAY,CACpBC,OAAQ,KAGZnP,EAAEoG,UAAUgJ,UAAU,cAClB,SAAUC,EAAQC,EAASC,GAEvB,OAAQD,EAA6BpV,OACzC,IAEJ8F,EAAEoG,UAAUC,YAAYmJ,SAASjT,IAAI,cAChChM,KAEG,IAAAkf,qBAAoBlf,EAAS,cAAc,EAAK,G,GCdpDmf,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBpK,IAAjBqK,EACH,OAAOA,EAAaC,QAGrB,IAAIC,EAASL,EAAyBE,GAAY,CAGjDE,QAAS,CAAC,GAOX,OAHAE,EAAoBJ,GAAUK,KAAKF,EAAOD,QAASC,EAAQA,EAAOD,QAASH,GAGpEI,EAAOD,OACf,CAGAH,EAAoBO,EAAIF,ExBzBpBlgB,EAAW,GACf6f,EAAoBQ,EAAI,CAAC5L,EAAQ6L,EAAUC,EAAIC,KAC9C,IAAGF,EAAH,CAMA,IAAIG,EAAeC,IACnB,IAAS3U,EAAI,EAAGA,EAAI/L,EAASiF,OAAQ8G,IAAK,CAGzC,IAFA,IAAKuU,EAAUC,EAAIC,GAAYxgB,EAAS+L,GACpC4U,GAAY,EACPC,EAAI,EAAGA,EAAIN,EAASrb,OAAQ2b,MACpB,EAAXJ,GAAsBC,GAAgBD,IAAaK,OAAO3K,KAAK2J,EAAoBQ,GAAGS,OAAOhZ,GAAS+X,EAAoBQ,EAAEvY,GAAKwY,EAASM,MAC9IN,EAASS,OAAOH,IAAK,IAErBD,GAAY,EACTH,EAAWC,IAAcA,EAAeD,IAG7C,GAAGG,EAAW,CACb3gB,EAAS+gB,OAAOhV,IAAK,GACrB,IAAIiV,EAAIT,SACE7K,IAANsL,IAAiBvM,EAASuM,EAC/B,CACD,CACA,OAAOvM,CAnBP,CAJC+L,EAAWA,GAAY,EACvB,IAAI,IAAIzU,EAAI/L,EAASiF,OAAQ8G,EAAI,GAAK/L,EAAS+L,EAAI,GAAG,GAAKyU,EAAUzU,IAAK/L,EAAS+L,GAAK/L,EAAS+L,EAAI,GACrG/L,EAAS+L,GAAK,CAACuU,EAAUC,EAAIC,EAqBjB,EyBzBdX,EAAoBoB,EAAKhB,IACxB,IAAIiB,EAASjB,GAAUA,EAAOkB,WAC7B,IAAOlB,EAAiB,QACxB,IAAM,EAEP,OADAJ,EAAoBpW,EAAEyX,EAAQ,CAAEvD,EAAGuD,IAC5BA,CAAM,ECLdrB,EAAoBpW,EAAI,CAACuW,EAASoB,KACjC,IAAI,IAAItZ,KAAOsZ,EACXvB,EAAoBwB,EAAED,EAAYtZ,KAAS+X,EAAoBwB,EAAErB,EAASlY,IAC5E+Y,OAAOS,eAAetB,EAASlY,EAAK,CAAEyZ,YAAY,EAAMC,IAAKJ,EAAWtZ,IAE1E,ECND+X,EAAoB4B,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAO/e,MAAQ,IAAIgf,SAAS,cAAb,EAChB,CAAE,MAAOzgB,GACR,GAAsB,iBAAX2C,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBgc,EAAoBwB,EAAI,CAACO,EAAKC,IAAUhB,OAAOiB,UAAUC,eAAe5B,KAAKyB,EAAKC,GCClFhC,EAAoBmB,EAAKhB,IACH,oBAAXgC,QAA0BA,OAAOC,aAC1CpB,OAAOS,eAAetB,EAASgC,OAAOC,YAAa,CAAE1hB,MAAO,WAE7DsgB,OAAOS,eAAetB,EAAS,aAAc,CAAEzf,OAAO,GAAO,E,MCA9D,IAAI2hB,EAAkB,CACrB,IAAK,GAaNrC,EAAoBQ,EAAEO,EAAKuB,GAA0C,IAA7BD,EAAgBC,GAGxD,IAAIC,EAAuB,CAACC,EAA4Bvc,KACvD,IAGIga,EAAUqC,GAHT7B,EAAUgC,EAAaC,GAAWzc,EAGhBiG,EAAI,EAC3B,GAAGuU,EAASkC,MAAMriB,GAAgC,IAAxB+hB,EAAgB/hB,KAAa,CACtD,IAAI2f,KAAYwC,EACZzC,EAAoBwB,EAAEiB,EAAaxC,KACrCD,EAAoBO,EAAEN,GAAYwC,EAAYxC,IAGhD,GAAGyC,EAAS,IAAI9N,EAAS8N,EAAQ1C,EAClC,CAEA,IADGwC,GAA4BA,EAA2Bvc,GACrDiG,EAAIuU,EAASrb,OAAQ8G,IACzBoW,EAAU7B,EAASvU,GAChB8T,EAAoBwB,EAAEa,EAAiBC,IAAYD,EAAgBC,IACrED,EAAgBC,GAAS,KAE1BD,EAAgBC,GAAW,EAE5B,OAAOtC,EAAoBQ,EAAE5L,EAAO,EAGjCgO,EAAqBC,KAAiC,2BAAIA,KAAiC,4BAAK,GACpGD,EAAmB3Q,QAAQsQ,EAAqBO,KAAK,KAAM,IAC3DF,EAAmBlf,KAAO6e,EAAqBO,KAAK,KAAMF,EAAmBlf,KAAKof,KAAKF,G,KC7CvF,IAAIG,EAAsB/C,EAAoBQ,OAAE3K,EAAW,CAAC,MAAM,IAAOmK,EAAoB,QAC7F+C,EAAsB/C,EAAoBQ,EAAEuC,E","sources":["webpack://cloud_lettings/webpack/runtime/chunk loaded","webpack://cloud_lettings/./site/ts/components/ArrangeBooking/details-form.tsx","webpack://cloud_lettings/./site/ts/components/ArrangeBooking/index.tsx","webpack://cloud_lettings/./site/ts/components/ArrangeBooking/select-date.tsx","webpack://cloud_lettings/./site/ts/components/ArrangeBooking/select-other-properties.tsx","webpack://cloud_lettings/./site/ts/components/ArrangeBooking/select-time.tsx","webpack://cloud_lettings/./site/ts/components/ArrangeBooking/select-type.tsx","webpack://cloud_lettings/./site/ts/components/ArrangeBooking/types.ts","webpack://cloud_lettings/./site/ts/components/BillingAddress.ts","webpack://cloud_lettings/./site/ts/components/LatestSlider.ts","webpack://cloud_lettings/./site/ts/components/MapProperties.ts","webpack://cloud_lettings/./site/ts/components/StepWizardNavigation.tsx","webpack://cloud_lettings/./site/ts/components/UtilitiesCalculator/electric-calculator.tsx","webpack://cloud_lettings/./site/ts/components/UtilitiesCalculator/gas-calculator.tsx","webpack://cloud_lettings/./site/ts/components/UtilitiesCalculator/index.tsx","webpack://cloud_lettings/./site/ts/components/UtilitiesCalculator/utility-selection.tsx","webpack://cloud_lettings/./site/ts/components/UtilitiesCalculator/water-calculator.tsx","webpack://cloud_lettings/./site/ts/main.ts","webpack://cloud_lettings/../Components/Base/BaseComponent/Content/Components/AjaxPage.ts","webpack://cloud_lettings/../Components/Base/BaseComponent/Content/Components/PartialHost.ts","webpack://cloud_lettings/../Components/Base/BaseComponent/Content/Components/RecaptchaForm.ts","webpack://cloud_lettings/../Components/Base/BaseComponent/Content/Components/StyleSwitcher.ts","webpack://cloud_lettings/../Components/Base/BaseComponent/Content/validation/_helpers.ts","webpack://cloud_lettings/../Components/Base/BaseComponent/Content/validation/mustbetrue.ts","webpack://cloud_lettings/webpack/bootstrap","webpack://cloud_lettings/webpack/runtime/compat get default export","webpack://cloud_lettings/webpack/runtime/define property getters","webpack://cloud_lettings/webpack/runtime/global","webpack://cloud_lettings/webpack/runtime/hasOwnProperty shorthand","webpack://cloud_lettings/webpack/runtime/make namespace object","webpack://cloud_lettings/webpack/runtime/jsonp chunk loading","webpack://cloud_lettings/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","import * as React from \"react\";\r\nimport { StepWizardChildProps } from \"react-step-wizard\";\r\nimport { PropertyInformation, ArrangeBookingState, formatDate } from \"./types\";\r\n\r\nconst DetailsFormStep: React.FunctionComponent<{ property: PropertyInformation, token: string, options: ArrangeBookingState } & Partial> = (props) =>\r\n{\r\n function submitBooking()\r\n {\r\n const form = document.querySelector(\"form#booking-form\") as HTMLFormElement;\r\n if (form.reportValidity())\r\n {\r\n form.submit();\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {\r\n props.options.additionalProperties.map(\r\n e => \r\n )\r\n }\r\n
\r\n Your details:\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n Summary:\r\n
\r\n
\r\n
Address:
\r\n {props.options.type === 'help-me-choose'\r\n ?\r\n

\r\n Cloud Lettings
\r\n 41 Carholme Road, Lincoln LN1 1RN\r\n

\r\n :\r\n

\r\n {props.property.Name}
\r\n {props.property.Address.LineOne}, {props.property.Address.Town} {props.property.Address.PostalCode}\r\n

\r\n }\r\n
\r\n {\r\n props.options.bedrooms != null\r\n ? (\r\n
\r\n
Properties:
\r\n {\r\n props.options.bedrooms === -1\r\n ?

Any Properties

\r\n : (props.options.bedrooms === 7\r\n ?

{props.options.bedrooms}+ Bedroom Properties

\r\n :

{props.options.bedrooms} Bedroom Properties

)\r\n }\r\n\r\n
\r\n )\r\n : null\r\n }\r\n
\r\n
Date:
\r\n

{props.options.date?.toLocaleDateString('en-GB', { dateStyle: 'full' })}

\r\n
\r\n
\r\n
Time:
\r\n

{props.options.time?.start} - {props.options.time?.end}

\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default DetailsFormStep;","import * as React from \"react\";\r\nimport StepWizard from \"react-step-wizard\";\r\nimport \"./index.scss\";\r\nimport StepWizardNavigation from \"../StepWizardNavigation\";\r\nimport SelectTypeStep from \"./select-type\";\r\nimport SelectOtherPropertiesStep from \"./select-other-properties\";\r\nimport SelectDateStep from \"./select-date\";\r\nimport SelectTimeStep from \"./select-time\";\r\nimport DetailsFormStep from \"./details-form\";\r\nimport { PropertyInformation, TimeBlockItem, ArrangeBookingState } from \"./types\";\r\n\r\nexport type ArrangeBookingProps = {\r\n property: PropertyInformation;\r\n token: string;\r\n blockedDates: string[];\r\n minDate: string;\r\n};\r\n\r\nexport class ArrangeBooking extends React.Component\r\n{\r\n constructor(props: ArrangeBookingProps)\r\n {\r\n super(props);\r\n\r\n this.state = {\r\n type: props.property.Bedrooms === 0 ? \"help-me-choose\" : null,\r\n bedrooms: null,\r\n date: null,\r\n time: null,\r\n additionalProperties: []\r\n }\r\n }\r\n\r\n updateType(type: string)\r\n {\r\n this.setState({\r\n type\r\n });\r\n }\r\n\r\n updateBedrooms(bedrooms: number)\r\n {\r\n this.setState({\r\n bedrooms\r\n });\r\n }\r\n\r\n updateDate(date: Date)\r\n {\r\n this.setState({\r\n date\r\n })\r\n }\r\n\r\n updateTime(time: TimeBlockItem)\r\n {\r\n this.setState({\r\n time\r\n })\r\n }\r\n\r\n updateAdditionalProperties(properties: PropertyInformation[])\r\n {\r\n this.setState({\r\n additionalProperties: properties\r\n })\r\n }\r\n\r\n render()\r\n {\r\n const steps: JSX.Element[] = [];\r\n if (this.props.property.Bedrooms !== 0)\r\n {\r\n steps.push( this.updateType(type)} />);\r\n }\r\n if (this.state.type === \"this-property-and-similar\")\r\n {\r\n steps.push( this.updateAdditionalProperties\r\n (properties)} property={this.props.property} />)\r\n }\r\n\r\n steps.push( this.updateBedrooms(bedrooms)} updateDate={(date) => this.updateDate(date)} />);\r\n steps.push( this.updateTime(time)} property={this.props.property} type={this.state.type} date={this.state.date} />);\r\n steps.push();\r\n\r\n return (\r\n \r\n window.scrollTo({ top: document.querySelector(\"[arrange-booking]\")?.clientTop })} children={steps} nav={} />\r\n \r\n );\r\n }\r\n}","import * as React from \"react\";\r\nimport { StepWizardChildProps } from \"react-step-wizard\";\r\nimport Calendar, { CalendarTileProperties } from 'react-calendar';\r\nimport { formatDate } from \"./types\";\r\n\r\n\r\nconst SelectDateStep: React.FunctionComponent<{ blockedDates: string[], minDate: string, type: string | null, bedrooms: number | null, updateBedrooms: (bedrooms: number) => void, updateDate: (date: Date) => void } & Partial> = (props) =>\r\n{\r\n const blocked = props.blockedDates;\r\n\r\n function changeBedrooms(bedrooms: number)\r\n {\r\n props.updateBedrooms(bedrooms);\r\n }\r\n\r\n function changeDate(date: Date)\r\n {\r\n props.updateDate(date);\r\n if (props.nextStep)\r\n {\r\n props.nextStep();\r\n }\r\n }\r\n\r\n function isDateDisabled(props: CalendarTileProperties)\r\n {\r\n const day = props.date.getDay();\r\n const dateString = formatDate(props.date);\r\n return blocked.indexOf(dateString) !== -1 || day == 0 || day == 6; // SAT, SUN always disabled.\r\n }\r\n\r\n const now = new Date();\r\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\r\n const fallbackMin = new Date(today.valueOf());\r\n fallbackMin.setDate(fallbackMin.getDate() + 3);\r\n const minParts = props.minDate.split('-');\r\n const min = minParts.length === 3\r\n ? new Date(parseInt(minParts[0]), parseInt(minParts[1]) - 1, parseInt(minParts[2]))\r\n : fallbackMin;\r\n const max = new Date(min.valueOf());\r\n max.setDate(min.getDate() + 90);\r\n\r\n return (\r\n
\r\n {\r\n props.type === \"help-me-choose\"\r\n ? (\r\n
\r\n

Need help with choosing a property?

\r\n

If you are looking for a property but not sure where to start, we are here to help. Simply choose how many bedrooms you want and select a convenient time for viewings and we will organise the rest. You are one step closer to finding your perfect property.

\r\n

Click a date and time to suit you. If you're looking as a group, it’s a good idea to have all or most of the group with you.

\r\n

How many bedrooms?

\r\n
    \r\n
  • changeBedrooms(1)}>1
  • \r\n
  • changeBedrooms(2)}>2
  • \r\n
  • changeBedrooms(3)}>3
  • \r\n
  • changeBedrooms(4)}>4
  • \r\n
  • changeBedrooms(5)}>5
  • \r\n
  • changeBedrooms(6)}>6
  • \r\n
  • changeBedrooms(7)}>7+
  • \r\n
  • changeBedrooms(-1)}>Any
  • \r\n
\r\n
\r\n )\r\n : (\r\n
\r\n

Click a date and time to suit you. If you're looking as a group, it’s a good idea to have all or most of the group with you.

\r\n
\r\n )\r\n }\r\n {\r\n props.type !== \"help-me-choose\" || props.bedrooms\r\n ? isDateDisabled(props)} onChange={(value: Date) => changeDate(value)} />\r\n : null\r\n }\r\n
\r\n );\r\n}\r\n\r\nexport default SelectDateStep;","import * as React from \"react\";\r\nimport { useState } from \"react\";\r\nimport { StepWizardChildProps } from \"react-step-wizard\";\r\nimport { PropertyInformation } from \"./types\";\r\n\r\ntype SelectOtherPropertiesState = {\r\n loaded: boolean;\r\n error: boolean;\r\n showDropdown: boolean;\r\n searchQuery: string | null;\r\n properties: PropertyInformationJson[];\r\n};\r\n\r\ntype AddressJson = {\r\n lineOne: string;\r\n lineTwo: string | null;\r\n town: string;\r\n county: string;\r\n postalCode: string;\r\n}\r\n\r\ntype PropertyInformationJson = {\r\n url: string;\r\n imageUrl: string;\r\n name: string;\r\n bedrooms: number;\r\n address: AddressJson;\r\n};\r\n\r\nconst SelectOtherPropertiesStep: React.FunctionComponent<{ property: PropertyInformation, additionalProperties: PropertyInformation[], updateAdditionalProperty: (properties: PropertyInformation[]) => void; } & Partial> = (props) =>\r\n{\r\n const [data, setData] = useState({\r\n loaded: false,\r\n error: false,\r\n showDropdown: false,\r\n searchQuery: null,\r\n properties: [],\r\n });\r\n\r\n function advanceStep()\r\n {\r\n if (props.nextStep)\r\n {\r\n props.nextStep();\r\n }\r\n }\r\n\r\n function showDropdown()\r\n {\r\n setData({ loaded: data.loaded, error: data.error, showDropdown: true, searchQuery: data.searchQuery, properties: data.properties });\r\n }\r\n\r\n function hideDropdown()\r\n {\r\n setData({ loaded: data.loaded, error: data.error, showDropdown: false, searchQuery: data.searchQuery, properties: data.properties });\r\n }\r\n\r\n function changeQuery(query: string)\r\n {\r\n setData({ loaded: data.loaded, error: data.error, showDropdown: true, searchQuery: query, properties: data.properties });\r\n }\r\n\r\n function removeAdditionalProperty(propertyUrl: string)\r\n {\r\n props.updateAdditionalProperty(props.additionalProperties.filter(e => e.Url !== propertyUrl));\r\n }\r\n\r\n function addAdditionalProperty(property: PropertyInformationJson)\r\n {\r\n const properties = props.additionalProperties;\r\n properties.push({\r\n Name: property.name,\r\n Url: property.url,\r\n ImageUrl: property.imageUrl,\r\n Bedrooms: property.bedrooms,\r\n Address: {\r\n LineOne: property.address.lineOne,\r\n LineTwo: property.address.lineTwo,\r\n Town: property.address.town,\r\n County: property.address.county,\r\n PostalCode: property.address.postalCode\r\n }\r\n });\r\n props.updateAdditionalProperty(properties);\r\n hideDropdown();\r\n }\r\n\r\n const url = `/property/${props.property.Url}/arrange-viewing/alternate-properties`;\r\n if (!data.loaded)\r\n {\r\n fetch(url)\r\n .then(response =>\r\n {\r\n response.json()\r\n .then((json: PropertyInformationJson[]) =>\r\n {\r\n setData({ loaded: true, error: false, showDropdown: data.showDropdown, searchQuery: null, properties: json });\r\n })\r\n .catch(() =>\r\n {\r\n setData({ loaded: true, error: true, showDropdown: false, searchQuery: null, properties: [] });\r\n });\r\n })\r\n .catch(() =>\r\n {\r\n setData({ loaded: true, error: true, showDropdown: false, searchQuery: null, properties: [] });\r\n })\r\n }\r\n\r\n const selectedUrls = props.additionalProperties.map(e => e.Url);\r\n let dropdownProperties = data.properties.filter(e => selectedUrls.indexOf(e.url) === -1);\r\n if (data.searchQuery && data.searchQuery.length > 0)\r\n {\r\n const query = data.searchQuery.toLowerCase();\r\n dropdownProperties = dropdownProperties.filter(e =>\r\n e.name.toLowerCase().indexOf(query) !== -1\r\n || e.address.lineOne.toLowerCase().indexOf(query) !== -1\r\n || e.address.postalCode.toLowerCase().indexOf(query) !== -1);\r\n }\r\n\r\n if (dropdownProperties.length > 5)\r\n {\r\n dropdownProperties = dropdownProperties.slice(0, 8);\r\n }\r\n\r\n const emptyDropdown = dropdownProperties.length === 0;\r\n\r\n return (\r\n
\r\n
\r\n

Choose properties

\r\n

You can select an additional two properties

\r\n {\r\n data.loaded\r\n ? data.error\r\n ?\r\n
There was an error retrieving alternative properties.
\r\n : props.additionalProperties.length >= 2\r\n ? null\r\n :\r\n
\r\n
\r\n
hideDropdown()}>
\r\n
showDropdown()}>\r\n \r\n
\r\n changeQuery(ev.currentTarget.value)} value={data.searchQuery ?? \"\"} />\r\n
\r\n {\r\n emptyDropdown\r\n ?
There are no matching properties for your search.
\r\n : dropdownProperties.map(e =>\r\n
addAdditionalProperty(e)}>\r\n {e.name}\r\n
\r\n
{e.name}
\r\n

{e.address.lineOne}, {e.address.town} {e.address.postalCode}

\r\n
\r\n \r\n
\r\n )\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n :
Loading alternative properties...
\r\n }\r\n
\r\n
\r\n
\r\n {props.property.Name}\r\n
{props.property.Name}
\r\n

{props.property.Address.LineOne}, {props.property.Address.Town} {props.property.Address.PostalCode}

\r\n
\r\n {\r\n props.additionalProperties.map(p =>\r\n
\r\n \r\n {p.Name}\r\n
{p.Name}
\r\n

{p.Address.LineOne}, {p.Address.Town} {p.Address.PostalCode}

\r\n
)\r\n }\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default SelectOtherPropertiesStep;","import * as React from \"react\";\r\nimport { useState } from \"react\";\r\nimport { StepWizardChildProps } from \"react-step-wizard\";\r\nimport { PropertyInformation, TimeBlockItem, formatDate } from \"./types\";\r\n\r\ntype SelectTimeResult = {\r\n AM: TimeBlockItem[];\r\n PM: TimeBlockItem[];\r\n};\r\n\r\ntype SelectTimeState = {\r\n loaded: boolean;\r\n error: boolean;\r\n currentType: string | null;\r\n currentDate: string | null;\r\n selectedGroup: 'AM' | 'PM';\r\n} & SelectTimeResult;\r\n\r\nconst SelectTimeStep: React.FunctionComponent<{ property: PropertyInformation, type: string | null, date: Date | null, updateTime: (time: TimeBlockItem) => void } & Partial> = (props) =>\r\n{\r\n if (!props.type || !props.date)\r\n {\r\n return null;\r\n }\r\n\r\n const [data, setData] = useState({\r\n loaded: false,\r\n error: false,\r\n AM: [],\r\n PM: [],\r\n currentType: null,\r\n currentDate: null,\r\n selectedGroup: 'AM'\r\n });\r\n\r\n function changeTime(time: TimeBlockItem)\r\n {\r\n props.updateTime(time);\r\n if (props.nextStep)\r\n {\r\n props.nextStep();\r\n }\r\n }\r\n\r\n function changeTimeGroup(group: 'AM' | 'PM')\r\n {\r\n setData({ loaded: data.loaded, error: data.error, AM: data.AM, PM: data.PM, currentType: data.currentType, currentDate: data.currentDate, selectedGroup: group });\r\n }\r\n\r\n const date = formatDate(props.date);\r\n if ((data.currentType !== props.type || data.currentDate !== date) && !data.error)\r\n {\r\n const url = props.property.Bedrooms === 0\r\n ? `/arrange-viewing/availability/${props.type}/${date}`\r\n : `/property/${props.property.Url}/arrange-viewing/availability/${props.type}/${date}`;\r\n\r\n fetch(url)\r\n .then(response =>\r\n {\r\n response.json()\r\n .then((json: SelectTimeResult) =>\r\n {\r\n setData({ loaded: true, error: false, AM: json.AM, PM: json.PM, currentType: props.type, currentDate: date, selectedGroup: 'AM' });\r\n })\r\n .catch(() =>\r\n {\r\n setData({ loaded: data.loaded, error: true, AM: data.AM, PM: data.PM, currentType: null, currentDate: null, selectedGroup: 'AM' });\r\n });\r\n })\r\n .catch(() =>\r\n {\r\n setData({ loaded: data.loaded, error: true, AM: data.AM, PM: data.PM, currentType: null, currentDate: null, selectedGroup: 'AM' });\r\n });\r\n }\r\n\r\n if (data.error)\r\n {\r\n return (
There was an error loading the available times.
)\r\n }\r\n else if (data.loaded)\r\n {\r\n return (\r\n
\r\n
\r\n
\r\n

{props.date.toLocaleDateString('en-GB', { dateStyle: 'long' })}

\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {data.selectedGroup === 'AM'\r\n ?\r\n
    \r\n {data.AM.map(e =>
  • changeTime(e)}>{e.start} - {e.end}
  • )}\r\n
\r\n :\r\n
    \r\n {data.PM.map(e =>
  • changeTime(e)}>{e.start} - {e.end}
  • )}\r\n
\r\n }\r\n
\r\n

If your desired time is not available, please contact us.

\r\n
\r\n
\r\n );\r\n }\r\n else\r\n {\r\n return (
Loading...
)\r\n }\r\n}\r\n\r\nexport default SelectTimeStep;","import * as React from \"react\";\r\nimport { StepWizardChildProps } from \"react-step-wizard\";\r\nimport { PropertyInformation } from \"./types\";\r\n\r\nconst SelectTypeStep: React.FunctionComponent<{ property: PropertyInformation, updateType: (type: string) => void } & Partial> = (props) =>\r\n{\r\n function changeType(type: string)\r\n {\r\n props.updateType(type);\r\n if (props.nextStep)\r\n {\r\n props.nextStep();\r\n }\r\n }\r\n\r\n return (\r\n
\r\n \r\n < label onClick={() => changeType(\"this-property-and-similar\")}>\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n < div className=\"column-heading\">\r\n

View this property & similar properties ?

\r\n
\r\n \r\n \r\n < label onClick={() => changeType(\"help-me-choose\")}>\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n < div className=\"column-heading\">\r\n

Need help with choosing a property ?

\r\n
\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default SelectTypeStep;","\r\ninterface IPostalAddress\r\n{\r\n LineOne: string;\r\n LineTwo: string | null;\r\n Town: string;\r\n County: string;\r\n PostalCode: string;\r\n};\r\n\r\nexport type PropertyInformation = {\r\n Url: string;\r\n ImageUrl: string;\r\n Name: string;\r\n Bedrooms: number;\r\n Address: IPostalAddress;\r\n};\r\n\r\nexport type TimeBlockItem = {\r\n start: string;\r\n end: string;\r\n}\r\n\r\nexport type ArrangeBookingState = {\r\n type: string | null;\r\n bedrooms: number | null;\r\n date: Date | null;\r\n time: TimeBlockItem | null;\r\n additionalProperties: PropertyInformation[];\r\n};\r\n\r\nexport function formatDate(date: Date | null | undefined)\r\n{\r\n if (!date)\r\n {\r\n return \"\";\r\n }\r\n\r\n const year = date.getFullYear();\r\n const month = date.getMonth() + 1;\r\n const day = date.getDate();\r\n\r\n return `${year}-${month < 10 ? \"0\" : \"\"}${month}-${day < 10 ? \"0\" : \"\"}${day}`\r\n}","let check: HTMLInputElement | null = null;\r\nlet source: string | null = null;\r\nlet target: string | null = null;\r\n\r\nfunction cloneField(ev: Event)\r\n{\r\n if (!check || !source || !target)\r\n {\r\n return;\r\n }\r\n\r\n const sourceElem = ev.currentTarget as HTMLInputElement;\r\n const targetElem = document.querySelector(`input[name=${sourceElem.name.replace(source, target)}]`) as HTMLInputElement | null;\r\n if (!targetElem || check.checked)\r\n {\r\n return;\r\n }\r\n\r\n targetElem.value = sourceElem.value;\r\n}\r\n\r\nfunction configureFields(ev: Event | null)\r\n{\r\n if (!check || !source || !target)\r\n {\r\n return;\r\n }\r\n\r\n const targetElems: NodeListOf = document.querySelectorAll(`input[name^=${target}]`);\r\n for (const elem of targetElems)\r\n {\r\n elem.readOnly = !check.checked;\r\n if (ev != null && ev.type === \"change\")\r\n {\r\n if (check.checked)\r\n {\r\n elem.value = \"\";\r\n }\r\n else\r\n {\r\n const sourceElem = document.querySelector(`input[name=${elem.name.replace(target, source)}]`) as HTMLInputElement | null;\r\n if (sourceElem)\r\n {\r\n elem.value = sourceElem.value;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const fieldset = document.querySelector(\"fieldset#billing_address\") as HTMLFieldSetElement | null;\r\n if (fieldset)\r\n {\r\n fieldset.style.display = check.checked ? \"block\" : \"none\";\r\n }\r\n}\r\n\r\nfunction SetupAddressFields()\r\n{\r\n check = document.getElementById(\"enter_billing_address\") as HTMLInputElement | null;\r\n if (!check || !check.dataset.dbsSource || !check.dataset.dbsTarget)\r\n {\r\n return;\r\n }\r\n\r\n source = check.dataset.dbsSource;\r\n target = check.dataset.dbsTarget;\r\n\r\n check.addEventListener(\"change\", configureFields);\r\n configureFields(null);\r\n\r\n const sourceElements: NodeListOf = document.querySelectorAll(`input[name^=${source}]`);\r\n for (const elem of sourceElements)\r\n {\r\n const targetElem = document.querySelector(`input[name=${elem.name.replace(source, check.dataset.dbsTarget)}]`) as HTMLInputElement | null;\r\n if (!targetElem)\r\n {\r\n continue;\r\n }\r\n\r\n console.log(`setup ${targetElem.name}`);\r\n elem.addEventListener(\"change\", cloneField);\r\n }\r\n}\r\n\r\nwindow.addEventListener(\"load\", SetupAddressFields)","const documentSliders: LatestSlider[] = [];\r\n\r\nclass LatestSlider\r\n{\r\n private container: HTMLElement;\r\n private prev: HTMLElement | null;\r\n private next: HTMLElement | null;\r\n private large: HTMLImageElement | null = null;\r\n private speed: number;\r\n\r\n constructor(container: HTMLElement)\r\n {\r\n this.container = container;\r\n this.speed = this.container.dataset.speed\r\n ? parseInt(this.container.dataset.speed)\r\n : 8000;\r\n\r\n this.prev = this.container.parentElement?.querySelector(\".nav-prev\") as HTMLElement | null;\r\n if (this.prev)\r\n {\r\n this.prev.addEventListener(\"click\", (ev) =>\r\n {\r\n ev.preventDefault();\r\n this.revertSlider();\r\n });\r\n }\r\n\r\n this.next = this.container.parentElement?.querySelector(\".nav-next\") as HTMLElement | null;\r\n if (this.next)\r\n {\r\n this.next.addEventListener(\"click\", (ev) =>\r\n {\r\n ev.preventDefault();\r\n this.advanceSlider();\r\n });\r\n }\r\n\r\n if (this.container.dataset.target)\r\n {\r\n this.large = document.querySelector(this.container.dataset.target) as HTMLImageElement | null;\r\n }\r\n\r\n const newNodes: Node[] = [];\r\n for (let i = 0; i < this.container.childNodes.length; i++)\r\n {\r\n const child = this.container.childNodes[i];\r\n\r\n if (child.nodeType == Node.ELEMENT_NODE)\r\n {\r\n newNodes.push(child.cloneNode(true));\r\n }\r\n else\r\n {\r\n child.remove();\r\n }\r\n }\r\n\r\n if (this.speed > 0)\r\n {\r\n setInterval(() => this.advanceSlider(), this.speed);\r\n }\r\n }\r\n\r\n private advanceSlider()\r\n {\r\n this.container.classList.add(\"tick\");\r\n\r\n if (this.large && this.container.childNodes.length >= 2)\r\n {\r\n const nextChild = this.container.childNodes.item(1) as HTMLElement;\r\n const nextImage = nextChild.querySelector(\"img\");\r\n if (nextImage)\r\n {\r\n this.large.src = nextImage.src;\r\n }\r\n }\r\n\r\n setTimeout(() => this.cleanAdvanceSlider(), 500);\r\n }\r\n\r\n private cleanAdvanceSlider()\r\n {\r\n const first = this.container.childNodes.item(0);\r\n this.container.appendChild(first);\r\n\r\n this.container.classList.remove(\"tick\");\r\n }\r\n\r\n private revertSlider()\r\n {\r\n const last = this.container.childNodes.item(this.container.childNodes.length - 1);\r\n if (this.large)\r\n {\r\n const lastImage = (last as HTMLElement).querySelector(\"img\");\r\n if (lastImage)\r\n {\r\n this.large.src = lastImage.src;\r\n }\r\n }\r\n\r\n this.container.prepend(last);\r\n\r\n this.container.classList.add(\"tock\");\r\n window.requestAnimationFrame(() => this.container.classList.add(\"ing\"));\r\n setTimeout(() => this.cleanRevertSlider(), 500);\r\n }\r\n\r\n private cleanRevertSlider()\r\n {\r\n this.container.classList.remove(\"tock\");\r\n this.container.classList.remove(\"ing\");\r\n }\r\n}\r\n\r\nexport function Initialize()\r\n{\r\n const sliders = document.querySelectorAll(\"[dbs-carousel]\");\r\n\r\n for (let i = 0; i < sliders.length; i++)\r\n {\r\n documentSliders.push(new LatestSlider(sliders[i] as HTMLElement));\r\n }\r\n}","interface IPostalAddress\r\n{\r\n lineOne: string;\r\n lineTwo: string | null;\r\n town: string;\r\n county: string;\r\n postalCode: string;\r\n}\r\n\r\ninterface IOfficeMapPin\r\n{\r\n name: string;\r\n url: string;\r\n\r\n address: IPostalAddress;\r\n phone: string;\r\n\r\n latitude: number;\r\n longitude: number;\r\n\r\n imageFilename?: string;\r\n pinImageFilename?: string;\r\n}\r\n\r\nimport { Cluster, ClusterStats, MarkerClusterer, Renderer } from \"@googlemaps/markerclusterer\";\r\nimport * as $ from \"jquery\";\r\n\r\ndeclare global\r\n{\r\n interface Window\r\n {\r\n InitializeMapView: () => void;\r\n }\r\n}\r\n\r\nclass CloudLettingsRenderer implements Renderer\r\n{\r\n render({ count, position }: Cluster, _stats: ClusterStats): google.maps.Marker\r\n {\r\n const svg = window.btoa(`\r\n \r\n \r\n \r\n \r\n `);\r\n\r\n // create marker using svg icon\r\n return new google.maps.Marker({\r\n position,\r\n icon: {\r\n url: `data:image/svg+xml;base64,${svg}`,\r\n scaledSize: new google.maps.Size(45, 45),\r\n },\r\n label: {\r\n text: String(count),\r\n color: \"#fff\",\r\n fontSize: \"12px\",\r\n },\r\n title: `Cluster of ${count} markers`,\r\n // adjust zIndex to be above other markers\r\n zIndex: Number(google.maps.Marker.MAX_ZINDEX) + count,\r\n });\r\n }\r\n\r\n}\r\n\r\nlet map: google.maps.Map;\r\nlet infoWindow: google.maps.InfoWindow;\r\nlet initialZoom: boolean;\r\n\r\nlet mapElement: HTMLElement | null = null;\r\nlet searchElement: HTMLElement | null = null;\r\nlet directionsElement: HTMLElement | null = null;\r\nlet errorElement: HTMLElement | null = null;\r\n\r\nlet placeMarkers = new Array();\r\nlet directionsService: google.maps.DirectionsService;\r\nlet directionsDisplay: google.maps.DirectionsRenderer;\r\n\r\nlet mapStyle: any;\r\n\r\nfunction toggleMarker(placemark: IOfficeMapPin, marker: google.maps.Marker)\r\n{\r\n if (infoWindow != null)\r\n {\r\n infoWindow.close();\r\n }\r\n\r\n let infoContent = `';\r\n infoWindow = new google.maps.InfoWindow({\r\n content: infoContent\r\n });\r\n\r\n infoWindow.open(map, marker);\r\n}\r\n\r\nfunction loadTheme(data: JQueryXHR): void\r\n{\r\n mapStyle = data.responseJSON;\r\n\r\n if (mapElement == null)\r\n {\r\n return;\r\n }\r\n\r\n let apiPath = mapElement.dataset.apiPath;\r\n if (apiPath != null)\r\n {\r\n $.ajax({\r\n url: apiPath,\r\n complete: loadXmlDocument\r\n });\r\n }\r\n}\r\n\r\nfunction loadXmlDocument(data: JQueryXHR): void\r\n{\r\n if (mapElement == null)\r\n {\r\n return;\r\n }\r\n\r\n const placemarks = JSON.parse(data.responseText) as IOfficeMapPin[];\r\n\r\n map = new google.maps.Map(mapElement,\r\n {\r\n zoom: 16,\r\n center: new google.maps.LatLng(0, 0),\r\n mapTypeId: google.maps.MapTypeId.ROADMAP,\r\n styles: mapStyle\r\n });\r\n\r\n for (let i = 0; i < placemarks.length; i++)\r\n {\r\n const placemark = placemarks[i];\r\n const point = new google.maps.LatLng(placemark.latitude, placemark.longitude);\r\n\r\n const marker = new google.maps.Marker({\r\n map: map,\r\n position: point,\r\n title: placemark.name,\r\n icon: placemark.pinImageFilename ?? \"/site/img/icons/map-pin.svg\"\r\n });\r\n\r\n google.maps.event.addListener(marker,\r\n \"click\",\r\n function (this: google.maps.Marker)\r\n {\r\n toggleMarker(placemark, this);\r\n });\r\n\r\n if (placemarks.length === 1 && mapElement.dataset.nopopup !== \"true\")\r\n {\r\n toggleMarker(placemark, marker);\r\n }\r\n\r\n placeMarkers.push(marker);\r\n }\r\n\r\n new MarkerClusterer({ markers: placeMarkers, map, renderer: new CloudLettingsRenderer });\r\n\r\n findMapCenterAndZoom();\r\n setupDirections();\r\n}\r\n\r\nfunction findMapCenterAndZoom(): void\r\n{\r\n if (map == null)\r\n {\r\n return;\r\n }\r\n\r\n const bounds = new google.maps.LatLngBounds();\r\n placeMarkers.forEach((value: google.maps.Marker) =>\r\n {\r\n let point = value.getPosition();\r\n if (point != null)\r\n {\r\n bounds.extend(point);\r\n }\r\n });\r\n\r\n google.maps.event.addListener(map,\r\n \"zoom_changed\",\r\n () =>\r\n {\r\n const zoomChangeBoundsListener = google.maps.event.addListener(map,\r\n \"bounds_changed\",\r\n function (this: google.maps.Map)\r\n {\r\n const currentZoom = this.getZoom();\r\n if (currentZoom && currentZoom > 15 && initialZoom)\r\n {\r\n // Change max/min zoom here\r\n this.setZoom(15);\r\n initialZoom = false;\r\n }\r\n google.maps.event.removeListener(zoomChangeBoundsListener);\r\n });\r\n });\r\n\r\n const parentTab = document.querySelector(\"a[href='#search-map']\");\r\n if (parentTab)\r\n {\r\n parentTab.addEventListener(\"shown.bs.tab\", () =>\r\n {\r\n console.log(\"tab switch\");\r\n const bounds = new google.maps.LatLngBounds();\r\n placeMarkers.forEach((value: google.maps.Marker) =>\r\n {\r\n let point = value.getPosition();\r\n if (point != null)\r\n {\r\n bounds.extend(point);\r\n }\r\n });\r\n initialZoom = true;\r\n map.fitBounds(bounds);\r\n });\r\n }\r\n\r\n initialZoom = true;\r\n map.fitBounds(bounds);\r\n}\r\n\r\nfunction findDirectionsKeyDown(ev: KeyboardEvent)\r\n{\r\n if (ev.key === \"Enter\")\r\n {\r\n ev.preventDefault();\r\n findDirections(ev);\r\n }\r\n}\r\n\r\nfunction findDirections(ev: Event)\r\n{\r\n if (ev.currentTarget == null)\r\n {\r\n return;\r\n }\r\n\r\n let rootElement = ev.currentTarget as HTMLElement;\r\n while (rootElement.attributes.getNamedItem(\"map-search\") == null)\r\n {\r\n if (rootElement.parentElement == null)\r\n {\r\n return;\r\n }\r\n\r\n rootElement = rootElement.parentElement;\r\n }\r\n\r\n const inputElem = rootElement.querySelector(\"input\");\r\n if (inputElem == null)\r\n {\r\n return;\r\n }\r\n\r\n const fromAddress = inputElem.value;\r\n\r\n if (directionsElement == null)\r\n {\r\n return;\r\n }\r\n\r\n directionsDisplay.setMap(map);\r\n directionsDisplay.setPanel(directionsElement);\r\n\r\n // get first placemark position\r\n let destination: google.maps.LatLng | null | undefined = null;\r\n\r\n if (placeMarkers.length > 1)\r\n {\r\n const locationSelect = searchElement?.querySelector(\"select\");\r\n if (locationSelect != null)\r\n {\r\n destination = placeMarkers[parseInt(locationSelect.value)].getPosition();\r\n }\r\n }\r\n else\r\n {\r\n destination = placeMarkers[0].getPosition();\r\n }\r\n\r\n if (destination == null)\r\n {\r\n return;\r\n }\r\n\r\n directionsService.route({\r\n origin: fromAddress,\r\n destination: destination,\r\n travelMode: google.maps.TravelMode.DRIVING,\r\n unitSystem: google.maps.UnitSystem.IMPERIAL,\r\n provideRouteAlternatives: true\r\n }, displayDirections);\r\n}\r\n\r\nfunction displayDirections(result: google.maps.DirectionsResult | null, status: google.maps.DirectionsStatus)\r\n{\r\n if (directionsElement == null || errorElement == null || result == null)\r\n {\r\n return;\r\n }\r\n\r\n if (status === google.maps.DirectionsStatus.OK)\r\n {\r\n directionsElement.style.display = \"block\";\r\n errorElement.style.display = \"none\";\r\n directionsDisplay.setDirections(result);\r\n }\r\n else\r\n {\r\n directionsElement.style.display = \"none\";\r\n errorElement.style.display = \"block\";\r\n }\r\n}\r\n\r\nfunction setupDirections()\r\n{\r\n if (searchElement == null)\r\n {\r\n return;\r\n }\r\n\r\n const group = document.createElement(\"div\");\r\n group.className = \"input-group\";\r\n\r\n const destination = document.createElement(\"input\");\r\n destination.type = \"text\";\r\n destination.autocomplete = \"postal-code\";\r\n destination.placeholder = \"Enter your postcode...\";\r\n destination.className = \"form-control\";\r\n destination.addEventListener(\"keydown\", findDirectionsKeyDown);\r\n group.appendChild(destination);\r\n\r\n const button = document.createElement(\"button\");\r\n button.type = \"button\";\r\n button.className = \"btn btn-dark\";\r\n button.addEventListener(\"click\", (ev) => findDirections(ev));\r\n\r\n const icon = document.createElement(\"i\");\r\n icon.className = \"la la-angle-right\";\r\n\r\n button.appendChild(icon);\r\n group.appendChild(button);\r\n searchElement.appendChild(group);\r\n\r\n if (placeMarkers.length > 1)\r\n {\r\n const select = document.createElement(\"select\");\r\n select.className = \"form-control mb-3\";\r\n\r\n for (let i = 0; i < placeMarkers.length; i++)\r\n {\r\n const label = placeMarkers[i].getTitle();\r\n if (label == null)\r\n {\r\n continue;\r\n }\r\n\r\n const option = document.createElement(\"option\");\r\n option.value = i.toFixed(0);\r\n option.text = label;\r\n\r\n select.appendChild(option);\r\n }\r\n\r\n select.addEventListener(\"change\", (ev) => { if (destination.value != \"\") findDirections(ev); });\r\n\r\n searchElement.prepend(select);\r\n }\r\n\r\n errorElement = document.createElement(\"div\");\r\n errorElement.className = \"alert alert-danger mt-3\";\r\n errorElement.style.display = \"none\";\r\n errorElement.innerText = \"There was an error searching for the specified location.\";\r\n searchElement.appendChild(errorElement);\r\n\r\n directionsService = new google.maps.DirectionsService();\r\n directionsDisplay = new google.maps.DirectionsRenderer();\r\n}\r\n\r\nfunction Initialize()\r\n{\r\n let elem = document.querySelector(\"div[map-element]\");\r\n if (elem != null && (elem instanceof HTMLElement))\r\n {\r\n mapElement = elem;\r\n\r\n const themePath = mapElement.dataset.theme ?? \"/site/map/theme.json\";\r\n $.ajax({\r\n url: themePath,\r\n complete: loadTheme\r\n });\r\n }\r\n\r\n elem = document.querySelector(\"div[map-search]\");\r\n if (elem != null && (elem instanceof HTMLElement))\r\n {\r\n searchElement = elem;\r\n }\r\n\r\n elem = document.querySelector(\"div[map-directions]\");\r\n if (elem != null && (elem instanceof HTMLElement))\r\n {\r\n directionsElement = elem;\r\n }\r\n}\r\n\r\nwindow.InitializeMapView = Initialize;","import * as React from \"react\";\r\nimport { StepWizardChildProps } from \"react-step-wizard\";\r\n\r\nconst StepWizardNavigation: React.FunctionComponent> = (props) =>\r\n{\r\n if (!props.totalSteps || !props.currentStep)\r\n {\r\n return null;\r\n }\r\n\r\n function navigateToPreviousStep(step: number)\r\n {\r\n if (props.currentStep && props.goToStep && step < props.currentStep)\r\n {\r\n props.goToStep(step);\r\n }\r\n }\r\n\r\n const navItems: JSX.Element[] = [];\r\n for (let i = 1; i <= props.totalSteps; i++)\r\n {\r\n navItems.push(
  • navigateToPreviousStep(i)}>{i}
  • )\r\n }\r\n\r\n return (\r\n
      \r\n );\r\n}\r\n\r\nexport default StepWizardNavigation;","import * as React from \"react\";\r\nimport { useState } from \"react\";\r\n\r\n\r\ntype ElectricCalculatorState = {\r\n rate: \"single\" | \"multi\" | undefined;\r\n tenants: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | undefined;\r\n opening: number | undefined;\r\n current: number | undefined;\r\n opening2: number | undefined;\r\n current2: number | undefined;\r\n};\r\n\r\nconst QuotaTable = {\r\n 1: 3000,\r\n 2: 3400,\r\n 3: 4000,\r\n 4: 5000,\r\n 5: 6000,\r\n 6: 7000,\r\n 7: 8000,\r\n 8: 9000,\r\n 9: 10000,\r\n 10: 11000\r\n}\r\n\r\nconst ElectricCalculatorStep: React.FunctionComponent = () =>\r\n{\r\n const [data, setData] = useState({\r\n rate: undefined,\r\n tenants: undefined,\r\n opening: undefined,\r\n current: undefined,\r\n opening2: undefined,\r\n current2: undefined\r\n });\r\n\r\n function updateRate(ev: React.ChangeEvent)\r\n {\r\n setData({\r\n rate: ev.target.value === \"single\" || ev.target.value === \"multi\" ? ev.target.value : undefined,\r\n tenants: data.tenants,\r\n opening: data.opening,\r\n current: data.current,\r\n opening2: ev.target.value === \"multi\" ? data.opening2 : undefined,\r\n current2: ev.target.value === \"multi\" ? data.current2 : undefined\r\n });\r\n }\r\n\r\n function updateTenants(ev: React.ChangeEvent)\r\n {\r\n const result = parseInt(ev.target.value);\r\n setData({\r\n rate: data.rate,\r\n tenants: result > 0 && result <= 10 ? result as (1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10) : undefined,\r\n opening: data.opening,\r\n current: data.current,\r\n opening2: data.opening2,\r\n current2: data.current2\r\n });\r\n }\r\n\r\n function updateOpening(ev: React.ChangeEvent)\r\n {\r\n const result = parseInt(ev.target.value);\r\n setData({\r\n rate: data.rate,\r\n tenants: data.tenants,\r\n opening: result > 0 ? result : undefined,\r\n current: data.current,\r\n opening2: data.opening2,\r\n current2: data.current2\r\n });\r\n }\r\n\r\n function updateCurrent(ev: React.ChangeEvent)\r\n {\r\n const result = parseInt(ev.target.value);\r\n setData({\r\n rate: data.rate,\r\n tenants: data.tenants,\r\n opening: data.opening,\r\n current: result > 0 ? result : undefined,\r\n opening2: data.opening2,\r\n current2: data.current2\r\n });\r\n }\r\n\r\n function updateOpening2(ev: React.ChangeEvent)\r\n {\r\n const result = parseInt(ev.target.value);\r\n setData({\r\n rate: data.rate,\r\n tenants: data.tenants,\r\n opening: data.opening,\r\n current: data.current,\r\n opening2: result > 0 ? result : undefined,\r\n current2: data.current2\r\n });\r\n }\r\n\r\n function updateCurrent2(ev: React.ChangeEvent)\r\n {\r\n const result = parseInt(ev.target.value);\r\n setData({\r\n rate: data.rate,\r\n tenants: data.tenants,\r\n opening: data.opening,\r\n current: data.current,\r\n opening2: data.opening2,\r\n current2: result > 0 ? result : undefined\r\n });\r\n }\r\n\r\n const quota = data.tenants ? QuotaTable[data.tenants] : 0;\r\n let usage = data.opening && data.current ? data.current - data.opening : 0;\r\n if (data.rate === \"multi\" && data.opening2 && data.current2)\r\n {\r\n usage += (data.current2 - data.opening2);\r\n }\r\n\r\n return (\r\n
      \r\n
      \r\n

      Electric

      \r\n

      Your allowance as allocated in the tenancy agreement is set out in kWh. Electric meters measure in kWh so to calculate your electric use you will need to ensure you have the kWh readings from your meter (taken from the meters on the day you check) and your opening readings as detailed in the inventory when you moved in and enter them below. Some meters have more than one rate (multi rate) and you will need to add these rates together.

      \r\n

      Click here to see the different types of electric meters which will help you to identify which one you have.

      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n {\r\n data.opening && data.current && data.opening >= data.current\r\n ? The current reading should be higher than the opening reading.\r\n : null\r\n }\r\n
      \r\n
      \r\n {\r\n data.rate === \"multi\"\r\n ?\r\n
      \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n {\r\n data.opening2 && data.current2 && data.opening2 >= data.current2\r\n ? The current reading should be higher than the opening reading.\r\n : null\r\n }\r\n
      \r\n
      \r\n : null\r\n }\r\n
      \r\n {\r\n data.rate\r\n && data.tenants\r\n && data.opening\r\n && data.current\r\n && (data.opening < data.current)\r\n && (data.rate === \"single\" || (data.opening2 && data.current2 && (data.opening2 < data.current2)))\r\n ?\r\n
      \r\n

      \r\n \r\n {(usage / quota).toLocaleString(\"en-GB\", { style: \"percent\", maximumFractionDigits: 1 })}\r\n of allowance used\r\n

      \r\n
      \r\n
      \r\n \r\n

      {usage.toLocaleString(\"en-GB\", { maximumFractionDigits: 2 })} kWh

      \r\n
      \r\n
      \r\n \r\n

      {quota} kWh

      \r\n
      \r\n
      \r\n
      Important points to consider about your usage
      \r\n

      Your usage will fluctuate depending on the time of year, therefore it is not expected that you will use an equal amount of units per month. Naturally your gas usage will increase quicker in colder months but usually evens out when the warmer weather is here. The allowance is generous enough to ensure you can use the facilities at your convenience and that you will be comfortable in the property. You should be warm but not wasteful. Follow the guidance on this link for tips on how to be energy efficient. Please note comments on the blog are generic tips and you should apply them to you where applicable as best as you can.

      \r\n

      Some properties will benefit from appliances which are there for your convenience and are energy efficient appliances but will naturally use a lot of your allowance, such as tumble dryers. Try to use this only when necessary, where there is a washing line use this as much as you can and consider using an indoor airier placed near the radiator (don't hang washing on the radiator, this won't keep you or the house very warm and is very inefficient way of drying clothes and heating your property).

      \r\n

      Any overuse may not be apparent until all the bills for your tenancy have been received. If you exceed your allowance as noted in the tenancy agreement you will be required to pay the difference.

      \r\n

      If you have any questions at all or need further guidance, please feel free to contact our office and we will do everything you can to help you.

      \r\n
      \r\n : null\r\n }\r\n
      \r\n );\r\n}\r\n\r\nexport default ElectricCalculatorStep;","import * as React from \"react\";\r\nimport { useState } from \"react\";\r\n\r\n\r\ntype GasCalculatorState = {\r\n tenants: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | undefined;\r\n opening: number | undefined;\r\n current: number | undefined;\r\n};\r\n\r\nconst QuotaTable = {\r\n 1: 10000,\r\n 2: 13000,\r\n 3: 16000,\r\n 4: 20000,\r\n 5: 25000,\r\n 6: 30000,\r\n 7: 34000,\r\n 8: 38000,\r\n 9: 41000,\r\n 10: 44000\r\n}\r\n\r\nconst GasCalculatorStep: React.FunctionComponent = () =>\r\n{\r\n const [data, setData] = useState({\r\n tenants: undefined,\r\n opening: undefined,\r\n current: undefined\r\n });\r\n\r\n function updateTenants(ev: React.ChangeEvent)\r\n {\r\n const result = parseInt(ev.target.value);\r\n setData({\r\n tenants: result > 0 && result <= 10 ? result as (1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10) : undefined,\r\n opening: data.opening,\r\n current: data.current\r\n });\r\n }\r\n\r\n function updateOpening(ev: React.ChangeEvent)\r\n {\r\n const result = parseInt(ev.target.value);\r\n setData({\r\n tenants: data.tenants,\r\n opening: result > 0 ? result : undefined,\r\n current: data.current\r\n });\r\n }\r\n\r\n function updateCurrent(ev: React.ChangeEvent)\r\n {\r\n const result = parseInt(ev.target.value);\r\n setData({\r\n tenants: data.tenants,\r\n opening: data.opening,\r\n current: result > 0 ? result : undefined\r\n });\r\n }\r\n\r\n const quota = data.tenants ? QuotaTable[data.tenants] : 0;\r\n let usage = data.opening && data.current ? data.current - data.opening : 0;\r\n usage *= (1.02264 * 40 / 3.6);\r\n\r\n return (\r\n
      \r\n
      \r\n

      Gas

      \r\n

      Your allowance as allocated in the tenancy agreement is set out in kWh. Gas meters measure in m3 (metric) or f3 (imperial), therefore a conversion needs to be made from the readings in m3 or f3 into kWh. Click here to see the different types of gas meters which will help you to identify which one you have and details on the how the usage is calculated into kWh. If your meter measures in f3, you will need to contact the office in order for us to make your calculation, you must not use the calculator below.

      \r\n

      Please note: The calculations used to generate gas bills are prescribed in The Gas (Calculation of Thermal Energy) Regulations 1996 (SI 1996/439). The actual method used may vary slightly depending on each individual energy supplier, however the method will be very similar to the calculations used to estimate your usage to date. Click here to view the calculation method as detailed on gov.uk.

      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n {\r\n data.opening && data.current && data.opening >= data.current\r\n ? The current reading should be higher than the opening reading.\r\n : null\r\n }\r\n
      \r\n
      \r\n
      \r\n {\r\n data.tenants\r\n && data.opening\r\n && data.current\r\n && (data.opening < data.current)\r\n ?\r\n
      \r\n

      \r\n \r\n {(usage / quota).toLocaleString(\"en-GB\", { style: \"percent\", maximumFractionDigits: 1 })}\r\n of allowance used\r\n

      \r\n
      \r\n
      \r\n \r\n

      {usage.toLocaleString(\"en-GB\", { maximumFractionDigits: 2 })} kWh

      \r\n
      \r\n
      \r\n \r\n

      {quota} kWh

      \r\n
      \r\n
      \r\n
      Important points to consider about your usage
      \r\n

      Your usage will fluctuate depending on the time of year, therefore it is not expected that you will use an equal amount of units per month. Naturally your gas usage will increase quicker in colder months but usually evens out when the warmer weather is here. The allowance is generous enough to ensure you can use the facilities at your convenience and that you will be comfortable in the property. You should be warm but not wasteful. Follow the guidance on this link for tips on how to be energy efficient. Please note comments on the blog are generic tips and you should apply them to you where applicable as best as you can.

      \r\n

      Some properties will benefit from appliances which are there for your convenience and are energy efficient appliances but will naturally use a lot of your allowance, such as tumble dryers. Try to use this only when necessary, where there is a washing line use this as much as you can and consider using an indoor airier placed near the radiator (don't hang washing on the radiator, this won't keep you or the house very warm and is very inefficient way of drying clothes and heating your property).

      \r\n

      Any overuse may not be apparent until all the bills for your tenancy have been received. If you exceed your allowance as noted in the tenancy agreement you will be required to pay the difference.

      \r\n

      If you have any questions at all or need further guidance, please feel free to contact our office and we will do everything you can to help you.

      \r\n
      \r\n : null\r\n }\r\n
      \r\n );\r\n}\r\n\r\nexport default GasCalculatorStep;","import * as React from \"react\";\r\nimport StepWizard from \"react-step-wizard\";\r\nimport UtilitySelection from \"./utility-selection\";\r\nimport GasCalculatorStep from \"./gas-calculator\";\r\nimport ElectricCalculatorStep from \"./electric-calculator\";\r\nimport WaterCalculatorStep from \"./water-calculator\";\r\nimport StepWizardNavigation from \"../StepWizardNavigation\";\r\n\r\nimport \"../ArrangeBooking/index.scss\";\r\n\r\ntype UtilitiesCalculatorState = {\r\n type: string | null;\r\n};\r\n\r\nexport type UtilitiesCalculatorProps = {\r\n};\r\n\r\nexport class UtilitiesCalculator extends React.Component\r\n{\r\n constructor(props: UtilitiesCalculatorProps)\r\n {\r\n super(props);\r\n this.state = {\r\n type : null\r\n };\r\n }\r\n\r\n updateType(type: string)\r\n {\r\n this.setState({\r\n type\r\n });\r\n }\r\n\r\n render()\r\n {\r\n const steps: JSX.Element[] = [];\r\n\r\n steps.push( this.updateType(type)} />);\r\n switch (this.state.type)\r\n {\r\n case \"gas\":\r\n steps.push();\r\n break;\r\n case \"electric\":\r\n steps.push();\r\n break;\r\n case \"water\":\r\n steps.push();\r\n break;\r\n default:\r\n steps.push(
      )\r\n break;\r\n }\r\n\r\n return (\r\n window.scrollTo({ top: document.querySelector(\"[utilities-calculator]\")?.clientTop })} children={steps} nav={} />\r\n );\r\n }\r\n}","import * as React from \"react\";\r\nimport { StepWizardChildProps } from \"react-step-wizard\";\r\n\r\nconst UtilitySelectionStep: React.FunctionComponent<{ updateType: (type: string) => void } & Partial> = (props) =>\r\n{\r\n function changeType(type: string)\r\n {\r\n props.updateType(type);\r\n if (props.nextStep)\r\n {\r\n props.nextStep();\r\n }\r\n }\r\n\r\n return (\r\n
      \r\n
      \r\n

      Please choose your utility

      \r\n

      To ensure you remain within your utility allowance, you will need to monitor your use during the tenancy term. The allowance is not there to trick you or set you up to fail; if you are sensible and conscious of your usage you should have no problem staying within the allowance.

      \r\n

      Before you start, you will need to obtain your opening readings from the start of the tenancy (found on your inventory) and also take current meter readings. If you live in accommodation where you cannot access the meters as they are located in a locked cupboard, please contact us and we will help you to obtain these.

      \r\n
      \r\n
      \r\n \r\n \r\n \r\n
      \r\n
      \r\n );\r\n}\r\n\r\nexport default UtilitySelectionStep;","import * as React from \"react\";\r\nimport { useState } from \"react\";\r\n\r\n\r\ntype WaterCalculatorState = {\r\n tenants: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | undefined;\r\n opening: number | undefined;\r\n current: number | undefined;\r\n};\r\n\r\nconst QuotaTable = {\r\n 1: 125,\r\n 2: 130,\r\n 3: 162,\r\n 4: 190,\r\n 5: 215,\r\n 6: 240,\r\n 7: 270,\r\n 8: 290,\r\n 9: 310,\r\n 10: 330\r\n}\r\n\r\nconst WaterCalculatorStep: React.FunctionComponent = () =>\r\n{\r\n const [data, setData] = useState({\r\n tenants: undefined,\r\n current: undefined,\r\n opening: undefined\r\n });\r\n\r\n function updateTenants(ev: React.ChangeEvent)\r\n {\r\n const result = parseInt(ev.target.value);\r\n setData({\r\n tenants: result > 0 && result <= 10 ? result as (1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10) : undefined,\r\n opening: data.opening,\r\n current: data.current\r\n });\r\n }\r\n\r\n function updateOpening(ev: React.ChangeEvent)\r\n {\r\n const result = parseInt(ev.target.value);\r\n setData({\r\n tenants: data.tenants,\r\n opening: result > 0 ? result : undefined,\r\n current: data.current\r\n });\r\n }\r\n\r\n function updateCurrent(ev: React.ChangeEvent)\r\n {\r\n const result = parseInt(ev.target.value);\r\n setData({\r\n tenants: data.tenants,\r\n opening: data.opening,\r\n current: result > 0 ? result : undefined\r\n });\r\n }\r\n\r\n const quota = data.tenants ? QuotaTable[data.tenants] : 0;\r\n let usage = data.opening && data.current ? data.current - data.opening : 0;\r\n\r\n return (\r\n
      \r\n
      \r\n

      Water

      \r\n

      Your allowance as allocated in the tenancy agreement is set out in m3. If you do not have access to a water meter, please contact the office and we will help you further.

      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n {\r\n data.opening && data.current && data.opening >= data.current\r\n ? The current reading should be higher than the opening reading.\r\n : null\r\n }\r\n
      \r\n
      \r\n
      \r\n {\r\n data.tenants\r\n && data.opening\r\n && data.current\r\n && (data.opening < data.current)\r\n ?\r\n
      \r\n

      \r\n \r\n {(usage / quota).toLocaleString(\"en-GB\", { style: \"percent\", maximumFractionDigits: 1 })}\r\n of allowance used\r\n

      \r\n
      \r\n
      \r\n \r\n

      {usage.toLocaleString(\"en-GB\", { maximumFractionDigits: 2 })} m3

      \r\n
      \r\n
      \r\n \r\n

      {quota} m3

      \r\n
      \r\n
      \r\n
      \r\n : null\r\n }\r\n
      \r\n );\r\n}\r\n\r\nexport default WaterCalculatorStep;","import '../css/main.scss';\r\n\r\nimport 'jquery-validation';\r\n$.validator.unobtrusive = require('jquery-validation-unobtrusive');\r\nimport 'jssocials';\r\n\r\nimport * as React from \"react\";\r\nimport { createRoot } from \"react-dom/client\";\r\nimport { ArrangeBooking, ArrangeBookingProps } from \"./components/ArrangeBooking\";\r\nimport { PropertyInformation } from \"./components/ArrangeBooking/types\";\r\nimport { UtilitiesCalculator, UtilitiesCalculatorProps } from \"./components/UtilitiesCalculator\";\r\n\r\n/* Bootstrap modules - comment out as required */\r\nimport 'bootstrap/js/dist/alert';\r\nimport 'bootstrap/js/dist/button';\r\nimport 'bootstrap/js/dist/carousel';\r\nimport 'bootstrap/js/dist/collapse';\r\nimport 'bootstrap/js/dist/dropdown';\r\nimport 'bootstrap/js/dist/modal';\r\nimport 'bootstrap/js/dist/tab';\r\nimport 'bootstrap/js/dist/offcanvas';\r\n// import 'bootstrap/js/dist/popover';\r\n// import 'bootstrap/js/dist/scrollspy';\r\n// import 'bootstrap/js/dist/toast';\r\n// import 'bootstrap/js/dist/tooltip';\r\n\r\nimport 'lazysizes';\r\n\r\nimport '../../../Components/Base/BaseComponent/Content/validation/mustbetrue';\r\n\r\nimport '../../../Components/Base/BaseComponent/Content/Components/AjaxPage';\r\nimport { InitialiseForElement as AjaxFormInitialise } from '../../../Components/Base/BaseComponent/Content/Components/PartialHost';\r\nimport { Initialise as RecaptchaFormInitialise } from '../../../Components/Base/BaseComponent/Content/Components/RecaptchaForm';\r\nimport '../../../Components/Base/BaseComponent/Content/Components/StyleSwitcher.ts';\r\nimport './components/MapProperties';\r\nimport './components/BillingAddress';\r\n\r\n\r\nimport { Initialize as InitializeLatestSliders } from './components/LatestSlider';\r\n\r\ndocument.body.classList.remove(\"no-js\");\r\ndocument.body.classList.add(\"js\");\r\n\r\nfunction loadArrangeBooking()\r\n{\r\n const items = document.querySelectorAll(\"[arrange-booking]\");\r\n\r\n for (let i = 0; i < items.length; i++)\r\n {\r\n const item = items[i] as HTMLElement;\r\n\r\n if (!item.dataset.property || !item.dataset.token || !item.dataset.minDate)\r\n {\r\n return;\r\n }\r\n\r\n const property = JSON.parse(item.dataset.property) as PropertyInformation;\r\n const blockedDates = item.dataset.blocked ? JSON.parse(item.dataset.blocked) as string[] : [];\r\n const token = item.dataset.token;\r\n const minDate = item.dataset.minDate;\r\n\r\n const props: ArrangeBookingProps = {\r\n property,\r\n token,\r\n blockedDates,\r\n minDate\r\n };\r\n\r\n const root = createRoot(item);\r\n root.render(React.createElement(ArrangeBooking, props));\r\n }\r\n}\r\n\r\nfunction loadUtilitiesCalculator()\r\n{\r\n const items = document.querySelectorAll(\"[utilities-calculator]\");\r\n\r\n for (let i = 0; i < items.length; i++)\r\n {\r\n const item = items[i] as HTMLElement;\r\n const props: UtilitiesCalculatorProps = {\r\n };\r\n\r\n const root = createRoot(item);\r\n root.render(React.createElement(UtilitiesCalculator, props));\r\n }\r\n}\r\n\r\nfunction loadFormSupport()\r\n{\r\n const forms = document.querySelectorAll(\"form[data-ajax]\");\r\n for (let i = 0; i < forms.length; i++)\r\n {\r\n if ((forms[i] as HTMLFormElement).dataset.recaptcha)\r\n {\r\n RecaptchaFormInitialise(forms[i] as HTMLFormElement);\r\n }\r\n else\r\n {\r\n AjaxFormInitialise(forms[i] as HTMLFormElement);\r\n }\r\n }\r\n}\r\n\r\nfunction loadSocials()\r\n{\r\n jsSocials.shares.whatsapp.shareUrl = \"https://wa.me/?text={url}%20{text}\";\r\n const socialLinks = document.getElementsByClassName(\"item-social\");\r\n for (let i = 0; i < socialLinks.length; i++)\r\n {\r\n const socialLink = socialLinks[i] as HTMLDivElement;\r\n\r\n const config = {\r\n showLabel: false,\r\n showCount: false,\r\n url: socialLink.dataset[\"target\"],\r\n text: socialLink.dataset[\"desc\"],\r\n shares: [\r\n {\r\n share: \"facebook\",\r\n logo: \"fa fa-facebook-f\"\r\n },\r\n {\r\n share: \"twitter\",\r\n logo: \"fa fa-twitter\"\r\n },\r\n {\r\n share: \"whatsapp\",\r\n logo: \"fa fa-whatsapp\"\r\n },\r\n {\r\n share: \"email\",\r\n logo: \"fa fa-at\"\r\n }\r\n ]\r\n } as jsSocials.IConfig;\r\n\r\n $(socialLink).jsSocials(config);\r\n }\r\n}\r\n\r\nfunction loadReset()\r\n{\r\n const resetButton = document.querySelector(\"button.action-reset\") as HTMLButtonElement | null;\r\n if (!resetButton)\r\n {\r\n return;\r\n }\r\n\r\n resetButton.addEventListener(\"click\", function (ev)\r\n {\r\n ev.preventDefault();\r\n\r\n if (!resetButton.form)\r\n {\r\n return;\r\n }\r\n\r\n const dropdowns = resetButton.form.querySelectorAll(\"select\");\r\n for (let dropdown of dropdowns)\r\n {\r\n dropdown.selectedIndex = 0;\r\n }\r\n\r\n\r\n const texts = resetButton.form.querySelectorAll(\"input[type=text]\");\r\n for (let text of texts)\r\n {\r\n (text as HTMLInputElement).value = \"\";\r\n }\r\n\r\n const showSold = resetButton.form.querySelector(\"input[value=true]#ShowSold\") as HTMLInputElement | null;\r\n if (showSold)\r\n {\r\n showSold.checked = true;\r\n }\r\n });\r\n}\r\n\r\nfunction loadPopupModal()\r\n{\r\n jQuery('#register-interest-modal').modal(\"show\");\r\n}\r\n\r\nfunction loadDocument()\r\n{\r\n loadFormSupport();\r\n InitializeLatestSliders();\r\n loadSocials();\r\n loadReset();\r\n loadArrangeBooking();\r\n loadUtilitiesCalculator();\r\n loadPopupModal();\r\n}\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", loadDocument);","\r\nclass AjaxPage\r\n{\r\n private readonly parent: HTMLElement;\r\n private readonly loading: HTMLDivElement;\r\n private readonly xhr: XMLHttpRequest;\r\n private readonly ajaxUrl: string | null;\r\n private readonly ajaxPageInput: HTMLInputElement | null;\r\n private readonly formData: FormData | null;\r\n\r\n private currentPage: number = 1;\r\n private totalPages: number;\r\n\r\n private loadingMore: boolean = false;\r\n private scrollWait: number | null = null;\r\n\r\n private autoResponse()\r\n {\r\n const pageElem = document.createElement(\"div\");\r\n pageElem.dataset.page = this.currentPage.toFixed(0);\r\n pageElem.innerHTML = this.xhr.responseText;\r\n\r\n this.currentPage++;\r\n this.parent.insertBefore(pageElem.firstElementChild as Element, this.loading);\r\n }\r\n\r\n private stateChange()\r\n {\r\n if (this.xhr.readyState === XMLHttpRequest.DONE)\r\n {\r\n this.loadingMore = false;\r\n this.scrollWait = null;\r\n\r\n this.loading.classList.remove(\"show\");\r\n if (this.xhr.status === 200)\r\n {\r\n this.autoResponse();\r\n }\r\n }\r\n }\r\n\r\n private hasMorePages()\r\n {\r\n return this.currentPage < this.totalPages;\r\n }\r\n\r\n public fetchNextPageUrl()\r\n {\r\n if (this.ajaxUrl == null || !this.hasMorePages())\r\n {\r\n return;\r\n }\r\n\r\n this.loading.classList.add(\"show\");\r\n const url = this.ajaxUrl.replace(\"2\", (this.currentPage + 1).toFixed(0))\r\n this.xhr.open(\"GET\", url, true);\r\n this.xhr.setRequestHeader(\"X-Format-Requested\", \"AjaxPage\");\r\n this.xhr.send();\r\n }\r\n\r\n public fetchNextPageForm()\r\n {\r\n if (this.ajaxPageInput == null || this.formData == null || this.ajaxPageInput.form == null || !this.hasMorePages())\r\n {\r\n return;\r\n }\r\n\r\n this.formData.set(this.ajaxPageInput.name, this.currentPage.toFixed(0));\r\n\r\n this.loading.classList.add(\"show\");\r\n const urlParams = new URLSearchParams(this.formData as any);\r\n this.xhr.open(\"GET\", `${this.ajaxPageInput.form.action}?${urlParams.toString()}`);\r\n this.xhr.setRequestHeader(\"X-Format-Requested\", \"AjaxPage\");\r\n this.xhr.send(this.formData);\r\n }\r\n\r\n private testScrollEnd()\r\n {\r\n const parentPosition = this.parent.getBoundingClientRect();\r\n const bottom = (parentPosition.y + parentPosition.height);\r\n if (window.scrollY > bottom && bottom > 0)\r\n {\r\n this.loadingMore = true;\r\n if (this.ajaxUrl)\r\n {\r\n this.fetchNextPageUrl();\r\n }\r\n else if (this.ajaxPageInput)\r\n {\r\n this.fetchNextPageForm();\r\n }\r\n }\r\n }\r\n\r\n private testScroll()\r\n {\r\n if (this.loadingMore)\r\n {\r\n return;\r\n }\r\n\r\n if (this.scrollWait)\r\n {\r\n clearTimeout(this.scrollWait);\r\n }\r\n\r\n this.scrollWait = setTimeout((() => this.testScrollEnd()) as TimerHandler, 50);\r\n }\r\n\r\n public static create(parentElem: HTMLElement): AjaxPage | null\r\n {\r\n const pagesUrl = parentElem.dataset.pagesUrl;\r\n const pagesForm = parentElem.dataset.pagesForm;\r\n const pagesCount = parentElem.dataset.pagesCount;\r\n\r\n if (pagesCount == null || pagesCount === \"\")\r\n {\r\n return null;\r\n }\r\n\r\n if (pagesForm != null && pagesForm !== \"\")\r\n {\r\n const form = document.getElementById(pagesForm);\r\n\r\n if (form == null || form.tagName !== \"INPUT\" || (form as HTMLInputElement).form == null)\r\n {\r\n return null;\r\n }\r\n\r\n return new AjaxPage(parentElem, form as HTMLInputElement, parseInt(pagesCount));\r\n }\r\n\r\n if (pagesUrl != null && pagesUrl !== \"\")\r\n {\r\n return new AjaxPage(parentElem, pagesUrl, parseInt(pagesCount));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private constructor(parentElem: HTMLElement, ajaxTarget: HTMLInputElement | string, pageCount: number)\r\n {\r\n this.parent = parentElem;\r\n this.totalPages = pageCount;\r\n this.xhr = new XMLHttpRequest();\r\n this.xhr.onreadystatechange = () => this.stateChange();\r\n\r\n if (typeof ajaxTarget === \"string\")\r\n {\r\n this.ajaxUrl = ajaxTarget;\r\n this.ajaxPageInput = null;\r\n this.formData = null;\r\n }\r\n else if (typeof ajaxTarget === \"object\")\r\n {\r\n this.ajaxUrl = null;\r\n this.ajaxPageInput = ajaxTarget;\r\n\r\n if (this.ajaxPageInput != null && this.ajaxPageInput.form != null)\r\n {\r\n this.formData = new FormData(this.ajaxPageInput.form);\r\n }\r\n else\r\n {\r\n this.formData = null;\r\n }\r\n }\r\n else\r\n {\r\n this.ajaxUrl = null;\r\n this.ajaxPageInput = null;\r\n this.formData = null;\r\n }\r\n\r\n this.loading = document.createElement(\"div\");\r\n this.loading.className = \"loading collapse\";\r\n this.loading.innerHTML = \" Loading...\";\r\n this.parent.appendChild(this.loading);\r\n\r\n window.addEventListener(\"scroll\", () => this.testScroll(), { passive: true });\r\n }\r\n}\r\n\r\nconst autoElements = document.querySelectorAll(\"[data-pages]\");\r\nfor (let i = 0; i < autoElements.length; i++)\r\n{\r\n AjaxPage.create(autoElements[i] as HTMLElement);\r\n}","var PartialQueue: Function[] | null;\r\n\r\nexport interface IRequestOptions\r\n{\r\n url: string;\r\n callback?: (state: UpdateState) => void;\r\n content?: FormData;\r\n}\r\n\r\nexport class UpdateState\r\n{\r\n private readonly url: string;\r\n private readonly callback: ((state: UpdateState) => void) | undefined;\r\n private readonly content: FormData | undefined;\r\n private readonly xhr: XMLHttpRequest;\r\n\r\n public constructor(params: IRequestOptions)\r\n {\r\n this.url = params.url;\r\n this.callback = params.callback;\r\n this.content = params.content;\r\n this.xhr = new XMLHttpRequest();\r\n this.xhr.onreadystatechange = () => this.stateChange();\r\n }\r\n\r\n public abort()\r\n {\r\n if (this.xhr.readyState !== XMLHttpRequest.DONE)\r\n {\r\n this.xhr.abort();\r\n }\r\n }\r\n\r\n public update()\r\n {\r\n const method = this.content != null ? \"POST\" : \"GET\";\r\n this.xhr.open(method, this.url, true);\r\n this.xhr.send(this.content);\r\n }\r\n\r\n public stateChange()\r\n {\r\n if (this.xhr.readyState === XMLHttpRequest.DONE && this.xhr.status === 200)\r\n {\r\n if (typeof (this.callback) !== \"undefined\")\r\n {\r\n this.callback(this);\r\n }\r\n }\r\n }\r\n\r\n public getResponse()\r\n {\r\n return this.xhr.responseText;\r\n }\r\n}\r\n\r\nexport function RequestView(params: IRequestOptions)\r\n{\r\n const state = new UpdateState(params);\r\n state.update();\r\n}\r\n\r\nfunction updateViewContent(state: UpdateState, targetElement: HTMLElement)\r\n{\r\n targetElement.innerHTML = state.getResponse();\r\n const scripts = targetElement.querySelectorAll(\"script\");\r\n for (let i = 0; i < scripts.length; i++)\r\n {\r\n const scriptElem = scripts[i];\r\n const scriptInsert = document.createElement(\"script\");\r\n if (scriptElem.src !== \"\")\r\n {\r\n scriptInsert.src = scripts[i].src;\r\n }\r\n else\r\n {\r\n scriptInsert.appendChild(document.createTextNode(scripts[i].innerText.trim()));\r\n }\r\n scripts[i].remove();\r\n targetElement.appendChild(scriptInsert);\r\n }\r\n\r\n const forms = targetElement.querySelectorAll(\"form\");\r\n for (let i = 0; i < forms.length; i++)\r\n {\r\n const form = forms[i];\r\n $.validator.unobtrusive.parse(form);\r\n $(form).validate().settings.submitHandler = () =>\r\n {\r\n const state = new UpdateState({\r\n url: form.action,\r\n content: new FormData(form),\r\n callback: (stateObj: UpdateState) => updateViewContent(stateObj, form.parentElement as HTMLElement)\r\n });\r\n state.update();\r\n };\r\n }\r\n\r\n RunQueue();\r\n}\r\n\r\nexport function RunQueue()\r\n{\r\n PartialQueue = PartialQueue || [];\r\n while (PartialQueue.length !== 0)\r\n {\r\n const item = PartialQueue.pop();\r\n if (item != null)\r\n {\r\n item();\r\n }\r\n }\r\n}\r\n\r\nexport function InitialiseForElement(form: HTMLFormElement)\r\n{\r\n $(form).validate().destroy();\r\n $.validator.unobtrusive.parse(form);\r\n\r\n\r\n $(form).validate().settings.submitHandler = () =>\r\n {\r\n const state = new UpdateState({\r\n url: form.action,\r\n content: new FormData(form),\r\n callback: (stateObj: UpdateState) => updateViewContent(stateObj, form.parentElement as HTMLElement)\r\n });\r\n state.update();\r\n };\r\n}\r\n\r\nexport function SubmitElement(form: HTMLFormElement)\r\n{\r\n const state = new UpdateState({\r\n url: form.action,\r\n content: new FormData(form),\r\n callback: (stateObj: UpdateState) => updateViewContent(stateObj, form.parentElement as HTMLElement)\r\n });\r\n state.update();\r\n}\r\n\r\nwindow.addEventListener(\"load\", RunQueue);","\r\nimport { SubmitElement } from './PartialHost';\r\n\r\nclass RecaptchaForm\r\n{\r\n private readonly rootElement: HTMLFormElement | null = null;\r\n\r\n private recaptchaCallback(token: string)\r\n {\r\n if (!this.rootElement || !token)\r\n {\r\n return;\r\n }\r\n\r\n const tokenElem = document.createElement(\"input\");\r\n tokenElem.type = \"hidden\";\r\n tokenElem.name = \"recaptcha_token\";\r\n tokenElem.value = token;\r\n this.rootElement.append(tokenElem);\r\n\r\n SubmitElement(this.rootElement);\r\n }\r\n\r\n public constructor(rootElem: HTMLFormElement)\r\n {\r\n this.rootElement = rootElem;\r\n if (!this.rootElement)\r\n {\r\n return;\r\n }\r\n\r\n const siteKey = this.rootElement.dataset.recaptcha;\r\n if (!siteKey)\r\n {\r\n return;\r\n }\r\n\r\n const action = this.rootElement.dataset.recaptchaAction ?? \"form_submit\";\r\n\r\n $(this.rootElement).validate().destroy();\r\n $.validator.unobtrusive.parse($(this.rootElement as HTMLElement));\r\n\r\n $(this.rootElement).validate().settings.submitHandler = () =>\r\n {\r\n grecaptcha.ready(() =>\r\n {\r\n grecaptcha.execute(siteKey, { action: action }).then((token) => this.recaptchaCallback(token));\r\n });\r\n };\r\n }\r\n}\r\n\r\nexport function Initialise(rootElem: HTMLFormElement)\r\n{\r\n return new RecaptchaForm(rootElem);\r\n}","declare global\n{\n interface Window\n {\n SetActiveStyleSheet: (title: string | null) => void;\n }\n}\n\nfunction readCookie(name: string): string | null\n{\n const nameEq = name + \"=\";\n const ca = document.cookie.split(\";\");\n for (let i = 0; i < ca.length; i++)\n {\n let c = ca[i];\n while (c.charAt(0) === \" \")\n {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEq) === 0)\n {\n return c.substring(nameEq.length, c.length);\n }\n }\n return null;\n}\n\nfunction createCookie(name: string, value: string, days: number)\n{\n let expires: string;\n\n if (days)\n {\n const date = new Date();\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n expires = `; expires=${date.toUTCString()}`;\n }\n else\n {\n expires = \"\";\n }\n\n document.cookie = name + \"=\" + value + expires + \"; path=/\";\n}\n\nfunction getPreferredStyleSheet(): string | null\n{\n let i: number;\n let a: HTMLLinkElement;\n for (i = 0; (a = document.getElementsByTagName(\"link\")[i]); i++)\n {\n const relAttr = a.getAttribute(\"rel\");\n if (relAttr != null &&\n relAttr.indexOf(\"style\") !== -1 &&\n relAttr.indexOf(\"alt\") === -1 &&\n a.getAttribute(\"title\"))\n {\n return a.getAttribute(\"title\");\n }\n }\n return null;\n}\n\nfunction getActiveStyleSheet(): string | null\n{\n let i: number;\n let a: HTMLLinkElement;\n for (i = 0; (a = document.getElementsByTagName(\"link\")[i]); i++)\n {\n const relAttr = a.getAttribute(\"rel\");\n if (relAttr != null && relAttr === \"alternate stylesheet\" && a.getAttribute(\"href\") && a.getAttribute(\"title\") && !a.disabled)\n {\n return a.getAttribute(\"title\");\n }\n }\n return null;\n}\n\nfunction onLoad(): void\n{\n const cookie = readCookie(\"style\");\n const title = cookie\n ? cookie\n : getPreferredStyleSheet();\n SetActiveStyleSheet(title);\n}\n\nfunction onUnload(): void\n{\n const sheet = getActiveStyleSheet();\n const sheetName = sheet != null ? sheet : \"\";\n createCookie(\"style\", sheetName, 365);\n}\n\nexport function SetActiveStyleSheet(title: string | null): void\n{\n let i: number;\n let a: HTMLLinkElement;\n for (i = 0; (a = document.getElementsByTagName(\"link\")[i]); i++)\n {\n const relAttr = a.getAttribute(\"rel\");\n if (relAttr != null && relAttr === \"alternate stylesheet\" && a.getAttribute(\"title\"))\n {\n a.disabled = true;\n if (a.getAttribute(\"title\") === title)\n {\n a.disabled = false;\n }\n }\n }\n}\n\nwindow.addEventListener(\"load\", onLoad);\nwindow.addEventListener(\"beforeunload\", onUnload);\nwindow.SetActiveStyleSheet = SetActiveStyleSheet;","export function SetValidationValues(options: any, ruleName: string, value: any)\r\n{\r\n options.rules[ruleName] = value;\r\n\r\n if (options.message)\r\n {\r\n options.messages[ruleName] = options.message;\r\n }\r\n}","import { SetValidationValues } from './_helpers';\r\n\r\n$.validator.setDefaults({\r\n ignore: \"\"\r\n});\r\n\r\n$.validator.addMethod(\"mustbetrue\",\r\n function (_value, element, _params)\r\n {\r\n return (element as HTMLInputElement).checked;\r\n });\r\n\r\n$.validator.unobtrusive.adapters.add(\"mustbetrue\",\r\n (options: any) =>\r\n {\r\n SetValidationValues(options, \"mustbetrue\", true);\r\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\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\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};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkcloud_lettings\"] = self[\"webpackChunkcloud_lettings\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [869], () => (__webpack_require__(4580)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","props","className","id","method","type","name","value","token","options","bedrooms","toString","formatDate","date","time","start","additionalProperties","map","e","Url","required","autoComplete","property","Name","Address","LineOne","Town","PostalCode","toLocaleDateString","dateStyle","end","onClick","form","document","querySelector","reportValidity","submit","submitBooking","ArrangeBooking","React","Component","constructor","super","this","state","Bedrooms","updateType","setState","updateBedrooms","updateDate","updateTime","updateAdditionalProperties","properties","render","steps","push","updateAdditionalProperty","blockedDates","minDate","StrictMode","onStepChange","window","scrollTo","top","clientTop","children","nav","blocked","changeBedrooms","now","Date","today","getFullYear","getMonth","getDate","fallbackMin","valueOf","setDate","minParts","split","min","length","parseInt","max","maxDate","tileDisabled","day","getDay","dateString","indexOf","isDateDisabled","onChange","changeDate","nextStep","data","setData","useState","loaded","error","showDropdown","searchQuery","hideDropdown","url","fetch","then","response","json","catch","selectedUrls","dropdownProperties","filter","query","toLowerCase","address","lineOne","postalCode","slice","emptyDropdown","style","display","onFocus","textAlign","placeholder","ev","changeQuery","currentTarget","key","ImageUrl","imageUrl","LineTwo","lineTwo","town","County","county","addAdditionalProperty","src","alt","p","removeAdditionalProperty","propertyUrl","AM","PM","currentType","currentDate","selectedGroup","changeTime","changeTimeGroup","group","href","changeType","xmlns","viewBox","transform","d","fill","year","month","check","source","target","cloneField","sourceElem","targetElem","replace","checked","configureFields","targetElems","querySelectorAll","elem","readOnly","fieldset","addEventListener","getElementById","dataset","dbsSource","dbsTarget","sourceElements","console","log","documentSliders","LatestSlider","container","large","speed","prev","parentElement","preventDefault","revertSlider","next","advanceSlider","newNodes","i","childNodes","child","nodeType","Node","ELEMENT_NODE","cloneNode","remove","setInterval","classList","add","nextImage","item","setTimeout","cleanAdvanceSlider","first","appendChild","last","lastImage","prepend","requestAnimationFrame","cleanRevertSlider","sliders","CloudLettingsRenderer","count","position","_stats","svg","btoa","google","maps","Marker","icon","scaledSize","Size","label","text","String","color","fontSize","title","zIndex","Number","MAX_ZINDEX","infoWindow","initialZoom","directionsService","directionsDisplay","mapStyle","mapElement","searchElement","directionsElement","errorElement","placeMarkers","Array","toggleMarker","placemark","marker","close","infoContent","imageFilename","InfoWindow","content","open","loadTheme","responseJSON","apiPath","$","ajax","complete","loadXmlDocument","placemarks","JSON","parse","responseText","Map","zoom","center","LatLng","mapTypeId","MapTypeId","ROADMAP","styles","point","latitude","longitude","pinImageFilename","event","addListener","nopopup","MarkerClusterer","markers","renderer","bounds","LatLngBounds","forEach","getPosition","extend","zoomChangeBoundsListener","currentZoom","getZoom","setZoom","removeListener","parentTab","fitBounds","findMapCenterAndZoom","createElement","destination","autocomplete","findDirectionsKeyDown","button","findDirections","select","getTitle","option","toFixed","innerText","DirectionsService","DirectionsRenderer","setupDirections","rootElement","attributes","getNamedItem","inputElem","fromAddress","setMap","setPanel","locationSelect","route","origin","travelMode","TravelMode","DRIVING","unitSystem","UnitSystem","IMPERIAL","provideRouteAlternatives","displayDirections","result","status","DirectionsStatus","OK","setDirections","InitializeMapView","HTMLElement","themePath","theme","totalSteps","currentStep","navItems","navigateToPreviousStep","step","goToStep","QuotaTable","rate","undefined","tenants","opening","current","opening2","current2","quota","usage","keys","toLocaleString","maximumFractionDigits","UtilitiesCalculator","validator","unobtrusive","body","forms","recaptcha","loadFormSupport","Initialize","jsSocials","shares","whatsapp","shareUrl","socialLinks","getElementsByClassName","socialLink","config","showLabel","showCount","share","logo","loadSocials","resetButton","dropdowns","dropdown","selectedIndex","texts","showSold","loadReset","items","createRoot","loadArrangeBooking","loadUtilitiesCalculator","jQuery","modal","AjaxPage","autoResponse","pageElem","page","currentPage","innerHTML","xhr","parent","insertBefore","firstElementChild","loading","stateChange","readyState","XMLHttpRequest","DONE","loadingMore","scrollWait","hasMorePages","totalPages","fetchNextPageUrl","ajaxUrl","setRequestHeader","send","fetchNextPageForm","ajaxPageInput","formData","set","urlParams","URLSearchParams","action","testScrollEnd","parentPosition","getBoundingClientRect","bottom","y","height","scrollY","testScroll","clearTimeout","create","parentElem","pagesUrl","pagesForm","pagesCount","tagName","ajaxTarget","pageCount","onreadystatechange","FormData","passive","autoElements","PartialQueue","UpdateState","params","callback","abort","update","getResponse","updateViewContent","targetElement","scripts","scriptElem","scriptInsert","createTextNode","trim","validate","settings","submitHandler","stateObj","RunQueue","pop","destroy","RecaptchaForm","recaptchaCallback","tokenElem","append","SubmitElement","rootElem","siteKey","recaptchaAction","grecaptcha","ready","execute","SetActiveStyleSheet","a","getElementsByTagName","relAttr","getAttribute","disabled","cookie","nameEq","ca","c","charAt","substring","readCookie","getPreferredStyleSheet","sheet","getActiveStyleSheet","days","expires","setTime","getTime","toUTCString","createCookie","ruleName","rules","message","messages","setDefaults","ignore","addMethod","_value","element","_params","adapters","SetValidationValues","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","m","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","Object","every","splice","r","n","getter","__esModule","definition","o","defineProperty","enumerable","get","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","bind","__webpack_exports__"],"sourceRoot":""}