{"version":3,"file":"sustainsignup.d410fb9656f724a41a4e.bundle.js","mappings":"uKAOaA,EAAkB,SAC3BC,EACAC,IAEAC,EAAAA,EAAAA,YAAU,WACN,IAAMC,EAAqB,SAACC,GACxB,IAAMC,EAASD,EAAMC,OACjBL,EAAIM,SAAWD,IAAWL,EAAIM,QAAQC,SAASF,IAC/CJ,EAAQG,EAEhB,EAKA,OAJAI,OAAOC,YAAW,WACdC,SAASC,oBAAoB,QAASR,GACtCO,SAASE,iBAAiB,QAAST,EACvC,GAAG,GACI,WACHO,SAASC,oBAAoB,QAASR,EAC1C,CACJ,GAAG,CAACH,EAAKC,GACb,C,uECxBaY,EAAc,SAAKC,GAC5B,IAAMd,GAAMe,EAAAA,EAAAA,UAIZ,OAHAb,EAAAA,EAAAA,YAAU,WACNF,EAAIM,QAAUQ,CAClB,IACOd,EAAIM,OACf,C,sECNaU,EAAY,SAACC,GACtB,GAAKA,EAAMC,SAAS,KAApB,CAIA,IAkDMC,EAAaF,EAAMG,MAAM,KACzBC,EAAWF,EAAW,GACtBG,EAASH,EAAW,GAEpBI,EAAc,GAA6BC,OAtD5B,SAACH,GAClB,IACII,EADsBJ,EAASK,OAAO,GACD,MAIrCL,EAASM,OAAS,IAElBF,GADyBJ,EAASK,OAAOL,EAASM,OAAS,IAI/D,OAAOF,CACX,CA0CuBG,CAAaP,GAAU,KAAsB,OAxCjD,SAACC,GAChB,IAAIO,EAGJ,GAF0BP,EAAOJ,SAAS,KAEnB,CACnB,IAAMY,EAAcR,EAAOF,MAAM,KAE3BW,EAAiBD,EAAYA,EAAYH,OAAS,GAClDK,EAAaF,EAAYG,MAAM,EAAGH,EAAYH,OAAS,GAAGO,KAAK,KAOrE,GAJAL,EAF4BG,EAAWN,OAAO,GAET,MAIjCM,EAAWL,OAAS,EAEpBE,GAD2BG,EAAWN,OAAOM,EAAWL,OAAS,GAIrEE,GAAgB,IAAmB,OAAfE,EACxB,KAAO,CAMH,GAJAF,EADwBP,EAAOI,OAAO,GACL,MAI7BJ,EAAOK,OAAS,EAEhBE,GADuBP,EAAOI,OAAOJ,EAAOK,OAAS,EAG7D,CAEA,OAAOE,CACX,CAMiDL,CAAWF,IAC5D,OAAOC,CAzDP,CA0DJ,C,qwCC/CA,IAAMY,EAAUC,EAAAA,GAAOC,EAAC,KAKXC,EAAmF,Y,QAC5FC,WAAAA,OAAAA,IAAa,MAAS,MACtBC,gBAAAA,OAAAA,IAAkB,QAClBC,EAAAA,EAAAA,YACAC,EAAAA,EAAAA,SACAC,EAAAA,EAAAA,WAE0BC,EAAAA,GAAAA,EAAAA,EAAAA,UAAiBL,GAAAA,GAApCM,EAAmBD,EAAAA,GAAZE,EAAYF,EAAAA,IAE1B1C,EAAAA,EAAAA,YAAU,WACN,IAAM6C,EAAUC,aAAY,WACxBF,GAAS,SAACG,GACN,OAAIA,EAAYT,EAAkB,IACvBS,EAAYT,GAEnBU,cAAcH,GACdN,GAAeA,IACR,IAEf,GACJ,GAAGD,GAEH,OAAO,WACHU,cAAcH,EAClB,CACJ,GAAG,CAACP,EAAiBC,IAErB,IAAMU,EAAUC,KAAKC,MAAMR,EAAQ,KAEnC,OACI,gBAACS,EAAAA,GAAKA,CACFC,MAAO,iCACPC,gBAAgB,EAChBC,OAAQ,wBACRC,QACI,gBAACC,EAAAA,GAAgBA,KACb,gBAACC,EAAAA,EAAYA,CACTC,QAASnB,EACToB,SAAU,YACVL,OAAQ,yCACX,WAGD,gBAACG,EAAAA,EAAYA,CACTC,QAASlB,EACTmB,SAAU,UACVL,OAAQ,0CACX,cAMT,gBAACtB,EAAAA,KAAQ,kEACT,gBAACA,EAAAA,KAAQ,0CACoC,aAAY,6BAA2BgB,EAAQ,UACvFA,EAAU,GAAK,IAAI,KAIpC,C,qvIChEA,IAAMY,EAAO3B,EAAAA,GAAOC,EAAC,KAQf2B,EAAY5B,EAAAA,GAAO6B,IAAG,KAoBtBC,EAAe9B,EAAAA,GAAO+B,OAAOC,OAAgB,Y,MAAiB,CAChE,eADkDX,EAAAA,O,GAAjCrB,C,KAefiC,GAAuBjC,EAAAA,EAAAA,IAAOkC,EAAAA,GAAPlC,CAAakC,KAY7BC,EAAmB,Y,IAmFGC,E,EAnFAC,EAAAA,EAAAA,aAAcC,EAAAA,EAAAA,mBAOzCC,GAAAA,EAAAA,EAAAA,IAAQ,CACRC,cAAe,CACXC,SAAU,MAPdC,EAKAH,EALAG,aACAC,EAIAJ,EAJAI,SACAC,EAGAL,EAHAK,QACAC,EAEAN,EAFAM,UACAC,EACAP,EADAO,UAAaV,OAOuB5B,EAAAA,GAAAA,EAAAA,EAAAA,WAAS,MAA1CuC,EAAiCvC,EAAAA,GAAnBwC,EAAmBxC,EAAAA,GACkBA,EAAAA,GAAAA,EAAAA,EAAAA,WAAS,MAA5DyC,EAAmDzC,EAAAA,GAA5B0C,EAA4B1C,EAAAA,GAEpD2C,G,EAAoB,c,IAIZV,E,kDAHVO,GAAgB,G,iBAIK,O,sBADXP,EAAWI,EAAU,YACV,C,EAAMO,EAAAA,EAAYC,4BAA4BZ,EAASa,S,cAAvD,SACJC,KAAKC,QACdlB,KAEAY,GAAyB,GACzBF,GAAgB,I,6BAGpBE,GAAyB,GACzBF,GAAgB,G,0BAExB,I,4CAKMS,EAAmB,W,MAAA,YAAOC,G,iEACd,UAAVA,EAAEC,KAAoB,C,EAAMf,KAA5Bc,C,cAAsB,S,0BACtB,C,EAAMP,K,aAAN,S,8BAER,I,gBAJgCO,G,gCAAP,GAMnBE,EAAiB,W,MAAA,c,kDAEnB,OADAZ,GAAgB,GAChB,C,EAAMI,EAAAA,EAAYS,iB,cAAlB,SACAb,GAAgB,G,OACpB,I,kDAJuB,GAMvB,OACI,gCACI,gBAACc,GAASA,KAAC,8BACVb,GACG,gBAACc,GAAWA,CAACC,QAAQ,WAAWC,SAAS,QAAQC,UAAW,W,OAAMhB,GAAyB,E,GACvF,gBAACrB,MAAAA,KAAI,2FAIb,gBAACD,EAAAA,KACG,gBAACuC,EAAAA,EAAIA,OAET,gBAACxC,EAAAA,KACI,sDAC0B,QAAxB/C,EAAAA,EAAAA,IAAUyD,GAAc,MAE/B,gBAACV,EAAAA,KAAK,yBAC0B,IAC5B,gBAACG,EAAAA,CAAaL,QAASmC,EAAgBvC,OAAO,wCAAwC+C,KAAM,UAAU,cAEtF,IAAI,aAIxB,gBAACC,GAAeA,E,sUAAAA,CAAAA,CACZC,GAAG,kBACHjD,OAAO,qCACPkD,MAAM,sBACNC,KAAK,kBACLC,YAAY,yCACR9B,EAAS,WAAY,CACrB+B,SAAU,8CACd,CACAC,UAAWvC,EAAOK,SAClBmC,kBAAkC,QAAfxC,EAAAA,EAAOK,gBAAPL,IAAAA,OAAAA,EAAAA,EAAiByC,QACpCC,WAAW,EACXC,aAAc,KACdC,UAAWvB,KAGf,gBAACxB,EAAAA,CACGZ,OAAO,wCACPI,QAASiB,EAAaS,GACtBiB,KAAM,SACNa,SAAU,QACVC,SAAUnC,EACVoC,MAAOC,EAAAA,GAAUC,uBACjBC,QAASvC,GACZ,eAKb,E,wqHCvJA,IAAMwC,EAAsBvF,EAAAA,GAAO6B,IAAG,KAKzB,SAAC2D,G,OAAoCA,EAAMC,UAAY,UAAY,S,IAOnEC,GAAwB1F,EAAAA,EAAAA,IAAO2F,EAAAA,IAAe3D,OAAkC,Y,MAAoB,CAC7GgD,UAD4FA,EAAAA,U,GAA3DhF,C,KAcxB4F,EAAkB,Y,IAkFIxD,E,EAjF/ByD,EAAAA,EAAAA,SACAhH,EAAAA,EAAAA,MACAiH,EAAAA,EAAAA,cACAC,EAAAA,EAAAA,SACAC,EAAAA,EAAAA,iBAOIzD,GAAAA,EAAAA,EAAAA,IAAQ,CACRC,cAAe,CACXyD,UAAWpH,EACXqH,aAAcH,KAPlBrD,EAIAH,EAJAG,aACAC,EAGAJ,EAHAI,SACAC,EAEAL,EAFAK,QACAE,EACAP,EADAO,UAAaV,OAQyC5B,EAAAA,GAAAA,EAAAA,EAAAA,WAAS,MAA5D2F,EAAmD3F,EAAAA,GAA5B4F,EAA4B5F,EAAAA,GACIA,EAAAA,GAAAA,EAAAA,EAAAA,WAAS,MAAhE6F,EAAuD7F,EAAAA,GAA9B8F,EAA8B9F,EAAAA,GACtBA,EAAAA,GAAAA,EAAAA,EAAAA,WAAS,MAA1CuC,EAAiCvC,EAAAA,GAAnBwC,EAAmBxC,EAAAA,GAElC2C,G,EAAoB,c,kDACtBH,GAAgB,G,iBAEK,O,sBAAA,C,EAAMI,EAAAA,EAAYmD,aAAa1H,I,cAA/B,SACJ0E,MAET6C,GAAyB,GACzBpD,GAAgB,IAEhB6C,I,6BAGJS,GAA2B,GAC3BtD,GAAgB,G,0BAExB,I,4CAKMS,EAAmB,W,MAAA,YAAOC,G,iEACd,UAAVA,EAAEC,KAAoB,C,EAAMf,KAA5Bc,C,cAAsB,S,0BACtB,C,EAAMP,K,aAAN,S,8BAER,I,gBAJgCO,G,gCAAP,GAMzB,OACI,gCACI,gBAACI,GAASA,KAAC,kBACVqC,GACG,gBAACpC,GAAWA,CAACC,QAAQ,WAAWC,SAAS,QAAQC,UAAW,W,OAAMkC,GAAyB,E,GACvF,gBAACvE,MAAAA,KAAI,wDACqD,IACtD,gBAAC2E,IAAAA,CAAEC,UAAU,mCAAmCC,KAAK,yCAAwC,kCAExF,IAAI,oBAKpBL,GACG,gBAACtC,GAAWA,CAACC,QAAQ,WAAWC,SAAS,QAAQC,UAAW,W,OAAMoC,GAA2B,E,GACzF,gBAACzE,MAAAA,KAAI,uEACoE,IACrE,gBAAC2E,IAAAA,CAAEC,UAAU,mCAAmCC,KAAK,yCAAwC,kCAExF,IAAI,4BAKrB,gBAACrC,GAAeA,EAAAA,EAAAA,CACZC,GAAG,cACHjD,OAAO,iCACPkD,MAAM,gBACNC,KAAK,cACLC,YAAY,qCACZK,WAAW,EACXC,aAAa,QACbH,kBAAmC,QAAhBxC,EAAAA,EAAO6D,iBAAP7D,IAAAA,OAAAA,EAAAA,EAAkByC,QACrCF,UAAWvC,EAAO6D,WACdtD,EAAS,YAAa,CACtBgE,SAAU,SAACjD,G,OAAMoC,EAAcpC,EAAEzF,OAAOS,M,EACxCkI,SAAU,CACNC,aAAc,SAACnI,G,MAAU,eAAeoI,KAAKpI,IAAU,oC,MAE/D,CACAsG,UAAWvB,KAGf,gBAACiC,EAAAA,EAAAA,CACGpB,GAAG,iBACHjD,OAAO,oCACP2D,UAAWvB,EACXc,MAAM,WACNC,KAAK,iBACLC,YAAY,gCACZkC,SAAU,SAACjD,G,OAAMsC,EAAiBtC,EAAEzF,OAAOS,M,EAC3CiG,UAAWvC,EAAO8D,cACdvD,EAAS,eAAgB,CACzBgE,SAAU,SAACjD,G,OAAMsC,EAAiBtC,EAAEzF,OAAOS,M,EAC3CkI,SAAU,CACNG,gBAAiB,SAACrI,G,MACd,wCAAwCoI,KAAKpI,IAAU,+B,OAIvE,gBAAC6G,EAAAA,CAAoBE,YAAarD,EAAO8D,cAAc,yHAKvD,gBAACc,GAAYA,CACT3F,OAAO,iCACPI,QAASiB,EAAaS,GACtBiB,KAAM,SACNa,SAAU,QACVE,MAAOC,EAAAA,GAAUC,uBACjBC,QAASvC,EACTmC,SAAUnC,GACb,QAKb,E,uuJC9IA,IAAMkE,GAAsBjH,EAAAA,GAAO6B,IAAG,MAKhCqF,GAAiBlH,EAAAA,GAAO6B,IAAG,MAI3BsF,GAAkBnH,EAAAA,GAAO6B,IAAG,MAc5BuF,GAAepH,EAAAA,GAAO6B,IAAG,MAKzBwF,GAAcrH,EAAAA,GAAOuE,MAAK,MAW1B+C,GAAmBtH,EAAAA,GAAOuE,MAAK,MAI/BgD,GAAevH,EAAAA,GAAO6B,IAAG,MAQzB2F,GAAiBxH,EAAAA,GAAO6B,IAAG,MAa3B4F,GAAezH,EAAAA,GAAO0H,MAAM1F,OAAyB,Y,MAAiB,CACxE,eAD0DX,EAAAA,O,GAAzCrB,C,MAIf2H,GAAkB3H,EAAAA,GAAOuE,MAAK,MAQ9BqD,GAAa5H,EAAAA,GAAOwG,EAAC,MAIrBqB,GAAsB,CAExB,CAAEC,KAAM,cAAepJ,MAAO,MAC9B,CAAEoJ,KAAM,YAAapJ,MAAO,MAC5B,CAAEoJ,KAAM,qCAAsCpJ,MAAO,MACrD,CAAEoJ,KAAM,2BAA4BpJ,MAAO,MAC3C,CAAEoJ,KAAM,SAAUpJ,MAAO,MACzB,CAAEoJ,KAAM,eAAgBpJ,MAAO,MAC/B,CAAEoJ,KAAM,YAAapJ,MAAO,OAE1BqJ,GAAeC,EAAAA,GAAc,GAAGC,UAAUC,KAAI,SAACC,GACjD,MAAO,CAAEL,KAAMK,EAAQ3D,KAAM9F,MAAOyJ,EAAQC,KAChD,IAEaC,GAAmB,Y,IAC5BC,EAAAA,EAAAA,UACAC,EAAAA,EAAAA,kBACAC,EAAAA,EAAAA,SACAC,EAAAA,EAAAA,iBACAC,EAAAA,EAAAA,YACAC,EAAAA,EAAAA,oBACAC,EAAAA,EAAAA,YACAC,EAAAA,EAAAA,oBACAC,EAAAA,EAAAA,SACAC,EAAAA,EAAAA,iBACAC,EAAAA,EAAAA,aACAC,EAAAA,EAAAA,qBACAC,EAAAA,EAAAA,QACAC,EAAAA,EAAAA,gBACAtK,EAAAA,EAAAA,MACAkH,EAAAA,EAAAA,SACAqD,EAAAA,EAAAA,wBAQI7G,GAAAA,EAAAA,EAAAA,IAAQ,CACRC,cAAe,CACX8F,UAAWA,EACXE,SAAUA,EACVE,YAAaA,EACbI,SAAUA,EACVO,gBAAiBL,EACjBE,QAASA,KAZbxG,EAKAH,EALAG,aACAC,EAIAJ,EAJAI,SACA2G,EAGA/G,EAHA+G,QACA1G,EAEAL,EAFAK,QACAE,EACAP,EADAO,UAAaV,OAW+B5B,EAAAA,IAAAA,EAAAA,EAAAA,WAAS,MAAlD+I,EAAyC/I,EAAAA,GAAvBgJ,EAAuBhJ,EAAAA,GAChBA,EAAAA,IAAAA,EAAAA,EAAAA,WAAS,MAAlCiJ,EAAyBjJ,EAAAA,GAAfkJ,EAAelJ,EAAAA,GACQA,EAAAA,IAAAA,EAAAA,EAAAA,UAASpC,OAAOuL,aAAW,GAA5DC,EAAiCpJ,EAAAA,GAAnBqJ,EAAmBrJ,EAAAA,GAElC2C,EAAoB,WACtBuG,GAAY,GACZF,GAAoB,GAEpB,IAAMM,EAAW,CACbxB,UAAWA,EACXE,SAAUA,EACVuB,aAAcrB,EACdsB,YAAapB,EACbvG,aAAcxD,EACdkH,SAAUA,EACVkE,YAAanB,EACboB,aAAa,EACbC,aAAcjB,EACdkB,2BAA4B,SACfC,cAAc,4CACzB3L,OAGN0E,EAAAA,EAAYkH,OACRR,GACA,SAACS,GACOA,EAAS/G,QACT4F,EAAwBmB,EAASC,cAEjChB,GAAoB,GACpBE,GAAY,GAEpB,IACA,WACIF,GAAoB,GACpBE,GAAY,EAChB,GAER,GAEAe,EAAAA,EAAAA,UAAQ,WACJrM,OAAOI,iBAAiB,UAAU,W,OAAMqL,EAAgBzL,OAAOuL,Y,GACnE,GAAG,IAKH,I,IAAMlG,G,EAAmB,SAAOC,G,kEACd,UAAVA,EAAEC,KAAoB,C,EAAMf,KAA5Bc,C,cAAsB,S,0BACtB,C,EAAMP,K,aAAN,S,8BAER,E,yLAJgCO,G,iCAMhC,OACI,gCACI,gBAACI,GAASA,KAAC,uBAEVyF,GACG,gBAACxF,GAAWA,CAACC,QAAQ,WAAWC,SAAS,QAAQC,UAAW,W,OAAMsF,GAAoB,E,GAClF,gBAAC3H,MAAAA,KAAI,uEACoE,IACrE,gBAAC2E,IAAAA,CAAEC,UAAU,mCAAmCC,KAAK,yCAAwC,kCAExF,IAAI,oBAMrB,gBAACO,GAAAA,KACG,gBAAC5C,GAAeA,EAAAA,EAAAA,CACZC,GAAG,aACHE,KAAK,aACLnD,OAAO,uCACPkD,MAAM,aACNE,YAAY,wBACZkC,SAAU,SAACjD,G,OAAM6E,EAAkB7E,EAAEzF,OAAOS,M,EAC5CoG,WAAW,EACXC,aAAa,aACbH,kBAAmBxC,EAAOkG,WAAa,+BACvC3D,UAAWvC,EAAOkG,WACd3F,EAAS,YAAa,CACtBgE,SAAU,SAACjD,G,OAAM6E,EAAkB7E,EAAEzF,OAAOS,M,EAC5CgG,UAAU,KACd,CACAM,UAAWvB,KAGf,gBAACY,GAAeA,EAAAA,EAAAA,CACZC,GAAG,YACHE,KAAK,YACLnD,OAAO,sCACPkD,MAAM,YACNE,YAAY,uBACZM,aAAa,cACbH,kBAAmBxC,EAAOoG,UAAY,8BACtC7D,UAAWvC,EAAOoG,UACd7F,EAAS,WAAY,CACrBgE,SAAU,SAACjD,G,OAAM+E,EAAiB/E,EAAEzF,OAAOS,M,EAC3CgG,UAAU,KACd,CACAM,UAAWvB,MAInB,gBAACY,GAAeA,EAAAA,EAAAA,CACZC,GAAG,eACHE,KAAK,eACLnD,OAAO,oCACPkD,MAAM,eACNmG,UAAW,IACXjG,YAAY,iCACZM,aAAa,eACbH,kBAAmBxC,EAAOsG,aAAe,iCACzC/D,UAAWvC,EAAOsG,aACd/F,EAAS,cAAe,CACxBgE,SAAU,SAACjD,G,OAAMiF,EAAoBjF,EAAEzF,OAAOS,M,EAC9CgG,UAAU,KACd,CACAM,UAAWvB,KAGf,gBAAC0D,GAAAA,KACG,gBAACwD,EAAAA,GAAUA,CACPrB,QAASA,EACTsB,MAAO,CAAElG,UAAU,GACnBmG,OAAQ,Y,IAAGC,EAAAA,EAAAA,MAASnE,S,OAChB,gBAACoE,EAAAA,GAAeA,CACZ1J,OAAO,uCACPkD,MAAM,WACNyG,QAAS,CACL,CACI5G,KAAM,UACN4G,QAASnD,IAEb,CACIzD,KAAM,UACN4G,QAASjD,KAGjBkD,aAAcnC,EACdlE,kBAAmBxC,EAAO0G,UAAY,8BACtCnE,UAAWvC,EAAO0G,SAClBnC,SAAU,SAACjI,GACPiI,EAASjI,GACTqK,EAAiBrK,EACrB,EACAwM,UAAWtB,GAAgB,IAAM,SAAW,O,EAGpDpF,KAAK,cAIb,gBAAC0C,GAAAA,KACG,gBAACiE,EAAAA,EAAkBA,CACfhD,QAASW,EACTsC,WAAYxC,EACZjC,SAAUkC,EACVwC,IAAK,qCAIb,gBAACnE,GAAAA,KACG,gBAACG,GAAAA,CAAYiE,QAAQ,YAAW,iCAChC,gBAACX,EAAAA,GAAUA,CACPrB,QAASA,EACT9E,KAAM,UACNoG,MAAO,CAAElG,UAAU,GACnBmG,OAAQ,Y,QAAGC,MAASnE,EAAAA,EAAAA,SAAUjI,EAAAA,EAAAA,MAAO8F,EAAAA,EAAAA,K,OACjC,gCACI,gBAAC+C,GAAAA,KACG,gBAACE,GAAAA,CACG/I,MAAO6M,EAAAA,GAAaC,cACpBlH,GAAI,sBACJE,KAAMA,EACNJ,KAAM,QACN/C,OAAQ,6BACRoK,QAAS/M,IAAU6M,EAAAA,GAAaC,cAChC7E,SAAU,SAACjD,GACPyF,EAAgBoC,EAAAA,GAAaC,eAC7B7E,EAASjD,EACb,IAEJ,gBAAC4D,GAAAA,CAAiBgE,QAAQ,uBAAsB,eAEpD,gBAAC/D,GAAAA,KACG,gBAACE,GAAAA,CACG/I,MAAO6M,EAAAA,GAAaG,UACpBpH,GAAI,kBACJE,KAAMA,EACNJ,KAAM,QACN/C,OAAQ,yBACRoK,QAAS/M,IAAU6M,EAAAA,GAAaG,UAChC/E,SAAU,SAACjD,GACPyF,EAAgBoC,EAAAA,GAAaG,WAC7B/E,EAASjD,EACb,IAEJ,gBAAC4D,GAAAA,CAAiBgE,QAAQ,mBAAkB,2B,MAKzDlJ,EAAO8G,SAAW,gBAAC1B,GAAAA,KAAe,yCAGzC,gBAACN,GAAAA,KACG,gBAACE,GAAAA,KACG,gBAACK,GAAAA,EAAAA,CACGnD,GAAG,eACHE,KAAK,eACLJ,KAAK,WACL/C,OAAO,6CACHsB,EAAS,kBAAmB,CAC5B+B,UAAU,EACViC,SAAU,SAACjD,G,OAAMuF,EAAqBvF,EAAEzF,OAAOwN,Q,MAGvD,gBAAC9D,GAAAA,CAAgB2D,QAAQ,gBAAe,+BACP,IAC7B,gBAAC1D,GAAAA,CAAWlB,KAAK,8DAA8DzI,OAAO,UAAS,gBAEjF,IAAI,MACd,IACJ,gBAAC2J,GAAAA,CACGlB,KAAK,8JACLzI,OAAO,UACV,sBAKNmE,EAAOiH,iBAAmB,gBAAC7B,GAAAA,KAAe,2CAGjD,gBAACR,GAAYA,CACT3F,OAAO,kCACPI,QAASiB,EAAaS,GACtBiB,KAAM,SACNa,SAAU,QACVE,MAAOC,EAAAA,GAAUC,uBACjBH,SAAUuE,EACVnE,QAASmE,GACZ,QAKb,E,4wIC7YA,IAAMkC,GAAO3L,EAAAA,GAAO6B,IAAG,KAQC+J,EAAAA,GAAMC,KAAKC,YAkB7BC,GAAkB/L,EAAAA,GAAOgM,KAAI,MAI7BC,GAAkBjM,EAAAA,GAAOgM,KAAI,MAI7BE,GAAmBlM,EAAAA,GAAO6B,IAAG,MAM7BsK,GAAgBnM,EAAAA,GAAO6B,IAAG,KACd+J,EAAAA,GAAMQ,QAAQC,OAO1BC,IAAatM,EAAAA,EAAAA,IAAOuM,EAAAA,GAAPvM,CAAmBuM,MAiBhCC,GAAyB,CAC3BC,WAAY,UACZC,MAAO,CACHC,KAAM,eAEVA,KAAM,UACNC,SAAU,UACVC,aAAc,SAGZC,GAAmB9M,EAAAA,GAAOC,EAAC,MAQ3B8M,GAAU/M,EAAAA,GAAOgM,KAAI,MAMrBgB,GAAchN,EAAAA,GAAOgM,KAAI,KAIXiB,EAAAA,GAAQC,UAKtBC,GAAYnN,EAAAA,GAAOoN,GAAE,MAOdtJ,GAAY9D,EAAAA,GAAOqN,GAAE,MAerBhJ,IAAkBrE,EAAAA,EAAAA,IAAOsN,EAAAA,IAAWtL,OAC7C,Y,MAAkC,CAC9B+C,aADDA,EAAAA,aAECC,UAFaA,EAAAA,U,GADUhF,C,MAoBlBgH,IAAehH,EAAAA,EAAAA,IAAOkC,EAAAA,GAAPlC,CAAakC,MAY5B6B,IAAc/D,EAAAA,EAAAA,IAAOuN,EAAAA,GAAPvN,CAAYuN,MAIjCC,GAAgBxN,EAAAA,GAAO6B,IAAG,MAK1B4L,GAAiBzN,EAAAA,GAAO6B,IAAG,MAOpB6L,GAAuE,Y,IAChFC,EAAAA,EAAAA,eAEsCnN,EAAAA,IAAAA,EAAAA,EAAAA,UAAS,MAAxCoN,EAA+BpN,EAAAA,GAAlBqN,EAAkBrN,EAAAA,GAGZA,EAAAA,IAAAA,EAAAA,EAAAA,UAAS,OAA5B3B,EAAmB2B,EAAAA,GAAZsN,EAAYtN,EAAAA,GACMA,EAAAA,IAAAA,EAAAA,EAAAA,UAAS,OAAlCuF,EAAyBvF,EAAAA,GAAfuN,EAAevN,EAAAA,GAGEA,EAAAA,IAAAA,EAAAA,EAAAA,UAAS,OAApC8H,EAA2B9H,EAAAA,GAAhBwN,EAAgBxN,EAAAA,GACFA,EAAAA,IAAAA,EAAAA,EAAAA,UAAS,OAAlCgI,EAAyBhI,EAAAA,GAAfyN,EAAezN,EAAAA,GACMA,EAAAA,IAAAA,EAAAA,EAAAA,UAAS,OAAxCkI,EAA+BlI,EAAAA,GAAlB0N,EAAkB1N,EAAAA,GACAA,EAAAA,IAAAA,EAAAA,EAAAA,UAAS,OAAxCoI,EAA+BpI,EAAAA,GAAlB2N,EAAkB3N,EAAAA,GACNA,EAAAA,IAAAA,EAAAA,EAAAA,UAASmN,GAAAA,GAAlC7E,EAAyBtI,EAAAA,GAAf4N,EAAe5N,EAAAA,GACQA,EAAAA,IAAAA,EAAAA,EAAAA,WAAS,MAA1CwI,EAAiCxI,EAAAA,GAAnB6N,EAAmB7N,EAAAA,GACVA,EAAAA,IAAAA,EAAAA,EAAAA,UAAS,OAAhC0I,EAAuB1I,EAAAA,GAAd8N,EAAc9N,EAAAA,GAmB9B,OACI,gBAACmL,GAAAA,KACG,gBAACI,GAAAA,MACD,gBAACG,GAAAA,KACG,gBAACqC,MAAAA,CACGC,IAAI,8FACJC,IAAI,oBACJnJ,QAAQ,SAEZ,gBAAC6H,GAAAA,KAAU,yBAEX,gBAACtL,MAAAA,KACG,gBAACkL,GAAAA,KACG,gBAAC2B,EAAAA,EAAUA,CAACC,MAAO,OAAQC,OAAQ,SACnC,gBAAC5B,GAAAA,KAAY,4BAEjB,gBAACD,GAAAA,KACG,gBAAC8B,EAAAA,EAAQA,CAACF,MAAO,OAAQC,OAAQ,SACjC,gBAAC5B,GAAAA,KAAY,sBAIrB,gBAACb,GAAAA,KACG,gBAACsB,GAAAA,KACoB,IAAhBG,GACG,gBAACtB,GAAAA,CACG7K,QA3CH,WACrBoM,GAAe,SAACiB,G,OAASA,EAAO,C,GACpC,EA0C4BzN,OAAO,wBACP0N,QAAQ,EACR5J,MAAOqH,GACPpI,KAAM,UAEN,gBAAC4K,EAAAA,EAAIA,CAACL,MAAO,OAAQC,OAAQ,SAAU,QAI/C,gBAAC9B,GAAAA,KAAkB,QAAoB,OAAZc,EAAY,WAE1B,IAAhBA,GACG,gBAAChI,EAAeA,CACZC,SAAU,W,OAAMgI,EAAe,E,EAC/BhP,MAAOA,EACPiH,cAAegI,EACf/H,SAAUA,EACVC,iBAAkB+H,IAGT,IAAhBH,GACG,gBAACvF,GAAgBA,CACbe,wBA9DO,SAAC6F,GACxBA,GACApB,EAAe,GACfzK,EAAAA,EAAYS,iBAEZzF,OAAO0K,SAASoG,OAAO,IAE/B,EAwDwB5G,UAAWA,EACXC,kBAAmByF,EACnBxF,SAAUA,EACVC,iBAAkBwF,EAClBvF,YAAaA,EACbC,oBAAqBuF,EACrBtF,YAAaA,EACbC,oBAAqBsF,EACrBrF,SAAUA,EACVC,iBAAkBqF,EAClBpF,aAAcA,EACdC,qBAAsBoF,EACtBnF,QAASA,EACTC,gBAAiBmF,EACjBzP,MAAOA,EACPkH,SAAUA,IAGD,IAAhB6H,GACG,gBAACzL,EAAgBA,CAACE,aAAcxD,EAAOyD,mBAzE9B,WACzBlE,OAAO0K,SAASoG,OAAO,IAC3B,KA2E6B,IAAhBtB,GACG,gBAACJ,GAAAA,KAAc,qCACuB,gBAAChH,IAAAA,CAAEE,KAAK,KAAI,YAI1D,gBAACuF,GAAAA,MAGb,GCvSIpB,EAAAA,EAAAA,IAAO,eAAgB6C,GAAepP,SAAS6Q,eAAe,mBAAoB,CAC9ExB,eAAgBA,gB,gNCAxB,IAsBO,WAAMyB,K,kGAAAA,E,EACT,EADSA,EACFC,iBAA0G,Y,IAC7GC,EAAAA,EAAAA,WACAC,EAAAA,EAAAA,SACAC,EAAAA,EAAAA,aACAC,EAAAA,EAAAA,O,MACE,iBAAwCF,OAAvBD,EAAW,cAA6BE,OAAjBD,EAAS,UAA4BC,OAApBA,EAAa,SAAuBC,OAAhBD,EAAa,KAAU,OAAPC,E,IACnG,EAPSL,EAOFM,kBAAuE,Y,IAAGJ,EAAAA,EAAAA,WAAYK,EAAAA,EAAAA,W,MACzF,yBAAkDA,OAAzBL,EAAW,gBAAyB,OAAXK,EAAW,mB,IAEjE,EAVSP,EAUFQ,oBAAoB,sBAG3B,EAbSR,EAaFS,cAAc,uBACrB,EAdST,EAcFU,iBAAiB,0BACxB,EAfSV,EAeFW,UAAU,mBAEjB,EAjBSX,EAiBFY,eAAc,SAACC,G,IACW,EAQ7B,OAPI,EADyB,KACxBC,EAAAA,GAAaC,UAAY,EAAKC,sBAC/B,EAFyB,EAExBF,EAAAA,GAAaG,UAAY,EAAKC,uBAC/B,EAHyB,EAGxBJ,EAAAA,GAAaK,YAAc,EAAKC,wBACjC,EAJyB,EAIxBN,EAAAA,GAAaO,MAAQ,EAAKC,kBAC3B,EALyB,EAKxBR,EAAAA,GAAaS,QAAU,EAAKC,oBALJ,GAQDX,EAChC,IAGA,EA9BSb,EA8BFgB,uBAAuB,4BAG9B,EAjCShB,EAiCFkB,wBAAwB,4BAG/B,EApCSlB,EAoCFsB,mBAAmB,wBAG1B,EAvCStB,EAuCFoB,yBAAyB,8BAChC,EAxCSpB,EAwCFyB,iBAAsD,Y,IAAGC,EAAAA,EAAAA,e,MAC5D,gBAA+B,OAAfA,EAAe,iB,IACnC,EA1CS1B,EA0CF2B,eAAoD,Y,IAAGD,EAAAA,EAAAA,e,MAC1D,gBAA+B,OAAfA,EAAe,e,IACnC,EA5CS1B,EA4CF4B,eAAoD,Y,IAAGF,EAAAA,EAAAA,e,MAC1D,gBAA+B,OAAfA,EAAe,e,IACnC,EA9CS1B,EA8CF6B,gBAAmE,Y,IAAG3B,EAAAA,EAAAA,WAAYC,EAAAA,EAAAA,S,MACrF,kBAAyCA,OAAvBD,EAAW,cAAqB,OAATC,EAAS,mB,IACtD,EAhDSH,EAgDF8B,kBAAqE,Y,IAAG5B,EAAAA,EAAAA,WAAYC,EAAAA,EAAAA,S,MACvF,kBAAyCA,OAAvBD,EAAW,cAAqB,OAATC,EAAS,qB,IACtD,EAlDSH,EAkDF+B,mBAAsF,Y,IACzF7B,EAAAA,EAAAA,WACAC,EAAAA,EAAAA,SACA6B,EAAAA,EAAAA,O,MACE,kBAAyC7B,OAAvBD,EAAW,cAAwC8B,OAA5B7B,EAAS,qBAA0B,OAAP6B,E,IAC3E,EAvDShC,EAuDFiC,qBAAwF,Y,IAC3F/B,EAAAA,EAAAA,WACAC,EAAAA,EAAAA,SACA6B,EAAAA,EAAAA,O,MACE,kBAAyC7B,OAAvBD,EAAW,cAA0C8B,OAA9B7B,EAAS,uBAA4B,OAAP6B,E,IAC7E,EA5DShC,EA4DFkC,oBAA6F,Y,IAChGhC,EAAAA,EAAAA,WACAC,EAAAA,EAAAA,SACAgC,EAAAA,EAAAA,a,MACE,kBAAyChC,OAAvBD,EAAW,cAAyCiC,OAA7BhC,EAAS,sBAAiC,OAAbgC,E,IAC5E,EAjESnC,EAiEFoC,qBAA8F,Y,IACjGlC,EAAAA,EAAAA,WACAC,EAAAA,EAAAA,SACAgC,EAAAA,EAAAA,a,MACE,kBAAyChC,OAAvBD,EAAW,cAA0CiC,OAA9BhC,EAAS,uBAAkC,OAAbgC,E,IAC7E,EAtESnC,EAsEFqC,yBAA4F,Y,IAC/FnC,EAAAA,EAAAA,WACAC,EAAAA,EAAAA,SACAE,EAAAA,EAAAA,O,MACE,kBAAyCF,OAAvBD,EAAW,cAAwCG,OAA5BF,EAAS,qBAA0B,OAAPE,E,IAG3E,EA7ESL,EA6EFwB,qBAAqB,0BAC5B,EA9ESxB,EA8EFsC,yBAAwD,Y,IAAGnC,EAAAA,EAAAA,S,MAC9D,mBAA4B,OAATA,EAAS,kB,IAChC,EAhFSH,EAgFFuC,kBAAiD,Y,IAAGpC,EAAAA,EAAAA,S,MAAe,mBAA4B,OAATA,EAAS,W,IACtG,EAjFSH,EAiFFwC,sBAAqD,Y,IAAGrC,EAAAA,EAAAA,S,MAC3D,mBAA4B,OAATA,EAAS,e,IAChC,EAnFSH,EAmFFyC,sBAAqD,Y,IAAGtC,EAAAA,EAAAA,S,MAC3D,mCAA4C,OAATA,EAAS,S,IAChD,EArFSH,EAqFF0C,0BAAyD,Y,IAAGvC,EAAAA,EAAAA,S,MAC/D,mBAA4B,OAATA,EAAS,mB,IAChC,EAvFSH,EAuFF2C,wBAA6F,Y,IAChGxC,EAAAA,EAAAA,SACAC,EAAAA,EAAAA,aACAC,EAAAA,EAAAA,O,MACE,mCAAmDD,OAAhBD,EAAS,SAAuBE,OAAhBD,EAAa,KAAU,OAAPC,E,IAGzE,EA9FSL,EA8FF4C,yBAAyB,mDAGhC,EAjGS5C,EAiGF6C,wBAA6E,Y,IAElE,EAFqEC,EAAAA,EAAAA,mBAE7EC,GACF,EADU,KACTC,EAAAA,GAAmBC,wBAA0B,6BAC9C,EAFU,EAETD,EAAAA,GAAmBE,kBAAoB,sBACxC,EAHU,EAGTF,EAAAA,GAAmBG,cAAgB,oBAH1B,GAMd,MAAO,GAAcJ,OAPL,gDAOE,KAA6B,OAA1BA,EAAMD,GAC/B,G,kvCCnIQM,G,sHAAAA,IAAAA,EAAAA,CAAAA,IAYL,I,IAAMC,EAAyB,SAACC,GACnC,IAAMC,EAA6B,oBAAdC,WAA6BA,UAAUC,qBAC5D,YAAcC,IAAVH,GAAiC,KAAVA,IAEvBI,EAAAA,EAAAA,IAAS,CACLC,MAAO,IAAIC,MACP,+FAAoG,OAALP,EAAK,SAGrG,GAGPC,EACK3T,MAAM,KACNkJ,KAAI,SAACwK,G,OAASA,EAAKpP,OAAO4P,a,IAC1BC,QAAQT,EAAKQ,gBAAkB,CAE5C,E,EAS2C,Y,IAASR,E,2BAChD,OADgDA,EAAAA,EAAAA,KACzC,C,EAAAD,EAAuBC,G,GAClC,E,8dCzCC,iB,6uBAEM,IAAMK,EAA4B,Y,IAAGC,EAAAA,EAAAA,MAAOI,EAAAA,EAAAA,WAAYC,EAAAA,EAAAA,KAE/B,mBAAjBjV,OAAOkV,OAIlBlV,OAAOkV,MAAM,OAAQ,CACjBN,MAAAA,EACAI,WAAAA,EACAC,KAAM,CAAC,kBAAD,OAAmB,EAAIA,QAAAA,EAAQ,MAE7C,E,qBCdaE,EAAqB,SAACC,G,MAC/B,CACIC,EAAAA,GAAgBC,MAChBD,EAAAA,GAAgBE,aAChBF,EAAAA,GAAgBG,oBAChBH,EAAAA,GAAgBI,WAChBJ,EAAAA,GAAgBK,KAChBL,EAAAA,GAAgBM,oBAChBN,EAAAA,GAAgBO,cAClBlV,SAAS0U,E,EAKFS,EAAoB,SAACC,EAAaC,GAC3C,IACMC,EAASD,GAAWD,EAkB1B,QAhBKA,IAAQE,GAAUF,EAAME,EAHX,IAGoCA,EAHpC,EAGyDF,IAGnEA,EADAA,EAAME,EAAS,GACTA,EAAS,EAETA,EARI,GAYdF,EAAM,MAENA,EAAM,KAGVA,EAAMlT,KAAKqT,IAAIH,EAAK,IACpBA,EAAMlT,KAAKqT,IAAIF,EAASD,EAE5B,EAEaI,EAAY,SAACd,G,MACtB,CACIC,EAAAA,GAAgBc,wBAChBd,EAAAA,GAAgBnB,kBAChBmB,EAAAA,GAAgBlB,eAClBzT,SAAS0U,E,EAEFgB,EAAoB,Y,IAC7BhB,EAAAA,EAAAA,KACAiB,EAAAA,EAAAA,aACAC,EAAAA,EAAAA,cACAC,EAAAA,EAAAA,gBACAC,EAAAA,EAAAA,qBACAC,EAAAA,EAAAA,aACAC,EAAAA,EAAAA,mBAUMC,EAA6B,SAACb,GAKhC,OAJII,EAAUd,KAEVU,EAAM,GAAKA,EAAM,GAEdA,CACX,EAEA,GAAIX,EAAmBC,GAAO,CAC1B,GAAIkB,EAAgB,EAAG,CACnB,IAAIM,EAAeD,EAA2BL,GAE9C,OADAM,EAAef,EAAkBe,EAAcP,EAEnD,CACA,OAAO,CACX,CACI,GAAII,EAAe,EAAG,CAClB,IAGIG,EAAeD,EAHP/T,KAAKC,MACb,EAAoB2T,EAAwBC,EAAeC,EAAsB,MAIrF,OADAE,EAAef,EAAkBe,EAAcP,EAEnD,CACA,OAAO,CAEf,E,05CCvFA,MAAK,a,mOAACQ,EAAAA,G,aAAAA,E,4JAAAA,EACUpQ,EAAiBmO,EAAoBlL,G,+GAD/CmN,I,cAEQpQ,IACDL,KAAO,iBAGZ,EAAK0Q,MAAQ,GAA0BpN,OAAvBkL,EAAMkC,MAAM,aAAgB,OAALpN,EAAK,K,SAN9CmN,C,CAAD,C,EAAwBhC,QAUhBkC,EAAY,SAACrN,EAAcsN,GACpC,IACI,OAAOC,KAAKC,MAAMxN,EACtB,CAAE,MAAOyN,GACL,MAAM,IAAIN,EAAe,uBAA+B,OAARG,GAAWG,EAAazN,EAC5E,CACJ,E,+BCda0N,EAAgB,SAACC,GAC1B,GAAKA,EAIL,OAAOC,IAAMD,EACjB,C,sECJaE,EAAyB,SAAChG,GACnC,OAAQA,GACJ,KAAKiG,EAAAA,GAAYhD,UACb,OAAO1C,EAAAA,GAAaC,UAExB,KAAKyF,EAAAA,GAAYC,SACb,OAAO3F,EAAAA,GAAaK,YAExB,KAAKqF,EAAAA,GAAYvF,UACb,OAAOH,EAAAA,GAAaG,UAExB,KAAKuF,EAAAA,GAAYE,UACb,OAAO5F,EAAAA,GAAaO,MAExB,KAAKmF,EAAAA,GAAYjF,QACb,OAAOT,EAAAA,GAAaS,QAGhC,C,8ICjBaoF,EACT,gCAAE,gEACgE,IAC9D,gBAACvP,IAAAA,CAAEE,KAAM,yCAAyC,mCAI7CsP,EAAiB,Y,IAC1B/R,EAAAA,EAAAA,SACAgS,EAAAA,EAAAA,QACAC,EAAAA,EAAAA,SACA7U,EAAAA,EAAAA,OAAAA,EAAAA,EACA8U,SAAAA,OAAAA,IAAW,YAQXC,EAAAA,GAAMC,QACF,SAACC,G,OACG,gBAAC/I,EAAAA,GAAKA,CACFrJ,UAAW,W,OAAMkS,EAAAA,GAAMG,QAAQD,EAAEhS,G,EACjCkS,UAAWF,EAAEG,QACbzS,QAAS,WACTC,SAAUA,EACVkS,SAAUA,EACV9U,OAAQA,EACRqV,QAAAA,GAECT,E,GAGT,CACIU,SAAU,aACVT,SAAUA,QAAAA,EAAYU,KAGlC,EAEaC,EAAwB,WACjCb,EAAe,CACX/R,SAAU,QACVgS,QAAS,gBAAChW,IAAAA,KAAE,gCAA8B8V,EAAsB,MAExE,C,gLCrDO,I,UAAMe,EAAyB,CAClC/F,YAAa,cACbI,gBAAiB,kBACjBE,kBAAmB,oBACnB0F,kBAAmB,oBACnBzF,iBAAkB,mBAClBE,kBAAmB,oBACnBwF,cAAe,gBACfC,SAAU,WACVC,gBAAiB,kBACjBC,QAAS,UACTC,SAAU,WAEVC,GAAI,KACJC,iBAAkB,mBAClBxD,KAAM,OACNyD,MAAO,QACPC,MAAO,QACPC,MAAO,U,SAGC7B,G,mHAAAA,IAAAA,EAAAA,CAAAA,I,SAQA1F,G,iHAAAA,IAAAA,EAAAA,CAAAA,I,SAQAuD,G,ufAAAA,IAAAA,EAAAA,CAAAA,I,SAkBAiE,G,uDAAAA,IAAAA,EAAAA,CAAAA,I,SAMAC,G,02BAAAA,IAAAA,EAAAA,CAAAA,G,yDChDL,IAAM3P,EAAgC,CACzC,CACIC,UAAW,CACP,CACIG,KAAM,KACN5D,KAAM,YACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN0P,YAAa,cACbtT,KAAM,cACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,iBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,gBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAIzB,CACIhC,UAAW,CACP,CACIG,KAAM,KACN5D,KAAM,cACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,gBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,iBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,sBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,YACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,aACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,KAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,aACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,KAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,qCACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,yBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,gBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,iCACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,yBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,KAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,eACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,KAEjB,CACI7B,KAAM,KACN5D,KAAM,aACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,iBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,2BACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,OACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,mBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,gBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,eACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,aACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,OACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,iBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,mCACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,qBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,KAEjB,CACI7B,KAAM,KACN5D,KAAM,aACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,cACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,oBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,mBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,gBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,OACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,gBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,mBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,8BACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,YACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,YACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,aACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,OACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,KAEjB,CACI7B,KAAM,KACN5D,KAAM,YACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,gBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,oCACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,YACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,YACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,OACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,OACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,cACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,cACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,aACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,KAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,aACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,OACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,gBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,YACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,aACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,YACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,aACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,OACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,mBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,aACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,aACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,YACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,aACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,aACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,aACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,KAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,aACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,cACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,gBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,YACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,OACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,iBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,cACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,2BACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,KAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,OACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,wBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,mBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,OACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,cACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,cACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,KAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,wBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,KAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,mBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,eACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,wBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,cACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,eACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,4BACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,mCACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,aACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,wBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,eACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,aACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,eACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,YACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,eACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,kBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,eACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,+CACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,cACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,cACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,YACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,yBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,YACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,cACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,aACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,OACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,sBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,eACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,2BACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,KAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,oBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,KAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,uBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,uCACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,KAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,aACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,YACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,UACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,MAEjB,CACI7B,KAAM,KACN5D,KAAM,oBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,iBACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,QACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,SACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,OAEjB,CACI7B,KAAM,KACN5D,KAAM,WACNoT,KAAM,MACNC,QAAS,OACT5N,YAAa,S,mTC/tDtB,eAAM8N,I,OAAAA,E,EAET,EAFSA,EAEFC,UAAU,YACjB,EAHSD,EAGFE,cAAc,gBACrB,EAJSF,EAIFG,UAAU,YACjB,EALSH,EAKFI,SAAS,WAChB,EANSJ,EAMFK,iBAAiB,mBACxB,EAPSL,EAOFM,eAAe,iBACtB,EARSN,EAQFO,WAAW,aAClB,EATSP,EASFQ,UAAU,YACjB,EAVSR,EAUFS,gBAAgB,kBACvB,EAXST,EAWFU,SAAS,WAChB,EAZSV,EAYFW,eAAe,iBAGtB,EAfSX,EAeFY,sBAAsB,8BAC7B,EAhBSZ,EAgBFa,2BAA2B,8BAClC,EAjBSb,EAiBFc,iBAAiB,oBACxB,EAlBSd,EAkBFlU,gBAAgB,yBACvB,EAnBSkU,EAmBF1U,8BAA8B,iCACrC,EApBS0U,EAoBFe,mCAAmC,4CAC1C,EArBSf,EAqBFzN,SAAS,kBAChB,EAtBSyN,EAsBFgB,qBAAqB,2BAG5B,EAzBShB,EAyBFiB,qBAAqB,mBAG5B,EA5BSjB,EA4BFkB,cAAc,uBACrB,EA7BSlB,EA6BFmB,eAAe,wBACtB,EA9BSnB,EA8BFoB,kBAAkB,2BACzB,EA/BSpB,EA+BFqB,UAAU,sBACjB,EAhCSrB,EAgCFsB,iBAAiB,0BACxB,EAjCStB,EAiCFuB,WAAW,oBAClB,EAlCSvB,EAkCFwB,iBAAiB,0BACxB,EAnCSxB,EAmCFyB,eAAe,wBACtB,EApCSzB,EAoCF0B,uBAAuB,gCAE9B,EAtCS1B,EAsCF2B,eAAe,wBACtB,EAvCS3B,EAuCF4B,eAAe,kBACtB,EAxCS5B,EAwCF6B,kBAAkB,2BACzB,EAzCS7B,EAyCF8B,gBAAiB,uBACxB,EA1CS9B,EA0CF+B,aAAa,sBAGpB,EA7CS/B,EA6CFgC,UAAU,6BACjB,EA9CShC,EA8CFiC,gBAAgB,mCAGvB,EAjDSjC,EAiDFkC,cAAc,6BACrB,EAlDSlC,EAkDFmC,iBAAiB,gCAGxB,EArDSnC,EAqDFoC,sBAAsB,yBAC7B,EAtDSpC,EAsDFqC,mBAAmB,sBAC1B,EAvDSrC,EAuDFsC,sBAAsB,iCAC7B,EAxDStC,EAwDFuC,oBAAoB,+BAC3B,EAzDSvC,EAyDFwC,2BAA2B,sCAClC,EA1DSxC,EA0DFyC,wBAAwB,mCAC/B,EA3DSzC,EA2DF0C,qCAAqC,gDAC5C,EA5DS1C,EA4DF2C,kBAAkB,6BACzB,EA7DS3C,EA6DF4C,4BAA4B,uCACnC,EA9DS5C,EA8DF6C,yBAAyB,oCAGhC,EAjES7C,EAiEFrI,iBAAiB,wBACxB,EAlESqI,EAkEF8C,gBAAgB,iCACvB,EAnES9C,EAmEF+C,mBAAmB,oCAC1B,EApES/C,EAoEFgD,UAAU,2BACjB,EArEShD,EAqEFiD,cAAc,+BACrB,EAtESjD,EAsEFkD,sBAAsB,uCAG7B,EAzESlD,EAyEFmD,oBAAoB,wBAC3B,EA1ESnD,EA0EFoD,eAAe,0BACtB,EA3ESpD,EA2EFqD,iBAAiB,4BACxB,EA5ESrD,EA4EFsD,eAAe,0BACtB,EA7EStD,EA6EFuD,+BAA+B,0CACtC,EA9ESvD,EA8EFwD,kCAAkC,6CACzC,EA/ESxD,EA+EFyD,8BAA8B,yCACrC,EAhFSzD,EAgFF0D,iCAAiC,4CAGxC,EAnFS1D,EAmFF2D,wBAAwB,2BAC/B,EApFS3D,EAoFF4D,iBAAiB,gCACxB,EArFS5D,EAqFF6D,+BAA+B,uBACtC,EAtFS7D,EAsFF8D,uBAAuB,2BAG9B,EAzFS9D,EAyFF+D,eAAe,4BACtB,EA1FS/D,EA0FFgE,eAAe,4BACtB,EA3FShE,EA2FFiE,kBAAkB,+BACzB,EA5FSjE,EA4FFkE,uBAAuB,0BAC9B,EA7FSlE,EA6FFmE,uBAAuB,oCAC9B,EA9FSnE,EA8FFoE,gBAAgB,mBACvB,EA/FSpE,EA+FFqE,oBAAoB,iCAE3B,EAjGSrE,EAiGFsE,+BAA8B,Y,IACjCnK,EAAAA,EAAAA,mBACA5C,EAAAA,EAAAA,WACAgN,EAAAA,EAAAA,SAkBA,IANiC,CAC7BlK,EAAAA,GAAmBkF,iBACnBlF,EAAAA,GAAmByB,WACnBzB,EAAAA,GAAmB0B,MAGOhV,SAASoT,GACnC,MAAM,IAAIe,MAAM,kCAGpB,IAAMsJ,EAAU,eAA6DjN,OAA9C4C,EAAmBgB,cAAc,eAAwB,OAAX5D,GACvEkN,EAAoB,IAAIC,gBAAgBH,GAE9C,MAAO,GAAcE,OAAXD,EAAQ,KAAqB,OAAlBC,EACzB,IAGA,EAjISzE,EAiIF2E,mBAAmB,6BAG1B,EApIS3E,EAoIF4E,oBAAoB,uBAC3B,EArIS5E,EAqIF6E,kBAAkB,mBACzB,EAtIS7E,EAsIF8E,oBAAoB,qBAG3B,EAzIS9E,EAyIF+E,sBAAsB,yBAC7B,EA1IS/E,EA0IFgF,0BAA0B,6BAGjC,EA7IShF,EA6IFiF,qBAAqB,+BAC5B,EA9ISjF,EA8IFkF,gBAAgB,0BAGvB,EAjJSlF,EAiJFmF,iBAAiB,kBACxB,EAlJSnF,EAkJFoF,WAAW,YAClB,EAnJSpF,EAmJFqF,aAAa,cACpB,EApJSrF,EAoJFsF,YAAY,iBACnB,EArJStF,EAqJFuF,YAAY,iBACnB,EAtJSvF,EAsJFwF,gBAAgB,WACvB,EAvJSxF,EAuJFyF,iBAAiB,kBAGxB,EA1JSzF,EA0JF0F,mBAAmB,kCAC1B,EA3JS1F,EA2JF2F,0BAA0B,6BACjC,EA5JS3F,EA4JF4F,qBAAqB,wBAC5B,EA7JS5F,EA6JF6F,qBAAqB,wBAC5B,EA9JS7F,EA8JF8F,wBAAwB,2BAG5B,eAAMC,I,OAAAA,E,EAET,EAFSA,EAEFC,gBAAgB,sBAGvB,EALSD,EAKFE,iBAAiB,+BACxB,EANSF,EAMFG,2BAA0B,SAACC,G,MAA6B,mBAA4B,OAATA,EAAS,e,IAC3F,EAPSJ,EAOFK,8BAA6B,SAACD,G,MAA6B,mBAA4B,OAATA,EAAS,sB,IAC9F,EARSJ,EAQFM,oCAAoC,qDAC3C,EATSN,EASFO,mBAAmB,iCAC1B,EAVSP,EAUFQ,mBAAmB,iCAG1B,EAbSR,EAaFS,iCAAiC,kDACxC,EAdST,EAcFU,iBAAiB,2BACxB,EAfSV,EAeFW,oBAAoB,8BAC3B,EAhBSX,EAgBFY,oBAAoB,8BAG3B,EAnBSZ,EAmBFa,6BAA6B,uCAGpC,EAtBSb,EAsBFc,2BAA0B,Y,IAAG9N,EAAAA,EAAAA,e,MAChC,wBAAuC,OAAfA,EAAe,Y,IAC3C,EAxBSgN,EAwBFe,gCAA+B,SAAC/N,G,MACnC,wBAAuC,OAAfA,EAAe,oB,IAC3C,EA1BSgN,EA0BFgB,iBAAgB,SAACvP,EAAkBwP,EAAqBC,G,MAC3D,mBAA0CD,OAAvBxP,EAAS,gBAAmCyP,OAArBD,EAAY,WAAe,OAANC,E,IACnE,EA5BSlB,EA4BFmB,kBAAiB,SAAC1P,EAAkB2P,G,MACvC,mBAAwDA,OAArC3P,EAAS,8BAAsC,OAAV2P,E,IAC5D,EA9BSpB,EA8BFqB,WAAU,SACbC,EACA7P,EACAgC,EACA8N,EACAvO,EACA2E,EACA6J,EACAC,G,MAEA,wBAAiDhQ,OAAzBuB,EAAe,YAA2CsO,OAAjC7P,EAAS,0BAAoDgC,OAA5B6N,EAAY,kBAAqCC,OAArB9N,EAAa,UAAqBkE,OAAb4J,EAAK,UAAeC,OAAP7J,GAAmB8J,OAAZD,GAAsB,OAAVC,E,IACvK,EAzCSzB,EAyCF0B,kBAAiB,SACpBlQ,EACAC,EACAE,EACAgQ,EACAP,EACAQ,G,MAEA,uBAA8CnQ,OAAvBD,EAAW,cAA+BG,OAAnBF,EAAS,YAAmCkQ,OAAzBhQ,EAAO,oBAA8CyP,OAA5BO,EAAe,eAAwCC,OAA3BR,EAAU,mBAA+B,OAAdQ,E,IACrJ,EAlDS5B,EAkDF6B,sBAAqB,SACxBrQ,EACAC,EACAkQ,EACAP,G,MAEA,2BAAkD3P,OAAvBD,EAAW,cAAuCmQ,OAA3BlQ,EAAS,oBAA8C2P,OAA5BO,EAAe,eAAuB,OAAVP,E,IAC7G,EAzDSpB,EAyDF8B,wBAAuB,SAAC9O,EAAwBnB,G,MACnD,wBAA2DA,OAAnCmB,EAAe,sBAA+B,OAAXnB,E,IAC/D,EA3DSmO,EA2DF+B,uCAAsC,SAAC/O,EAAwBnB,G,MAClE,wBAAyEA,OAAjDmB,EAAe,oCAA6C,OAAXnB,E,IAC7E,EA7DSmO,EA6DFgC,8BAA6B,SAAChP,G,MACjC,wBAAuC,OAAfA,EAAe,e,IAC3C,EA/DSgN,EA+DFiC,oCAAmC,SAACC,EAAwBxb,G,MAC/D,wBAAwDA,OAAhCwb,EAAW,uBAA0B,OAALxb,E,IAC5D,EAjESsZ,EAiEFmC,sBAAqB,SAACnP,G,MAAmC,wBAAuC,OAAfA,E,IACxF,EAlESgN,EAkEFoC,2BAA0B,SAACpP,G,MAC9B,wBAAuC,OAAfA,EAAe,gB,IAC3C,EApESgN,EAoEFqC,8BAA6B,SAACxQ,G,MACjC,wBAAmC,OAAXA,EAAW,qB,IACvC,EAtESmO,EAsEFsC,uCAAsC,SAACzQ,EAAwB0Q,G,MAClE,wBAAoEA,OAA5C1Q,EAAW,mCAA6C,OAAZ0Q,E,IAGxE,EA1ESvC,EA0EFwC,qCAAoC,SACvCxP,EACAS,EACAgP,G,MACS,wBAAqDhP,OAA7BT,EAAe,gBAAyCyP,OAA3BhP,EAAa,gBAAyB,OAAXgP,E,IAE7F,EAhFSzC,EAgFF0C,6BAA4B,SAC/B1P,EACA2P,EACAC,EACAC,G,MAEA,wBAAkDF,OAA1B3P,EAAe,aAAsC4P,OAA3BD,EAAU,mBAAoCE,OAAnBD,EAAS,YAAiB,OAAPC,E,IAEpG,EAxFS7C,EAwFF8C,cAAa,Y,IAAG9P,EAAAA,EAAAA,eAAgB2P,EAAAA,EAAAA,U,MACnC,wBAAmDA,OAA3B3P,EAAe,cAAsB,OAAV2P,E,IACvD,EA1FS3C,EA0FF+C,uBAAsB,SAAC/P,EAAwBnB,G,MAClD,wBAAsEA,OAA9CmB,EAAe,iCAA0C,OAAXnB,E,IAC1E,EA5FSmO,EA4FFgD,4BAA2B,Y,IAC9BhQ,EAAAA,EAAAA,eACA2P,EAAAA,EAAAA,U,MAEA,wBAAmDA,OAA3B3P,EAAe,cAAsB,OAAV2P,EAAU,e,IACjE,EAjGS3C,EAiGFiD,wBAAuB,SAACjQ,EAAwBS,G,MACnD,wBAAqDA,OAA7BT,EAAe,gBAA2B,OAAbS,EAAa,kB,IACtE,EAnGSuM,EAmGFkD,wBAAuB,SAAClQ,EAAwB2P,G,MACnD,wBAAyDA,OAAjC3P,EAAe,oBAA4B,OAAV2P,E,IAC7D,EArGS3C,EAqGFmD,yBAAwB,SAACnQ,G,MAC5B,wBAAuC,OAAfA,EAAe,mB,IAG3C,EAzGSgN,EAyGFoD,qBAAoB,SAAC3P,G,MAAiC,oBAAiC,OAAbA,EAAa,U,IAC9F,EA1GSuM,EA0GFqD,uBAAsB,SAAC5R,EAAkBgC,G,MAC5C,oBAAqCA,OAAjBhC,EAAS,UAAqB,OAAbgC,EAAa,Y,IACtD,EA5GSuM,EA4GFsD,8BAA6B,SAAC7R,G,MAA6B,oBAA6B,OAATA,EAAS,mB,IAC/F,EA7GSuO,EA6GFuD,mCAAkC,SAACvQ,G,MACtC,oBAAmC,OAAfA,EAAe,wB,IACvC,EA/GSgN,EA+GFwD,kCAAiC,SAACxQ,G,MACrC,oBAAmC,OAAfA,EAAe,uB,IACvC,EAjHSgN,EAiHFyD,+BAA8B,SAACnQ,G,MAA2B,oBAA2B,OAAPA,EAAO,oB,IAC5F,EAlHS0M,EAkHF0D,uBAAsB,SACzBjS,EACAgC,EACA6N,EACAC,EACAoC,EACAC,EACApC,EACAC,G,MAEA,oBAAqChO,OAAjBhC,EAAS,UAA6C6P,OAArC7N,EAAa,0BAA4C8N,OAApBD,EAAY,UAA0BqC,OAAlBpC,EAAK,eAAkCqC,OAArBD,EAAU,aAAqBnC,OAAVoC,GAAsBnC,OAAZD,GAAsB,OAAVC,E,IAC/J,EA7HSzB,EA6HF6D,+BAA8B,SAAC7Q,EAAwB2Q,EAAmBC,G,MAC7E,oBAAiED,OAA7C3Q,EAAe,gCAAmD4Q,OAArBD,EAAU,aAAmB,OAARC,E,IAC1F,EA/HS5D,EA+HF8D,4BAA2B,Y,IAC9B9Q,EAAAA,EAAAA,eACA+Q,EAAAA,EAAAA,SACAJ,EAAAA,EAAAA,UACAC,EAAAA,EAAAA,QACAnB,EAAAA,EAAAA,WAEIuB,EAAO,0BAA8DD,OAApC/Q,EAAe,uBAA2C2Q,OAAtBI,EAAS,eAAkCH,OAArBD,EAAU,aAAmB,OAARC,GAIpH,YAH0B,IAAfnB,IACPuB,GAAQ,eAA0B,OAAXvB,IAEpBuB,CACX,IACA,EA5IShE,EA4IFiE,8BAA6B,SAACxQ,EAAsByQ,G,MACvD,oBAA8DA,OAA1CzQ,EAAa,+BAAiD,OAApByQ,E,IAClE,EA9ISlE,EA8IFmE,4BAA2B,W,MAAe,gC,IACjD,EA/ISnE,EA+IFoE,gCAA+B,SAACpR,G,MACnC,oBAAmC,OAAfA,EAAe,S,IACvC,EAjJSgN,EAiJFqE,oBAAmB,SAACrR,G,MAAmC,oBAAmC,OAAfA,EAAe,iB,IACjG,EAlJSgN,EAkJFsE,sBAAqB,SAACtR,G,MACzB,yBAAwC,OAAfA,E,IAC7B,EApJSgN,EAoJFuE,oBAAmB,SAAC9Q,G,MAAiC,yBAAsC,OAAbA,EAAa,Q,IAClG,EArJSuM,EAqJFwE,2BAA0B,SAAClR,G,MAA2B,oBAA2B,OAAPA,EAAO,gB,IACxF,EAtJS0M,EAsJFyE,0BAAyB,SAACnR,G,MAA2B,yBAAgC,OAAPA,EAAO,W,IAC5F,EAvJS0M,EAuJF0E,wBAAuB,SAAC1R,G,MAAmC,oBAAmC,OAAfA,EAAe,a,IACrG,EAxJSgN,EAwJF2E,yBAAwB,SAAC3R,G,MAAmC,oBAAmC,OAAfA,EAAe,c,IACtG,EAzJSgN,EAyJF4E,qCAAoC,SAACnR,G,MACxC,oCAAiD,OAAbA,EAAa,W,IACrD,EA3JSuM,EA2JF6E,4BAA2B,SAAC7R,G,MAC/B,0BAAyC,OAAfA,EAAe,Y,IAC7C,EA7JSgN,EA6JF8E,yBAAwB,SAAC9R,G,MAAmC,0BAAyC,OAAfA,EAAe,S,IAC5G,EA9JSgN,EA8JF+E,yBAAwB,SAACtR,G,MAAiC,oBAAiC,OAAbA,EAAa,iB,IAClG,EA/JSuM,EA+JFgF,uBAAsB,W,MAAe,2B,IAC5C,EAhKShF,EAgKFiF,8BAA6B,SAAC3R,G,MAA2B,yBAAgC,OAAPA,EAAO,Y,IAChG,EAjKS0M,EAiKFkF,yCAAwC,SAACzR,G,MAC5C,oCAAiD,OAAbA,EAAa,Y,IACrD,EAnKSuM,EAmKFmF,wBAAuB,SAACnS,EAAwBM,G,MACnD,oBAA2CA,OAAvBN,EAAe,UAAe,OAAPM,EAAO,Y,IACtD,EArKS0M,EAqKFoF,8BAA6B,SAChC3R,EACAkP,EACAhL,EACA0N,EACAzkB,EACA4gB,EACAC,G,MAEA,yBAAiDkB,OAAxBlP,EAAa,aAAmCkE,OAAxBgL,EAAU,gBAA6B0C,OAAf1N,EAAK,YAA0B/W,OAAhBykB,EAAO,WAAiB7D,OAAR5gB,GAAoB6gB,OAAZD,GAAsB,OAAVC,E,IAChI,EA/KSzB,EA+KFsF,+BAA8B,SAACtS,G,MAClC,0BAAyC,OAAfA,EAAe,Y,IAC7C,EAjLSgN,EAiLFuF,wBAAuB,SAACvS,G,MAAmC,0BAAyC,OAAfA,EAAe,S,IAC3G,EAlLSgN,EAkLFwF,gCAA+B,SAACxS,EAAwByS,G,MAC3D,0BAAiDA,OAAvBzS,EAAe,UAAyB,OAAjByS,EAAiB,Q,IACtE,EApLSzF,EAoLF0F,gCAA+B,SAACjS,G,MAAiC,yBAAsC,OAAbA,E,IACjG,EArLSuM,EAqLF2F,2BAA0B,SAAC3S,EAAwByS,G,MACtD,0BAAiDA,OAAvBzS,EAAe,UAAyB,OAAjByS,E,IACrD,EAvLSzF,EAuLF4F,yBAAwB,SAAC5S,G,MAC5B,0BAAyC,OAAfA,EAAe,c,IAC7C,EAzLSgN,EAyLF6F,8BAA6B,SAACpU,G,MACjC,0BAAmC,OAATA,EAAS,iB,IACvC,EA3LSuO,EA2LF8F,2BAA0B,SAAC9S,G,MAC9B,0BAAyC,OAAfA,EAAe,gB,IAC7C,EA7LSgN,EA6LF+F,8BAA6B,Y,IAChC/S,EAAAA,EAAAA,eACAgT,EAAAA,EAAAA,Q,MAIU,0BAAqEA,OAA3ChT,EAAe,8BAAoC,OAARgT,E,IACnF,EApMShG,EAoMFiG,qCAAoC,SAACjT,G,MACxC,0BAAyC,OAAfA,EAAe,0B,IAC7C,EAtMSgN,EAsMFkG,wCAAuC,SAAClT,G,MAC3C,0BAAyC,OAAfA,EAAe,0B,IAC7C,EAxMSgN,EAwMFmG,iCAAgC,SAACnT,G,MACpC,0BAAyC,OAAfA,EAAe,sB,IAC7C,EA1MSgN,EA0MFoG,6BAA4B,SAACpT,G,MAChC,0BAAyC,OAAfA,EAAe,mB,IAC7C,EA5MSgN,EA4MFqG,mCAAkC,SAACrT,G,MACtC,0BAAyC,OAAfA,EAAe,wB,IAE7C,EA/MSgN,EA+MFsG,yCAAwC,SAACtT,EAAwBuT,GACpE,MAAO,oBAAgFC,OAA5DxT,EAAe,+CAExC,OAFqFwT,mBACnFD,GAER,IACA,EApNSvG,EAoNFyG,mCAAkC,SAACzT,EAAwB2P,G,MAC9D,oBAAwEA,OAApD3P,EAAe,uCAA+C,OAAV2P,E,IAC5E,EAtNS3C,EAsNF0G,yBAAwB,SAAC1T,EAAwB2P,G,MACpD,oBAAwDA,OAApC3P,EAAe,uBAA+B,OAAV2P,E,IAC5D,EAxNS3C,EAwNF2G,4BAA2B,SAAC3T,EAAwB4T,G,MACvD,oBAAuDA,OAAnC5T,EAAe,sBAA2B,OAAP4T,E,IAC3D,EA1NS5G,EA0NF6G,sBAAqB,SAAC7T,EAAwBS,EAAsBmT,G,MACvE,oBAA2CnT,OAAvBT,EAAe,UAAoC4T,OAA5BnT,EAAa,iBAAsB,OAAPmT,E,IAG3E,EA9NS5G,EA8NF8G,kBAAiB,Y,IAAGC,EAAAA,EAAAA,iBAAkBlV,EAAAA,EAAAA,W,MACzC,+CAA8EA,OAA/BkV,EAAiB,gBAAyB,OAAXlV,E,IAGlF,EAlOSmO,EAkOFgH,wBAAuB,SAACvV,G,MAC3B,mBAA4B,OAATA,EAAS,e,IAChC,EApOSuO,EAoOFiH,mBAAkB,SAACxV,G,MACtB,mBAA4B,OAATA,EAAS,iB,IAChC,EAtOSuO,EAsOFkH,oBAAmB,SACtBzV,EACAE,EACAwV,G,MACS,mBAAqCxV,OAAlBF,EAAS,WAA4B0V,OAAnBxV,EAAO,cAAsB,OAAVwV,EAAU,kB,IAC/E,EA3OSnH,EA2OFoH,yBAAwB,SAAC3V,EAAkBE,G,MAC9C,mBAAqCA,OAAlBF,EAAS,WAAgB,OAAPE,EAAO,Y,IAChD,EA7OSqO,EA6OFqH,4BAA2B,SAAC5V,EAAkBE,G,MACjD,mBAAqCA,OAAlBF,EAAS,WAAgB,OAAPE,EAAO,Y,IAChD,EA/OSqO,EA+OFsH,0BAAyB,SAAC7V,EAAkBE,EAAgB4V,G,MAC/D,mBAAqC5V,OAAlBF,EAAS,WAA4B8V,OAAnB5V,EAAO,cAA8B,OAAlB4V,EAAkB,W,IAC9E,EAjPSvH,EAiPFwH,2BAA0B,SAAC/V,G,MAA6B,mBAA4B,OAATA,EAAS,kB,IAC3F,EAlPSuO,EAkPFyH,2BAA0B,SAAChW,G,MAA6B,mBAA4B,OAATA,EAAS,kB,IAC3F,EAnPSuO,EAmPF0H,+BAA8B,SAACjW,EAAkBE,G,MACpD,mBAAkDA,OAA/BF,EAAS,wBAA6B,OAAPE,E,IACtD,EArPSqO,EAqPF2H,gCAA+B,SAAClW,G,MACnC,mBAA4B,OAATA,EAAS,sB,IAChC,EAvPSuO,EAuPF4H,+BAA8B,SAACnW,G,MAA6B,mBAA4B,OAATA,EAAS,sB,IAE/F,EAzPSuO,EAyPF6H,yBAAwB,SAACpW,G,MAA6B,mBAA4B,OAATA,EAAS,gB,IACzF,EA1PSuO,EA0PF8H,uBAAsB,SAACrW,G,MAA6B,mBAA4B,OAATA,EAAS,c,IACvF,EA3PSuO,EA2PF+H,oBAAmB,SAACtW,G,MAA6B,mBAA4B,OAATA,EAAS,W,IAEpF,EA7PSuO,EA6PFgI,uBAAsB,SAACvU,G,MAAiC,sBAAmC,OAAbA,EAAa,U,IAElG,EA/PSuM,EA+PF7B,wBAAuB,SAAC1K,G,MAAiC,sBAAmC,OAAbA,EAAa,c,IAEnG,EAjQSuM,EAiQFiI,gCAA+B,SAACxU,G,MACnC,sBAAmC,OAAbA,EAAa,sB,IAEvC,EApQSuM,EAoQFkI,oBAAmB,SAACzU,G,MAAiC,sBAAmC,OAAbA,E,IAElF,EAtQSuM,EAsQFmI,uBAAsB,SAAC1W,EAAkBE,EAAgByW,G,MAC5D,mBAAqCzW,OAAlBF,EAAS,WAA6B2W,OAApBzW,EAAO,eAAqB,OAARyW,E,IAE7D,EAzQSpI,EAyQFqI,0BAAyB,SAAC5W,EAAkBE,EAAgByW,G,MAC/D,mBAAqCzW,OAAlBF,EAAS,WAA6B2W,OAApBzW,EAAO,eAAqB,OAARyW,E,IAE7D,EA5QSpI,EA4QFsI,0BAAyB,SAACtV,EAAwBuV,G,MACrD,8BAAgEA,OAAlCvV,EAAe,qBAAmC,OAAhBuV,E,IAGpE,EAhRSvI,EAgRFwI,8BAA6B,SAAC/U,G,MACjC,sBAAmC,OAAbA,EAAa,8B,IACvC,EAlRSuM,EAkRFyI,4BAA2B,SAAChV,G,MAC/B,sBAAmC,OAAbA,EAAa,sB,IAGvC,EAtRSuM,EAsRF0I,uBAAsB,SAACjV,G,MAC1B,sBAAmC,OAAbA,EAAa,oB,IAGvC,EA1RSuM,EA0RF2I,qBAAoB,SAAClV,G,MAAiC,sBAAmC,OAAbA,EAAa,qB,IAGhG,EA7RSuM,EA6RF4I,uBAAsB,W,MAAe,sB,IAC5C,EA9RS5I,EA8RFjL,wBAAuB,W,MAAe,+B,IAC7C,EA/RSiL,EA+RF6I,gBAAe,W,MAAe,uB,IACrC,EAhSS7I,EAgSF8I,uBAAsB,SAACC,G,MAAgC,wCAAoD,OAAZA,E,IAGtG,EAnSS/I,EAmSFgJ,oBAAmB,W,MAAe,qC,IAGzC,EAtSShJ,EAsSFiJ,yBAAwB,SAACxV,G,MAC5B,sBAAmC,OAAbA,EAAa,kC,IAGvC,EA1SSuM,EA0SFkJ,+BAA8B,SAAClW,G,MAClC,wBAAuC,OAAfA,EAAe,oB,IAE3C,EA7SSgN,EA6SFmJ,+BAA8B,SACjCnW,EACAoW,EACA3X,EACAE,G,MAEA,wBAA2DyX,OAAnCpW,EAAe,sBAAyCvB,OAArB2X,EAAS,cAA+BzX,OAAnBF,EAAS,YAAiB,OAAPE,E,IAEvG,EArTSqO,EAqTFqJ,4BAA2B,SAACrW,EAAwBoW,G,MACvD,wBAA2DA,OAAnCpW,EAAe,sBAA6B,OAAToW,E,IAE/D,EAxTSpJ,EAwTFsJ,gCAA+B,SAACtW,EAAwBuW,G,MAC3D,wBAAoEA,OAA5CvW,EAAe,+BAAsC,OAATuW,E,IAExE,EA3TSvJ,EA2TFwJ,4BAA2B,SAACxW,G,MAC/B,wBAAuC,OAAfA,EAAe,oB,IAE3C,EA9TSgN,EA8TFyJ,gCAA+B,SAAChY,EAAkBE,EAAgByX,G,MACrE,mBAAqCzX,OAAlBF,EAAS,WAAoC2X,OAA3BzX,EAAO,sBAA6B,OAATyX,E,IAEpE,EAjUSpJ,EAiUF0J,oCAAmC,SAACjY,EAAkBE,G,MACzD,mBAAqCA,OAAlBF,EAAS,WAAgB,OAAPE,EAAO,4B,IAGhD,EArUSqO,EAqUF2J,oBAAmB,SAAClW,EAAsB5B,G,MAC7C,sBAAuDA,OAAjC4B,EAAa,sBAA+B,OAAX5B,E,IAE3D,EAxUSmO,EAwUF4J,yBAAwB,SAACnW,EAAsB5B,G,MAClD,sBAA4DA,OAAtC4B,EAAa,2BAAoC,OAAX5B,E,IAGhE,EA5USmO,EA4UF6J,mBAAkB,W,MAAe,gB,IAGxC,EA/US7J,EA+UF8J,+BAA8B,SAAC3d,G,MAClC,qCAAiD,OAAZA,E,IAGzC,EAnVS6T,EAmVF+J,6BAA4B,W,MAAc,2C,IAEjD,EArVS/J,EAqVFgK,wBAAuB,W,MAAc,qC,IAE5C,EAvVShK,EAuVFiK,6BAA4B,SAACC,G,MAChC,4CAAwD,OAAZA,E,IAEhD,EA1VSlK,EA0VFmK,mBAAkB,SAACC,G,MAAoC,2BAA2C,OAAhBA,E,IAEzF,EA5VSpK,EA4VFqK,0BAAyB,W,MAAe,qC,IAE/C,EA9VSrK,EA8VFsK,0BAAyB,W,MAAe,qC,IAE/C,EAhWStK,EAgWFuK,gBAAe,SAACL,G,MAAgC,gCAA4C,OAAZA,E,IAEvF,EAlWSlK,EAkWFwK,aAAY,SACfC,EACAC,EACAlgB,EACAE,EACA3J,EACA4pB,EACAC,G,MAEA,iDAAkFF,OAAjCD,EAAoB,eAAoCjgB,OAAvBkgB,EAAU,eAAmChgB,OAAtBF,EAAU,cAA8BzJ,OAAlB2J,EAAS,WAA2BigB,OAAlB5pB,EAAM,cAAyC6pB,OAA7BD,EAAS,sBAAqC,OAAjBC,E,IAEpM,EA7WS5K,EA6WF6K,cAAa,SAACX,EAAqBY,G,MACtC,0CAAkEA,OAAxBZ,EAAY,cAAqB,OAATY,E,IAEtE,EAhXS9K,EAgXF+K,wBAAuB,W,MAAe,gC,IAE7C,EAlXS/K,EAkXFgL,eAAe,mCAEtB,EApXShL,EAoXFvX,gBAAe,SAAC1H,G,MAA0B,sCAA4C,OAANA,E,IAGvF,EAvXSif,EAuXFiL,4BAA4B,mCACnC,EAxXSjL,EAwXFkL,yBAAwB,SAACzZ,G,MAA6B,mBAA4B,OAATA,EAAS,mB,IACzF,EAzXSuO,EAyXFmL,oBAAmB,SAAC3Z,G,MAA+B,qBAAgC,OAAXA,E,IAC/E,EA1XSwO,EA0XFoL,yBAAwB,SAAC3Z,EAAkB4Z,G,MAC9C,mBAAyDA,OAAtC5Z,EAAS,+BAAuC,OAAV4Z,E,IAG7D,EA9XSrL,EA8XFsL,oBAAmB,SAACC,G,MAA4B,wBAAgC,OAARA,EAAQ,e,IACvF,EA/XSvL,EA+XFwL,6BAA4B,SAACC,G,MAChC,wBAAgC,OAARA,EAAQ,0B,IACpC,EAjYSzL,EAiYF0L,8BAA8B,+CACrC,EAlYS1L,EAkYF2L,sBAAsB,yCAC7B,EAnYS3L,EAmYF4L,0BAAyB,SAAC5Y,G,MAC7B,wBAAuC,OAAfA,EAAe,W,kYCriBnC6Y,G,u1BAAAA,IAAAA,EAAAA,CAAAA,IAyCL,IAAMC,EAAqB,WAC9B,MAAO,CACHxlB,KAAM,sBAEd,EAEaylB,EAA2B,SAACC,GACrC,MAAO,CACH1lB,KAAM,6BACN0lB,SAAAA,EAER,EAEaC,EAA+B,SAACC,GACzC,MAAO,CACH5lB,KAAM,mCACN6lB,OAAQC,EAAAA,EAAmBC,KAC3BH,IAAKA,EAEb,EAGaI,EAA0B,SAACC,EAAqCC,GAEzE,IAAMC,EAAoBF,EAAcG,QAAO,SAACC,EAAQC,GAEpD,OADAD,EAAOC,EAAKpmB,I,sUAAM,IAAKomB,GAChBD,CACX,GAAG,CAAC,GAEJ,MAAO,CACHrmB,KAAM,4BACNimB,cAAeE,EACfD,WAAYA,EAEpB,EASaK,EACT,SAACrb,EAAoBsb,EAAqCC,EAAeC,G,OAAoB,SAACC,GAC1FA,EAASlB,GAAyB,IAElCzmB,EAAAA,EAAYqa,iBACRmN,EACAC,EACAC,GACA,SAACvgB,GACG,GAAIA,EAAU,CACVwgB,EAASlB,GAAyB,IAClCkB,EAASX,EAAwB7f,EAAS8f,cAAe9f,EAAS+f,aAElE,IAAMU,EAA4BzgB,EAAS8f,cAAcY,QACrD,SAACC,G,OAAMA,EAAEjB,SAAWC,EAAAA,EAAmBiB,M,IAE3CJ,EAASK,EAAqB9b,EAAY0b,GAC9C,CACJ,IACA,SAAChY,GACG+X,EAASlB,GAAyB,IAClCkB,EA3BL,CACH3mB,KAAM,0BACNS,QAyBuC,2CACnC,GAER,C,EAiBSumB,EAAuB,SAAC9b,EAAoB+a,G,OAAwC,SAACU,GAC9F,IAAMf,EAAMK,EAAcniB,KAAI,SAACmjB,G,OAAMA,EAAE/mB,E,IACvC,GAAkB,GAAd0lB,EAAIzqB,OAAR,CAIA,IAAMgE,EAAO8R,KAAKiW,UAAU,CAAC,CAAEC,GAAI,UAAWzJ,KAAM,UAAWpjB,MAAOwrB,EAAAA,EAAmBC,QAEzF/mB,EAAAA,EAAYooB,qBACRxB,EACAzmB,GACA,SAACgH,GACOA,GACAwgB,EA3BoB,SAACV,GACjC,MAAO,CACHjmB,KAAM,iCACNimB,cAAAA,EAER,CAsByBoB,CAA4BlhB,EAAS8f,eAEtD,IACA,SAACrX,GACG+X,EAvBD,CACH3mB,KAAM,+BACNS,QAqBuC,2CACvC,GAdJ,CAgBJ,C,EAiBa6mB,EAAsB,SAACpc,EAAoBqc,G,OAA2B,SAACZ,GAChF,IAAMxnB,EAAO8R,KAAKiW,UAAU,CAAC,CAAEC,GAAI,UAAWzJ,KAAM,UAAWpjB,MAAOwrB,EAAAA,EAAmBC,QAEzF/mB,EAAAA,EAAYwoB,oBACRD,EACApoB,GACA,SAACgH,GACOA,GACAwgB,EArBL,CACH3mB,KAAM,gCACNynB,aAmB4CthB,EAASshB,cAErD,IACA,SAAC7Y,GACG+X,EAlBD,CACH3mB,KAAM,8BACNS,QAgBsC,2CACtC,GAER,C,EAyBainB,EAA2B,SAACxc,EAAoBqc,G,OAA2B,SAACZ,GAErFA,EAvBO,CACH3mB,KAAM,gCACNE,GAqBgCqnB,EApBhC1B,OAAQC,EAAAA,EAAmB6B,YAsB/B3oB,EAAAA,EAAY4oB,yBACRL,GACA,SAACphB,GACOA,IACgBA,EAASshB,cAErBd,EAxBoB,SAACzmB,GACrC,MAAO,CACHF,KAAM,qCACNE,GAAIA,EAEZ,CAmB6B2nB,CAAgCN,IAGrD,IACA,SAAC3Y,GACG+X,EArBD,CACH3mB,KAAM,mCACNS,QAmB2D,2CAC3D,GAER,C,EAUaqnB,EACT,SAAC5c,EAAoB6c,EAA8Brb,G,OAA4B,SAACia,GAC5EA,EAT+B,SAACja,GACpC,MAAO,CACH1M,KAAM,qCACN0M,eAAAA,EAER,CAIiBsb,CAA+Btb,IAExC1N,EAAAA,EAAYipB,0BACRF,EACArb,GACA,SAACvG,GAED,IACA,SAACyI,GAED,GAER,C,+4BCrPG,IAAM2W,EAAc,CACvB2C,WAAY,aACZC,kBAAmB,oBACnBC,kCAAmC,qCAS1BC,EAAkB,SAAC5B,GAC5B,MAAO,CACHzmB,KAAMulB,EAAY4C,kBAClB1B,MAAOA,EAEf,EAEa6B,EAAgC,SAACC,EAAgC7b,GAC1E,MAAO,CACH1M,KAAMulB,EAAY6C,kCAClBxC,IAAK2C,EACL7b,eAAgBA,GAAkC,KAE1D,EAEa8b,EAAU,SAACC,G,OAAkB,SAAC9B,EAAU+B,GACjD,IAAKD,EAAM,CAEP,IAAME,EAA2BD,IAAWE,kBAAkBD,yBACxDE,EAA8BH,IAAWE,kBAAkBC,4BAC3DjD,EAAO,EAAGkD,MAAMC,KAAK,IAAIC,IAAIL,EAAyBM,OAAQ,EAAGJ,OACvElC,GAAShB,EAAAA,EAAAA,IAA6BC,IACtCe,GAASnB,EAAAA,EAAAA,OACTmB,EA5BG,CACH3mB,KAAMulB,EAAY2C,YA4BtB,CACJ,C,iGClCa3C,EAAc,CACvB2D,YAAa,cAEbC,uBAAwB,yBACxBC,wBAAyB,0BACzBC,sBAAuB,wBAEvBC,6BAA8B,+BAC9BC,8BAA+B,gCAC/BC,4BAA6B,8BAE7BC,sBAAuB,wBACvBC,uBAAwB,yBACxBC,qBAAsB,wBAgIpBC,EAAyB,SAAChb,GAC5B,MAAO,CACH5O,KAAMulB,EAAYoE,qBAClB/a,MAAOA,EAEf,EAEaib,EAAmB,WAC5B,OAAO,SAAClD,GACJA,EArBG,CACH3mB,KAAMulB,EAAYkE,wBAsBlBzqB,EAAAA,EAAY8qB,yBACPC,MAAK,Y,IAnBeC,EAmBZ7qB,EAAAA,EAAAA,KAEDwnB,EADAxnB,GApBa6qB,EAqBoB7qB,EApB1C,CACHa,KAAMulB,EAAYmE,uBAClBM,cAAAA,IAoBqBJ,EAAuB,iCAExC,IACCK,OAAM,SAACrb,GACJ+X,EAASiD,EAAuBhb,EAAMsb,cAC1C,GACR,CACJ,C,oHCrKa3E,EAAc,CACvB4E,SAAU,YAWD3B,EAAU,SAACC,EAAe2B,G,OAAuB,SAACzD,GAC3DA,EATiB,SAAC8B,EAAe2B,GACjC,MAAO,CACHpqB,KAAMulB,EAAY4E,SAClB1B,KAAAA,EACA2B,KAAAA,EAER,CAGaC,CAAa5B,EAAMA,EAAO2B,EAAO,OAEtCA,IAASE,EAAAA,GAAYC,cACrB5D,EAAS6D,EAAAA,GAAgC/B,IAClC2B,IAASE,EAAAA,GAAYG,UAC5B9D,EAAS+D,EAAAA,GAAwBjC,IAGjCA,EACAvuB,SAASywB,gBAAgBC,UAAUC,IAAI,mBAEvC3wB,SAASywB,gBAAgBC,UAAUE,OAAO,kBAElD,C,yHCxBavF,EAAc,CACvBwF,kBAAmB,oBACnBC,kBAAmB,qBAGjBC,EAAkB,SAACC,EAAkCC,GACvD,MAAO,CACHnrB,KAAMulB,EAAYwF,kBAClBG,aAAAA,EACAC,aAAAA,EAER,EAEMC,EAAiB,SAACF,GACpB,IAAIC,GAAe,EAEnB,GAAK3c,UAAU6c,+BAER,CACH,IAAMC,EAAiC,IAAIC,KAAK/c,UAAU6c,gCAE1DF,EAAeD,EAAaM,MAAK,SAACvE,G,OAAM,IAAIsE,KAAKtE,EAAEwE,eAAiBH,C,GACxE,MALIH,GAAe,EAOnB,OAAOA,CACX,EAEaO,EAAkB,WAC3B,OAAO,SAAC/E,GACJ,IAAMuE,EAAeja,KAAKC,MAAMya,aAAaC,QAAQ,kBAEjDV,EACAvE,EAASsE,EAAgBC,EAAcE,EAAeF,KAEtDW,MAAM,sEACD9B,MAAK,SAAC5jB,GACH,IAAKA,EAAS2lB,GACV,MAAM,IAAIjd,MAAM1I,EAAS4lB,YAE7B,OAAO5lB,EAAS6lB,MACpB,IACCjC,MAAK,SAAC5qB,GACHwsB,aAAaM,QAAQ,gBAAiBhb,KAAKiW,UAAU/nB,IACrDwnB,EAASsE,EAAgB9rB,EAAMisB,EAAejsB,IAClD,IACC8qB,OAAM,SAACrb,GACJ+X,EAASsE,EAAgB,IAAI,GACjC,GAEZ,CACJ,EAEazC,EAAU,SAACC,G,OAAkB,SAAC9B,GAClC8B,IAEDzpB,EAAAA,EAAYgb,oCAEZ2M,EAAS,CACL3mB,KAAMulB,EAAYyF,kBAClBG,cAAc,IAG1B,C,gvECFA,I,IAAMe,EAAuC,CAAC,UAAW,YAAa,iBAChEC,G,EAA6CD,E,mnBAAAA,OAAJ,CAAsB,WAAY,mBAGpEE,EAAc,SAACvG,G,OAAsCsG,EAAmBzxB,SAASmrB,E,EAGjFwG,EAAY,SAACxG,G,OAAsCqG,EAAiBxxB,SAASmrB,E,EAE7EyG,EAAe,SAACC,EAAwBpf,GACjD,OAAOof,EAAMpf,EACjB,EAEaqf,EAAoB,SAACD,GAC9B,OAAOE,OAAOC,OAAOH,GAAOf,MAAK,SAACmB,G,MAAuC,cAAvBA,EAAY9G,M,GAClE,EAEM+G,G,EAAoB,YAAOzf,G,kDAEZ,O,EAAMnO,EAAAA,EAAY6tB,uBAA6C,CAC5EC,IAAK,sBAAmC,OAAb3f,EAAa,2BACxC4f,OAAQ,MACRC,cAAc,K,OAGlB,MAAO,C,EANU,SAAT7tB,M,GAOZ,I,SATiCgO,G,iCAWpB8f,EAAY,SAACC,GACtB,OAAQA,GACJ,KAAK3Z,EAAAA,GAAiB4Z,QAClB,MAAO,UACX,KAAK5Z,EAAAA,GAAiB6Z,UACtB,KAAK7Z,EAAAA,GAAiB8Z,OAClB,MAAO,YACX,KAAK9Z,EAAAA,GAAiBnU,QAClB,MAAO,UACX,KAAKmU,EAAAA,GAAiB+Z,kBAClB,MAAO,sBACX,KAAK/Z,EAAAA,GAAiBga,cACtB,KAAKha,EAAAA,GAAiBia,aACtB,KAAKja,EAAAA,GAAiBka,aACtB,KAAKla,EAAAA,GAAiBma,QAClB,MAAO,QACX,QACI,MAAO,cAEnB,EAGMC,EAAsB,CACxB3f,EAAAA,GAAmBsB,MACnBtB,EAAAA,GAAmBuB,aACnBvB,EAAAA,GAAmBwB,oBACnBxB,EAAAA,GAAmByB,WACnBzB,EAAAA,GAAmB0B,KACnB1B,EAAAA,GAAmB2B,oBACnB3B,EAAAA,GAAmB4B,cAyBjBge,EAAc,SAACrB,EAAwBpf,EAAsBhH,GAC/D,IAAM0nB,EAAatB,EAAMpf,GAGzB,OAF2BwgB,EAAoBjzB,SAASmzB,EAAW/f,oBAEvC3H,EAASmK,cA1Bd,SAACud,EAAwB1nB,GAChD,IAAI2nB,EAAW,EACPrd,EAA4EtK,EAA5EsK,aAAcF,EAA8DpK,EAA9DoK,gBAAiBC,EAA6CrK,EAA7CqK,qBAAsBE,EAAuBvK,EAAvBuK,mBACvDqd,EAAiBC,EAAAA,EAAgBH,EAAW/f,oBAE9C2C,GAAgB,IAChBqd,EAAWlxB,KAAKC,MAAM,EAAoB2T,EAAwBC,EAAeC,EAAsB,MAGvGqd,EAAezwB,WAAa2wB,EAAAA,GAAuBC,SAAwB,IAAbJ,IAE9DA,EAAWlxB,KAAKC,MAAM,GAAKixB,EAAW,IAI1C,IAAMK,EAAeN,EAAWC,SAGhC,OAFWlxB,KAAKqT,IAAIke,EAAcL,EAGtC,CAOyDM,CAAmBP,EAAY1nB,EACxF,EAEMkoB,EAAe,SAAC9B,EAAwBpf,EAAsBmhB,GAChE,IAAMT,EAAatB,EAAMpf,GAEzBof,EAAMpf,GAAgB,KACf0gB,EACAS,EAEX,EAEaC,GAAaC,EAAAA,EAAAA,IAIxB,wBAAyB,W,MAAA,iB,IAASrhB,EAAcshB,EAAsB/F,EAE1DviB,EACAomB,E,yDAHsBpf,EAAAA,EAAAA,aAAcshB,EAAAA,EAAAA,iBAAsB/F,EAAAA,EAAAA,SAChE,CAACnV,EAAAA,GAAiB4Z,QAAS5Z,EAAAA,GAAiB6Z,UAAW7Z,EAAAA,GAAiB8Z,QAAQ3yB,SAAS+zB,GACxE,C,EAAM7B,EAAkBzf,IADzC,C,YAGA,OAFMhH,EAAW,SACXomB,EAAQ7D,IAAWmF,WAClB,C,EAAA,CACHhI,OAAQoH,EAAU9mB,EAASsoB,kBAC3BX,SAAUF,EAAYrB,EAAOpf,EAAchH,K,OAG/C,MAAO,C,EAAA,CACH0f,OAAQoH,EAAUwB,GAClBX,SAAU,I,oBAGtB,I,qDAd2B,IAgBdY,GAAcF,EAAAA,EAAAA,IAIzB,yBAA0B,W,MAAA,e,IAASrhB,EAAc5B,EAAY2M,EACrDyW,EAEAC,E,kDAkBW,OArBgBzhB,EAAAA,EAAAA,aAAc5B,EAAAA,EAAAA,WAAY2M,EAAAA,EAAAA,SACrDyW,EAAa,eAEbC,EAA4B,GAC9BC,QAAS3W,EAAS4W,eAClBC,OAAQ7W,EAAS8W,cACjBC,cAAe/W,EAAS+W,cACxBC,aAAchX,EAASgX,aACvBC,gBAAiBjX,EAASiX,iBACtBjX,EAAS4W,gBAAkB,CAC3BM,YAAalX,EAASkX,YAAYC,OAAOV,GACzCW,UAAWpX,EAASoX,UAAUD,OAAOV,GACrCY,wBAAyBrX,EAASsX,wBAElCtX,EAAS8W,eAAiB,CAC1BS,WAAYvX,EAASuX,WAAWJ,OAAOV,GACvCe,SAAUxX,EAASwX,SAASL,OAAOV,GACnCgB,uBAAwBzX,EAAS0X,wBAIxB,C,EAAM5wB,EAAAA,EAAYqkB,iBAAiBlW,EAAc5B,EAAYqjB,I,OAE9E,MAAO,C,EAFU,SAEDzvB,M,GACpB,I,mDAxB4B,IA0Bf0wB,GAA8BrB,EAAAA,EAAAA,IAIzC,yCAA0C,W,MAAA,e,IAAStW,EAC3CxS,E,kDAIN,OALiDwS,EAAAA,EAAAA,SAC3CxS,EAAW,CACboqB,UAAWC,EAAAA,GAAU1M,iBACrB2M,UAAW/e,KAAKiW,UAAUhP,IAE9B,C,EAAMlZ,EAAAA,EAAYixB,iBAAiB,CAC/BlD,OAAQ,OACRD,IAAK,GAAwB9yB,OAArB2Z,EAAAA,EAAUC,QAAQ,KAAsB,OAAnB5Z,OAAOk2B,aACpC/wB,KAAMuG,K,cAHV,S,OAKJ,I,mDAV4C,IAkBtCyqB,GAAiB3B,EAAAA,EAAAA,IASrB,4BAA6B,W,MAAA,e,IAAS3I,EAAQuK,EAAOC,E,kDACnD,OADoCxK,EAAAA,EAAAA,OAAQuK,EAAAA,EAAAA,MAAOC,EAAAA,EAAAA,aACnD,C,GAhBUC,EAgBCF,EAfX,IAAIG,SAAQ,SAACC,GACTv2B,WAAWu2B,EAASF,EACxB,M,OAcA,OADA,SACO,C,EAAA,CAAEzK,OAAQA,EAAQwK,aAAAA,IAjBhB,IAACC,C,GAkBd,I,mDAH+B,IAKlBG,GAAoBjC,EAAAA,EAAAA,IAI/B,yBAA0B,W,MAAA,iB,IAASrhB,EAAcujB,EAAkB/J,EAAU+B,EACrEviB,EACAomB,EACA1G,EACAiI,E,kDAHW,OADgB3gB,EAAAA,EAAAA,aAAcujB,EAAAA,EAAAA,aAAkB/J,EAAAA,EAAAA,SAAU+B,EAAAA,EAAAA,SAC1D,C,EAAMkE,EAAkBzf,I,OASzC,OATMhH,EAAW,SACXomB,EAAQ7D,IAAWmF,WACnBhI,EAASoH,EAAU9mB,EAASsoB,kBAC5BX,EAAWF,EAAYrB,EAAOpf,EAAchH,GAEnC,YAAX0f,GAAmC,wBAAXA,GACxBc,EAASwJ,EAAe,CAAEtK,OAAAA,EAAQ1Y,aAAAA,EAAcijB,MAAOM,EAAcL,aAAclqB,EAASwqB,iBAGzF,C,EAAA,CACH9K,OAAAA,EACAiI,SAAAA,I,GAER,I,qDAd4B,IAgBf8C,GAAepC,EAAAA,EAAAA,IAI1B,0BAA2B,W,MAAA,iB,IAASrhB,EAAcjC,EAAgBwd,EAiBzD1pB,EAhBDutB,EAOApmB,E,kDAJN,OAJkCgH,EAAAA,EAAAA,aAAcjC,EAAAA,EAAAA,WAAgBwd,EAAAA,EAAAA,SAC1D6D,EAAQ7D,IAAWmF,WAGC,mBAFPtB,EAAMpf,GAEV0Y,OACJ,C,EAAAtS,EAAAA,GAAiBsd,WAGX,C,EAAM7xB,EAAAA,EAAYixB,iBAAyD,CACxFlD,OAAQ,OACRD,IAAK,GAAwB5hB,OAArByI,EAAAA,EAAUC,QAAQ,KAAc,OAAX1I,GAC7B/L,KAAM,CACF2wB,UAAWC,EAAAA,GAAUe,uBACrBd,UAAW/e,KAAKiW,UAAU,CAAE6J,IAAK5jB,Q,OAIzC,OATMhH,EAAW,SASV,C,EAAsC,QAAtCnH,EAAAA,EAAAA,EAAYgyB,aAAa7qB,EAAShH,aAAlCH,IAAAA,OAAAA,EAAAA,EAAyCuU,kB,GACpD,I,qDAlB6B,IAoBhB0d,GAAkBC,EAAAA,EAAAA,IAAY,CACvC9wB,KAAM,aACN+wB,aAAc,CAAC,EACfC,SAAU,CACNC,iBAAAA,SACI9E,EACA+E,GAEAjD,EAAa9B,EAAO+E,EAAOC,QAAQpkB,aAAcmkB,EAAOC,QAAQjD,OACpE,GAEJkD,cAAAA,SAAcC,GACVA,EACKC,QAAQnD,EAAWoD,SAAS,SAACpF,EAAO+E,GACjCjD,EAAa9B,EAAO+E,EAAOM,KAAKC,IAAI1kB,aAAc,CAC9CW,mBAAoBwjB,EAAOM,KAAKC,IAAI/jB,mBACpC+X,OAAQ,UACRiI,SAAU,GAElB,IACC4D,QAAQnD,EAAWuD,WAAW,SAACvF,EAAO+E,GACnC,IAAMS,EAAU1F,EAAUiF,EAAOC,QAAQ1L,QAGzCwI,EAAa9B,EAAO+E,EAAOM,KAAKC,IAAI1kB,aAAc,CAC9C0Y,OAAQkM,EAAUT,EAAOC,QAAQ1L,OAAS,cAC1CiI,SAAUiE,EAAUT,EAAOC,QAAQzD,SAAW,GAEtD,IACC4D,QAAQnD,EAAWyD,UAAU,SAACzF,EAAO+E,GAClCjD,EAAa9B,EAAO+E,EAAOM,KAAKC,IAAI1kB,aAAc,CAC9C0Y,OAAQ,uBAEhB,IACC6L,QAAQhD,EAAYiD,SAAS,SAACpF,EAAO+E,GAClC,IAAMhD,EAA8B,CAChCzI,OAAQ,WACRwK,aAAc,MAGbiB,EAAOM,KAAKC,IAAII,eACjB3D,EAAOR,SAAW,GAGtBO,EAAa9B,EAAO+E,EAAOM,KAAKC,IAAI1kB,aAAcmhB,EACtD,IACCoD,QAAQhD,EAAYoD,WAAW,SAACvF,EAAO+E,GACpCjD,EAAa9B,EAAO+E,EAAOM,KAAKC,IAAI1kB,aAAc,CAC9C0Y,OAAQ,WAEhB,IACC6L,QAAQhD,EAAYsD,UAAU,SAACzF,EAAO+E,GACnCjD,EAAa9B,EAAO+E,EAAOM,KAAKC,IAAI1kB,aAAc,CAC9C0Y,OAAQ,SAEhB,IACC6L,QAAQ7B,EAA4B8B,SAAS,SAACpF,EAAO+E,GAClDjD,EAAa9B,EAAO+E,EAAOM,KAAKC,IAAI3Z,SAAS6Y,IAAK,CAC9ClL,OAAQ,WACRiI,SAAU,GAElB,IACC4D,QAAQ7B,EAA4BiC,WAAW,SAACvF,EAAO+E,GACpDjD,EAAa9B,EAAO+E,EAAOM,KAAKC,IAAI3Z,SAAS6Y,IAAK,CAC9ClL,OAAQ,WAEhB,IACC6L,QAAQ7B,EAA4BmC,UAAU,SAACzF,EAAO+E,GACnDjD,EAAa9B,EAAO+E,EAAOM,KAAKC,IAAI3Z,SAAS6Y,IAAK,CAC9ClL,OAAQ,QACRiI,SAAU,GAElB,IACC4D,QAAQjB,EAAkBqB,WAAW,SAACvF,EAAO+E,GAC1C,IAAMhD,EAA8B,CAChCR,SAAUwD,EAAOC,QAAQzD,UAKC,YAA1BwD,EAAOC,QAAQ1L,QAAkD,wBAA1ByL,EAAOC,QAAQ1L,SACtDyI,EAAOzI,OAASyL,EAAOC,QAAQ1L,QAGnCwI,EAAa9B,EAAO+E,EAAOM,KAAKC,IAAI1kB,aAAcmhB,EACtD,IACCoD,QAAQjB,EAAkBuB,UAAU,SAACzF,EAAO+E,GACzCjD,EAAa9B,EAAO+E,EAAOM,KAAKC,IAAI1kB,aAAc,CAC9C0Y,OAAQ,uBAEhB,IACC6L,QAAQvB,EAAe2B,WAAW,SAACvF,EAAO+E,GACvCjD,EAAa9B,EAAO+E,EAAOM,KAAKC,IAAI1kB,aAAc,CAC9C0Y,OAAQyL,EAAOC,QAAQ1L,OACvBwK,aAAciB,EAAOC,QAAQlB,aAAal1B,OAAS,EAAIm2B,EAAOC,QAAQlB,kBAAe3hB,GAE7F,IACCgjB,QAAQd,EAAakB,WAAW,SAACvF,EAAO+E,GACrCjD,EAAa9B,EAAO+E,EAAOM,KAAKC,IAAI1kB,aAAc,CAC9C0Y,OAAQyL,EAAOC,UAAYhe,EAAAA,GAAiBsd,UAAY,YAAc,iBAE9E,IACCa,QAAQd,EAAaoB,UAAU,SAACzF,EAAO+E,GACpCjD,EAAa9B,EAAO+E,EAAOM,KAAKC,IAAI1kB,aAAc,CAC9C0Y,OAAQ,iBAEhB,GACR,IAGS,EAAuBoL,EAAgBiB,QAArCb,iBACf,KAAeJ,EAAuB,O,+EChZtC,IAEa1L,EACI,cADJA,EAEK,eAFLA,EAIe,yBAJfA,EAKe,yBALfA,EAMa,uBANbA,EAOc,wBAPdA,EAQc,wBCoCrB4L,EAA6B,CAC/BgB,WAAY,KACZC,WAAY,KACZC,QAAS,KACTC,YAAa,KACbpxB,SAAS,EACT0N,MAAO,MAkCX,EA5BgB,W,IAAC2d,EAAQ,UAARA,OAAAA,QAAAA,IAAAA,UAAAA,GAAAA,UAAAA,GAAQ4E,EAAcG,EAAAA,UAAAA,OAAAA,EAAAA,UAAAA,QAAAA,EACnC,OAAQA,EAAOtxB,MACX,KAAKulB,EACD,OAAO4L,EACX,KAAK5L,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAE4F,WAAYb,EAAOa,aAEpD,KAAK5M,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CACvB6F,WAAYd,EAAOc,WACnBlxB,SAAS,EACT0N,OAAO,EACP0jB,YAAa,OAErB,KAAK/M,EAEL,KAAKA,EAEL,KAAKA,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAE3d,MAAO0iB,EAAO1iB,MAAO1N,SAAS,IAC/D,KAAKqkB,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAE+F,YAAahB,EAAOgB,YAAapxB,SAAS,EAAO0N,OAAO,IAEzF,QACI,OAAO2d,EAEnB,C,w2BCtFO,IAAMiG,EAAqB,GASrBrB,EAAwC,CACjDsB,IAAK,MACLC,mBAAoB,EACpB/J,yBAA0B,GAC1BE,4BAA6B,IAgCjC,KA7BgB,W,IAAC0D,EAAQ,UAARA,OAAAA,QAAAA,IAAAA,UAAAA,GAAAA,UAAAA,GAAQ4E,EAAcG,EAAAA,UAAAA,OAAAA,EAAAA,UAAAA,QAAAA,EACnC,OAAQA,EAAOtxB,MACX,KAAKulB,EAAAA,GAAY2C,WACb,OAAOqK,EAAAA,EAAAA,IAAahG,EAAO,CACvBmG,mBAAoB,EACpB/J,yBAA0B,GAC1BE,4BAA6B,KAErC,KAAKtD,EAAAA,GAAY4C,kBACb,OAAOoK,EAAAA,EAAAA,IAAahG,EAAO,CAAEmG,mBAAoBpB,EAAO7K,QAC5D,KAAKlB,EAAAA,GAAY6C,kCACb,GAAIkJ,EAAO5kB,eAAgB,CACvB,IAAIimB,EAAqB1hB,KAAKC,MAAMD,KAAKiW,UAAUqF,EAAM1D,8BAIzD,OAFA8J,EAAsB,EAAG7J,MAAMC,KAAK,IAAIC,IAAI2J,EAAmB1J,OAAQ,EAAGqI,EAAO1L,UAE1E2M,EAAAA,EAAAA,IAAahG,EAAO,CAAE1D,4BAA6B8J,GAC9D,CACI,IAAIpK,EAAkBtX,KAAKC,MAAMD,KAAKiW,UAAUqF,EAAM5D,2BAItD,OAFAJ,EAAmB,EAAGO,MAAMC,KAAK,IAAIC,IAAIT,EAAgBU,OAAQ,EAAGqI,EAAO1L,UAEpE2M,EAAAA,EAAAA,IAAahG,EAAO,CAAE5D,yBAA0BJ,IAE/D,QACI,OAAOgE,EAEnB,C,oLCpCA,IAAM4E,EAAmC,CACrCjL,WAAY,KACZD,cAAe,CAAC,EAChB2M,uBAAuB,GAsF3B,IAnFgB,W,IAQI3M,EARHsG,EAAQ,UAARA,OAAAA,QAAAA,IAAAA,UAAAA,GAAAA,UAAAA,GAAQ4E,EAAcG,EAAAA,UAAAA,OAAAA,EAAAA,UAAAA,QAAAA,EACnC,OAAQA,EAAOtxB,MACX,KAAKulB,EAAAA,GAAYsN,oBACb,OAAON,EAAAA,EAAAA,IAAahG,EAAO,CAAErG,WAAY,OAC7C,KAAKX,EAAAA,GAAYuN,2BACb,OAAOP,EAAAA,EAAAA,IAAahG,EAAO,CAAEqG,sBAAuBtB,EAAO5L,WAC/D,KAAKH,EAAAA,GAAYwN,0BACb,OAII9M,E,sUAAgB,IAHZA,EAAgBhV,KAAKC,MAAMD,KAAKiW,UAAUqF,EAAMtG,gBAGbqL,EAAOrL,gBAEvCsM,EAAAA,EAAAA,IAAahG,EAAO,CAAEtG,cAAeA,EAAeC,WAAYoL,EAAOpL,aAEtF,KAAKX,EAAAA,GAAYyN,8BAGjB,KAAKzN,EAAAA,GAAY0N,4BAEjB,KAAK1N,EAAAA,GAAY2N,+BAEjB,KAAK3N,EAAAA,GAAY4N,6BACb,OAAO5G,EACX,KAAKhH,EAAAA,GAAY6N,iCACb,OAAO,WAIH,IAHA,IAAMnN,EAAgBhV,KAAKC,MAAMD,KAAKiW,UAAUqF,EAAMtG,gBAEhDoN,EAAO/B,EAAO1L,IACX0N,EAAI,EAAGA,EAAID,EAAKl4B,OAAQm4B,SAGY,IAA9BrN,EAAcoN,EAAKC,IAAIpzB,IAC9B+lB,EAAcoN,EAAKC,IAAIzN,SAAWC,EAAAA,EAAmBiB,SAErDd,EAAcoN,EAAKC,IAAIzN,OAASyL,EAAOzL,QAI/C,OAAO0M,EAAAA,EAAAA,IAAahG,EAAO,CAAEtG,cAAeA,GAChD,CAfO,GAgBX,KAAKV,EAAAA,GAAYgO,8BACb,OAAO,WACH,IAAMtN,EAAgBhV,KAAKC,MAAMD,KAAKiW,UAAUqF,EAAMtG,gBAOtD,YAJwC,IAA7BA,EAAcqL,EAAOpxB,MAC5B+lB,EAAcqL,EAAOpxB,IAAI2lB,OAASyL,EAAOzL,SAGtC0M,EAAAA,EAAAA,IAAahG,EAAO,CAAEtG,cAAeA,GAChD,CATO,GAUX,KAAKV,EAAAA,GAAYiO,mCACb,OAMZ,SACIC,EACA5N,EACAnZ,GAEA,IAAMuZ,EAAgBhV,KAAKC,MAAMD,KAAKiW,UAAUuM,EAAmBxN,gBAC7DyN,EAASjH,OAAO4G,KAAKpN,IAAkB,GACvC0N,EAAY,SAAClM,EAAc5B,GACzB4B,IACAA,EAAa5B,OAASA,EAE9B,EAUA,OARAnZ,EACMgnB,EAAOE,SAAQ,SAAC1zB,GACZ+lB,EAAc/lB,IACV+lB,EAAc/lB,GAAIwM,iBAAmBA,GACrCinB,EAAU1N,EAAc/lB,GAAK2lB,EACrC,IACA6N,EAAOE,SAAQ,SAAC1zB,G,OAAOyzB,EAAU1N,EAAc/lB,GAAK2lB,E,KAEnD0M,EAAAA,EAAAA,IAAakB,EAAoB,CAAExN,cAAeA,GAC7D,CA5BmB4N,CAA0BtH,EAAOzG,EAAAA,EAAmB6B,UAAW2J,EAAO5kB,gBACjF,QACI,OAAO6f,EAEnB,C,wDCvEO,IAAMhH,EACI,cADJA,EAGkB,4B,UCOzB4L,EAA0C,CAC5C2C,aAF+C,CAAC,EAGhDrB,IAAK,GACLvnB,WAAY,GACZ6oB,UAAW,IAsBf,EAhBgB,W,IAACxH,EAAQ,UAARA,OAAAA,QAAAA,IAAAA,UAAAA,GAAAA,UAAAA,GAAQ4E,EAAcG,EAAAA,UAAAA,OAAAA,EAAAA,UAAAA,QAAAA,EACnC,OAAQA,EAAOtxB,MACX,KAAKulB,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CACvBrhB,WAAYomB,EAAOpmB,WACnB6oB,UAAWzC,EAAOyC,YAG1B,KAAKxO,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAEuH,aAAcxC,EAAOwC,eAEtD,QACI,OAAOvH,EAEnB,C,2FChCYhH,G,uMAAAA,IAAAA,EAAAA,CAAAA,I,wHCMZ,IAAM4L,EAAkC,CACpCzkB,eAAgB,KAChBsnB,cAAe,GACf9yB,SAAS,EACT0N,MAAO,MAoBX,EAjBgB,W,IAAC2d,EAAQ,UAARA,OAAAA,QAAAA,IAAAA,UAAAA,GAAAA,UAAAA,GAAQ4E,EAAcG,EAAAA,UAAAA,OAAAA,EAAAA,UAAAA,QAAAA,EACnC,OAAQA,EAAOtxB,MACX,KAAKulB,EAAY0O,iBACb,OAAO1B,EAAAA,EAAAA,IAAahG,EAAO,CAAE7f,eAAgB4kB,EAAO5kB,iBACxD,KAAK6Y,EAAY2O,wBACb,OAAO3B,EAAAA,EAAAA,IAAahG,EAAO,CAAErrB,SAAS,IAC1C,KAAKqkB,EAAY4O,wBACb,OAAO5B,EAAAA,EAAAA,IAAahG,EAAO,CAAE3d,MAAO0iB,EAAO7wB,UAC/C,KAAK8kB,EAAY6O,0BACb,IAAIJ,EAAgB/iB,KAAKC,MAAMD,KAAKiW,UAAUqF,EAAMyH,gBAEpD,OADAA,E,sUAAgB,IAAKA,EAAkB1C,EAAO0C,gBACvCzB,EAAAA,EAAAA,IAAahG,EAAO,CAAEyH,cAAeA,IAChD,QACI,OAAOzH,EAEnB,C,+FCzBahH,EACI,cADJA,EAEA,UAFAA,EAIc,wBAJdA,EAKwB,kCALxBA,EAMgB,0BANhBA,EAOiB,2BAPjBA,EAQkB,4BARlBA,EASkB,4BATlBA,EAUiB,2BAVjBA,EAYO,iBAZPA,EAaa,uBAbbA,EAcc,wBAddA,EAeY,sBAfZA,EAgBoB,8BAhBpBA,EAiBqB,+BAjBrBA,EAkBmB,6B,mxBCJhC,IAAM8O,EAAiC,CAAC,EAElClD,EAAsC,CACxCkD,SAAUA,EACVC,kBAAmBD,EACnBE,SAJmC,CAAC,EAKpC9B,IAAK,GACLvnB,WAAY,GACZ6oB,UAAW,GACXS,QAAS,GACTC,UAAW,CAAC,EACZC,cAAeC,EAAAA,GAAcC,IAC7B1zB,SAAS,EACT2zB,kBAAkB,EAClBC,gBAAgB,EAChBlmB,MAAO,MA+EX,EAhDgB,W,IAAC2d,EAAQ,UAARA,OAAAA,QAAAA,IAAAA,UAAAA,GAAAA,UAAAA,GAAQ4E,EAAcG,EAAAA,UAAAA,OAAAA,EAAAA,UAAAA,QAAAA,EACnC,OAAQA,EAAOtxB,MACX,KAAKulB,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CACvBrhB,WAAYomB,EAAOpmB,WACnB6oB,UAAWzC,EAAOyC,YAE1B,KAAKxO,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAEkG,IAAKnB,EAAOmB,MAE7C,KAAKlN,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAE8H,SAAU/C,EAAO+C,WAClD,KAAK9O,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAE+H,kBAAmBhD,EAAO+C,WAC3D,KAAK9O,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAE8H,SAAU9H,EAAM+H,kBAAmBC,SAAU,CAAC,EAAGC,QAAS,GAAIC,UAAW,CAAC,IAC3G,KAAKlP,EACD,IAAMgP,EA7CK,SAACQ,EAASC,G,IACPD,EAAhB7c,EAAY,EAAoB,QAAhB6c,EAAAA,EAAQliB,gBAARkiB,IAAAA,EAAAA,EAAoB,IAEtCC,EAAQniB,UACRmiB,EAAQniB,SAAS+gB,SAAQ,SAACqB,GACtB,IAAMC,EAAkBhd,EAAS2O,QAAO,SAACsO,G,OAAYA,EAAQC,OAASH,EAAWG,I,IAC7EF,GAAmBA,EAAgB/5B,OAAS,EACrB+5B,EAAgB,GACxBG,MAAQJ,EAAWI,MAElCnd,EAASod,KAAKL,EAEtB,IAGJ,IAAMV,GAAWhC,EAAAA,EAAAA,IAAawC,EAASC,GAEvC,OADAT,EAAS1hB,SAAWqF,EACbqc,CACX,CA2B6BgB,CAAehJ,EAAMgI,SAAUjD,EAAOhL,MACvD,OAAOiM,EAAAA,EAAAA,IAAahG,EAAO,CAAEgI,SAAUA,IAE3C,KAAKhP,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAErrB,SAAS,EAAM0N,OAAO,IACvD,KAAK2W,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAE3d,MAAO0iB,EAAO1iB,MAAO1N,SAAS,IAC/D,KAAKqkB,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAE+H,kBAAmB/H,EAAM8H,SAAUE,SAAU,CAAC,EAAGrzB,SAAS,IAE3F,KAAKqkB,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAEmI,cAAepD,EAAOoD,gBAEvD,KAAKnP,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAEuI,gBAAgB,EAAMlmB,OAAO,IAC9D,KAAK2W,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAEiI,QAASlD,EAAOkD,QAASM,gBAAgB,IAC1E,KAAKvP,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAE3d,MAAO0iB,EAAO1iB,MAAO4lB,QAAS,GAAIM,gBAAgB,IACnF,KAAKvP,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAEsI,kBAAkB,EAAMjmB,OAAO,IAChE,KAAK2W,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAEkI,UAAWnD,EAAOmD,UAAWI,kBAAkB,IAChF,KAAKtP,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAE3d,MAAO0iB,EAAO1iB,MAAO6lB,UAAW,CAAC,EAAGI,kBAAkB,IAEvF,QACI,OAAOtI,EAEnB,C,u6EC/EO,I,EAAMiJ,GAAgBhH,EAAAA,EAAAA,IAI3B,8B,EAA8B,e,IAASrjB,EAAUI,EAAY6mB,EACrDjsB,E,kDAAW,OADoBgF,EAAAA,EAAAA,SAAUI,EAAAA,EAAAA,WAAY6mB,EAAAA,EAAAA,WAC1C,C,EAAMpzB,EAAAA,EAAYy2B,uBAAuB,CACtDrD,WAAYA,EACZjnB,SAAUA,EACVI,WAAYA,K,OAMhB,OATMpF,EAAW,SAMjBnM,OAAOk2B,YAAc/pB,EAAShH,KAAK+L,WACnClR,OAAO07B,UAAYvvB,EAAShH,KAAK40B,UAE1B,C,EAAA5tB,EAAShH,M,GACpB,I,8CAEaw2B,GAAiBnH,EAAAA,EAAAA,IAI5B,8BAA+B,W,MAAA,iB,IAASrjB,EAAUinB,EAAgB1J,EAC1D6D,EACAqJ,E,kDAEW,OAJqBzqB,EAAAA,EAAAA,SAAUinB,EAAAA,EAAAA,WAAgB1J,EAAAA,EAAAA,SAC1D6D,EAAQ7D,IACRkN,EAAerJ,EAAMqJ,aAAaC,QAAQ1qB,GAE/B,C,EAAMnM,EAAAA,EAAY82B,kBAAkB,CACjD1D,WAAYA,EACZjnB,SAAUA,EACVD,WAAY0qB,aAAAA,EAAAA,EAAc1qB,c,OAG9B,MAAO,C,EANU,SAMD/L,M,GACpB,I,qDAXiC,IAapB42B,GAAkBvH,EAAAA,EAAAA,IAI7B,yBAA0B,W,MAAA,iB,IAASrjB,EAAUinB,EAAgB1J,EACrD6D,EACAqJ,E,kDAEW,OAJgBzqB,EAAAA,EAAAA,SAAUinB,EAAAA,EAAAA,WAAgB1J,EAAAA,EAAAA,SACrD6D,EAAQ7D,IACRkN,EAAerJ,EAAMqJ,aAAaC,QAAQ1qB,GAE/B,C,EAAMnM,EAAAA,EAAYg3B,sBAAsB,CACrD9qB,WAAY0qB,EAAa1qB,WACzBmnB,QAASuD,EAAavD,QACtBlnB,SAAUA,EACVinB,WAAYA,K,OAGhB,MAAO,C,EAPU,SAODjzB,M,GACpB,I,qDAZ4B,IActB82B,EAAqB,SAAC1J,EAA0BphB,EAAkBmjB,GACpE,IAUgBA,EAVVsH,EAAerJ,EAAMsJ,QAAQ1qB,GAE/ByqB,EACArJ,EAAMsJ,QAAQ1qB,GAAY,KACnByqB,EACAtH,GAGP/B,EAAMsJ,QAAQ1qB,GAAY,OACnBmjB,GAAAA,CACHzI,OAAqB,QAAbyI,EAAAA,EAAOzI,cAAPyI,IAAAA,EAAAA,EAAiB,eAGrC,EAEa4H,GAAoBhF,EAAAA,EAAAA,IAAY,CACzC9wB,KAAM,eACN+wB,aAAc,CACV0E,QAAS,CAAC,GAEdzE,SAAU,CACN+E,MAAO,SAAC5J,EAAO+E,G,OACX2E,EAAmB1J,EAAO+E,EAAOC,QAAQpmB,SAAU,CAC/CknB,QAAS,KACTC,YAAa,KACbzM,OAAQ,cACR3a,WAAY,KACZknB,WAAY,M,GAGxBZ,cAAAA,SAAcC,GACVA,EACKC,QAAQ8D,EAAc7D,SAAS,SAACpF,EAAO+E,GACpC2E,EAAmB1J,EAAO+E,EAAOM,KAAKC,IAAI1mB,SAAU,CAChD0a,OAAQ,oBACRuM,WAAYd,EAAOM,KAAKC,IAAIO,YAEpC,IACCV,QAAQ8D,EAAc1D,WAAW,SAACvF,EAAO+E,GACtC2E,EAAmB1J,EAAO+E,EAAOM,KAAKC,IAAI1mB,SAAU,CAChD0a,OAAQ,mBACR3a,WAAYomB,EAAOC,QAAQrmB,YAEnC,IACCwmB,QAAQ8D,EAAcxD,UAAU,SAACzF,EAAO+E,GACrC2E,EAAmB1J,EAAO+E,EAAOM,KAAKC,IAAI1mB,SAAU,CAAE0a,OAAQ,UAClE,IACC6L,QAAQiE,EAAehE,SAAS,SAACpF,EAAO+E,GACrC2E,EAAmB1J,EAAO+E,EAAOM,KAAKC,IAAI1mB,SAAU,CAAE0a,OAAQ,qBAClE,IACC6L,QAAQiE,EAAe7D,WAAW,SAACvF,EAAO+E,GACvC2E,EAAmB1J,EAAO+E,EAAOM,KAAKC,IAAI1mB,SAAU,CAChD0a,OAAQ,mBACRwM,QAASf,EAAOC,QAAQc,SAEhC,IACCX,QAAQiE,EAAe3D,UAAU,SAACzF,EAAO+E,GACtC2E,EAAmB1J,EAAO+E,EAAOM,KAAKC,IAAI1mB,SAAU,CAAE0a,OAAQ,UAClE,IACC6L,QAAQqE,EAAgBpE,SAAS,SAACpF,EAAO+E,GACtC2E,EAAmB1J,EAAO+E,EAAOM,KAAKC,IAAI1mB,SAAU,CAAE0a,OAAQ,mBAClE,IACC6L,QAAQqE,EAAgBjE,WAAW,SAACvF,EAAO+E,GACxC,OAAQA,EAAOC,QAAQ1L,QACnB,KAAKuQ,EAAAA,GAAsBC,MACvBJ,EAAmB1J,EAAO+E,EAAOM,KAAKC,IAAI1mB,SAAU,CAChD0a,OAAQ,iBACRyM,YAAahB,EAAOC,QAAQe,cAEhC,MAEJ,KAAK8D,EAAAA,GAAsBE,OACvBL,EAAmB1J,EAAO+E,EAAOM,KAAKC,IAAI1mB,SAAU,CAAE0a,OAAQ,WAC9D,MAEJ,QACIoQ,EAAmB1J,EAAO+E,EAAOM,KAAKC,IAAI1mB,SAAU,CAAE0a,OAAQ,uBAG1E,IACC6L,QAAQqE,EAAgB/D,UAAU,SAACzF,EAAO+E,GACvC2E,EAAmB1J,EAAO+E,EAAOM,KAAKC,IAAI1mB,SAAU,CAAE0a,OAAQ,UAClE,GACR,IAGS0Q,EAAyB,SAAChK,EAA0BphB,GAC7D,OAAOohB,EAAMsJ,QAAQ1qB,EACzB,EAEe+mB,EAAqBgE,EAArBhE,QAASsE,EAAYN,EAAZM,QACX,EAAYtE,EAAViE,MACf,M,8JC7JA,IAAMhF,EAAmC,CACrCjmB,WAAY,GACZK,WAAY,GACZkrB,QAAS,GACTC,MAAO,GACPC,aAAc,EACdC,gBAAgB,EAChBC,qBAAqB,EACrB7M,cAAe,GACf8M,sBAAsB,GAGpBvE,EAAe,SAACwE,EAAWC,GAC7B,O,sUAAO,IACAD,EACAC,EAEX,EAqCA,IAhCgB,W,IAACzK,EAAQ,UAARA,OAAAA,QAAAA,IAAAA,UAAAA,GAAAA,UAAAA,GAAQ4E,EAAcG,EAAAA,UAAAA,OAAAA,EAAAA,UAAAA,QAAAA,EACnC,OAAQA,EAAOtxB,MACX,KAAKulB,EAAAA,GAAY2D,YACb,OAAOqJ,EAAahG,EAAO,CACvBrhB,WAAYomB,EAAOpmB,WACnBK,WAAY+lB,EAAO/lB,aAE3B,KAAKga,EAAAA,GAAY4D,uBACb,OAAOoJ,EAAahG,EAAO,CAAEqK,gBAAgB,IACjD,KAAKrR,EAAAA,GAAY6D,wBACb,OAAOmJ,EAAahG,EAAO,CACvBkK,QAASnF,EAAOmF,QAChBE,aAAcrF,EAAOqF,aACrBC,gBAAgB,IAExB,KAAKrR,EAAAA,GAAY8D,sBACb,OAAOkJ,EAAahG,EAAO,CAAC,GAChC,KAAKhH,EAAAA,GAAY+D,6BACb,OAAOiJ,EAAahG,EAAO,CAAEsK,qBAAqB,IACtD,KAAKtR,EAAAA,GAAYgE,8BACb,OAAOgJ,EAAahG,EAAO,CAAEoK,aAAcrF,EAAOqF,aAAcE,qBAAqB,IACzF,KAAKtR,EAAAA,GAAYiE,4BACb,OAAO+I,EAAahG,EAAO,CAAC,GAChC,KAAKhH,EAAAA,GAAYkE,sBACb,OAAO8I,EAAahG,EAAO,CAAEuK,sBAAsB,IACvD,KAAKvR,EAAAA,GAAYmE,uBACb,OAAO6I,EAAahG,EAAO,CAAEvC,cAAesH,EAAOtH,cAAe8M,sBAAsB,IAC5F,QACI,OAAOvK,EAEnB,C,gFC/DahH,G,2BACI,eADJA,EAEc,wBAFdA,EAImB,6BAJnBA,EAKuB,iCALvBA,EAOU,oBAPVA,EAQW,qBARXA,EASM,gBATNA,EAUgB,0BAVhBA,EAWM,gBAXNA,EAaY,sBAbZA,EAcY,sBAdZA,EAeY,sBAfZA,EAiBqB,+BAjBrBA,EAkBqB,+BAlBrBA,EAmBqB,+BAnBrBA,EAqBc,wBArBdA,EAsBc,wBAtBdA,EAuBc,wBAvBdA,EAyBG,aAzBHA,EA0BI,c,s3BChBjB,IAAM4L,EAAoC,CACtCgB,WAAY,KACZ8E,YAAY,EACZC,WAAYC,EAAAA,GAAWC,IACvBC,iBAAkB,GAClBC,gBAAgB,EAChBC,YAAa,GACbC,qBAAsB,GACtBC,gBAAiB,KACjBC,gBAAiB,KACjBC,MAAO,KACPz2B,SAAS,EACT0N,MAAO,MAGLgpB,EAAe,SAACrL,EAA4BsL,GAC9C,IAAMC,E,sUAAW,IAAKvL,GAChBgL,EAAe,EAAGhL,EAAMgL,aAY9B,OAXIA,EAAY/L,MAAK,SAACuM,G,OAAWA,EAAOC,IAAMH,EAAcG,E,IACxDT,EAAY3D,SAAQ,SAACmE,GACbA,EAAOC,KAAOH,EAAcG,KAC5BD,EAAO1C,MAAQwC,EAAcxC,MAErC,IAEAkC,EAAYjC,KAAKuC,GAGrBC,EAASP,YAAcA,EAChBO,CACX,EAgEA,EA3DgB,W,IAACvL,EAAQ,UAARA,OAAAA,QAAAA,IAAAA,UAAAA,GAAAA,UAAAA,GAAQ4E,EAAcG,EAAAA,UAAAA,OAAAA,EAAAA,UAAAA,QAAAA,EACnC,OAAQA,EAAOtxB,MACX,KAAKulB,EACD,OAAO4L,EACX,KAAK5L,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAE4F,WAAYb,EAAOa,aAEpD,KAAK5M,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAEiL,qBAAsBlG,EAAOiG,cAC9D,KAAKhS,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAEgL,YAAahL,EAAMiL,qBAAsBA,qBAAsB,OAEhG,KAAKjS,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAE0K,WAAY3F,EAAO2G,OACpD,KAAK1S,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAE2K,WAAY5F,EAAO4F,aACpD,KAAK3R,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAE8K,iBAAkB/F,EAAOpxB,KAC1D,KAAKqlB,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAE+K,eAAgBhG,EAAO2G,OACxD,KAAK1S,EACD,OAAOqS,EAAarL,EAAO+E,EAAOyG,QAEtC,KAAKxS,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAErrB,SAAS,EAAM0N,OAAO,IACvD,KAAK2W,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAE3d,MAAO0iB,EAAO1iB,MAAO1N,SAAS,IAC/D,KAAKqkB,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAEkL,gBAAiBnG,EAAO4G,UAAWh3B,SAAS,EAAO0N,OAAO,IAE3F,KAAK2W,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAErrB,SAAS,EAAM0N,OAAO,IACvD,KAAK2W,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAE3d,MAAO0iB,EAAO1iB,MAAO1N,SAAS,IAC/D,KAAKqkB,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CACvBmL,gBAAiBpG,EAAOxO,SACxB2U,gBAAiB,KACjBv2B,SAAS,EACT0N,OAAO,IAGf,KAAK2W,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAErrB,SAAS,EAAM0N,OAAO,IACvD,KAAK2W,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAE3d,MAAO0iB,EAAO1iB,MAAO1N,SAAS,IAC/D,KAAKqkB,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAEmL,gBAAiB,KAAMx2B,SAAS,EAAO0N,OAAO,IAE/E,KAAK2W,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAEoL,MAAOrG,EAAOqG,QAC/C,KAAKpS,EACD,OAAOgN,EAAAA,EAAAA,IAAahG,EAAO,CAAEoL,MAAO,KAAMD,gBAAiB,KAAMD,gBAAiB,OAEtF,QACI,OAAOlL,EAEnB,C,oFC/GYjC,G,qGAAAA,IAAAA,EAAAA,CAAAA,IAYL,IAAM6G,EAAwC,CACjDgH,QAAQ,EACR/N,KAAM,MAYV,KATgB,W,IAACmC,EAAQ,UAARA,OAAAA,QAAAA,IAAAA,UAAAA,GAAAA,UAAAA,GAAQ4E,EAAcG,EAAAA,UAAAA,OAAAA,EAAAA,UAAAA,QAAAA,EACnC,OAAQA,EAAOtxB,OACNulB,EAAAA,EAAY4E,SACN,CAAEgO,OAAQ7G,EAAO7I,KAAM2B,KAAMkH,EAAOlH,MAEpCmC,CAEnB,C,iDCfa4E,EAAqC,CAC9ChG,cAAc,EACdD,aAAc,GACdkN,qBAAqB,GAkBzB,IAfgB,W,IAAC7L,EAAQ,UAARA,OAAAA,QAAAA,IAAAA,UAAAA,GAAAA,UAAAA,GAAQ4E,EAAcG,EAAAA,UAAAA,OAAAA,EAAAA,UAAAA,QAAAA,EACnC,OAAQA,EAAOtxB,MACX,KAAKulB,EAAAA,GAAYwF,kBACb,OAAOwH,EAAAA,EAAAA,IAAahG,EAAO,CACvBrB,aAAcoG,EAAOpG,aACrBC,aAAcmG,EAAOnG,aACrBiN,qBAAqB,IAE7B,KAAK7S,EAAAA,GAAYyF,kBACb,OAAOuH,EAAAA,EAAAA,IAAahG,EAAO,CAAEpB,aAAcmG,EAAOnG,eACtD,QACI,OAAOoB,EAEnB,C,yGC5BO,IAAM8L,EAAgB,SAACj2B,EAAWk2B,G,OAAuBl2B,QAAAA,EAAK,IAAIm2B,cAAcD,QAAAA,EAAK,G,EAE/EE,EAAe,SAACp2B,EAAUk2B,GACnC,OAAKl2B,GAAMk2B,EAINl2B,EAIAk2B,EAIDl2B,EAAEq2B,OAAOH,GACF,EAGJl2B,EAAEs2B,QAAQJ,GAAK,GAAK,EAPhB,GAJC,EAJD,CAgBf,EAGaK,EAAa,SAACv2B,EAAQk2B,GAC/B,OAAIl2B,IAAMk2B,EACC,EAGJl2B,EAAIk2B,GAAK,EAAI,CACxB,C,0tBCTO,IAAMM,EAAW,SAAC14B,EAAY24B,GACjC7+B,OAAO8+B,WAAa,E,sUAAA,IACb9+B,OAAO8+B,YACV,KAAC54B,EAAK24B,GAEd,EAKaE,EAAU,SAAC74B,G,IACPlG,EACNA,EADD6+B,EAAwB,QAAjB7+B,EAAAA,OAAO8+B,kBAAP9+B,IAAAA,OAAAA,EAAAA,EAAoBkG,GAGjC,OAFwB,QAAjBlG,EAAAA,OAAO8+B,kBAAP9+B,IAAAA,UAAAA,EAAoBkG,GAEpB24B,CACX,EAKO,SAASG,EAAuB94B,GACnC,IAAM24B,EAAOE,EAAQ74B,GAEjB24B,GACAA,EAAKI,SAEb,CAKO,IAAMC,EAAkB,Y,IAAGh5B,EAAAA,EAAAA,GAAIi5B,EAAAA,EAAAA,UAAWC,EAAAA,EAAAA,UACvCP,GAAOQ,EAAAA,EAAAA,GAAWD,GACxBP,EAAKpyB,OAAO0yB,GAEZP,EAAS14B,EAAI24B,EACjB,EAMaS,EAA6B,Y,IACtCp5B,EAAAA,EAAAA,GACAq5B,EAAAA,EAAAA,UACAH,EAAAA,EAAAA,UACAh4B,EAAAA,EAAAA,MAEMy3B,GAAOQ,EAAAA,EAAAA,GAAWD,GACxBP,EAAKpyB,OAAO,gBAAC8yB,EAAcn4B,IAE3Bw3B,EAAS14B,EAAI24B,EACjB,C,w2FCjDA,IAAMW,EAAS,IAAIC,IAAsB,CACrC,CAAC,QAAS,WACV,CAAC,UAAW,WACZ,CAAC,UAAW,WACZ,CAAC,OAAQ,aAYPC,EAAiB99B,EAAAA,GAAO6B,IAAG,KAOpB,SAAC2D,G,IAAUA,E,OAAW,QAAXA,EAAAA,EAAMmJ,aAANnJ,IAAAA,EAAAA,EAAe,aAAY,IAClC,SAACA,G,OAAWA,EAAM2Q,SAAW,OAAsB,OAAf3Q,EAAM2Q,SAAS,WAAW,M,IAO3D,SAAC3Q,G,OAAWA,EAAMu4B,YAAc,OAAS,M,IACxC,SAACv4B,G,OAAWA,EAAMw4B,cAAgB,OAAS,M,IAEjD,SAACx4B,G,OAAWA,EAAMy4B,SAAW,EAAI,C,IAGlC,SAACz4B,G,IAAuDA,E,MAA1B,aAAlBA,EAAMxB,QAAyB,aAA4C,OAAd,QAAjBwB,EAAAA,EAAMu4B,mBAANv4B,IAAAA,EAAAA,EAAqB,WAAc,MAAK,IAExG,SAACA,G,MACmB,aAAlBA,EAAMxB,SACL,gR,IAMH,SAACwB,G,OACCA,EAAMu4B,aACN,oGAIoC,OAAlBv4B,EAAMu4B,YAAY,sK,IAUtCG,EAAgBl+B,EAAAA,GAAO6B,IAAG,KAK1BqK,EAAmBlM,EAAAA,GAAO6B,IAAG,KAQ7Bs8B,EAAgBn+B,EAAAA,GAAO+B,OAAM,KAiBtBwL,EAAuD,Y,IAChEvJ,EAAAA,EAAAA,QACAo6B,EAAAA,EAAAA,SAAAA,EAAAA,EACA/8B,OAAAA,OAAAA,IAAS,gBACT4C,SAAAA,OAAAA,IAAW,WACXyS,EAAAA,EAAAA,OACA/H,EAAAA,EAAAA,MACAwH,EAAAA,EAAAA,SAAAA,EAAAA,EACAK,UAAAA,OAAAA,IAAY,KACZtS,EAAAA,EAAAA,UACGsB,EAAAA,EAAAA,EAAAA,CATHxB,UACAo6B,WACA/8B,SACA4C,WACAyS,SACA/H,QACAwH,WACAK,YACAtS,cAG0Cm6B,EAAAA,EAAAA,EAAAA,UAAe,MAAlDC,EAAmCD,EAAAA,GAApBE,EAAoBF,EAAAA,GACRA,EAAAA,EAAAA,EAAAA,UAAe,MAA1CG,EAA2BH,EAAAA,GAAhBI,EAAgBJ,EAAAA,GAE5BN,EAAcH,EAAOc,IAAIz6B,GAqB/B,OAdAo6B,EAAAA,WAAgB,WACZE,GAAiB,EACrB,GAAG,IAEHF,EAAAA,WAAgB,WACP7nB,GACDioB,GAAa,GAGbjoB,GACAioB,GAAa,EAErB,GAAG,CAACjoB,IAGA,gBAACsnB,E,sUAAAA,CAAAA,CACGC,YAAaA,EACb/5B,QAASA,EACT2K,MAAOA,EACPwH,SAAUA,EACV8nB,SAAU,GAAWK,GAAkBE,EACvCR,gBAAiB95B,EACjBy6B,eAAct9B,GACVmE,GAEU,SAAbvB,GACG,gBAACi6B,EAAAA,KACiB,UAAbj6B,GAAwB,gBAAC26B,EAAAA,GAAWA,CAACC,KAAMd,EAAanvB,OAAQ,OAAQD,MAAO,SAClE,YAAb1K,GAA0B,gBAAC26B,EAAAA,GAAWA,CAACC,KAAMd,EAAanvB,OAAQ,OAAQD,MAAO,SACpE,YAAb1K,GAA0B,gBAAC66B,EAAAA,GAAWA,CAACD,KAAMd,EAAanvB,OAAQ,OAAQD,MAAO,SACpE,SAAb1K,GAAuB,gBAAC86B,EAAAA,GAAIA,CAACF,KAAMd,EAAanvB,OAAQ,OAAQD,MAAO,UAIhF,gBAACzC,EAAAA,KAAkBkyB,GAClBl6B,GACG,gBAACi6B,EAAAA,CAAca,aAAY,UAAWv9B,QAzC5B,WAClBg9B,GAAa,GACbv6B,GAAaA,GACjB,EAsC0Ey6B,eAAc,GAAU,OAAPt9B,EAAO,kBAClF,gBAAC49B,EAAAA,EAAKA,CAACtwB,MAAO,OAAQC,OAAQ,OAAQswB,YAAa,QAKvE,EAEA3xB,EAAMuK,YAAc,O,81ECrLb,I,EAAMlM,EAAQ,CAEjBQ,QAAS,CACL+yB,IAAK,UACLC,MAAO,UACPC,KAAM,UACNC,OAAQ,UACRC,MAAO,OACPlzB,MAAO,OACPmzB,KAAM,OACNC,SAAU,UACVC,WAAY,WAIhB7zB,KAAM,CACFC,WAAY,UACZ6zB,YAAa,UACbC,UAAW,UACXC,UAAW,UAEXzzB,QAAS,UACT0zB,UAAW,UACXC,gBAAiB,UAEjBC,WAAY,UACZC,WAAY,UACZC,gBAAiB,qBAEjBC,gBAAiB,UACjBC,oBAAqB,WAIzBC,MAAO,CACHC,UAAW,UACXC,YAAa,UACbC,WAAY,UACZC,MAAO,WAIXC,MAAO,CACHC,mBAAoB,UACpBC,eAAeC,EAAAA,EAAAA,IAAe,OAAQ,YAI1CC,SAAU,CACNC,gBAAiB,UACjBC,sBAAuB,UACvBC,yBAA0B,UAC1BC,qBAAsB,UACtBC,8BAA+B,UAC/BC,eAAgB,UAChBC,oBAAqB,WAIzBC,SAAU,CACNC,kBAAmB,UACnBC,mBAAoB,UACpBC,kBAAmB,UACnBC,mBAAoB,UACpBC,sBAAuB,UACvBC,cAAe,WAGnBC,OAAQ,CACJC,gBAAiB,UACjBC,eAAgB,UAChBC,qBAAsB,a,SAKlBC,G,uIAAAA,IAAAA,EAASA,CAAAA,IAWd,I,EAAMC,EAAgB,G,SAEjBj1B,G,iKAAAA,IAAAA,EAAAA,CAAAA,IAYL,I,IACMk1B,EAAY,wBAEZC,EAAa,GAAa,OAAVD,GAEhBE,EAETF,G,SAOQG,GAGP,yBAIA,sB,EAPOA,IAAAA,EAAAA,CAAAA,I,SAcAC,G,0HAAAA,IAAAA,EAAAA,CAAAA,IAWE,gBAE4B,OAFZJ,EAAU,gCACA,+BACE,WAE7B,gBAE6B,OAFbA,EAAU,gCACA,+BACG,WAE/B,gBAE+B,OAFfA,EAAU,gCACA,+BACK,WAE9B,gBAE8B,OAFdA,EAAU,gCACA,+BACI,WAE/B,gBAE+B,OAFfA,EAAU,gCACA,+BACK,WAE7B,gBAE6B,OAFbA,EAAU,gCACA,+BACG,WAE5B,gBAE4B,OAFZA,EAAU,+BACA,+BACE,WAK7B,UACMA,OADIv2B,EAAMC,KAAKO,QAAQ,wBAIO,OAH9B+1B,EAAU,4BACK,2BACG,+BACY,OAErC,UACOA,OADGv2B,EAAMC,KAAKq0B,gBAAgB,wBAKNt0B,OAJxBu2B,EAAU,4BACK,2BACG,+BACY,8BACf,WACC,OADQv2B,EAAMC,KAAKq0B,gBAAgB,+BACnC,OAK3B,UACeiC,OADLv2B,EAAMC,KAAKO,QAAQ,4BAMFR,OALZu2B,EAAU,gCACM,0DAEE,qCACE,wCAEU,OADlBv2B,EAAMC,KAAKO,QAAQ,mCACD,WAE7C,UACe+1B,OADLv2B,EAAMC,KAAKg0B,UAAU,4BAKc,OAJ9BsC,EAAU,gCACI,0DAEI,mCACY,WAE7C,UACeA,OADLv2B,EAAMC,KAAK+zB,UAAU,4BAKc,OAJ9BuC,EAAU,gCACK,0DAEG,mCACY,WAE7C,UACeA,OADLv2B,EAAMC,KAAKm0B,WAAW,4BAKa,OAJ9BmC,EAAU,gCACI,0DAEI,mCACY,WAE7C,UACeA,OADLv2B,EAAMC,KAAKO,QAAQ,4BAKgB,OAJ9B+1B,EAAU,gCACM,0DAEE,mCACY,WAE7C,UACeA,OADLv2B,EAAMC,KAAKO,QAAQ,4BAMgB,OAL9B+1B,EAAU,gCACI,8FAGI,mCACY,WA5F9C,IAgGMK,EAED,QAICC,EAAQ,CACjBC,WAAY,QACZC,OAAQ,SAGCC,EAAS,CAClB3C,WAAY,MACZ4C,QAAS,OAGAC,EACA,8BAGAC,EAAY,CACrBC,SAASC,EAAAA,EAAAA,IAASA,KAQlBC,UAAUD,EAAAA,EAAAA,IAASA,KAQnBE,UAAUF,EAAAA,EAAAA,IAASA,KAUnBG,kBAAkBH,EAAAA,EAAAA,IAASA,MAUlBI,EAAmB,CAC5BC,MAAO,SC9MX,EArEwB,CACpBhD,UAAW,CACP3zB,KAAMf,EAAMy0B,MAAMC,UAClB7zB,WAAYb,EAAMy0B,MAAMC,UACxB1zB,SAAUhB,EAAMQ,QAAQC,MACxBQ,aAAc,QACdH,MAAO,CACHC,MAAM42B,EAAAA,EAAAA,GAAQ,GAAK33B,EAAMy0B,MAAMC,WAC/B7zB,YAAY82B,EAAAA,EAAAA,GAAQ,GAAK33B,EAAMy0B,MAAMC,WACrC1zB,SAAUhB,EAAMQ,QAAQC,QAGhCk0B,YAAa,CACT5zB,KAAMf,EAAMy0B,MAAME,YAClB9zB,WAAYb,EAAMy0B,MAAME,YACxB3zB,SAAUhB,EAAMQ,QAAQC,MACxBQ,aAAc,QACdH,MAAO,CACHC,MAAM42B,EAAAA,EAAAA,GAAQ,GAAK33B,EAAMy0B,MAAME,aAC/B9zB,YAAY82B,EAAAA,EAAAA,GAAQ,GAAK33B,EAAMy0B,MAAME,aACrC3zB,SAAUhB,EAAMQ,QAAQC,QAGhCm0B,WAAY,CACR7zB,KAAMf,EAAMy0B,MAAMG,WAClB/zB,WAAYb,EAAMy0B,MAAMG,WACxB5zB,SAAUhB,EAAMQ,QAAQC,MACxBQ,aAAc,QACdH,MAAO,CACHC,MAAM42B,EAAAA,EAAAA,GAAQ,GAAK33B,EAAMy0B,MAAMG,YAC/B/zB,YAAY82B,EAAAA,EAAAA,GAAQ,GAAK33B,EAAMy0B,MAAMG,YACrC5zB,SAAUhB,EAAMQ,QAAQC,QAGhCo0B,MAAO,CACH9zB,KAAMf,EAAMy0B,MAAMI,MAClBh0B,WAAYb,EAAMy0B,MAAMI,MACxB7zB,SAAUhB,EAAMQ,QAAQC,MACxBQ,aAAc,QACdH,MAAO,CACHC,MAAM42B,EAAAA,EAAAA,GAAQ,GAAK33B,EAAMy0B,MAAMI,OAC/Bh0B,YAAY82B,EAAAA,EAAAA,GAAQ,GAAK33B,EAAMy0B,MAAMI,OACrC7zB,SAAUhB,EAAMQ,QAAQC,QAGhCm3B,QAAS,CACL72B,KAAMf,EAAMQ,QAAQC,MACpBI,WAAYb,EAAMC,KAAK+zB,UACvBhzB,SAAUhB,EAAMC,KAAK+zB,UACrB/yB,aAAc,QACdH,MAAO,CACHC,KAAMf,EAAMC,KAAK+zB,UACjBnzB,WAAYb,EAAMC,KAAK+zB,UACvBhzB,SAAUhB,EAAMQ,QAAQC,QAGhCo3B,YAAa,CACT92B,KAAMf,EAAMQ,QAAQC,MACpBI,WAAYb,EAAMC,KAAKi0B,UACvBlzB,SAAUhB,EAAMC,KAAKi0B,UACrBjzB,aAAc,QACdH,MAAO,CACHC,KAAMf,EAAMC,KAAKi0B,UACjBrzB,WAAYb,EAAMC,KAAKi0B,UACvBlzB,SAAUhB,EAAMQ,QAAQC,S,yyBC9DpC,IAAMq3B,EAAuB1jC,EAAAA,GAAO6B,IAAG,KAGhB,SAAC2D,G,OAAwCA,EAAMm+B,QAAUn+B,EAAMm+B,QAAU,e,IAGnFC,EAAO5jC,EAAAA,GAAOuO,IAAG,KACjB,SAAC/I,G,OAAUA,EAAMmJ,K,IAChB,SAACnJ,G,OAAUA,EAAMoJ,M,GACX3B,EAAQq2B,MAEXP,EAAUK,iBAAoBX,EAAME,QAGxCkB,EAAiB,Y,IAC1BzF,EAAAA,EAAAA,SAAAA,EAAAA,EACA0F,MAAAA,OAAAA,IAAQ,gBACRC,UAAAA,OAAAA,IAAY,eACZC,WAAAA,OAAAA,IAAa,WACVx+B,EAAAA,EAAAA,EAAAA,CAJH44B,WACA0F,QACAC,YACAC,e,OAGA,gBAACN,EAAyBl+B,EACrB44B,EACD,gBAACwF,EAAAA,CACGp1B,IAAe,UAAVs1B,EC/CjB,677BCAA,2n6BFgDYr1B,IAAK,UACLE,MAAOo1B,EACPn1B,OAAQo1B,I,ihFG4EpB,IAAMh9B,EAAehH,EAAAA,GAAO+B,OAAOC,OAAmB,Y,MAAiB,CACnE,eADqDX,EAAAA,O,GAApCrB,C,KAGN,SAACwF,G,OAAWA,EAAMuJ,OAAS,cAAgB,M,IAGrC,SAACvJ,G,MAA6B,UAAlBA,EAAMxB,QAAsB,MAAQ,K,IAGjD,SAACwB,G,OAAWA,EAAML,MAAQK,EAAML,MAAMsH,WAAab,EAAMy0B,MAAMC,S,IAC3D,SAAC96B,G,OAAWA,EAAML,MAAQK,EAAML,MAAMwH,KAAOf,EAAMy0B,MAAMC,S,IACpE,SAAC96B,G,OAAWA,EAAML,MAAQK,EAAML,MAAMyH,SAAWhB,EAAMQ,QAAQC,K,IAE3D,SAAC7G,G,OACVA,EAAMy+B,KAAOz+B,EAAMy+B,KAAyB,UAAlBz+B,EAAMxB,QAAsBi+B,EAAUqB,MAAQrB,EAAUiC,O,IAI3E,SAAC1+B,G,MAA6B,UAAlBA,EAAMxB,QAAsB,YAAciJ,EAAQk3B,c,IAC5D,SAAC3+B,G,OAAUA,EAAMP,UAAY,G,IAQtB,Y,IAAGE,EAAAA,EAAAA,M,OAAaA,GAASA,EAAMuH,MAAQvH,EAAMuH,MAAMD,WAAab,EAAMy0B,MAAMC,S,IACxE,Y,IAAGn7B,EAAAA,EAAAA,M,OAAaA,GAASA,EAAMuH,MAAQvH,EAAMuH,MAAMC,KAAOf,EAAMy0B,MAAMC,S,IACjF,Y,IAAGn7B,EAAAA,EAAAA,M,OAAaA,GAASA,EAAMuH,MAAQvH,EAAMuH,MAAME,SAAWhB,EAAMQ,QAAQC,K,IAcvFnK,EAASm8B,EAAAA,YACX,WAaIzgC,G,IAXIwgC,EAAAA,EAAAA,SACA38B,EAAAA,EAAAA,QAAAA,EAAAA,EACAyD,SAAAA,OAAAA,IAAW,KACX6J,EAAAA,EAAAA,OACA+0B,EAAAA,EAAAA,MACAG,EAAAA,EAAAA,KAAAA,EAAAA,EACA7/B,KAAAA,OAAAA,IAAO,aACPkB,EAAAA,EAAAA,QAAAA,EAAAA,EACAtB,QAAAA,OAAAA,IAAU,aACPwB,EAAAA,EAAAA,EAAAA,CATH44B,WACA38B,UACAyD,WACA6J,SACA+0B,QACAG,OACA7/B,OACAkB,UACAtB,YAKEogC,EAAe/F,EAAAA,WAAiBgG,EAAAA,IACtC,OACI,gBAACr9B,EAAAA,EAAAA,CACGvF,QAASA,EACTyD,SAAUA,EACV6J,OAAQA,EACR+0B,MAAOA,EACPG,KAAMA,EACN7/B,KAAMA,EACNxG,IAAKA,EACLoG,QAASA,GACLwB,GAEHF,EACG,gBAACu+B,EAAcA,CAACC,MAAOM,EAAeA,EAAav3B,aAAe,SAC7DuxB,GAGLA,EAIhB,IAGJl8B,EAAO4V,YAAc,SAErB,IAAMwsB,EAAmBtkC,EAAAA,GAAO+B,OAAOC,OAAmB,Y,MAAiB,CACvE,eADyDX,EAAAA,O,GAApCrB,C,KAIV,SAACwF,G,OAAwBA,EAAMuJ,OAAS,cAAgB,M,IAG1D,SAACvJ,G,OACNA,EAAML,OACAK,EAAML,MAAMsH,WACRjH,EAAML,MAAMsH,WAEhBb,EAAMy0B,MAAMC,S,GAEP8B,GACF,SAAC58B,G,OAAuBA,EAAMy+B,MAAQhC,EAAUiC,O,GAE9CjC,EAAUqB,MAGTr2B,EAAQs3B,QAGU9B,EAAMC,YAcb,SAACl9B,G,OACpBA,EAAML,OAASK,EAAML,MAAMuH,MAAQlH,EAAML,MAAMuH,MAAMC,KAAOf,EAAMy0B,MAAMC,S,IAO9E/zB,EAAe8xB,EAAAA,YACjB,WAAgEzgC,G,IAA7DwgC,EAAAA,EAAAA,SAAU38B,EAAAA,EAAAA,QAASyD,EAAAA,EAAAA,SAAU6J,EAAAA,EAAAA,OAAQk1B,EAAAA,EAAAA,KAAM7/B,EAAAA,EAAAA,KAASoB,EAAAA,EAAAA,EAAAA,CAApD44B,WAAU38B,UAASyD,WAAU6J,SAAQk1B,OAAM7/B,S,OAC1C,gBAACkgC,EAAAA,EAAAA,CACG7iC,QAASA,EACTyD,SAAUA,EACV6J,OAAQA,EACRk1B,KAAMA,EACN7/B,KAAMA,EACNxG,IAAKA,GACD4H,GAEH44B,E,IAIb7xB,EAAauL,YAAc,eAE3B,IAAM0sB,EAAoBxkC,EAAAA,GAAO6B,IAAG,KAGb,Y,IAAG8hC,EAAAA,EAAAA,Q,MACN,SAAZA,EACM,aACY,WAAZA,EACA,SACY,UAAZA,EACA,WACY,kBAAZA,EACA,gBACA,Q,GAER38B,EACkBiG,EAAQw3B,UAQ1BC,EAAc,Y,IAAGtG,EAAAA,EAAAA,SAAUuF,EAAAA,EAAAA,QAAYn+B,EAAAA,EAAAA,EAAAA,CAAtB44B,WAAUuF,Y,OAC7B,gBAACa,EAAAA,EAAAA,CAAkBb,QAASA,GAAan+B,GACpC44B,E,y9DC7QT,IAAMuG,GAAwB3kC,EAAAA,GAAO6B,IAAG,IAIpB+J,EAAMC,KAAK8zB,aAIzB34B,GAAehH,EAAAA,GAAO+B,OAAM,KAS5B6iC,IAAgB5kC,EAAAA,EAAAA,IAAO6kC,EAAAA,GAAP7kC,CAAmB6kC,KAO7Bj5B,EAAMC,KAAK+zB,UACH3yB,EAAQi3B,SACX,SAAC1+B,G,OAAuCA,EAAMs/B,WAAa,iBAAmB,e,IAGzFC,GAAgB/kC,EAAAA,GAAOC,EAAC,KAEXoiC,EACFJ,EAAU+C,OAGd,SAACx/B,G,OACNA,EAAMs/B,WAAct/B,EAAML,MAAQK,EAAML,MAAMwH,KAAOf,EAAMy0B,MAAMC,UAAa10B,EAAMC,KAAK+zB,S,IAG3FqF,GAAuBjlC,EAAAA,GAAO6B,IAAG,MAIjCqjC,GAAkB7G,EAAAA,YACpB,WAAsEzgC,G,IAAnEunC,EAAAA,EAAAA,QAASC,EAAAA,EAAAA,YAAa,EAAbA,EAAaC,OAAAA,OAAAA,IAAS,KAAOhkC,EAAAA,EAAAA,OAAQI,EAAAA,EAAAA,QAAY+D,EAAAA,EAAAA,EAAAA,CAA1D2/B,UAASC,cAAaC,SAAgBhkC,SAAQI,YAC7C,OACI,gBAACkjC,GAAAA,E,sUAAAA,CAAAA,CAAsB/mC,IAAKA,GAAS4H,GAAAA,CAAOm5B,eAAc,GAAU,OAAPt9B,KACzD,gBAAC2F,GAAYA,CACT5C,KAAK,SACLu6B,eAAc,GAAU,OAAPt9B,EAAO,kBACxBI,QAASA,EACT6jC,gBAAeD,GAEf,gBAACT,GAAAA,CAAcE,WAAYO,EAAQE,cAAY,SAC/C,gBAACR,GAAAA,CAAcD,WAAYO,EAAQ1G,eAAc,GAAU,OAAPt9B,EAAO,cACtD8jC,IAGRC,GAAe,gBAACH,GAAAA,KAAsBG,GAGnD,IAEJF,GAAgBptB,YAAc,kBAE9B,IC7FA,GD6FA,G,iWEpFgB9X,EAAAA,GAAO6B,IAAG,MAIF,SAAC2D,G,OAAiCA,EAAMggC,QAAUhgC,EAAMggC,QAAU,a,GAGjEhD,G,qWCIzB,IAAMiD,GAAiB,CACnBC,WAAY,MACZC,SAAU,WACVC,QAAS,MACTC,UAAW,WACXC,cAAe,MACfC,KAAM,Q,IAMM/lC,EAAAA,GAAO6B,IAAG,MACZ,SAAC2D,G,OAAiCA,EAAMwgC,IAAM,gBAAkB,M,IACtD,SAACxgC,G,OAAwBA,EAAMggC,SAAW,a,IAEnD,SAAChgC,G,OAAiCA,EAAMwgC,IAAM,MAAQ,G,IAChD,SAACxgC,G,OAAiCA,EAAMwgC,IAAM,MAAQ,G,GAGlDxD,GACR,SAACh9B,G,OAAyBA,EAAMmJ,OAZ/BjQ,EAYgD8G,EAAMmJ,MAZpC82B,GAAO/mC,IAYsC+mC,GAAOM,KAZvE,IAACrnC,C,q1DCnBlB,I,GAAMunC,GAAsBjmC,EAAAA,GAAO6B,IAAG,MAmBhCqkC,GAAUlmC,EAAAA,GAAO6B,IAAG,KACF+J,EAAM80B,MAAME,eAW9B8C,IAAuB1jC,EAAAA,EAAAA,IAAO6jC,EAAP7jC,CAAqB6jC,MAI5CsC,GAAgBnmC,EAAAA,GAAOC,EAAC,KAKbgiC,EAAUmE,OACdx6B,EAAMQ,QAAQmzB,OAGd8G,GAAgBhI,EAAAA,YACzB,WAAuCzgC,G,QAApCiH,QAAAA,OAAAA,IAAU,iBAAiBW,EAAAA,GAAAA,EAAAA,CAA3BX,Y,OACC,gBAACyhC,GAAAA,EAAMA,CAACC,KAAMjoC,SAASkoC,MACnB,gBAACN,GAAAA,KACG,gBAACD,G,uUAAAA,CAAAA,CAAoBroC,IAAKA,GAAS4H,GAC/B,gBAACk+B,GAAoBA,CAACI,MAAM,UAC5B,gBAACqC,GAAAA,KAAethC,K,s8DAMpCwhC,GAAcvuB,YAAc,gB,SCbhB2uB,G,+BAAAA,KAAAA,GAAAA,CAAAA,IAmBZ,IAAMP,GAAUlmC,EAAAA,GAAO6B,IAAG,KACF+J,EAAM80B,MAAME,eAc9B8F,GAAc1mC,EAAAA,GAAO6B,IAAG,MAEjB,SAAC2D,G,OAAuBA,EAAMmJ,MAAQnJ,EAAMmJ,MAAQ,O,IACnD,SAACnJ,G,OAAuBA,EAAMoJ,OAASpJ,EAAMoJ,OAAS,M,IAK9D+3B,GAAsB3mC,EAAAA,GAAO6B,IAAG,MACd,SAAC2D,G,OAAuBA,EAAML,MAAQK,EAAML,MAAMwH,KAAOf,EAAMy0B,MAAMC,S,GAChF10B,EAAMQ,QAAQC,MAIV41B,EAAUmE,QAIrBQ,GAAqB5mC,EAAAA,GAAO6B,IAAG,KACb+J,EAAMQ,QAAQC,OAIhCrF,IAAehH,EAAAA,EAAAA,IAAOkC,EAAPlC,CAAakC,MAE5BsiC,GAAoBxkC,EAAAA,GAAO6B,IAAG,MAEb,SAAC2D,G,MACU,UAA1BA,EAAMqhC,gBAA4C,aAAe,E,IACnD,SAACrhC,G,MACW,UAA1BA,EAAMqhC,gBAA4C,cAAgB,E,GAClDj7B,EAAMC,KAAKs0B,gBACPv0B,EAAMC,KAAKu0B,oBAKjCp5B,GACiBiG,EAAQs3B,QACPt3B,EAAQs3B,SASnBrjC,GAAQm9B,EAAAA,YACjB,WAcIzgC,G,IAZIwgC,EAAAA,EAAAA,SAAAA,EAAAA,EACA98B,QAAAA,OAAAA,IAAU,aACVulC,gBAAAA,OAAAA,IAAkB,EAAlBA,OAAAA,EACA1lC,EAAAA,EAAAA,MACA2lC,EAAAA,EAAAA,WACAC,EAAAA,EAAAA,YACAC,EAAAA,EAAAA,mBACAC,EAAAA,EAAAA,oBACAt4B,EAAAA,EAAAA,MACAu4B,EAAAA,EAAAA,cACG1hC,EAAAA,GAAAA,EAAAA,CAVH44B,WACA98B,UACAulC,kBACA1lC,QACA2lC,aACAC,cACAC,qBACAC,sBACAt4B,QACAu4B,kBAKEC,EAAkB9I,EAAAA,OAAgC,MAClD+I,EAAmB/I,EAAAA,OAAgC,MAOzD,OALAvgC,EAAAA,EAAAA,YAAU,WACgB,WAAlBopC,GAA8BC,EAAgBjpC,SAASipC,EAAgBjpC,QAAQmpC,QAC7D,YAAlBH,GAA+BE,EAAiBlpC,SAASkpC,EAAiBlpC,QAAQmpC,OAC1F,IAGI,gBAACX,G,uUAAAA,CAAAA,CAAY9oC,IAAKA,EAAK+Q,MAAOA,EAAOk4B,gBAAiBA,GAAqBrhC,GACvE,gBAACmhC,GAAAA,KAAqBxlC,GACtB,gBAACylC,GAAAA,KAAoBxI,GACpB98B,GAGG,gBAACkjC,GAAiBA,CAACqC,gBAAiBA,GAChC,gBAAC7/B,GAAYA,CACT3F,OAAQ,qBACRI,QAASwlC,EACTrpC,IAAKwpC,GAEJL,GAAe,OAEpB,gBAAC//B,GAAYA,CACT7B,MAAOmiC,EAAM9D,QACbniC,OAAQ,wBACRI,QAASulC,EACTppC,IAAKupC,GAEJL,GAAc,WAMvC,I,63HAEJ5lC,GAAM4W,YAAc,QC7IpB,IAAMyvB,GAAevnC,EAAAA,GAAO6B,IAAG,MAGjB,SAAC2D,G,OAAWA,EAAMs/B,WAAa,aAAmC,OAAtBl5B,EAAMC,KAAKo0B,YAAe,M,IAC/D,SAACz6B,G,OAAmBA,EAAMgiC,UAAY,OAAS5E,EAAO3C,U,GAGnDr0B,EAAMy0B,MAAMC,WAI9BmH,IAAoBznC,EAAAA,EAAAA,IAAO0nC,EAAAA,GAAP1nC,CAAkB0nC,MAKtCC,IAAe3nC,EAAAA,EAAAA,IAAO4nC,EAAAA,GAAP5nC,CAAa4nC,MAM5B1lC,GAASlC,EAAAA,GAAO+B,OAAOC,OAAuB,Y,MAAqB,CACrE,eADmD6lC,EAAAA,W,GAAxC7nC,C,MAWTgH,IAAehH,EAAAA,EAAAA,IAAOkC,GAAPlC,CAAakC,KACtB0J,EAAMC,KAAKq0B,gBACCt0B,EAAMQ,QAAQC,OACjB,SAAC7G,G,OACdA,EAAMgiC,UAAY,gBAAkB,KAA0B5E,OAArBA,EAAO3C,WAAW,KAAqB,OAAlB2C,EAAO3C,WAAW,K,IAIzE,SAACz6B,G,OAAYA,EAAMsiC,aAAyBtiC,EAAMuiC,iBAAmB,QAAU,OAA7C,O,IAG9B,SAACviC,G,OAAmBA,EAAMwiC,aAAe,qBAAuB,G,IAChE,SAACxiC,G,OAAmBA,EAAMwiC,aAAe,oCAAsC,G,GAExFP,GACU77B,EAAMy0B,MAAMC,UAKtBmH,IACUQ,EAAAA,EAAAA,IAAO,MAAOr8B,EAAMC,KAAKq0B,iBAOnCuH,IAUJS,GAA4BloC,EAAAA,GAAO6B,IAAG,KAChC+J,EAAMC,KAAKq0B,gBACCt0B,EAAMQ,QAAQC,OACjB,SAAC7G,G,OACdA,EAAMgiC,UAAY,gBAAkB,KAA0B5E,OAArBA,EAAO3C,WAAW,KAAqB,OAAlB2C,EAAO3C,WAAW,K,IAMlF3yB,GAAYtN,EAAAA,GAAO0H,MAAM1F,OAAuB,Y,MAAqB,CACvE,eADqD6lC,EAAAA,W,GAAvC7nC,C,MAIZmoC,IAAcnoC,EAAAA,EAAAA,IAAOsN,GAAPtN,CAAOsN,MAEd26B,EAAAA,EAAAA,IAAO,MAAOr8B,EAAMC,KAAKq0B,kBACjB,SAAC16B,G,OAAWA,EAAMgiC,UAAY,OAAS5E,EAAO3C,U,IAE7D,SAACz6B,G,OACCA,EAAM4iC,eACL,qF,IAMM,SAAC5iC,G,OAAYA,EAAMsiC,aAA2BtiC,EAAMuiC,iBAAmB,UAAY,EAAjD,S,IACpC,SAACviC,G,OAAWA,EAAMsiC,aAAgBtiC,EAAMuiC,iBAAmB,OAAS,IAAO,M,IAChE,SAACviC,G,OACjBA,EAAMsiC,aAAgBtiC,EAAMuiC,iBAAmBn8B,EAAMQ,QAAQC,MAAQ,cAAiBT,EAAMQ,QAAQC,K,IAGzF,SAAC7G,G,OAAYA,EAAMsiC,aAAmBtiC,EAAMuiC,iBAAmB,EAAI,EAAjC,C,IACpCxE,EAAAA,EAAAA,GAAQ,MAAO33B,EAAMC,KAAKq0B,iBAInBt0B,EAAMy0B,MAAMC,WACjB,SAAC96B,G,OAAqCA,EAAMwiC,aAAe,qBAAuB,G,IAClF,SAACxiC,G,OACRA,EAAMwiC,aAAe,oCAAsC,G,GAE3DhhC,GACgB4E,EAAMy0B,MAAMC,UAE5B4H,GACgBt8B,EAAMy0B,MAAMC,WAUlC+H,GAAeroC,EAAAA,GAAO+B,OAAM,MAErBkmC,EAAAA,EAAAA,IAAO,MAAOr8B,EAAMC,KAAKq0B,kBAEd+H,EAAAA,EAAAA,IAAO,IAAMr8B,EAAMC,KAAK8zB,aACxB/zB,EAAMQ,QAAQC,OACjB,SAAC7G,G,OAAWA,EAAMgiC,UAAY,OAAS,GAAqB,OAAlB5E,EAAO3C,W,IAGvD,Y,OAAG8H,EAAAA,iBAA2C,OAAS,M,IAK9CxE,EAAAA,EAAAA,GAAQ,GAAK33B,EAAMC,KAAKm0B,aACpBuD,EAAAA,EAAAA,GAAQ,IAAM33B,EAAMC,KAAKm0B,YAE3C2H,IACUM,EAAAA,EAAAA,IAAO,MAAOr8B,EAAMC,KAAKq0B,kBAKvCoI,GAAejK,EAAAA,YACjB,WAeIzgC,G,IAbIoqC,EAAAA,EAAAA,aACAvjC,EAAAA,EAAAA,YACA8jC,EAAAA,EAAAA,aACAC,EAAAA,EAAAA,kBACAC,EAAAA,EAAAA,WACAjB,EAAAA,EAAAA,UACAM,EAAAA,EAAAA,aACAzmC,EAAAA,EAAAA,OACAqnC,EAAAA,EAAAA,SAAAA,EAAAA,EACAC,eAAAA,OAAAA,IAAiB,SACjBC,cAAAA,OAAAA,IAAgB,KACbpjC,EAAAA,GAAAA,EAAAA,CAXHwiC,eACAvjC,cACA8jC,eACAC,oBACAC,aACAjB,YACAM,eACAzmC,SACAqnC,WACAC,iBACAC,kBAK4CpoC,EAAAA,IAAAA,EAAAA,EAAAA,WAAS,MAAlDunC,EAAyCvnC,EAAAA,GAAvBqoC,EAAuBroC,EAAAA,GAI1CskC,GAAcgD,GAAgBC,EAC9Be,EAAkBH,KAAoBC,KAAmBH,GACzDM,EAAiBjE,GAAc8D,IAAkBE,EAcvD,OACI,gBAACvB,G,uUAAAA,CAAAA,CAAazC,WAAYA,EAAY0C,UAAWA,GAAehiC,GAC3DsiC,GACG,gBAACO,GAAAA,CACGb,UAAWA,EACX/lC,QAjBW,WACvBonC,GAAoB,GAEpBjrC,EAAIM,QAAQmpC,OAChB,EAcgBU,iBAAkBA,GAElB,gBAACJ,GAAAA,OAGT,gBAACQ,GAAAA,CACGH,aAAcA,EACd5jC,KAAM,OACNK,YAAaA,EACbkC,SAAU4hC,EACVS,OAtBO,WACVlB,IAEAlqC,EAAIM,QAAQQ,OAAOmqC,GAAoB,GAChD,EAmBYjrC,IAAKA,EACLqrC,IAAK,SACL1D,cAAauC,IAAiBC,EAC9BmB,SAAUpB,EAAgBC,EAAmB,GAAK,EAAK,EACvDhjC,aAAc,MACdrG,MAAO+pC,EACPZ,WAAYxmC,EAAS,GAAU,OAAPA,EAAO,kBAAkB,gBACjDmmC,UAAWA,EACXM,aAAcA,EACdC,iBAAkBA,EAClBoB,UAAWT,EACXN,cAAeO,GAAkBC,IAEpCE,GACG,gBAAC9hC,GAAYA,CACTghC,aAAcA,EACd5jC,KAAM,SACNjD,MAAO,QACPM,QAAS+mC,EACTtjC,UAAWujC,EACX9J,eAAct9B,EAAS,GAAU,OAAPA,EAAO,0BAA0B,wBAC3DmmC,UAAWA,EACXM,aAAcA,EACdC,iBAAkBA,GAElB,gBAACN,GAAAA,OAGRsB,GACG,gBAACb,GAAAA,CACGV,UAAWA,EACX7I,eAAct9B,EAAS,GAAU,OAAPA,EAAO,wBAAwB,uBAEzD,gBAACsmC,GAAAA,OAKrB,I,kqGAEJW,GAAaxwB,YAAc,eC3PpB,IAAMsxB,GAAqBppC,EAAAA,GAAO6B,IAAG,KAC1BoL,EAAQ+3B,MAIN/3B,EAAQq2B,OAGf+F,GAAkBrpC,EAAAA,GAAOspC,GAAE,KAErBjH,EACFJ,EAAUqB,MAITr2B,EAAQm5B,QAGpBmD,GAAcvpC,EAAAA,GAAOwpC,GAAGxnC,OAAuB,Y,MAAqB,CACtE,eADoD6lC,EAAAA,W,GAApC7nC,C,MAIPypC,IAA0BzpC,EAAAA,EAAAA,IAAOupC,GAAPvpC,CAAOupC,MAK1B,SAAC/jC,G,OAAmCA,EAAMqiC,U,IAGjD6B,GAAiB1pC,EAAAA,GAAOwpC,GAAE,MAO1BG,GAAa3pC,EAAAA,GAAO4pC,GAAE,KAEjB38B,EAAQm5B,OAGpBqD,GACkBx8B,EAAQm5B,OAEtBqD,IAMJI,GAA+B,OAExBC,GAAoB9pC,EAAAA,GAAO6B,IAAG,KAGnB+J,EAAM80B,MAAMC,mBACrBkJ,GAAmC58B,EAAQq2B,MAEhCuG,GAElBF,GACe18B,EAAQq2B,OAIlByG,GAAiB/pC,EAAAA,GAAOgqC,GAAE,KAGd/8B,EAAQs3B,QACnBt3B,EAAQm5B,OAAUn5B,EAAQs3B,QAAWt3B,EAAQm5B,OAAUn5B,EAAQq2B,OAGvEj8B,GAAcrH,EAAAA,GAAOuE,MAAK,KACRqH,EAAM80B,MAAMC,oBAI9BsJ,GAAkBjqC,EAAAA,GAAO6B,IAAG,KAIfwgC,EACFJ,EAAUqB,OAEH,SAAC99B,G,OAAyCA,EAAMiG,QAAUG,EAAMQ,QAAQC,MAAQ,a,GAC3FT,EAAMy0B,MAAMC,WAKG,SAAC96B,G,OACjBA,EAAMiG,QAAUG,EAAMQ,QAAQC,OAAQw0B,EAAAA,EAAAA,IAAe,MAAOj1B,EAAMQ,QAAQC,M,IAIhFu4B,IAAgB5kC,EAAAA,EAAAA,IAAO6kC,EAAAA,GAAP7kC,CAAmB6kC,MAI1B,SAACr/B,G,OAAyCA,EAAMiG,QAAU,EAAI,C,IAGvEy+B,GAAclqC,EAAAA,GAAO0H,MAAK,KAOhBuiC,IACG,SAACzkC,G,OAAqCA,EAAMwiC,aAAe,qBAAuB,G,IAClF,SAACxiC,G,OACRA,EAAMwiC,aAAe,oCAAsC,G,IAI1DmC,GAAkB9L,EAAAA,YAC3B,WAA2FzgC,G,IAAxFwgC,EAAAA,EAAAA,SAAUz3B,EAAAA,EAAAA,SAAUlF,EAAAA,EAAAA,QAAS2oC,EAAAA,EAAAA,WAAY3+B,EAAAA,EAAAA,QAASu8B,EAAAA,EAAAA,aAAcH,EAAAA,EAAAA,WAAeriC,EAAAA,GAAAA,EAAAA,CAA/E44B,WAAUz3B,WAAUlF,UAAS2oC,aAAY3+B,UAASu8B,eAAcH,e,OAC/D,gBAAC4B,GAAAA,GAAAA,CAAwBhoC,QAASA,EAASomC,WAAYA,QAAAA,EAAc,IAAQriC,GACzE,gBAAC6B,GAAAA,KACG,gBAAC6iC,GAAAA,CACGlC,aAAcA,EACd5jC,KAAM,QACNI,KAAM,cACN5G,IAAKA,EACLc,MAAO0rC,EACPzjC,SAAUA,EACV8E,QAASA,IAEb,gBAACw+B,GAAAA,CAAgBjC,aAAcA,EAAcv8B,QAASA,GACjD2yB,EAAS,IAAC,gBAACwG,GAAaA,CAACn5B,QAASA,M,IAMvD0+B,GAAgBryB,YAAc,kBAE9B,IAAMuyB,GAAahM,EAAAA,YACf,WAAuFzgC,G,IAApF+I,EAAAA,EAAAA,SAAU2jC,EAAAA,EAAAA,UAAWC,EAAAA,EAAAA,eAAgBC,EAAAA,EAAAA,WAAY/+B,EAAAA,EAAAA,QAASu8B,EAAAA,EAAAA,aAAiBxiC,EAAAA,GAAAA,EAAAA,CAA3EmB,WAAU2jC,YAAWC,iBAAgBC,aAAY/+B,UAASu8B,iB,OACzD,gBAAC8B,GAAAA,GAAAA,CAAkBlsC,IAAKA,GAAS4H,GAC7B,gBAACmkC,GAAAA,KACG,gBAACQ,GAAAA,CACGxjC,SAAUA,EACVyjC,WAAY,qBACZpC,aAAcA,EACdv8B,QAASA,EACTo8B,WAAY,wCACf,uBAGC2C,GACE,gBAACL,GAAAA,CACGxjC,SAAUA,EACVyjC,WAAY,SACZpC,aAAcA,EACdv8B,QAASA,EACTo8B,WAAY,4BACf,WAIH0C,GACE,gBAACJ,GAAAA,CACGxjC,SAAUA,EACVyjC,WAAY,aACZpC,aAAcA,EACdv8B,QAASA,EACTo8B,WAAY,gCACf,eAMT,gBAACkC,GAAAA,MACD,gBAACX,GAAAA,KACG,gBAACO,GAAAA,KACG,gBAACQ,GAAAA,CACGxjC,SAAUA,EACVyjC,WAAY,MACZpC,aAAcA,EACdv8B,QAASA,EACTo8B,WAAY,yBACf,UAGAyC,GACGzZ,OAAO4G,KAAK6S,GAAWpiC,KAAI,SAACuiC,GACxB,OACI,gBAACf,GAAAA,CAAe/lC,IAAK,eAA0B,OAAX8mC,IAChC,gBAACpB,GAAAA,KAAiBiB,EAAUG,GAAYtpC,OACxC,gBAACwoC,GAAAA,KACI9Y,OAAO4G,KAAK6S,EAAUG,GAAYC,QAAQxiC,KAAI,SAACyiC,GAC5C,OACI,gBAACR,GAAAA,CACGxjC,SAAUA,EACVyjC,WAAYE,EAAUG,GAAYC,OAAOC,GAAWrmC,GACpDX,IAAK,cAAwB,OAAVgnC,GACnB3C,aAAcA,EACdv8B,QAASA,EACTo8B,WAAY,qBAAsE,OAAjDyC,EAAUG,GAAYC,OAAOC,GAAWC,WAExEN,EAAUG,GAAYC,OAAOC,GAAWxpC,MAGrD,KAIhB,M,IAMxBkpC,GAAWvyB,YAAc,aAEzB,U,0+DCjOA,IAAM+yB,GAAmB7qC,EAAAA,GAAO6B,IAAG,MAQ7BwF,GAAcrH,EAAAA,GAAOuE,MAAK,MAQnBumC,GAAa9qC,EAAAA,GAAO6B,IAAG,KAGZ+J,EAAMC,KAAKk0B,iBAIP,SAACv6B,G,IAAaA,E,MAAH,GAA2BA,OAAT,QAAfA,EAAAA,EAAMulC,iBAANvlC,IAAAA,EAAAA,EAAmB,IAAoB,OAAfA,EAAMolC,SAAS,OAAI,GAC7Dh/B,EAAMC,KAAKk0B,gBAKN0C,EAAMC,YAG7BuH,GAAkBjqC,EAAAA,GAAO6B,IAAG,KAGjBogC,EAAUqB,MAERrB,EAAU+C,MAGLp5B,EAAMQ,QAAQC,OAIhC2+B,GAAQhrC,EAAAA,GAAO0H,MAAM1F,OAAuB,Y,MAAqB,CACnE,eADiD6lC,EAAAA,W,GAAvC7nC,C,MAIRkqC,IAAclqC,EAAAA,EAAAA,IAAOgrC,GAAPhrC,CAAOgrC,KAQfF,GAKIA,IACG,SAACtlC,G,OAAWA,EAAMwiC,aAAe,qBAAuB,G,IACxD,SAACxiC,G,OAAWA,EAAMwiC,aAAe,oCAAsC,G,GAI9E8C,IACgB,SAACtlC,G,IACYA,E,OAAzBA,EAAMylC,kBAA8B,QAAXzlC,EAAAA,EAAML,aAANK,IAAAA,OAAAA,EAAAA,EAAaiH,YAAajH,EAAML,MAAMsH,WAAab,EAAMy0B,MAAMC,S,IAI9F,SAAC96B,G,OACEA,EAAMylC,iBACP,mBAGwBr/B,OAFpBq+B,GAAgB,yEAE0B,OAAtBr+B,EAAMy0B,MAAMC,UAAU,yF,IAO7C4K,GAAqBlrC,EAAAA,GAAO6B,IAAG,MAUtCspC,GAAY9M,EAAAA,YACd,WAaIzgC,G,IAXIgtC,EAAAA,EAAAA,SACAQ,EAAAA,EAAAA,UACA9mC,EAAAA,EAAAA,GACAqC,EAAAA,EAAAA,SACA3B,EAAAA,EAAAA,UACAgjC,EAAAA,EAAAA,aACAqD,EAAAA,EAAAA,WACAxD,EAAAA,EAAAA,WACAkD,EAAAA,EAAAA,UACAE,EAAAA,EAAAA,gB,OAIJ,gBAACJ,GAAAA,CAAiBlM,eAAckJ,GAC5B,gBAACxgC,GAAWA,CAACs3B,eAAc,GAAc,OAAXkJ,EAAW,YACrC,gBAACqC,GAAWA,CACRrC,WAAY,GAAc,OAAXA,EAAW,WAC1BlhC,SAAUA,EACV3B,UAAWA,EACXZ,KAAM,QACNI,KAAM,aACN9F,MAAO4F,EACP1G,IAAKA,EACLoqC,aAAcA,EACdsD,eAAgBD,EAChBJ,gBAAiBA,IAErB,gBAACH,GAAAA,CAAW9C,aAAcA,EAAc4C,SAAUA,EAAUG,UAAWA,IACvE,gBAACd,GAAeA,KAAEmB,I,IAKlCD,GAAUrzB,YAAc,YAExB,U,kgICnJA,IAAMyzB,GAAmB,QAEnBC,GAAkBxrC,EAAAA,GAAO6B,IAAG,KACV+J,EAAMQ,QAAQC,OAMhCo/B,GAAuBzrC,EAAAA,GAAO6B,IAAG,KAGnBoL,EAAQs3B,QAAWt3B,EAAQs3B,SAIzCmH,IAAkB1rC,EAAAA,EAAAA,IAAOmrC,GAAPnrC,CAAgBmrC,MAIlCQ,GAAmB3rC,EAAAA,GAAOqN,GAAE,KACfg1B,EACFJ,EAAU+C,MAER/C,EAAUsC,QAGhB34B,EAAMC,KAAKm0B,WACXuL,IAGPK,GAAoB5rC,EAAAA,GAAOC,EAAC,KACfoiC,EACFJ,EAAUqB,MAERrB,EAAU+C,MACR/3B,EAAQs3B,QAEhB34B,EAAMC,KAAKm0B,WACXuL,IAGPxG,GAAgB/kC,EAAAA,GAAOspC,GAAE,KACZjH,EACFJ,EAAUqB,MAGd13B,EAAMC,KAAKm0B,WACN/yB,EAAQi3B,QACLj3B,EAAQi3B,QAChBqH,IAGP5B,GAAa3pC,EAAAA,GAAO4pC,GAAE,KAGTvH,EACFJ,EAAUqB,MAERrB,EAAUmE,OAKhBx6B,EAAMC,KAAKm0B,WACXuL,IAGPM,IAAa7rC,EAAAA,EAAAA,IAAO8rC,GAAAA,EAAP9rC,CAAW8rC,KAEV7+B,EAAQm5B,QAGtB2F,GAAwB/rC,EAAAA,GAAO+B,OAAM,KACxBsgC,EACFJ,EAAUqB,MAERrB,EAAUmE,OAKLx6B,EAAMQ,QAAQC,MACzBT,EAAMC,KAAK+zB,UAET3yB,EAAQq2B,MAASr2B,EAAQq2B,MAASr2B,EAAQq2B,OAKtC,SAAC99B,G,OAAsCA,EAAMwiC,aAAe,qBAAuB,G,IACnF,SAACxiC,G,OACRA,EAAMwiC,aAAe,oCAAsC,G,GAGzD6D,GACEjgC,EAAMQ,QAAQkzB,QAIxBoK,GAAiB1pC,EAAAA,GAAOwpC,GAAE,KACbnH,EACFJ,EAAUiC,QAERjC,EAAU+C,MAEhBp5B,EAAMC,KAAKm0B,WACJ/yB,EAAQi3B,SAetB8H,GAAY3N,EAAAA,YACd,WAYIzgC,G,IAVIgtC,EAAAA,EAAAA,SACAqB,EAAAA,EAAAA,WACA5nB,EAAAA,EAAAA,YACA6nB,EAAAA,EAAAA,YAAAA,EAAAA,EACAC,YAAAA,OAAAA,IAAc,KACd5B,EAAAA,EAAAA,eACAvC,EAAAA,EAAAA,aACA+C,EAAAA,EAAAA,UACGvlC,EAAAA,GAAAA,EAAAA,CARHolC,WACAqB,aACA5nB,cACA6nB,cACAC,cACA5B,iBACAvC,eACA+C,cAK8B1M,EAAAA,GAAAA,EAAAA,SAAe8N,GAAAA,GAA1CC,EAA2B/N,EAAAA,GAAhBgO,EAAgBhO,EAAAA,GAKlC,OACI,gBAACmN,G,uUAAAA,CAAAA,CAAgB7M,eAAe,uCAAuC/gC,IAAKA,GAAS4H,GACjF,gBAACimC,GAAAA,KACG,gBAACC,GAAAA,CAAgBd,SAAUA,EAAUG,UAAWA,IAChD,gBAACY,GAAAA,CACGhN,eAAc,8CAAuE,QAAzB2N,EAAAA,GAAAA,GAAaL,KAExEA,GAEL,gBAACL,GAAAA,KAAmBvnB,GACnB6nB,GAAeA,EAAY3sC,OAAS,GACjC,gCACI,gBAACwlC,GAAaA,KAAC,gBACf,gBAAC4E,GAAUA,KACNuC,EAAYhkC,KAAI,SAACsL,EAAc+4B,G,OAC5B,gBAAC7C,GAAcA,CAAC/lC,IAAK,cAAoB,OAAN4oC,IAAU/4B,E,OAK3D+2B,GACE,gBAACwB,GAAAA,CAAsB/D,aAAcA,EAAcvmC,QAzB3C,WACpB4qC,GAAcD,EAClB,GAwBoB,gBAACP,GAAAA,CAAWhN,KAAMuN,EAAYxgC,EAAMQ,QAAQkzB,OAAS1zB,EAAMC,KAAK8zB,cAC/DyM,EAAY,cAAgB,SAAS,gBAM9D,IAEJJ,GAAUl0B,YAAc,YAExB,U,okFC7JA,IAAM00B,GAAgB,CAClBC,SAAU,qBACVC,aAAc,0BACdC,OAAQ,SACRC,WAAY,aACZC,IAAK,OAGHC,IAAmB7J,EAAAA,EAAAA,IAASA,MAU5B8J,IAAmB/sC,EAAAA,EAAAA,IAAOqqC,GAAPrqC,CAAiBqqC,MAEpCmB,IAAkBxrC,EAAAA,EAAAA,IAAOgsC,GAAPhsC,CAAgBgsC,MAE3B,SAACxmC,G,OAA+BA,EAAMwnC,gBAAkB,QAAU,G,GAC9DF,GAAoBrK,EAAMC,YAGrCuK,GAAgBjtC,EAAAA,GAAO6B,IAAG,KACR+J,EAAMQ,QAAQC,MAEhBo2B,EAAMC,YACf,SAACl9B,G,OAA+BA,EAAMwnC,gBAAkB,QAAU,O,IAGzEE,GAAsBltC,EAAAA,GAAO6B,IAAG,KAKhCkrC,IAOAI,GAAsBntC,EAAAA,GAAO6B,IAAG,KACd+J,EAAMQ,QAAQC,OAIhC85B,GAAgBnmC,EAAAA,GAAOC,EAAC,KACXoiC,EACFJ,EAAUmE,OAEdx6B,EAAMC,KAAKq0B,iBAKXkN,GAAgB/O,EAAAA,YACzB,WAaIzgC,G,IA8BsByvC,EAzClB/C,EAAAA,EAAAA,UACAC,EAAAA,EAAAA,eACAC,EAAAA,EAAAA,WACAxC,EAAAA,EAAAA,aACA+C,EAAAA,EAAAA,UACAuC,EAAAA,EAAAA,cACAtG,EAAAA,EAAAA,mBACAC,EAAAA,EAAAA,oBACAgE,EAAAA,EAAAA,gBACGzlC,EAAAA,GAAAA,EAAAA,CATH8kC,YACAC,iBACAC,aACAxC,eACA+C,YACAuC,gBACAtG,qBACAC,sBACAgE,oBAK4C5M,EAAAA,GAAAA,EAAAA,SAAemO,GAAcK,KAAG,GAAzEU,EAAyClP,EAAAA,GAAvBmP,EAAuBnP,EAAAA,GACVA,EAAAA,GAAAA,EAAAA,SAAe,OAA9CoP,EAA+BpP,EAAAA,GAAlBqP,EAAkBrP,EAAAA,GACJA,EAAAA,GAAAA,EAAAA,SAAe,IAAE,GAA5CsP,EAA2BtP,EAAAA,GAAhBuP,EAAgBvP,EAAAA,GACsBA,EAAAA,GAAAA,EAAAA,UAAe,MAAhEwP,EAAiDxP,EAAAA,GAA3ByP,EAA2BzP,EAAAA,GAElD0P,EAAiB1P,EAAAA,OAA+B,MAEhD2P,EAAkB3P,EAAAA,OAA6B,MAG/C4P,EAAmB,GAGrBC,EAA8B,CAAC,GAebb,EAmDTE,KAlDiBf,GAAcK,IACpChc,OAAO4G,KAAK6S,GAAWpiC,KAAI,SAACuiC,G,OACxB5Z,OAAO4G,KAAK6S,EAAUG,GAAYC,QAAQxiC,KAAI,SAACyiC,G,OAC3C9Z,OAAO4G,KAAK6S,EAAUG,GAAYC,OAAOC,GAAWwD,QAAQjmC,KAAI,SAACkmC,GAC7D,IAAMC,EAAQ/D,EAAUG,GAAYC,OAAOC,GAAWwD,OAAOC,GAK7D,OAHIC,EAAMC,WACNJ,EAAyBG,GAEtBJ,EAAYvU,KAAK2U,EAC5B,G,OAQDhB,IAAsBb,GAAcC,SAC3CwB,EAAYvU,KACR,CACIv4B,MAAO,mBACPkjB,YACI,qFACJ6nB,YAAa,GACbC,aAAa,EACbvB,SAAU,aACVtmC,GAAI,aAER,CACInD,MAAO,eACPkjB,YAAa,iFACb6nB,YAAa,GACbC,aAAa,EACbvB,SAAU,cACVtmC,GAAI,WAGL+oC,IAAsBb,GAAcE,cAC3CuB,EAAYvU,KAAK,CACbv4B,MAAO,aACPkjB,YAAa,kFACb6nB,YAAa,GACbC,aAAa,EACbvB,SAAU,aACVtmC,GAAI,YACJF,KAAM,SAOlB,IAA0Ci6B,EAAAA,GAAAA,EAAAA,SAAe6P,GAAAA,GAAlDK,EAAmClQ,EAAAA,GAApBmQ,EAAoBnQ,EAAAA,GACIA,EAAAA,GAAAA,EAAAA,SAC1CxN,OAAO4d,UAAUC,eAAeC,KAAKT,EAAwB,aAD1DlB,EAAuC3O,EAAAA,GAAtBuQ,EAAsBvQ,EAAAA,GAKxCwQ,EAAwB,SAACR,GAvE3Bxd,OAAO4G,KAAK6S,GAAWpiC,KAAI,SAACuiC,G,OACxB5Z,OAAO4G,KAAK6S,EAAUG,GAAYC,QAAQxiC,KAAI,SAACyiC,G,OAC3C9Z,OAAO4G,KAAK6S,EAAUG,GAAYC,OAAOC,GAAWwD,QAAQjmC,KAAI,SAACkmC,GAE7D,OADc9D,EAAUG,GAAYC,OAAOC,GAAWwD,OAAOC,GAC/CE,UAAW,CAC7B,G,OAoERD,EAAMC,UAAW,EACjBE,EAAiBH,GACjBO,GAAmB,GACnBd,GAAwB,EAC5B,EAGMgB,EAAuB,SAAC9wC,EAAYmwC,GACtCL,GAAwB,GACxBN,EAAoBxvC,EAAMC,OAAOS,OAC7BV,EAAMC,OAAOS,QAAU8tC,GAAcK,KACrCa,EAAe,IAEnBE,EAAaO,GAEbH,EAAgB9vC,QAAQ6wC,UAAY,CACxC,EAgBMC,EAAef,EAAYhjB,QAAO,SAACP,GACrC,IAAMukB,EAAcxB,EAAYnqC,OAAO/D,OAAS,EAC1C2vC,IAAiBxkB,EAAKykB,cAAgBF,GACtCG,EAAwB1kB,EAAKvpB,MAAM+R,cAAcpU,SAAS2uC,GAChE,OAAO5c,OAAO4G,KAAK/M,GAAMkF,MAAK,W,OAAMsf,GAAgBE,C,GACxD,IAWA,OARA/Q,EAAAA,WAAgB,WACZ,IAAMkQ,EAAgBjwC,SAAS+L,cAAc,gBAA0C,OAA1B6jC,EAAuB5pC,GAAG,OAEnFiqC,IAAkBV,GAClBU,EAAcc,eAAe,CAAEC,SAAU,SAAUC,MAAO,SAAUxgC,OAAQ,WAEpF,IAGI,gCACI,gBAAC23B,GAAWA,KACR,gBAACC,GAAmBA,KAAE2G,EAAgB,eAAiB,aACvD,gBAAC1G,GAAkBA,KACf,gBAACsG,G,uUAAAA,CAAAA,CACGnC,UAAWA,EACX/C,aAAcA,EACdsC,UAAWA,EACXC,eAAgBA,EAChBC,WAAYA,EACZ5sC,IAAKA,GACD4H,GAEJ,gBAACskC,GAAsBtkC,EACnB,gBAACmkC,GAAUA,KACP,gBAACQ,GAAeA,CACZxjC,SAAU,SAACjD,G,OAAMorC,EAAqBprC,E,EACtC0mC,WAAYoC,GAAcC,SAC1BhhC,QAAS8hC,IAAqBf,GAAcC,SAC5CzE,aAAcA,EACdH,WAAY,wCACf,sBAGD,gBAACsC,GAAeA,CACZxjC,SAAU,SAACjD,G,OAAMorC,EAAqBprC,E,EACtC0mC,WAAYoC,GAAcE,aAC1BjhC,QAAS8hC,IAAqBf,GAAcE,aAC5C1E,aAAcA,EACdH,WAAY,6CACf,wBAGC2C,GACE,gBAACL,GAAeA,CACZxjC,SAAU,SAACjD,G,OAAMorC,EAAqBprC,E,EACtC0mC,WAAYoC,GAAcG,OAC1BlhC,QAAS8hC,IAAqBf,GAAcG,OAC5C3E,aAAcA,EACdH,WAAY,4BACf,WAIH0C,GACE,gBAACJ,GAAeA,CACZxjC,SAAU,SAACjD,G,OAAMorC,EAAqBprC,E,EACtC0mC,WAAYoC,GAAcI,WAC1BnhC,QAAS8hC,IAAqBf,GAAcI,WAC5C5E,aAAcA,EACdH,WAAY,gCACf,eAMT,gBAACkC,GAAcA,MAEf,gBAACX,GAAkBA,KACf,gBAACO,GAAUA,KACP,gBAACQ,GAAeA,CACZxjC,SAAU,SAACjD,G,OAAMorC,EAAqBprC,E,EACtC0mC,WAAYoC,GAAcK,IAC1BphC,QAAS8hC,IAAqBf,GAAcK,IAC5C7E,aAAcA,EACdH,WAAY,yBACf,iBAGAyC,GACGzZ,OAAO4G,KAAK6S,GAAWpiC,KAAI,SAACuiC,GACxB,OACI,gBAACf,GAAcA,CAAC/lC,IAAK,eAA0B,OAAX8mC,IAE5B,gBAACpB,GAAeA,KACXiB,EAAUG,GAAYtpC,OAG/B,gBAACwoC,GAAUA,KACN9Y,OAAO4G,KAAK6S,EAAUG,GAAYC,QAAQxiC,KACvC,SAACyiC,GACG,IAAM6E,EACFlF,EAAUG,GAAYC,OAAOC,GACjC,OACI,gBAACR,GAAeA,CACZxjC,SAAU,SAACjD,G,OACPorC,EAAqBprC,EAAG8rC,EAAMrB,O,EAElC/D,WAAYoF,EAAMlrC,GAClBX,IAAK,cAAwB,OAAVgnC,GACnBl/B,QAAS8hC,IAAqBiC,EAAMlrC,GACpC0jC,aAAcA,EACdH,WAAY,qBAA8B,OAAT2H,EAAMlrC,KAEtCkrC,EAAMruC,MAGnB,KAKpB,OAIhB,gBAAC8rC,GAAAA,CAAcD,gBAAiBA,GAC5B,gBAACG,GAAAA,KACG,gBAAC7E,GAAYA,CACT7jC,YAAa,kBACbujC,aAAcA,EACdO,aA9IL,SAACvqC,GACxB0vC,EAAe1vC,EAAMC,OAAOS,MAAMwU,eAClCs6B,EAAoBhB,GAAcK,IACtC,EA4IgCrE,kBAzIA,WAC5BkF,EAAe,IAEfK,EAAe7vC,QAAQmpC,OAC3B,EAsIgCoB,WAAYgF,EACZ7vC,IAAKmwC,KAGb,gBAAC7C,GAAkBA,CAACttC,IAAKowC,GACpBnd,OAAOC,OAAO0b,IAAe1tC,SAASyuC,GACnCyB,EAAazvC,QAAU,EACnByvC,EAAa9mC,KAAI,SAACmmC,GACd,OACI,gBAAClD,GAASA,CACNJ,UAAWA,EACXH,SAAUyD,EAAMzD,SAChBQ,UAAWiD,EAAMltC,MACjBmD,GAAI+pC,EAAM/pC,GACVqC,SAAU,W,OAAMkoC,EAAsBR,E,EACtC1qC,IAAK0qC,EAAM/pC,GACX0jC,aAAcA,EACdqD,WAAYgD,EAAMC,SAClBzG,WAAY,eAAwB,OAATwG,EAAM/pC,IACjC2mC,gBAAiBA,GAG7B,IAEA,gBAAC9E,GAAaA,KACToH,IAAqBf,GAAcG,OAC9B,oCACAY,IAAqBf,GAAcI,WACnC,gCACA,6BAAyC,OAAZa,EAAY,MAIvDE,EAAUzlC,KAAI,SAACmmC,GACX,OACI,gBAAClD,GAASA,CACNJ,UAAWA,EACXH,SAAUyD,EAAMzD,SAChBQ,UAAWiD,EAAMltC,MACjBmD,GAAI+pC,EAAM/pC,GACVqC,SAAU,W,OAAMkoC,EAAsBR,E,EACtC1qC,IAAK0qC,EAAM/pC,GACX0jC,aAAcA,EACdqD,WAAYgD,EAAMC,SAClBzG,WAAY,eAAwB,OAATwG,EAAM/pC,IACjC2mC,gBAAiBA,GAG7B,MAKX+B,GACG,gBAACxB,GAAeA,CACZwB,gBAAiBA,EACjBjC,UAAWA,EACXH,SAAU2D,EAAc3D,SACxBqB,WAAYsC,EAAcptC,MAC1B6mC,aAAcA,EACd3jB,YAAakqB,EAAclqB,YAC3B6nB,YAAaqC,EAAcrC,YAC3B3B,eAAgBA,MAKhC,gBAAC/F,GAAiBA,CAACqC,gBAAiBJ,GAAgBgJ,OAChD,gBAACzoC,GAAYA,CACT3F,OAAQ,8BACRI,QAASwlC,EACT/hC,UAAW8nC,GAAmBM,IAAkBiB,EAAcjqC,GAC9D5F,MAAO2W,KAAKiW,UAAUijB,IAErBjB,EAAgB,SAAW,OAEhC,gBAACtmC,GAAYA,CACT7B,MAAOmiC,EAAM9D,QACbniC,OAAQ,iCACRI,QAASulC,GACZ,YAOrB,I,ysEAEJoG,GAAct1B,YAAc,gBCvZ5B,IAAM43B,GAAa1vC,EAAAA,GAAO6B,IAAG,MACvB8nC,GAAa3pC,EAAAA,GAAO4pC,GAAE,MAEC,SAACpkC,G,OAAWA,EAAMmqC,aAAenqC,EAAMmqC,aAAgB,G,IAG9EC,GAAyB5vC,EAAAA,GAAO6B,IAAG,MAKnC6nC,GAAiB1pC,EAAAA,GAAOwpC,GAAE,MAK1BqG,GAAc7vC,EAAAA,GAAO+B,OAAM,KAEL6J,EAAMC,KAAK8zB,aACT,SAACn6B,G,OAAWA,EAAMsqC,SAAWlN,EAAO3C,WAAc,G,IACjD,SAACz6B,G,OAAWA,EAAMuqC,QAAUnN,EAAO3C,WAAc,G,GAClDr0B,EAAMC,KAAK8zB,aACpB,SAACn6B,G,OACdA,EAAM8oC,SAAW,aAAiC,OAApB1iC,EAAMQ,QAAQC,OAAU,aAAoC,OAAvBT,EAAMC,KAAK8zB,Y,GACzD/zB,EAAMC,KAAK8zB,YACvBsC,EAAUiC,QAGZj3B,EAAQi3B,QAAWj3B,EAAQm5B,OAClBx6B,EAAMQ,QAAQC,OACzB,SAAC7G,G,OAAWA,EAAM8oC,UAAY9oC,EAAML,MAAQK,EAAML,MAAMwH,KAAOf,EAAMC,KAAKm0B,U,IACzE,SAACx6B,G,OAAWA,EAAM8oC,SAAW,UAAY,S,IAO3B,SAAC9oC,G,OAAWA,EAAM8oC,SAAW1iC,EAAMQ,QAAQC,OAAQ47B,EAAAA,EAAAA,IAAO,GAAKr8B,EAAMQ,QAAQC,M,IAGnG4gC,GAAgBjtC,EAAAA,GAAO6B,IAAG,KACR+J,EAAMQ,QAAQC,MACdT,EAAMC,KAAK8zB,YACJiD,EAAO3C,WACL2C,EAAO3C,WACN2C,EAAO3C,WAC1BhzB,EAAQm5B,OAAUn5B,EAAQq2B,OAC1B,SAAC99B,G,OAAWA,EAAM8oC,SAAW,QAAU,M,IAGhD0B,GAAO3R,EAAAA,YAA4C,WAAyBzgC,G,IAAtBwgC,EAAAA,EAAAA,SAAa54B,EAAAA,GAAAA,EAAAA,CAAb44B,a,OACxD,gBAACsR,GAAAA,GAAAA,CAAW9xC,IAAKA,GAAS4H,GACrB44B,E,IAGT4R,GAAKl4B,YAAc,OAEnB,IAQMm4B,GAAW5R,EAAAA,YACb,WAAqEzgC,G,IAAlEwgC,EAAAA,EAAAA,SAAU0R,EAAAA,EAAAA,SAAUC,EAAAA,EAAAA,QAASzB,EAAAA,EAAAA,SAAUjtC,EAAAA,EAAAA,OAAQF,EAAAA,EAAAA,MAAUqE,EAAAA,GAAAA,EAAAA,CAAzD44B,WAAU0R,WAAUC,UAASzB,WAAUjtC,SAAQF,U,OAC9C,gBAAC0uC,GAAAA,GAAAA,CACGC,SAAUA,EACVC,QAASA,EACT3rC,KAAM,SACNu6B,eAAct9B,EACditC,SAAUA,EACVntC,MAAOA,EACPvD,IAAKA,GACD4H,GAEH44B,E,IAIb6R,GAASn4B,YAAc,WAEvB,IAAMo4B,GAAa7R,EAAAA,YAAkD,WAAmCzgC,G,IAAhCwgC,EAAAA,EAAAA,SAAUkQ,EAAAA,EAAAA,SAAa9oC,EAAAA,GAAAA,EAAAA,CAAvB44B,WAAUkQ,a,OAC9E,gBAACrB,GAAaA,GAAAA,CAACqB,SAAUA,EAAU1wC,IAAKA,GAAS4H,GAC5C44B,E,IAGT8R,GAAWp4B,YAAc,aAEzB,IC9IA,GD8IA,G,88CE7HA,IAAMq4B,GAA2BnwC,EAAAA,GAAOowC,MAAK,MAMvCC,GAAkBrwC,EAAAA,GAAOswC,GAAE,MAK3BC,GAAcvwC,EAAAA,GAAOswC,GAAE,MAGL,SAAC9qC,G,OAAUA,EAAMs+B,K,IAInC0M,GAAYxwC,EAAAA,GAAO6B,IAAG,KAItB0uC,GAAgCA,IAYhCE,GAAgBzwC,EAAAA,GAAOswC,GAAE,MAKlBI,GAAiF,Y,IAC1F5M,EAAAA,EAAAA,MACA6M,EAAAA,EAAAA,QACAtvC,EAAAA,EAAAA,OACAuvC,EAAAA,EAAAA,cACGprC,EAAAA,GAAAA,EAAAA,CAJHs+B,QACA6M,UACAtvC,SACAuvC,kBAGMC,EAAYhgB,OAAO4G,KAAKkZ,GAASzoC,KAAI,SAAC4oC,G,OACxC,gBAACC,KAAAA,CAAGptC,IAAKmtC,GACL,gBAACT,GAAAA,KAAiBS,GAClB,gBAACL,GAAAA,MACD,gBAACF,GAAAA,CACGzM,MAAO6M,EAAQG,GAAWE,KAC1BvqC,UAAWq9B,IAAU6M,EAAQG,GAAWE,KAAO,SAAW,GAC1DvvC,QAAS,W,OAAMmvC,EAAcD,EAAQG,GAAWE,K,GAEhD,gBAACR,GAAAA,OAEL,gBAACC,GAAAA,MACAE,EAAQG,GAAWG,OAAO/oC,KAAI,SAACgpC,EAAY3E,G,OACxC,gBAACgE,GAAAA,CACG5sC,IAAK4oC,EACLzI,MAAOoN,EACPzqC,UAAWq9B,IAAUoN,EAAa,SAAW,GAC7CzvC,QAAS,W,OAAMmvC,EAAcM,E,GAE7B,gBAACV,GAAAA,M,IAGT,gBAACC,GAAAA,MACAE,EAAQG,GAAWK,MAAMjpC,KAAI,SAACkpC,EAAM7E,G,OACjC,gBAACgE,GAAAA,CACGzM,MAAOsN,EACPztC,IAAK4oC,EACL9lC,UAAWq9B,IAAUsN,EAAO,SAAW,GACvC3vC,QAAS,W,OAAMmvC,EAAcQ,E,GAE7B,gBAACZ,GAAAA,M,QAKjB,OACI,gBAACL,G,uUAAAA,CAAAA,CAAyBxR,eAAc,GAAU,OAAPt9B,IAAcmE,GACrD,gBAAC6rC,QAAAA,KAAOR,GAGpB,E,+uBC7FA,IAAMS,GAAgCtxC,EAAAA,GAAO6B,IAAG,MAM1C0vC,GAAS,CACXC,WAAY,CACR76B,SAAU,WACV86B,QAAS,OACTC,cAAe,eAEnBhqC,MAAO,CACHkH,OAAQ,GACRD,MAAO,GACPgjC,OAAQ,oBACRC,YAAa,EACbC,aAAc,OACdC,UAAW,cAEfvtC,MAAO,CACHoS,SAAU,WACVo7B,IAAK,MACLC,KAAM,MACNrjC,MAAO,OACPsjC,cAAe,YACfrjC,OAAQ,OACRsjC,WAAY,OACZC,SAAU,SAILC,GAA0B/T,EAAAA,YACnC,WAAmCzgC,G,IAAhCy0C,EAAAA,EAAAA,IAAKC,EAAAA,EAAAA,IAAK3rC,EAAAA,EAAAA,SAAanB,EAAAA,GAAAA,EAAAA,CAAvB6sC,MAAKC,MAAK3rC,aACH4hC,EAAe,SAAChlC,GACdA,EAAK,KC5CU,SAAC8uC,GAC5B,GAAY,gBAARA,EACA,OAAO,EAGX,IAAME,EAA+B,MAA1BC,OAAOH,GAAK/yC,OAAO,GAAa,EAAI,EAC/C,OAAO+yC,EAAI9yC,SAAW,EAAIgzC,GAAMF,EAAI9yC,OAAS,EAAIgzC,IAAME,EAAAA,GAAAA,GAAUJ,GAAKK,SAC1E,CDsCgBC,CAAgBpvC,EAAK,OACjBoD,EAAS,CACL0rC,IAAK9uC,EAAK,KACVqvC,OAAQ,SAETrvC,EAAQ,GAAKA,EAAQ,GAAKA,EAAQ,IACzCoD,EAAS,CACLksC,EAAGtvC,EAAQ,IAAK+uC,aAAAA,EAAAA,EAAKO,GACrBC,EAAGvvC,EAAQ,IAAK+uC,aAAAA,EAAAA,EAAKQ,GACrBpW,EAAGn5B,EAAQ,IAAK+uC,aAAAA,EAAAA,EAAK5V,GACrBkW,OAAQ,OAGpB,EAEA,OACI,gBAACtB,G,uUAAAA,CAAAA,CAA8B1zC,IAAKA,GAAS4H,GACzC,gBAACutC,GAAAA,GAAaA,CACVC,MAAO,CAAEC,KAAM1B,GAAOC,WAAYjtC,MAAOgtC,GAAOhtC,MAAOmD,MAAO6pC,GAAO7pC,OACrEnD,MAAM,IACN7F,MAAO4zC,aAAAA,EAAAA,EAAKO,EACZlsC,SAAU4hC,IAEd,gBAACwK,GAAAA,GAAaA,CACVC,MAAO,CAAEC,KAAM1B,GAAOC,WAAYjtC,MAAOgtC,GAAOhtC,MAAOmD,MAAO6pC,GAAO7pC,OACrEnD,MAAM,IACN7F,MAAO4zC,aAAAA,EAAAA,EAAKQ,EACZnsC,SAAU4hC,IAEd,gBAACwK,GAAAA,GAAaA,CACVC,MAAO,CAAEC,KAAM1B,GAAOC,WAAYjtC,MAAOgtC,GAAOhtC,MAAOmD,MAAO6pC,GAAO7pC,OACrEnD,MAAM,IACN7F,MAAO4zC,aAAAA,EAAAA,EAAK5V,EACZ/1B,SAAU4hC,IAEd,gBAACwK,GAAAA,GAAaA,CACVC,MAAO,CAAEC,KAAM1B,GAAOC,WAAYjtC,MAAOgtC,GAAOhtC,MAAOmD,MAAO6pC,GAAO7pC,OACrEnD,MAAM,IACN7F,MAAO2zC,aAAAA,EAAAA,EAAKa,QAAQ,IAAK,IACzBvsC,SAAU4hC,IAI1B,I,2jBAGJ6J,GAAwBt6B,YAAc,0BEzFtC,IAAMq7B,GAAiCnzC,EAAAA,GAAO6B,IAAG,MAa3CuxC,GAA2B,WAC7B,OAAO,gBAACD,GAAAA,KACZ,EAEME,GAAuCrzC,EAAAA,GAAO6B,IAAG,MAIrC,Y,IAAGyxC,EAAAA,EAAAA,IAEb,QADiBA,aAAAA,EAAAA,EAAKC,IAAK,GAAK,GACf,uBAAyB,sBAC9C,IAIEC,GAAiC,Y,IAAGF,EAAAA,EAAAA,I,OACtC,gBAACD,GAAAA,CAAqCC,IAAKA,G,klECf/C,IAAMG,GAAezzC,EAAAA,GAAO6B,IAAG,MAGb,SAAC2D,G,OAAUA,EAAMs+B,K,IAG7B4P,GAAY1zC,EAAAA,GAAO6B,IAAG,MAQtB8xC,GAAmB3zC,EAAAA,GAAO6B,IAAG,MAQ7B+xC,GAAW5zC,EAAAA,GAAO6B,IAAG,MAKrBgyC,GAA0B7zC,EAAAA,GAAO6B,IAAG,MAKpCiyC,GAAoBzV,EAAAA,YACtB,WAAwCzgC,G,IAArCyD,EAAAA,EAAAA,OAAQyiC,EAAAA,EAAAA,MAAOn9B,EAAAA,EAAAA,SAAanB,EAAAA,GAAAA,EAAAA,CAA5BnE,SAAQyiC,QAAOn9B,aACd,OACI,gBAACktC,GAAAA,GAAAA,GAAAA,CAAwBj2C,IAAKA,GAAS4H,GAAAA,CAAOm5B,eAAct9B,IACxD,gBAACsyC,GAAAA,KAEG,gBAACI,GAAAA,GAAUA,GAAAA,GAAAA,CAAAA,EAAKvuC,GAAAA,CAAOs+B,MAAOA,EAAOkQ,QAASR,GAAgC7sC,SAAUA,MAE5F,gBAAC+sC,GAAAA,KACG,gBAACO,GAAAA,GAAGA,GAAAA,GAAAA,CAAAA,EACIzuC,GAAAA,CACJ0uC,UAAU,WACVpQ,MAAOA,EACPkQ,QAASZ,GACTzsC,SAAUA,MAGlB,gBAACitC,GAAAA,KACG,gBAACxB,GAAuBA,GAAAA,GAAAA,CAAAA,EAAK5sC,GAAAA,CAAOmB,SAAUA,KAC9C,gBAAC8sC,GAAAA,CAAa3P,MAAOt+B,EAAM6sC,IAAK1T,eAAc,GAAU,OAAPt9B,EAAO,mBAIxE,IAGJyyC,GAAkBh8B,YAAc,oBAEzB,IAAMq8B,IAAkBC,EAAAA,GAAAA,IAAaN,I,q0OChD5C,IAAMO,GAAiB,CACnB,CACI/vC,GAAI,QACJnD,MAAO,WACPmzC,YAAa,WACbr+B,QAAS,0BAEb,CACI3R,GAAI,QACJnD,MAAO,OACPmzC,YAAa,OACbr+B,QAAS,sBAEb,CACI3R,GAAI,QACJnD,MAAO,SACPmzC,YAAa,GACbr+B,QAAS,wBAIX25B,IAAyB5vC,EAAAA,EAAAA,KP2DN,Y,IAAGo+B,EAAAA,EAAAA,SAAa54B,EAAAA,GAAAA,EAAAA,CAAb44B,a,OACxB,gBAACwR,GAA2BpqC,EAAQ44B,E,GO5DTp+B,CAAuBu0C,MAIhDC,IAAgBx0C,EAAAA,EAAAA,KP0DN,Y,IAAGo+B,EAAAA,EAAAA,SAAa54B,EAAAA,GAAAA,EAAAA,CAAb44B,a,OAAuC,gBAACuL,GAAenkC,EAAQ44B,E,GO1D5Dp+B,CAAcy0C,MAI9B/K,IAAiB1pC,EAAAA,EAAAA,KPuDH,Y,IAAGo+B,EAAAA,EAAAA,SAAa54B,EAAAA,GAAAA,EAAAA,CAAb44B,a,OACnB,gBAACsL,GAAmBlkC,EAAQ44B,E,GOxDTp+B,CAAkB00C,MAUnCC,IAAiB30C,EAAAA,EAAAA,IAAOiwC,GAAPjwC,CAAeiwC,MAIhC2E,IAAmB50C,EAAAA,EAAAA,IAAOkwC,GAAPlwC,CAAiBkwC,KAEdtkC,EAAMC,KAAK8zB,aAKjCkV,GAAoB70C,EAAAA,GAAO6B,IAAG,KAEZ+J,EAAMQ,QAAQC,MACdT,EAAMC,KAAK8zB,aAItBmV,GAAczW,EAAAA,YACvB,WAWIzgC,G,IATIkmC,EAAAA,EAAAA,MACAiR,EAAAA,EAAAA,SACAC,EAAAA,EAAAA,eAAAA,EAAAA,EACAC,YAAAA,OAAAA,IAAc,UACd5zC,OAAAA,OAAAA,IAAS,mBACT6zC,EAAAA,EAAAA,cACAC,EAAAA,EAAAA,YACG3vC,EAAAA,GAAAA,EAAAA,CAPHs+B,QACAiR,WACAC,iBACAC,cACA5zC,SACA6zC,gBACAC,gBAK0B30C,EAAAA,IAAAA,EAAAA,EAAAA,UAAS6zC,IAAAA,GAAhCe,EAAuB50C,EAAAA,GAAd60C,EAAc70C,EAAAA,GACEA,EAAAA,IAAAA,EAAAA,EAAAA,WAE3By0C,QAAAA,EAAeG,EAAQ71C,OAAS,GAAK61C,EAAQ71C,OAAS01C,EAAcG,EAAQ71C,OAAS,MAFnF2pC,EAAyB1oC,EAAAA,GAAf80C,EAAe90C,EAAAA,GAIQA,EAAAA,IAAAA,EAAAA,EAAAA,UAASsjC,GAAAA,GAA1CyR,EAAiC/0C,EAAAA,GAAnBg1C,EAAmBh1C,EAAAA,GAElCi1C,EAAgBV,QAAAA,EAAYW,GAAAA,EAO5BC,EAAoB,SAAC7R,GACvB,IAAMuO,EAAMvO,EAAMuO,IAAMvO,EAAMuO,IAAMvO,EAEpC0R,EAAgBnD,GAChB6C,EAAc7C,EAClB,EA+BA,OA7BAv0C,EAAAA,EAAAA,YAAU,WACN,IACU83C,EAOAC,EACAC,EARAF,EAAoB,CACtBtxC,GAAI,QACJnD,MAAO,kBACPmzC,YAAaU,QAAAA,EAAkB,GAC/B/+B,QAAS,yBAGP4/B,EAAuBb,GAAqC,aAAnBA,EACzCc,GAA0BV,EAAQltC,KAAI,SAAC6tC,G,OAAMA,EAAEzxC,E,IAAIxF,SAAS82C,EAAkBtxC,IAEhFuxC,GACAC,GACAjlB,OAAO4G,KAAKge,GAAe32C,SAASk2C,KAEpCK,EAAW,CAACO,GAAD,OAAoB,GAAGvB,MAClCiB,EAAYL,QAAAA,EAAe,GAKvC,GAAG,CAACD,EAAgBS,EAAeR,EAAaG,KAEhDt3C,EAAAA,EAAAA,YAAU,WAENw3C,GAAaL,QAAAA,EAAeG,EAAQ71C,OAAS,GAAK61C,EAAQ71C,OAAS01C,EAAcG,EAAQ71C,OAAS,EACtG,GAAG,CAAC01C,EAAaG,IAGb,gBAACP,GAAAA,G,uUAAAA,CAAAA,CAAAA,EAAsBrvC,GAAAA,CAAO5H,IAAKA,EAAK+gC,eAAc,GAAU,OAAPt9B,KACrD,gBAAC2uC,GAAIA,KACD,gBAACJ,GAAsBA,KACnB,gBAAC4E,GAAAA,KACIY,EAAQltC,KAAI,SAAC2uB,EAAU0V,G,OACpB,gBAAC7C,GAAcA,CAAC/lC,IAAK,OAAc,OAAPkzB,EAAIvyB,KAC5B,gBAACqwC,GAAAA,CACG7E,SAAoB,IAAVvD,EACVwD,QAASxD,IAAU6I,EAAQ71C,OAAS,EACpC8B,OAAQ,GAAsBirC,OAAnBjrC,EAAO,cAAkD,QAAtCirC,EAAAA,GAAAA,GAAazV,EAAI11B,MAAM+R,gBACrDo7B,SAAUpF,IAAaqD,EACvB9qC,QAAS,W,OApDrC6zC,EADqBU,EAqDsCzJ,QAnD3D4I,GAAeA,EAAYa,IAFP,IAACA,C,EAsDO70C,MAAO01B,EAAI11B,OAEV01B,EAAI11B,OAAS,O,MAMjCi0C,EAAQltC,KAAI,SAAC2uB,EAAU0V,G,OACpB,gBAACqI,GAAAA,CAAiBtG,SAAUpF,IAAaqD,EAAO5oC,IAAK,WAAkB,OAAPkzB,EAAIvyB,KACjD,WAAduyB,EAAI11B,MACD,gBAACgzC,GAAeA,CACZrQ,MAAOyR,EACPl0C,OAAQ,GAAU,OAAPA,EAAO,WAClBsF,SAAUgvC,IAGd,gBAACjF,GAAkBA,CACf5M,MAAOyR,EACP5E,QAAS8E,EAAc5e,EAAIyd,aAC3BjzC,OAAQ,GAAU,OAAPA,EAAO,YAClBuvC,cAAe+E,I,KAQ/C,IAGJb,GAAYh9B,YAAc,c,+5EChL1B,IAAMm+B,GAASj2C,EAAAA,GAAO6B,IAAG,MAEZ,Y,IAAG8M,EAAAA,EAAAA,M,MAAY,GAAS,OAANA,EAAM,K,IACvB,Y,IAAGC,EAAAA,EAAAA,O,MAAa,GAAU,OAAPA,EAAO,K,IAGhB,SAACpJ,G,OAAUA,EAAMs+B,K,IAInC+Q,IAAoB70C,EAAAA,EAAAA,IAAO80C,GAAP90C,CAAkB80C,MAKtCoB,GAA2Bl2C,EAAAA,GAAO6B,IAAG,MAE9Bs0C,GAAqB9X,EAAAA,YAC9B,WAYIzgC,G,IAVIkmC,EAAAA,EAAAA,MACAkR,EAAAA,EAAAA,eACAD,EAAAA,EAAAA,SAAAA,EAAAA,EACAxY,OAAAA,OAAAA,IAAS,SACT5tB,MAAAA,OAAAA,IAAQ,WACRC,OAAAA,OAAAA,IAAS,WACTvN,OAAAA,OAAAA,IAAS,2BACT6zC,EAAAA,EAAAA,cACG1vC,EAAAA,GAAAA,EAAAA,CARHs+B,QACAkR,iBACAD,WACAxY,SACA5tB,QACAC,SACAvN,SACA6zC,kBAKEkB,EAAiB/X,EAAAA,SACjBgY,EAAYhY,EAAAA,SAC4B79B,EAAAA,IAAAA,EAAAA,EAAAA,UAAS+7B,GAAAA,GAAhD+Z,EAAuC91C,EAAAA,GAAtB+1C,EAAsB/1C,EAAAA,GACNA,EAAAA,IAAAA,EAAAA,EAAAA,UAASsjC,GAAAA,GAA1CyR,EAAiC/0C,EAAAA,GAAnBg1C,EAAmBh1C,EAAAA,GACJA,EAAAA,IAAAA,EAAAA,EAAAA,UAAS,MAAtCg2C,EAA6Bh2C,EAAAA,GAAjBi2C,EAAiBj2C,EAAAA,GAE9Bk2C,GAAoBC,EAAAA,EAAAA,cACtB,W,OAAMJ,GAAoBD,E,GAC1B,CAACA,EAAiBC,IAiCtB,OAvBAz4C,EAAAA,EAAAA,YAAU,W,IACG84C,EAAT,SAA2BlzC,GACD4yC,GAA6B,WAAV5yC,EAAEC,KAC1B4yC,GAAmB,GAEZj4C,SAASu4C,gBAAkBR,EAAUn4C,SACP,MAAVwF,EAAEC,KAC1B+yC,GACxB,EAIA,OAFAp4C,SAASE,iBAAiB,UAAWo4C,GAE9B,WACHt4C,SAASC,oBAAoB,UAAWq4C,EAC5C,CACJ,GAAG,CAACN,EAAiBC,EAAoBG,KAEzC54C,EAAAA,EAAAA,YAAU,WACN03C,EAAgB1R,EACpB,GAAG,CAACA,KAEJnmC,EAAAA,GAAAA,GAAgBy4C,EAAgBM,GAG5B,gBAACR,GAAAA,G,uUAAAA,CAAAA,CAAAA,EAA6B1wC,GAAAA,CAAO5H,IAAKA,IACtC,gBAACq4C,GAAAA,CACGnS,MAAOyR,EACP5mC,MAAOA,EACPC,OAAQA,EACRs6B,SAAU,EACVtrC,IAAKy4C,EACL50C,QAASi1C,EACT/X,eAAc,GAAU,OAAPt9B,EAAO,kBAE3Bi1C,GACG,gBAACzB,GAAiBA,CACd/Q,MAAOyR,EACPP,eAAgBA,EAChBD,SAAUA,EACVn3C,IAAKw4C,EACL/0C,OAAQ,GAAU,OAAPA,EAAO,kBAClB4zC,YAAauB,EACbrB,YAAasB,EACbvB,cAlDU,SAACpR,GACvB,IAAMuO,EAAMvO,EAAMuO,IAAMvO,EAAMuO,IAAMvO,EAEpC0R,EAAgBnD,GAChB6C,EAAc7C,EAClB,IAkDJ,I,4+FAGJ8D,GAAmBr+B,YAAc,qBC7E1B,IAAMg/B,GAAoB92C,EAAAA,GAAO6B,IAAG,KACzBoL,EAAQ+3B,MAIN/3B,EAAQq2B,OAGfyT,GAAiB/2C,EAAAA,GAAOspC,GAAE,KAEpBjH,EACFJ,EAAUqB,MAITr2B,EAAQm5B,QAGbsD,GAAiB1pC,EAAAA,GAAOwpC,GAAE,MAO1BG,GAAa3pC,EAAAA,GAAO4pC,GAAE,KAEjB38B,EAAQm5B,OAGpBsD,GACkBz8B,EAAQm5B,OAEtBsD,IAQGsN,GAAmBh3C,EAAAA,GAAO6B,IAAG,KAGlB+J,EAAM80B,MAAMC,mBALA,OAMa1zB,EAAQq2B,MAIjDqG,GACe18B,EAAQq2B,OAIlByG,GAAiB/pC,EAAAA,GAAOgqC,GAAE,KAGd/8B,EAAQs3B,QACnBt3B,EAAQm5B,OAAUn5B,EAAQs3B,QAAWt3B,EAAQm5B,OAAUn5B,EAAQq2B,OAGvEj8B,GAAcrH,EAAAA,GAAOuE,MAAK,KACRqH,EAAM80B,MAAMC,oBAI9BsJ,GAAkBjqC,EAAAA,GAAO6B,IAAG,KAIfwgC,EACFJ,EAAUqB,OAEH,SAAC99B,G,OAAyCA,EAAMiG,QAAUG,EAAMQ,QAAQC,MAAQ,a,GAC3FT,EAAMy0B,MAAMC,WAKG,SAAC96B,G,OACjBA,EAAMiG,QAAUG,EAAMQ,QAAQC,OAAQw0B,EAAAA,EAAAA,IAAe,MAAOj1B,EAAMQ,QAAQC,M,IAIhFu4B,IAAgB5kC,EAAAA,EAAAA,IAAO6kC,EAAAA,GAAP7kC,CAAmB6kC,MAI1B,SAACr/B,G,OAAyCA,EAAMiG,QAAU,EAAI,C,IAGvEu/B,GAAQhrC,EAAAA,GAAO0H,MAAM1F,OAAuB,Y,MAAqB,CACnE,eADiD6lC,EAAAA,W,GAAvC7nC,C,MAIRkqC,IAAclqC,EAAAA,EAAAA,IAAOgrC,GAAPhrC,CAAYgrC,KAOhBf,IACG,SAACzkC,G,OAAqCA,EAAMwiC,aAAe,qBAAuB,G,IAClF,SAACxiC,G,OACRA,EAAMwiC,aAAe,oCAAsC,G,IAI1DmC,GAAkB9L,EAAAA,YAC3B,WAA2FzgC,G,IAAxFwgC,EAAAA,EAAAA,SAAUz3B,EAAAA,EAAAA,SAAUlF,EAAAA,EAAAA,QAAS2oC,EAAAA,EAAAA,WAAY3+B,EAAAA,EAAAA,QAASu8B,EAAAA,EAAAA,aAAcH,EAAAA,EAAAA,WAAeriC,EAAAA,GAAAA,EAAAA,CAA/E44B,WAAUz3B,WAAUlF,UAAS2oC,aAAY3+B,UAASu8B,eAAcH,e,OAC/D,gBAAC6B,GAAcA,GAAAA,CAACjoC,QAASA,GAAa+D,GAClC,gBAAC6B,GAAWA,KACR,gBAAC6iC,GAAWA,CACRlC,aAAcA,EACd5jC,KAAM,QACNI,KAAM,aACN5G,IAAKA,EACLc,MAAO0rC,EACPzjC,SAAUA,EACV8E,QAASA,EACTo8B,WAAYA,IAEhB,gBAACoC,GAAeA,CAACjC,aAAcA,EAAcv8B,QAASA,GACjD2yB,EAAS,IAAC,gBAACwG,GAAaA,CAACn5B,QAASA,M,IAMvD0+B,GAAgBryB,YAAc,kBAE9B,IAAMm/B,GAAY5Y,EAAAA,YACd,WAAsFzgC,G,IAAnF+I,EAAAA,EAAAA,SAAUuwC,EAAAA,EAAAA,SAAU3M,EAAAA,EAAAA,eAAgBC,EAAAA,EAAAA,WAAY/+B,EAAAA,EAAAA,QAASu8B,EAAAA,EAAAA,aAAiBxiC,EAAAA,GAAAA,EAAAA,CAA1EmB,WAAUuwC,WAAU3M,iBAAgBC,aAAY/+B,UAASu8B,iB,OACxD,gBAACgP,GAAAA,GAAAA,CAAiBp5C,IAAKA,GAAS4H,GAC5B,gBAACmkC,GAAUA,KACP,gBAACQ,GAAeA,CACZxjC,SAAUA,EACVyjC,WAAY,oBACZpC,aAAcA,EACdv8B,QAASA,EACTo8B,WAAY,sCACf,sBAGC2C,GACE,gBAACL,GAAeA,CACZxjC,SAAUA,EACVyjC,WAAY,SACZpC,aAAcA,EACdv8B,QAASA,EACTo8B,WAAY,2BACf,WAIH0C,GACE,gBAACJ,GAAeA,CACZxjC,SAAUA,EACVyjC,WAAY,aACZpC,aAAcA,EACdv8B,QAASA,EACTo8B,WAAY,+BACf,eAMT,gBAACkC,GAAcA,MACf,gBAAC+M,GAAAA,KACG,gBAACnN,GAAUA,KACP,gBAACQ,GAAeA,CACZxjC,SAAUA,EACVyjC,WAAY,MACZpC,aAAcA,EACdv8B,QAASA,EACTo8B,WAAY,wBACf,UAGAqP,GACGrmB,OAAO4G,KAAKyf,GAAUhvC,KAAI,SAACuiC,GACvB,OACI,gBAACf,GAAcA,CAAC/lC,IAAK,eAA0B,OAAX8mC,IAChC,gBAACsM,GAAAA,KAAgBG,EAASzM,GAAYtpC,OACtC,gBAACwoC,GAAUA,KACN9Y,OAAO4G,KAAKyf,EAASzM,GAAYC,QAAQxiC,KAAI,SAACyiC,GAC3C,OACI,gBAACR,GAAeA,CACZxjC,SAAUA,EACVyjC,WAAY8M,EAASzM,GAAYC,OAAOC,GAAWrmC,GACnDX,IAAK,cAAwB,OAAVgnC,GACnB3C,aAAcA,EACdv8B,QAASA,EACTo8B,WAAY,oBAAoE,OAAhDqP,EAASzM,GAAYC,OAAOC,GAAWC,WAEtEsM,EAASzM,GAAYC,OAAOC,GAAWxpC,MAGpD,KAIhB,M,IAMxB81C,GAAUn/B,YAAc,YAExB,U,ozECvNA,I,GAAMq/B,GAAqBn3C,EAAAA,GAAO6B,IAAG,MAQ/Bu1C,GAAQp3C,EAAAA,GAAOuE,MAAMvC,OAAuB,Y,MAAqB,CACnE,eADiD6lC,EAAAA,W,GAAvC7nC,C,MAIRqH,IAAcrH,EAAAA,EAAAA,IAAOo3C,GAAPp3C,CAAOo3C,MAQdtM,GAAa9qC,EAAAA,GAAO6B,IAAG,KAGZ+J,EAAMC,KAAKk0B,iBAIP,SAACv6B,G,IAAaA,E,MAAH,GAA2BA,OAAT,QAAfA,EAAAA,EAAMulC,iBAANvlC,IAAAA,EAAAA,EAAmB,IAAoB,OAAfA,EAAMolC,SAAS,OAAI,GAC7Dh/B,EAAMC,KAAKk0B,gBAKN0C,EAAMC,YAG7BuH,GAAkBjqC,EAAAA,GAAO6B,IAAG,KAOjBogC,EAAUqB,MAERrB,EAAU+C,MAGLp5B,EAAMQ,QAAQC,OAIhCgrC,GAAgBr3C,EAAAA,GAAO6B,IAAG,MAS1BqoC,GAAclqC,EAAAA,GAAO0H,MAAK,KAQpBojC,GAKIA,IACG,SAACtlC,G,OAAWA,EAAMwiC,aAAe,qBAAuB,G,IACxD,SAACxiC,G,OAAWA,EAAMwiC,aAAe,oCAAsC,G,GAI9E8C,IACgB,SAACtlC,G,IACYA,E,OAAzBA,EAAMylC,kBAA8B,QAAXzlC,EAAAA,EAAML,aAANK,IAAAA,OAAAA,EAAAA,EAAaiH,YAAajH,EAAML,MAAMsH,WAAab,EAAMy0B,MAAMC,S,IAI9F,SAAC96B,G,OACEA,EAAMylC,iBACP,mBAGwBr/B,OAFpBq+B,GAAgB,yEAMhBA,OAJoBr+B,EAAMy0B,MAAMC,UAAU,8GAIvB+W,OAAnBpN,GAAgB,KACoBr+B,OADjByrC,GAAc,0DACyB,OAAtBzrC,EAAMy0B,MAAMC,UAAU,sD,IAM7DgX,GAA2Bt3C,EAAAA,GAAO6B,IAAG,MAUrC01C,GAAclZ,EAAAA,YACvB,WAaIzgC,G,IAXIgtC,EAAAA,EAAAA,SACAQ,EAAAA,EAAAA,UACA9mC,EAAAA,EAAAA,GACAqC,EAAAA,EAAAA,SACA3B,EAAAA,EAAAA,UACAgjC,EAAAA,EAAAA,aACAqD,EAAAA,EAAAA,WACAxD,EAAAA,EAAAA,WACAkD,EAAAA,EAAAA,UACAE,EAAAA,EAAAA,gB,OAIJ,gBAACkM,GAAAA,CAAmBxY,eAAckJ,GAC9B,gBAACxgC,GAAWA,CAAClG,MAAOiqC,EAAWvD,WAAY,GAAc,OAAXA,EAAW,YACrD,gBAACqC,GAAWA,CACRvL,eAAc,GAAc,OAAXkJ,EAAW,WAC5BlhC,SAAUA,EACV3B,UAAWA,EACXZ,KAAM,QACNI,KAAM,eACN9F,MAAO4F,EACP1G,IAAKA,EACLoqC,aAAcA,EACdsD,eAAgBD,EAChBJ,gBAAiBA,IAErB,gBAACH,GAAUA,CAAC9C,aAAcA,EAAc4C,SAAUA,EAAUG,UAAWA,IACvE,gBAACd,GAAeA,KACXmB,EACD,gBAACiM,GAAAA,Q,g8GAMrBE,GAAYz/B,YAAc,c,SCpJd0/B,G,iCAAAA,KAAAA,GAAAA,CAAAA,IAiCZ,IAAMC,IAAkBz3C,EAAAA,EAAAA,IAAOi3C,GAAPj3C,CAAgBi3C,MAElChK,GAAgBjtC,EAAAA,GAAO6B,IAAG,KACR+J,EAAMQ,QAAQC,MAEhBo2B,EAAMC,YACf,SAACl9B,G,OAA+BA,EAAMmJ,MAAQnJ,EAAMmJ,MAAQ,O,IAGnE+oC,GAAuB13C,EAAAA,GAAO6B,IAAG,KAKjC41C,IAOAtK,GAAsBntC,EAAAA,GAAO6B,IAAG,KACd+J,EAAMQ,QAAQC,OAIhC85B,GAAgBnmC,EAAAA,GAAOC,EAAC,KACXoiC,EACFJ,EAAUmE,OAEdx6B,EAAMC,KAAKq0B,iBAgCXyX,GAAiBtZ,EAAAA,YAC1B,WAcIzgC,G,QAZIs5C,EAAAA,EAAAA,SACAU,EAAAA,EAAAA,SACAC,EAAAA,EAAAA,eACAtN,EAAAA,EAAAA,eACAC,EAAAA,EAAAA,WACAxC,EAAAA,EAAAA,aACA+C,EAAAA,EAAAA,UACA+M,EAAAA,EAAAA,aACAC,EAAAA,EAAAA,cACA9M,EAAAA,EAAAA,gBACGzlC,EAAAA,GAAAA,EAAAA,CAVH0xC,WACAU,WACAC,iBACAtN,iBACAC,aACAxC,eACA+C,YACA+M,eACAC,gBACA9M,oBAK4C5M,EAAAA,GAAAA,EAAAA,SAAe,UAAxDkP,EAAyClP,EAAAA,GAAvBmP,EAAuBnP,EAAAA,GACVA,EAAAA,GAAAA,EAAAA,SAAe,OAA9CoP,EAA+BpP,EAAAA,GAAlBqP,EAAkBrP,EAAAA,GACNA,EAAAA,GAAAA,EAAAA,SAAe,IAAE,GAA1C2Z,EAAyB3Z,EAAAA,GAAf4Z,EAAe5Z,EAAAA,GACwBA,EAAAA,GAAAA,EAAAA,UAAe,MAAhEwP,EAAiDxP,EAAAA,GAA3ByP,EAA2BzP,EAAAA,GAElD0P,EAAiB1P,EAAAA,OAA+B,MAEhD6Z,EAAiB7Z,EAAAA,OAA6B,MAG9C8Z,EAAa9Z,EAAAA,SAAc,WAC7B,OAtDQ,SAAC6Y,GAEjB,IADA,IAAMkB,EAAM,GACHC,EAAK,EAAGA,EAAKnB,EAAS33C,OAAQ84C,IACnC,IAAK,IAAIC,EAAK,EAAGA,EAAKpB,EAASmB,GAAI3N,OAAOnrC,OAAQ+4C,IAC9C,IAAK,IAAIC,EAAK,EAAGA,EAAKrB,EAASmB,GAAI3N,OAAO4N,GAAIE,MAAMj5C,OAAQg5C,IAAM,CAC9D,IAAM7tB,EAAOwsB,EAASmB,GAAI3N,OAAO4N,GAAIE,MAAMD,GAC3CH,EAAI1e,KAAKhP,EACb,CAGR,OAAO0tB,CACX,CA2CmBK,CAAYvB,EACvB,GAAG,CAACA,IAEsC7Y,EAAAA,GAAAA,EAAAA,SAA+B,IAAE,GAApEqa,EAAmCra,EAAAA,GAApBsa,EAAoBta,EAAAA,GAepCua,G,EAA0B,SAAOluB,G,mDAInC,OAhBqB,WACrB,IAAK,IAAI2tB,EAAK,EAAGA,EAAKnB,EAAS33C,OAAQ84C,IACnC,IAAK,IAAIC,EAAK,EAAGA,EAAKpB,EAASmB,GAAI3N,OAAOnrC,OAAQ+4C,IAC9C,IAAK,IAAIC,EAAK,EAAGA,EAAKrB,EAASmB,GAAI3N,OAAO4N,GAAIE,MAAMj5C,OAAQg5C,IAC3CrB,EAASmB,GAAI3N,OAAO4N,GAAIE,MAAMD,GACtCjK,UAAW,CAIhC,CAIIuK,GACAnuB,EAAK4jB,UAAW,EAChBR,GAAwB,GACK,mBAAlBiK,EACP,C,GAGJ,C,EAAMA,EAAmE,CACrE3zC,KAAM,gBACNuxB,QAAS,CAAEmjB,OAAQpuB,EAAKpmB,O,cAF5B,S,OAIJ,E,2LAZuComB,G,iCAejCokB,EAAuB,SAAC9wC,EAAYw6C,GACtC1K,GAAwB,GACxBN,EAAoBxvC,EAAMC,OAAOS,OACN,QAAvBV,EAAMC,OAAOS,OACbgvC,EAAe,IAEnBuK,EAAYO,GAEZN,EAAeh6C,QAAQ6wC,UAAY,CACvC,EAeA1Q,EAAAA,WAAgB,WAEZ,IAAM2Q,EAAemJ,EAAWltB,QAAO,SAACP,GACpC,OAAOmG,OAAO4G,KAAK/M,GAAMkF,MAAK,W,OAAMlF,EAAKvpB,MAAM+R,cAAcpU,SAAS2uC,E,GAC1E,IACAkL,EAAiB3J,EACrB,GAAG,CAACmJ,EAAY1K,IAGhBpP,EAAAA,WAAgB,WACZ,IAAM0a,EA5GM,SAAC7B,GACrB,IAAK,IAAImB,EAAK,EAAGA,EAAKnB,EAAS33C,OAAQ84C,IACnC,IAAK,IAAIC,EAAK,EAAGA,EAAKpB,EAASmB,GAAI3N,OAAOnrC,OAAQ+4C,IAC9C,IAAK,IAAIC,EAAK,EAAGA,EAAKrB,EAASmB,GAAI3N,OAAO4N,GAAIE,MAAMj5C,OAAQg5C,IACxD,GAAIrB,EAASmB,GAAI3N,OAAO4N,GAAIE,MAAMD,GAAIjK,SAClC,OAAO4I,EAASmB,GAAI3N,OAAO4N,GAAIE,MAAMD,GAKrD,MAAO,CAAC,CACZ,CAiG0CS,CAAgB9B,GACxCjsC,EAAe3M,SAAS+L,cAAc,gBAAkD,OAAlC,EAA+B/F,GAAG,OAE1F2G,IAAiB4iC,GACjBxvC,YAAW,WACP4M,EAAaokC,eAAe,CAAEC,SAAU,SAAUC,MAAO,SAAUxgC,OAAQ,WAC/E,GAAG,IAGX,GAAG,IAEH,IAAMkqC,EAAc/B,EAASjsB,QAAO,SAACP,G,MAA0B,QAAjBA,EAAK5G,O,IAC7Co1B,EAAehC,EAASjsB,QAAO,SAACP,G,MAA0B,SAAjBA,EAAK5G,O,IAEpD,OACI,gBAAC4zB,G,uUAAAA,CAAAA,CACG3M,UAAWA,EACX/C,aAAcA,EACdkP,SAAUA,EACVU,SAAUA,EACVC,eAAgBA,EAChBtN,eAAgBA,EAChBC,WAAYA,EACZ5sC,IAAKA,GACD4H,GAEJ,gBAACwxC,GAAqBxxC,EAClB,gBAACmkC,GAAUA,CAAChmC,IAAM,WACbs1C,GACGpoB,OAAOsoB,QAAQF,GAAa/wC,KAAI,Y,IAAI4b,E,QAAAA,GAChC,OACI,gBAACua,EAAAA,SAAc,CAAC16B,IAAK,kBAAgC,OAAdmgB,EAAQ3iB,QAC1C0vB,OAAOsoB,QAAQr1B,EAAQ4mB,QAAQxiC,KAAI,Y,IAAIsnC,E,QAAAA,GACpC,OACI,gBAACrF,GAAeA,CACZxjC,SAAU,SAACjD,G,OAAMorC,EAAqBprC,EAAG8rC,EAAMgJ,M,EAC/CpO,WAAYoF,EAAMlrC,GAClBX,IAAK,kBAA2B,OAAT6rC,EAAMlrC,IAC7BmH,QAAS8hC,IAAqBiC,EAAMlrC,GACpC0jC,aAAcA,EACdH,WAAY,4BAAqC,OAAT2H,EAAMlrC,KAE7CkrC,EAAMruC,MAGnB,IAGZ,KAGR,gBAAC4oC,GAAcA,MAEf,gBAAC+M,GAAiBA,KACd,gBAACnN,GAAUA,KACP,gBAACQ,GAAeA,CACZxjC,SAAU,SAACjD,G,OAAMorC,EAAqBprC,E,EACtC0mC,WAAY,MACZ3+B,QAA8B,QAArB8hC,EACTvF,aAAcA,EACdH,WAAY,gCACf,OACQgQ,EAAe,OAEvBqB,GACGroB,OAAOsoB,QAAQD,GAAchxC,KAAI,Y,IAAI4b,E,QAAAA,GACjC,OACI,gBAAC4lB,GAAcA,CAAC/lC,IAAK,oBAAkC,OAAdmgB,EAAQ3iB,QAC5C,gBAAC41C,GAAcA,KAAEjzB,EAAQ3iB,OAC1B,gBAACwoC,GAAUA,KACN9Y,OAAOsoB,QAAQr1B,EAAQ4mB,QAAQxiC,KAAI,Y,IAAIsnC,E,QAAAA,GACpC,OACI,gBAACrF,GAAeA,CACZxjC,SAAU,SAACjD,G,OAAMorC,EAAqBprC,EAAG8rC,EAAMgJ,M,EAC/CpO,WAAYoF,EAAMlrC,GAClBX,IAAK,mBAA4B,OAAT6rC,EAAMlrC,IAC9BmH,QAAS8hC,IAAqBiC,EAAMlrC,GACpC0jC,aAAcA,EACdH,WAAY,4BAAqC,OAAT2H,EAAMlrC,KAE7CkrC,EAAMruC,MAGnB,KAIhB,OAIhB,gBAAC8rC,GAAaA,CAACt+B,MAAOmpC,GAClB,gBAAC3K,GAAmBA,KAChB,gBAAC7E,GAAYA,CACT7jC,YAAa,aAAsB,OAATmzC,GAC1B5P,aAAcA,EACdO,aAtHO,SAACvqC,GACxB0vC,EAAe1vC,EAAMC,OAAOS,MAAMwU,eAClCs6B,EAAoB,MACxB,EAoHoBhF,kBAjHY,WAC5BkF,EAAe,IAEfK,EAAe7vC,QAAQmpC,OAC3B,EA8GoBoB,WAAYgF,EACZ7vC,IAAKmwC,KAGb,gBAACuJ,GAAwBA,CAAC15C,IAAKs6C,GACL,QAArB3K,GACoB,sBAArBA,GACqB,WAArBA,GACqB,eAArBA,EACImL,EAAcn5C,QAAU,EACpBm5C,EAAcxwC,KAAI,SAACwiB,GACf,OACI,gBAAC6sB,GAAWA,CACRxM,UAAWA,EACXH,SAAUlgB,EAAKkgB,SACfQ,UAAW1gB,EAAKvpB,MAChBmD,GAAIomB,EAAKpmB,GACTqC,SAAU,W,OAAMiyC,EAAwBluB,E,EACxC/mB,IAAK+mB,EAAKpmB,GACV0jC,aAAcA,EACdqD,WAAY3gB,EAAK4jB,SACjBzG,WAAY,aAAgCyE,OAAnBsL,EAAS,YAAmC,QAAzBtL,EAAAA,GAAAA,GAAa5hB,EAAKvpB,QAC9D8pC,gBAAiBA,GAG7B,IAEA,gBAAC9E,GAAaA,KACY,WAArBoH,EACK,MAAqB,OAAfsK,EAAe,4BACA,eAArBtK,EACA,gCACA,MAAwCE,OAAlCoK,EAAe,qBAA+B,OAAZpK,EAAY,MAIlEuK,EAAS9vC,KAAI,SAACwiB,GACV,OACI,gBAAC6sB,GAAWA,CACRxM,UAAWA,EACXH,SAAUlgB,EAAKkgB,SACfQ,UAAW1gB,EAAKvpB,MAChBmD,GAAIomB,EAAKpmB,GACTqC,SAAU,W,OAAMiyC,EAAwBluB,E,EACxC/mB,IAAK+mB,EAAKpmB,GACV0jC,aAAcA,EACdqD,WAAY3gB,EAAK4jB,SACjBzG,WAAY,aAAgCyE,OAAnBsL,EAAS,YAAmC,QAAzBtL,EAAAA,GAAAA,GAAa5hB,EAAKvpB,QAC9D8pC,gBAAiBA,GAG7B,MAMxB,I,8lIAEJ0M,GAAe7/B,YAAc,iBC/W7B,IAAMshC,GAAwBp5C,EAAAA,GAAO6B,IAAG,KAChB+J,EAAMQ,QAAQC,OAOhCgtC,GAA6Br5C,EAAAA,GAAO6B,IAAG,KAIzBoL,EAAQs3B,QAAWt3B,EAAQs3B,SAOzC+U,IAAoBt5C,EAAAA,EAAAA,IAAOu3C,GAAPv3C,CAAkBu3C,MAItCgC,GAAyBv5C,EAAAA,GAAOqN,GAAE,KACrBg1B,EACFJ,EAAU+C,MAER/C,EAAUsC,QAGhB34B,EAAMC,KAAKm0B,YAIlB4L,GAAoB5rC,EAAAA,GAAOC,EAAC,KACfoiC,EACFJ,EAAUqB,MAERrB,EAAU+C,MACR/3B,EAAQs3B,QAEhB34B,EAAMC,KAAKm0B,YAIlB+E,GAAgB/kC,EAAAA,GAAOspC,GAAE,KACZjH,EACFJ,EAAUqB,MAGd13B,EAAMC,KAAKm0B,WACN/yB,EAAQi3B,QACLj3B,EAAQi3B,SAIvByF,GAAa3pC,EAAAA,GAAO4pC,GAAE,KAGTvH,EACFJ,EAAUqB,MAERrB,EAAUmE,OAKhBx6B,EAAMC,KAAKm0B,YAIlB6L,IAAa7rC,EAAAA,EAAAA,IAAO8rC,GAAAA,EAAP9rC,CAAW8rC,KAEV7+B,EAAQm5B,QAGtB2F,GAAwB/rC,EAAAA,GAAO+B,OAAM,KACxBsgC,EACFJ,EAAUqB,MAERrB,EAAUmE,OAKLx6B,EAAMQ,QAAQC,MACzBT,EAAMC,KAAK+zB,UAET3yB,EAAQq2B,MAASr2B,EAAQq2B,MAASr2B,EAAQq2B,OAKtC,SAAC99B,G,OAAsCA,EAAMwiC,aAAe,qBAAuB,G,IACnF,SAACxiC,G,OACRA,EAAMwiC,aAAe,oCAAsC,G,GAGzD6D,GACEjgC,EAAMQ,QAAQkzB,QAIxBoK,GAAiB1pC,EAAAA,GAAOwpC,GAAE,KACbnH,EACFJ,EAAUiC,QAERjC,EAAU+C,MAEhBp5B,EAAMC,KAAKm0B,WACJ/yB,EAAQi3B,SAefsV,GAAkBnb,EAAAA,YAC3B,WAYIzgC,G,IAVIgtC,EAAAA,EAAAA,SACAzpC,EAAAA,EAAAA,MACAkjB,EAAAA,EAAAA,YACA6nB,EAAAA,EAAAA,YAAAA,EAAAA,EACAC,YAAAA,OAAAA,IAAc,KACd5B,EAAAA,EAAAA,eACAvC,EAAAA,EAAAA,aACA+C,EAAAA,EAAAA,UACGvlC,EAAAA,GAAAA,EAAAA,CARHolC,WACAzpC,QACAkjB,cACA6nB,cACAC,cACA5B,iBACAvC,eACA+C,cAK8B1M,EAAAA,GAAAA,EAAAA,SAAe8N,GAAAA,GAA1CC,EAA2B/N,EAAAA,GAAhBgO,EAAgBhO,EAAAA,GAKlC,OACI,gBAAC+a,G,uUAAAA,CAAAA,CAAsBx7C,IAAKA,GAAS4H,GACjC,gBAAC6zC,GAAAA,KACG,gBAACC,GAAAA,CAAkB1O,SAAUA,EAAUG,UAAWA,IAClD,gBAACwO,GAAAA,KAAwBp4C,GACzB,gBAACyqC,GAAiBA,KAAEvnB,GACnB6nB,GAAeA,EAAY3sC,OAAS,GACjC,gCACI,gBAACwlC,GAAaA,KAAC,gBACf,gBAAC4E,GAAUA,KACNuC,EAAYhkC,KAAI,SAACsL,EAAc+4B,G,OAC5B,gBAAC7C,GAAcA,CAAC/lC,IAAK,cAAoB,OAAN4oC,IAAU/4B,E,OAK3D+2B,GACE,gBAACwB,GAAqBA,CAAC/D,aAAcA,EAAcvmC,QArB3C,WACpB4qC,GAAcD,EAClB,GAoBoB,gBAACP,GAAUA,CAAChN,KAAMuN,EAAYxgC,EAAMQ,QAAQkzB,OAAS1zB,EAAMC,KAAK8zB,cAC/DyM,EAAY,cAAgB,SAAS,gBAM9D,I,grBAEJoN,GAAgB1hC,YAAc,kBC5L9B,IAAM2hC,IAAqBz5C,EAAAA,EAAAA,IAAO0mC,GAAP1mC,CAAkB0mC,MAChC,SAAClhC,G,OAAuBA,EAAMmJ,MAAQnJ,EAAMmJ,MAAQ,O,IACnD,SAACnJ,G,OAAuBA,EAAMoJ,OAASpJ,EAAMoJ,OAAS,M,IAGvD8qC,GAAerb,EAAAA,YACxB,WAcIzgC,G,IAZIwgC,EAAAA,EAAAA,SACA98B,EAAAA,EAAAA,QACAH,EAAAA,EAAAA,MACA2lC,EAAAA,EAAAA,WACAC,EAAAA,EAAAA,YACAC,EAAAA,EAAAA,mBACAC,EAAAA,EAAAA,oBACAt4B,EAAAA,EAAAA,MACAC,EAAAA,EAAAA,OACAs4B,EAAAA,EAAAA,cACG1hC,EAAAA,GAAAA,EAAAA,CAVH44B,WACA98B,UACAH,QACA2lC,aACAC,cACAC,qBACAC,sBACAt4B,QACAC,SACAs4B,kBAKEC,EAAkB9I,EAAAA,OAAgC,MAClD+I,EAAmB/I,EAAAA,OAAgC,MAOzD,OALAvgC,EAAAA,EAAAA,YAAU,WACgB,WAAlBopC,GAA8BC,EAAgBjpC,SAASipC,EAAgBjpC,QAAQmpC,QAC7D,YAAlBH,GAA+BE,EAAiBlpC,SAASkpC,EAAiBlpC,QAAQmpC,OAC1F,IAGI,gBAACoS,G,uUAAAA,CAAAA,CAAmB77C,IAAKA,EAAK+Q,MAAOA,EAAOC,OAAQA,GAAYpJ,GAC5D,gBAACmhC,GAAmBA,KAAExlC,GACtB,gBAACylC,GAAkBA,KAAExI,GACpB98B,GAGG,gBAACkjC,GAAiBA,KACd,gBAACx9B,GAAYA,CACT3F,OAAQ,yBACRI,QAASwlC,EACTrpC,IAAKwpC,GAEJL,GAAe,MAEpB,gBAAC//B,GAAYA,CACT7B,MAAOmiC,EAAM9D,QACbniC,OAAQ,wBACRI,QAASulC,EACTppC,IAAKupC,GAEJL,GAAc,WAMvC,I,0yDAEJ4S,GAAa5hC,YAAc,eCnD3B,IAAM6hC,GAAoB35C,EAAAA,GAAO6B,IAAG,KACC,EAAhBqgC,EACc,EAAhBA,GAGb0X,GAAwB55C,EAAAA,GAAO65C,GAAE,MAKjCC,GAA4B95C,EAAAA,GAAOwpC,GAAE,KAEvBv8B,EAAQm5B,OACPn5B,EAAQq2B,MAEZrB,EAAUqB,MACd13B,EAAMC,KAAK+zB,UAgBKh0B,EAAMQ,QAAQC,MAOdT,EAAMC,KAAKq0B,iBAalC6Z,GAAwB/5C,EAAAA,GAAOwG,EAAExE,OAA4B,Y,MAAiB,CAChF,eADkEX,EAAAA,O,GAAxCrB,C,KAGQyiC,EAAMC,YAC/B,SAACl9B,G,OAAWA,EAAML,MAAQK,EAAML,MAAMwH,KAAOf,EAAMy0B,MAAMC,YAAc10B,EAAMy0B,MAAMC,S,IAM7D,SAAC96B,G,OAAWA,EAAML,MAAQK,EAAML,MAAMwH,KAAOf,EAAMy0B,MAAMC,S,IAI/E0Z,GAAc,Y,IAAG5b,EAAAA,EAAAA,SAAa54B,EAAAA,GAAAA,EAAAA,CAAb44B,a,OAC1B,gBAACub,GAAsBn0C,EACnB,gBAACo0C,GAAAA,KAIOxb,EAAS7+B,QAAU6+B,EAASl2B,IAExBk2B,EAASl2B,KACL,SAAC+xC,EAAYviB,G,OACTuiB,IACCA,EAAM16C,QAAU06C,EAAMz0C,QACnB,gBAACs0C,GAAAA,CAA0Bn2C,IAAKs2C,EAAMt2C,KAAO+zB,GAAIuiB,E,IAI7D,gBAACH,GAAAA,KAA2B1b,I,EAOnC8b,GAAkB,Y,IAAG9b,EAAAA,EAAAA,SAAa54B,EAAAA,GAAAA,EAAAA,CAAb44B,a,OAC9B,gBAAC2b,GAA0Bv0C,EAAQ44B,E,k9DCtFvC,I,GAEM+b,GAAoBn6C,EAAAA,GAAO65C,GAAE,KACE,EAAhB3X,GAMf76B,GAAcrH,EAAAA,GAAOC,EAAC,KACTgiC,EAAUmE,QAKvBgU,GAAiBp6C,EAAAA,GAAOwpC,GAAE,MAEnB,SAAChkC,G,MAAkC,GAA2B,OAAxB,IAAMA,EAAM60C,YAAY,I,GAE1DpY,EAAUqB,OAId,SAAC99B,G,OACNA,EAAM80C,QAAU90C,EAAM+0C,SAAW/0C,EAAML,MAAMwH,MAAQf,EAAMy0B,MAAMC,UAAY10B,EAAMC,KAAKq0B,e,GAxB5E,UAmCI,SAAC16B,G,OACbA,EAAM80C,QAAU90C,EAAM+0C,SAAW/0C,EAAML,MAAMwH,MAAQf,EAAMy0B,MAAMC,UAAY10B,EAAMC,KAAKq0B,e,IAKxE,SAAC16B,G,OACjBA,EAAM+0C,SAAW/0C,EAAML,MAAMwH,MAAQf,EAAMy0B,MAAMC,UAAY10B,EAAMQ,QAAQC,K,GAElEo2B,EAAMC,WAAcK,EAAUC,SAMvB,SAACx9B,G,OAAWA,EAAM+0C,SAAW/0C,EAAML,MAAMwH,MAAQf,EAAMy0B,MAAMC,UAAY,a,IAK/E,SAAC96B,G,OACXA,EAAM+0C,SAAW,wBAA0B,cAAyC,OAA3B3uC,EAAMC,KAAKq0B,gB,GACjEsa,GAYTnzC,GACeo7B,EAAMC,WAAcK,EAAUC,SAItCyX,GAAc,Y,IAAGC,EAAAA,EAAAA,MAAO9sC,EAAAA,EAAAA,YAAgBpI,EAAAA,GAAAA,EAAAA,CAAvBk1C,QAAO9sC,gB,OACjC,gBAACusC,GAAsB30C,EAClBk1C,EAAMxyC,KACH,SAACyyC,EAAWjjB,G,OACRijB,IACCA,EAAKC,UACF,gBAACR,GAAAA,CACGG,SAAU7iB,EAAI9pB,EACd0sC,OAAQ5iB,IAAM9pB,EACdysC,YAAaK,EAAMzvB,QAAO,SAACP,G,OAAeA,EAAKkwB,Q,IAAUr7C,OACzDoE,IAAKg3C,EAAKh3C,KAAO+zB,GAEjB,gBAACrwB,GAAWA,KAAEszC,EAAKx5C,O,ilCCtG/B05C,G,iDAAAA,KAAAA,GAAAA,CAAAA,IAyCZ,IAAMC,GAAa96C,EAAAA,GAAOC,EAAC,MACd,SAACuF,G,OAAsBA,EAAMs+B,MAAQt+B,EAAMs+B,MAAQl4B,EAAMQ,QAAQmzB,K,IAC5D,SAAC/5B,G,MACO,SAAlBA,EAAMm+B,QACA,OACkB,WAAlBn+B,EAAMm+B,QACN,SACkB,UAAlBn+B,EAAMm+B,QACN,QACA,M,IACG,SAACn+B,G,OAAqBA,EAAM2sC,UAAYlQ,EAAUmE,M,IAChD,SAAC5gC,G,OAAqBA,EAAM0sC,YAAc5P,EAAY0C,K,IACpD,SAACx/B,G,OAAqBA,EAAMqsC,cAAgBtP,EAAqB6D,M,IACjE,SAAC5gC,G,OAAsBA,EAAMu1C,OAASv1C,EAAMu1C,OAAS,G,IAG7DC,GAAWh7C,EAAAA,GAAOwG,EAAC,KACMi8B,EAAMC,WAC/B92B,EAAMy0B,MAAMC,UAMU10B,EAAMy0B,MAAMC,WAIlC3+B,GAAO,Y,IAAGy8B,EAAAA,EAAAA,SAAU2c,EAAAA,EAAAA,OAAQ5V,EAAAA,EAAAA,QAASgN,EAAAA,EAAAA,SAAa3sC,EAAAA,GAAAA,EAAAA,CAAxC44B,WAAU2c,SAAQ5V,UAASgN,a,OAC9C,gBAAC2I,G,uUAAAA,CAAAA,CAAWC,OAAQA,EAAQE,GAAI9V,EAASgN,SAAUA,GAAc3sC,GAC5D44B,E,82GClDT,IAAM8c,GAAoBl7C,EAAAA,GAAO6B,IAAG,MACrB,SAAC2D,G,OAAsCA,EAAMuJ,OAAS,SAAW,E,IAM1EosC,GAAen7C,EAAAA,GAAO6B,IAAG,MAEpB,SAAC2D,G,MAA8B,QAAnBA,EAAMmR,SAAqB,OAAS,M,IAC7C,SAACnR,G,MAA8B,QAAnBA,EAAMmR,SAAqB,OAAS,M,IACrC,SAACnR,G,MAAU,GAAe,OAAZA,EAAMmJ,MAAM,K,GAAc1B,EAAQ+3B,OAC5D,SAACx/B,G,MAAU,GAAe,OAAZA,EAAMmJ,MAAM,K,GACxB1B,EAAQ+3B,MACCp5B,EAAMQ,QAAQmzB,OAavB,SAAC/5B,G,MAAyD,QAAnBA,EAAMmR,SAAqB,OAAS,O,IACxE,SAACnR,G,MAAyD,QAAnBA,EAAMmR,SAAqB,QAAU,M,IAElE,SAACnR,G,MAAyD,QAAnBA,EAAMmR,SAAqB,SAAW,Q,IAInG3P,GAAehH,EAAAA,GAAO+B,OAAM,MAQ5Bq5C,GAAqBp7C,EAAAA,GAAO03B,EAAC,KACjB9rB,EAAMC,KAAKO,QAChBR,EAAMQ,QAAQC,OAcLk3B,EAAAA,EAAAA,GAAQ,GAAK33B,EAAMC,KAAKO,UAIjCivC,GAAe,W,OAAM,gBAACD,GAAAA,KAAmB,I,EAEzCE,GAAc,Y,IACvBld,EAAAA,EAAAA,SAAAA,EAAAA,EACAznB,SAAAA,OAAAA,IAAW,UACX4kC,EAAAA,EAAAA,aACAxsC,EAAAA,EAAAA,OAAAA,EAAAA,EACAJ,MAAAA,OAAAA,IAAQ,QACRtN,EAAAA,EAAAA,OAAAA,EAAAA,EACAk7B,OAAAA,OAAAA,IAAS,KACN/2B,EAAAA,GAAAA,EAAAA,CAPH44B,WACAznB,WACA4kC,eACAxsC,SACAJ,QACAtN,SACAk7B,WAGMif,EAAand,EAAAA,OAAsC,MACnBA,EAAAA,GAAAA,EAAAA,SAAe9B,GAAAA,GAA9Ckf,EAA+Bpd,EAAAA,GAAlBqd,EAAkBrd,EAAAA,GAyBtC,OAtBAA,EAAAA,WAAgB,W,IACHuY,EAAT,SAA2BlzC,IACnB,GAA0B,WAAVA,EAAEC,KAAsB83C,GAAyB,QAAV/3C,EAAEC,MACzD+3C,GAAe,EAEvB,EAESC,EAAT,SAAqBj4C,GACb+3C,GAAeD,EAAWt9C,UAAYs9C,EAAWt9C,QAAQC,SAASuF,EAAEzF,SACpEy9C,GAAe,EAEvB,EAKA,OAHAp9C,SAASE,iBAAiB,UAAWo4C,GACrCt4C,SAASE,iBAAiB,QAASm9C,GAE5B,WACHr9C,SAASC,oBAAoB,UAAWq4C,GACxCt4C,SAASC,oBAAoB,QAASo9C,EAC1C,CACJ,GAAG,CAACF,EAAaC,IAGb,gBAACR,GAAAA,G,uUAAAA,CAAAA,CAAkBnsC,OAAQA,GAAYvJ,GAAAA,CAAOm5B,eAAc,iBAAwB,OAAPt9B,KACzE,gBAAC2F,GAAYA,CAACvF,QA1BA,W,OAAMi6C,GAAgBD,E,EA0BEr3C,KAAM,SAAUu6B,eAAc,wBAA+B,OAAPt9B,IACvF+8B,GAEJqd,GACG,gCACI,gBAACN,GAAAA,CACGv9C,IAAK49C,EACL7kC,SAAUA,EACVhI,MAAOA,EACPgwB,eAAc,iCAAwC,OAAPt9B,IAE9Ck6C,IAMzB,E,2jFCxGA,IAAMK,GAAiB,sDAKjBC,GAAU77C,EAAAA,GAAOuE,MAAK,KACtBq3C,IAGAE,GAAmB97C,EAAAA,GAAO6B,IAAG,KAC7B+5C,IAGAG,GAAqB/7C,EAAAA,GAAO6B,IAAG,MAI/Bm6C,GAAkBh8C,EAAAA,GAAOgM,KAAI,KAEbiB,EAAQC,SACb+0B,EAAUqB,MACRrB,EAAUmE,QACV,SAAC5gC,G,OAAyCA,EAAMy2C,UAAY,MAAQ,K,IAC1E,SAACz2C,G,OAAyCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKm0B,U,IACvF,SAACx6B,G,OAAyCA,EAAMN,SAAW,MAAQ,G,IAG5Eg3C,GAAuBl8C,EAAAA,GAAOuE,MAAK,KAErB0I,EAAQi3B,QACNj3B,EAAQC,SACb+0B,EAAUqB,MACRrB,EAAUmE,QACV,SAAC5gC,G,OAAyCA,EAAMy2C,UAAY,MAAQ,K,IAC1E,SAACz2C,G,OAAyCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKm0B,U,IACvF,SAACx6B,G,OAAyCA,EAAMN,SAAW,MAAQ,G,IAG5EijC,GAAcnoC,EAAAA,GAAO0H,MAAK,MACR,SAAClC,G,OACjBA,EAAMN,UAAW+iC,EAAAA,EAAAA,IAAO,MAAOr8B,EAAMQ,QAAQC,OAAST,EAAMQ,QAAQC,K,IAC/D,SAAC7G,G,OACNA,EAAMN,UAAW27B,EAAAA,EAAAA,IAAe,MAAOj1B,EAAMQ,QAAQmzB,OAAS3zB,EAAMQ,QAAQmzB,K,GACnE0C,EAAUqB,MACRrB,EAAUmE,OACdn5B,EAAQq2B,OAGH,SAAC99B,G,OACbA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKo0B,U,GAClC2C,EAAOC,SAOtBsZ,GAA0Bn8C,EAAAA,GAAO6B,IAAG,KACzBogC,EAAUiC,QACRjC,EAAUqB,OAChB,SAAC99B,G,OACNA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMQ,QAAQmzB,K,GACvCtyB,EAAQq2B,OAKdh2B,GAAY+wB,EAAAA,YACrB,WAuBIzgC,G,IArBIyD,EAAAA,EAAAA,OACAkD,EAAAA,EAAAA,MACAD,EAAAA,EAAAA,GACA83C,EAAAA,EAAAA,UACAC,EAAAA,EAAAA,cACA53C,EAAAA,EAAAA,YACAD,EAAAA,EAAAA,KACAM,EAAAA,EAAAA,UACAw3C,EAAAA,EAAAA,aACAp3C,EAAAA,EAAAA,SACAP,EAAAA,EAAAA,QACAC,EAAAA,EAAAA,kBACA+B,EAAAA,EAAAA,SACAqiC,EAAAA,EAAAA,OACAt+B,EAAAA,EAAAA,UACA6xC,EAAAA,EAAAA,UACAN,EAAAA,EAAAA,UACAv9C,EAAAA,EAAAA,MACA+H,EAAAA,EAAAA,UACGjB,EAAAA,GAAAA,EAAAA,CAnBHnE,SACAkD,QACAD,KACA83C,YACAC,gBACA53C,cACAD,OACAM,YACAw3C,eACAp3C,WACAP,UACAC,oBACA+B,WACAqiC,SACAt+B,YACA6xC,YACAN,YACAv9C,QACA+H,cAKJ,OAAO21C,EACH,gBAACN,GAAAA,GAAAA,CAAiBr1C,UAAWA,GAAejB,GACxC,gBAACu2C,GAAAA,KACG,gBAACG,GAAAA,CACGvd,eAAc,GAAU,OAAPt9B,EAAO,UACxB46C,UAAWA,EACXt3C,QAASA,EACTO,SAAUA,EACVoG,QAAShH,GAERC,GAEL,gBAAC+2C,GAAWA,CAACj6C,OAAQA,EAAQk6C,aAAcc,GACvC,gBAAChB,GAAYA,QAGrB,gBAAClT,GAAWA,GAAAA,GAAAA,CACR/jC,KAAK,OACLu6B,eAAc,GAAU,OAAPt9B,EAAO,UACxBiD,GAAIA,EACJ6kC,UAAWrkC,EACXN,KAAMA,EACNC,YAAaA,EACbiG,UAAWA,EACX6xC,UAAWA,EACX53C,QAASA,EACTO,SAAUA,QACY,IAAVxG,GAAyB,CAAEA,MAAAA,QACV,IAAjB49C,GAAgC,CAAEA,aAAAA,IAAa,CAC3D1+C,IAAKA,KAERgH,GACG,gBAACu3C,GAAAA,CAAwBx3C,QAASA,GAAUC,IAIpD,gBAACi3C,GAAAA,GAAAA,CAAQld,eAAc,GAAU,OAAPt9B,EAAO,UAASoF,UAAWA,GAAejB,GAChE,gBAACw2C,GAAAA,CAAgBr3C,QAASA,EAASO,SAAUA,EAAU+2C,UAAWA,GAC7D13C,GAEL,gBAAC4jC,GAAWA,GAAAA,GAAAA,CACR/jC,KAAK,OACLu6B,eAAc,GAAU,OAAPt9B,EAAO,UACxBiD,GAAIA,EACJ6kC,UAAWrkC,EACXN,KAAMA,EACNC,YAAaA,EACbiG,UAAWA,EACX6xC,UAAWA,EACX53C,QAASA,EACTO,SAAUA,QACY,IAAVxG,GAAyB,CAAEA,MAAAA,QACV,IAAjB49C,GAAgC,CAAEA,aAAAA,IAAa,CAC3D31C,SAAUA,EACVqiC,OAAQA,EACRprC,IAAKA,KAERgH,GACG,gBAACu3C,GAAAA,CAAwBx3C,QAASA,GAAUC,GAI5D,I,+kFAEJ0I,GAAUwK,YAAc,YCpJxB,IAAM+jC,GAAU77C,EAAAA,GAAO6B,IAAG,MAGhB,SAAC2D,G,OAAiCA,EAAMg3C,WAAah3C,EAAMg3C,WAAa,M,IAI5ET,GAAqB/7C,EAAAA,GAAO6B,IAAG,MAGlB,SAAC2D,G,OAA2CA,EAAMi3C,c,GAEhDxvC,EAAQ+3B,OAGvBgX,GAAkBh8C,EAAAA,GAAOuE,MAAK,KAChB0I,EAAQi3B,QACXjC,EAAUqB,MACRrB,EAAU+C,OAKV,SAACx/B,G,OAAyCA,EAAMy2C,UAAY,MAAQ,K,IAC1E,SAACz2C,G,OAAyCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKm0B,U,IACvF,SAACx6B,G,OAAyCA,EAAMN,SAAW,MAAQ,G,IAG5Eg3C,GAAuBl8C,EAAAA,GAAO6B,IAAG,MAKjCsmC,GAAcnoC,EAAAA,GAAO0H,MAAK,MACR,SAAClC,G,OACjBA,EAAMN,UAAW+iC,EAAAA,EAAAA,IAAO,MAAOr8B,EAAMQ,QAAQC,OAAST,EAAMQ,QAAQC,K,IAC/D,SAAC7G,G,OACNA,EAAMN,UAAW27B,EAAAA,EAAAA,IAAe,MAAOj1B,EAAMQ,QAAQmzB,OAAS3zB,EAAMQ,QAAQmzB,K,GACnE0C,EAAUqB,MACRrB,EAAUmE,OACdn5B,EAAQq2B,OAGH,SAAC99B,G,OACbA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKo0B,U,GAClC2C,EAAOC,SAOtBsZ,GAA0Bn8C,EAAAA,GAAO6B,IAAG,KACzBogC,EAAUiC,QACRjC,EAAUqB,OAChB,SAAC99B,G,OACNA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMQ,QAAQmzB,K,GACvCtyB,EAAQq2B,OAIdoZ,GAAkBre,EAAAA,YAC3B,WAyBIzgC,G,IAvBIyD,EAAAA,EAAAA,OACAkD,EAAAA,EAAAA,MACAD,EAAAA,EAAAA,GACA83C,EAAAA,EAAAA,UACAC,EAAAA,EAAAA,cACA53C,EAAAA,EAAAA,YACAD,EAAAA,EAAAA,KACAM,EAAAA,EAAAA,UACAw3C,EAAAA,EAAAA,aACAp3C,EAAAA,EAAAA,SACAP,EAAAA,EAAAA,QACAgC,EAAAA,EAAAA,SACAqiC,EAAAA,EAAAA,OACAt+B,EAAAA,EAAAA,UACA6xC,EAAAA,EAAAA,UACAN,EAAAA,EAAAA,UACAv9C,EAAAA,EAAAA,MACA+H,EAAAA,EAAAA,UACA7B,EAAAA,EAAAA,kBACA43C,EAAAA,EAAAA,WAAAA,EAAAA,EACAC,eAAAA,OAAAA,IAAiB,YACdj3C,EAAAA,GAAAA,EAAAA,CArBHnE,SACAkD,QACAD,KACA83C,YACAC,gBACA53C,cACAD,OACAM,YACAw3C,eACAp3C,WACAP,UACAgC,WACAqiC,SACAt+B,YACA6xC,YACAN,YACAv9C,QACA+H,YACA7B,oBACA43C,aACAC,mBAKJ,OACI,gBAACZ,GAAOA,GAAAA,CAACp1C,UAAWA,EAAW+1C,WAAYA,GAAgBh3C,GACvD,gBAACu2C,GAAkBA,CAACU,eAAgBA,GAC/BL,EACG,gBAACF,GAAoBA,KACjB,gBAACF,GAAeA,CAACr3C,QAASA,EAASO,SAAUA,EAAU+2C,UAAWA,EAAW3wC,QAAShH,GACjFC,GAEL,gBAAC+2C,GAAWA,CAACj6C,OAAQA,EAAQk6C,aAAcc,GACvC,gBAAChB,GAAYA,QAIrB,gBAACW,GAAeA,CACZrd,eAAc,GAAU,OAAPt9B,EAAO,UACxBsD,QAASA,EACTO,SAAUA,EACV+2C,UAAWA,EACX3wC,QAAShH,GAERC,IAIb,gBAAC4jC,GAAWA,GAAAA,GAAAA,CACR/jC,KAAK,OACLu6B,eAAc,GAAU,OAAPt9B,EAAO,UACxBiD,GAAIA,EACJ6kC,UAAWrkC,EACXN,KAAMA,EACNC,YAAaA,EACbiG,UAAWA,EACX6xC,UAAWA,EACX53C,QAASA,EACTO,SAAUA,QACY,IAAVxG,GAAyB,CAAEA,MAAAA,QACV,IAAjB49C,GAAgC,CAAEA,aAAAA,IAAa,CAC3D31C,SAAUA,EACVqiC,OAAQA,EACRprC,IAAKA,KAERgH,GACG,gBAACu3C,GAAuBA,CAACx3C,QAASA,GAAUC,GAI5D,I,u1DAGJ83C,GAAgB5kC,YAAc,kBCzJ9B,IAAM+jC,GAAU77C,EAAAA,GAAOuE,MAAK,MAEN,SAACiB,G,OAAsCA,EAAMuJ,OAAS,cAAgB,Q,IACzE,SAACvJ,G,OAAsCA,EAAMuJ,OAAS,SAAW,E,IAC7D,SAACvJ,G,OAAsCA,EAAMuJ,OAAS,WAAa,E,IAGpF+sC,GAAmB97C,EAAAA,GAAO6B,IAAG,MAEb,SAAC2D,G,OAAsCA,EAAMuJ,OAAS,cAAgB,Q,IACzE,SAACvJ,G,OAAsCA,EAAMuJ,OAAS,SAAW,E,IAC7D,SAACvJ,G,OAAsCA,EAAMuJ,OAAS,WAAa,E,IAGpFgtC,GAAqB/7C,EAAAA,GAAO6B,IAAG,MAI/Bm6C,GAAkBh8C,EAAAA,GAAOgM,KAAI,MAEhB,SAACxG,G,OAAyCA,EAAMuJ,OAAS9B,EAAQi3B,QAAU,G,GAC7EjC,EAAUqB,MACRrB,EAAUmE,QACV,SAAC5gC,G,OAAyCA,EAAMy2C,UAAY,MAAQ,K,IAC1E,SAACz2C,G,OAAyCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKm0B,U,IACvF,SAACx6B,G,OAAyCA,EAAMN,SAAW,MAAQ,G,IAG5Eg3C,GAAuBl8C,EAAAA,GAAOuE,MAAK,KAErB0I,EAAQi3B,SACT,SAAC1+B,G,OAAyCA,EAAMuJ,OAAS9B,EAAQi3B,QAAU,G,GAC7EjC,EAAUqB,MACRrB,EAAUmE,QACV,SAAC5gC,G,OAAyCA,EAAMy2C,UAAY,MAAQ,K,IAC1E,SAACz2C,G,OAAyCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKm0B,U,IACvF,SAACx6B,G,OAAyCA,EAAMN,SAAW,MAAQ,G,IAG5EglC,GAAclqC,EAAAA,GAAO0H,MAAK,MAEnBi1C,GAAate,EAAAA,YACtB,WAkBIzgC,G,IAhBI+I,EAAAA,EAAAA,SACAtF,EAAAA,EAAAA,OACAkD,EAAAA,EAAAA,MACAD,EAAAA,EAAAA,GACA83C,EAAAA,EAAAA,UACAC,EAAAA,EAAAA,cACA73C,EAAAA,EAAAA,KACA9F,EAAAA,EAAAA,MACAoG,EAAAA,EAAAA,UACAiK,EAAAA,EAAAA,OACAktC,EAAAA,EAAAA,UACAxwC,EAAAA,EAAAA,QACAvG,EAAAA,EAAAA,SACAP,EAAAA,EAAAA,QACGa,EAAAA,GAAAA,EAAAA,CAdHmB,WACAtF,SACAkD,QACAD,KACA83C,YACAC,gBACA73C,OACA9F,QACAoG,YACAiK,SACAktC,YACAxwC,UACAvG,WACAP,YAKJ,OAAOy3C,EACH,gBAACN,GAAgBA,GAAAA,CAAC/sC,OAAQA,GAAYvJ,GAClC,gBAACu2C,GAAkBA,KACf,gBAACG,GAAoBA,CACjBvd,eAAc,GAAU,OAAPt9B,EAAO,UACxB6D,SAAUA,EACV6J,OAAQA,EACRktC,UAAWA,EACXt3C,QAASA,EACT2G,QAAShH,GAERC,GAEL,gBAAC+2C,GAAWA,CAACj6C,OAAQA,EAAQk6C,aAAcc,GACvC,gBAAChB,GAAYA,QAGrB,gBAACnR,GAAWA,CACR9lC,KAAK,QACLu6B,eAAc,GAAU,OAAPt9B,EAAO,UACxBiD,GAAIA,EACJ6kC,UAAWrkC,EACXN,KAAMA,EACN9F,MAAOA,EACPwG,SAAUA,EACVuG,QAASA,EACT9E,SAAUA,EACV/I,IAAKA,KAIb,gBAACi+C,GAAOA,GAAAA,CAACld,eAAc,GAAU,OAAPt9B,EAAO,WAAU0N,OAAQA,GAAYvJ,GAC3D,gBAACw2C,GAAeA,CAACjtC,OAAQA,EAAQktC,UAAWA,EAAWt3C,QAASA,EAASO,SAAUA,GAC9EX,GAEL,gBAAC2lC,GAAWA,CACR9lC,KAAK,QACLu6B,eAAc,GAAU,OAAPt9B,EAAO,UACxBiD,GAAIA,EACJ6kC,UAAWrkC,EACXN,KAAMA,EACN9F,MAAOA,EACPwG,SAAUA,EACVuG,QAASA,EACT9E,SAAUA,EACV/I,IAAKA,IAIrB,I,0jEAEJ++C,GAAW7kC,YAAc,aCxFzB,I,SAAM+jC,GAAU77C,EAAAA,GAAOuE,MAAK,MAGF,SAACiB,G,OAAsCA,EAAMuJ,OAAS,cAAgB,Q,IACzE,SAACvJ,G,OAAsCA,EAAMuJ,OAAS,SAAW,E,IAC7D,SAACvJ,G,OAAsCA,EAAMuJ,OAAS,WAAa,E,IAIxF+sC,GAAmB97C,EAAAA,GAAO6B,IAAG,MAEb,SAAC2D,G,OAAsCA,EAAMuJ,OAAS,cAAgB,Q,IACzE,SAACvJ,G,OAAsCA,EAAMuJ,OAAS,SAAW,E,IAC7D,SAACvJ,G,OAAsCA,EAAMuJ,OAAS,WAAa,E,IAGpFgtC,GAAqB/7C,EAAAA,GAAO6B,IAAG,MAI/Bm6C,GAAkBh8C,EAAAA,GAAOgM,KAAI,MAEhB,SAACxG,G,OAAyCA,EAAMuJ,OAAS9B,EAAQi3B,QAAU,G,GAC7EjC,EAAUqB,MACRrB,EAAUmE,QACV,SAAC5gC,G,OAAyCA,EAAMy2C,UAAY,MAAQ,K,IAC1E,SAACz2C,G,OAAyCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKm0B,U,IACvF,SAACx6B,G,OAAyCA,EAAMN,SAAW,MAAQ,G,IACjE,SAACM,G,OAAyCA,EAAMo3C,cAAgBp3C,EAAMo3C,cAAgB,M,IACvF,SAACp3C,G,OAAyCA,EAAMq3C,cAAgBr3C,EAAMq3C,cAAgB,S,IACjF,SAACr3C,G,OACdA,EAAMs3C,kBAAoBt3C,EAAMs3C,kBAAoB,M,IAGtDZ,GAAuBl8C,EAAAA,GAAOuE,MAAK,KAGjB0I,EAAQi3B,SACT,SAAC1+B,G,OAAyCA,EAAMuJ,OAAS9B,EAAQi3B,QAAU,G,GAC7EjC,EAAUqB,MACRrB,EAAUmE,QACV,SAAC5gC,G,OAAyCA,EAAMy2C,UAAY,MAAQ,K,IAC1E,SAACz2C,G,OAAyCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKm0B,U,IACvF,SAACx6B,G,OAAyCA,EAAMN,SAAW,MAAQ,G,IACjE,SAACM,G,OAAyCA,EAAMo3C,cAAgBp3C,EAAMo3C,cAAgB,M,IACvF,SAACp3C,G,OAAyCA,EAAMq3C,cAAgBr3C,EAAMq3C,cAAgB,S,IACjF,SAACr3C,G,OACdA,EAAMs3C,kBAAoBt3C,EAAMs3C,kBAAoB,M,IAI1DC,GAAiB/8C,EAAAA,GAAO0H,MAAK,MAEtBs1C,GAAgB3e,EAAAA,YACzB,WAsBIzgC,G,IApBI+I,EAAAA,EAAAA,SACAtF,EAAAA,EAAAA,OACAkD,EAAAA,EAAAA,MACAD,EAAAA,EAAAA,GACA83C,EAAAA,EAAAA,UACAC,EAAAA,EAAAA,cACAY,EAAAA,EAAAA,YACAz4C,EAAAA,EAAAA,KACAM,EAAAA,EAAAA,UACAiK,EAAAA,EAAAA,OACAktC,EAAAA,EAAAA,UACAxwC,EAAAA,EAAAA,QACAvG,EAAAA,EAAAA,SACAP,EAAAA,EAAAA,QACA8B,EAAAA,EAAAA,UACAm2C,EAAAA,EAAAA,cACAC,EAAAA,EAAAA,cACAC,EAAAA,EAAAA,kBACGt3C,EAAAA,GAAAA,EAAAA,CAlBHmB,WACAtF,SACAkD,QACAD,KACA83C,YACAC,gBACAY,cACAz4C,OACAM,YACAiK,SACAktC,YACAxwC,UACAvG,WACAP,UACA8B,YACAm2C,gBACAC,gBACAC,sBAKJ,OAAOV,EACH,gBAACN,GAAgBA,GAAAA,CAAC/sC,OAAQA,EAAQtI,UAAWA,GAAejB,GACxD,gBAACu2C,GAAkBA,KACf,gBAACG,GAAoBA,CACjBvd,eAAc,GAAU,OAAPt9B,EAAO,UACxB6D,SAAUA,EACV6J,OAAQA,EACRktC,UAAWA,EACXt3C,QAASA,EACT2G,QAAShH,EACTs4C,cAAeA,EACfC,cAAeA,EACfC,kBAAmBA,EACnB37C,MAAOoD,GAENA,GAEL,gBAAC+2C,GAAWA,GAAAA,CAACj6C,OAAQA,EAAQk6C,aAAcc,GAAmBY,GAC1D,gBAAC5B,GAAYA,QAGrB,gBAAC0B,GAAAA,CACG34C,KAAK,WACLu6B,eAAc,GAAU,OAAPt9B,EAAO,UACxBiD,GAAIA,EACJ6kC,UAAWrkC,EACXN,KAAMA,EACNU,SAAUA,EACVuG,QAASA,EACT9E,SAAUA,EACV/I,IAAKA,KAIb,gBAACi+C,GAAOA,GAAAA,CAACld,eAAc,GAAU,OAAPt9B,EAAO,UAAS0N,OAAQA,EAAQtI,UAAWA,GAAejB,GAChF,gBAACw2C,GAAeA,CACZjtC,OAAQA,EACRktC,UAAWA,EACXt3C,QAASA,EACTO,SAAUA,EACV03C,cAAeA,EACfC,cAAeA,EACfC,kBAAmBA,EACnB37C,MAAOoD,GAENA,GAEL,gBAACw4C,GAAAA,CACG34C,KAAK,WACLu6B,eAAc,GAAU,OAAPt9B,EAAO,UACxBiD,GAAIA,EACJ6kC,UAAWrkC,EACXN,KAAMA,EACNU,SAAUA,EACVuG,QAASA,EACT9E,SAAUA,EACV/I,IAAKA,IAIrB,I,2sCAEJo/C,GAAcllC,YAAc,gB,SCxMhBolC,G,2CAAAA,KAAAA,GAAAA,CAAAA,I,SAKAC,G,yCAAAA,KAAAA,GAAkBA,CAAAA,I,SAKlBC,G,2MAAAA,KAAAA,GAAeA,CAAAA,ICoBAp9C,EAAAA,GAAO4pC,GAAE,MAEb5pC,EAAAA,GAAOwpC,GAAE,KAIC59B,EAAMi2B,OAAOC,gBAMhB70B,EAAQm5B,QACnB,SAAC5gC,G,OAAWA,EAAML,QAAU+3C,GAAsBG,UAAa73C,EAAM83C,UAAsB,OAAV,O,IAKjFt9C,EAAAA,GAAO6B,IAAG,MAGb,SAAC2D,G,OAAWA,EAAML,QAAU+3C,GAAsBG,SAAW,cAAWvqC,C,IAC7E,SAACtN,G,OAAWA,EAAML,QAAU+3C,GAAsBG,SAAW,OAAIvqC,C,IAC7D,SAACtN,G,OAAWA,EAAML,QAAU+3C,GAAsBG,SAAW,OAAIvqC,C,IACxD,SAACtN,G,OACjBA,EAAML,QAAU+3C,GAAsBG,SAAWzxC,EAAMi2B,OAAOE,oBAAiBjvB,C,IAClE,SAACtN,G,OACdA,EAAML,QAAU+3C,GAAsBG,SAAW,aAA0C,OAA7BzxC,EAAMi2B,OAAOC,iBAAoB,C,IACrF,SAACt8B,G,OACXA,EAAML,QAAU+3C,GAAsBG,SAAW,aAA0C,OAA7BzxC,EAAMi2B,OAAOC,iBAAoB,C,IACnF,SAACt8B,G,OAAWA,EAAML,QAAU+3C,GAAsBG,SAAW,GAAkB,OAAfpwC,EAAQm5B,QAAW,C,IAGlFpmC,EAAAA,GAAO6B,IAAG,KACboL,EAAQm5B,QAGLpmC,EAAAA,GAAO+B,OAAOC,OAAyB,Y,MAAiB,CACzE,eAD2DX,EAAAA,O,GAA1CrB,C,MAMN,SAACwF,G,OAAsCA,EAAM+3C,gBAAkB,OAAS,c,IACpE,SAAC/3C,G,OAAsCA,EAAM+3C,gBAAkB,SAAW,E,KAIvEv9C,EAAAA,EAAAA,IAAO6kC,EAAAA,GAAP7kC,CAAmB6kC,KAG7Bj5B,EAAMC,KAAKm0B,WACH/yB,EAAQi3B,SACX,SAAC1+B,G,OAAuCA,EAAMs/B,WAAa,gBAAkB,W,k+FCrB9F,IAAM+W,GAAU77C,EAAAA,GAAOuE,MAAK,MAKtBi5C,GAAex9C,EAAAA,GAAO6B,IAAG,MAIlB,SAAC2D,G,OAAWA,EAAMmJ,MAAQnJ,EAAMmJ,MAAQ,M,IACpC,SAACnJ,G,OAAWA,EAAMP,SAAWO,EAAMP,SAAW,C,IAC9C,SAACO,G,OAAWA,EAAM2Q,SAAW3Q,EAAM2Q,SAAW,M,IAQjD,SAAC3Q,G,OAAWA,EAAMi4C,UAAY7xC,EAAMk1B,SAASO,oBAAsBz1B,EAAMk1B,SAASM,c,GAG9En0B,EAAQm5B,OACTn5B,EAAQq2B,OACN,SAAC99B,G,OAAWA,EAAMN,SAAW,MAAQ,G,IAMxB,SAACM,G,OAAsCA,EAAMN,SAAW,GAAK0G,EAAMy0B,MAAMC,S,IAKnGwb,GAAmB97C,EAAAA,GAAO6B,IAAG,MAM7Bk6C,GAAqB/7C,EAAAA,GAAO6B,IAAG,MAI/Bm6C,GAAkBh8C,EAAAA,GAAOgM,KAAI,MAEb,SAACxG,G,OAAWA,EAAMk4C,gBAAkB,EAAIzwC,EAAQC,Q,GACnDk1B,GACA,SAAC58B,G,OAAyCA,EAAMy2C,UAAY,MAAQ,K,IACtE,SAACz2C,G,OAAWA,EAAMk4C,gBAAkBzb,EAAUiC,QAAUjC,EAAUqB,K,IAChE,SAAC99B,G,OAAWA,EAAMk4C,gBAAkB,SAAWzb,EAAUmE,M,IACvD,SAAC5gC,G,OAAWA,EAAMk4C,gBAAkB,MAAQ,C,IACpD,SAACl4C,G,OACNA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAM35B,EAAMk4C,gBAAkB9xC,EAAMQ,QAAQmzB,MAAQ3zB,EAAMC,KAAKm0B,U,IACtF,SAACx6B,G,OAAWA,EAAMN,SAAW,MAAQ,G,IAG9Cg3C,GAAuBl8C,EAAAA,GAAOuE,MAAK,MAEnB,SAACiB,G,OAAWA,EAAMk4C,gBAAkB,EAAIzwC,EAAQC,Q,GACnDk1B,GACA,SAAC58B,G,OAAyCA,EAAMy2C,UAAY,MAAQ,K,IACtE,SAACz2C,G,OAAWA,EAAMk4C,gBAAkBzb,EAAUiC,QAAUjC,EAAUqB,K,IAChE,SAAC99B,G,OAAWA,EAAMk4C,gBAAkB,SAAWzb,EAAUmE,M,IACvD,SAAC5gC,G,OAAWA,EAAMk4C,gBAAkB,MAAQ,C,GAC7CzwC,EAAQi3B,SACf,SAAC1+B,G,OACNA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAM35B,EAAMk4C,gBAAkB9xC,EAAMQ,QAAQmzB,MAAQ3zB,EAAMC,KAAKm0B,U,IACtF,SAACx6B,G,OAAWA,EAAMN,SAAW,MAAQ,G,IAG9Cy4C,GAAoB39C,EAAAA,GAAO49C,OAAM,MACf,SAACp4C,G,OAAWA,EAAMN,UAAW+iC,EAAAA,EAAAA,IAAO,MAAOr8B,EAAMQ,QAAQC,OAAST,EAAMQ,QAAQC,K,IAC3F,SAAC7G,G,OAAWA,EAAMN,UAAW27B,EAAAA,EAAAA,IAAe,MAAOj1B,EAAMQ,QAAQmzB,OAAS3zB,EAAMQ,QAAQmzB,K,GAClF6C,GACF,SAAC58B,G,OAAWA,EAAMk4C,gBAAkB,OAASzb,EAAUqB,K,IACrD,SAAC99B,G,OAAWA,EAAMk4C,gBAAkB,OAASzb,EAAUmE,M,GAC3Dn5B,EAAQq2B,MAASr2B,EAAQs3B,QAAWt3B,EAAQq2B,MAASr2B,EAAQq2B,OAGxD,SAAC99B,G,OACbA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAM35B,EAAMi4C,UAAY7xC,EAAMC,KAAKq0B,gBAAkBt0B,EAAMC,KAAKo0B,U,IACjF,SAACz6B,G,OAAWA,EAAMk4C,gBAAkB,EAAI9a,EAAOC,O,IAW9Dgb,GAAe79C,EAAAA,GAAOm8B,OAAM,MAIrB2hB,GAAczf,EAAAA,YACvB,WAiBIzgC,G,IAfIyD,EAAAA,EAAAA,OACAiD,EAAAA,EAAAA,GACAK,EAAAA,EAAAA,QACA+4C,EAAAA,EAAAA,gBACAx4C,EAAAA,EAAAA,SACAyB,EAAAA,EAAAA,SACA82C,EAAAA,EAAAA,UACA9uC,EAAAA,EAAAA,MACA1J,EAAAA,EAAAA,SACAkR,EAAAA,EAAAA,SACAzX,EAAAA,EAAAA,MACA+F,EAAAA,EAAAA,YACAuG,EAAAA,EAAAA,QACGxF,EAAAA,GAAAA,EAAAA,CAbHnE,SACAiD,KACAK,UACA+4C,kBACAx4C,WACAyB,WACA82C,YACA9uC,QACA1J,WACAkR,WACAzX,QACA+F,cACAuG,Y,OAKJ,gBAACwyC,GAAAA,CAAat4C,SAAUA,EAAUyJ,MAAOA,EAAO1J,SAAUA,EAAUkR,SAAUA,GAC1E,gBAACwnC,GAAAA,GAAAA,CACGhf,eAAc,GAAU,OAAPt9B,EAAO,WACxBiD,GAAIA,EACJK,QAASA,EACT+4C,gBAAiBA,EACjBx4C,SAAUA,EACVyB,SAAUA,EACV82C,UAAWA,EACX/+C,MAAOA,EACPd,IAAKA,GACD4H,GAEHf,GAAe,gBAACo5C,GAAAA,CAAan/C,MAAO,IAAK+F,GACzCuG,EAAQ9C,KAAI,SAACwiB,EAAWgN,G,OACrB,gBAACmmB,GAAAA,CAAal6C,IAAK,GAAiB+zB,OAAdhN,EAAKhsB,MAAM,KAAK,OAAFg5B,GAAKh5B,MAAOgsB,EAAKhsB,OAChDgsB,EAAKlmB,K,0rEAO9Bs5C,GAAYhmC,YAAc,cAECumB,EAAAA,YACvB,WAkBIzgC,G,IAhBIyD,EAAAA,EAAAA,OACAiD,EAAAA,EAAAA,GACAY,EAAAA,EAAAA,SACAxG,EAAAA,EAAAA,MACAiI,EAAAA,EAAAA,SAAAA,EAAAA,EACAlC,YAAAA,OAAAA,IAAc,OACdE,EAAAA,EAAAA,QACAJ,EAAAA,EAAAA,MACAyG,EAAAA,EAAAA,QACAoxC,EAAAA,EAAAA,UACAsB,EAAAA,EAAAA,gBACArB,EAAAA,EAAAA,cACAoB,EAAAA,EAAAA,UACAxB,EAAAA,EAAAA,UACGz2C,EAAAA,GAAAA,EAAAA,CAdHnE,SACAiD,KACAY,WACAxG,QACAiI,WACAlC,cACAE,UACAJ,QACAyG,UACAoxC,YACAsB,kBACArB,gBACAoB,YACAxB,cAKJ,OAAOG,EACH,gBAACN,GAAgBA,GAAAA,CAAC2B,UAAWA,GAAej4C,GACxC,gBAACu2C,GAAkBA,KACf,gBAACG,GAAoBA,CACjBvd,eAAc,GAAU,OAAPt9B,EAAO,UACxB6D,SAAUA,EACVP,QAASA,EACT2G,QAAShH,EACTo5C,gBAAiBA,EACjBzB,UAAWA,GAEV13C,GAEL,gBAAC+2C,GAAWA,CAACj6C,OAAQA,EAAQk6C,aAAcc,GACvC,gBAAChB,GAAYA,QAGrB,gBAACyC,GAAAA,GAAAA,CACGz8C,OAAQA,EACRiD,GAAIA,EACJ0G,QAASA,EACTrG,QAASA,EACT+4C,gBAAiBA,EACjBx4C,SAAUA,EACVyB,SAAUA,EACV82C,UAAWA,EACX/+C,MAAOA,EACP+F,YAAaA,EACb7G,IAAKA,GACD4H,KAIZ,gBAACq2C,GAAOA,GAAAA,CAACld,eAAc,GAAU,OAAPt9B,EAAO,UAAS6D,SAAUA,EAAUu4C,UAAWA,GAAej4C,GACnFjB,GACG,gBAACy3C,GAAeA,CACZ92C,SAAUA,EACVP,QAASA,EACT+4C,gBAAiBA,EACjBzB,UAAWA,GAEV13C,GAGT,gBAACu5C,GAAAA,GAAAA,CACGz8C,OAAQA,EACRiD,GAAIA,EACJ0G,QAASA,EACTrG,QAASA,EACT+4C,gBAAiBA,EACjBx4C,SAAUA,EACVyB,SAAUA,EACV82C,UAAWA,EACX/+C,MAAOA,EACP+F,YAAaA,EACb7G,IAAKA,GACD4H,IAIpB,IAEQsS,YAAc,cCpPE9X,EAAAA,GAAO4pC,GAAE,KACf38B,EAAQm5B,QAGEpmC,EAAAA,GAAOwpC,GAAE,KAE1Bv8B,EAAQC,SAAYD,EAAQm5B,OAAUn5B,EAAQC,UACrC,SAAC1H,G,OAAWA,EAAMu4C,WAAanyC,EAAMi2B,OAAOG,qBAAuB,M,IAPpF,IAUDgc,GAAoB,Q,IAEQh+C,EAAAA,GAAO6B,IAAG,MAC/B,SAAC2D,G,OACNA,EAAMy4C,cAAgBz4C,EAAMy4C,aAAa1+C,OAAS,EAC5CiG,EAAM04C,WACF,QAA+BjxC,OAAvB+wC,GAAkB,OAAoB,OAAf/wC,EAAQm5B,OAAO,KAC9C,eAAsCn5B,OAAvB+wC,GAAkB,OAAoB,OAAf/wC,EAAQm5B,OAAO,KACzD,M,IAGS,SAAC5gC,G,OAAWA,EAAM04C,WAAa,WAAa,Y,IAG3Cl+C,EAAAA,GAAOgM,KAAI,KAIdi2B,EAAUqB,MACRrB,EAAUmE,OAEhBx6B,EAAMC,KAAKm0B,YAQLhgC,EAAAA,GAAO0H,MAAK,MAIf1H,EAAAA,GAAOuE,MAAK,KAEfqH,EAAMC,KAAKm0B,WAEPiC,EAAUqB,MAERrB,EAAU+C,OAOdhlC,EAAAA,GAAO+B,OAAM,KAKjBkL,EAAQq2B,MACJr2B,EAAQq2B,MAEIb,EAAMC,WAAgCD,EAAMC,YAGnD7B,EAAAA,EAAAA,IAAe,GAAKj1B,EAAMC,KAAKm0B,aAC3Ba,EAAAA,EAAAA,IAAe,IAAMj1B,EAAMC,KAAKm0B,cAIzChgC,EAAAA,EAAAA,IAAOm+C,EAAAA,GAAPn+C,CAAWm+C,KAGlBvyC,EAAMC,KAAKm0B,aAGAhgC,EAAAA,EAAAA,IAAO2B,GAAP3B,CAAW2B,OAIN3B,EAAAA,EAAAA,IAAOg9C,GAAPh9C,CAAoBg9C,MAIxBh9C,EAAAA,GAAOgM,KAAI,KAChBiB,EAAQq2B,MAGVrB,EAAUiC,SAIElkC,EAAAA,GAAO6B,IAAG,MAC1B,SAAC2D,G,OAAWA,EAAMy4C,cAAgBz4C,EAAMy4C,aAAa1+C,OAAS,MAAQ,M,ilDCjEnDS,EAAAA,GAAO6B,IAAG,MACrB,SAAC2D,G,OAAWA,EAAML,QAAU+3C,GAAsBG,SAAW,EAAIpwC,EAAQw3B,Q,IAGxEzkC,EAAAA,GAAO6B,IAAG,KAEZoL,EAAQm5B,QAGFpmC,EAAAA,GAAO6B,IAAG,MAE1B,SAAC2D,G,OACCA,EAAML,QAAU+3C,GAAsBG,SAAWzxC,EAAMi2B,OAAOC,gBAAkBl2B,EAAMC,KAAK8zB,W,IAClF,SAACn6B,G,OAAWA,EAAML,QAAU+3C,GAAsBG,SAAW,cAAgB,C,IAC1E,SAAC73C,G,OAAWA,EAAML,QAAU+3C,GAAsBG,SAAW,OAAS,S,IAC/E,SAAC73C,G,OACRA,EAAML,QAAU+3C,GAAsBG,SAAWzxC,EAAMi2B,OAAOC,gBAAkB70B,EAAQm5B,M,IAI1EpmC,EAAAA,GAAO6B,IAAG,MAGjB,SAAC2D,G,OACRA,EAAML,QAAU+3C,GAAsBG,SAAW,OAAsB,OAAfpwC,EAAQm5B,QAAW,OAAsB,OAAfn5B,EAAQm5B,O,IAC1E,SAAC5gC,G,OACjBA,EAAML,QAAU+3C,GAAsBG,SAAW,2CAA6C,M,IACpF,SAAC73C,G,OACXA,EAAML,QAAU+3C,GAAsBG,SAAW,mCAAqC,M,IAI/Er9C,EAAAA,GAAOoN,GAAE,MAEH,SAAC5H,G,OAAWA,EAAML,QAAU+3C,GAAsBG,SAAW,OAASpb,EAAU+C,K,IAC9E,SAACx/B,G,OAAWA,EAAML,QAAU+3C,GAAsBG,SAAW,OAASpb,EAAUsC,O,GAE5Et3B,EAAQi3B,SAOblkC,EAAAA,GAAO6B,IAAG,KACjBoL,EAAQq2B,OAGCtjC,EAAAA,GAAOC,EAAC,KAEXgiC,EAAUqB,MACZr2B,EAAQq2B,MACJrB,EAAU+C,OAKVhlC,EAAAA,GAAO6B,IAAG,OAKN7B,EAAAA,EAAAA,IAAOsoC,GAAPtoC,CAAmBsoC,MAC9B,SAAC9iC,G,OAAWA,EAAML,QAAU+3C,GAAsBG,SAAW,WAAa,Q,IAC/E,SAAC73C,G,OAAWA,EAAML,QAAU+3C,GAAsBG,SAAW,WAAQvqC,C,IACnE,SAACtN,G,OAAWA,EAAML,QAAU+3C,GAAsBG,SAAW,WAAQvqC,C,IAG5D,SAACtN,G,OAAWA,EAAML,QAAU+3C,GAAsBG,SAAW,YAASvqC,C,IAI1E,SAACtN,G,OAAWA,EAAML,QAAU+3C,GAAsBG,SAAW,YAASvqC,C,IACvE,SAACtN,G,OAAWA,EAAML,QAAU+3C,GAAsBG,SAAW,YAASvqC,C,0vCCpHlE9S,EAAAA,GAAO6B,IAAG,MAQA7B,EAAAA,GAAO6B,IAAG,MAErB7B,EAAAA,GAAO6B,IAAG,KACToL,EAAQs3B,UAIXvkC,EAAAA,EAAAA,IAAO0nC,EAAAA,GAAP1nC,CAAkB0nC,KACxB97B,EAAMQ,QAAQ+yB,IAGNlyB,EAAQi3B,UAGRlkC,EAAAA,EAAAA,IAAO8+B,EAAAA,GAAP9+B,CAAkB8+B,KAC1BlzB,EAAMQ,QAAQgzB,MAGNnyB,EAAQi3B,SAGZlkC,EAAAA,GAAO6B,IAAG,MAMX7B,EAAAA,GAAO6B,IAAG,MAEX,SAAC2D,G,OACPA,EAAML,QAAU+3C,GAAsBG,SAAW,aAA0C,OAA7BzxC,EAAMi2B,OAAOC,iBAAoB,C,IAElF,SAACt8B,G,OAAWA,EAAML,QAAU+3C,GAAsBG,SAAY,eAAgB,C,IACpF,SAAC73C,G,OACRA,EAAML,QAAU+3C,GAAsBG,SAAW,OAAsB,OAAfpwC,EAAQm5B,QAAW,OAAsB,OAAfn5B,EAAQm5B,O,IAC1E,SAAC5gC,G,OACjBA,EAAML,QAAU+3C,GAAsBG,SAAW,2CAA6C,M,IACpF,SAAC73C,G,OACXA,EAAML,QAAU+3C,GAAsBG,SAAW,mCAAqC,M,IAC7E,SAAC73C,G,OAAWA,EAAML,QAAU+3C,GAAsBG,SAAW,OAASpb,EAAU+C,K,IAC9E,SAACx/B,G,OAAWA,EAAML,QAAU+3C,GAAsBG,SAAW,OAASpb,EAAUsC,O,IAIpEvkC,EAAAA,GAAOwpC,GAAE,M,u8BC3ExC,IAAM4U,GAAuBp+C,EAAAA,GAAO4pC,GAAE,MAgBzByU,GAAiBhgB,EAAAA,YAAwD,WAAyBzgC,G,IAAtBwgC,EAAAA,EAAAA,SAAa54B,EAAAA,GAAAA,EAAAA,CAAb44B,a,OACrF,gBAACggB,G,uUAAAA,CAAAA,CAAqBxgD,IAAKA,GAAS4H,GAC/B44B,E,20BAGTigB,GAAevmC,YAAc,iBCd7B,IAAMwmC,GAAkBt+C,EAAAA,GAAO+B,OAAOC,OAAsB,Y,MAAiB,CACzE,eAD2DX,EAAAA,O,GAAvCrB,C,KAGA4L,EAAMC,KAAK8zB,YAElBsC,EAAUqB,OAGH,SAAC99B,G,OAAWA,EAAM8oC,SAAW1iC,EAAMQ,QAAQC,OAAQ47B,EAAAA,EAAAA,IAAO,IAAMr8B,EAAMQ,QAAQC,M,GACzFT,EAAMQ,QAAQmzB,OAIdgf,GAAYlgB,EAAAA,YAAoD,WAAyBzgC,G,IAAtBwgC,EAAAA,EAAAA,SAAa54B,EAAAA,GAAAA,EAAAA,CAAb44B,a,OAC5E,gBAACkgB,G,uUAAAA,CAAAA,CAAgB1gD,IAAKA,GAAS4H,GAC1B44B,E,qzCAGTmgB,GAAUzmC,YAAc,YCDxB,IAAMqwB,GAAcnoC,EAAAA,GAAO0H,MAAK,MACR,SAAClC,G,OACjBA,EAAMN,UAAW+iC,EAAAA,EAAAA,IAAO,MAAOr8B,EAAMQ,QAAQC,OAAST,EAAMQ,QAAQC,K,IAC/D,SAAC7G,G,OACNA,EAAMN,UAAW27B,EAAAA,EAAAA,IAAe,MAAOj1B,EAAMQ,QAAQmzB,OAAS3zB,EAAMQ,QAAQmzB,K,GACnE0C,EAAUqB,MACRrB,EAAUmE,OACdn5B,EAAQq2B,OAGH,SAAC99B,G,OAAqCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKo0B,U,GACpF2C,EAAOC,SAOf2b,GAAgBngB,EAAAA,YACzB,WAmBIzgC,G,IAjBImH,EAAAA,EAAAA,aACAokC,EAAAA,EAAAA,UACA9nC,EAAAA,EAAAA,OACAi7C,EAAAA,EAAAA,aACAp3C,EAAAA,EAAAA,SACAZ,EAAAA,EAAAA,GACAK,EAAAA,EAAAA,QACA+F,EAAAA,EAAAA,UACA6xC,EAAAA,EAAAA,UACAkC,EAAAA,EAAAA,QACAC,EAAAA,EAAAA,SACAl6C,EAAAA,EAAAA,KACAC,EAAAA,EAAAA,YACAC,EAAAA,EAAAA,SACAhG,EAAAA,EAAAA,MACAiI,EAAAA,EAAAA,SAIJ,OACI,gBAACwhC,GAAWA,GAAAA,GAAAA,GAAAA,CACR/jC,KAAK,WACL46B,aAAY16B,EACZS,aAAcA,EACdokC,UAAWA,EACXxK,eAAct9B,QACe,IAAjBi7C,GAAgC,CAAEA,aAAAA,IAAa,CAC3Dp3C,SAAUA,EACVZ,GAAIA,EACJK,QAASA,EACT+F,UAAWA,EACX6xC,UAAWA,EACXoC,UAAW,OACXF,QAASA,EACTC,SAAUA,EACVl6C,KAAMA,EACNmC,SAAUA,EACVlC,YAAaA,EACb7G,IAAKA,EACL8G,SAAUA,SACY,IAAVhG,GAAyB,CAAEA,MAAAA,IAGnD,I,4iEAEJ8/C,GAAc1mC,YAAc,gBC5D5B,IAAM8jC,GAAiB,sDAKjBC,GAAU77C,EAAAA,GAAOuE,MAAK,KACtBq3C,IAGAE,GAAmB97C,EAAAA,GAAO6B,IAAG,KAC7B+5C,IAGAG,GAAqB/7C,EAAAA,GAAO6B,IAAG,MAI/Bm6C,GAAkBh8C,EAAAA,GAAOgM,KAAI,KAEbiB,EAAQC,SACb+0B,EAAUqB,MACRrB,EAAUmE,QACV,SAAC5gC,G,OAAyCA,EAAMy2C,UAAY,MAAQ,K,IAC1E,SAACz2C,G,OAAyCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKm0B,U,IACvF,SAACx6B,G,OAAyCA,EAAMN,SAAW,MAAQ,G,IAG5Eg3C,GAAuBl8C,EAAAA,GAAOuE,MAAK,KAErB0I,EAAQi3B,QACNj3B,EAAQC,SACb+0B,EAAUqB,MACRrB,EAAUmE,QACV,SAAC5gC,G,OAAyCA,EAAMy2C,UAAY,MAAQ,K,IAC1E,SAACz2C,G,OAAyCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKm0B,U,IACvF,SAACx6B,G,OAAyCA,EAAMN,SAAW,MAAQ,G,IAGrES,GAAgB04B,EAAAA,YACzB,WAwBIzgC,G,IAtBIyD,EAAAA,EAAAA,OACAkD,EAAAA,EAAAA,MACAD,EAAAA,EAAAA,GACA83C,EAAAA,EAAAA,UACAC,EAAAA,EAAAA,cACA53C,EAAAA,EAAAA,YACAD,EAAAA,EAAAA,KACAM,EAAAA,EAAAA,UACAw3C,EAAAA,EAAAA,aACAp3C,EAAAA,EAAAA,SACAP,EAAAA,EAAAA,QACAgC,EAAAA,EAAAA,SACA+D,EAAAA,EAAAA,UACA6xC,EAAAA,EAAAA,UACAkC,EAAAA,EAAAA,QACAC,EAAAA,EAAAA,SACAh6C,EAAAA,EAAAA,SACAu3C,EAAAA,EAAAA,UACAv9C,EAAAA,EAAAA,MACA+H,EAAAA,EAAAA,UACGjB,EAAAA,GAAAA,EAAAA,CApBHnE,SACAkD,QACAD,KACA83C,YACAC,gBACA53C,cACAD,OACAM,YACAw3C,eACAp3C,WACAP,UACAgC,WACA+D,YACA6xC,YACAkC,UACAC,WACAh6C,WACAu3C,YACAv9C,QACA+H,cAKJ,OAAO21C,EACH,gBAACN,GAAgBA,GAAAA,CAACr1C,UAAWA,GAAejB,GACxC,gBAACu2C,GAAkBA,KACf,gBAACG,GAAoBA,CACjBvd,eAAc,GAAU,OAAPt9B,EAAO,UACxB46C,UAAWA,EACXt3C,QAASA,EACTO,SAAUA,EACVoG,QAAShH,GAERC,GAEL,gBAAC+2C,GAAWA,CAACj6C,OAAQA,EAAQk6C,aAAcc,GACvC,gBAAChB,GAAYA,QAGrB,gBAACmD,GAAaA,GAAAA,GAAAA,CACVn9C,OAAQ,GAAU,OAAPA,EAAO,UAClBiD,GAAIA,EACJ6kC,UAAWrkC,EACXN,KAAMA,EACNC,YAAaA,EACbu6B,aAAY16B,EACZoG,UAAWA,EACX6xC,UAAWA,EACXkC,QAASA,EACTC,SAAUA,EACVh6C,SAAUA,EACVC,QAASA,EACTO,SAAUA,QACY,IAAVxG,GAAyB,CAAEA,MAAAA,QACV,IAAjB49C,GAAgC,CAAEA,aAAAA,IAAa,CAC3D1+C,IAAKA,MAIb,gBAACi+C,GAAOA,GAAAA,CAACld,eAAc,GAAU,OAAPt9B,EAAO,UAASoF,UAAWA,GAAejB,GAChE,gBAACw2C,GAAeA,CAACr3C,QAASA,EAASO,SAAUA,EAAU+2C,UAAWA,GAC7D13C,GAEL,gBAACi6C,GAAaA,GAAAA,GAAAA,CACVn9C,OAAQ,GAAU,OAAPA,EAAO,UAClBiD,GAAIA,EACJ6kC,UAAWrkC,EACXN,KAAMA,EACNC,YAAaA,EACbu6B,aAAY16B,EACZoG,UAAWA,EACX6xC,UAAWA,EACXkC,QAASA,EACTC,SAAUA,EACVh6C,SAAUA,EACVC,QAASA,EACTO,SAAUA,QACY,IAAVxG,GAAyB,CAAEA,MAAAA,QACV,IAAjB49C,GAAgC,CAAEA,aAAAA,IAAa,CAC3D31C,SAAUA,EACV/I,IAAKA,KAIrB,I,izCAEJ+H,GAAcmS,YAAc,gBCrI5B,IAAMqwB,GAAcnoC,EAAAA,GAAO0H,MAAK,MACR,SAAClC,G,OACjBA,EAAMN,UAAW+iC,EAAAA,EAAAA,IAAO,MAAOr8B,EAAMQ,QAAQC,OAAST,EAAMQ,QAAQC,K,IAC/D,SAAC7G,G,OACNA,EAAMN,UAAW27B,EAAAA,EAAAA,IAAe,MAAOj1B,EAAMQ,QAAQmzB,OAAS3zB,EAAMQ,QAAQmzB,K,GACnE0C,EAAUqB,MACRrB,EAAUmE,OACdn5B,EAAQq2B,OAGH,SAAC99B,G,OAAqCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKo0B,U,GACpF2C,EAAOC,SAOf+b,GAAcvgB,EAAAA,YACvB,WAoBIzgC,G,IAlBImH,EAAAA,EAAAA,aACAokC,EAAAA,EAAAA,UACA9nC,EAAAA,EAAAA,OACAi7C,EAAAA,EAAAA,aACAp3C,EAAAA,EAAAA,SACAZ,EAAAA,EAAAA,GACAK,EAAAA,EAAAA,QACA0P,EAAAA,EAAAA,IACAwqC,EAAAA,EAAAA,IACAr6C,EAAAA,EAAAA,KACAC,EAAAA,EAAAA,YACAC,EAAAA,EAAAA,SACAi2C,EAAAA,EAAAA,KACAj8C,EAAAA,EAAAA,MACAiI,EAAAA,EAAAA,SACAqiC,EAAAA,EAAAA,OACA8V,EAAAA,EAAAA,UAIJ,OACI,gBAAC3W,GAAWA,GAAAA,GAAAA,GAAAA,CACRpjC,aAAcA,EACdokC,UAAWA,EACXxK,eAAct9B,QACe,IAAjBi7C,GAAgC,CAAEA,aAAAA,IAAa,CAC3Dp3C,SAAUA,EACVZ,GAAIA,EACJK,QAASA,EACT0P,IAAKA,EACLwqC,IAAKA,EACLr6C,KAAMA,EACNmC,SAAUA,EACVqiC,OAAQA,EACRvkC,YAAaA,EACb7G,IAAKA,EACL8G,SAAUA,EACVi2C,KAAMA,EACNv2C,KAAK,gBACiB,IAAV1F,GAAyB,CAAEA,MAAAA,GAClCogD,GAAa,CAAE,aAAcA,IAG9C,I,mmDAEJF,GAAY9mC,YAAc,cC7E1B,IAAM8jC,GAAiB,sDAKjBC,GAAU77C,EAAAA,GAAOuE,MAAK,KACtBq3C,IAGAE,GAAmB97C,EAAAA,GAAO6B,IAAG,KAC7B+5C,IAGAG,GAAqB/7C,EAAAA,GAAO6B,IAAG,MAI/Bm6C,GAAkBh8C,EAAAA,GAAOgM,KAAI,KAEbiB,EAAQC,SACb+0B,EAAUqB,MACRrB,EAAUmE,QACV,SAAC5gC,G,OAAyCA,EAAMy2C,UAAY,MAAQ,K,IAC1E,SAACz2C,G,OAAyCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKm0B,U,IACvF,SAACx6B,G,OAAyCA,EAAMN,SAAW,MAAQ,G,IAG5Eg3C,GAAuBl8C,EAAAA,GAAOuE,MAAK,KAEnB0I,EAAQC,SACVD,EAAQi3B,QACXjC,EAAUqB,MACRrB,EAAUmE,QACV,SAAC5gC,G,OAAyCA,EAAMy2C,UAAY,MAAQ,K,IAC1E,SAACz2C,G,OAAyCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKm0B,U,IACvF,SAACx6B,G,OAAyCA,EAAMN,SAAW,MAAQ,G,uuDAGvDm5B,EAAAA,YACvB,WAwBIzgC,G,IAtBImH,EAAAA,EAAAA,aACAokC,EAAAA,EAAAA,UACA9nC,EAAAA,EAAAA,OACAi7C,EAAAA,EAAAA,aACAp3C,EAAAA,EAAAA,SACAk3C,EAAAA,EAAAA,UACAC,EAAAA,EAAAA,cACA/3C,EAAAA,EAAAA,GACAK,EAAAA,EAAAA,QACAJ,EAAAA,EAAAA,MACA8P,EAAAA,EAAAA,IACAwqC,EAAAA,EAAAA,IACAr6C,EAAAA,EAAAA,KACAC,EAAAA,EAAAA,YAAAA,EAAAA,EACAC,SAAAA,OAAAA,IAAW,KACXi2C,EAAAA,EAAAA,KACAh0C,EAAAA,EAAAA,SACAs1C,EAAAA,EAAAA,UACAv9C,EAAAA,EAAAA,MACA+H,EAAAA,EAAAA,UACGjB,EAAAA,GAAAA,EAAAA,CApBHT,eACAokC,YACA9nC,SACAi7C,eACAp3C,WACAk3C,YACAC,gBACA/3C,KACAK,UACAJ,QACA8P,MACAwqC,MACAr6C,OACAC,cACAC,WACAi2C,OACAh0C,WACAs1C,YACAv9C,QACA+H,cAKJ,OAAO21C,EACH,gBAACN,GAAgBA,GAAAA,CAACr1C,UAAWA,GAAejB,GACxC,gBAACu2C,GAAkBA,KACf,gBAACG,GAAoBA,CACjBvd,eAAc,GAAU,OAAPt9B,EAAO,UACxB46C,UAAWA,EACXt3C,QAASA,EACTO,SAAUA,EACVoG,QAAShH,GAERC,GAEL,gBAAC+2C,GAAWA,CAACj6C,OAAQA,EAAQk6C,aAAcc,GACvC,gBAAChB,GAAYA,QAGrB,gBAACuD,GAAWA,CACR75C,aAAcA,EACdokC,UAAWA,EACX9nC,OAAQ,GAAU,OAAPA,EAAO,UAClBi7C,aAAcA,EACdp3C,SAAUA,EACVZ,GAAIA,EACJK,QAASA,EACT0P,IAAKA,EACLwqC,IAAKA,EACLr6C,KAAMA,EACNmC,SAAUA,EACVlC,YAAaA,EACbC,SAAUA,EACV9G,IAAKA,EACL+8C,KAAMA,EACNj8C,MAAOA,KAIf,gBAACm9C,GAAOA,GAAAA,CAACld,eAAc,GAAU,OAAPt9B,EAAO,UAASoF,UAAWA,GAAejB,GAChE,gBAACw2C,GAAeA,CAACr3C,QAASA,EAASO,SAAUA,EAAU+2C,UAAWA,GAC7D13C,GAEL,gBAACq6C,GAAWA,CACR75C,aAAcA,EACdokC,UAAWA,EACX9nC,OAAQ,GAAU,OAAPA,EAAO,UAClBi7C,aAAcA,EACdp3C,SAAUA,EACVZ,GAAIA,EACJK,QAASA,EACT0P,IAAKA,EACLwqC,IAAKA,EACLr6C,KAAMA,EACNmC,SAAUA,EACVlC,YAAaA,EACb7G,IAAKA,EACL8G,SAAUA,EACVi2C,KAAMA,EACNj8C,MAAOA,IAIvB,IAEQoZ,YAAc,cChG1B,IAAM+jC,GAAU77C,EAAAA,GAAO6B,IAAG,MAGhB,SAAC2D,G,OAAiCA,EAAMg3C,WAAah3C,EAAMg3C,WAAa,M,IACxE,SAACh3C,G,OAAkCA,EAAMu5C,gBAAqC,GAAnB,gB,IAC3D,SAACv5C,G,MAA2D,WAA1BA,EAAMu5C,gBAA+B,sBAAwB,E,IAC/F,SAACv5C,G,MAA2D,UAA1BA,EAAMu5C,gBAA8B,sBAAwB,E,IAGlGhD,GAAqB/7C,EAAAA,GAAO6B,IAAG,MAGlB,SAAC2D,G,OAA2CA,EAAMi3C,c,GAEhDxvC,EAAQ+3B,OAGvBgX,GAAkBh8C,EAAAA,GAAOuE,MAAK,KAChB0I,EAAQi3B,QACXjC,EAAUqB,MACRrB,EAAU+C,OAKV,SAACx/B,G,OAAyCA,EAAMy2C,UAAY,MAAQ,K,IAC1E,SAACz2C,G,OAAyCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKm0B,U,IACvF,SAACx6B,G,OAAyCA,EAAMN,SAAW,MAAQ,G,IAG5Eg3C,GAAuBl8C,EAAAA,GAAO6B,IAAG,MAKjCs6C,GAA0Bn8C,EAAAA,GAAO6B,IAAG,KACzBogC,EAAUiC,QACRjC,EAAUqB,OAChB,SAAC99B,G,OACNA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMQ,QAAQmzB,K,GACvCtyB,EAAQq2B,OAGV,SAAC99B,G,OAAkDA,EAAMu5C,gBAA0B,GAAR,K,IAClF,SAACv5C,G,MAA2E,WAA1BA,EAAMu5C,gBAA+B,MAAQ,E,IAC/F,SAACv5C,G,MAA2E,UAA1BA,EAAMu5C,gBAA8B,MAAQ,E,IAGlGC,GAAeh/C,EAAAA,GAAOgM,KAAI,KACfi2B,EAAUqB,OACd,SAAC99B,G,OAAsCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMQ,QAAQmzB,K,IAExF,SAAC/5B,G,MACmB,WAA1BA,EAAMu5C,gBAA+B,KAAmB,OAAd9xC,EAAQq2B,MAAM,QAAQ,SAAuB,OAAdr2B,EAAQq2B,M,IAE5E2b,GAAoB5gB,EAAAA,YAC7B,WA6BIzgC,G,IA3BImH,EAAAA,EAAAA,aACAokC,EAAAA,EAAAA,UACA9nC,EAAAA,EAAAA,OACAi7C,EAAAA,EAAAA,aACAp3C,EAAAA,EAAAA,SACAk3C,EAAAA,EAAAA,UACAC,EAAAA,EAAAA,cACA/3C,EAAAA,EAAAA,GACAK,EAAAA,EAAAA,QACAJ,EAAAA,EAAAA,MACA8P,EAAAA,EAAAA,IACAwqC,EAAAA,EAAAA,IACAr6C,EAAAA,EAAAA,KACAC,EAAAA,EAAAA,YAAAA,EAAAA,EACAC,SAAAA,OAAAA,IAAW,KACXi2C,EAAAA,EAAAA,KACAh0C,EAAAA,EAAAA,SACAs1C,EAAAA,EAAAA,UACAO,EAAAA,EAAAA,WAAAA,EAAAA,EACAC,eAAAA,OAAAA,IAAiB,YACjB/9C,EAAAA,EAAAA,MACA+H,EAAAA,EAAAA,UACA7B,EAAAA,EAAAA,kBACAs6C,EAAAA,EAAAA,OACAH,EAAAA,EAAAA,gBACGv5C,EAAAA,GAAAA,EAAAA,CAzBHT,eACAokC,YACA9nC,SACAi7C,eACAp3C,WACAk3C,YACAC,gBACA/3C,KACAK,UACAJ,QACA8P,MACAwqC,MACAr6C,OACAC,cACAC,WACAi2C,OACAh0C,WACAs1C,YACAO,aACAC,iBACA/9C,QACA+H,YACA7B,oBACAs6C,SACAH,oBAKJ,OACI,gBAAClD,G,uUAAOA,CAAAA,CACJp1C,UAAWA,EACX+1C,WAAYA,EACZuC,gBAAiBG,EAASH,OAAkBjsC,GACxCtN,GAEJ,gBAACu2C,GAAkBA,CAACU,eAAgBA,GAC/BL,EACG,gBAACF,GAAoBA,KACjB,gBAACF,GAAeA,CAACr3C,QAASA,EAASO,SAAUA,EAAU+2C,UAAWA,EAAW3wC,QAAShH,GACjFC,GAEL,gBAAC+2C,GAAWA,CAACj6C,OAAQA,EAAQk6C,aAAcc,GACvC,gBAAChB,GAAYA,QAIrB,gBAACW,GAAeA,CACZrd,eAAc,GAAU,OAAPt9B,EAAO,UACxBsD,QAASA,EACTO,SAAUA,EACV+2C,UAAWA,EACX3wC,QAAShH,GAERC,IAIZ26C,GAA8B,WAApBH,GACP,gBAACC,GAAAA,CAAar6C,QAASA,EAASo6C,gBAAiBA,GAC5CG,GAGT,gBAACN,GAAWA,CACR75C,aAAcA,EACdokC,UAAWA,EACX9nC,OAAQ,GAAU,OAAPA,EAAO,UAClBi7C,aAAcA,EACdp3C,SAAUA,EACVZ,GAAIA,EACJK,QAASA,EACT0P,IAAKA,EACLwqC,IAAKA,EACLr6C,KAAMA,EACNmC,SAAUA,EACVlC,YAAaA,EACb7G,IAAKA,EACL8G,SAAUA,EACVi2C,KAAMA,EACNj8C,MAAOA,IAEVwgD,GAA8B,UAApBH,GACP,gBAACC,GAAAA,CAAar6C,QAASA,EAASo6C,gBAAiBA,GAC5CG,GAGRt6C,GACG,gBAACu3C,GAAuBA,CAACx3C,QAASA,EAASo6C,gBAAiBG,EAASH,OAAkBjsC,GAClFlO,GAKrB,I,8eAGJq6C,GAAkBnnC,YAAc,oBCnMhC,IAwDA,GAxD4F,Y,QACxF+mB,KAAAA,OAAAA,IAAO,cACP19B,EAAAA,EAAAA,MACAyN,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,GAAAA,EAAAA,CAJHtgB,OACA19B,QACAyN,SACAD,U,OAGA,gBAACywC,GAAAA,E,uUAAOA,CAAAA,CAACC,QAAQ,YAAYzwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,GAAWg+C,GACzE,gBAACr9B,OAAAA,CACGxd,GAAG,UACHmC,UAAU,mCACV64C,EAAE,0EACFzgB,KAAMA,IAEV,gBAAC/c,OAAAA,CACGrb,UAAU,gCACV64C,EAAE,wcACFC,OAAO,OACP1gB,KAAK,YAET,gBAAC/2B,OAAAA,CACGxD,GAAG,KACHmC,UAAU,0BACV+4C,UAAU,mBACV3gB,KAAK,OACLsT,SAAS,KACTsN,WAAW,YACXC,WAAW,OAEX,gBAACC,QAAAA,CAAMz0B,EAAE,IAAI00B,EAAE,KAAI,MAIvB,gBAAC93C,OAAAA,CACGxD,GAAG,KACHmC,UAAU,0BACV+4C,UAAU,mBACV3gB,KAAK,OACLsT,SAAS,KACTsN,WAAW,YACXC,WAAW,OAEX,gBAACC,QAAAA,CAAMz0B,EAAE,IAAI00B,EAAE,KAAI,MAIvB,gBAAC99B,OAAAA,CACGxd,GAAG,sBACHmC,UAAU,8BACV64C,EAAE,mMACFE,UAAU,uCACV3gB,KAAK,S,EC5DjB,M,8eCSA,I,GAwDA,GAxD8F,Y,QAC1FA,KAAAA,OAAAA,IAAO,cACP19B,EAAAA,EAAAA,MACAyN,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,GAAAA,EAAAA,CAJHtgB,OACA19B,QACAyN,SACAD,U,OAGA,gBAACywC,GAAAA,E,uUAAOA,CAAAA,CAACC,QAAQ,YAAYzwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,GAAWg+C,GACzE,gBAACr9B,OAAAA,CACGxd,GAAG,UACHmC,UAAU,oCACV64C,EAAE,0EACFzgB,KAAMA,IAEV,gBAAC/c,OAAAA,CACGrb,UAAU,iCACV64C,EAAE,wcACFC,OAAO,OACP1gB,KAAK,YAET,gBAAC/2B,OAAAA,CACGxD,GAAG,KACHmC,UAAU,2BACV+4C,UAAU,mBACV3gB,KAAK,OACLsT,SAAS,KACTsN,WAAW,YACXC,WAAW,OAEX,gBAACC,QAAAA,CAAMz0B,EAAE,IAAI00B,EAAE,KAAI,MAIvB,gBAAC93C,OAAAA,CACGxD,GAAG,KACHmC,UAAU,2BACV+4C,UAAU,mBACV3gB,KAAK,OACLsT,SAAS,KACTsN,WAAW,YACXC,WAAW,OAEX,gBAACC,QAAAA,CAAMz0B,EAAE,IAAI00B,EAAE,KAAI,MAIvB,gBAAC99B,OAAAA,CACGxd,GAAG,sBACHmC,UAAU,+BACV64C,EAAE,mMACFE,UAAU,uCACV3gB,KAAK,S,EC5DjB,M,whJCyBYghB,G,qDAAAA,KAAAA,GAAAA,CAAAA,IAgCZ,IAAMhE,GAAU77C,EAAAA,GAAO8/C,SAAQ,MAKzBhE,GAAmB97C,EAAAA,GAAO8/C,SAAQ,MAKlCC,GAAe//C,EAAAA,GAAOggD,OAAM,MAK5BC,GAAmBjgD,EAAAA,GAAOgM,KAAI,KAEhBiB,EAAQi3B,QACNj3B,EAAQC,SACb+0B,EAAUqB,MACRrB,EAAUmE,QACV,SAAC5gC,G,OAA0CA,EAAM06C,WAAa,MAAQ,K,IAC5E,SAAC16C,G,OAA0CA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKm0B,U,IACxF,SAACx6B,G,OAA0CA,EAAMN,SAAW,MAAQ,G,IAG7EmC,GAAcrH,EAAAA,GAAOuE,MAAK,MAGV,SAACiB,G,OAAqCA,EAAMuJ,OAAS,cAAgB,Q,IACxE,SAACvJ,G,OAAqCA,EAAMuJ,OAAS,SAAW,E,IAC5D,SAACvJ,G,OAAqCA,EAAMuJ,OAAS,WAAa,E,IAC3E,SAACvJ,G,OAAqCA,EAAMN,SAAW,UAAY,S,IAG3E+kC,GAAkBjqC,EAAAA,GAAOgM,KAAI,MAEhB,SAACxG,G,OAAyCA,EAAMuJ,OAAS9B,EAAQq2B,MAAQ,G,GAC3ErB,EAAUqB,MAEd13B,EAAMC,KAAKm0B,WACLiC,EAAUmE,QACd,SAAC5gC,G,OAAyCA,EAAMN,SAAW,MAAQ,G,IAG5Ei7C,GAAqBngD,EAAAA,GAAO6B,IAAG,KAC7BwF,GACgB4F,EAAQ+3B,OAI1Bob,IAAgBpgD,EAAAA,EAAAA,IAAOqgD,GAAPrgD,CAAoBqgD,MAMpCC,IAAiBtgD,EAAAA,EAAAA,IAAOugD,GAAPvgD,CAAqBugD,MAMtCrW,GAAclqC,EAAAA,GAAO0H,MAAK,KAQxB04C,GACAE,GAGAF,GACAA,GACAA,GACAA,GACAE,GACAA,GACAA,GACAA,GAKIF,GACAA,GACAA,GACAA,GACAE,GACAA,GACAA,GACAA,IACQ,SAAC96C,G,OAAqCA,EAAMN,SAAW,UAAY,S,GAIvEk7C,GAA4BE,IACzB,SAAC96C,G,OAAqCA,EAAMwiC,aAAe,qBAAuB,G,IAClF,SAACxiC,G,OACRA,EAAMwiC,aAAe,oCAAsC,G,GAI3DoY,GACAE,IACQ,SAAC96C,G,OAA8CA,EAAML,MAAMq7C,a,GAEnEJ,GACAE,GAGAF,GACAA,GACAA,GACAE,GACAA,GACAA,IAMCG,GAA+B,CACxCD,cAAe50C,EAAMy0B,MAAMC,WAGOjC,EAAAA,YAClC,WAoBIzgC,G,QAlBIoqC,aAAAA,OAAAA,IAAe,KACfmB,EAAAA,EAAAA,UACA9nC,EAAAA,EAAAA,OACA6D,EAAAA,EAAAA,SACAk3C,EAAAA,EAAAA,UACAC,EAAAA,EAAAA,cACA/3C,EAAAA,EAAAA,GACAK,EAAAA,EAAAA,QACAq7C,EAAAA,EAAAA,OACAx7C,EAAAA,EAAAA,KACAmC,EAAAA,EAAAA,SAAAA,EAAAA,EACAxB,MAAAA,OAAAA,IAAQ,EAAAs7C,GAAAA,EACRxE,EAAAA,EAAAA,UACAiE,EAAAA,EAAAA,WACAxhD,EAAAA,EAAAA,MACA+H,EAAAA,EAAAA,UACGjB,EAAAA,GAAAA,EAAAA,CAhBHwiC,eACAmB,YACA9nC,SACA6D,WACAk3C,YACAC,gBACA/3C,KACAK,UACAq7C,SACAx7C,OACAmC,WACAxB,QACA82C,YACAiE,aACAxhD,QACA+H,cAKJ,OAAO21C,EACH,gBAACsE,EAAAA,GAAaA,CAACv7C,MAAOA,GAClB,gBAAC22C,GAAgBA,GAAAA,CAACnd,eAAc,GAAU,OAAPt9B,GAAUoF,UAAWA,GAAejB,GACnE,gBAACu6C,GAAAA,CAAa/gB,aAAY,GAAM,OAAH16B,EAAG,YAC5B,gBAAC27C,GAAAA,CAAiB/6C,SAAUA,EAAUP,QAASA,EAASu7C,WAAYA,GAC/DF,GAEL,gBAAC1E,GAAWA,CAACj6C,OAAQA,EAAQk6C,aAAcc,GACvC,gBAAChB,GAAYA,QAGrB,gBAAC8E,GAAAA,KACG,gBAAC94C,GAAWA,CAAC0H,QAAAA,EAAO7J,SAAUA,GAC1B,gBAAC+kC,GAAeA,CACZjL,aAAY,GAAM,OAAH16B,EAAG,aAClBY,SAAUA,EACV6J,QAAAA,EACAktC,UAAWA,GACd,aAGD,gBAAC/R,GAAWA,GAAAA,GAAAA,CACRlL,aAAY,GAAM,OAAH16B,EAAG,cAClB0jC,aAAcA,EACdmB,UAAWA,EACXxK,eAAc,GAAU,OAAPt9B,EAAO,oBACF,IAAV3C,GAAyB,CAAE+M,QAAmB,QAAV/M,IAA+B,CAC/EwG,SAAUA,EACVZ,GAAI,GAAM,OAAHA,EAAG,cACVE,KAAMA,EACNmC,SAAUA,EACV/I,IAAKA,EACLwG,KAAK,QACL1F,MAAK,SAET,gBAAC0hD,GAAAA,OAEL,gBAAC/4C,GAAWA,CAAC0H,QAAAA,EAAO7J,SAAUA,GAC1B,gBAAC+kC,GAAeA,CACZjL,aAAY,GAAM,OAAH16B,EAAG,cAClBY,SAAUA,EACV6J,QAAAA,EACAktC,UAAWA,GACd,cAGD,gBAAC/R,GAAWA,GAAAA,GAAAA,CACRlL,aAAY,GAAM,OAAH16B,EAAG,eAClB0jC,aAAcA,EACdmB,UAAWA,EACXxK,eAAc,GAAU,OAAPt9B,EAAO,qBACF,IAAV3C,GAAyB,CAAE+M,QAAmB,SAAV/M,IAAgC,CAChFwG,SAAUA,EACVZ,GAAI,GAAM,OAAHA,EAAG,eACVE,KAAMA,EACNmC,SAAUA,EACV/I,IAAKA,EACLwG,KAAK,QACL1F,MAAK,UAET,gBAAC4hD,GAAAA,UAMjB,gBAACI,EAAAA,GAAaA,CAACv7C,MAAOA,GAClB,gBAAC02C,GAAOA,GAAAA,CAACld,eAAc,GAAU,OAAPt9B,GAAUoF,UAAWA,GAAejB,GAC1D,gBAACu6C,GAAAA,CAAa/gB,aAAY,GAAM,OAAH16B,EAAG,YAC5B,gBAAC27C,GAAAA,CAAiB/6C,SAAUA,EAAUP,QAASA,EAASu7C,WAAYA,GAC/DF,IAGT,gBAACG,GAAAA,KACG,gBAAC94C,GAAWA,CAAC0H,QAAAA,EAAO7J,SAAUA,GAC1B,gBAAC+kC,GAAeA,CACZjL,aAAY,GAAM,OAAH16B,EAAG,aAClBY,SAAUA,EACV6J,QAAAA,EACAktC,UAAWA,GACd,aAGD,gBAAC/R,GAAWA,GAAAA,GAAAA,CACRlL,aAAY,GAAM,OAAH16B,EAAG,cAClB0jC,aAAcA,EACdmB,UAAWA,EACXxK,eAAc,GAAU,OAAPt9B,EAAO,oBACF,IAAV3C,GAAyB,CAAE+M,QAAmB,QAAV/M,IAA+B,CAC/EwG,SAAUA,EACVZ,GAAI,GAAM,OAAHA,EAAG,cACVE,KAAMA,EACNmC,SAAUA,EACV/I,IAAKA,EACLwG,KAAK,QACL1F,MAAK,SAET,gBAAC0hD,GAAAA,OAEL,gBAAC/4C,GAAWA,CAAC0H,QAAAA,EAAO7J,SAAUA,GAC1B,gBAAC+kC,GAAeA,CACZjL,aAAY,GAAM,OAAH16B,EAAG,cAClBY,SAAUA,EACV6J,QAAAA,EACAktC,UAAWA,GACd,cAGD,gBAAC/R,GAAWA,GAAAA,GAAAA,CACRlL,aAAY,GAAM,OAAH16B,EAAG,eAClB0jC,aAAcA,EACdmB,UAAWA,EACXxK,eAAc,GAAU,OAAPt9B,EAAO,qBACF,IAAV3C,GAAyB,CAAE+M,QAAmB,SAAV/M,IAAgC,CAChFwG,SAAUA,EACVZ,GAAI,GAAM,OAAHA,EAAG,eACVE,KAAMA,EACNmC,SAAUA,EACV/I,IAAKA,EACLwG,KAAK,QACL1F,MAAK,UAET,gBAAC4hD,GAAAA,SAMzB,IAEmBxoC,YAAc,yB,kjFC9SrC,IAAM4rB,IAAuB1jC,EAAAA,EAAAA,IAAO6jC,EAAP7jC,CAAqB6jC,MAE5C8c,GAAqB,0CAGrBC,GAA8B,QAE9BC,GAA8B,kDAMfje,OAJH+d,GAAkB,4GAKtBG,OADOle,EAAOC,QAAQ,mBAEf51B,OATgB,QAQK,0BAE3BA,OADMA,EAAQq2B,MAAM,oBACDr2B,OAAnBA,EAAQi3B,QAAQ,KAAsBj3B,OAAnBA,EAAQi3B,QAAQ,KACnBzB,OADsBx1B,EAAQC,SAAS,oCAEzD0zC,OADkBne,EAAMC,WAAW,kBACR,OAA3Bke,GAA2B,OAGlCG,GAAmB/gD,EAAAA,GAAO6B,IAAG,KACX+J,EAAMQ,QAAQC,MAGhCw0C,IAGAG,GAAiBhhD,EAAAA,GAAOuO,IAAG,KAC3BsyC,IAGAI,GAAcjhD,EAAAA,GAAOuO,IAAG,MAMxB2yC,IAAwBlhD,EAAAA,EAAAA,IAAOmhD,EAAAA,GAAPnhD,CAAqBmhD,MAM7CC,GAAuBphD,EAAAA,GAAO6B,IAAG,KAGlB+gC,EAAOC,QACfj3B,EAAMC,KAAK+zB,UAEPqC,EAAUqB,MACZr2B,EAAQq2B,MACCb,EAAMC,WAAgCD,EAAMC,YAG9DsZ,GAAkBh8C,EAAAA,GAAO6B,IAAG,KAGrB+J,EAAMy0B,MAAMC,UAEN,MACF2B,EAAUqB,MAIHb,EAAMC,YAGxBkC,IAAgB5kC,EAAAA,EAAAA,IAAO6kC,EAAAA,GAAP7kC,CAAmB6kC,MAOnCwc,IAAyBrhD,EAAAA,EAAAA,IAAOshD,GAAAA,GAAPthD,CAAWshD,KAUhCP,GACAC,GACkBp1C,EAAMy0B,MAAMC,UAG9B8gB,GACsBx1C,EAAMy0B,MAAMC,UACvB10B,EAAMQ,QAAQC,MAEzB2vC,GACsBpwC,EAAMQ,QAAQC,MAEpCu4B,GAMAwc,GACsBx1C,EAAMy0B,MAAMC,UACvB10B,EAAMQ,QAAQC,MAEzB2vC,GACsBpwC,EAAMQ,QAAQC,MACzBT,EAAMy0B,MAAMC,WAK3BihB,GAAYljB,EAAAA,YACd,WAkBIzgC,G,IAhBI4jD,EAAAA,EAAAA,YACAC,EAAAA,EAAAA,qBACAh7C,EAAAA,EAAAA,UACAi7C,EAAAA,EAAAA,YACAh7C,EAAAA,EAAAA,KACAi7C,EAAAA,EAAAA,SACAC,EAAAA,EAAAA,UACAC,EAAAA,EAAAA,iBACAC,EAAAA,EAAAA,OACAC,EAAAA,EAAAA,YACAC,EAAAA,EAAAA,cACAC,EAAAA,EAAAA,cACA9gD,EAAAA,EAAAA,MACA+gD,EAAAA,EAAAA,GACG18C,EAAAA,GAAAA,EAAAA,CAdHg8C,cACAC,uBACAh7C,YACAi7C,cACAh7C,OACAi7C,WACAC,YACAC,mBACAC,SACAC,cACAC,gBACAC,gBACA9gD,QACA+gD,O,OAKJ,gBAACb,G,uUAAAA,CAAAA,CACGG,YAAaA,EACb/6C,UAAWA,EACXi7C,YAAaA,EACbxrC,SAAU,IACVxP,KAAMA,EACNo7C,OAAQA,EACRC,YAAaA,EACbC,cAAeA,EACfG,QAAAA,EACAC,KAAK,EACLF,GAAIA,EACJtkD,IAAKA,GACD4H,GAEHy8C,EACGL,EACI,gCACI,gBAACb,GAAAA,KACG,gBAACrd,GAAoBA,CAACI,MAAO,QAASH,QAAS,mBAEnD,gBAACyd,GAAAA,KACIjgD,EACAsgD,GAAwB,UAA2C,OAAjCY,OAAOZ,GAAwB,EAAE,OAI5E,gCACI,gBAACV,GAAAA,KACIc,EAAmB,gBAACX,GAAAA,MAA2B,gBAACD,GAAAA,CAAYzyC,IAAKmzC,EAAUlzC,IAAKtN,KAErF,gBAACigD,GAAAA,KACIjgD,EACAsgD,GAAwB,UAA2C,OAAjCY,OAAOZ,GAAwB,EAAE,OAKhF,gBAACzF,GAAeA,KACX76C,EACAsgD,GAAwB,UAA2C,OAAjCY,OAAOZ,GAAwB,EAAE,KACpE,gBAAC7c,GAAaA,O,IAMlC2c,GAAUzpC,YAAc,YAExB,IC9NA,GD8NA,G,4sBElMA,IAAMwqC,GAAWtiD,EAAAA,GAAOwpC,GAAE,KAERmX,IACJ,SAACn7C,G,OAAWA,EAAM+8C,aAAe/8C,EAAMg9C,YAAc,QAAoB,M,IAClE,SAACh9C,G,OAAWA,EAAMi9C,aAAe,OAAS,M,IAC9C,SAACj9C,G,OACVA,EAAMk9C,gBAAmBl9C,EAAMm9C,WAAa,OAAS,OAAUn9C,EAAMm9C,WAAa,YAAS7vC,C,IACjF,SAACtN,G,OAAWA,EAAMk9C,gBAAkB,OAAS,O,IAE5C,SAACl9C,G,OAAWA,EAAMk9C,iBAAmBl9C,EAAMm9C,WAAa,YAAS7vC,C,IAChE,SAACtN,G,OAAWA,EAAMk9C,iBAAmBl9C,EAAMm9C,WAAa,YAAS7vC,C,IACxE,SAACtN,G,OAAWA,EAAM+8C,YAAc,OAAS,M,IACrC,SAAC/8C,G,OAAWA,EAAM2Q,SAAW3Q,EAAM2Q,SAAW,O,IAGzDxK,GAAO3L,EAAAA,GAAO6B,IAAG,MACJ,SAAC2D,G,OAAWA,EAAM+8C,YAAc,SAAW,Y,IAIhD,SAAC/8C,G,OAAWA,EAAM+8C,YAAe/8C,EAAMg9C,YAAc,QAAU,OAAU,M,IAChE,SAACh9C,G,OAAWA,EAAM+8C,YAAc,SAAW,Y,GAEnDt1C,EAAQm5B,QACV,SAAC5gC,G,OAAWA,EAAM+8C,YAAe/8C,EAAMg9C,YAAc,QAAU,OAAU,M,IACpE,SAACh9C,G,OAAWA,EAAM+8C,iBAAczvC,EAAY,M,IAGjD8vC,GAAc,Y,IACvBt+C,EAAAA,EAAAA,GACAk+C,EAAAA,EAAAA,YACAE,EAAAA,EAAAA,gBACAd,EAAAA,EAAAA,UACAe,EAAAA,EAAAA,WACAxsC,EAAAA,EAAAA,SACAhV,EAAAA,EAAAA,MACAorC,EAAAA,EAAAA,MACAllB,EAAAA,EAAAA,SACApR,EAAAA,EAAAA,QAEA,OACI,gBAACqsC,GAAAA,CACG3+C,IAAK,QAAW,OAAHW,GACbo+C,gBAAiBA,EACjBF,YAAaA,EACbD,YAAaX,EACbe,WAAYA,EACZxsC,SAAUA,GAETyrC,EACG,gBAACj2C,GAAAA,CACGrH,GAAIA,EACJq6B,eAAc,iBAAwC4N,QAAvBD,EAAAA,GAAAA,GAAanrC,GAAO,KAAS,OAANorC,GACtDiW,YAAaA,EACb/7C,UAAW4gB,EAAW,qBAA8B,OAATA,GAAa,GACxDk7B,aAAAA,GAEA,gBAAC7e,GAAoBA,CAACI,MAAO,QAASH,QAAS,mBAGnD,gBAACh4B,GAAAA,CACGgzB,eAAc,iBAAwC4N,QAAvBD,EAAAA,GAAAA,GAAanrC,GAAO,KAAS,OAANorC,GACtDsW,wBAAyB,CAAEC,OAAQ7sC,GACnC3R,GAAIA,EACJmC,UAAW4gB,EAAW,qBAA8B,OAATA,GAAa,GACxDm7B,YAAaA,IAKjC,E,mnBACAI,GAAY9qC,YAAc,cC3C1B,IAAMirC,GAAc/iD,EAAAA,GAAO6B,IAAG,MAGhB,SAAC2D,G,OAAWA,EAAMw9C,cAAiBx9C,EAAMy9C,aAAe,OAAS,oBAAuB,M,IACpF,SAACz9C,G,OAAWA,EAAMi9C,aAAe,OAAS,Q,IAC/C,SAACj9C,G,OAAWA,EAAMi9C,aAAe,OAAS,a,IACxC,SAACj9C,G,OAAWA,EAAMw9C,eAAiBx9C,EAAMi9C,aAAe,OAAS,O,IAC1E,SAACj9C,G,OACCA,EAAMw9C,gBACLx9C,EAAMi9C,cAAgBj9C,EAAMm9C,aAC7B,gBAAiC,OAAjBn9C,EAAMm9C,WAAW,6B,IAInCO,GAAQljD,EAAAA,GAAO4pC,GAAE,MAOjBuZ,GAAWnjD,EAAAA,GAAOwpC,GAAE,MAOb4Z,GAAiB,Y,IAC1BC,EAAAA,EAAAA,eACAL,EAAAA,EAAAA,cACAC,EAAAA,EAAAA,aACAR,EAAAA,EAAAA,aACAD,EAAAA,EAAAA,YACAG,EAAAA,EAAAA,WACAW,EAAAA,EAAAA,aACAC,EAAAA,EAAAA,UACAC,EAAAA,EAAAA,eACAC,EAAAA,EAAAA,SAEA,OACI,gBAACV,GAAAA,CACGM,eAAgBA,EAChBL,cAAeA,EACfC,aAAcA,EACdR,aAAcA,EACdn+C,GAAI,4BACJ1G,IAAK2lD,EACLG,SAAU,SAAChgD,G,OAAW8/C,EAAe9/C,E,EACrCi/C,WAAYA,GAEZ,gBAACgB,GAAAA,GAAeA,CAACC,aAAc,CAAEj1C,MAAO,SACpC,gBAACu0C,GAAAA,KACIO,EAASv7C,KAAI,SAAC27C,EAAqBtX,G,IAMjBsX,E,OALf,gBAACjB,GAAWA,CACRj/C,IAAK,QAAgB,OAARkgD,EAAKv/C,IAClBA,GAAIu/C,EAAKv/C,GACTk+C,YAAaA,EACbE,gBAAiBM,EACjBpB,UAAyB,QAAdiC,EAAAA,EAAKjC,iBAALiC,IAAAA,GAAAA,EACXlB,WAAYA,EACZxsC,SAAUmtC,EACVniD,MAAO0iD,EAAK1iD,MACZorC,MAAOA,EACPllB,SAAUw8B,EAAKx8B,SACfpR,QAAS4tC,EAAK5tC,SACjB,KAEHwsC,GAAgB,gBAACU,GAAAA,QAKvC,EACAC,GAAetrC,YAAc,iB,05EClG7B,IAAMgsC,GAAiB9jD,EAAAA,GAAO6B,IAAG,MAEV,SAAC2D,G,OAAWA,EAAMu+C,UAAY,aAAe,e,IACjD,SAACv+C,G,OAAWA,EAAMu+C,UAAY,aAAe,Q,IACjD,SAACv+C,G,OAAWA,EAAMw+C,oBAAsB/2C,EAAQm5B,OAAS,OAAyBn5B,OAAlBA,EAAQm5B,OAAO,KAAoB,OAAjBn5B,EAAQC,S,IAE/F,SAAC1H,G,OAAWA,EAAMw+C,qBAAsBzgB,EAAAA,EAAAA,GAAQ,GAAK33B,EAAMC,KAAKq0B,iBAAmB,a,IACrE,SAAC16B,G,OAAWA,EAAMw+C,oBAAsBp4C,EAAMQ,QAAQC,MAAQ,a,IAGhF43C,GAAyBjkD,EAAAA,GAAO6B,IAAG,KAEvBoL,EAAQm5B,QAIpB8d,GAAmBlkD,EAAAA,GAAO6B,IAAG,MAK7BsiD,GAAcnkD,EAAAA,GAAO6B,IAAG,MAiBxBk7C,IAAiB/8C,EAAAA,EAAAA,IAAOg9C,GAAPh9C,CAAoBg9C,MAE1B,SAACx3C,G,OAAWA,EAAMu+C,UAAY,QAAU,E,IAGnD/8C,IAAehH,EAAAA,EAAAA,IAAOkC,EAAPlC,CAAakC,MAoBrBkiD,GAA6F,Y,IACtGC,EAAAA,EAAAA,qBACAhB,EAAAA,EAAAA,eACAZ,EAAAA,EAAAA,aACA6B,EAAAA,EAAAA,eACArB,EAAAA,EAAAA,aACAsB,EAAAA,EAAAA,mBACAC,EAAAA,EAAAA,mBACAC,EAAAA,EAAAA,mBACAC,EAAAA,EAAAA,2BACAC,EAAAA,EAAAA,YACAZ,EAAAA,EAAAA,UACAa,EAAAA,EAAAA,iBAE0CpkD,EAAAA,IAAAA,EAAAA,EAAAA,UAAwB,WAA3DqkD,EAAmCrkD,EAAAA,GAApBskD,EAAoBtkD,EAAAA,IAE1C1C,EAAAA,EAAAA,YAAU,WACYgnD,EAAd7B,EAA+B,OAC1BR,GAAgB4B,EAAuC,kBACvDA,GAA6C,SAArBO,EAA8C,MACtEP,EAAuC,qBACtC5B,GAAqC,SAArBmC,EACJ,OADkD,iBAE5E,GAAG,CAACP,EAAsB5B,EAAcQ,IAExC,IAAM8B,GAA0Bt6C,EAAAA,EAAAA,UAAQ,WACpC,MAAyB,QAAlBo6C,GAA6C,oBAAlBA,GAAyD,uBAAlBA,CAC7E,GAAG,CAACA,IAEJ,OACI,iCACwB,SAAlBA,GAA4BH,IAC1B,gBAACZ,GAAAA,CACGE,oBAAqBK,EACrBN,WAAYgB,GAA2BhB,GAEpB,mBAAlBc,GACG,gBAAC9H,GAAcA,CACXz4C,GAAI,oBACJjD,OAAQ,6BACRmD,KAAM,oBACND,MAAO,kBACPwK,QAAAA,EACApI,SAAU49C,EACV94C,QAAS64C,EACTP,WAAYgB,GAA2BhB,IAG5B,uBAAlBc,GACG,gBAAC9H,GAAcA,CACXz4C,GAAI,oBACJjD,OAAQ,6BACRmD,KAAM,oBACND,MAAO,kBACPwK,QAAAA,EACApI,SAAU69C,EACV/4C,QAAS43C,IAGE,QAAlBwB,GACG,gBAACZ,GAAAA,KACG,gBAAClH,GAAcA,CACXz4C,GAAI,oBACJjD,OAAQ,6BACRmD,KAAM,oBACND,MAAO,kBACPwK,QAAAA,EACApI,SAAU69C,EACV/4C,QAAS43C,IAEb,gBAACtG,GAAcA,CACXz4C,GAAI,oBACJjD,OAAQ,6BACRmD,KAAM,oBACND,MAAO,kBACPwK,QAAAA,EACApI,SAAU49C,EACV94C,QAAS64C,KAIpBI,IAA+BzB,IAAiB8B,GAA2BhB,GACxE,gCAAGW,EAA2B,KAEjCK,GAA2BhB,GAAa,gBAACI,GAAAA,KAAaQ,GACtDI,IAA4BhB,GACzB,gBAACG,GAAAA,KACG,gBAACxD,EAAAA,GAAaA,CAACv7C,MAAOmiC,EAAMhH,WACxB,gBAACp+B,EAAMA,CAACb,OAAO,6BAA6BI,QAASgjD,GAAoB,sBAMpFM,GAA2BhB,GACxB,gBAACG,GAAAA,KACG,gBAACl9C,GAAYA,CACTi9B,KAAM,SACNxiC,QAASgjD,EACTzgD,QAAS,SACT3C,OAAO,wBAEP,gBAAC2jD,GAAAA,EAAMA,CAAC9lB,YAAa,IAAKvwB,MAAO,OAAQC,OAAQ,SAAU,sBAS3F,E,kbCtLA,IAAMq2C,GAAajlD,EAAAA,GAAO4pC,GAAE,MAEd,SAACpkC,G,OAAWA,EAAM0/C,oBAAuB1/C,EAAMy9C,aAAe,OAAS,oBAAuB,M,IAE7F,SAACz9C,G,MACR,GAAqByH,OAAlBA,EAAQm5B,OAAO,KAAuB5gC,OAApByH,EAAQm5B,OAAO,OAAkE,OAA7D5gC,EAAM0/C,oBAAsBj4C,EAAQm5B,OAASn5B,EAAQi3B,QAAQ,I,IACjG,SAAC1+B,G,OAAWA,EAAM0/C,oBAAsB,QAAmC,OAA3BtE,GAA2B,YAAa,O,IAG/FuE,GAAiBnlD,EAAAA,GAAOwpC,GAAE,MAEd,SAAChkC,G,OAAWA,EAAM8+C,eAAiBr3C,EAAQ+3B,MAAQ/3B,EAAQi3B,O,IAKhEkhB,GAAoB,Y,IAC7BF,EAAAA,EAAAA,oBACAjC,EAAAA,EAAAA,aACAQ,EAAAA,EAAAA,SACAa,EAAAA,EAAAA,eACAe,EAAAA,EAAAA,aACAC,EAAAA,EAAAA,aAEA,OACI,gBAACL,GAAAA,CACGC,oBAAqBA,EACrBjC,aAAcA,EACd3+C,GAAI,iBACJq6B,eAAc,8BAEb8kB,EAASv7C,KAAI,SAAC27C,EAAqBtX,G,OAChC,gBAAC4Y,GAAAA,CAAexhD,IAAK,OAAe,OAARkgD,EAAKv/C,IAAMggD,eAAgBA,GACnD,gBAAC/C,GAASA,CACNC,YAAa,SACbC,qBACI,EAAM/S,eAAe,yBAA2BmV,EAAKpC,sBAAyB,GAElFC,YAAa,4BACb/iB,eAAc,4BAAwD4N,QAA5BD,EAAAA,GAAAA,GAAauX,EAAK1iD,OAAO,KAAS,OAANorC,GACtE7lC,KAAM,IAAY,OAARm9C,EAAKv/C,IACfq9C,SAAUkC,EAAKlC,SACfE,iBAAkBgC,EAAKhC,iBACvBD,UAAWiC,EAAK0B,mBAChBzD,OAAQuD,EACRpD,cAAeqC,EACfnjD,MAAO0iD,EAAK1iD,MACZ+gD,GAAI2B,EAAKv/C,GACTy9C,YAAauD,I,IAMrC,E,61FAEAF,GAAkBttC,YAAc,oBCIhC,IAAM0tC,GAAgBxlD,EAAAA,GAAO6B,IAAG,KACR+J,EAAMC,KAAKC,YACrB,SAACtG,G,OAAWA,EAAMi9C,aAAe,OAAS,M,IAGlDgD,GAAqBzlD,EAAAA,GAAO6B,IAAG,KACb+J,EAAMC,KAAKC,YAErB,SAACtG,G,OAAWA,EAAMi9C,aAAe,OAAS,M,IAEpC,SAACj9C,G,OAAWA,EAAM69C,gBAAkB79C,EAAMy9C,aAAeh2C,EAAQm5B,YAAStzB,C,IAIxF4yC,GAAe1lD,EAAAA,GAAO6B,IAAG,MAEhB,SAAC2D,G,OAAWA,EAAMi9C,aAAgB,UAAW,GAAkB,OAAfx1C,EAAQm5B,OAAO,W,IACjE,SAAC5gC,G,OAAWA,EAAMi9C,aAAe,OAAS,oB,IAMjDkD,GAAY3lD,EAAAA,GAAO6B,IAAIG,OAAM,SAACwD,G,OAAqCA,C,GAAvDxF,C,MAIJ,SAACwF,G,OAAWA,EAAMi9C,aAAe,OAAS,K,IAIlDmD,IAAa5lD,EAAAA,EAAAA,IAAOkC,EAAPlC,CAAakC,MAOnBiV,GAAUknB,EAAAA,YACnB,WAkBIzgC,G,IAhBI6lD,EAAAA,EAAAA,SACAJ,EAAAA,EAAAA,eAAAA,EAAAA,EACAgC,aAAAA,OAAAA,IAAe,GAAC,KAChB9B,EAAAA,EAAAA,UACAC,EAAAA,EAAAA,eACAhB,EAAAA,EAAAA,YAAAA,EAAAA,EACAQ,cAAAA,OAAAA,IAAgB,SAChBP,aAAAA,OAAAA,IAAe,KACfa,EAAAA,EAAAA,aACAqB,EAAAA,EAAAA,YACAD,EAAAA,EAAAA,2BACAX,EAAAA,EAAAA,UACAa,EAAAA,EAAAA,iBACAiB,EAAAA,EAAAA,qBACGrgD,EAAAA,GAAAA,EAAAA,CAdHi+C,WACAJ,iBACAgC,eACA9B,YACAC,iBACAhB,cACAQ,gBACAP,eACAa,eACAqB,cACAD,6BACAX,YACAa,mBACAiB,yBAKgDrlD,EAAAA,IAAAA,EAAAA,EAAAA,UAAS6iD,GAAAA,GAAtDyC,EAA6CtlD,EAAAA,GAAvBulD,EAAuBvlD,EAAAA,GACNA,EAAAA,IAAAA,EAAAA,EAAAA,UAA8B,SAArBokD,GAAqB,GAArEoB,EAAuCxlD,EAAAA,GAAtBylD,EAAsBzlD,EAAAA,GACtBA,EAAAA,IAAAA,EAAAA,EAAAA,UAASijD,GAAAA,GAA1BlgD,EAAiB/C,EAAAA,GAAX0lD,EAAW1lD,EAAAA,GACcA,EAAAA,IAAAA,EAAAA,EAAAA,WAAS,MAAxCyiD,EAA+BziD,EAAAA,GAAjB2lD,EAAiB3lD,EAAAA,GACYA,EAAAA,IAAAA,EAAAA,EAAAA,UAASwiD,GAAAA,GAApDoD,EAA2C5lD,EAAAA,GAApB6lD,EAAoB7lD,EAAAA,GAC5C8lD,GAAwB3nD,EAAAA,EAAAA,UACM6B,EAAAA,IAAAA,EAAAA,EAAAA,WAAS,MAAtCmiD,EAA6BniD,EAAAA,GAAjB+lD,EAAiB/lD,EAAAA,GAC9BgmD,GAAwB7nD,EAAAA,EAAAA,QAAoC,MA0ElE,OAvBAb,EAAAA,EAAAA,YAAU,WACNioD,EAAoB1C,GACpBgD,EAAiBrD,GACjBkD,EAAQzC,GAEJ6C,EAAsBpoD,SAEtBooD,EAAsBpoD,QAAQM,iBAAiB,oBAAoB,WAC3DF,SAASmoD,kBACTN,GAAc,GAEdA,GAAc,EAEtB,GAER,GAAG,CAAC9C,EAAgBL,EAAeS,EAAU6C,KAE7CxoD,EAAAA,EAAAA,YAAU,WACNyF,EAAKy0B,SAAQ,SAAC6rB,GACM,gBAAZA,EAAKv/C,IAAsBiiD,GAAc,EACjD,GACJ,IAGI,gBAACf,GAAAA,G,uUAAAA,CAAAA,CAAc5nD,IAAKA,GAAS4H,GAAAA,CAAOi9C,aAAcA,IAC9C,gBAAC2B,GAAwBA,CACrBC,qBAAsB+B,SAAAA,EACtB/C,eAAgByC,SAAAA,EAChBrD,aAAcA,SAAAA,EACd6B,eAAgB0B,SAAAA,EAChB/C,aAAcA,SAAAA,EACdsB,mBAtCa,YAChByB,GAAmBH,GACpBA,IAEJI,GAAoBD,EACxB,EAkCYxB,mBAAoB,W,OAAMuB,GAAqBD,E,EAC/CrB,mBAlFa,W,IAGSiC,EA0BzBpoD,SAASmoD,kBAbNnoD,SAASqoD,eACTroD,SAASqoD,iBAEFroD,SAASsoD,oBAEhBtoD,SAASsoD,sBAEFtoD,SAASuoD,sBAEhBvoD,SAASuoD,wBAtBaH,EA2BLJ,EAAsBpoD,SA1B/B4oD,kBACRJ,EAAQI,oBACDJ,EAAQK,qBACfL,EAAQK,uBACDL,EAAQM,wBACfN,EAAQM,0BACDN,EAAQO,qBACfP,EAAQO,qBAuBpB,EAiDYvC,2BAA4BA,EAC5BC,YAAaA,EACbZ,UAAWA,EACXa,iBAAkBA,QAAAA,EAAoB,SAE1C,gBAACa,GAAAA,CACGxC,aAAcA,EACdI,eAAgBA,EAChBzlD,IAAK0oD,EACL7D,aAAcA,GAEbqD,GACG,gBAACV,GAAiBA,CACdF,oBAAqBkB,SAAAA,EACrBnD,aAAcA,EACdQ,SAAUlgD,EACV+gD,eAAgB0B,EAChBX,aAAcA,EACdC,aAjEM,WAClBkB,EAAsBtoD,SACtBsoD,EAAsBtoD,QAAQgpD,gBAEtC,IAgEY,gBAACxB,GAAAA,CAAajD,aAAcA,GACxB,gBAAC0E,GAAAA,GAAsBA,CACnBC,MAAO,CAAEC,eAAe,GACxBC,aAAc,EACdC,iBAAkB,EAClBC,SAAU,GACV5pD,IAAK4oD,IAEJ,Y,IAAGiB,EAAAA,EAAAA,OAAQC,EAAAA,EAAAA,QAASR,EAAAA,EAAAA,e,OACjB,gCACI,gBAAC9D,GAAcA,CACXC,eAAgByC,SAAAA,EAChB9C,cAAeoD,SAAAA,EACfnD,aAAcA,EACdR,aAAcA,SAAAA,EACdD,YAAaA,SAAAA,EACbG,WAAYA,EACZW,aAAcA,EACdC,UAAWA,EACXC,eAAgBA,EAChBC,SAAUA,IAEd,gBAACkC,GAAAA,CAAUlD,aAAcA,GACrB,gBAAC/B,EAAAA,GAAaA,CAACv7C,MAAOmiC,EAAM9D,SACxB,gBAACoiB,GAAAA,CAAWvkD,OAAQ,mBAAoBI,QAAS,W,OAAMimD,EAAQ,I,GAC1D,KAEL,gBAAC9B,GAAAA,CAAWvkD,OAAQ,kBAAmBI,QAAS,W,OAAMgmD,EAAO,I,GACxD,KAEL,gBAAC7B,GAAAA,CAAWvkD,OAAQ,qBAAsBI,QAAS,W,OAAMylD,G,GAAkB,W,MAYnH,IAEJ/vC,GAAQW,YAAc,UCxLL,sDACA,OAfjB,WAEI,I,IAFgB6vC,EAAAA,UAAAA,OAAAA,QAAAA,IAAAA,UAAAA,GAAAA,UAAAA,GAAS,GACrBC,EAAc,GACTlwB,EAAI,EAAGA,EAAIiwB,EAAQjwB,IACxBkwB,GAAe,+BAEnB,OAAOA,CACX,CASEC,CAAW,IAAI,MAPV,I,+jBCpGP,IAcA,GAdoF,Y,IAChFhpB,EAAAA,EAAAA,KACA19B,EAAAA,EAAAA,MACAyN,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,GAAAA,EAAAA,CAJHtgB,OACA19B,QACAyN,SACAD,U,OAGA,gBAACywC,GAAAA,E,uUAAOA,CAAAA,CAACC,QAAQ,cAAczwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GACvF,gBAACr9B,OAAAA,CAAKw9B,EAAE,6OACR,gBAACx9B,OAAAA,CAAKw9B,EAAE,2HACR,gBAACx9B,OAAAA,CAAKw9B,EAAE,qI,ECnBhB,M,8eCSA,IAaA,GAbgG,Y,IAC5FzgB,EAAAA,EAAAA,KACA19B,EAAAA,EAAAA,MACAyN,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,GAAAA,EAAAA,CAJHtgB,OACA19B,QACAyN,SACAD,U,OAGA,gBAACywC,GAAAA,E,uUAAOA,CAAAA,CAACC,QAAQ,cAAczwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GACvF,gBAACr9B,OAAAA,CAAKw9B,EAAE,6OACR,gBAACx9B,OAAAA,CAAKw9B,EAAE,2H,EClBhB,M,8eCOA,IAcA,GAdwF,Y,IACpF1wC,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,GAAAA,EAAAA,CAFHvwC,SACAD,U,OAGA,gBAACJ,M,uUAAAA,CAAAA,CACGI,MAAOC,EACPA,OAAQD,EACRF,IAAI,IACJD,IAAI,s1BACA2wC,G,ECjBZ,M,i0BCOA,IAAMpb,GAAY,OACL+jB,IAAa9nD,EAAAA,EAAAA,IAAO+nD,GAAP/nD,CAAqB+nD,KACnCn8C,EAAMy0B,MAAMC,UACXyD,GACCA,IAGDikB,IAAchoD,EAAAA,EAAAA,IAAOioD,GAAPjoD,CAAsBioD,KACrCr8C,EAAMy0B,MAAMC,UACXyD,GACCA,IAGDmkB,IAAoBloD,EAAAA,EAAAA,IAAOmoD,GAAPnoD,CAAkBmoD,KACvCv8C,EAAMy0B,MAAMC,UACXyD,GACCA,IAGDqkB,IAAapoD,EAAAA,EAAAA,IAAOm+C,GAAAA,EAAPn+C,CAAWm+C,KACzBvyC,EAAM01B,SAASM,cACdmC,GACCA,IAORskB,GAAe,eACoB,OAA7Bz8C,EAAM01B,SAASM,cAAc,4CAK5B0mB,IAAqBtoD,EAAAA,EAAAA,IAAO6kC,GAAAA,EAAP7kC,CAAmB6kC,KAC/CwjB,IAGOE,IAAoBvoD,EAAAA,EAAAA,IAAOwoD,GAAAA,EAAPxoD,CAAkBwoD,KAC7CH,I,8qBC7CC,IAAMI,GAAazoD,EAAAA,GAAO+wC,GAAE,KAG7BmX,GACkBj7C,EAAQi3B,SAInBwkB,GAAmB1oD,EAAAA,GAAO+B,OAAM,KAWhC6J,EAAM01B,SAASM,cAEtBkmB,GACAE,GACAE,GACkBj7C,EAAQi3B,S,6/BCRzB,IAAMykB,GAAc3oD,EAAAA,GAAO6B,IAAG,MAET,SAAC2D,G,OAAWA,EAAMojD,QAAUh9C,EAAM01B,SAASK,sBAAwB/1B,EAAMC,KAAKo0B,U,GAC7Er0B,EAAMC,KAAKo0B,YAChB,SAACz6B,G,OACjBA,EAAMqjD,SACAj9C,EAAMQ,QAAQC,MACd7G,EAAMsjD,SACNl9C,EAAM01B,SAASI,mBACfl8B,EAAMujD,QACNn9C,EAAM01B,SAASG,kBACf71B,EAAMQ,QAAQC,K,IACb,SAAC7G,G,OAAW,EAAOwjD,cAAgBxjD,EAAMyjD,cAAiBzjD,EAAMwjD,aAAe,cAAgB,M,IAC/F,SAACxjD,G,OACRA,EAAMojD,SAAYpjD,EAAM0jD,UAAa1jD,EAAMwjD,aAErCxjD,EAAMu1C,OACN,GAAoB9tC,OAAjBA,EAAQq2B,MAAM,KAAoBr2B,OAAjBA,EAAQq2B,MAAM,KAAoBr2B,OAAjBA,EAAQq2B,MAAM,KAAoB,OAAjBr2B,EAAQw3B,UAC9Dj/B,EAAM2jD,aACN,IACAl8C,EAAQq2B,MALR,G,GAMGrB,EAAUiC,SACR,SAAC1+B,G,OAAWA,EAAMqjD,SAAW,MAAQ,K,IACjC,SAACrjD,G,OAChBA,EAAM4jD,mBACA,aACA5jD,EAAMqjD,WAAarjD,EAAMujD,QACzB,SACAvjD,EAAM0jD,UAEN1jD,EAAMojD,QADN,WAGApjD,EAAMujD,SAAWvjD,EAAMqjD,SACvB,gBACA,Y,IAGG,SAACrjD,G,OAAWA,EAAMP,SAAW,GAAkB,OAAfO,EAAMP,SAAS,MAAMO,EAAMujD,QAAU,OAAS,M,GAElFn9C,EAAM01B,SAASM,cAGMh2B,EAAMC,KAAKo0B,WAGvCyoB,GACaz7C,EAAQq2B,OAYrB,Y,OAAG+lB,EAAAA,UAED,0BAMcp8C,OALCA,EAAQ+3B,MAAM,gJAMjB/3B,OADEA,EAAQi3B,QAAQ,yBAGjBt4B,OAFDqB,EAAQi3B,QAAQ,yDAEM,OAArBt4B,EAAMC,KAAK+zB,UAAU,0C,IAK7B0pB,GAAetpD,EAAAA,GAAO6B,IAAG,M,83FCjEtC,I,MAAM6hC,IAAuB1jC,EAAAA,EAAAA,IAAO6jC,EAAP7jC,CAAqB6jC,KAK5CD,GAKA2lB,IAAsBvpD,EAAAA,EAAAA,IAAO2oD,GAAP3oD,CAAkB2oD,MAExCa,GAAiBxpD,EAAAA,GAAO0H,MAAK,KAGlBu6B,EAAUiC,QACR9B,EACJn1B,EAAQi3B,QAAWj3B,EAAQq2B,MAI7B13B,EAAM01B,SAASM,cAEZwmB,GACAx8C,EAAMy0B,MAAMC,UAIQ10B,EAAMy0B,MAAMC,UAEpC8nB,GACQx8C,EAAMy0B,MAAMC,WAsC1BmpB,I,GAAc,Y,IAChB/lD,EACAgmD,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAaMvrD,EAKU6E,E,sDA1BhBG,EAAAA,EAAAA,EACAgmD,EAAAA,EAAAA,OACAC,EAAAA,EAAAA,eACAC,EAAAA,EAAAA,gBACAC,EAAAA,EAAAA,aACAC,EAAAA,EAAAA,0BACAC,EAAAA,EAAAA,kBACAC,EAAAA,EAAAA,eACAC,EAAAA,EAAAA,aAYAvmD,EAAEwmD,UACIxrD,EAAQgF,EAAEzF,OAAOS,MACvBorD,EAA0BprD,GAEtBirD,IAAmBjrD,EAAnBirD,MAAAA,C,sBAEqB,O,sBAAA,C,EAAMK,EAAe,CAAEN,OAAAA,EAAQhrD,MAAAA,K,OAChD,OADQ6E,EAAS,SAATA,KACH0mD,EAAa/rD,SA7DX,Y,IACfwF,EAAAA,EAAAA,EACAhF,EAAAA,EAAAA,MACAmrD,EAAAA,EAAAA,aACAE,EAAAA,EAAAA,kBACAH,EAAAA,gBAgBoB1rD,QAAUwF,EAAEymD,WAC5BN,EAAanrD,GAGjBqrD,EAAkBrrD,EACtB,CAuCY0rD,CAAW,CAAE1mD,EAAAA,EAAGhF,MAAO6E,EAAK7E,MAAOmrD,aAAAA,EAAcE,kBAAAA,EAAmBH,gBAAAA,I,OAHhE,C,0BAKJS,QAAQr3C,MAAM,iBAAkB02C,EAAQhrD,G,0BAGpD,E,6LArCM+qD,G,kCAuDOa,GAAmB,Y,IAC5BZ,EAAAA,EAAAA,OACAa,EAAAA,EAAAA,WACAnB,EAAAA,EAAAA,mBACAR,EAAAA,EAAAA,QACAI,EAAAA,EAAAA,aACAC,EAAAA,EAAAA,YACAE,EAAAA,EAAAA,aAEkC3oD,EAAAA,IAAAA,EAAAA,EAAAA,UACT,OAArB+pD,EAAW7rD,YAA8C,IAArB6rD,EAAW7rD,MAAwB,GAAK6rD,EAAW7rD,OAAK,GADzF8rD,EAA2BhqD,EAAAA,GAAhBqpD,EAAgBrpD,EAAAA,GAG0BA,EAAAA,IAAAA,EAAAA,EAAAA,UACnC,OAArB+pD,EAAW7rD,YAA8C,IAArB6rD,EAAW7rD,MAAwB,GAAK6rD,EAAW7rD,OAAK,GADzF+rD,EAAqDjqD,EAAAA,GAA7BspD,EAA6BtpD,EAAAA,GAGhBA,EAAAA,IAAAA,EAAAA,EAAAA,UACnB,OAArB+pD,EAAW7rD,YAA8C,IAArB6rD,EAAW7rD,MAAwB,GAAK6rD,EAAW7rD,OAAK,GADzFirD,EAAqCnpD,EAAAA,GAArBupD,EAAqBvpD,EAAAA,GAGNA,EAAAA,IAAAA,EAAAA,EAAAA,UAAS,CAAE9B,OAAO,EAAOgsD,sBAAuB,IAAE,GAAjFC,EAA+BnqD,EAAAA,GAAlBoqD,EAAkBpqD,EAAAA,GAEhCiJ,EAAWkhD,EAAYjsD,MACvBkrD,GAAkBjrD,EAAAA,EAAAA,QAAO,GACzBksD,GAAiBlsD,EAAAA,EAAAA,QAAO,GACxBsrD,GAAetrD,EAAAA,EAAAA,SAAO,GAoD5B,OAlDAb,EAAAA,EAAAA,YAAU,WAEN,OADAmsD,EAAa/rD,SAAU,EAChB,WACH+rD,EAAa/rD,SAAU,CAC3B,CACJ,GAAG,KAKHJ,EAAAA,EAAAA,YAAU,WACN+rD,EAAaU,EAAW7rD,OAAS,GACrC,GAAG,CAAC6rD,EAAW7rD,SAMfZ,EAAAA,EAAAA,YAAU,WACN,GAAKmsD,EAAa/rD,QAAlB,CAIA,IACM4sD,EAAiCL,IAA2Bd,EAC5DoB,EAFmCP,IAAcC,GAGY,OAA3BA,IAAoCK,EACtEE,EAAMr7B,KAAKq7B,MACXN,EACyB,OAA3BD,GAAoCK,EAE9BH,EAAYD,sBADZM,EAEJC,EAAOD,EAAMN,EAYnB,OARIF,IAAcC,IAA2C,IAAjBM,EACxCF,EAAe3sD,QAAUE,OAAOC,YAAW,WACvCusD,EAAe,CAAElsD,MAAOqsD,EAAcL,sBAAAA,GAC1C,GAAG1pD,KAAKqT,IAAI,EANI,IAMa42C,IAE7BL,EAAe,CAAElsD,MAAOqsD,EAAcL,sBAAAA,IAGnC,WACHtsD,OAAO8sD,aAAaL,EAAe3sD,QACvC,CAzBA,CA2BJ,GAAG,CAACssD,EAAWC,EAAwBd,IAGnC,gBAACJ,GAAAA,CACG9/C,SAAUA,EACV2/C,mBAAoBA,EACpBR,QAASA,EACTI,aAAcA,EACdC,YAAaA,EACbE,aAAcA,GAEd,gBAACK,GAAAA,CACGplD,KAAMmmD,EAAWnmD,KACjB1F,MAAO8rD,EACP7jD,SAAU,SAACjD,GACPmmD,EAAanmD,EAAEynD,cAAczsD,OAC7BkrD,EAAgB1rD,QAAUwF,EAAEymD,SAChC,EACAnhB,OAAQ,SAACtlC,G,OACL+lD,GAAY,CACR/lD,EAAAA,EACAgmD,OAAAA,EAGAC,eAAAA,EACAC,gBAAAA,EAGAC,aAAAA,EAGAC,0BAAAA,EAGAC,kBAAAA,EACAC,eAAgBO,EAAWa,OAC3BnB,aAAAA,G,EAGRjlD,UAAW,SAACtB,G,OAhIT,Y,IACfA,EAAAA,EAAAA,EACA0nD,EAAAA,EAAAA,OACAC,EAAAA,EAAAA,UAMc,UAAV3nD,EAAEC,IACFynD,IACiB,WAAV1nD,EAAEC,KAA8B,QAAVD,EAAEC,KAC/B0nD,GAER,CAmHoBC,CAAW,CACP5nD,EAAAA,EAGA0nD,OAAQ3B,GAAY8B,KAAK7nD,EAAG,CACxBA,EAAAA,EACAgmD,OAAAA,EACAC,eAAAA,EACAC,gBAAAA,EACAC,aAAAA,EACAC,0BAAAA,EACAC,kBAAAA,EACAC,eAAgBO,EAAWa,OAC3BnB,aAAAA,IAEJoB,UAAWxB,EAAa0B,KAAK7nD,EAA8B,OAA3B+mD,EAAkC,GAAKA,I,EAG/E9rB,eAAc4rB,EAAWlpD,UAE3BoI,GAAY,gBAAC2+C,GAAUA,MACxB3+C,GAAY,gBAACi6B,GAAoBA,CAACI,MAAM,QAAQC,UAAW,OAAQC,WAAY,SAG5F,E,8cCnOO,IAAMwnB,GAAoBxrD,EAAAA,GAAOowC,MAAK,KACjBxkC,EAAMC,KAAKo0B,WAEjCwoB,GAA0BE,IAK1B8C,IAAczrD,EAAAA,EAAAA,IAAOspD,GAAPtpD,CAAmBspD,MAKjCoC,IAAmB1rD,EAAAA,EAAAA,IAAOspD,GAAPtpD,CAAmBspD,MAC/B,SAAC9jD,G,OAAWA,EAAMmmD,2BAA6B,QAAU,O,IAGhEC,GAAO,IAEPC,GAA2BxtB,EAAAA,YAC7B,WAcIzgC,G,IAZIyD,EAAAA,EAAAA,OACAyqD,EAAAA,EAAAA,QACAC,EAAAA,EAAAA,cACAtgD,EAAAA,EAAAA,QACAugD,EAAAA,EAAAA,6BAkBJ,OACI,gBAACtkD,QAAAA,CACG9J,IAAKA,EACLwG,KAAK,WACL6nD,kBAAiBH,EAAQxnD,GACzBq6B,eAAc,GACVotB,OADa1qD,EAAO,2BAIvB,OAHG0qD,EACM,GAAiCzf,QAA9BA,EAAAA,GAAAA,GAAawf,EAAQtnD,MAAM,KAAoC,QAAjC8nC,EAAAA,GAAAA,GAAayf,EAAcvnD,QAC5D8nC,EAAAA,GAAAA,GAAawf,EAAQtnD,OAE/BiH,QAASA,EACT9E,SAnBO,WACXqlD,EAA6B,CACzB5nD,KAAM8nD,GAAgCC,mBACtCL,QAASA,EACTC,cAAeA,GAEvB,GAgBJ,IAEJF,GAAyB/zC,YAAc,2BAEhC,IAAMs0C,GAAe,Y,IACxBC,EAAAA,EAAAA,SAAAA,EAAAA,EACAC,eAAAA,OAAAA,IAAiB,KAAE,EACnBC,EAAAA,EAAAA,kBAAAA,EAAAA,EACAC,cAAAA,OAAAA,IAAgB,EAAAC,GAAcC,SAAQ,EACtCC,EAAAA,EAAAA,uBAAAA,EAAAA,EACAhB,2BAAAA,OAAAA,IAA6B,SAC7BiB,mBAAAA,OAAAA,IAAqB,SACrBvtC,KAAAA,OAAAA,IAAO,EAAAwtC,GAAcC,QAAO,EAC5BzrD,EAAAA,EAAAA,OACA0rD,EAAAA,EAAAA,0BACAf,EAAAA,EAAAA,6BAGMgB,GAAgBruD,EAAAA,EAAAA,QAAoC,IAoB1D,OAlBAb,EAAAA,EAAAA,YAAU,WAENkvD,EAAc9uD,QAAQ85B,SAAQ,SAACi1B,GAC3B,GAAKA,GAAkB,aAAZA,EAAG7oD,KAAd,CAGA6oD,EAAGC,eAAgB,EACnB,IAAMzsC,EAAYwsC,EAAGE,aAAa,mBAEhB,OAAd1sC,GACAssC,GACAA,EAA0BK,0BAA0BtuD,SAAS2hB,KAE7DwsC,EAAGC,eAAgB,EARvB,CAUJ,GACJ,IAGI,gBAAC1B,GAAAA,KACG,gBAACna,QAAAA,KACIgb,EAASnkD,KAAI,SAAC4jD,EAAsBp0B,G,OACjC,gBAAC2G,EAAAA,SAAc,CAAC16B,IAAK,YAAuB,OAAXmoD,EAAQxnD,KACrC,gBAACmkD,GAAUA,KACNppC,IAASwtC,GAAcQ,kBACpB,gBAAC/c,KAAAA,KACG,gBAACqY,GAAWA,CACRK,cAAAA,EACAI,oBAAAA,EACAR,UAAWkD,EAAQ1tB,SAAS7+B,OAC5B0F,SAAUqoD,GAAaC,aACvBtE,aAAa,GAEb,gBAACj9C,OAAAA,KACI8/C,EAAQ0B,aACL,gBAAC3B,GAAAA,CACGxqD,OAAQA,EACRyqD,QAASA,EACTE,6BAA8BA,EAC9BvgD,WACIshD,IACAA,EAA0BU,qBAAqB3uD,SAC3CgtD,EAAQxnD,KAKhB1G,IAAK,SAACqvD,G,OAA0BD,EAAc9uD,QAAQw5B,GAAKu1B,C,IAG/DrB,MAMpB,gBAACtb,KAAAA,KACG,gBAACqY,GAAWA,CACRE,UAAAA,EACAO,oBAAAA,EACAR,UAAWkD,EAAQ1tB,SAAS7+B,OAC5B0F,SAAU,KAET6mD,EAAQ1tB,SAAS7+B,OACd,gBAACmpD,GAAgBA,CACbgF,eAAc5B,EAAQxnD,GACtBq6B,eAAc,GAAgC2N,OAA7BjrC,EAAO,wBAAiD,QAA3BirC,EAAAA,GAAAA,GAAawf,EAAQtnD,OACnE/C,QAAS,W,OAAMkrD,EAAuBb,EAAQxnD,G,GAE9C,gBAAC0H,OAAAA,CACGvF,UAAWknD,KAAW,mBAAoB,CACtC,mBAAoB7oB,GAAW0nB,EAAeV,MAGlD,gBAAC9D,GAAWA,OAEhB,gBAACh8C,OAAAA,CACGvF,UAAWknD,KAAW,mBAAoB,CACtC,kBAAmB7oB,GAAW0nB,EAAeV,MAGjD,gBAAChE,GAAUA,OAEd6D,GACGG,EAAQ1tB,SAASwvB,MAAK,SAAC1iC,G,OAAMA,EAAE2iC,Y,KAC3B,gBAAC3F,GAAiBA,CACdvpB,eAAc,GAAuC2N,OAApCjrC,EAAO,+BAEtB,QAFmDirC,EAAAA,GAAAA,GACjDwf,EAAQtnD,MACV,uBAGd,gBAACinD,GAAAA,CACGtqD,MAAO2qD,EAAQtnD,KACfm6B,eAAc,GAAuC2N,OAApCjrC,EAAO,+BAEtB,QAFmDirC,EAAAA,GAAAA,GACjDwf,EAAQtnD,MACV,kBAEDsnD,EAAQtnD,OAIjB,gBAAC8kD,GAAYA,CAACnoD,MAAO2qD,EAAQtnD,MAAOsnD,EAAQtnD,QAIvD8nD,EAAextD,SAASgvD,GAAeC,aACpC,gBAACzd,KAAAA,CACG3R,eAAc,GAAsC2N,OAAnCjrC,EAAO,8BAEtB,QAFkDirC,EAAAA,GAAAA,GAChDwf,EAAQtnD,MACV,iBAEF,gBAACmkD,GAAWA,CACRS,oBAAAA,EACAR,UAAWkD,EAAQ1tB,SAAS7+B,OAC5BypD,cAAAA,EACAC,YAAa2D,EACb3nD,SAAU,KAET6mD,EAAQvrC,aAIpB+rC,EAAextD,SAASgvD,GAAeE,cACP,mBAAtBzB,GACH,gBAACjc,KAAAA,KACG,gBAACtkC,OAAAA,KACG,gBAACs+C,GAAgBA,CACbZ,OAAQoC,EAAQxnD,GAChB8kD,oBAAAA,EACAR,UAAWkD,EAAQ1tB,SAAS7+B,OAC5BypD,cAAAA,EACAC,YAAa2D,EACbzD,cAAAA,EACAoB,WAAY,CACRnmD,KAAM,OACN1F,MAAOotD,EAAQh0C,YAAcg0C,EAAQh0C,YAAc,GACnDszC,OAAQmB,EACRlrD,OAAQ,GAAoBirC,OAAjBjrC,EAAO,YAEhB,QAF0BirC,EAAAA,GAAAA,GACxBwf,EAAQtnD,MACV,iCAO7BsnD,EAAQ1tB,SAASl2B,KAAI,SAAC+lD,EAAmCC,G,OACtD,gBAACzF,GAAUA,CACP9kD,IAAK,YAA0BuqD,OAAdpC,EAAQxnD,GAAG,KAAK,OAAF4pD,GAC/BznD,UAAWknD,KAAW,aAAwB,OAAX7B,EAAQxnD,IAAM,CAC7C,mBAAoBwgC,GAAW0nB,EAAeV,MAGjDzsC,IAASwtC,GAAcQ,kBACpB,gBAAC/c,KAAAA,KACG,gBAACqY,GAAWA,CAACK,cAAAA,EAAaI,oBAAAA,EAAmBnkD,SAAU,GAAIgkD,aAAa,GACpE,gBAACj9C,OAAAA,KACIiiD,EAAaT,aACV,gBAAC3B,GAAAA,CACGxqD,OAAQA,EACRyqD,QAASmC,EACTjC,6BAA8BA,EAC9BvgD,WACIshD,IACAA,EAA0BU,qBAAqB3uD,SAC3CmvD,EAAa3pD,KAKrBynD,cAAeD,EACfluD,IAAK,SAACqvD,G,OACDD,EAAc9uD,QA/KnD,KA+K4Dw5B,EAAI,GAAmBw2B,GAAKjB,C,IAI5DrB,MAMpB,gBAACtb,KAAAA,KACG,gBAACqY,GAAWA,CAAC5N,QAAAA,EAAO91C,SAAU,KACzB0mD,GAA8BsC,EAAaJ,cACxC,gBAAC3F,GAAiBA,CACdvpB,eAAc,GAAuC2N,OAApCjrC,EAAO,+BAEnBirC,QAFgDA,EAAAA,GAAAA,GACjD2hB,EAAazpD,MACf,KAA8B,QAA3B8nC,EAAAA,GAAAA,GAAawf,EAAQtnD,MAAM,uBAGxC,gBAACknD,GAAAA,CACGvqD,MAAO8sD,EAAazpD,KACpBm6B,eAAc,GAAyC2N,OAAtCjrC,EAAO,iCAEnBirC,QAFkDA,EAAAA,GAAAA,GACnD2hB,EAAazpD,MACf,KAA8B,QAA3B8nC,EAAAA,GAAAA,GAAawf,EAAQtnD,OAC1BmnD,2BAA4BA,GAC9B,GAAqB,OAAlBsC,EAAazpD,SAGzB8nD,EAAextD,SAASgvD,GAAeC,aACpC,gBAACzd,KAAAA,KACG,gBAACqY,GAAWA,CAACK,cAAAA,EAAaC,YAAa2D,GAClChB,KAIZU,EAAextD,SAASgvD,GAAeE,cACP,mBAAtBzB,GACH,gBAACjc,KAAAA,KACG,gBAACqY,GAAWA,CAAC1jD,SAAU,IAAK+jD,cAAAA,EAAaC,YAAa2D,GACjDhB,K,SAWjD,E,icCrWO,IAAMuC,GAAgBnuD,EAAAA,GAAO6B,IAAG,MACtB,SAAC2D,G,MAAU,GAAe,OAAZA,EAAMmJ,MAAM,K,GAMV/C,EAAMC,KAAKo0B,Y,siCCFrC,IAAMmuB,GAAmB,6LAWnBC,GAAmBruD,EAAAA,GAAO6B,IAAG,KAElB+J,EAAMQ,QAAQC,MACTT,EAAMC,KAAKo0B,YACxB,SAACz6B,G,OAAWA,EAAMN,SAAW,SAAW,M,GAGlDkpD,GAEAzF,IAOO2F,GAAyBtuD,EAAAA,GAAO6B,IAAG,MAG9B,SAAC2D,G,OAAWA,EAAMN,SAAW,SAAW,M,IAK7CqpD,GAAkBvuD,EAAAA,GAAO6B,IAAG,MAE5B,SAAC2D,G,OAAWA,EAAMgpD,cAAgB,GAAuB,OAApBhpD,EAAMgpD,cAAc,MAAM,G,IAG/DC,GAAiBzuD,EAAAA,GAAO6B,IAAG,KAEZ+J,EAAMC,KAAKo0B,WACTr0B,EAAMC,KAAKo0B,WACVr0B,EAAMC,KAAKo0B,YAM7ByuB,GAAsB1uD,EAAAA,GAAO6B,IAAG,M,uBC1D7C6T,KAAAA,OAAai5C,MAaN,IAAMC,GAAc,Y,IACvBC,EAAAA,EAAAA,QACAC,EAAAA,EAAAA,qBACAC,EAAAA,EAAAA,wBACAC,EAAAA,EAAAA,eACAC,EAAAA,EAAAA,cAEA,IAAKJ,EAAQtvD,OAAQ,OAAO,gCAAG,GAiB/B,IAfA,IAAI2vD,EAAQ,EAENC,EAAgBN,EAAQtvD,OACxB6vD,EAAQ15C,KAAM,GAA2Bq5C,OAAxBD,EAAqB,KAA2B,OAAxBC,GAA2B,WACpEM,EAAMD,EAAMngC,IAAI,EAAG,QACnBqgC,EAAoB55C,KAAMu5C,GAE1BM,EAAeH,EAAMngC,IAAI,GAAI,SAAS6N,QAAQmyB,GAC9CK,EACAF,EAAMngC,IAAI,GAAI,SACdugC,EAAaJ,EAAMngC,IAAI,GAAI,SAAS6N,QAAQmyB,GAAiBK,EAAoBD,EAEjFI,EAAYT,EAAiBO,EAAeH,EAC5CM,EAAUV,EAAiBQ,EAAaH,EAErC33B,EAAI,EAAGA,EAAIy3B,EAAez3B,IAE3BhiB,KAAMm5C,EAAQn3B,GAAGjiB,MAAMk5C,UAAUc,EAAWC,EAAS,KAAM,QAC3DR,GAASL,EAAQn3B,GAAGh5B,OAI5B,OAAO,gCAAG2jD,OAAO6M,GAAOS,QAAQ,GACpC,E,4+CC3CA,IAEaC,GAAc5vD,EAAAA,GAAOowC,MAAK,KACXxkC,EAAMC,KAAKo0B,WACjCwoB,GAA0BE,IAKnBkH,GAAgB7vD,EAAAA,GAAOowC,MAAK,KACbxkC,EAAMC,KAAKo0B,WAIlB0oB,GAIfA,GAC2B/8C,EAAM01B,SAASK,sBAnB5B,KAqCPmuB,GAAmB9vD,EAAAA,GAAOowC,MAAK,KAChBxkC,EAAMC,KAAKo0B,WACRr0B,EAAMC,KAAKo0B,YAG7B8vB,GAAgB/vD,EAAAA,GAAOgwD,MAAK,MAI5BC,GAAiBjwD,EAAAA,GAAO6B,IAAG,MAM3BquD,GAAYlwD,EAAAA,GAAO6B,IAAG,KAEN+J,EAAMC,KAAKo0B,WAQlCmuB,GAEAzF,I,2dCzDN,IAAMwH,GAAyBnwD,EAAAA,GAAO6B,IAAG,MACnC,SAAC2D,G,OAAUA,EAAMN,UAAa,e,IAG9BkrD,IAAcpwD,EAAAA,EAAAA,IAAO8vD,GAAP9vD,CAAuB8vD,MAKrCO,IAA4BrwD,EAAAA,EAAAA,IAAO2oD,GAAP3oD,CAAkB2oD,KAC3B/8C,EAAM01B,SAASK,uBAGlC2uB,GAAoBtwD,EAAAA,GAAOgM,KAAI,MAI/BukD,IAAsBC,EAAAA,EAAAA,MAAK5B,IAYpB6B,GAAkE,Y,IAC3EpvD,EAAAA,EAAAA,OACAqvD,EAAAA,EAAAA,SACAlE,EAAAA,EAAAA,cACAsC,EAAAA,EAAAA,qBACAC,EAAAA,EAAAA,wBACAC,EAAAA,EAAAA,eACA9pD,EAAAA,EAAAA,SAEA,OACI,gBAACirD,GAAAA,CAAuBjrD,SAAUA,EAAUy5B,eAAc,GAAU,OAAPt9B,EAAO,sBAChE,gBAACsvD,GAAQA,KAAC,KACV,gBAACV,GAAcA,KACX,gBAACG,GAAAA,KACG,gBAACJ,QAAAA,KACG,gBAACjf,KAAAA,KACG,gBAAC6f,KAAAA,KACG,gBAACP,GAAAA,CAA0BtH,SAAAA,EAAQF,UAAAA,GAC/B,gBAAC78C,OAAAA,KAAK,SAAa,IACnB,gBAACskD,GAAAA,KAAkB,KACZ,GAA4B,OAAzBxB,EAAuB,GAAI+B,UAAU,UAQvE,gBAAChB,GAAaA,KACV,gBAACxe,QAAAA,KACIqf,EAASrE,SAASnkD,KAAI,SAAC4jD,EAAsBgF,G,OAC1C,gBAACzyB,EAAAA,SAAc,CAAC16B,IAAK,aAA2BmtD,OAAdhF,EAAQxnD,GAAG,KAAgB,OAAbwsD,IAC5C,gBAAC/f,KAAAA,KACG,gBAACT,KAAAA,CACG3R,eAAc,GAAsC2N,OAAnCjrC,EAAO,8BAEtB,QAFkDirC,EAAAA,GAAAA,GAChDwf,EAAQtnD,MACV,cAEF,gBAACmkD,GAAWA,CAACI,SAAAA,EAAQG,UAAAA,EAASN,UAAWkD,EAAQ1tB,SAAS7+B,QACtD,gBAACgxD,GAAAA,CACG1B,QAAS6B,EAASntD,KAAKuoD,EAAQxnD,IAC/BwqD,qBAAsBA,EACtBC,wBAAyBA,EACzBC,eAAgBA,EAChBC,cAAeyB,EAASx4B,aAAaxW,aAKpDoqC,EAAQ1tB,SAASl2B,KAAI,SAAC+lD,EAAmC8C,G,OACtD,gBAAChgB,KAAAA,CAAGptC,IAAK,aAAgCotD,OAAnB9C,EAAa3pD,GAAG,KAAqB,OAAlBysD,IACrC,gBAACzgB,KAAAA,CACG3R,eAAc,GAAsC2N,OAAnCjrC,EAAO,8BAEnBirC,QAF+CA,EAAAA,GAAAA,GAChD2hB,EAAazpD,MACf,KAA8B,QAA3B8nC,EAAAA,GAAAA,GAAawf,EAAQtnD,MAAM,cAEhC,gBAACmkD,GAAWA,CACRI,SAAAA,EACAG,UAAAA,EACAziD,UAAWknD,KAAW,aAAwB,OAAX7B,EAAQxnD,IAAM,CAC7C,mBAAoBwgC,GAAW0nB,EAAeV,MAGlD,gBAACyE,GAAAA,CACG1B,QAAS6B,EAASntD,KAAK0qD,EAAa3pD,IACpCwqD,qBAAsBA,EACtBC,wBAAyBA,EACzBC,eAAgBA,EAChBC,cAAeyB,EAASx4B,aAAaxW,Y,UAYrF,EChHasvC,GAAa,Y,IAAG3vD,EAAAA,EAAAA,OAAQ4vD,EAAAA,EAAAA,MAAOlC,EAAAA,EAAAA,wBACxC,OACI,gBAAC6B,KAAAA,CACGM,aAAYD,EAAMx9B,OAAO,KACzB09B,UACIF,EAAMG,SAAS17C,KAAM,GAAmBq5C,OAAhBkC,EAAMI,OAAO,KAA2B,OAAxBtC,IAA2Bt7B,OAAO,YACpEw9B,EAAMK,SAAS,EAAG,QAAQ79B,OAAO,QACjCw9B,EAAMx9B,OAAO,QAEvBkL,eAAc,GAAU,OAAPt9B,IAEjB,gBAACsnD,GAAWA,CAACE,UAAAA,GAAUoI,EAAMx9B,OAAO,WAGhD,E,iiCChBA,I,kBAAM89B,GAASvxD,EAAAA,GAAO6B,IAAG,KAGNoL,EAAQi3B,QACLj3B,EAAQi3B,SAGxBstB,GAA2BxxD,EAAAA,GAAO6B,IAAG,MAKrC4vD,GAAezxD,EAAAA,GAAOC,EAAC,KAEZgiC,EAAUqB,OAGrBouB,GAAe1xD,EAAAA,GAAOC,EAAC,KAEZgiC,EAAUiC,SAGrBytB,IAAyB3xD,EAAAA,EAAAA,IAAOkC,EAAPlC,CAAakC,MAKtC0vD,IAA2B5xD,EAAAA,EAAAA,IAAOkC,EAAPlC,CAAakC,MAKxC2vD,IAAyB7xD,EAAAA,EAAAA,IAAOkC,EAAPlC,CAAakC,MAKtC4vD,IAAmB9xD,EAAAA,EAAAA,IAAOkC,EAAPlC,CAAakC,MAazB6vD,GAAqF,Y,IAC9F1wD,EAAAA,EAAAA,OACAge,EAAAA,EAAAA,KACA2yC,EAAAA,EAAAA,wBACAC,EAAAA,EAAAA,wBACAC,EAAAA,EAAAA,0BAEA,OAAI7yC,IAASwtC,GAAcQ,iBAEnB,gCACI,gBAACsE,GAAAA,CACGtwD,OAAQ,GAAU,OAAPA,EAAO,8BAClBI,QAASwwD,GACZ,qBAGD,gBAACL,GAAAA,CACGvwD,OAAQ,GAAU,OAAPA,EAAO,gCAClB8D,MAAOmiC,EAAM9D,QACb/hC,QAASywD,GACZ,WAOL,gBAACL,GAAAA,CAAuBxwD,OAAQ,GAAU,OAAPA,EAAO,8BAA6BI,QAASuwD,GAAyB,oBAKrH,EAeaG,GAAyE,Y,IAClF9wD,EAAAA,EAAAA,OACAge,EAAAA,EAAAA,KACA+yC,EAAAA,EAAAA,YACAC,EAAAA,EAAAA,SACAC,EAAAA,EAAAA,oBACAC,EAAAA,EAAAA,mBACAP,EAAAA,EAAAA,wBACAC,EAAAA,EAAAA,wBACAC,EAAAA,EAAAA,0BACAM,EAAAA,EAAAA,kBAEA,OACI,gBAACjB,GAAAA,CAAO5yB,eAAc,GAAU,OAAPt9B,EAAO,aAC5B,gBAACowD,GAAAA,KAAcW,EAAY,aAC3B,gBAACZ,GAAAA,KACIc,GACG,gBAACP,GAAAA,CACG1wD,OAAQA,EACRge,KAAMA,EACN2yC,wBAAyBA,EACzBC,wBAAyBA,EACzBC,0BAA2BA,IAGlCK,GAAsBlzC,GAAQwtC,GAAcQ,kBACzC,gBAACyE,GAAAA,CACGzwD,OAAQ,GAAU,OAAPA,EAAO,yBAClB8D,MAAOmiC,EAAM9D,QACb/hC,QAAS+wD,GACZ,mBAKT,gBAACd,GAAAA,CAAa/yB,eAAc,GAAU,OAAPt9B,EAAO,gCAA8B,qBAC7CgxD,GAInC,E,ojJCpHA38C,KAAAA,OAAa+8C,M,SA4CD3E,G,uDAAAA,KAAAA,GAAAA,CAAAA,I,SAQA4E,G,6BAAAA,KAAAA,GAAAA,CAAAA,I,SAOAC,G,uCAAAA,KAAAA,GAAAA,CAAAA,I,SAiFAlG,G,+CAAAA,KAAAA,GAAAA,CAAAA,I,SAQAmG,G,+FAAAA,KAAAA,GAAAA,CAAAA,I,SAYA1G,G,6EAAAA,KAAAA,GAAAA,CAAAA,IAiCZ,I,GAAM2G,GAAwB,SAACxG,GAC3B,IAAMyG,EAA+B,GAwBrC,OAvBAzG,EAASr0B,SAAQ,SAAC8zB,GAId,GAHIA,EAAQ+B,cACRiF,EAAmBp5B,KAAKoyB,EAAQxnD,IAEhCwnD,EAAQ1tB,UAAY0tB,EAAQ1tB,SAAS7+B,OAAS,EAAG,C,IAgBjDuzD,EAdMC,EAAqBjH,EAAQ1tB,SAASnT,QAAO,SAACP,GAChD,OAAOA,EAAKmjC,YAChB,IACMmF,EAAwBD,EAAmB7qD,KAAI,SAACwiB,GAClD,OAAOA,EAAKpmB,EAChB,IAKIyuD,EAAmBxzD,SAAWusD,EAAQ1tB,SAAS7+B,QAC/CuzD,EAAmBp5B,KAAKoyB,EAAQxnD,KAGpCwuD,EAAAA,GAAmBp5B,KAAnBo5B,MAAAA,EAAwB,GAAGE,GAC/B,CACJ,IACOF,CACX,EAEMG,GAA2B,SAAC5G,GAY9B,OAX8BA,EAASphC,QAAO,SAAC6gC,GAE3C,IAAMoH,EAAuBpH,EAAQ1tB,SAASnT,QAAO,SAACP,GAClD,OAAOA,EAAKmjC,YAChB,IACA,OAAoC,IAAhCqF,EAAqB3zD,QAAgB2zD,EAAqB3zD,SAAWusD,EAAQ1tB,SAAS7+B,MAI9F,IACgE2I,KAAI,SAACwiB,G,OAASA,EAAKpmB,E,GAEvF,EAEa6uD,GAA8B,SACvCxiC,EACA+E,GAuFA,OAAQA,EAAOtxB,MACX,IAAK,qBAED,OAAO,MAxFM,Y,IACjB0nD,EAAAA,EAAAA,QACAC,EAAAA,EAAAA,cAOMqH,EAA4B,GAAGziC,EAAM88B,sBACrC4F,EAAiC,GAAG1iC,EAAMy8B,2BAC1CkG,EAAeF,EAAyBjgD,QAAQ24C,EAAQxnD,IACxDivD,EAAWD,EAAe,EAE5BC,EACAH,EAAyB15B,KAAKoyB,EAAQxnD,IAEtC8uD,EAAyBI,OAAOF,EAAc,GAIlD,IAAMG,EAA4BJ,EAA8BlgD,QAAQ24C,EAAQxnD,IAKhF,GAJImvD,GAA6B,GAC7BJ,EAA8BG,OAAOC,EAA2B,QAGvC,IAAlB1H,EAA+B,CAEtC,IAAM2H,EAAkCL,EAA8BlgD,QAAQ44C,EAAcznD,IAK5F,GAJIovD,GAAmC,GACnCL,EAA8BG,OAAOE,EAAiC,GAGtEH,EAEqBxH,EAAc3tB,SAASnT,QAAO,SAACP,GAEhD,OADsB0oC,EAAyBt0D,SAAS4rB,EAAKpmB,GAEjE,IAEiB/E,OAASwsD,EAAc3tB,SAAS7+B,SAC5C8zD,EAA8Bv0D,SAASitD,EAAcznD,IAEtD+uD,EAA8B35B,KAAKqyB,EAAcznD,IAG5C8uD,EAAyBt0D,SAASitD,EAAcznD,KACjD8uD,EAAyB15B,KAAKqyB,EAAcznD,QAGjD,CAEH,IAAMqvD,EAA4BP,EAAyBjgD,QAAQ44C,EAAcznD,IAC7EqvD,GAA6B,GAC7BP,EAAyBI,OAAOG,EAA2B,GAG9C5H,EAAc3tB,SAASnT,QAAO,SAACP,GAE5C,OADsB0oC,EAAyBt0D,SAAS4rB,EAAKpmB,GAEjE,IACa/E,OAAS,IAAM8zD,EAA8Bv0D,SAASitD,EAAcznD,KAC7E+uD,EAA8B35B,KAAKqyB,EAAcznD,GAEzD,CACJ,CAcA,OAbIwnD,EAAQ1tB,UAER0tB,EAAQ1tB,SAASpG,SAAQ,SAAC47B,GACtB,IAAMC,EAAoBT,EAAyBjgD,QAAQygD,EAAatvD,IAClEwvD,EAAkBD,GAAqB,EACzCN,IAAaO,EACbV,EAAyB15B,KAAKk6B,EAAatvD,KACnCivD,GAAYO,GACpBV,EAAyBI,OAAOK,EAAmB,EAE3D,IAGG,CACHpG,qBAAsB2F,EACtBhG,0BAA2BiG,EAEnC,CAIyBU,CAAa,CAAEjI,QAASp2B,EAAOo2B,QAASC,cAAer2B,EAAOq2B,iBAGnF,IAAK,iBACD,IAAM7vB,EAAW,MAAKvL,GAGtB,OAFAuL,EAASuxB,qBAAuB/3B,EAAOC,QAAQ83B,qBAC/CvxB,EAASkxB,0BAA4B13B,EAAOC,QAAQy3B,0BAC7C,MAAKlxB,GAEhB,QACI,OAAOvL,EAEnB,EAEaggC,GAAW3wD,EAAAA,GAAO6B,IAAG,KACL+J,EAAMC,KAAKo0B,WAChBr0B,EAAMQ,QAAQC,MACzBT,EAAM01B,SAASM,cAGXK,EAAUiC,QAGZj3B,EAAQq2B,OAIjB0wB,GAAuBh0D,EAAAA,GAAO+B,OAAM,KAG7B6J,EAAM01B,SAASM,cAIGh2B,EAAMQ,QAAQmzB,OAMvC00B,GAA6Bj0D,EAAAA,GAAO6B,IAAG,MACpB,SAAC2D,G,OAAUA,EAAM0uD,mB,IAEpC,SAAC1uD,G,OAAUA,EAAMN,UAAa,e,IAI9BivD,GAAc,SAAC5wD,GACjB,IAAM6wD,EAAmC,CAAC,EAC1C,IAAK,IAAM1pC,KAAQnnB,EAAM,C,IAChB,mB,IAAL,QAAK,IAA0BA,EAAKmnB,GAAK,qBAApC,0BAAsC,CAAtC,IAAM2pC,EAAN,QACDD,EAAS,GAAW1+C,OAARgV,EAAK,KAAkD,OAA/ChV,KAAM2+C,EAAiB5+C,MAAMge,OAAO,aAAgB4gC,EAAiB31D,KAC7F,C,UAFK,Q,aAAA,6B,YAAA,E,MAAA,C,EAGT,CACA,OAAO01D,CACX,EAEME,GAAe,Y,IACjB1L,EAAAA,EAAAA,QACAqI,EAAAA,EAAAA,MACAxwC,EAAAA,EAAAA,UACA8zC,EAAAA,EAAAA,cACAC,EAAAA,EAAAA,YACAC,EAAAA,EAAAA,YACApzD,EAAAA,EAAAA,OAGMqzD,EAAiBh/C,KAAMu7C,GAAOx9B,OADf,WAEjB/0B,EAAQ,EAQZ,OALIA,OAFoE,IAAlD81D,EAAY,GAAgBE,OAAbj0C,EAAU,KAAkB,OAAfi0C,IAEtCF,EAAY,GAAgBE,OAAbj0C,EAAU,KAAkB,OAAfi0C,IAE5B,EAIR,gBAAC/L,GAAWA,CACRO,UAAAA,EACAG,UAAAA,EACAT,QAASA,EACTjqB,eAAc,GAAc2N,OAAXjrC,EAAO,MAAkCqzD,QAA9BpoB,EAAAA,GAAAA,GAAamoB,GAAa,MAAmB,OAAfC,GAC1D5L,SAAUmI,EAAMn0B,QAAQy3B,EAAe,UAEtC71D,EAGb,EASaomC,GAAa,SAAC0nB,EAA8BV,GACrD,MAAyB,aAAlBU,CACX,EAEMmI,IAAuBnE,EAAAA,EAAAA,MAAK8D,IAErBhH,GAAe,CACxBjB,SAAU,IACVkB,aAAc,GACdhtC,WAAY,IACZzI,YAAa,IACb88C,wBAAyB,KAGhBjI,GAAyB,SAACroD,GAEnC,IAAMuwD,EAAUv2D,SAASw2D,iBAAiB,cAAiB,OAAHxwD,IAClDywD,EAAWz2D,SAASw2D,iBAAiB,kBAAqB,OAAHxwD,EAAG,yBAChEuwD,EAAQ78B,SAAQ,SAAC0uB,G,OAAYA,EAAQ13B,UAAUgmC,OAAO,kB,IACtDD,EAAS/8B,SAAQ,SAAC0uB,G,OAAYA,EAAQ13B,UAAUgmC,OAAO,kB,GAC3D,G,SAKYnI,G,4DAAAA,KAAAA,GAAAA,CAAAA,IAKZ,I,GAAMxP,GAA6D,Y,IA4C7C4X,EAURC,EAMDxiC,EAAT,WACI,IAAMyiC,EAA6BC,EAAoBl3D,SAAWk3D,EAAoBl3D,QAAQm3D,WACxFC,EAAwBF,EAAoBl3D,SAAWk3D,EAAoBl3D,QAAQq3D,iBAEzF,GAAmC,OAA/BJ,GAAiE,OAA1BG,GAA4C,OAAVE,IAAkBA,GAAMj2D,OAAQ,CACzG,IAAMk2D,EACFH,EAAsB,IACtBE,GAAM,IACNx0D,KAAKC,OACAq0D,EAAsB,GAAG3mD,MAAQwmD,GAC9BK,GAAM,GAAGE,wBAAwB/mD,OAEvCgnD,EAAcH,GAAMC,GAGtBE,GAAe7G,IAAyBzM,OAAOsT,EAAYC,QAAQC,KAEnEC,EAAwBzT,OAAOsT,EAAYC,QAAQC,KAEvB,OAA5BE,GAAgB73D,SAAoD,OAAhCk3D,EAAoBl3D,SAEpD63D,GAAgB73D,QAAQw3D,wBAAwB/mD,MAC5CymD,EAAoBl3D,QAAQw3D,wBAAwB/mD,QACpDwmD,GACJK,GAAMC,EAAa,IAGnBK,EAAwBzT,OAAOmT,GAAMC,EAAa,GAAGG,QAAQC,IAGzE,CACAG,IAAU,CACd,EASSC,EAAT,WANSD,KACDE,sBAAsBxjC,GACtBsjC,IAAU,EAMlB,EAtGAzyD,EAAAA,EAAAA,KACAlC,EAAAA,EAAAA,OAAAA,EAAAA,EACAirD,eAAAA,OAAAA,IAAiB,KAAE,MACnB6J,YAAAA,OAAAA,IAAc,KAAE,MAChB3J,cAAAA,OAAAA,IAAgB,EAAhBA,WAAAA,EACAD,EAAAA,EAAAA,kBAAAA,EAAAA,EACAyC,eAAAA,OAAAA,IAAiB,SACjBrD,2BAAAA,OAAAA,IAA6B,SAC7B2G,oBAAAA,OAAAA,IAAsB,SACtBC,mBAAAA,OAAAA,IAAqB,KACrBxa,EAAAA,EAAAA,cACGvyC,EAAAA,GAAAA,EAAAA,CAXHjC,OACAlC,SACAirD,iBACA6J,cACA3J,gBACAD,oBACAyC,iBACArD,6BACA2G,sBACAC,qBACAxa,kBAGmD1Z,EAAAA,GAAAA,EAAAA,UAAe,MAA3DuuB,EAA4CvuB,EAAAA,GAAxB+3B,EAAwB/3B,EAAAA,GACnBA,EAAAA,GAAAA,EAAAA,SAAe96B,GAAAA,GAAxCmtD,EAAyBryB,EAAAA,GAAfg4B,EAAeh4B,EAAAA,GACUA,EAAAA,GAAAA,EAAAA,SAAe,MAAlDmwB,EAAmCnwB,EAAAA,GAApBi4B,EAAoBj4B,EAAAA,GACRA,EAAAA,GAAAA,EAAAA,SAAwB,IAAE,GAArDk4B,EAA2Bl4B,EAAAA,GAAhBm4B,EAAgBn4B,EAAAA,GACIA,EAAAA,GAAAA,EAAAA,SAAuC81B,GAAY5wD,EAAKA,OAAI,GAA3FixD,EAA+Bn2B,EAAAA,GAAlBo4B,EAAkBp4B,EAAAA,GACkBA,EAAAA,GAAAA,EAAAA,SAAuB,MAAxEywB,EAAiDzwB,EAAAA,GAA3By3B,EAA2Bz3B,EAAAA,GACdA,EAAAA,GAAAA,EAAAA,SAAe3oB,KAAMnS,EAAK20B,aAAaw+B,kBAAe,GAAzFnC,EAAmCl2B,EAAAA,GAApBs4B,EAAoBt4B,EAAAA,GAClBA,EAAAA,GAAAA,EAAAA,SAAc,cAA/Bhf,EAAiBgf,EAAAA,GAAXu4B,EAAWv4B,EAAAA,GAC0CA,EAAAA,GAAAA,EAAAA,WAAiB80B,GAA6B,CAC5G1F,qBAAsBoF,GAAsBnC,EAASrE,UACrDe,0BAA2B6F,GAAyBvC,EAASrE,YACjE,GAHOU,EAA2D1uB,EAAAA,GAAhC2tB,EAAgC3tB,EAAAA,GAK5Dw4B,EAAoBx4B,EAAAA,OAA6B,MACjD+2B,EAAsB/2B,EAAAA,OAA6B,MACnDy4B,GAAmBz4B,EAAAA,OAA+B,MAClD04B,GAAe14B,EAAAA,OAA6B,MAC5C24B,GAAe34B,EAAAA,OAA6B,MAC5C03B,GAAkB13B,EAAAA,OAAkC,MAEtD23B,IAAU,EAERiB,GAAoB3K,EAAe/sD,OAAS,EAC5C23D,GAAaf,EAAYr3D,SAAS,aAElCq4D,GACoB7J,GAAajB,UACE,sBAAThtC,EAA0CiuC,GAAaC,aAAe,IAC7EX,GAEPqI,EAAK,EACT3I,EAAextD,SAAS,gBAA+Bm2D,GAAM3H,GAAa/sC,YAC1E+rC,EAAextD,SAAS,iBAAgCm2D,GAAM3H,GAAax1C,aACpEm9C,GAEX,GAIJf,IACIgB,EAAmBgC,GAAa5J,GAAasH,wBAA0B,EACtEuC,GAAqBjC,GAG1BM,GAAQwB,GAAa94D,SAAW84D,GAAa94D,QAAQ42D,iBAAiB,aA+C5EmB,IAEA,IAAMmB,IAAuBC,EAAAA,GAAAA,IAAqB,WAC9C,GAA6B,OAAzBN,GAAa74D,SAAoD,OAAhCk3D,EAAoBl3D,SAA6C,OAAzB84D,GAAa94D,QAAkB,CACxG,IAAMi3D,EAA6BC,EAAoBl3D,QAAQm3D,WAC/D0B,GAAa74D,QAAQm3D,WAAaF,EAClC6B,GAAa94D,QAAQm3D,WAAaF,CACtC,CACJ,GAAG,KAYHr3D,EAAAA,EAAAA,YAAU,WACNu4D,EAAY9yD,EAChB,GAAG,CAACA,KAEJzF,EAAAA,EAAAA,YAAU,WAMN,IALA,IAAM2jB,EAAY/L,KAAMg7C,EAASx4B,aAAazW,WAGxC61C,EAAkB,GAClBC,EAHU7hD,KAAMg7C,EAASx4B,aAAaxW,SAGhBupC,KAAKxpC,EAAW,SACnCiW,EAAI,EAAGA,GAAK6/B,EAAa7/B,IAC9B4/B,EAAO59B,KAAKjY,EAAUwN,IAAIyI,EAAG,UAEjC8+B,EAAac,EACjB,GAAG,CAAC5G,EAASx4B,aAAazW,UAAWivC,EAASx4B,aAAaxW,WAE3D5jB,EAAAA,EAAAA,YAAU,WACN64D,EAAiBjhD,KAAMg7C,EAASx4B,aAAaw+B,iBACjD,GAAG,CAAChG,EAASx4B,aAAaw+B,mBAE1B54D,EAAAA,EAAAA,YAAU,WACN24D,EAAetC,GAAYzD,EAASntD,MACxC,GAAG,CAACmtD,EAASntD,QAEbzF,EAAAA,EAAAA,YAAU,WAINw4D,EAFW,GAAkBp4D,SAAW44D,GAAiB54D,QAAQs5D,aAAgB,EAIrF,GAAG,CAACV,GAAiB54D,UAIrB,IAOM+zD,GAA0B,W,yMAAA,a,mDAC5B,MAA6B,mBAAlBla,GAEP6e,EAAQ,WACR,C,IAGJ,C,EAAM7e,EAAoF,CACtF3zC,KAAM,oBACNuxB,QAAS,CAAErZ,SAAUywC,EAA0BU,yB,cAFnD,SAKAmJ,EAAQ,W,OACZ,I,kDAbgC,GAqChC,OACI,gCACI,gBAACzE,GAAcA,CACX9wD,OAAQ,GAAU,OAAPA,GACXge,KAAMA,EACNgzC,SAAU3B,EAASx4B,aAAam6B,SAChCD,YAAa1B,EAASrE,SAAS9sD,OAC/B+yD,oBAAqBA,EACrBC,mBAAoBA,EACpBP,wBAnDoB,WAE5B4E,EAAQ,oBACZ,EAiDY3E,wBAAyBA,GACzBC,0BAjCsB,WAC9B,IAAMzE,EAAuBoF,GAAsBnC,EAASrE,UACtDe,EAA4B6F,GAAyBvC,EAASrE,UAEpEL,EAA6B,CACzB5nD,KAAM,iBACNuxB,QAAS,CACL83B,qBAAsBA,EACtBL,0BAA2BA,KAInCwJ,EAAQ,UACZ,EAqBYpE,kBAnBc,WACO,mBAAlBza,GAGXA,EAA2D,CAAE3zC,KAAM,eACvE,IAgBQ,gBAACqqD,GAAcA,GAAAA,GAAAA,CAAAA,EAAKjpD,GAAAA,CAAO5H,IAAKi5D,EAAmBl4B,eAAc,GAAU,OAAPt9B,EAAO,YACvE,gBAACqtD,GAAmBA,KAChB,gBAACP,GAAaA,CAACx/C,MAAOwoD,GAAoBx4B,eAAc,GAAU,OAAPt9B,EAAO,qBAC9D,gBAACsvD,GAAAA,KAAS,WACG,IACRsG,IACG,gBAACjD,GAAAA,CACGr1B,eAAc,GAAU,OAAPt9B,EAAO,mCACxBI,QAlEI,W,OAAM20D,GAAsBxJ,E,GAoE/BA,GAAsB,gBAACrE,GAAiBA,MAAI,IAAEqE,EAAqB,OAAS,OAAQ,IAAI,aAC9EA,GAAsB,gBAACtE,GAAkBA,QAIhE,gBAAC2H,GAAcA,KACX,gBAACH,GAAgBA,KACb,gBAACC,GAAaA,KACV,gBAAChf,KAAAA,KACa,sBAAT1xB,GACG,gBAACuxC,KAAAA,KACG,gBAACjI,GAAWA,CACRS,oBAAAA,EACAP,UAAAA,EACA5jD,SAAUqoD,GAAaC,cAC1B,cAKT,gBAACqD,KAAAA,KACG,gBAACjI,GAAWA,CAACS,oBAAAA,EAAmBP,UAAAA,EAAS5jD,SAAUqoD,GAAajB,UAAU,iBAI7EC,EAAextD,SAAS,eACrB,gBAAC8xD,KAAAA,KACG,gBAACjI,GAAWA,CACRS,oBAAAA,EACAP,UAAAA,EACAG,cAAAA,EACAC,YAAa2D,EACb3nD,SAAUqoD,GAAa/sC,YAC1B,gBAKR+rC,EAAextD,SAAS,gBACrB,gBAAC8xD,KAAAA,KACG,gBAACjI,GAAWA,CACRS,oBAAAA,EACAnkD,SAAUqoD,GAAax1C,YACvB+wC,UAAAA,EACAG,cAAAA,EACAC,YAAa2D,GAChB,+BASzB,gBAACR,GAAYA,CACT/qD,OAAQA,EACR0rD,0BAA2BA,EAC3Bf,6BAA8BA,EAC9BK,SAAUqE,EAASrE,SACnBC,eAAgBA,EAChBC,kBAAmBA,EACnBC,cAAeA,EACfG,uBAAwBA,GACxBhB,2BAA4BA,EAC5BiB,mBAAoBA,EACpBvtC,KAAMA,KAGd,gBAAC40C,GAAAA,CACGC,oBAAqBA,GACrBhvD,SAAmB,sBAATma,GAEV,gBAACxd,MAAAA,KACG,gBAAC8uD,GAAAA,KAAS,MAEd,gBAACT,GAASA,CAACtyD,IAAKo5D,IACZ,gBAAClH,GAAgBA,KACb,gBAACE,QAAAA,KACG,gBAACjf,KAAAA,CAAGnzC,IAAKm4D,IACJQ,EAAUruD,KAAI,SAAC+oD,G,OACZ,gBAACD,GAAUA,CACPrtD,IAAK,SAAoC,OAA3BstD,EAAMx9B,OAAO,eAC3BpyB,OAAQ,GAA4C4vD,OAAzC5vD,EAAO,oCAEhB,OAFkD4vD,EAAMx9B,OACtD,WAEJw9B,MAAOA,EACPlC,wBAAyB2B,EAASx4B,aAAa62B,yB,QAOvE,gBAACV,GAAgBA,CACb1vB,eAAc,GAAU,OAAPt9B,EAAO,wBACxBzD,IAAKw3D,EACL1R,SAAU,W,OAAM0T,I,EAChBlyD,SAAmB,sBAATma,GAEV,gBAACuwC,GAAWA,CAAChyD,IAAKk5D,IACd,gBAACzlB,QAAAA,KACIqf,EAASrE,SAASnkD,KAAI,SAAC4jD,G,OACpB,gBAACztB,EAAAA,SAAc,CAAC16B,IAAKmoD,EAAQxnD,IACzB,gBAACmkD,GAAUA,CACP9pB,eAAc,GAAiB2N,OAAdjrC,EAAO,SAAkC,QAA3BirC,EAAAA,GAAAA,GAAawf,EAAQtnD,OACpDynD,kBAAiBH,EAAQxnD,IAExBiyD,EAAUruD,KAAI,SAAC+oD,G,OACZ,gBAAC3gB,KAAAA,CACG3sC,IAAK,QAAsBstD,OAAdnF,EAAQxnD,GAAG,KAA2B,OAAxB2sD,EAAMx9B,OAAO,YACxCkL,eAAc,GAAsCsyB,OAAnC5vD,EAAO,8BAEnBirC,OAF+C2kB,EAAMx9B,OACtD,UACF,KAA8B,QAA3B6Y,EAAAA,GAAAA,GAAawf,EAAQtnD,QAE1B,gBAACmwD,GAAAA,CACG/L,UAAWkD,EAAQ1tB,SAAS7+B,OAC5B0xD,MAAOA,EACPxwC,UAAWqrC,EAAQxnD,GACnBiwD,cAAeA,EACfC,YAAaA,EACbC,YAAa3I,EAAQtnD,KACrBnD,OAAQA,I,KAKvByqD,EAAQ1tB,SAASl2B,KAAI,SAAC+lD,G,OACnB,gBAACxF,GAAUA,CACP9kD,IAAKsqD,EAAa3pD,GAClBmC,UAAWknD,KAAW,aAAwB,OAAX7B,EAAQxnD,IAAM,CAC7C,mBAAoBwgC,GAAW0nB,EAAeV,KAElDntB,eAAc,GAAiBsvB,OAAd5sD,EAAO,SAAuB,OAAhB4sD,EAAa3pD,KAE3CiyD,EAAUruD,KAAI,SAAC+oD,G,OACZ,gBAAC3gB,KAAAA,CACG3sC,IAAK,QAA2BstD,OAAnBhD,EAAa3pD,GAAG,KAA2B,OAAxB2sD,EAAMx9B,OAAO,YAC7CkL,eAAc,GAAsCsyB,OAAnC5vD,EAAO,8BAEnBirC,OAF+C2kB,EAAMx9B,OACtD,UACF,KAAsC6Y,QAAnCA,EAAAA,GAAAA,GAAa2hB,EAAazpD,MAAM,KAEnC,QAFsC8nC,EAAAA,GAAAA,GACpCwf,EAAQtnD,QAGZ,gBAACmwD,GAAAA,CACG1D,MAAOA,EACPxwC,UAAWwtC,EAAa3pD,GACxBiwD,cAAeA,EACfC,YAAaA,EACbC,YAAa,GAAoBxG,OAAjBnC,EAAQtnD,KAAK,MAAsB,OAAlBypD,EAAazpD,MAC9CnD,OAAQA,I,eAWhD,gBAACitD,GAAsBA,CACnB3vB,eAAc,GAAU,OAAPt9B,EAAO,8BACxBzD,IAAKm5D,GACLrT,SAAU,WAnRM,OAAhC0R,EAAoBl3D,SAA6C,OAAzB64D,GAAa74D,SAA6C,OAAzB84D,GAAa94D,UACtF+3D,IAEAb,EAAoBl3D,QAAQm3D,WAAa0B,GAAa74D,QAAQm3D,WAC9D2B,GAAa94D,QAAQm3D,WAAaD,EAAoBl3D,QAAQm3D,W,EAgR9CnwD,SAAmB,sBAATma,GAEV,gBAACkvC,GAAeA,CAACC,cAAeA,MAGvC0I,IACG,gBAACzG,GAAaA,CACVpvD,OAAQA,EACRqvD,SAAUA,EACVlE,cAAeA,EACfsC,qBAAsBA,EACtBC,wBAAyB2B,EAASx4B,aAAa62B,wBAC/CC,eAAgBA,EAChB9pD,SAAmB,sBAATma,IAEf,MAKvB,E,itIC70BYo4C,G,mDAAAA,KAAAA,GAAAA,CAAAA,IAkBZ,IAAMC,GAAkB13D,EAAAA,GAAOowC,MAAK,MAM9BunB,GAAkB33D,EAAAA,GAAO+wC,GAAE,MAChB,SAACvrC,G,OAAgCA,EAAM2sC,Q,IAKlDylB,GAAmB53D,EAAAA,GAAO4wD,GAAE,KACd3jD,EAAQm5B,QAKtB,SAAC5gC,G,OAAkCA,EAAMmJ,MAAQ,UAAsB,OAAZnJ,EAAMmJ,OAAU,E,IAG3EkpD,GAAY73D,EAAAA,GAAO+wC,GAAE,MACV,SAACvrC,G,OAA0BA,EAAM2sC,Q,GAE1BvmC,EAAMQ,QAAQC,OACxB,SAAC7G,G,OAA0BA,EAAMoJ,M,IAUzCkpD,GAAa93D,EAAAA,GAAOswC,GAAE,KACXrjC,EAAQm5B,QAUA,SAAC5gC,G,OAAWA,EAAMuyD,cAAgB,MAAQ,G,IACzC,SAACvyD,G,OAAWA,EAAMwyD,aAAe,MAAQ,G,IAE3C,SAACxyD,G,OAAWA,EAAMyyD,WAAa,MAAQ,G,IACjC,SAACzyD,G,OAAWA,EAAMyyD,YAAczyD,EAAMuyD,cAAgB,MAAQ,G,IAC7D,SAACvyD,G,OAAWA,EAAMyyD,YAAczyD,EAAMwyD,aAAe,MAAQ,G,IAC3D,SAACxyD,G,OAAWA,EAAM0yD,WAAa1yD,EAAMuyD,cAAgB,MAAQ,G,IAC5D,SAACvyD,G,OAAWA,EAAM0yD,WAAa1yD,EAAMwyD,aAAe,MAAQ,G,IAGxFG,GAA8Bn4D,EAAAA,GAAO6B,IAAG,MAMxCu2D,GAA2Bp4D,EAAAA,GAAO6B,IAAG,KAEzBoL,EAAQC,UAWpBmrD,GAAiBr4D,EAAAA,GAAO6B,IAAG,MAO3By2D,GAAuBt4D,EAAAA,GAAO6B,IAAG,MAIjC6hC,IAAuB1jC,EAAAA,EAAAA,IAAO6jC,EAAP7jC,CAAqB6jC,MAK5C00B,GAAgB,Y,IAyBiCC,EAxBnDA,EAAAA,EAAAA,IACAC,EAAAA,EAAAA,OACAp3D,EAAAA,EAAAA,OACA42D,EAAAA,EAAAA,WACAF,EAAAA,EAAAA,cACAG,EAAAA,EAAAA,UACAF,EAAAA,EAAAA,aAUA,OACI,gBAACF,GAAAA,CACGn5B,eAAct9B,EACd42D,WAAYA,EACZF,cAAeA,EACfG,UAAWA,EACXF,aAAcA,GAEbS,EAAO5tD,OAAS4tD,EAAO5tD,OAAO2tD,EAAIj1D,MAA6B,QAArBi1D,EAAAA,EAAIj1D,KAAKk1D,EAAOj0D,aAAhBg0D,IAAAA,EAAAA,EAAyB,GAGhF,EAEME,GAAqB,Y,IACvBD,EAAAA,EAAAA,OACAE,EAAAA,EAAAA,oBACAC,EAAAA,EAAAA,cACAC,EAAAA,EAAAA,kBAOA,OACI,gBAACT,GAAAA,CACGU,KAAM,SACN95B,aAAY,mBAAiC,OAAdy5B,EAAOM,QACtCt3D,QAAS,W,OAAMo3D,EAAkBJ,EAAOj0D,K,EACxCm6B,eACI85B,EAAOp3D,OACD,GAAiB,OAAdo3D,EAAOp3D,OAAO,uBACjB,GAA+B,QAA5BirC,EAAAA,GAAAA,GAAamsB,EAAOM,QAAQ,yBAGvCN,EAAOO,YAAc,gBAACV,GAAAA,KAAsBG,EAAOM,QACrD,gBAACV,GAAAA,KACIM,GAAyC,cAAlBC,GACpB,gBAACK,GAAAA,EAAUA,CAACtqD,MAAO,OAAQC,OAAQ,SAEtC+pD,GAAyC,eAAlBC,GACpB,gBAACM,GAAAA,EAAYA,CAACvqD,MAAO,OAAQC,OAAQ,UAEvC+pD,GAAuB,gBAACQ,GAAAA,EAAqBA,CAACxqD,MAAO,OAAQC,OAAQ,OAAQk1B,MAAO,aAItG,EAEas1B,GAAY/6B,EAAAA,YACrB,WAeIzgC,G,QAbIy7D,QAAAA,OAAAA,IAAU,KAAE,MACZC,KAAAA,OAAAA,IAAO,KAAE,EACTC,EAAAA,EAAAA,kBAAAA,EAAAA,EACAC,qBAAAA,OAAAA,IAAuB,EAAvBA,YAAAA,EAAAA,EAAAA,EACAC,UAAAA,OAAAA,IAAY,eACZC,eAAAA,OAAAA,IAAiB,eACjBC,aAAAA,OAAAA,IAAe,WACfr0D,EAAAA,EAAAA,QACAjE,EAAAA,EAAAA,OACAy9C,EAAAA,EAAAA,UAAAA,EAAAA,EACA8a,WAAAA,OAAAA,IAAa,KAAE,EACZp0D,EAAAA,GAAAA,EAAAA,CAXH6zD,UACAC,OACAC,oBACAC,uBACAC,YACAC,iBACAC,eACAr0D,UACAjE,SACAy9C,YACA8a,eAKwCp5D,EAAAA,IAAAA,EAAAA,EAAAA,UAAwB+4D,GAAAA,GAA7DM,EAAqCr5D,EAAAA,GAArBs5D,EAAqBt5D,EAAAA,GACFA,EAAAA,IAAAA,EAAAA,EAAAA,UAA+Bg5D,GAAAA,GAAlEZ,EAAmCp4D,EAAAA,GAApBu5D,EAAoBv5D,EAAAA,GAEpCw5D,GAAOrjB,EAAAA,EAAAA,cAAY,WACrB,IAAMsjB,EAAYC,KAAUZ,GAE5B,IAAKO,EACD,OAAOI,EAEX,IAAME,EAAad,EAAQzL,MAAK,SAAC6K,G,OAAWA,EAAOj0D,OAASq1D,C,IAE5D,IAAKM,EACD,OAAOF,EAGX,IAAMG,EAA+B,eAAlBxB,GAA8C,EAAI,EAwBrE,GAFAqB,EAAUD,MATK,SAACK,EAA8BC,GAC1C,IAZsB9zD,EAAQk2B,EACxB69B,EACAC,EAcN,OAJeL,EAAWM,UACpBN,EAAWM,UAAUJ,EAAK92D,KAAM+2D,EAAK/2D,OAbrBiD,EAcC6zD,EAAK92D,KAdEm5B,EAcI49B,EAAK/2D,KAbjCg3D,EAAS/zD,EAAE2zD,EAAW31D,MACtBg2D,EAAS99B,EAAEy9B,EAAW31D,MAEN,iBAAX+1D,GAAyC,iBAAXC,GAC9B/9B,EAAAA,GAAAA,IAAc89B,EAAQC,IAG1Bz9B,EAAAA,GAAAA,IAAWw9B,EAAQC,KAQVJ,CACpB,IAKIR,EAAY,CACZ,IAAMc,EAAiBT,EAAUhvC,QAAO,SAACutC,G,OAAQoB,EAAW96D,SAAS05D,EAAIj1D,KAAKe,G,IACxEq2D,EAAoBV,EAAUhvC,QAAO,SAACutC,G,OAASoB,EAAW96D,SAAS05D,EAAIj1D,KAAKe,G,IAIlF,OAFyB,GAAIo2D,GAAAA,OAAgB,GAAGC,GAGpD,CACI,OAAOV,CAEf,GAAG,CAACJ,EAAgBjB,EAAeU,EAAMD,EAASO,IAEdp5D,EAAAA,IAAAA,EAAAA,EAAAA,UAAmCw5D,KAAAA,GAAhEY,EAA6Bp6D,EAAAA,GAAjBq6D,EAAiBr6D,EAAAA,GAE9Bs6D,EAAa,SAACC,GAChB,IAAMC,EACFnB,IAAmBkB,GAAwC,cAAlBnC,EAAAA,aAAAA,YAI7CkB,EAAkBiB,GAClBhB,EAAiBiB,EACrB,EAYA,OAVAl9D,EAAAA,EAAAA,YAAU,WACNg8D,EAAkBP,GAClBQ,EAAiBR,EAAoBC,QAAAA,EAAAA,YAAkD,KAC3F,GAAG,CAACD,EAAmBC,KAEvByB,EAAAA,GAAAA,KAAqB,WACjB,IAAMC,EAAUlB,IAChBa,EAAcK,EAClB,GAAG,CAAC7B,EAASC,EAAMO,EAAgBjB,EAAegB,IAG9C,gCACKt0D,EACG,gBAACo+B,GAAoBA,CAACI,MAAO,UAE7B,gBAAC4zB,GAAAA,GAAAA,CAAgB95D,IAAKA,EAAK+gC,eAAct9B,EAAQ29B,aAAY8f,GAAet5C,GACxE,gBAACwqD,QAAAA,KACG,gBAAC2H,GAAAA,CAAgBxlB,SAAUunB,GACtBL,EAAQnxD,KAAI,SAACuwD,G,OACV,gBAACb,GAAAA,GAAAA,CACGjpD,MAAO8pD,EAAO9pD,MACdhL,IAAK80D,EAAOj0D,KACZm6B,eACI85B,EAAOp3D,OACD,GAAiB,OAAdo3D,EAAOp3D,OAAO,WACjB,GAA+B,QAA5BirC,EAAAA,GAAAA,GAAamsB,EAAOM,QAAQ,YAEpCN,EAAOj0D,OAASq1D,GAAkB,CACnC,YACsB,cAAlBjB,EAA4C,YAAc,eAGjEH,EAAO0C,SACJ,gBAACzC,GAAAA,CACGD,OAAQA,EACRE,oBAAqBF,EAAOj0D,OAASq1D,EACrCjB,cAAeA,QAAAA,EAAAA,YACfC,kBAAmBiC,KAGtBrC,EAAOO,YACJ,gBAACb,GAAAA,KACIM,EAAOM,Q,MAQpC,gBAAC1nB,QAAAA,KACIupB,EAAW1yD,KAAI,SAACswD,EAAK4C,GAClB,OACI,gBAACvD,GAAAA,CACGl0D,IAAK60D,EAAIj1D,KAAKe,GACdsK,OAAQ6qD,EACRtnB,SAAUwnB,EACVlzD,UAAW+xD,EAAI/xD,UACfk4B,eAAc65B,EAAIn3D,QAEjBg4D,EAAQnxD,KAAI,SAACuwD,EAAQ4C,G,OAClB,gBAAC9C,GAAAA,CACG50D,IAAK,GAAkB60D,OAAfC,EAAOj0D,KAAK,KAAe,OAAZg0D,EAAIj1D,KAAKe,GAAG,KACnCk0D,IAAKA,EACLC,OAAQA,EACRp3D,OACIm3D,EAAIn3D,OACE,GAAiBirC,OAAdksB,EAAIn3D,OAAO,KAA+B,QAA5BirC,EAAAA,GAAAA,GAAamsB,EAAOM,cACrCjmD,EAEVmlD,WAAyB,IAAbmD,EACZrD,cAA+B,IAAhBsD,EACfnD,UAAWkD,IAAaR,EAAWr7D,OAAS,EAC5Cy4D,aAAcqD,IAAgBhC,EAAQ95D,OAAS,G,IAKnE,MAMxB,I,8eAEJ65D,GAAUthD,YAAc,YC3XxB,IAUA,GAVqB,Y,IAAG+mB,EAAAA,EAAAA,KAAM19B,EAAAA,EAAAA,MAAOyN,EAAAA,EAAAA,OAAQD,EAAAA,EAAAA,MAAUwwC,EAAAA,GAAAA,EAAAA,CAA/BtgB,OAAM19B,QAAOyN,SAAQD,U,OACzC,gBAACywC,GAAAA,E,uUAAOA,CAAAA,CAACC,QAAQ,eAAezwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GACxF,gBAACmc,UAAAA,CACGz8B,KAAMA,EACN2gB,UAAU,4FACV+b,OAAO,qC,ECdnB,M,sjJCwDA,IAAMC,GAAgBx7D,EAAAA,GAAO+B,OAAM,MACd,SAACyD,G,OACdA,EAAMk4C,gBAAkB,EAAIl4C,EAAMi2D,eAAiB,GAAqB74B,OAAlBA,EAAOC,QAAQ,KAAkB,OAAfD,EAAOC,QAAQ,QAAQD,EAAOC,O,GACtFj3B,EAAMC,KAAKo0B,WACXr0B,EAAMQ,QAAQC,MACzBT,EAAMQ,QAAQmzB,MAOR6C,GACF,SAAC58B,G,OAAWA,EAAMk4C,gBAAkB,OAASzb,EAAUqB,K,IACrD,SAAC99B,G,OAAWA,EAAMk4C,gBAAkB,OAASzb,EAAUmE,M,IAC3D,SAAC5gC,G,OAAWA,EAAMN,SAAW,MAAQ,G,IAY9Cw2D,GAAiB17D,EAAAA,GAAO6B,IAAG,KACT+J,EAAMQ,QAAQC,MACdT,EAAMk1B,SAASC,gBAClB6B,EAAOC,QACVC,EAGA71B,EAAQi3B,SACT,SAAC1+B,G,IAAUA,E,OAAc,QAAdA,EAAAA,EAAM2Q,gBAAN3Q,IAAAA,EAAAA,EAAkB,MAAK,IACtC,SAACA,G,OAAUA,EAAMmJ,K,IAGxBouC,IAAiB/8C,EAAAA,EAAAA,IAAOg9C,GAAPh9C,CAAoBg9C,MAiBrC2e,IAAiB37D,EAAAA,EAAAA,IAAO+8C,GAAP/8C,CAAqB+8C,MAErB,SAACv3C,G,OAAWA,EAAMo2D,sBAAwB3uD,EAAQ+3B,MAAQ,C,IAK3E62B,IAAc77D,EAAAA,EAAAA,IAAO+8C,GAAP/8C,CAAqB+8C,MAEnB,SAACv3C,G,OAAWA,EAAMs2D,iBAAmB7uD,EAAQq2B,MAAQr2B,EAAQ+3B,K,IAC1D,SAACx/B,G,OACdA,EAAMs2D,iBAAmB,EAAIt2D,EAAMo2D,sBAAwB3uD,EAAQq2B,MAAQr2B,EAAQ+3B,K,IAIxE,SAACx/B,G,OAAWA,EAAMs2D,iBAAmB,IAAM,G,IAI5DC,GAAW/7D,EAAAA,GAAOC,EAAC,KACRgiC,EAAUqB,MACd13B,EAAMC,KAAKq0B,gBACJjzB,EAAQs3B,SAGtBC,IAAoBxkC,EAAAA,EAAAA,IAAO0kC,EAAP1kC,CAAkB0kC,KAC7Bz3B,EAAQm5B,OACCx6B,EAAMC,KAAKs0B,gBACPv0B,EAAMC,KAAKu0B,oBACdwC,EAAOC,QAAWD,EAAOC,SAQ5Cm5B,GAAqBh8D,EAAAA,GAAO6B,IAAG,MACnB,SAAC2D,G,OAAUA,EAAMy2D,S,IAElB,SAACz2D,G,OAAWA,EAAMs2D,iBAAmB7uD,EAAQq2B,MAAQr2B,EAAQm5B,M,GAAWn5B,EAAQm5B,QAG3F81B,GAAkBl8D,EAAAA,GAAO4pC,GAAE,MAE3BuyB,IAAkBn8D,EAAAA,EAAAA,IAAOo8D,EAAAA,GAAPp8D,CAAeo8D,MAWjCC,IAAqBr8D,EAAAA,EAAAA,IAAOs8D,GAAPt8D,CAAmBs8D,MAItB,SAAC92D,G,OAAWA,EAAM+2D,kBAAoB,SAAW,C,IACpD,SAAC/2D,G,OAAWA,EAAM+2D,kBAAoB,MAAQ,C,IAQ7D7yB,GAAiB1pC,EAAAA,GAAOwpC,GAAE,KACbv8B,EAAQi3B,SACL,SAAC1+B,G,OAAWA,EAAMs2D,iBAAmB7uD,EAAQq2B,MAAQr2B,EAAQi3B,O,IAG7E,SAAC1+B,G,OACCA,EAAMg3D,YACN,0KAO+B,OAAjBh3D,EAAMg3D,WAAW,W,IAQjCC,IAAqBz8D,EAAAA,EAAAA,IAAOsoC,GAAPtoC,CAAmBsoC,MAChC,SAAC9iC,G,MAA6B,WAAlBA,EAAMxB,QAAuB,OAASiJ,EAAQi3B,O,IAalEw4B,GAAqB,SAACh7D,GACxB,IAAMi7D,EAAmB,gBAAoD,QAApCrwB,EAAAA,GAAAA,GAAa5qC,EAASk7D,eACzDC,EAAwBv+D,SAAS6Q,eAAewtD,GAChDG,EAA2B,GAC7BjyC,EAAQ,EAEZnpB,EAASsJ,QAAQgtB,SAAQ,SAACtN,GACtBoyC,EAAcpjC,KAAKhP,EAAK4jB,UACpB5jB,EAAK4jB,WACLzjB,GAAS,EAEjB,IAEA,IAAIkyC,GAAa,EACjB,GAAIF,EACA,IAAK,IAAInlC,EAAI,EAAGolC,EAAcv9D,OAASm4B,EAAGA,GAAK,EAC3C,GAAU,IAANA,EACAqlC,EAAaD,EAAc,OACxB,CACH,GAAIC,IAAeD,EAAcplC,GAAI,CAEjCmlC,EAAsB3P,eAAgB,EACtC,KACJ,CAAW6P,GAAcA,IAAeD,EAAcplC,GAElDmlC,EAAsB3P,eAAgB,EAC9B6P,GAAcA,IAAeD,EAAcplC,KAEnDmlC,EAAsB3P,eAAgB,EAE9C,CAIJ2P,IAEAA,EAAsBpxD,QAAUof,IAAUiyC,EAAcv9D,OAEhE,EAEMy9D,GAAa,Y,IACf37D,EAAAA,EAAAA,OACAK,EAAAA,EAAAA,SACAu7D,EAAAA,EAAAA,oBACAC,EAAAA,EAAAA,eACAzvB,EAAAA,EAAAA,YACAmuB,EAAAA,EAAAA,sBACA53D,EAAAA,EAAAA,QAEMm5D,EAAez7D,EAASsJ,QAAQigB,QAAO,SAACP,GAC1C,OAAI+iB,EAAY2vB,WAAW,KAChB1yC,EAAKlmB,KAELkmB,EAAKlmB,KAAK0O,cAAcpU,SAAS2uC,EAAYv6B,cAE5D,IAEM4oD,EAA+B,WAAZ93D,EAMzB,OAJAlG,EAAAA,EAAAA,YAAU,WACN4+D,GAAmBh7D,EACvB,GAAG,CAACA,IAGA,gCACI,gBAACgoC,GAAcA,CAACoyB,iBAAkBA,GAC9B,gBAACD,GAAAA,CACGD,sBAAuBA,EACvBv6D,OAAQ,GAAwCirC,OAArCjrC,EAAO,gCAAkE,QAApCirC,EAAAA,GAAAA,GAAa5qC,EAASk7D,eACtEt4D,GAAI,gBAAoD,QAApCgoC,EAAAA,GAAAA,GAAa5qC,EAASk7D,eAC1Cr4D,MAAO,GACHq3D,OADME,EAAmB,aAAe,OAAO,KAElD,OADGF,EAAwBl6D,EAASk7D,aAAe,IAEpDp4D,KAAM,eAAmD,QAApC8nC,EAAAA,GAAAA,GAAa5qC,EAASk7D,eAC3Cj2D,SAAU,SAACjD,G,OAAMu5D,EAAoBv5D,E,EACrCu4C,WAAAA,EACAltC,QAAAA,EACA+sD,iBAAkBA,KAGzBqB,EAAa59D,OAAS,EACnB49D,EACKnD,MAAK,SAACxzD,EAAak2B,G,OAAgBl2B,EAAEhC,KAAKlB,OAAOq5B,cAAcD,EAAEl4B,KAAKlB,O,IACtE4E,KAAI,SAACwiB,G,OACF,gBAACgf,GAAcA,CACX/lC,IAAK+mB,EAAKpmB,KAAMgoC,EAAAA,GAAAA,GAAa5hB,EAAKlmB,MAClCg4D,WAAY9xC,EAAK8xC,WACjBV,iBAAkBA,GAElB,gBAACH,GAAAA,CACGt6D,OAAQ,GAAoCirC,OAAjCjrC,EAAO,4BAAkD,QAAxBirC,EAAAA,GAAAA,GAAa5hB,EAAKlmB,OAC9DF,GAAIomB,EAAKpmB,KAAMgoC,EAAAA,GAAAA,GAAa5hB,EAAKlmB,MACjCD,MAAOmmB,EAAKlmB,KACZA,KAAM,eAAmD,QAApC8nC,EAAAA,GAAAA,GAAa5qC,EAASk7D,eAC3Cj2D,SAAU,W,OAAMu2D,GAAe5wB,EAAAA,GAAAA,GAAa5hB,EAAKlmB,MAAO9C,EAASk7D,a,EACjEnxD,QAASif,EAAK4jB,SACdstB,sBAAuBA,EACvB3f,WAAAA,EACAltC,QAAAA,I,IAKhB,gBAACy6B,KAAAA,KACG,gBAACuyB,GAAAA,CAASp9B,eAAc,GAAU,OAAPt9B,EAAO,6BAA2B,sBAKjF,EAeMg8D,GAA6D,Y,IAC/D95D,EAAAA,EAAAA,KACAlC,EAAAA,EAAAA,OACA6kD,EAAAA,EAAAA,QACAoX,EAAAA,EAAAA,kBACAt2B,EAAAA,EAAAA,mBACAu2B,EAAAA,EAAAA,UACAtB,EAAAA,EAAAA,UACA9lD,EAAAA,EAAAA,SACAnS,EAAAA,EAAAA,QACA2K,EAAAA,EAAAA,MAEsC0vB,EAAAA,GAAAA,EAAAA,SAAe,OAA9CoP,EAA+BpP,EAAAA,GAAlBqP,EAAkBrP,EAAAA,GACVA,EAAAA,GAAAA,EAAAA,UAAe,MAApCm/B,EAAqBn/B,EAAAA,GAAZo/B,EAAYp/B,EAAAA,GAEtB0P,GAAiBpvC,EAAAA,EAAAA,QAAO,MACxB++D,GAAc/+D,EAAAA,EAAAA,WAEpBhB,EAAAA,GAAAA,GAAgB+/D,GAAa,WACzB,OAAQ15D,GACJ,IAAK,SACL,IAAK,SACDgjC,IACA,MACJ,IAAK,SACDs2B,IAEZ,IAEA,IAIM90B,EAAoB,WACtBkF,EAAe,IAEfK,EAAe7vC,QAAQmpC,OAC3B,EAEM61B,EAAiB,SAACS,EAA0Bf,GAC9C,IAAMgB,EAAY,GAAGr6D,GAErBq6D,EAAS5lC,SAAQ,SAACt2B,EAAoBm8D,GAC9Bn8D,EAASk7D,eAAiBA,IAC1BgB,EAASC,GAAe7yD,QAAQgtB,SAAQ,SAACtN,IACjC4hB,EAAAA,GAAAA,GAAa5hB,EAAKlmB,QAAUm5D,IAC5BjzC,EAAK4jB,UAAY5jB,EAAK4jB,SACtB4X,EAAQ0X,GACRH,GAAS,GAEjB,IACAf,GAAmB,MAAKh7D,IAEhC,GACJ,EAiCA,OArBA5D,EAAAA,EAAAA,YAAU,W,IACG84C,EAAT,SAA2BlzC,GACT,WAAVA,EAAEC,MACc,WAAZK,EACAs5D,IAEKh/D,SAASu4C,gBAAkB9I,EAAe7vC,SAAW6vC,EAAe7vC,QAAQQ,MAAMa,OACvFipC,IAEAxB,IAGZ,EAIA,OAFA1oC,SAASE,iBAAiB,UAAWo4C,GAE9B,WACHt4C,SAASC,oBAAoB,UAAWq4C,EAC5C,CACJ,GAAG,CAAC5P,EAAoBs2B,EAAmBt5D,IAGvC,gBAAC03D,GAAAA,CACG/8B,eAAc,GAAU,OAAPt9B,EAAO,2BACxB8U,SAAUA,EACVvY,IAAK8/D,EACL5B,iBAA8B,WAAZ93D,EAClB2K,MAAmB,WAAZ3K,EAAuB2K,EAAQ,IAErC4uD,GACG,gBAACd,GAAkBA,CACfp7D,OAAQ,GAAU,OAAPA,EAAO,iBAClBzD,IAAKmwC,EACLtpC,YAAa,YACb8jC,aAAc,SAAC7kC,G,OAvEJ,SAACA,GACxBgqC,EAAehqC,EAAEzF,OAAOS,MAC5B,CAqEqCo/D,CAAmBp6D,E,EACxC8kC,kBAAmBA,EACnBC,WAAYgF,EACZzF,cAAc,EACdrJ,eAAc,GAAU,OAAPt9B,EAAO,yBACxBsnC,eAA4B,WAAZ3kC,EAChB4kC,cAA2B,WAAZ5kC,EACfA,QAASA,IAGjB,gBAACg4D,GAAAA,CAAmBC,UAAWA,EAAWH,iBAA8B,WAAZ93D,GACvDT,GACGA,EAAK2E,KAAI,SAACxG,EAAoB6qC,G,OAC1B,gBAAC2vB,GAAAA,CAAgBv4D,IAAKjC,EAASk7D,cAC3B,gBAACI,GAAAA,CACG37D,OAAQA,EACRK,SAAUA,EACVu7D,oBAAqB,SAACv5D,G,OA7DtB,SAACA,EAAwCm6D,GACjE,IAAMD,EAAY,GAAGr6D,GACrBq6D,EAASC,GAAe7yD,QAAQgtB,SAAQ,SAACtN,GACrCA,EAAK4jB,SAAW5qC,EAAEzF,OAAOwN,OAC7B,IAEAy6C,EAAQ0X,GACRH,GAAS,EACb,CAqDwDR,CAAoBv5D,EAAG6oC,E,EACnD2wB,eAAgBA,EAChBzvB,YAAaA,EACbmuB,uBAAuBr4D,aAAAA,EAAAA,EAAMhE,QAAS,EACtCyE,QAASA,I,KAKhB,WAAZA,GACG,gBAACwgC,GAAiBA,CAACb,QAAS,iBACxB,gBAAC+c,EAAAA,GAAaA,CAACv7C,MAAOmiC,EAAMhH,WACxB,gBAAC/zB,EAAYA,CACTlL,OAAQ,GAAU,OAAPA,EAAO,gCAClB+C,KAAM,SACN3C,QAAS,W,OAAMulC,G,GAClB,WAIL,gBAAC9kC,EAAMA,CACHb,OAAQ,GAAU,OAAPA,EAAO,+BAClB+C,KAAM,SACN3C,QAAS,W,OAAM67D,G,EACfp4D,UAAWs4D,GACd,UAOrB,EAEMO,GAAsB,YAEfC,GAAmB3/B,EAAAA,YAC5B,WAcIzgC,G,IAZIqgE,EAAAA,EAAAA,QACA58D,EAAAA,EAAAA,OACA6D,EAAAA,EAAAA,SACAo4D,EAAAA,EAAAA,kBACAt2B,EAAAA,EAAAA,mBAAAA,EAAAA,EACAu2B,UAAAA,OAAAA,IAAY,SACZtB,UAAAA,OAAAA,IAAY,YACZ9lD,EAAAA,EAAAA,SACAvT,EAAAA,EAAAA,QACAoB,EAAAA,EAAAA,QACGwB,EAAAA,GAAAA,EAAAA,CAVHy4D,UACA58D,SACA6D,WACAo4D,oBACAt2B,qBACAu2B,YACAtB,YACA9lD,WACAvT,UACAoB,YAKoBxD,EAAAA,IAAAA,EAAAA,EAAAA,UAASy9D,GAAAA,GAA1B16D,EAAiB/C,EAAAA,GAAX0lD,EAAW1lD,EAAAA,GAC0BA,EAAAA,IAAAA,EAAAA,EAAAA,WAAS,MAApD+7D,EAA2C/7D,EAAAA,GAAxB09D,EAAwB19D,EAAAA,GACRA,EAAAA,IAAAA,EAAAA,EAAAA,UAASu9D,IAAAA,GAA5CI,EAAmC39D,EAAAA,GAApB49D,EAAoB59D,EAAAA,GACEA,EAAAA,IAAAA,EAAAA,EAAAA,UAAS,MAA9C69D,EAAqC79D,EAAAA,GAArB89D,EAAqB99D,EAAAA,GACtCk9C,EAA8B,WAAZ15C,EAElBu6D,GAAe5/D,EAAAA,EAAAA,QAAuB,OAC5C6/D,EAAAA,EAAAA,qBAAkE5gE,GAAK,W,OAAM2gE,EAAargE,O,IAE1F,IAAMugE,EAAuB,WACzBP,GAAsB3B,EAC1B,EAOMmC,GAAe/nB,EAAAA,EAAAA,cAAY,WAG7BuP,GAFa,W,OAAMlf,G,IAGnBk3B,GAAqB,EACzB,GAAG,CAACl3B,IAEE23B,EAAU,SAACn5D,GACb,OAAK5C,EAIEA,EAAQ4C,GAHJ,IAIf,GAEA1H,EAAAA,EAAAA,YAAU,WACNooD,EAAQ+X,EACZ,GAAG,CAACA,KAEJngE,EAAAA,EAAAA,YAAU,WACN,GAAKyF,EAAL,CAIA,IAAMi1C,EAAQj1C,EAAKq7D,SAAQ,SAACl9D,G,OAAaA,EAASsJ,O,IAC5C6zD,EAAiBrmB,EAAMj5C,OACvBu/D,EAAoBtmB,EAAMvtB,QAAO,SAACP,G,OAASA,EAAK4jB,Q,IAAU/uC,OAE1Dw/D,EACoB,IAAtBD,EACMf,GACA,GAA2Bc,OAAxBC,EAAkB,QAA4BD,OAAtBA,EAAe,SAAuC,OAAb,IAAnBA,EAAuB,GAAK,KAEvFT,EAAiBW,EAXjB,CAYJ,GAAG,CAACx7D,IAEJ,IAAMy7D,EAAuB,W,IACRT,EAAXU,EAAWV,SAAqB,QAArBA,EAAAA,EAAcrgE,eAAdqgE,IAAAA,OAAAA,EAAAA,EAAuBngC,SAAS,GAAG8gC,YACpDZ,EAAkBW,QAAAA,EAAY,EAClC,EAYA,OAVAnhE,EAAAA,EAAAA,YAAU,WAKN,OAJAkhE,IAEA5gE,OAAOI,iBAAiB,SAAUwgE,GAE3B,WACH5gE,OAAOG,oBAAoB,SAAUygE,EACzC,CACJ,GAAG,IAGC,gBAACn9D,MAAAA,GAAAA,CAAIjE,IAAK2gE,GAAkB/4D,GACvB5C,GACG,gBAAC+7D,EAAAA,CACGt9D,OAAQ,GAAU,OAAPA,EAAO,yCAClBI,QAAS,W,OAAMg9D,G,KAGrB77D,GACE,gBAAC44D,GAAAA,CACGp3D,KAAM,SACN3C,QAASg9D,EACThD,eAAgBc,EAChB59B,eAAc,GAAU,OAAPt9B,EAAO,yCACxB6D,SAAUA,EACVw4C,gBAAiBA,GAEhBygB,EAAe,IACfzgB,EACG,gBAAC2e,GAAAA,CAAmBE,kBAAmBA,IAEvC,gBAACJ,GAAAA,CAAgBt9B,KAAMjzB,EAAMC,KAAK+zB,UAAWjxB,MAAO,MAAOC,OAAQ,SAI9E2tD,GACG,gBAACc,GAAAA,CACG95D,KAAMA,EACNlC,OAAQA,EACRk8D,UAAWA,EACXtB,UAAWA,EACX9lD,SAAUA,EACV+vC,QAASA,EACTlf,mBAAoB03B,EACpBpB,kBA1FI,WAChBA,EAAkB/5D,GAClB26D,GAAqB,EACzB,EAwFgBl6D,QAASA,EACT2K,MAAO0vD,EAAiB,GAAkB,OAAfA,EAAe,MAAM,KAKpE,I,q6BAEJL,GAAiBlmD,YAAc,mBChlB/B,IAAMqnD,GAAoBn/D,EAAAA,GAAO6B,IAAG,MAS9BwF,GAAcrH,EAAAA,GAAOuE,MAAK,MACV,SAACiB,G,OAAWA,EAAMk4C,gBAAkB,EAAIzwC,EAAQC,Q,GACnDk1B,GACF,SAAC58B,G,OAAWA,EAAMk4C,gBAAkBzb,EAAUiC,QAAUjC,EAAUqB,K,IAChE,SAAC99B,G,OAAWA,EAAMy2C,UAAY,MAAQ,K,IACtC,SAACz2C,G,OAAWA,EAAMk4C,gBAAkB,SAAWzb,EAAUmE,M,IACvD,SAAC5gC,G,OAAWA,EAAMk4C,gBAAkB,MAAQ,C,IAEpD,SAACl4C,G,OACNA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAM35B,EAAMk4C,gBAAkB9xC,EAAMQ,QAAQmzB,MAAQ3zB,EAAMC,KAAKm0B,U,IACtF,SAACx6B,G,OAAWA,EAAMN,SAAW,MAAQ,G,IAGvCk6D,GAAc/gC,EAAAA,YACvB,WAeIzgC,G,IAbIqgE,EAAAA,EAAAA,QACA58D,EAAAA,EAAAA,OACAkD,EAAAA,EAAAA,MACAW,EAAAA,EAAAA,SACAo4D,EAAAA,EAAAA,kBACAt2B,EAAAA,EAAAA,mBAAAA,EAAAA,EACAu2B,UAAAA,OAAAA,IAAY,SACZtB,UAAAA,OAAAA,IAAY,YACZ9lD,EAAAA,EAAAA,SACA8lC,EAAAA,EAAAA,UAAAA,EAAAA,EACAj4C,QAAAA,OAAAA,IAAU,aACPwB,EAAAA,GAAAA,EAAAA,CAXHy4D,UACA58D,SACAkD,QACAW,WACAo4D,oBACAt2B,qBACAu2B,YACAtB,YACA9lD,WACA8lC,YACAj4C,YAKE05C,EAA8B,WAAZ15C,EAExB,OACI,gBAACm7D,G,uUAAAA,CAAAA,CAAkBvhE,IAAKA,GAAS4H,GAC7B,gBAAC6B,GAAWA,CAACnC,SAAUA,EAAU+2C,UAAWA,EAAWyB,gBAAiBA,GACnEn5C,GAEL,gBAACy5D,GAAgBA,CACbC,QAASA,EACT58D,OAAQA,EACRi8D,kBAAmBA,EACnBt2B,mBAAoBA,EACpB9hC,SAAUA,EACV+2D,UAAWA,EACX9lD,SAAUA,EACVonD,UAAWA,EACXv5D,QAASA,IAIzB,I,u5KAEJo7D,GAAYtnD,YAAc,cCjE1B,I,GAIMunD,GAAgCr/D,EAAAA,GAAO6B,IAAG,MAC1C,SAAC2D,G,OAAUA,EAAM6Z,MAAQ,aAAwB,OAAX7Z,EAAM6Z,KAAK,I,IACjD,SAAC7Z,G,OAAUA,EAAMwsC,MAAQ,SAAoB,OAAXxsC,EAAMwsC,KAAK,M,IAC7C,SAACxsC,G,OAAUA,EAAMusC,KAAO,QAAkB,OAAVvsC,EAAMusC,IAAI,M,GALzB,IAUCnmC,EAAMk1B,SAASC,gBAXf,EADD,IAgBF6B,EAAOC,QAEVC,EACCV,GAGbk9B,GAAOt/D,EAAAA,GAAOwpC,GAAE,KAMT59B,EAAMk1B,SAASI,sBAQtBq+B,GAAav/D,EAAAA,GAAO+B,OAAM,KAQbqgC,GACb,SAAC58B,G,OACCA,EAAMg6D,SACNC,EAAAA,EAAAA,IAAGA,K,GAIW7zD,EAAMk1B,SAASE,uBAE/B,SAACx7B,G,OACCA,EAAM6lC,aACNo0B,EAAAA,EAAAA,IAAGA,KAEe7zD,EAAMk1B,SAASG,yBAEXr1B,EAAMk1B,SAASG,yB,IAKvCy+B,GAAY1/D,EAAAA,GAAO+B,OAAM,KAUT6J,EAAMk1B,SAASE,uBAGfiH,EAAAA,EAAAA,IAAO,MAAOr8B,EAAMk1B,SAASE,wBAI7C2+B,IAAa3/D,EAAAA,EAAAA,IAAO0/D,GAAP1/D,CAAO0/D,MAEpBE,IAAa5/D,EAAAA,EAAAA,IAAO0/D,GAAP1/D,CAAO0/D,MAEpBnX,IAAoBvoD,EAAAA,EAAAA,IAAOwoD,EAAAA,GAAPxoD,CAAkBwoD,MAItCF,IAAqBtoD,EAAAA,EAAAA,IAAO6kC,EAAAA,GAAP7kC,CAAmB6kC,MAIxCg7B,IAAa7/D,EAAAA,EAAAA,IAAOuM,EAAPvM,CAAmBuM,MAUhCuzD,GAAmB9/D,EAAAA,GAAOgM,KAAI,KAEjBo2B,EACFH,EAAUqB,OAIrBy8B,GAAiB//D,EAAAA,GAAO6B,IAAG,MAI3Bm+D,GAAahgE,EAAAA,GAAO65C,GAAE,MAItBomB,IAAYjgE,EAAAA,EAAAA,IAAOggE,GAAPhgE,CAAOggE,O,SAEpBE,G,+BAAAA,KAAAA,GAAAA,CAAAA,IAKL,IAAMC,GAAQ,Y,IACVC,EAAAA,EAAAA,YACAC,EAAAA,EAAAA,YACAC,EAAAA,EAAAA,aACAj/D,EAAAA,EAAAA,OAWMk/D,EAAc,WAEhB,IADA,IAAMnoB,EAAM,GACH1gB,GAAK,EAAGA,EAAI,GAAIA,IACrB0gB,EAAI1e,KAAK0mC,EAAc1oC,GAE3B,OAAO0gB,CACX,CANoB,GAOdooB,EAAYJ,EAAc,EAEhC,OACI,gBAACH,GAAAA,CAAUthC,eAAc,GAAU,OAAPt9B,EAAO,YAC9Bk/D,EAAYr4D,KAAI,SAACwiB,GACd,IAAM2gB,EAAqC,iBAAjBi1B,GAA6B51C,IAAS41C,EAChE,OACI,gBAAChB,GAAAA,CAAK37D,IAAK,SAAc,OAAL+mB,IAChB,gBAAC60C,GAAAA,CACG99D,QAAS,W,OAAM4+D,EAAY31C,E,EAC3B80C,OAAQ90C,EAAO01C,GAAe11C,EAAO81C,EACrCn1B,WAAYA,EACZ1M,eAAc,GAAiCjU,OAA9BrpB,EAAO,yBAA4B,OAALqpB,GAC/C+1C,gBAAep1B,EACfjnC,KAAK,UAEJsmB,GAIjB,IAGZ,EAEMg2C,GAAS,YAaX,I,IAZAC,EAAAA,EAAAA,aACAC,EAAAA,EAAAA,cACAC,EAAAA,EAAAA,eACAx/D,EAAAA,EAAAA,OAOMy/D,EAAe,GAEZppC,EAAI,EAAGA,EAAI,GAAIA,IACpBopC,EAAapnC,KAAKhkB,OAAQu7C,MAAMv5B,GAAGjE,OAAO,QAG9C,OACI,gBAACusC,GAAAA,CAAWrhC,eAAc,GAAU,OAAPt9B,EAAO,aAC/By/D,EAAa54D,KAAI,SAAC64D,EAAWrpC,GAC1B,IAAM2T,EAAsC,iBAAlBu1B,GAA8BlpC,IAAMkpC,GAAiBC,EAC/E,OACI,gBAACvB,GAAAA,CAAK37D,IAAK,UAAY,OAAF+zB,IACjB,gBAAC6nC,GAAAA,CACGp2B,UAAWkC,EACX5pC,QAAS,W,OAAMk/D,EAAajpC,E,EAC5B2T,WAAYA,EACZ1M,eAAc,GAAmCjH,OAAhCr2B,EAAO,2BAA2B,OAAFq2B,GACjD+oC,gBAAep1B,EACfjnC,KAAK,UAEJ28D,GAIjB,IAGZ,EAIaC,GAA0B3iC,EAAAA,YACnC,WAAiEzgC,G,QAA9DyzD,KAAAA,OAAAA,IAAO,aAAM4P,WAAAA,OAAAA,IAAa,SAAMl2C,EAAAA,EAAAA,SAAU1pB,EAAAA,EAAAA,OAAWmE,EAAAA,GAAAA,EAAAA,CAArD6rD,OAAa4P,aAAmBl2C,WAAU1pB,WAIDb,EAAAA,IAAAA,EAAAA,EAAAA,UAAS6wD,GAAAA,GAA1CiP,EAAiC9/D,EAAAA,GAAnB0gE,EAAmB1gE,EAAAA,GACEA,EAAAA,IAAAA,EAAAA,EAAAA,UAASygE,GAAAA,GAA5CL,EAAmCpgE,EAAAA,GAApB2gE,EAAoB3gE,EAAAA,GAIZA,EAAAA,IAAAA,EAAAA,EAAAA,UAAS8/D,GAAgB5qD,OAAQ27C,QAAI,GAA5D+P,EAAuB5gE,EAAAA,GAAd6gE,EAAc7gE,EAAAA,GACcA,EAAAA,IAAAA,EAAAA,EAAAA,UAAoC,GAA3BQ,KAAKC,MAAMmgE,EAAU,KAAM,GAAzEE,EAAqC9gE,EAAAA,GAArB+gE,EAAqB/gE,EAAAA,GACZA,EAAAA,IAAAA,EAAAA,EAAAA,UAAS,SAADA,GAAjCghE,EAAyBhhE,EAAAA,GAAfihE,EAAejhE,EAAAA,GAuChC,OACI,gBAAC6+D,GAAAA,GAAAA,CAA8BzhE,IAAKA,EAAK+gC,eAAct9B,GAAYmE,GAC/D,gBAACu6D,GAAAA,KACG,gBAACJ,GAAAA,CAAWl+D,QA3BJ,WAChB,IAAMigE,EACe,SAAbF,EACOJ,EAAU,GAEdA,EAAU,EAGrBG,EAA6C,GAA3BvgE,KAAKC,MAAMygE,EAAU,KACvCL,EAAWK,EACf,EAiB8C/iC,eAAc,GAAU,OAAPt9B,EAAO,iBAAgB+C,KAAK,UAC3E,gBAACmkD,GAAiBA,CAACpnD,MAAM,WAAWwN,MAAO,MAAOC,OAAQ,MAAOiwB,KAAMjzB,EAAMC,KAAK+zB,aAExE,UAAb4hC,GACG,gBAAC3B,GAAAA,CACGx+D,OAAQ,GAAU,OAAPA,EAAO,wBAClBI,QAAS,W,OAAMggE,EAAY,O,EAC3Bx9B,KAAMhC,EAAUqB,MAChBl/B,KAAK,UAEJg9D,GAGK,SAAbI,GACG,gBAAC1B,GAAAA,CAAiBnhC,eAAc,GAAU,OAAPt9B,EAAO,kBAAiB,GAAqBsgE,OAAlBL,EAAe,KACzEA,OAvEb,IAsEgG,KAEtF,OADGA,EAAiB,IAGzB,gBAAC1B,GAAAA,CAAWn+D,QAjCJ,WAChB,IAAMigE,EACe,SAAbF,EACOJ,EAAU,GAEdA,EAAU,EAGrBG,EAA6C,GAA3BvgE,KAAKC,MAAMygE,EAAU,KACvCL,EAAWK,EACf,EAuB8C/iC,eAAc,GAAU,OAAPt9B,EAAO,iBAAgB+C,KAAK,UAC3E,gBAACkkD,GAAkBA,CAACnnD,MAAM,OAAOwN,MAAO,MAAOC,OAAQ,MAAOiwB,KAAMjzB,EAAMC,KAAK+zB,cAGzE,UAAb4hC,GACG,gBAACd,GAAAA,CACGr/D,OAAQA,EACRs/D,aA1DK,SAACM,GAClBE,EAAiBF,GACjBC,EAAgBE,GAChBr2C,EAAS,CAAE3mB,KAAM,iBAAkBb,KAAM,CAAE09D,WAAAA,EAAY5P,KAAM+P,IACjE,EAuDgBR,cAAeA,EACfC,eAAgBP,IAAiBc,IAG3B,SAAbI,GACG,gBAACrB,GAAAA,CACG9+D,OAAQA,EACR++D,YAAakB,EACbjB,YA1EI,SAAChP,GACjBgQ,EAAWhQ,GACXkQ,EAA0C,GAAxBvgE,KAAKC,MAAMowD,EAAO,KACpC8P,EAAiB,MACjBM,EAAY,QAChB,EAsEgBnB,aAAcA,IAKlC,IAEJU,GAAwBlpD,YAAc,0BAwCtC,IAAM8pD,GAAyB5hE,EAAAA,GAAO+B,OAAM,MAE7B,SAACyD,G,OAAWA,EAAM+2B,OAAS,IAAM,C,IAE5B,SAAC/2B,G,OAAWA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKo0B,U,GAC1D2C,EAAO3C,WACJr0B,EAAMQ,QAAQC,MACzBT,EAAMQ,QAAQmzB,OAWC0I,EAAAA,EAAAA,IAAO,MAAOr8B,EAAMQ,QAAQC,QACvCw0B,EAAAA,EAAAA,IAAe,MAAOj1B,EAAMQ,QAAQmzB,QAI/CsiC,GAAwB7hE,EAAAA,GAAOgM,KAAI,MAC5Bu3B,EAAAA,EAAAA,GAAQ,MAAO33B,EAAMC,KAAKq0B,kBAGjC4hC,GAA0B9hE,EAAAA,GAAO6B,IAAG,MAEpCkgE,IAAgB/hE,EAAAA,EAAAA,IAAOkmC,GAAPlmC,CAAckmC,MAK9B87B,GAAyB,SAACrxC,EAA6B+E,GACzD,OAAQA,EAAOtxB,MACX,IAAK,OACD,OAAO,SACAusB,GAAAA,CACHqhB,KAAMtc,EAAOnyB,KAAKyuC,KAClBD,IAAKrc,EAAOnyB,KAAKwuC,IACjBxV,QAAQ,IAEhB,IAAK,QACD,OAAO,SACA5L,GAAAA,CACH4L,QAAQ,IAEhB,IAAK,iBACD,OAAO,SACA5L,GAAAA,CACHswC,WAAYvrC,EAAOnyB,KAAK09D,WACxB5P,KAAM37B,EAAOnyB,KAAK8tD,KAClB90B,QAAQ,IAEhB,IAAK,cACD,OAAO,SACA5L,GAAAA,CACHswC,WAAYvrC,EAAOnyB,KAAK09D,WACxB5P,KAAM37B,EAAOnyB,KAAK8tD,OAE1B,QACI,OAAO1gC,EAEnB,EAqBasxC,GAAkB5jC,EAAAA,YAC3B,WAcIzgC,G,QAZIc,MAAAA,OAAAA,IAAQ,OACR2C,EAAAA,EAAAA,OACAmD,EAAAA,EAAAA,KACAmC,EAAAA,EAAAA,SAAAA,EAAAA,EACAlC,YAAAA,OAAAA,IAAc,kBACdy9D,EAAAA,EAAAA,gBACAh9D,EAAAA,EAAAA,SACAP,EAAAA,EAAAA,QAAAA,EAAAA,EACAgS,SAAAA,OAAAA,IAAW,eACXmoC,EAAAA,EAAAA,UACGt5C,EAAAA,GAAAA,EAAAA,CAVH9G,QACA2C,SACAmD,OACAmC,WACAlC,cACAy9D,kBACAh9D,WACAP,UACAgS,WACAmoC,cAKsBzgB,EAAAA,GAAAA,EAAAA,WAAiB2jC,GAAwB,CAC/Df,WAAYviE,EAAQgX,KAAMhX,GAAOuyD,aAAUn+C,EAC3Cu+C,KAAM3yD,EAAQgX,KAAMhX,GAAO2yD,YAASv+C,EACpCovD,gBAAiBA,EACjB3lC,QAAQ,EACRyV,UAAMl/B,EACNi/B,SAAKj/B,IACT,GAPO6d,EAAmB0N,EAAAA,GAAZtT,EAAYsT,EAAAA,GAQlBgzB,EAAqB1gC,EAArB0gC,KAAM4P,EAAetwC,EAAfswC,WAERkB,GAAcxjE,EAAAA,EAAAA,QAAuB,MACrCyjE,GAAYzjE,EAAAA,EAAAA,QAA0B,OAC5C6/D,EAAAA,EAAAA,qBAAwE5gE,GAAK,W,OAAMwkE,EAAUlkE,O,IAE7F,IAIMmkE,EAAQ,W,IACVD,EAAAA,SAAkB,QAAlBA,EAAAA,EAAWlkE,eAAXkkE,IAAAA,GAAAA,EAAoB/6B,QAEpBtc,EAAS,CAAE3mB,KAAM,SACrB,GAMAtG,EAAAA,EAAAA,YAAU,WACN,GAAiB,UAAb6Y,EAGA,OAFAvY,OAAOI,iBAAiB,SAAU6jE,GAE3B,WACHjkE,OAAOG,oBAAoB,SAAU8jE,EACzC,CAER,KAEAvkE,EAAAA,EAAAA,YAAU,WAGN,IAAMwkE,EAAY,IAAIC,OAAO,eAC7B,GAAK7jE,GAAUA,EAAM8jE,MAAMF,GAA3B,CAIA,IAAM7sD,EAAOC,KAAMhX,GACb2yD,EAAO57C,EAAK47C,OACZJ,EAAQx7C,EAAKw7C,QACnBlmC,EAAS,CAAE3mB,KAAM,cAAeb,KAAM,CAAE8tD,KAAMA,EAAM4P,WAAYhQ,IAJhE,MAFIlmC,EAAS,CAAE3mB,KAAM,cAAeb,KAAM,CAAE8tD,UAAMv+C,EAAWmuD,gBAAYnuD,IAO7E,GAAG,CAACpU,KAEJZ,EAAAA,EAAAA,YAAU,WACkB,mBAAb6I,GACPA,EAAS,CAAE0qD,KAAM1gC,EAAM0gC,KAAM4P,WAAYtwC,EAAMswC,YAGvD,GAAG,CAACtwC,EAAM0gC,KAAM1gC,EAAMswC,aA1FJ,Y,IAAGwB,EAAAA,EAAAA,OACzB3kE,EAAAA,EAAAA,YAAU,W,IACG84C,EAAT,SAA2BlzC,GACT,WAAVA,EAAEC,KACF8+D,GAER,EAIA,OAFAnkE,SAASE,iBAAiB,UAAWo4C,GAE9B,WACHt4C,SAASC,oBAAoB,UAAWq4C,EAC5C,CACJ,GAAG,CAAC6rB,GACR,CA8EQC,CAAkB,CAAED,MAnCN,WACVJ,GACJ,IAmCA,IAuCMtD,EAAa,WACf,GAA0B,iBAAfkC,GAA2C,iBAAT5P,EAAmB,CAC5D,IAAM0P,EAAYrrD,OAAQitD,IAAI,QAAS1B,GAAYxtC,OAAO,OAC1D,MAAO,GAAgBkuC,OAAbZ,EAAU,KAAa1P,OAvVlC,IAuV+B,KAAQ,OAALA,EACrC,CACA,OAAO,gBAACwQ,GAAAA,KAAuBp9D,EACnC,CANmB,GAQnB,OACI,gBAACq9D,GAAAA,GAAAA,CAAwBnjC,eAAc,GAAU,OAAPt9B,IAAcmE,GACpD,gBAACkC,QAAAA,GAAAA,GAAAA,CAAMtD,KAAK,UAAcI,EAAO,CAAEA,KAAMA,GAAS,CAAC,IAAI9F,MAAOA,KAC9D,gBAACkjE,GAAAA,CACGjjC,eAAc,GAAU,OAAPt9B,EAAO,iBACxBI,QAtBG,WACX,GAAIkvB,EAAM4L,OACN8lC,QACG,CACH,IAAMO,EAlCc,WACxB,IAAI5wB,EACAD,EAGJ,GAAiB,UAAbp7B,IAAwByrD,aAAAA,EAAAA,EAAWlkE,SAAS,CAC5C,IAAM2kE,EAAeT,EAAUlkE,QAAQw3D,wBAGjCoN,EAAoBD,EAAaE,OADXC,IAC0C5kE,OAAOuL,YACvEs5D,EAAoBJ,EAAa9wB,IAFXixB,IAEuC,EAI/DjxB,GADC+wB,GAAqBG,EAChBJ,EAAa9wB,IANKixB,IAUlBH,EAAaE,OAGvB/wB,EAAO6wB,EAAa7wB,IACxB,CAEA,MAAO,CACHA,KAAMA,EACND,IAAKA,EAEb,CAMiCmxB,GAjFnBlxB,EAkFD4wB,EAAiB5wB,KAlFDD,EAkFO6wB,EAAiB7wB,IAjFjDhnB,EAAS,CAAE3mB,KAAM,OAAQb,KAAM,CAAEyuC,KAAMA,EAAMD,IAAKA,IAkFlD,CAnFS,IAACC,EAAeD,CAoF7B,EAgBY3tC,KAAK,SACLc,SAAUA,EACVP,QAASA,EAETF,YAAaA,EACb83B,OAAQ5L,EAAM4L,OACdyC,aAAY8f,EACZlhD,IAAKwkE,GAEJrD,EAAW,IAAC,gBAAC3C,EAAAA,GAAQA,CAACv9B,KAAMjzB,EAAMC,KAAK+zB,UAAWjxB,MAAO,MAAOC,OAAQ,SAE5E+hB,EAAM4L,QACH,gCACI,gBAACwlC,GAAAA,CACGtgE,QAAS,W,OAAMspB,EAAS,CAAE3mB,KAAM,S,EAChCu6B,eAAc,GAAU,OAAPt9B,EAAO,eAE5B,gBAAC2/D,GAAAA,CACG3/D,OAAQ,GAAU,OAAPA,EAAO,cAClBgwD,KAAMA,GAAQ6Q,EACdjB,WAAYA,EACZl2C,SAAUA,EACV1L,KAAM1I,EACNq7B,KAAMrhB,EAAMqhB,KACZD,IAAKphB,EAAMohB,IACXn0C,IAAKukE,KAM7B,I,+hCAGJF,GAAgBnqD,YAAc,kBChmB9B,I,GAAMkkC,GAAkBh8C,EAAAA,GAAOuE,MAAK,KAEd0I,EAAQC,SACVD,EAAQi3B,QACXjC,EAAUqB,MACRrB,EAAUmE,QACV,SAAC5gC,G,OAAyCA,EAAMy2C,UAAY,MAAQ,K,IAC1E,SAACz2C,G,OAAyCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKm0B,U,IACvF,SAACx6B,G,OAAyCA,EAAMN,SAAW,MAAQ,G,IAG5Ei3C,GAA0Bn8C,EAAAA,GAAO6B,IAAG,KACzBogC,EAAUiC,QACRjC,EAAUqB,OAChB,SAAC99B,G,OACNA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMQ,QAAQmzB,K,GACvCtyB,EAAQq2B,OAKd6/B,GAAuB9kC,EAAAA,YAChC,WAAkFzgC,G,IAA/EsH,EAAAA,EAAAA,SAAUP,EAAAA,EAAAA,QAASJ,EAAAA,EAAAA,MAAOK,EAAAA,EAAAA,kBAAmBq3C,EAAAA,EAAAA,UAAW6C,EAAAA,EAAAA,UAAct5C,EAAAA,GAAAA,EAAAA,CAAtEN,WAAUP,UAASJ,QAAOK,oBAAmBq3C,YAAW6C,cACvD,OACI,gCACI,gBAAC9C,GAAeA,CAAC92C,SAAUA,EAAUP,QAASA,EAASs3C,UAAWA,GAC7D13C,GAEL,gBAAC09D,G,uUAAeA,CAAAA,CACZ/8D,SAAUA,EACVP,QAASA,EACTm6C,UAAWA,QAAAA,EAAav6C,EACxB3G,IAAKA,GACD4H,IAEPZ,GACG,gBAACu3C,GAAuBA,CAACx3C,QAASA,GAAUC,GAI5D,I,o5EAEJu+D,GAAqBrrD,YAAc,uB,SC1CvBsrD,G,qCAAAA,KAAAA,GAAAA,CAAAA,IAiBZ,IAAMC,GAAUrjE,EAAAA,GAAO0H,MAAK,MACJ,SAAClC,G,OACjBA,EAAMN,UAAW+iC,EAAAA,EAAAA,IAAO,MAAOr8B,EAAMQ,QAAQC,OAAST,EAAMQ,QAAQC,K,IAC/D,SAAC7G,G,OACNA,EAAMN,UAAW27B,EAAAA,EAAAA,IAAe,MAAOj1B,EAAMQ,QAAQmzB,OAAS3zB,EAAMQ,QAAQmzB,K,IACnE,SAAC/5B,G,OAAiCA,EAAM2sC,SAAW,GAAkB,OAAf3sC,EAAM2sC,SAAS,MAAMlQ,EAAUqB,K,IACnF,SAAC99B,G,OAAiCA,EAAM0sC,WAAa,GAAoB,OAAjB1sC,EAAM0sC,WAAW,MAAMjQ,EAAUmE,M,GAC7Fn5B,EAAQq2B,OAGH,SAAC99B,G,OAAiCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKo0B,U,GAChF2C,EAAOC,SAOtBygC,GAAatjE,EAAAA,GAAO6B,IAAG,MAKvBg6C,GAAU77C,EAAAA,GAAO6B,IAAG,MAUpB0hE,GAAgBvjE,EAAAA,GAAO6B,IAAG,MAI1B2hE,GAAiBxjE,EAAAA,GAAO6B,IAAG,MAO3Bg8C,GAAe79C,EAAAA,GAAOgM,KAAI,MACf,SAACxG,G,OAAiCA,EAAM2sC,SAAW,GAAkB,OAAf3sC,EAAM2sC,SAAS,MAAMlQ,EAAUqB,K,IACnF,SAAC99B,G,OAAiCA,EAAM0sC,WAAa,GAAoB,OAAjB1sC,EAAM0sC,WAAW,MAAMjQ,EAAUmE,M,IACpF,SAAC5gC,G,OACjBA,EAAMN,UAAW+iC,EAAAA,EAAAA,IAAO,MAAOr8B,EAAMQ,QAAQC,OAAST,EAAMQ,QAAQC,K,IAC/D,SAAC7G,G,OACNA,EAAMN,UAAW27B,EAAAA,EAAAA,IAAe,MAAOj1B,EAAMQ,QAAQmzB,OAAS3zB,EAAMQ,QAAQmzB,K,GACrEtyB,EAAQq2B,OACH,SAAC99B,G,OAAiCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKo0B,U,GAChF2C,EAAOC,SAElB,SAACr9B,G,OAAiCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKo0B,U,IAEjF,SAACz6B,G,OAAiCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKo0B,U,IAI7E,SAACz6B,G,OAAiCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKo0B,U,GAInEr0B,EAAMk1B,SAASE,uBAK9ByiC,GAAwBplC,EAAAA,YACjC,WAgBIzgC,G,QAdI8lE,aAAAA,OAAAA,IAAe,KAAE,MACjBC,mBAAAA,OAAAA,IAAqB,+BACrB7kB,UAAAA,OAAAA,IAAY,6BACZ8kB,UAAAA,OAAAA,IAAY,OACZC,EAAAA,EAAAA,aACAC,EAAAA,EAAAA,iBACAziE,EAAAA,EAAAA,OACA6D,EAAAA,EAAAA,SACAP,EAAAA,EAAAA,QACAH,EAAAA,EAAAA,KACAE,EAAAA,EAAAA,SACAytC,EAAAA,EAAAA,SACAD,EAAAA,EAAAA,WAIkD7T,EAAAA,GAAAA,EAAAA,UAAe,MAA9D0lC,EAA+C1lC,EAAAA,GAA1B2lC,EAA0B3lC,EAAAA,GAChBA,EAAAA,GAAAA,EAAAA,SAAeslC,GAAAA,GAA9Cl/D,EAA+B45B,EAAAA,GAAlB4lC,EAAkB5lC,EAAAA,GACIA,EAAAA,GAAAA,EAAAA,UAAgB,MAAnD6lC,EAAmC7lC,EAAAA,GAApB8lC,EAAoB9lC,EAAAA,GACpC+lC,EAAa/lC,EAAAA,OAA6B,MAC1CgmC,EAAYhmC,EAAAA,OAA6B,MAGzC8+B,EAAeuG,EAAaz4C,QAAO,SAACP,G,OACtCk5C,GAAYl5C,EAAKxX,cAAcpU,SAAS8kE,EAAU1wD,c,IAEhDoxD,EAAsBnH,EAAat9D,MAAM,EAAG,GAElDw+B,EAAAA,WAAgB,WAGZ,OAFA//B,SAASE,iBAAiB,YAAa+lE,GAEhC,WACHjmE,SAASC,oBAAoB,YAAagmE,EAC9C,CACJ,IAEAlmC,EAAAA,WAAgB,WACPgmC,EAAUnmE,SAEfmmE,EAAUnmE,QAAQmpC,OACtB,GAAG,CAAC68B,IAEJ,IAAMM,EAAmB,SAAClgE,GACtB,OAAOA,EAAGhB,MACd,EAEMihE,EAAW,SAAC7gE,GACd,IAAQxF,EAAkBkmE,EAAlBlmE,QACJ+0C,IAASA,EAAK90C,SAASuF,EAAEzF,UACzB+lE,GAAuB,GACvBC,EAAeN,GACfQ,GAAkB,GAE1B,EAyBMM,EAAc,SAAC/lE,GACjBA,EAAQ8lE,EAAiB9lE,GACzB,IAAMgmE,EAAQhB,EAAavwD,QAAQzU,IACpB,IAAXgmE,GAEAhB,EAAalQ,OAAOkR,EAAO,GAEjB,KAAVhmE,GAAgBA,IAAUilE,GAC1BG,EAAiBplE,EAAO,SAEhC,EAkDMimE,EAAc,SAACjmE,GACbA,IAAUilE,GACVE,EAAaW,EAAiB9lE,IAElCslE,GAAuB,GACvBC,EAAeN,GACfc,EAAY/lE,GACZylE,GAAkB,EACtB,EAEA,OACI,gBAACb,GAAAA,CAAW1lE,IAAKA,EAAK+gC,eAAc,GAAU,OAAPt9B,IACnC,gBAACw6C,GAAOA,CAACj+C,IAAKwmE,EAAYp/D,UAzCR,SAAChH,GACvB,OAAQA,EAAM2F,KACV,IAAK,WAzCU,SAACD,GACpBA,EAAEkhE,iBACF,IAAMC,EAAwC,IAAlBX,IAA0C,IAAnBA,EAC7CY,EAAgB9jE,KAAK69C,IAAIylB,EAAoB/kE,OAAS,EAnD1C,GAqDlB4kE,EADiBU,EAAsBC,EAAgBZ,EAAgB,EAE3E,CAoCYa,CAAe/mE,GACf,MAEJ,IAAK,aAvDM,SAAC0F,GAChBA,EAAEkhE,iBACF,IAAMI,EACFd,IAAkBI,EAAoB/kE,OAAS,GAzCjC,IA0Cd2kE,IACmB,IAAnBA,EAEJC,EADiBa,EAAqB,EAAId,EAAgB,EAE9D,CAgDYe,CAAWjnE,GACX,MAEJ,IAAK,QACD+lE,EACMM,EAAUnmE,QACNymE,EAAYlgE,GACZggE,EAAYb,GAChBI,GAAuB,GAC7BD,IAAuBt/D,GAAek/D,GAAqBK,GAAuB,IAClF,MAEJ,IAAK,OACDD,GAA2BC,GAAuB,GAClD,MAEJ,IAAK,SACDD,IAAuBC,GAAuB,GAAQC,EAAeN,IAGjF,GAeY,gBAACN,GAAAA,CACG5+D,YAAaA,EACbhD,QAAS,W,OAAMuiE,EAA+C,IAAxBN,EAAankE,SAAiBwkE,E,EACpEp9D,SAAU,SAACjD,G,OAnGXhF,EAmGoDgF,EAAEzF,OAAOS,MAlGzEmlE,EAAanlE,QACbslE,GAAuB,GAFZ,IAACtlE,C,EAoGAA,MAAOklE,EACP7+D,aAAc,MACdi6B,aAAY8f,EACZ3M,SAAUA,EACVD,WAAYA,EACZhtC,SAAUA,EACVP,QAASA,EACTH,KAAMA,EACNE,SAAUA,IAEd,gBAAC6+D,GAAAA,KACG,gBAACC,GAAAA,KACIO,EACKO,EAAoBp8D,KAAI,SAACwiB,EAAc6hB,G,OACnC,gBAACsR,GAAYA,CACTjgD,IAAK2uC,IAAU23B,EAAgBG,EAAY,W,MAAM,E,EACjD1gE,IAAK4oC,EACL24B,aAAY34B,EACZ9qC,QAAS,WACJyD,EAA+B++D,EAAeN,GAAnCgB,EAAYj6C,EAC5B,EACAy6C,YAAa,WACRjgE,EAEK++D,EAAeN,IADdQ,EAAiB53B,GAAQ03B,EAAeO,EAAiB95C,IAEpE,EACA06C,WAAY,WACRnB,EAAeN,GACfQ,GAAkB,EACtB,EACAn/D,UAAW,SAACtB,G,OA/Ff,SAAC1F,EAAY0sB,GACxC,IAAM26C,EAAY3B,EAAavwD,QAAQuX,GAEnC1sB,EAAMsnE,UAA0B,WAAdtnE,EAAM2F,MACL,IAAf0hE,IACAvB,EAAiBJ,EAAa2B,GAAY,UAC1CpB,EAAeK,EAAoBJ,IAC/B/G,EAAa59D,OAAS,GAAK2kE,GAC3BC,EAAiBD,EAAgB,GAGT,IAAxBR,EAAankE,SAA+B,IAAf8lE,IAC7BpB,EAAeN,GACfQ,GAAkB,IAIlC,CA8EyDoB,CAAuB7hE,EAAGgnB,E,EACjDwe,SAAU,EACVs8B,QAAS,WACJtgE,EAEK++D,EAAeN,IADdQ,EAAiB53B,GAAQ03B,EAAeO,EAAiB95C,IAEpE,EACAxlB,SAAUA,EACVP,QAASA,EACTH,KAAMA,EACN2tC,SAAUA,EACVD,WAAYA,GAEXsyB,EAAiB95C,G,IAG1B,MAM9B,I,4+CAGJ+4C,GAAsB3rD,YAAc,wBChSpC,IAAM+jC,GAAU77C,EAAAA,GAAO6B,IAAG,MAOpB4jE,GAAazlE,EAAAA,GAAO6B,IAAG,MAIvBm6C,GAAkBh8C,EAAAA,GAAOgM,KAAI,MAElB,SAACxG,G,OAAyCA,EAAM2sC,SAAW,GAAkB,OAAf3sC,EAAM2sC,SAAS,MAAMlQ,EAAUqB,K,IAC3F,SAAC99B,G,OACZA,EAAM0sC,WAAa,GAAoB,OAAjB1sC,EAAM0sC,WAAW,MAAMjQ,EAAUmE,M,IAC5C,SAAC5gC,G,OAAyCA,EAAMy2C,UAAY,MAAQ,K,IAC1E,SAACz2C,G,OAAyCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKm0B,U,IACvF,SAACx6B,G,OAAyCA,EAAMN,SAAW,MAAQ,G,IAGrEwgE,GAAwB,Y,IACjC5B,EAAAA,EAAAA,iBAAAA,EAAAA,EACAJ,aAAAA,OAAAA,IAAe,KAAE,MACjBiC,WAAAA,OAAAA,IAAa,iBACbhC,mBAAAA,OAAAA,IAAqB,+BACrB7kB,UAAAA,OAAAA,IAAY,yBACZv6C,EAAAA,EAAAA,MACAlD,EAAAA,EAAAA,OACA8D,EAAAA,EAAAA,MACAR,EAAAA,EAAAA,QACAO,EAAAA,EAAAA,SACA+2C,EAAAA,EAAAA,UACAz3C,EAAAA,EAAAA,KAAAA,EAAAA,EACAE,SAAAA,OAAAA,IAAW,KACXwtC,EAAAA,EAAAA,WACAC,EAAAA,EAAAA,SACAyzB,EAAAA,EAAAA,sBAE0BvnC,EAAAA,GAAAA,EAAAA,SAAe,OAAlC3/B,EAAmB2/B,EAAAA,GAAZwnC,EAAYxnC,EAAAA,GAE1B,OACI,gBAACwd,GAAOA,CAACld,eAAc,GAAU,OAAPt9B,IACrBkD,EACG,gBAACy3C,GAAeA,CACZr3C,QAASA,EACTO,SAAUA,EACV+2C,UAAWA,EACX/J,WAAYA,EACZC,SAAUA,GAET5tC,GAGL,GAEJ,gBAACk/D,GAAqBA,CAClBC,aAAcA,EACdC,mBAAoBA,EACpBC,UAAWllE,EACXmlE,aAAcgC,EACd/B,iBAAkBA,EAClB9kC,aAAY8f,EACZz9C,OAAQ,GAAU,OAAPA,EAAO,WAClB6D,SAAUA,EACVP,QAASA,EACTH,KAAMA,EACNE,SAAUA,EACVwtC,WAAYA,EACZC,SAAUA,IAEd,gBAACszB,GAAAA,KACG,gBAACvjE,EAAMA,CACHb,OAAQskE,EACRlkE,QAAS,W,OAAMqiE,EAAiBplE,EAAO0kE,GAAe0C,O,EACtD5gE,SAAU0gE,EAAwBA,EAAsBlnE,IAAUA,EAClEulC,KAAM,GAAY,OAATkO,EAAS,MAClBhtC,MAAOA,GAENwgE,IAKrB,EAEAD,GAAsB5tD,YAAc,wB,ywBC/GpC,IAAMisB,GAAY,OAELgiC,IAA8B/lE,EAAAA,EAAAA,IAAOgmE,EAAAA,GAAPhmE,CAA4BgmE,KAEzDjiC,GACDA,IAGAkiC,IAA4BjmE,EAAAA,EAAAA,IAAOkmE,EAAAA,GAAPlmE,CAA0BkmE,KAErDniC,GACDA,IAGAoiC,IAA8BnmE,EAAAA,EAAAA,IAAOomE,EAAAA,GAAPpmE,CAA4BomE,KAEzDriC,GACDA,IAGAsiC,IAAwBrmE,EAAAA,EAAAA,IAAOsmE,EAAAA,GAAPtmE,CAAsBsmE,KAE7CviC,GACDA,IAGAwiC,IAA4BvmE,EAAAA,EAAAA,IAAOwmE,EAAAA,GAAPxmE,CAA0BwmE,KAErDziC,GACDA,I,u1ECtBbruB,KAAAA,OAAa+wD,MAqBb,IAAMC,GAAoB,CACtB,CACIpiE,GAAI,eACJE,KAAM,eACNmiE,OAAQ,UACRC,KAAM,gBAACb,GAA2BA,OAEtC,CACIzhE,GAAI,YACJE,KAAM,YACNmiE,OAAQ,UACRC,KAAM,gBAACX,GAAyBA,OAEpC,CACI3hE,GAAI,cACJE,KAAM,eACNmiE,OAAQ,UACRC,KAAM,gBAACT,GAA2BA,OAEtC,CACI7hE,GAAI,QACJE,KAAM,QACNmiE,OAAQ,wCACRC,KAAM,gBAACP,GAAqBA,OAEhC,CACI/hE,GAAI,YACJE,KAAM,aACNmiE,OAAQ,UACRC,KAAM,gBAACL,GAAyBA,QAIlCM,GAAe,UACfC,GAAS9mE,EAAAA,GAAO6B,IAAG,KAMRogC,EAAUiC,QACRjC,EAAUiC,QAEhB2iC,IAGPE,GAAc/mE,EAAAA,GAAO6B,IAAG,KACXoL,EAAQq2B,OACd,SAAC99B,G,OAAUA,EAAMmhE,QAAU,S,IAKlCK,GAAUhnE,EAAAA,GAAO6B,IAAG,KAGNoL,EAAQm5B,OACTn5B,EAAQm5B,OACHygC,GACXA,IAGPI,GAAsB,UACtBC,GAAQlnE,EAAAA,GAAO6B,IAAG,KAGPogC,EAAU+C,MAKdiiC,IAGPE,GAAqBnnE,EAAAA,GAAO6B,IAAG,MAM/Bo/C,GAAcjhD,EAAAA,GAAOuO,IAAG,MAMxByyC,IAAiBhhD,EAAAA,EAAAA,IAAOihD,GAAPjhD,CAAkBihD,MAInCmmB,IAAiBpnE,EAAAA,EAAAA,IAAOihD,GAAPjhD,CAAkBihD,MAInComB,GAAqBrnE,EAAAA,GAAO6B,IAAG,MAO/BylE,GAAiBtnE,EAAAA,GAAOuO,IAAG,MAS3Bg5D,GAAcvnE,EAAAA,GAAO+B,OAAM,MAe3BylE,GAAgBxnE,EAAAA,GAAOwG,EAAC,KAIZyG,EAAQm5B,OACTnE,EAAUiC,SAMdujC,GAAU,Y,IAAGlkE,EAAAA,EAAAA,KAAMmkE,EAAAA,EAAAA,UAAWC,EAAAA,EAAAA,gBACjCC,EAAkBlB,GAAkB9Y,MAAK,SAAClsD,G,MAA6B,iBAAhBA,EAAS4C,E,IAChE+kB,EAAUq9C,GAAkB9Y,MAAK,SAAClsD,G,OAAaA,EAAS4C,KAAOf,EAAK8lB,O,KAAYu+C,EAEhFC,EAAgBtkE,EAAKukE,iBAAmBvkE,EAAKwkE,eAO7CC,EAAQN,GAAankE,EAAKukE,iBAC5B,gBAACP,GAAAA,CAAY9lE,QANC,SAACiC,G,IAECH,EAA8BA,EAD9CG,EAAEkhE,iBACF+C,EAA8B,QAAdpkE,EAAAA,EAAK0kE,iBAAL1kE,IAAAA,OAAAA,EAAAA,EAAgBe,GAA4B,QAAdf,EAAAA,EAAK0kE,iBAAL1kE,IAAAA,OAAAA,EAAAA,EAAgB2tB,IAClE,GAIQ,gBAACk2C,GAAAA,CAAe54D,IAAKq5D,aAAAA,EAAAA,EAAe32C,IAAKziB,IAAKo5D,aAAAA,EAAAA,EAAep5D,IAAKy5D,iBAAe,WACjF,gBAACb,GAAAA,KACG,gBAACC,GAAAA,CACG94D,IAAI,qnGACJlJ,QAAQ,OACRmJ,IAAI,OAMd05D,EAAQT,GAAankE,EAAKwkE,gBAC5B,gBAAC/mB,GAAcA,CAACxyC,IAAKq5D,aAAAA,EAAAA,EAAe32C,IAAKziB,IAAKo5D,aAAAA,EAAAA,EAAep5D,IAAKy5D,iBAAe,WAG/EE,EAAYJ,GAASG,EAE3B,OACI,gBAACE,UAAAA,KACG,gBAACvB,GAAMA,KACFz9C,aAAAA,EAAAA,EAASu9C,KACV,gBAACG,GAAAA,CAAYJ,OAAQt9C,aAAAA,EAAAA,EAASs9C,QAAQ,IAAE,GAAiB,OAAdt9C,aAAAA,EAAAA,EAAS7kB,MAAO,KAC3D,gBAACwiE,GAAAA,MACA,GAAsD,OAAnDtxD,KAAAA,IAAUnS,EAAK+kE,aAAa70C,OAAO,kBAE3C,gBAACyzC,GAAAA,KAAO3jE,EAAKiB,MACZqjE,GAAiB,gBAACV,GAAAA,KAAmB,IAAEiB,EAAU,KAClD,gBAACzmE,GAAIA,CAACwwC,SAAUlQ,EAAUqB,MAAOQ,MAAOmjC,GAAqBp1B,aAAc,KACtEtuC,EAAKglE,aAEThlE,EAAKilE,eACF,gBAAChB,GAAAA,CAAc9gE,KAAMnD,EAAKilE,cAAevqE,OAAQ,UAAU,cAM3E,E,yNC5NO,I,GAAMwqE,IAAyBzoE,EAAAA,EAAAA,IAAO0oE,EAAAA,EAAP1oE,CAAuB0oE,M,s8FCsEjDC,G,2BAAAA,KAAAA,GAAAA,CAAAA,IAIZ,I,MAAMC,GAAqB5oE,EAAAA,GAAO6B,IAAG,MAO/BgnE,GAAmB7oE,EAAAA,GAAO6B,IAAG,KAEpBoL,EAAQ+3B,MACFpC,EAAOC,SAUtBokC,GAAsB,UACtB3lB,GAAOthD,EAAAA,GAAOwG,EAAC,KAOHyG,EAAQw3B,SACTxC,EAAU+C,MAGdiiC,GAKeA,IAmBtB6B,GAAqB9oE,EAAAA,GAAO6B,IAAG,MAK/BknE,GAAqE,Y,IACvEC,EAAAA,EAAAA,YACAC,EAAAA,EAAAA,SACA/3C,EAAAA,EAAAA,IACAg4C,EAAAA,EAAAA,eACAxB,EAAAA,EAAAA,UACAyB,EAAAA,EAAAA,aACG3jE,EAAAA,GAAAA,EAAAA,CANHwjE,cACAC,WACA/3C,MACAg4C,iBACAxB,YACAyB,iBAGMC,EAAiBH,EAASh+C,QAAO,SAACzkB,G,OAAOA,EAAEu3C,aAAev3C,EAAE6iE,O,IAC5DC,EAAiBN,GAAeA,EAAcI,EAAe7pE,OAAS6pE,EAAevpE,MAAM,EAAGmpE,GAAeI,EAE7GzB,EAAkB,W,yMAAA,WAAOrjE,EAAY4sB,G,mDACvC,MAA4B,mBAAjBi4C,EACP,C,GAGJ,C,EAAMA,EAAqF,CACvF/kE,KAAM,aACNuxB,QAAS,CACLrxB,GAAIA,EACJilE,SAAUr4C,M,cAJlB,S,OAOJ,I,gBAZ+B5sB,EAAY4sB,G,gCAAnB,GAcxB,OACI,gBAAC03C,GAAuBpjE,EACnB8jE,EAAe/pE,OAAS,EACrB+pE,EAAephE,KAAI,SAACmgE,G,OAChB,gBAACQ,GAAAA,CAAiBllE,IAAK0kE,EAAQ/jE,IAC3B,gBAACmjE,GAAOA,CAAClkE,KAAM8kE,EAASX,UAAWA,EAAWC,gBAAiBA,I,IAIvE,gBAACmB,GAAAA,KACG,gBAACL,GAAsBA,OAG9Bv3C,GAAOg4C,GACJ,gBAAC5nB,GAAAA,CAAK56C,KAAMwqB,EAAKjzB,OAAQ,UACpBirE,GAKrB,E,i4IChGYM,GACgF,kBAEH,mB,EAH7EA,KAAAA,GAAAA,CAAAA,I,SAOAC,G,uCAAAA,KAAAA,GAAAA,CAAAA,IAKZ,IAAMC,GAAiB1pE,EAAAA,GAAO6B,IAAG,MAQhB,SAAC2D,G,MAA6B,aAAlBA,EAAMmkE,QAAyB,OAAS,M,IAClD,SAACnkE,G,MAAgC,cAArBA,EAAMk6C,WAA6B,MAAQ,K,IAGpE+c,IAAqBz8D,EAAAA,EAAAA,IAAOsoC,GAAPtoC,CAAmBsoC,MAIxCshC,GAAwB5pE,EAAAA,GAAO4pC,GAAE,MAIjC,SAACpkC,G,OAAWA,EAAM+3D,UAAa,oBAAsB,mB,IAIrDsM,GAAoB7pE,EAAAA,GAAOwpC,GAAE,MAK7BsgC,GAA2B9pE,EAAAA,GAAOgM,KAAI,MAEzB,SAACxG,G,MAA6B,aAAlBA,EAAMmkE,QAAyB,OAAS,K,IACjD,SAACnkE,G,MAA6B,aAAlBA,EAAMmkE,QAAyB,OAAS,K,IACtD,SAACnkE,G,MAA6B,aAAlBA,EAAMmkE,QAAyB,OAAS,M,IACnD,SAACnkE,G,MAA6B,aAAlBA,EAAMmkE,QAAyB,OAAS,M,GAG5D/9D,EAAMC,KAAK+zB,WAGlBmqC,GAA+B/pE,EAAAA,GAAO4pC,GAAE,MAIxCiU,GAAe79C,EAAAA,GAAOwpC,GAAE,MAMxBwgC,GAAgBhqE,EAAAA,GAAO6B,IAAG,MAU1BooE,GAAoBjqE,EAAAA,GAAOuE,MAAK,MAMhC2lE,GAAyBlqE,EAAAA,GAAO6B,IAAG,MAItB,SAAC2D,G,MAA6B,aAAlBA,EAAMmkE,QAAyB,OAAS,K,IACjD,SAACnkE,G,MAA6B,aAAlBA,EAAMmkE,QAAyB,OAAS,K,IACtD,SAACnkE,G,MAA6B,aAAlBA,EAAMmkE,QAAyB,OAAS,M,IACnD,SAACnkE,G,MAA6B,aAAlBA,EAAMmkE,QAAyB,OAAS,M,IAC3D,SAACnkE,G,OAAWA,EAAM2kE,QAAU,cAAgB,S,IAE7C,SAAC3kE,G,OAAWA,EAAM2kE,QAAUv+D,EAAMk1B,SAASK,8BAAgC,S,IAClF,SAAC37B,G,MAC2B,UAA1BA,EAAM4kE,kBACL5kE,EAAM2kE,SACN,oE,IAMH,SAAC3kE,G,OACCA,EAAMg3D,YACN,wKAO+B,OAAjBh3D,EAAMg3D,WAAW,W,IAIjC7E,GAAkB33D,EAAAA,GAAO6B,IAAG,MACf,SAAC2D,G,MAA6B,aAAlBA,EAAMmkE,QAAyB,OAAS,K,IACjD,SAACnkE,G,MAA6B,aAAlBA,EAAMmkE,QAAyB,OAAS,K,IACtD,SAACnkE,G,MAA6B,aAAlBA,EAAMmkE,QAAyB,OAAS,M,IACnD,SAACnkE,G,MAA6B,aAAlBA,EAAMmkE,QAAyB,OAAS,M,IAWnEU,GAAwBrqE,EAAAA,GAAO6B,IAAG,MAMlCyoE,GAAwBtqE,EAAAA,GAAOgM,KAAI,MAInCu+D,GAAoBvqE,EAAAA,GAAO0H,MAAK,MAOhC,SAAClC,G,MAC2B,aAA1BA,EAAM4kE,iBACN,yBACqC,OAAvBF,GAAuB,wD,GAKhBA,IAMvBM,GAAoBxqE,EAAAA,GAAO4pC,GAAE,MAW7B6gC,GAAgBzqE,EAAAA,GAAOwpC,GAAE,MAMzB,SAAChkC,G,OAAWA,EAAMklE,aAAellE,EAAMmlE,iBAAmB,kD,IAC1D,SAACnlE,G,OAAUA,EAAMolE,YAAc,2D,IAC/B,SAACplE,G,OAAUA,EAAMqlE,UAAY,+D,IAOnC,SAASC,GAAc70C,GACnB,YAA4B,IAAdA,EAAI1xB,OAAyB2oB,MAAM69C,QAAQ90C,EAAIjrB,QACjE,CAEA,IAAMggE,GAAY,SAAC/0C,GACf,MAAqB,aAAdA,aAAAA,EAAAA,EAAK7xB,KAChB,EAGM6mE,GAAO,WAAO,EAadC,GAAY,Y,IACd/uC,EAAAA,EAAAA,OACA96B,EAAAA,EAAAA,OACA+oE,EAAAA,EAAAA,gBACA9vB,EAAAA,EAAAA,OACA6wB,EAAAA,EAAAA,SACAxB,EAAAA,EAAAA,QACAyB,EAAAA,EAAAA,iBACAC,EAAAA,EAAAA,iBACAC,EAAAA,EAAAA,aAEA,OACI,gBAACztB,GAAYA,CACT0tB,YAAaF,EACb1sC,eAAc,GAAiB2N,OAAdjrC,EAAO,SAAkD,QAA3CirC,EAAAA,GAAAA,GAAanQ,EAAO96B,QAAU86B,EAAOr0B,QAEpE,gBAACmiE,GAAAA,CACGxjE,UAAW,uBACX+kE,YAAaJ,EACbzsC,eAAc,GAAoB2N,OAAjBjrC,EAAO,YAAoC,QAA1BirC,EAAAA,GAAAA,GAAanQ,EAAOr0B,QAEtD,gBAACyiE,GAAAA,GAAAA,CACG5rC,eAAc,GAAoB2N,OAAjBjrC,EAAO,YAAoC,QAA1BirC,EAAAA,GAAAA,GAAanQ,EAAOr0B,OACtD1D,KAAK,QACLI,KAAM2mE,EACNzsE,MAAOy9B,EAAOz9B,MACd0rE,gBAAiBA,EACjB3+D,QAAS6uC,EACT74C,QAAS06B,EAAOj3B,cAAW4N,EAAYw4D,EACvC5sB,UAAU,EACV15C,UAAW,SAACtB,G,OAAMA,EAAEkhE,gB,GACfzoC,EAAOj3B,UAAY,CAAEA,UAAU,KAExC,gBAACglE,GAAAA,CACG1N,WAAYrgC,EAAOqgC,WACnB4N,gBAAiBA,EACjBD,QAAShuC,EAAOj3B,SAChBykE,QAASA,KAENxtC,EAAOyqC,MAAQ,gBAACyD,GAAAA,KAAuBluC,EAAOyqC,MACjD,gBAAC0D,GAAAA,KAAuBnuC,EAAOr0B,QAKnD,EAeM2jE,GAAkB,Y,IACpB/gD,EAAAA,EAAAA,KACA6hB,EAAAA,EAAAA,MACAlrC,EAAAA,EAAAA,OACA+oE,EAAAA,EAAAA,gBACAsB,EAAAA,EAAAA,WACAP,EAAAA,EAAAA,SACAxB,EAAAA,EAAAA,QACAgC,EAAAA,EAAAA,gBACAC,EAAAA,EAAAA,gBACAC,EAAAA,EAAAA,mBAEA,OACI,gBAAChC,GAAAA,CAAkBlmE,IAAK,GAAiB4oC,OAAd7hB,EAAKnmB,MAAM,KAAS,OAANgoC,IACrC,gBAACu9B,GAAAA,CAAyBrjE,UAAW,+BAAgCkjE,QAASA,GACzEj/C,EAAKnmB,OAETmmB,EAAK1f,SACF,gBAAC++D,GAAAA,KACIr/C,EAAK1f,QAAQ9C,KAAI,SAACi0B,G,OACf,gBAAC+uC,GAAAA,CACGvnE,IAAKw4B,EAAOz9B,MACZy9B,OAAQA,EACR96B,OAAQA,EACR+oE,gBAAiBA,EACjB9vB,OAAQne,EAAOz9B,QAAUgtE,EACzBP,SAAUA,EACVxB,QAASA,EACTyB,iBAAkBO,EAClBN,iBAAkBO,EAClBN,aAAcO,G,KAO1C,EAEMC,GAAc,Y,IAChBphD,EAAAA,EAAAA,KACA6hB,EAAAA,EAAAA,MACAvhC,EAAAA,EAAAA,QACA3J,EAAAA,EAAAA,OACA+oE,EAAAA,EAAAA,gBACAsB,EAAAA,EAAAA,WACAP,EAAAA,EAAAA,SACAxB,EAAAA,EAAAA,QACAgC,EAAAA,EAAAA,gBACAC,EAAAA,EAAAA,gBACAC,EAAAA,EAAAA,mBAEA,OACI,gBAACpB,GAAAA,CACGC,YAAuB,IAAVn+B,GAAkC,IAAnBvhC,EAAQzL,OACpCorE,eAAgBK,GAAUhgE,EAAQuhC,EAAQ,IAC1Cq+B,WAAYr+B,IAAUvhC,EAAQzL,OAAS,GAAwB,IAAnByL,EAAQzL,OACpDsrE,SAA6B,IAAnB7/D,EAAQzL,QAElB,gBAACirE,GAAAA,KACI9/C,EAAK1f,QAAQ9C,KAAI,SAACi0B,EAAQ4vC,GACvB,OAAIjB,GAAc3uC,GAEV,gBAACsvC,GAAAA,CACG9nE,IAAKw4B,EAAO53B,MAAQ,IAAMwnE,EAC1BrhD,KAAMyR,EACNoQ,MAAOw/B,EACP1qE,OAAQA,EACR+oE,gBAAiBA,EACjBsB,WAAYA,EACZP,SAAUA,EACVxB,QAASA,EACTiC,gBAAiBA,EACjBD,gBAAiBA,EACjBE,mBAAoBA,IAI5B1vC,EAAOz9B,MAEH,gBAACwsE,GAAAA,CACGvnE,IAAKw4B,EAAOz9B,MACZy9B,OAAQA,EACR96B,OAAQA,EACR+oE,gBAAiBA,EACjB9vB,OAAQne,EAAOz9B,QAAUgtE,EACzBP,SAAUA,EACVxB,QAASA,EACTyB,iBAAkBO,EAClBN,iBAAkBO,EAClBN,aAAcO,SAZ1B,CAgBJ,KAIhB,EAyBMG,GAAc,Y,IAChB3qE,EAAAA,EAAAA,OACA2J,EAAAA,EAAAA,QACAo/D,EAAAA,EAAAA,gBACAuB,EAAAA,EAAAA,gBACAE,EAAAA,EAAAA,mBACAH,EAAAA,EAAAA,WACAE,EAAAA,EAAAA,gBACAT,EAAAA,EAAAA,SACAxB,EAAAA,EAAAA,QAEA,OACI,gCACK3+D,EAAQ9C,KAAI,SAACwiB,EAAM2tB,GAChB,OAAI2yB,GAAUtgD,GAEN,gBAACohD,GAAAA,CACGnoE,IAAK+mB,EAAKtmB,KAAO,IAAMi0C,EACvB3tB,KAAMA,EACN6hB,MAAO8L,EACPrtC,QAASA,EACT3J,OAAQA,EACR+oE,gBAAiBA,EACjBsB,WAAYA,EACZP,SAAUA,EACVxB,QAASA,EACTiC,gBAAiBA,EACjBD,gBAAiBA,EACjBE,mBAAoBA,IAI5Bf,GAAcpgD,GAEV,gBAAC+gD,GAAAA,CACG9nE,IAAK+mB,EAAKnmB,MAAQ,IAAM8zC,EACxB3tB,KAAMA,EACN6hB,MAAO8L,EACPh3C,OAAQA,EACR+oE,gBAAiBA,EACjBsB,WAAYA,EACZP,SAAUA,EACVxB,QAASA,EACTiC,gBAAiBA,EACjBD,gBAAiBA,EACjBE,mBAAoBA,IAI5BnhD,EAAKhsB,MAED,gBAACwsE,GAAAA,CACGvnE,IAAK+mB,EAAKhsB,MACVy9B,OAAQzR,EACRrpB,OAAQA,EACR+oE,gBAAiBA,EACjB9vB,OAAQ5vB,EAAKhsB,QAAUgtE,EACvBP,SAAUA,EACVxB,QAASA,EACTyB,iBAAkBO,EAClBN,iBAAkBO,EAClBN,aAAcO,SAZ1B,CAgBJ,IAGZ,EAoCaI,GAAW5tC,EAAAA,YACpB,WA0BIzgC,G,QAxBI0G,GAAAA,OAAAA,IAAK,oBACL4nE,SAAAA,OAAAA,IAAW,EAAXA,SAAAA,EACAC,EAAAA,EAAAA,cACAT,EAAAA,EAAAA,WACAU,EAAAA,EAAAA,cACAphE,EAAAA,EAAAA,QAAAA,EAAAA,EACAu7B,KAAAA,OAAAA,IAAO,EAAAjoC,SAASkoC,KAAI,EACpB6lC,EAAAA,EAAAA,QACAjC,EAAAA,EAAAA,gBACAkC,EAAAA,EAAAA,mBACAC,EAAAA,EAAAA,mBACAC,EAAAA,EAAAA,YACAnrE,EAAAA,EAAAA,OACAk8D,EAAAA,EAAAA,UACA9vB,EAAAA,EAAAA,YAAAA,EAAAA,EACAC,eAAAA,OAAAA,IAAiB,EAAAu9B,GAAAA,EACjBwB,EAAAA,EAAAA,iBAAAA,EAAAA,EACAC,oBAAAA,OAAAA,IAAsB,EAAAzB,GAAAA,EACtBj4B,EAAAA,EAAAA,MACA25B,EAAAA,EAAAA,WAAAA,EAAAA,EACAhD,QAAAA,OAAAA,IAAU,mBACVjqB,WAAAA,OAAAA,IAAa,aACVl6C,EAAAA,GAAAA,EAAAA,CAtBHlB,KACA4nE,WACAC,gBACAT,aACAU,gBACAphE,UACAu7B,OACA8lC,UACAjC,kBACAkC,qBACAC,qBACAC,cACAnrE,SACAk8D,YACA9vB,cACAC,iBACA++B,mBACAC,sBACA15B,QACA25B,aACAhD,UACAjqB,eAMEktB,EAAUvuC,EAAAA,SAEV0P,EAAiB1P,EAAAA,SAEjBwuC,EAAiBxuC,EAAAA,SAKjB8sC,EAAW,YAIX2B,EAASxoE,EAITyoE,EAAa,GAAU,OAAPD,EAAO,SAMvBE,EAAU,UACVC,EAAY,YACZC,EAAY,YACZC,EAAa,aAEbC,EAAa,CAACH,EAAWE,GACzBE,EAAa,CAACL,EAASE,GAUvBI,EAAa,Y,IAAG5uE,EAAAA,EAAAA,MAAO6uE,EAAAA,EAAAA,eAIzB,GAFAnB,EAAc1tE,GAEG,WAAbwtE,GACA,GAAIxtE,IAAS6uE,aAAAA,EAAAA,EAAgBzuE,SAAS,WAAmB,CACrD,IAAM0uE,EAASlvE,SAAS6Q,eAAe49D,GACjCU,EAAgBD,aAAAA,EAAAA,EAAQz+B,UAC9Bo9B,EAAc,CAAEztE,MAAAA,EAAOgvE,QAASD,GACpC,MACoB,YAAbvB,GAEHxtE,IAAS6uE,aAAAA,EAAAA,EAAgBzuE,SAAS,aAClCqtE,EAAc,CAAEztE,MAAAA,GAG5B,EAEMivE,EAAwB,SAACjvE,GAC3B6tE,EAAmBruE,QAAUQ,CACjC,EAKM2jE,EAAQ,Y,IAAG3jE,EAAAA,EAAAA,MACbgvC,EAAe,IAEf4+B,EAAmB,YAGnBqB,EADiBjvE,GAASgtE,GAAc,IAGjB,mBAAZW,GAEHA,OADiB,IAAV3tE,EACC,CAAEA,MAAAA,GAEF,CAAEA,WAAOoU,GAG7B,EAOM86D,EAAiB,Y,IAAGlvE,EAAAA,EAAAA,MAAO6uE,EAAAA,EAAAA,oBACR,IAAV7uE,GACP4uE,EAAW,CAAE5uE,MAAAA,EAAO6uE,eAAAA,IAExBlL,EAAM,CAAE3jE,MAAAA,GACZ,EA0EMmvE,EAAwC,SAAC5gB,GAE3C,IAAM6gB,EAAU1vE,OAAO0vE,QACjBJ,EAAUtvE,OAAOsvE,QACvBzgB,EAAG5lB,MAAM,CAAE0mC,eAAe,IAE1B3vE,OAAO4vE,SAASF,EAASJ,EAC7B,OAwH0C,IAA/BnB,EAAmBruE,cAAiD,IAAfwtE,GAC5DiC,EAAsBjC,GAG1BrtC,EAAAA,iBAAsB,WAClB,IAeI0P,EAfEkgC,EAAU3vE,SAAS+L,cACrB,UAA+BkiE,OAArBpB,EAAS,cAAuC,OAA3BoB,EAAmBruE,QAAQ,OAE9D,GAAI+vE,EACAJ,EAAsCI,OACnC,CACH,IAAMC,EAAa5vE,SAAS+L,cAAgC,UAAmB,OAAT8gE,EAAS,eAC3E+C,IACAP,EAAsBO,EAAWxvE,OACjCmvE,EAAsCK,GAE9C,CAEIzB,IAEsB,QAAtB1+B,EAAAA,EAAe7vC,eAAf6vC,IAAAA,GAAAA,EAAwB1G,QAEhC,IAEAhJ,EAAAA,WAAgB,WACZ,GAAKmuC,EAAL,CAIA,IAAMyB,EAAU3vE,SAAS+L,cAAc,UAA+BqhE,OAArBP,EAAS,cAAuB,OAAXO,EAAW,OACjF,GAAIuC,EAAS,C,IAETpB,EADMsB,EAhYE,SAEpBzjD,EAEA8hD,EAEAK,G,IAEaniD,EAEMmiD,EAEAniD,EAJb0jD,EAAyB,QAAlB1jD,EAAAA,EAAK2jD,qBAAL3jD,IAAAA,OAAAA,EAAAA,EAAoB2jD,cAC3BC,EAAYF,aAAAA,EAAAA,EAAME,UAClBC,EAAmC,QAAtB1B,EAAAA,EAAe3uE,eAAf2uE,IAAAA,OAAAA,EAAAA,EAAwB2B,aAErCC,GAA+B,QAAlB/jD,EAAAA,EAAK2jD,qBAAL3jD,IAAAA,OAAAA,EAAAA,EAAoB8jD,eADlB,GASrB,YAH0B,IAAfD,QACc,IAAdD,GACPA,EAAYG,EAAajC,EAAc+B,EAEhC/B,EAAciC,OAPoB,IAAdH,GAA6BA,EAAY9B,EAS7DA,EAAciC,EAElBjC,CACX,CAsWkCkC,CAAgBT,EAASzB,EAAYtuE,QAAS2uE,GAC1C,QAAtBA,EAAAA,EAAe3uE,eAAf2uE,IAAAA,GAAAA,EAAwBmB,SAAS,EAAGG,GACpC3B,EAAYtuE,QAAUiwE,CAC1B,CAPA,CAQJ,GAAG,CAACzC,EAAYc,IAEhBnuC,EAAAA,iBAAsB,W,IAIlBwuC,EAHKL,IAGiB,QAAtBK,EAAAA,EAAe3uE,eAAf2uE,IAAAA,GAAAA,EAAwBmB,SAAS,EAAGxB,EAAYtuE,SACpD,IAEA,IAAMywE,GAAgBC,EAAAA,GAAAA,GAAahxE,EAAKgvE,GAOxC,OAFAjvE,EAAAA,GAAAA,GAAgBivE,GAAS,W,OAAMvK,EAAM,CAAE3jE,MAAOgtE,G,IAG1C,gBAACplC,GAAAA,EAAMA,CAACC,KAAMA,EAAM5iC,IAnUN,oBAoUV,gBAAC+lE,GAAAA,GAAAA,GAAAA,CACG9rE,IAAK+wE,GACDnpE,GAAAA,CACJwtC,MAAOA,EACPhuC,UA/KI,SAACtB,G,IAUqBmpE,EAT5BgC,EAAY,CAAC7B,EAASC,GACtB6B,EAAS,CAAC9B,EAASC,EAAWC,EAAWC,GACzC4B,EAAa,CAAC,SAIdC,EAAa1wE,SAASu4C,cACtBo4B,EAAqBD,IAAejhC,EAAe7vC,QACnDgxE,EAAqBF,IAAenC,EAAe3uE,QACnDixE,EAAkD,QAAtBtC,EAAAA,EAAe3uE,eAAf2uE,IAAAA,OAAAA,EAAAA,EAAwB1uE,SAAS6wE,GAI7DI,IAHgB9wE,SAAS+L,cAC3B,UAA+BqhE,OAArBP,EAAS,cAAuB,OAAXO,EAAW,OAe9C,GAvBiB,CAAC,UAaL5sE,SAAS4E,EAAEC,MAGhBiqE,EAFa,WAAb1B,EAEe,CAAExtE,MAAOgtE,EAAY6B,eAAgB,C,WAGrC,CAAE7uE,MAAOgtE,IAlBjB,QAsBAhoE,EAAEC,KA8BjB,GAAK+nE,GAAewD,GAAuBC,GAA6BzrE,EAAEC,MAAQqpE,EAAlF,CAKA,GAAI8B,EAAOhwE,SAAS4E,EAAEC,KAAM,CAExB,IAAIkrE,EAAU/vE,SAAS4E,EAAEC,KAKrB,OAJAD,EAAEkhE,iBA1IO,SAAClhE,GAClB,IAAM2rE,EAASniD,MAAMC,KAAK7uB,SAASw2D,iBAAmC,UAAmB,OAATqW,EAAS,gBACnFmE,EAAmB/C,EAAmBruE,SAAYmxE,EAAO9vE,QAAU8vE,EAAO,GAAG3wE,OAAU,GACvF6wE,EAAkBjxE,SAAS+L,cAC7B,UAA+BilE,OAArBnE,EAAS,cAA6B,OAAjBmE,EAAiB,OAE9C/iC,EAAQ,GAAoB8iC,EAAOl8D,QAAQo8D,IAAqB,EAChEC,EAAgBlxE,SAAS+L,cAC3B,UAA+BqhE,OAArBP,EAAS,cAAuB,OAAXO,EAAW,OAGxC+D,EACEpC,EAAWvuE,SAAS4E,EAAEC,MAAQ4oC,EAAQ,GAC9B,EAER6gC,EAAWtuE,SAAS4E,EAAEC,MAAQ4oC,EAAQ8iC,EAAO9vE,OAAS,EAC/C,EAGJ,EAaL65B,EAAUi2C,EAAO9iC,GANL,IAAVA,GAAiBm/B,GAJK8D,EAOnBC,EAFI,IAOXr2C,IACAu0C,EAAsBv0C,EAAQ16B,OAC9B4uE,EAAW,CAAE5uE,MAAO06B,EAAQ16B,MAAO6uE,eAAgB,C,aAGvDjB,EAAmB,WACvB,CAmGYoD,CAAahsE,EAKrB,CAEK0rE,GAKDL,EAAWjwE,SAAS4E,EAAEC,OACL,WAAbuoE,GAAiCR,IAAea,EAAmBruE,QAEnE0vE,EAAe,CAAElvE,MAAOgtE,EAAY6B,eAAgB,C,YAChC,YAAbrB,GAAkCR,IAAea,EAAmBruE,SACvE6wE,EAAWjwE,SAAS4E,EAAEC,MACtBiqE,EAAe,CACXlvE,MAAO6tE,EAAmBruE,QAC1BqvE,eAAgB,C,aA1BhC,MAjCA,CAGI,GAAI0B,EAAoB,CACpBvC,GAAoB,GAEpB,IAAM2C,EAASniD,MAAMC,KACjB7uB,SAASw2D,iBAAmC,UAAmB,OAATqW,EAAS,gBAE7DwE,EACFN,EAAOpkD,QAAO,SAACP,GACX,OAAOA,EAAKhsB,QAAU6tE,EAAmBruE,OAC7C,IAAG,IAAMmxE,EAAO,GAEhBM,IACAhC,EAAsBgC,EAAajxE,OACnCmvE,EAAsC8B,GACtCrC,EAAW,CAAE5uE,MAAOixE,EAAajxE,MAAO6uE,eAAgB,C,YAEhE,MACIb,GAAoB,GAKxBJ,EAAmB,WAEvB,CAqCJ,EAqFY3oE,IAAKmpE,EACLxoE,GAAIwoE,EACJnuC,eAAct9B,EACdsoE,QAASA,EACTjqB,WAAYA,IAEXitB,GACG,gBAAChV,GAAeA,CAACh5B,eAAct9B,EAAS,UAAWsoE,QAASA,GACvDgD,GAGRpP,GACG,gBAACd,GAAkBA,CACfp7D,OAAQ,GAAU,OAAPA,EAAO,iBAClBzD,IAAKmwC,EACLtpC,YAAa,YACb8jC,aAnFO,SAAC7kC,GACxBgqC,EAAehqC,EAAEzF,OAAOS,MAC5B,EAkFoB8pC,kBAhFM,WACtBkF,EAAe,IACfg/B,GAAoB,EACxB,EA8EoBjkC,WAAYgF,EACZzF,cAAc,EACdrJ,eAAc,GAAU,OAAPt9B,EAAO,yBACxBqnC,SAAU+jC,IAGlB,gBAAC7C,GAAAA,CACGtlE,GAAIyoE,EACJnvE,IAAKivE,EACLtP,UAAWA,EACX5+B,eAAc,GAAU,OAAPt9B,EAAO,aAErB2J,aAAAA,EAAAA,EAASzL,SACR,gBAACysE,GAAAA,CACG3qE,OAAQA,EACR2J,QAASA,EACTo/D,gBAAiBA,EACjBwB,gBAlPC,SAACloE,GAEtB,IAAMuqE,EAAUvqE,EAAEzF,OAAO2xE,QAAQ,SAASvlE,cAAc,SACxDiiE,EAAmB,SACnBqB,EAAsBM,EAAQvvE,MAClC,EA8OwBitE,gBAvHyB,SAACjoE,GAE9C,IAUIqqC,EAVEkgC,EAAUvqE,EAAEynD,cAAc9gD,cAAc,UAG9CiiE,EAAmB,SACf2B,IACAN,EAAsBM,EAAQvvE,OAC9BmvE,EAAsCI,IAEtCxB,KAEsB,QAAtB1+B,EAAAA,EAAe7vC,eAAf6vC,IAAAA,GAAAA,EAAwB1G,QAEhC,EA0GwBwkC,mBA7OG,SAACnoE,GAQA,aAApB0mE,GAIJwD,EAAe,CAAElvE,MAAOgF,EAAEzF,OAAOS,MAAO6uE,eAAgB,C,qBAC5D,EAiOwB7B,WAAYA,EACZP,SAAUA,EACVxB,QAASA,MAGf3+D,aAAAA,EAAAA,EAASzL,SAAU,gBAACyqE,GAAAA,KAAc,sBAKxD,IAGJiC,GAASn0D,YAAc,W,ovCC19BX+3D,G,2DAAAA,KAAAA,GAAAA,CAAAA,IAkDZ,IAAMC,IAAmB9vE,EAAAA,EAAAA,IAAOisE,GAAPjsE,CAAeisE,MAExB,SAACzmE,G,OAAUA,EAAMmR,Q,IACrB,SAACnR,G,MAAU,GAAW,OAARA,EAAM0lB,EAAE,K,IACvB,SAAC1lB,G,MAAU,GAAW,OAARA,EAAMo6C,EAAE,K,IACf,SAACp6C,G,MAA+B,SAApBA,EAAMy2D,UAAuB,OAAS,GAAmB,OAAhBz2D,EAAMy2D,UAAU,K,IASjF8T,GAAO1xC,EAAAA,YACT,WA4BIzgC,G,IA1BIyD,EAAAA,EAAAA,OACAsV,EAAAA,EAAAA,SACAuU,EAAAA,EAAAA,EACA00B,EAAAA,EAAAA,EACAqc,EAAAA,EAAAA,UACAuQ,EAAAA,EAAAA,YACAjwC,EAAAA,EAAAA,OACAgK,EAAAA,EAAAA,KACAypC,EAAAA,EAAAA,UACAhlE,EAAAA,EAAAA,QACAilE,EAAAA,EAAAA,UACA7F,EAAAA,EAAAA,gBACAkC,EAAAA,EAAAA,mBACAC,EAAAA,EAAAA,mBACAb,EAAAA,EAAAA,WACAU,EAAAA,EAAAA,cACAD,EAAAA,EAAAA,cACA5O,EAAAA,EAAAA,UACA7vB,EAAAA,EAAAA,eACAD,EAAAA,EAAAA,YACAg/B,EAAAA,EAAAA,iBACAC,EAAAA,EAAAA,oBACAC,EAAAA,EAAAA,WACAhD,EAAAA,EAAAA,QACAjqB,EAAAA,EAAAA,WAIJ,OAAKnjB,EAKD,gBAAC+J,GAAAA,EAAMA,CAACC,KAAMA,EAAM5iC,IAAKqsE,GACrB,gBAACF,GAAAA,CACGzuE,OAAQA,EACRzD,IAAKA,EACL2oC,KAAMA,EACNv7B,QAASA,EACTqhE,QAAS4D,EACT7F,gBAAiBA,EACjBkC,mBAAoBA,EACpBC,mBAAoBA,EACpBb,WAAYA,EACZU,cAAeA,EACfF,SAAU1C,GAAU0G,QACpB/D,cAAeA,EACf5O,UAAWA,EACX7vB,eAAgBA,EAChBD,YAAaA,EACbg/B,iBAAkBA,EAClBC,oBAAqBA,EACrB/1D,SAAUA,EACVuU,EAAGA,EACH00B,EAAGA,EACHqc,UAAWA,EACXuQ,YAAaA,EACbG,WAAYA,EACZhD,QAASA,EACTjqB,WAAYA,KA9Bb,gCAkCf,IAGJqwB,GAAKj4D,YAAc,OAKZ,IAAMq4D,GAAqE,Y,IAC9EnlE,EAAAA,EAAAA,QAAAA,EAAAA,EACAu7B,KAAAA,OAAAA,IAAO,EAAAjoC,SAASkoC,KAAI,MACpBv7B,aAAAA,OAAAA,IAAe,OAAA6H,EAAAA,EACf6rD,EAAAA,EAAAA,QACA5mB,EAAAA,EAAAA,cAAAA,EAAAA,EACAlrB,KAAAA,OAAAA,IAAO,KACP0wC,EAAAA,EAAAA,UAAAA,EAAAA,EACAryD,UAAAA,OAAAA,IAAY,uBACZklE,kBAAAA,OAAAA,IAAoB,SACpBC,eAAAA,OAAAA,IAAiB,SACjBC,gBAAAA,OAAAA,IAAkB,SAClBprE,SAAAA,OAAAA,IAAW,KACXynE,EAAAA,EAAAA,WACAhD,EAAAA,EAAAA,QACAjqB,EAAAA,EAAAA,WAEM6sB,EAAqBluC,EAAAA,OAAiCpzB,GAChCozB,EAAAA,GAAAA,EAAAA,SAAexR,GAAAA,GAApC0P,EAAqB8B,EAAAA,GAAbkyC,EAAalyC,EAAAA,GACQA,EAAAA,GAAAA,EAAAA,SAAmCpzB,GAAAA,GAAhEulE,EAA6BnyC,EAAAA,GAAjB8tC,EAAiB9tC,EAAAA,GACUA,EAAAA,GAAAA,EAAAA,SAAiCorC,GAAiBgH,OAAK,GAA9FrG,EAAuC/rC,EAAAA,GAAtBiuC,EAAsBjuC,EAAAA,GACVA,EAAAA,GAAAA,EAAAA,WAAc,GAA3CqtC,EAA6BrtC,EAAAA,GAAjB+tC,EAAiB/tC,EAAAA,GAC9BmuC,EAAcnuC,EAAAA,OAAa,GAC3BqyC,EAAgBryC,EAAAA,OAA8B,QACdA,EAAAA,GAAAA,EAAAA,SAAe,OAA9CoP,EAA+BpP,EAAAA,GAAlBqP,EAAkBrP,EAAAA,GACUA,EAAAA,GAAAA,EAAAA,UAAe,MAAxDouC,EAAyCpuC,EAAAA,GAAvBquC,EAAuBruC,EAAAA,GACFA,EAAAA,GAAAA,EAAAA,SAAerzB,GAAAA,GAAtD2lE,EAAuCtyC,EAAAA,GAAtBuyC,EAAsBvyC,EAAAA,GA2BxC4xC,GAAYt5B,EAAAA,EAAAA,cAAY,WACtBpa,IACAg0C,GAAU,GACVx4B,EAAc,CAAE3zC,KAAM,gBAE9B,GAAG,CAACm4B,EAAQg0C,EAAWx4B,KAEvBj6C,EAAAA,EAAAA,YAAU,WAIN,OAHAM,OAAOG,oBAAoB,SAAU0xE,GACrC7xE,OAAOI,iBAAiB,SAAUyxE,GAE3B,WACH7xE,OAAOG,oBAAoB,SAAU0xE,EACzC,CACJ,GAAG,CAACA,KAGJnyE,EAAAA,EAAAA,YAAU,WACFoH,GACA+qE,GAER,GAAG,CAAC/qE,EAAU+qE,KAEdnyE,EAAAA,EAAAA,YAAU,WAENyuE,EAAmBruE,QAAU+M,EAC7BmhE,EAAcnhE,GACdkhE,EAAclhE,EAClB,GAAG,CAACA,IAEJ,IAAM+/D,EAAY,SAAC/0C,GACf,MAAqB,aAAdA,aAAAA,EAAAA,EAAK7xB,KAChB,GAEAtG,EAAAA,EAAAA,YAAU,WAEN,IAAM+yE,EAAyBpjC,EAAYv6B,cAAc5P,OACnDwtE,EAAgB,SAACpyE,G,OAAkBA,EAAMqyE,oBAAoBjyE,SAAS+xE,E,EAEtEG,EAAqB,SAACxhC,GAExB,GAAIshC,EAActhC,EAAMjrC,OACpB,OAAOirC,EAIX,IAAMyhC,EAAuBzhC,EAAMxkC,QAAQigB,QAAO,SAACimD,G,OAAgBJ,EAAcI,EAAYppE,K,IAE7F,MAAO,CACHvD,MAAOirC,EAAMjrC,MACbyG,QAASimE,EAEjB,EAWMN,EAAkB3lE,EACnB9C,KAAI,SAACi0B,G,OACF2uC,EAAc3uC,GACR60C,EAAmB70C,GACnB6uC,EAAU7uC,GAPb,CAAE/3B,KAAM,UAAW4G,QAQKmxB,EAbEnxB,QAC5B9C,KAAI,SAACi0B,G,OAAY2uC,EAAc3uC,GAAU60C,EAAmB70C,GAAUA,C,IACtElR,QAAO,SAACkR,G,OACL2uC,EAAc3uC,GAAUA,EAAOnxB,QAAQzL,OAASuxE,EAAc30C,EAAOr0B,K,KAWnEq0B,C,IAETlR,QAAO,SAACkR,G,OACL2uC,EAAc3uC,IAER6uC,EAAU7uC,GADVA,EAAOnxB,QAAQzL,OAGfuxE,EAAc30C,EAAOr0B,K,IAGnC8oE,EAAmBD,EACvB,GAAG,CAACljC,EAAaziC,IAEjB,IAAM8/D,EAAgB,SAACpgD,GACnB,YAAuB5X,KAAhB4X,aAAAA,EAAAA,EAAMnmB,MACjB,EAEgD4sE,GAAAA,EAAAA,GAAAA,IAAY,CACxDjmE,UAAAA,EACAkmE,qBAAsBC,GAAAA,GACtBC,WAAY,EACRxvB,EAAAA,GAAAA,IAAO,IACP7d,EAAAA,GAAAA,IAAK,CACDstC,MAAAA,SAAM,G,IAAEC,EAAF,EAAEA,MAAOC,EAAT,EAASA,eAAgBC,EAAzB,EAAyBA,gBAAiBC,EAA1C,EAA0CA,SACxCvB,GAEAv/C,OAAO3hB,OAAOyiE,EAASC,SAAS5+B,MAAO,CACnCrkC,MAAO,GAAyB,OAAtB6iE,EAAMK,UAAUljE,MAAM,QAGpC0hE,GAEAx/C,OAAO3hB,OAAOyiE,EAASC,SAAS5+B,MAAO,CACnC78B,SAAU,GAAkB,OAAfs7D,EAAe,QAIhCf,EAAcxyE,QADdoyE,EACwBoB,EAEA,MAEhC,OAxBJxmD,EAAwCimD,EAAxCjmD,EAAG00B,GAAqCuxB,EAArCvxB,EAAGiyB,GAAkCV,EAAlCU,UAAWD,GAAuBT,EAAvBS,SAAUE,GAAaX,EAAbW,SA6BnC,OACI,gCACI,gBAACnT,EAAAA,CACG/gE,IAAKi0E,GACLt1C,OAAQA,EACR96B,QA5IiC,WACrC86B,EAEAg0C,GAAU,IAIVC,IACApE,EAAcoE,GACdjE,EAAmBruE,QAAUsyE,GAEjCD,GAAU,GACd,EAiIYC,WAAYA,GAAc,GAC1BtrE,SAAUA,IAEd,gBAAC6qE,GAAAA,CACG1uE,OAAQ,gBACRk7B,OAAQA,EACR3+B,IAAKg0E,GACLj7D,SAAUm7D,GACV5mD,EAAGA,QAAAA,EAAK,EACR00B,EAAGA,SAAAA,GAAK,EACRqc,UAAWyU,EAAcxyE,QACzBsuE,YAAaA,EACbjmC,KAAMA,EACNv7B,QAAS2lE,EACTV,UAAWA,EACX7F,gBAAiBA,EACjBkC,mBAAoBA,EACpBC,mBAAoBA,EACpBb,WAAYA,EACZU,cAAeA,EACfF,SAAU1C,GAAU0G,QACpB/D,cApJa,Y,IAAGztE,EAAAA,EAAAA,MACxBytE,EAAcztE,GAEdq5C,EAAc,CAAE3zC,KAAM,eAAsCuxB,QAAS,CAAEj3B,MAAAA,IAC3E,EAiJY6+D,UAAWA,EACX7vB,eAAgBA,EAChBD,YAAaA,EACbg/B,iBAAkBA,EAClBC,oBAAqBA,EACrBsD,UA1KM,mBA2KNrD,WAAYA,EACZhD,QAASA,EACTjqB,WAAYA,IAI5B,EAEAywB,GAAar4D,YAAc,e,68BChW3B,I,GAAMi6D,GAAyB/xE,EAAAA,GAAO+B,OAAM,MAG/B,SAACyD,G,OAAWA,EAAMmJ,MAAQnJ,EAAMmJ,MAAQ,M,IACpC,SAACnJ,G,OAAWA,EAAMP,SAAWO,EAAMP,SAAW,C,IAC9C,SAACO,G,OAAWA,EAAM2Q,SAAW3Q,EAAM2Q,SAAW,M,GAEhDlJ,EAAQq2B,MACJlB,GACF,SAAC58B,G,OAAWA,EAAMk4C,gBAAkB,OAASzb,EAAUqB,K,IACrD,SAAC99B,G,OAAWA,EAAMk4C,gBAAkB,OAASzb,EAAUmE,M,IAClD,SAAC5gC,G,OAAWA,EAAMN,UAAW+iC,EAAAA,EAAAA,IAAO,MAAOr8B,EAAMQ,QAAQC,OAAST,EAAMQ,QAAQC,K,IAC3F,SAAC7G,G,OAAWA,EAAMN,UAAW27B,EAAAA,EAAAA,IAAe,MAAOj1B,EAAMQ,QAAQmzB,OAAS3zB,EAAMQ,QAAQmzB,K,IAGjF,SAAC/5B,G,OAAWA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKo0B,U,IAC1D,SAACz6B,G,OAAWA,EAAMk4C,gBAAkB,EAAI9a,EAAOC,O,IAK9DmvC,IAAkBhyE,EAAAA,EAAAA,IAAOo8D,EAAAA,GAAPp8D,CAAeo8D,MAOjC6V,GAAajyE,EAAAA,GAAOgM,KAAI,MASjBkmE,GAAmB7zC,EAAAA,YAC5B,WAAsGzgC,G,IAAnG0G,EAAAA,EAAAA,GAAIjD,EAAAA,EAAAA,OAAQI,EAAAA,EAAAA,QAASyD,EAAAA,EAAAA,SAAUP,EAAAA,EAAAA,QAASgK,EAAAA,EAAAA,MAAO1J,EAAAA,EAAAA,SAAUkR,EAAAA,EAAAA,SAAUq6D,EAAAA,EAAAA,WAAY,EAAZA,EAAY/rE,YAAAA,OAAAA,IAAc,OAC5F,OACI,gBAACstE,GAAAA,CACGn0E,IAAKA,EACL0G,GAAIA,EACJq6B,eAAct9B,EACdI,QAASA,EACTyD,SAAUA,EACVP,QAASA,EACTgK,MAAOA,EACP1J,SAAUA,EACVkR,SAAUA,EACV/R,KAAM,UAEN,gBAAC6tE,GAAAA,KAAYzB,GAA0B/rE,GACvC,gBAACutE,GAAAA,CAAgBnzC,KAAMjzB,EAAMC,KAAK+zB,UAAWjxB,MAAO,MAAOC,OAAQ,QAG/E,I,4sCAEJsjE,GAAiBp6D,YAAc,mB,SCnEnBq6D,G,iGAAAA,KAAAA,GAAAA,CAAAA,IAuEZ,IAAMC,IAAiBpyE,EAAAA,EAAAA,IAAOisE,GAAPjsE,CAAeisE,MAEtB,SAACzmE,G,OAAUA,EAAMmR,Q,IACrB,SAACnR,G,MAAU,GAAW,OAARA,EAAM0lB,EAAE,K,IACvB,SAAC1lB,G,MAAU,GAAW,OAARA,EAAMo6C,EAAE,K,IACf,SAACp6C,G,MAA+B,SAApBA,EAAMy2D,UAAuB,OAAS,GAAmB,OAAhBz2D,EAAMy2D,UAAU,K,IAIjFgP,GAAO,WAAO,EAQd8E,GAAO1xC,EAAAA,YACT,WA6BIzgC,G,IA3BI0G,EAAAA,EAAAA,GACAjD,EAAAA,EAAAA,OACAsV,EAAAA,EAAAA,SACAuU,EAAAA,EAAAA,EACA00B,EAAAA,EAAAA,EACAqc,EAAAA,EAAAA,UACAuQ,EAAAA,EAAAA,YACAjwC,EAAAA,EAAAA,OACAgK,EAAAA,EAAAA,KACAypC,EAAAA,EAAAA,UACAhlE,EAAAA,EAAAA,QACAilE,EAAAA,EAAAA,UACA7F,EAAAA,EAAAA,gBACAkC,EAAAA,EAAAA,mBACAC,EAAAA,EAAAA,mBACAb,EAAAA,EAAAA,WACAU,EAAAA,EAAAA,cACAD,EAAAA,EAAAA,cACA5O,EAAAA,EAAAA,UACA7vB,EAAAA,EAAAA,eACAD,EAAAA,EAAAA,YACAg/B,EAAAA,EAAAA,iBACAC,EAAAA,EAAAA,oBACAC,EAAAA,EAAAA,WACAhD,EAAAA,EAAAA,QACAjqB,EAAAA,EAAAA,WAIJ,OACI,gBAACpZ,GAAAA,EAAMA,CAACC,KAAMA,EAAM5iC,IAAKqsE,GACpBzzC,GACG,gBAAC61C,GAAAA,CACGx0E,IAAKA,EACL0G,GAAIA,EACJjD,OAAQA,EACRklC,KAAMA,EACNv7B,QAASA,EACTqhE,QAAS4D,EACT9D,cAAeA,EACf/B,gBAAiBA,EACjBkC,mBAAoBA,EACpBC,mBAAoBA,EACpBb,WAAYA,EACZU,cAAeA,EACfF,SAAU1C,GAAU6I,OACpB9U,UAAWA,EACX7vB,eAAgBA,EAChBD,YAAaA,EACbg/B,iBAAkBA,EAClBC,oBAAqBA,EACrB/1D,SAAUA,EACVuU,EAAGA,EACH00B,EAAGA,EACHqc,UAAWA,EACXuQ,YAAaA,EACbG,WAAYA,EACZhD,QAASA,EACTjqB,WAAYA,IAKhC,IAGJqwB,GAAKj4D,YAAc,OAKZ,IAAMw6D,GAAiE,Y,IAyL/CtnE,E,IAxL3B1G,GAAAA,OAAAA,IAAK,sBACLjD,OAAAA,OAAAA,IAAS,kBACT2J,EAAAA,EAAAA,QAAAA,EAAAA,EACAu7B,KAAAA,OAAAA,IAAO,EAAAjoC,SAASkoC,KAAI,MACpBv7B,aAAAA,OAAAA,IAAe,OACf0zD,EAAAA,EAAAA,QAAAA,EAAAA,EACA5mB,cAAAA,OAAAA,IAAgB,EAAAkzB,GAAIA,EACpBtkE,EAAAA,EAAAA,SAAAA,EAAAA,EACAkmB,KAAAA,OAAAA,IAAO,KACPle,EAAAA,EAAAA,MACA1J,EAAAA,EAAAA,SACAkR,EAAAA,EAAAA,SACAjR,EAAAA,EAAAA,SACAP,EAAAA,EAAAA,QACA44D,EAAAA,EAAAA,UAAAA,EAAAA,EACAryD,UAAAA,OAAAA,IAAY,uBACZklE,kBAAAA,OAAAA,IAAoB,SACpBC,eAAAA,OAAAA,IAAiB,SACjBC,gBAAAA,OAAAA,IAAkB,KAClB3D,EAAAA,EAAAA,WACAhD,EAAAA,EAAAA,QACAjqB,EAAAA,EAAAA,WAE4BrhB,EAAAA,GAAAA,EAAAA,SAAexR,GAAAA,GAApC0P,EAAqB8B,EAAAA,GAAbkyC,EAAalyC,EAAAA,GACQA,EAAAA,GAAAA,EAAAA,SAAuBpzB,GAAAA,GAApDulE,EAA6BnyC,EAAAA,GAAjB8tC,EAAiB9tC,EAAAA,GACUA,EAAAA,GAAAA,EAAAA,SAAiCorC,GAAiBgH,OAAK,GAA9FrG,EAAuC/rC,EAAAA,GAAtBiuC,EAAsBjuC,EAAAA,GACxCkuC,EAAqBluC,EAAAA,OAAqBpzB,GAEZozB,EAAAA,GAAAA,EAAAA,SAAuBpzB,GAAAA,GAApDygE,EAA6BrtC,EAAAA,GAAjB+tC,EAAiB/tC,EAAAA,GAC9BmuC,EAAcnuC,EAAAA,OAAa,GAC3BqyC,EAAgBryC,EAAAA,OAA8B,QACdA,EAAAA,GAAAA,EAAAA,SAAe,OAA9CoP,EAA+BpP,EAAAA,GAAlBqP,EAAkBrP,EAAAA,GACUA,EAAAA,GAAAA,EAAAA,UAAe,MAAxDouC,GAAyCpuC,EAAAA,GAAvBquC,GAAuBruC,EAAAA,GACFA,GAAAA,GAAAA,EAAAA,SAAerzB,GAAAA,GAAtD2lE,GAAuCtyC,GAAAA,GAAtBuyC,GAAsBvyC,GAAAA,GAExCk0C,GAAYl0C,EAAAA,OAAa9B,GAGzBi2C,IAAiB/zE,EAAAA,GAAAA,GAAY+xE,IAEnC1yE,EAAAA,EAAAA,YAAU,WAEF0yE,IAAegC,IAGK,mBAAb7rE,GACPA,EAAS6pE,EAEjB,GAAG,CAACA,EAAY7pE,EAAU6rE,KAK1B,IAEMC,GAAgD,WAClD,GAAIl2C,EAIA,OAFAg0C,GAAU,QACVgC,GAAUr0E,SAAU,GAGxBqyE,GAAU,GACV7D,IAAoB,GACpB6F,GAAUr0E,QAAUq+B,CACxB,EAiCMm2C,GAAsC,SAAChvE,GAEpC6uE,GAAUr0E,UAIXwF,EAAEzF,QAAU,EAAGA,OAAuBqG,KAAO,GAAM,OAAHA,EAAG,WAIvDisE,GAAU,GACVgC,GAAUr0E,SAAU,EACpB65C,EAAc,CAAE3zC,KAAM,iBAC1B,EAEAmuE,GAAUr0E,QAAUq+B,EACpBn+B,OAAOG,oBAAoB,SAAUm0E,IACrCt0E,OAAOI,iBAAiB,SAAUk0E,IAClCp0E,SAASC,oBAAoB,SAAUm0E,IAAsB,GAC7Dp0E,SAASE,iBAAiB,SAAUk0E,IAAsB,IAE1D50E,EAAAA,EAAAA,YAAU,WAENyuE,EAAmBruE,QAAU+M,EAC7BmhE,EAAcnhE,GACdkhE,EAAclhE,EAClB,GAAG,CAACA,IAEJ,IAAM+/D,GAAY,SAAC/0C,GACf,MAAqB,aAAdA,aAAAA,EAAAA,EAAK7xB,KAChB,EAEM0mE,GAAgB,SAACpgD,GACnB,YAAuB5X,KAAhB4X,aAAAA,EAAAA,EAAMnmB,MACjB,GAEAzG,EAAAA,EAAAA,YAAU,WAEN,IAAM+yE,EAAyBpjC,EAAYv6B,cAAc5P,OAEnDwtE,EAAgB,SAACpyE,G,OAAkBA,EAAMqyE,oBAAoBjyE,SAAS+xE,E,EACtEG,EAAqB,SAACxhC,GAExB,GAAIshC,EAActhC,EAAMjrC,OACpB,OAAOirC,EAIX,IAAMyhC,EAAuBzhC,EAAMxkC,QAAQigB,QAAO,SAACimD,G,OAAgBJ,EAAcI,EAAYppE,K,IAE7F,MAAO,CACHvD,MAAOirC,EAAMjrC,MACbyG,QAASimE,EAEjB,EAYMN,EAAkB3lE,EACnB9C,KAAI,SAACi0B,G,OACF2uC,GAAc3uC,GACR60C,EAAmB70C,GACnB6uC,GAAU7uC,GAPb,CAAE/3B,KAAM,UAAW4G,QAQKmxB,EAdEnxB,QAC5B9C,KAAI,SAACi0B,G,OAAY2uC,GAAc3uC,GAAU60C,EAAmB70C,GAAUA,C,IACtElR,QAAO,SAACkR,G,OACL2uC,GAAc3uC,GAAUA,EAAOnxB,QAAQzL,OAASuxE,EAAc30C,EAAOr0B,K,KAYnEq0B,C,IAETlR,QAAO,SAACkR,G,OACL2uC,GAAc3uC,IAER6uC,GAAU7uC,GADVA,EAAOnxB,QAAQzL,OAGfuxE,EAAc30C,EAAOr0B,K,IAGnC8oE,GAAmBD,EACvB,GAAG,CAACljC,EAAaziC,IAGjB,IAAM2nE,G,QAAqB3nE,EAAAA,EACtB4zD,SAAQ,SAACl0C,GACN,OAAIogD,GAAcpgD,GACPA,EAAK1f,QAAQ4nE,OACb5H,GAAUtgD,GACVA,EAAK1f,QAAQ4zD,SAAQ,SAACiU,G,OACzB/H,GAAc+H,GAAiBA,EAAc7nE,QAAQ4nE,OAASC,C,IAG3DnoD,CAEf,IACCkjC,MAAK,SAACljC,G,OAASA,EAAKhsB,QAAU8xE,C,WAZRxlE,IAAAA,OAAAA,EAAAA,EAYqBlD,KAEAqpE,IAAAA,EAAAA,GAAAA,IAAY,CACxDjmE,UAAAA,EACAkmE,qBAAsBC,GAAAA,GACtBC,WAAY,EACRxvB,EAAAA,GAAAA,IAAO,IACP7d,EAAAA,GAAAA,IAAK,CACDstC,MAAAA,SAAM,G,IAAEC,EAAF,EAAEA,MAAOC,EAAT,EAASA,eAAgBC,EAAzB,EAAyBA,gBAAiBC,EAA1C,EAA0CA,SACxCvB,GAEAv/C,OAAO3hB,OAAOyiE,EAASC,SAAS5+B,MAAO,CACnCrkC,MAAO,GAAyB,OAAtB6iE,EAAMK,UAAUljE,MAAM,QAGpC0hE,GAEAx/C,OAAO3hB,OAAOyiE,EAASC,SAAS5+B,MAAO,CACnC78B,SAAU,GAAkB,OAAfs7D,EAAe,QAIhCf,EAAcxyE,QADdoyE,EACwBoB,EAEA,MAEhC,OAxBJxmD,GAAwCimD,GAAxCjmD,EAAG00B,GAAqCuxB,GAArCvxB,EAAGiyB,GAAkCV,GAAlCU,UAAWD,GAAuBT,GAAvBS,SAAUE,GAAaX,GAAbW,SA6BnC,OACI,gCACKnT,GACG,gBAACA,EAAAA,CACG/gE,IAAKi0E,GACLvtE,GAAI,GAAM,OAAHA,EAAG,WACVjD,OAAQ,GAAU,OAAPA,EAAO,WAClBI,QAASgxE,GACTjC,WAAYmC,GACZztE,SAAUA,EACVP,QAASA,EACTgK,MAAOA,EACP1J,SAAUA,EACVkR,SAAUA,KAGhBwoD,GACE,gBAACuT,GAAgBA,CACbt0E,IAAKi0E,GACLvtE,GAAI,GAAM,OAAHA,EAAG,WACVjD,OAAQ,GAAU,OAAPA,EAAO,WAClBI,QAASgxE,GACTjC,WAAYmC,GACZztE,SAAUA,EACVP,QAASA,EACTgK,MAAOA,EACP1J,SAAUA,EACVkR,SAAUA,EACV1R,YAAa,kBAGrB,gBAACsrE,GAAIA,CACDzrE,GAAIA,EACJjD,OAAQA,EACRk7B,OAAQA,EACR3+B,IAAKg0E,GACLj7D,SAAUm7D,GACV5mD,EAAGA,SAAAA,GAAK,EACR00B,EAAGA,SAAAA,GAAK,EACRqc,UAAWyU,EAAcxyE,QACzBsuE,YAAaA,EACbjmC,KAAMA,EACNv7B,QAAS2lE,GACTV,UA/LM,Y,IAAGvxE,EAAAA,EAAAA,MACZ69B,SAIgB,IAAV79B,IACPA,EAAQ,IAEZ6xE,GAAU,GACVgC,GAAUr0E,SAAU,EACpB65C,EAAc,CAAE3zC,KAAM,gBAElBouE,KAAmB9zE,GAIvBq5C,EAAc,CAAE3zC,KAAM,eAAoCuxB,QAAS,CAAEj3B,MAAAA,KACzE,EA+KY0rE,gBAAiBA,EACjBkC,mBAAoBA,EACpBC,mBAAoBA,EACpBb,WAAYA,EACZU,cAAeA,EACfF,SAAU1C,GAAU0G,QACpB/D,cAlNa,Y,IAAGztE,EAAAA,EAAAA,MAAOgvE,EAAAA,EAAAA,QAC/BvB,EAAcztE,QACS,IAAZgvE,IACPlB,EAAYtuE,QAAUwvE,GAG1B31B,EAAc,CACV3zC,KAAM,mBACNuxB,QAAS,CAAEm9C,UAAWp0E,IAE9B,EAyMY6+D,UAAWA,EACX7vB,eAAgBA,EAChBD,YAAaA,EACbg/B,iBAAkBA,GAClBC,oBAAqBA,GACrBsD,UAtOM,qBAuONrD,WAAYA,EACZhD,QAASA,EACTjqB,WAAYA,IAI5B,E,+hCAEA4yB,GAAWx6D,YAAc,aC7bzB,IAAMkkC,GAAkBh8C,EAAAA,GAAOuE,MAAK,KAEd0I,EAAQC,SACVD,EAAQi3B,QACXjC,EAAUqB,MACRrB,EAAUmE,QACV,SAAC5gC,G,OAAyCA,EAAMy2C,UAAY,MAAQ,K,IAC1E,SAACz2C,G,OAAyCA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMC,KAAKm0B,U,IACvF,SAACx6B,G,OAAyCA,EAAMN,SAAW,MAAQ,G,IAG5Ei3C,GAA0Bn8C,EAAAA,GAAO6B,IAAG,KACzBogC,EAAUiC,QACRjC,EAAUqB,OAChB,SAAC99B,G,OACNA,EAAMb,QAAUiH,EAAMQ,QAAQ+yB,IAAMvzB,EAAMQ,QAAQmzB,K,GACvCtyB,EAAQq2B,OAKdv4B,GAA2E,Y,IACpFzG,EAAAA,EAAAA,GACAY,EAAAA,EAAAA,SACAP,EAAAA,EAAAA,QACAJ,EAAAA,EAAAA,MACAK,EAAAA,EAAAA,kBACAq3C,EAAAA,EAAAA,UACGz2C,EAAAA,GAAAA,EAAAA,CANHlB,KACAY,WACAP,UACAJ,QACAK,oBACAq3C,cAGA,OACI,gCACI,gBAACD,GAAeA,CAAC92C,SAAUA,EAAUP,QAASA,EAASs3C,UAAWA,EAAW3wC,QAAS,GAAM,OAAHhH,EAAG,YACvFC,GAEL,gBAAC+tE,G,uUAAUA,CAAAA,CAAChuE,GAAIA,EAAIY,SAAUA,EAAUP,QAASA,GAAaa,IAC7DZ,GACG,gBAACu3C,GAAuBA,CAACx3C,QAASA,GAAUC,GAI5D,E,ghEACAmG,GAAgB+M,YAAc,kBCvC9B,IAAMi7D,GAAwB/yE,EAAAA,GAAO6B,IAAG,MAC3B,SAAC2D,G,OAAsCA,EAAMmJ,K,GAErCi0B,EAAO3C,WACJr0B,EAAMC,KAAKo0B,YAE7B,SAACz6B,G,OACCA,EAAMwtE,YACN,gFAI0C,OAAtBpnE,EAAMC,KAAKo0B,WAAW,oF,IAY5C57B,GAAkBrE,EAAAA,GAAO0H,MAAK,MACnB,SAAClC,G,OAAoCA,EAAM2sC,Q,GAG7CllC,EAAQq2B,OACN,SAAC99B,G,OAAoCA,EAAM2sC,Q,IAItD,SAAC3sC,G,OACCA,EAAMwtE,YACL,2D,IAMHtvC,IAAuB1jC,EAAAA,EAAAA,IAAO6jC,EAAP7jC,CAAqB6jC,KACnC52B,EAAQi3B,SAGV+uC,GAAkB50C,EAAAA,YAC3B,WAEIzgC,G,IADEc,EAAAA,EAAAA,MAAOsqC,EAAAA,EAAAA,OAAQ,EAARA,EAAQr6B,MAAAA,OAAAA,IAAQ,eAAQwjC,SAAAA,OAAAA,IAAW,EAAAlQ,EAAUqB,MAAK,EAAEh+B,EAAAA,EAAAA,QAASjE,EAAAA,EAAAA,OAAQqJ,EAAAA,EAAAA,UAAWo0C,EAAAA,EAAAA,UAAct5C,EAAAA,GAAAA,EAAAA,CAArG9G,QAAOsqC,SAAQr6B,QAAgBwjC,WAA4B7sC,UAASjE,SAAQqJ,YAAWo0C,cAGjEt+C,EAAAA,IAAAA,EAAAA,EAAAA,UAA8B,WAA/C6e,EAAiB7e,EAAAA,GAAXo2D,EAAWp2D,EAAAA,GACUA,EAAAA,IAAAA,EAAAA,EAAAA,UAAS9B,QAAAA,EAAS,OAA7CklE,EAA2BpjE,EAAAA,GAAhB0yE,EAAgB1yE,EAAAA,GAC5B2yE,GAAWx0E,EAAAA,EAAAA,QAAyB,OAE1C6/D,EAAAA,EAAAA,qBAAsE5gE,GAAK,W,OAAMu1E,EAASj1E,O,IAE1F,IAWMk1E,EAAoB,W,IAEtBD,EADAvc,EAAQ,SACQ,QAAhBuc,EAAAA,EAASj1E,eAATi1E,IAAAA,GAAAA,EAAkB9rC,OACtB,EAEA,OACI,gBAAC0rC,G,uUAAAA,CAAAA,CACGpkE,MAAOA,EACPqkE,WAAqB,SAAT3zD,EACZ5d,QAAS2xE,EACTz0C,eAAct9B,GACVmE,GAEJ,gBAACnB,GAAAA,CACG3F,MAAOklE,EACP56B,OA1BO,SAACtlC,GACH,UAAT2b,IACAu3C,EAAQ,QACR5tB,EAAOtlC,EAAEzF,OAAOS,OAExB,EAsBYiI,SApBS,SAACjD,GAClBwvE,EAAaxvE,EAAEzF,OAAOS,MAC1B,EAmBY8mE,QAAS4N,EACTjhC,SAAUA,EACVuM,SAAmB,SAATr/B,EACV2zD,WAAqB,SAAT3zD,EACZsf,eAAc,GAAU,OAAPt9B,EAAO,UACxBzD,IAAKu1E,EACLzoE,UAAWA,EACXs0B,aAAY8f,IAEfx5C,GACG,gBAACo+B,GAAoBA,CACjBI,MAAO,QACPC,UAAWoO,EACXnO,WAAYmO,EACZxT,eAAc,GAAU,OAAPt9B,EAAO,sBAK5C,IAEJ4xE,GAAgBn7D,YAAc,kB,6kBCvH9B,IAYA,EAZwF,Y,IACpF+mB,EAAAA,EAAAA,KACA19B,EAAAA,EAAAA,MACAyN,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,EAAAA,EAAAA,CAJHtgB,OACA19B,QACAyN,SACAD,U,OAGA,gBAACywC,EAAAA,E,sUAAOA,CAAAA,CAACC,QAAQ,sBAAsBzwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GAC/F,gBAACr9B,OAAAA,CAAKw9B,EAAE,mX,ECjBhB,G,8jBCSA,IAYA,EAZ0F,Y,IACtFzgB,EAAAA,EAAAA,KACA19B,EAAAA,EAAAA,MACAyN,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,EAAAA,EAAAA,CAJHtgB,OACA19B,QACAyN,SACAD,U,OAGA,gBAACywC,EAAAA,E,sUAAOA,CAAAA,CAACC,QAAQ,sBAAsBzwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GAC/F,gBAACr9B,OAAAA,CAAKw9B,EAAE,mf,ECjBhB,G,6jBCSA,IAMA,EANa,Y,IAAGzgB,EAAAA,EAAAA,KAAM19B,EAAAA,EAAAA,MAAOyN,EAAAA,EAAAA,OAAQD,EAAAA,EAAAA,MAAUwwC,EAAAA,EAAAA,EAAAA,CAA/BtgB,OAAM19B,QAAOyN,SAAQD,U,OACjC,gBAACywC,EAAAA,E,sUAAOA,CAAAA,CAACC,QAAQ,sBAAsBzwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GAC/F,gBAACr9B,OAAAA,CAAKw9B,EAAE,qtB,ECXhB,G,ihCCOA,IAkDA,EAlD8F,Y,IAC1F1wC,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,EAAAA,EAAAA,CAFHvwC,SACAD,U,OAGA,gBAACywC,EAAAA,E,sUAAOA,CAAAA,CAACC,QAAQ,cAAczwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAO,mBAAuBg+C,GACvF,gBAACr9B,OAAAA,CACGw9B,EAAE,wJACFzgB,KAAK,YAET,gBAACw0C,OAAAA,CAAKx0C,KAAK,OAAOjwB,OAAO,SAAS0kE,GAAG,QAAQ3kE,MAAM,SAASuc,EAAE,QAAQ00B,EAAE,WACxE,gBAAC99B,OAAAA,CACGw9B,EAAE,kpBACFzgB,KAAK,YAET,gBAAC/c,OAAAA,CACGw9B,EAAE,ofACFzgB,KAAK,YAET,gBAACw0C,OAAAA,CAAKx0C,KAAK,OAAOjwB,OAAO,SAAS0kE,GAAG,MAAM3kE,MAAM,SAASuc,EAAE,SAAS00B,EAAE,WACvE,gBAACyzB,OAAAA,CAAKx0C,KAAK,OAAOjwB,OAAO,SAAS0kE,GAAG,MAAM3kE,MAAM,SAASuc,EAAE,QAAQ00B,EAAE,WACtE,gBAAC99B,OAAAA,CACGw9B,EAAE,mHACFzgB,KAAK,YAET,gBAAC/c,OAAAA,CAAKw9B,EAAE,uDAAuDzgB,KAAK,YACpE,gBAAC/c,OAAAA,CACGw9B,EAAE,0FACFzgB,KAAK,YAET,gBAAC/c,OAAAA,CACGw9B,EAAE,oHACFzgB,KAAK,YAET,gBAAC00C,SAAAA,CAAOC,GAAG,SAASC,GAAG,SAAS50C,KAAK,OAAOgU,EAAE,UAC9C,gBAACC,IAAAA,CAAEjU,KAAK,WACJ,gBAAC/c,OAAAA,CAAKw9B,EAAE,iJACR,gBAACx9B,OAAAA,CAAKw9B,EAAE,mJACR,gBAACx9B,OAAAA,CAAKw9B,EAAE,mJACR,gBAACx9B,OAAAA,CAAKw9B,EAAE,0DACR,gBAACx9B,OAAAA,CAAKw9B,EAAE,+EACR,gBAACx9B,OAAAA,CAAKw9B,EAAE,iFAEZ,gBAACx9B,OAAAA,CAAKw9B,EAAE,2EAA2EzgB,KAAK,YACxF,gBAAC/c,OAAAA,CAAKw9B,EAAE,+EAA+EzgB,KAAK,YAC5F,gBAAC/c,OAAAA,CAAKw9B,EAAE,yEAAyEzgB,KAAK,YACtF,gBAAC/c,OAAAA,CAAKw9B,EAAE,+EAA+EzgB,KAAK,Y,ECrDpG,ICSA,I,kgBCAA,IAeA,EAfwF,Y,IACpFA,EAAAA,EAAAA,KACA19B,EAAAA,EAAAA,MACAyN,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,EAAAA,EAAAA,CAJHtgB,OACA19B,QACAyN,SACAD,U,OAGA,gBAACywC,EAAAA,E,sUAAOA,CAAAA,CAACC,QAAQ,sBAAsBzwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GAC/F,gBAACrM,IAAAA,KACG,gBAAChxB,OAAAA,CAAKw9B,EAAE,wPACR,gBAACx9B,OAAAA,CAAKw9B,EAAE,md,ECnBpB,I,4eCSA,IAYA,EAZwF,Y,IACpFzgB,EAAAA,EAAAA,KACA19B,EAAAA,EAAAA,MACAyN,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,EAAAA,EAAAA,CAJHtgB,OACA19B,QACAyN,SACAD,U,OAGA,gBAACywC,EAAAA,E,sUAAOA,CAAAA,CAACC,QAAQ,sBAAsBzwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GAC/F,gBAACr9B,OAAAA,CAAKw9B,EAAE,4Y,ECjBhB,I,4eCSA,IAYA,EAZkF,Y,IAC9EzgB,EAAAA,EAAAA,KACA19B,EAAAA,EAAAA,MACAyN,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,EAAAA,EAAAA,CAJHtgB,OACA19B,QACAyN,SACAD,U,OAGA,gBAACywC,EAAAA,E,sUAAOA,CAAAA,CAACC,QAAQ,oBAAoBzwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GAC7F,gBAACr9B,OAAAA,CAAKw9B,EAAE,0sB,ECjBhB,I,sfCSA,IAUA,EAVoB,Y,IAAGzgB,EAAAA,EAAAA,KAAM19B,EAAAA,EAAAA,MAAOyN,EAAAA,EAAAA,OAAQD,EAAAA,EAAAA,MAAUwwC,EAAAA,EAAAA,EAAAA,CAA/BtgB,OAAM19B,QAAOyN,SAAQD,U,OACxC,gBAACywC,EAAAA,E,sUAAOA,CAAAA,CAACC,QAAQ,gBAAgBzwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GACzF,gBAACr9B,OAAAA,CACG4xD,SAAS,UACTC,SAAS,UACTr0B,EAAE,2N,ECdd,I,4eCSA,IAUA,EAVa,Y,IAAGzgB,EAAAA,EAAAA,KAAM19B,EAAAA,EAAAA,MAAOyN,EAAAA,EAAAA,OAAQD,EAAAA,EAAAA,MAAUwwC,EAAAA,EAAAA,EAAAA,CAA/BtgB,OAAM19B,QAAOyN,SAAQD,U,OACjC,gBAACywC,EAAAA,E,sUAAOA,CAAAA,CAACC,QAAQ,gBAAgBzwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GACzF,gBAACr9B,OAAAA,CACG4xD,SAAS,UACTC,SAAS,UACTr0B,EAAE,sP,ECdd,I,4eCSA,IAwBA,EAxB4G,Y,IACxGzgB,EAAAA,EAAAA,KACA19B,EAAAA,EAAAA,MACAyN,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,EAAAA,EAAAA,CAJHtgB,OACA19B,QACAyN,SACAD,U,OAGA,gBAACywC,EAAAA,E,sUAAOA,CAAAA,CAACC,QAAQ,eAAezwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GACxF,gBAACr9B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,+LAEN,gBAACx9B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,iLAEN,gBAACx9B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,8WAEN,gBAACx9B,OAAAA,CAAK+c,KAAK,UAAUygB,EAAE,+D,EC7B/B,I,4eCSA,IAiEA,EAjEwG,Y,IACpGzgB,EAAAA,EAAAA,KACA19B,EAAAA,EAAAA,MACAyN,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,EAAAA,EAAAA,CAJHtgB,OACA19B,QACAyN,SACAD,U,OAGA,gBAACywC,EAAAA,E,sUAAOA,CAAAA,CAACC,QAAQ,kBAAkBzwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GAC3F,gBAACr9B,OAAAA,CAAK+c,KAAK,UAAUygB,EAAE,wFACvB,gBAACx9B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,qNAEN,gBAACx9B,OAAAA,CAAK+c,KAAK,UAAUygB,EAAE,oDACvB,gBAACx9B,OAAAA,CAAK+c,KAAK,UAAUygB,EAAE,oDACvB,gBAACx9B,OAAAA,CAAK+c,KAAK,UAAUygB,EAAE,oDACvB,gBAACx9B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,2RAEN,gBAACx9B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,8OAEN,gBAACi0B,SAAAA,CAAO10C,KAAK,UAAU20C,GAAG,OAAOC,GAAG,QAAQ5gC,EAAE,SAC9C,gBAAC0gC,SAAAA,CAAO10C,KAAK,UAAU20C,GAAG,OAAOC,GAAG,QAAQ5gC,EAAE,SAC9C,gBAAC0gC,SAAAA,CAAO10C,KAAK,UAAU20C,GAAG,KAAKC,GAAG,QAAQ5gC,EAAE,SAC5C,gBAAC/wB,OAAAA,CACG+c,KAAK,OACLygB,EAAE,wiBAEN,gBAACx9B,OAAAA,CAAK+c,KAAK,UAAUygB,EAAE,6DACvB,gBAACx9B,OAAAA,CAAK+c,KAAK,UAAUygB,EAAE,6DACvB,gBAAC+zB,OAAAA,CAAKx0C,KAAK,UAAU3T,EAAE,OAAO00B,EAAE,QAAQjxC,MAAM,MAAMC,OAAO,OAAO0kE,GAAG,SACrE,gBAACD,OAAAA,CAAKx0C,KAAK,UAAU3T,EAAE,QAAQ00B,EAAE,QAAQjxC,MAAM,MAAMC,OAAO,OAAO0kE,GAAG,SACtE,gBAACD,OAAAA,CAAKx0C,KAAK,UAAU3T,EAAE,QAAQ00B,EAAE,QAAQjxC,MAAM,MAAMC,OAAO,QAAQ0kE,GAAG,SACvE,gBAACxxD,OAAAA,CACG+c,KAAK,OACLygB,EAAE,6cAEN,gBAACx9B,OAAAA,CAAK+c,KAAK,UAAUygB,EAAE,qEACvB,gBAACx9B,OAAAA,CAAK+c,KAAK,UAAUygB,EAAE,qEACvB,gBAACx9B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,wGAEN,gBAACx9B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,8FAEN,gBAACx9B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,4GAEN,gBAACx9B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,+JAEN,gBAACx9B,OAAAA,CACG+c,KAAK,OACLygB,EAAE,4M,ECrEd,I,4eCSA,IAuBA,EAvB4G,Y,IACxGzgB,EAAAA,EAAAA,KACA19B,EAAAA,EAAAA,MACAyN,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,EAAAA,EAAAA,CAJHtgB,OACA19B,QACAyN,SACAD,U,OAGA,gBAACywC,EAAAA,E,sUAAOA,CAAAA,CAACC,QAAQ,eAAezwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GACxF,gBAACr9B,OAAAA,CAAK+c,KAAK,UAAUygB,EAAE,8EACvB,gBAACx9B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,2LAEN,gBAACx9B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,uMAEN,gBAAC+zB,OAAAA,CAAKx0C,KAAK,UAAU3T,EAAE,QAAQ00B,EAAE,QAAQjxC,MAAM,OAAOC,OAAO,OAAO0kE,GAAG,SACvE,gBAACD,OAAAA,CAAKx0C,KAAK,UAAU3T,EAAE,QAAQ00B,EAAE,QAAQjxC,MAAM,OAAOC,OAAO,QAAQ0kE,GAAG,SACxE,gBAACD,OAAAA,CAAKx0C,KAAK,UAAU3T,EAAE,QAAQ00B,EAAE,QAAQjxC,MAAM,OAAOC,OAAO,OAAO0kE,GAAG,S,EC5B/E,I,4eCSA,IAqCA,EArCgG,Y,IAC5Fz0C,EAAAA,EAAAA,KACA19B,EAAAA,EAAAA,MACAyN,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,EAAAA,EAAAA,CAJHtgB,OACA19B,QACAyN,SACAD,U,OAGA,gBAACywC,EAAAA,E,sUAAOA,CAAAA,CAACC,QAAQ,kBAAkBzwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GAC3F,gBAACr9B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,6vBAEN,gBAACx9B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,kXAEN,gBAAC+zB,OAAAA,CAAKx0C,KAAK,UAAU3T,EAAE,MAAM00B,EAAE,QAAQjxC,MAAM,MAAMC,OAAO,OAAO0kE,GAAG,SACpE,gBAACD,OAAAA,CAAKx0C,KAAK,UAAU3T,EAAE,OAAO00B,EAAE,QAAQjxC,MAAM,MAAMC,OAAO,OAAO0kE,GAAG,SACrE,gBAACD,OAAAA,CAAKx0C,KAAK,UAAU3T,EAAE,MAAM00B,EAAE,QAAQjxC,MAAM,MAAMC,OAAO,OAAO0kE,GAAG,SACpE,gBAACD,OAAAA,CAAKx0C,KAAK,UAAU3T,EAAE,OAAO00B,EAAE,QAAQjxC,MAAM,MAAMC,OAAO,OAAO0kE,GAAG,SACrE,gBAACD,OAAAA,CAAKx0C,KAAK,UAAU3T,EAAE,MAAM00B,EAAE,QAAQjxC,MAAM,MAAMC,OAAO,OAAO0kE,GAAG,SACpE,gBAACD,OAAAA,CAAKx0C,KAAK,UAAU3T,EAAE,OAAO00B,EAAE,QAAQjxC,MAAM,MAAMC,OAAO,OAAO0kE,GAAG,SACrE,gBAACD,OAAAA,CAAKx0C,KAAK,UAAU3T,EAAE,QAAQ00B,EAAE,QAAQjxC,MAAM,MAAMC,OAAO,OAAO0kE,GAAG,SACtE,gBAACD,OAAAA,CAAKx0C,KAAK,UAAU3T,EAAE,OAAO00B,EAAE,QAAQjxC,MAAM,MAAMC,OAAO,OAAO0kE,GAAG,SACrE,gBAACD,OAAAA,CAAKx0C,KAAK,UAAU3T,EAAE,OAAO00B,EAAE,QAAQjxC,MAAM,MAAMC,OAAO,OAAO0kE,GAAG,SACrE,gBAACxxD,OAAAA,CAAK+c,KAAK,UAAUygB,EAAE,8EACvB,gBAACx9B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,gKAEN,gBAACx9B,OAAAA,CACG+c,KAAK,OACLygB,EAAE,yG,ECzCd,I,4eCSA,IAgGA,EAhGyE,Y,IACrEzgB,EAAAA,EAAAA,KACA19B,EAAAA,EAAAA,MACAyN,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,EAAAA,EAAAA,CAJHtgB,OACA19B,QACAyN,SACAD,U,OAGA,gBAACywC,EAAAA,E,sUAAOA,CAAAA,CAACC,QAAQ,oBAAoBzwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GAC7F,gBAACrM,IAAAA,CAAExuC,GAAG,UAAUsvE,YAAU,WACtB,gBAAC9gC,IAAAA,CAAExuC,GAAG,YAAYsvE,YAAU,WACxB,gBAACP,OAAAA,CAAKx0C,KAAK,UAAU3T,EAAE,OAAO00B,EAAE,OAAOjxC,MAAM,SAASC,OAAO,SAAS0kE,GAAG,SACzE,gBAACxgC,IAAAA,CAAE+gC,QAAQ,OACP,gBAAC/xD,OAAAA,CAAK+c,KAAK,OAAOygB,EAAE,2DAExB,gBAACi0B,SAAAA,CAAO10C,KAAK,OAAO20C,GAAG,QAAQC,GAAG,QAAQ5gC,EAAE,SAC5C,gBAAC0gC,SAAAA,CAAO10C,KAAK,OAAO20C,GAAG,QAAQC,GAAG,QAAQ5gC,EAAE,SAC5C,gBAAC0gC,SAAAA,CAAO10C,KAAK,OAAO20C,GAAG,QAAQC,GAAG,QAAQ5gC,EAAE,SAC5C,gBAAC/wB,OAAAA,CACG+c,KAAK,UACLygB,EAAE,yHACFE,UAAU,0CAEd,gBAAC19B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,8GACFE,UAAU,0CAEd,gBAAC6zB,OAAAA,CACGx0C,KAAK,UACL3T,EAAE,SACF00B,EAAE,QACFjxC,MAAM,OACNC,OAAO,QACP4wC,UAAU,0CAEd,gBAAC6zB,OAAAA,CACGx0C,KAAK,UACL3T,EAAE,SACF00B,EAAE,QACFjxC,MAAM,OACNC,OAAO,QACP4wC,UAAU,yCAEd,gBAAC1M,IAAAA,CAAEghC,iBAAe,WACd,gBAAChyD,OAAAA,CACG+c,KAAK,UACLygB,EAAE,sGAGV,gBAACi0B,SAAAA,CAAO10C,KAAK,UAAU20C,GAAG,QAAQC,GAAG,QAAQ5gC,EAAE,UAC/C,gBAAC/wB,OAAAA,CACG+c,KAAK,OACLygB,EAAE,0mBAEN,gBAACi0B,SAAAA,CAAO10C,KAAK,UAAU20C,GAAG,SAASC,GAAG,QAAQ5gC,EAAE,UAChD,gBAAC/wB,OAAAA,CACG+c,KAAK,OACLygB,EAAE,mmBAEN,gBAACx9B,OAAAA,CAAK+c,KAAK,UAAUygB,EAAE,mEACvB,gBAACx9B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,mFAEN,gBAACgc,UAAAA,CAAQz8B,KAAK,UAAU08B,OAAO,mEAC/B,gBAACD,UAAAA,CAAQz8B,KAAK,UAAU08B,OAAO,mEAC/B,gBAACz5C,OAAAA,CACG+c,KAAK,UACLygB,EAAE,weAEN,gBAACx9B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,4aAEN,gBAAC+zB,OAAAA,CACGx0C,KAAK,UACL3T,EAAE,SACF00B,EAAE,SACFjxC,MAAM,OACNC,OAAO,OACP4wC,UAAU,2CAEd,gBAAC19B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,uTAEN,gBAACx9B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,uRAEN,gBAACi0B,SAAAA,CAAO10C,KAAK,UAAU20C,GAAG,SAASC,GAAG,QAAQ5gC,EAAE,W,ECnGhE,I,4eCSA,IA8BA,GA9BwG,Y,IACpGhU,EAAAA,EAAAA,KACA19B,EAAAA,EAAAA,MACAyN,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,EAAAA,EAAAA,CAJHtgB,OACA19B,QACAyN,SACAD,U,OAGA,gBAACywC,EAAAA,E,sUAAOA,CAAAA,CAACC,QAAQ,kBAAkBzwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GAC3F,gBAACr9B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,0sBAEN,gBAAC+zB,OAAAA,CAAKx0C,KAAK,UAAU3T,EAAE,OAAO00B,EAAE,QAAQjxC,MAAM,OAAOC,OAAO,QAAQ0kE,GAAG,SACvE,gBAACD,OAAAA,CAAKx0C,KAAK,UAAU3T,EAAE,QAAQ00B,EAAE,QAAQjxC,MAAM,OAAOC,OAAO,QAAQ0kE,GAAG,SACxE,gBAACxxD,OAAAA,CACG+c,KAAK,UACLygB,EAAE,4HAEN,gBAAC+zB,OAAAA,CAAKx0C,KAAK,UAAU3T,EAAE,QAAQ00B,EAAE,QAAQjxC,MAAM,OAAOC,OAAO,QAAQ0kE,GAAG,SACxE,gBAACxxD,OAAAA,CACG+c,KAAK,UACLygB,EAAE,yWAEN,gBAACx9B,OAAAA,CACG+c,KAAK,UACLygB,EAAE,4H,EClCd,M,8eCSA,IAMA,GANe,Y,IAAGzgB,EAAAA,EAAAA,KAAM19B,EAAAA,EAAAA,MAAOyN,EAAAA,EAAAA,OAAQD,EAAAA,EAAAA,MAAUwwC,EAAAA,GAAAA,EAAAA,CAA/BtgB,OAAM19B,QAAOyN,SAAQD,U,OACnC,gBAACywC,EAAAA,E,uUAAOA,CAAAA,CAACC,QAAQ,cAAczwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GACvF,gBAACr9B,OAAAA,CAAKw9B,EAAE,sb,ECXhB,M,8eCSA,IAeA,GAfkF,Y,IAC9EzgB,EAAAA,EAAAA,KACA19B,EAAAA,EAAAA,MACAyN,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,GAAAA,EAAAA,CAJHtgB,OACA19B,QACAyN,SACAD,U,OAGA,gBAACywC,EAAAA,E,uUAAOA,CAAAA,CAACC,QAAQ,sBAAsBzwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GAC/F,gBAACr9B,OAAAA,CACGw9B,EAAE,+IACFE,UAAU,4B,ECnBtB,M,ufCSA,IAkBA,GAlB4F,Y,IACxF3gB,EAAAA,EAAAA,KACA19B,EAAAA,EAAAA,MACAyN,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,GAAAA,EAAAA,CAJHtgB,OACA19B,QACAyN,SACAD,U,OAGA,gBAACywC,EAAAA,E,uUAAOA,CAAAA,CAACC,QAAQ,cAAczwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GACvF,gBAACrM,IAAAA,CAAEjU,KAAMA,EAAM60C,SAAS,WACpB,gBAAC5xD,OAAAA,CACGw9B,EAAE,ujBACFy0B,YAAY,QAEhB,gBAACjyD,OAAAA,CAAKw9B,EAAE,6R,ECtBpB,M,8eCSA,IAYA,GAZ0E,Y,IACtEzgB,EAAAA,EAAAA,KACA19B,EAAAA,EAAAA,MACAyN,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,GAAAA,EAAAA,CAJHtgB,OACA19B,QACAyN,SACAD,U,OAGA,gBAACywC,EAAAA,E,uUAAOA,CAAAA,CAACC,QAAQ,sBAAsBzwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GAC/F,gBAACr9B,OAAAA,CAAKw9B,EAAE,yF,ECjBhB,M,8eCSA,IAYA,GAZ4E,Y,IACxEzgB,EAAAA,EAAAA,KACA19B,EAAAA,EAAAA,MACAyN,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,GAAAA,EAAAA,CAJHtgB,OACA19B,QACAyN,SACAD,U,OAGA,gBAACywC,EAAAA,E,uUAAOA,CAAAA,CAACC,QAAQ,cAAczwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GACvF,gBAACr9B,OAAAA,CAAKw9B,EAAE,4W,ECjBhB,K,8jBCSA,IAYA,EAZ0E,Y,IACtEzgB,EAAAA,EAAAA,KACA19B,EAAAA,EAAAA,MACAyN,EAAAA,EAAAA,OACAD,EAAAA,EAAAA,MACGwwC,EAAAA,EAAAA,EAAAA,CAJHtgB,OACA19B,QACAyN,SACAD,U,OAGA,gBAACywC,EAAAA,E,sUAAOA,CAAAA,CAACC,QAAQ,kBAAkBzwC,OAAQA,EAAQD,MAAOA,EAAOxN,MAAOA,EAAO09B,KAAMA,GAAUsgB,GAC3F,gBAACr9B,OAAAA,CAAKw9B,EAAE,ogB,ECjBhB,G,qsBCWA,IAAM00B,E,SAAWh0E,GAAOi0E,IAAG,KAmB3B,IAfgF,Y,IAC5E71C,EAAAA,EAAAA,SACAS,EAAAA,EAAAA,KACA19B,EAAAA,EAAAA,MACAwN,EAAAA,EAAAA,MACAC,EAAAA,EAAAA,OACAywC,EAAAA,EAAAA,QACGF,EAAAA,EAAAA,EAAAA,CANH/gB,WACAS,OACA19B,QACAwN,QACAC,SACAywC,Y,OAGA,gBAAC20B,E,sUAAAA,CAAAA,CAAS30B,QAASA,EAASxgB,KAAMA,EAAMlwB,MAAOA,EAAOC,OAAQA,GAAYuwC,GACrEh+C,GAAS,gBAACA,QAAAA,KAAOA,GACjBi9B,E","sources":["webpack://spotlight.web/./ModernScripts/Spotlight/Hooks/useClickOutside.tsx","webpack://spotlight.web/./ModernScripts/Spotlight/Hooks/usePrevious.tsx","webpack://spotlight.web/./ModernScripts/Spotlight/ManageAccount/TwoStepAuth/helpers.ts","webpack://spotlight.web/./ModernScripts/Spotlight/ManageAccount/session-timeout-modal.tsx","webpack://spotlight.web/./ModernScripts/Spotlight/Signup/sustain-signup-finish.tsx","webpack://spotlight.web/./ModernScripts/Spotlight/Signup/sustain-signup-first.tsx","webpack://spotlight.web/./ModernScripts/Spotlight/Signup/sustain-signup-second.tsx","webpack://spotlight.web/./ModernScripts/Spotlight/Signup/sustain-signup.tsx","webpack://spotlight.web/./ModernScripts/Spotlight/Signup/render-sustain-signup.ts","webpack://spotlight.web/./Scripts/Spotlight/Helpers/app-routes.ts","webpack://spotlight.web/./Scripts/Spotlight/Helpers/feature-flags.ts","webpack://spotlight.web/./Scripts/Spotlight/Helpers/log.ts","webpack://spotlight.web/./Scripts/Spotlight/Helpers/import-helper.ts","webpack://spotlight.web/./Scripts/Spotlight/Helpers/json.ts","webpack://spotlight.web/./Scripts/Spotlight/Helpers/date-helpers.ts","webpack://spotlight.web/./Scripts/Spotlight/Helpers/product-type.ts","webpack://spotlight.web/./Scripts/Spotlight/Helpers/show-toast-alert.tsx","webpack://spotlight.web/./Scripts/Spotlight/Models/Constants.ts","webpack://spotlight.web/./Scripts/Spotlight/Models/countries.ts","webpack://spotlight.web/./Scripts/Spotlight/Services/Endpoints.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Actions/NotificationsActions.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Actions/NotificationsMenuActions.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Actions/ReportHistoryActions.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Actions/SidebarActions.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Actions/WhatsNewActions.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Reducers/DataImportReducer.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Actions/ExportActions.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Reducers/ExportReducer.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Reducers/NotificationsMenuReducer.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Reducers/NotificationsReducer.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Actions/OrganisationSettingsActions.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Reducers/OrganisationSettingsReducer.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Actions/OrganisationsActions.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Reducers/OrganisationsReducer.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Actions/PracticeSettingsActions.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Reducers/PracticeSettingsReducer.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Reducers/ReportExportReducer.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Reducers/ReportHistoryReducer.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Actions/SectionOptionsActions.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Reducers/SectionOptionsReducer.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Reducers/SidebarReducer.ts","webpack://spotlight.web/./Scripts/Spotlight/Store/Reducers/WhatsNewReducer.ts","webpack://spotlight.web/./Scripts/Spotlight/Utilities/sort.ts","webpack://spotlight.web/./Scripts/Spotlight/render.tsx","webpack://spotlight.web/./ui/components/alert/alert.tsx","webpack://spotlight.web/./ui/packages/constants/constants.ts","webpack://spotlight.web/./ui/packages/constants/themes.ts","webpack://spotlight.web/./ui/components/loading-spinner/loading-spinner.tsx","webpack://spotlight.web/./ui/components/loading-spinner/images/spinner-black.ts","webpack://spotlight.web/./ui/components/loading-spinner/images/spinner-white.ts","webpack://spotlight.web/./ui/components/button/button.tsx","webpack://spotlight.web/./ui/components/collapsible-band/collapsible-band.tsx","webpack://spotlight.web/./ui/components/collapsible-band/index.ts","webpack://spotlight.web/./ui/components/grid-row/grid-row.tsx","webpack://spotlight.web/./ui/components/grid-col/grid-col.tsx","webpack://spotlight.web/./ui/components/loading-screen/loading-screen.tsx","webpack://spotlight.web/./ui/components/modal/modal.tsx","webpack://spotlight.web/./ui/components/search-filter/search-filter.tsx","webpack://spotlight.web/./ui/components/chart-selector/atoms/chart-group/chart-group.tsx","webpack://spotlight.web/./ui/components/chart-selector/atoms/chart-icon/chart-icon.tsx","webpack://spotlight.web/./ui/components/chart-selector/atoms/chart-info/chart-info.tsx","webpack://spotlight.web/./ui/components/chart-selector/chart-selector.tsx","webpack://spotlight.web/./ui/components/tabs/tabs.tsx","webpack://spotlight.web/./ui/components/tabs/index.ts","webpack://spotlight.web/./ui/components/color-picker/atoms/color-picker-palette/color-picker-palette.tsx","webpack://spotlight.web/./ui/components/color-picker/atoms/custom-color-picker/custom-color-picker-fields.tsx","webpack://spotlight.web/./ui/components/color-picker/helper.ts","webpack://spotlight.web/./ui/components/color-picker/atoms/custom-color-picker/custom-color-picker-pointer.tsx","webpack://spotlight.web/./ui/components/color-picker/atoms/custom-color-picker/custom-color-picker.tsx","webpack://spotlight.web/./ui/components/color-picker/color-picker.tsx","webpack://spotlight.web/./ui/components/color-picker-popover/color-picker-popover.tsx","webpack://spotlight.web/./ui/components/gallery-browser/atoms/item-group/item-group.tsx","webpack://spotlight.web/./ui/components/gallery-icon/gallery-icon.tsx","webpack://spotlight.web/./ui/components/gallery-browser/gallery-browser.tsx","webpack://spotlight.web/./ui/components/gallery-item-info/gallery-item-info.tsx","webpack://spotlight.web/./ui/components/modal-confirm/modal-confirm.tsx","webpack://spotlight.web/./ui/components/breadcrumbs/breadcrumbs.tsx","webpack://spotlight.web/./ui/components/step-process/step-process.tsx","webpack://spotlight.web/./ui/components/text/text.tsx","webpack://spotlight.web/./ui/components/helper-modal/helper-modal.tsx","webpack://spotlight.web/./ui/components/text-input/text-input.tsx","webpack://spotlight.web/./ui/components/text-field-inline/text-field-inline.tsx","webpack://spotlight.web/./ui/components/radio-input/radio-input.tsx","webpack://spotlight.web/./ui/components/checkbox-input/checkbox-input.tsx","webpack://spotlight.web/./ui/components/tracking-settings/tracking-settings-enums.ts","webpack://spotlight.web/./ui/components/tree-collapse/tree-collapse.tsx","webpack://spotlight.web/./ui/components/select-field/select-field.tsx","webpack://spotlight.web/./ui/components/tracking-settings/atoms/TreeCollapseWrapper/tree-collapse-wrapper.tsx","webpack://spotlight.web/./ui/components/tracking-settings/atoms/DataWrapper/data-wrapper.tsx","webpack://spotlight.web/./ui/components/tracking-settings/tracking-settings.tsx","webpack://spotlight.web/./ui/components/tab-button-group/tab-button-group.tsx","webpack://spotlight.web/./ui/components/tab-button-group/atoms/tab-button/tab-button.tsx","webpack://spotlight.web/./ui/components/password-input/password-input.tsx","webpack://spotlight.web/./ui/components/password-field/password-field.tsx","webpack://spotlight.web/./ui/components/number-input/number-input.tsx","webpack://spotlight.web/./ui/components/number-field/number-field.tsx","webpack://spotlight.web/./ui/components/number-field-inline/number-field-inline.tsx","webpack://spotlight.web/./ui/packages/icons/sort-number-asc/sort-number-asc.tsx","webpack://spotlight.web/./ui/packages/icons/sort-number-asc/index.ts","webpack://spotlight.web/./ui/packages/icons/sort-number-desc/sort-number-desc.tsx","webpack://spotlight.web/./ui/packages/icons/sort-number-desc/index.ts","webpack://spotlight.web/./ui/components/sort-number-asc-desc-field/sort-number-asc-desc-field.tsx","webpack://spotlight.web/./ui/components/preview/atoms/thumbnail/thumbnail.tsx","webpack://spotlight.web/./ui/components/preview/atoms/thumbnail/index.ts","webpack://spotlight.web/./ui/components/preview/preview-page.tsx","webpack://spotlight.web/./ui/components/preview/preview-content.tsx","webpack://spotlight.web/./ui/components/preview/preview-navigation-buttons.tsx","webpack://spotlight.web/./ui/components/preview/preview-pagination.tsx","webpack://spotlight.web/./ui/components/preview/preview.tsx","webpack://spotlight.web/./ui/components/preview/index.ts","webpack://spotlight.web/./ui/packages/icons/circle-with-plus/circle-with-plus.tsx","webpack://spotlight.web/./ui/packages/icons/circle-with-plus/index.ts","webpack://spotlight.web/./ui/packages/icons/circle-with-minus/circle-with-minus.tsx","webpack://spotlight.web/./ui/packages/icons/circle-with-minus/index.ts","webpack://spotlight.web/./ui/packages/icons/elimination/elimination.tsx","webpack://spotlight.web/./ui/packages/icons/elimination/index.ts","webpack://spotlight.web/./ui/components/data-grid/atoms/icons/icons.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/account-row/account-row.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/account-cell/account-cell.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/account-cell-input/account-cell-input.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/accounts-list/accounts-list.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/accounts-panel/accounts-panel.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/data-grid-scroller/data-grid-scroller.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/add-fy-totals/add-fy-total.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/table/table.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/fy-total-column/fy-total-column.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/header-cell/header-cell.tsx","webpack://spotlight.web/./ui/components/data-grid/atoms/header/header.tsx","webpack://spotlight.web/./ui/components/data-grid/data-grid.tsx","webpack://spotlight.web/./ui/components/data-table/data-table.tsx","webpack://spotlight.web/./ui/packages/icons/triangle-down/triangle-down.tsx","webpack://spotlight.web/./ui/packages/icons/triangle-down/index.ts","webpack://spotlight.web/./ui/components/multi-select-input/multi-select-input.tsx","webpack://spotlight.web/./ui/components/multi-select/multi-select.tsx","webpack://spotlight.web/./ui/components/month-date-picker/month-date-picker.tsx","webpack://spotlight.web/./ui/components/month-date-picker-field/month-date-picker-field.tsx","webpack://spotlight.web/./ui/components/AutoCompleteTextInput/AutoCompleteTextInput.tsx","webpack://spotlight.web/./ui/components/AutoCompleteTextField/AutoCompleteTextField.tsx","webpack://spotlight.web/./ui/components/release-notes/atoms/icons/icons.tsx","webpack://spotlight.web/./ui/components/release-notes/atoms/article/article.tsx","webpack://spotlight.web/./ui/components/release-notes/atoms/images/images.tsx","webpack://spotlight.web/./ui/components/release-notes/release-notes.tsx","webpack://spotlight.web/./ui/components/menu-list/menu-list.tsx","webpack://spotlight.web/./ui/components/dropdown-menu/dropdown-menu.tsx","webpack://spotlight.web/./ui/components/select-menu/atoms/select-menu-button.tsx","webpack://spotlight.web/./ui/components/select-menu/select-menu.tsx","webpack://spotlight.web/./ui/components/select-menu-field/select-menu-field.tsx","webpack://spotlight.web/./ui/components/inline-text-input/inline-text-input.tsx","webpack://spotlight.web/./ui/packages/icons/chevron-left/chevron-left.tsx","webpack://spotlight.web/./ui/packages/icons/chevron-left/index.ts","webpack://spotlight.web/./ui/packages/icons/chevron-right/chevron-right.tsx","webpack://spotlight.web/./ui/packages/icons/chevron-right/index.ts","webpack://spotlight.web/./ui/packages/icons/edit/edit.tsx","webpack://spotlight.web/./ui/packages/icons/edit/index.ts","webpack://spotlight.web/./ui/packages/icons/additional-page/additional-page.tsx","webpack://spotlight.web/./ui/packages/icons/additional-page/index.ts","webpack://spotlight.web/./ui/packages/icons/arrow-right/arrow-right.tsx","webpack://spotlight.web/./ui/packages/icons/circle-with-x/circle-with-x.tsx","webpack://spotlight.web/./ui/packages/icons/circle-with-x/index.ts","webpack://spotlight.web/./ui/packages/icons/circled-tick/circled-tick.tsx","webpack://spotlight.web/./ui/packages/icons/circled-tick/index.ts","webpack://spotlight.web/./ui/packages/icons/circled-x/circled-x.tsx","webpack://spotlight.web/./ui/packages/icons/circled-x/index.ts","webpack://spotlight.web/./ui/packages/icons/exclamation/exclamation.tsx","webpack://spotlight.web/./ui/packages/icons/exclamation/index.ts","webpack://spotlight.web/./ui/packages/icons/info/info.tsx","webpack://spotlight.web/./ui/packages/icons/info/index.ts","webpack://spotlight.web/./ui/packages/icons/new-release-all-products/new-release-all-products.tsx","webpack://spotlight.web/./ui/packages/icons/new-release-all-products/index.ts","webpack://spotlight.web/./ui/packages/icons/new-release-dashboard/new-release-dashboard.tsx","webpack://spotlight.web/./ui/packages/icons/new-release-dashboard/index.ts","webpack://spotlight.web/./ui/packages/icons/new-release-forecasting/new-release-forecasting.tsx","webpack://spotlight.web/./ui/packages/icons/new-release-forecasting/index.ts","webpack://spotlight.web/./ui/packages/icons/new-release-multi/new-release-multi.tsx","webpack://spotlight.web/./ui/packages/icons/new-release-multi/index.ts","webpack://spotlight.web/./ui/packages/icons/new-release-no-data/new-release-no-data.tsx","webpack://spotlight.web/./ui/packages/icons/new-release-no-data/index.ts","webpack://spotlight.web/./ui/packages/icons/new-release-reporting/new-release-reporting.tsx","webpack://spotlight.web/./ui/packages/icons/new-release-reporting/index.ts","webpack://spotlight.web/./ui/packages/icons/search/search.tsx","webpack://spotlight.web/./ui/packages/icons/search/index.ts","webpack://spotlight.web/./ui/packages/icons/sort-down/sort-down.tsx","webpack://spotlight.web/./ui/packages/icons/sort-down/index.ts","webpack://spotlight.web/./ui/packages/icons/spotlight-logo/spotlight-logo.tsx","webpack://spotlight.web/./ui/packages/icons/spotlight-logo/index.ts","webpack://spotlight.web/./ui/packages/icons/tick/tick.tsx","webpack://spotlight.web/./ui/packages/icons/tick/index.ts","webpack://spotlight.web/./ui/packages/icons/trash/trash.tsx","webpack://spotlight.web/./ui/packages/icons/trash/index.ts","webpack://spotlight.web/./ui/packages/icons/star/star.tsx","webpack://spotlight.web/./ui/packages/icons/star/index.ts","webpack://spotlight.web/./ui/packages/icons/svg-base/svg-base.tsx"],"sourcesContent":["import { MutableRefObject, useEffect } from 'react';\r\n\r\n/**\r\n * Helper to handle reacting to a click outside a given element.\r\n * Accepts a ref to the element to monitor for clicks outside of it\r\n * and a function to execute in response.\r\n */\r\nexport const useClickOutside = (\r\n ref: MutableRefObject,\r\n handler: (event: MouseEvent) => void,\r\n): void => {\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n const target = event.target as Element;\r\n if (ref.current && target && !ref.current.contains(target)) {\r\n handler(event);\r\n }\r\n };\r\n window.setTimeout(() => {\r\n document.removeEventListener('click', handleClickOutside);\r\n document.addEventListener('click', handleClickOutside);\r\n }, 0);\r\n return () => {\r\n document.removeEventListener('click', handleClickOutside);\r\n };\r\n }, [ref, handler]);\r\n};\r\n","import { useEffect, useRef } from 'react';\r\n\r\nexport const usePrevious = (value: T): T | undefined => {\r\n const ref = useRef();\r\n useEffect(() => {\r\n ref.current = value;\r\n });\r\n return ref.current;\r\n};\r\n","import { countryGroups } from '../../../../Scripts/Spotlight/Models/countries';\r\n\r\nexport const maskEmail = (email: string): string => {\r\n if (!email.includes('@')) {\r\n return;\r\n }\r\n\r\n const maskUsername = (username: string) => {\r\n const usernameFirstChar = username.charAt(0);\r\n let maskedUsername = usernameFirstChar + '***';\r\n\r\n // if the username part of the email is more than 4 characters, show the first and last character\r\n // otherwise only show the first character\r\n if (username.length > 4) {\r\n const usernameLastChar = username.charAt(username.length - 1);\r\n maskedUsername += usernameLastChar;\r\n }\r\n\r\n return maskedUsername;\r\n };\r\n\r\n const maskDomain = (domain: string) => {\r\n let maskedDomain: string;\r\n const hasTopLevelDomain = domain.includes('.');\r\n\r\n if (hasTopLevelDomain) {\r\n const splitDomain = domain.split('.');\r\n\r\n const topLevelDomain = splitDomain[splitDomain.length - 1];\r\n const domainName = splitDomain.slice(0, splitDomain.length - 1).join('.');\r\n const domainNameFirstChar = domainName.charAt(0);\r\n\r\n maskedDomain = domainNameFirstChar + '***';\r\n\r\n // If the domain name is more than 4 characters, show and the first and last character\r\n // otherwise only show the first character\r\n if (domainName.length > 4) {\r\n const domainNameLastChar = domainName.charAt(domainName.length - 1);\r\n maskedDomain += domainNameLastChar;\r\n }\r\n\r\n maskedDomain += `.${topLevelDomain}`;\r\n } else {\r\n const domainFirstChar = domain.charAt(0);\r\n maskedDomain = domainFirstChar + '***';\r\n\r\n // If the domain is more than 4 characters, show and the first and last character\r\n // otherwise only show the first character\r\n if (domain.length > 4) {\r\n const domainLastChar = domain.charAt(domain.length - 1);\r\n maskedDomain += domainLastChar;\r\n }\r\n }\r\n\r\n return maskedDomain;\r\n };\r\n\r\n const splitEmail = email.split('@');\r\n const username = splitEmail[0];\r\n const domain = splitEmail[1];\r\n\r\n const maskedEmail = `${maskUsername(username)}@${maskDomain(domain)}`;\r\n return maskedEmail;\r\n};\r\n\r\nexport const maskPhoneNumber = (phoneNumber: string): string => {\r\n // Strip any white spaces and any non numeric characters, i.e. +64 becomes 64\r\n const strippedPhoneNumber = phoneNumber.replace(/[^0-9]/g, '');\r\n\r\n if (strippedPhoneNumber.length === 0) {\r\n return '***';\r\n }\r\n\r\n let maskedDomain = '***';\r\n // if the phone number has more than 4 characters, show the last 4 characters\r\n // otherwise only show the last character\r\n if (strippedPhoneNumber.length > 4) {\r\n maskedDomain += strippedPhoneNumber.slice(-4);\r\n } else {\r\n maskedDomain += strippedPhoneNumber.slice(-1);\r\n }\r\n\r\n return maskedDomain;\r\n};\r\n\r\n/**\r\n * Splits the provided phone number into an iso3 country code and local phone number\r\n * Makes some assumptions about possible country codes that means this is not 100% accurate\r\n * e.g. if there are multiple countries with the same code, returns the first one it finds.\r\n */\r\n// TODO: We should either store the user's country code, or get it based on their location\r\nexport const splitPhoneNumber = (phoneNumber: string): { countryIso3Code: string; localNumber: string } => {\r\n // Strip any white spaces and any non numeric characters, i.e. +64 becomes 64\r\n const strippedPhoneNumber = phoneNumber.replace(/[^0-9]/g, '');\r\n const countries = countryGroups.flatMap((countryGroup) => countryGroup.countries);\r\n\r\n let iso3: string;\r\n let codeLength = 1;\r\n\r\n // get the country iso3 code\r\n for (; codeLength < 4; codeLength++) {\r\n if (strippedPhoneNumber.length < codeLength) {\r\n break;\r\n }\r\n\r\n const countryCode = strippedPhoneNumber.slice(0, codeLength);\r\n const country = countries.find((country) => country.countryCode === countryCode);\r\n\r\n if (country) {\r\n iso3 = country.iso3;\r\n break;\r\n }\r\n }\r\n\r\n const localNumber = !iso3 ? strippedPhoneNumber : strippedPhoneNumber.slice(codeLength);\r\n\r\n return {\r\n countryIso3Code: iso3,\r\n localNumber: localNumber,\r\n };\r\n};\r\n","import * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { Modal, ModalButtonGroup } from '../Common/Modal/modal';\r\nimport { ModernButton } from '../Common/modern-button';\r\n\r\ninterface SessionTimeoutModalProps {\r\n durationMs?: number;\r\n timerIntervalMs?: number;\r\n onTimerDone?: () => void;\r\n onLogOut: () => void;\r\n onContinue: () => void;\r\n}\r\n\r\nconst StyledP = styled.p`\r\n margin-bottom: 30px;\r\n line-height: normal;\r\n`;\r\n\r\nexport const SessionTimeoutModal: React.FC> = ({\r\n durationMs = 1 * 60 * 1000,\r\n timerIntervalMs = 1000,\r\n onTimerDone,\r\n onLogOut,\r\n onContinue,\r\n}) => {\r\n const [timer, setTimer] = useState(durationMs);\r\n\r\n useEffect(() => {\r\n const timerId = setInterval(() => {\r\n setTimer((prevTimer) => {\r\n if (prevTimer - timerIntervalMs > 1000) {\r\n return prevTimer - timerIntervalMs;\r\n } else {\r\n clearInterval(timerId);\r\n onTimerDone && onTimerDone();\r\n return 1000;\r\n }\r\n });\r\n }, timerIntervalMs);\r\n\r\n return () => {\r\n clearInterval(timerId);\r\n };\r\n }, [timerIntervalMs, onTimerDone]);\r\n\r\n const seconds = Math.floor(timer / 1000);\r\n\r\n return (\r\n \r\n \r\n Log out\r\n \r\n \r\n Continue\r\n \r\n \r\n }\r\n >\r\n You are about to be signed out of Spotlight due to inactivity.\r\n \r\n To continue using Spotlight, click the {`'Continue'`} button below in the next {seconds} second\r\n {seconds > 1 && 's'}.\r\n \r\n \r\n );\r\n};\r\n","import React, { useState } from 'react';\r\n\r\nimport { Button } from '@ui';\r\nimport { Mail } from 'iconoir-react';\r\nimport { useForm } from 'react-hook-form';\r\nimport styled from 'styled-components';\r\n\r\nimport RestService from '../../../Scripts/Spotlight/Services/RestService';\r\nimport { NEW_THEME } from '../Common/themes';\r\nimport { maskEmail } from '../ManageAccount/TwoStepAuth/helpers';\r\nimport { ErrorBanner, PageTitle, StyledTextInput } from './sustain-signup';\r\n\r\ninterface SignupFormFinishProps {\r\n emailAddress: string;\r\n onSuccessfulSubmit: () => void;\r\n}\r\n\r\nconst Text = styled.p`\r\n text-align: center;\r\n white-space: pre-line;\r\n color: #031c44;\r\n margin-top: 30px;\r\n margin-bottom: 30px;\r\n`;\r\n\r\nconst MainImage = styled.div`\r\n margin: -10px auto 10px auto;\r\n background-color: #e5e9f4;\r\n height: 90px;\r\n width: 90px;\r\n border-radius: 50%;\r\n border: 3px solid #253975;\r\n color: #253975;\r\n\r\n svg {\r\n width: 48px;\r\n height: 48px;\r\n padding: 21px;\r\n }\r\n`;\r\n\r\ninterface DtiProps {\r\n dataId: string;\r\n}\r\n\r\nconst ActionButton = styled.button.attrs(({ dataId }) => ({\r\n 'data-test-id': dataId,\r\n}))`\r\n color: unset;\r\n background-color: unset;\r\n border: none;\r\n padding: 0px;\r\n font: unset;\r\n line-height: normal;\r\n letter-spacing: 0.2px;\r\n text-decoration-line: underline;\r\n display: inline-block;\r\n cursor: pointer;\r\n`;\r\n\r\nconst ExtendedStyledButton = styled(Button)`\r\n text-align: center;\r\n margin: 20px 0px 0px 0px;\r\n height: 42px;\r\n padding: 11px;\r\n border-radius: 5px;\r\n box-shadow: 0px 1px 2px 0px rgba(51, 51, 51, 0.4);\r\n font-size: 14px;\r\n font-weight: 600;\r\n font-family: open-sans, arial;\r\n`;\r\n\r\nexport const SignupFormFinish = ({ emailAddress, onSuccessfulSubmit }: SignupFormFinishProps): JSX.Element => {\r\n const {\r\n handleSubmit,\r\n register,\r\n trigger,\r\n getValues,\r\n formState: { errors },\r\n } = useForm({\r\n defaultValues: {\r\n authCode: '',\r\n },\r\n });\r\n\r\n const [isProcessing, setIsProcessing] = useState(false);\r\n const [showVerificationError, setShowVerificationError] = useState(false);\r\n\r\n const handleValidSubmit = async () => {\r\n setIsProcessing(true);\r\n\r\n try {\r\n const authCode = getValues('authCode');\r\n const response = await RestService.AuthenticateMemberByMfaCode(authCode.trim());\r\n if (response.data.Success) {\r\n onSuccessfulSubmit();\r\n } else {\r\n setShowVerificationError(true);\r\n setIsProcessing(false);\r\n }\r\n } catch {\r\n setShowVerificationError(true);\r\n setIsProcessing(false);\r\n }\r\n };\r\n\r\n // roll our own on-enter-submit-form because the form is defined in the Razor file (in order to get a back-end-created anti-forgery token)\r\n // whereas the on-submit behaviour is defined in React (cause we want to wrap it in lots of React-y goodness)\r\n // so the built-in form submission has been disabled. But we still want pressing enter to try and submit the form\r\n const handleMaybeEnter = async (e: React.KeyboardEvent) => {\r\n if (e.key === 'Enter' && (await trigger())) {\r\n await handleValidSubmit();\r\n }\r\n };\r\n\r\n const resendAuthCode = async () => {\r\n setIsProcessing(true);\r\n await RestService.ResendMfaCode();\r\n setIsProcessing(false);\r\n };\r\n\r\n return (\r\n <>\r\n Confirm your email address\r\n {showVerificationError && (\r\n setShowVerificationError(false)}>\r\n
There was something wrong with the code. Please try again, your code may have expired.
\r\n
\r\n )}\r\n\r\n \r\n \r\n \r\n \r\n {`Please enter the code sent to \\r\r\n \"${maskEmail(emailAddress)}\"`}\r\n \r\n \r\n Didn't receive a code?{' '}\r\n \r\n Click here\r\n {' '}\r\n to resend\r\n \r\n\r\n \r\n\r\n \r\n Get Started\r\n \r\n \r\n );\r\n};\r\n","import React, { useState } from 'react';\r\n\r\nimport { PasswordField } from '@ui';\r\nimport { PasswordInputProps } from '@ui';\r\nimport { useForm } from 'react-hook-form';\r\nimport styled from 'styled-components';\r\n\r\nimport RestService from '../../../Scripts/Spotlight/Services/RestService';\r\nimport { NEW_THEME } from '../Common/themes';\r\nimport { ErrorBanner, PageTitle, StyledButton, StyledTextInput } from './sustain-signup';\r\n\r\ninterface SignupFormFirstProps {\r\n onSubmit: () => void;\r\n email: string;\r\n onEmailChange: (value: string) => void;\r\n password: string;\r\n onPasswordChange: (value: string) => void;\r\n}\r\n\r\ninterface ValidationProps {\r\n isInvalid: boolean;\r\n}\r\n\r\nconst ValidationRulesText = styled.div`\r\n font-size: 12px;\r\n font-weight: 400;\r\n line-height: 16px;\r\n margin: 5px 0px 0px 0px;\r\n color: ${(props: ValidationProps): string => (props.isInvalid ? '#e63327' : '#031c44')};\r\n`;\r\n\r\ninterface ExtendedPasswordInputProps extends PasswordInputProps {\r\n onKeyDown?: (e: React.KeyboardEvent) => void;\r\n}\r\n\r\nexport const ExtendedPasswordInput = styled(PasswordField).attrs(({ onKeyDown }) => ({\r\n onKeyDown: onKeyDown,\r\n}))`\r\n input {\r\n border-radius: 5px;\r\n padding: 13px;\r\n color: #031c44;\r\n }\r\n\r\n span {\r\n font-weight: 600;\r\n }\r\n`;\r\n\r\nexport const SignupFormFirst = ({\r\n onSubmit,\r\n email,\r\n onEmailChange,\r\n password,\r\n onPasswordChange,\r\n}: SignupFormFirstProps): JSX.Element => {\r\n const {\r\n handleSubmit,\r\n register,\r\n trigger,\r\n formState: { errors },\r\n } = useForm({\r\n defaultValues: {\r\n formEmail: email,\r\n formPassword: password,\r\n },\r\n });\r\n\r\n const [showEmailInUseMessage, setShowEmailInUseMessage] = useState(false);\r\n const [showGenericErrorMessage, setShowGenericErrorMessage] = useState(false);\r\n const [isProcessing, setIsProcessing] = useState(false);\r\n\r\n const handleValidSubmit = async () => {\r\n setIsProcessing(true);\r\n try {\r\n const response = await RestService.IsEmailInUse(email);\r\n if (response.data) {\r\n // email is in use\r\n setShowEmailInUseMessage(true);\r\n setIsProcessing(false);\r\n } else {\r\n onSubmit();\r\n }\r\n } catch {\r\n setShowGenericErrorMessage(true);\r\n setIsProcessing(false);\r\n }\r\n };\r\n\r\n // roll our own on-enter-submit-form because the form is defined in the Razor file (in order to get a back-end-created anti-forgery token)\r\n // whereas the on-submit behaviour is defined in React (cause we want to wrap it in lots of React-y goodness)\r\n // so the built-in form submission has been disabled. But we still want pressing enter to try and submit the form\r\n const handleMaybeEnter = async (e: React.KeyboardEvent) => {\r\n if (e.key === 'Enter' && (await trigger())) {\r\n await handleValidSubmit();\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n Create a login\r\n {showEmailInUseMessage && (\r\n setShowEmailInUseMessage(false)}>\r\n
\r\n You already have an account. Please log in or contact{' '}\r\n \r\n support@spotlightreporting.com\r\n {' '}\r\n for assistance.\r\n
\r\n
\r\n )}\r\n {showGenericErrorMessage && (\r\n setShowGenericErrorMessage(false)}>\r\n
\r\n Sorry, there was an issue processing your signup. Please contact our{' '}\r\n \r\n support@spotlightreporting.com\r\n {' '}\r\n for further assistance.\r\n
\r\n
\r\n )}\r\n onEmailChange(e.target.value),\r\n validate: {\r\n isEmailValid: (value) => /\\S+@\\S+\\.\\S+/.test(value) || 'Please enter a valid email address',\r\n },\r\n })}\r\n onKeyDown={handleMaybeEnter}\r\n />\r\n\r\n onPasswordChange(e.target.value)}\r\n invalid={!!errors.formPassword}\r\n {...register('formPassword', {\r\n onChange: (e) => onPasswordChange(e.target.value),\r\n validate: {\r\n isPasswordValid: (value) =>\r\n /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d).{8,}$/.test(value) || 'Please enter a valid password',\r\n },\r\n })}\r\n />\r\n \r\n Your password must include at least eight characters, upper and lower case letters (e.g. Aa), and at\r\n least one number\r\n \r\n\r\n \r\n Next\r\n \r\n \r\n );\r\n};\r\n","import React, { useMemo, useState } from 'react';\r\n\r\nimport { SelectMenuField } from '@ui';\r\nimport { Controller, useForm } from 'react-hook-form';\r\nimport styled from 'styled-components';\r\n\r\nimport { TrialProfile } from '../../../Scripts/Codes';\r\nimport { countryGroups } from '../../../Scripts/Spotlight/Models/countries';\r\nimport RestService from '../../../Scripts/Spotlight/Services/RestService';\r\nimport { PhoneInputWithFlag } from '../Common/phone-input-with-flag';\r\nimport { NEW_THEME } from '../Common/themes';\r\nimport { ErrorBanner, PageTitle, StyledButton, StyledTextInput } from './sustain-signup';\r\n\r\ninterface SignupFormSecondProps {\r\n firstName: string;\r\n onFirstNameChange: (value: string) => void;\r\n lastName: string;\r\n onLastNameChange: (value: string) => void;\r\n companyName: string;\r\n onCompanyNameChange: (value: string) => void;\r\n phoneNumber: string;\r\n onPhoneNumberChange: (value: string) => void;\r\n location: string;\r\n onLocationChange: (value: string) => void;\r\n termsChecked: boolean;\r\n onTermsCheckedChange: (isChecked: boolean) => void;\r\n orgType: string;\r\n onOrgTypeChange: (value: string) => void;\r\n\r\n email: string;\r\n password: string;\r\n\r\n onSubmittedSuccessfully: (requiresMFA: boolean) => void;\r\n}\r\n\r\nconst NameInputsContainer = styled.div`\r\n display: flex;\r\n gap: 17px;\r\n`;\r\n\r\nconst SectionWrapper = styled.div`\r\n margin-bottom: 50px;\r\n`;\r\n\r\nconst LocationWrapper = styled.div`\r\n margin-bottom: 50px;\r\n #select-menu-button {\r\n border-radius: 5px;\r\n padding: 13px;\r\n color: #031c44;\r\n }\r\n\r\n label {\r\n color: #031c44;\r\n font-weight: 600;\r\n }\r\n`;\r\n\r\nconst TermsWrapper = styled.div`\r\n display: flex;\r\n align-items: center;\r\n`;\r\n\r\nconst StyledLabel = styled.label`\r\n display: block;\r\n padding-bottom: 18px;\r\n font-size: 14px;\r\n line-height: 16px;\r\n font-weight: 700;\r\n color: #2a3f5e;\r\n opacity: 1;\r\n font-weight: 600;\r\n`;\r\n\r\nconst RadioButtonLabel = styled.label`\r\n color: #031c44;\r\n`;\r\n\r\nconst RadioWrapper = styled.div`\r\n margin-bottom: 10px;\r\n\r\n label {\r\n padding: 10px;\r\n }\r\n`;\r\n\r\nconst WarningMessage = styled.div`\r\n color: #e63327;\r\n font-size: 12px;\r\n font-weight: 400;\r\n line-height: 16px;\r\n margin-top: 4px;\r\n margin-bottom: -22px; /* fit label into existing margin, rather than adding to it */\r\n`;\r\n\r\ninterface GenericInputProps {\r\n dataId: string;\r\n}\r\n\r\nconst GenericInput = styled.input.attrs(({ dataId }) => ({\r\n 'data-test-id': dataId,\r\n}))``;\r\n\r\nconst TermsOfUseLabel = styled.label`\r\n font-size: 12px;\r\n font-weight: 400;\r\n line-height: 14px;\r\n color: #031c44;\r\n padding-left: 7px;\r\n`;\r\n\r\nconst InlineLink = styled.a`\r\n display: inline;\r\n`;\r\n\r\nconst countriesTopSection = [\r\n // our most common countries\r\n { text: 'New Zealand', value: 'NZ' },\r\n { text: 'Australia', value: 'AU' },\r\n { text: 'Great Britain and Northern Ireland', value: 'GB' },\r\n { text: 'United States of America', value: 'US' },\r\n { text: 'Canada', value: 'CA' },\r\n { text: 'South Africa', value: 'ZA' },\r\n { text: 'Singapore', value: 'SG' },\r\n];\r\nconst allCountries = countryGroups[1].countries.map((country) => {\r\n return { text: country.name, value: country.iso2 };\r\n});\r\n\r\nexport const SignupFormSecond = ({\r\n firstName,\r\n onFirstNameChange,\r\n lastName,\r\n onLastNameChange,\r\n companyName,\r\n onCompanyNameChange,\r\n phoneNumber,\r\n onPhoneNumberChange,\r\n location,\r\n onLocationChange,\r\n termsChecked,\r\n onTermsCheckedChange,\r\n orgType,\r\n onOrgTypeChange,\r\n email,\r\n password,\r\n onSubmittedSuccessfully,\r\n}: SignupFormSecondProps): JSX.Element => {\r\n const {\r\n handleSubmit,\r\n register,\r\n control,\r\n trigger,\r\n formState: { errors },\r\n } = useForm({\r\n defaultValues: {\r\n firstName: firstName,\r\n lastName: lastName,\r\n companyName: companyName,\r\n location: location,\r\n hasTermsChecked: termsChecked,\r\n orgType: orgType,\r\n },\r\n });\r\n const [showErrorMessage, setShowErrorMessage] = useState(false);\r\n const [isSaving, setIsSaving] = useState(false);\r\n const [windowHeight, setWindowHeight] = useState(window.innerHeight);\r\n\r\n const handleValidSubmit = () => {\r\n setIsSaving(true);\r\n setShowErrorMessage(false);\r\n\r\n const postData = {\r\n firstName: firstName,\r\n lastName: lastName,\r\n practiceName: companyName,\r\n mobilePhone: phoneNumber,\r\n emailAddress: email,\r\n password: password,\r\n countryCode: location,\r\n acceptTerms: true,\r\n trialProfile: orgType,\r\n __RequestVerificationToken: (\r\n document.querySelector('input[name=\"__RequestVerificationToken\"]') as HTMLInputElement\r\n ).value,\r\n };\r\n\r\n RestService.Signup(\r\n postData,\r\n (response) => {\r\n if (response.Success) {\r\n onSubmittedSuccessfully(response.RequiresMFA);\r\n } else {\r\n setShowErrorMessage(true);\r\n setIsSaving(false);\r\n }\r\n },\r\n () => {\r\n setShowErrorMessage(true);\r\n setIsSaving(false);\r\n },\r\n );\r\n };\r\n\r\n useMemo(() => {\r\n window.addEventListener('resize', () => setWindowHeight(window.innerHeight));\r\n }, []);\r\n\r\n // roll our own on-enter-submit-form because the form is defined in the Razor file (in order to get a back-end-created anti-forgery token)\r\n // whereas the on-submit behaviour is defined in React (cause we want to wrap it in lots of React-y goodness)\r\n // so the built-in form submission has been disabled. But we still want pressing enter to try and submit the form\r\n const handleMaybeEnter = async (e: React.KeyboardEvent) => {\r\n if (e.key === 'Enter' && (await trigger())) {\r\n await handleValidSubmit();\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n Set up your profile\r\n\r\n {showErrorMessage && (\r\n setShowErrorMessage(false)}>\r\n
\r\n Sorry, there was an issue processing your signup. Please contact our{' '}\r\n \r\n support@spotlightreporting.com\r\n {' '}\r\n for assistance.\r\n
\r\n
\r\n )}\r\n\r\n \r\n onFirstNameChange(e.target.value)}\r\n autofocus={true}\r\n autoComplete=\"given-name\"\r\n validationMessage={errors.firstName && 'Please enter your first name'}\r\n invalid={!!errors.firstName}\r\n {...register('firstName', {\r\n onChange: (e) => onFirstNameChange(e.target.value),\r\n required: true,\r\n })}\r\n onKeyDown={handleMaybeEnter}\r\n />\r\n\r\n onLastNameChange(e.target.value),\r\n required: true,\r\n })}\r\n onKeyDown={handleMaybeEnter}\r\n />\r\n \r\n\r\n onCompanyNameChange(e.target.value),\r\n required: true,\r\n })}\r\n onKeyDown={handleMaybeEnter}\r\n />\r\n\r\n \r\n (\r\n {\r\n onChange(value);\r\n onLocationChange(value);\r\n }}\r\n placement={windowHeight >= 870 ? 'bottom' : 'top'} // on small screens, open up\r\n />\r\n )}\r\n name=\"location\"\r\n />\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n Select your organisation type\r\n (\r\n <>\r\n \r\n {\r\n onOrgTypeChange(TrialProfile.ESGAccountant);\r\n onChange(e);\r\n }}\r\n />\r\n Accountant\r\n \r\n \r\n {\r\n onOrgTypeChange(TrialProfile.ESGDirect);\r\n onChange(e);\r\n }}\r\n />\r\n Business or non-profit\r\n \r\n \r\n )}\r\n />\r\n {!!errors.orgType && Please select your organisation type}\r\n \r\n\r\n \r\n \r\n onTermsCheckedChange(e.target.checked),\r\n })}\r\n />\r\n \r\n I have read and agree to the{' '}\r\n \r\n terms of use\r\n {' '}\r\n and{' '}\r\n \r\n privacy policy\r\n \r\n \r\n \r\n {!!errors.hasTermsChecked && Please read and accept our legal terms}\r\n \r\n\r\n \r\n Next\r\n \r\n \r\n );\r\n};\r\n","import React, { useState } from 'react';\r\n\r\nimport { Alert, Button, ButtonAsText, COLOR, SPACING, TextInput, Theme } from '@ui';\r\nimport { TextInputProps } from '@ui';\r\nimport { CreditCard, Calendar, Undo } from 'iconoir-react';\r\nimport styled from 'styled-components';\r\n\r\nimport RestService from '../../../Scripts/Spotlight/Services/RestService';\r\nimport { SignupFormFinish } from './sustain-signup-finish';\r\nimport { SignupFormFirst } from './sustain-signup-first';\r\nimport { SignupFormSecond } from './sustain-signup-second';\r\n\r\ninterface SustainSignupProps {\r\n defaultCountry: string;\r\n}\r\n\r\nconst Page = styled.div`\r\n position: fixed;\r\n left: 0;\r\n top: 0;\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n height: 100%;\r\n background-color: ${COLOR.MAIN.LIGHT_GREY};\r\n font-family: open-sans, arial;\r\n font-size: 14px;\r\n font-style: normal;\r\n line-height: 1.5;\r\n overflow-y: auto;\r\n\r\n a {\r\n color: #031c44;\r\n }\r\n\r\n label > span {\r\n /* override the 'labels go red when invalid' behaviour on inputs cause Rick doesn't like it */\r\n color: #031c44;\r\n padding-bottom: 5px;\r\n }\r\n`;\r\n\r\nconst AbovePageSpacer = styled.span`\r\n flex: 1 1 40%;\r\n`;\r\n\r\nconst BelowPageSpacer = styled.span`\r\n flex: 1 1 60%;\r\n`;\r\n\r\nconst ContentContainer = styled.div`\r\n text-align: center;\r\n width: 520px;\r\n margin: auto;\r\n`;\r\n\r\nconst StepContainer = styled.div`\r\n background: ${COLOR.PRIMARY.WHITE};\r\n border-radius: 10px;\r\n border: 1.3px solid #cdd3de;\r\n text-align: left;\r\n padding: 30px 50px 50px 50px;\r\n`;\r\n\r\nconst BackButton = styled(ButtonAsText)`\r\n width: 78px;\r\n height: 32px;\r\n font-size: 14px;\r\n text-decoration: underline;\r\n text-underline-offset: 4px;\r\n\r\n &:hover {\r\n border-radius: 5px;\r\n background-color: #f3f4f7;\r\n }\r\n\r\n svg {\r\n padding: 5px 4px 0px 5px;\r\n }\r\n`;\r\n\r\nconst BackButtonTheme: Theme = {\r\n mainBorder: '#031c44',\r\n hover: {\r\n main: 'transparent',\r\n },\r\n main: '#031c44',\r\n mainText: '#031c44',\r\n spinnerColor: 'black',\r\n};\r\n\r\nconst CurrentStepLabel = styled.p`\r\n font-size: 14px;\r\n font-weight: 550;\r\n color: #031c44;\r\n flex-grow: 1;\r\n text-align: right;\r\n`;\r\n\r\nconst Benefit = styled.span`\r\n display: inline-block;\r\n height: 20px;\r\n padding: 21px;\r\n`;\r\n\r\nconst BenefitText = styled.span`\r\n display: inline-block;\r\n line-height: normal;\r\n font-size: 14px;\r\n padding-left: ${SPACING.XX_SMALL};\r\n vertical-align: super;\r\n color: #031c44;\r\n`;\r\n\r\nconst MainTitle = styled.h1`\r\n font-weight: 600;\r\n margin: 40px 0px 9px 0px;\r\n font-size: 28px;\r\n color: #031c44;\r\n`;\r\n\r\nexport const PageTitle = styled.h2`\r\n font-weight: 600;\r\n font-size: 22px;\r\n display: inline-block;\r\n width: 100%;\r\n margin: 20px 0px 50px 0px;\r\n text-align: center;\r\n color: #031c44;\r\n`;\r\n\r\ninterface TextInputPropsWithAutocomplete extends TextInputProps {\r\n autoComplete?: string;\r\n onKeyDown?: (e: React.KeyboardEvent) => void;\r\n}\r\n\r\nexport const StyledTextInput = styled(TextInput).attrs(\r\n ({ autoComplete, onKeyDown }) => ({\r\n autoComplete: autoComplete,\r\n onKeyDown: onKeyDown,\r\n }),\r\n)`\r\n width: 100%;\r\n margin-bottom: 50px;\r\n\r\n input {\r\n border-radius: 5px;\r\n padding: 13px;\r\n color: #031c44;\r\n }\r\n\r\n span {\r\n font-weight: 600;\r\n }\r\n`;\r\n\r\nexport const StyledButton = styled(Button)`\r\n text-align: center;\r\n margin: 40px 0px 0px 0px;\r\n height: 42px;\r\n padding: 11px;\r\n border-radius: 5px;\r\n box-shadow: 0px 1px 2px 0px rgba(51, 51, 51, 0.4);\r\n font-size: 14px;\r\n font-weight: 600;\r\n font-family: open-sans, arial;\r\n`;\r\n\r\nexport const ErrorBanner = styled(Alert)`\r\n margin: -20px 0px 40px 0px;\r\n`;\r\n\r\nconst BelowFormText = styled.div`\r\n margin-top: 20px;\r\n color: #031c44;\r\n`;\r\n\r\nconst StepNavigation = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-end;\r\n height: 32px;\r\n`;\r\n\r\nexport const SustainSignup: React.FC> = ({\r\n defaultCountry,\r\n}): JSX.Element => {\r\n const [currentStep, setCurrentStep] = useState(1);\r\n\r\n // data from first step\r\n const [email, setEmail] = useState('');\r\n const [password, setPassword] = useState('');\r\n\r\n // data from second step\r\n const [firstName, setFirstName] = useState('');\r\n const [lastName, setLastName] = useState('');\r\n const [companyName, setCompanyName] = useState('');\r\n const [phoneNumber, setPhoneNumber] = useState('');\r\n const [location, setLocation] = useState(defaultCountry);\r\n const [termsChecked, setTermsChecked] = useState(false);\r\n const [orgType, setOrgType] = useState('');\r\n\r\n const handleBackButton = () => {\r\n setCurrentStep((prev) => prev - 1);\r\n };\r\n\r\n const handleSuccessfulSignup = (requiresMFA: boolean) => {\r\n if (requiresMFA) {\r\n setCurrentStep(3);\r\n RestService.ResendMfaCode();\r\n } else {\r\n window.location.assign('/');\r\n }\r\n };\r\n\r\n const handleSuccessfulAuth = () => {\r\n window.location.assign('/');\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Start your free trial\r\n\r\n
\r\n \r\n \r\n No credit card required\r\n \r\n \r\n \r\n Free for 14 days\r\n \r\n
\r\n\r\n \r\n \r\n {currentStep === 2 && (\r\n \r\n \r\n Back\r\n \r\n )}\r\n {`Step ${currentStep} of 3`}\r\n \r\n {currentStep === 1 && (\r\n setCurrentStep(2)}\r\n email={email}\r\n onEmailChange={setEmail}\r\n password={password}\r\n onPasswordChange={setPassword}\r\n />\r\n )}\r\n {currentStep === 2 && (\r\n \r\n )}\r\n {currentStep === 3 && (\r\n \r\n )}\r\n \r\n\r\n {currentStep !== 3 && (\r\n \r\n Already have a Spotlight account? Log in\r\n \r\n )}\r\n
\r\n \r\n
\r\n );\r\n};\r\n","import { render } from '../../../Scripts/Spotlight/Components/render-with-store';\r\nimport { SustainSignup } from './sustain-signup';\r\n\r\ndeclare const defaultCountry: string;\r\n\r\n(() => {\r\n render('page-content', SustainSignup, document.getElementById('js-page-content'), {\r\n defaultCountry: defaultCountry,\r\n });\r\n})();\r\n","import { reduce, pairs } from 'underscore';\r\n\r\nimport { DataSourceTypeCode } from '../../Codes';\r\nimport { ProductTypes } from '../Models/Constants';\r\n\r\ntype AppRoute = (args0?: TRoutePathArgs, args1?: TRouteQueryArgs) => string;\r\n\r\nconst objectToQueryParams = (object: Record) => {\r\n return reduce(\r\n pairs(object),\r\n function (memo, pair) {\r\n return memo + (pair[1] ? '&' + encodeURIComponent(pair[0]) + '=' + encodeURIComponent(pair[1]) : '');\r\n },\r\n '',\r\n );\r\n};\r\n\r\n/** returns a route, optionally can append an object as query params to the path */\r\nconst routeBuilder = (routePath, routeQueryArgs?): string => {\r\n if (!routeQueryArgs) {\r\n return routePath;\r\n } else {\r\n // if it doesn't have a ? already, then add one. Also append the query params.\r\n const routeQuery = routePath.includes('?') ? '' : '?' && `${objectToQueryParams(routeQueryArgs)}`;\r\n return `${routePath}${routeQuery}`;\r\n }\r\n};\r\n\r\n/* App Routes the user can navigate to */\r\nexport class AppRoutes {\r\n static CustomisePage: AppRoute<{ windowCode: string; reportId: string; currentStage: number; pageId: string }> = ({\r\n windowCode,\r\n reportId,\r\n currentStage,\r\n pageId,\r\n }) => `/Report/build/${windowCode}?reportId=${reportId}&step=${currentStage}#step${currentStage}/${pageId}`;\r\n static FormulaGallery: AppRoute<{ windowCode: string; reportMode: string }> = ({ windowCode, reportMode }) =>\r\n `/OrganisationSettings/${windowCode}?reportMode=${reportMode}#formula-gallery`;\r\n\r\n static TransformInAction = '/TransformInAction';\r\n\r\n /* Member */\r\n static MFASettings = '/Member/MFASettings';\r\n static ChangePassword = '/Member/ChangePassword';\r\n static SignOut = '/Member/Signout';\r\n\r\n static LandingPage = (productType: ProductTypes): string => {\r\n const productToLandingPage = {\r\n [ProductTypes.Reporting]: this.ReportingLandingPage,\r\n [ProductTypes.Dashboard]: this.DashboardsLandingPage,\r\n [ProductTypes.Forecasting]: this.ForecastingLandingPage,\r\n [ProductTypes.Multi]: this.MultiLandingPage,\r\n [ProductTypes.Sustain]: this.SustainLandingPage,\r\n };\r\n\r\n return productToLandingPage[productType];\r\n };\r\n\r\n /* Reporting */\r\n static ReportingLandingPage = '/Reporting/Organisations';\r\n\r\n /* Dashboards */\r\n static DashboardsLandingPage = '/Dashboard/Organisations';\r\n\r\n /* Multi */\r\n static MultiLandingPage = '/Multi/Organisations';\r\n\r\n /* Forecasting */\r\n static ForecastingLandingPage = '/Forecasting/Organisations';\r\n static AddDataSource: AppRoute<{ organisationId: string }> = ({ organisationId }) =>\r\n `/Forecasting/${organisationId}/AddDataSource`;\r\n static TaskManager: AppRoute<{ organisationId: string }> = ({ organisationId }) =>\r\n `/Forecasting/${organisationId}/TaskManager`;\r\n static ManageGroup: AppRoute<{ organisationId: string }> = ({ organisationId }) =>\r\n `/Forecasting/${organisationId}/ManageGroup`;\r\n static CreateBudget: AppRoute<{ windowCode: string; reportId: string }> = ({ windowCode, reportId }) =>\r\n `/Report/Build2/${windowCode}?reportId=${reportId}#BUDGETCUSTOMISE`;\r\n static CreateForecast: AppRoute<{ windowCode: string; reportId: string }> = ({ windowCode, reportId }) =>\r\n `/Report/Build2/${windowCode}?reportId=${reportId}#FORECASTCUSTOMISE`;\r\n static CustomiseBudget: AppRoute<{ windowCode: string; reportId: string; taskId: string }> = ({\r\n windowCode,\r\n reportId,\r\n taskId,\r\n }) => `/Report/Build2/${windowCode}?reportId=${reportId}#BUDGETCUSTOMISE/${taskId}`;\r\n static CustomiseForecast: AppRoute<{ windowCode: string; reportId: string; taskId: string }> = ({\r\n windowCode,\r\n reportId,\r\n taskId,\r\n }) => `/Report/Build2/${windowCode}?reportId=${reportId}#FORECASTCUSTOMISE/${taskId}`;\r\n static CustomiseDrivers: AppRoute<{ windowCode: string; reportId: string; dataSourceId: string }> = ({\r\n windowCode,\r\n reportId,\r\n dataSourceId,\r\n }) => `/Report/Build2/${windowCode}?reportId=${reportId}#DRIVERSCUSTOMISE/${dataSourceId}`;\r\n static CustomiseMeasures: AppRoute<{ windowCode: string; reportId: string; dataSourceId: string }> = ({\r\n windowCode,\r\n reportId,\r\n dataSourceId,\r\n }) => `/Report/Build2/${windowCode}?reportId=${reportId}#MEASURESCUSTOMISE/${dataSourceId}`;\r\n static CustomiseForecastPage: AppRoute<{ windowCode: string; reportId: string; pageId: string }> = ({\r\n windowCode,\r\n reportId,\r\n pageId,\r\n }) => `/Report/build2/${windowCode}?reportId=${reportId}#CUSTOMISELAYOUT/${pageId}`;\r\n\r\n /* Sustain */\r\n static SustainLandingPage = '/Sustain/Organisations';\r\n static SustainSelectTemplate: AppRoute<{ reportId: string }> = ({ reportId }) =>\r\n `/Sustain/Report/${reportId}/SelectTemplate`;\r\n static SustainAddData: AppRoute<{ reportId: string }> = ({ reportId }) => `/Sustain/Report/${reportId}/AddData`;\r\n static SustainDataSources: AppRoute<{ reportId: string }> = ({ reportId }) =>\r\n `/Sustain/Report/${reportId}/DataSources`;\r\n static SustainBuildReport: AppRoute<{ reportId: string }> = ({ reportId }) =>\r\n `/Sustain/ReportWizard/?reportId=${reportId}#step3`;\r\n static SustainPreviewAndShare: AppRoute<{ reportId: string }> = ({ reportId }) =>\r\n `/Sustain/Report/${reportId}/PreviewAndShare`;\r\n static SustainCustomisePage: AppRoute<{ reportId: string; currentStage: number; pageId: string }> = ({\r\n reportId,\r\n currentStage,\r\n pageId,\r\n }) => `/Sustain/ReportWizard/?reportId=${reportId}#step${currentStage}/${pageId}`;\r\n\r\n /* Webflow */\r\n static TransformInActionLogIn = 'https://transform.spotlightreporting.com/log-in';\r\n\r\n /* Help Centre */\r\n static DesktopConnectorHelp: AppRoute<{ dataSourceTypeCode: DataSourceTypeCode }> = ({ dataSourceTypeCode }) => {\r\n const baseUrl = 'https://help.spotlightreporting.com/reporting';\r\n const paths = {\r\n [DataSourceTypeCode.MyobAccountRightDesktop]: 'myob-accountright-desktop',\r\n [DataSourceTypeCode.QuickBooksDesktop]: 'quickbooks-desktop',\r\n [DataSourceTypeCode.Sage50Desktop]: 'sage-50-accounts',\r\n };\r\n\r\n return `${baseUrl}/${paths[dataSourceTypeCode]}`;\r\n };\r\n}\r\n","import { logError } from '.';\r\n\r\ndeclare const Spotlight: any;\r\n\r\nexport enum FeatureFlags {\r\n NoThumbnails = 'no-thumbnails',\r\n TiaWebflow = 'tia-webflow',\r\n ImportDataReporting = 'import-data-reporting-full-release',\r\n}\r\n\r\n/**\r\n * Checks if the practice has the given feature flag.\r\n * Relies on the featureflags being assigned to the global Spotlight.PracticeFeatureFlags.\r\n * Prefer to instead call asyncPracticeHasFeatureFlag for new code that is safe to operate async.\r\n */\r\n// TODO: Restrict the type of the flag parameter further so that the value must be in the FeatureFlags enum\r\nexport const practiceHasFeatureFlag = (flag: string | FeatureFlags): boolean => {\r\n const flags = typeof Spotlight !== 'undefined' && Spotlight.PracticeFeatureFlags;\r\n if (flags === undefined || flags === '') {\r\n // Note: if the practice has no features toggled on we should at least receive the string 'None' here\r\n logError({\r\n error: new Error(\r\n `Attempted to check practice feature flags but flags were not set. Feature Flag to check was ${flag}.`,\r\n ),\r\n });\r\n return false;\r\n }\r\n return (\r\n flags\r\n .split('|')\r\n .map((flag) => flag.trim().toLowerCase())\r\n .indexOf(flag.toLowerCase()) >= 0\r\n );\r\n};\r\n\r\n/**\r\n * Checks if the practice has the given feature flag.\r\n * Currently just checks the flag from the Spotlight global var.\r\n * Intent would be for this to fetch featureflags from the API\r\n * possibly memoize/cache and remove the dependency on the Spotlight global var.\r\n */\r\n// TODO: Restrict the type of the flag property further so that the value must be in the FeatureFlags enum\r\nexport const asyncPracticeHasFeatureFlag = async ({ flag }: { flag: string | FeatureFlags }): Promise => {\r\n return practiceHasFeatureFlag(flag);\r\n};\r\n","/**\r\n * Logs an error to error monitoring provider.\r\n * Logging wrapper - currently sends to raygun but should be able to swap for any provider.\r\n */\r\ntype logErrorHandler = (value: { error: Error; customData?: unknown; tags?: string[] }) => void;\r\nexport const logError: logErrorHandler = ({ error, customData, tags }) => {\r\n // guard against raygun not being available\r\n if (typeof window.rg4js !== 'function') {\r\n return;\r\n }\r\n // send to raygun\r\n window.rg4js('send', {\r\n error,\r\n customData,\r\n tags: ['MonitoredError', ...(tags ?? [])],\r\n });\r\n};\r\n","import { DataSourceCodes } from '../Models/Constants';\r\n\r\nexport const shouldUseNewImport = (code: DataSourceCodes): boolean =>\r\n [\r\n DataSourceCodes.Excel,\r\n DataSourceCodes.ExcelDesktop,\r\n DataSourceCodes.ExcelPersonalWealth,\r\n DataSourceCodes.QuickBooks,\r\n DataSourceCodes.Xero,\r\n DataSourceCodes.XeroPracticeManager,\r\n DataSourceCodes.GoogleSheets,\r\n ].includes(code);\r\n\r\n/**\r\n * Takes a progress percent and the previous progress percent and returns a smoothed value so progress doesn't jump significantly\r\n */\r\nexport const getSmoothProgress = (pct: number, prevPct: number): number => {\r\n const smoothVal = 3;\r\n const oldPct = prevPct || pct;\r\n\r\n if ((pct !== oldPct || pct - oldPct > smoothVal) && !(oldPct + smoothVal > pct)) {\r\n // Smoothing\r\n if (pct - oldPct > 4 * smoothVal) {\r\n pct = oldPct + 2 * smoothVal;\r\n } else {\r\n pct = oldPct + smoothVal;\r\n }\r\n }\r\n\r\n if (pct > 100) {\r\n // Max 100%\r\n pct = 100;\r\n }\r\n\r\n pct = Math.max(pct, 10); // Always > 10\r\n pct = Math.max(prevPct, pct); // Always grow\r\n return pct;\r\n};\r\n\r\nexport const isDesktop = (code: DataSourceCodes): boolean =>\r\n [\r\n DataSourceCodes.MYOBAccountRightDesktop,\r\n DataSourceCodes.QuickBooksDesktop,\r\n DataSourceCodes.Sage50Desktop,\r\n ].includes(code);\r\n\r\nexport const calculateProgress = ({\r\n code,\r\n lastProgress,\r\n completedWork,\r\n importedReports,\r\n startedOrganisations,\r\n totalReports,\r\n totalOrganisations,\r\n}: {\r\n code: DataSourceCodes;\r\n lastProgress: number;\r\n completedWork: number;\r\n importedReports: number;\r\n startedOrganisations: number;\r\n totalReports: number;\r\n totalOrganisations: number;\r\n}): number => {\r\n const getProgressLessDesktopFile = (pct) => {\r\n if (isDesktop(code)) {\r\n // Uploading the desktop file is worth 50% of the progress, we need to scale 100 into 50%\r\n pct = 50 + pct / 2;\r\n }\r\n return pct;\r\n };\r\n\r\n if (shouldUseNewImport(code)) {\r\n if (completedWork > 1) {\r\n let nextProgress = getProgressLessDesktopFile(completedWork);\r\n nextProgress = getSmoothProgress(nextProgress, lastProgress);\r\n return nextProgress;\r\n }\r\n return 0;\r\n } else {\r\n if (totalReports > 1) {\r\n const pct = Math.floor(\r\n ((importedReports * startedOrganisations) / totalReports / totalOrganisations) * 100,\r\n );\r\n let nextProgress = getProgressLessDesktopFile(pct);\r\n nextProgress = getSmoothProgress(nextProgress, lastProgress);\r\n return nextProgress;\r\n }\r\n return 0;\r\n }\r\n};\r\n","import { logError } from './log';\r\n\r\nclass ParseJSONError extends Error {\r\n constructor(message: string, error: SyntaxError, text: string) {\r\n super(message);\r\n this.name = 'ParseJSONError';\r\n\r\n // Append the text we were attempting to parse to the stack\r\n this.stack = `${error.stack}\\nText: '${text}'`;\r\n }\r\n}\r\n\r\nexport const parseJSON = (text: string, context: string): any => {\r\n try {\r\n return JSON.parse(text);\r\n } catch (syntaxError) {\r\n throw new ParseJSONError(`error parsing json: ${context}`, syntaxError, text);\r\n }\r\n};\r\n","import dayjs from 'dayjs';\r\n\r\n// A wrapper around dayjs that returns undefined if the datetime string is undefined\r\n// This is needed as dayjs treats dayjs(undefined) as dayjs(), which returns a Day.js object with the current date and time\r\nexport const stringToDayJs = (date: string | undefined): dayjs.Dayjs => {\r\n if (!date) {\r\n return undefined;\r\n }\r\n\r\n return dayjs(date);\r\n};\r\n","import { ReportModes, ProductTypes } from '../Models/Constants';\r\n\r\n/**\r\n * Maps a report mode to a product.\r\n * e.g. SPOTLIGHT => REPORTING, FRANCHISE => MULTI\r\n */\r\nexport const getProductByReportMode = (reportMode: ReportModes): ProductTypes => {\r\n switch (reportMode) {\r\n case ReportModes.Spotlight: {\r\n return ProductTypes.Reporting;\r\n }\r\n case ReportModes.Forecast: {\r\n return ProductTypes.Forecasting;\r\n }\r\n case ReportModes.Dashboard: {\r\n return ProductTypes.Dashboard;\r\n }\r\n case ReportModes.Franchise: {\r\n return ProductTypes.Multi;\r\n }\r\n case ReportModes.Sustain: {\r\n return ProductTypes.Sustain;\r\n }\r\n }\r\n};\r\n","import * as React from 'react';\r\n\r\nimport { Alert } from '@ui';\r\nimport toast from 'react-hot-toast';\r\n\r\nexport type Severity = 'error' | 'warning' | 'success' | 'info' | 'none';\r\n\r\nexport const contactSupportMessage = (\r\n <>\r\n If this continues to happen, please email our support desk at{' '}\r\n support@spotlightreporting.com\r\n \r\n);\r\n\r\nexport const showToastAlert = ({\r\n severity,\r\n content,\r\n duration,\r\n dataId,\r\n maxWidth = '500px',\r\n}: {\r\n severity: Severity;\r\n content: React.ReactNode;\r\n duration?: number;\r\n dataId?: string;\r\n maxWidth?: string;\r\n}): void => {\r\n toast.custom(\r\n (t) => (\r\n toast.dismiss(t.id)}\r\n isVisible={t.visible}\r\n variant={'shadowed'}\r\n severity={severity}\r\n maxWidth={maxWidth}\r\n dataId={dataId}\r\n fadeIn\r\n >\r\n {content}\r\n \r\n ),\r\n {\r\n position: 'top-center',\r\n duration: duration ?? Infinity,\r\n },\r\n );\r\n};\r\n\r\nexport const showGenericErrorToast = (): void => {\r\n showToastAlert({\r\n severity: 'error',\r\n content:

Sorry, something went wrong. {contactSupportMessage}.

,\r\n });\r\n};\r\n","export const WizardStepsForecasting = {\r\n TaskManager: 'TASKMANAGER',\r\n CustomiseBudget: 'BUDGETCUSTOMISE',\r\n CustomiseForecast: 'FORECASTCUSTOMISE',\r\n CustomiseScenario: 'SCENARIOCUSTOMISE',\r\n CustomiseDrivers: 'DRIVERSCUSTOMISE',\r\n CustomiseMeasures: 'MEASURESCUSTOMISE',\r\n CustomiseData: 'CUSTOMISEDATA',\r\n Settings: 'SETTINGS',\r\n CustomiseLayout: 'CUSTOMISELAYOUT',\r\n Preview: 'PREVIEW',\r\n Complete: 'COMPLETE',\r\n\r\n QB: 'QB',\r\n MyobAccountRight: 'MYOBACCOUNTRIGHT',\r\n Xero: 'XERO',\r\n Step3: 'step3',\r\n Step4: 'step4',\r\n Step5: 'step5',\r\n};\r\n\r\nexport enum ReportModes {\r\n Spotlight = 'SPOTLIGHT',\r\n Forecast = 'FORECAST',\r\n Dashboard = 'DASHBOARD',\r\n Franchise = 'FRANCHISE',\r\n Sustain = 'SUSTAIN',\r\n}\r\n\r\nexport enum ProductTypes {\r\n Reporting = 'REPORTING',\r\n Forecasting = 'FORECASTING',\r\n Dashboard = 'DASHBOARD',\r\n Multi = 'MULTI',\r\n Sustain = 'SUSTAIN',\r\n}\r\n\r\nexport enum DataSourceCodes {\r\n Xero = 'XERO',\r\n QuickBooks = 'QUICKBOOKS',\r\n QuickBooksDesktop = 'QUICKBOOKSDESKTOP',\r\n MYOBAccountRight = 'MYOBACCOUNTRIGHT',\r\n MYOBAccountRightDesktop = 'MYOBACCOUNTRIGHTDESKTOP',\r\n Sage50Desktop = 'SAGE50DESKTOP',\r\n Excel = 'EXCEL',\r\n ExcelDesktop = 'EXCELDESKTOP',\r\n GoogleAnalytics = 'GOOGLEANALYTICS',\r\n GoogleAnalytics4 = 'GOOGLEANALYTICS4',\r\n GoogleSheets = 'GOOGLESHEETS',\r\n WorkFlowMax = 'WORKFLOWMAX',\r\n XeroPracticeManager = 'XEROPRACTICEMANAGER',\r\n PersonalWealth = 'PERSONALWEALTH',\r\n ExcelPersonalWealth = 'EXCELPERSONALWEALTH',\r\n}\r\n\r\nexport enum DataSourceTypes {\r\n Cloud = 'CLOUD',\r\n Desktop = 'DESKTOP',\r\n Manual = 'MANUAL',\r\n}\r\n\r\nexport enum ImportStatusCode {\r\n Pending = 'PENDING',\r\n NeverImported = 'NEVER',\r\n Importing = 'IMPORTING',\r\n Cancelled = 'CANCELLED',\r\n ImportFailed = 'IMPORTFAILED',\r\n ConnectFailed = 'CONNECTFAILED',\r\n Saving = 'SAVING',\r\n Waiting = 'WAITING',\r\n WaitingToCopyForecastTask = 'WAITING_TO_COPY_FORECAST_TASK',\r\n WaitingToCreateForecastTask = 'WAITING_TO_CREATE_FORECAST_TASK',\r\n WaitingToGenerateJournals = 'WAITING_TO_GENERATE_JOURNALS',\r\n WaitingToSyncForecastTaskData = 'WAITING_TO_SYNC_FORECAST_TASK_DATA',\r\n WaitingToUpdateForecastTaskSettings = 'WAITING_TO_UPDATE_FORECAST_TASK_SETTINGS',\r\n Running = 'RUNNING',\r\n Success = 'SUCCESS',\r\n Ready = 'READY',\r\n TimeOut = 'TIMEOUT',\r\n GANoProfiles = 'GANOPROFILES',\r\n MYOBSelectFile = 'MYOBSELECTFILE',\r\n NoTrackingSelected = 'NOTRACKINGSELECTED',\r\n CyclicalDependencies = 'CYCLICALDEPENDENCIES',\r\n NotRequired = 'NOTREQUIRED',\r\n Checking = 'CHECKING',\r\n UnknownError = 'UNKNOWNERROR',\r\n SuccessWithErrors = 'SUCCESSWITHERRORS',\r\n}\r\n\r\nexport const FailInviteCustomerCareRequest = 'fail-customer-care-request';\r\n","export interface Country {\r\n iso2: string;\r\n iso3: string;\r\n name: string;\r\n unicode: string;\r\n countryCode: string;\r\n displayName?: string;\r\n}\r\n\r\nexport interface CountryGroup {\r\n countries: Country[];\r\n}\r\n\r\nexport const countryGroups: CountryGroup[] = [\r\n {\r\n countries: [\r\n {\r\n iso2: 'AU',\r\n name: 'Australia',\r\n iso3: 'AUS',\r\n unicode: '🇦🇺',\r\n countryCode: '61',\r\n },\r\n {\r\n iso2: 'NZ',\r\n displayName: 'New Zealand',\r\n name: 'New Zealand',\r\n iso3: 'NZL',\r\n unicode: '🇳🇿',\r\n countryCode: '64',\r\n },\r\n {\r\n iso2: 'GB',\r\n name: 'United Kingdom',\r\n iso3: 'GBR',\r\n unicode: '🇬🇧',\r\n countryCode: '44',\r\n },\r\n {\r\n iso2: 'US',\r\n name: 'United States',\r\n iso3: 'USA',\r\n unicode: '🇺🇸',\r\n countryCode: '1',\r\n },\r\n ],\r\n },\r\n {\r\n countries: [\r\n {\r\n iso2: 'AF',\r\n name: 'Afghanistan',\r\n iso3: 'AFG',\r\n unicode: '🇦🇫',\r\n countryCode: '93',\r\n },\r\n {\r\n iso2: 'AX',\r\n name: 'Aland Islands',\r\n iso3: 'ALA',\r\n unicode: '🇦🇽',\r\n countryCode: '358',\r\n },\r\n {\r\n iso2: 'AL',\r\n name: 'Albania',\r\n iso3: 'ALB',\r\n unicode: '🇦🇱',\r\n countryCode: '355',\r\n },\r\n {\r\n iso2: 'DZ',\r\n name: 'Algeria',\r\n iso3: 'DZA',\r\n unicode: '🇩🇿',\r\n countryCode: '213',\r\n },\r\n {\r\n iso2: 'AS',\r\n name: 'American Samoa',\r\n iso3: 'ASM',\r\n unicode: '🇦🇸',\r\n countryCode: '684',\r\n },\r\n {\r\n iso2: 'AD',\r\n name: 'Andorra',\r\n iso3: 'AND',\r\n unicode: '🇦🇩',\r\n countryCode: '376',\r\n },\r\n {\r\n iso2: 'AO',\r\n name: 'Angola',\r\n iso3: 'AGO',\r\n unicode: '🇦🇴',\r\n countryCode: '244',\r\n },\r\n {\r\n iso2: 'AI',\r\n name: 'Anguilla',\r\n iso3: 'AIA',\r\n unicode: '🇦🇮',\r\n countryCode: '264',\r\n },\r\n {\r\n iso2: 'AG',\r\n name: 'Antigua and Barbuda',\r\n iso3: 'ATG',\r\n unicode: '🇦🇬',\r\n countryCode: '268',\r\n },\r\n {\r\n iso2: 'AR',\r\n name: 'Argentina',\r\n iso3: 'ARG',\r\n unicode: '🇦🇷',\r\n countryCode: '54',\r\n },\r\n {\r\n iso2: 'AM',\r\n name: 'Armenia',\r\n iso3: 'ARM',\r\n unicode: '🇦🇲',\r\n countryCode: '374',\r\n },\r\n {\r\n iso2: 'AW',\r\n name: 'Aruba',\r\n iso3: 'ABW',\r\n unicode: '🇦🇼',\r\n countryCode: '297',\r\n },\r\n {\r\n iso2: 'AT',\r\n name: 'Austria',\r\n iso3: 'AUT',\r\n unicode: '🇦🇹',\r\n countryCode: '43',\r\n },\r\n {\r\n iso2: 'AZ',\r\n name: 'Azerbaijan',\r\n iso3: 'AZE',\r\n unicode: '🇦🇿',\r\n countryCode: '994',\r\n },\r\n {\r\n iso2: 'BS',\r\n name: 'Bahamas',\r\n iso3: 'BHS',\r\n unicode: '🇧🇸',\r\n countryCode: '1',\r\n },\r\n {\r\n iso2: 'BH',\r\n name: 'Bahrain',\r\n iso3: 'BHR',\r\n unicode: '🇧🇭',\r\n countryCode: '973',\r\n },\r\n {\r\n iso2: 'BD',\r\n name: 'Bangladesh',\r\n iso3: 'BGD',\r\n unicode: '🇧🇩',\r\n countryCode: '880',\r\n },\r\n {\r\n iso2: 'BB',\r\n name: 'Barbados',\r\n iso3: 'BRB',\r\n unicode: '🇧🇧',\r\n countryCode: '246',\r\n },\r\n {\r\n iso2: 'BY',\r\n name: 'Belarus',\r\n iso3: 'BLR',\r\n unicode: '🇧🇾',\r\n countryCode: '375',\r\n },\r\n {\r\n iso2: 'BE',\r\n name: 'Belgium',\r\n iso3: 'BEL',\r\n unicode: '🇧🇪',\r\n countryCode: '32',\r\n },\r\n {\r\n iso2: 'BZ',\r\n name: 'Belize',\r\n iso3: 'BLZ',\r\n unicode: '🇧🇿',\r\n countryCode: '501',\r\n },\r\n {\r\n iso2: 'BJ',\r\n name: 'Benin',\r\n iso3: 'BEN',\r\n unicode: '🇧🇯',\r\n countryCode: '229',\r\n },\r\n {\r\n iso2: 'BM',\r\n name: 'Bermuda',\r\n iso3: 'BMU',\r\n unicode: '🇧🇲',\r\n countryCode: '1',\r\n },\r\n {\r\n iso2: 'BT',\r\n name: 'Bhutan',\r\n iso3: 'BTN',\r\n unicode: '🇧🇹',\r\n countryCode: '975',\r\n },\r\n {\r\n iso2: 'BO',\r\n name: 'Bolivia',\r\n iso3: 'BOL',\r\n unicode: '🇧🇴',\r\n countryCode: '591',\r\n },\r\n {\r\n iso2: 'BQ',\r\n name: 'Bonaire, Saint Eustatius and Saba ',\r\n iso3: 'BES',\r\n unicode: '🇧🇶',\r\n countryCode: '599',\r\n },\r\n {\r\n iso2: 'BA',\r\n name: 'Bosnia and Herzegovina',\r\n iso3: 'BIH',\r\n unicode: '🇧🇦',\r\n countryCode: '387',\r\n },\r\n {\r\n iso2: 'BW',\r\n name: 'Botswana',\r\n iso3: 'BWA',\r\n unicode: '🇧🇼',\r\n countryCode: '267',\r\n },\r\n {\r\n iso2: 'BV',\r\n name: 'Bouvet Island',\r\n iso3: 'BVT',\r\n unicode: '🇧🇻',\r\n countryCode: '55',\r\n },\r\n {\r\n iso2: 'BR',\r\n name: 'Brazil',\r\n iso3: 'BRA',\r\n unicode: '🇧🇷',\r\n countryCode: '55',\r\n },\r\n {\r\n iso2: 'IO',\r\n name: 'British Indian Ocean Territory',\r\n iso3: 'IOT',\r\n unicode: '🇮🇴',\r\n countryCode: '246',\r\n },\r\n {\r\n iso2: 'VG',\r\n name: 'British Virgin Islands',\r\n iso3: 'VGB',\r\n unicode: '🇻🇬',\r\n countryCode: '1',\r\n },\r\n {\r\n iso2: 'BN',\r\n name: 'Brunei',\r\n iso3: 'BRN',\r\n unicode: '🇧🇳',\r\n countryCode: '673',\r\n },\r\n {\r\n iso2: 'BG',\r\n name: 'Bulgaria',\r\n iso3: 'BGR',\r\n unicode: '🇧🇬',\r\n countryCode: '359',\r\n },\r\n {\r\n iso2: 'BF',\r\n name: 'Burkina Faso',\r\n iso3: 'BFA',\r\n unicode: '🇧🇫',\r\n countryCode: '226',\r\n },\r\n {\r\n iso2: 'BI',\r\n name: 'Burundi',\r\n iso3: 'BDI',\r\n unicode: '🇧🇮',\r\n countryCode: '257',\r\n },\r\n {\r\n iso2: 'KH',\r\n name: 'Cambodia',\r\n iso3: 'KHM',\r\n unicode: '🇰🇭',\r\n countryCode: '855',\r\n },\r\n {\r\n iso2: 'CM',\r\n name: 'Cameroon',\r\n iso3: 'CMR',\r\n unicode: '🇨🇲',\r\n countryCode: '237',\r\n },\r\n {\r\n iso2: 'CA',\r\n name: 'Canada',\r\n iso3: 'CAN',\r\n unicode: '🇨🇦',\r\n countryCode: '1',\r\n },\r\n {\r\n iso2: 'CV',\r\n name: 'Cape Verde',\r\n iso3: 'CPV',\r\n unicode: '🇨🇻',\r\n countryCode: '238',\r\n },\r\n {\r\n iso2: 'KY',\r\n name: 'Cayman Islands',\r\n iso3: 'CYM',\r\n unicode: '🇰🇾',\r\n countryCode: '345',\r\n },\r\n {\r\n iso2: 'CF',\r\n name: 'Central African Republic',\r\n iso3: 'CAF',\r\n unicode: '🇨🇫',\r\n countryCode: '236',\r\n },\r\n {\r\n iso2: 'TD',\r\n name: 'Chad',\r\n iso3: 'TCD',\r\n unicode: '🇹🇩',\r\n countryCode: '235',\r\n },\r\n {\r\n iso2: 'CL',\r\n name: 'Chile',\r\n iso3: 'CHL',\r\n unicode: '🇨🇱',\r\n countryCode: '56',\r\n },\r\n {\r\n iso2: 'CN',\r\n name: 'China',\r\n iso3: 'CHN',\r\n unicode: '🇨🇳',\r\n countryCode: '86',\r\n },\r\n {\r\n iso2: 'CX',\r\n name: 'Christmas Island',\r\n iso3: 'CXR',\r\n unicode: '🇨🇽',\r\n countryCode: '61',\r\n },\r\n {\r\n iso2: 'CC',\r\n name: 'Cocos Islands',\r\n iso3: 'CCK',\r\n unicode: '🇨🇨',\r\n countryCode: '61',\r\n },\r\n {\r\n iso2: 'CO',\r\n name: 'Colombia',\r\n iso3: 'COL',\r\n unicode: '🇨🇴',\r\n countryCode: '57',\r\n },\r\n {\r\n iso2: 'KM',\r\n name: 'Comoros',\r\n iso3: 'COM',\r\n unicode: '🇰🇲',\r\n countryCode: '269',\r\n },\r\n {\r\n iso2: 'CK',\r\n name: 'Cook Islands',\r\n iso3: 'COK',\r\n unicode: '🇨🇰',\r\n countryCode: '682',\r\n },\r\n {\r\n iso2: 'CR',\r\n name: 'Costa Rica',\r\n iso3: 'CRI',\r\n unicode: '🇨🇷',\r\n countryCode: '506',\r\n },\r\n {\r\n iso2: 'HR',\r\n name: 'Croatia',\r\n iso3: 'HRV',\r\n unicode: '🇭🇷',\r\n countryCode: '385',\r\n },\r\n {\r\n iso2: 'CU',\r\n name: 'Cuba',\r\n iso3: 'CUB',\r\n unicode: '🇨🇺',\r\n countryCode: '53',\r\n },\r\n {\r\n iso2: 'CW',\r\n name: 'Curacao',\r\n iso3: 'CUW',\r\n unicode: '🇨🇼',\r\n countryCode: '599',\r\n },\r\n {\r\n iso2: 'CY',\r\n name: 'Cyprus',\r\n iso3: 'CYP',\r\n unicode: '🇨🇾',\r\n countryCode: '357',\r\n },\r\n {\r\n iso2: 'CZ',\r\n name: 'Czech Republic',\r\n iso3: 'CZE',\r\n unicode: '🇨🇿',\r\n countryCode: '420',\r\n },\r\n {\r\n iso2: 'CD',\r\n name: 'Democratic Republic of the Congo',\r\n iso3: 'COD',\r\n unicode: '🇨🇩',\r\n countryCode: '243',\r\n },\r\n {\r\n iso2: 'DK',\r\n name: 'Denmark',\r\n iso3: 'DNK',\r\n unicode: '🇩🇰',\r\n countryCode: '45',\r\n },\r\n {\r\n iso2: 'DJ',\r\n name: 'Djibouti',\r\n iso3: 'DJI',\r\n unicode: '🇩🇯',\r\n countryCode: '253',\r\n },\r\n {\r\n iso2: 'DM',\r\n name: 'Dominica',\r\n iso3: 'DMA',\r\n unicode: '🇩🇲',\r\n countryCode: '767',\r\n },\r\n {\r\n iso2: 'DO',\r\n name: 'Dominican Republic',\r\n iso3: 'DOM',\r\n unicode: '🇩🇴',\r\n countryCode: '1',\r\n },\r\n {\r\n iso2: 'TL',\r\n name: 'East Timor',\r\n iso3: 'TLS',\r\n unicode: '🇹🇱',\r\n countryCode: '670',\r\n },\r\n {\r\n iso2: 'EC',\r\n name: 'Ecuador',\r\n iso3: 'ECU',\r\n unicode: '🇪🇨',\r\n countryCode: '593',\r\n },\r\n {\r\n iso2: 'EG',\r\n name: 'Egypt',\r\n iso3: 'EGY',\r\n unicode: '🇪🇬',\r\n countryCode: '20',\r\n },\r\n {\r\n iso2: 'SV',\r\n name: 'El Salvador',\r\n iso3: 'SLV',\r\n unicode: '🇸🇻',\r\n countryCode: '503',\r\n },\r\n {\r\n iso2: 'GQ',\r\n name: 'Equatorial Guinea',\r\n iso3: 'GNQ',\r\n unicode: '🇬🇶',\r\n countryCode: '240',\r\n },\r\n {\r\n iso2: 'ER',\r\n name: 'Eritrea',\r\n iso3: 'ERI',\r\n unicode: '🇪🇷',\r\n countryCode: '291',\r\n },\r\n {\r\n iso2: 'EE',\r\n name: 'Estonia',\r\n iso3: 'EST',\r\n unicode: '🇪🇪',\r\n countryCode: '372',\r\n },\r\n {\r\n iso2: 'ET',\r\n name: 'Ethiopia',\r\n iso3: 'ETH',\r\n unicode: '🇪🇹',\r\n countryCode: '251',\r\n },\r\n {\r\n iso2: 'FK',\r\n name: 'Falkland Islands',\r\n iso3: 'FLK',\r\n unicode: '🇫🇰',\r\n countryCode: '500',\r\n },\r\n {\r\n iso2: 'FO',\r\n name: 'Faroe Islands',\r\n iso3: 'FRO',\r\n unicode: '🇫🇴',\r\n countryCode: '298',\r\n },\r\n {\r\n iso2: 'FJ',\r\n name: 'Fiji',\r\n iso3: 'FJI',\r\n unicode: '🇫🇯',\r\n countryCode: '679',\r\n },\r\n {\r\n iso2: 'FI',\r\n name: 'Finland',\r\n iso3: 'FIN',\r\n unicode: '🇫🇮',\r\n countryCode: '358',\r\n },\r\n {\r\n iso2: 'FR',\r\n name: 'France',\r\n iso3: 'FRA',\r\n unicode: '🇫🇷',\r\n countryCode: '33',\r\n },\r\n {\r\n iso2: 'GF',\r\n name: 'French Guiana',\r\n iso3: 'GUF',\r\n unicode: '🇬🇫',\r\n countryCode: '594',\r\n },\r\n {\r\n iso2: 'PF',\r\n name: 'French Polynesia',\r\n iso3: 'PYF',\r\n unicode: '🇵🇫',\r\n countryCode: '689',\r\n },\r\n {\r\n iso2: 'TF',\r\n name: 'French Southern Territories',\r\n iso3: 'ATF',\r\n unicode: '🇹🇫',\r\n countryCode: '262',\r\n },\r\n {\r\n iso2: 'GA',\r\n name: 'Gabon',\r\n iso3: 'GAB',\r\n unicode: '🇬🇦',\r\n countryCode: '241',\r\n },\r\n {\r\n iso2: 'GM',\r\n name: 'Gambia',\r\n iso3: 'GMB',\r\n unicode: '🇬🇲',\r\n countryCode: '220',\r\n },\r\n {\r\n iso2: 'GE',\r\n name: 'Georgia',\r\n iso3: 'GEO',\r\n unicode: '🇬🇪',\r\n countryCode: '995',\r\n },\r\n {\r\n iso2: 'DE',\r\n name: 'Germany',\r\n iso3: 'DEU',\r\n unicode: '🇩🇪',\r\n countryCode: '49',\r\n },\r\n {\r\n iso2: 'GH',\r\n name: 'Ghana',\r\n iso3: 'GHA',\r\n unicode: '🇬🇭',\r\n countryCode: '233',\r\n },\r\n {\r\n iso2: 'GI',\r\n name: 'Gibraltar',\r\n iso3: 'GIB',\r\n unicode: '🇬🇮',\r\n countryCode: '350',\r\n },\r\n {\r\n iso2: 'GR',\r\n name: 'Greece',\r\n iso3: 'GRC',\r\n unicode: '🇬🇷',\r\n countryCode: '30',\r\n },\r\n {\r\n iso2: 'GL',\r\n name: 'Greenland',\r\n iso3: 'GRL',\r\n unicode: '🇬🇱',\r\n countryCode: '299',\r\n },\r\n {\r\n iso2: 'GD',\r\n name: 'Grenada',\r\n iso3: 'GRD',\r\n unicode: '🇬🇩',\r\n countryCode: '473',\r\n },\r\n {\r\n iso2: 'GP',\r\n name: 'Guadeloupe',\r\n iso3: 'GLP',\r\n unicode: '🇬🇵',\r\n countryCode: '590',\r\n },\r\n {\r\n iso2: 'GU',\r\n name: 'Guam',\r\n iso3: 'GUM',\r\n unicode: '🇬🇺',\r\n countryCode: '1',\r\n },\r\n {\r\n iso2: 'GT',\r\n name: 'Guatemala',\r\n iso3: 'GTM',\r\n unicode: '🇬🇹',\r\n countryCode: '502',\r\n },\r\n {\r\n iso2: 'GG',\r\n name: 'Guernsey',\r\n iso3: 'GGY',\r\n unicode: '🇬🇬',\r\n countryCode: '44',\r\n },\r\n {\r\n iso2: 'GN',\r\n name: 'Guinea',\r\n iso3: 'GIN',\r\n unicode: '🇬🇳',\r\n countryCode: '224',\r\n },\r\n {\r\n iso2: 'GW',\r\n name: 'Guinea-Bissau',\r\n iso3: 'GNB',\r\n unicode: '🇬🇼',\r\n countryCode: '245',\r\n },\r\n {\r\n iso2: 'GY',\r\n name: 'Guyana',\r\n iso3: 'GUY',\r\n unicode: '🇬🇾',\r\n countryCode: '592',\r\n },\r\n {\r\n iso2: 'HT',\r\n name: 'Haiti',\r\n iso3: 'HTI',\r\n unicode: '🇭🇹',\r\n countryCode: '509',\r\n },\r\n {\r\n iso2: 'HM',\r\n name: 'Heard Island and McDonald Islands',\r\n iso3: 'HMD',\r\n unicode: '🇭🇲',\r\n countryCode: '672',\r\n },\r\n {\r\n iso2: 'HN',\r\n name: 'Honduras',\r\n iso3: 'HND',\r\n unicode: '🇭🇳',\r\n countryCode: '504',\r\n },\r\n {\r\n iso2: 'HK',\r\n name: 'Hong Kong',\r\n iso3: 'HKG',\r\n unicode: '🇭🇰',\r\n countryCode: '852',\r\n },\r\n {\r\n iso2: 'HU',\r\n name: 'Hungary',\r\n iso3: 'HUN',\r\n unicode: '🇭🇺',\r\n countryCode: '36',\r\n },\r\n {\r\n iso2: 'IS',\r\n name: 'Iceland',\r\n iso3: 'ISL',\r\n unicode: '🇮🇸',\r\n countryCode: '354',\r\n },\r\n {\r\n iso2: 'IN',\r\n name: 'India',\r\n iso3: 'IND',\r\n unicode: '🇮🇳',\r\n countryCode: '91',\r\n },\r\n {\r\n iso2: 'ID',\r\n name: 'Indonesia',\r\n iso3: 'IDN',\r\n unicode: '🇮🇩',\r\n countryCode: '62',\r\n },\r\n {\r\n iso2: 'IR',\r\n name: 'Iran',\r\n iso3: 'IRN',\r\n unicode: '🇮🇷',\r\n countryCode: '98',\r\n },\r\n {\r\n iso2: 'IQ',\r\n name: 'Iraq',\r\n iso3: 'IRQ',\r\n unicode: '🇮🇶',\r\n countryCode: '964',\r\n },\r\n {\r\n iso2: 'IE',\r\n name: 'Ireland',\r\n iso3: 'IRL',\r\n unicode: '🇮🇪',\r\n countryCode: '353',\r\n },\r\n {\r\n iso2: 'IM',\r\n name: 'Isle of Man',\r\n iso3: 'IMN',\r\n unicode: '🇮🇲',\r\n countryCode: '44',\r\n },\r\n {\r\n iso2: 'IL',\r\n name: 'Israel',\r\n iso3: 'ISR',\r\n unicode: '🇮🇱',\r\n countryCode: '972',\r\n },\r\n {\r\n iso2: 'IT',\r\n name: 'Italy',\r\n iso3: 'ITA',\r\n unicode: '🇮🇹',\r\n countryCode: '39',\r\n },\r\n {\r\n iso2: 'CI',\r\n name: 'Ivory Coast',\r\n iso3: 'CIV',\r\n unicode: '🇨🇮',\r\n countryCode: '225',\r\n },\r\n {\r\n iso2: 'JM',\r\n name: 'Jamaica',\r\n iso3: 'JAM',\r\n unicode: '🇯🇲',\r\n countryCode: '876',\r\n },\r\n {\r\n iso2: 'JP',\r\n name: 'Japan',\r\n iso3: 'JPN',\r\n unicode: '🇯🇵',\r\n countryCode: '81',\r\n },\r\n {\r\n iso2: 'JE',\r\n name: 'Jersey',\r\n iso3: 'JEY',\r\n unicode: '🇯🇪',\r\n countryCode: '44',\r\n },\r\n {\r\n iso2: 'JO',\r\n name: 'Jordan',\r\n iso3: 'JOR',\r\n unicode: '🇯🇴',\r\n countryCode: '962',\r\n },\r\n {\r\n iso2: 'KZ',\r\n name: 'Kazakhstan',\r\n iso3: 'KAZ',\r\n unicode: '🇰🇿',\r\n countryCode: '7',\r\n },\r\n {\r\n iso2: 'KE',\r\n name: 'Kenya',\r\n iso3: 'KEN',\r\n unicode: '🇰🇪',\r\n countryCode: '254',\r\n },\r\n {\r\n iso2: 'KI',\r\n name: 'Kiribati',\r\n iso3: 'KIR',\r\n unicode: '🇰🇮',\r\n countryCode: '686',\r\n },\r\n {\r\n iso2: 'XK',\r\n name: 'Kosovo',\r\n iso3: 'XKX',\r\n unicode: '🇽🇰',\r\n countryCode: '383',\r\n },\r\n {\r\n iso2: 'KW',\r\n name: 'Kuwait',\r\n iso3: 'KWT',\r\n unicode: '🇰🇼',\r\n countryCode: '965',\r\n },\r\n {\r\n iso2: 'KG',\r\n name: 'Kyrgyzstan',\r\n iso3: 'KGZ',\r\n unicode: '🇰🇬',\r\n countryCode: '996',\r\n },\r\n {\r\n iso2: 'LA',\r\n name: 'Laos',\r\n iso3: 'LAO',\r\n unicode: '🇱🇦',\r\n countryCode: '856',\r\n },\r\n {\r\n iso2: 'LV',\r\n name: 'Latvia',\r\n iso3: 'LVA',\r\n unicode: '🇱🇻',\r\n countryCode: '371',\r\n },\r\n {\r\n iso2: 'LB',\r\n name: 'Lebanon',\r\n iso3: 'LBN',\r\n unicode: '🇱🇧',\r\n countryCode: '961',\r\n },\r\n {\r\n iso2: 'LS',\r\n name: 'Lesotho',\r\n iso3: 'LSO',\r\n unicode: '🇱🇸',\r\n countryCode: '266',\r\n },\r\n {\r\n iso2: 'LR',\r\n name: 'Liberia',\r\n iso3: 'LBR',\r\n unicode: '🇱🇷',\r\n countryCode: '231',\r\n },\r\n {\r\n iso2: 'LY',\r\n name: 'Libya',\r\n iso3: 'LBY',\r\n unicode: '🇱🇾',\r\n countryCode: '218',\r\n },\r\n {\r\n iso2: 'LI',\r\n name: 'Liechtenstein',\r\n iso3: 'LIE',\r\n unicode: '🇱🇮',\r\n countryCode: '423',\r\n },\r\n {\r\n iso2: 'LT',\r\n name: 'Lithuania',\r\n iso3: 'LTU',\r\n unicode: '🇱🇹',\r\n countryCode: '370',\r\n },\r\n {\r\n iso2: 'LU',\r\n name: 'Luxembourg',\r\n iso3: 'LUX',\r\n unicode: '🇱🇺',\r\n countryCode: '352',\r\n },\r\n {\r\n iso2: 'MO',\r\n name: 'Macao',\r\n iso3: 'MAC',\r\n unicode: '🇲🇴',\r\n countryCode: '853',\r\n },\r\n {\r\n iso2: 'MK',\r\n name: 'Macedonia',\r\n iso3: 'MKD',\r\n unicode: '🇲🇰',\r\n countryCode: '389',\r\n },\r\n {\r\n iso2: 'MG',\r\n name: 'Madagascar',\r\n iso3: 'MDG',\r\n unicode: '🇲🇬',\r\n countryCode: '261',\r\n },\r\n {\r\n iso2: 'MW',\r\n name: 'Malawi',\r\n iso3: 'MWI',\r\n unicode: '🇲🇼',\r\n countryCode: '265',\r\n },\r\n {\r\n iso2: 'MY',\r\n name: 'Malaysia',\r\n iso3: 'MYS',\r\n unicode: '🇲🇾',\r\n countryCode: '60',\r\n },\r\n {\r\n iso2: 'MV',\r\n name: 'Maldives',\r\n iso3: 'MDV',\r\n unicode: '🇲🇻',\r\n countryCode: '960',\r\n },\r\n {\r\n iso2: 'ML',\r\n name: 'Mali',\r\n iso3: 'MLI',\r\n unicode: '🇲🇱',\r\n countryCode: '223',\r\n },\r\n {\r\n iso2: 'MT',\r\n name: 'Malta',\r\n iso3: 'MLT',\r\n unicode: '🇲🇹',\r\n countryCode: '356',\r\n },\r\n {\r\n iso2: 'MH',\r\n name: 'Marshall Islands',\r\n iso3: 'MHL',\r\n unicode: '🇲🇭',\r\n countryCode: '692',\r\n },\r\n {\r\n iso2: 'MQ',\r\n name: 'Martinique',\r\n iso3: 'MTQ',\r\n unicode: '🇲🇶',\r\n countryCode: '596',\r\n },\r\n {\r\n iso2: 'MR',\r\n name: 'Mauritania',\r\n iso3: 'MRT',\r\n unicode: '🇲🇷',\r\n countryCode: '222',\r\n },\r\n {\r\n iso2: 'MU',\r\n name: 'Mauritius',\r\n iso3: 'MUS',\r\n unicode: '🇲🇺',\r\n countryCode: '230',\r\n },\r\n {\r\n iso2: 'YT',\r\n name: 'Mayotte',\r\n iso3: 'MYT',\r\n unicode: '🇾🇹',\r\n countryCode: '262',\r\n },\r\n {\r\n iso2: 'MX',\r\n name: 'Mexico',\r\n iso3: 'MEX',\r\n unicode: '🇲🇽',\r\n countryCode: '52',\r\n },\r\n {\r\n iso2: 'FM',\r\n name: 'Micronesia',\r\n iso3: 'FSM',\r\n unicode: '🇫🇲',\r\n countryCode: '691',\r\n },\r\n {\r\n iso2: 'MD',\r\n name: 'Moldova',\r\n iso3: 'MDA',\r\n unicode: '🇲🇩',\r\n countryCode: '373',\r\n },\r\n {\r\n iso2: 'MC',\r\n name: 'Monaco',\r\n iso3: 'MCO',\r\n unicode: '🇲🇨',\r\n countryCode: '377',\r\n },\r\n {\r\n iso2: 'MN',\r\n name: 'Mongolia',\r\n iso3: 'MNG',\r\n unicode: '🇲🇳',\r\n countryCode: '976',\r\n },\r\n {\r\n iso2: 'ME',\r\n name: 'Montenegro',\r\n iso3: 'MNE',\r\n unicode: '🇲🇪',\r\n countryCode: '382',\r\n },\r\n {\r\n iso2: 'MS',\r\n name: 'Montserrat',\r\n iso3: 'MSR',\r\n unicode: '🇲🇸',\r\n countryCode: '1',\r\n },\r\n {\r\n iso2: 'MA',\r\n name: 'Morocco',\r\n iso3: 'MAR',\r\n unicode: '🇲🇦',\r\n countryCode: '212',\r\n },\r\n {\r\n iso2: 'MZ',\r\n name: 'Mozambique',\r\n iso3: 'MOZ',\r\n unicode: '🇲🇿',\r\n countryCode: '258',\r\n },\r\n {\r\n iso2: 'MM',\r\n name: 'Myanmar',\r\n iso3: 'MMR',\r\n unicode: '🇲🇲',\r\n countryCode: '95',\r\n },\r\n {\r\n iso2: 'NA',\r\n name: 'Namibia',\r\n iso3: 'NAM',\r\n unicode: '🇳🇦',\r\n countryCode: '264',\r\n },\r\n {\r\n iso2: 'NR',\r\n name: 'Nauru',\r\n iso3: 'NRU',\r\n unicode: '🇳🇷',\r\n countryCode: '674',\r\n },\r\n {\r\n iso2: 'NP',\r\n name: 'Nepal',\r\n iso3: 'NPL',\r\n unicode: '🇳🇵',\r\n countryCode: '977',\r\n },\r\n {\r\n iso2: 'NL',\r\n name: 'Netherlands',\r\n iso3: 'NLD',\r\n unicode: '🇳🇱',\r\n countryCode: '31',\r\n },\r\n {\r\n iso2: 'NC',\r\n name: 'New Caledonia',\r\n iso3: 'NCL',\r\n unicode: '🇳🇨',\r\n countryCode: '687',\r\n },\r\n {\r\n iso2: 'NI',\r\n name: 'Nicaragua',\r\n iso3: 'NIC',\r\n unicode: '🇳🇮',\r\n countryCode: '505',\r\n },\r\n {\r\n iso2: 'NE',\r\n name: 'Niger',\r\n iso3: 'NER',\r\n unicode: '🇳🇪',\r\n countryCode: '227',\r\n },\r\n {\r\n iso2: 'NG',\r\n name: 'Nigeria',\r\n iso3: 'NGA',\r\n unicode: '🇳🇬',\r\n countryCode: '234',\r\n },\r\n {\r\n iso2: 'NU',\r\n name: 'Niue',\r\n iso3: 'NIU',\r\n unicode: '🇳🇺',\r\n countryCode: '683',\r\n },\r\n {\r\n iso2: 'NF',\r\n name: 'Norfolk Island',\r\n iso3: 'NFK',\r\n unicode: '🇳🇫',\r\n countryCode: '672',\r\n },\r\n {\r\n iso2: 'KP',\r\n name: 'North Korea',\r\n iso3: 'PRK',\r\n unicode: '🇰🇵',\r\n countryCode: '850',\r\n },\r\n {\r\n iso2: 'MP',\r\n name: 'Northern Mariana Islands',\r\n iso3: 'MNP',\r\n unicode: '🇲🇵',\r\n countryCode: '1',\r\n },\r\n {\r\n iso2: 'NO',\r\n name: 'Norway',\r\n iso3: 'NOR',\r\n unicode: '🇳🇴',\r\n countryCode: '47',\r\n },\r\n {\r\n iso2: 'OM',\r\n name: 'Oman',\r\n iso3: 'OMN',\r\n unicode: '🇴🇲',\r\n countryCode: '968',\r\n },\r\n {\r\n iso2: 'PK',\r\n name: 'Pakistan',\r\n iso3: 'PAK',\r\n unicode: '🇵🇰',\r\n countryCode: '92',\r\n },\r\n {\r\n iso2: 'PW',\r\n name: 'Palau',\r\n iso3: 'PLW',\r\n unicode: '🇵🇼',\r\n countryCode: '680',\r\n },\r\n {\r\n iso2: 'PS',\r\n name: 'Palestinian Territory',\r\n iso3: 'PSE',\r\n unicode: '🇵🇸',\r\n countryCode: '970',\r\n },\r\n {\r\n iso2: 'PA',\r\n name: 'Panama',\r\n iso3: 'PAN',\r\n unicode: '🇵🇦',\r\n countryCode: '507',\r\n },\r\n {\r\n iso2: 'PG',\r\n name: 'Papua New Guinea',\r\n iso3: 'PNG',\r\n unicode: '🇵🇬',\r\n countryCode: '675',\r\n },\r\n {\r\n iso2: 'PY',\r\n name: 'Paraguay',\r\n iso3: 'PRY',\r\n unicode: '🇵🇾',\r\n countryCode: '595',\r\n },\r\n {\r\n iso2: 'PE',\r\n name: 'Peru',\r\n iso3: 'PER',\r\n unicode: '🇵🇪',\r\n countryCode: '51',\r\n },\r\n {\r\n iso2: 'PH',\r\n name: 'Philippines',\r\n iso3: 'PHL',\r\n unicode: '🇵🇭',\r\n countryCode: '63',\r\n },\r\n {\r\n iso2: 'PN',\r\n name: 'Pitcairn',\r\n iso3: 'PCN',\r\n unicode: '🇵🇳',\r\n countryCode: '870',\r\n },\r\n {\r\n iso2: 'PL',\r\n name: 'Poland',\r\n iso3: 'POL',\r\n unicode: '🇵🇱',\r\n countryCode: '48',\r\n },\r\n {\r\n iso2: 'PT',\r\n name: 'Portugal',\r\n iso3: 'PRT',\r\n unicode: '🇵🇹',\r\n countryCode: '351',\r\n },\r\n {\r\n iso2: 'PR',\r\n name: 'Puerto Rico',\r\n iso3: 'PRI',\r\n unicode: '🇵🇷',\r\n countryCode: '1',\r\n },\r\n {\r\n iso2: 'QA',\r\n name: 'Qatar',\r\n iso3: 'QAT',\r\n unicode: '🇶🇦',\r\n countryCode: '974',\r\n },\r\n {\r\n iso2: 'CG',\r\n name: 'Republic of the Congo',\r\n iso3: 'COG',\r\n unicode: '🇨🇬',\r\n countryCode: '242',\r\n },\r\n {\r\n iso2: 'RE',\r\n name: 'Reunion',\r\n iso3: 'REU',\r\n unicode: '🇷🇪',\r\n countryCode: '262',\r\n },\r\n {\r\n iso2: 'RO',\r\n name: 'Romania',\r\n iso3: 'ROU',\r\n unicode: '🇷🇴',\r\n countryCode: '40',\r\n },\r\n {\r\n iso2: 'RU',\r\n name: 'Russia',\r\n iso3: 'RUS',\r\n unicode: '🇷🇺',\r\n countryCode: '7',\r\n },\r\n {\r\n iso2: 'RW',\r\n name: 'Rwanda',\r\n iso3: 'RWA',\r\n unicode: '🇷🇼',\r\n countryCode: '250',\r\n },\r\n {\r\n iso2: 'BL',\r\n name: 'Saint Barthelemy',\r\n iso3: 'BLM',\r\n unicode: '🇧🇱',\r\n countryCode: '590',\r\n },\r\n {\r\n iso2: 'SH',\r\n name: 'Saint Helena',\r\n iso3: 'SHN',\r\n unicode: '🇸🇭',\r\n countryCode: '290',\r\n },\r\n {\r\n iso2: 'KN',\r\n name: 'Saint Kitts and Nevis',\r\n iso3: 'KNA',\r\n unicode: '🇰🇳',\r\n countryCode: '869',\r\n },\r\n {\r\n iso2: 'LC',\r\n name: 'Saint Lucia',\r\n iso3: 'LCA',\r\n unicode: '🇱🇨',\r\n countryCode: '758',\r\n },\r\n {\r\n iso2: 'MF',\r\n name: 'Saint Martin',\r\n iso3: 'MAF',\r\n unicode: '🇲🇫',\r\n countryCode: '590',\r\n },\r\n {\r\n iso2: 'PM',\r\n name: 'Saint Pierre and Miquelon',\r\n iso3: 'SPM',\r\n unicode: '🇵🇲',\r\n countryCode: '508',\r\n },\r\n {\r\n iso2: 'VC',\r\n name: 'Saint Vincent and the Grenadines',\r\n iso3: 'VCT',\r\n unicode: '🇻🇨',\r\n countryCode: '784',\r\n },\r\n {\r\n iso2: 'WS',\r\n name: 'Samoa',\r\n iso3: 'WSM',\r\n unicode: '🇼🇸',\r\n countryCode: '685',\r\n },\r\n {\r\n iso2: 'SM',\r\n name: 'San Marino',\r\n iso3: 'SMR',\r\n unicode: '🇸🇲',\r\n countryCode: '378',\r\n },\r\n {\r\n iso2: 'ST',\r\n name: 'Sao Tome and Principe',\r\n iso3: 'STP',\r\n unicode: '🇸🇹',\r\n countryCode: '239',\r\n },\r\n {\r\n iso2: 'SA',\r\n name: 'Saudi Arabia',\r\n iso3: 'SAU',\r\n unicode: '🇸🇦',\r\n countryCode: '966',\r\n },\r\n {\r\n iso2: 'SN',\r\n name: 'Senegal',\r\n iso3: 'SEN',\r\n unicode: '🇸🇳',\r\n countryCode: '221',\r\n },\r\n {\r\n iso2: 'RS',\r\n name: 'Serbia',\r\n iso3: 'SRB',\r\n unicode: '🇷🇸',\r\n countryCode: '381',\r\n },\r\n {\r\n iso2: 'SC',\r\n name: 'Seychelles',\r\n iso3: 'SYC',\r\n unicode: '🇸🇨',\r\n countryCode: '248',\r\n },\r\n {\r\n iso2: 'SL',\r\n name: 'Sierra Leone',\r\n iso3: 'SLE',\r\n unicode: '🇸🇱',\r\n countryCode: '232',\r\n },\r\n {\r\n iso2: 'SG',\r\n name: 'Singapore',\r\n iso3: 'SGP',\r\n unicode: '🇸🇬',\r\n countryCode: '65',\r\n },\r\n {\r\n iso2: 'SX',\r\n name: 'Sint Maarten',\r\n iso3: 'SXM',\r\n unicode: '🇸🇽',\r\n countryCode: '599',\r\n },\r\n {\r\n iso2: 'SK',\r\n name: 'Slovakia',\r\n iso3: 'SVK',\r\n unicode: '🇸🇰',\r\n countryCode: '421',\r\n },\r\n {\r\n iso2: 'SI',\r\n name: 'Slovenia',\r\n iso3: 'SVN',\r\n unicode: '🇸🇮',\r\n countryCode: '386',\r\n },\r\n {\r\n iso2: 'SB',\r\n name: 'Solomon Islands',\r\n iso3: 'SLB',\r\n unicode: '🇸🇧',\r\n countryCode: '677',\r\n },\r\n {\r\n iso2: 'SO',\r\n name: 'Somalia',\r\n iso3: 'SOM',\r\n unicode: '🇸🇴',\r\n countryCode: '252',\r\n },\r\n {\r\n iso2: 'ZA',\r\n name: 'South Africa',\r\n iso3: 'ZAF',\r\n unicode: '🇿🇦',\r\n countryCode: '27',\r\n },\r\n {\r\n iso2: 'GS',\r\n name: 'South Georgia and the South Sandwich Islands',\r\n iso3: 'SGS',\r\n unicode: '🇬🇸',\r\n countryCode: '500',\r\n },\r\n {\r\n iso2: 'KR',\r\n name: 'South Korea',\r\n iso3: 'KOR',\r\n unicode: '🇰🇷',\r\n countryCode: '82',\r\n },\r\n {\r\n iso2: 'SS',\r\n name: 'South Sudan',\r\n iso3: 'SSD',\r\n unicode: '🇸🇸',\r\n countryCode: '211',\r\n },\r\n {\r\n iso2: 'ES',\r\n name: 'Spain',\r\n iso3: 'ESP',\r\n unicode: '🇪🇸',\r\n countryCode: '34',\r\n },\r\n {\r\n iso2: 'LK',\r\n name: 'Sri Lanka',\r\n iso3: 'LKA',\r\n unicode: '🇱🇰',\r\n countryCode: '94',\r\n },\r\n {\r\n iso2: 'SD',\r\n name: 'Sudan',\r\n iso3: 'SDN',\r\n unicode: '🇸🇩',\r\n countryCode: '249',\r\n },\r\n {\r\n iso2: 'SR',\r\n name: 'Suriname',\r\n iso3: 'SUR',\r\n unicode: '🇸🇷',\r\n countryCode: '597',\r\n },\r\n {\r\n iso2: 'SJ',\r\n name: 'Svalbard and Jan Mayen',\r\n iso3: 'SJM',\r\n unicode: '🇸🇯',\r\n countryCode: '47',\r\n },\r\n {\r\n iso2: 'SZ',\r\n name: 'Swaziland',\r\n iso3: 'SWZ',\r\n unicode: '🇸🇿',\r\n countryCode: '268',\r\n },\r\n {\r\n iso2: 'SE',\r\n name: 'Sweden',\r\n iso3: 'SWE',\r\n unicode: '🇸🇪',\r\n countryCode: '46',\r\n },\r\n {\r\n iso2: 'CH',\r\n name: 'Switzerland',\r\n iso3: 'CHE',\r\n unicode: '🇨🇭',\r\n countryCode: '41',\r\n },\r\n {\r\n iso2: 'SY',\r\n name: 'Syria',\r\n iso3: 'SYR',\r\n unicode: '🇸🇾',\r\n countryCode: '963',\r\n },\r\n {\r\n iso2: 'TW',\r\n name: 'Taiwan',\r\n iso3: 'TWN',\r\n unicode: '🇹🇼',\r\n countryCode: '886',\r\n },\r\n {\r\n iso2: 'TJ',\r\n name: 'Tajikistan',\r\n iso3: 'TJK',\r\n unicode: '🇹🇯',\r\n countryCode: '992',\r\n },\r\n {\r\n iso2: 'TZ',\r\n name: 'Tanzania',\r\n iso3: 'TZA',\r\n unicode: '🇹🇿',\r\n countryCode: '255',\r\n },\r\n {\r\n iso2: 'TH',\r\n name: 'Thailand',\r\n iso3: 'THA',\r\n unicode: '🇹🇭',\r\n countryCode: '66',\r\n },\r\n {\r\n iso2: 'TG',\r\n name: 'Togo',\r\n iso3: 'TGO',\r\n unicode: '🇹🇬',\r\n countryCode: '228',\r\n },\r\n {\r\n iso2: 'TK',\r\n name: 'Tokelau',\r\n iso3: 'TKL',\r\n unicode: '🇹🇰',\r\n countryCode: '690',\r\n },\r\n {\r\n iso2: 'TO',\r\n name: 'Tonga',\r\n iso3: 'TON',\r\n unicode: '🇹🇴',\r\n countryCode: '676',\r\n },\r\n {\r\n iso2: 'TT',\r\n name: 'Trinidad and Tobago',\r\n iso3: 'TTO',\r\n unicode: '🇹🇹',\r\n countryCode: '868',\r\n },\r\n {\r\n iso2: 'TN',\r\n name: 'Tunisia',\r\n iso3: 'TUN',\r\n unicode: '🇹🇳',\r\n countryCode: '216',\r\n },\r\n {\r\n iso2: 'TR',\r\n name: 'Turkey',\r\n iso3: 'TUR',\r\n unicode: '🇹🇷',\r\n countryCode: '90',\r\n },\r\n {\r\n iso2: 'TM',\r\n name: 'Turkmenistan',\r\n iso3: 'TKM',\r\n unicode: '🇹🇲',\r\n countryCode: '993',\r\n },\r\n {\r\n iso2: 'TC',\r\n name: 'Turks and Caicos Islands',\r\n iso3: 'TCA',\r\n unicode: '🇹🇨',\r\n countryCode: '1',\r\n },\r\n {\r\n iso2: 'TV',\r\n name: 'Tuvalu',\r\n iso3: 'TUV',\r\n unicode: '🇹🇻',\r\n countryCode: '688',\r\n },\r\n {\r\n iso2: 'VI',\r\n name: 'US Virgin Islands',\r\n iso3: 'VIR',\r\n unicode: '🇻🇮',\r\n countryCode: '1',\r\n },\r\n {\r\n iso2: 'UG',\r\n name: 'Uganda',\r\n iso3: 'UGA',\r\n unicode: '🇺🇬',\r\n countryCode: '256',\r\n },\r\n {\r\n iso2: 'UA',\r\n name: 'Ukraine',\r\n iso3: 'UKR',\r\n unicode: '🇺🇦',\r\n countryCode: '380',\r\n },\r\n {\r\n iso2: 'AE',\r\n name: 'United Arab Emirates',\r\n iso3: 'ARE',\r\n unicode: '🇦🇪',\r\n countryCode: '971',\r\n },\r\n {\r\n iso2: 'UM',\r\n name: 'United States Minor Outlying Islands',\r\n iso3: 'UMI',\r\n unicode: '🇺🇲',\r\n countryCode: '1',\r\n },\r\n {\r\n iso2: 'UY',\r\n name: 'Uruguay',\r\n iso3: 'URY',\r\n unicode: '🇺🇾',\r\n countryCode: '598',\r\n },\r\n {\r\n iso2: 'UZ',\r\n name: 'Uzbekistan',\r\n iso3: 'UZB',\r\n unicode: '🇺🇿',\r\n countryCode: '998',\r\n },\r\n {\r\n iso2: 'VU',\r\n name: 'Vanuatu',\r\n iso3: 'VUT',\r\n unicode: '🇻🇺',\r\n countryCode: '678',\r\n },\r\n {\r\n iso2: 'VA',\r\n name: 'Vatican',\r\n iso3: 'VAT',\r\n unicode: '🇻🇦',\r\n countryCode: '379',\r\n },\r\n {\r\n iso2: 'VE',\r\n name: 'Venezuela',\r\n iso3: 'VEN',\r\n unicode: '🇻🇪',\r\n countryCode: '58',\r\n },\r\n {\r\n iso2: 'VN',\r\n name: 'Vietnam',\r\n iso3: 'VNM',\r\n unicode: '🇻🇳',\r\n countryCode: '84',\r\n },\r\n {\r\n iso2: 'WF',\r\n name: 'Wallis and Futuna',\r\n iso3: 'WLF',\r\n unicode: '🇼🇫',\r\n countryCode: '681',\r\n },\r\n {\r\n iso2: 'EH',\r\n name: 'Western Sahara',\r\n iso3: 'ESH',\r\n unicode: '🇪🇭',\r\n countryCode: '212',\r\n },\r\n {\r\n iso2: 'YE',\r\n name: 'Yemen',\r\n iso3: 'YEM',\r\n unicode: '🇾🇪',\r\n countryCode: '967',\r\n },\r\n {\r\n iso2: 'ZM',\r\n name: 'Zambia',\r\n iso3: 'ZMB',\r\n unicode: '🇿🇲',\r\n countryCode: '260',\r\n },\r\n {\r\n iso2: 'ZW',\r\n name: 'Zimbabwe',\r\n iso3: 'ZWE',\r\n unicode: '🇿🇼',\r\n countryCode: '263',\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport const getCountry = ({ iso3 }: { iso3: string }): Country => {\r\n return countryGroups.flatMap((countryGroup) => countryGroup.countries).find((country) => country.iso3 === iso3);\r\n};\r\n\r\nexport const getCountryByCode = (countryCode: string): Country => {\r\n return countryGroups\r\n .flatMap((countryGroup) => countryGroup.countries)\r\n .find((country) => country.countryCode === countryCode);\r\n};\r\n","import { DataSourceTypeCode, ReportMode } from '../../Codes';\r\nimport * as Requests from './ApiRequestModels';\r\n\r\nexport class Endpoints {\r\n // Spotlight\r\n static DoEvent = '/DoEvent';\r\n static DoHtmlEvent = '/DoHtmlEvent';\r\n static Refresh = '/Refresh';\r\n static Charts = '/Charts';\r\n static GetMemberRoles = '/GetMemberRoles';\r\n static SendFeedback = '/SendFeedback';\r\n static LogEvent = '/LogEvent';\r\n static Connect = '/Connect';\r\n static ConnectReport = '/ConnectReport';\r\n static Report = '/Report';\r\n static ReportExport = '/ReportExport';\r\n\r\n //Member\r\n static MemberResetPassword = '/Member/ForceResetPassword';\r\n static MemberForgotPasswordOidc = '/Member/ForgotPasswordOidc';\r\n static MemberApiToken = '/Member/ApiToken';\r\n static ResendMfaCode = '/Member/ResendMfaCode';\r\n static AuthenticateMemberByMfaCode = '/Member/AuthenticateByMFACode';\r\n static UpdateMfaSettingsAndAuthenticate = '/Member/UpdateMFASettingsAndAuthenticate';\r\n static Signup = '/Member/Signup';\r\n static CreateOrganisation = '/Member/NewOrganisation';\r\n\r\n // Client\r\n static PreviewPagesClient = '/C/PreviewPages';\r\n\r\n // Report\r\n static ReportCodes = '/Report/ReportCodes';\r\n static ReportStatus = '/Report/ReportStatus';\r\n static ReportVariables = '/Report/ReportVariables';\r\n static FxRates = '/Report/GetFxRates';\r\n static AccountSummary = '/Report/AccountSummary';\r\n static Accounts = '/Report/Accounts';\r\n static ForecastStatus = '/Report/ForecastStatus';\r\n static PreviewPages = '/Report/PreviewPages';\r\n static DataSourceCollection = '/Report/DataSourceCollection';\r\n\r\n static UpdateReport = '/Report/UpdateReport';\r\n static UpdateCharts = '/Report/Charts';\r\n static UpdateDashPanel = '/Report/UpdateDashPanel';\r\n static UpdateFxRates = `/Report/SaveFxRates`;\r\n static KpiPreview = '/Report/KPIPreview';\r\n\r\n // Report history\r\n static Reports = '/ReportHistory/GetReports';\r\n static RecentReports = '/ReportHistory/GetRecentReports';\r\n\r\n // Report export\r\n static StartExport = '/ReportExport/StartExport';\r\n static DocumentStatus = '/ReportExport/DocumentStatus';\r\n\r\n // Forecast\r\n static ForecastTaskManager = '/Forecast/TaskManager';\r\n static ForecastJournals = '/Forecast/Journals';\r\n static ValidateDynamicRule = '/Forecast/ValidateDynamicRule';\r\n static ValidateWagesRule = '/Forecast/ValidateWagesRule';\r\n static ValidateBalanceSheetRule = '/Forecast/ValidateBalanceSheetRule';\r\n static GetCyclicalReferences = '/Forecast/GetCyclicalReferences';\r\n static RunRulesForDataSourcesUsingDrivers = '/Forecast/RunRulesForDataSourcesUsingDrivers';\r\n static ValidateMeasure = '/Forecast/ValidateMeasure';\r\n static CalculateLoanAmortisation = '/Forecast/CalculateLoanAmortisation';\r\n static ExportLoanAmortisation = '/Forecast/ExportLoanAmortisation';\r\n\r\n // FormulaBuilder\r\n static FormulaGallery = '/FormulaGallery/List';\r\n static CreateFormula = '/FormulaGallery/CreateFormula';\r\n static CheckFormulaName = '/FormulaGallery/CheckFormulaName';\r\n static SetTags = '/FormulaGallery/SetTags';\r\n static SaveFormula = '/FormulaGallery/SaveFormula';\r\n static DeleteCustomFormula = '/FormulaGallery/DeleteCustomFormula';\r\n\r\n // Practice\r\n static PracticeThumnails = '/Practice/Thumbnails';\r\n static CoverPreview = '/Practice/CoverPreview';\r\n static CoverTemplates = '/Practice/CoverTemplates';\r\n static ColorPalette = '/Practice/ColorPalette';\r\n static GetPasswordHistoryPreference = '/Practice/GetPasswordHistoryPreference';\r\n static UpdatePasswordHistoryPreference = '/Practice/UpdatePasswordHistoryPreference';\r\n static GetPasswordExpiryPreference = '/Practice/GetPasswordExpiryPreference';\r\n static UpdatePasswordExpiryPreference = '/Practice/UpdatePasswordExpiryPreference';\r\n\r\n // Organisation\r\n static CheckOrganisationName = '/Organisation/CheckName';\r\n static CheckGroupName = '/Organisation/CheckGroupName';\r\n static GetFilteredOrganisationNames = '/Organisation/Names';\r\n static GetFilteredLocations = '/organisation/locations';\r\n\r\n // DataSource\r\n static SaveFilePath = '/DataSource/SaveFilePath';\r\n static GetUploadUrl = '/DataSource/GetUploadUrl';\r\n static SetOptionsValue = '/DataSource/SetOptionsValue';\r\n static DisconnectDataSource = '/DataSource/Disconnect';\r\n static ManualPersonalWealth = '/Datasource/ManualPersonalWealth';\r\n static NewDataSource = '/DataSource/New';\r\n static CheckGoogleAccess = '/DataSource/CheckGoogleAccess';\r\n\r\n static ConnectFranchiseeDataSource = ({\r\n dataSourceTypeCode,\r\n windowCode,\r\n settings,\r\n }: {\r\n dataSourceTypeCode: DataSourceTypeCode;\r\n windowCode?: string;\r\n settings: {\r\n reportMode: string;\r\n franchiseId: string;\r\n actionCode: string;\r\n name?: string;\r\n abbreviation?: string;\r\n };\r\n }): string => {\r\n const supportedDataSourceTypes = [\r\n DataSourceTypeCode.MyobAccountRight,\r\n DataSourceTypeCode.QuickBooks,\r\n DataSourceTypeCode.Xero,\r\n ];\r\n\r\n if (!supportedDataSourceTypes.includes(dataSourceTypeCode)) {\r\n throw new Error('Data source type not supported');\r\n }\r\n\r\n const baseUrl = `/datasource/${dataSourceTypeCode.toLowerCase()}franchisee/${windowCode}`;\r\n const queryStringParams = new URLSearchParams(settings);\r\n\r\n return `${baseUrl}?${queryStringParams}`;\r\n };\r\n\r\n // Desktop\r\n static GenerateWebToken = '/Desktop/GenerateWebToken';\r\n\r\n // Integrations\r\n static CompanyFileLinked = 'IsCompanyFileLinked';\r\n static OpenCompanyFile = 'OpenCompanyFile';\r\n static SelectCompanyFile = 'SelectCompanyFile';\r\n\r\n // MYOB\r\n static OpenMyobCompanyFile = '/MYOB/OpenCompanyFile';\r\n static IsMyobCompanyFileLinked = '/MYOB/IsCompanyFileLinked';\r\n\r\n // Mailgun\r\n static CheckSendingStatus = '/Mailgun/CheckSendingStatus';\r\n static ValidateEmail = '/Mailgun/ValidateEmail';\r\n\r\n // Desktop connector\r\n static AgentIsRunning = 'AgentIsRunning';\r\n static OpenFile = 'OpenFile';\r\n static FileStatus = 'FileStatus';\r\n static JobStatus = 'Import/Status';\r\n static CancelJob = 'Import/Cancel';\r\n static ImportClasses = 'Classes';\r\n static UploadDataFile = 'UploadDataFile';\r\n\r\n // Notifications\r\n static GetNotifications = '/Notification/GetNotifications';\r\n static NotificationBatchUpdate = '/Notification/BatchUpdate';\r\n static NotificationUpdate = '/Notification/Update';\r\n static NotificationDelete = '/Notification/Delete';\r\n static NotificationDeleteAll = '/Notification/DeleteAll';\r\n}\r\n\r\nexport class WebApiEndpoints {\r\n // Spotlight\r\n static GetCurrencies = '/webapi/currencies';\r\n\r\n // Member\r\n static GetMFASettings = '/webapi/members/mfasettings';\r\n static GetMFASettingsForMember = (memberId: string): string => `/webapi/members/${memberId}/mfasettings`;\r\n static VerifyMFASettingsForMember = (memberId: string): string => `/webapi/members/${memberId}/mfasettings/verify`;\r\n static UpdateReleaseNotificationReadDate = '/webapi/members/updatereleasenotificationreaddate';\r\n static GetLoginOIDCType = '/webapi/members/loginoidctype';\r\n static GetProductAccess = '/webapi/members/productaccess';\r\n\r\n // Webflow\r\n static CheckAccessToTransformInAction = '/webapi/webflow/checkaccesstotransforminaction';\r\n static GetWebflowUser = '/webapi/webflow/getuser';\r\n static CreateWebflowUser = '/webapi/webflow/createuser';\r\n static DeleteWebflowUser = '/webapi/webflow/deleteuser';\r\n\r\n // Notifications\r\n static GetUnreadNotificationCount = '/webapi/notification/getUnreadCount';\r\n\r\n // Organisation\r\n static GetOrganisationTypeCode = ({ organisationId }: Requests.GetOrganisationTypeCodeRequestRoute): string =>\r\n `/webapi/organisation/${organisationId}/TypeCode`;\r\n static OrganisationTrackingSettings = (organisationId: string): string =>\r\n `/webapi/organisation/${organisationId}/trackingsettings`;\r\n static GetThumbnails = (reportId: string, thumbnailId: string, pages: number): string =>\r\n `/webapi/reports/${reportId}/thumbnails/${thumbnailId}?pages=${pages}`;\r\n static LoadThumbnails = (reportId: string, localTime: string): string =>\r\n `/webapi/reports/${reportId}/loadthumbnails?localTime=${localTime}`;\r\n static GetGrid = (\r\n accountCode: string,\r\n reportId: string,\r\n dataSourceId: string,\r\n mode: string,\r\n organisationId: string,\r\n date: string,\r\n tracking1: string,\r\n tracking2: string,\r\n ): string =>\r\n `/webapi/organisation/${organisationId}/report/${reportId}/griddata?accountCode=${accountCode}&dataSourceId=${dataSourceId}&mode=${mode}&date=${date}${tracking1}${tracking2}`;\r\n static GetPreviewPage = (\r\n windowCode: string,\r\n reportId: string,\r\n pageId: string,\r\n timeZoneOffset: number,\r\n localTime: string,\r\n activeChartId: string,\r\n ): string =>\r\n `/Report/PagePreview/${windowCode}?reportid=${reportId}&pageId=${pageId}&timeZoneOffset=${timeZoneOffset}&localTime=${localTime}&activeChartId=${activeChartId}`;\r\n static GetAllPreviewPages = (\r\n windowCode: string,\r\n reportId: string,\r\n timeZoneOffset: number,\r\n localTime: string,\r\n ): string =>\r\n `/Report/AllPagesPreview/${windowCode}?reportid=${reportId}&timeZoneOffset=${timeZoneOffset}&localTime=${localTime}`;\r\n static GetOrganisationUsage = (organisationId: string, reportMode: string): string =>\r\n `/webapi/organisation/${organisationId}/usage?reportMode=${reportMode}`;\r\n static GetOrganisationDataSourceCollection = (organisationId: string, reportMode: string): string =>\r\n `/webapi/organisation/${organisationId}/externaldatasources?reportMode=${reportMode}`;\r\n static GetOrganisationCountryCode = (organisationId: string): string =>\r\n `/webapi/organisation/${organisationId}/countrycode`;\r\n static ValidateOrganisationNameIsUnique = (reportmode: ReportMode, name: string): string =>\r\n `/webapi/organisation/${reportmode}/NameIsUnique?name=${name}`;\r\n static DeleteOrganisation = (organisationId: string): string => `/webapi/organisation/${organisationId}`;\r\n static GetOrCreateMemberWindow = (organisationId: string): string =>\r\n `/webapi/organisation/${organisationId}/MemberWindow`;\r\n static GetOrganisationCountLimits = (reportMode: ReportMode): string =>\r\n `/webapi/organisation/${reportMode}/GetOrgCountLimits`;\r\n static GetOrganisationCountLimitsFranchise = (reportMode: ReportMode, franchiseId: string): string =>\r\n `/webapi/organisation/${reportMode}/GetOrgCountLimits?franchiseId=${franchiseId}`;\r\n\r\n // Accounts\r\n static GetDataSourceAccountsByReportCode = (\r\n organisationId: string,\r\n dataSourceId: string,\r\n reportCode: string,\r\n ): string => `/webapi/Organisation/${organisationId}/DataSource/${dataSourceId}?reportCode=${reportCode}`;\r\n\r\n static GetAccountDataByAccountId = (\r\n organisationId: string,\r\n accountId: string,\r\n fromDate: string,\r\n toDate: string,\r\n ): string =>\r\n `/webapi/organisation/${organisationId}/Account/${accountId}/Data?fromDate=${fromDate}&toDate=${toDate}`;\r\n\r\n static GetAccount = ({ organisationId, accountId }: Requests.GetAccountRequestRoute): string =>\r\n `/webapi/organisation/${organisationId}/accounts/${accountId}`;\r\n static GetAccountsDistinct = (organisationId: string, reportMode: string): string =>\r\n `/webapi/organisation/${organisationId}/AccountsDistinct?reportMode=${reportMode}`;\r\n static UpdateAccountDisplayName = ({\r\n organisationId,\r\n accountId,\r\n }: Requests.UpdateAccountDisplayNameRequestRoute): string =>\r\n `/webapi/organisation/${organisationId}/accounts/${accountId}/DisplayName`;\r\n static CreateSustainAccount = (organisationId: string, dataSourceId: string): string =>\r\n `/webapi/organisation/${organisationId}/datasource/${dataSourceId}/SustainAccount`;\r\n static UpdateSustainAccount = (organisationId: string, accountId: string): string =>\r\n `/webapi/organisation/${organisationId}/SustainAccount/${accountId}`;\r\n static DeleteSustainAccounts = (organisationId: string): string =>\r\n `/webapi/organisation/${organisationId}/SustainAccounts`;\r\n\r\n // Forecasting\r\n static GetForecastStatus = (dataSourceId: string): string => `/webapi/forecast/${dataSourceId}/status`;\r\n static GetForecastSettings = (reportId: string, dataSourceId: string): string =>\r\n `/webapi/forecast/${reportId}/task/${dataSourceId}/settings`;\r\n static GetDefaultForecastSettings = (reportId: string): string => `/webapi/forecast/${reportId}/DefaultSettings`;\r\n static GetDefaultForecastSettingsDates = (organisationId: string): string =>\r\n `/webapi/forecast/${organisationId}/DefaultSettingsDates`;\r\n static GetForecastExternalDataSources = (organisationId: string): string =>\r\n `/webapi/forecast/${organisationId}/ExternalDataSources`;\r\n static GetForecastTaskSyncSettings = (taskId: string): string => `/webapi/forecast/${taskId}/TaskSyncSettings`;\r\n static GetForecastGridData = (\r\n reportId: string,\r\n dataSourceId: string,\r\n accountCode: string,\r\n mode: string,\r\n startDate: string,\r\n endDate: string,\r\n tracking1: string,\r\n tracking2: string,\r\n ): string =>\r\n `/webapi/forecast/${reportId}/task/${dataSourceId}/griddata?accountCode=${accountCode}&mode=${mode}&startDate=${startDate}&endDate=${endDate}${tracking1}${tracking2}`;\r\n static GetForecastMeasuresGridData = (organisationId: string, startDate: string, endDate: string): string =>\r\n `/webapi/forecast/${organisationId}/measuresgriddata?startDate=${startDate}&endDate=${endDate}`;\r\n static GetForecastGroupGridData = ({\r\n organisationId,\r\n bandType,\r\n startDate,\r\n endDate,\r\n reportCode,\r\n }: Requests.ForecastGroupGridDataRequest): string => {\r\n let path = `/webapi/forecast/group/${organisationId}/griddata?bandType=${bandType}&startDate=${startDate}&endDate=${endDate}`;\r\n if (typeof reportCode !== 'undefined') {\r\n path += `&reportCode=${reportCode}`;\r\n }\r\n return path;\r\n };\r\n static GetForecastDataSourceUsage = (dataSourceId: string, excludeDataSourceId: string): string =>\r\n `/webapi/forecast/${dataSourceId}/usage?excludeDataSourceId=${excludeDataSourceId}`;\r\n static GetForecastOrganisations = (): string => `/webapi/forecast/organisations`;\r\n static GetForecastOrganisationTasks = (organisationId: string): string =>\r\n `/webapi/forecast/${organisationId}/tasks`;\r\n static GetForecastTasks = (organisationId: string): string => `/webapi/forecast/${organisationId}/forecasttasks`;\r\n static CreateForecastTask = (organisationId: Requests.CreateForecastTaskRequestRoute['organisationId']): string =>\r\n `/webapi/forecast/task/${organisationId}`;\r\n static CopyForecastTask = (dataSourceId: string): string => `/webapi/forecast/task/${dataSourceId}/copy`;\r\n static GetForecastTaskSettings = (taskId: string): string => `/webapi/forecast/${taskId}/tasksettings`;\r\n static GetForecastTaskSummary = (taskId: string): string => `/webapi/forecast/task/${taskId}/summary`;\r\n static GetForecastDriversId = (organisationId: string): string => `/webapi/forecast/${organisationId}/driversid`;\r\n static GetForecastMeasuresId = (organisationId: string): string => `/webapi/forecast/${organisationId}/measuresid`;\r\n static GetForecastDriversMeasuresSummary = (dataSourceId: string): string =>\r\n `/webapi/forecast/driversmeasures/${dataSourceId}/summary`;\r\n static GetForecastGroupSettings = (organisationId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/settings`;\r\n static GetForecastGroupTasks = (organisationId: string): string => `/webapi/forecast/group/${organisationId}/tasks`;\r\n static ValidateForecastRules = (dataSourceId: string): string => `/webapi/forecast/${dataSourceId}/validaterules`;\r\n static CreateForecastGroup = (): string => `/webapi/forecast/newgroup`;\r\n static UpdateForecastTaskSettings = (taskId: string): string => `/webapi/forecast/task/${taskId}/settings`;\r\n static UpdateForecastDriversMeasuresSettings = (dataSourceId: string): string =>\r\n `/webapi/forecast/driversmeasures/${dataSourceId}/settings`;\r\n static SyncForecastTaskData = (organisationId: string, taskId: string): string =>\r\n `/webapi/forecast/${organisationId}/task/${taskId}/syncdata`;\r\n static UpdateForecastAccountDatum = (\r\n dataSourceId: string,\r\n accountId: string,\r\n date: string,\r\n metric: string,\r\n value: number,\r\n tracking1: string,\r\n tracking2: string,\r\n ): string =>\r\n `/webapi/forecast/task/${dataSourceId}/account/${accountId}/datum?date=${date}&metric=${metric}&value=${value}${tracking1}${tracking2}`;\r\n static UpdateForecastGroupSettings = (organisationId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/settings`;\r\n static AddForecastGroupTask = (organisationId: string): string => `/webapi/forecast/group/${organisationId}/tasks`;\r\n static RefreshForecastGroupTaskData = (organisationId: string, taskDataSourceId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/task/${taskDataSourceId}/sync`;\r\n static DeleteForecastTaskDataSource = (dataSourceId: string): string => `/webapi/forecast/task/${dataSourceId}`;\r\n static DeleteForecastGroupTask = (organisationId: string, taskDataSourceId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/task/${taskDataSourceId}`;\r\n static GetForecastSyncStatus = (organisationId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/syncstatus`;\r\n static ResetForecastGroupTemplate = (reportId: string): string =>\r\n `/webapi/forecast/group/${reportId}/resettemplate`;\r\n static GetForecastEliminations = (organisationId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/eliminations`;\r\n static UpdateForecastEliminations = ({\r\n organisationId,\r\n section,\r\n }: {\r\n organisationId: string;\r\n section: string;\r\n }): string => `/webapi/forecast/group/${organisationId}/eliminations?sectionCode=${section}`;\r\n static GetForecastEliminationAdjustments = (organisationId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/eliminationadjustments`;\r\n static UpdateForecastEliminationAdjustments = (organisationId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/eliminationadjustments`;\r\n static GetForecastEliminationsStatus = (organisationId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/eliminationsstatus`;\r\n static GetForecastEliminationTab = (organisationId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/EliminationTab/`;\r\n static GetForecastShowNoJournalWarning = (organisationId: string): string =>\r\n `/webapi/forecast/group/${organisationId}/ShowNoJournalWarning`;\r\n\r\n static ValidateForecastTaskDescriptionUnique = (organisationId: string, description: string): string => {\r\n return `/webapi/forecast/${organisationId}/validatetaskdescriptionunique?description=${encodeURIComponent(\r\n description,\r\n )}`;\r\n };\r\n static ValidateForecastAccountDeletion = (organisationId: string, accountId: string): string =>\r\n `/webapi/forecast/${organisationId}/validateaccountdeletion?accountId=${accountId}`;\r\n static DeleteForecastAccount = (organisationId: string, accountId: string): string =>\r\n `/webapi/forecast/${organisationId}/account?accountId=${accountId}`;\r\n static GetForecastIncomeTaxRule = (organisationId: string, ruleId: string): string =>\r\n `/webapi/forecast/${organisationId}/Task/Rule?ruleId=${ruleId}`;\r\n static UpdateForecastRule = (organisationId: string, dataSourceId: string, ruleId: string): string =>\r\n `/webapi/forecast/${organisationId}/Task/${dataSourceId}/Rule?ruleId=${ruleId}`;\r\n\r\n // Page\r\n static GetPageGallery = ({ organisationType, reportMode }: Requests.GetPageGalleryRequestRoute): string =>\r\n `/webapi/page/metadata/?organisationTypeCode=${organisationType}&reportMode=${reportMode}`;\r\n\r\n // Reports\r\n static GetActiveReportPages = (reportId: Requests.GetActiveReportPagesRequestRoute['reportId']): string =>\r\n `/webapi/reports/${reportId}/ActivePages`;\r\n static AddPageToReport = (reportId: Requests.AddPageRequestRoute['reportId']): string =>\r\n `/webapi/reports/${reportId}/NewReportPage`;\r\n static AddChartToReport = (\r\n reportId: Requests.AddChartRequestRoute['reportId'],\r\n pageId: Requests.AddChartRequestRoute['pageId'],\r\n sectionId: Requests.AddChartRequestRoute['sectionId'],\r\n ): string => `/webapi/reports/${reportId}/Pages/${pageId}/Sections/${sectionId}/NewReportChart`;\r\n static GetReportPageSettings = (reportId: string, pageId: string): string =>\r\n `/webapi/reports/${reportId}/pages/${pageId}/settings`;\r\n static UpdateReportPageSettings = (reportId: string, pageId: string): string =>\r\n `/webapi/reports/${reportId}/pages/${pageId}/settings`;\r\n static GetPageSettingsOptions = (reportId: string, pageId: string, settingExpression: string): string =>\r\n `/webapi/reports/${reportId}/pages/${pageId}/settings/${settingExpression}/options`;\r\n static SetTrackingReportFilter = (reportId: string): string => `/webapi/reports/${reportId}/trackingFilter`;\r\n static GetTrackingReportFilter = (reportId: string): string => `/webapi/reports/${reportId}/trackingFilter`;\r\n static GetTrackingReportPageFilter = (reportId: string, pageId: string): string =>\r\n `/webapi/reports/${reportId}/PageTrackingFilter/${pageId}`;\r\n static GetTrackingReportPagesFilter = (reportId: string): string =>\r\n `/webapi/reports/${reportId}/PageTrackingFilter`;\r\n static SetTrackingReportPageFilter = (reportId: string): string => `/webapi/reports/${reportId}/PageTrackingFilter`;\r\n\r\n static GetReportColorPalette = (reportId: string): string => `/webapi/reports/${reportId}/colorpalette`;\r\n static GetReportNavigation = (reportId: string): string => `/webapi/reports/${reportId}/navigation`;\r\n static GetReportContext = (reportId: string): string => `/webapi/reports/${reportId}/context`;\r\n\r\n static GetDataSourceStatus = (dataSourceId: string): string => `/webapi/datasource/${dataSourceId}/status`;\r\n\r\n static DisconnectDataSource = (dataSourceId: string): string => `/webapi/datasource/${dataSourceId}/disconnect`;\r\n\r\n static DataSourceTrackingConfigured = (dataSourceId: string): string =>\r\n `/webapi/DataSource/${dataSourceId}/TrackingConfigured`;\r\n\r\n static DeleteDataSource = (dataSourceId: string): string => `/webapi/datasource/${dataSourceId}`;\r\n\r\n static GetTextPanelContent = (reportId: string, pageId: string, chartId: string): string =>\r\n `/webapi/reports/${reportId}/pages/${pageId}/textPanel/${chartId}`;\r\n\r\n static UpdateTextPanelContent = (reportId: string, pageId: string, chartId: string): string =>\r\n `/webapi/reports/${reportId}/pages/${pageId}/textPanel/${chartId}`;\r\n\r\n static CreateNewSustainReport = (organisationId: string, useRecentReport: boolean): string =>\r\n `/webapi/reports/NewSustain/${organisationId}?useRecentReport=${useRecentReport}`;\r\n\r\n // Xero Importing\r\n static GetAuthorisedXeroCompanies = (dataSourceId: string): string =>\r\n `/webapi/datasource/${dataSourceId}/GetAuthorisedXeroCompanies`;\r\n static SetAuthorisedXeroCompany = (dataSourceId: string): string =>\r\n `/webapi/datasource/${dataSourceId}/SetSelectedCompany`;\r\n\r\n // MYOB Importing\r\n static GetMyobCompanyFiles = (dataSourceId: string): string =>\r\n `/webapi/datasource/${dataSourceId}/myobcompanyfiles`;\r\n\r\n // Google Sheets Importing\r\n static GoogleSpreadsheet = (dataSourceId: string): string => `/webapi/datasource/${dataSourceId}/googlespreadsheet`;\r\n\r\n // Feature Flags\r\n static DefaultFeatureFlags = (): string => `/webapi/featureflags`;\r\n static PracticeFeatureFlags = (): string => `/webapi/practice/featureflags`;\r\n static PracticeName = (): string => `/webapi/practice/name`;\r\n static GetFeatureFlagValue = (featureFlag: string): string => `/webapi/practice/GetFeatureFlagValue/${featureFlag}`;\r\n\r\n // ReportHistory\r\n static GetRecentReports = (): string => `/webapi/reporthistory/RecentReports`;\r\n\r\n // Tracking\r\n static CategoryAbbreviations = (dataSourceId: string): string =>\r\n `/webapi/datasource/${dataSourceId}/Tracking/CategoryAbbreviations`;\r\n\r\n // Account Groupings\r\n static CreateAccountGroupingLayout = (organisationId: string): string =>\r\n `/webapi/organisation/${organisationId}/accountgroupings`;\r\n\r\n static DeleteAccountGroupingLayout = (\r\n organisationId: string,\r\n layoutId: string,\r\n reportId: string,\r\n pageId: string,\r\n ): string =>\r\n `/webapi/organisation/${organisationId}/accountgroupings/${layoutId}?reportId=${reportId}&pageId=${pageId}`;\r\n\r\n static GetAccountGroupingLayout = (organisationId: string, layoutId: string): string =>\r\n `/webapi/organisation/${organisationId}/accountgroupings/${layoutId}`;\r\n\r\n static GetAllAccountGroupingLayouts = (organisationId: string, pageType: string): string =>\r\n `/webapi/organisation/${organisationId}/accountgroupings?pageType=${pageType}`;\r\n\r\n static SetAccountGroupingLayout = (organisationId: string): string =>\r\n `/webapi/organisation/${organisationId}/accountgroupings`;\r\n\r\n static SetPageAccountGroupingLayout = (reportId: string, pageId: string, layoutId: string): string =>\r\n `/webapi/reports/${reportId}/pages/${pageId}/accountgroupings/${layoutId}`;\r\n\r\n static UpdateAccountGroupingPageOptions = (reportId: string, pageId: string): string =>\r\n `/webapi/reports/${reportId}/pages/${pageId}/accountgroupings/options`;\r\n\r\n // Data Import\r\n static ImportDataSource = (dataSourceId: string, reportMode: string): string =>\r\n `/webapi/datasource/${dataSourceId}/importdatasource/${reportMode}`;\r\n\r\n static DefaultImportSettings = (dataSourceId: string, reportMode: string): string =>\r\n `/webapi/datasource/${dataSourceId}/defaultimportsettings/${reportMode}`;\r\n\r\n // Configuration\r\n static SpotlightConfig = (): string => `/webapi/config`;\r\n\r\n // Payment Schedules\r\n static GetPracticePaymentSchedules = (countryCode: string): string =>\r\n `/webapi/practice/paymentschedules/${countryCode}`;\r\n\r\n // Billing\r\n static GetFranchiseOrganisations = (): string => '/webapi/billing/getfranchiseorganisations';\r\n\r\n static GetCoreOrganisations = (): string => 'webapi/billing/getcoreorganisations';\r\n\r\n static GetOrganisationsByProduct = (productCode: string): string =>\r\n `webapi/billing/getorganisationsbyproduct/${productCode}`;\r\n\r\n static GetPricingPlans = (currentPlanCode: string): string => `/webapi/billing/pricing/${currentPlanCode}`;\r\n\r\n static GetSubscriptionDetails = (): string => `/webapi/billing/subscriptiondetails`;\r\n\r\n static GetNonAdminBillingData = (): string => `/webapi/billing/nonadminbillingdata`;\r\n\r\n static RetryPayment = (productCode: string): string => `/webapi/billing/retrypayment/${productCode}`;\r\n\r\n static Subscribe = (\r\n featuresToPlanCodes: string,\r\n cardToken: string,\r\n firstName: string,\r\n lastName: string,\r\n email: string,\r\n postcode: string,\r\n billingFrequency?: string,\r\n ): string =>\r\n `/webapi/billing/subscribe?featuresToPlanCodes=${featuresToPlanCodes}&cardToken=${cardToken}&firstName=${firstName}&lastName=${lastName}&email=${email}&postcode=${postcode}&billingFrequency=${billingFrequency}`;\r\n\r\n static StartTrial = (productCode: string, planCode: string): string =>\r\n `/webapi/billing/starttrial?productCode=${productCode}&planCode=${planCode}`;\r\n\r\n static GetMemberIdentifiers = (): string => `/webapi/members/getidentifiers`;\r\n\r\n static GetLocations = '/webapi/members/LocationOptions';\r\n\r\n static IsEmailInUse = (email: string): string => `/webapi/billing/isemailinuse?email=${email}`;\r\n\r\n // Sustain\r\n static CreateSustainOrganisation = '/webapi/organisation/NewSustain';\r\n static CreateSustainTemplate = (reportId: string): string => `/webapi/reports/${reportId}/sustaintemplate`;\r\n static UploadImportFile = (windowCode: string): string => `/UploadImportFile/${windowCode}`;\r\n static UpdateReportSetupStep = (reportId: string, setupStep: string): string =>\r\n `/webapi/reports/${reportId}/reportsetupstep?setupStep=${setupStep}`;\r\n\r\n // Organisations\r\n static GetOrganisations = (product: string): string => `/webapi/organisation/${product}/landingpage`;\r\n static GetGroupedOrganisationIDs = (groupId: string): string =>\r\n `/webapi/organisation/${groupId}/GroupedOrganisationIDs`;\r\n static GetForecastingOrganisations = '/webapi/organisation/forecastinglandingpage';\r\n static GetMultiHeadOffices = '/webapi/organisation/multilandingpage';\r\n static GetOrganisationClients = (organisationId: string): string =>\r\n `/webapi/organisation/${organisationId}/clients`;\r\n}\r\n","import { INotification, NotificationStatus } from '../../Components/Notifications/Notification';\r\nimport RestService from '../../Services/RestService';\r\n\r\nexport enum ActionTypes {\r\n RESET_NOTIFICATIONS = 'RESET_NOTIFICATIONS',\r\n GET_NOTIFICATIONS = 'GET_NOTIFICATIONS',\r\n GET_NOTIFICATIONS_SUCCESS = 'GET_NOTIFICATIONS_SUCCESS',\r\n GET_NOTIFICATIONS_ERROR = 'GET_NOTIFICATIONS_ERROR',\r\n SET_NOTIFICATION_READ_SUCCESS = 'SET_NOTIFICATION_READ_SUCCESS',\r\n SET_NOTIFICATION_READ_ERROR = 'SET_NOTIFICATION_READ_ERROR',\r\n SET_NOTIFICATIONS_READ_SUCCESS = 'SET_NOTIFICATIONS_READ_SUCCESS',\r\n SET_NOTIFICATIONS_READ_ERROR = 'SET_NOTIFICATIONS_READ_ERROR',\r\n SET_UNREAD_NOTIFICATIONS_READ_UI = 'SET_UNREAD_NOTIFICATIONS_READ_UI',\r\n SET_NOTIFICATION_DISMISSED_SUCCESS = 'SET_NOTIFICATION_DISMISSED_SUCCESS',\r\n SET_NOTIFICATION_DISMISSED_ERROR = 'SET_NOTIFICATION_DISMISSED_ERROR',\r\n SET_NOTIFICATION_DISMISSED_UI = 'SET_NOTIFICATION_DISMISSED_UI',\r\n SET_ALL_NOTIFICATIONS_DISMISSED_UI = 'SET_ALL_NOTIFICATIONS_DISMISSED_UI',\r\n SET_NOTIFICATIONS_FETCHING = 'SET_NOTIFICATIONS_FETCHING',\r\n}\r\n\r\ndeclare const $: any;\r\n\r\nexport interface IGetNotificationsFilter {\r\n OrganisationId?: string;\r\n}\r\n\r\nexport interface IGetNotificationsResponse {\r\n nextCursor: string;\r\n notifications: Array;\r\n}\r\n\r\nexport interface IBatchUpdateNotificationResponse {\r\n notifications: Array;\r\n}\r\n\r\nexport interface IUpdateNotificationResponse {\r\n notification: INotification;\r\n}\r\n\r\nexport interface IDeleteNotificationResponse {\r\n notification: INotification;\r\n}\r\n\r\n//reset notifications\r\nexport const resetNotifications = () => {\r\n return {\r\n type: ActionTypes.RESET_NOTIFICATIONS,\r\n };\r\n};\r\n\r\nexport const setNotificationsFetching = (fetching: boolean) => {\r\n return {\r\n type: ActionTypes.SET_NOTIFICATIONS_FETCHING,\r\n fetching,\r\n };\r\n};\r\n\r\nexport const setUnreadNotificationsReadUI = (ids) => {\r\n return {\r\n type: ActionTypes.SET_UNREAD_NOTIFICATIONS_READ_UI,\r\n status: NotificationStatus.Read,\r\n ids: ids,\r\n };\r\n};\r\n\r\n//get all notifications\r\nexport const getNotificationsSuccess = (notifications: Array, nextCursor: string) => {\r\n //map the notifications array to a dict\r\n const notificationsDict = notifications.reduce((result, item) => {\r\n result[item.id] = { ...item };\r\n return result;\r\n }, {});\r\n\r\n return {\r\n type: ActionTypes.GET_NOTIFICATIONS_SUCCESS,\r\n notifications: notificationsDict,\r\n nextCursor: nextCursor,\r\n };\r\n};\r\n\r\nconst getNotificationsError = (message: string) => {\r\n return {\r\n type: ActionTypes.GET_NOTIFICATIONS_ERROR,\r\n message: message,\r\n };\r\n};\r\n\r\nexport const getNotifications =\r\n (windowCode: string, filterJson: IGetNotificationsFilter, count: number, cursor?: string) => (dispatch) => {\r\n dispatch(setNotificationsFetching(true));\r\n\r\n RestService.GetNotifications(\r\n filterJson,\r\n count,\r\n cursor,\r\n (response: IGetNotificationsResponse) => {\r\n if (response) {\r\n dispatch(setNotificationsFetching(false));\r\n dispatch(getNotificationsSuccess(response.notifications, response.nextCursor));\r\n\r\n const unreadNotificationsToShow = response.notifications.filter(\r\n (x) => x.status === NotificationStatus.Unread,\r\n );\r\n dispatch(setNotificationsRead(windowCode, unreadNotificationsToShow));\r\n }\r\n },\r\n (error) => {\r\n dispatch(setNotificationsFetching(false));\r\n dispatch(getNotificationsError('Error occurred. Please try again later.'));\r\n },\r\n );\r\n };\r\n\r\n//set notifications read\r\nconst setNotificationsReadSuccess = (notifications: Array) => {\r\n return {\r\n type: ActionTypes.SET_NOTIFICATIONS_READ_SUCCESS,\r\n notifications,\r\n };\r\n};\r\n\r\nconst setNotificationsReadError = (message: string) => {\r\n return {\r\n type: ActionTypes.SET_NOTIFICATIONS_READ_ERROR,\r\n message: message,\r\n };\r\n};\r\n\r\nexport const setNotificationsRead = (windowCode: string, notifications: Array) => (dispatch) => {\r\n const ids = notifications.map((n) => n.id);\r\n if (ids.length == 0) {\r\n return;\r\n }\r\n\r\n const data = JSON.stringify([{ op: 'replace', path: '/status', value: NotificationStatus.Read }]);\r\n\r\n RestService.SetNotificationsRead(\r\n ids,\r\n data,\r\n (response: IBatchUpdateNotificationResponse) => {\r\n if (response) {\r\n dispatch(setNotificationsReadSuccess(response.notifications));\r\n }\r\n },\r\n (error) => {\r\n dispatch(setNotificationsReadError('Error occurred. Please try again later.'));\r\n },\r\n );\r\n};\r\n\r\n//set notifications read\r\nconst setNotificationReadSuccess = (notification) => {\r\n return {\r\n type: ActionTypes.SET_NOTIFICATION_READ_SUCCESS,\r\n notification: notification,\r\n };\r\n};\r\n\r\nconst setNotificationReadError = (message: string) => {\r\n return {\r\n type: ActionTypes.SET_NOTIFICATION_READ_ERROR,\r\n message: message,\r\n };\r\n};\r\n\r\nexport const setNotificationRead = (windowCode: string, notificationId: string) => (dispatch) => {\r\n const data = JSON.stringify([{ op: 'replace', path: '/status', value: NotificationStatus.Read }]);\r\n\r\n RestService.SetNotificationRead(\r\n notificationId,\r\n data,\r\n (response: IUpdateNotificationResponse) => {\r\n if (response) {\r\n dispatch(setNotificationReadSuccess(response.notification));\r\n }\r\n },\r\n (error) => {\r\n dispatch(setNotificationReadError('Error occurred. Please try again later.'));\r\n },\r\n );\r\n};\r\n\r\n//dismiss notification\r\nexport const setNotificationDismissedUI = (id) => {\r\n return {\r\n type: ActionTypes.SET_NOTIFICATION_DISMISSED_UI,\r\n id: id,\r\n status: NotificationStatus.Dismissed,\r\n };\r\n};\r\n\r\nconst setNotificationDismissedSuccess = (id) => {\r\n return {\r\n type: ActionTypes.SET_NOTIFICATION_DISMISSED_SUCCESS,\r\n id: id,\r\n };\r\n};\r\n\r\nconst setNotificationDismissedError = (notificationId: string, message: string) => {\r\n return {\r\n type: ActionTypes.SET_NOTIFICATION_DISMISSED_ERROR,\r\n message: message,\r\n };\r\n};\r\n\r\nexport const setNotificationDismissed = (windowCode: string, notificationId: string) => (dispatch) => {\r\n //we can dismiss notification optimistically\r\n dispatch(setNotificationDismissedUI(notificationId));\r\n\r\n RestService.SetNotificationDismissed(\r\n notificationId,\r\n (response: IDeleteNotificationResponse) => {\r\n if (response) {\r\n const success = response.notification;\r\n if (success) {\r\n dispatch(setNotificationDismissedSuccess(notificationId));\r\n }\r\n }\r\n },\r\n (error) => {\r\n dispatch(setNotificationDismissedError(notificationId, 'Error occurred. Please try again later.'));\r\n },\r\n );\r\n};\r\n\r\n//dismiss all notifications\r\nconst setAllNotificationsDismissedUI = (organisationId?: string) => {\r\n return {\r\n type: ActionTypes.SET_ALL_NOTIFICATIONS_DISMISSED_UI,\r\n organisationId,\r\n };\r\n};\r\n\r\nexport const setAllNotificationsDismissed =\r\n (windowCode: string, latestNotificationId: string, organisationId?: string) => (dispatch) => {\r\n dispatch(setAllNotificationsDismissedUI(organisationId));\r\n\r\n RestService.SetNotificationsDismissed(\r\n latestNotificationId,\r\n organisationId,\r\n (response) => {\r\n // do nothing\r\n },\r\n (error) => {\r\n //do nothing\r\n },\r\n );\r\n };\r\n","import { resetNotifications, setUnreadNotificationsReadUI } from './NotificationsActions';\r\n\r\nexport const ActionTypes = {\r\n RESET_MENU: 'RESET_MENU',\r\n SET_DISPLAY_COUNT: 'SET_DISPLAY_COUNT',\r\n ADD_TO_DISPLAYED_NOTIFICATION_IDS: 'ADD_TO_DISPLAYED_NOTIFICATION_IDS',\r\n};\r\n\r\nexport const resetMenu = () => {\r\n return {\r\n type: ActionTypes.RESET_MENU,\r\n };\r\n};\r\n\r\nexport const setDisplayCount = (count: number) => {\r\n return {\r\n type: ActionTypes.SET_DISPLAY_COUNT,\r\n count: count,\r\n };\r\n};\r\n\r\nexport const addToDisplayedNotificationIds = (notificationIds: Array, organisationId?: string) => {\r\n return {\r\n type: ActionTypes.ADD_TO_DISPLAYED_NOTIFICATION_IDS,\r\n ids: notificationIds,\r\n organisationId: organisationId ? organisationId : null,\r\n };\r\n};\r\n\r\nexport const setOpen = (open: boolean) => (dispatch, getState) => {\r\n if (!open) {\r\n //when closing the menu, set all displayed notifications read\r\n const displayedNotificationIds = getState().notificationsMenu.displayedNotificationIds;\r\n const orgDisplayedNotificationIds = getState().notificationsMenu.orgDisplayedNotificationIds;\r\n const ids = [...Array.from(new Set(displayedNotificationIds.concat([...orgDisplayedNotificationIds])))];\r\n dispatch(setUnreadNotificationsReadUI(ids));\r\n dispatch(resetNotifications());\r\n dispatch(resetMenu());\r\n }\r\n};\r\n","import RestService from '../../Services/RestService';\r\nimport { IRecentReport } from '../Reducers/ReportHistoryReducer';\r\n\r\ndeclare const $: any;\r\n\r\nexport const ActionTypes = {\r\n GLOBALS_SET: 'GLOBALS_SET',\r\n\r\n REPORT_HISTORY_STARTED: 'REPORT_HISTORY_STARTED',\r\n REPORT_HISTORY_COMPLETE: 'REPORT_HISTORY_COMPLETE',\r\n REPORT_HISTORY_FAILED: 'REPORT_HISTORY_FAILED',\r\n\r\n REPORT_HISTORY_COUNT_STARTED: 'REPORT_HISTORY_COUNT_STARTED',\r\n REPORT_HISTORY_COUNT_COMPLETE: 'REPORT_HISTORY_COUNT_COMPLETE',\r\n REPORT_HISTORY_COUNT_FAILED: 'REPORT_HISTORY_COUNT_FAILED',\r\n\r\n RECENT_REPORT_STARTED: 'RECENT_REPORT_STARTED',\r\n RECENT_REPORT_COMPLETE: 'RECENT_REPORT_COMPLETE',\r\n RECENT_REPORT_FAILED: 'RECENT_REPORT_FAILED',\r\n};\r\n\r\nexport const setGlobals = (windowCode: string, reportMode: string) => {\r\n return {\r\n type: ActionTypes.GLOBALS_SET,\r\n windowCode: windowCode,\r\n reportMode: reportMode,\r\n };\r\n};\r\n\r\n/**\r\n * get report history data\r\n */\r\nconst getReportHistoryStart = () => {\r\n return {\r\n type: ActionTypes.REPORT_HISTORY_STARTED,\r\n };\r\n};\r\n\r\nconst getReportHistorySuccess = (res) => {\r\n let reports = res.reports;\r\n\r\n reports = reports.map(function (item) {\r\n item.reportDate = item.reportDate != null ? new Date(item.reportDate) : null;\r\n item.publishedDate = item.publishedDate != null ? new Date(item.publishedDate) : null;\r\n item.reportLastActivity = item.reportLastActivity != null ? new Date(item.reportLastActivity) : null;\r\n item.createdOn = item.createdOn != null ? new Date(item.createdOn) : null;\r\n return item;\r\n });\r\n\r\n return {\r\n type: ActionTypes.REPORT_HISTORY_COMPLETE,\r\n reports: reports,\r\n reportsCount: res.count,\r\n };\r\n};\r\n\r\nconst getReportHistoryFailed = (error) => {\r\n return {\r\n type: ActionTypes.REPORT_HISTORY_FAILED,\r\n error: error,\r\n };\r\n};\r\n\r\nexport const getReportHistory = (reportMode: string, limit = 10, offset = 0) => {\r\n return (dispatch) => {\r\n dispatch(getReportHistoryStart());\r\n\r\n RestService.GetReports(\r\n reportMode,\r\n limit,\r\n offset,\r\n (response) => {\r\n if (response) {\r\n dispatch(getReportHistorySuccess(response));\r\n } else {\r\n dispatch(getReportHistoryFailed('Getting report history failed'));\r\n }\r\n },\r\n (error) => {\r\n dispatch(getReportHistoryFailed(error.responseText));\r\n },\r\n );\r\n };\r\n};\r\n\r\nconst getReportHistoryCountStart = () => {\r\n return {\r\n type: ActionTypes.REPORT_HISTORY_COUNT_STARTED,\r\n };\r\n};\r\n\r\nconst getReportHistoryCountSuccess = (res) => {\r\n return {\r\n type: ActionTypes.REPORT_HISTORY_COUNT_COMPLETE,\r\n reportsCount: res.count,\r\n };\r\n};\r\n\r\nconst getReportHistoryCountFailed = (error) => {\r\n return {\r\n type: ActionTypes.REPORT_HISTORY_FAILED,\r\n error: error,\r\n };\r\n};\r\n\r\nexport const getReportHistoryCount = (reportMode: string) => {\r\n return (dispatch) => {\r\n dispatch(getReportHistoryCountStart());\r\n\r\n const limit = 1;\r\n const offset = 0;\r\n\r\n RestService.GetReports(\r\n reportMode,\r\n limit,\r\n offset,\r\n (response) => {\r\n if (response) {\r\n dispatch(getReportHistoryCountSuccess(response));\r\n } else {\r\n dispatch(getReportHistoryCountFailed('Getting report history count failed'));\r\n }\r\n },\r\n (error) => {\r\n dispatch(getReportHistoryCountFailed(error.responseText));\r\n },\r\n );\r\n };\r\n};\r\n\r\n/**\r\n * get recent report data\r\n */\r\nconst getRecentReportsStart = () => {\r\n return {\r\n type: ActionTypes.RECENT_REPORT_STARTED,\r\n };\r\n};\r\n\r\nconst getRecentReportsSuccess = (recentReports: Array) => {\r\n return {\r\n type: ActionTypes.RECENT_REPORT_COMPLETE,\r\n recentReports,\r\n };\r\n};\r\n\r\nconst getRecentReportsFailed = (error) => {\r\n return {\r\n type: ActionTypes.RECENT_REPORT_FAILED,\r\n error: error,\r\n };\r\n};\r\n\r\nexport const getRecentReports = () => {\r\n return (dispatch) => {\r\n dispatch(getRecentReportsStart());\r\n\r\n RestService.GetMemberRecentReports()\r\n .then(({ data }) => {\r\n if (data) {\r\n dispatch(getRecentReportsSuccess(data));\r\n } else {\r\n dispatch(getRecentReportsFailed('Getting recent reports failed'));\r\n }\r\n })\r\n .catch((error) => {\r\n dispatch(getRecentReportsFailed(error.responseText));\r\n });\r\n };\r\n};\r\n","import { SidebarMenu } from '../Reducers/SidebarReducer';\r\nimport * as notificationMenuActions from './NotificationsMenuActions';\r\nimport * as whatsNewActions from './WhatsNewActions';\r\n\r\nexport const ActionTypes = {\r\n OPEN_SET: 'OPEN_SET',\r\n};\r\n\r\nconst setOpenState = (open: boolean, menu: SidebarMenu) => {\r\n return {\r\n type: ActionTypes.OPEN_SET,\r\n open,\r\n menu,\r\n };\r\n};\r\n\r\nexport const setOpen = (open: boolean, menu?: SidebarMenu) => (dispatch) => {\r\n dispatch(setOpenState(open, open ? menu : null));\r\n\r\n if (menu === SidebarMenu.Notifications) {\r\n dispatch(notificationMenuActions.setOpen(open));\r\n } else if (menu === SidebarMenu.WhatsNew) {\r\n dispatch(whatsNewActions.setOpen(open));\r\n }\r\n\r\n if (open) {\r\n document.documentElement.classList.add('overflow-hidden');\r\n } else {\r\n document.documentElement.classList.remove('overflow-hidden');\r\n }\r\n};\r\n","import { ArticleData } from '@ui';\r\n\r\nimport RestService from '../../Services/RestService';\r\n\r\ndeclare const Spotlight: any;\r\n\r\nexport const ActionTypes = {\r\n SET_RELEASE_NOTES: 'SET_RELEASE_NOTES',\r\n SET_DISPLAY_ALERT: 'SET_DISPLAY_ALERT',\r\n};\r\n\r\nconst setReleaseNotes = (releaseNotes: Array, displayAlert: boolean) => {\r\n return {\r\n type: ActionTypes.SET_RELEASE_NOTES,\r\n releaseNotes,\r\n displayAlert,\r\n };\r\n};\r\n\r\nconst getAlertStatus = (releaseNotes: Array) => {\r\n let displayAlert = false;\r\n\r\n if (!Spotlight.ReleaseNotificationReadDateUtc) {\r\n displayAlert = true;\r\n } else {\r\n const releaseNotificationReadDateUtc = new Date(Spotlight.ReleaseNotificationReadDateUtc);\r\n\r\n displayAlert = releaseNotes.some((n) => new Date(n.lastPublished) > releaseNotificationReadDateUtc);\r\n }\r\n\r\n return displayAlert;\r\n};\r\n\r\nexport const getReleaseNotes = () => {\r\n return (dispatch) => {\r\n const releaseNotes = JSON.parse(localStorage.getItem('release-notes'));\r\n\r\n if (releaseNotes) {\r\n dispatch(setReleaseNotes(releaseNotes, getAlertStatus(releaseNotes)));\r\n } else {\r\n fetch('https://cdn.spotlightreporting.com/release-notes/ReleaseNotes.json')\r\n .then((response) => {\r\n if (!response.ok) {\r\n throw new Error(response.statusText);\r\n }\r\n return response.json();\r\n })\r\n .then((data) => {\r\n localStorage.setItem('release-notes', JSON.stringify(data));\r\n dispatch(setReleaseNotes(data, getAlertStatus(data)));\r\n })\r\n .catch((error) => {\r\n dispatch(setReleaseNotes([], false));\r\n });\r\n }\r\n };\r\n};\r\n\r\nexport const setOpen = (open: boolean) => (dispatch) => {\r\n if (!open) {\r\n //when closing the menu, update notification read date\r\n RestService.UpdateReleaseNotificationReadDate();\r\n\r\n dispatch({\r\n type: ActionTypes.SET_DISPLAY_ALERT,\r\n displayAlert: false,\r\n });\r\n }\r\n};\r\n","import { createSlice, createAsyncThunk, PayloadAction } from '@reduxjs/toolkit';\r\nimport { Dayjs } from 'dayjs';\r\n\r\nimport { dataSourceTypes } from '../../../../ModernScripts/Spotlight/Common/data-source-types';\r\nimport {\r\n AccountTypeCode,\r\n DataSourceCategoryCode,\r\n DataSourceTypeCode,\r\n EventCode,\r\n ImportStatusCode,\r\n ReportMode,\r\n} from '../../../Codes';\r\nimport { RootState } from '../../Components/render-with-store';\r\nimport { GoogleAnalytics4DataSource, ImportDataSource } from '../../Services/ApiRequestModels';\r\nimport { ImportError, ImportStatusResponse } from '../../Services/ApiResponseModels';\r\nimport { Endpoints } from '../../Services/Endpoints';\r\nimport RestService from '../../Services/RestService';\r\n\r\nexport type DataImportSettings = {\r\n includeActuals: boolean;\r\n includeActualsTracking: boolean;\r\n actualsFrom: Dayjs;\r\n actualsTo: Dayjs;\r\n includeBudget: boolean;\r\n includeBudgetTracking: boolean;\r\n budgetFrom: Dayjs;\r\n budgetTo: Dayjs;\r\n companyFileId?: string;\r\n accountTypeCode?: AccountTypeCode;\r\n importFileId?: string;\r\n};\r\n\r\nexport type DataImportProgress = {\r\n completedWork?: number;\r\n startedOrganisations?: number;\r\n totalOrganisations?: number;\r\n importedReports?: number;\r\n totalReports?: number;\r\n};\r\n\r\nexport type DataImportStatus =\r\n | 'loading'\r\n | 'not-started'\r\n | 'starting'\r\n | 'started'\r\n | 'uploading-file'\r\n | 'importing'\r\n | 'success'\r\n | 'success-with-errors'\r\n | 'error'\r\n | 'status-check-failed'\r\n | 'cancelled'\r\n | 'cancel-failed';\r\n\r\nexport type DataImport = {\r\n progress: number;\r\n status: DataImportStatus;\r\n dataSourceTypeCode: DataSourceTypeCode;\r\n importErrors?: ImportError[];\r\n uploadId?: string;\r\n};\r\n\r\ntype DataImportState = {\r\n [dataSourceId: string]: DataImport;\r\n};\r\n\r\nconst POLLING_STATUSES: DataImportStatus[] = ['started', 'importing', 'cancel-failed'];\r\nconst IMPORTING_STATUSES: DataImportStatus[] = [...POLLING_STATUSES, 'starting', 'uploading-file'];\r\n\r\n/** Is the import process in progress? (including any of the steps prior to the actual data import) */\r\nexport const isImporting = (status: DataImportStatus): boolean => IMPORTING_STATUSES.includes(status);\r\n\r\n/** Is the import in a status in which we should poll? (i.e.the actual data import has begun) */\r\nexport const isPolling = (status: DataImportStatus): boolean => POLLING_STATUSES.includes(status);\r\n\r\nexport const selectImport = (state: DataImportState, dataSourceId: string): DataImport => {\r\n return state[dataSourceId];\r\n};\r\n\r\nexport const importsInProgress = (state: DataImportState): boolean => {\r\n return Object.values(state).some((stateImport) => stateImport.status === 'importing');\r\n};\r\n\r\nconst fetchImportStatus = async (dataSourceId: string) => {\r\n // TODO: Ideally we would call RestService.GetImportStatus here but it suppresses errors that we need to handle, and it is too risky to update at the moment\r\n const { data } = await RestService.performWebApiCallAsync({\r\n url: `/webapi/datasource/${dataSourceId}/mostrecentimportstatus`,\r\n method: 'GET',\r\n isUserAction: false,\r\n });\r\n\r\n return data;\r\n};\r\n\r\nexport const getStatus = (statusCode: ImportStatusCode): DataImportStatus => {\r\n switch (statusCode) {\r\n case ImportStatusCode.Pending:\r\n return 'started';\r\n case ImportStatusCode.Importing:\r\n case ImportStatusCode.Saving:\r\n return 'importing';\r\n case ImportStatusCode.Success:\r\n return 'success';\r\n case ImportStatusCode.SuccessWithErrors:\r\n return 'success-with-errors';\r\n case ImportStatusCode.ConnectFailed:\r\n case ImportStatusCode.ImportFailed:\r\n case ImportStatusCode.UnknownError:\r\n case ImportStatusCode.TimeOut:\r\n return 'error';\r\n default:\r\n return 'not-started';\r\n }\r\n};\r\n\r\n/** The data source types that use the simple progress calculation */\r\nconst simpleProgressTypes = [\r\n DataSourceTypeCode.Excel,\r\n DataSourceTypeCode.ExcelDesktop,\r\n DataSourceTypeCode.ExcelPersonalWealth,\r\n DataSourceTypeCode.QuickBooks,\r\n DataSourceTypeCode.Xero,\r\n DataSourceTypeCode.XeroPracticeManager,\r\n DataSourceTypeCode.GoogleSheets,\r\n];\r\n\r\nconst getComplexProgress = (dataImport: DataImport, response: ImportStatusResponse) => {\r\n let progress = 0;\r\n const { totalReports, importedReports, startedOrganisations, totalOrganisations } = response;\r\n const dataSourceType = dataSourceTypes[dataImport.dataSourceTypeCode];\r\n\r\n if (totalReports >= 1) {\r\n progress = Math.floor(((importedReports * startedOrganisations) / totalReports / totalOrganisations) * 100);\r\n }\r\n\r\n if (dataSourceType.category === DataSourceCategoryCode.Desktop && progress !== 0) {\r\n // Uploading the desktop file is worth 50% of the progress, we need to scale 100 into 50%\r\n progress = Math.floor(50 + progress / 2);\r\n }\r\n\r\n // Progress should never go down\r\n const prevProgress = dataImport.progress;\r\n progress = Math.max(prevProgress, progress);\r\n\r\n return progress;\r\n};\r\n\r\n/** Adapted from the calculateProgress function in import-helper.ts, without smoothing */\r\nconst getProgress = (state: DataImportState, dataSourceId: string, response: ImportStatusResponse) => {\r\n const dataImport = state[dataSourceId];\r\n const usesSimpleProgress = simpleProgressTypes.includes(dataImport.dataSourceTypeCode);\r\n\r\n return usesSimpleProgress ? response.completedWork : getComplexProgress(dataImport, response);\r\n};\r\n\r\nconst updateImport = (state: DataImportState, dataSourceId: string, update: Partial) => {\r\n const dataImport = state[dataSourceId];\r\n\r\n state[dataSourceId] = {\r\n ...dataImport,\r\n ...update,\r\n };\r\n};\r\n\r\nexport const loadImport = createAsyncThunk<\r\n { status: DataImportStatus; progress: number },\r\n { dataSourceId: string; dataSourceTypeCode: DataSourceTypeCode; importStatusCode: ImportStatusCode },\r\n { state: RootState }\r\n>('dataImport/initialise', async ({ dataSourceId, importStatusCode }, { getState }) => {\r\n if ([ImportStatusCode.Pending, ImportStatusCode.Importing, ImportStatusCode.Saving].includes(importStatusCode)) {\r\n const response = await fetchImportStatus(dataSourceId);\r\n const state = getState().dataImport;\r\n return {\r\n status: getStatus(response.importStatusCode),\r\n progress: getProgress(state, dataSourceId, response),\r\n };\r\n } else {\r\n return {\r\n status: getStatus(importStatusCode),\r\n progress: 0,\r\n };\r\n }\r\n});\r\n\r\nexport const startImport = createAsyncThunk<\r\n boolean,\r\n { dataSourceId: string; reportMode: ReportMode; settings: DataImportSettings; keepProgress?: boolean },\r\n { state: RootState }\r\n>('dataImport/startImport', async ({ dataSourceId, reportMode, settings }) => {\r\n const dateFormat = 'DD MMMM YYYY';\r\n\r\n const request: ImportDataSource = {\r\n actuals: settings.includeActuals,\r\n budget: settings.includeBudget,\r\n companyFileId: settings.companyFileId,\r\n importFileId: settings.importFileId,\r\n accountTypeCode: settings.accountTypeCode,\r\n ...(settings.includeActuals && {\r\n actualsFrom: settings.actualsFrom.format(dateFormat),\r\n actualsTo: settings.actualsTo.format(dateFormat),\r\n trackingActualsSelected: settings.includeActualsTracking,\r\n }),\r\n ...(settings.includeBudget && {\r\n budgetFrom: settings.budgetFrom.format(dateFormat),\r\n budgetTo: settings.budgetTo.format(dateFormat),\r\n trackingBudgetSelected: settings.includeBudgetTracking,\r\n }),\r\n };\r\n\r\n const response = await RestService.ImportDataSource(dataSourceId, reportMode, request);\r\n\r\n return response.data;\r\n});\r\n\r\nexport const startGoogleAnalytics4Import = createAsyncThunk<\r\n void,\r\n { settings: GoogleAnalytics4DataSource },\r\n { state: RootState }\r\n>('dataImport/startGoogleAnalytics4Import', async ({ settings }) => {\r\n const postData = {\r\n eventCode: EventCode.ImportDataSource,\r\n eventJson: JSON.stringify(settings),\r\n };\r\n await RestService.performCallAsync({\r\n method: 'POST',\r\n url: `${Endpoints.DoEvent}/${window.WINDOW_CODE}`,\r\n data: postData,\r\n });\r\n});\r\n\r\nconst wait = (ms: number) =>\r\n new Promise((resolve) => {\r\n setTimeout(resolve, ms);\r\n });\r\n\r\n// waits the specified amount of time before setting the import status to success or success with errors\r\nconst completeImport = createAsyncThunk<\r\n { status: DataImportStatus; importErrors: ImportError[] },\r\n {\r\n status: DataImportStatus;\r\n dataSourceId: string;\r\n delay: number;\r\n importErrors: ImportError[];\r\n },\r\n { state: RootState }\r\n>('dataImport/completeImport', async ({ status, delay, importErrors }) => {\r\n await wait(delay);\r\n return { status: status, importErrors };\r\n});\r\n\r\nexport const checkImportStatus = createAsyncThunk<\r\n { status: DataImportStatus; progress: number },\r\n { dataSourceId: string; successDelay: number },\r\n { state: RootState }\r\n>('dataImport/checkStatus', async ({ dataSourceId, successDelay }, { dispatch, getState }) => {\r\n const response = await fetchImportStatus(dataSourceId);\r\n const state = getState().dataImport;\r\n const status = getStatus(response.importStatusCode);\r\n const progress = getProgress(state, dataSourceId, response);\r\n\r\n if (status === 'success' || status === 'success-with-errors') {\r\n dispatch(completeImport({ status, dataSourceId, delay: successDelay, importErrors: response.errorMessages }));\r\n }\r\n\r\n return {\r\n status,\r\n progress,\r\n };\r\n});\r\n\r\nexport const cancelImport = createAsyncThunk<\r\n ImportStatusCode,\r\n { dataSourceId: string; windowCode: string },\r\n { state: RootState }\r\n>('dataImport/cancelImport', async ({ dataSourceId, windowCode }, { getState }) => {\r\n const state = getState().dataImport;\r\n const dataImport = state[dataSourceId];\r\n\r\n if (dataImport.status === 'uploading-file') {\r\n return ImportStatusCode.Cancelled;\r\n }\r\n\r\n const response = await RestService.performCallAsync<{ ImportStatusCode: ImportStatusCode }>({\r\n method: 'POST',\r\n url: `${Endpoints.DoEvent}/${windowCode}`,\r\n data: {\r\n eventCode: EventCode.CancelImportDataSource,\r\n eventJson: JSON.stringify({ eId: dataSourceId }),\r\n },\r\n });\r\n\r\n return RestService.GetEventJson(response.data)?.ImportStatusCode;\r\n});\r\n\r\nexport const dataImportSlice = createSlice({\r\n name: 'dataImport',\r\n initialState: {} as DataImportState,\r\n reducers: {\r\n updateDataImport(\r\n state: DataImportState,\r\n action: PayloadAction<{ dataSourceId: string; update: Partial }>,\r\n ) {\r\n updateImport(state, action.payload.dataSourceId, action.payload.update);\r\n },\r\n },\r\n extraReducers(builder) {\r\n builder\r\n .addCase(loadImport.pending, (state, action) => {\r\n updateImport(state, action.meta.arg.dataSourceId, {\r\n dataSourceTypeCode: action.meta.arg.dataSourceTypeCode,\r\n status: 'loading',\r\n progress: 0,\r\n });\r\n })\r\n .addCase(loadImport.fulfilled, (state, action) => {\r\n const polling = isPolling(action.payload.status);\r\n\r\n // on initial load, don't show success or error state for existing imports (as the success/error might have happened a long time ago, not necessarily in this session)\r\n updateImport(state, action.meta.arg.dataSourceId, {\r\n status: polling ? action.payload.status : 'not-started',\r\n progress: polling ? action.payload.progress : 0,\r\n });\r\n })\r\n .addCase(loadImport.rejected, (state, action) => {\r\n updateImport(state, action.meta.arg.dataSourceId, {\r\n status: 'status-check-failed',\r\n });\r\n })\r\n .addCase(startImport.pending, (state, action) => {\r\n const update: Partial = {\r\n status: 'starting',\r\n importErrors: null,\r\n };\r\n\r\n if (!action.meta.arg.keepProgress) {\r\n update.progress = 0;\r\n }\r\n\r\n updateImport(state, action.meta.arg.dataSourceId, update);\r\n })\r\n .addCase(startImport.fulfilled, (state, action) => {\r\n updateImport(state, action.meta.arg.dataSourceId, {\r\n status: 'started',\r\n });\r\n })\r\n .addCase(startImport.rejected, (state, action) => {\r\n updateImport(state, action.meta.arg.dataSourceId, {\r\n status: 'error',\r\n });\r\n })\r\n .addCase(startGoogleAnalytics4Import.pending, (state, action) => {\r\n updateImport(state, action.meta.arg.settings.eId, {\r\n status: 'starting',\r\n progress: 0,\r\n });\r\n })\r\n .addCase(startGoogleAnalytics4Import.fulfilled, (state, action) => {\r\n updateImport(state, action.meta.arg.settings.eId, {\r\n status: 'started',\r\n });\r\n })\r\n .addCase(startGoogleAnalytics4Import.rejected, (state, action) => {\r\n updateImport(state, action.meta.arg.settings.eId, {\r\n status: 'error',\r\n progress: 0,\r\n });\r\n })\r\n .addCase(checkImportStatus.fulfilled, (state, action) => {\r\n const update: Partial = {\r\n progress: action.payload.progress,\r\n };\r\n\r\n // If the import succeeded, don't update the status yet, to give the progress bar time to show 100%\r\n // let completeImport take care of that (it allows for the status change to be delayed)\r\n if (action.payload.status !== 'success' && action.payload.status !== 'success-with-errors') {\r\n update.status = action.payload.status;\r\n }\r\n\r\n updateImport(state, action.meta.arg.dataSourceId, update);\r\n })\r\n .addCase(checkImportStatus.rejected, (state, action) => {\r\n updateImport(state, action.meta.arg.dataSourceId, {\r\n status: 'status-check-failed',\r\n });\r\n })\r\n .addCase(completeImport.fulfilled, (state, action) => {\r\n updateImport(state, action.meta.arg.dataSourceId, {\r\n status: action.payload.status,\r\n importErrors: action.payload.importErrors.length > 0 ? action.payload.importErrors : undefined,\r\n });\r\n })\r\n .addCase(cancelImport.fulfilled, (state, action) => {\r\n updateImport(state, action.meta.arg.dataSourceId, {\r\n status: action.payload === ImportStatusCode.Cancelled ? 'cancelled' : 'cancel-failed',\r\n });\r\n })\r\n .addCase(cancelImport.rejected, (state, action) => {\r\n updateImport(state, action.meta.arg.dataSourceId, {\r\n status: 'cancel-failed',\r\n });\r\n });\r\n },\r\n});\r\n\r\nexport const { updateDataImport } = dataImportSlice.actions;\r\nexport default dataImportSlice.reducer;\r\n","import { ExportStatus, IExportStatusResponse, IGlobalData } from '../Reducers/ExportReducer';\r\nimport RestService from '../../Services/RestService';\r\n\r\ndeclare const $: any;\r\n\r\nconst EXPORT_TIMEOUT = 1000;\r\n\r\nexport const ActionTypes = {\r\n GLOBALS_SET: 'GLOBALS_SET',\r\n RESET_EXPORT: 'RESET_EXPORT',\r\n\r\n PREPARE_EXPORT_STARTED: 'PREPARE_EXPORT_STARTED',\r\n PREPARE_EXPORT_FAILURE: 'PREPARE_EXPORT_FAILURE',\r\n START_EXPORT_FAILURE: 'START_EXPORT_FAILURE',\r\n EXPORT_STATUS_FAILURE: 'EXPORT_STATUS_FAILURE',\r\n EXPORT_STATUS_SUCCESS: 'EXPORT_STATUS_SUCCESS',\r\n};\r\n\r\nexport const setGlobals = (globalData: IGlobalData) => {\r\n return {\r\n type: ActionTypes.GLOBALS_SET,\r\n globalData: globalData,\r\n };\r\n};\r\n\r\nexport const resetExport = () => {\r\n return {\r\n type: ActionTypes.RESET_EXPORT,\r\n };\r\n};\r\n\r\n/**\r\n * prepare export\r\n */\r\nconst prepareExportStart = (exportType: string) => {\r\n return {\r\n type: ActionTypes.PREPARE_EXPORT_STARTED,\r\n exportType: exportType,\r\n };\r\n};\r\n\r\nconst prepareExportFailure = (error) => {\r\n return {\r\n type: ActionTypes.PREPARE_EXPORT_FAILURE,\r\n error: error,\r\n };\r\n};\r\n\r\nexport const prepareExport = (exportType: string, reportId: string) => {\r\n return async (dispatch) => {\r\n dispatch(prepareExportStart(exportType));\r\n\r\n try {\r\n const response = await RestService.DownloadReportWithoutTimezone(exportType, reportId, (window as any).WINDOW_CODE);\r\n if (response) {\r\n dispatch(startExport(response.data.exportType, response.data.reportId));\r\n }\r\n } catch {\r\n dispatch(prepareExportFailure('Error occurred. Please try again later.'))\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * start export\r\n */\r\nconst startExportFailure = (error) => {\r\n return {\r\n type: ActionTypes.START_EXPORT_FAILURE,\r\n error: error,\r\n };\r\n};\r\n\r\nexport const startExport = (exportType: string, reportId: string) => {\r\n return async (dispatch) => {\r\n\r\n try {\r\n const response = await RestService.StartReportExport({ exportType, windowCode: (window as any).WINDOW_CODE, reportId });\r\n if (response) {\r\n dispatch(startExportPolling(exportType, reportId, response.data.buildId));\r\n } else {\r\n dispatch(startExportFailure('Error occurred. Please try again later.'));\r\n }\r\n } catch {\r\n dispatch(startExportFailure('Error occurred. Please try again later.'));\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * export status\r\n */\r\nconst exportStatusFailure = (error) => {\r\n return {\r\n type: ActionTypes.EXPORT_STATUS_FAILURE,\r\n error: error,\r\n };\r\n};\r\n\r\nconst exportStatusSuccess = (downloadUrl: string) => {\r\n return {\r\n type: ActionTypes.EXPORT_STATUS_SUCCESS,\r\n downloadUrl: downloadUrl,\r\n };\r\n};\r\n\r\nexport const startExportPolling = (exportType, reportId, buildId) => {\r\n return (dispatch) => {\r\n dispatch(getDocumentStatus(exportType, reportId, buildId));\r\n };\r\n};\r\n\r\nexport const checkExportPollingComplete = (\r\n exportType: string,\r\n reportId: string,\r\n buildId: string,\r\n data: IExportStatusResponse,\r\n) => {\r\n return async (dispatch) => {\r\n if (data.status === ExportStatus.Ready && data.isComplete) {\r\n dispatch(exportStatusSuccess(data.downloadUrl));\r\n } else {\r\n //check export again after a delay\r\n await new Promise((resolve) => setTimeout(resolve, EXPORT_TIMEOUT));\r\n dispatch(getDocumentStatus(exportType, reportId, buildId));\r\n }\r\n };\r\n};\r\n\r\nexport const getDocumentStatus = (exportType: string, reportId: string, buildId: string) => {\r\n return async (dispatch) => {\r\n const url = `/reportexport/documentstatus/${\r\n (window as any).WINDOW_CODE\r\n }?buildId=${buildId}&reportId=${reportId}&exportType=${exportType}`;\r\n\r\n (window).getDocumentStatusRequestsArr = (window).getDocumentStatusRequestsArr\r\n ? (window).getDocumentStatusRequestsArr\r\n : [];\r\n\r\n //check if the request matches the one we're about to make..\r\n const idx = (window).getDocumentStatusRequestsArr.indexOf(url);\r\n if (idx >= 0) {\r\n //if so, return early\r\n return;\r\n }\r\n\r\n //add our requested url to the array\r\n (window).getDocumentStatusRequestsArr.push(url);\r\n\r\n try {\r\n const response = await RestService.GetReportExportStatus({ windowCode: (window as any).WINDOW_CODE, buildId, reportId, exportType });\r\n if (response) {\r\n dispatch(\r\n checkExportPollingComplete(\r\n exportType,\r\n reportId,\r\n buildId,\r\n response.data as IExportStatusResponse,\r\n ),\r\n );\r\n }\r\n //remove our requested url from our array\r\n const pos = (window).getDocumentStatusRequestsArr.indexOf(url);\r\n (window).getDocumentStatusRequestsArr.splice(pos, 1);\r\n } catch {\r\n dispatch(exportStatusFailure('Error occurred. Please try again later.'));\r\n //remove our requested url from our array\r\n const pos = (window).getDocumentStatusRequestsArr.indexOf(url);\r\n (window).getDocumentStatusRequestsArr.splice(pos, 1);\r\n }\r\n };\r\n};\r\n","import { ReportMode } from '../../../Codes';\r\nimport { updateObject } from '../../Components/Helpers';\r\nimport { ActionTypes } from '../Actions/ExportActions';\r\n\r\n/**\r\n * Models\r\n */\r\nexport const ExportStatus = {\r\n Pending: 'PENDING',\r\n InProgress: 'INPROGRESS',\r\n Ready: 'READY',\r\n Failed: 'FAILED',\r\n};\r\n\r\nexport interface IGlobalData {\r\n organisationId: string;\r\n reportMode: ReportMode;\r\n reportId: string;\r\n}\r\n\r\nexport interface IPrepareExportResponse {\r\n exportType: string;\r\n organisationId: string;\r\n reportId: string;\r\n windowCode: string;\r\n}\r\n\r\nexport interface IStartExportResponse {\r\n exportType: string;\r\n buildId: string;\r\n reportId: string;\r\n}\r\n\r\nexport interface IExportStatusResponse {\r\n downloadUrl: string;\r\n isComplete: boolean;\r\n status: string;\r\n}\r\n\r\n/**\r\n * Shared State\r\n */\r\ninterface IExportState {\r\n globalData: IGlobalData;\r\n exportType: string;\r\n buildId: string;\r\n downloadUrl: string;\r\n loading: false;\r\n error: null;\r\n}\r\n\r\nconst initialState: IExportState = {\r\n globalData: null,\r\n exportType: null,\r\n buildId: null,\r\n downloadUrl: null,\r\n loading: false,\r\n error: null,\r\n};\r\n\r\n/**\r\n * In this reducer the shared state of Export is managed\r\n */\r\nconst reducer = (state = initialState, action): IExportState => {\r\n switch (action.type) {\r\n case ActionTypes.RESET_EXPORT:\r\n return initialState;\r\n case ActionTypes.GLOBALS_SET:\r\n return updateObject(state, { globalData: action.globalData });\r\n\r\n case ActionTypes.PREPARE_EXPORT_STARTED:\r\n return updateObject(state, {\r\n exportType: action.exportType,\r\n loading: true,\r\n error: false,\r\n downloadUrl: null,\r\n });\r\n case ActionTypes.PREPARE_EXPORT_FAILURE:\r\n return updateObject(state, { error: action.error, loading: false });\r\n case ActionTypes.START_EXPORT_FAILURE:\r\n return updateObject(state, { error: action.error, loading: false });\r\n case ActionTypes.EXPORT_STATUS_FAILURE:\r\n return updateObject(state, { error: action.error, loading: false });\r\n case ActionTypes.EXPORT_STATUS_SUCCESS:\r\n return updateObject(state, { downloadUrl: action.downloadUrl, loading: false, error: false });\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default reducer;\r\n","import { updateObject } from '../../Components/Helpers';\r\nimport { ActionTypes } from '../Actions/NotificationsMenuActions';\r\n\r\nexport const NOTIFICATION_COUNT = 10;\r\n\r\nexport interface INotificationsMenuState {\r\n tab: string;\r\n notificationsCount: number;\r\n displayedNotificationIds: Array;\r\n orgDisplayedNotificationIds: Array;\r\n}\r\n\r\nexport const initialState: INotificationsMenuState = {\r\n tab: 'all',\r\n notificationsCount: 0,\r\n displayedNotificationIds: [],\r\n orgDisplayedNotificationIds: [],\r\n};\r\n\r\nconst reducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case ActionTypes.RESET_MENU:\r\n return updateObject(state, {\r\n notificationsCount: 0,\r\n displayedNotificationIds: [],\r\n orgDisplayedNotificationIds: [],\r\n });\r\n case ActionTypes.SET_DISPLAY_COUNT:\r\n return updateObject(state, { notificationsCount: action.count });\r\n case ActionTypes.ADD_TO_DISPLAYED_NOTIFICATION_IDS:\r\n if (action.organisationId) {\r\n let orgNotificationIds = JSON.parse(JSON.stringify(state.orgDisplayedNotificationIds)); //deep copy existing state\r\n //merge in new data\r\n orgNotificationIds = [...Array.from(new Set(orgNotificationIds.concat([...action.ids])))];\r\n\r\n return updateObject(state, { orgDisplayedNotificationIds: orgNotificationIds });\r\n } else {\r\n let notificationIds = JSON.parse(JSON.stringify(state.displayedNotificationIds)); //deep copy existing state\r\n //merge in new data\r\n notificationIds = [...Array.from(new Set(notificationIds.concat([...action.ids])))];\r\n\r\n return updateObject(state, { displayedNotificationIds: notificationIds });\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default reducer;\r\n","import { updateObject } from '../../Components/Helpers';\r\nimport { INotification, NotificationStatus } from '../../Components/Notifications/Notification';\r\nimport { ActionTypes } from '../Actions/NotificationsActions';\r\n\r\ninterface NotificationsState {\r\n nextCursor: string;\r\n notifications: { [key: string]: INotification };\r\n fetchingNotifications: boolean;\r\n}\r\n\r\nconst initialState: NotificationsState = {\r\n nextCursor: null,\r\n notifications: {},\r\n fetchingNotifications: false,\r\n};\r\n\r\nconst reducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case ActionTypes.RESET_NOTIFICATIONS:\r\n return updateObject(state, { nextCursor: null });\r\n case ActionTypes.SET_NOTIFICATIONS_FETCHING:\r\n return updateObject(state, { fetchingNotifications: action.fetching });\r\n case ActionTypes.GET_NOTIFICATIONS_SUCCESS:\r\n return (function () {\r\n let notifications = JSON.parse(JSON.stringify(state.notifications)); //deep copy the current state notifications array\r\n\r\n //merge in the actions notifications\r\n notifications = { ...notifications, ...action.notifications };\r\n\r\n return updateObject(state, { notifications: notifications, nextCursor: action.nextCursor });\r\n })();\r\n case ActionTypes.SET_NOTIFICATION_READ_SUCCESS:\r\n //this is only intended to update the backend so return state as is\r\n return state;\r\n case ActionTypes.SET_NOTIFICATION_READ_ERROR:\r\n return state;\r\n case ActionTypes.SET_NOTIFICATIONS_READ_SUCCESS:\r\n return state;\r\n case ActionTypes.SET_NOTIFICATIONS_READ_ERROR:\r\n return state;\r\n case ActionTypes.SET_UNREAD_NOTIFICATIONS_READ_UI:\r\n return (function () {\r\n const notifications = JSON.parse(JSON.stringify(state.notifications)); //deep copy the current state array\r\n\r\n const keys = action.ids; //displayed notification ids\r\n for (let i = 0; i < keys.length; i++) {\r\n //update status of the matching notification\r\n if (\r\n typeof notifications[keys[i]].id !== 'undefined' &&\r\n notifications[keys[i]].status === NotificationStatus.Unread\r\n ) {\r\n notifications[keys[i]].status = action.status;\r\n }\r\n }\r\n\r\n return updateObject(state, { notifications: notifications });\r\n })();\r\n case ActionTypes.SET_NOTIFICATION_DISMISSED_UI:\r\n return (function () {\r\n const notifications = JSON.parse(JSON.stringify(state.notifications)); //deep copy the current state array\r\n\r\n //update status of the matching notification\r\n if (typeof notifications[action.id] !== 'undefined') {\r\n notifications[action.id].status = action.status;\r\n }\r\n\r\n return updateObject(state, { notifications: notifications });\r\n })();\r\n case ActionTypes.SET_ALL_NOTIFICATIONS_DISMISSED_UI:\r\n return updateNotificationsStatus(state, NotificationStatus.Dismissed, action.organisationId);\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nfunction updateNotificationsStatus(\r\n notificationsState: NotificationsState,\r\n status: NotificationStatus,\r\n organisationId?: string,\r\n) {\r\n const notifications = JSON.parse(JSON.stringify(notificationsState.notifications));\r\n const allIds = Object.keys(notifications) || [];\r\n const setStatus = (notification, status) => {\r\n if (notification) {\r\n notification.status = status;\r\n }\r\n };\r\n\r\n organisationId\r\n ? allIds.forEach((id) => {\r\n notifications[id] &&\r\n notifications[id].organisationId === organisationId &&\r\n setStatus(notifications[id], status);\r\n })\r\n : allIds.forEach((id) => setStatus(notifications[id], status));\r\n\r\n return updateObject(notificationsState, { notifications: notifications });\r\n}\r\n\r\nexport default reducer;\r\n","import { IOrganisation } from '../../Components/OrganisationSettings/IOrganisation';\r\n\r\nexport const ActionTypes = {\r\n GLOBALS_SET: 'GLOBALS_SET',\r\n\r\n ORGANISATION_SETTINGS_SET: 'ORGANISATION_SETTINGS_SET',\r\n};\r\n\r\nexport const setGlobals = (windowCode: string, csrfToken: string, reportMode: string) => {\r\n return {\r\n type: ActionTypes.GLOBALS_SET,\r\n windowCode: windowCode,\r\n csrfToken: csrfToken,\r\n reportMode: reportMode,\r\n };\r\n};\r\n\r\n/**\r\n * set organisation\r\n */\r\nexport const setOrganisation = (organisation: IOrganisation) => {\r\n return {\r\n type: ActionTypes.ORGANISATION_SETTINGS_SET,\r\n organisation: organisation,\r\n };\r\n};\r\n","import { ActionTypes } from '../Actions/OrganisationSettingsActions';\r\nimport { IOrganisation } from '../../Components/OrganisationSettings/IOrganisation';\r\nimport { updateObject } from '../../Components/Helpers';\r\n\r\ninterface OrganisationSettingsState {\r\n organisation: IOrganisation;\r\n tab: string;\r\n windowCode: string;\r\n csrfToken: string;\r\n}\r\n\r\nconst organisation: IOrganisation = {};\r\nconst initialState: OrganisationSettingsState = {\r\n organisation: organisation,\r\n tab: '',\r\n windowCode: '',\r\n csrfToken: '',\r\n};\r\n\r\n/**\r\n * Main organisation settings reducer. Here the shared state of Organisation Settings is managed\r\n */\r\nconst reducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case ActionTypes.GLOBALS_SET:\r\n return updateObject(state, {\r\n windowCode: action.windowCode,\r\n csrfToken: action.csrfToken,\r\n });\r\n\r\n case ActionTypes.ORGANISATION_SETTINGS_SET:\r\n return updateObject(state, { organisation: action.organisation });\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default reducer;\r\n","import { toCamel } from '../../Components/Helpers';\r\n\r\ndeclare const $: any;\r\n\r\nexport enum ActionTypes {\r\n SET_ORGANISATION = 'SET_ORGANISATION',\r\n GET_ORGANISATIONS_SUCCESS = 'GET_ORGANISATIONS_SUCCESS',\r\n GET_ORGANISATIONS_START = 'GET_ORGANISATIONS_START',\r\n GET_ORGANISATIONS_ERROR = 'GET_ORGANISATIONS_ERROR',\r\n}\r\n\r\nexport interface IOrganisation {\r\n id: string;\r\n name: string;\r\n}\r\n\r\nexport interface IGetOrganisationsResponse {\r\n Organisations: Array;\r\n}\r\n\r\nexport const setOrganisation = (organisationId: string) => {\r\n return {\r\n type: ActionTypes.SET_ORGANISATION,\r\n organisationId: organisationId,\r\n };\r\n};\r\n\r\n//get all organisations for this member\r\nconst getOrganisationsStart = () => {\r\n return {\r\n type: ActionTypes.GET_ORGANISATIONS_START,\r\n };\r\n};\r\n\r\nconst getOrganisationsSuccess = (organisations: Array) => {\r\n const organisationsDict = organisations.reduce((result, item) => {\r\n result[item.id] = { ...item };\r\n return result;\r\n }, {});\r\n\r\n return {\r\n type: ActionTypes.GET_ORGANISATIONS_SUCCESS,\r\n organisations: organisationsDict,\r\n };\r\n};\r\n\r\nconst getOrganisationsError = (message: string) => {\r\n return {\r\n type: ActionTypes.GET_ORGANISATIONS_ERROR,\r\n message: message,\r\n };\r\n};\r\n\r\nexport const getOrganisations = (windowCode: string) => (dispatch) => {\r\n dispatch(getOrganisationsStart());\r\n\r\n const url = '/organisation/get/' + windowCode;\r\n\r\n $.ajax({\r\n type: 'GET',\r\n cache: false,\r\n url: url,\r\n dataType: 'json',\r\n headers: { 'csrf-token': (window as any).CsrfToken },\r\n success: (response: IGetOrganisationsResponse) => {\r\n if (response) {\r\n const organisations = toCamel(response);\r\n dispatch(getOrganisationsSuccess(organisations));\r\n }\r\n },\r\n error: (error) => {\r\n dispatch(getOrganisationsError('Error occurred. Please try again later.'));\r\n },\r\n });\r\n};\r\n","import { updateObject } from '../../Components/Helpers';\r\nimport { ActionTypes, IOrganisation } from '../Actions/OrganisationsActions';\r\n\r\ninterface OrganisationState {\r\n organisationId: string;\r\n organisations: Array;\r\n loading: boolean;\r\n error: null;\r\n}\r\n\r\nconst initialState: OrganisationState = {\r\n organisationId: null,\r\n organisations: [],\r\n loading: false,\r\n error: null,\r\n};\r\n\r\nconst reducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case ActionTypes.SET_ORGANISATION:\r\n return updateObject(state, { organisationId: action.organisationId });\r\n case ActionTypes.GET_ORGANISATIONS_START:\r\n return updateObject(state, { loading: false });\r\n case ActionTypes.GET_ORGANISATIONS_ERROR:\r\n return updateObject(state, { error: action.message });\r\n case ActionTypes.GET_ORGANISATIONS_SUCCESS:\r\n let organisations = JSON.parse(JSON.stringify(state.organisations)); //deep copy the current state organisations array\r\n organisations = { ...organisations, ...action.organisations };\r\n return updateObject(state, { organisations: organisations });\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default reducer;\r\n","import { EventCode } from '../../../Codes';\r\nimport { IPractice } from '../../Components/PracticeSettings/IPractice';\r\nimport { ErrorMessages } from '../../Models/Messages';\r\nimport RestService from '../../Services/RestService';\r\n\r\ndeclare const $: any;\r\n\r\nexport const ActionTypes = {\r\n GLOBALS_SET: 'GLOBALS_SET',\r\n TAB_SET: 'TAB_SET',\r\n\r\n PRACTICE_SETTINGS_SET: 'PRACTICE_SETTINGS_SET',\r\n PRACTICE_SETTINGS_REFERENCE_SET: 'PRACTICE_SETTINGS_REFERENCE_SET',\r\n PRACTICE_SETTINGS_STORE: 'PRACTICE_SETTINGS_STORE',\r\n PRACTICE_SETTINGS_REVERT: 'PRACTICE_SETTINGS_REVERT',\r\n PRACTICE_SETTINGS_STARTED: 'PRACTICE_SETTINGS_STARTED',\r\n PRACTICE_SETTINGS_UPDATED: 'PRACTICE_SETTINGS_UPDATED',\r\n PRACTICE_SETTINGS_FAILED: 'PRACTICE_SETTINGS_FAILED',\r\n\r\n THUMBNAIL_TYPE: 'THUMBNAIL_TYPE',\r\n REPORT_COVER_STARTED: 'REPORT_COVER_STARTED',\r\n REPORT_COVER_COMPLETE: 'REPORT_COVER_COMPLETE',\r\n REPORT_COVER_FAILED: 'REPORT_COVER_FAILED',\r\n TEMPLATE_THUMBNAILS_STARTED: 'TEMPLATE_THUMBNAILS_STARTED',\r\n TEMPLATE_THUMBNAILS_COMPLETE: 'TEMPLATE_THUMBNAILS_COMPLETE',\r\n TEMPLATE_THUMBNAILS_FAILED: 'TEMPLATE_THUMBNAILS_FAILED',\r\n};\r\n\r\nexport const setGlobals = (windowCode: string, csrfToken: string) => {\r\n return {\r\n type: ActionTypes.GLOBALS_SET,\r\n windowCode: windowCode,\r\n csrfToken: csrfToken,\r\n };\r\n};\r\n\r\nexport const setTab = (tab) => {\r\n return {\r\n type: ActionTypes.TAB_SET,\r\n tab: tab,\r\n };\r\n};\r\n\r\n/**\r\n * set practice\r\n */\r\nexport const setPractice = (practice: IPractice) => {\r\n return {\r\n type: ActionTypes.PRACTICE_SETTINGS_SET,\r\n practice: practice,\r\n };\r\n};\r\n\r\nexport const setPracticeReference = (practice: IPractice) => {\r\n return {\r\n type: ActionTypes.PRACTICE_SETTINGS_REFERENCE_SET,\r\n practice: practice,\r\n };\r\n};\r\n\r\nexport const revertPractice = () => {\r\n return {\r\n type: ActionTypes.PRACTICE_SETTINGS_REVERT,\r\n };\r\n};\r\n\r\nexport const storePractice = (item: object) => {\r\n return {\r\n type: ActionTypes.PRACTICE_SETTINGS_STORE,\r\n item: item,\r\n };\r\n};\r\n\r\n/**\r\n * save practice\r\n */\r\nconst saveStart = () => {\r\n return {\r\n type: ActionTypes.PRACTICE_SETTINGS_STARTED,\r\n };\r\n};\r\n\r\nconst saveFailed = (error) => {\r\n return {\r\n type: ActionTypes.PRACTICE_SETTINGS_FAILED,\r\n error: error,\r\n };\r\n};\r\n\r\nconst saveSuccess = (saveItem) => {\r\n if (saveItem.Name) {\r\n $(window).trigger('UPDATE_PRACTICE_SETTING_HEADER', saveItem.Name);\r\n }\r\n return {\r\n type: ActionTypes.PRACTICE_SETTINGS_UPDATED,\r\n };\r\n};\r\n\r\nexport const savePractice = (saveItem) => {\r\n return (dispatch) => {\r\n dispatch(saveStart());\r\n\r\n const postData = {\r\n eventCode: EventCode.UpdatePractice,\r\n eventJson: JSON.stringify(saveItem),\r\n };\r\n\r\n RestService.DoEvent(\r\n postData,\r\n (response) => {\r\n if (response) {\r\n const events = response.Events;\r\n if (events && events.length > 0) {\r\n dispatch(saveSuccess(saveItem));\r\n return;\r\n }\r\n }\r\n\r\n const errorMessage = ErrorMessages.SavingFailed;\r\n dispatch(saveFailed(errorMessage));\r\n },\r\n (error) => {\r\n dispatch(saveFailed(ErrorMessages.GenericError));\r\n },\r\n );\r\n };\r\n};\r\n\r\n/**\r\n * get thumbnail type, either Url of File\r\n */\r\nconst getThumbnailTypeSuccess = (type) => {\r\n return {\r\n type: ActionTypes.THUMBNAIL_TYPE,\r\n thumbnailType: type,\r\n };\r\n};\r\n\r\n/**\r\n * get report cover\r\n */\r\nconst getReportCoverStart = () => {\r\n return {\r\n type: ActionTypes.REPORT_COVER_STARTED,\r\n };\r\n};\r\n\r\nconst getReportCoverSuccess = (preview) => {\r\n return {\r\n type: ActionTypes.REPORT_COVER_COMPLETE,\r\n preview: preview,\r\n };\r\n};\r\n\r\nconst getReportCoverFailed = (error) => {\r\n return {\r\n type: ActionTypes.REPORT_COVER_FAILED,\r\n error: error,\r\n };\r\n};\r\n\r\nexport const getReportCover = (windowCode, saveItem, previewType) => {\r\n return (dispatch) => {\r\n dispatch(getReportCoverStart());\r\n\r\n const postData = {\r\n eventJson: JSON.stringify(saveItem),\r\n eventType: previewType,\r\n pageHeight: 694,\r\n pageWidth: 926,\r\n };\r\n\r\n RestService.GetCoverPreview(\r\n postData,\r\n (response) => {\r\n if (response) {\r\n dispatch(getReportCoverSuccess(response.Preview));\r\n dispatch(getThumbnailTypeSuccess(response.Type));\r\n } else {\r\n dispatch(getReportCoverFailed('Getting report cover failed'));\r\n }\r\n },\r\n (error) => {\r\n dispatch(getReportCoverFailed(error.responseText));\r\n },\r\n );\r\n };\r\n};\r\n\r\n/**\r\n * get thumbnails for the templates\r\n */\r\nconst getTemplatesStart = () => {\r\n return {\r\n type: ActionTypes.TEMPLATE_THUMBNAILS_STARTED,\r\n };\r\n};\r\n\r\nconst getTemplatesSuccess = (templates) => {\r\n return {\r\n type: ActionTypes.TEMPLATE_THUMBNAILS_COMPLETE,\r\n templates: templates,\r\n };\r\n};\r\n\r\nconst getTemplatesFailed = (error) => {\r\n return {\r\n type: ActionTypes.TEMPLATE_THUMBNAILS_FAILED,\r\n error: error,\r\n };\r\n};\r\n\r\nexport const getTemplates = (windowCode, saveItem, previewType) => {\r\n return (dispatch) => {\r\n dispatch(getTemplatesStart());\r\n\r\n const postData = {\r\n eventJson: JSON.stringify(saveItem),\r\n eventType: previewType,\r\n };\r\n\r\n RestService.GetCoverTemplates(\r\n postData,\r\n (response) => {\r\n if (response) {\r\n dispatch(getTemplatesSuccess(response.Templates));\r\n dispatch(getThumbnailTypeSuccess(response.Type));\r\n } else {\r\n dispatch(getTemplatesFailed('Getting template thumbnails failed'));\r\n }\r\n },\r\n (error) => {\r\n dispatch(getTemplatesFailed(error.responseText));\r\n },\r\n );\r\n };\r\n};\r\n","import { ActionTypes } from '../Actions/PracticeSettingsActions';\r\nimport { IPractice, ISaveItem } from '../../Components/PracticeSettings/IPractice';\r\nimport { ThumbnailType } from '../../Components/PracticeSettings/Constants';\r\nimport { updateObject } from '../../Components/Helpers';\r\n\r\ninterface PracticeSettingsState {\r\n practice: IPractice;\r\n practiceReference: IPractice;\r\n saveItem: ISaveItem;\r\n tab: string;\r\n windowCode: string;\r\n csrfToken: string;\r\n preview: string;\r\n templates: object;\r\n thumbnailType: ThumbnailType;\r\n loading: false;\r\n loadingTemplates: false;\r\n loadingPreview: false;\r\n error: null;\r\n}\r\n\r\nconst practice: IPractice = {};\r\nconst saveItem: ISaveItem = {};\r\nconst initialState: PracticeSettingsState = {\r\n practice: practice,\r\n practiceReference: practice,\r\n saveItem: saveItem,\r\n tab: '',\r\n windowCode: '',\r\n csrfToken: '',\r\n preview: '',\r\n templates: {},\r\n thumbnailType: ThumbnailType.Url,\r\n loading: false,\r\n loadingTemplates: false,\r\n loadingPreview: false,\r\n error: null,\r\n};\r\n\r\nconst updateSettings = (oldItem, newItem) => {\r\n const settings = [...(oldItem.Settings ?? [])]\r\n\r\n if (newItem.Settings) {\r\n newItem.Settings.forEach((newSetting) => {\r\n const updatedSettings = settings.filter((setting) => setting.Name === newSetting.Name);\r\n if (updatedSettings && updatedSettings.length > 0) {\r\n const updatedSetting = updatedSettings[0];\r\n updatedSetting.Value = newSetting.Value;\r\n } else {\r\n settings.push(newSetting);\r\n }\r\n });\r\n }\r\n\r\n const saveItem = updateObject(oldItem, newItem);\r\n saveItem.Settings = settings;\r\n return saveItem;\r\n};\r\n\r\nconst updatePractice = (state, action) => {\r\n const updatedPractice = updateObject(state.practice, { name: action.practice.name });\r\n return updateObject(state, { practice: updatedPractice, loading: false, error: false });\r\n};\r\n\r\n/**\r\n * Main practice settings reducer. Here the shared state of Practice Settings is managed\r\n */\r\nconst reducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case ActionTypes.GLOBALS_SET:\r\n return updateObject(state, {\r\n windowCode: action.windowCode,\r\n csrfToken: action.csrfToken,\r\n });\r\n case ActionTypes.TAB_SET:\r\n return updateObject(state, { tab: action.tab });\r\n\r\n case ActionTypes.PRACTICE_SETTINGS_SET:\r\n return updateObject(state, { practice: action.practice });\r\n case ActionTypes.PRACTICE_SETTINGS_REFERENCE_SET:\r\n return updateObject(state, { practiceReference: action.practice });\r\n case ActionTypes.PRACTICE_SETTINGS_REVERT:\r\n return updateObject(state, { practice: state.practiceReference, saveItem: {}, preview: '', templates: {} });\r\n case ActionTypes.PRACTICE_SETTINGS_STORE:\r\n const saveItem = updateSettings(state.saveItem, action.item);\r\n return updateObject(state, { saveItem: saveItem });\r\n\r\n case ActionTypes.PRACTICE_SETTINGS_STARTED:\r\n return updateObject(state, { loading: true, error: false });\r\n case ActionTypes.PRACTICE_SETTINGS_FAILED:\r\n return updateObject(state, { error: action.error, loading: false });\r\n case ActionTypes.PRACTICE_SETTINGS_UPDATED:\r\n return updateObject(state, { practiceReference: state.practice, saveItem: {}, loading: false });\r\n\r\n case ActionTypes.THUMBNAIL_TYPE:\r\n return updateObject(state, { thumbnailType: action.thumbnailType });\r\n\r\n case ActionTypes.REPORT_COVER_STARTED:\r\n return updateObject(state, { loadingPreview: true, error: false });\r\n case ActionTypes.REPORT_COVER_COMPLETE:\r\n return updateObject(state, { preview: action.preview, loadingPreview: false });\r\n case ActionTypes.REPORT_COVER_FAILED:\r\n return updateObject(state, { error: action.error, preview: '', loadingPreview: false });\r\n case ActionTypes.TEMPLATE_THUMBNAILS_STARTED:\r\n return updateObject(state, { loadingTemplates: true, error: false });\r\n case ActionTypes.TEMPLATE_THUMBNAILS_COMPLETE:\r\n return updateObject(state, { templates: action.templates, loadingTemplates: false });\r\n case ActionTypes.TEMPLATE_THUMBNAILS_FAILED:\r\n return updateObject(state, { error: action.error, templates: {}, loadingTemplates: false });\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default reducer;\r\n","import { createSlice, createAsyncThunk, PayloadAction } from '@reduxjs/toolkit';\r\n\r\nimport { ExportType, ReportCacheStatusCode } from '../../../Codes';\r\nimport { RootState } from '../../Components/render-with-store';\r\nimport {\r\n ConnectReportForExportResponse,\r\n GetReportExportStatusResponse,\r\n StartReportExportResponse,\r\n} from '../../Services/ApiResponseModels';\r\nimport RestService from '../../Services/RestService';\r\n\r\nexport type ReportExportStatus =\r\n | 'not-started'\r\n | 'connecting-report'\r\n | 'report-connected'\r\n | 'scheduling-export'\r\n | 'export-scheduled'\r\n | 'fetching-status'\r\n | 'download-not-ready'\r\n | 'download-ready'\r\n | 'failed';\r\n\r\ninterface ReportExportState {\r\n exports: Record;\r\n}\r\n\r\ninterface ReportExport {\r\n status: ReportExportStatus;\r\n windowCode?: string;\r\n buildId?: string;\r\n downloadUrl?: string;\r\n exportType?: ExportType;\r\n}\r\n\r\nexport const connectReport = createAsyncThunk<\r\n ConnectReportForExportResponse,\r\n { reportId: string; reportMode: string; exportType: ExportType },\r\n { state: RootState }\r\n>('reportExport/connectReport', async ({ reportId, reportMode, exportType }) => {\r\n const response = await RestService.ConnectReportForExport({\r\n exportType: exportType,\r\n reportId: reportId,\r\n reportMode: reportMode,\r\n });\r\n\r\n window.WINDOW_CODE = response.data.windowCode;\r\n window.CsrfToken = response.data.csrfToken;\r\n\r\n return response.data;\r\n});\r\n\r\nexport const scheduleExport = createAsyncThunk<\r\n StartReportExportResponse,\r\n { reportId: string; exportType: ExportType },\r\n { state: RootState }\r\n>('reportExport/scheduleExport', async ({ reportId, exportType }, { getState }) => {\r\n const state = getState();\r\n const reportExport = state.reportExport.exports[reportId];\r\n\r\n const response = await RestService.StartReportExport({\r\n exportType: exportType,\r\n reportId: reportId,\r\n windowCode: reportExport?.windowCode,\r\n });\r\n\r\n return response.data;\r\n});\r\n\r\nexport const getExportStatus = createAsyncThunk<\r\n GetReportExportStatusResponse,\r\n { reportId: string; exportType: ExportType },\r\n { state: RootState }\r\n>('reportExport/getStatus', async ({ reportId, exportType }, { getState }) => {\r\n const state = getState();\r\n const reportExport = state.reportExport.exports[reportId];\r\n\r\n const response = await RestService.GetReportExportStatus({\r\n windowCode: reportExport.windowCode,\r\n buildId: reportExport.buildId,\r\n reportId: reportId,\r\n exportType: exportType,\r\n });\r\n\r\n return response.data;\r\n});\r\n\r\nconst updateReportExport = (state: ReportExportState, reportId: string, update: Partial) => {\r\n const reportExport = state.exports[reportId];\r\n\r\n if (reportExport) {\r\n state.exports[reportId] = {\r\n ...reportExport,\r\n ...update,\r\n };\r\n } else {\r\n state.exports[reportId] = {\r\n ...update,\r\n status: update.status ?? 'not-started',\r\n };\r\n }\r\n};\r\n\r\nexport const reportExportSlice = createSlice({\r\n name: 'reportExport',\r\n initialState: {\r\n exports: {},\r\n } as ReportExportState,\r\n reducers: {\r\n reset: (state, action: PayloadAction<{ reportId: string }>) =>\r\n updateReportExport(state, action.payload.reportId, {\r\n buildId: null,\r\n downloadUrl: null,\r\n status: 'not-started',\r\n windowCode: null,\r\n exportType: null,\r\n }),\r\n },\r\n extraReducers(builder) {\r\n builder\r\n .addCase(connectReport.pending, (state, action) => {\r\n updateReportExport(state, action.meta.arg.reportId, {\r\n status: 'connecting-report',\r\n exportType: action.meta.arg.exportType,\r\n });\r\n })\r\n .addCase(connectReport.fulfilled, (state, action) => {\r\n updateReportExport(state, action.meta.arg.reportId, {\r\n status: 'report-connected',\r\n windowCode: action.payload.windowCode,\r\n });\r\n })\r\n .addCase(connectReport.rejected, (state, action) => {\r\n updateReportExport(state, action.meta.arg.reportId, { status: 'failed' });\r\n })\r\n .addCase(scheduleExport.pending, (state, action) => {\r\n updateReportExport(state, action.meta.arg.reportId, { status: 'scheduling-export' });\r\n })\r\n .addCase(scheduleExport.fulfilled, (state, action) => {\r\n updateReportExport(state, action.meta.arg.reportId, {\r\n status: 'export-scheduled',\r\n buildId: action.payload.buildId,\r\n });\r\n })\r\n .addCase(scheduleExport.rejected, (state, action) => {\r\n updateReportExport(state, action.meta.arg.reportId, { status: 'failed' });\r\n })\r\n .addCase(getExportStatus.pending, (state, action) => {\r\n updateReportExport(state, action.meta.arg.reportId, { status: 'fetching-status' });\r\n })\r\n .addCase(getExportStatus.fulfilled, (state, action) => {\r\n switch (action.payload.status) {\r\n case ReportCacheStatusCode.Ready:\r\n updateReportExport(state, action.meta.arg.reportId, {\r\n status: 'download-ready',\r\n downloadUrl: action.payload.downloadUrl,\r\n });\r\n break;\r\n\r\n case ReportCacheStatusCode.Failed:\r\n updateReportExport(state, action.meta.arg.reportId, { status: 'failed' });\r\n break;\r\n\r\n default:\r\n updateReportExport(state, action.meta.arg.reportId, { status: 'download-not-ready' });\r\n break;\r\n }\r\n })\r\n .addCase(getExportStatus.rejected, (state, action) => {\r\n updateReportExport(state, action.meta.arg.reportId, { status: 'failed' });\r\n });\r\n },\r\n});\r\n\r\nexport const selectExportByReportId = (state: ReportExportState, reportId: string): ReportExport => {\r\n return state.exports[reportId];\r\n};\r\n\r\nexport const { actions, reducer } = reportExportSlice;\r\nexport const { reset } = actions;\r\nexport default reducer;\r\n","import { ActionTypes } from '../Actions/ReportHistoryActions';\r\n\r\nexport interface IRecentReport {\r\n organisationId: string;\r\n organisationName: string;\r\n reportId: string;\r\n reportTitle: string;\r\n reportMode: string;\r\n}\r\n\r\ninterface ReportHistoryState {\r\n windowCode: string;\r\n reportMode: string;\r\n reports: Array;\r\n limit: number;\r\n reportsCount: number;\r\n loadingReports: boolean;\r\n loadingReportsCount: boolean;\r\n recentReports: Array;\r\n loadingRecentReports: boolean;\r\n}\r\n\r\nconst initialState: ReportHistoryState = {\r\n windowCode: '',\r\n reportMode: '',\r\n reports: [],\r\n limit: 10,\r\n reportsCount: 0,\r\n loadingReports: true,\r\n loadingReportsCount: true,\r\n recentReports: [],\r\n loadingRecentReports: true,\r\n};\r\n\r\nconst updateObject = (oldObject, updatedProperties) => {\r\n return {\r\n ...oldObject,\r\n ...updatedProperties,\r\n };\r\n};\r\n\r\n/**\r\n * Main practice settings reducer. Here the shared state of Practice Settings is managed\r\n */\r\nconst reducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case ActionTypes.GLOBALS_SET:\r\n return updateObject(state, {\r\n windowCode: action.windowCode,\r\n reportMode: action.reportMode,\r\n });\r\n case ActionTypes.REPORT_HISTORY_STARTED:\r\n return updateObject(state, { loadingReports: true });\r\n case ActionTypes.REPORT_HISTORY_COMPLETE:\r\n return updateObject(state, {\r\n reports: action.reports,\r\n reportsCount: action.reportsCount,\r\n loadingReports: false,\r\n });\r\n case ActionTypes.REPORT_HISTORY_FAILED:\r\n return updateObject(state, {});\r\n case ActionTypes.REPORT_HISTORY_COUNT_STARTED:\r\n return updateObject(state, { loadingReportsCount: true });\r\n case ActionTypes.REPORT_HISTORY_COUNT_COMPLETE:\r\n return updateObject(state, { reportsCount: action.reportsCount, loadingReportsCount: false });\r\n case ActionTypes.REPORT_HISTORY_COUNT_FAILED:\r\n return updateObject(state, {});\r\n case ActionTypes.RECENT_REPORT_STARTED:\r\n return updateObject(state, { loadingRecentReports: true });\r\n case ActionTypes.RECENT_REPORT_COMPLETE:\r\n return updateObject(state, { recentReports: action.recentReports, loadingRecentReports: false });\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default reducer;\r\n","import URI from 'urijs';\r\n\r\nimport { EventCode } from '../../../Codes';\r\nimport { ISectionOption } from '../../Components/CustomiseLayout/SectionOptions/ISectionOptions';\r\nimport { IGlobalData } from '../../Components/CustomiseLayout/SectionOptions/SectionOptions';\r\nimport { toCamel } from '../../Components/Helpers';\r\nimport RestService from '../../Services/RestService';\r\n\r\ndeclare const $: any;\r\ndeclare const Spotlight: any;\r\n\r\nexport const ActionTypes = {\r\n GLOBALS_SET: 'GLOBALS_SET',\r\n RESET_SECTION_OPTIONS: 'RESET_SECTION_OPTIONS',\r\n\r\n SET_SAVE_OPTIONS_REFERENCE: 'SET_SAVE_OPTIONS_REFERENCE',\r\n RESTORE_SAVE_OPTIONS_REFERENCE: 'RESTORE_SAVE_OPTIONS_REFERENCE',\r\n\r\n UPDATE_SHOW_CHART: 'UPDATE_SHOW_CHART',\r\n UPDATE_REPORT_TYPE: 'UPDATE_REPORT_TYPE',\r\n UPDATE_LAYOUT: 'UPDATE_LAYOUT',\r\n UPDATE_SHOW_BUDGET_ONLY: 'UPDATE_SHOW_BUDGET_ONLY',\r\n UPDATE_OPTION: 'UPDATE_OPTION',\r\n\r\n SAVE_LAYOUT_STARTED: 'SAVE_LAYOUT_STARTED',\r\n SAVE_LAYOUT_SUCCESS: 'SAVE_LAYOUT_SUCCESS',\r\n SAVE_LAYOUT_FAILURE: 'SAVE_LAYOUT_FAILURE',\r\n\r\n GET_LAYOUT_INSTANCES_STARTED: 'GET_LAYOUT_INSTANCES_STARTED',\r\n GET_LAYOUT_INSTANCES_SUCCESS: 'GET_LAYOUT_INSTANCES_SUCCESS',\r\n GET_LAYOUT_INSTANCES_FAILURE: 'GET_LAYOUT_INSTANCES_FAILURE',\r\n\r\n DELETE_LAYOUT_STARTED: 'DELETE_LAYOUT_STARTED',\r\n DELETE_LAYOUT_SUCCESS: 'DELETE_LAYOUT_SUCCESS',\r\n DELETE_LAYOUT_FAILURE: 'DELETE_LAYOUT_FAILURE',\r\n\r\n SHOW_MODAL: 'SHOW_MODAL',\r\n CLOSE_MODAL: 'CLOSE_MODAL',\r\n};\r\n\r\nexport const resetSectionOptions = () => {\r\n return {\r\n type: ActionTypes.RESET_SECTION_OPTIONS,\r\n };\r\n};\r\n\r\nexport const setGlobals = (globalData: IGlobalData) => {\r\n return {\r\n type: ActionTypes.GLOBALS_SET,\r\n globalData: globalData,\r\n };\r\n};\r\n\r\nexport const setSaveOptionsReference = (saveOptions: ISectionOption[]) => {\r\n return {\r\n type: ActionTypes.SET_SAVE_OPTIONS_REFERENCE,\r\n saveOptions: saveOptions,\r\n };\r\n};\r\n\r\nexport const restoreSaveOptionsReference = () => {\r\n return {\r\n type: ActionTypes.RESTORE_SAVE_OPTIONS_REFERENCE,\r\n };\r\n};\r\n\r\nexport const updateShowCharts = (show: boolean) => {\r\n return {\r\n type: ActionTypes.UPDATE_SHOW_CHART,\r\n show: show,\r\n };\r\n};\r\n\r\nexport const updateReportType = (reportType: string) => {\r\n return {\r\n type: ActionTypes.UPDATE_REPORT_TYPE,\r\n reportType: reportType,\r\n };\r\n};\r\n\r\nexport const updateLayout = (layoutId: string) => {\r\n return {\r\n type: ActionTypes.UPDATE_LAYOUT,\r\n id: layoutId,\r\n };\r\n};\r\n\r\nexport const updateShowBudgetOnly = (show: boolean) => {\r\n return {\r\n type: ActionTypes.UPDATE_SHOW_BUDGET_ONLY,\r\n show: show,\r\n };\r\n};\r\n\r\nexport const updateOption = (id: string, value: any) => {\r\n return {\r\n type: ActionTypes.UPDATE_OPTION,\r\n option: { Id: id, Value: value },\r\n };\r\n};\r\n\r\n/**\r\n * edit layout\r\n */\r\nexport const editLayout = (\r\n layoutName: string,\r\n layoutId: string,\r\n reportType: string,\r\n reportMode: string,\r\n pageId: string,\r\n dataSourceId: string,\r\n pageType: string,\r\n) => {\r\n return (dispatch) => {\r\n const location = URI(window.location);\r\n const returnUrl = location.relativeTo(location.origin()).toString();\r\n\r\n pageId =\r\n reportMode === 'FORECAST'\r\n ? window.location.hash.replace('#CUSTOMISELAYOUT/', '')\r\n : window.location.hash.replace('#step3/', '');\r\n\r\n layoutId = layoutId ? layoutId : '00000000-0000-0000-0000-000000000000';\r\n\r\n const redirectUrl = URI('/Report/AccountGroupings/' + (window as any).WINDOW_CODE)\r\n .addSearch('reportId', location.search(true).reportId)\r\n .addSearch('dataSourceId', dataSourceId)\r\n .addSearch('pageId', pageId)\r\n .addSearch('returnUrl', returnUrl)\r\n .addSearch('reportType', reportType)\r\n .addSearch('reportMode', reportMode)\r\n .addSearch('pageType', pageType);\r\n\r\n if (layoutName) {\r\n redirectUrl.addSearch('layoutName', layoutName);\r\n }\r\n if (layoutId) {\r\n redirectUrl.addSearch('layoutId', layoutId);\r\n }\r\n\r\n (window as any).location = redirectUrl.toString();\r\n };\r\n};\r\n\r\n/**\r\n * get layout instances\r\n */\r\nconst getInstancesStart = () => {\r\n return {\r\n type: ActionTypes.GET_LAYOUT_INSTANCES_STARTED,\r\n };\r\n};\r\n\r\nconst getInstancesFailure = (error) => {\r\n return {\r\n type: ActionTypes.GET_LAYOUT_INSTANCES_FAILURE,\r\n error: error,\r\n };\r\n};\r\n\r\nconst getInstancesSuccess = (instances) => {\r\n return {\r\n type: ActionTypes.GET_LAYOUT_INSTANCES_SUCCESS,\r\n instances: instances,\r\n };\r\n};\r\n\r\nexport const getLayoutInstances = (layoutId: string, organisationId: string, includePublished = false) => {\r\n return (dispatch) => {\r\n dispatch(getInstancesStart());\r\n\r\n $.ajax({\r\n type: 'GET',\r\n cache: false,\r\n url: '/AccountGroupings/LayoutInstances/' + (window as any).WINDOW_CODE,\r\n dataType: 'json',\r\n data: {\r\n organisationId: organisationId,\r\n layoutId: layoutId,\r\n includePublished: includePublished,\r\n },\r\n success: (response) => {\r\n const layoutInstances = {\r\n layoutId: layoutId,\r\n instances: toCamel(response.LayoutInstances),\r\n };\r\n dispatch(getInstancesSuccess(layoutInstances));\r\n },\r\n error: (error) => {\r\n dispatch(getInstancesFailure(error));\r\n },\r\n });\r\n };\r\n};\r\n\r\n/**\r\n * delete layout\r\n */\r\nconst deleteLayoutStart = () => {\r\n return {\r\n type: ActionTypes.DELETE_LAYOUT_STARTED,\r\n };\r\n};\r\n\r\nconst deleteLayoutFailure = (error) => {\r\n return {\r\n type: ActionTypes.DELETE_LAYOUT_FAILURE,\r\n error: error,\r\n };\r\n};\r\n\r\nconst deleteLayoutSuccess = (layoutId) => {\r\n return {\r\n type: ActionTypes.DELETE_LAYOUT_SUCCESS,\r\n layoutId: layoutId,\r\n };\r\n};\r\n\r\nexport const deleteLayout = (layoutId: string, organisationId: string, reportId: string, pageId: string) => {\r\n return (dispatch) => {\r\n dispatch(deleteLayoutStart());\r\n\r\n RestService.DeleteAccountGroupingLayout(organisationId, layoutId, reportId, pageId)\r\n .then(() => {\r\n dispatch(deleteLayoutSuccess(layoutId));\r\n })\r\n .catch((error) => {\r\n dispatch(deleteLayoutFailure(error));\r\n });\r\n };\r\n};\r\n\r\n/**\r\n * save layout\r\n */\r\nconst saveLayoutStart = () => {\r\n return {\r\n type: ActionTypes.SAVE_LAYOUT_STARTED,\r\n };\r\n};\r\n\r\nconst saveLayoutFailure = (error) => {\r\n return {\r\n type: ActionTypes.SAVE_LAYOUT_FAILURE,\r\n error: error,\r\n };\r\n};\r\n\r\nconst saveLayoutSuccess = () => {\r\n return {\r\n type: ActionTypes.SAVE_LAYOUT_SUCCESS,\r\n };\r\n};\r\n\r\nexport const saveLayout = (saveItem) => {\r\n return (dispatch) => {\r\n dispatch(saveLayoutStart());\r\n\r\n const url = `/DoEvent/${(window as any).WINDOW_CODE}`;\r\n\r\n const postData = {\r\n eventCode: EventCode.UpdateReportLayout,\r\n eventJson: JSON.stringify(saveItem),\r\n };\r\n\r\n $.ajax({\r\n type: 'POST',\r\n cache: false,\r\n url: url,\r\n dataType: 'json',\r\n data: postData,\r\n headers: { 'csrf-token': (window as any).CsrfToken },\r\n success: (response) => {\r\n if (response) {\r\n const events = response.Events;\r\n if (events && events.length > 0) {\r\n dispatch(saveLayoutSuccess());\r\n return;\r\n }\r\n }\r\n\r\n const errorMessage = 'Saving your changes failed. Please try again later.';\r\n dispatch(saveLayoutFailure(errorMessage));\r\n },\r\n error: (error) => {\r\n dispatch(saveLayoutFailure('Error occurred. Please try again later.'));\r\n },\r\n });\r\n };\r\n};\r\n\r\n/**\r\n * modals\r\n */\r\nexport const showModal = (modal) => {\r\n return {\r\n type: ActionTypes.SHOW_MODAL,\r\n modal: modal,\r\n };\r\n};\r\n\r\nexport const closeModal = () => {\r\n return {\r\n type: ActionTypes.CLOSE_MODAL,\r\n };\r\n};\r\n","import { ReportType } from '../../../Codes';\r\nimport { ISectionOption } from '../../Components/CustomiseLayout/SectionOptions/ISectionOptions';\r\nimport { IGlobalData } from '../../Components/CustomiseLayout/SectionOptions/SectionOptions';\r\nimport { updateObject } from '../../Components/Helpers';\r\nimport { ActionTypes } from '../Actions/SectionOptionsActions';\r\n\r\ninterface SectionOptionsState {\r\n globalData: IGlobalData;\r\n showCharts: boolean;\r\n reportType: string;\r\n selectedLayoutId: string;\r\n showBudgetOnly: boolean;\r\n saveOptions: ISectionOption[];\r\n saveOptionsReference: ISectionOption[];\r\n layoutInstances: any;\r\n deletedLayoutId: string;\r\n modal: any;\r\n loading: false;\r\n error: null;\r\n}\r\n\r\nconst initialState: SectionOptionsState = {\r\n globalData: null,\r\n showCharts: false,\r\n reportType: ReportType.NOP,\r\n selectedLayoutId: '',\r\n showBudgetOnly: false,\r\n saveOptions: [],\r\n saveOptionsReference: [],\r\n layoutInstances: null,\r\n deletedLayoutId: null,\r\n modal: null,\r\n loading: false,\r\n error: null,\r\n};\r\n\r\nconst updateOption = (state: SectionOptionsState, updatedOption) => {\r\n const newState = { ...state };\r\n const saveOptions = [...state.saveOptions];\r\n if (saveOptions.some((option) => option.Id == updatedOption.Id)) {\r\n saveOptions.forEach((option) => {\r\n if (option.Id === updatedOption.Id) {\r\n option.Value = updatedOption.Value;\r\n }\r\n });\r\n } else {\r\n saveOptions.push(updatedOption);\r\n }\r\n\r\n newState.saveOptions = saveOptions;\r\n return newState;\r\n};\r\n\r\n/**\r\n * In this reducer the shared state of SectionOptions is managed\r\n */\r\nconst reducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case ActionTypes.RESET_SECTION_OPTIONS:\r\n return initialState;\r\n case ActionTypes.GLOBALS_SET:\r\n return updateObject(state, { globalData: action.globalData });\r\n\r\n case ActionTypes.SET_SAVE_OPTIONS_REFERENCE:\r\n return updateObject(state, { saveOptionsReference: action.saveOptions });\r\n case ActionTypes.RESTORE_SAVE_OPTIONS_REFERENCE:\r\n return updateObject(state, { saveOptions: state.saveOptionsReference, saveOptionsReference: null });\r\n\r\n case ActionTypes.UPDATE_SHOW_CHART:\r\n return updateObject(state, { showCharts: action.show });\r\n case ActionTypes.UPDATE_REPORT_TYPE:\r\n return updateObject(state, { reportType: action.reportType });\r\n case ActionTypes.UPDATE_LAYOUT:\r\n return updateObject(state, { selectedLayoutId: action.id });\r\n case ActionTypes.UPDATE_SHOW_BUDGET_ONLY:\r\n return updateObject(state, { showBudgetOnly: action.show });\r\n case ActionTypes.UPDATE_OPTION:\r\n return updateOption(state, action.option);\r\n\r\n case ActionTypes.GET_LAYOUT_INSTANCES_STARTED:\r\n return updateObject(state, { loading: true, error: false });\r\n case ActionTypes.GET_LAYOUT_INSTANCES_FAILURE:\r\n return updateObject(state, { error: action.error, loading: false });\r\n case ActionTypes.GET_LAYOUT_INSTANCES_SUCCESS:\r\n return updateObject(state, { layoutInstances: action.instances, loading: false, error: false });\r\n\r\n case ActionTypes.DELETE_LAYOUT_STARTED:\r\n return updateObject(state, { loading: true, error: false });\r\n case ActionTypes.DELETE_LAYOUT_FAILURE:\r\n return updateObject(state, { error: action.error, loading: false });\r\n case ActionTypes.DELETE_LAYOUT_SUCCESS:\r\n return updateObject(state, {\r\n deletedLayoutId: action.layoutId,\r\n layoutInstances: null,\r\n loading: false,\r\n error: false,\r\n });\r\n\r\n case ActionTypes.SAVE_LAYOUT_STARTED:\r\n return updateObject(state, { loading: true, error: false });\r\n case ActionTypes.SAVE_LAYOUT_FAILURE:\r\n return updateObject(state, { error: action.error, loading: false });\r\n case ActionTypes.SAVE_LAYOUT_SUCCESS:\r\n return updateObject(state, { deletedLayoutId: null, loading: false, error: false });\r\n\r\n case ActionTypes.SHOW_MODAL:\r\n return updateObject(state, { modal: action.modal });\r\n case ActionTypes.CLOSE_MODAL:\r\n return updateObject(state, { modal: null, deletedLayoutId: null, layoutInstances: null });\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default reducer;\r\n","import { ActionTypes } from '../Actions/SidebarActions';\r\n\r\nexport enum SidebarMenu {\r\n Notifications = 'NOTIFICATIONS',\r\n Help = 'HELP',\r\n Organisations = 'ORGANISATIONS',\r\n WhatsNew = 'WHATSNEW',\r\n}\r\n\r\nexport interface INotificationsMenuState {\r\n isOpen: boolean;\r\n menu: SidebarMenu;\r\n}\r\n\r\nexport const initialState: INotificationsMenuState = {\r\n isOpen: false,\r\n menu: null,\r\n};\r\n\r\nconst reducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case ActionTypes.OPEN_SET:\r\n return { isOpen: action.open, menu: action.menu };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default reducer;\r\n","import { ArticleData } from '@ui';\r\n\r\nimport { updateObject } from '../../Components/Helpers';\r\nimport { ActionTypes } from '../Actions/WhatsNewActions';\r\n\r\nexport interface IWhatsNewButtonState {\r\n displayAlert: boolean;\r\n releaseNotes: Array;\r\n loadingReleaseNotes: boolean;\r\n}\r\n\r\nexport const initialState: IWhatsNewButtonState = {\r\n displayAlert: false,\r\n releaseNotes: [],\r\n loadingReleaseNotes: true,\r\n};\r\n\r\nconst reducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case ActionTypes.SET_RELEASE_NOTES:\r\n return updateObject(state, {\r\n releaseNotes: action.releaseNotes,\r\n displayAlert: action.displayAlert,\r\n loadingReleaseNotes: false,\r\n });\r\n case ActionTypes.SET_DISPLAY_ALERT:\r\n return updateObject(state, { displayAlert: action.displayAlert });\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default reducer;\r\n","import { Dayjs } from 'dayjs';\r\n\r\nexport const stringCompare = (a: string, b: string): number => (a ?? '').localeCompare(b ?? '');\r\n\r\nexport const dayjsCompare = (a: Dayjs, b: Dayjs): number => {\r\n if (!a && !b) {\r\n return 0;\r\n }\r\n\r\n if (!a) {\r\n return -1;\r\n }\r\n\r\n if (!b) {\r\n return 1;\r\n }\r\n\r\n if (a.isSame(b)) {\r\n return 0;\r\n }\r\n\r\n return a.isAfter(b) ? 1 : -1;\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\nexport const anyCompare = (a: any, b: any): number => {\r\n if (a === b) {\r\n return 0;\r\n }\r\n\r\n return a < b ? -1 : 1;\r\n};\r\n","import React, { FunctionComponentElement } from 'react';\r\n\r\nimport { Root, createRoot } from 'react-dom/client';\r\n\r\ninterface RenderComponentProps {\r\n id: string;\r\n component: FunctionComponentElement | FunctionComponentElement[];\r\n container: Element;\r\n props?: any;\r\n}\r\n\r\ninterface RenderComponentByReferenceProps {\r\n id: string;\r\n Component: any;\r\n container: Element;\r\n props?: any;\r\n}\r\n\r\n/**\r\n * Store a React Root on the window referenced by a unique container ID\r\n * once we've rendered it so that we can fetch it again when it's time to unmount\r\n */\r\nexport const pushRoot = (id: string, root: Root) => {\r\n window.reactRoots = {\r\n ...window.reactRoots,\r\n [id]: root,\r\n };\r\n};\r\n\r\n/**\r\n * Fetch the React Root on the window by the unique container ID and unmount it\r\n */\r\nexport const popRoot = (id: string): Root => {\r\n const root = window.reactRoots?.[id];\r\n delete window.reactRoots?.[id];\r\n\r\n return root;\r\n};\r\n\r\n/**\r\n * Just a wrapper over ReactDOM.unmountComponentAtNode\r\n */\r\nexport function unmountComponentAtNode(id: string): void {\r\n const root = popRoot(id);\r\n\r\n if (root) {\r\n root.unmount();\r\n }\r\n}\r\n\r\n/**\r\n * Just a wrapper over ReactDOM.render to render a component without a store\r\n */\r\nexport const renderComponent = ({ id, component, container }: RenderComponentProps): void => {\r\n const root = createRoot(container);\r\n root.render(component);\r\n\r\n pushRoot(id, root);\r\n};\r\n\r\n/**\r\n * Just a wrapper over ReactDOM.render to render a component without a store, passing the component by reference.\r\n * This allows components to be rendered from outside of jsx|tsx files.\r\n */\r\nexport const renderComponentByReference = ({\r\n id,\r\n Component,\r\n container,\r\n props,\r\n}: RenderComponentByReferenceProps): void => {\r\n const root = createRoot(container);\r\n root.render();\r\n\r\n pushRoot(id, root);\r\n};\r\n","import * as React from 'react';\r\n\r\nimport { Xmark } from 'iconoir-react';\r\nimport styled from 'styled-components';\r\n\r\nimport { CircledTick, Exclamation, Info } from '../../packages/icons';\r\n\r\nexport type Severity = 'error' | 'warning' | 'success' | 'info' | 'none';\r\n\r\nexport type Variant = 'outlined' | 'shadowed';\r\n\r\nexport interface AlertProps {\r\n variant: Variant;\r\n children?: React.ReactNode;\r\n dataId?: string;\r\n severity?: Severity;\r\n fadeIn?: boolean;\r\n width?: string;\r\n maxWidth?: string;\r\n /** Can be used to trigger the exit animation manually, by changing from true to false. */\r\n isVisible?: boolean;\r\n /** Function called when the dismiss button is clicked. If not provided, the dismiss button will not be rendered */\r\n onDismiss?: () => void;\r\n}\r\n\r\nconst colors = new Map([\r\n ['error', '#EE7168'],\r\n ['warning', '#FFAC5B'],\r\n ['success', '#4DC082'],\r\n ['info', '#00B1FF'],\r\n]);\r\n\r\ninterface AlertContainerProps {\r\n accentColor?: string;\r\n variant: Variant;\r\n isHidden: boolean;\r\n isDismissable: boolean;\r\n width?: string;\r\n maxWidth?: string;\r\n}\r\n\r\nconst AlertContainer = styled.div`\r\n position: relative;\r\n display: flex;\r\n column-gap: 10px;\r\n box-sizing: border-box;\r\n height: fit-content;\r\n min-width: 100px;\r\n width: ${(props) => props.width ?? 'fit-content'};\r\n max-width: ${(props) => (props.maxWidth ? `min(${props.maxWidth}, 100%)` : '100%')};\r\n font-weight: 600;\r\n font-size: 13px;\r\n line-height: 1.4;\r\n color: #1a1c25;\r\n padding-top: 11px;\r\n padding-bottom: 11px;\r\n padding-left: ${(props) => (props.accentColor ? '14px' : '12px')};\r\n padding-right: ${(props) => (props.isDismissable ? '10px' : '12px')};\r\n background-color: #fff;\r\n opacity: ${(props) => (props.isHidden ? 0 : 1)};\r\n transition: opacity 300ms ease-in-out;\r\n border-radius: 5px;\r\n border: ${(props) => (props.variant === 'outlined' ? `1px solid ${props.accentColor ?? '#CDD3DE'}` : 'none')};\r\n\r\n ${(props) =>\r\n props.variant === 'shadowed' &&\r\n `\r\n box-shadow: 0px 2px 25px rgba(0, 0, 0, 0.08), 0px 1.4px 10.4px rgba(0, 0, 0, 0.055),\r\n 0px 0.9px 5.6px rgba(0, 0, 0, 0.042), 0px 0.6px 3.1px rgba(0, 0, 0, 0.033), 0px 0.3px 1.7px rgba(0, 0, 0, 0.024),\r\n 0px 0.1px 0.7px rgba(0, 0, 0, 0.014);\r\n `}\r\n\r\n ${(props) =>\r\n props.accentColor &&\r\n `\r\n &:before {\r\n content: '';\r\n width: 4px;\r\n background: ${props.accentColor};\r\n position: absolute;\r\n left: 0px;\r\n top: 0;\r\n bottom: 0px;\r\n border-radius: 5px 0 0 5px;\r\n }\r\n `}\r\n`;\r\n\r\nconst IconContainer = styled.div`\r\n flex-shrink: 0;\r\n margin-top: 2px;\r\n`;\r\n\r\nconst ContentContainer = styled.div`\r\n flex-grow: 1;\r\n overflow-wrap: anywhere;\r\n display: flex;\r\n align-items: center;\r\n min-height: 20px;\r\n`;\r\n\r\nconst DismissButton = styled.button`\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-shrink: 0;\r\n padding: 3px;\r\n height: fit-content;\r\n border: none;\r\n border-radius: 50%;\r\n background-color: transparent;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n background-color: #f3f4f7;\r\n }\r\n`;\r\n\r\nexport const Alert: React.FC> = ({\r\n variant,\r\n children,\r\n dataId = 'alert',\r\n severity = 'none',\r\n fadeIn,\r\n width,\r\n maxWidth,\r\n isVisible = true,\r\n onDismiss,\r\n ...props\r\n}) => {\r\n const [isFirstRender, setIsFirstRender] = React.useState(true);\r\n const [isClosing, setIsClosing] = React.useState(false);\r\n\r\n const accentColor = colors.get(severity);\r\n\r\n const handleDismiss = () => {\r\n setIsClosing(true);\r\n onDismiss && onDismiss();\r\n };\r\n\r\n React.useEffect(() => {\r\n setIsFirstRender(false);\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n if (!isVisible) {\r\n setIsClosing(true);\r\n }\r\n\r\n if (isVisible) {\r\n setIsClosing(false);\r\n }\r\n }, [isVisible]);\r\n\r\n return (\r\n \r\n {severity !== 'none' && (\r\n \r\n {severity === 'error' && }\r\n {severity === 'warning' && }\r\n {severity === 'success' && }\r\n {severity === 'info' && }\r\n \r\n )}\r\n\r\n {children}\r\n {onDismiss && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nAlert.displayName = 'Alert';\r\n","import { keyframes } from 'styled-components';\r\nimport { transparentize } from 'polished';\r\n\r\nexport const COLOR = {\r\n // primary colours\r\n PRIMARY: {\r\n RED: '#e63327',\r\n GREEN: '#0dd32c',\r\n BLUE: '#0000ff',\r\n YELLOW: '#ffee00',\r\n BLACK: '#000',\r\n WHITE: '#fff',\r\n GREY: '#555',\r\n HOT_PINK: '#ff00be',\r\n HOT_PURPLE: '#CB35FC',\r\n },\r\n\r\n // main colours\r\n MAIN: {\r\n LIGHT_GREY: '#f7f9fb',\r\n MEDIUM_GREY: '#e4e8ed',\r\n DARK_GREY: '#51688d',\r\n DARK_BLUE: '#0b2a51',\r\n\r\n PRIMARY: '#1a2952',\r\n SECONDARY: '#00B1FF',\r\n ICON_BACKGROUND: '#F5F6F7',\r\n\r\n LABEL_TEXT: '#2A3F5E',\r\n FORM_FIELD: '#EDEDED',\r\n FORM_FIELD_DARK: 'rgb(130, 146, 173)',\r\n\r\n BUTTON_GROUP_BG: '#f8f9fa',\r\n BUTTON_GROUP_BORDER: '#e8e8e8',\r\n },\r\n\r\n // brand colours\r\n BRAND: {\r\n REPORTING: '#1ba3e7',\r\n FORECASTING: '#39b873',\r\n DASHBOARDS: '#e8ab36',\r\n MULTI: '#b65bd6',\r\n },\r\n\r\n // modal\r\n MODAL: {\r\n MODAL_PANEL_ACCENT: '#F6F7F9',\r\n MODAL_OVERLAY: transparentize('0.33', '#1A2952'),\r\n },\r\n\r\n // Dropdown\r\n DROPDOWN: {\r\n DROPDOWN_BORDER: '#D9DEE6',\r\n DROPDOWN_OPTION_HOVER: '#E1E5EC',\r\n DROPDOWN_OPTION_SELECTED: '#5897fb',\r\n DROPDOWN_OPTION_TEXT: '#04255B',\r\n DROPDOWN_DISABLED_OPTION_TEXT: '#CDD3DE',\r\n DROPDOWN_ARROW: '#d4d4d4',\r\n DROPDOWN_ARROW_DARK: '#647798',\r\n },\r\n\r\n // DATAGRID\r\n DATAGRID: {\r\n DATAGRID_TITLE_BG: '#F3F3F3',\r\n DATAGRID_HEADER_BG: '#E0EDF6',\r\n DATAGRID_TOTAL_BG: '#F6F9FB',\r\n DATAGRID_BUDGET_BG: '#FFF7DA',\r\n DATAGRID_DIVIDER_LINE: '#BABABA',\r\n DATAGRID_TEXT: '#2A3F5E',\r\n },\r\n\r\n LEGACY: {\r\n DATAGRID_BORDER: '#C7C7C7',\r\n DATAGRID_TH_BG: '#E0EDF6',\r\n DATAGRID_ARCHIVED_BG: '#FCF0F2',\r\n },\r\n};\r\n\r\n// fonts\r\nexport enum FONT_SIZE {\r\n XXX_LARGE = '48px',\r\n XX_LARGE = '36px',\r\n X_LARGE = '22px',\r\n LARGE = '18px',\r\n MEDIUM = '16px',\r\n SMALL = '14px',\r\n X_SMALL = '12px',\r\n XX_SMALL = '8px',\r\n}\r\n\r\nexport const SPACING_SCALE = 8;\r\n\r\nexport enum SPACING {\r\n BUTTON_DEFAULT = '3px 12px',\r\n XXX_LARGE = '58px',\r\n XX_LARGE = '28px',\r\n X_LARGE = '22px',\r\n LARGE = '18px',\r\n MEDIUM = '12px',\r\n SMALL = '6px',\r\n X_SMALL = '4px',\r\n XX_SMALL = '2px',\r\n}\r\n\r\nexport const PROXIMA_NOVA = '\"Proxima Nova\", Arial, sans-serif';\r\nexport const OPEN_SANS = 'open-sans, sans-serif';\r\n\r\nexport const FONT_STACK = `${OPEN_SANS}`;\r\n\r\nexport const FONT = {\r\n PROXIMA_NOVA,\r\n OPEN_SANS,\r\n};\r\n\r\n/**\r\n * Note: line-height is a very distinct concept from the font-size and won't map 1-to-1 with font-size.\r\n * It should also almost always be specified in unitless values.\r\n */\r\nexport enum LINE_HEIGHT {\r\n /**\r\n * line-height: 1.2; is a good standard line-height, it works well for inline text, buttons etc, should be expanded for larger sections of text\r\n */\r\n MEDIUM = 1.2,\r\n /**\r\n * line-height 1.4 lets the text breathe a bit more, which is good for paragraph text\r\n */\r\n LARGE = 1.4,\r\n}\r\n\r\n/**\r\n * Note: generally the margin-bottom of a paragraph should be 1em so it adjusts 1-to-1 with the font-size\r\n */\r\nexport enum TEXT_RELATIVE_MARGIN {\r\n XX_SMALL = '0.4em',\r\n X_SMALL = '0.6em',\r\n SMALL = '0.8em',\r\n MEDIUM = '1em',\r\n LARGE = '1.2em',\r\n X_LARGE = '1.4em',\r\n XX_LARGE = '1.6em',\r\n}\r\n\r\nexport const FONT_SET = {\r\n XX_LARGE: `font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.XX_LARGE};\r\n line-height: ${LINE_HEIGHT.MEDIUM};\r\n `,\r\n X_LARGE: `font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.X_LARGE};\r\n line-height: ${LINE_HEIGHT.MEDIUM};\r\n `,\r\n LARGE: `font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.LARGE};\r\n line-height: ${LINE_HEIGHT.MEDIUM};\r\n `,\r\n MEDIUM: `font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.MEDIUM};\r\n line-height: ${LINE_HEIGHT.MEDIUM};\r\n `,\r\n SMALL: `font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${LINE_HEIGHT.MEDIUM};\r\n `,\r\n X_SMALL: `font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n line-height: ${LINE_HEIGHT.MEDIUM};\r\n `,\r\n XX_SMALL: `font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.XX_SMALL};\r\n line-height: ${LINE_HEIGHT.MEDIUM};\r\n `,\r\n};\r\n\r\nexport const PARAGRAPH = {\r\n DEFAULT: `color: ${COLOR.MAIN.PRIMARY};\r\n font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.MEDIUM};\r\n line-height: ${LINE_HEIGHT.LARGE};\r\n margin-bottom: ${TEXT_RELATIVE_MARGIN.MEDIUM};\r\n`,\r\n INDENT: `color: ${COLOR.MAIN.FORM_FIELD_DARK};\r\n font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.MEDIUM};\r\n line-height: ${LINE_HEIGHT.LARGE};\r\n margin-bottom: ${TEXT_RELATIVE_MARGIN.MEDIUM};\r\n border-left: ${SPACING.MEDIUM} solid ${COLOR.MAIN.FORM_FIELD_DARK};\r\n padding-left: ${SPACING.MEDIUM};\r\n`,\r\n};\r\n\r\nexport const HEADER = {\r\n H1: `color: ${COLOR.MAIN.PRIMARY};\r\n font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.X_LARGE};\r\n font-weight: 800;\r\n line-height: ${LINE_HEIGHT.LARGE};\r\n padding-bottom: ${SPACING.XX_LARGE};\r\n border-bottom: 1px solid ${COLOR.MAIN.PRIMARY};\r\n margin-bottom: ${TEXT_RELATIVE_MARGIN.MEDIUM};\r\n `,\r\n H2: `color: ${COLOR.MAIN.DARK_BLUE};\r\n font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.LARGE};\r\n font-weight: 800;\r\n line-height: ${LINE_HEIGHT.LARGE};\r\n margin-bottom: ${TEXT_RELATIVE_MARGIN.MEDIUM};\r\n `,\r\n H3: `color: ${COLOR.MAIN.DARK_GREY};\r\n font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.MEDIUM};\r\n font-weight: 800;\r\n line-height: ${LINE_HEIGHT.LARGE};\r\n margin-bottom: ${TEXT_RELATIVE_MARGIN.MEDIUM};\r\n `,\r\n H4: `color: ${COLOR.MAIN.LABEL_TEXT};\r\n font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n line-height: ${LINE_HEIGHT.LARGE};\r\n margin-bottom: ${TEXT_RELATIVE_MARGIN.MEDIUM};\r\n `,\r\n H5: `color: ${COLOR.MAIN.PRIMARY};\r\n font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n font-weight: 400;\r\n line-height: ${LINE_HEIGHT.LARGE};\r\n margin-bottom: ${TEXT_RELATIVE_MARGIN.MEDIUM};\r\n `,\r\n H6: `color: ${COLOR.MAIN.PRIMARY};\r\n font-family: ${OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 800;\r\n text-transform: uppercase;\r\n line-height: ${LINE_HEIGHT.LARGE};\r\n margin-bottom: ${TEXT_RELATIVE_MARGIN.MEDIUM};\r\n `,\r\n};\r\n\r\nexport const BREAKPOINT = {\r\n MOBILE: '320px',\r\n TABLET: '641px',\r\n DESKTOP: '769px',\r\n};\r\n\r\nexport const SPEED = {\r\n TRANSITION: '300ms',\r\n ROTATE: '600ms',\r\n};\r\n\r\nexport const RADIUS = {\r\n FORM_FIELD: '3px',\r\n DEFAULT: '3px',\r\n};\r\n\r\nexport const SHADOW = {\r\n DEFAULT: '0 1px 2px 0 rgb(0 0 0 / 8%)',\r\n};\r\n\r\nexport const ANIMATION = {\r\n FADE_IN: keyframes`\r\n 0% {\r\n opacity: 0;\r\n }\r\n 100% {\r\n opacity: 1;\r\n }\r\n `,\r\n FADE_OUT: keyframes`\r\n 0% {\r\n opacity: 0;\r\n }\r\n 100% {\r\n opacity: 1;\r\n }\r\n `,\r\n SCALE_IN: keyframes`\r\n 0% {\r\n transform: scale(.1);\r\n opacity: 0;\r\n }\r\n 100% {\r\n transform: scale(1);\r\n opacity: 1;\r\n }\r\n `,\r\n ROTATE_CLOCKWISE: keyframes`\r\n 0% {\r\n transform: rotate(0deg);\r\n }\r\n 100% {\r\n transform: rotate(360deg);\r\n }\r\n `,\r\n};\r\n\r\nexport const BUTTON_MIN_WIDTH = {\r\n SMALL: '150px',\r\n};\r\n","import { lighten } from 'polished';\r\n\r\nimport { COLOR } from './constants';\r\n\r\ninterface ThemeSet {\r\n REPORTING: Theme;\r\n FORECASTING: Theme;\r\n DASHBOARDS: Theme;\r\n MULTI: Theme;\r\n GENERIC: Theme;\r\n GENERICBLUE: Theme;\r\n}\r\n\r\nexport interface Theme {\r\n main: string;\r\n mainBorder: string;\r\n mainText: string;\r\n spinnerColor: 'black' | 'white';\r\n hover?: { main?: string; mainBorder?: string; mainText?: string };\r\n}\r\n\r\nconst THEME: ThemeSet = {\r\n REPORTING: {\r\n main: COLOR.BRAND.REPORTING,\r\n mainBorder: COLOR.BRAND.REPORTING,\r\n mainText: COLOR.PRIMARY.WHITE,\r\n spinnerColor: 'white',\r\n hover: {\r\n main: lighten(0.1, COLOR.BRAND.REPORTING),\r\n mainBorder: lighten(0.1, COLOR.BRAND.REPORTING),\r\n mainText: COLOR.PRIMARY.WHITE,\r\n },\r\n },\r\n FORECASTING: {\r\n main: COLOR.BRAND.FORECASTING,\r\n mainBorder: COLOR.BRAND.FORECASTING,\r\n mainText: COLOR.PRIMARY.WHITE,\r\n spinnerColor: 'white',\r\n hover: {\r\n main: lighten(0.1, COLOR.BRAND.FORECASTING),\r\n mainBorder: lighten(0.1, COLOR.BRAND.FORECASTING),\r\n mainText: COLOR.PRIMARY.WHITE,\r\n },\r\n },\r\n DASHBOARDS: {\r\n main: COLOR.BRAND.DASHBOARDS,\r\n mainBorder: COLOR.BRAND.DASHBOARDS,\r\n mainText: COLOR.PRIMARY.WHITE,\r\n spinnerColor: 'white',\r\n hover: {\r\n main: lighten(0.1, COLOR.BRAND.DASHBOARDS),\r\n mainBorder: lighten(0.1, COLOR.BRAND.DASHBOARDS),\r\n mainText: COLOR.PRIMARY.WHITE,\r\n },\r\n },\r\n MULTI: {\r\n main: COLOR.BRAND.MULTI,\r\n mainBorder: COLOR.BRAND.MULTI,\r\n mainText: COLOR.PRIMARY.WHITE,\r\n spinnerColor: 'white',\r\n hover: {\r\n main: lighten(0.1, COLOR.BRAND.MULTI),\r\n mainBorder: lighten(0.1, COLOR.BRAND.MULTI),\r\n mainText: COLOR.PRIMARY.WHITE,\r\n },\r\n },\r\n GENERIC: {\r\n main: COLOR.PRIMARY.WHITE,\r\n mainBorder: COLOR.MAIN.DARK_GREY,\r\n mainText: COLOR.MAIN.DARK_GREY,\r\n spinnerColor: 'black',\r\n hover: {\r\n main: COLOR.MAIN.DARK_GREY,\r\n mainBorder: COLOR.MAIN.DARK_GREY,\r\n mainText: COLOR.PRIMARY.WHITE,\r\n },\r\n },\r\n GENERICBLUE: {\r\n main: COLOR.PRIMARY.WHITE,\r\n mainBorder: COLOR.MAIN.SECONDARY,\r\n mainText: COLOR.MAIN.SECONDARY,\r\n spinnerColor: 'white',\r\n hover: {\r\n main: COLOR.MAIN.SECONDARY,\r\n mainBorder: COLOR.MAIN.SECONDARY,\r\n mainText: COLOR.PRIMARY.WHITE,\r\n },\r\n },\r\n};\r\n\r\nexport default THEME;\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { ANIMATION, SPACING, SPEED } from '../../packages/constants';\r\nimport blackSpinner from './images/spinner-black';\r\nimport whiteSpinner from './images/spinner-white';\r\n\r\nexport interface LoadingSpinnerProps {\r\n children?: React.ReactNode;\r\n onClick?: (e: any) => void;\r\n color?: 'black' | 'white';\r\n justify?: 'flex-start' | 'center' | 'flex-end' | 'space-between' | undefined;\r\n iconWidth?: string;\r\n iconHeight?: string;\r\n className?: string;\r\n}\r\n\r\nexport interface SpinnerIconProps {\r\n width?: string;\r\n height?: string;\r\n}\r\n\r\nconst StyledLoadingSpinner = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: ${(props: LoadingSpinnerProps): string => (props.justify ? props.justify : 'space-between')};\r\n`;\r\n\r\nexport const Icon = styled.img`\r\n width: ${(props) => props.width};\r\n height: ${(props) => props.height};\r\n margin: 0 0 0 ${SPACING.SMALL};\r\n display: inline-block;\r\n animation: ${ANIMATION.ROTATE_CLOCKWISE} ${SPEED.ROTATE} linear infinite;\r\n`;\r\n\r\nexport const LoadingSpinner = ({\r\n children,\r\n color = 'white',\r\n iconWidth = '20px',\r\n iconHeight = '20px',\r\n ...props\r\n}: LoadingSpinnerProps) => (\r\n \r\n {children}\r\n \r\n \r\n);\r\n","export default `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZQAAAGUCAYAAAASxdSgAABZgElEQVR42uyd/29fVRnHb4hfMGYqghjjDxq/BGMMiRpNRBN1moAYl/Oc24+4AVon9jzn0zQMhC3RxFVAltnznFs2hM0NJgIbW5UOmKJuE4cIKG6Kivw7fp77aXc+7d16bU+P937a5528flnWtF2zvfY873PuzSSStZjObf4tgA9emZv7Pqys+yTg1EZlCwXWf0sbNwFd+gEY9xNAP63R/RSQfqatexiQHgP0RwHpyR7PgKFnAd1psO60QvdbsO6EsjSr0c0A0mGw9Ii2/iBY/6BG2gtmisD4H+ox2gbWf1sh5bktvqy77lOb7O6rNt86/W7+2jKJRCKRtCOj24p35GPuIyM49QVt6Ia8628F9Ls00iFA9xuF7uQCjDulDAWQTrEoKhj6w2KUcc8pHMQ/B0h/rGDcmQCdAaQzCun5Csb9SfPn6guJwPo7laGbRsbpSx3jPrrFPnBZJpFIJJLVy9jY/jfmtviA6v1Dq21xizLubkA6oKx7Whn6HZS435cgnYcF0nahQAkN8gLgIDwR0eMKnQNL42D8dZ2u/xD/mWQSiUQiuXg6E3vepdB/Okf/dTC0A7q0TyH9mtdMCinQk8g8MEcQSo1UhkgojEL3Z4W0EP44XssZ9yON7uaRLl3Dq71MIpFI1mNGRycvze301YD+GxqLu3JbHOOuYgGWnmWZpBIKA8gkEgrWCYXqhYJ0IaG8CPMg43vQS+X3bKjQ3WJUjxefGJ08dGkmkUgka7Agfyd03eeULca4BAfjTqhez8EA+pKVCGXh2qtNQqHlCwXjhLIYzb+33yfdBlhs3DzmrsgkEolk2HLjxJ63gfWfB1vcDsY/rAyvrgIsklqhmHUolPp114tMkAlTlYky7uWF+D6WZhUWO3N013Z27H97JpFIJG3L5OTkJR07fZW2fgug8/3jtu4EGH+CZbK0UFydUJg1JZSI/iRCKPQXhX2gh7b+5f6JOPou4NTH+GeYSSQSSRNRvWO7vEqBbnEHH38NEllAEAqDgYpQmCihuCihBPzppEJhmTQglCCTQdxf59HoT2rr79ZjU1/lFWUmkUgkKQPj916ed/3X+EKgQveMQiqBQEUqNVPKinoUEcrS/UlFJrVCYahEGXqFAaSH+NAEn77LJBKJZNUuEBq6ni8NAtJTyrin52mLUJj1IhRIIhSqCEVhH7D86+4AWOrA+P2XZxKJRLLsUr3rrwOkewD98YpIhlYoLqlQlnEHJfLIcEx/Uj+dlOAg7m8KqYd/RSPty5HyLXaX3OaXSCQXLdbfwJfkNNJObdwsSyRwYaFU1l61PUpNMR970gtpAcMvlPT9Sb1QWCYMlQBj6Gz5MYbu5+eUye19iURSpoP+vQppVBt6BJCO93FP9aEB0k8p8cX8cAql6UK+uu66sFBgQCiLOKUtbdPj7n2ZRCJZX+lMHntTeU8Ei3uUoeMMMBhoXihh7ZVKKCqxUJq/g+JL6tZd9UKhJYXCKHTnFNI5Zekgd24TE3venEkkkrUb/h+ktu4WQPeYMjQbYKEwKxRK/dpLhDJPgkI+SX9SP50EMAhlnv7377bzAy0ziUSydpIjfVxjsROQnlTGzfahQGVKiV97RfQoSY8OD79Q2rbuCjKpYNzfGX5XDPdzmUQiGd5Hv+sufRHQT7NImKpQAk2tvSKK+UaFstInDUef8MJ4oaRad1VlEoAeGv2MtrRJSnyJZEhy8x1TbwVTaG38QTBBJHVSCWuvtvUoEUeHh14o8f1JzLorfjoJQAn9g9HWn8yx2MrH0zOJRNK+AE5dqY3/jkZ6HIz7FRhfUhFKirWX7RHVo8Sf9Gq/UNIfGU7Wn8RPJ0EoDJ7nJbC0g08aZhKJpB0vpgLrEZCOsUgCfo6lhOIaXnvFF/PDL5TYR67E9yfp111VmQTcq3Mft1OPFe/JJBJJM+8YKV+La+kJhfTLkgGhRE4pzfco8Se96oViEgkFlyGUhgr59NNJvVBYJgsw/qy2/vuAU/IGSonk/xF+j4VGGgX0R1gii1m+UIJUIu6khFvzkT1KfDHPMgnUC4VpvVCa70/ip5N6oaB/VRn6Z/l5rb9Tnh0mkSTK1u0PbVCGbuI7JD1mAP0MC6TCBYTSonI+QTGf4Lb8kkLxNUKhNggl9Cep1l1IZ5dVxtfLJAhlDv6a+QY+vyohk0gkq3WrnTpg6FEwboZZSijMcKy9UgnFtVwo8YV8uuPCzU8niwHsiyVHsvKefIkkIhqLz/KlsLnCfWaQlFNK9NorbTG/zoXie7S4P4mfTgKlTNy/AnRqxBZfySQSyf+eGyb2fJDfnsciCQSptH5KaaCYhzmaF0qQSTNC8SUJ1l0rkInvETGdVIXSx9Kj/NriTCKRLP1aXd113SCRQKoppb6cD0JhkvcoESe9hlYo8Se84vuT9k8nAUP/LkH3483f239FJpFIFj4mRVmnFLpf9DjKBJEkmFJSlvPoEvco8XdRmhIK1AklvpBPv+7CCKFETidBJgH++vn4PHeNmUSy3pPb6avVGO1liSwm9ZSSfu2Vvphf70Kp6U+i1l3ppxO3oumkKhX3Gv/s5QGUknWbTdt3b9DGd5WhJ5RxR0swED+lxF90TLb2qu9R4oRimhRK7JHh+P4k9bqr+emkKhSFDL2mbXGvHDOWrKuMdO+7BpAOsEwC7mgzU0r82iuiR4kt5uMvNzYolASFfOhPEq27GphO6mXCIJ0H0L+Qj9P1mUSylvPN3s1fjW67Mo4lUqElU0rza69oobi2CmXZJ7ygJEF/ErHuSjmdBJHUCyXIhKFB/gN99snzwSRrLpOTk5fk6K4FdD/vcYSFEqTSzJQSeSeloR4l5uhw+4USWcg3uO6Kv8gYP50EWCYB/n7cjfx3MJNIhj38PySNdBeLZJCaKaXCKk4pCcv5+B4lRiiqzUJJVMinEspwTidBJlXcEYXF+zOJZFgDWGzU3eJQEMkypNLiKWWV3pGyasW8CCWiP2l63RVfxAcuJhPjXgdDr2ukc2Cpk0kkw5RNW3dvAEO3K0OHFdJhYCpCSbD6aqCcb6JHiReKa6lQ6gv5+P4kvoxPP51QYOWrriCTEjqP7vq9W+yuyzKJpO3hR0IonHpAGXeYhcIAMmmmFCbRlJJ+7RVfzMcLxayyUDCBUBrqT5qfTuJXXYtlAjiHpedhvPhMJvkve+fyIlcRhfErRGIUlfjACOrCbFQQVy59gSBZ5dadtCQRMfiYW7eHJgRFFMQM+E6qqifNJJKXITGCuFUERdHVuHDnxvgaNf9I7JN5VGOTnEx/c/rc21MHvn1mJslvvu87pytNPYv3HzZR+Zdb/xnBZAUonEshNcKlyFzNs0AhAavDtQHKKCvDZklgfyIfd+m7Ex4mg0DJrbuwostPEM/Opiv7NPUZehO7qPz7BBMSA5XJcSl47AUU85MIFLw/MQNK7sRdBSZR9Hc57/S2Z2nSaM/OKjxG68BLIBkGCh59NdWl4D2KsQ4AimOAssZXGweBwrzWSACRB4p+3IW7E/EiPspeGSgk+rNMVS7P0qRRui3ZtPQUrz8fQRLVtOhL7CbFOqBHkd/0woGC36DwG14BAQoad6m4E7yI9wNiYfKbWdZUFd6mD2vN0qQZ1+ytjm0trD9IMCEBUBFcI25U7IX3KM0HCl7Iq8RdIQJF8IgRiLpYmJDMgIrSf77n5bm7sjRppGdq2j1QlO7o8tvuDFCY6EvRpRgGKljshfcozQSK9IaXfn+i506QqIt3J8NyC0XbPZqlSSMGEzv3TFH6s6Z050kMVASiLzWXwt2kIOvDeI/SfKAo9SeeBN2e4O5EP+oalvvdWJL/daoKL2Rp0qzn7Oj0NptpP5OX/lOzqggU9egLdylgOc/HXgkofkCyhTwHE1Jt3QkedeEwIdlBhdA6ELZkadKg03op3GZseI9gQlpXqOi7FPnYC+9R0NVhfaBAG15hQag/Acp4RXeyzr0JDxNS6Mt/2Wof2palSTMyTPYfuc+0w5EIk2GgkAT7FDWXgpfz8j3KJANFvj/xJBV3ghTxkr3JlWCSW/8Hid5ZMe3ug1maNKM8zWusP5HbcI4EQgWPvvCCHnApCrEXUMwztyjMB0TyQDEsUPgbFL6Qh/sTIO4CVoXV3YkETKLo6yxm5h7P0qS51ina/qmlY0V3jrQGqMhGX/ouBY+9gB4F2fQaBorTAgpfyENAweMuGXeCF/HaMIkKF4wNu7M0aa42ly5dum5qJjxLEBlWBArQpzDRF1jQ67sUwR4FL+brDhS8kNePu3B3gkddQG/Cw4RUuj9J9Poq/Z+RpUnz/6EPiDOVnzG0Flz5swBUoOhL36UExqUwQIGv5psPFOyokS/kY38yynU8Hnch7kQ/6uJhQuJgYpZVVL7X6W+BZmnSrMzzrx2+qSjDWwQT0shQ4fsUPPrSdyl4OQ/0KM0HClrI43EXf3ui7070oy4eJsb6JVX+i+c6vVuyNGnoL0JRhnciTCJQeKjgJT0afUm6FPnYCy/m8VsU/pEtHCheESgSZbykO0GiLnmYRKAQTFb1l6nCV2Zm/vYszcYderXNWPcBFfAEEQ4qAiW9avQFuBQk9mJ6FKyYH311GAcKwYQ06sowwUQZKIA7AY4YpaKu0lFvIg+TqG/37E+fAbYhp9Xp3Wkqf5hgQhqECh998VDRjr7q7FJEehR9oKzxBgUv5Jn+hIm7gDIecid41IX3JgBMSIMwGdaPRad3T5Zm40wx3b07L30370OEFKEScKgIRF+aLgVfIcZjL7CYbyhQwsKEuROgiJeLuviNLh4mw3ILU1X3/izN5M/utr+Xrt9XYMJARaOkB6Mv3KUA5bxw7BUuKwEFBwpaxuu7E4neBIdJXrpFEv0s0lX9hA/91mAqP59bf4YkABXVPmWcLkUk9uJ7FEGgkGSAwq8M44U8GHexb54A7gQo4oHeRAkmUX5x+fv2SJZmUmESPo4wkYYKf/SoG33h5Twee+E9ChXz2kBhjhpFNryU4i7cneBRF96byMNkVcaGXxJUJjHmKt18Xg6ChIcKAWRYwOaXYvSFuxQ49sJ7FHbTi18d1gUKsOGlF3eB7kQ/6lKASZT1f9P3LMVfE1TAGxvmTOk+yUt35lqgYgSgwvQpQPTVXJfC9ChAMd9MoESYOKg/AeIuBXdSP5jk6wiTFRX0s5g+tD1L09zZ86q7w5TeE0xIAFTAGxW8T9F3KfKx1wjFPLY6XDo5oMQreaFCnl8X5uMusIzH3Yl41MX3JvytCQoTs6yi8j+lleIGHy0W1n8UYYJBRb+klyzoAZfClPNQ7IUX8/JA4a/kGaDI9idjdSfMmjDgTpgVYbyEl4VJFP2CkY4fGzYvvn76ZmO770aIaEEF71OY6EvepUjGXlVfCsV8c4ES+lpDfwLEXYA70Y268BJeDibW/WOs7yt8lz6mpSEzPXv8xsL6WWP9aVKToAJc0bNQ4V0KtkLMl/P4+rDoptcYgCJYyAuU8cwhI+BOgKgL7E30YRIVvm5Nf3hrlqbGMDl+/Pq88m+uwkQfKgIlPRN9CbiU9Svn+dgLLObrBRSpQl4h7gKKeNWoSx8mBBKSHxL9W9q3b/aGLE09H8fK7aEqt+50ThDRgIp8SS8QfUEuBY+9rGN6FKCYrzFQkEIej7vWeVVYoYjHehN9mJDy0v9bWH8sPdJVwynK7q688qcIKHWFClPSi0Vfki6FL+f52Asr5psPFLw/4eOuJriTyYdJBMmgjA1vZGnqM6YKT+SlP0WSggpwTQ/0KUD0Je5S9GMv4BZFDCjMDQpTyOP9CR534e4Ej7pGecp3hPVgXZhE2b5TqcLeLI3+7JwODxvrTxBMoiJUSA2DChJ94QU97lJiOQ/EXkAxDxw3AkCJMMGAwvcneNwl707wqEu+N9GHiR1Q5Rd32e6TWRrdj1TJS3c0gkQaKvznfvElPd6nANGXqkvBYi8eKMwtigJQmKPG4Q0voD8B4i4Fd6IOk1IbJkO6SF93q+w9lKXROFw8tnXpgSx/kuAxkVDBoy9xlyIVe2E9yvCmlzZQsEI+9CUcd2HuhCni1xB1Yb0JcLioBRN3kWAyoJ9b7aPbsjTjmx2d3ubcdg8STEiqUAFKet3oC3cpeDmP9yjA6jDzJkr4HgAKc4MC9CdI3GXxuIs/YsSjLuYj6ZnjRbyE14IJyZAq/03rQNiSpRnPmLZ/xVh3ksRDJZb1w1CJajxUwIIedyl47CVXzDcfKPJxV+hL1J3IR13Nh0lU6eezNGN51+TpFZggUMnHBBW8pPerGjX6wlyKA1wKF3vJ9yg8UJw4UPiVYb4/weOuWrqTDQoTf2WYlO4/9s7uN66jDOMHWiKhgoAAVfmQ+FIKqBIgKIIWVLVwUZWL+systyKgqBGBnTm7cZWUtgGhpgsKhXhn5jhOaJIicYEQSL5DcMcFV4iqqhr+AKReQIFS/oew79rubDg4r/Y8O56d9bzSI1VOldrerX9+nuedOX/blazMt4s8AWHy2IUjsm+v0FbXzaBCShkqeJ/CR1+wS+HLeTj2mvWAIw4UUgCgYBteXH/Cx118GY+4E7yI19vKMCGQeNHf1RmMvlDkmf+Up+p3ispaggkpQwWIvubqUhzgUrDYq1nMxwKKZYDCbHgxhTzTnwBxV0h34mEC9CbYRteCw0TcDCZe17r99VzSz3PuHw5vFcqeEcrDBIaKWiio4H0KHn2FdymadylBinnmtHwEoAD9CRB3we4khagrPkz4voSHiZcjp/LbXu/qW4o885lS1UdXxjAhiYl4sGAbYDhUBAMVgggCFSD6CuZSQsdeKFCY1WEYKMDKMNCfAHFXZHeSPkzw8p0Byd+93I+LPPgINbqnVO4qKWWo4Jtf4aMv3KUgsRf/jBR00ysJoPD9SXNdGHcnXrg7AaKuefYmAWACb3I1QcLDxEsqs1rkAZ8Hr+ylUpmrBwkqeJ9itxWgoMddChp7QcV8AkBB+xP+7AnuTvgiHo+68BKeh4kJCBOLw6Spv3bUhSNFntlnOO5NSm2fJph4uQZYGlABy/pFhkr86ItxKTOW80zs1Xp9uPVZlBhA0QxQ0LiLL+N5dwJEXTBMFLDRlRRM3FgEjb1VavMqvXe7w+GhIs9sI/v1qgeJF+pW4kPF7S9UNAIV3KXw5Tx/WWQcoBgIKLMV8g4ASpgynlkTZor4IFFXEjAB+hIWJrsSlTtb5JnlJHz9SaHtFVKGSoA+Jb5L4WMvvEeJAJQWG15If6K3la47wXuTBGDiQQLDxEsqc1+Rh5/xxWhvk9qeJ5gwUAEiMOCsSnJQsaRILoWPvfAeBV8dxoECrAxz/QnjThig7Ls7idCbRIUJXr7zIGnKviq1e7l7wh0u8rAPy9IEES8WLOGgogJAZeYzKm4ipqQHoi+moIdcCl/O87EX36MIUqOYbwJFjj8HUbnLUtfPlHp0UmpzTCi3Ivv2gbIyn+uo9SNfP3nx/UKPbv9G9ZN30S83a+OLSLvdrVtI9M/0sclN1/ry7V3tPiC+Y+/sKHf36sB+VfSNlH17vKzsKanss1K5X8jx59CikAfiLqiMZ90JU8SDUVd8mKBnTPC+hIeJICn7D/o5VOTZe0TPfHkvmASIwJiyPhZUAvYp++pS8NirTY8ixx8T1eT1/AE9BU/q+kvl2ubHjj0xui2m66Zrg+jJolLXx4W25+h7Lwk0DFACxF2QOwkfdSUCE758xyOuJkg8THalzTeLPM2h3/iEtheEcpcJHJxC9SrAqfrYUAkcffEuxQOFdylY7OWBsvManu7ojQdppbI73DqU0mMYOifNJ2RlHyYAjrXlgYLGXbg7gaIuvDdJCiZiSmjExcPEi77WTlV/tMhzw4rwm6U2TwllLnt5sESOwPizKjhUwD4FXyWel0sRmEvh14e12xC6/pas7Be7vZ++YxnvrKPCVVb1Gr0HmLgrkDuZtYgP35s0N7oAmICn3/evL7GkvUAyrd/Rz9Aiz/ZQhu1BEhAqaj5lffJQieBSgNjr153KPSl0/RX6YXvgllROu8MdZb9GMZnU7g9YGe/G4t2JCOxOcJiYRGCCR1w8TEjmn7LvThR5ioI2FUrtNjxEALAAEVh6UOFLejT6anMlC+9S+DMp9L2hZ0FQHJR/87rRyXeqjU+Jyj6+0x/tcbMw5k74In5/YUKa4RQ8DBN8kwuPuHiQeJiQ6GunJZHioI/su36p7XMrDYgEcitLBhW8T8GjLwIKukJMX3enqnt0Bun69etvKvLcdOh7VPbrz0zcG61E86vCoDvhi3geJobpTYCzJsnBBHclTdlfHXCYmM8TTKbEg6UXv1eJDxW+pA8fffEuhS/n6c/M9+Sg/mx2IphzWe3be6U2RlT2RaaMB9wJGHUBJXxEmLQo3/mIC3cl07JvSGonDuwBRqHc+v8CJYBbCdyrRIIK3qcA0RfmUqS2z9Ebf9KJ5JnriMGld0ttj1N0GNSdhIm64sNEe+1bxIW5khtErw31bgfwAKN5dBoiLcACR2BArwKfVUGgEqZPCe9SSm2f6Y5jmhxp7U8kJgb1PfT/SWNVuLU7sW8owyR2xGUbKpX9F0lqe/HA3dVVavOzUo8aEIniVhYIKvwVLUCfwkRfIVzKzr/zWKnrDxd5IrkWe+fkMGVlX2rhTuAivtmbZJjgrqQJkmnRIdriIAw9yrLU9kcEFC8YLEsPlRYlPRx9IS5l8vdV7tHu6Xzf0KIMXSkjtfsunWlpuJMIURd61iQ+TNxYi+BKmqLXmK4KKpZ9Oto8WCoPEwYsiFvBIzC8rF8sqODRF+9SKvebsu9O0F1YRZ6FnKM9855S2e/TVph3Jy2K+CAlPA4T/vQ7Xr7jrgQHCSdKBoplHjrZLLRzBBSSBwvgVqJHYOGhEr6kx6Mv+jNa+6VSuMiTyGLM+h1CubOiMtcYd8JEXXOGCQmHCb7JFT/iagkSknltrFfoSqtiWUfq+hhBpKkwbiVDZbqkB/oUJvqS2j5Nt/QWedIEy8nRR2Rlf84V8UhvMkMJ3womogVMgL4EiLgCupIdkHjZ12RlN5cTJgPzIXo+/K4AqDBggSMwZrU4YajoifDoy8Pkymr/wr1FnqWYsjIPCe3+yBTxQNSVBkzScyVNkEyLNiuXrzup6sc9UOYPFugwJN6rMGX9IkEFj75Eb/yxylDh/tYiz1INXfMvlD1D3QpfxAeACSkUTHQYmER0JT7e8iBpqnK/Xy6YqPN3C2V2INJUqBgsfASGQ4UUEyqzRl+0oUdus8iz1NOtNj5O7w/OnaQIEyDiCudK8HhrL/2btDQn6LvD4SGhR+cIKA2opOFWgF4FWysu1QwHH7kzKs2SfsZVYvv8qh7dnw8lHrDDkX0jpbZ/4mBCYkr4CDBBy3cg4grpSniQeJh4/WUpEoWyqh8qtb1IIqDgYInvVsRECUAFKuktaQIUuvmXrsop8gCT9nam1HYolGF6k5lK+PgwiR9x4fEWDxIvZZ9IPI/95W2lNmYXKDhY5lragxEYXtbPEyoh+hSh3fN0cWORJ894ZM8+ILT78zyiLjFRAjABIq4Y8RajV5I+aCwGbmUbIk3JBliScStAr5IOVIQyP8xnSvI0oHKqfh+5VhwmJjhM8PI9vivBQeJVKvM63adXpDgPP3X+7UIb5yHCgCVuDBYyAgPWiiNBRZmj3a2tW4o8ef7/dfm3imr0JAGlRQkfByZMX8JEXLgrweMtHCbKvk7fg+7a5ntTvABSlspulr09YBIkBsPdSrQIDIcKf0ULX9JfKWlnPU+egh+6gFBW7gXR7E3iwER77VvEhbsSPt7CQeKlJ1A5l1aJd+bqzhUrdpMEgCW8W8EjsPShQkCpzFkxeDZHXHlmfa7RHZNtQNUeJqQ2MCGIhIIJsA4MuJKQIPGir49et3Q2u/TokWmYxARLBLeSBFSmo6+Odo8Mh9fzExPztBqKR+kWYx91AafgGZgA5TuwEoy7EiTewkHSlKjMehpvrhPucKlsXSqzSQLAAhb34d0K0quEhwq/Tkz/faHsp4s8eeYwcrBxn6jcNWQ9mLl+vgVMoIiLKd5BVwL3JDxImjL/Icnx5yrXNj9YLPpQoeth4sWDBS/ukRhspeVhSLRXwaFiWkFFVOZSfuhVnnlPZ+DuKpV7IQBMkPKdhwnuSoB4KzRIPEz+y97ZhMhRRHG8jCiiRqOIwQT04sUQDxJFggjiF3hwt6smQ74ISA7TVbMbkmAMQQ/GFZNspl71bqJILnoSIUjED0QQ9KBnD36dPCjowYMxH97j1KxJT7azKabfvK7u3feD/yGQJSG7m9/+3+vqklfFzdX/PmsDmdQw7zNescRvK4i9Cu4JsBJSCRx8tBN759YKhqF7EezXVctERpAJYrwVTyR5/mrvnb+/xpdnQcuLJE+zxIJ/vBi/V6GWikrtm+3OqTsFwxCy/WV7j0rdp+VlAmOUCXrxjh9v0exJwiIJ52hdr/a9VRro5SKpqVj0oqDaCn4EVqlUtDvEbwhmqmJi9+xqZeCDCDKJ3Erw4y16kfi4fvr/hvuyNaJuyNQ+V5AIVixeKp3wfqUBbYV4rxKWSku7aX+fv2CYCnmhf6+5/x5DyIRg+R5avJONt+KLxEskhb+Howzsq93JWdXNZvySxwuDRCw6gliI2krVUvF3l/Q/R/xYMBMF/7XnR60EMgnsSyK1Eso9CV4kxWj3S/vw6ZtFXZjs9B5P+jLxkT54sUQcg/VKvRof8WgxrVSMTQTD1IAkdXtHkEmZfQlixEU53oovklCUcTtEXZAdeyhJ7dwg2tZfLPHbCmKvMoJUOiwTpl4kBvYVZYLfl9C3Evx4K5JIwtGDfFcPmXRnH/IiKWa5iIW+rVBIRelsl2CYGuLfJUUgkzitpKki0QtJtD17JVPwjIhNosF4eVwvhXFYVLHANTP2ttKpaK9i+lkkFZW6Lu9MmDrvVKSx744gE9QjwcXFO76V4Mdb8UVSiIGPo9+NkKSQ5am3WBShWAhGYKWk0jLuFX6ai2nC019Suw8RMonWSqT2we9J4oukmMnUboj9ivrMp+5iCY/B8GdXJolHYGGpwOt8zoRp0jkVqd0XV8vEVjLiwrcSWCJNFIkPDCJNdizWQcabEgNHCjIZRS7aNkIs9G0FLxWp3dF25xifgGcahb/sSRr7LVYmBK0EOd6KLxIvinBgcX576fD7t4iqaaXu0YBMRmgtEcSC2a/Qt5URX9ninNS9ewXDNBA19fYDiYbvwzKpvpVI7RNdJJg2EhZJCv8Mx19nEeG2tmxKaucCIkGMw7BPhuHFQt9W8HsVpd3JwQveGKbBSD2/0R+wQ4y4yMdbzRcJLCkSORRl3OeiSvxPw1Jbl6eEWHwQexYqsSgCsQTaCnIE1tsoGGYZsEVnT1U54kLsSQhEgtiPINqIXCLtrntQVEWr6170IinGDVJLseD3K/gxGKqtFKWippwUDLOMkNoeKsokPOKqYryFfgQ44n6kIJFAlIaZCq/7hJmCTAohGIfVUCw0bSU8AlPaHuSzJszyvE4YzlCNuCjGWwQiIRtrhWPP/Z9fKzl+4K+MlR3rBtGFELeW+GKJ31bcKWky2GGO3iUYZhkyMT27Tmr4MTTiii8SWxeR4CSSiySPtudaVbwHsGWyjkwBfLxURpALzTistmKhaytSz/PehFnWSJ09TdJKwuOt5osEIZE84HOGto5237k90c56meQpIxc3CNWehVosqh+iMVj4HvuuVYJhVoRU4LUIrSSiSCK0Eb04MJyz/lp3wjvjs81JCjAcmSd+a9G2BmIJj8HKjsD83qTdPn2jYJgIxLhnSWr45HoyYZGMqY0snd2CisnUdRdEUky9WguFWCKOwbxQDEB7v7tbMMwKoq3deqnh51wmJVpJPt6KLhL8WIteIomG85cjqc6kTBycXZ1oa4clUkouOpzmiwU/BlsslXbHPSwYZgXSMtmzBK2ESiSI/Qh5GwlIpBj/MSRv4VA6e8IL5UrSHgTlUqfWop1PdLGUGoNpu1MwzApGGns83Erw4y2ESOjGWrQSCcfYDsEnFKaGhRJBLk0VC2oMJlN3fNeB3m2CYVYwyb5sjTTwE2K8hRAJZj9C20YQI61R8qUYJ/4tttJAryCSgFxoRmJuEIJxGE4s4cV9qbYi02yzYBhGqO7c1oJMKMdb1PuR+G0knNReSLQ9rzrZfWJcbDHuyYI4EHKhby3xxYIfg/X6MoEDly5dukEwDCP894LU8FnTRYJfstNLZHFUarvjq5tdNx1oKMRyIW4teLGMfQymunCyvd+tFwzDXKGdntjgz6VcPd6CQmKKBN9G4kskD1yQ/SjtvhrbYUaZQk+aPDHkUmlr0c4nqlhaGlqCYZgCiYaZvJXEFAmijSBHWvQSKcZfhoYXipnf5IWSh0AuhK0FJxYbRSxKu7cGt6YxDHPtH3I1/FBjkURoIxiJwJISkTpPq2u3CyzKuB0FoRDJBTESI24ttGJR/QxLpW3sJsEwzPXOpiShPQlCJOixVhMkIkMSyXNxEGPfw776YJVM7Rsy7fUWAoHEkwu2teD3LHixeKmo1O4RDMMEURo+GptIvDDiiySORPTSEhmO0u73w4cvrRJl8VfLytQe98mlkgchF4J9C7a1xBeL//3b986tFQzDBPG3CvqT8wiREIy1mioRL41wVNc+JsqypeueX5BJMRi5+ODkEr+1FBf4eLFI7bYJhmFGaCn+/wVLIBJcGwkv2OGaiSuRcJSxr4qyJKndM1kQSUPlQt9aUGLxfzZfmsUwo7Ft+uS6xMCfaJHohdC3kfgSwcV9I8rgX/eRaJj1QslTRi69BsrFDVKlWFSabREMw4yMMnAkF8k4F+2Qp7kSuYhNktp/L8f/utQdKS0Nj3iBBELQXgjlQthaMGLxf5ede07cIRiGGZmJ/t5RafhjBJEQtZFIEtGUEoFCVApbS7w3B7b6hnI5TZVL/NYSXuAP7m5mGAbzxNfMuETSZIngBeID143U8B97d/MiRxHGcbwQDeILyUFziIqKHtRABEXMScOaQzCY7erJwEZQVpGZqpmNrpAYxZeMcZMYu6t6VQwuIkHEiyLk4l+gJ1GIhyDePInoRQwbXw9ubVh7NjOz1ZNnap7uze8LP5J/IPnw9MxufyCGTSr7Yg5KPgZgyoYLAZbeq2VJ+6x+aGGjQAhdcu6XF0plfy4ICf2xlvJAQkREEhAhA+IH5awYJvf4JVLpQEyqj4sxfcdxtbQyvOsEodFcKSeLfT7Cf41wfB7SBQh1i0P99uGaTrZFjfTE8lQ+BmBIH+rTcQl/tbhvqQiEELla226lPtbiR4TjCvEDsmpqCRRlpSharWkfc5h0jwEY8vUS+JEYHRZltEAIjSyp7ec+RCLCIy0yIoEfZYUBpHfuDZrFQVF2RjbNm90bJzDSMwZcglwttUZ6l0AIjSypkgnea4SOCD8ga09eAOVLUaR6p7PBfa/7YlAIwDBcL9y4+GGRyryMl2chFOQlXN8UgYQTETog6VgAkQOX/t5oLFwjfEWNt+7wYMIATAVx8V8tjwiE0MiLmvY5wjVSOkQYAPHMuj/Px+35hwqcjNmEB4+KAmMGjIrL8FdLrNL06Rc+vF4ghEI89toslfmVBRHVswoDkuPRd9ocKvKh1lNETPiB8V8vrLjELTMtEELBkk3zcSBEGK4QHkD8s6eFr5q2r0llj/csODJ0YOjXC/3RWKFHYq3sboEQCvkCrp1+SOiI8F8hdDwI+0msVTSbbZIqPe7WBxV+YOjXCz8uynSWukIghILlXgQltfmBDxH/h+n8gNAXP3PiZjEo9zXWHJR8LMj4gWG4Xui4xMpKgRAKnvu37EMk5Ifq/ICY88HWTP9YXsvuEoOKVLJjcgmOi8eHDD8wo/7cpT6T3C4QQsGLtdnuRWTdAGIXQ+IxcDo5OFh0ZacibY45RDy7DIGh4xIr8yp+9gShsf5MyvdMiPADQsfDP20+WvP721HTHFuezldpZFS+sNeLH5dYmz0CITS23P8vPkT4AOHHgzTlZr4V/drR6VwplZlzmAweOzL8wBBwiVR2m0AIja1aI3kwR+TyBYQOR/dMPm3P1Tufbuj7PgEPJh5k8jEgQ3hMRgNGDlgvLvZ1fLsLofF/2yvW9sfQiBAeX5UYDzNwkTJ/rqym57f1feWvBw4uZKoPjINFpXjvCUIMxcqcKg8gdrFKeDgwfIu1fVxcnGy9vUsqe5QKSYhHZnRk+IGp6/R+gRAae7VWuq8vIuEBYceDDod/7v/dPqCYJ6VKj16Y7buwyORjQIYIjB+Xeuu96wRCaOzV979zY36FEAAhXB+8ePjhoIFiTveehTqZdZh4xgANDZnwV4wfGKnMswIhxJZU5quyAsJ/dfgn196Zfs8ZOx5MWKDhR4YOTK1tHhUIIU5Q5giA8OPBD0e+ZvrXqqn0N9GdexzjAaOy0NCRoQNT35/eIxBCbMU62z1uQOhXBz8chaeSzWKlqZa5xQnuRsCDjE05kaED88SB5FqBEGJrXyO9IeSH56O8OhjQIC9uzT8gVqrpZJvDxD86OPxXzdiROSAQQuzFypwZxfVRqqtjSDToM/2n5+vdL9V62ANJabEJe83QkYmb2V6BECoDKO+HxYMOBz8a5tKm7UGx0t6mnZQNM/f/VIBVEhofMn5glk9BhFAZQJkeCR4qXzXhMJT9vWrqwmJlToqVImWmJ5cg6Z7sGQM47NDQkakre5NACLEXN7L7cjwYrw4GNEhg+OdA+SIHRZvZqJm+sbLJRpLjki8gOPzYhHhk5v7eaCxcJRBC7E13Tl0tm2ZxWDwY0GAAg7yz3RfKYQeJb2VEp8xXjVT2eYEQKk1Spd9VBA46GGqsOydc7lcPF0WEgA4bOLzQZPsEQqg0Rdp+EgINfjD4t/zjEdFstomABhM65cYmv1CSCYEQKhEo5iUPHAxoVAOMSKX/rLW4nd4qpmbe3RIACmZ0yoFNrW23CoRQaZJtOzkIDk4w+KGgz33pQdRb9s5ImSM9IyLAjw4/OHtmTmwRCKHSJPebewloEMDgQ4I+U2g1ne0U7m1bDhDCKoPPcFcOHRv3rRKBECpN9cbCRjoY6wEKM/JJZadErM12AibrDqBRgRNr+4pACJWuWNlfygYGPxD+Sd+0aQupsolhQbjcASqITlsghEqXVObrCkDBD4Rb0/xbdLEyh0Wsk92RSo4Mnlk14FNse/AOeYRKCor9jA8KE2R0GOiL/2PvfF4jJ8M4/mzbXRUFxYM/wJMeBKsoyLLIgtaTVIQmmY2wiDJQTd6kW/aHq1ut1ngT5n2TUljEf8BD/wGPevTkzZM3b568edM6D8vU1kw7TZ/U94n5fuBT2s6th++nyUyS1O1QmLk4TO2X+2aH5aic0l4HKDTuLQIAaAzKdouh8BIHVZp9v6XxL97jkLSqPEidj0+Uu9cJAKCOyLjP/6NI6A+Dac8oc99RlJar0oDoC5Lz7mBt+xIBALTBm5f/b+JgFJm5H2iQ2sRDNBRHybXiyrXyBQIAqCMw5dsqwmC0aP9swyizP9LAuIwHGIqCVI/R+s4zBABQB1+AJw9C1wPgWjcw7ieu9bXxN0UTV8aDe6x9j9HYKKmeJACAOuK8eqkb4++65s8UpOV1joRWuxqu+Gb5KAEA1MFnD9oNgINjI+N+oTCrbvFwQ1e0Ga44+ephAgCoI1rfearv439G/kphNvooMKPibHS9Nc7vPkQAAHWE5uvHujzcQer+0mho7G80/rLB4w/bjWB8s3yAAADqGN6oHjlurOGp/Z3C3G3yI4C12tUw4VnyAOiE/9kLMP6tGxr3B4VZucXDDdu1KIo5AgCoI97dne/7+J+F/FFqBAVBAQCAdggTtxkk7gvYrjjlBQDoYVDshuZhDtNyq4viaY0AgN4Rpu42DyCcaFvx3dujBwkAoJFzRwpkRFl1Q984d19c2AiA3qB0Ws1EqV3nAYR2i5+TcJRBQ+NV3HoFAASlX3JQ8q6OPBsoFTeHBEAre+eIirlp8msNRUQOGhmXyke+btBzB1n1NAEA9LFXC4rYWYHqTaiCtFzt+/hPNTlgWn52Mu2+g7VykQAAOoNSFHNiSaI8UipjFRg3RBBqURAbfWAvEgBAHQXHII7npykIjDBIKgIlNzTVO9pj0Fzr3Si1rxIAQGVQ4nE8mkqs3xDVJWWGeRXpCwJr1Rkat3lSB8a+QQAAhUHZGwdld/54Y4GCCHU9SEFml2sxEARBEAVFkZAb5dUVAgCog4OxtFQsTJNfa27cqiQIkfcohVn5mocoqA+EPCjlKgEA1MHhkMoh8RAf/RGKcnsRkWhmlNlPp7lywMDYDwkAoI6lQhoUeXjk8ZFLbYeIPz0XmtHzfQ9E01jsmxzvcFjgBpEAKGJvPHovJ8n5o+TYCIIjD488Pn6PgvgCPA+B8BYLeTBmG6TuE/bq9e3HCQCgLCjfnD9sUlNXcOrh0Rgg/tsS3yJEEAlFsSiFsWgejVnG2fazBABQ9ZFhjsgM5cFhlzofHrZZUPiuuB2JhYdgyIxMdZkAAGq4N5DFhcUpcjyam3gIjs743AtKUVzoXCzYxG806o72DY3dYAeZDQgAoOkIZYGDcpSLgtjoDo7cEwWF4fFTFQs2URmNWjiOkYOSEABADRyN07joPTb6g0MTBsZlwljoD4Y8HM3N3J2i+H6BAAAq3pBfXt+5b3l54vohNcVGHhyfQcmrq75jIY+G/DSVyOSAqbszMc7vPkEAABVvyHNQptmt0LCJMDhsu6fDaMKVzC7Lg6E/GvJwsLVw1Fz5R/75RQIA6LigcVjcz9ZiMjsygtAIYqM/OPWghGvVKx6CoSEc8njUHP1L9yYBALyTjIeWY1KzcWRmHM0IXPQSG3lw+OiPJqyk9jkP0VAXjubxYEc1A2M/nhhl1fsEAPAOx2B6TOSRkR/NyEPjMzZ/s3dvv1GUYRjAvwRMSjnLwQQTNVHj8cp4AxrFQyAV2+7sdkRoisshc9htgcrhem4EYWdmsR6SXpF42X/Cf80+IQNLvy6z02dn3tn0fZIn8cIrgvvz+b7Z2ZdA+Xn5z1M1Q4OAg1gdFB7DO+utTxuNRiN6IX/aTfc96+q+QrDwyPDQyGODjgbK0t3efgsM+bXB16sCj/y6nfQ9o9FoZL/QCEyGFFCwyAivGRuaCrEB2GYwTpjeE1gbNcSDBwR/llv6tdFoNGLx1tdfc1fTfa5rdQgyqwLIENAIY2O2puHH3iTCUQIePCBe1t6z+o+vGI1GI5Z2FE3NetF0VuBCAEMhw68ZeWjyQQnSnwTgqB8ePCB2/eQujhWNRqMRuT8BIlYJYOSRqQ8024LiBP1vLTQE4CDwKHF9FAdka1vd9BOj0WhEHhfGgzGohYkoMDwy/LEZXzw+vA0ovU8JNIjVIYMHD0g+Iug8in8Okh+NRqOpPPiAPrfU2z9YCxcCGO6yXx4ZHpqNPduBclJ+dfB4yANitxGkd5yw38X0NhqNptLjLgBi1cKFAIZaMTwy0tBkjwy/FHdjY0+zE98XxmOCAbERedb4efF9H6PRaCp9XPisGx2wIBEBhl8x8sjY0Az9H+VmGN8gjqwqwYO/QCcAQXMBQWO7Xnyn6SXfGI1GU+234zvRARSwcLgUB6b4PQy6WldkUAsWk8UGJZmz4JDHQx4QAhHU8ZNf0Zbf9/TYS6Op7rhr6e6/+93O3wdcgDJYdzcCYyPDQoMHHsywOH7/9ETjYQNS6QqxEbHrBumbRqPRVPJ24blrjw6iQAUlcCkRmMlFZuAJLzsXvbV3c/DYVYDwiNjF49lGo9GUnnb76RQwySqAS82B4ZEZeMLLzuLK2iEBPGQAoY6yCiKCBvEq2gpjPfbSaCo47gIYFih5uEwSMPRlP49M7mdZw0tuE3jUDBB+hfCI2G0E/XeMRqMp89cZ984sRoeyAo8CuKAl4FIyMAIrxuTFCRO3boDwK0QekfmBOl39kqNGU2Zmo/XpmcW1QyhAEcCFXC/1B8aN8IRXTuY7yZnS8OAB4VcIfx9iN0hzEWmEyW0UC9AJkpv6bi+Nprzfjv/e+/3wzOYRPkrAQuAidDyGuhUhgwv5vLi3/nirloDwK0QQEbstP/3caDSaUr57AlDQDJaycLEv9QXWixAwuJAf6UVqTti7V2dA+BVCI5IPiTesvdsNP77lhOkvejmv0Yz/Mv7a/UcHB0ERwIVeL/LA5CMz8ueX00muCAAy+YiEr0Zka5vd+G2j0WjG+mbhRjs6grqbgKA5uFiw1B8XeWAAihk1DT/5jgCEXyH8UZY8IjYkNihB6hiNRjO24MO80e4fQYvAIoCLwHrhgcmQyV65MlLc8MkHBCClrBBRRKg1YheX8lkv3Vk/bjQaDR1cEgOSgVqwFF8tqA2LNC7ywGzsKaQ8C0h1K4RABAUahdcID0nWBe/xOaPRaOjgyckL4cOjFy4/PGqhUsFq4XFBS8ClBGAK3//iRYYCgBArRASRnUGCer2b85t1wqSLv1xGo9FQjwoDk8ECFpSApXa4SK8XtB09nTJIMVCSH+qOiMCRFkog8gKSzX9nJavTib80Go1mx8EH5fnr0euAxG4uLMVxWSwNFzQHF9n1gseyTdE4nf5HAoDUFhF+jdiQZJ33445+0VGj2fk6OX89fT1rEVjkV4uNC3HvUgkweK2NKRqclU0qIvyRlr1GGEiAxtAG6TLa7D75ymg0mh3dnWSYlADLLsMl/3hsx9+fWwj6iwQgxKU6gYjAGmEgydr0447epWg0xX/i17ny4BjqApHCsJRwHIYuSuCClocL2o6iKbPTLHSSM8QKqTki/BrhIUF7z7uw3D9rNBrNyMGHagZKDixoQVj41SKPy3iBsb5/UiRzy49O7QJE2GMtGhI86eV4SbcVJOHl8J+jRqPRjPS9k1kvPu50/zrmdIEJDwtqw8KvFhuXaCJxwSKk3ouDDz8LEOI+hEck/16kyjXCQ7KlfjpvNBpNblxv/TBAyQpUyoRFfrXI40K/f7AZ9i9YgJSNCBrEAmtEDhJ03k87aMt//L7RaDRD025HU4OYlAsLv1rqj0s+MNn7u6i4K/HHOYBIIsKvEf5+hIfkOSZxB20ESRs/XmM0Gs22jwkDjJmrD04AEAKWnAt8UVgqxiV/veDFm4aNF61PE4iUci9S3RopCxJ7lQCSwTaD/hdGo9FYwQciMMn6Klhwv0LCwh+H1R+XkdYLIDfjSKMTXyoBEeJIq/Q1IgUJ1kmIOmEa4D8Go9FoBtbJf3udoHdy5uraCbSesPCrhTgSI3AZvl7w/RMzrjS9/mcCiBBrhDjWkoRksF4S4vX2+iNcGs2Lh4TwFCRAcdClDJYHArAQx2ECq4XFxTqCZyemPCL8GikbErQoJOhWSFDHTwPHj4OWF39oNBqNwds7AMlgc9eKPCz8apHHxTruotP0k4tjQ4Q70posSEZdJd6LApKszSBpr+BlbBrNbr+I38Rj7sZvb6CTDQu/WqrE5X/2zuW3jSqM4iPBohKqQGx4tQUKLY8FYgHiIbUgEEV9xOMZxzRtCA1N7PFMWpUFYp0FEBqPx24RS4TEsv8k3BMxjZuLuUxPrr8Z5zvSUTeVlbTJ/c053713+uaEvIdB2PhdB0QE0gg/HyFBwtdbdiqxHG/les+X6khr1Sycrc3JHkxmQgVee1yw2FDhwQJzYOFTCw8X1F1eLmATgEjzQVI9lUynkyT8x/r+edVRPnNyaX33eQAFdoPFgopvsMAEWOqdWmbUXbzibLwMSHCVFptG+FpLHiTuVAKITLs92F3XyyNVR03dBw+eaN2ZPAeglHZDha/BWLAI1GFe4LKEusuXOunkHQdEZNOIPEj4egsAOWDz9fVhXMuy97SgUh2RXV1Y4C9lBiSlLajwNRgPFn7O4muIz1ZiqLu87rKIDRyISsuRRthayw9IiIF7tXrL8rCEyUN3tiYfBCrVEZmbxP3xC3H/pxe+NN6HCp1WBMAiUYfxcPH+ABtleVzDNCIAEqrecqeSFACxbb7fXrd/71SgUi303OSPY4BJaRdUFCwABzPIt+GC61YC34q2RmcF0ggxaCdAIlBvwbNA8tDJ6Budp6gWeW7SNdAwlcuLgMm0S6iwYLngqMHkwSKfWnB311zekBZmo6QCRLyAJJQDCVFvOSsuB0zg4Z47WbGk8xTVIs5NrplFGzCZtkBaWWCwuOHSuvn78bnd0hGmxbn5pRF5kPD1Fp9KSpjEab4Jh/gzy98PVKoFEhbBK4PipYNAcaQVYbD8XDOw8KllffuPY8G8hPt05phGxEAin0psmIRwf9/x7fsnApVqAYRFDDDZ948vOaBCphW7BuPnKzxY+DkLn1rQRAXzlFl0u0QaEQCJh4H7YaQSd8U1EybtpNjAPAU/0IFK1WBhe2oJEgdUHBWYz7TCD+55sPB1mAsuIvPZzq38TSKN0IN2HiS2eZDYDg8hlRyECUCy7+FGNMhXscUyUKkaeiX9yi0Dic27Jy4au6HivwLjazAeLDDAMe86DHCXuKztSSyY0vMR3yDh6y07lRAVlwUT2Pz9m+Z77OKcUKBSNUioVgAHwKT0xRlgaRnoVKnABGowYbDwdRgeTMVembE8GH7K1VryIBFIJUTFZYNk2p00b+urg1VNukEY24PDb0cn4XjzvgMqPiswdw0mCxb/cxZY9KEU2/uIWqtBIPGaSniYwD3jpPh2Oc0vYh9/oFLVfHswFvAwG50szUCFTyt8DSYPFr4OE1878FbBxoCEqLfYVMLPS9wwCZPhns1nfaZvelTVGSbd21h8fzkFH4QKfLACs6FSeIQKX4M1ESy1OCyNa9XrDRKYB0nlVJISqYSACWy+/vUoGX8UqFQ1FBbRpf69PZgQULHmKq6BPWxBhU0rfA1WG7CUJ+PFFWXjVWLQToOEr7eqD93hcD4V10yYACT/BpOHzsbvBipVjYSF69JG/jJcASpSFZgbLFZaaSZYVldrtEv0ajZ+ixi0i4GETyV8xeULJnCUFjfa2a5CRVULtb8bP4NGIwZQagUVPq1caBRYbLhcrNNrxjHIibHo1QkkfL3lP5VUmpdUh0mU5jeifn4jTkcf6kxFJTkzwWLZHuy8ArugAjug4pirCKQVogaTBgtAX7v1oZUU70mCxB64y6cSfl7CwwTGaXps8dbdXyoJmGBRbg/Gr8AcVO6fcM1V+LQiUIMJg8Vxb5eMbpvIhAX50EGSyoPEkUrIiss/TOAQHuRf6jkV1TzPmWDhXtocvgp7gYq7AnMP7Im0wtZg/I4wHiy1vbU83pqcJ0DC1lvEmRKvqYSfl/RKmMwCiRsmcHuQr5nPu6In6lW+9am5SQMLfgkTDir8XIVPK3wNJg8WGy54Z3ytX9kJSAiARDyV8BWXf5iUjnvDqPXD3eOBSuVB2H66dOfeKfP0e/ryzZ3TslDB1mICKkRa4Wsw/2Bx3Cosr2gw/qyJIOFTCV9xeYdJ6WT0dZyMl01SeTZQqQ65+l4xsOik49OX4ZsEVIgdYAJpRaIGo8Cy9v2fTwV1V+uH34/HSZE5QMIM3KvWW3wqSSulEu/zEjdM4NkwKR0no6srt359MVCpDkFr3w+f6phU0u7vvgZLQCWWgYp7izFfg/FgIdKJqKK0+ORQQCKfSqiKyz9M8seECTz8Gtfew11zAFJfJ6xitwW3NnZeL2HiGyo+h/Xugb3PGsz/jjD4goF/0BThThgs6m6Q8PUWPXQnKi5iXuIZJvDuo0DpPQoUgKR0C39uTb7YG9CpVBXfZYK3hrY2itdhQOUgUKahAohUhQrMQsU9V+HTyvxqMB4s29t/NesBMkx3z8mBhE8lxLykxjCx0wlgEqbF9bBfXDef3dEKTFWl4gI0riS7Z1pZCZRiHyiVobJDQEVgrkKkFaIGo8GytoZ00jDhaTdK8wEBEr7e8p9KGg6TaaDAw+vme73W1gpM5bot2Cx6HQOSK1MGTKpAxQZKdajAPqEy17QCr/kHS2N/t5d7o4+JgTuRSjxsB/Y1L+kdGkzg/wkT2IZJCRQ4SvIv1tCzqlQHtgR3zaIe9UZn4WmgIKVY1Zd3qPDDehgA4dIKDxV3DcaDpdG/0zjS38GCzA/ceZAIVFzVtwXLw6R0NChWomwcawWmmp6NdtZ3zwAkpZFSqkLlsgBUvFRgRFqRqsEa3zzE2eR9gXqLTyV8xdU4mFhAGQxXot5wpZMU73W3H+iVLWKSv/zVwOT5Vnr3DdgssG8cDlR25gSV+x6g4iGteK7BMIZYiF0gHZyVsEEimUrIioufl/iBCfz/YLIPlNkwgc3nX4Xb6bjdvfXrq3pr8dGaleAm2k5y74xZkN5spRMLKKX/a57CbSeWhwqfVuRrMBxiXpjfXfxAzgskcOg4pMhXXPWGiWsI74JJCZRWbx8ocHtQfGU+83MsMoFqobW+vn0MizhAAk8BxYKKa57iHtLLQ4XYWkwP7PkazA0W3GAQLJLQxztAUsdUQs5L3Du53DBxX6nCV102TKISJo8AZfgVHKWjLg5DYkAbqBZKOD197c7kuWhz/Fa0eXfPFlSI6ksAKsQOMA8VmEANtpAPgPhHEE4lfMXFw8QBEjmYwBZMDqSTaaCYCrPbSYqlley3k4FqIdTt//J0tDU6Gyb521G2D5QOYDIDKgBJQ6FSxwrMSw22sA9+qEsokPhPJXbFRQ/f6wYT99wEVdcsmMCASWnzf7kcJ/l5c4eb3l7cUOH1r1ikARK4BApcLaXwUCmB4gcq/A4w4bRSvQb7m71z+ZGiisJ4L4gLDSqJr4UrVxoe8lBAgfCI8hCmqruGThRClJnupruBuDG6nZVDv4GFhsSVf6n3q7FChwtz5s7XZ07V9D3JSViQCfTj/ub7vnNu3d14d//OsG+8eBsHtoK9pWhxlR4mfAgvW12eOpkHChpb9tnD2cl4fUu1dkoSNxa+0p4eXmk/yduDSmuwK6jc8kL6qkGFt8B4tcLbYMpXrNgXDp29UCURJoAJa3XJ6mQeKOisO23U28Pj+WNFY5UWJAicVx9OD7v3/QiA4toDCtpXKbz15Yf08o6KDBW0DBUirC+ZWpFtMPxytxQz7e5DerfesVElRF5iCRP5ShU5N+Gtrp4HEw8oDiar7r3KnO9eX+2NjsWnQ5YLJDjcGt1nRwCSom+uAyrbqZRw64uHyqYCVAImwEwtMF6t/OTC+KUZ8ccbSakSv01ViTwWbA8TeUQ43OryYfISKEVjf6Xee3YKgW8tlkkB6vjOJa3RMfd5OLrVT44WQAlRKQjotfOURUNFMazf5WixPliWbhEZAT0PEvRoKWDi75rwITxhdW2rToqG/ZXmPco76w7PNbp/fxSXI/dmKXHNDUrgkE6cUgRM5oGC9lSKBxUhoA/MU/jJL3uo2KsV2QbDo9hry1bw2DMcqgqqhLC4zGGiEMITVhenTtI5oNSdBVa0Oyy+w7KrW56LOYuCrYVDJwfAg8mXaADFg4qgUqSAnlcpESoaaqX5+PmHS3tTeNN9sKxUCZGXkAuL05/VYEJYXYrqxAOKe61SB940600S3PWWuEW6qFo4NYLfSlfXZp9hIKLoAii3XIerFNn6ilAhoKKkVpZ+GGb1weQHASbEkqJkcbHhuz1MmNzEt7r01QlgMg+UBN2eJGl7fA2HGu4cinDZGURw+29+CD6aHk26kxNoHyi+SgFIBJUSENArhPRGUCHCevHKFt4Ck9WKy5wO1Za98KXAAa+nSvi8xB4mZG7iW11cEM+rEx8obuvevXZ5wxLDSOud3l+HIlxeD5Gmg0HWGZ5ccQ2QvATKzAOKjkoJt75gcwp5ijD5ZQeVsltgyCYxQVuLVathjNHA4qo6TPjchLe6ZHXSG9e3BUrbB4p7jW8VfbszvIqDEl9ibHQvYyaC51jgUE26myfc63mq3trqrINFUh8qgu1FqBQioCesL2lHpfpQ4dVKXCh+5TcvjJcSICHykorDxMjqktQJOlyd+EDJOqObyf+dOns0687OrT4af44LDDEauR8BcsdZFz+6w2zrUB9/nbjn0Wz14KtXgRKmUp6QKoW3vvg8RV58VIAKnatoqpXm+j/RJvasrz9evFfvT9d1LS4+fK8qTHSsrkkOE0GdBADFhwm6gEnR7ufeyLs9vnG7N72Q2z+Pn3+KXZdmszqyH9M4eCQrpnO2DsynxxzYT9e7g9OZAwn6tUDpyUBRUClUQL94qGyWHyq8BSaqFagT9zk6UIvlFz6kBUi0LS5iLFgRJvKuCZ2bGKqTeaAUMEHL6sQHCmCCdj/zOjp5MLyedsfX0I3++DwOUBxC+MJhH8PyxlV84e/99u87eKY3wIcbfXH9/0prcnalNTjr3rczaMCk6KwvAUWAihDOSyqlsRcqhQ7pWajIW/VhUOEtsFC1Eq0uoeqd6dUwkPB5Cb9jYg8T3uri1UlGqJOdA2UoAgUTY/nnqDPM2/3bvkcn/cnl9OHoDA7WpjvwcDDhoIB9humy5PfBQWyVYz8GdhogBMUDOwGNP+MJpM2NjbfwwCL8XYTksKgw/4/pnqY7mPBzG/3BF/X+8HgOi/bkW7T7v39TdNZzMEG3JjlQfKhApQAo81AZeLaXukqRA3pFqGyWHiqWFlic6trhwiMOUQOLywYm8ngwGcIXMJGtriKID1cn8qhwuN018+yuNwEl2QYoAEnRqZseS9ujvHFTQ9Hu9bmSd2t0JelMLhftXo9LRbv39WKjjR5eTNx1/UWnznJLe8ML7j0+XzRynqQ7zDvtAyYsUMJtr2R9ISpFDuhl60shpDeHCh/WY7SYUCuwSfMFxlhyNd2LHgASHZi0NWGCHmrkJrzVxasTMYyn7a7em9UJGjApJ1BmgUBhbS8/nOdVCm99VR0q/AQYb4HlE4+xdl74wvEWFw+TtLIw4a0uQp1Qdpecn4QDJVEGStoCVFig+DmKlu0lX8ciqxR964vcUeGhYhDWy2DJ7+qKFf5sazyHPsKEzU3s1Uno7gnsLik/kYEyNAMKOgAorgcKtpcXziurFML6IkP6UkNlwbkKsro4IrzLwqZ0oztbW4jFZQ8T9J7CBJ1YqBPe7hLzE32gDDigzKuU9jY5SmsxOUo5VQpvfXkhfTWgopar5NOKsXZfuK5BQZUQOyZ2MAnKTWSrSw7ieXUih/F8fuIF8rsFyooFUMJzFNn24sN5QEVcdpQCeoM8RVh8tIQKb4HFEeEFFZ6jsSQwUctNeKsLPeQWGSW7C93m85M3A2VUDqDwOYqC7SWoFG/ZkQjo9fIUf/FRvqJlwVDRCevrv8zer8VaTOFB+ziQqgUTeddEDuHtrS4DdSLkJ8SEV4WAomp78SpF3/pSmfzioYIOhQqbqzTv/xlzk0VXfkVF3x2uMkioHRMeJuG7JjJM+BFhNCCiq07kMJ63uxYzMqwAFHp0mMhRlMJ5XqXA+loGqKB5qPiNEeF4i7DeVfefABp8+G4AEyo34a0ufXXC2l3hQEkWEsjPrlgCBe1NevE5Ch/O66sU8ar7gDzFCCr6E2Bx30S58KGOMOGsLj+I59WJld3FB/I8UNAhQGFzFN724lWKFNCHWV+KeYoZVPiwHtf61GLpV+buZBLykkrBRAjhhdyEsLo4dYJWVSdh+QkPFIBECyh8jqJve/Eqhbe+IlS2YIK75Wqx9qZwQR8Otd3CJC0HTKjchLe6eHUih/Hy7olCfhI6MqwJFCGYJ3IU2vbyn5XCqxTe+qo+VPiwHjdkx3u6DEJ6HKoKk1wVhIlgdRFLjIQ6Ie0uPpCvPFDkHCXI9krWy6RS+DxlP0IFU10xhDcqPF8CB7otTOQrVdRzEyKI11Mnst1F5SfBQBkFAQUQIYASODosB/PIUWjbix8h5lWKovWFlkN69Ka4TW8BFVyKi0cj1GLZVf7Aot70/j6DCbUNLwfxvDqRw3je7uLzE38HxR4o/qQXk6Pwtpe86MheyWJrfcmLjzZQ8XMVPLqjFsu+IKXVYCJf9kiE8HZWF69O5DB+57snM9Hu4gN5C6Dwk16s7cWH87JKIawvW6islQcqcaKrZAVLgJnksoeJrtWlrU54u4vPTyigtDigFLsoDFDkHIW3vexVCm99sSF9maCCjteqlLBwNUHmDgJ1mCiE8AG5ib7VJasTNozn7S5ywksXKPzoMJGjELYXr1LsrS8ipDeCivt/fxCvVSlpXdrYOAD7pOQwkXMT3uqyVyeM3SXnJ/sUKOhBQI7C2V76KkW2vpYVKujk16cfR5iUvHBVAQ43fZjwIbyl1cWrE3u7S5jwqiBQiByFtr14laJjfWnkKfZQwR1d7tLbuGtShcK0BA5CA5iQuQlvdclBPK9OpDA+2O5SCOQNgELtoqjmKMJOijBCHKpS0AYqpaxQ8a+/x4O0ms24a1Kp6riH0eDArCZM/BFhfatLAAqpTuRnn8h2FwcU+R4vfaDwwTxyFML2UlUpN4mAftHWV1mhApjAmq/Fql65D+FBHLalgAmZm6ATKojn1YkcxofvnqgE8v4OSuWAIuYoRrYXoVIMrC9iR0UBKlhi/I+9M2qN4ozC8N4IFmutbWrFixYpFHtbKN5IqXfSkE1m1oFYEUpN02YnwUKh13sjJLubbDW24JX3/krnLAjFwZ5Mnjl7vp09L+w/MPP6vs8556vORoWZLLOK3ZdX5KNsYCYAwgMzcUknJySdAH4Cgby9oegn7PXlRh3M6xxFr70AnAcpxaT6soL0lqYiuybxHnxHJJc75UPOzIRPdAFu0vCSMF9i1NMJN5SamQAgD3ZQzAxFfn0jMK9vzdvVXmaA3o2n6DsqxFS2q/HgYvQ6Tqp0SQ/+fLmWi6koZpIBMwHcRBkRtkwnYFRYgfGg7moA5JUJr8QMxRjMAzgPRohRSknTVNZbMpXiybMvDuKRrK6aynRNPtjnuc/FIbxD1ZV4OvEA8okZymI5Sropxbz68jCV4slhmEnX9dPev1fz6oMMzIRAeFx1cRDP04kO4/m4MAPy9oai3PNSdlE4mNfHh3ntVX8rhacU++rrmXKaZTGmUlTjwVFzrQyoP7yS/za736aZAG7iXnXpi4y87tK24xmQ54YiJmJrKBzMO9ReOKW4VV+OprI5/CcA/KpJrntWf9A5MBMA4b2qLp5OeN3F+UkYCjAUUHuxlFIfI+bVlwFPgaayOYxprpVefpQPY4NdEwzhwTZ8SumE112An9CR4fQNBXAUUHulmVL8ecpZTWW+ZxJLi6LVPtMiH0C6a2LPTXg6cYTxvO5SJrxSMRR9uRFMenUgpQBA78hT9B0VeW0xnu4NzSXwLBue3KuZCYDwhlUXB/E8nXjUXWDCS7vjBQ1F35ZHk17+hsJTCgD0vPoyNpX+L3GbK/SO5H8XeTn9nkN4XnUZp5OamZB0Ym0oHMjrW/J1Qzlq2VBmToai1146nOcpJXvsVX3ZQ/r+ztPPq5orrgaH3vNIVzn7VjMTwE3sqy6eTgxHhWfrlJ90ylB0MK8eitQ4illK2UEpBQB6c55yZlPJyhefxnsmIVXSvVYfnIfATFRuAqouv3TC6y6Vn3TNUOR3PkMxrb0AnPdKKbz6ApC+ZioPD55/1AuFzqrt/dMb8sEHEB5UXU7phI8K07qLA3l9ZDh9Q3GovcDBSMuUklz1JWYi06G9UOg8W/Vbv48Hmpn4VF3ppxNlXBgCeX3CS9lBcTAUZXQYTHrp48O89uIphVdfnqYi51TilEoI76rke5N1YCZK1bWc6cSu7qITXs1HhjcaGkquGIq+i4LBfJ2jJFJ7gZMshtUXNxVZWIy3TEKtSJaVsuH0DuAmDlVX7fEs63TiwE86bygC5h1qLzBCnFhKoTxFfsVwfD0muUKta7A/vSUm0sBMWNXln0786y4E5F0Nhe+icDAPai/rlMIBPa++dFPZ+mP2cS8UslL1B3Gt+keeY26ScDrRYXzzuisMZeww6aXWXtpOiktK4YCem0qxc3qzepjvg14oZK2NiqvIx8yRm/B04lh3cX7SfUNZBEdJMaXw6ovzlOAloYVLOlX5I06v6uLphMN4zk+6ZygzZCig9qKGor2VglIKAvQGPEUaiFhWDLlpvjkrRgDMxCadWMJ4g+14AOQ7ZCgczDffmsdwnqcU/+pLaq5YVgwl82CXfBBB1QXSCTITAONJ3WXPT7SlRgNDqZ2wV3ZRzMF82rWX/EBKabH6yssXX8briqGkJNdGB/IH6FB1AUOxrbs4PyEjw4qhNDtd/x9DaXrCnhuKP0dJJqW0XX0VB88/i4orlPJLkNerGmzLoerySCeg7sL8pPuGooL55hyF1172KYUDer36kmXFR48ml3qhUOqS8wz3q48LqLqSSyeg7sL8BAB5V0Phk14czEdKqaeUeAwrtJTaOhh/le2Oi/+rupYmnRjUXcxQxu0Yyg4wFOPRYQDmQe0FdlJMUgoH9G9NJSuPv45FxdBSq//X0WX5wFmBeJZO7Oqu7FfIT2wnvBI1FM5RvGovnlJsAX1eTgO8h7rzcJf0tvLRV8zELJ2AMyvGdRcH8mEoqdRePKW0XX1JMiken3wS4D3UycvFMnIKqi7ndGJfd6EJLwdDIbsoYNLLlKNwOK+bCl921Ksv2Xiv/uYu9EKhLkvid1aebC4exNvDeG4oHMh3ylAUMM84Cqi9Ek4p8uJqLCmGVm4SbFBObsN0Yg/jUd3F+QkYGU7PUPTRYQDmOUexh/P2KWV7/+jGD6NR3OEKrabkrYVBefzjYtIJh/FK3QX4CQLy+g6KfnbF31D4pJdL7cVTCgf0xfzdktGHvVBo1TXfst89vSUG4JxOUqm74IRXeoYiv74jmPevvXhKkV/dTI6+ebA7XYsHsEKhd/Tz6NXFfPj3dzSdvP3hdIK34+2B/KobCuAooPZKI6XIgmKcmQ+FFMmYY394fHdR6USB8UrdRfgJB/JgqdHcUMDoMALzwlGWqPZqnFI29ifx+FUo1FQy9pjvTdYN0oln3WUD5JfUUAzAfCu1F99Jkd9hqylFdkrksncvFAqdT3JzSOK9jBnzdMJ3T/S6i/MTPjLsbyjyczAUUHulm1LetHcGrU1EURSOuilokWpFW7ooaktFFBWkCCK6EG3VNDOTwVYQQlvTZpJCQdFtdiVNOjOmKrgQ9/2T8Z1CNw76SO+8vMnkfJA/oPSdufecey9Mdxy+ok9CSEosqZjxSiO8U6pFpcxXJxYN+fwLykEqgmK+7SUfdPTq4e1llYJkDJgQQ1QqzTH8sbof2o6x6kQiKHL/RBwZti8o0uiw3JiHjyJue+lnUoxUKRASdzeaouFOyICAKekH0T1XCYasOkma8ebbXXpD3pygtHXXGjWCEmoEJbQgKDIfJStVCsRktXE4zXUphNjcD1aPHqAywW942l1yQ1461Ji8hWJfUORJL/s+ymmqFHezO+M3m9wGTEgWeP+pfR5/vBCDPqLCGjPetn8ijwxr1q4YEBT9tLw+OmzemJe3veTmPCqSoqpIuFaekIyCrzzcf8DjnUZ1Irl9kqZ/km9B0RvzAh/FftvrL1FBahGpLZrthAwJzWbvLLYa4xHNghkPgTNmyA+JoOAnEJSM+yh6UcEcifL+LjH+S8gQU9yMr+LrOCEmFttdSf9EbsjnT1D0xrzcRzHf9ipVuzeWuE6ekHyBGxFeLb6r7kUsC9pdgrhw0j/RG/JZFxT5tLzAmDfko8irFBjt2LXFFSmEjMD0Pda6OEHncRrtLoF/IjDkBTMoORAUjTE/IB8luTDS29qf8zfY1iJkJPGD7xcwSFYMwpcG210UlISgaKLDA/NR5G0vbHDA/AiGbguEEIIvSkQ48ZhBTLJkyJsSlDfWBCUSCkpG2l5BePNVbW+i1+udKRBCyL/2hpW292bRjkmKiX46XuCfaAx5XWQ4w4Iijw7LBUXY9sJPRcTn1z52JjnNTgg51e17X92fKKtHz0K7SxQZzoGgCI15uY+Cn6/mmvyd7hWKCCEk1YuSXi26jkdxOAWlbUBQpAsi5ca83kfpPz7sVTsLiJtzHQohZCCVi7vZmvFULx2PvE1BgZiMiqC4JgQFv+29+/hYcOrfLrMSIYRYA6YszFmnfjCPBzPhn2gGGvs15Cko6fgoOFyFWREk/WisE0IyCZb94aHClHS50X6aEBONIS9IeIkFBQJiUlDwsyEo8FHw/3FShfDWCCFkaI+CudVoCl/EZfVYetvxC027S5vwyr6g2J9FwXwR9rlhfxa9EEJIbif18ZX8Vu14ghEMMdD5J/kXFE3SS2PM498RRjoqQ6zY8f2jcwVCCBnVC5SIpqIlg9bMcZJsK35+moSXfUEJ+xCU/qLDXj1edHZU62rr69xrJR7wrjA3VCCEEPL/6f31z7/Gi43WNAx/DNZhHqYMcZAKyomYGBEU+SwKKhGceHaC1i20rSC2OKLGHVmEEGLC+P/y86If7F8r7Uaz8GcgOMePcXDwTDPUaF1QICCY94DPgRUm7k53Zq3amSyut8Z9n34HIYRkyqdBGw1+AvwaCA8ebbTUfHXoCednsSEXa0Uwh+EG8cOVaryIysCpR49cVTVgG7OqDp6cCEpZCQUEAcECeBgwvhG/hTBgtxVaUViU6DUOFyASqCxWVXWF6uJd7ccE4rmVyu8x/4j+BsknfwBXzdSoslyzmAAAAABJRU5ErkJggg==`;\r\n","export default `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAygAAAMoCAMAAAATKjTDAAAC/VBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+G1NxwAAAA/3RSTlMACRUhLTlFUVxjanJ5gIePlZ6kqKqtr7G0trm8v7q3tbKwrqumn5iRioJ6dG1lXlNHOy4iFgoBDh8vQFBhlKK9vsDBp5l2QzEgDxEmPGd8u8LD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\\n`;\r\n","import * as React from 'react';\r\n\r\nimport styled, { ThemeContext } from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, FONT_STACK, SPACING, SPEED } from '../../packages/constants/';\r\nimport { LoadingSpinner } from '../loading-spinner';\r\n\r\nexport interface ButtonProps {\r\n /**\r\n * Button content\r\n */\r\n children: React.ReactNode;\r\n /**\r\n * Data Test ID\r\n */\r\n dataId: string;\r\n /**\r\n * Optional click handler\r\n */\r\n onClick?: (e: any) => void;\r\n /**\r\n * Is it disabled?\r\n */\r\n disabled?: boolean;\r\n /**\r\n * Value\r\n */\r\n value?: string;\r\n /**\r\n * Is it loading?\r\n */\r\n loading?: boolean;\r\n /**\r\n * Is it inline?\r\n */\r\n inline?: boolean;\r\n /**\r\n * Theme\r\n */\r\n theme?: {\r\n main: string;\r\n mainText: string;\r\n mainBorder: string;\r\n spinnerColor: 'black' | 'white';\r\n hover?: { main?: string; mainBorder?: string; mainText?: string };\r\n };\r\n themeProvider?: {};\r\n /**\r\n * Minimum width\r\n */\r\n minWidth?: string;\r\n /**\r\n * Color\r\n */\r\n color?: string;\r\n /**\r\n * size\r\n */\r\n size?: string;\r\n /**\r\n * Button type\r\n */\r\n type?: 'button' | 'submit' | 'reset' | undefined;\r\n className?: string;\r\n /** Allows the button to be assosciated with a form it is not a direct child of */\r\n form?: string;\r\n variant?: 'medium' | 'large';\r\n}\r\nexport interface ButtonAsTextProps {\r\n children: React.ReactNode;\r\n /**\r\n * Data Test ID cat\r\n */\r\n dataId: string;\r\n /**\r\n * Optional click handler\r\n */\r\n onClick?: (e: any) => void;\r\n /**\r\n * Is it disabled?\r\n */\r\n disabled?: boolean;\r\n /**\r\n * Value\r\n */\r\n value?: string;\r\n /**\r\n * Is it inline?\r\n */\r\n inline?: boolean;\r\n /**\r\n * Theme\r\n */\r\n theme?: {\r\n main: string;\r\n mainText: string;\r\n mainBorder: string;\r\n spinnerColor: 'black' | 'white';\r\n hover?: { main?: string; mainBorder?: string; mainText?: string };\r\n };\r\n themeProvider?: {};\r\n /**\r\n * Minimum width\r\n */\r\n minWidth?: string;\r\n /**\r\n * size\r\n */\r\n size?: string;\r\n /**\r\n * Button type\r\n */\r\n type?: 'button' | 'submit' | 'reset' | undefined;\r\n className?: string;\r\n}\r\nexport interface ButtonGroupProps {\r\n /**\r\n * ButtonGroup content\r\n */\r\n children: React.ReactNode;\r\n /**\r\n * ButtonGroup alignment\r\n */\r\n justify?: 'left' | 'center' | 'right' | 'space-between' | undefined;\r\n}\r\n\r\nconst StyledButton = styled.button.attrs(({ dataId }) => ({\r\n 'data-test-id': dataId,\r\n}))`\r\n display: ${(props) => (props.inline ? 'inline-flex' : 'flex')};\r\n justify-content: center;\r\n align-items: center;\r\n border-radius: ${(props) => (props.variant === 'large' ? '5px' : '2px')};\r\n border-width: 2px;\r\n border-style: solid;\r\n border-color: ${(props) => (props.theme ? props.theme.mainBorder : COLOR.BRAND.REPORTING)};\r\n background-color: ${(props) => (props.theme ? props.theme.main : COLOR.BRAND.REPORTING)};\r\n color: ${(props) => (props.theme ? props.theme.mainText : COLOR.PRIMARY.WHITE)};\r\n cursor: pointer;\r\n font-size: ${(props) =>\r\n props.size ? props.size : props.variant === 'large' ? FONT_SIZE.SMALL : FONT_SIZE.X_SMALL};\r\n font-weight: 700;\r\n line-height: 20px;\r\n text-decoration: none;\r\n padding: ${(props) => (props.variant === 'large' ? '10px 20px' : SPACING.BUTTON_DEFAULT)};\r\n min-width: ${(props) => props.minWidth || '0'};\r\n\r\n :disabled {\r\n opacity: 0.3;\r\n cursor: default;\r\n }\r\n\r\n :hover:not(:disabled) {\r\n border-color: ${({ theme }) => (theme && theme.hover ? theme.hover.mainBorder : COLOR.BRAND.REPORTING)};\r\n background-color: ${({ theme }) => (theme && theme.hover ? theme.hover.main : COLOR.BRAND.REPORTING)};\r\n color: ${({ theme }) => (theme && theme.hover ? theme.hover.mainText : COLOR.PRIMARY.WHITE)};\r\n }\r\n`;\r\n\r\n/**\r\n * Primary UI component for user interaction\r\n *\r\n * - Use the primary button to help users know what to access next.\r\n * - ~~Use a secondary button where the action is not compulsory and there is already a primary button.~~ (We have\r\n * yet to decide on secondary button styles)\r\n * - Use a generic button for cancelling, or configuration.\r\n * - Don't use the primary button in conjunction with another primary button.\r\n **/\r\n\r\nconst Button = React.forwardRef(\r\n (\r\n {\r\n children,\r\n onClick,\r\n disabled = false,\r\n inline,\r\n color,\r\n size,\r\n type = 'button',\r\n loading,\r\n variant = 'medium',\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const themeContext = React.useContext(ThemeContext);\r\n return (\r\n \r\n {loading ? (\r\n \r\n {children}\r\n \r\n ) : (\r\n children\r\n )}\r\n \r\n );\r\n },\r\n);\r\n\r\nButton.displayName = 'Button';\r\n\r\nconst StyledTextButton = styled.button.attrs(({ dataId }) => ({\r\n 'data-test-id': dataId,\r\n}))`\r\n background-color: transparent;\r\n display: ${(props: ButtonProps) => (props.inline ? 'inline-flex' : 'flex')};\r\n justify-content: flex-start;\r\n align-items: center;\r\n color: ${(props) =>\r\n props.theme\r\n ? props.theme.mainBorder\r\n ? props.theme.mainBorder\r\n : COLOR.BRAND.REPORTING\r\n : COLOR.BRAND.REPORTING};\r\n cursor: pointer;\r\n font-family: ${FONT_STACK};\r\n font-size: ${(props: ButtonProps) => props.size || FONT_SIZE.X_SMALL};\r\n font-weight: 700;\r\n line-height: ${FONT_SIZE.SMALL};\r\n text-decoration: none;\r\n padding: 0 0 1px;\r\n margin-right: ${SPACING.X_LARGE};\r\n border: 0;\r\n border-bottom: 1px solid transparent;\r\n transition: border-bottom-color ${SPEED.TRANSITION};\r\n\r\n &:disabled {\r\n opacity: 0.3;\r\n cursor: default;\r\n }\r\n\r\n &:last-of-type {\r\n margin-right: 0;\r\n }\r\n\r\n &:hover:not(:disabled) {\r\n border-bottom-width: 1px;\r\n border-bottom-style: solid;\r\n border-bottom-color: ${(props: ButtonProps) =>\r\n props.theme && props.theme.hover ? props.theme.hover.main : COLOR.BRAND.REPORTING};\r\n }\r\n`;\r\n\r\n/**\r\n * Text UI component for user interaction\r\n */\r\nconst ButtonAsText = React.forwardRef(\r\n ({ children, onClick, disabled, inline, size, type, ...props }, ref) => (\r\n \r\n {children}\r\n \r\n ),\r\n);\r\nButtonAsText.displayName = 'ButtonAsText';\r\n\r\nconst StyledButtonGroup = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: ${({ justify }) =>\r\n justify === 'left'\r\n ? 'flex-start'\r\n : justify === 'center'\r\n ? 'center'\r\n : justify === 'right'\r\n ? 'flex-end'\r\n : justify === 'space-between'\r\n ? 'space-between'\r\n : 'center'};\r\n\r\n ${StyledButton} {\r\n margin-right: ${SPACING.XX_LARGE};\r\n\r\n &:last-child {\r\n margin-right: 0;\r\n }\r\n }\r\n`;\r\n\r\nconst ButtonGroup = ({ children, justify, ...props }: ButtonGroupProps) => (\r\n \r\n {children}\r\n \r\n);\r\n\r\nexport { Button, ButtonAsText, ButtonGroup };\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT, FONT_SIZE, SPACING } from '../../packages/constants';\r\nimport { ChevronRight } from '../../packages/icons';\r\n\r\nexport interface CollapsibleBandProps {\r\n heading: React.ReactNode;\r\n rightColumn?: React.ReactNode;\r\n dataId: string;\r\n onClick?: () => void;\r\n expand: boolean;\r\n theme?: {\r\n main: string;\r\n };\r\n className?: string;\r\n}\r\n\r\ninterface StyledChevronProps {\r\n isExpanded: boolean;\r\n}\r\n\r\ninterface StyledHeadingProps {\r\n isExpanded: boolean;\r\n theme?: {\r\n main: string;\r\n };\r\n}\r\n\r\nconst StyledCollapsibleBand = styled.div`\r\n display: flex;\r\n border-top: 1px solid;\r\n border-bottom: 1px solid;\r\n border-color: ${COLOR.MAIN.MEDIUM_GREY};\r\n align-items: center;\r\n`;\r\n\r\nconst StyledButton = styled.button`\r\n flex-grow: 1;\r\n border: 0;\r\n padding: 10px;\r\n cursor: pointer;\r\n text-align: left;\r\n background-color: transparent;\r\n`;\r\n\r\nconst StyledChevron = styled(ChevronRight)`\r\n display: inline-block;\r\n margin-top: -2px;\r\n margin-right: 6px;\r\n vertical-align: text-top;\r\n width: 12px;\r\n height: 12px;\r\n fill: ${COLOR.MAIN.DARK_GREY};\r\n margin-right: ${SPACING.X_SMALL};\r\n transform: ${(props: StyledChevronProps): string => (props.isExpanded ? 'rotate(-90deg)' : 'rotate(90deg)')};\r\n`;\r\n\r\nconst StyledHeading = styled.p`\r\n display: inline-block;\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.LARGE};\r\n font-weight: 700;\r\n line-height: 1.2;\r\n color: ${(props: StyledHeadingProps): string =>\r\n props.isExpanded ? (props.theme ? props.theme.main : COLOR.BRAND.REPORTING) : COLOR.MAIN.DARK_GREY};\r\n`;\r\n\r\nconst RightColumnContainer = styled.div`\r\n padding: 10px;\r\n`;\r\n\r\nconst CollapsibleBand = React.forwardRef(\r\n ({ heading, rightColumn, expand = false, dataId, onClick, ...props }, ref) => {\r\n return (\r\n \r\n \r\n \r\n \r\n {heading}\r\n \r\n \r\n {rightColumn && {rightColumn}}\r\n \r\n );\r\n },\r\n);\r\nCollapsibleBand.displayName = 'CollapsibleBand';\r\n\r\nexport default CollapsibleBand;\r\n","import CollapsibleBand from './collapsible-band';\r\nexport * from './collapsible-band';\r\nexport default CollapsibleBand;\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { BREAKPOINT } from '../../packages/constants';\r\n\r\nexport interface GridRowProps {\r\n children: React.ReactNode;\r\n bgColor?: string;\r\n}\r\n\r\nconst GridRow = styled.div`\r\n box-sizing: border-box;\r\n display: flex;\r\n flex-direction: column;\r\n background-color: ${(props: GridRowProps): string => (props.bgColor ? props.bgColor : 'transparent')};\r\n width: 100%;\r\n\r\n @media (min-width: ${BREAKPOINT.TABLET}) {\r\n flex-direction: row;\r\n }\r\n`;\r\n\r\nexport default GridRow;\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled from 'styled-components';\r\n\r\nimport { BREAKPOINT } from '../../packages/constants';\r\n\r\nexport interface GridColProps {\r\n children: React.ReactNode;\r\n bgColor?: string;\r\n width?: string;\r\n dev?: boolean;\r\n}\r\n\r\ninterface Widths {\r\n oneQuarter: string;\r\n oneThird: string;\r\n oneHalf: string;\r\n twoThirds: string;\r\n threeQuarters: string;\r\n full: string;\r\n [key: string]: string;\r\n}\r\n\r\nconst widths: Widths = {\r\n oneQuarter: '25%',\r\n oneThird: '33.3333%',\r\n oneHalf: '50%',\r\n twoThirds: '66.6667%',\r\n threeQuarters: '75%',\r\n full: '100%',\r\n};\r\n\r\nconst getWidth = (value: string) => widths[value];\r\n\r\n// TODO: use configurable gutter\r\nconst GridCol = styled.div`\r\n border: ${(props: GridColProps): string => (props.dev ? '1px solid red' : 'none')};\r\n background-color: ${(props: GridColProps) => props.bgColor || 'transparent'};\r\n box-sizing: border-box;\r\n padding: ${(props: GridColProps): string => (props.dev ? '5px' : '0')};\r\n margin-bottom: ${(props: GridColProps): string => (props.dev ? '5px' : '0')};\r\n width: 100%;\r\n\r\n @media (min-width: ${BREAKPOINT.TABLET}) {\r\n width: ${(props: GridColProps) => (props.width ? getWidth(props.width) : widths.full)};\r\n }\r\n`;\r\n\r\nexport default GridCol;\r\n","import * as React from 'react';\r\n\r\nimport { Portal } from 'react-portal';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE } from '../../packages/constants';\r\nimport { LoadingSpinner } from '../loading-spinner';\r\n\r\nexport interface LoadingScreenProps {\r\n message?: string;\r\n}\r\n\r\nconst StyledLoadingScreen = styled.div`\r\n position: sticky;\r\n top: 25vh;\r\n margin-top: 20px;\r\n margin-bottom: 12px;\r\n display: flex;\r\n background: #fff;\r\n border-radius: 5px;\r\n box-shadow: 0px 0px 6px 0px rgba(0, 0, 0, 0.08), 0 2.2px 1.7px -10px rgba(0, 0, 0, 0.08),\r\n 0 5.3px 4px -10px rgba(0, 0, 0, 0.06), 0 10px 7.5px -10px rgba(0, 0, 0, 0.06),\r\n 0 17.9px 13.4px -10px rgba(0, 0, 0, 0.05), 0 33.4px 25.1px -10px rgba(0, 0, 0, 0.04),\r\n 0 80px 60px -10px rgba(0, 0, 0, 0.04);\r\n padding: 10px;\r\n padding-right: 16px; // temporary to balance because the spinner adds 6px left margin\r\n font-size: bu(2);\r\n height: fit-content;\r\n line-height: normal;\r\n`;\r\n\r\nconst Overlay = styled.div`\r\n background-color: ${COLOR.MODAL.MODAL_OVERLAY};\r\n position: fixed;\r\n top: 0;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n display: flex;\r\n justify-content: center;\r\n z-index: 9999;\r\n`;\r\n\r\nconst StyledLoadingSpinner = styled(LoadingSpinner)`\r\n margin-right: 10px;\r\n`;\r\n\r\nconst StyledMessage = styled.p`\r\n display: block;\r\n flex-grow: 1;\r\n text-align: center;\r\n font-weight: bold;\r\n font-size: ${FONT_SIZE.MEDIUM};\r\n color: ${COLOR.PRIMARY.BLACK};\r\n`;\r\n\r\nexport const LoadingScreen = React.forwardRef(\r\n ({ message = 'Loading...', ...props }, ref) => (\r\n \r\n \r\n \r\n \r\n {message}\r\n \r\n \r\n \r\n ),\r\n);\r\nLoadingScreen.displayName = 'LoadingScreen';\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPACING, THEME } from '../../packages/constants';\r\nimport type { Theme } from '../../packages/constants';\r\nimport { Button } from '../button';\r\n\r\nexport interface ModalProps {\r\n children: React.ReactNode;\r\n /**\r\n * Modal buttons\r\n */\r\n buttons?: React.ReactNode;\r\n /**\r\n * Button group arrangement type\r\n */\r\n buttonGroupType?: ButtonGroupType;\r\n theme?: Theme | string;\r\n /**\r\n * Title of modal\r\n */\r\n title?: string;\r\n /**\r\n * Cancel button text\r\n */\r\n cancelText?: string;\r\n /**\r\n * Primary button text\r\n */\r\n primaryText?: string;\r\n /**\r\n * Function to handle cancel button\r\n */\r\n handleCancelButton?: (e: any) => void;\r\n /**\r\n * Function to handle primary button\r\n */\r\n handlePrimaryButton?: (e: any) => void;\r\n /**\r\n * Width of modal (420px)\r\n */\r\n width?: string;\r\n /**\r\n * Height of modal\r\n */\r\n height?: string;\r\n /**\r\n * Focus on a particular button\r\n */\r\n focusOnButton?: string;\r\n themeProvider?: {};\r\n}\r\n\r\nexport enum ButtonGroupType {\r\n Left = 'LEFT',\r\n Right = 'RIGHT',\r\n}\r\n\r\nexport interface ButtonGroupProps {\r\n buttonGroupType?: ButtonGroupType;\r\n}\r\n\r\ninterface ModalTheme {\r\n theme?: {\r\n main: string;\r\n mainText: string;\r\n mainBorder: string;\r\n spinnerColor: 'black' | 'white';\r\n hover?: { main?: string; mainBorder?: string; mainText?: string };\r\n };\r\n}\r\n\r\nconst Overlay = styled.div`\r\n background-color: ${COLOR.MODAL.MODAL_OVERLAY};\r\n position: fixed;\r\n top: 0;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n z-index: 9999;\r\n`;\r\n\r\nconst StyledModal = styled.div`\r\n border-radius: 4px;\r\n width: ${(props: ModalProps) => (props.width ? props.width : '900px')};\r\n height: ${(props: ModalProps) => (props.height ? props.height : '70vh')};\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst StyledModalTitleBar = styled.div`\r\n background-color: ${(props: ModalTheme) => (props.theme ? props.theme.main : COLOR.BRAND.REPORTING)};\r\n color: ${COLOR.PRIMARY.WHITE};\r\n padding: 12px;\r\n border-top-left-radius: 4px;\r\n border-top-right-radius: 4px;\r\n font-size: ${FONT_SIZE.MEDIUM};\r\n font-weight: 700;\r\n`;\r\n\r\nconst StyledModalContent = styled.div`\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n height: calc(100% - 42px - 65px);\r\n`; // 42px = titlebar, 65px = button bar\r\n\r\nconst StyledButton = styled(Button)``;\r\n\r\nconst StyledButtonGroup = styled.div`\r\n display: flex;\r\n justify-content: ${(props: ButtonGroupProps) =>\r\n props.buttonGroupType === ButtonGroupType.Right ? 'flex-start' : ''};\r\n flex-direction: ${(props: ButtonGroupProps) =>\r\n props.buttonGroupType === ButtonGroupType.Right ? 'row-reverse' : ''};\r\n background-color: ${COLOR.MAIN.BUTTON_GROUP_BG};\r\n border-top: 1px solid ${COLOR.MAIN.BUTTON_GROUP_BORDER};\r\n border-bottom-left-radius: 4px;\r\n border-bottom-right-radius: 4px;\r\n padding: 16px;\r\n\r\n ${StyledButton} {\r\n margin-left: ${SPACING.X_LARGE};\r\n margin-right: ${SPACING.X_LARGE};\r\n\r\n &:first-child {\r\n margin-left: 0;\r\n margin-right: 0;\r\n }\r\n }\r\n`;\r\n\r\nexport const Modal = React.forwardRef(\r\n (\r\n {\r\n children,\r\n buttons = null,\r\n buttonGroupType = ButtonGroupType.Left,\r\n title,\r\n cancelText,\r\n primaryText,\r\n handleCancelButton,\r\n handlePrimaryButton,\r\n width,\r\n focusOnButton,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const cancelButtonRef = React.useRef(null);\r\n const primaryButtonRef = React.useRef(null);\r\n\r\n useEffect(() => {\r\n if (focusOnButton === 'cancel' && cancelButtonRef.current) cancelButtonRef.current.focus();\r\n if (focusOnButton === 'primary' && primaryButtonRef.current) primaryButtonRef.current.focus();\r\n });\r\n\r\n return (\r\n \r\n {title}\r\n {children}\r\n {buttons ? (\r\n buttons\r\n ) : (\r\n \r\n \r\n {primaryText || 'Add'}\r\n \r\n \r\n {cancelText || 'Cancel'}\r\n \r\n \r\n )}\r\n \r\n );\r\n },\r\n);\r\nModal.displayName = 'Modal';\r\n\r\nexport { Overlay, StyledModal, StyledModalTitleBar, StyledModalContent, StyledButton, StyledButtonGroup };\r\n","import * as React from 'react';\r\nimport { useState } from 'react';\r\n\r\nimport { darken, lighten } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, RADIUS } from '../../packages/constants';\r\nimport { CircleWithX, Search } from '../../packages/icons';\r\n\r\nexport interface SearchFilterProps {\r\n assistAccess: boolean;\r\n handleChange?: (e: any) => void;\r\n handleClearButton?: (e: any) => void;\r\n placeholder?: string;\r\n searchTerm?: string;\r\n ref?: any;\r\n isExpandable?: boolean;\r\n isRounded?: boolean;\r\n dataId?: string;\r\n hasFocus?: boolean;\r\n hasClearButton?: boolean;\r\n hasSearchIcon?: boolean;\r\n}\r\n\r\ninterface StyledInputProps {\r\n assistAccess: boolean;\r\n dataTestId: string;\r\n autoComplete?: string;\r\n hideExpandButton?: boolean;\r\n isRounded?: boolean;\r\n isExpandable?: boolean;\r\n hasEndContent: boolean;\r\n ref?: any;\r\n rel?: string;\r\n}\r\n\r\ninterface DataTestIdProps {\r\n dataTestId: string;\r\n}\r\n\r\ninterface ExpandButtonProps {\r\n isRounded?: boolean;\r\n hideExpandButton?: boolean;\r\n}\r\n\r\ninterface StyledFilterProps {\r\n isExpanded: boolean;\r\n isRounded?: boolean;\r\n}\r\n\r\nconst StyledFilter = styled.div`\r\n display: flex;\r\n min-height: 34px;\r\n border: ${(props) => (props.isExpanded ? `1px solid ${COLOR.MAIN.FORM_FIELD}` : 'none')};\r\n border-radius: ${(props): string => (props.isRounded ? '25px' : RADIUS.FORM_FIELD)};\r\n\r\n &:focus-within {\r\n border-color: ${COLOR.BRAND.REPORTING};\r\n }\r\n`;\r\n\r\nconst StyledCircleWithX = styled(CircleWithX)`\r\n width: 18px;\r\n height: 22px;\r\n`;\r\n\r\nconst StyledSearch = styled(Search)`\r\n width: 18px;\r\n height: 22px;\r\n fill: #9ba8bd;\r\n`;\r\n\r\nconst Button = styled.button.attrs(({ dataTestId }) => ({\r\n 'data-test-id': dataTestId,\r\n}))``;\r\n\r\ninterface StyledButtonProps {\r\n isRounded?: boolean;\r\n isExpandable?: boolean;\r\n assistAccess?: boolean;\r\n hideExpandButton?: boolean;\r\n}\r\n\r\nconst StyledButton = styled(Button)`\r\n fill: ${COLOR.MAIN.FORM_FIELD_DARK};\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n border-radius: ${(props): string =>\r\n props.isRounded ? '0 25px 25px 0' : `0 ${RADIUS.FORM_FIELD} ${RADIUS.FORM_FIELD} 0`};\r\n border: none;\r\n padding: 6px;\r\n cursor: pointer;\r\n display: ${(props) => (!props.isExpandable ? 'block' : props.hideExpandButton ? 'block' : 'none')};\r\n\r\n &:focus {\r\n outline: ${(props): string => (props.assistAccess ? '1px dotted #212121' : '0')};\r\n outline: ${(props): string => (props.assistAccess ? '5px auto -webkit-focus-ring-color' : '0')};\r\n\r\n ${StyledCircleWithX} {\r\n fill: ${COLOR.BRAND.REPORTING};\r\n }\r\n }\r\n\r\n &:hover {\r\n ${StyledCircleWithX} {\r\n fill: ${darken('0.2', COLOR.MAIN.FORM_FIELD_DARK)};\r\n }\r\n }\r\n\r\n &:disabled {\r\n cursor: default;\r\n\r\n ${StyledCircleWithX} {\r\n opacity: 0.15;\r\n }\r\n }\r\n`;\r\n\r\ninterface StyledSearchIconContainerProps {\r\n isRounded?: boolean;\r\n}\r\n\r\nconst StyledSearchIconContainer = styled.div`\r\n fill: ${COLOR.MAIN.FORM_FIELD_DARK};\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n border-radius: ${(props): string =>\r\n props.isRounded ? '0 25px 25px 0' : `0 ${RADIUS.FORM_FIELD} ${RADIUS.FORM_FIELD} 0`};\r\n padding: 6px;\r\n display: flex;\r\n align-items: center;\r\n`;\r\n\r\nconst TextInput = styled.input.attrs(({ dataTestId }) => ({\r\n 'data-test-id': dataTestId,\r\n}))``;\r\n\r\nconst StyledInput = styled(TextInput)`\r\n font-size: 14px;\r\n color: ${darken('0.2', COLOR.MAIN.FORM_FIELD_DARK)};\r\n border-radius: ${(props) => (props.isRounded ? '25px' : RADIUS.FORM_FIELD)};\r\n\r\n ${(props) =>\r\n props.hasEndContent &&\r\n `\r\n border-top-right-radius: 0;\r\n border-bottom-right-radius: 0;\r\n `};\r\n\r\n border: none;\r\n padding: ${(props) => (!props.isExpandable ? '2px 6px' : props.hideExpandButton ? '2px 6px' : 0)};\r\n width: ${(props) => (props.isExpandable ? (props.hideExpandButton ? '100%' : '0') : '100%')};\r\n background-color: ${(props) =>\r\n props.isExpandable ? (props.hideExpandButton ? COLOR.PRIMARY.WHITE : 'transparent') : COLOR.PRIMARY.WHITE};\r\n\r\n &::placeholder {\r\n opacity: ${(props) => (!props.isExpandable ? 1 : props.hideExpandButton ? 1 : 0)};\r\n color: ${lighten('0.2', COLOR.MAIN.FORM_FIELD_DARK)};\r\n }\r\n\r\n &:focus {\r\n border-color: ${COLOR.BRAND.REPORTING};\r\n outline: ${(props: StyledInputProps): string => (props.assistAccess ? '1px dotted #212121' : '0')};\r\n outline: ${(props: StyledInputProps): string =>\r\n props.assistAccess ? '5px auto -webkit-focus-ring-color' : '0'};\r\n\r\n ~ ${StyledButton} {\r\n border-color: ${COLOR.BRAND.REPORTING};\r\n }\r\n ~ ${StyledSearchIconContainer} {\r\n border-color: ${COLOR.BRAND.REPORTING};\r\n }\r\n }\r\n\r\n /* 'fix' for removing the internal clear button on Microsoft Edge */\r\n &::-ms-clear {\r\n display: none;\r\n }\r\n`;\r\n\r\nconst ExpandButton = styled.button`\r\n font-size: 14px;\r\n color: ${darken('0.2', COLOR.MAIN.FORM_FIELD_DARK)};\r\n cursor: pointer;\r\n border: 1px solid ${darken(0.04, COLOR.MAIN.MEDIUM_GREY)};\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n border-radius: ${(props) => (props.isRounded ? '25px' : `${RADIUS.FORM_FIELD}`)};\r\n padding: 2px 8px;\r\n min-height: 36px;\r\n display: ${({ hideExpandButton }) => (hideExpandButton ? 'none' : 'flex')};\r\n align-items: center;\r\n justify-content: center;\r\n\r\n &:hover {\r\n border-color: ${lighten(0.5, COLOR.MAIN.LABEL_TEXT)};\r\n background-color: ${lighten(0.65, COLOR.MAIN.LABEL_TEXT)};\r\n\r\n ${StyledSearch} {\r\n fill: ${darken('0.2', COLOR.MAIN.FORM_FIELD_DARK)};\r\n }\r\n }\r\n`;\r\n\r\nconst SearchFilter = React.forwardRef(\r\n (\r\n {\r\n assistAccess,\r\n placeholder,\r\n handleChange,\r\n handleClearButton,\r\n searchTerm,\r\n isRounded,\r\n isExpandable,\r\n dataId,\r\n hasFocus,\r\n hasClearButton = true,\r\n hasSearchIcon = false,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [hideExpandButton, setHideExpandButton] = useState(false);\r\n\r\n // If the input has a search icon, only show the clear button if a search term has been entered\r\n // Otherwise, show the search icon\r\n const isExpanded = !isExpandable || hideExpandButton;\r\n const showClearButton = hasClearButton && (!hasSearchIcon || !!searchTerm);\r\n const showSearchIcon = isExpanded && hasSearchIcon && !showClearButton;\r\n\r\n const handleExpandButton = () => {\r\n setHideExpandButton(true);\r\n // @ts-ignore\r\n ref.current.focus();\r\n };\r\n\r\n const handleBlur = () => {\r\n if (!isExpandable) return;\r\n // @ts-ignore\r\n if (!ref.current.value) setHideExpandButton(false);\r\n };\r\n\r\n return (\r\n \r\n {isExpandable && (\r\n \r\n \r\n \r\n )}\r\n \r\n {showClearButton && (\r\n \r\n \r\n \r\n )}\r\n {showSearchIcon && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n },\r\n);\r\nSearchFilter.displayName = 'SearchFilter';\r\n\r\nexport { SearchFilter };\r\n","import * as React from 'react';\r\n\r\nimport { transparentize } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT, FONT_SIZE, SPACING } from '../../../../packages/constants';\r\nimport { ChevronRight } from '../../../../packages/icons/';\r\n\r\ninterface ChartGroupProps {\r\n onChange?: (e: any) => void;\r\n chartData?: any;\r\n hideFavourites?: boolean;\r\n hideRecent?: boolean;\r\n checked?: any;\r\n assistAccess?: boolean;\r\n}\r\n\r\ninterface DataTestIdProps {\r\n dataTestId: string;\r\n}\r\n\r\ninterface StyledGroupItemProps {\r\n children: React.ReactNode;\r\n checked: boolean;\r\n radioValue: string;\r\n assistAccess?: boolean;\r\n dataTestId?: string;\r\n onChange?: (e: any) => void;\r\n onClick?: (e: any) => void;\r\n ref?: any;\r\n}\r\n\r\ninterface StyledInputProps {\r\n assistAccess?: boolean;\r\n ref?: any;\r\n rel?: string;\r\n autoComplete?: string;\r\n dataTestId?: string;\r\n}\r\n\r\ninterface StyledLabelTextProps {\r\n checked?: boolean;\r\n assistAccess?: boolean;\r\n}\r\n\r\nexport const ChartGroupScroller = styled.div`\r\n margin-top: ${SPACING.LARGE};\r\n height: 100%;\r\n overflow: auto;\r\n padding-top: 5px;\r\n padding-left: ${SPACING.SMALL};\r\n`;\r\n\r\nexport const ChartGroupTitle = styled.h3`\r\n font-weight: 700;\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n color: #6f788a;\r\n padding: 5px;\r\n margin: 0;\r\n margin-top: ${SPACING.MEDIUM};\r\n`;\r\n\r\nconst ClickableLi = styled.li.attrs(({ dataTestId }) => ({\r\n 'data-test-id': dataTestId,\r\n}))``;\r\n\r\nexport const StyledClickableListItem = styled(ClickableLi)`\r\n list-style-type: none;\r\n margin: 0;\r\n padding: 0;\r\n line-height: 1;\r\n data-test-id: ${(props: DataTestIdProps): string => props.dataTestId};\r\n`;\r\n\r\nexport const StyledListItem = styled.li`\r\n list-style-type: none;\r\n margin: 0;\r\n padding: 0;\r\n line-height: 1;\r\n`;\r\n\r\nexport const StyledList = styled.ul`\r\n list-style-type: none;\r\n margin: 0 0 ${SPACING.MEDIUM};\r\n padding: 0;\r\n\r\n ${StyledClickableListItem} {\r\n margin-right: ${SPACING.MEDIUM};\r\n\r\n ${StyledClickableListItem} {\r\n margin-right: 0;\r\n }\r\n }\r\n`;\r\n\r\nconst ChartGroupWrapperPaddingTop = `26px`;\r\n\r\nexport const ChartGroupWrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n background-color: ${COLOR.MODAL.MODAL_PANEL_ACCENT};\r\n padding: ${ChartGroupWrapperPaddingTop} 0 0 ${SPACING.SMALL};\r\n width: 240px;\r\n height: calc(100% - ${ChartGroupWrapperPaddingTop});\r\n\r\n > ${StyledList}:first-child {\r\n margin-left: ${SPACING.SMALL};\r\n }\r\n`;\r\n\r\nexport const HorizontalRule = styled.hr`\r\n border: 0;\r\n border-bottom: 1px solid #b2bccd;\r\n width: calc(100% - ${SPACING.X_LARGE});\r\n margin: ${SPACING.MEDIUM} ${SPACING.X_LARGE} ${SPACING.MEDIUM} ${SPACING.SMALL};\r\n`;\r\n\r\nconst StyledLabel = styled.label`\r\n background-color: ${COLOR.MODAL.MODAL_PANEL_ACCENT};\r\n position: relative;\r\n`;\r\n\r\nconst StyledLabelText = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n background-color: ${(props: StyledLabelTextProps): string => (props.checked ? COLOR.PRIMARY.WHITE : 'transparent')};\r\n color: ${COLOR.BRAND.REPORTING};\r\n padding: 5px;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n background-color: ${(props: StyledLabelTextProps): string =>\r\n props.checked ? COLOR.PRIMARY.WHITE : transparentize('0.5', COLOR.PRIMARY.WHITE)};\r\n }\r\n`;\r\n\r\nconst StyledChevron = styled(ChevronRight)`\r\n fill: #b2bccd;\r\n height: 12px;\r\n width: 12px;\r\n opacity: ${(props: StyledLabelTextProps): number => (props.checked ? 1 : 0)};\r\n`;\r\n\r\nconst StyledRadio = styled.input`\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n opacity: 0;\r\n z-index: -1;\r\n\r\n &:focus ~ ${StyledLabelText} {\r\n outline: ${(props: StyledInputProps): string => (props.assistAccess ? '1px dotted #212121' : '0')};\r\n outline: ${(props: StyledInputProps): string =>\r\n props.assistAccess ? '5px auto -webkit-focus-ring-color' : '0'};\r\n }\r\n`;\r\n\r\nexport const StyledGroupItem = React.forwardRef(\r\n ({ children, onChange, onClick, radioValue, checked, assistAccess, dataTestId, ...props }, ref) => (\r\n \r\n \r\n \r\n \r\n {children} \r\n \r\n \r\n \r\n ),\r\n);\r\nStyledGroupItem.displayName = 'StyledGroupItem';\r\n\r\nconst ChartGroup = React.forwardRef(\r\n ({ onChange, chartData, hideFavourites, hideRecent, checked, assistAccess, ...props }, ref) => (\r\n \r\n \r\n \r\n Create a new chart\r\n \r\n {!hideRecent && (\r\n \r\n Recent\r\n \r\n )}\r\n {!hideFavourites && (\r\n \r\n Favourites\r\n \r\n )}\r\n \r\n\r\n \r\n \r\n \r\n \r\n All...\r\n \r\n {chartData &&\r\n Object.keys(chartData).map((groupTitle) => {\r\n return (\r\n \r\n {chartData[groupTitle].title}\r\n \r\n {Object.keys(chartData[groupTitle].groups).map((groupItem) => {\r\n return (\r\n \r\n {chartData[groupTitle].groups[groupItem].title}\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\nChartGroup.displayName = 'ChartGroup';\r\n\r\nexport default ChartGroup;\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPEED, Theme } from '../../../../packages/constants';\r\n\r\ninterface ChartIconProps {\r\n iconName: string;\r\n iconLabel: string;\r\n id: string;\r\n onChange: (e: any) => void;\r\n isSelected: boolean;\r\n assistAccess?: boolean;\r\n dataTestId?: string;\r\n imagePath?: string;\r\n onKeyDown?: (e: any) => void;\r\n hasModernStyles?: boolean;\r\n}\r\n\r\ninterface StyledIconProps {\r\n iconName: string;\r\n imagePath?: string;\r\n assistAccess?: boolean;\r\n}\r\n\r\ninterface StyledInputProps {\r\n assistAccess?: boolean;\r\n ref?: any;\r\n rel?: string;\r\n autoComplete?: string;\r\n dataTestId?: string;\r\n hasModernStyles?: boolean;\r\n theme?: Theme;\r\n}\r\n\r\ninterface DataTestIdProps {\r\n dataTestId: string;\r\n}\r\n\r\nconst ChartIconWrapper = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n margin-bottom: 100px;\r\n width: 33%;\r\n flex-basis: 33%;\r\n`;\r\n\r\nconst StyledLabel = styled.label`\r\n width: 100px;\r\n height: 100px;\r\n display: block;\r\n position: relative;\r\n cursor: pointer;\r\n`;\r\n\r\nexport const StyledIcon = styled.div`\r\n box-sizing: border-box;\r\n margin-bottom: 12px;\r\n border: 3px solid ${COLOR.MAIN.ICON_BACKGROUND};\r\n border-radius: 15px;\r\n width: 100px;\r\n height: 100px;\r\n background-image: url(${(props) => `${props.imagePath ?? ''}${props.iconName}.svg`});\r\n background-color: ${COLOR.MAIN.ICON_BACKGROUND};\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n background-size: 120% auto;\r\n box-shadow: 2px 2px 4px rgba(4, 37, 91, 0.15);\r\n transition: box-shadow ${SPEED.TRANSITION};\r\n`;\r\n\r\nconst StyledLabelText = styled.div`\r\n color: black;\r\n border-radius: 3px;\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-family: sans-serif;\r\n line-height: ${FONT_SIZE.LARGE};\r\n padding: 5px 2px;\r\n text-align: center;\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n box-shadow: 0 0 15px rgba(4, 37, 91, 0);\r\n`;\r\n\r\nconst Radio = styled.input.attrs(({ dataTestId }) => ({\r\n 'data-test-id': dataTestId,\r\n}))``;\r\n\r\nconst StyledRadio = styled(Radio)`\r\n position: absolute;\r\n opacity: 0;\r\n top: 0;\r\n left: 0;\r\n z-index: -1;\r\n\r\n &:hover {\r\n ~ ${StyledIcon} {\r\n box-shadow: 0 0 15px rgba(4, 37, 91, 0.3);\r\n }\r\n }\r\n\r\n &:focus ~ ${StyledIcon} {\r\n outline: ${(props) => (props.assistAccess ? '1px dotted #212121' : '0')};\r\n outline: ${(props) => (props.assistAccess ? '5px auto -webkit-focus-ring-color' : '0')};\r\n }\r\n\r\n &:checked {\r\n ~ ${StyledIcon} {\r\n border-color: ${(props: StyledInputProps) =>\r\n props.hasModernStyles && props.theme?.mainBorder ? props.theme.mainBorder : COLOR.BRAND.REPORTING};\r\n box-shadow: 0 0 15px rgba(4, 37, 91, 0.3);\r\n }\r\n\r\n ${(props) =>\r\n !props.hasModernStyles &&\r\n `\r\n ~ ${StyledLabelText} {\r\n color: white;\r\n background-color: ${COLOR.BRAND.REPORTING};\r\n box-shadow: 0 0 15px rgba(4, 37, 91, 0.3);\r\n }\r\n `}\r\n }\r\n`;\r\n\r\nexport const StyledChartWrapper = styled.div`\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-content: flex-start;\r\n overflow: auto;\r\n padding: 15px 0 0 0;\r\n height: calc(100% - 95px);\r\n position: relative;\r\n`;\r\n\r\nconst ChartIcon = React.forwardRef(\r\n (\r\n {\r\n iconName,\r\n iconLabel,\r\n id,\r\n onChange,\r\n onKeyDown,\r\n assistAccess,\r\n isSelected,\r\n dataTestId,\r\n imagePath,\r\n hasModernStyles,\r\n },\r\n ref,\r\n ) => (\r\n \r\n \r\n \r\n \r\n {iconLabel}\r\n \r\n \r\n ),\r\n);\r\nChartIcon.displayName = 'ChartIcon';\r\n\r\nexport default ChartIcon;\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { camelToKebab } from '../../../../../Scripts/Spotlight/Components/CamelToKebab';\r\nimport { COLOR, FONT, FONT_SIZE, SPACING } from '../../../../packages/constants';\r\nimport Star from '../../../../packages/icons/star';\r\nimport { StyledIcon as ChartIcon } from '../chart-icon/chart-icon';\r\n\r\nexport interface ChartInfoProps {\r\n onClick?: (e: any) => void;\r\n iconName: string;\r\n chartTitle: string;\r\n description: string;\r\n imagePath?: string;\r\n reportCodes?: any;\r\n hideFavourites?: boolean;\r\n isFavourite?: boolean;\r\n assistAccess: boolean;\r\n}\r\n\r\nexport interface StyledButtonProps {\r\n assistAccess: boolean;\r\n}\r\n\r\nconst CHART_INFO_WIDTH = '196px';\r\n\r\nconst StyledChartInfo = styled.div`\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n box-shadow: inset 7px 0 9px -7px rgba(0, 0, 0, 0.15);\r\n width: 100%;\r\n height: 100%;\r\n`;\r\n\r\nconst StyledChartInfoInner = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n padding: 23px ${SPACING.X_LARGE} ${SPACING.X_LARGE};\r\n height: 100%;\r\n`;\r\n\r\nconst StyledChartIcon = styled(ChartIcon)`\r\n margin-left: 44px;\r\n`;\r\n\r\nconst StyledChartTitle = styled.h2`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.LARGE};\r\n font-weight: 500;\r\n line-height: ${FONT_SIZE.X_LARGE};\r\n text-align: center;\r\n margin-bottom: 18px;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n width: ${CHART_INFO_WIDTH};\r\n`;\r\n\r\nconst StyledDescription = styled.p`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n line-height: ${FONT_SIZE.LARGE};\r\n margin-bottom: ${SPACING.X_LARGE};\r\n align-self: flex-start;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n width: ${CHART_INFO_WIDTH};\r\n`;\r\n\r\nconst StyledHeading = styled.h3`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 700;\r\n align-self: flex-start;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n margin-top: ${SPACING.X_SMALL};\r\n margin-bottom: ${SPACING.X_SMALL};\r\n width: ${CHART_INFO_WIDTH};\r\n`;\r\n\r\nconst StyledList = styled.ul`\r\n display: flex;\r\n flex-wrap: wrap;\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n margin: 0;\r\n padding: 0;\r\n list-style-type: none;\r\n align-self: flex-start;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n width: ${CHART_INFO_WIDTH};\r\n`;\r\n\r\nconst StyledStar = styled(Star)`\r\n width: 20px;\r\n margin-right: ${SPACING.MEDIUM};\r\n`;\r\n\r\nconst StyledFavouriteButton = styled.button`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n align-self: flex-start;\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n color: ${COLOR.MAIN.DARK_GREY};\r\n border: 0;\r\n padding: ${SPACING.SMALL} ${SPACING.SMALL} ${SPACING.SMALL} 0;\r\n margin-top: auto;\r\n cursor: pointer;\r\n\r\n &:focus {\r\n outline: ${(props: StyledButtonProps): string => (props.assistAccess ? '1px dotted #212121' : '0')};\r\n outline: ${(props: StyledButtonProps): string =>\r\n props.assistAccess ? '5px auto -webkit-focus-ring-color' : '0'};\r\n }\r\n\r\n &:hover ${StyledStar} {\r\n fill: ${COLOR.PRIMARY.YELLOW};\r\n }\r\n`;\r\n\r\nconst StyledListItem = styled.li`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n font-weight: 400;\r\n line-height: ${FONT_SIZE.LARGE};\r\n align-self: flex-start;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n margin-right: ${SPACING.X_SMALL};\r\n\r\n &::after {\r\n content: ',';\r\n }\r\n\r\n &:last-child {\r\n margin-right: 0;\r\n\r\n &::after {\r\n content: '';\r\n }\r\n }\r\n`;\r\n\r\nconst ChartInfo = React.forwardRef(\r\n (\r\n {\r\n iconName,\r\n chartTitle,\r\n description,\r\n reportCodes,\r\n isFavourite = false,\r\n hideFavourites,\r\n assistAccess,\r\n imagePath,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [favourite, setFavourite] = React.useState(isFavourite);\r\n const handleFavourite = () => {\r\n setFavourite(!favourite);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {chartTitle}\r\n \r\n {description}\r\n {reportCodes && reportCodes.length > 0 && (\r\n <>\r\n Report codes\r\n \r\n {reportCodes.map((code: string, index: number) => (\r\n {code}\r\n ))}\r\n \r\n \r\n )}\r\n {!hideFavourites && (\r\n \r\n \r\n {favourite ? 'Remove from' : 'Add to'} favourites\r\n \r\n )}\r\n \r\n \r\n );\r\n },\r\n);\r\nChartInfo.displayName = 'ChartInfo';\r\n\r\nexport default ChartInfo;\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled, { keyframes } from 'styled-components';\r\n\r\nimport { COLOR, FONT, FONT_SIZE, SPEED, THEME } from '../../packages/constants';\r\nimport {\r\n StyledModal,\r\n StyledModalTitleBar,\r\n StyledModalContent,\r\n StyledButton,\r\n StyledButtonGroup,\r\n ButtonGroupType,\r\n} from '../modal';\r\nimport { SearchFilter } from '../search-filter/search-filter';\r\nimport ChartGroup, {\r\n ChartGroupWrapper,\r\n StyledList,\r\n StyledListItem,\r\n ChartGroupTitle,\r\n HorizontalRule,\r\n StyledGroupItem,\r\n ChartGroupScroller,\r\n} from './atoms/chart-group/chart-group';\r\nimport ChartIcon, { StyledChartWrapper } from './atoms/chart-icon/chart-icon';\r\nimport ChartInfo from './atoms/chart-info/chart-info';\r\n\r\nexport interface ChartSelectorProps {\r\n chartData: any;\r\n assistAccess: boolean;\r\n hideFavourites?: boolean;\r\n hideRecent?: boolean;\r\n imagePath?: string;\r\n existingChart?: string;\r\n handleCancelButton?: (e: any) => void;\r\n handlePrimaryButton?: (e: any) => void;\r\n themeProvider?: {};\r\n hasModernStyles?: boolean;\r\n}\r\n\r\ninterface StyledContentProps {\r\n isChartSelected: boolean;\r\n imagePath?: string;\r\n}\r\n\r\nconst DefaultGroups = {\r\n NewChart: 'create-a-new-chart',\r\n NewTextPanel: 'create-a-new-text-panel',\r\n Recent: 'recent',\r\n Favourites: 'favourites',\r\n All: 'all',\r\n};\r\n\r\nconst exampleAnimation = keyframes`\r\n from {\r\n width: 0;\r\n }\r\n \r\n to {\r\n width: 240px;\r\n }\r\n`;\r\n\r\nconst StyledChartGroup = styled(ChartGroup)``;\r\n\r\nconst StyledChartInfo = styled(ChartInfo)`\r\n overflow: hidden;\r\n width: ${(props: StyledContentProps) => (props.isChartSelected ? '240px' : '0')};\r\n animation: ${exampleAnimation} ${SPEED.TRANSITION} ease-in 1 forwards;\r\n`;\r\n\r\nconst StyledContent = styled.div`\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n height: 100%;\r\n transition: all ${SPEED.TRANSITION} ease-in;\r\n width: ${(props: StyledContentProps) => (props.isChartSelected ? '420px' : '660px')};\r\n`;\r\n\r\nconst StyledChartSelector = styled.div`\r\n display: flex;\r\n height: 100%;\r\n width: 900px;\r\n\r\n ${StyledChartGroup} {\r\n max-width: 240px;\r\n width: 240px;\r\n min-width: 240px;\r\n }\r\n`;\r\n\r\nconst StyledFilterWrapper = styled.div`\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n padding: 22px;\r\n`;\r\n\r\nconst StyledMessage = styled.p`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.MEDIUM};\r\n text-align: center;\r\n color: ${COLOR.MAIN.FORM_FIELD_DARK};\r\n padding-top: 18vh;\r\n width: 100%;\r\n`;\r\n\r\nexport const ChartSelector = React.forwardRef(\r\n (\r\n {\r\n chartData,\r\n hideFavourites,\r\n hideRecent,\r\n assistAccess,\r\n imagePath,\r\n existingChart,\r\n handleCancelButton,\r\n handlePrimaryButton,\r\n hasModernStyles,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [groupItemChecked, setGroupItemChecked] = React.useState(DefaultGroups.All);\r\n const [filterValue, setFilterValue] = React.useState('');\r\n const [chartList, setChartList] = React.useState([]);\r\n const [ignoreScrollIntoView, setIgnoreScrollIntoView] = React.useState(false);\r\n // tslint:disable-next-line:no-null-keyword\r\n const filterInputRef = React.useRef(null);\r\n // tslint:disable-next-line:no-null-keyword\r\n const chartWrapperRef = React.useRef(null);\r\n\r\n // create an array of all the charts\r\n const chartsArray: any = [];\r\n\r\n // if the user is changing a chart (chart is already selected), set as temp variable\r\n let temporaryChartSelected: any = {};\r\n\r\n // loop through all the charts and unselect each\r\n const unselectAllCharts = () => {\r\n Object.keys(chartData).map((groupTitle) =>\r\n Object.keys(chartData[groupTitle].groups).map((groupItem) =>\r\n Object.keys(chartData[groupTitle].groups[groupItem].charts).map((chartItem) => {\r\n const chart = chartData[groupTitle].groups[groupItem].charts[chartItem];\r\n return (chart.selected = false);\r\n }),\r\n ),\r\n );\r\n };\r\n\r\n // loop through all of the charts and build chartsArray\r\n const renderCharts = (groupItemSelected: any) => {\r\n if (groupItemSelected === DefaultGroups.All) {\r\n Object.keys(chartData).map((groupTitle) =>\r\n Object.keys(chartData[groupTitle].groups).map((groupItem) =>\r\n Object.keys(chartData[groupTitle].groups[groupItem].charts).map((chartItem) => {\r\n const chart = chartData[groupTitle].groups[groupItem].charts[chartItem];\r\n // if a chart is selected, add it to the temp variable\r\n if (chart.selected) {\r\n temporaryChartSelected = chart;\r\n }\r\n return chartsArray.push(chart);\r\n }),\r\n ),\r\n );\r\n // TODO: add favourites & recent\r\n // } else if (groupItemSelected === DefaultGroups.Favourites) {\r\n // console.log('handle favourites'); // de-scoped for the time being\r\n // } else if (groupItemSelected === DefaultGroups.Recent) {\r\n // console.log('handle recent'); // de-scoped for the time being\r\n } else if (groupItemSelected === DefaultGroups.NewChart) {\r\n chartsArray.push(\r\n {\r\n title: 'Custom Pie Chart',\r\n description:\r\n \"If you can't find the pie chart you're looking for, you can easily build your own.\",\r\n reportCodes: [],\r\n isFavourite: false,\r\n iconName: 'custom-pie',\r\n id: 'CustomPie',\r\n },\r\n {\r\n title: 'Custom Chart',\r\n description: \"If you can't find the chart you're looking for, you can easily build your own.\",\r\n reportCodes: [],\r\n isFavourite: false,\r\n iconName: 'custom-line',\r\n id: 'Custom',\r\n },\r\n );\r\n } else if (groupItemSelected === DefaultGroups.NewTextPanel) {\r\n chartsArray.push({\r\n title: 'Text Panel',\r\n description: 'Add text to your page, customise colours, and include auto-text or custom tags.',\r\n reportCodes: [],\r\n isFavourite: false,\r\n iconName: 'text-panel',\r\n id: 'TextPanel',\r\n type: 'TEXT',\r\n });\r\n }\r\n };\r\n renderCharts(groupItemChecked);\r\n\r\n // set the initial states for selected chart & isChartSelected, if one is selected\r\n const [selectedChart, setSelectedChart] = React.useState(temporaryChartSelected);\r\n const [isChartSelected, setIsChartSelected] = React.useState(\r\n Object.prototype.hasOwnProperty.call(temporaryChartSelected, 'title'),\r\n );\r\n\r\n // handle click when user clicks on chart icon\r\n const handleChartIconChange = (chart: any) => {\r\n unselectAllCharts();\r\n chart.selected = true;\r\n setSelectedChart(chart);\r\n setIsChartSelected(true);\r\n setIgnoreScrollIntoView(true);\r\n };\r\n\r\n // handle click when user clicks on left column group name\r\n const handleGroupItemClick = (event: any, charts?: any) => {\r\n setIgnoreScrollIntoView(true);\r\n setGroupItemChecked(event.target.value);\r\n if (event.target.value !== DefaultGroups.All) {\r\n setFilterValue('');\r\n }\r\n setChartList(charts);\r\n // @ts-ignore\r\n chartWrapperRef.current.scrollTop = 0;\r\n };\r\n\r\n // handle change when user starts typing in the search-filter\r\n const handleFilterChange = (event: any) => {\r\n setFilterValue(event.target.value.toLowerCase());\r\n setGroupItemChecked(DefaultGroups.All);\r\n };\r\n\r\n // handle click when user clicks the clear search-filter button\r\n const handleFilterClearButton = () => {\r\n setFilterValue('');\r\n // @ts-ignore\r\n filterInputRef.current.focus();\r\n };\r\n\r\n // searchable charts that contains the search string in the title\r\n const filteredData = chartsArray.filter((item: any) => {\r\n const isSearching = filterValue.trim().length > 0;\r\n const isSearchable = !(item.hideInSearch && isSearching);\r\n const isSearchStringInTitle = item.title.toLowerCase().includes(filterValue);\r\n return Object.keys(item).some(() => isSearchable && isSearchStringInTitle);\r\n });\r\n\r\n // scroll to selected chart\r\n React.useEffect(() => {\r\n const selectedChart = document.querySelector(`input[value=\"${temporaryChartSelected.id}\"]`);\r\n // only scroll the view if there is a preselected chart, dont scroll if user clicks a chart\r\n if (selectedChart && !ignoreScrollIntoView) {\r\n selectedChart.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'nearest' });\r\n }\r\n });\r\n\r\n return (\r\n <>\r\n \r\n {existingChart ? 'Change Chart' : 'Add Chart'}\r\n \r\n \r\n \r\n \r\n handleGroupItemClick(e)}\r\n radioValue={DefaultGroups.NewChart}\r\n checked={groupItemChecked === DefaultGroups.NewChart}\r\n assistAccess={assistAccess}\r\n dataTestId={'chart-group-name__create-a-new-chart'}\r\n >\r\n Create a new chart\r\n \r\n handleGroupItemClick(e)}\r\n radioValue={DefaultGroups.NewTextPanel}\r\n checked={groupItemChecked === DefaultGroups.NewTextPanel}\r\n assistAccess={assistAccess}\r\n dataTestId={'chart-group-name__create-a-new-text-panel'}\r\n >\r\n Create a text panel\r\n \r\n {!hideRecent && (\r\n handleGroupItemClick(e)}\r\n radioValue={DefaultGroups.Recent}\r\n checked={groupItemChecked === DefaultGroups.Recent}\r\n assistAccess={assistAccess}\r\n dataTestId={'chart-group-name__recent'}\r\n >\r\n Recent\r\n \r\n )}\r\n {!hideFavourites && (\r\n handleGroupItemClick(e)}\r\n radioValue={DefaultGroups.Favourites}\r\n checked={groupItemChecked === DefaultGroups.Favourites}\r\n assistAccess={assistAccess}\r\n dataTestId={'chart-group-name__favourites'}\r\n >\r\n Favourites\r\n \r\n )}\r\n \r\n\r\n \r\n\r\n \r\n \r\n handleGroupItemClick(e)}\r\n radioValue={DefaultGroups.All}\r\n checked={groupItemChecked === DefaultGroups.All}\r\n assistAccess={assistAccess}\r\n dataTestId={'chart-group-name__all'}\r\n >\r\n All charts...\r\n \r\n {chartData &&\r\n Object.keys(chartData).map((groupTitle: any) => {\r\n return (\r\n \r\n {\r\n \r\n {chartData[groupTitle].title}\r\n \r\n }\r\n \r\n {Object.keys(chartData[groupTitle].groups).map(\r\n (groupItem) => {\r\n const group =\r\n chartData[groupTitle].groups[groupItem];\r\n return (\r\n \r\n handleGroupItemClick(e, group.charts)\r\n }\r\n radioValue={group.id}\r\n key={`group-item-${groupItem}`}\r\n checked={groupItemChecked === group.id}\r\n assistAccess={assistAccess}\r\n dataTestId={`chart-group-name__${group.id}`}\r\n >\r\n {group.title}\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 {Object.values(DefaultGroups).includes(groupItemChecked) ? (\r\n filteredData.length >= 1 ? (\r\n filteredData.map((chart: any) => {\r\n return (\r\n handleChartIconChange(chart)}\r\n key={chart.id}\r\n assistAccess={assistAccess}\r\n isSelected={chart.selected}\r\n dataTestId={`chart-icon__${chart.id}`}\r\n hasModernStyles={hasModernStyles}\r\n />\r\n );\r\n })\r\n ) : (\r\n \r\n {groupItemChecked === DefaultGroups.Recent\r\n ? 'No charts have been used recently'\r\n : groupItemChecked === DefaultGroups.Favourites\r\n ? 'No favourites have been added'\r\n : `No charts found matching \"${filterValue}\"`}\r\n \r\n )\r\n ) : (\r\n chartList.map((chart: any) => {\r\n return (\r\n handleChartIconChange(chart)}\r\n key={chart.id}\r\n assistAccess={assistAccess}\r\n isSelected={chart.selected}\r\n dataTestId={`chart-icon__${chart.id}`}\r\n hasModernStyles={hasModernStyles}\r\n />\r\n );\r\n })\r\n )}\r\n \r\n \r\n\r\n {isChartSelected && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {existingChart ? 'Select' : 'Add'}\r\n \r\n \r\n Cancel\r\n \r\n \r\n \r\n \r\n );\r\n },\r\n);\r\nChartSelector.displayName = 'ChartSelector';\r\n","import * as React from 'react';\r\n\r\nimport { darken } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, RADIUS, SPACING } from '../../packages/constants';\r\n\r\ninterface TabsProps {\r\n children: React.ReactNode;\r\n onClick?: (e: any) => void;\r\n className?: string;\r\n}\r\n\r\ninterface TabListContainerProps {\r\n children: React.ReactNode;\r\n}\r\n\r\ninterface TabListProps {\r\n children: React.ReactNode;\r\n spacingRight?: number;\r\n}\r\n\r\ninterface TabListItemProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\ninterface TabTitleProps {\r\n children: React.ReactNode;\r\n onClick: (e: any) => void;\r\n selected: boolean;\r\n dataId: string;\r\n firstTab?: boolean;\r\n lastTab?: boolean;\r\n title: string;\r\n}\r\n\r\ninterface TabContentProps {\r\n children: React.ReactNode;\r\n selected: boolean;\r\n className?: string;\r\n}\r\n\r\ninterface TabListStyleProps {\r\n spacingRight?: number; // this number would typically be determined by the width of an 'add tab' button occupying the space if there is one\r\n}\r\n\r\ninterface TabTitleStyleProps {\r\n selected: boolean;\r\n firstTab?: boolean;\r\n lastTab?: boolean;\r\n}\r\n\r\nconst StyledTabs = styled.div``;\r\nconst StyledList = styled.ul`\r\n display: inline-flex;\r\n max-width: calc(100% - ${(props) => (props.spacingRight ? props.spacingRight : `0`)}px);\r\n overflow: hidden;\r\n`;\r\nconst StyledTabListContainer = styled.div`\r\n overflow: hidden;\r\n margin-bottom: -1px;\r\n`;\r\n\r\nconst StyledListItem = styled.li`\r\n &:not(:first-child) {\r\n margin-left: -1px;\r\n }\r\n`;\r\nconst StyledTitle = styled.button`\r\n margin: 0px;\r\n border-top: 1px solid ${COLOR.MAIN.MEDIUM_GREY};\r\n border-top-left-radius: ${(props) => (props.firstTab ? RADIUS.FORM_FIELD : `0`)};\r\n border-top-right-radius: ${(props) => (props.lastTab ? RADIUS.FORM_FIELD : `0`)};\r\n border-right: 1px solid ${COLOR.MAIN.MEDIUM_GREY};\r\n border-bottom: ${(props) =>\r\n props.selected ? `1px solid ${COLOR.PRIMARY.WHITE}` : `1px solid ${COLOR.MAIN.MEDIUM_GREY}`};\r\n border-left: 1px solid ${COLOR.MAIN.MEDIUM_GREY};\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n font-weight: 700;\r\n line-height: 20px;\r\n padding: ${SPACING.X_SMALL} ${SPACING.MEDIUM};\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n color: ${(props) => (props.selected && props.theme ? props.theme.main : COLOR.MAIN.LABEL_TEXT)};\r\n cursor: ${(props) => (props.selected ? 'default' : 'pointer')};\r\n max-width: 130px;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n\r\n &:hover {\r\n background-color: ${(props) => (props.selected ? COLOR.PRIMARY.WHITE : darken(0.1, COLOR.PRIMARY.WHITE))};\r\n }\r\n`;\r\nconst StyledContent = styled.div`\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n border: 1px solid ${COLOR.MAIN.MEDIUM_GREY};\r\n border-top-right-radius: ${RADIUS.FORM_FIELD};\r\n border-bottom-left-radius: ${RADIUS.FORM_FIELD};\r\n border-bottom-right-radius: ${RADIUS.FORM_FIELD};\r\n padding: ${SPACING.MEDIUM} ${SPACING.SMALL};\r\n display: ${(props) => (props.selected ? 'block' : 'none')};\r\n`;\r\n\r\nconst Tabs = React.forwardRef(({ children, ...props }, ref) => (\r\n \r\n {children}\r\n \r\n));\r\nTabs.displayName = 'Tabs';\r\n\r\nconst TabListContainer = ({ children, ...props }: TabListContainerProps) => (\r\n {children}\r\n);\r\nconst TabList = ({ children, ...props }: TabListProps) => {children};\r\nconst TabListItem = ({ children, ...props }: TabListItemProps) => (\r\n {children}\r\n);\r\n\r\nconst TabTitle = React.forwardRef(\r\n ({ children, firstTab, lastTab, selected, dataId, title, ...props }, ref) => (\r\n \r\n {children}\r\n \r\n ),\r\n);\r\nTabTitle.displayName = 'TabTitle';\r\n\r\nconst TabContent = React.forwardRef(({ children, selected, ...props }, ref) => (\r\n \r\n {children}\r\n \r\n));\r\nTabContent.displayName = 'TabContent';\r\n\r\nexport default Tabs;\r\nexport { TabListContainer, TabList, TabListItem, TabTitle, TabContent };\r\n","import Tabs from './tabs';\r\nexport * from './tabs';\r\nexport default Tabs;\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { Color } from '../../color-picker-config';\r\n\r\nexport interface ColorPickerPaletteProps {\r\n color: string;\r\n palette: {\r\n [colorName: string]: Color;\r\n };\r\n dataId: string;\r\n onColorSelect: (color: any) => void;\r\n}\r\n\r\ninterface StyledShadeProps {\r\n color: string;\r\n}\r\n\r\nconst StyledColorPickerPalette = styled.table`\r\n padding: 16px;\r\n border-collapse: separate;\r\n width: 100%;\r\n`;\r\n\r\nconst StyledColorName = styled.td`\r\n font: 400 12px open-sans;\r\n width: 8em;\r\n`;\r\n\r\nconst StyledShade = styled.td`\r\n width: 30px;\r\n height: 20px;\r\n background-color: ${(props) => props.color};\r\n cursor: pointer;\r\n`;\r\n\r\nconst StyledDiv = styled.div`\r\n width: 100%;\r\n height: 100%;\r\n position: relative;\r\n ${StyledShade}:hover &::before, ${StyledShade}.active &::before {\r\n content: '';\r\n display: block;\r\n border: 2px solid #ffffff;\r\n position: absolute;\r\n top: -1px;\r\n bottom: -1px;\r\n left: -1px;\r\n right: -1px;\r\n }\r\n`;\r\n\r\nconst StyledDivider = styled.td`\r\n width: 5px;\r\n height: 20px;\r\n`;\r\n\r\nexport const ColorPickerPalette: React.FC> = ({\r\n color,\r\n palette,\r\n dataId,\r\n onColorSelect,\r\n ...props\r\n}) => {\r\n const tableRows = Object.keys(palette).map((colorName) => (\r\n \r\n {colorName}\r\n \r\n onColorSelect(palette[colorName].base)}\r\n >\r\n \r\n \r\n \r\n {palette[colorName].shades.map((colorShade, index) => (\r\n onColorSelect(colorShade)}\r\n >\r\n \r\n \r\n ))}\r\n \r\n {palette[colorName].tints.map((tint, index) => (\r\n onColorSelect(tint)}\r\n >\r\n \r\n \r\n ))}\r\n \r\n ));\r\n return (\r\n \r\n {tableRows}\r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\n\r\nimport { InjectedColorProps } from 'react-color';\r\nimport { EditableInput } from 'react-color/lib/components/common';\r\nimport styled from 'styled-components';\r\n\r\nimport { isValidColorHex } from '../../helper';\r\n\r\nexport interface CustomColorPickerFieldsProps extends InjectedColorProps {\r\n onChange: (color: any) => void;\r\n}\r\n\r\nconst StyledCustomColorPickerFields = styled.div`\r\n width: 80px;\r\n height: 160px;\r\n position: relative;\r\n`;\r\n\r\nconst styles = {\r\n fieldsWrap: {\r\n position: 'relative',\r\n display: 'flex',\r\n flexDirection: 'row-reverse',\r\n },\r\n input: {\r\n height: 30,\r\n width: 65,\r\n border: '1px solid #f0f0f0',\r\n paddingLeft: 5,\r\n marginBottom: '10px',\r\n boxSizing: 'border-box',\r\n },\r\n label: {\r\n position: 'absolute',\r\n top: '5px',\r\n left: '0px',\r\n width: '14px',\r\n textTransform: 'uppercase',\r\n height: '18px',\r\n lineHeight: '22px',\r\n fontSize: '14px',\r\n },\r\n} as const;\r\n\r\nexport const CustomColorPickerFields = React.forwardRef(\r\n ({ hex, rgb, onChange, ...props }, ref) => {\r\n const handleChange = (data: any) => {\r\n if (data['#']) {\r\n isValidColorHex(data['#']) &&\r\n onChange({\r\n hex: data['#'],\r\n source: 'hex',\r\n });\r\n } else if (data['R'] || data['G'] || data['B']) {\r\n onChange({\r\n r: data['R'] || rgb?.r,\r\n g: data['G'] || rgb?.g,\r\n b: data['B'] || rgb?.b,\r\n source: 'rgb',\r\n });\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);\r\n\r\nCustomColorPickerFields.displayName = 'CustomColorPickerFields';\r\n","import tinycolor from 'tinycolor2';\r\n\r\n// https://github.com/casesandberg/react-color/blob/master/LICENSE\r\nexport const isValidColorHex = (hex: string) => {\r\n if (hex === 'transparent') {\r\n return true;\r\n }\r\n // disable hex4 and hex8\r\n const lh = String(hex).charAt(0) === '#' ? 1 : 0;\r\n return hex.length !== 4 + lh && hex.length < 7 + lh && tinycolor(hex).isValid();\r\n};\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled from 'styled-components';\r\n\r\nimport { InjectedColorProps } from 'react-color';\r\n\r\nconst StyledCustomColorPickerPointer = styled.div`\r\n position: absolute;\r\n cursor: pointer;\r\n height: 3px;\r\n width: 19px;\r\n top: -3px;\r\n left: -1px;\r\n right: -1px;\r\n border: 1px solid #000;\r\n background: #fff;\r\n opacity: 0.8;\r\n`;\r\n\r\nconst CustomColorPickerPointer = () => {\r\n return ;\r\n};\r\n\r\nconst StyledCustomColorPickerPointerCircle = styled.div`\r\n width: 12px;\r\n height: 12px;\r\n border-radius: 6px;\r\n box-shadow: ${({ hsl }) => {\r\n const isLight = (hsl?.l || 1) > 0.5;\r\n return isLight ? 'inset 0 0 0 1px #000' : 'inset 0 0 0 1px #fff';\r\n }};\r\n transform: translate(-6px, -6px);\r\n`;\r\n\r\nconst CustomColorPickerPointerCircle = ({ hsl }: InjectedColorProps) => (\r\n \r\n);\r\n\r\nexport { CustomColorPickerPointer, CustomColorPickerPointerCircle };\r\n","import * as React from 'react';\r\n\r\nimport { Color, CustomPicker, InjectedColorProps } from 'react-color';\r\nimport { Hue, Saturation } from 'react-color/lib/components/common';\r\nimport styled from 'styled-components';\r\n\r\nimport { CustomColorPickerFields } from './custom-color-picker-fields';\r\nimport { CustomColorPickerPointer, CustomColorPickerPointerCircle } from './custom-color-picker-pointer';\r\n\r\nexport interface SwatchProps {\r\n color: Color;\r\n}\r\n\r\nexport interface CustomColorPickerProps extends InjectedColorProps {\r\n color?: Color;\r\n dataId: string;\r\n onChange: (color: any) => void;\r\n}\r\n\r\nconst StyledSwatch = styled.div`\r\n height: 60px;\r\n width: 80px;\r\n background: ${(props) => props.color};\r\n`;\r\n\r\nconst StyledHue = styled.div`\r\n position: relative;\r\n width: 19px;\r\n margin-left: 5px;\r\n border: 1px solid #b3b3b3;\r\n margin-bottom: 2px solid #f0f0f0;\r\n`;\r\n\r\nconst StyledSaturation = styled.div`\r\n width: 250px;\r\n position: relative;\r\n border: 1px solid #b3b3b3;\r\n border-bottom: 2px solid #f0f0f0;\r\n overflow: hidden;\r\n`;\r\n\r\nconst Controls = styled.div`\r\n flex: 1;\r\n margin-left: 10px;\r\n`;\r\n\r\nconst StyledCustomColorPicker = styled.div`\r\n padding: 16px;\r\n display: flex;\r\n`;\r\n\r\nconst CustomColorPicker = React.forwardRef(\r\n ({ dataId, color, onChange, ...props }, ref) => {\r\n return (\r\n \r\n \r\n {/* @ts-ignore */}\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\nCustomColorPicker.displayName = 'CustomColorPicker';\r\n\r\nexport const SpotlightPicker = CustomPicker(CustomColorPicker);\r\n","import * as React from 'react';\r\nimport { useEffect, useState } from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { camelToKebab } from '../../../Scripts/Spotlight/Components/CamelToKebab';\r\nimport { COLOR } from '../../packages/constants';\r\nimport Tabs, { TabContent, TabListContainer, TabList, TabListItem, TabTitle } from '../tabs';\r\nimport { ColorPickerPalette } from './atoms/color-picker-palette/color-picker-palette';\r\nimport { SpotlightPicker } from './atoms/custom-color-picker';\r\nimport { Color } from './color-picker-config';\r\nimport defaultPalettes from './color-picker-config.json';\r\n\r\nexport interface ColorPickerProps {\r\n color: string;\r\n currentPalette?: string;\r\n palettes?: {\r\n [paletteName: string]: {\r\n [colorName: string]: Color;\r\n };\r\n };\r\n dataId?: string;\r\n onColorChange: (color: any) => void;\r\n}\r\n\r\nexport interface ExtendedColorPickerProps extends ColorPickerProps {\r\n selectedTab?: number;\r\n ref: any;\r\n onTabChange?: (newIndex: number) => void;\r\n}\r\n\r\nconst defaultTabData = [\r\n {\r\n id: 'tab-1',\r\n title: 'Standard',\r\n paletteName: 'Standard',\r\n content: 'Standard color palette',\r\n },\r\n {\r\n id: 'tab-2',\r\n title: 'Deep',\r\n paletteName: 'Deep',\r\n content: 'Deep color palette',\r\n },\r\n {\r\n id: 'tab-3',\r\n title: 'Custom',\r\n paletteName: '',\r\n content: 'Custom color picker',\r\n },\r\n];\r\n\r\nconst StyledTabListContainer = styled(TabListContainer)`\r\n margin: -2px;\r\n`;\r\n\r\nconst StyledTabList = styled(TabList)`\r\n max-width: unset;\r\n`;\r\n\r\nconst StyledListItem = styled(TabListItem)`\r\n &:not(:first-child) {\r\n margin-left: -2px;\r\n }\r\n\r\n &:focus-within {\r\n z-index: 1000;\r\n }\r\n`;\r\n\r\nconst StyledTabTitle = styled(TabTitle)`\r\n border-width: 2px;\r\n`;\r\n\r\nconst StyledTabContent = styled(TabContent)`\r\n border: none;\r\n border-top: 2px solid ${COLOR.MAIN.MEDIUM_GREY};\r\n border-radius: unset;\r\n padding: 0;\r\n`;\r\n\r\nconst StyledColorPicker = styled.div`\r\n width: 390px;\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n border: 2px solid ${COLOR.MAIN.MEDIUM_GREY};\r\n border-radius: 4px;\r\n`;\r\n\r\nexport const ColorPicker = React.forwardRef(\r\n (\r\n {\r\n color,\r\n palettes,\r\n currentPalette,\r\n selectedTab = 0,\r\n dataId = 'color-picker',\r\n onColorChange,\r\n onTabChange,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [tabData, setTabData] = useState(defaultTabData);\r\n const [tabIndex, setTabIndex] = useState(\r\n // Default to last tab if selected tab exceeds number of tabs\r\n (selectedTab ?? tabData.length - 1) < tabData.length ? selectedTab : tabData.length - 1,\r\n );\r\n const [currentColor, setCurrentColor] = useState(color);\r\n\r\n const colorPalettes = palettes ?? defaultPalettes.palettes;\r\n\r\n const handleTabChange = (newTabIndex: number) => {\r\n setTabIndex(newTabIndex);\r\n onTabChange && onTabChange(newTabIndex);\r\n };\r\n\r\n const handleColorChange = (color: any) => {\r\n const hex = color.hex ? color.hex : color;\r\n\r\n setCurrentColor(hex);\r\n onColorChange(hex);\r\n };\r\n\r\n useEffect(() => {\r\n const prependCurrentPaletteTab = () => {\r\n const currentPaletteTab = {\r\n id: 'tab-0',\r\n title: 'Current Palette',\r\n paletteName: currentPalette ?? '',\r\n content: 'Current color palette',\r\n };\r\n\r\n const isNotStandardPalette = currentPalette && currentPalette !== 'Standard';\r\n const hasNoCurrentPaletteTab = !tabData.map((s) => s.id).includes(currentPaletteTab.id);\r\n const canPrependTab =\r\n isNotStandardPalette &&\r\n hasNoCurrentPaletteTab &&\r\n Object.keys(colorPalettes).includes(currentPalette);\r\n if (canPrependTab) {\r\n setTabData([currentPaletteTab, ...defaultTabData]);\r\n setTabIndex(selectedTab ?? 0);\r\n }\r\n };\r\n\r\n prependCurrentPaletteTab();\r\n }, [currentPalette, colorPalettes, selectedTab, tabData]);\r\n\r\n useEffect(() => {\r\n // Default to last tab if selected tab exceeds number of tabs\r\n setTabIndex((selectedTab ?? tabData.length - 1) < tabData.length ? selectedTab : tabData.length - 1);\r\n }, [selectedTab, tabData]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {tabData.map((tab: any, index: number) => (\r\n \r\n handleTabChange(index)}\r\n title={tab.title}\r\n >\r\n {tab.title || 'tab'}\r\n \r\n \r\n ))}\r\n \r\n \r\n {tabData.map((tab: any, index: number) => (\r\n \r\n {tab.title === 'Custom' ? (\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\nColorPicker.displayName = 'ColorPicker';\r\n","import * as React from 'react';\r\nimport { useCallback, useEffect, useState } from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { useClickOutside } from '../../../ModernScripts/Spotlight/Hooks/useClickOutside';\r\nimport { ColorPicker, ColorPickerProps } from '../color-picker/color-picker';\r\n\r\nexport interface SwatchProps {\r\n color: string;\r\n width?: number;\r\n height?: number;\r\n}\r\n\r\nexport interface ColorPickerPopoverProps extends ColorPickerProps {\r\n isOpen?: boolean;\r\n width?: number;\r\n height?: number;\r\n dataId?: string;\r\n}\r\n\r\nconst Swatch = styled.div`\r\n display: inline-block;\r\n width: ${({ width }) => `${width}px`};\r\n height: ${({ height }) => `${height}px`};\r\n border: 1px solid #ededed;\r\n border-radius: 3px;\r\n background-color: ${(props) => props.color};\r\n cursor: pointer;\r\n`;\r\n\r\nconst StyledColorPicker = styled(ColorPicker)`\r\n position: absolute;\r\n z-index: 1000;\r\n`;\r\n\r\nconst StyledColorPickerPopover = styled.div``;\r\n\r\nexport const ColorPickerPopover = React.forwardRef(\r\n (\r\n {\r\n color,\r\n currentPalette,\r\n palettes,\r\n isOpen = false,\r\n width = 50,\r\n height = 25,\r\n dataId = 'color-picker-popover',\r\n onColorChange,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const colorPickerRef = React.useRef();\r\n const swatchRef = React.useRef();\r\n const [showColorPicker, setShowColorPicker] = useState(isOpen);\r\n const [currentColor, setCurrentColor] = useState(color);\r\n const [currentTab, setCurrentTab] = useState(0);\r\n\r\n const toggleColorPicker = useCallback(\r\n () => setShowColorPicker(!showColorPicker),\r\n [showColorPicker, setShowColorPicker],\r\n );\r\n\r\n const handleColorChange = (color: any) => {\r\n const hex = color.hex ? color.hex : color;\r\n\r\n setCurrentColor(hex);\r\n onColorChange(hex);\r\n };\r\n\r\n useEffect(() => {\r\n function handleKeyListener(e: any) {\r\n const canCloseOnEsc = showColorPicker && e.key === 'Escape';\r\n canCloseOnEsc && setShowColorPicker(false);\r\n\r\n const isSwatchInFocus = document.activeElement === swatchRef.current;\r\n const canToggleOnSpace = isSwatchInFocus && e.key === ' ';\r\n canToggleOnSpace && toggleColorPicker();\r\n }\r\n\r\n document.addEventListener('keydown', handleKeyListener);\r\n\r\n return function cleanupKeyListener() {\r\n document.removeEventListener('keydown', handleKeyListener);\r\n };\r\n }, [showColorPicker, setShowColorPicker, toggleColorPicker]);\r\n\r\n useEffect(() => {\r\n setCurrentColor(color);\r\n }, [color]);\r\n\r\n useClickOutside(colorPickerRef, toggleColorPicker);\r\n\r\n return (\r\n \r\n \r\n {showColorPicker && (\r\n \r\n )}\r\n \r\n );\r\n },\r\n);\r\n\r\nColorPickerPopover.displayName = 'ColorPickerPopover';\r\n","import * as React from 'react';\r\n\r\nimport { transparentize } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT, FONT_SIZE, SPACING } from '../../../../packages/constants';\r\nimport { ChevronRight } from '../../../../packages/icons';\r\n\r\ninterface ItemGroupProps {\r\n onChange?: (e: any) => void;\r\n itemData?: any;\r\n hideFavourites?: boolean;\r\n hideRecent?: boolean;\r\n checked?: any;\r\n assistAccess?: boolean;\r\n}\r\n\r\ninterface DataTestIdProps {\r\n dataTestId: string;\r\n}\r\n\r\ninterface StyledGroupItemProps {\r\n children: React.ReactNode;\r\n checked: boolean;\r\n radioValue: string;\r\n assistAccess?: boolean;\r\n dataTestId?: string;\r\n onChange?: (e: any) => void;\r\n onClick?: (e: any) => void;\r\n ref?: any;\r\n}\r\n\r\ninterface StyledInputProps {\r\n assistAccess?: boolean;\r\n ref?: any;\r\n rel?: string;\r\n autoComplete?: string;\r\n dataTestId?: string;\r\n}\r\n\r\ninterface StyledLabelTextProps {\r\n checked?: boolean;\r\n assistAccess?: boolean;\r\n}\r\n\r\nexport const ItemGroupScroller = styled.div`\r\n margin-top: ${SPACING.LARGE};\r\n height: 100%;\r\n overflow: auto;\r\n padding-top: 5px;\r\n padding-left: ${SPACING.SMALL};\r\n`;\r\n\r\nexport const ItemGroupTitle = styled.h3`\r\n font-weight: 700;\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n color: #6f788a;\r\n padding: 5px;\r\n margin: 0;\r\n margin-top: ${SPACING.MEDIUM};\r\n`;\r\n\r\nexport const StyledListItem = styled.li`\r\n list-style-type: none;\r\n margin: 0;\r\n padding: 0;\r\n line-height: 1;\r\n`;\r\n\r\nexport const StyledList = styled.ul`\r\n list-style-type: none;\r\n margin: 0 0 ${SPACING.MEDIUM};\r\n padding: 0;\r\n\r\n ${StyledListItem} {\r\n margin-right: ${SPACING.MEDIUM};\r\n\r\n ${StyledListItem} {\r\n margin-right: 0;\r\n }\r\n }\r\n`;\r\n\r\nconst ItemGroupWrapperPaddingTop = `26px`;\r\n\r\nexport const ItemGroupWrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n background-color: ${COLOR.MODAL.MODAL_PANEL_ACCENT};\r\n padding: ${ItemGroupWrapperPaddingTop} 0 0 ${SPACING.SMALL};\r\n width: 240px;\r\n height: auto;\r\n\r\n > ${StyledList}:first-child {\r\n margin-left: ${SPACING.SMALL};\r\n }\r\n`;\r\n\r\nexport const HorizontalRule = styled.hr`\r\n border: 0;\r\n border-bottom: 1px solid #b2bccd;\r\n width: calc(100% - ${SPACING.X_LARGE});\r\n margin: ${SPACING.MEDIUM} ${SPACING.X_LARGE} ${SPACING.MEDIUM} ${SPACING.SMALL};\r\n`;\r\n\r\nconst StyledLabel = styled.label`\r\n background-color: ${COLOR.MODAL.MODAL_PANEL_ACCENT};\r\n position: relative;\r\n`;\r\n\r\nconst StyledLabelText = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n background-color: ${(props: StyledLabelTextProps): string => (props.checked ? COLOR.PRIMARY.WHITE : 'transparent')};\r\n color: ${COLOR.BRAND.REPORTING};\r\n padding: 5px;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n background-color: ${(props: StyledLabelTextProps): string =>\r\n props.checked ? COLOR.PRIMARY.WHITE : transparentize('0.5', COLOR.PRIMARY.WHITE)};\r\n }\r\n`;\r\n\r\nconst StyledChevron = styled(ChevronRight)`\r\n fill: #b2bccd;\r\n height: 12px;\r\n width: 12px;\r\n opacity: ${(props: StyledLabelTextProps): number => (props.checked ? 1 : 0)};\r\n`;\r\n\r\nconst Radio = styled.input.attrs(({ dataTestId }) => ({\r\n 'data-test-id': dataTestId,\r\n}))``;\r\n\r\nconst StyledRadio = styled(Radio)`\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n opacity: 0;\r\n z-index: -1;\r\n\r\n &:focus ~ ${StyledLabelText} {\r\n outline: ${(props: StyledInputProps): string => (props.assistAccess ? '1px dotted #212121' : '0')};\r\n outline: ${(props: StyledInputProps): string =>\r\n props.assistAccess ? '5px auto -webkit-focus-ring-color' : '0'};\r\n }\r\n`;\r\n\r\nexport const StyledGroupItem = React.forwardRef(\r\n ({ children, onChange, onClick, radioValue, checked, assistAccess, dataTestId, ...props }, ref) => (\r\n \r\n \r\n \r\n \r\n {children} \r\n \r\n \r\n \r\n ),\r\n);\r\nStyledGroupItem.displayName = 'StyledGroupItem';\r\n\r\nconst ItemGroup = React.forwardRef(\r\n ({ onChange, itemData, hideFavourites, hideRecent, checked, assistAccess, ...props }, ref) => (\r\n \r\n \r\n \r\n Create a new item\r\n \r\n {!hideRecent && (\r\n \r\n Recent\r\n \r\n )}\r\n {!hideFavourites && (\r\n \r\n Favourites\r\n \r\n )}\r\n \r\n\r\n \r\n \r\n \r\n \r\n All...\r\n \r\n {itemData &&\r\n Object.keys(itemData).map((groupTitle) => {\r\n return (\r\n \r\n {itemData[groupTitle].title}\r\n \r\n {Object.keys(itemData[groupTitle].groups).map((groupItem) => {\r\n return (\r\n \r\n {itemData[groupTitle].groups[groupItem].title}\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\nItemGroup.displayName = 'ItemGroup';\r\n\r\nexport default ItemGroup;\r\n","import * as React from 'react';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPEED, Theme } from '../../packages/constants';\r\n\r\nexport interface GalleryIconProps {\r\n iconName: string;\r\n iconLabel: string;\r\n id: string;\r\n onChange: (e: any) => void;\r\n isSelected: boolean;\r\n assistAccess?: boolean;\r\n dataTestId?: string;\r\n imagePath?: string;\r\n onKeyDown?: (e: any) => void;\r\n themeProvider?: {};\r\n hasModernStyles?: boolean;\r\n}\r\n\r\ninterface StyledIconProps {\r\n iconName: string;\r\n imagePath?: string;\r\n assistAccess?: boolean;\r\n}\r\n\r\ninterface StyledLabelProps {\r\n dataTestId?: string;\r\n}\r\n\r\ninterface StyledInputProps {\r\n assistAccess?: boolean;\r\n ref?: any;\r\n rel?: string;\r\n autoComplete?: string;\r\n hasModernStyles?: boolean;\r\n theme?: Theme;\r\n}\r\n\r\ninterface DataTestIdProps {\r\n dataTestId: string;\r\n}\r\n\r\nconst GalleryIconWrapper = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n margin-bottom: 100px;\r\n width: 33%;\r\n flex-basis: 33%;\r\n`;\r\n\r\nconst Label = styled.label.attrs(({ dataTestId }) => ({\r\n 'data-test-id': dataTestId,\r\n}))``;\r\n\r\nconst StyledLabel = styled(Label)`\r\n width: 100px;\r\n height: 100px;\r\n display: block;\r\n position: relative;\r\n cursor: pointer;\r\n`;\r\n\r\nexport const StyledIcon = styled.div`\r\n box-sizing: border-box;\r\n margin-bottom: 12px;\r\n border: 3px solid ${COLOR.MAIN.ICON_BACKGROUND};\r\n border-radius: 15px;\r\n width: 100px;\r\n height: 100px;\r\n background-image: url(${(props) => `${props.imagePath ?? ''}${props.iconName}.svg`});\r\n background-color: ${COLOR.MAIN.ICON_BACKGROUND};\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n background-size: 120% auto;\r\n box-shadow: 2px 2px 4px rgba(4, 37, 91, 0.15);\r\n transition: box-shadow ${SPEED.TRANSITION};\r\n`;\r\n\r\nconst StyledLabelText = styled.div`\r\n box-sizing: border-box;\r\n position: relative;\r\n max-height: 80px;\r\n overflow: hidden;\r\n color: black;\r\n border-radius: 3px;\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-family: sans-serif;\r\n line-height: ${FONT_SIZE.LARGE};\r\n padding: 5px 2px;\r\n text-align: center;\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n box-shadow: 0 0 15px rgba(4, 37, 91, 0);\r\n`;\r\n\r\nconst StyledFadeDiv = styled.div`\r\n position: absolute;\r\n top: 60px;\r\n left: 0px;\r\n right: 0px;\r\n height: 20px;\r\n background: linear-gradient(0deg, #ffffff, rgba(255, 255, 255, 0));\r\n`;\r\n\r\nconst StyledRadio = styled.input`\r\n position: absolute;\r\n opacity: 0;\r\n top: 0;\r\n left: 0;\r\n z-index: -1;\r\n\r\n &:hover {\r\n ~ ${StyledIcon} {\r\n box-shadow: 0 0 15px rgba(4, 37, 91, 0.3);\r\n }\r\n }\r\n\r\n &:focus ~ ${StyledIcon} {\r\n outline: ${(props) => (props.assistAccess ? '1px dotted #212121' : '0')};\r\n outline: ${(props) => (props.assistAccess ? '5px auto -webkit-focus-ring-color' : '0')};\r\n }\r\n\r\n &:checked {\r\n ~ ${StyledIcon} {\r\n border-color: ${(props: StyledInputProps) =>\r\n props.hasModernStyles && props.theme?.mainBorder ? props.theme.mainBorder : COLOR.BRAND.REPORTING};\r\n box-shadow: 0 0 15px rgba(4, 37, 91, 0.3);\r\n }\r\n\r\n ${(props) =>\r\n !props.hasModernStyles &&\r\n `\r\n ~ ${StyledLabelText} {\r\n color: white;\r\n background-color: ${COLOR.BRAND.REPORTING};\r\n box-shadow: 0 0 15px rgba(4, 37, 91, 0.3);\r\n }\r\n \r\n ~ ${StyledLabelText} ${StyledFadeDiv} {\r\n background: linear-gradient(0deg, ${COLOR.BRAND.REPORTING}, rgba(255, 255, 255, 0));\r\n }\r\n `}\r\n }\r\n`;\r\n\r\nexport const StyledGalleryIconWrapper = styled.div`\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-content: flex-start;\r\n overflow: auto;\r\n padding: 15px 0 0 0;\r\n height: calc(100% - 95px);\r\n position: relative;\r\n`;\r\n\r\nexport const GalleryIcon = React.forwardRef(\r\n (\r\n {\r\n iconName,\r\n iconLabel,\r\n id,\r\n onChange,\r\n onKeyDown,\r\n assistAccess,\r\n isSelected,\r\n dataTestId,\r\n imagePath,\r\n hasModernStyles,\r\n },\r\n ref,\r\n ) => (\r\n \r\n \r\n \r\n \r\n \r\n {iconLabel}\r\n \r\n \r\n \r\n \r\n ),\r\n);\r\nGalleryIcon.displayName = 'GalleryIcon';\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT, FONT_SIZE, SPEED } from '../../packages/constants';\r\nimport { camelToKebab } from '../../../Scripts/Spotlight/Components/CamelToKebab';\r\nimport ItemGroup, {\r\n ItemGroupWrapper,\r\n StyledList,\r\n StyledListItem,\r\n ItemGroupTitle,\r\n HorizontalRule,\r\n StyledGroupItem,\r\n ItemGroupScroller,\r\n} from './atoms/item-group/item-group';\r\nimport { GalleryIcon, StyledGalleryIconWrapper } from '../gallery-icon/gallery-icon';\r\nimport { SearchFilter } from '../search-filter/search-filter';\r\n\r\ninterface Action {\r\n type: TType;\r\n payload?: TPayload;\r\n}\r\n\r\ninterface ItemDataItem {\r\n type: string;\r\n title: string;\r\n description: string;\r\n iconName: string;\r\n id: string;\r\n selected?: boolean;\r\n}\r\n\r\ninterface ItemDataGroup {\r\n title: string;\r\n id: string;\r\n items: ItemDataItem[];\r\n}\r\n\r\ninterface ItemDataSection {\r\n section: 'main' | 'top';\r\n title: string;\r\n groups: ItemDataGroup[];\r\n}\r\n\r\nexport type ItemData = ItemDataSection[];\r\n\r\nexport enum GalleryBrowserActionTypes {\r\n SELECTED_ITEM = 'SELECTED_ITEM',\r\n}\r\n\r\nexport interface GalleryBrowserProps {\r\n itemData: ItemDataSection[];\r\n /**\r\n * The name of the items being displayed, e.g. Chart or Page.\r\n */\r\n itemNoun: string;\r\n /**\r\n * The plural of the items being displayed, e.g. Charts or Pages.\r\n * Used for empty states / error messages etc.\r\n */\r\n itemNounPlural: string;\r\n assistAccess: boolean;\r\n hideFavourites?: boolean;\r\n hideRecent?: boolean;\r\n imagePath?: string;\r\n themeProvider?: {};\r\n galleryWidth?: string;\r\n /**\r\n * External function to dispatch actions to\r\n */\r\n actionHandler?: (action: Action) => Promise;\r\n hasModernStyles?: boolean;\r\n}\r\n\r\ninterface StyledContentProps {\r\n imagePath?: string;\r\n width?: string;\r\n}\r\n\r\nconst StyledItemGroup = styled(ItemGroup)``;\r\n\r\nconst StyledContent = styled.div`\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n height: 100%;\r\n transition: all ${SPEED.TRANSITION} ease-in;\r\n width: ${(props: StyledContentProps) => (props.width ? props.width : '660px')};\r\n`;\r\n\r\nconst StyledGalleryBrowser = styled.div`\r\n display: flex;\r\n height: 100%;\r\n width: auto;\r\n\r\n ${StyledItemGroup} {\r\n max-width: 240px;\r\n width: 240px;\r\n min-width: 240px;\r\n }\r\n`;\r\n\r\nconst StyledFilterWrapper = styled.div`\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n padding: 22px;\r\n`;\r\n\r\nconst StyledMessage = styled.p`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.MEDIUM};\r\n text-align: center;\r\n color: ${COLOR.MAIN.FORM_FIELD_DARK};\r\n padding-top: 18vh;\r\n width: 100%;\r\n`;\r\n\r\n// loop through all of the items and build itemsArray\r\nconst getAllItems = (itemData: ItemData) => {\r\n const arr = [];\r\n for (let ii = 0; ii < itemData.length; ii++) {\r\n for (let jj = 0; jj < itemData[ii].groups.length; jj++) {\r\n for (let kk = 0; kk < itemData[ii].groups[jj].items.length; kk++) {\r\n const item = itemData[ii].groups[jj].items[kk];\r\n arr.push(item);\r\n }\r\n }\r\n }\r\n return arr;\r\n};\r\n\r\nconst getSelectedItem = (itemData: ItemData) => {\r\n for (let ii = 0; ii < itemData.length; ii++) {\r\n for (let jj = 0; jj < itemData[ii].groups.length; jj++) {\r\n for (let kk = 0; kk < itemData[ii].groups[jj].items.length; kk++) {\r\n if (itemData[ii].groups[jj].items[kk].selected) {\r\n return itemData[ii].groups[jj].items[kk];\r\n }\r\n }\r\n }\r\n }\r\n return {};\r\n};\r\n\r\nexport const GalleryBrowser = React.forwardRef(\r\n (\r\n {\r\n itemData,\r\n itemNoun,\r\n itemNounPlural,\r\n hideFavourites,\r\n hideRecent,\r\n assistAccess,\r\n imagePath,\r\n galleryWidth,\r\n actionHandler,\r\n hasModernStyles,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [groupItemChecked, setGroupItemChecked] = React.useState('all');\r\n const [filterValue, setFilterValue] = React.useState('');\r\n const [itemList, setItemList] = React.useState([]);\r\n const [ignoreScrollIntoView, setIgnoreScrollIntoView] = React.useState(false);\r\n // tslint:disable-next-line:no-null-keyword\r\n const filterInputRef = React.useRef(null);\r\n // tslint:disable-next-line:no-null-keyword\r\n const itemWrapperRef = React.useRef(null);\r\n\r\n // create a flat array of all the items\r\n const itemsArray = React.useMemo(() => {\r\n return getAllItems(itemData);\r\n }, [itemData]);\r\n\r\n const [filteredItems, setFilteredItems] = React.useState([]);\r\n\r\n // loop through all the items and unselect each\r\n const unselectAllItems = () => {\r\n for (let ii = 0; ii < itemData.length; ii++) {\r\n for (let jj = 0; jj < itemData[ii].groups.length; jj++) {\r\n for (let kk = 0; kk < itemData[ii].groups[jj].items.length; kk++) {\r\n const item = itemData[ii].groups[jj].items[kk];\r\n item.selected = false;\r\n }\r\n }\r\n }\r\n };\r\n\r\n // handle click when user clicks on item icon\r\n const handleGalleryIconChange = async (item: any) => {\r\n unselectAllItems();\r\n item.selected = true;\r\n setIgnoreScrollIntoView(true);\r\n if (typeof actionHandler !== 'function') {\r\n return;\r\n }\r\n // call function to dispatch the selected item state to parent\r\n await actionHandler({\r\n type: GalleryBrowserActionTypes.SELECTED_ITEM,\r\n payload: { itemId: item.id },\r\n });\r\n };\r\n\r\n // handle click when user clicks on left column group name\r\n const handleGroupItemClick = (event: any, items?: any) => {\r\n setIgnoreScrollIntoView(true);\r\n setGroupItemChecked(event.target.value);\r\n if (event.target.value !== 'all') {\r\n setFilterValue('');\r\n }\r\n setItemList(items);\r\n // @ts-ignore\r\n itemWrapperRef.current.scrollTop = 0;\r\n };\r\n\r\n // handle change when user starts typing in the search-filter\r\n const handleFilterChange = (event: any) => {\r\n setFilterValue(event.target.value.toLowerCase());\r\n setGroupItemChecked('all');\r\n };\r\n\r\n // handle click when user clicks the clear search-filter button\r\n const handleFilterClearButton = () => {\r\n setFilterValue('');\r\n // @ts-ignore\r\n filterInputRef.current.focus();\r\n };\r\n\r\n React.useEffect(() => {\r\n // search-filter the itemsArray data based on the filters input\r\n const filteredData = itemsArray.filter((item: any) => {\r\n return Object.keys(item).some(() => item.title.toLowerCase().includes(filterValue));\r\n });\r\n setFilteredItems(filteredData);\r\n }, [itemsArray, filterValue]);\r\n\r\n // scroll to selected item\r\n React.useEffect(() => {\r\n const temporaryItemSelected = getSelectedItem(itemData);\r\n const selectedItem = document.querySelector(`input[value=\"${(temporaryItemSelected as any).id}\"]`);\r\n // only scroll the view if there is a preselected item, dont scroll if user clicks an item\r\n if (selectedItem && !ignoreScrollIntoView) {\r\n setTimeout(() => {\r\n selectedItem.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'nearest' });\r\n }, 200);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps -- run only once\r\n }, []);\r\n\r\n const topNavItems = itemData.filter((item) => item.section === 'top');\r\n const mainNavItems = itemData.filter((item) => item.section === 'main');\r\n\r\n return (\r\n \r\n \r\n \r\n {topNavItems &&\r\n Object.entries(topNavItems).map(([, section]) => {\r\n return (\r\n \r\n {Object.entries(section.groups).map(([, group]) => {\r\n return (\r\n handleGroupItemClick(e, group.items)}\r\n radioValue={group.id}\r\n key={`top-group-item-${group.id}`}\r\n checked={groupItemChecked === group.id}\r\n assistAccess={assistAccess}\r\n dataTestId={`gallery-item-group-name__${group.id}`}\r\n >\r\n {group.title}\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 handleGroupItemClick(e)}\r\n radioValue={'all'}\r\n checked={groupItemChecked === 'all'}\r\n assistAccess={assistAccess}\r\n dataTestId={'gallery-item-group-name__all'}\r\n >\r\n All {itemNounPlural}...\r\n \r\n {mainNavItems &&\r\n Object.entries(mainNavItems).map(([, section]) => {\r\n return (\r\n \r\n {{section.title}}\r\n \r\n {Object.entries(section.groups).map(([, group]) => {\r\n return (\r\n handleGroupItemClick(e, group.items)}\r\n radioValue={group.id}\r\n key={`main-group-item-${group.id}`}\r\n checked={groupItemChecked === group.id}\r\n assistAccess={assistAccess}\r\n dataTestId={`gallery-item-group-name__${group.id}`}\r\n >\r\n {group.title}\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 {groupItemChecked === 'all' ||\r\n groupItemChecked === 'create-a-new-item' ||\r\n groupItemChecked === 'recent' ||\r\n groupItemChecked === 'favourites' ? (\r\n filteredItems.length >= 1 ? (\r\n filteredItems.map((item: any) => {\r\n return (\r\n handleGalleryIconChange(item)}\r\n key={item.id}\r\n assistAccess={assistAccess}\r\n isSelected={item.selected}\r\n dataTestId={`modal-add-${itemNoun}__label-${camelToKebab(item.title)}`}\r\n hasModernStyles={hasModernStyles}\r\n />\r\n );\r\n })\r\n ) : (\r\n \r\n {groupItemChecked === 'recent'\r\n ? `No ${itemNounPlural} have been used recently`\r\n : groupItemChecked === 'favourites'\r\n ? 'No favourites have been added'\r\n : `No ${itemNounPlural} found matching \"${filterValue}\"`}\r\n \r\n )\r\n ) : (\r\n itemList.map((item: any) => {\r\n return (\r\n handleGalleryIconChange(item)}\r\n key={item.id}\r\n assistAccess={assistAccess}\r\n isSelected={item.selected}\r\n dataTestId={`modal-add-${itemNoun}__label-${camelToKebab(item.title)}`}\r\n hasModernStyles={hasModernStyles}\r\n />\r\n );\r\n })\r\n )}\r\n \r\n \r\n \r\n );\r\n },\r\n);\r\nGalleryBrowser.displayName = 'GalleryBrowser';\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, FONT, SPACING } from '../../packages/constants';\r\nimport Star from '../../packages/icons/star';\r\nimport { StyledIcon as GalleryIcon } from '../gallery-icon/gallery-icon';\r\n\r\nexport interface GalleryItemInfoProps {\r\n onClick?: (e: any) => void;\r\n iconName: string;\r\n title: string;\r\n description: string;\r\n imagePath?: string;\r\n reportCodes?: string[];\r\n hideFavourites?: boolean;\r\n isFavourite?: boolean;\r\n assistAccess: boolean;\r\n themeProvider?: {};\r\n}\r\n\r\nexport interface StyledButtonProps {\r\n assistAccess: boolean;\r\n}\r\n\r\nconst StyledGalleryItemInfo = styled.div`\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n box-shadow: inset 7px 0 9px -7px rgba(0, 0, 0, 0.15);\r\n width: 100%;\r\n height: 100%;\r\n overflow: auto;\r\n`;\r\n\r\nconst StyledGalleryItemInfoInner = styled.div`\r\n box-sizing: border-box;\r\n display: flex;\r\n flex-direction: column;\r\n padding: 23px ${SPACING.X_LARGE} ${SPACING.X_LARGE};\r\n max-width: 240px;\r\n width: 100%;\r\n height: 100%;\r\n overflow: auto;\r\n`;\r\n\r\nconst StyledGalleryIcon = styled(GalleryIcon)`\r\n margin-left: 44px;\r\n`;\r\n\r\nconst StyledGalleryItemTitle = styled.h2`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.LARGE};\r\n font-weight: 500;\r\n line-height: ${FONT_SIZE.X_LARGE};\r\n text-align: center;\r\n margin-bottom: 18px;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n width: 100%;\r\n`;\r\n\r\nconst StyledDescription = styled.p`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n line-height: ${FONT_SIZE.LARGE};\r\n margin-bottom: ${SPACING.X_LARGE};\r\n align-self: flex-start;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n width: 100%;\r\n`;\r\n\r\nconst StyledHeading = styled.h3`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 700;\r\n align-self: flex-start;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n margin-top: ${SPACING.X_SMALL};\r\n margin-bottom: ${SPACING.X_SMALL};\r\n width: 100%;\r\n`;\r\n\r\nconst StyledList = styled.ul`\r\n display: flex;\r\n flex-wrap: wrap;\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n margin: 0;\r\n padding: 0;\r\n list-style-type: none;\r\n align-self: flex-start;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n width: 100%;\r\n`;\r\n\r\nconst StyledStar = styled(Star)`\r\n width: 20px;\r\n margin-right: ${SPACING.MEDIUM};\r\n`;\r\n\r\nconst StyledFavouriteButton = styled.button`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n align-self: flex-start;\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n color: ${COLOR.MAIN.DARK_GREY};\r\n border: 0;\r\n padding: ${SPACING.SMALL} ${SPACING.SMALL} ${SPACING.SMALL} 0;\r\n margin-top: auto;\r\n cursor: pointer;\r\n\r\n &:focus {\r\n outline: ${(props: StyledButtonProps): string => (props.assistAccess ? '1px dotted #212121' : '0')};\r\n outline: ${(props: StyledButtonProps): string =>\r\n props.assistAccess ? '5px auto -webkit-focus-ring-color' : '0'};\r\n }\r\n\r\n &:hover ${StyledStar} {\r\n fill: ${COLOR.PRIMARY.YELLOW};\r\n }\r\n`;\r\n\r\nconst StyledListItem = styled.li`\r\n font-family: ${FONT.OPEN_SANS};\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n font-weight: 400;\r\n line-height: ${FONT_SIZE.LARGE};\r\n align-self: flex-start;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n margin-right: ${SPACING.X_SMALL};\r\n\r\n &::after {\r\n content: ',';\r\n }\r\n\r\n &:last-child {\r\n margin-right: 0;\r\n\r\n &::after {\r\n content: '';\r\n }\r\n }\r\n`;\r\n\r\nexport const GalleryItemInfo = React.forwardRef(\r\n (\r\n {\r\n iconName,\r\n title,\r\n description,\r\n reportCodes,\r\n isFavourite = false,\r\n hideFavourites,\r\n assistAccess,\r\n imagePath,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [favourite, setFavourite] = React.useState(isFavourite);\r\n const handleFavourite = () => {\r\n setFavourite(!favourite);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {title}\r\n {description}\r\n {reportCodes && reportCodes.length > 0 && (\r\n <>\r\n Report codes\r\n \r\n {reportCodes.map((code: string, index: number) => (\r\n {code}\r\n ))}\r\n \r\n \r\n )}\r\n {!hideFavourites && (\r\n \r\n \r\n {favourite ? 'Remove from' : 'Add to'} favourites\r\n \r\n )}\r\n \r\n \r\n );\r\n },\r\n);\r\nGalleryItemInfo.displayName = 'GalleryItemInfo';\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { THEME } from '../../packages/constants';\r\nimport { StyledModal, StyledModalTitleBar, StyledModalContent, StyledButton, StyledButtonGroup } from '../modal/modal';\r\nimport type { ModalProps } from '../modal/modal';\r\n\r\nconst StyledModalConfirm = styled(StyledModal)`\r\n width: ${(props: ModalProps) => (props.width ? props.width : '500px')};\r\n height: ${(props: ModalProps) => (props.height ? props.height : 'auto')};\r\n`;\r\n\r\nexport const ModalConfirm = React.forwardRef(\r\n (\r\n {\r\n children,\r\n buttons,\r\n title,\r\n cancelText,\r\n primaryText,\r\n handleCancelButton,\r\n handlePrimaryButton,\r\n width,\r\n height,\r\n focusOnButton,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const cancelButtonRef = React.useRef(null);\r\n const primaryButtonRef = React.useRef(null);\r\n\r\n useEffect(() => {\r\n if (focusOnButton === 'cancel' && cancelButtonRef.current) cancelButtonRef.current.focus();\r\n if (focusOnButton === 'primary' && primaryButtonRef.current) primaryButtonRef.current.focus();\r\n });\r\n\r\n return (\r\n \r\n {title}\r\n {children}\r\n {buttons ? (\r\n buttons\r\n ) : (\r\n \r\n \r\n {primaryText || 'Ok'}\r\n \r\n \r\n {cancelText || 'Cancel'}\r\n \r\n \r\n )}\r\n \r\n );\r\n },\r\n);\r\nModalConfirm.displayName = 'ModalConfirm';\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPACING, SPACING_SCALE, SPEED } from '../../packages/constants';\r\n\r\nexport interface BreadcrumbsProps {\r\n children: React.ReactNode;\r\n}\r\n\r\ninterface BreadcrumbsLinkProps {\r\n children: React.ReactNode;\r\n dataId: string;\r\n href: string;\r\n target?: '_blank' | '_self' | '_parent' | '_top';\r\n theme?: any;\r\n}\r\n\r\nconst StyledBreadcrumbs = styled.div`\r\n margin-bottom: ${SPACING_SCALE * 8}px;\r\n padding-top: ${SPACING_SCALE * 3}px;\r\n`;\r\n\r\nconst StyledBreadcrumbsList = styled.ol`\r\n display: flex;\r\n flex-wrap: wrap;\r\n`;\r\n\r\nconst StyledBreadcrumbsListItem = styled.li`\r\n display: flex;\r\n margin-right: ${SPACING.MEDIUM};\r\n padding-right: ${SPACING.SMALL};\r\n position: relative;\r\n font-size: ${FONT_SIZE.SMALL};\r\n color: ${COLOR.MAIN.DARK_GREY};\r\n\r\n &::before,\r\n &::after {\r\n left: 100%;\r\n top: 50%;\r\n border: solid transparent;\r\n content: '';\r\n height: 0;\r\n width: 0;\r\n position: absolute;\r\n pointer-events: none;\r\n }\r\n\r\n &::after {\r\n border-color: transparent;\r\n border-left-color: ${COLOR.PRIMARY.WHITE};\r\n border-width: 5px;\r\n margin-top: -5px;\r\n }\r\n\r\n &::before {\r\n border-color: transparent;\r\n border-left-color: ${COLOR.MAIN.FORM_FIELD_DARK};\r\n border-width: 6px;\r\n margin-top: -6px;\r\n }\r\n\r\n &:last-child {\r\n &::before,\r\n &::after {\r\n display: none;\r\n }\r\n }\r\n`;\r\n\r\nconst StyledBreadcrumbsLink = styled.a.attrs(({ dataId }) => ({\r\n 'data-test-id': dataId,\r\n}))`\r\n transition: border-bottom-color ${SPEED.TRANSITION};\r\n color: ${(props) => (props.theme ? props.theme.main : COLOR.BRAND.REPORTING) || COLOR.BRAND.REPORTING};\r\n text-decoration: none;\r\n padding-bottom: 1px;\r\n border-bottom: 1px solid transparent;\r\n\r\n &:hover {\r\n border-bottom: 1px solid ${(props) => (props.theme ? props.theme.main : COLOR.BRAND.REPORTING)};\r\n }\r\n`;\r\n\r\nexport const Breadcrumbs = ({ children, ...props }: BreadcrumbsProps) => (\r\n \r\n \r\n {\r\n //\r\n // @ts-ignore\r\n children.length && children.map ? (\r\n // @ts-ignore\r\n children.map(\r\n (child: any, i: number) =>\r\n child &&\r\n (child.length || child.props) && (\r\n {child}\r\n ),\r\n )\r\n ) : (\r\n {children}\r\n )\r\n }\r\n \r\n \r\n);\r\n\r\nexport const BreadcrumbsLink = ({ children, ...props }: BreadcrumbsLinkProps) => (\r\n {children}\r\n);\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled from 'styled-components';\r\nimport { ANIMATION, COLOR, FONT_SIZE, SPACING_SCALE, SPEED } from '../../packages/constants';\r\n\r\nexport interface StepProcessProps {\r\n /**\r\n * Step data\r\n */\r\n steps: any;\r\n /**\r\n * Index of current step\r\n */\r\n currentStep: number;\r\n}\r\n\r\ninterface StepItemsProps {\r\n childLength: number;\r\n active: boolean;\r\n complete: boolean;\r\n}\r\n\r\nconst roundelSize = 22;\r\n\r\nconst StyledStepProcess = styled.ol`\r\n margin: 0 auto ${SPACING_SCALE * 6}px;\r\n width: 100%;\r\n min-height: 64px;\r\n overflow: hidden;\r\n`;\r\n\r\nconst StyledLabel = styled.p`\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n display: inline-block;\r\n max-width: 50%;\r\n`;\r\n\r\nconst StyledStepItem = styled.li`\r\n list-style-type: none;\r\n width: ${(props: StepItemsProps): string => `${100 / props.childLength}%`};\r\n float: left;\r\n font-size: ${FONT_SIZE.SMALL};\r\n position: relative;\r\n text-align: center;\r\n text-transform: uppercase;\r\n color: ${(props) =>\r\n props.active || props.complete ? props.theme.main || COLOR.BRAND.REPORTING : COLOR.MAIN.FORM_FIELD_DARK};\r\n box-sizing: border-box;\r\n\r\n &::before {\r\n width: ${roundelSize}px;\r\n height: ${roundelSize}px;\r\n content: '';\r\n counter-increment: step;\r\n line-height: ${roundelSize}px;\r\n border-width: 2px;\r\n border-style: solid;\r\n border-color: ${(props) =>\r\n props.active || props.complete ? props.theme.main || COLOR.BRAND.REPORTING : COLOR.MAIN.FORM_FIELD_DARK};\r\n display: block;\r\n text-align: center;\r\n margin: 0 auto 10px;\r\n border-radius: 50%;\r\n background-color: ${(props) =>\r\n props.complete ? props.theme.main || COLOR.BRAND.REPORTING : COLOR.PRIMARY.WHITE};\r\n box-sizing: border-box;\r\n animation: ${SPEED.TRANSITION} ${ANIMATION.FADE_IN} linear forwards;\r\n position: relative;\r\n z-index: 1;\r\n }\r\n\r\n &::after {\r\n background-color: ${(props) => (props.complete ? props.theme.main || COLOR.BRAND.REPORTING : 'transparent')};\r\n width: 100%;\r\n height: 2px;\r\n content: '';\r\n position: absolute;\r\n border-top: ${(props: StepItemsProps): string =>\r\n props.complete ? '2px solid transparent' : `2px dashed ${COLOR.MAIN.FORM_FIELD_DARK}`};\r\n top: ${roundelSize / 2 - 1}px;\r\n right: -50%;\r\n z-index: 0;\r\n box-sizing: border-box;\r\n }\r\n\r\n &:last-child {\r\n &::after {\r\n content: none;\r\n }\r\n }\r\n\r\n ${StyledLabel} {\r\n animation: ${SPEED.TRANSITION} ${ANIMATION.FADE_IN} linear forwards;\r\n }\r\n`;\r\n\r\nexport const StepProcess = ({ steps, currentStep, ...props }: StepProcessProps) => (\r\n \r\n {steps.map(\r\n (step: any, i: number) =>\r\n step &&\r\n !step.skipStep && (\r\n !item.skipStep).length}\r\n key={step.key || i}\r\n >\r\n {step.title}\r\n \r\n ),\r\n )}\r\n \r\n);\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, LINE_HEIGHT, SPEED, TEXT_RELATIVE_MARGIN } from '../../packages/constants';\r\n\r\nexport enum Justify {\r\n Left = 'left',\r\n Right = 'right',\r\n Center = 'center',\r\n}\r\n\r\nexport interface TextProps extends React.HTMLAttributes {\r\n children: React.ReactNode;\r\n heading?: number;\r\n /**\r\n * Pass element type e.g. 'h1', 'p'\r\n * (Note: Font sizes for heading levels haven't been defined in constants yet)\r\n */\r\n as?: any;\r\n /**\r\n * Colour of text\r\n */\r\n color?: string;\r\n /**\r\n * Text justification\r\n */\r\n justify?: Justify;\r\n /**\r\n * Font-size with unit\r\n */\r\n fontSize?: string;\r\n /**\r\n * Line-height\r\n */\r\n lineHeight?: string;\r\n /**\r\n * Margin bottom with unit\r\n */\r\n marginBottom?: string;\r\n /**\r\n * Indent 28px (SPACING.XX_LARGE)\r\n */\r\n indent?: string;\r\n}\r\n\r\n// TODO: heading styles\r\nconst StyledText = styled.p`\r\n color: ${(props: TextProps) => (props.color ? props.color : COLOR.PRIMARY.BLACK)};\r\n text-align: ${(props: TextProps) =>\r\n props.justify === 'left'\r\n ? 'left'\r\n : props.justify === 'center'\r\n ? 'center'\r\n : props.justify === 'right'\r\n ? 'right'\r\n : 'left'};\r\n font-size: ${(props: TextProps) => props.fontSize || FONT_SIZE.MEDIUM};\r\n line-height: ${(props: TextProps) => props.lineHeight || LINE_HEIGHT.LARGE};\r\n margin-bottom: ${(props: TextProps) => props.marginBottom || TEXT_RELATIVE_MARGIN.MEDIUM};\r\n padding: 0 0 0 ${(props: TextProps) => (props.indent ? props.indent : '0')};\r\n`;\r\n\r\nexport const TextLink = styled.a`\r\n transition: border-bottom-color ${SPEED.TRANSITION};\r\n color: ${COLOR.BRAND.REPORTING};\r\n text-decoration: none;\r\n padding-bottom: 1px;\r\n border-bottom: 1px solid transparent;\r\n\r\n &:hover {\r\n border-bottom: 1px solid ${COLOR.BRAND.REPORTING};\r\n }\r\n`;\r\n\r\nexport const Text = ({ children, indent, heading, fontSize, ...props }: TextProps) => (\r\n \r\n {children}\r\n \r\n);\r\n","import * as React from 'react';\r\n\r\nimport { lighten } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, SPACING } from '../../packages/constants';\r\n\r\nexport interface HelperModalProps {\r\n children: React.ReactNode;\r\n dataId: string;\r\n modalContent: React.ReactNode;\r\n position?: 'top' | 'bottom' | undefined;\r\n isOpen?: boolean;\r\n inline?: boolean;\r\n width?: number;\r\n}\r\n\r\ninterface ModalContentProps {\r\n position?: 'top' | 'bottom' | undefined;\r\n width?: number;\r\n}\r\n\r\ninterface StyledHelperModal {\r\n inline?: boolean;\r\n}\r\n\r\nconst StyledHelperModal = styled.div`\r\n display: ${(props: StyledHelperModal): string => (props.inline ? 'inline' : '')};\r\n position: relative;\r\n width: 15px;\r\n height: 15px;\r\n`;\r\n\r\nconst ModalContent = styled.div`\r\n position: absolute;\r\n top: ${(props) => (props.position === 'top' ? 'auto' : '32px')};\r\n bottom: ${(props) => (props.position === 'top' ? '32px' : 'auto')};\r\n left: calc(50% - ((${(props) => `${props.width}px`} / 2) + ${SPACING.LARGE}));\r\n width: ${(props) => `${props.width}px`};\r\n padding: ${SPACING.LARGE};\r\n border: 1px solid ${COLOR.PRIMARY.BLACK};\r\n background-color: #fff;\r\n z-index: 99999;\r\n white-space: normal;\r\n\r\n &::before {\r\n border-top: 1px solid black;\r\n border-right: 1px solid black;\r\n background-color: white;\r\n width: 20px;\r\n height: 20px;\r\n content: '';\r\n position: absolute;\r\n top: ${(props: ModalContentProps): string => (props.position === 'top' ? 'auto' : '-11px')};\r\n bottom: ${(props: ModalContentProps): string => (props.position === 'top' ? '-11px' : 'auto')};\r\n left: calc(50% - 10px);\r\n transform: rotate(${(props: ModalContentProps): string => (props.position === 'top' ? '135deg' : '-45deg')});\r\n }\r\n`;\r\n\r\nconst StyledButton = styled.button`\r\n border: 0;\r\n background-color: transparent;\r\n padding: 0;\r\n margin: 0;\r\n vertical-align: middle;\r\n`;\r\n\r\nconst StyledQuestionMark = styled.i`\r\n background: ${COLOR.MAIN.PRIMARY};\r\n color: ${COLOR.PRIMARY.WHITE};\r\n cursor: pointer;\r\n font-weight: 700;\r\n font-style: normal;\r\n border-radius: 10px;\r\n text-align: center;\r\n line-height: 15px;\r\n display: inline-block;\r\n transform: translateY(-2px);\r\n width: 15px;\r\n height: 15px;\r\n vertical-align: middle;\r\n\r\n &:hover {\r\n background: ${lighten(0.2, COLOR.MAIN.PRIMARY)};\r\n }\r\n`;\r\n\r\nexport const QuestionMark = () => ?;\r\n\r\nexport const HelperModal = ({\r\n children,\r\n position = 'top',\r\n modalContent,\r\n inline,\r\n width = 420,\r\n dataId,\r\n isOpen = false,\r\n ...props\r\n}: HelperModalProps) => {\r\n const elementRef = React.useRef(null);\r\n const [showContent, setShowContent] = React.useState(isOpen);\r\n const toggleContent = () => setShowContent(!showContent);\r\n\r\n React.useEffect(() => {\r\n function handleKeyListener(e: any) {\r\n if ((showContent && e.key === 'Escape') || (showContent && e.key === 'Tab')) {\r\n setShowContent(false);\r\n }\r\n }\r\n\r\n function handleClick(e: any) {\r\n if (showContent && elementRef.current && !elementRef.current.contains(e.target)) {\r\n setShowContent(false);\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', handleKeyListener);\r\n document.addEventListener('click', handleClick);\r\n\r\n return function cleanupKeyListener() {\r\n document.removeEventListener('keydown', handleKeyListener);\r\n document.removeEventListener('click', handleClick);\r\n };\r\n }, [showContent, setShowContent]);\r\n\r\n return (\r\n \r\n \r\n {children}\r\n \r\n {showContent && (\r\n <>\r\n \r\n {modalContent}\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\n\r\nimport { darken, transparentize } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, RADIUS, SPACING } from '../../packages/constants';\r\nimport { HelperModal, QuestionMark } from '../helper-modal';\r\n\r\nexport interface TextInputProps {\r\n dataId: string;\r\n label: string;\r\n id: string;\r\n name: string;\r\n autofocus?: boolean;\r\n defaultValue?: string;\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n hasHelper?: boolean;\r\n helperContent?: React.ReactNode;\r\n numeralsOnly?: boolean;\r\n placeholder?: string;\r\n validationMessage?: string;\r\n value?: string;\r\n onChange?: (e: any) => void;\r\n onBlur?: (e: any) => void;\r\n maxLength?: number;\r\n minLength?: number;\r\n thinLabel?: boolean;\r\n className?: string;\r\n}\r\n\r\ninterface StyledTextLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n thinLabel?: boolean;\r\n}\r\n\r\ninterface StyledValidationMessageProps {\r\n invalid?: boolean;\r\n}\r\n\r\nconst wrapperStyles = `\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst Wrapper = styled.label`\r\n ${wrapperStyles}\r\n`;\r\n\r\nconst WrapperHasHelper = styled.div`\r\n ${wrapperStyles}\r\n`;\r\n\r\nconst StyledLabelWrapper = styled.div`\r\n display: inline-flex;\r\n`;\r\n\r\nconst StyledTextLabel = styled.span`\r\n display: block;\r\n padding-bottom: ${SPACING.XX_SMALL};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledLabelHasHelper = styled.label`\r\n display: inline-block;\r\n margin-right: ${SPACING.X_SMALL};\r\n padding-bottom: ${SPACING.XX_SMALL};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledInput = styled.input`\r\n background-color: ${(props: StyledTextLabelProps): string =>\r\n props.disabled ? darken('0.1', COLOR.PRIMARY.WHITE) : COLOR.PRIMARY.WHITE};\r\n color: ${(props: StyledTextLabelProps): string =>\r\n props.disabled ? transparentize('0.5', COLOR.PRIMARY.BLACK) : COLOR.PRIMARY.BLACK};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n padding: ${SPACING.SMALL};\r\n border-width: 1px;\r\n border-style: solid;\r\n border-color: ${(props: StyledTextLabelProps): string =>\r\n props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.FORM_FIELD};\r\n border-radius: ${RADIUS.DEFAULT};\r\n\r\n &::placeholder {\r\n opacity: 0.65;\r\n }\r\n`;\r\n\r\nconst StyledValidationMessage = styled.div`\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n line-height: ${FONT_SIZE.SMALL};\r\n color: ${(props: StyledValidationMessageProps): string =>\r\n props.invalid ? COLOR.PRIMARY.RED : COLOR.PRIMARY.BLACK};\r\n padding-top: ${SPACING.SMALL};\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n`;\r\n\r\nexport const TextInput = React.forwardRef(\r\n (\r\n {\r\n dataId,\r\n label,\r\n id,\r\n hasHelper,\r\n helperContent,\r\n placeholder,\r\n name,\r\n autofocus,\r\n defaultValue,\r\n disabled,\r\n invalid,\r\n validationMessage,\r\n onChange,\r\n onBlur,\r\n maxLength,\r\n minLength,\r\n thinLabel,\r\n value,\r\n className,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return hasHelper ? (\r\n \r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {validationMessage && (\r\n {validationMessage}\r\n )}\r\n \r\n ) : (\r\n \r\n \r\n {label}\r\n \r\n \r\n {validationMessage && (\r\n {validationMessage}\r\n )}\r\n \r\n );\r\n },\r\n);\r\nTextInput.displayName = 'TextInput';\r\n","import * as React from 'react';\r\n\r\nimport { darken, transparentize } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, RADIUS, SPACING } from '../../packages/constants';\r\nimport { HelperModal, QuestionMark } from '../helper-modal';\r\n\r\nexport interface TextFieldInlineProps {\r\n dataId: string;\r\n label: string;\r\n id: string;\r\n name: string;\r\n autofocus?: boolean;\r\n defaultValue?: string;\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n hasHelper?: boolean;\r\n helperContent?: React.ReactNode;\r\n placeholder?: string;\r\n validationMessage?: string;\r\n value?: string;\r\n onChange?: (e: any) => void;\r\n onBlur?: (e: any) => void;\r\n maxLength?: number;\r\n minLength?: number;\r\n thinLabel?: boolean;\r\n className?: string;\r\n labelWidth?: string;\r\n labelAlignment?: 'start' | 'center' | 'end' | undefined;\r\n}\r\n\r\ninterface StyledTextLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n thinLabel?: boolean;\r\n}\r\n\r\ninterface WrapperProps {\r\n labelWidth?: string;\r\n}\r\n\r\ninterface StyledLabelWrapperProps {\r\n labelAlignment: 'start' | 'center' | 'end';\r\n}\r\n\r\ninterface StyledValidationMessageProps {\r\n invalid?: boolean;\r\n}\r\n\r\nconst Wrapper = styled.div`\r\n display: grid;\r\n grid-template-columns:\r\n ${(props: WrapperProps): string => (props.labelWidth ? props.labelWidth : 'auto')}\r\n minmax(0, 1fr);\r\n`;\r\n\r\nconst StyledLabelWrapper = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n align-items: ${(props: StyledLabelWrapperProps): string => props.labelAlignment};\r\n flex-direction: column;\r\n padding-right: ${SPACING.LARGE};\r\n`;\r\n\r\nconst StyledTextLabel = styled.label`\r\n margin-right: ${SPACING.X_SMALL};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.LARGE};\r\n max-width: 100%;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledLabelHasHelper = styled.div`\r\n display: inline-flex;\r\n max-width: 100%;\r\n`;\r\n\r\nconst StyledInput = styled.input`\r\n background-color: ${(props: StyledTextLabelProps): string =>\r\n props.disabled ? darken('0.1', COLOR.PRIMARY.WHITE) : COLOR.PRIMARY.WHITE};\r\n color: ${(props: StyledTextLabelProps): string =>\r\n props.disabled ? transparentize('0.5', COLOR.PRIMARY.BLACK) : COLOR.PRIMARY.BLACK};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n padding: ${SPACING.SMALL};\r\n border-width: 1px;\r\n border-style: solid;\r\n border-color: ${(props: StyledTextLabelProps): string =>\r\n props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.FORM_FIELD};\r\n border-radius: ${RADIUS.DEFAULT};\r\n\r\n &::placeholder {\r\n opacity: 0.65;\r\n }\r\n`;\r\n\r\nconst StyledValidationMessage = styled.div`\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n line-height: ${FONT_SIZE.SMALL};\r\n color: ${(props: StyledValidationMessageProps): string =>\r\n props.invalid ? COLOR.PRIMARY.RED : COLOR.PRIMARY.BLACK};\r\n padding-top: ${SPACING.SMALL};\r\n grid-area: 2 / 2;\r\n`;\r\n\r\nexport const TextFieldInline = React.forwardRef(\r\n (\r\n {\r\n dataId,\r\n label,\r\n id,\r\n hasHelper,\r\n helperContent,\r\n placeholder,\r\n name,\r\n autofocus,\r\n defaultValue,\r\n disabled,\r\n invalid,\r\n onChange,\r\n onBlur,\r\n maxLength,\r\n minLength,\r\n thinLabel,\r\n value,\r\n className,\r\n validationMessage,\r\n labelWidth,\r\n labelAlignment = 'start',\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return (\r\n \r\n \r\n {hasHelper ? (\r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n {label}\r\n \r\n )}\r\n \r\n \r\n {validationMessage && (\r\n {validationMessage}\r\n )}\r\n \r\n );\r\n },\r\n);\r\n\r\nTextFieldInline.displayName = 'TextFieldInline';\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPACING } from '../../packages/constants';\r\nimport { HelperModal, QuestionMark } from '../helper-modal';\r\n\r\nexport interface RadioInputProps {\r\n dataId: string;\r\n id: string;\r\n label: string;\r\n name: string;\r\n value: string;\r\n autofocus?: boolean;\r\n checked?: boolean;\r\n disabled?: boolean;\r\n hasHelper?: boolean;\r\n helperContent?: React.ReactNode;\r\n inline?: boolean;\r\n invalid?: boolean;\r\n onChange?: (e: any) => void;\r\n thinLabel?: boolean;\r\n validationMessage?: string;\r\n}\r\n\r\ninterface StyledTextLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n inline?: boolean;\r\n thinLabel?: boolean;\r\n}\r\n\r\ninterface WrapperLabelProps {\r\n inline?: boolean;\r\n}\r\n\r\nconst Wrapper = styled.label`\r\n display: inline-flex;\r\n flex-direction: ${(props: WrapperLabelProps): string => (props.inline ? 'row-reverse' : 'column')};\r\n align-items: ${(props: WrapperLabelProps): string => (props.inline ? 'center' : '')};\r\n justify-content: ${(props: WrapperLabelProps): string => (props.inline ? 'flex-end' : '')};\r\n`;\r\n\r\nconst WrapperHasHelper = styled.div`\r\n display: inline-flex;\r\n flex-direction: ${(props: WrapperLabelProps): string => (props.inline ? 'row-reverse' : 'column')};\r\n align-items: ${(props: WrapperLabelProps): string => (props.inline ? 'center' : '')};\r\n justify-content: ${(props: WrapperLabelProps): string => (props.inline ? 'flex-end' : '')};\r\n`;\r\n\r\nconst StyledLabelWrapper = styled.div`\r\n display: inline-flex;\r\n`;\r\n\r\nconst StyledTextLabel = styled.span`\r\n display: block;\r\n margin-left: ${(props: StyledTextLabelProps): string => (props.inline ? SPACING.X_SMALL : '0')};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledLabelHasHelper = styled.label`\r\n display: inline-block;\r\n margin-right: ${SPACING.X_SMALL};\r\n margin-left: ${(props: StyledTextLabelProps): string => (props.inline ? SPACING.X_SMALL : '0')};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledRadio = styled.input``;\r\n\r\nexport const RadioInput = React.forwardRef(\r\n (\r\n {\r\n onChange,\r\n dataId,\r\n label,\r\n id,\r\n hasHelper,\r\n helperContent,\r\n name,\r\n value,\r\n autofocus,\r\n inline,\r\n thinLabel,\r\n checked,\r\n disabled,\r\n invalid,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return hasHelper ? (\r\n \r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n );\r\n },\r\n);\r\nRadioInput.displayName = 'RadioInput';\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPACING } from '../../packages/constants';\r\nimport { HelperModal, HelperModalProps, QuestionMark } from '../helper-modal';\r\n\r\nexport interface CheckboxInputProps {\r\n /**\r\n * Data-test-id\r\n */\r\n dataId: string;\r\n /**\r\n * Field label\r\n */\r\n label: string;\r\n id: string;\r\n name: string;\r\n /**\r\n * Sets the input to focus on page load\r\n */\r\n autofocus?: boolean;\r\n checked?: boolean;\r\n disabled?: boolean;\r\n /**\r\n * Shows the (?) icon\r\n */\r\n hasHelper?: boolean;\r\n /**\r\n * Content for the helper icon\r\n */\r\n helperContent?: React.ReactNode;\r\n helperProps?: HelperModalProps;\r\n inline?: boolean;\r\n invalid?: boolean;\r\n onChange?: (e: any) => void;\r\n /**\r\n * Makes the label thin\r\n */\r\n thinLabel?: boolean;\r\n className?: string;\r\n labelMaxWidth?: string;\r\n labelOverflow?: string;\r\n labelTextOverflow?: string;\r\n}\r\n\r\ninterface StyledTextLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n inline?: boolean;\r\n thinLabel?: boolean;\r\n labelMaxWidth?: string;\r\n labelOverflow?: string;\r\n labelTextOverflow?: string;\r\n}\r\n\r\ninterface WrapperLabelProps {\r\n inline?: boolean;\r\n}\r\n\r\nconst Wrapper = styled.label`\r\n &&& {\r\n display: inline-flex;\r\n flex-direction: ${(props: WrapperLabelProps): string => (props.inline ? 'row-reverse' : 'column')};\r\n align-items: ${(props: WrapperLabelProps): string => (props.inline ? 'center' : '')};\r\n justify-content: ${(props: WrapperLabelProps): string => (props.inline ? 'flex-end' : '')};\r\n }\r\n`;\r\n\r\nconst WrapperHasHelper = styled.div`\r\n display: inline-flex;\r\n flex-direction: ${(props: WrapperLabelProps): string => (props.inline ? 'row-reverse' : 'column')};\r\n align-items: ${(props: WrapperLabelProps): string => (props.inline ? 'center' : '')};\r\n justify-content: ${(props: WrapperLabelProps): string => (props.inline ? 'flex-end' : '')};\r\n`;\r\n\r\nconst StyledLabelWrapper = styled.div`\r\n display: inline-flex;\r\n`;\r\n\r\nconst StyledTextLabel = styled.span`\r\n display: block;\r\n margin-left: ${(props: StyledTextLabelProps): string => (props.inline ? SPACING.X_SMALL : '0')};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n max-width: ${(props: StyledTextLabelProps): string => (props.labelMaxWidth ? props.labelMaxWidth : 'none')};\r\n overflow: ${(props: StyledTextLabelProps): string => (props.labelOverflow ? props.labelOverflow : 'visible')};\r\n text-overflow: ${(props: StyledTextLabelProps): string =>\r\n props.labelTextOverflow ? props.labelTextOverflow : 'clip'};\r\n`;\r\n\r\nconst StyledLabelHasHelper = styled.label`\r\n && {\r\n display: inline-block;\r\n margin-right: ${SPACING.X_SMALL};\r\n margin-left: ${(props: StyledTextLabelProps): string => (props.inline ? SPACING.X_SMALL : '0')};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n max-width: ${(props: StyledTextLabelProps): string => (props.labelMaxWidth ? props.labelMaxWidth : 'none')};\r\n overflow: ${(props: StyledTextLabelProps): string => (props.labelOverflow ? props.labelOverflow : 'visible')};\r\n text-overflow: ${(props: StyledTextLabelProps): string =>\r\n props.labelTextOverflow ? props.labelTextOverflow : 'clip'};\r\n }\r\n`;\r\n\r\nconst StyledCheckbox = styled.input``;\r\n\r\nexport const CheckboxInput = React.forwardRef(\r\n (\r\n {\r\n onChange,\r\n dataId,\r\n label,\r\n id,\r\n hasHelper,\r\n helperContent,\r\n helperProps,\r\n name,\r\n autofocus,\r\n inline,\r\n thinLabel,\r\n checked,\r\n disabled,\r\n invalid,\r\n className,\r\n labelMaxWidth,\r\n labelOverflow,\r\n labelTextOverflow,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return hasHelper ? (\r\n \r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n );\r\n },\r\n);\r\nCheckboxInput.displayName = 'CheckboxInput';\r\n","export enum TrackingSettingsTheme {\r\n Default = 'DEFAULT',\r\n DataGrid = 'DATAGRID',\r\n}\r\n\r\nexport enum TrackingItemStatus {\r\n Active = 'ACTIVE',\r\n Archived = 'ARCHIVED',\r\n}\r\n\r\nexport enum DataSourceNames {\r\n Xero = 'XERO',\r\n Quickbooks = 'QUICKBOOKS',\r\n QuickBooksDesktop = 'QUICKBOOKSDESKTOP',\r\n MyobAccountRight = 'MYOBACCOUNTRIGHT',\r\n MyobAccountRightDesktop = 'MYOBACCOUNTRIGHTDESKTOP',\r\n Sage50Desktop = 'SAGE50DESKTOP',\r\n}\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, SPACING } from '../../packages/constants';\r\nimport { ChevronRight } from '../../packages/icons';\r\nimport { TrackingSettingsTheme } from '../tracking-settings/tracking-settings-enums';\r\n\r\nexport interface TreeCollapseProps {\r\n parentProp: React.ReactNode;\r\n children: React.ReactNode;\r\n dataId: string;\r\n parentClickable?: boolean;\r\n expand?: boolean;\r\n theme?: TrackingSettingsTheme;\r\n hideSplit?: boolean;\r\n}\r\n\r\ninterface StyledChevronProps {\r\n isExpanded: boolean | undefined;\r\n}\r\n\r\ninterface StyledButtonProps {\r\n dataId: string;\r\n parentClickable?: boolean;\r\n}\r\n\r\ninterface StyledListProps {\r\n hideSplit?: boolean;\r\n}\r\n\r\nconst StyledTreeCollapse = styled.ul``;\r\n\r\nconst StyledListItem = styled.li`\r\n position: relative;\r\n\r\n &::after {\r\n border-left: 1px solid ${COLOR.LEGACY.DATAGRID_BORDER};\r\n width: 1px;\r\n height: 100%;\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n right: calc(145px + ${SPACING.MEDIUM});\r\n display: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid && !props.hideSplit ? 'block' : 'none')};\r\n z-index: 2;\r\n }\r\n`;\r\n\r\nconst TreeParent = styled.div`\r\n display: flex;\r\n align-items: center;\r\n position: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? 'sticky' : undefined)};\r\n top: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? 0 : undefined)};\r\n z-index: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? 1 : undefined)};\r\n background-color: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? COLOR.LEGACY.DATAGRID_TH_BG : undefined};\r\n border-bottom: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? `1px solid ${COLOR.LEGACY.DATAGRID_BORDER}` : 0};\r\n border-top: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? `1px solid ${COLOR.LEGACY.DATAGRID_BORDER}` : 0};\r\n padding-left: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? `${SPACING.MEDIUM}` : 0)};\r\n`;\r\n\r\nconst TreeChildren = styled.div`\r\n margin-top: ${SPACING.MEDIUM};\r\n`;\r\n\r\nconst StyledButton = styled.button.attrs(({ dataId }) => ({\r\n 'data-test-id': dataId,\r\n}))`\r\n border: 0;\r\n padding: 0;\r\n background-color: transparent;\r\n display: ${(props: StyledButtonProps): string => (props.parentClickable ? 'flex' : 'inline-block')};\r\n align-items: ${(props: StyledButtonProps): string => (props.parentClickable ? 'center' : '')};\r\n cursor: pointer;\r\n`;\r\n\r\nconst StyledChevron = styled(ChevronRight)`\r\n width: 12px;\r\n height: 12px;\r\n fill: ${COLOR.MAIN.LABEL_TEXT};\r\n margin-right: ${SPACING.X_SMALL};\r\n transform: ${(props: StyledChevronProps): string => (props.isExpanded ? 'rotate(90deg)' : 'rotate(0)')};\r\n`;\r\n\r\nexport const TreeCollapse = ({\r\n parentClickable,\r\n expand,\r\n parentProp,\r\n dataId,\r\n children,\r\n theme,\r\n hideSplit,\r\n ...props\r\n}: TreeCollapseProps) => {\r\n const [isExpanded, setIsExpanded] = React.useState(true);\r\n\r\n React.useEffect(() => {\r\n setIsExpanded(expand || false);\r\n }, [expand]);\r\n\r\n return (\r\n \r\n \r\n {parentClickable ? (\r\n \r\n setIsExpanded(!isExpanded)}\r\n aria-label={`${isExpanded ? 'Collapse' : 'Expand'} tree`}\r\n >\r\n \r\n {parentProp}\r\n \r\n \r\n ) : (\r\n \r\n setIsExpanded(!isExpanded)}\r\n aria-label={`${isExpanded ? 'Collapse' : 'Expand'} tree`}\r\n >\r\n \r\n \r\n {parentProp}\r\n \r\n )}\r\n {isExpanded && {children}}\r\n \r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\n\r\nimport { darken, transparentize } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, FONT_STACK, RADIUS, SPACING } from '../../packages/constants';\r\nimport { HelperModal, QuestionMark } from '../helper-modal';\r\n\r\ninterface StyledSelectField {\r\n invalid?: boolean;\r\n emphasize?: boolean;\r\n hasLegacyStyles?: boolean;\r\n width?: string;\r\n minWidth?: string;\r\n maxWidth?: string;\r\n thinLabel?: boolean;\r\n}\r\n\r\nexport interface SelectFieldProps {\r\n dataId: string;\r\n id: string;\r\n name: string;\r\n options: SelectFieldOptions;\r\n value?: string;\r\n onChange?: (e: any) => void;\r\n disabled?: boolean;\r\n hasHelper?: boolean;\r\n hasLegacyStyles?: boolean;\r\n helperContent?: React.ReactNode;\r\n invalid?: boolean;\r\n label?: string;\r\n placeholder?: string;\r\n emphasize?: boolean;\r\n width?: string;\r\n minWidth?: string;\r\n maxWidth?: string;\r\n thinLabel?: boolean;\r\n}\r\n\r\nexport type SelectFieldOptions = SelectFieldOptionsItem[];\r\n\r\ninterface SelectFieldOptionsItem {\r\n name: string;\r\n value: string;\r\n}\r\n\r\ninterface StyledTextLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n emphasize?: boolean;\r\n hasLegacyStyles?: boolean;\r\n thinLabel?: boolean;\r\n}\r\n\r\ninterface InputWrapperProps {\r\n width?: string;\r\n minWidth?: string;\r\n maxWidth?: string;\r\n disabled?: boolean;\r\n emphasize?: boolean;\r\n}\r\n\r\nconst Wrapper = styled.label`\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst InputWrapper = styled.div`\r\n display: inline-flex;\r\n position: relative;\r\n margin-right: auto;\r\n width: ${(props) => (props.width ? props.width : 'auto')};\r\n min-width: ${(props) => (props.minWidth ? props.minWidth : 0)};\r\n max-width: ${(props) => (props.maxWidth ? props.maxWidth : 'none')};\r\n\r\n &::after {\r\n width: 0;\r\n height: 0;\r\n border-left: 6px solid transparent;\r\n border-right: 6px solid transparent;\r\n border-top: 6px solid\r\n ${(props) => (props.emphasize ? COLOR.DROPDOWN.DROPDOWN_ARROW_DARK : COLOR.DROPDOWN.DROPDOWN_ARROW)};\r\n content: '';\r\n position: absolute;\r\n bottom: ${SPACING.MEDIUM};\r\n right: ${SPACING.SMALL};\r\n opacity: ${(props) => (props.disabled ? '0.7' : '1')};\r\n pointer-events: none;\r\n }\r\n\r\n &:hover {\r\n &::after {\r\n border-top-color: ${(props: InputWrapperProps): string => (props.disabled ? '' : COLOR.BRAND.REPORTING)};\r\n }\r\n }\r\n`;\r\n\r\nconst WrapperHasHelper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n position: relative;\r\n`;\r\n\r\nconst StyledLabelWrapper = styled.div`\r\n display: inline-flex;\r\n`;\r\n\r\nconst StyledTextLabel = styled.span`\r\n display: block;\r\n padding-bottom: ${(props) => (props.hasLegacyStyles ? 0 : SPACING.XX_SMALL)};\r\n font-family: ${FONT_STACK};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n font-size: ${(props) => (props.hasLegacyStyles ? FONT_SIZE.X_SMALL : FONT_SIZE.SMALL)};\r\n line-height: ${(props) => (props.hasLegacyStyles ? 'normal' : FONT_SIZE.MEDIUM)};\r\n margin-bottom: ${(props) => (props.hasLegacyStyles ? '8px' : 0)};\r\n color: ${(props) =>\r\n props.invalid ? COLOR.PRIMARY.RED : props.hasLegacyStyles ? COLOR.PRIMARY.BLACK : COLOR.MAIN.LABEL_TEXT};\r\n opacity: ${(props) => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledLabelHasHelper = styled.label`\r\n display: inline-block;\r\n padding-bottom: ${(props) => (props.hasLegacyStyles ? 0 : SPACING.XX_SMALL)};\r\n font-family: ${FONT_STACK};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n font-size: ${(props) => (props.hasLegacyStyles ? FONT_SIZE.X_SMALL : FONT_SIZE.SMALL)};\r\n line-height: ${(props) => (props.hasLegacyStyles ? 'normal' : FONT_SIZE.MEDIUM)};\r\n margin-bottom: ${(props) => (props.hasLegacyStyles ? '8px' : 0)};\r\n margin-right: ${SPACING.X_SMALL};\r\n color: ${(props) =>\r\n props.invalid ? COLOR.PRIMARY.RED : props.hasLegacyStyles ? COLOR.PRIMARY.BLACK : COLOR.MAIN.LABEL_TEXT};\r\n opacity: ${(props) => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledSelectField = styled.select`\r\n background-color: ${(props) => (props.disabled ? darken('0.1', COLOR.PRIMARY.WHITE) : COLOR.PRIMARY.WHITE)};\r\n color: ${(props) => (props.disabled ? transparentize('0.5', COLOR.PRIMARY.BLACK) : COLOR.PRIMARY.BLACK)};\r\n font-family: ${FONT_STACK};\r\n font-size: ${(props) => (props.hasLegacyStyles ? '13px' : FONT_SIZE.SMALL)};\r\n line-height: ${(props) => (props.hasLegacyStyles ? '18px' : FONT_SIZE.MEDIUM)};\r\n padding: ${SPACING.SMALL} ${SPACING.X_LARGE} ${SPACING.SMALL} ${SPACING.SMALL};\r\n border-width: 1px;\r\n border-style: solid;\r\n border-color: ${(props) =>\r\n props.invalid ? COLOR.PRIMARY.RED : props.emphasize ? COLOR.MAIN.FORM_FIELD_DARK : COLOR.MAIN.FORM_FIELD};\r\n border-radius: ${(props) => (props.hasLegacyStyles ? 0 : RADIUS.DEFAULT)};\r\n appearance: none;\r\n margin: 0;\r\n width: 100%;\r\n\r\n &:focus {\r\n box-shadow: 0 0 1px 3px rgba(59, 153, 252, 0.7);\r\n outline: none;\r\n }\r\n`;\r\n\r\nconst StyledOption = styled.option`\r\n font-weight: normal;\r\n`;\r\n\r\nexport const SelectInput = React.forwardRef(\r\n (\r\n {\r\n dataId,\r\n id,\r\n invalid,\r\n hasLegacyStyles,\r\n disabled,\r\n onChange,\r\n emphasize,\r\n width,\r\n minWidth,\r\n maxWidth,\r\n value,\r\n placeholder,\r\n options,\r\n ...props\r\n },\r\n ref,\r\n ) => (\r\n \r\n \r\n {placeholder && {placeholder}}\r\n {options.map((item: any, i: number) => (\r\n \r\n {item.name}\r\n \r\n ))}\r\n \r\n \r\n ),\r\n);\r\nSelectInput.displayName = 'SelectInput';\r\n\r\nexport const SelectField = React.forwardRef(\r\n (\r\n {\r\n dataId,\r\n id,\r\n disabled,\r\n value,\r\n onChange,\r\n placeholder = '',\r\n invalid,\r\n label,\r\n options,\r\n hasHelper,\r\n hasLegacyStyles,\r\n helperContent,\r\n emphasize,\r\n thinLabel,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return hasHelper ? (\r\n \r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n {label && (\r\n \r\n {label}\r\n \r\n )}\r\n \r\n \r\n );\r\n },\r\n);\r\nSelectField.displayName = 'SelectField';\r\n","import * as React from 'react';\r\nimport { useCallback, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { transparentize } from 'polished';\r\n\r\nimport { TreeCollapse } from '../../../tree-collapse';\r\nimport { CheckboxInput } from '../../../checkbox-input';\r\nimport { SelectField, SelectFieldOptions } from '../../../select-field';\r\nimport { COLOR, FONT_SIZE, SPACING, SPEED } from '../../../../packages/constants';\r\nimport { Edit } from '../../../../packages/icons';\r\nimport { TrackingSettingsTheme, TrackingItemStatus } from '../../tracking-settings-enums';\r\nimport { Text } from '../../../text';\r\nimport { DataSignature } from '../DataWrapper/data-wrapper';\r\n\r\ninterface TreeCollapseProps {\r\n handleUpdateData: (e: DataSignature) => void;\r\n handleSaveOnChange?: (data: DataSignature, e?: HTMLInputElement) => void;\r\n organisationId?: string;\r\n category: any;\r\n categoryIndex: number;\r\n data: DataSignature;\r\n dataIndex: number;\r\n dropdownData?: SelectFieldOptions;\r\n dataItem: any;\r\n isTreeExpanded: boolean;\r\n showAbbreviations?: boolean;\r\n editAbbreviationFunction?: (organisationId: string, dataItemId: string, categoryName: string) => void;\r\n theme?: TrackingSettingsTheme;\r\n filterValue?: any;\r\n}\r\n\r\ninterface ListColumnProps {\r\n alignRight?: boolean;\r\n dropdownData?: SelectFieldOptions;\r\n}\r\n\r\ninterface TrackingListItemProps {\r\n isArchived?: boolean;\r\n}\r\n\r\ninterface CategoryTitleWrapperProps {\r\n dropdownData?: SelectFieldOptions;\r\n}\r\n\r\nexport const TrackingList = styled.ul`\r\n padding-bottom: ${SPACING.MEDIUM};\r\n`;\r\n\r\nexport const TrackingListItem = styled.li`\r\n display: flex;\r\n padding: ${SPACING.XX_SMALL} ${SPACING.MEDIUM} ${SPACING.XX_SMALL} 28px;\r\n background-color: ${(props) => (props.isArchived ? COLOR.LEGACY.DATAGRID_ARCHIVED_BG : 'none')};\r\n`;\r\n\r\nconst budgetColumnWidth = '145px';\r\n\r\nexport const TrackingListColumn = styled.div`\r\n width: ${(props) =>\r\n props.dropdownData && props.dropdownData.length > 0\r\n ? props.alignRight\r\n ? `calc(${budgetColumnWidth} + ${SPACING.MEDIUM})`\r\n : `calc(100% - ${budgetColumnWidth} - ${SPACING.MEDIUM})`\r\n : '100%'};\r\n display: flex;\r\n align-items: center;\r\n justify-content: ${(props) => (props.alignRight ? 'flex-end' : 'flex-start')};\r\n`;\r\n\r\nconst StyledTextLabel = styled.span`\r\n &&& {\r\n display: flex;\r\n margin-left: 0;\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: 700;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n opacity: 1;\r\n justify-content: flex-end;\r\n flex-grow: 1;\r\n margin-right: 90px;\r\n }\r\n`;\r\n\r\nconst StyledCheckbox = styled.input`\r\n margin: 2px 6px 2px 4px;\r\n`;\r\n\r\nconst StyledLabel = styled.label`\r\n &&& {\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n display: inline;\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n line-height: ${FONT_SIZE.LARGE};\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n }\r\n`;\r\n\r\nconst EditButton = styled.button`\r\n min-width: 0px;\r\n border: 1px solid transparent;\r\n border-radius: 15px;\r\n background-color: transparent;\r\n padding: ${SPACING.SMALL};\r\n margin-left: ${SPACING.SMALL};\r\n cursor: pointer;\r\n transition: border-color ${SPEED.TRANSITION}, background-color ${SPEED.TRANSITION};\r\n\r\n &:hover {\r\n border-color: ${transparentize(0.8, COLOR.MAIN.LABEL_TEXT)};\r\n background-color: ${transparentize(0.85, COLOR.MAIN.LABEL_TEXT)};\r\n }\r\n`;\r\n\r\nconst StyledEdit = styled(Edit)`\r\n width: 13px;\r\n height: 13px;\r\n fill: ${COLOR.MAIN.LABEL_TEXT};\r\n`;\r\n\r\nconst NoResultsFound = styled(Text)`\r\n margin-bottom: 0;\r\n`;\r\n\r\nconst StyledCheckBoxInput = styled(CheckboxInput)`\r\n min-width: 0px;\r\n`;\r\n\r\nconst CategoryCounter = styled.span`\r\n margin-left: ${SPACING.SMALL};\r\n white-space: nowrap;\r\n min-width: 0px;\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n font-weight: 400;\r\n`;\r\n\r\nconst CategoryTitleWrapper = styled.div`\r\n width: ${(props) => (props.dropdownData && props.dropdownData.length ? '50%' : '100%')};\r\n display: inline-flex;\r\n align-items: center;\r\n`;\r\n\r\nconst regexString = /[^\\w-_]/g;\r\nconst lowerKebab = (value: string): string => value.replace(regexString, '-').toLowerCase();\r\n\r\nconst TreeCollapseWrapper = ({\r\n data,\r\n dataItem,\r\n dataIndex,\r\n category,\r\n categoryIndex,\r\n filterValue,\r\n isTreeExpanded,\r\n handleUpdateData,\r\n handleSaveOnChange,\r\n organisationId,\r\n dropdownData,\r\n showAbbreviations,\r\n editAbbreviationFunction,\r\n theme,\r\n}: TreeCollapseProps) => {\r\n const [itemsSelected, setItemsSelected] = useState(0);\r\n const [totalCount, setTotalCount] = useState(0);\r\n const handleParentCheckbox = (category: any, e: any) => {\r\n let count = 0;\r\n const tempTrackingData = { ...data };\r\n tempTrackingData.dataSources.forEach((dataItem: any, i: number) => {\r\n dataItem.categories.forEach((dataCategory: any, j: number) => {\r\n if (dataCategory === category) {\r\n tempTrackingData.dataSources[i].categories[j].items.forEach((catItem: any) => {\r\n if (\r\n tempTrackingData.hideArchivedTracking &&\r\n catItem.trackingItemStatusCode === TrackingItemStatus.Archived\r\n ) {\r\n return;\r\n } else {\r\n catItem.isShown = e.target.checked;\r\n if (e.target.checked) {\r\n count += 1;\r\n } else {\r\n count = 0;\r\n }\r\n }\r\n });\r\n }\r\n });\r\n });\r\n if (handleSaveOnChange) handleSaveOnChange(tempTrackingData, e.target);\r\n handleUpdateData(tempTrackingData);\r\n setItemsSelected(count);\r\n };\r\n\r\n const checkParentCheckboxState = useCallback(\r\n (hideArchivedTracking: any) => {\r\n let count = 0;\r\n const categoryCheckboxId = `checkbox__${lowerKebab(dataItem.name)}-category-${lowerKebab(category.name)}`;\r\n const categoryCheckboxElement = document.getElementById(categoryCheckboxId);\r\n const checkedValues: boolean[] = [];\r\n\r\n category.items.forEach((item: any) => {\r\n if (hideArchivedTracking && item.trackingItemStatusCode === TrackingItemStatus.Archived) {\r\n return;\r\n } else {\r\n checkedValues.push(item.isShown);\r\n if (item.isShown === true) {\r\n count += 1;\r\n }\r\n }\r\n });\r\n setItemsSelected(count);\r\n\r\n let firstValue = false;\r\n // loop over each array index\r\n for (let i = 0; checkedValues.length > i; i += 1) {\r\n if (i === 0) {\r\n // set first item to check against\r\n firstValue = checkedValues[0];\r\n // next item to check\r\n } else {\r\n // if its different to the firstValue, set indeterminate\r\n if (firstValue !== checkedValues[i]) {\r\n // set indeterminate\r\n if (categoryCheckboxElement) {\r\n // @ts-ignore\r\n categoryCheckboxElement.indeterminate = true;\r\n break;\r\n }\r\n // if first item is the same, set to true\r\n } else if (firstValue && firstValue === checkedValues[i]) {\r\n // set true\r\n if (categoryCheckboxElement) {\r\n // @ts-ignore\r\n categoryCheckboxElement.indeterminate = false;\r\n }\r\n // otherwise set false\r\n } else if (!firstValue && firstValue === checkedValues[i]) {\r\n // set false\r\n if (categoryCheckboxElement) {\r\n // @ts-ignore\r\n categoryCheckboxElement.indeterminate = false;\r\n }\r\n }\r\n }\r\n }\r\n if (categoryCheckboxElement) {\r\n // @ts-ignore\r\n categoryCheckboxElement.checked = count === checkedValues.length;\r\n }\r\n },\r\n [category.items, category.name, dataItem.name],\r\n );\r\n\r\n const countTotal = useCallback(() => {\r\n if (data.hideArchivedTracking) {\r\n let counter = 0;\r\n category.items.forEach((item: any) => {\r\n if (item.trackingItemStatusCode !== TrackingItemStatus.Archived) {\r\n counter += 1;\r\n }\r\n });\r\n setTotalCount(counter);\r\n } else {\r\n setTotalCount(category.items.length);\r\n }\r\n }, [category.items, data.hideArchivedTracking]);\r\n\r\n const handleCheckbox = (event: any, dataIndex: number, categoryIndex: number) => {\r\n const tempTrackingData = { ...data };\r\n tempTrackingData.dataSources[dataIndex].categories[categoryIndex].items.forEach((item: any) => {\r\n if (item.id === event.id) {\r\n item.isShown = !item.isShown;\r\n }\r\n });\r\n\r\n checkParentCheckboxState(data.hideArchivedTracking);\r\n\r\n if (handleSaveOnChange) handleSaveOnChange(tempTrackingData, event.target);\r\n handleUpdateData(tempTrackingData);\r\n };\r\n\r\n const handleBudgetDropdown = (event: any, itemId: string, dataIndex: number, categoryIndex: number) => {\r\n const tempTrackingData = { ...data };\r\n const option = tempTrackingData.dataSources[dataIndex].categories[categoryIndex].items.find(\r\n (x: { id: string }) => x.id === itemId,\r\n );\r\n if (!option) return;\r\n option.budget = event.target.value;\r\n // tslint:disable-next-line:no-unused-expression\r\n if (handleSaveOnChange) handleSaveOnChange(tempTrackingData, event.target);\r\n handleUpdateData(tempTrackingData);\r\n };\r\n\r\n const handleAbbreviationButton = () => {\r\n if (editAbbreviationFunction && organisationId) {\r\n editAbbreviationFunction(organisationId, dataItem.id, category.id);\r\n }\r\n };\r\n\r\n const filteredList = category.items.filter((item: any) => {\r\n if (filterValue.startsWith(' ')) {\r\n return item.name;\r\n } else {\r\n return item.name.toLowerCase().includes(filterValue);\r\n }\r\n });\r\n\r\n React.useEffect(() => {\r\n checkParentCheckboxState(data.hideArchivedTracking);\r\n countTotal();\r\n }, [data, checkParentCheckboxState, countTotal]);\r\n\r\n return (\r\n \r\n \r\n handleParentCheckbox(category, e)}\r\n labelMaxWidth={dropdownData && dropdownData.length > 0 ? '15vw' : 'none'}\r\n labelOverflow={'hidden'}\r\n labelTextOverflow={'ellipsis'}\r\n />\r\n {`(${itemsSelected} of ${totalCount})`}\r\n {showAbbreviations && (\r\n \r\n \r\n \r\n )}\r\n \r\n {dropdownData && dropdownData.length ? (\r\n \r\n Budgets\r\n \r\n ) : null}\r\n \r\n }\r\n >\r\n \r\n {filteredList.length > 0 ? (\r\n filteredList\r\n .sort((a: any, b: any) => (a.name > b.name ? 1 : -1))\r\n .map((item: any) => (\r\n \r\n {item.trackingItemStatusCode === TrackingItemStatus.Archived &&\r\n data.hideArchivedTracking ? null : (\r\n \r\n \r\n handleCheckbox(item, dataIndex, categoryIndex)}\r\n disabled={\r\n item.trackingItemStatusCode === TrackingItemStatus.Archived &&\r\n data.hideArchivedTracking\r\n }\r\n />\r\n \r\n {item.name}\r\n \r\n \r\n {dropdownData && dropdownData.length ? (\r\n \r\n \r\n handleBudgetDropdown(e, item.id, dataIndex, categoryIndex)\r\n }\r\n name={'budget'}\r\n dataId={`dropdown__${lowerKebab(\r\n dataItem.name,\r\n )}-category-${lowerKebab(category.name)}--${lowerKebab(item.name)}`}\r\n options={dropdownData}\r\n placeholder={'-'}\r\n disabled={!item.isShown}\r\n value={item.budget || ''}\r\n emphasize\r\n minWidth={'130px'}\r\n maxWidth={'130px'}\r\n />\r\n \r\n ) : null}\r\n \r\n )}\r\n \r\n ))\r\n ) : (\r\n
  • \r\n \r\n No results found.\r\n \r\n
  • \r\n )}\r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default TreeCollapseWrapper;\r\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nimport * as React from 'react';\r\nimport styled from 'styled-components';\r\n\r\nimport { ButtonAsText } from '../../../button';\r\nimport TreeCollapseWrapper from '../TreeCollapseWrapper/tree-collapse-wrapper';\r\nimport { DataSourceNames, TrackingSettingsTheme } from '../../tracking-settings-enums';\r\nimport { COLOR, FONT_SIZE, SPACING } from '../../../../packages/constants';\r\nimport XeroLogoGenericRound from '../../../../packages/icons/xero-logo-generic-round';\r\nimport QuickbooksLogoGenericRound from '../../../../packages/icons/quickbooks-logo-generic-round';\r\nimport MyobLogoGenericRound from '../../../../packages/icons/myob-logo-generic-round';\r\nimport SageLogoGenericRound from '../../../../packages/icons/sage-logo-generic-round';\r\nimport { SearchFilter } from '../../../search-filter/search-filter';\r\nimport { useEffect, useRef, useState } from 'react';\r\n\r\ninterface CategoryItem {\r\n id: string;\r\n name: string;\r\n isShown: boolean;\r\n budget?: string;\r\n trackingItemStatusCode?: string;\r\n}\r\n\r\ninterface Category {\r\n id: string;\r\n name: string;\r\n items: CategoryItem[];\r\n}\r\n\r\ninterface TrackedBudget {\r\n name: string;\r\n value: string;\r\n}\r\n\r\nexport interface DataSource {\r\n id: string;\r\n dataSourceTypeCode: string;\r\n name: string;\r\n hasTracking?: boolean;\r\n orderPriority?: number;\r\n categories: Category[];\r\n budgets?: TrackedBudget[];\r\n}\r\n\r\ninterface BuildCategoryData {\r\n dataSource: DataSource;\r\n categoryBuilder: (c: Category, i: number) => React.ReactElement;\r\n}\r\n\r\nexport interface DataSignature {\r\n dataSources: DataSource[];\r\n hideArchivedTracking: boolean;\r\n displayUnselectedTrackingItems?: boolean;\r\n}\r\n\r\nexport interface DataWrapperProps {\r\n handleUpdateData: (e: DataSignature) => void;\r\n data: DataSignature;\r\n dataIndex: number;\r\n dataItem: DataSource;\r\n dropdownData?: {\r\n name: string;\r\n value: string;\r\n }[];\r\n editAbbreviationFunction?: any;\r\n handleSaveOnChange?: (data: DataSignature, e?: HTMLInputElement) => void;\r\n organisationId?: string;\r\n showAbbreviations?: boolean;\r\n showExpandCollapseAll?: boolean;\r\n showSearchFilter?: boolean;\r\n theme?: TrackingSettingsTheme;\r\n treesExpanded?: boolean;\r\n}\r\n\r\nconst StyledDataSourceWrapper = styled.div`\r\n margin-bottom: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? 0 : SPACING.XX_LARGE)};\r\n`;\r\n\r\nconst ButtonWrapper = styled.div`\r\n display: flex;\r\n margin-right: ${SPACING.MEDIUM};\r\n`;\r\n\r\nconst StyledDataWrapper = styled.div`\r\n border: 1px solid\r\n ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? COLOR.LEGACY.DATAGRID_BORDER : COLOR.MAIN.MEDIUM_GREY};\r\n border-radius: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '3px 3px 0 0' : 0)};\r\n background-color: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '#fff' : '#f7f9fb')};\r\n padding: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? COLOR.LEGACY.DATAGRID_BORDER : SPACING.MEDIUM};\r\n position: relative;\r\n`;\r\n\r\nconst HeaderWrapper = styled.div`\r\n display: flex;\r\n align-items: center;\r\n padding: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? `8px ${SPACING.MEDIUM}` : `0 0 ${SPACING.MEDIUM}`};\r\n background-image: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? 'linear-gradient(-180deg,#f5f5f5,#f2f1f1)' : 'none'};\r\n box-shadow: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? 'inset 0 1px 0 hsla(0,0%,100%,.5)' : 'none'};\r\n position: relative;\r\n`;\r\n\r\nconst Header = styled.h1`\r\n &&& {\r\n font-size: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '12px' : FONT_SIZE.LARGE)};\r\n line-height: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '16px' : FONT_SIZE.X_LARGE)};\r\n font-weight: 700;\r\n margin: 0 auto 0 ${SPACING.X_SMALL};\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n }\r\n`;\r\n\r\nconst StyledWrapper = styled.div`\r\n padding: ${SPACING.SMALL};\r\n`;\r\n\r\nconst StyledParagraph = styled.p`\r\n &&& {\r\n font-size: ${FONT_SIZE.SMALL};\r\n padding: ${SPACING.SMALL};\r\n line-height: ${FONT_SIZE.LARGE};\r\n white-space: normal;\r\n }\r\n`;\r\n\r\nconst StyledOverflow = styled.div`\r\n overflow: auto;\r\n max-height: 60vh;\r\n`;\r\n\r\nconst StyledSearchFilter = styled(SearchFilter)`\r\n position: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? 'absolute' : 'static')};\r\n top: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '3px' : undefined)};\r\n right: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '3px' : undefined)};\r\n\r\n button {\r\n min-height: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '28px' : undefined)};\r\n }\r\n\r\n svg {\r\n height: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '11px' : undefined)};\r\n width: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '11px' : undefined)};\r\n }\r\n`;\r\n\r\nconst BuildLogo = ({ name }: any) => {\r\n if (name === DataSourceNames.Xero) {\r\n return ;\r\n } else if (name === DataSourceNames.Quickbooks || name === DataSourceNames.QuickBooksDesktop) {\r\n return ; //Replace with a new icon which is wider having the word 'Quickbooks'\r\n } else if (name === DataSourceNames.MyobAccountRight || name === DataSourceNames.MyobAccountRightDesktop) {\r\n return ;\r\n } else if (name === DataSourceNames.Sage50Desktop) {\r\n return ;\r\n } else {\r\n return null;\r\n }\r\n};\r\n\r\nconst BuildContent = ({ dataSource, categoryBuilder }: BuildCategoryData) => {\r\n if (!dataSource.hasTracking) {\r\n return (\r\n \r\n No tracking category data has been imported.\r\n \r\n To import tracking category data, please navigate to the import screen and select the tracking\r\n checkboxes before importing.\r\n \r\n \r\n );\r\n } else if (!dataSource.categories || dataSource.categories.length == 0) {\r\n return (\r\n \r\n \r\n Tracking category data has not been enabled in your accounting system and therefore cannot be\r\n imported into Spotlight.\r\n \r\n \r\n );\r\n } else {\r\n return (\r\n \r\n {dataSource.categories\r\n .sort((a: Category, b: Category) => (a.name > b.name ? 1 : -1))\r\n .map(categoryBuilder)}\r\n \r\n );\r\n }\r\n};\r\n\r\nconst DataWrapper = ({\r\n data,\r\n dropdownData,\r\n dataItem,\r\n dataIndex,\r\n editAbbreviationFunction,\r\n handleUpdateData,\r\n handleSaveOnChange,\r\n organisationId,\r\n showAbbreviations,\r\n showExpandCollapseAll,\r\n showSearchFilter,\r\n theme,\r\n treesExpanded,\r\n}: DataWrapperProps): JSX.Element => {\r\n const [isTreeExpanded, setTreeExpand] = useState(false);\r\n const filterInputRef = useRef(null);\r\n const [filterValue, setFilterValue] = useState('');\r\n\r\n const buildCategory = (category: Category, categoryIndex: number) => (\r\n \r\n );\r\n\r\n const handleFilterChange = (e: any) => {\r\n setFilterValue(e.target.value.toLowerCase());\r\n };\r\n\r\n const handleClearButton = () => {\r\n setFilterValue('');\r\n if (filterInputRef.current) {\r\n filterInputRef.current.focus();\r\n }\r\n };\r\n\r\n // TODO: improve this\r\n // This parent component sets the state to all of the tree components - to be collapsed or expanded.\r\n // If user collapses a tree component, this parent component still thinks it's open\r\n // This code below forces all to be expanded (true) then sets them to collapsed (false)\r\n const handleCollapseAll = () => {\r\n setTreeExpand(true);\r\n setTimeout(() => {\r\n setTreeExpand(false);\r\n }, 0);\r\n };\r\n\r\n // TODO: improve this\r\n const handleExpandAll = () => {\r\n setTreeExpand(false);\r\n setTimeout(() => {\r\n setTreeExpand(true);\r\n }, 0);\r\n };\r\n\r\n useEffect(() => {\r\n if (treesExpanded) setTreeExpand(treesExpanded);\r\n }, [treesExpanded]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n
    \r\n {dataItem.name}\r\n
    \r\n {showExpandCollapseAll && (\r\n \r\n \r\n Expand all\r\n \r\n \r\n Collapse all\r\n \r\n \r\n )}\r\n {showSearchFilter && (\r\n \r\n )}\r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default DataWrapper;\r\n","import * as React from 'react';\r\n\r\nimport styled, { ThemeProvider } from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPACING, THEME } from '../../packages/constants';\r\nimport { CircleWithX, CircledTick } from '../../packages/icons';\r\nimport { Button, ButtonGroup } from '../button';\r\nimport { CheckboxInput } from '../checkbox-input';\r\nimport { Text } from '../text';\r\nimport DataWrapper, { DataSource } from './atoms/DataWrapper/data-wrapper';\r\nimport { DataSignature } from './atoms/DataWrapper/data-wrapper';\r\nimport { TrackingSettingsTheme } from './tracking-settings-enums';\r\n\r\nexport interface TrackingSettingsProps {\r\n data: DataSignature;\r\n dataId: string;\r\n handleSaveButton: (data: DataSignature, e?: HTMLInputElement) => void;\r\n editAbbreviationFunction?: any;\r\n organisationId?: string;\r\n saveOnChange?: boolean;\r\n saveButtonLoading?: boolean;\r\n saveResponse?: { status: string; message: string };\r\n showAbbreviations?: boolean;\r\n showExpandCollapseAll?: boolean;\r\n showSearchFilter?: boolean;\r\n showSingleDataSource?: string;\r\n theme?: TrackingSettingsTheme;\r\n treesExpanded?: boolean;\r\n isLoading?: boolean;\r\n}\r\n\r\nconst LoadingState = styled.div`\r\n position: absolute;\r\n background: rgba(0, 0, 0, 0.14);\r\n height: 100%;\r\n width: 100%;\r\n z-index: 1000;\r\n`;\r\n\r\nconst StyledTrackingSettings = styled.div``;\r\n\r\nconst StyledInner = styled.div`\r\n margin-bottom: ${SPACING.X_LARGE};\r\n position: relative;\r\n`;\r\n\r\nconst IconError = styled(CircleWithX)`\r\n fill: ${COLOR.PRIMARY.RED};\r\n height: 18px;\r\n width: 18px;\r\n margin-right: ${SPACING.X_SMALL};\r\n`;\r\n\r\nconst IconSuccess = styled(CircledTick)`\r\n fill: ${COLOR.PRIMARY.GREEN};\r\n height: 18px;\r\n width: 18px;\r\n margin-right: ${SPACING.X_SMALL};\r\n`;\r\n\r\nconst Message = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n`;\r\n\r\nconst Footer = styled.div`\r\n display: flex;\r\n border: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? `1px solid ${COLOR.LEGACY.DATAGRID_BORDER}` : 0};\r\n border-top: 0;\r\n border-radius: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? `0 0 3px 3px ` : 0)};\r\n padding: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? `8px ${SPACING.MEDIUM}` : `0 0 ${SPACING.MEDIUM}`};\r\n background-image: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? 'linear-gradient(-180deg,#f5f5f5,#f2f1f1)' : 'none'};\r\n box-shadow: ${(props) =>\r\n props.theme === TrackingSettingsTheme.DataGrid ? 'inset 0 1px 0 hsla(0,0%,100%,.5)' : 'none'};\r\n font-size: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '12px' : FONT_SIZE.LARGE)};\r\n line-height: ${(props) => (props.theme === TrackingSettingsTheme.DataGrid ? '16px' : FONT_SIZE.X_LARGE)};\r\n font-weight: 400;\r\n`;\r\n\r\nconst StyledCheckboxListItem = styled.li`\r\n padding: 2px;\r\n`;\r\n\r\nexport const TrackingSettings = ({\r\n data,\r\n dataId,\r\n editAbbreviationFunction,\r\n handleSaveButton,\r\n organisationId,\r\n saveButtonLoading,\r\n saveOnChange,\r\n saveResponse,\r\n showAbbreviations,\r\n showExpandCollapseAll = true,\r\n showSearchFilter,\r\n showSingleDataSource,\r\n theme,\r\n treesExpanded,\r\n isLoading,\r\n ...props\r\n}: TrackingSettingsProps) => {\r\n const [isDisabled, setDisabled] = React.useState(true);\r\n const [showMessage, setShowMessage] = React.useState(true);\r\n const [trackingData, setTrackingData] = React.useState(data);\r\n\r\n React.useEffect(() => {\r\n setTrackingData(data);\r\n }, [data]);\r\n\r\n const updateData = (dataToUpdate: DataSignature) => {\r\n setTrackingData(dataToUpdate);\r\n setDisabled(false);\r\n setShowMessage(false);\r\n };\r\n\r\n const handleHideArchived = () => {\r\n const trackingDataCopy = { ...trackingData };\r\n trackingDataCopy.hideArchivedTracking = !trackingDataCopy.hideArchivedTracking;\r\n updateData(trackingDataCopy);\r\n if (saveOnChange) handleSaveButton(trackingDataCopy, undefined);\r\n };\r\n\r\n const handleDisplayUnselectedTrackingItems = () => {\r\n const trackingDataCopy = { ...trackingData };\r\n trackingDataCopy.displayUnselectedTrackingItems = !trackingDataCopy.displayUnselectedTrackingItems;\r\n updateData(trackingDataCopy);\r\n if (saveOnChange) handleSaveButton(trackingDataCopy, undefined);\r\n };\r\n\r\n React.useEffect(() => {\r\n if (!saveButtonLoading) {\r\n setDisabled(true);\r\n }\r\n\r\n if (saveResponse) {\r\n setShowMessage(true);\r\n\r\n if (saveResponse.status === 'ERROR') {\r\n setDisabled(false);\r\n }\r\n }\r\n }, [saveButtonLoading, saveResponse]);\r\n\r\n React.useEffect(() => {\r\n if (!showSingleDataSource) {\r\n const trackingDataCopy = { ...trackingData };\r\n trackingDataCopy.dataSources.sort((a, b) =>\r\n a.orderPriority && b.orderPriority && a.orderPriority > b.orderPriority ? 1 : -1,\r\n );\r\n setTrackingData(trackingDataCopy);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [showSingleDataSource]);\r\n\r\n React.useEffect(() => {\r\n if (showSingleDataSource) {\r\n setTrackingData({\r\n dataSources: data.dataSources.filter((obj: DataSource) => obj.id === showSingleDataSource),\r\n hideArchivedTracking: trackingData.hideArchivedTracking,\r\n displayUnselectedTrackingItems: trackingData.displayUnselectedTrackingItems,\r\n });\r\n }\r\n }, [\r\n showSingleDataSource,\r\n data.dataSources,\r\n trackingData.hideArchivedTracking,\r\n trackingData.displayUnselectedTrackingItems,\r\n ]);\r\n\r\n const hasTracking = trackingData.dataSources.some((d) => d.hasTracking && d.categories && d.categories.length > 0);\r\n\r\n return (\r\n \r\n \r\n \r\n {isLoading && }\r\n {saveOnChange\r\n ? trackingData.dataSources.map((dataItem: DataSource, dataIndex: number) => (\r\n \r\n a.name.toLowerCase().localeCompare(b.name.toLowerCase()),\r\n )\r\n : []\r\n }\r\n dataIndex={dataIndex}\r\n dataItem={dataItem}\r\n handleUpdateData={updateData}\r\n handleSaveOnChange={handleSaveButton}\r\n treesExpanded={treesExpanded}\r\n organisationId={organisationId}\r\n showAbbreviations={showAbbreviations}\r\n editAbbreviationFunction={editAbbreviationFunction}\r\n theme={theme}\r\n />\r\n ))\r\n : trackingData.dataSources.map((dataItem: DataSource, dataIndex: number) => (\r\n \r\n a.name.toLowerCase().localeCompare(b.name.toLowerCase()),\r\n )\r\n : []\r\n }\r\n dataIndex={dataIndex}\r\n dataItem={dataItem}\r\n handleUpdateData={updateData}\r\n treesExpanded={treesExpanded}\r\n organisationId={organisationId}\r\n showAbbreviations={showAbbreviations}\r\n editAbbreviationFunction={editAbbreviationFunction}\r\n theme={theme}\r\n />\r\n ))}\r\n {hasTracking && (\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 {!saveOnChange && (\r\n \r\n handleSaveButton(trackingData, undefined)}\r\n loading={saveButtonLoading}\r\n >\r\n Save\r\n \r\n {saveResponse && showMessage && (\r\n \r\n {saveResponse.status === 'ERROR' && }\r\n {saveResponse.status === 'SUCCESS' && }\r\n \r\n {saveResponse.message}\r\n \r\n \r\n )}\r\n \r\n )}\r\n
    \r\n
    \r\n );\r\n};\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nexport interface TabButtonGroupProps {\r\n children: React.ReactNode;\r\n}\r\n\r\nconst StyledTabButtonGroup = styled.ul`\r\n list-style-type: none;\r\n > li {\r\n display: inline-block;\r\n }\r\n > li:not(:first-child) > button {\r\n border-left: none;\r\n }\r\n > li:first-child > button {\r\n border-radius: 3px 0px 0px 0px;\r\n }\r\n > li:last-child > button {\r\n border-radius: 0px 3px 0px 0px;\r\n }\r\n`;\r\n\r\nexport const TabButtonGroup = React.forwardRef(({ children, ...props }, ref) => (\r\n \r\n {children}\r\n \r\n));\r\nTabButtonGroup.displayName = 'TabButtonGroup';\r\n","import * as React from 'react';\r\n\r\nimport { darken } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE } from '../../../../packages/constants';\r\n\r\nexport interface TabButtonProps {\r\n onClick?: (e: any) => void;\r\n dataId: string;\r\n children: React.ReactNode;\r\n selected: boolean;\r\n value: string;\r\n}\r\n\r\nconst StyledTabButton = styled.button.attrs(({ dataId }) => ({\r\n 'data-test-id': dataId,\r\n}))`\r\n border: 2px solid ${COLOR.MAIN.MEDIUM_GREY};\r\n padding: 9px 12px;\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 700;\r\n line-height: 1.2;\r\n background-color: ${(props) => (props.selected ? COLOR.PRIMARY.WHITE : darken(0.05, COLOR.PRIMARY.WHITE))};\r\n color: ${COLOR.PRIMARY.BLACK};\r\n cursor: pointer;\r\n`;\r\n\r\nexport const TabButton = React.forwardRef(({ children, ...props }, ref) => (\r\n \r\n {children}\r\n \r\n));\r\nTabButton.displayName = 'TabButton';\r\n","import * as React from 'react';\r\n\r\nimport { darken, transparentize } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, RADIUS, SPACING } from '../../packages/constants';\r\n\r\nexport interface PasswordInputProps {\r\n autoComplete?: string;\r\n autoFocus?: boolean;\r\n dataId: string;\r\n defaultValue?: string | string[];\r\n disabled?: boolean;\r\n id: string;\r\n invalid?: boolean;\r\n maxLength?: number;\r\n minLength?: number;\r\n pattern?: string;\r\n readOnly?: boolean;\r\n name: string;\r\n onChange?: (e: any) => void;\r\n placeholder?: string;\r\n required?: boolean;\r\n value?: string | string[] | number;\r\n className?: string;\r\n}\r\n\r\ninterface StyledInputProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n}\r\n\r\nconst StyledInput = styled.input`\r\n background-color: ${(props: StyledInputProps): string =>\r\n props.disabled ? darken('0.1', COLOR.PRIMARY.WHITE) : COLOR.PRIMARY.WHITE};\r\n color: ${(props: StyledInputProps): string =>\r\n props.disabled ? transparentize('0.5', COLOR.PRIMARY.BLACK) : COLOR.PRIMARY.BLACK};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n padding: ${SPACING.SMALL};\r\n border-width: 1px;\r\n border-style: solid;\r\n border-color: ${(props: StyledInputProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.FORM_FIELD)};\r\n border-radius: ${RADIUS.DEFAULT};\r\n\r\n &::placeholder {\r\n opacity: 0.65;\r\n }\r\n`;\r\n\r\nexport const PasswordInput = React.forwardRef(\r\n (\r\n {\r\n autoComplete,\r\n autoFocus,\r\n dataId,\r\n defaultValue,\r\n disabled,\r\n id,\r\n invalid,\r\n maxLength,\r\n minLength,\r\n pattern,\r\n readOnly,\r\n name,\r\n placeholder,\r\n required,\r\n value,\r\n onChange,\r\n },\r\n ref,\r\n ) => {\r\n return (\r\n \r\n );\r\n },\r\n);\r\nPasswordInput.displayName = 'PasswordInput';\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPACING } from '../../packages/constants';\r\nimport { HelperModal, QuestionMark } from '../helper-modal';\r\nimport { PasswordInput } from '../password-input';\r\n\r\nexport interface PasswordFieldProps {\r\n dataId: string;\r\n label: string;\r\n id: string;\r\n name: string;\r\n autofocus?: boolean;\r\n defaultValue?: string;\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n hasHelper?: boolean;\r\n helperContent?: React.ReactNode;\r\n numeralsOnly?: boolean;\r\n placeholder?: string;\r\n value?: string;\r\n onChange?: (e: any) => void;\r\n maxLength?: number;\r\n minLength?: number;\r\n pattern?: string;\r\n readOnly?: boolean;\r\n required?: boolean;\r\n thinLabel?: boolean;\r\n className?: string;\r\n}\r\n\r\ninterface StyledTextLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n thinLabel?: boolean;\r\n}\r\n\r\nconst wrapperStyles = `\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst Wrapper = styled.label`\r\n ${wrapperStyles}\r\n`;\r\n\r\nconst WrapperHasHelper = styled.div`\r\n ${wrapperStyles}\r\n`;\r\n\r\nconst StyledLabelWrapper = styled.div`\r\n display: inline-flex;\r\n`;\r\n\r\nconst StyledTextLabel = styled.span`\r\n display: block;\r\n padding-bottom: ${SPACING.XX_SMALL};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledLabelHasHelper = styled.label`\r\n display: inline-block;\r\n margin-right: ${SPACING.X_SMALL};\r\n padding-bottom: ${SPACING.XX_SMALL};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nexport const PasswordField = React.forwardRef(\r\n (\r\n {\r\n dataId,\r\n label,\r\n id,\r\n hasHelper,\r\n helperContent,\r\n placeholder,\r\n name,\r\n autofocus,\r\n defaultValue,\r\n disabled,\r\n invalid,\r\n onChange,\r\n maxLength,\r\n minLength,\r\n pattern,\r\n readOnly,\r\n required,\r\n thinLabel,\r\n value,\r\n className,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return hasHelper ? (\r\n \r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n );\r\n },\r\n);\r\nPasswordField.displayName = 'PasswordField';\r\n","import * as React from 'react';\r\n\r\nimport { darken, transparentize } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, RADIUS, SPACING } from '../../packages/constants';\r\n\r\nexport interface NumberInputProps {\r\n autoComplete?: string;\r\n autoFocus?: boolean;\r\n dataId: string;\r\n defaultValue?: string | string[];\r\n disabled?: boolean;\r\n id: string;\r\n invalid?: boolean;\r\n max?: number | string;\r\n min?: number | string;\r\n name: string;\r\n onChange?: (e: any) => void;\r\n onBlur?: (e: any) => void;\r\n placeholder?: string;\r\n required?: boolean;\r\n step?: number | string;\r\n value?: string | string[] | number;\r\n className?: string;\r\n ariaLabel?: string;\r\n}\r\n\r\ninterface StyledInputProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n}\r\n\r\nconst StyledInput = styled.input`\r\n background-color: ${(props: StyledInputProps): string =>\r\n props.disabled ? darken('0.1', COLOR.PRIMARY.WHITE) : COLOR.PRIMARY.WHITE};\r\n color: ${(props: StyledInputProps): string =>\r\n props.disabled ? transparentize('0.5', COLOR.PRIMARY.BLACK) : COLOR.PRIMARY.BLACK};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n padding: ${SPACING.SMALL};\r\n border-width: 1px;\r\n border-style: solid;\r\n border-color: ${(props: StyledInputProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.FORM_FIELD)};\r\n border-radius: ${RADIUS.DEFAULT};\r\n\r\n &::placeholder {\r\n opacity: 0.65;\r\n }\r\n`;\r\n\r\nexport const NumberInput = React.forwardRef(\r\n (\r\n {\r\n autoComplete,\r\n autoFocus,\r\n dataId,\r\n defaultValue,\r\n disabled,\r\n id,\r\n invalid,\r\n max,\r\n min,\r\n name,\r\n placeholder,\r\n required,\r\n step,\r\n value,\r\n onChange,\r\n onBlur,\r\n ariaLabel,\r\n },\r\n ref,\r\n ) => {\r\n return (\r\n \r\n );\r\n },\r\n);\r\nNumberInput.displayName = 'NumberInput';\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPACING } from '../../packages/constants';\r\nimport { HelperModal, QuestionMark } from '../helper-modal';\r\nimport { NumberInput, NumberInputProps } from '../number-input';\r\n\r\nexport interface NumberFieldProps extends Omit {\r\n hasHelper?: boolean;\r\n helperContent?: React.ReactNode;\r\n label: string;\r\n validationMessage?: string;\r\n thinLabel?: boolean;\r\n}\r\n\r\ninterface StyledTextLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n thinLabel?: boolean;\r\n}\r\n\r\nconst wrapperStyles = `\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst Wrapper = styled.label`\r\n ${wrapperStyles}\r\n`;\r\n\r\nconst WrapperHasHelper = styled.div`\r\n ${wrapperStyles}\r\n`;\r\n\r\nconst StyledLabelWrapper = styled.div`\r\n display: inline-flex;\r\n`;\r\n\r\nconst StyledTextLabel = styled.span`\r\n display: block;\r\n padding-bottom: ${SPACING.XX_SMALL};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledLabelHasHelper = styled.label`\r\n display: inline-block;\r\n padding-bottom: ${SPACING.XX_SMALL};\r\n margin-right: ${SPACING.X_SMALL};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nexport const NumberField = React.forwardRef(\r\n (\r\n {\r\n autoComplete,\r\n autoFocus,\r\n dataId,\r\n defaultValue,\r\n disabled,\r\n hasHelper,\r\n helperContent,\r\n id,\r\n invalid,\r\n label,\r\n max,\r\n min,\r\n name,\r\n placeholder,\r\n required = false,\r\n step,\r\n onChange,\r\n thinLabel,\r\n value,\r\n className,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return hasHelper ? (\r\n \r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n );\r\n },\r\n);\r\nNumberField.displayName = 'NumberField';\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPACING } from '../../packages/constants';\r\nimport { HelperModal, QuestionMark } from '../helper-modal';\r\nimport { NumberInput, NumberInputProps } from '../number-input';\r\n\r\nexport interface NumberFieldInlineProps extends Omit {\r\n hasHelper?: boolean;\r\n helperContent?: React.ReactNode;\r\n label: string;\r\n validationMessage?: string;\r\n thinLabel?: boolean;\r\n labelWidth?: string;\r\n labelAlignment?: 'start' | 'center' | 'end' | undefined;\r\n symbol?: string;\r\n symbolPlacement?: 'before' | 'after' | undefined;\r\n}\r\n\r\nexport interface NumberFieldProps extends Omit {\r\n hasHelper?: boolean;\r\n helperContent?: React.ReactNode;\r\n label: string;\r\n validationMessage?: string;\r\n thinLabel?: boolean;\r\n}\r\n\r\ninterface StyledTextLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n thinLabel?: boolean;\r\n}\r\n\r\ninterface WrapperProps {\r\n labelWidth?: string;\r\n symbolPlacement?: 'before' | 'after' | undefined;\r\n}\r\n\r\ninterface StyledLabelWrapperProps {\r\n labelAlignment: 'start' | 'center' | 'end';\r\n}\r\n\r\ninterface StyledValidationMessageProps {\r\n invalid?: boolean;\r\n symbolPlacement?: 'before' | 'after' | undefined;\r\n}\r\n\r\ninterface StyledSymbolProps {\r\n invalid?: boolean;\r\n symbolPlacement: 'before' | 'after';\r\n}\r\n\r\nconst Wrapper = styled.div`\r\n display: grid;\r\n grid-template-columns:\r\n ${(props: WrapperProps): string => (props.labelWidth ? props.labelWidth : 'auto')}\r\n ${(props: WrapperProps): string => (!props.symbolPlacement ? 'minmax(0, 1fr)' : '')}\r\n ${(props: WrapperProps): string => (props.symbolPlacement === 'before' ? 'auto minmax(0, 1fr)' : '')}\r\n ${(props: WrapperProps): string => (props.symbolPlacement === 'after' ? 'minmax(0, 1fr) auto' : '')};\r\n`;\r\n\r\nconst StyledLabelWrapper = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n align-items: ${(props: StyledLabelWrapperProps): string => props.labelAlignment};\r\n flex-direction: column;\r\n padding-right: ${SPACING.LARGE};\r\n`;\r\n\r\nconst StyledTextLabel = styled.label`\r\n margin-right: ${SPACING.X_SMALL};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.LARGE};\r\n max-width: 100%;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledLabelHasHelper = styled.div`\r\n display: inline-flex;\r\n max-width: 100%;\r\n`;\r\n\r\nconst StyledValidationMessage = styled.div`\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n line-height: ${FONT_SIZE.SMALL};\r\n color: ${(props: StyledValidationMessageProps): string =>\r\n props.invalid ? COLOR.PRIMARY.RED : COLOR.PRIMARY.BLACK};\r\n padding-top: ${SPACING.SMALL};\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n grid-area: ${(props: StyledValidationMessageProps): string => (!props.symbolPlacement ? '2/2' : '')}\r\n ${(props: StyledValidationMessageProps): string => (props.symbolPlacement === 'before' ? '2/3' : '')}\r\n ${(props: StyledValidationMessageProps): string => (props.symbolPlacement === 'after' ? '2/2' : '')};\r\n`;\r\n\r\nconst StyledSymbol = styled.span`\r\n font-size: ${FONT_SIZE.SMALL};\r\n color: ${(props: StyledSymbolProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.PRIMARY.BLACK)};\r\n align-self: center;\r\n margin: ${(props: StyledSymbolProps): string =>\r\n props.symbolPlacement === 'before' ? `0 ${SPACING.SMALL} 0 0` : `0 0 0 ${SPACING.SMALL}`};\r\n`;\r\nexport const NumberFieldInline = React.forwardRef(\r\n (\r\n {\r\n autoComplete,\r\n autoFocus,\r\n dataId,\r\n defaultValue,\r\n disabled,\r\n hasHelper,\r\n helperContent,\r\n id,\r\n invalid,\r\n label,\r\n max,\r\n min,\r\n name,\r\n placeholder,\r\n required = false,\r\n step,\r\n onChange,\r\n thinLabel,\r\n labelWidth,\r\n labelAlignment = 'start',\r\n value,\r\n className,\r\n validationMessage,\r\n symbol,\r\n symbolPlacement,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return (\r\n \r\n \r\n {hasHelper ? (\r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n {label}\r\n \r\n )}\r\n \r\n {symbol && symbolPlacement === 'before' && (\r\n \r\n {symbol}\r\n \r\n )}\r\n \r\n {symbol && symbolPlacement === 'after' && (\r\n \r\n {symbol}\r\n \r\n )}\r\n {validationMessage && (\r\n \r\n {validationMessage}\r\n \r\n )}\r\n \r\n );\r\n },\r\n);\r\n\r\nNumberFieldInline.displayName = 'NumberFieldInline';\r\n","import * as React from 'react';\r\n\r\nimport SVGBase from '../svg-base/svg-base';\r\n\r\nexport interface SortNumberAscProps {\r\n fill?: string;\r\n title?: string;\r\n height?: string;\r\n width?: string;\r\n viewBox?: string;\r\n}\r\n\r\nconst SortNumberAsc: React.FunctionComponent> = ({\r\n fill = '#00b1ff',\r\n title,\r\n height,\r\n width,\r\n ...rest\r\n}): any => (\r\n \r\n \r\n \r\n \r\n \r\n 1\r\n \r\n \r\n \r\n \r\n 9\r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default SortNumberAsc;\r\n","import SortNumberAsc from './sort-number-asc';\r\n\r\nexport * from './sort-number-asc';\r\nexport default SortNumberAsc;\r\n","import * as React from 'react';\r\n\r\nimport SVGBase from '../svg-base/svg-base';\r\n\r\nexport interface SortNumberDescProps {\r\n fill?: string;\r\n title?: string;\r\n height?: string;\r\n width?: string;\r\n viewBox?: string;\r\n}\r\n\r\nconst SortNumberDesc: React.FunctionComponent> = ({\r\n fill = '#00b1ff',\r\n title,\r\n height,\r\n width,\r\n ...rest\r\n}): any => (\r\n \r\n \r\n \r\n \r\n \r\n 9\r\n \r\n \r\n \r\n \r\n 1\r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default SortNumberDesc;\r\n","import SortNumberDesc from './sort-number-desc';\r\n\r\nexport * from './sort-number-desc';\r\nexport default SortNumberDesc;\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled, { ThemeProvider, ThemeProps } from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, SPACING } from '../../packages/constants';\r\nimport { HelperModal, QuestionMark } from '../helper-modal';\r\nimport SortNumberAsc from '../../packages/icons/sort-number-asc';\r\nimport SortNumberDesc from '../../packages/icons/sort-number-desc';\r\n\r\nexport interface SortNumberAscDescFieldProps {\r\n dataId: string;\r\n id: string;\r\n name: string;\r\n legend: string;\r\n autoFocus?: boolean;\r\n assistAccess?: boolean;\r\n value?: SortValues;\r\n disabled?: boolean;\r\n hasHelper?: boolean;\r\n helperContent?: React.ReactNode;\r\n invalid?: boolean;\r\n thinLabel?: boolean;\r\n thinLegend?: boolean;\r\n theme?: SortFieldTheme;\r\n onChange?: (e: any) => void;\r\n validationMessage?: string;\r\n className?: string;\r\n}\r\n\r\nexport enum SortValues {\r\n NONE = 'NONE',\r\n ASCENDING = 'ASC',\r\n DESCENDING = 'DESC',\r\n}\r\n\r\ninterface SortFieldTheme {\r\n selectedColor: string;\r\n}\r\n\r\ninterface StyledLegendTextProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n thinLegend?: boolean;\r\n}\r\n\r\ninterface StyledLabelProps {\r\n inline?: boolean;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface StyledRadioProps {\r\n assistAccess: boolean;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface StyledLabelTextProps {\r\n disabled?: boolean;\r\n inline?: boolean;\r\n thinLabel?: boolean;\r\n}\r\n\r\nconst Wrapper = styled.fieldset`\r\n display: inline-flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst WrapperHasHelper = styled.fieldset`\r\n display: inline-flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst StyledLegend = styled.legend`\r\n display: inline-flex;\r\n margin-left: 0;\r\n`;\r\n\r\nconst StyledLegendText = styled.span`\r\n display: inline-block;\r\n margin-right: ${SPACING.X_SMALL};\r\n padding-bottom: ${SPACING.XX_SMALL};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledLegendTextProps): string => (props.thinLegend ? '400' : '700')};\r\n color: ${(props: StyledLegendTextProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledLegendTextProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledLabel = styled.label`\r\n position: relative;\r\n display: inline-flex;\r\n flex-direction: ${(props: StyledLabelProps): string => (props.inline ? 'row-reverse' : 'column')};\r\n align-items: ${(props: StyledLabelProps): string => (props.inline ? 'center' : '')};\r\n justify-content: ${(props: StyledLabelProps): string => (props.inline ? 'flex-end' : '')};\r\n cursor: ${(props: StyledLabelProps): string => (props.disabled ? 'default' : 'pointer')};\r\n`;\r\n\r\nconst StyledLabelText = styled.span`\r\n display: block;\r\n margin-left: ${(props: StyledLabelTextProps): string => (props.inline ? SPACING.SMALL : '0')};\r\n font-size: ${FONT_SIZE.SMALL};\r\n font-weight: 400;\r\n color: ${COLOR.MAIN.LABEL_TEXT};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n opacity: ${(props: StyledLabelTextProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledItemsWrapper = styled.div`\r\n > ${StyledLabel} {\r\n margin-right: ${SPACING.LARGE};\r\n }\r\n`;\r\n\r\nconst StyledAscIcon = styled(SortNumberAsc)`\r\n width: 30px;\r\n height: 30px;\r\n user-select: none;\r\n`;\r\n\r\nconst StyledDescIcon = styled(SortNumberDesc)`\r\n width: 30px;\r\n height: 30px;\r\n user-select: none;\r\n`;\r\n\r\nconst StyledRadio = styled.input`\r\n /* NOTE: it's important the radio position on screen matches where the label is or the browser may scroll to the radio */\r\n position: absolute;\r\n opacity: 0;\r\n top: 0;\r\n left: 0;\r\n z-index: -1;\r\n\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__background,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__background {\r\n fill: #fff;\r\n }\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__outline,\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__1,\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__9,\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__arrow,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__outline,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__1,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__9,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__arrow {\r\n fill: #d5d5d5;\r\n }\r\n\r\n &:hover {\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__outline,\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__1,\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__9,\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__arrow,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__outline,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__1,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__9,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__arrow {\r\n fill: ${(props: StyledRadioProps): string => (props.disabled ? '#d5d5d5' : '#9a9a9a')};\r\n }\r\n }\r\n\r\n &:focus ~ ${StyledAscIcon}, &:focus ~ ${StyledDescIcon} {\r\n outline: ${(props: StyledRadioProps): string => (props.assistAccess ? '1px dotted #212121' : '0')};\r\n outline: ${(props: StyledRadioProps): string =>\r\n props.assistAccess ? '5px auto -webkit-focus-ring-color' : '0'};\r\n }\r\n\r\n &:checked {\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__background,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__background {\r\n fill: ${(props: ThemeProps): string => props.theme.selectedColor};\r\n }\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__outline,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__outline {\r\n fill: none;\r\n }\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__1,\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__9,\r\n ~ ${StyledAscIcon} .sort-number-asc-icon__arrow,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__1,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__9,\r\n ~ ${StyledDescIcon} .sort-number-desc-icon__arrow {\r\n fill: #fff;\r\n }\r\n }\r\n`;\r\n\r\nexport const defaultTheme: SortFieldTheme = {\r\n selectedColor: COLOR.BRAND.REPORTING,\r\n};\r\n\r\nexport const SortNumberAscDescField = React.forwardRef(\r\n (\r\n {\r\n assistAccess = false,\r\n autoFocus,\r\n dataId,\r\n disabled,\r\n hasHelper,\r\n helperContent,\r\n id,\r\n invalid,\r\n legend,\r\n name,\r\n onChange,\r\n theme = defaultTheme,\r\n thinLabel,\r\n thinLegend,\r\n value,\r\n className,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n return hasHelper ? (\r\n \r\n \r\n \r\n \r\n {legend}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Ascending\r\n \r\n \r\n \r\n \r\n \r\n \r\n Descending\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 {legend}\r\n \r\n \r\n \r\n \r\n \r\n Ascending\r\n \r\n \r\n \r\n \r\n \r\n \r\n Descending\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n },\r\n);\r\nSortNumberAscDescField.displayName = 'SortNumberAscDescField';\r\n","import * as React from 'react';\r\n\r\nimport { Link } from 'react-scroll';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, RADIUS, SPACING, SPEED } from '../../../../packages/constants';\r\nimport { AdditionalPage, ChevronRight } from '../../../../packages/icons';\r\nimport { LoadingSpinner } from '../../../loading-spinner';\r\n\r\ninterface ThumbnailProps {\r\n href: string;\r\n title: string;\r\n additionalPageNumber?: string;\r\n activeClass?: string;\r\n className?: string;\r\n containerId?: string;\r\n duration?: number;\r\n isLoading?: boolean;\r\n isAdditionalPage?: boolean;\r\n imageSrc?: string;\r\n offset?: number;\r\n onSetActive?: (e: any) => void;\r\n onSetInactive?: (e: any) => void;\r\n ref?: any;\r\n showThumbnail?: boolean;\r\n smooth?: boolean;\r\n spy?: boolean;\r\n to?: any;\r\n}\r\n\r\ninterface StyledThumbnailProps {\r\n isAdditionalPage?: boolean;\r\n showThumbnail?: boolean;\r\n onSetInactive?: any;\r\n}\r\n\r\ninterface ImageThumbnailProps {\r\n isAdditionalPage?: boolean;\r\n}\r\n\r\nconst StyledLoadingSpinner = styled(LoadingSpinner)``;\r\n\r\nconst DROP_SHADOW_VALUE = `\r\n 0 1px 5px rgba(4, 37, 91, 0.25)\r\n`;\r\nconst PAGINATION_THUMBNAIL_WIDTH = `220px`;\r\nconst PAGINATION_THUMBNAIL_HEIGHT = `170px`;\r\nconst PAGINATION_THUMBNAIL_STYLED = `\r\n box-sizing: border-box;\r\n box-shadow: ${DROP_SHADOW_VALUE};\r\n border-style: solid;\r\n border-width: 2px;\r\n border-color: transparent;\r\n border-radius: ${RADIUS.DEFAULT};\r\n height: ${PAGINATION_THUMBNAIL_HEIGHT};\r\n margin-bottom: ${SPACING.SMALL};\r\n padding: ${SPACING.X_SMALL} ${SPACING.X_SMALL} ${SPACING.XX_SMALL};\r\n transition: border-color ${SPEED.TRANSITION};\r\n width: ${PAGINATION_THUMBNAIL_WIDTH};\r\n`;\r\n\r\nconst ImagePlaceholder = styled.div`\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n display: flex;\r\n justify-content: center;\r\n ${PAGINATION_THUMBNAIL_STYLED}\r\n`;\r\n\r\nconst ImageThumbnail = styled.img`\r\n ${PAGINATION_THUMBNAIL_STYLED}\r\n`;\r\n\r\nconst StyledImage = styled.img`\r\n display: block;\r\n width: 100%;\r\n height: auto;\r\n`;\r\n\r\nconst StyledAdditionalImage = styled(AdditionalPage)`\r\n display: block;\r\n width: 100%;\r\n height: auto;\r\n`;\r\n\r\nconst StyledThumbnailLabel = styled.div`\r\n align-self: center;\r\n background-color: transparent;\r\n border-radius: ${RADIUS.DEFAULT};\r\n color: ${COLOR.MAIN.DARK_GREY};\r\n display: inline-block;\r\n font-size: ${FONT_SIZE.SMALL};\r\n padding: ${SPACING.SMALL};\r\n transition: color ${SPEED.TRANSITION}, background-color ${SPEED.TRANSITION};\r\n`;\r\n\r\nconst StyledTextLabel = styled.div`\r\n align-items: center;\r\n background-color: transparent;\r\n color: ${COLOR.BRAND.REPORTING};\r\n display: flex;\r\n font-weight: ${'400'};\r\n font-size: ${FONT_SIZE.SMALL};\r\n justify-content: space-between;\r\n padding: 5px;\r\n text-align: left;\r\n transition: color ${SPEED.TRANSITION};\r\n`;\r\n\r\nconst StyledChevron = styled(ChevronRight)`\r\n fill: #b2bccd;\r\n height: 12px;\r\n width: 12px;\r\n opacity: 0;\r\n`;\r\n\r\nconst StyledThumbnailWrapper = styled(Link)`\r\n border: 0;\r\n cursor: pointer;\r\n display: block;\r\n margin: 0;\r\n padding: 0;\r\n text-align: center;\r\n text-decoration: none;\r\n\r\n &.active {\r\n ${ImagePlaceholder},\r\n ${ImageThumbnail} {\r\n border-color: ${COLOR.BRAND.REPORTING};\r\n }\r\n\r\n ${StyledThumbnailLabel} {\r\n background-color: ${COLOR.BRAND.REPORTING};\r\n color: ${COLOR.PRIMARY.WHITE};\r\n }\r\n ${StyledTextLabel} {\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n }\r\n ${StyledChevron} {\r\n opacity: 1;\r\n }\r\n }\r\n\r\n &:hover {\r\n ${StyledThumbnailLabel} {\r\n background-color: ${COLOR.BRAND.REPORTING};\r\n color: ${COLOR.PRIMARY.WHITE};\r\n }\r\n ${StyledTextLabel} {\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n color: ${COLOR.BRAND.REPORTING};\r\n }\r\n }\r\n`;\r\n\r\nconst Thumbnail = React.forwardRef(\r\n (\r\n {\r\n activeClass,\r\n additionalPageNumber,\r\n className,\r\n containerId,\r\n href,\r\n imageSrc,\r\n isLoading,\r\n isAdditionalPage,\r\n offset,\r\n onSetActive,\r\n onSetInactive,\r\n showThumbnail,\r\n title,\r\n to,\r\n ...props\r\n }: ThumbnailProps,\r\n ref,\r\n ) => (\r\n \r\n {showThumbnail ? (\r\n isLoading ? (\r\n <>\r\n \r\n \r\n \r\n \r\n {title}\r\n {additionalPageNumber && ` (page ${Number(additionalPageNumber) + 1})`}\r\n \r\n \r\n ) : (\r\n <>\r\n \r\n {isAdditionalPage ? : }\r\n \r\n \r\n {title}\r\n {additionalPageNumber && ` (page ${Number(additionalPageNumber) + 1})`}\r\n \r\n \r\n )\r\n ) : (\r\n \r\n {title}\r\n {additionalPageNumber && ` (page ${Number(additionalPageNumber) + 1})`}\r\n \r\n \r\n )}\r\n \r\n ),\r\n);\r\nThumbnail.displayName = 'Thumbnail';\r\n\r\nexport default Thumbnail;\r\nexport { StyledLoadingSpinner, DROP_SHADOW_VALUE, PAGINATION_THUMBNAIL_WIDTH };\r\n","import Thumbnail, { DROP_SHADOW_VALUE, PAGINATION_THUMBNAIL_WIDTH } from './thumbnail';\r\n\r\nexport default Thumbnail;\r\nexport { DROP_SHADOW_VALUE, PAGINATION_THUMBNAIL_WIDTH };\r\n","import * as React from 'react';\r\nimport styled from 'styled-components';\r\n\r\nimport { DROP_SHADOW_VALUE } from './atoms/thumbnail';\r\nimport { SPACING } from '../../packages/constants';\r\nimport { StyledLoadingSpinner } from './atoms/thumbnail/thumbnail';\r\nimport { camelToKebab } from '../../../Scripts/Spotlight/Components/CamelToKebab';\r\n\r\nexport interface PreviewPageProps {\r\n id: string;\r\n content: string;\r\n title: string;\r\n pageType?: string;\r\n isLoading: boolean;\r\n isFixedSize: boolean;\r\n canBeFullscreen: boolean;\r\n isPortrait: boolean;\r\n maxWidth?: number;\r\n index: number;\r\n}\r\n\r\ninterface PageProps {\r\n isFixedSize?: boolean;\r\n isPortrait?: boolean;\r\n pageLoading?: boolean;\r\n canBeFullscreen?: boolean;\r\n isSinglePage?: boolean;\r\n maxWidth?: number;\r\n}\r\n\r\nconst PageItem = styled.li`\r\n background-color: #fff;\r\n box-shadow: ${DROP_SHADOW_VALUE};\r\n height: ${(props) => (props.pageLoading ? (props.isFixedSize ? '710px' : 'auto') : 'auto')};\r\n margin-bottom: ${(props) => (props.isSinglePage ? 'auto' : '20px')};\r\n max-width: ${(props) =>\r\n props.canBeFullscreen ? (props.isPortrait ? '51vw' : '71vw') : props.isPortrait ? '51vw' : undefined};\r\n min-height: ${(props) => (props.canBeFullscreen ? '48vw' : '710px')};\r\n min-width: 960px;\r\n margin-left: ${(props) => (props.canBeFullscreen || props.isPortrait ? 'auto' : undefined)};\r\n margin-right: ${(props) => (props.canBeFullscreen || props.isPortrait ? 'auto' : undefined)};\r\n width: ${(props) => (props.pageLoading ? '100%' : 'auto')};\r\n max-width: ${(props) => (props.maxWidth ? props.maxWidth : 'unset')};\r\n`;\r\n\r\nconst Page = styled.div`\r\n align-items: ${(props) => (props.pageLoading ? 'center' : 'flex-start')};\r\n box-sizing: border-box;\r\n display: flex;\r\n flex-direction: column;\r\n height: ${(props) => (props.pageLoading ? (props.isFixedSize ? '710px' : '52vw') : 'auto')};\r\n justify-content: ${(props) => (props.pageLoading ? 'center' : 'flex-start')};\r\n min-height: 710px;\r\n padding: ${SPACING.MEDIUM};\r\n width: ${(props) => (props.pageLoading ? (props.isFixedSize ? '960px' : '100%') : 'auto')};\r\n overflow-x: ${(props) => (props.pageLoading ? undefined : 'auto')};\r\n`;\r\n\r\nexport const PreviewPage = ({\r\n id,\r\n isFixedSize,\r\n canBeFullscreen,\r\n isLoading,\r\n isPortrait,\r\n maxWidth,\r\n title,\r\n index,\r\n pageType,\r\n content,\r\n}: PreviewPageProps) => {\r\n return (\r\n \r\n {isLoading ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n )}\r\n \r\n );\r\n};\r\nPreviewPage.displayName = 'PreviewPage';\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled from 'styled-components';\r\nimport { TransformComponent as ZoomableContent } from 'react-zoom-pan-pinch';\r\n\r\nimport { PreviewPage } from './preview-page';\r\nimport { PageDataProps } from './preview';\r\n\r\nexport interface PreviewContentProps {\r\n /**\r\n * Page data\r\n */\r\n pageData: PageDataProps[];\r\n /**\r\n * Scroll listener\r\n */\r\n scrollListener: (e: any) => void;\r\n /**\r\n * Scroll ref\r\n */\r\n scrollRef: React.RefObject;\r\n /**\r\n * Show navigation?\r\n */\r\n showNavigation: boolean;\r\n /**\r\n * Fixes the size of the page during loading.\r\n */\r\n isFixedSize: boolean;\r\n /**\r\n * Show fullscreen capability?\r\n */\r\n hasFullscreen: boolean;\r\n /**\r\n * Don't show the invisible page at bottom\r\n */\r\n isSinglePage: boolean;\r\n /**\r\n * Limit how wide a page is allowed to be\r\n */\r\n maxPageWidth?: number;\r\n /**\r\n * Is the display currently fullscreen\r\n */\r\n isFullscreen: boolean;\r\n /**\r\n * Should the pages be landscape or portrait?\r\n */\r\n isPortrait: boolean;\r\n}\r\n\r\ninterface PageWrapperProps {\r\n showNavigation: boolean;\r\n hasFullscreen: boolean;\r\n isFullscreen: boolean;\r\n isSinglePage: boolean;\r\n isPortrait: boolean;\r\n}\r\n\r\nconst PageWrapper = styled.div`\r\n box-sizing: border-box;\r\n position: relative;\r\n height: ${(props) => (props.hasFullscreen ? (props.isFullscreen ? '100%' : 'calc(100% - 44px)') : '100%')};\r\n overflow-y: ${(props) => (props.isSinglePage ? 'auto' : 'scroll')};\r\n width: ${(props) => (props.isSinglePage ? '100%' : 'fit-content')};\r\n display: ${(props) => (props.hasFullscreen && props.isSinglePage ? 'flex' : 'block')};\r\n ${(props) =>\r\n props.hasFullscreen &&\r\n (props.isSinglePage || props.isPortrait) &&\r\n `align-items: ${props.isPortrait} ? 'flex-start' : 'center'`}\r\n cursor: grab;\r\n`;\r\n\r\nconst Pages = styled.ul`\r\n margin: 0 auto;\r\n max-width: 100vw;\r\n width: 100%;\r\n padding: 6px;\r\n`;\r\n\r\nconst LastPage = styled.li`\r\n height: 60vh;\r\n max-width: 100vw;\r\n margin: 0 auto;\r\n width: 100%;\r\n`;\r\n\r\nexport const PreviewContent = ({\r\n showNavigation,\r\n hasFullscreen,\r\n isFullscreen,\r\n isSinglePage,\r\n isFixedSize,\r\n isPortrait,\r\n maxPageWidth,\r\n scrollRef,\r\n scrollListener,\r\n pageData,\r\n}: PreviewContentProps) => {\r\n return (\r\n scrollListener(e)}\r\n isPortrait={isPortrait}\r\n >\r\n \r\n \r\n {pageData.map((page: PageDataProps, index: number) => (\r\n \r\n ))}\r\n {!isSinglePage && }\r\n \r\n \r\n \r\n );\r\n};\r\nPreviewContent.displayName = 'PreviewContent';\r\n","import * as React from 'react';\r\nimport { ReactNode, useEffect, useState, useMemo } from 'react';\r\n\r\nimport { Expand } from 'iconoir-react';\r\nimport { lighten } from 'polished';\r\nimport styled, { ThemeProvider } from 'styled-components';\r\n\r\nimport { SPACING, COLOR, THEME } from '../../packages/constants';\r\nimport { Button } from '../button';\r\nimport { CheckboxInput } from '../checkbox-input';\r\nimport { ThumbnailVariants } from './preview';\r\n\r\nexport interface PreviewNavigationButtonsProps {\r\n showFullscreenButton: boolean;\r\n showNavigation: boolean;\r\n isSinglePage: boolean;\r\n showThumbnails: boolean;\r\n isFullscreen: boolean;\r\n onToggleThumbnails: () => void;\r\n onToggleNavigation: () => void;\r\n onToggleFullscreen: () => void;\r\n customNavigationBarContent?: ReactNode;\r\n reportTitle?: string;\r\n isSustain?: boolean;\r\n thumbnailVariant: ThumbnailVariants;\r\n}\r\n\r\ntype ButtonsToShow = 'none' | 'thumbnail_only' | 'fullscreen_only' | 'nav_and_fullscreen' | 'all';\r\n\r\ninterface StyledSettingsProps {\r\n fullscreenAvailable: boolean;\r\n isSustain?: boolean;\r\n}\r\n\r\nconst StyledSettings = styled.div`\r\n display: flex;\r\n justify-content: ${(props) => (props.isSustain ? 'flex-start' : 'space-between')};\r\n align-items: ${(props) => (props.isSustain ? 'flex-start' : 'center')};\r\n padding: ${(props) => (props.fullscreenAvailable ? SPACING.MEDIUM : `0 0 ${SPACING.MEDIUM} ${SPACING.XX_SMALL}`)};\r\n border-bottom: 1px solid\r\n ${(props) => (props.fullscreenAvailable ? lighten(0.3, COLOR.MAIN.FORM_FIELD_DARK) : 'transparent')};\r\n background-color: ${(props) => (props.fullscreenAvailable ? COLOR.PRIMARY.WHITE : 'transparent')};\r\n`;\r\n\r\nconst CheckboxInputContainer = styled.div`\r\n display: flex;\r\n column-gap: ${SPACING.MEDIUM};\r\n min-width: 300px;\r\n`;\r\n\r\nconst FullScreenButton = styled.div`\r\n align-self: flex-end;\r\n flex-shrink: 0;\r\n`;\r\n\r\nconst ReportTitle = styled.div`\r\n flex-grow: 1;\r\n text-align: center;\r\n line-height: 1.5;\r\n font-size: 18px;\r\n font-weight: 600;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n padding-left: 30px;\r\n padding-right: 30px;\r\n`;\r\n\r\ninterface StyledCheckbox {\r\n isSustain?: boolean;\r\n}\r\n\r\nconst StyledCheckbox = styled(CheckboxInput)`\r\n flex-shrink: 0;\r\n min-width: ${(props) => (props.isSustain ? '250px' : '')};\r\n`;\r\n\r\nconst StyledButton = styled(Button)`\r\n line-height: normal;\r\n border-radius: 5px;\r\n border-width: 0;\r\n font-weight: 600;\r\n column-gap: 5px;\r\n font-size: 13px;\r\n padding-bottom: 7px;\r\n padding-top: 8px;\r\n text-decoration: underline;\r\n text-underline-position: under;\r\n color: #031c44;\r\n background-color: #fff;\r\n\r\n &:hover:not(:disabled) {\r\n background-color: #f3f4f7;\r\n color: #031c44;\r\n }\r\n`;\r\n\r\nexport const PreviewNavigationButtons: React.FC> = ({\r\n showFullscreenButton,\r\n showNavigation,\r\n isSinglePage,\r\n showThumbnails,\r\n isFullscreen,\r\n onToggleThumbnails,\r\n onToggleNavigation,\r\n onToggleFullscreen,\r\n customNavigationBarContent,\r\n reportTitle,\r\n isSustain,\r\n thumbnailVariant,\r\n}) => {\r\n const [buttonsToShow, setButtonsToShow] = useState('none');\r\n\r\n useEffect(() => {\r\n if (isFullscreen) setButtonsToShow('none');\r\n else if (isSinglePage && showFullscreenButton) setButtonsToShow('fullscreen_only');\r\n else if (showFullscreenButton && thumbnailVariant !== 'hide') setButtonsToShow('all');\r\n else if (showFullscreenButton) setButtonsToShow('nav_and_fullscreen');\r\n else if (!isSinglePage && thumbnailVariant !== 'hide') setButtonsToShow('thumbnail_only');\r\n else setButtonsToShow('none');\r\n }, [showFullscreenButton, isSinglePage, isFullscreen]);\r\n\r\n const fullscreenButtonVisible = useMemo(() => {\r\n return buttonsToShow === 'all' || buttonsToShow === 'fullscreen_only' || buttonsToShow === 'nav_and_fullscreen';\r\n }, [buttonsToShow]);\r\n\r\n return (\r\n <>\r\n {(buttonsToShow !== 'none' || customNavigationBarContent) && (\r\n \r\n {buttonsToShow === 'thumbnail_only' && (\r\n \r\n )}\r\n {buttonsToShow === 'nav_and_fullscreen' && (\r\n \r\n )}\r\n {buttonsToShow === 'all' && (\r\n \r\n \r\n \r\n \r\n )}\r\n {customNavigationBarContent && !isFullscreen && !fullscreenButtonVisible && isSustain && (\r\n <>{customNavigationBarContent} \r\n )}\r\n {fullscreenButtonVisible && isSustain && {reportTitle}}\r\n {fullscreenButtonVisible && !isSustain && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {fullscreenButtonVisible && isSustain && (\r\n \r\n \r\n \r\n Full screen mode\r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n};\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport styled from 'styled-components';\r\n\r\nimport Thumbnail, { PAGINATION_THUMBNAIL_WIDTH } from './atoms/thumbnail';\r\nimport { SPACING } from '../../packages/constants';\r\nimport { camelToKebab } from '../../../Scripts/Spotlight/Components/CamelToKebab';\r\nimport { PageDataProps } from './preview';\r\n\r\nexport interface PreviewPaginationProps {\r\n hasFullscreenOption: boolean;\r\n isFullscreen: boolean;\r\n pageData: PageDataProps[];\r\n showThumbnails: boolean;\r\n scrollOffset: number;\r\n onPageSelect: () => void;\r\n}\r\n\r\ninterface PaginationItemProps {\r\n showThumbnails?: boolean;\r\n}\r\n\r\ninterface PaginationProps {\r\n hasFullscreenOption: boolean;\r\n isFullscreen: boolean;\r\n}\r\n\r\nconst Pagination = styled.ul`\r\n box-sizing: border-box;\r\n height: ${(props) => (props.hasFullscreenOption ? (props.isFullscreen ? '100%' : 'calc(100% - 44px)') : '100%')};\r\n overflow-y: auto;\r\n padding: ${(props) =>\r\n `${SPACING.MEDIUM} ${SPACING.MEDIUM} 0 ${props.hasFullscreenOption ? SPACING.MEDIUM : SPACING.X_SMALL};`};\r\n width: ${(props) => (props.hasFullscreenOption ? `calc(${PAGINATION_THUMBNAIL_WIDTH} + 48px)` : `258px`)};\r\n`;\r\n\r\nconst PaginationItem = styled.li`\r\n list-style-type: none;\r\n margin: 0 0 ${(props) => (props.showThumbnails ? SPACING.LARGE : SPACING.X_SMALL)};\r\n padding: 0;\r\n width: 100%;\r\n`;\r\n\r\nexport const PreviewPagination = ({\r\n hasFullscreenOption,\r\n isFullscreen,\r\n pageData,\r\n showThumbnails,\r\n scrollOffset,\r\n onPageSelect,\r\n}: PreviewPaginationProps) => {\r\n return (\r\n \r\n {pageData.map((page: PageDataProps, index: number) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nPreviewPagination.displayName = 'PreviewPagination';\r\n","import * as React from 'react';\r\nimport { useEffect, useState, useRef, MutableRefObject } from 'react';\r\n\r\nimport { TransformWrapper as ZoomableContentWrapper, ReactZoomPanPinchRef } from 'react-zoom-pan-pinch';\r\nimport styled, { ThemeProvider } from 'styled-components';\r\n\r\nimport { SPACING, COLOR, THEME } from '../../packages/constants';\r\nimport { Button } from '../button';\r\nimport { PreviewContent } from './preview-content';\r\nimport { PreviewNavigationButtons } from './preview-navigation-buttons';\r\nimport { PreviewPagination } from './preview-pagination';\r\n\r\nexport type ThumbnailVariants = 'show' | 'available' | 'hide';\r\n\r\nexport interface PreviewProps {\r\n /**\r\n * Page data\r\n */\r\n pageData: PageDataProps[];\r\n /**\r\n * Scroll listener\r\n */\r\n scrollListener: (e: any) => void;\r\n /**\r\n * Scroll ref\r\n */\r\n scrollRef: React.RefObject;\r\n /**\r\n * Show navigation?\r\n */\r\n showNavigation?: boolean;\r\n /**\r\n * Scroll offset\r\n */\r\n scrollOffset?: number;\r\n /**\r\n * Fixes the size of the page during loading.\r\n */\r\n isFixedSize?: boolean;\r\n /**\r\n * Show fullscreen capability?\r\n */\r\n hasFullscreen?: boolean;\r\n /**\r\n * Don't show the invisible page at bottom\r\n */\r\n isSinglePage?: boolean;\r\n /**\r\n * Limit how wide a page is allowed to be\r\n */\r\n maxPageWidth?: number;\r\n isSustain?: boolean;\r\n reportTitle?: string;\r\n customNavigationBarContent?: React.ReactNode;\r\n thumbnailVariant?: ThumbnailVariants;\r\n triggerThumbnailLoad?: () => void;\r\n}\r\n\r\ninterface PageWrapperProps {\r\n showNavigation?: boolean;\r\n hasFullscreen?: boolean;\r\n isFullscreen?: boolean;\r\n isSinglePage?: boolean;\r\n isPortrait?: boolean;\r\n hasFullscreenUseState?: boolean;\r\n}\r\n\r\nexport interface PageDataProps {\r\n id: string;\r\n content: string;\r\n title: string;\r\n pageType?: string;\r\n additionalPageNumber?: string;\r\n imageSrc?: string;\r\n isLoading?: boolean;\r\n isAdditionalPage?: boolean;\r\n map?: (e: any) => React.ReactNode;\r\n thumbnailIsLoading?: boolean;\r\n}\r\n\r\ninterface StyledPreviewInnerProps {\r\n isFullscreen?: boolean;\r\n showNavigation?: boolean;\r\n isSinglePage?: boolean;\r\n}\r\n\r\nconst StyledPreview = styled.div`\r\n background-color: ${COLOR.MAIN.LIGHT_GREY};\r\n height: ${(props) => (props.isSinglePage ? 'auto' : '100%')};\r\n`;\r\n\r\nconst StyledPreviewInner = styled.div`\r\n background-color: ${COLOR.MAIN.LIGHT_GREY};\r\n display: flex;\r\n height: ${(props) => (props.isSinglePage ? 'auto' : '100%')};\r\n position: relative;\r\n padding-left: ${(props) => (props.showNavigation && props.isFullscreen ? SPACING.MEDIUM : undefined)};\r\n width: 100%;\r\n`;\r\n\r\nconst PageViewPort = styled.div`\r\n height: 100%;\r\n padding: ${(props) => (props.isSinglePage ? `0px 0px` : `${SPACING.MEDIUM} 0px 0px`)};\r\n width: ${(props) => (props.isSinglePage ? '100%' : 'calc(100% - 200px)')};\r\n overflow-y: hidden;\r\n overflow-x: auto;\r\n box-sizing: border-box;\r\n`;\r\n\r\nconst ZoomTools = styled.div.attrs((props: { isSinglePage: boolean }) => props)`\r\n display: flex;\r\n position: absolute;\r\n z-index: 2;\r\n bottom: ${(props) => (props.isSinglePage ? '-5px' : '5px')}; // if there's space below, put it there\r\n padding: 6px 6px 6px 10px;\r\n`;\r\n\r\nconst ZoomButton = styled(Button)`\r\n margin-right: 6px;\r\n font-size: 14px;\r\n padding: 6px;\r\n height: 22px;\r\n`;\r\n\r\nexport const Preview = React.forwardRef(\r\n (\r\n {\r\n pageData,\r\n showNavigation,\r\n scrollOffset = -55,\r\n scrollRef,\r\n scrollListener,\r\n isFixedSize,\r\n hasFullscreen = false,\r\n isSinglePage = false,\r\n maxPageWidth,\r\n reportTitle,\r\n customNavigationBarContent,\r\n isSustain,\r\n thumbnailVariant,\r\n triggerThumbnailLoad,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [showNavigationToggle, setNavigationToggle] = useState(showNavigation);\r\n const [thumbnailToggle, setThumbnailToggle] = useState(thumbnailVariant === 'show');\r\n const [data, setData] = useState(pageData);\r\n const [isFullscreen, setFullscreen] = useState(false);\r\n const [hasFullscreenUseState, setHasFullscreen] = useState(hasFullscreen);\r\n const styledPreviewInnerRef = useRef() as MutableRefObject;\r\n const [isPortrait, setIsPortrait] = useState(false);\r\n const transformComponentRef = useRef(null);\r\n\r\n const handleFullscreen = () => {\r\n // taken from https://davidwalsh.name/fullscreen\r\n // i cant believe this is still a thing...\r\n function launchIntoFullscreen(element: any) {\r\n if (element.requestFullscreen) {\r\n element.requestFullscreen();\r\n } else if (element.mozRequestFullScreen) {\r\n element.mozRequestFullScreen();\r\n } else if (element.webkitRequestFullscreen) {\r\n element.webkitRequestFullscreen();\r\n } else if (element.msRequestFullscreen) {\r\n element.msRequestFullscreen();\r\n }\r\n }\r\n\r\n function exitFullscreen() {\r\n if (document.exitFullscreen) {\r\n document.exitFullscreen();\r\n // @ts-ignore\r\n } else if (document.mozCancelFullScreen) {\r\n // @ts-ignore\r\n document.mozCancelFullScreen();\r\n // @ts-ignore\r\n } else if (document.webkitExitFullscreen) {\r\n // @ts-ignore\r\n document.webkitExitFullscreen();\r\n }\r\n }\r\n\r\n if (!document.fullscreenElement) {\r\n launchIntoFullscreen(styledPreviewInnerRef.current);\r\n } else {\r\n exitFullscreen();\r\n }\r\n };\r\n\r\n const resetZoomLocation = () => {\r\n if (transformComponentRef.current) {\r\n transformComponentRef.current.resetTransform();\r\n }\r\n };\r\n\r\n const toggleThumbnails = () => {\r\n if (!thumbnailToggle && triggerThumbnailLoad) {\r\n triggerThumbnailLoad();\r\n }\r\n setThumbnailToggle(!thumbnailToggle);\r\n };\r\n\r\n useEffect(() => {\r\n setNavigationToggle(showNavigation);\r\n setHasFullscreen(hasFullscreen);\r\n setData(pageData);\r\n\r\n if (styledPreviewInnerRef.current) {\r\n // @ts-ignore\r\n styledPreviewInnerRef.current.addEventListener('fullscreenchange', () => {\r\n if (document.fullscreenElement) {\r\n setFullscreen(true);\r\n } else {\r\n setFullscreen(false);\r\n }\r\n });\r\n }\r\n }, [showNavigation, hasFullscreen, pageData, styledPreviewInnerRef]);\r\n\r\n useEffect(() => {\r\n data.forEach((page) => {\r\n if (page.id === 'Performance') setIsPortrait(true);\r\n });\r\n });\r\n\r\n return (\r\n \r\n setNavigationToggle(!showNavigationToggle)}\r\n onToggleFullscreen={handleFullscreen}\r\n customNavigationBarContent={customNavigationBarContent}\r\n reportTitle={reportTitle}\r\n isSustain={isSustain}\r\n thumbnailVariant={thumbnailVariant ?? 'show'}\r\n />\r\n \r\n {showNavigationToggle && (\r\n \r\n )}\r\n \r\n \r\n {({ zoomIn, zoomOut, resetTransform }) => (\r\n <>\r\n \r\n \r\n \r\n zoomOut(0.25)}>\r\n {'\\u2212'}\r\n \r\n zoomIn(0.25)}>\r\n {'\\u002B'}\r\n \r\n resetTransform()}>\r\n RESET\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\nPreview.displayName = 'Preview';\r\n","export { Preview } from './preview';\r\nexport type { ThumbnailVariants } from './preview';\r\n\r\nexport const PreviewDataStub = [\r\n {\r\n id: '0000',\r\n title: 'Cover',\r\n thumbnailIsLoading: true,\r\n isLoading: false,\r\n content: '
    0000
    ',\r\n },\r\n {\r\n id: '0000_1',\r\n title: 'Cover',\r\n thumbnailIsLoading: false,\r\n isLoading: false,\r\n isAdditionalPage: true,\r\n additionalPageNumber: '1',\r\n content: '
    0000
    ',\r\n },\r\n {\r\n id: '1111',\r\n title: 'Table of Contents',\r\n pageType: 'TableOfContents',\r\n thumbnailIsLoading: true,\r\n isLoading: true,\r\n content: '
    1111
    ',\r\n },\r\n {\r\n id: '2222',\r\n title: 'Profit and Loss',\r\n pageType: 'PandLPage',\r\n thumbnailIsLoading: true,\r\n isLoading: true,\r\n content: '
    2222
    ',\r\n },\r\n {\r\n id: '3333',\r\n title: 'Balance Sheet',\r\n pageType: 'BSPage',\r\n thumbnailIsLoading: true,\r\n isLoading: true,\r\n content: '
    3333
    ',\r\n },\r\n {\r\n id: '4444',\r\n title: 'Balance Sheet',\r\n pageType: 'BSPage',\r\n thumbnailIsLoading: true,\r\n isLoading: true,\r\n content: '
    4444
    ',\r\n },\r\n {\r\n id: '5555',\r\n title: 'Balance Sheet',\r\n pageType: 'BSPage',\r\n thumbnailIsLoading: true,\r\n isLoading: true,\r\n content: '
    5555
    ',\r\n },\r\n {\r\n id: '6666',\r\n title: 'Balance Sheet',\r\n pageType: 'BSPage',\r\n thumbnailIsLoading: true,\r\n isLoading: true,\r\n content: '
    6666
    ',\r\n },\r\n {\r\n id: '7777',\r\n title: 'Balance Sheet',\r\n pageType: 'BSPage',\r\n thumbnailIsLoading: true,\r\n isLoading: true,\r\n content: '
    7777
    ',\r\n },\r\n {\r\n id: '8888',\r\n title: 'Balance Sheet',\r\n pageType: 'BSPage',\r\n thumbnailIsLoading: true,\r\n isLoading: true,\r\n content: '
    8888
    ',\r\n },\r\n {\r\n id: '9999',\r\n title: 'Balance Sheet',\r\n pageType: 'BSPage',\r\n thumbnailIsLoading: true,\r\n isLoading: true,\r\n content: '
    9999
    ',\r\n },\r\n];\r\n\r\nexport const PreviewDashboardDataStub = [\r\n {\r\n id: '0000',\r\n title: 'Dashboard',\r\n thumbnailIsLoading: true,\r\n isLoading: false,\r\n content: '
    0000
    ',\r\n },\r\n];\r\n\r\nfunction outputText(amount = 25) {\r\n let textString = ``;\r\n for (let i = 0; i < amount; i++) {\r\n textString += `

    lorem ipsum dolor set

    `;\r\n }\r\n return textString;\r\n}\r\n\r\nexport const PreviewDashboardPerformanceDataStub = [\r\n {\r\n id: 'Performance',\r\n title: 'Performance Dashboard',\r\n thumbnailIsLoading: false,\r\n isLoading: false,\r\n content: `

    Performance layout (portrait)

    \r\n${outputText(70)}\r\n`,\r\n },\r\n];\r\n","import * as React from 'react';\r\n\r\nimport SVGBase from '../svg-base/svg-base';\r\n\r\nexport interface StarProps {\r\n fill?: string;\r\n title?: string;\r\n height?: string;\r\n width?: string;\r\n viewBox?: string;\r\n}\r\n\r\nconst CircleWithPlus: React.FunctionComponent> = ({\r\n fill,\r\n title,\r\n height,\r\n width,\r\n ...rest\r\n}): any => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default CircleWithPlus;\r\n","import CircleWithPlus from './circle-with-plus';\r\n\r\nexport * from './circle-with-plus';\r\nexport default CircleWithPlus;\r\n","import * as React from 'react';\r\n\r\nimport SVGBase from '../svg-base/svg-base';\r\n\r\nexport interface CircleWithMinusProps {\r\n fill?: string;\r\n title?: string;\r\n height?: string;\r\n width?: string;\r\n viewBox?: string;\r\n}\r\n\r\nconst CircleWithMinus: React.FunctionComponent> = ({\r\n fill,\r\n title,\r\n height,\r\n width,\r\n ...rest\r\n}): any => (\r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default CircleWithMinus;\r\n","import CircleWithMinus from './circle-with-minus';\r\n\r\nexport * from './circle-with-minus';\r\nexport default CircleWithMinus;\r\n","import * as React from 'react';\r\n\r\nexport interface EliminationProps {\r\n fill?: string;\r\n title?: string;\r\n height?: string;\r\n width?: string;\r\n viewBox?: string;\r\n}\r\n\r\nconst Elimination: React.FunctionComponent> = ({\r\n height,\r\n width,\r\n ...rest\r\n}): any => (\r\n \r\n);\r\n\r\nexport default Elimination;\r\n","import Elimination from './elimination';\r\n\r\nexport * from './elimination';\r\nexport default Elimination;\r\n","import styled from 'styled-components';\r\n\r\nimport { COLOR } from '../../../../packages/constants';\r\nimport CircleWithPlus from '../../../../packages/icons/circle-with-plus';\r\nimport CircleWithMinus from '../../../../packages/icons/circle-with-minus';\r\nimport Elimination from '../../../../packages/icons/elimination';\r\nimport Edit from '../../../../packages/icons/edit';\r\nimport ChevronLeft from '../../../../packages/icons/chevron-left';\r\nimport ChevronRight from '../../../../packages/icons/chevron-right';\r\n\r\nconst iconWidth = '12px';\r\nexport const StyledPlus = styled(CircleWithPlus)`\r\n fill: ${COLOR.BRAND.REPORTING};\r\n width: ${iconWidth};\r\n height: ${iconWidth};\r\n`;\r\n\r\nexport const StyledMinus = styled(CircleWithMinus)`\r\n fill: ${COLOR.BRAND.REPORTING};\r\n width: ${iconWidth};\r\n height: ${iconWidth};\r\n`;\r\n\r\nexport const StyledElimination = styled(Elimination)`\r\n fill: ${COLOR.BRAND.REPORTING};\r\n width: ${iconWidth};\r\n height: ${iconWidth};\r\n`;\r\n\r\nexport const StyledEdit = styled(Edit)`\r\n fill: ${COLOR.DATAGRID.DATAGRID_TEXT};\r\n width: ${iconWidth};\r\n height: ${iconWidth};\r\n position: absolute;\r\n bottom: 5px;\r\n right: 2px;\r\n z-index: 0;\r\n`;\r\n\r\nconst chevronAttrs = `\r\n fill: ${COLOR.DATAGRID.DATAGRID_TEXT};\r\n width: 10px;\r\n height: 10px;\r\n`;\r\n\r\nexport const StyledChevronRight = styled(ChevronRight)`\r\n ${chevronAttrs}\r\n`;\r\n\r\nexport const StyledChevronLeft = styled(ChevronLeft)`\r\n ${chevronAttrs}\r\n`;\r\n","import styled from 'styled-components';\r\n\r\nimport { SPACING, COLOR } from '../../../../packages/constants';\r\nimport { StyledPlus, StyledMinus, StyledElimination } from '../icons/icons';\r\n\r\nexport const AccountRow = styled.tr`\r\n width: 100%;\r\n\r\n ${StyledElimination} {\r\n margin-right: ${SPACING.X_SMALL};\r\n }\r\n`;\r\n\r\nexport const ToggleAccountRow = styled.button`\r\n margin: 0;\r\n border: 0;\r\n background-color: transparent;\r\n cursor: pointer;\r\n display: flex;\r\n align-content: center;\r\n padding: 0;\r\n font-weight: 700;\r\n font-size: inherit;\r\n line-height: 15px;\r\n color: ${COLOR.DATAGRID.DATAGRID_TEXT};\r\n\r\n ${StyledPlus},\r\n ${StyledMinus},\r\n ${StyledElimination} {\r\n margin-right: ${SPACING.X_SMALL};\r\n }\r\n\r\n .icon--toggle-row {\r\n display: inline-flex;\r\n }\r\n`;\r\n\r\nexport type HandleToggleAccountRowFn = (id: string) => void;\r\n","import styled from 'styled-components';\r\nimport { COLOR, FONT_SIZE, SPACING } from '../../../../packages/constants';\r\nimport { ToggleAccountRow } from '../account-row/account-row';\r\n\r\nexport interface AccountCellProps {\r\n canBeToggled?: boolean; // can toggle visibility\r\n hasBorderRight?: boolean;\r\n hasTextAlignedLeft?: boolean;\r\n hasNoPadding?: boolean;\r\n indent?: boolean;\r\n isBudget?: boolean; // yellow cell isBudget\r\n isEditable?: boolean; // can be edited\r\n isGroup?: boolean; // is a group cell type\r\n isHeader?: boolean; // header styles\r\n isLocked?: boolean; // show lock symbol\r\n isNumber?: boolean; // text-aligned right\r\n isTotal?: boolean; // grey cell\r\n minWidth?: number;\r\n isDisplayed?: boolean;\r\n}\r\n\r\nexport const AccountCell = styled.div`\r\n box-sizing: border-box;\r\n border-top: 1px solid ${(props) => (props.isGroup ? COLOR.DATAGRID.DATAGRID_DIVIDER_LINE : COLOR.MAIN.FORM_FIELD)};\r\n border-left: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n background-color: ${(props) =>\r\n props.isHeader\r\n ? COLOR.PRIMARY.WHITE\r\n : props.isBudget\r\n ? COLOR.DATAGRID.DATAGRID_BUDGET_BG\r\n : props.isTotal\r\n ? COLOR.DATAGRID.DATAGRID_TOTAL_BG\r\n : COLOR.PRIMARY.WHITE};\r\n display: ${(props) => ((props.canBeToggled && props.isDisplayed) || !props.canBeToggled ? 'inline-flex' : 'none')};\r\n padding: ${(props) =>\r\n props.isGroup && !props.isNumber && !props.canBeToggled\r\n ? '0'\r\n : props.indent\r\n ? `${SPACING.SMALL} ${SPACING.SMALL} ${SPACING.SMALL} ${SPACING.XX_LARGE}`\r\n : props.hasNoPadding\r\n ? '0'\r\n : SPACING.SMALL};\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n font-weight: ${(props) => (props.isHeader ? '700' : '400')};\r\n justify-content: ${(props) =>\r\n props.hasTextAlignedLeft\r\n ? 'flex-start'\r\n : props.isHeader && !props.isTotal\r\n ? 'center'\r\n : props.isNumber\r\n ? 'flex-end'\r\n : props.isGroup\r\n ? 'flex-end'\r\n : props.isTotal && props.isHeader\r\n ? 'space-between'\r\n : 'flex-start'};\r\n line-height: 15px;\r\n width: 100%;\r\n min-width: ${(props) => (props.minWidth ? `${props.minWidth}px` : props.isTotal ? '100%' : '95px')};\r\n position: relative;\r\n color: ${COLOR.DATAGRID.DATAGRID_TEXT};\r\n\r\n &:last-child {\r\n border-right: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n }\r\n\r\n ${ToggleAccountRow} {\r\n padding: ${SPACING.SMALL};\r\n }\r\n\r\n input[type='checkbox'] {\r\n margin: 0;\r\n margin-top: -1px;\r\n position: relative;\r\n top: 2px;\r\n height: 13px;\r\n width: 13px;\r\n }\r\n\r\n ${({ isLocked }) =>\r\n isLocked &&\r\n `\r\n padding-left ${SPACING.LARGE};\r\n \r\n &::before {\r\n position: absolute;\r\n font-family: 'FontAwesome', sans-serif;\r\n bottom: ${SPACING.X_SMALL};\r\n left: ${SPACING.X_SMALL};\r\n content: '\\f023';\r\n color: ${COLOR.MAIN.DARK_GREY};\r\n opacity: 0.3;\r\n }`}\r\n`;\r\n\r\nexport const TruncateText = styled.div`\r\n display: block;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n width: 269px;\r\n text-align: left;\r\n`;\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport { useState, useEffect, useRef } from 'react';\r\nimport styled from 'styled-components';\r\nimport { COLOR, FONT_SIZE, FONT_STACK, SPACING } from '../../../../packages/constants';\r\nimport { LoadingSpinner, Icon } from '../../../loading-spinner';\r\nimport { AccountCell, AccountCellProps } from '../account-cell/account-cell';\r\nimport { StyledEdit } from '../icons/icons';\r\n\r\nexport interface AccountCellInputProps extends AccountCellInputDivProps {\r\n cellId: string;\r\n inputProps: InputProps;\r\n}\r\n\r\ninterface AccountCellInputDivProps extends AccountCellProps {\r\n isSaving?: boolean;\r\n}\r\n\r\ninterface InputProps extends React.HTMLProps {\r\n dataId: string;\r\n saveFn: SaveCallbackFn;\r\n}\r\n\r\nexport type SaveCallbackFn = ({ cellId, value }: { cellId: string; value: string }) => Promise;\r\n\r\nexport interface SaveCallbackFnResponse {\r\n data: {\r\n value: string | number;\r\n };\r\n}\r\n\r\nconst StyledLoadingSpinner = styled(LoadingSpinner)`\r\n position: absolute;\r\n bottom: 5px;\r\n right: 2px;\r\n\r\n ${Icon} {\r\n margin: 0;\r\n }\r\n`;\r\n\r\nconst AccountCellInputDiv = styled(AccountCell)``;\r\n\r\nconst InvisibleInput = styled.input`\r\n border: 1px solid transparent;\r\n background-color: transparent;\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n font-family: ${FONT_STACK};\r\n padding: ${SPACING.X_SMALL} ${SPACING.SMALL};\r\n margin: 0;\r\n width: 140px;\r\n z-index: 1;\r\n color: ${COLOR.DATAGRID.DATAGRID_TEXT};\r\n\r\n &:hover + ${StyledEdit} {\r\n fill: ${COLOR.BRAND.REPORTING};\r\n }\r\n\r\n &:focus {\r\n box-shadow: 0 0 3px inset ${COLOR.BRAND.REPORTING};\r\n\r\n + ${StyledEdit} {\r\n fill: ${COLOR.BRAND.REPORTING};\r\n }\r\n }\r\n`;\r\n\r\nconst updateCell = ({\r\n e,\r\n value,\r\n setCellValue,\r\n setLastSavedValue,\r\n lastModifiedRef,\r\n}: {\r\n e: React.BaseSyntheticEvent;\r\n value: string | number;\r\n setCellValue: React.Dispatch>;\r\n setLastSavedValue: React.Dispatch>;\r\n lastModifiedRef: React.MutableRefObject;\r\n}) => {\r\n /**\r\n * Before updating the cell, ensure the user is not currently editing it\r\n * by comparing when it was lastModifed to when the event fired.\r\n * This is necessary to prevent overwriting subsequent changes the user made\r\n * while the callback was beind handled.\r\n * It's important that lastModified is a ref value so it is live rather than\r\n * when the function was called.\r\n */\r\n if (lastModifiedRef.current < e.timeStamp) {\r\n setCellValue(value); // write to the cell the new value\r\n }\r\n // always update the lastSavedValue\r\n setLastSavedValue(value);\r\n};\r\n\r\n/**\r\n * Handles saving and updating the cell saving state and value accordingly\r\n * Will save if it is passed an unsaved value\r\n * Calls a saveCallbackFn passed in to it so the value can be persisted.\r\n */\r\nconst saveHandler = async ({\r\n e,\r\n cellId,\r\n lastSavedValue,\r\n lastModifiedRef,\r\n setCellValue,\r\n setLastAttemptedSaveValue,\r\n setLastSavedValue,\r\n saveCallbackFn,\r\n isMountedRef,\r\n}: {\r\n e: React.BaseSyntheticEvent;\r\n cellId: string;\r\n lastSavedValue: string | number | string[];\r\n lastModifiedRef: React.MutableRefObject;\r\n setCellValue: React.Dispatch>;\r\n setLastAttemptedSaveValue: React.Dispatch>;\r\n setLastSavedValue: React.Dispatch>;\r\n saveCallbackFn: SaveCallbackFn;\r\n isMountedRef: React.MutableRefObject;\r\n}) => {\r\n e.persist(); // react 16 uses event pooling https://reactjs.org/docs/legacy-event-pooling.html\r\n const value = e.target.value;\r\n setLastAttemptedSaveValue(value);\r\n // only save if the value has changed from when it was last saved\r\n if (lastSavedValue !== value) {\r\n try {\r\n const { data } = await saveCallbackFn({ cellId, value });\r\n if (!isMountedRef.current) {\r\n return;\r\n }\r\n // write the value back to the cell to ensure consistency from the server to client\r\n updateCell({ e, value: data.value, setCellValue, setLastSavedValue, lastModifiedRef });\r\n } catch {\r\n console.error('Failed to save', cellId, value);\r\n }\r\n }\r\n};\r\n\r\nconst keyHandler = ({\r\n e,\r\n saveFn,\r\n restoreFn,\r\n}: {\r\n e: React.KeyboardEvent;\r\n saveFn: () => Promise;\r\n restoreFn: () => void;\r\n}) => {\r\n if (e.key === 'Enter') {\r\n saveFn();\r\n } else if (e.key === 'Escape' || e.key === 'Esc') {\r\n restoreFn();\r\n }\r\n};\r\n\r\nexport const AccountCellInput = ({\r\n cellId,\r\n inputProps,\r\n hasTextAlignedLeft,\r\n isGroup,\r\n canBeToggled,\r\n isDisplayed,\r\n hasNoPadding,\r\n}: AccountCellInputProps) => {\r\n const [cellValue, setCellValue] = useState(\r\n inputProps.value === null || typeof inputProps.value === 'undefined' ? '' : inputProps.value,\r\n ); // the current value\r\n const [lastAttemptedSaveValue, setLastAttemptedSaveValue] = useState(\r\n inputProps.value === null || typeof inputProps.value === 'undefined' ? '' : inputProps.value,\r\n );\r\n const [lastSavedValue, setLastSavedValue] = useState(\r\n inputProps.value === null || typeof inputProps.value === 'undefined' ? '' : inputProps.value,\r\n ); // so we can compare or restore the last saved value\r\n const [savingState, setSavingState] = useState({ value: false, lastAttemptedSaveDate: 0 }); // just for display purposes, may have actually completed saving as it has a minimum duration\r\n\r\n const isSaving = savingState.value;\r\n const lastModifiedRef = useRef(0);\r\n const savingTimerRef = useRef(0);\r\n const isMountedRef = useRef(false);\r\n\r\n useEffect(() => {\r\n isMountedRef.current = true;\r\n return () => {\r\n isMountedRef.current = false;\r\n };\r\n }, []);\r\n\r\n /**\r\n * if we get passed in a new value, we should use that value\r\n */\r\n useEffect(() => {\r\n setCellValue(inputProps.value || '');\r\n }, [inputProps.value]);\r\n\r\n /**\r\n * ensure that given the value has not changed (saving the most recent value), saving state isn't set false for a min duration\r\n * if the value has changed (there's a new save pending), the saving state can be cleared\r\n */\r\n useEffect(() => {\r\n if (!isMountedRef.current) {\r\n return;\r\n }\r\n\r\n const currentValueMatchesAttemptedSave = cellValue === lastAttemptedSaveValue;\r\n const attemptedSaveValueMatchesSaved = lastAttemptedSaveValue === lastSavedValue;\r\n const showAsSaving =\r\n currentValueMatchesAttemptedSave && lastAttemptedSaveValue !== null && !attemptedSaveValueMatchesSaved;\r\n const now = Date.now();\r\n const lastAttemptedSaveDate =\r\n lastAttemptedSaveValue !== null && !attemptedSaveValueMatchesSaved\r\n ? now\r\n : savingState.lastAttemptedSaveDate; // the date the user last tried to save a value different to the currently saved value\r\n const diff = now - lastAttemptedSaveDate; // how long it has been since user last tried to save\r\n const minDuration = 500; // minimum time to show saving state for\r\n\r\n // when we're saving the last entered value and clearing the save state a minimum duration must have passed\r\n if (cellValue === lastAttemptedSaveValue && showAsSaving === false) {\r\n savingTimerRef.current = window.setTimeout(() => {\r\n setSavingState({ value: showAsSaving, lastAttemptedSaveDate });\r\n }, Math.max(0, minDuration - diff));\r\n } else {\r\n setSavingState({ value: showAsSaving, lastAttemptedSaveDate });\r\n }\r\n // cleanup\r\n return () => {\r\n window.clearTimeout(savingTimerRef.current);\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [cellValue, lastAttemptedSaveValue, lastSavedValue]);\r\n\r\n return (\r\n \r\n {\r\n setCellValue(e.currentTarget.value);\r\n lastModifiedRef.current = e.timeStamp;\r\n }}\r\n onBlur={(e) =>\r\n saveHandler({\r\n e,\r\n cellId,\r\n // TODO: fix issue #292\r\n // @ts-ignore\r\n lastSavedValue,\r\n lastModifiedRef,\r\n // TODO: fix issue #292\r\n // @ts-ignore\r\n setCellValue,\r\n // TODO: fix issue #292\r\n // @ts-ignore\r\n setLastAttemptedSaveValue,\r\n // TODO: fix issue #292\r\n // @ts-ignore\r\n setLastSavedValue,\r\n saveCallbackFn: inputProps.saveFn,\r\n isMountedRef,\r\n })\r\n }\r\n onKeyDown={(e) =>\r\n keyHandler({\r\n e,\r\n // TODO: fix issue #292\r\n // @ts-ignore\r\n saveFn: saveHandler.bind(e, {\r\n e,\r\n cellId,\r\n lastSavedValue,\r\n lastModifiedRef,\r\n setCellValue,\r\n setLastAttemptedSaveValue,\r\n setLastSavedValue,\r\n saveCallbackFn: inputProps.saveFn,\r\n isMountedRef,\r\n }),\r\n restoreFn: setCellValue.bind(e, lastAttemptedSaveValue === null ? '' : lastAttemptedSaveValue),\r\n })\r\n }\r\n data-test-id={inputProps.dataId}\r\n />\r\n {!isSaving && }\r\n {isSaving && }\r\n \r\n );\r\n};\r\n","import classNames from 'classnames';\r\nimport React, { useEffect, useRef } from 'react';\r\nimport styled from 'styled-components';\r\nimport { COLOR } from '../../../../packages/constants';\r\nimport { camelToKebab } from '../../../../../Scripts/Spotlight/Components/CamelToKebab';\r\nimport {\r\n AccountChildrenType,\r\n AccountsEliminationsActions,\r\n AccountsEliminationsActionTypes,\r\n AccountsEliminationsState,\r\n AccountType,\r\n columnWidths,\r\n DataGridModes,\r\n DetailsColumns,\r\n ExpansionMode,\r\n isExpanded,\r\n} from '../../data-grid';\r\nimport { AccountCellInput, SaveCallbackFn } from '../account-cell-input/account-cell-input';\r\nimport { AccountCell, TruncateText } from '../account-cell/account-cell';\r\nimport { AccountRow, HandleToggleAccountRowFn, ToggleAccountRow } from '../account-row/account-row';\r\nimport { StyledElimination, StyledMinus, StyledPlus } from '../icons/icons';\r\n\r\nexport interface AccountsListProps {\r\n dataId: string;\r\n /**\r\n * The accounts to display\r\n */\r\n accounts: AccountType[];\r\n /**\r\n * Columns to display within the details pane\r\n */\r\n detailsColumns?: DetailsColumns[];\r\n /**\r\n * External function to update displayName\r\n */\r\n displayNameChange?: SaveCallbackFn;\r\n /**\r\n * A callback to\r\n */\r\n gridEliminationsDispatch?: any;\r\n /**\r\n * Expand/Collapse all rows\r\n */\r\n expansionMode?: ExpansionMode;\r\n /**\r\n * External function to toggle expand/collapse of a row\r\n */\r\n handleToggleAccountRow: HandleToggleAccountRowFn;\r\n /**\r\n * Display the eliminated icon on eliminated account rows\r\n */\r\n identifyEliminatedAccounts?: boolean;\r\n /**\r\n * Show details columns for accounts\r\n */\r\n showAccountDetails?: boolean;\r\n /**\r\n * The interaction mode of the grid\r\n */\r\n mode: DataGridModes;\r\n accountsEliminationsState?: AccountsEliminationsState;\r\n accountsEliminationsDispatch?: React.Dispatch;\r\n}\r\n\r\nexport const AccountsListTable = styled.table`\r\n border-top: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n\r\n ${AccountRow}:first-child ${AccountCell} {\r\n border-top: none;\r\n }\r\n`;\r\n\r\nconst AccountName = styled(TruncateText)`\r\n width: 258px;\r\n line-height: 15px;\r\n`;\r\n\r\nconst AccountChildName = styled(TruncateText)<{ identifyEliminatedAccounts: boolean }>`\r\n width: ${(props) => (props.identifyEliminatedAccounts ? '252px' : '269px')};\r\n`;\r\n\r\nconst nbsp = '\\u00A0';\r\n\r\nconst EliminateAccountCheckbox = React.forwardRef(\r\n (\r\n {\r\n dataId,\r\n account,\r\n parentAccount,\r\n checked,\r\n accountsEliminationsDispatch,\r\n }: {\r\n dataId: string;\r\n account: AccountType | AccountChildrenType;\r\n parentAccount?: AccountType;\r\n checked: boolean;\r\n accountsEliminationsDispatch: any;\r\n },\r\n ref: any,\r\n ) => {\r\n const update = () => {\r\n accountsEliminationsDispatch({\r\n type: AccountsEliminationsActionTypes.TOGGLE_ELIMINATION,\r\n account: account,\r\n parentAccount: parentAccount,\r\n });\r\n };\r\n\r\n return (\r\n \r\n );\r\n },\r\n);\r\nEliminateAccountCheckbox.displayName = 'EliminateAccountCheckbox';\r\n\r\nexport const AccountsList = ({\r\n accounts,\r\n detailsColumns = [],\r\n displayNameChange,\r\n expansionMode = ExpansionMode.expanded,\r\n handleToggleAccountRow,\r\n identifyEliminatedAccounts = false,\r\n showAccountDetails = false,\r\n mode = DataGridModes.Default,\r\n dataId,\r\n accountsEliminationsState,\r\n accountsEliminationsDispatch,\r\n}: AccountsListProps): JSX.Element => {\r\n const arrayBuffer = 100; // prevent ref collision by spacing the array, assumes no account has more than this many children\r\n const checkboxesRef = useRef<(HTMLInputElement | null)[]>([]);\r\n\r\n useEffect(() => {\r\n // set the indeterminate state of the checkbox elements\r\n checkboxesRef.current.forEach((el) => {\r\n if (!el || el.type !== 'checkbox') {\r\n return;\r\n }\r\n el.indeterminate = false;\r\n const accountId = el.getAttribute('data-account-id');\r\n if (\r\n accountId !== null &&\r\n accountsEliminationsState &&\r\n accountsEliminationsState.indeterminateEliminations.includes(accountId)\r\n ) {\r\n el.indeterminate = true;\r\n }\r\n });\r\n });\r\n\r\n return (\r\n \r\n \r\n {accounts.map((account: AccountType, i: number) => (\r\n \r\n \r\n {mode === DataGridModes.EditEliminations && (\r\n \r\n \r\n \r\n {account.canEliminate ? (\r\n (checkboxesRef.current[i] = el)}\r\n />\r\n ) : (\r\n nbsp\r\n )}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {account.children.length ? (\r\n handleToggleAccountRow(account.id)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n {identifyEliminatedAccounts &&\r\n account.children.find((x) => x.isEliminated) && (\r\n \r\n )}\r\n \r\n {account.name}\r\n \r\n \r\n ) : (\r\n {account.name}\r\n )}\r\n \r\n \r\n {detailsColumns.includes(DetailsColumns.ReportCode) && (\r\n \r\n \r\n {account.reportCode}\r\n \r\n \r\n )}\r\n {detailsColumns.includes(DetailsColumns.DisplayName) &&\r\n typeof displayNameChange === 'function' && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n {account.children.map((accountChild: AccountChildrenType, j: number) => (\r\n \r\n {mode === DataGridModes.EditEliminations && (\r\n \r\n \r\n \r\n {accountChild.canEliminate ? (\r\n \r\n (checkboxesRef.current[(i + 1) * arrayBuffer + j] = el)\r\n }\r\n />\r\n ) : (\r\n nbsp\r\n )}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {identifyEliminatedAccounts && accountChild.isEliminated && (\r\n \r\n )}\r\n {`${accountChild.name}`}\r\n \r\n \r\n {detailsColumns.includes(DetailsColumns.ReportCode) && (\r\n \r\n \r\n {nbsp}\r\n \r\n \r\n )}\r\n {detailsColumns.includes(DetailsColumns.DisplayName) &&\r\n typeof displayNameChange === 'function' && (\r\n \r\n \r\n {nbsp}\r\n \r\n \r\n )}\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n \r\n );\r\n};\r\n","import styled from 'styled-components';\r\nimport { COLOR } from '../../../../packages/constants';\r\n\r\ninterface AccountsPanelProps {\r\n width: number;\r\n}\r\n\r\nexport const AccountsPanel = styled.div`\r\n min-width: ${(props) => `${props.width}px`};\r\n display: flex;\r\n flex-direction: column;\r\n position: relative;\r\n\r\n &::after {\r\n border-left: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n content: '';\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n width: 1px;\r\n height: 17px;\r\n }\r\n`;\r\n","import styled from 'styled-components';\r\nimport { COLOR } from '../../../../packages/constants';\r\nimport { AccountCell } from '../account-cell/account-cell';\r\n\r\ninterface StyledScrollbarProps {\r\n dataGridWidth: number | null;\r\n}\r\ninterface ScrollProps {\r\n disabled: boolean;\r\n}\r\n\r\n/* removes the default scroll bar to the data grid table for: */\r\nexport const removeScrollbar = `\r\n /* - IE and Edge */\r\n -ms-overflow-style: none;\r\n /* - Firefox */\r\n scrollbar-width: none;\r\n /* - Webkit */\r\n &::-webkit-scrollbar {\r\n display: none;\r\n }\r\n`;\r\n\r\nexport const DataGridScroller = styled.div`\r\n box-sizing: border-box;\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n border-left: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n overflow: ${(props) => (props.disabled ? 'hidden' : 'auto')};\r\n width: 100%;\r\n\r\n ${removeScrollbar}\r\n\r\n ${AccountCell} {\r\n &:last-child {\r\n border-right: 0;\r\n }\r\n }\r\n`;\r\n\r\nexport const StyledScrollbarWrapper = styled.div`\r\n height: 17px;\r\n overflow-y: hidden;\r\n overflow-x: ${(props) => (props.disabled ? 'hidden' : 'auto')};\r\n position: sticky;\r\n bottom: 0;\r\n`;\r\n\r\nexport const StyledScrollbar = styled.div`\r\n height: 17px;\r\n width: ${(props) => (props.dataGridWidth ? `${props.dataGridWidth}px` : '0')};\r\n`;\r\n\r\nexport const StyledDataGrid = styled.div`\r\n box-sizing: border-box;\r\n border-top: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n border-right: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n border-bottom: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n display: flex;\r\n justify-content: space-between;\r\n flex-direction: column;\r\n`;\r\n\r\nexport const StyledDataGridInner = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n`;\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport dayjs from 'dayjs';\r\nimport isBetween from 'dayjs/plugin/isBetween';\r\n\r\ndayjs.extend(isBetween);\r\n\r\ninterface AddFYTotalsProps {\r\n dataRow: {\r\n date: string;\r\n value: number;\r\n }[];\r\n currentFinancialYear: number;\r\n financialYearStartMonth: number;\r\n isBalanceSheet: boolean;\r\n endOfForecast: string;\r\n}\r\n\r\nexport const AddFYTotals = ({\r\n dataRow,\r\n currentFinancialYear,\r\n financialYearStartMonth,\r\n isBalanceSheet,\r\n endOfForecast,\r\n}: AddFYTotalsProps) => {\r\n if (!dataRow.length) return <>{0};\r\n\r\n let total = 0;\r\n\r\n const dataRowLength = dataRow.length;\r\n const start = dayjs(`${currentFinancialYear}-${financialYearStartMonth}`, 'YYYY-MM');\r\n const end = start.add(1, 'year');\r\n const endOfForecastDate = dayjs(endOfForecast);\r\n // check if balanceStart exceeds the endOfForecast date\r\n const balanceStart = start.add(11, 'month').isAfter(endOfForecast)\r\n ? endOfForecastDate // if it does, use the final month\r\n : start.add(11, 'month'); // otherwise use the 11th month from the start\r\n const balanceEnd = start.add(11, 'month').isAfter(endOfForecast) ? endOfForecastDate : end;\r\n // set the data start and end dates\r\n const dataStart = isBalanceSheet ? balanceStart : start;\r\n const dataEnd = isBalanceSheet ? balanceEnd : end;\r\n\r\n for (let i = 0; i < dataRowLength; i++) {\r\n // isBetween inclusive of start and end using '[]'\r\n if (dayjs(dataRow[i].date).isBetween(dataStart, dataEnd, null, '[]')) {\r\n total += dataRow[i].value;\r\n }\r\n }\r\n\r\n return <>{Number(total).toFixed(0)};\r\n};\r\n","import styled from 'styled-components';\r\nimport { COLOR } from '../../../../packages/constants';\r\nimport { AccountCell } from '../account-cell/account-cell';\r\nimport { AccountRow } from '../account-row/account-row';\r\nimport { removeScrollbar } from '../data-grid-scroller/data-grid-scroller';\r\n\r\nconst shadowWidth = 8;\r\n\r\nexport const StyledTable = styled.table`\r\n border-top: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n ${AccountRow}:first-child ${AccountCell} {\r\n border-top: none;\r\n }\r\n`;\r\n\r\nexport const DataGridTotal = styled.table`\r\n border-top: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n position: relative;\r\n width: 130px;\r\n\r\n tr:first-child ${AccountCell} {\r\n border-top: none;\r\n }\r\n\r\n ${AccountCell} {\r\n border-left: 1px solid ${COLOR.DATAGRID.DATAGRID_DIVIDER_LINE};\r\n\r\n &:last-child {\r\n border-right: 0;\r\n }\r\n }\r\n\r\n &::after {\r\n background-image: linear-gradient(90deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.07));\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n left: -${shadowWidth}px;\r\n height: 100%;\r\n width: ${shadowWidth}px;\r\n }\r\n`;\r\n\r\nexport const StyledFloatTable = styled.table`\r\n border-top: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n border-bottom: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n`;\r\n\r\nexport const AccountHeader = styled.thead`\r\n width: 100%;\r\n`;\r\n\r\nexport const FloatTableHead = styled.div`\r\n position: sticky;\r\n z-index: 12;\r\n top: 0;\r\n`;\r\n\r\nexport const FloatHead = styled.div`\r\n box-sizing: border-box;\r\n border-left: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n position: sticky;\r\n z-index: 12;\r\n top: 0;\r\n display: flex;\r\n width: 100%;\r\n overflow: auto;\r\n\r\n ${removeScrollbar}\r\n\r\n ${AccountCell} {\r\n &:last-child {\r\n border-right: 0;\r\n }\r\n }\r\n`;\r\n","import * as React from 'react'; // eslint-disable-line\r\nimport { memo } from 'react';\r\nimport styled from 'styled-components';\r\nimport classNames from 'classnames';\r\n\r\nimport { COLOR } from '../../../../packages/constants';\r\nimport { camelToKebab } from '../../../../../Scripts/Spotlight/Components/CamelToKebab';\r\nimport { AccountChildrenType, AccountType, DataGridData, ExpansionMode, isExpanded, TitleBar } from '../../data-grid';\r\nimport { AccountCell } from '../account-cell/account-cell';\r\n\r\nimport { AddFYTotals } from '../add-fy-totals/add-fy-total';\r\nimport { DataGridTotal, StyledFloatTable, FloatTableHead } from '../table/table';\r\n\r\nconst FYTotalColumnContainer = styled.div<{ disabled: boolean }>`\r\n ${(props) => props.disabled && `opacity: 0.2;`};\r\n`;\r\n\r\nconst HeaderTable = styled(StyledFloatTable)`\r\n border-right: 0px;\r\n width: 100%;\r\n`;\r\n\r\nconst FYTotalAccountCellHeading = styled(AccountCell)`\r\n border-left-color: ${COLOR.DATAGRID.DATAGRID_DIVIDER_LINE};\r\n`;\r\n\r\nconst FYHeadingYearText = styled.span`\r\n font-weight: 400;\r\n`;\r\n\r\nconst MemoizedAddFYTotals = memo(AddFYTotals);\r\n\r\ninterface FYTotalColumn {\r\n dataId: string;\r\n gridData: DataGridData;\r\n expansionMode: ExpansionMode;\r\n currentFinancialYear: number;\r\n financialYearStartMonth: number;\r\n isBalanceSheet: boolean;\r\n disabled: boolean;\r\n}\r\n\r\nexport const FYTotalColumn: React.FC> = ({\r\n dataId,\r\n gridData,\r\n expansionMode,\r\n currentFinancialYear,\r\n financialYearStartMonth,\r\n isBalanceSheet,\r\n disabled,\r\n}) => {\r\n return (\r\n \r\n  \r\n \r\n \r\n \r\n \r\n \r\n \r\n Total{' '}\r\n \r\n FY{`${currentFinancialYear + 1}`.substring(2)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {gridData.accounts.map((account: AccountType, accountIndex: number) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {account.children.map((accountChild: AccountChildrenType, accountChildIndex: number) => (\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","import * as React from 'react'; // eslint-disable-line\r\nimport dayjs, { Dayjs } from 'dayjs';\r\nimport { AccountCell } from '../account-cell/account-cell';\r\n\r\ninterface HeaderCellProps {\r\n dataId: string;\r\n month: Dayjs;\r\n financialYearStartMonth: number;\r\n}\r\n\r\nexport const HeaderCell = ({ dataId, month, financialYearStartMonth }: HeaderCellProps) => {\r\n return (\r\n \r\n {month.format('MMM YY')}\r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport styled from 'styled-components';\r\n\r\nimport { FONT_SIZE, SPACING } from '../../../../packages/constants';\r\nimport THEME from '../../../../packages/constants/themes';\r\nimport { DataGridModes } from '../../data-grid';\r\nimport { Button } from '../../../button';\r\n\r\nconst TopRow = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n padding-top: ${SPACING.X_SMALL};\r\n padding-bottom: ${SPACING.X_SMALL};\r\n`;\r\n\r\nconst TopRowLeftButtonsWrapper = styled.div`\r\n display: flex;\r\n margin-right: auto;\r\n`;\r\n\r\nconst TextAccounts = styled.p`\r\n align-self: center;\r\n font-size: ${FONT_SIZE.SMALL};\r\n`;\r\n\r\nconst TextCurrency = styled.p`\r\n align-self: center;\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n`;\r\n\r\nconst EliminationsSaveButton = styled(Button)`\r\n margin: 0 0 0 10px;\r\n padding: 0 8px;\r\n`;\r\n\r\nconst EliminationsCancelButton = styled(Button)`\r\n margin: 0 0 0 10px;\r\n padding: 0 8px;\r\n`;\r\n\r\nconst EliminationsEditButton = styled(Button)`\r\n margin: 0 0 0 10px;\r\n padding: 0 8px;\r\n`;\r\n\r\nconst AdjustArapButton = styled(Button)`\r\n margin: 0 auto 0 10px;\r\n padding: 0 8px;\r\n`;\r\n\r\ninterface EliminationsControlsProps {\r\n dataId: string;\r\n mode: DataGridModes;\r\n editEliminationsHandler: () => void;\r\n saveEliminationsHandler: () => void;\r\n cancelEliminationsHandler: () => void;\r\n}\r\n\r\nexport const EliminationsControls: React.FC> = ({\r\n dataId,\r\n mode,\r\n editEliminationsHandler,\r\n saveEliminationsHandler,\r\n cancelEliminationsHandler,\r\n}) => {\r\n if (mode === DataGridModes.EditEliminations) {\r\n return (\r\n <>\r\n \r\n Save Eliminations\r\n \r\n \r\n Cancel\r\n \r\n \r\n );\r\n } else {\r\n return (\r\n \r\n Edit Eliminations\r\n \r\n );\r\n }\r\n};\r\n\r\ninterface DataGridHeaderProps {\r\n dataId: string;\r\n mode: DataGridModes;\r\n numAccounts: number;\r\n currency: string;\r\n hasEliminationsMode: boolean;\r\n hasArapAdjustments: boolean;\r\n editEliminationsHandler: () => void;\r\n saveEliminationsHandler: () => Promise;\r\n cancelEliminationsHandler: () => void;\r\n adjustArapHandler: () => void;\r\n}\r\n\r\nexport const DataGridHeader: React.FC> = ({\r\n dataId,\r\n mode,\r\n numAccounts,\r\n currency,\r\n hasEliminationsMode,\r\n hasArapAdjustments,\r\n editEliminationsHandler,\r\n saveEliminationsHandler,\r\n cancelEliminationsHandler,\r\n adjustArapHandler,\r\n}) => {\r\n return (\r\n \r\n {numAccounts} Accounts\r\n \r\n {hasEliminationsMode && (\r\n \r\n )}\r\n {hasArapAdjustments && mode != DataGridModes.EditEliminations && (\r\n \r\n Adjust AR & AP\r\n \r\n )}\r\n \r\n \r\n All values are in {currency}\r\n \r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { memo, useEffect } from 'react';\r\n\r\nimport classNames from 'classnames';\r\nimport dayjs, { Dayjs } from 'dayjs';\r\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter';\r\nimport styled from 'styled-components';\r\nimport { useDebouncedCallback } from 'use-debounce';\r\n\r\nimport { camelToKebab } from '../../../Scripts/Spotlight/Components/CamelToKebab';\r\nimport { COLOR, FONT_SIZE, SPACING } from '../../packages/constants';\r\nimport { SaveCallbackFn } from './atoms/account-cell-input/account-cell-input';\r\nimport { AccountCell } from './atoms/account-cell/account-cell';\r\nimport { AccountRow } from './atoms/account-row/account-row';\r\nimport { AccountsList } from './atoms/accounts-list/accounts-list';\r\nimport { AccountsPanel } from './atoms/accounts-panel/accounts-panel';\r\nimport {\r\n DataGridScroller,\r\n StyledDataGrid,\r\n StyledDataGridInner,\r\n StyledScrollbar,\r\n StyledScrollbarWrapper,\r\n} from './atoms/data-grid-scroller/data-grid-scroller';\r\nimport { FYTotalColumn } from './atoms/fy-total-column/fy-total-column';\r\nimport { HeaderCell } from './atoms/header-cell/header-cell';\r\nimport { DataGridHeader } from './atoms/header/header';\r\nimport { StyledChevronLeft, StyledChevronRight } from './atoms/icons/icons';\r\nimport { StyledTable, StyledFloatTable, AccountHeader, FloatHead, FloatTableHead } from './atoms/table/table';\r\n\r\ndayjs.extend(isSameOrAfter);\r\n\r\nexport interface AccountChildrenType {\r\n id: string;\r\n name: string;\r\n displayName?: string | null;\r\n reportCode?: string | null;\r\n type?: string | null;\r\n children?: AccountChildrenType[] | null;\r\n isEliminated?: boolean;\r\n canEliminate?: boolean;\r\n}\r\n\r\nexport interface AccountType {\r\n id: string;\r\n name: string;\r\n displayName: string | null;\r\n reportCode: string | null;\r\n type: string;\r\n children: AccountChildrenType[];\r\n isEliminated?: boolean;\r\n canEliminate?: boolean;\r\n}\r\n\r\nexport interface DataGridData {\r\n organisation: {\r\n id: string;\r\n name: string;\r\n currency: string;\r\n financialYearStartMonth: number;\r\n startDate: string;\r\n endDate: string;\r\n lastActualsDate: string;\r\n };\r\n accounts: AccountType[];\r\n data: MonthlyDataGroupedByKey;\r\n bandType: string;\r\n mode: string;\r\n isGroup: boolean;\r\n}\r\n\r\n/**\r\n * Columns that appear after the accounts list in a toggleable details pane\r\n */\r\nexport enum DetailsColumns {\r\n ReportCode = 'REPORTCODE',\r\n DisplayName = 'DISPLAYNAME',\r\n}\r\n\r\n/**\r\n * Columns that appear in front of the accounts list\r\n */\r\nexport enum AccountColumns {\r\n Elimination = 'ELIMINATION',\r\n}\r\n\r\n/**\r\n * Columns that appear on the grid (aligned to the end)\r\n */\r\nexport enum GridColumns {\r\n EndOfFinancialYearTotal = 'EOFYTOTAL',\r\n}\r\nexport interface DataGridProps {\r\n data: DataGridData;\r\n /**\r\n * Data Test ID\r\n */\r\n dataId: string;\r\n /**\r\n * External function to update displayName\r\n */\r\n displayNameChange?: SaveCallbackFn;\r\n /**\r\n * Choose what columns to show in the detailsColumns\r\n */\r\n detailsColumns?: DetailsColumns[];\r\n /**\r\n * Option to hide the EOFY column\r\n */\r\n gridColumns?: GridColumns[];\r\n /**\r\n * Expand/Collapse all rows\r\n */\r\n expansionMode?: ExpansionMode;\r\n /**\r\n * Change EOFY calculation method for Balance Sheet\r\n */\r\n isBalanceSheet?: boolean;\r\n /**\r\n * Display the eliminated icon on eliminated account rows\r\n */\r\n identifyEliminatedAccounts?: boolean;\r\n /**\r\n * Can enter mode to edit eliminations\r\n */\r\n hasEliminationsMode?: boolean;\r\n /**\r\n * Can adjust AR and AP\r\n */\r\n hasArapAdjustments?: boolean;\r\n themeProvider?: {};\r\n /**\r\n * External function to dispatch actions to\r\n */\r\n actionHandler?: (action: Action) => Promise;\r\n}\r\n\r\ninterface Action {\r\n type: TType;\r\n payload?: TPayload;\r\n}\r\n\r\ninterface MonthlyDataPoint {\r\n date: string;\r\n value: number;\r\n}\r\n\r\ninterface MonthlyDataGroupedByKey {\r\n [key: string]: MonthlyDataPoint[];\r\n}\r\n\r\ninterface MonthlyDataValueLookup {\r\n [k: string]: number;\r\n}\r\n\r\ninterface GetCellValueProps {\r\n isGroup?: boolean;\r\n month: Dayjs;\r\n accountId: string;\r\n actualsToDate: Dayjs;\r\n monthlyData: MonthlyDataValueLookup;\r\n accountName: string;\r\n dataId: string;\r\n}\r\n\r\n/**\r\n * Different modes control which accounts should be expanded\r\n * In future this might have several modes for having different\r\n * levels of nesting or account types expanded or not\r\n */\r\nexport enum ExpansionMode {\r\n collapsed = 'COLLAPSED', // collapses all accounts\r\n expanded = 'EXPANDED', // expands all accounts\r\n}\r\n\r\n/**\r\n * Actions dispatched to an external handler\r\n */\r\nexport enum DataGridExternalActions {\r\n FETCH_DATA = 'FETCH_DATA',\r\n SAVE_ELIMINATIONS = 'SAVE_ELIMINATIONS',\r\n ADJUST_ARAP = 'ADJUST_ARAP',\r\n}\r\n\r\n/*\r\n * Accounts Eliminations\r\n */\r\n\r\nexport type EliminationsSettings = string[];\r\n\r\nexport enum AccountsEliminationsActionTypes {\r\n TOGGLE_ELIMINATION = 'TOGGLE_ELIMINATION',\r\n RESET_SETTINGS = 'RESET_SETTINGS',\r\n}\r\n\r\nexport interface AccountsEliminationsState {\r\n eliminationsSettings: EliminationsSettings;\r\n indeterminateEliminations: string[];\r\n}\r\n\r\ninterface AccountsEliminationsResetSettingsAction {\r\n type: AccountsEliminationsActionTypes.RESET_SETTINGS;\r\n payload: {\r\n eliminationsSettings: EliminationsSettings;\r\n indeterminateEliminations: string[];\r\n };\r\n}\r\n\r\ninterface AccountsEliminationsToggleEliminationAction {\r\n type: AccountsEliminationsActionTypes.TOGGLE_ELIMINATION;\r\n account: AccountType | AccountChildrenType;\r\n parentAccount?: AccountType;\r\n}\r\n\r\nexport type AccountsEliminationsActions =\r\n | AccountsEliminationsResetSettingsAction\r\n | AccountsEliminationsToggleEliminationAction;\r\n\r\n/**\r\n * Maps accounts that are eliminated to an array.\r\n * Also determines accounts are eliminated if their children are all eliminated.\r\n * Assumes all children are returned necessary to determine the parent is eliminated.\r\n */\r\nconst getEliminatedAccounts = (accounts: AccountType[]) => {\r\n const eliminatedAccounts: string[] = [];\r\n accounts.forEach((account) => {\r\n if (account.isEliminated) {\r\n eliminatedAccounts.push(account.id);\r\n }\r\n if (account.children && account.children.length > 0) {\r\n // filter to get eliminated child accounts\r\n const eliminatedChildren = account.children.filter((item) => {\r\n return item.isEliminated;\r\n });\r\n const eliminatedChildrenIds = eliminatedChildren.map((item) => {\r\n return item.id;\r\n });\r\n /*\r\n * check if the length of the set matches account children length\r\n * if it does, push the account to eliminatedAccounts array\r\n */\r\n if (eliminatedChildren.length === account.children.length) {\r\n eliminatedAccounts.push(account.id);\r\n }\r\n // push the filtered set of child accounts to eliminatedAccounts array\r\n eliminatedAccounts.push(...eliminatedChildrenIds);\r\n }\r\n });\r\n return eliminatedAccounts;\r\n};\r\n\r\nconst getIndeterminateAccounts = (accounts: AccountType[]) => {\r\n const indeterminateAccounts = accounts.filter((account) => {\r\n // set indeterminate if not all children are checked/unchecked\r\n const checkedChildAccounts = account.children.filter((item: AccountChildrenType) => {\r\n return item.isEliminated;\r\n });\r\n if (checkedChildAccounts.length !== 0 && checkedChildAccounts.length !== account.children.length) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n const indeterminateAccountIds: string[] = indeterminateAccounts.map((item) => item.id);\r\n return indeterminateAccountIds;\r\n};\r\n\r\nexport const accountsEliminationsReducer = (\r\n state: AccountsEliminationsState,\r\n action: AccountsEliminationsActions,\r\n): AccountsEliminationsState => {\r\n const handleUpdate = ({\r\n account,\r\n parentAccount,\r\n }: {\r\n account: AccountType | AccountChildrenType;\r\n parentAccount?: AccountType;\r\n }) => {\r\n // toggle state\r\n // push to eliminationsSettings array\r\n const eliminationsSettingsCopy = [...state.eliminationsSettings];\r\n const indeterminateEliminationsCopy = [...state.indeterminateEliminations];\r\n const matchedIndex = eliminationsSettingsCopy.indexOf(account.id);\r\n const isAdding = matchedIndex < 0;\r\n\r\n if (isAdding) {\r\n eliminationsSettingsCopy.push(account.id);\r\n } else {\r\n eliminationsSettingsCopy.splice(matchedIndex, 1);\r\n }\r\n\r\n // remove this account from indeterminate state\r\n const indeterminateAccountIndex = indeterminateEliminationsCopy.indexOf(account.id);\r\n if (indeterminateAccountIndex >= 0) {\r\n indeterminateEliminationsCopy.splice(indeterminateAccountIndex, 1);\r\n }\r\n\r\n if (typeof parentAccount !== 'undefined') {\r\n // remove parent from indeterminate state\r\n const indeterminateParentAccountIndex = indeterminateEliminationsCopy.indexOf(parentAccount.id);\r\n if (indeterminateParentAccountIndex >= 0) {\r\n indeterminateEliminationsCopy.splice(indeterminateParentAccountIndex, 1);\r\n }\r\n //\r\n if (isAdding) {\r\n // set indeterminate if not all children are checked\r\n const checkedItems = parentAccount.children.filter((item: any) => {\r\n const isItemChecked = eliminationsSettingsCopy.includes(item.id);\r\n return isItemChecked;\r\n });\r\n if (\r\n checkedItems.length < parentAccount.children.length &&\r\n !indeterminateEliminationsCopy.includes(parentAccount.id)\r\n ) {\r\n indeterminateEliminationsCopy.push(parentAccount.id);\r\n } else {\r\n // check if all children are checked\r\n if (!eliminationsSettingsCopy.includes(parentAccount.id)) {\r\n eliminationsSettingsCopy.push(parentAccount.id);\r\n }\r\n }\r\n } else {\r\n // uncheck\r\n const parentAccountMatchedIndex = eliminationsSettingsCopy.indexOf(parentAccount.id);\r\n if (parentAccountMatchedIndex >= 0) {\r\n eliminationsSettingsCopy.splice(parentAccountMatchedIndex, 1);\r\n }\r\n // set indeterminate if not all children are unchecked\r\n const distinct = parentAccount.children.filter((item: any) => {\r\n const isItemChecked = eliminationsSettingsCopy.includes(item.id);\r\n return isItemChecked;\r\n });\r\n if (distinct.length > 0 && !indeterminateEliminationsCopy.includes(parentAccount.id)) {\r\n indeterminateEliminationsCopy.push(parentAccount.id);\r\n }\r\n }\r\n }\r\n if (account.children) {\r\n // toggle children\r\n account.children.forEach((childAccount: any) => {\r\n const childMatchedIndex = eliminationsSettingsCopy.indexOf(childAccount.id);\r\n const alreadyHasChild = childMatchedIndex >= 0;\r\n if (isAdding && !alreadyHasChild) {\r\n eliminationsSettingsCopy.push(childAccount.id);\r\n } else if (!isAdding && alreadyHasChild) {\r\n eliminationsSettingsCopy.splice(childMatchedIndex, 1);\r\n }\r\n });\r\n }\r\n\r\n return {\r\n eliminationsSettings: eliminationsSettingsCopy,\r\n indeterminateEliminations: indeterminateEliminationsCopy,\r\n };\r\n };\r\n\r\n switch (action.type) {\r\n case AccountsEliminationsActionTypes.TOGGLE_ELIMINATION: {\r\n const newState = handleUpdate({ account: action.account, parentAccount: action.parentAccount });\r\n return { ...newState };\r\n }\r\n case AccountsEliminationsActionTypes.RESET_SETTINGS: {\r\n const newState = { ...state };\r\n newState.eliminationsSettings = action.payload.eliminationsSettings;\r\n newState.indeterminateEliminations = action.payload.indeterminateEliminations;\r\n return { ...newState };\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const TitleBar = styled.div`\r\n border-left: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n color: ${COLOR.DATAGRID.DATAGRID_TEXT};\r\n display: flex;\r\n align-items: center;\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n font-weight: 700;\r\n justify-content: space-between;\r\n padding: ${SPACING.SMALL};\r\n min-height: 18px;\r\n`;\r\n\r\nconst ToggleAccountDetails = styled.button`\r\n border: 0;\r\n background-color: transparent;\r\n color: ${COLOR.DATAGRID.DATAGRID_TEXT};\r\n cursor: pointer;\r\n line-height: 12px;\r\n font-size: inherit;\r\n border-bottom: 1px solid ${COLOR.PRIMARY.BLACK};\r\n display: flex;\r\n align-items: center;\r\n padding: 0;\r\n`;\r\n\r\nconst DataGridDataTableContainer = styled.div<{ nonDataColumnsWidth: number; disabled: boolean }>`\r\n width: calc(100% - ${(props) => props.nonDataColumnsWidth}px);\r\n position: relative;\r\n ${(props) => props.disabled && `opacity: 0.2;`};\r\n`;\r\n\r\n// flatten the monthly data\r\nconst flattenData = (data: MonthlyDataGroupedByKey) => {\r\n const flatData: MonthlyDataValueLookup = {};\r\n for (const item in data) {\r\n for (const monthlyDataPoint of data[item]) {\r\n flatData[`${item}-${dayjs(monthlyDataPoint.date).format('YYYY-MM')}`] = monthlyDataPoint.value;\r\n }\r\n }\r\n return flatData;\r\n};\r\n\r\nconst GetCellValue = ({\r\n isGroup,\r\n month,\r\n accountId,\r\n actualsToDate,\r\n monthlyData,\r\n accountName,\r\n dataId,\r\n}: GetCellValueProps) => {\r\n const formatString = 'YYYY-MM';\r\n const monthFormatted = dayjs(month).format(formatString);\r\n let value = 0;\r\n const hasVal = typeof monthlyData[`${accountId}-${monthFormatted}`] !== 'undefined';\r\n if (hasVal) {\r\n value = monthlyData[`${accountId}-${monthFormatted}`];\r\n } else {\r\n value = 0;\r\n }\r\n\r\n return (\r\n \r\n {value}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * determines if the account is expanded according to the expansion mode and type of account\r\n * @param expansionMode\r\n * @param account\r\n */\r\n// account is currently unused but should be passed through to make it possible to be used\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nexport const isExpanded = (expansionMode: ExpansionMode, account: AccountType | AccountChildrenType): boolean => {\r\n return expansionMode === ExpansionMode.expanded;\r\n};\r\n\r\nconst MemoizedGetCellValue = memo(GetCellValue);\r\n\r\nexport const columnWidths = {\r\n accounts: 305,\r\n eliminations: 71,\r\n reportCode: 142,\r\n displayName: 156,\r\n endOfFinancialYearTotal: 130,\r\n};\r\n\r\nexport const handleToggleAccountRow = (id: string): void => {\r\n // DOM manipulation to make performance better.\r\n const dataIds = document.querySelectorAll(`.parent-id-${id}`);\r\n const rowIcons = document.querySelectorAll(`[data-account=\"${id}\"] .icon--toggle-row`);\r\n dataIds.forEach((element) => element.classList.toggle('h-display--none'));\r\n rowIcons.forEach((element) => element.classList.toggle('h-display--none'));\r\n};\r\n\r\n/**\r\n * The interaction mode of the grid\r\n */\r\nexport enum DataGridModes {\r\n Default = 'DEFAULT',\r\n EditEliminations = 'EDIT_ELIMINATIONS',\r\n}\r\n\r\nconst DataGrid: React.FC> = ({\r\n data,\r\n dataId,\r\n detailsColumns = [],\r\n gridColumns = [],\r\n expansionMode = ExpansionMode.expanded,\r\n displayNameChange,\r\n isBalanceSheet = false,\r\n identifyEliminatedAccounts = false,\r\n hasEliminationsMode = false,\r\n hasArapAdjustments = false,\r\n actionHandler,\r\n ...props\r\n}) => {\r\n const [showAccountDetails, toggleAccountDetails] = React.useState(false);\r\n const [gridData, setGridData] = React.useState(data);\r\n const [dataGridWidth, setDataGridWidth] = React.useState(0);\r\n const [arrMonths, setArrMonths] = React.useState([]);\r\n const [monthlyData, setMonthlyData] = React.useState(flattenData(data.data));\r\n const [currentFinancialYear, setCurrentFinancialYear] = React.useState(0);\r\n const [actualsToDate, setActualsToDate] = React.useState(dayjs(data.organisation.lastActualsDate));\r\n const [mode, setMode] = React.useState(DataGridModes.Default);\r\n const [accountsEliminationsState, accountsEliminationsDispatch] = React.useReducer(accountsEliminationsReducer, {\r\n eliminationsSettings: getEliminatedAccounts(gridData.accounts),\r\n indeterminateEliminations: getIndeterminateAccounts(gridData.accounts),\r\n });\r\n\r\n const StyledDataGridRef = React.useRef(null);\r\n const DataGridScrollerRef = React.useRef(null);\r\n const DataGridTableRef = React.useRef(null);\r\n const ScrollBarRef = React.useRef(null);\r\n const FloatHeadRef = React.useRef(null);\r\n const FloatHeadRowRef = React.useRef(null);\r\n\r\n let ticking = false;\r\n\r\n const hasDetailsColumns = detailsColumns.length > 0;\r\n const hasFYTotal = gridColumns.includes(GridColumns.EndOfFinancialYearTotal);\r\n\r\n const accountsPanelWidth = (() => {\r\n const accountsWidth = columnWidths.accounts;\r\n const accountColumnsWidth = mode === DataGridModes.EditEliminations ? columnWidths.eliminations : 0;\r\n const detailsWidth = showAccountDetails\r\n ? (() => {\r\n let dw = 0;\r\n detailsColumns.includes(DetailsColumns.ReportCode) && (dw += columnWidths.reportCode);\r\n detailsColumns.includes(DetailsColumns.DisplayName) && (dw += columnWidths.displayName);\r\n return dw;\r\n })()\r\n : 0;\r\n return accountsWidth + accountColumnsWidth + detailsWidth;\r\n })();\r\n\r\n const nonDataColumnsWidth = (() => {\r\n const gridColumnsWidth = hasFYTotal ? columnWidths.endOfFinancialYearTotal : 0;\r\n return accountsPanelWidth + gridColumnsWidth;\r\n })();\r\n\r\n const cells = FloatHeadRef.current && FloatHeadRef.current.querySelectorAll('[data-fy]');\r\n\r\n function update() {\r\n const DataGridScrollerScrollLeft = DataGridScrollerRef.current && DataGridScrollerRef.current.scrollLeft;\r\n const DataGridScrollerRects = DataGridScrollerRef.current && DataGridScrollerRef.current.getClientRects();\r\n\r\n if (DataGridScrollerScrollLeft !== null && DataGridScrollerRects !== null && cells !== null && cells.length) {\r\n const cellNumber =\r\n DataGridScrollerRects[0] &&\r\n cells[0] &&\r\n Math.floor(\r\n (DataGridScrollerRects[0].width + DataGridScrollerScrollLeft) /\r\n cells[0].getBoundingClientRect().width,\r\n );\r\n const cellElement = cells[cellNumber];\r\n\r\n // @ts-ignore\r\n if (cellElement && currentFinancialYear !== Number(cellElement.dataset.fy)) {\r\n // @ts-ignore\r\n setCurrentFinancialYear(Number(cellElement.dataset.fy));\r\n }\r\n if (FloatHeadRowRef.current !== null && DataGridScrollerRef.current !== null) {\r\n if (\r\n FloatHeadRowRef.current.getBoundingClientRect().width -\r\n DataGridScrollerRef.current.getBoundingClientRect().width ===\r\n DataGridScrollerScrollLeft &&\r\n cells[cellNumber - 1]\r\n ) {\r\n // @ts-ignore\r\n setCurrentFinancialYear(Number(cells[cellNumber - 1].dataset.fy));\r\n }\r\n }\r\n }\r\n ticking = false;\r\n }\r\n\r\n function requestTick() {\r\n if (!ticking) {\r\n requestAnimationFrame(update);\r\n ticking = true;\r\n }\r\n }\r\n\r\n function handleScroll() {\r\n requestTick();\r\n }\r\n\r\n handleScroll();\r\n\r\n const handleDataGridScroll = useDebouncedCallback(() => {\r\n if (ScrollBarRef.current !== null && DataGridScrollerRef.current !== null && FloatHeadRef.current !== null) {\r\n const DataGridScrollerScrollLeft = DataGridScrollerRef.current.scrollLeft;\r\n ScrollBarRef.current.scrollLeft = DataGridScrollerScrollLeft;\r\n FloatHeadRef.current.scrollLeft = DataGridScrollerScrollLeft;\r\n }\r\n }, 10);\r\n\r\n const handleScrollBarScroll = () => {\r\n if (DataGridScrollerRef.current !== null && ScrollBarRef.current !== null && FloatHeadRef.current !== null) {\r\n handleScroll();\r\n\r\n DataGridScrollerRef.current.scrollLeft = ScrollBarRef.current.scrollLeft;\r\n FloatHeadRef.current.scrollLeft = DataGridScrollerRef.current.scrollLeft;\r\n }\r\n };\r\n\r\n // update the grid data state when data prop updates\r\n useEffect(() => {\r\n setGridData(data);\r\n }, [data]);\r\n\r\n useEffect(() => {\r\n const startDate = dayjs(gridData.organisation.startDate);\r\n const endDate = dayjs(gridData.organisation.endDate);\r\n // create monthly range between startDate and endDate\r\n const months: Dayjs[] = [];\r\n const diffBetween = endDate.diff(startDate, 'month');\r\n for (let i = 0; i <= diffBetween; i++) {\r\n months.push(startDate.add(i, 'month'));\r\n }\r\n setArrMonths(months);\r\n }, [gridData.organisation.startDate, gridData.organisation.endDate]);\r\n\r\n useEffect(() => {\r\n setActualsToDate(dayjs(gridData.organisation.lastActualsDate));\r\n }, [gridData.organisation.lastActualsDate]);\r\n\r\n useEffect(() => {\r\n setMonthlyData(flattenData(gridData.data));\r\n }, [gridData.data]);\r\n\r\n useEffect(() => {\r\n const getDimensions = () => ({\r\n width: (DataGridTableRef.current && DataGridTableRef.current.offsetWidth) || 0,\r\n });\r\n setDataGridWidth(getDimensions().width);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [DataGridTableRef.current]);\r\n\r\n /* Action handlers */\r\n\r\n const toggleAccountDetailsHandler = () => toggleAccountDetails(!showAccountDetails);\r\n\r\n const editEliminationsHandler = () => {\r\n // set the mode to eliminations mode\r\n setMode(DataGridModes.EditEliminations);\r\n };\r\n\r\n const saveEliminationsHandler = async () => {\r\n if (typeof actionHandler !== 'function') {\r\n // set the mode back to default\r\n setMode(DataGridModes.Default);\r\n return;\r\n }\r\n // save the eliminations settings\r\n await actionHandler({\r\n type: DataGridExternalActions.SAVE_ELIMINATIONS,\r\n payload: { settings: accountsEliminationsState.eliminationsSettings },\r\n });\r\n // set the mode back to default\r\n setMode(DataGridModes.Default);\r\n };\r\n\r\n const cancelEliminationsHandler = () => {\r\n const eliminationsSettings = getEliminatedAccounts(gridData.accounts);\r\n const indeterminateEliminations = getIndeterminateAccounts(gridData.accounts);\r\n\r\n accountsEliminationsDispatch({\r\n type: AccountsEliminationsActionTypes.RESET_SETTINGS,\r\n payload: {\r\n eliminationsSettings: eliminationsSettings,\r\n indeterminateEliminations: indeterminateEliminations,\r\n },\r\n });\r\n\r\n setMode(DataGridModes.Default);\r\n };\r\n\r\n const adjustArapHandler = () => {\r\n if (typeof actionHandler !== 'function') {\r\n return;\r\n }\r\n actionHandler({ type: DataGridExternalActions.ADJUST_ARAP });\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n Accounts{' '}\r\n {hasDetailsColumns && (\r\n \r\n {showAccountDetails && } {showAccountDetails ? 'Hide' : 'Show'}{' '}\r\n details️ {!showAccountDetails && }\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {mode === DataGridModes.EditEliminations && (\r\n \r\n \r\n Eliminate\r\n \r\n \r\n )}\r\n \r\n \r\n Account Name\r\n \r\n \r\n {detailsColumns.includes(DetailsColumns.ReportCode) && (\r\n \r\n \r\n Report Code\r\n \r\n \r\n )}\r\n {detailsColumns.includes(DetailsColumns.DisplayName) && (\r\n \r\n \r\n Spotlight Display Name\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 {arrMonths.map((month: Dayjs) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n handleDataGridScroll()}\r\n disabled={mode === DataGridModes.EditEliminations}\r\n >\r\n \r\n \r\n {gridData.accounts.map((account: AccountType) => (\r\n \r\n \r\n {arrMonths.map((month: Dayjs) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n {account.children.map((accountChild: AccountChildrenType) => (\r\n \r\n {arrMonths.map((month: Dayjs) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n \r\n \r\n handleScrollBarScroll()}\r\n disabled={mode === DataGridModes.EditEliminations}\r\n >\r\n \r\n \r\n \r\n {hasFYTotal && (\r\n \r\n )}{' '}\r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport { DataGrid };\r\n","import * as React from 'react';\r\nimport { useCallback, useEffect, useState } from 'react';\r\n\r\nimport { ArrowSeparateVertical, NavArrowUp, NavArrowDown } from 'iconoir-react';\r\nimport cloneDeep from 'lodash/cloneDeep';\r\nimport styled from 'styled-components';\r\nimport useDeepCompareEffect from 'use-deep-compare-effect';\r\n\r\nimport { camelToKebab } from '../../../Scripts/Spotlight/Components/CamelToKebab';\r\nimport { anyCompare, stringCompare } from '../../../Scripts/Spotlight/Utilities/sort';\r\nimport { COLOR, SPACING } from '../../packages/constants';\r\nimport { LoadingSpinner } from '../loading-spinner';\r\n\r\nexport interface DataTableColumnDefinition {\r\n name: string;\r\n header: string;\r\n hideHeader?: boolean;\r\n dataId?: string;\r\n width?: string;\r\n sortable?: boolean;\r\n compareFn?: (value1: any, value2: any) => number;\r\n render?: (row: any) => JSX.Element;\r\n}\r\n\r\ninterface RowData {\r\n id: string;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface DataTableRowDefinition {\r\n data: RowData;\r\n className?: string;\r\n dataId?: string;\r\n}\r\n\r\nexport interface DataTableProps {\r\n columns: DataTableColumnDefinition[];\r\n rows: DataTableRowDefinition[];\r\n defaultSortColumn?: string;\r\n defaultSortDirection?: SortDirection;\r\n rowHeight?: string;\r\n headerFontSize?: string;\r\n dataFontSize?: string;\r\n loading?: boolean;\r\n ariaLabel?: string;\r\n dataId?: string;\r\n pinnedRows?: string[];\r\n}\r\n\r\nexport enum SortDirection {\r\n Ascending = 'ASCENDING',\r\n Descending = 'DESCENDING',\r\n}\r\n\r\ninterface StyledHeaderRowProps {\r\n fontSize?: string;\r\n}\r\n\r\ninterface StyledHeaderCellProps {\r\n width?: string;\r\n}\r\n\r\ninterface StyledRowProps {\r\n height?: string;\r\n fontSize?: string;\r\n}\r\n\r\nconst StyledDataTable = styled.table`\r\n width: 100%;\r\n table-layout: fixed;\r\n border-collapse: separate;\r\n`;\r\n\r\nconst StyledHeaderRow = styled.tr`\r\n font-size: ${(props: StyledHeaderRowProps) => props.fontSize};\r\n font-weight: 400;\r\n color: #031c44;\r\n`;\r\n\r\nconst StyledHeaderCell = styled.th`\r\n padding: 15px ${SPACING.MEDIUM};\r\n text-align: left;\r\n vertical-align: bottom;\r\n word-wrap: break-word;\r\n line-height: 1.5;\r\n ${(props: StyledHeaderCellProps) => (props.width ? `width: ${props.width}` : '')};\r\n`;\r\n\r\nconst StyledRow = styled.tr`\r\n font-size: ${(props: StyledRowProps) => props.fontSize};\r\n color: #031c44;\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n height: ${(props: StyledRowProps) => props.height};\r\n`;\r\n\r\ninterface StyledCellProps {\r\n inFirstRow: boolean;\r\n inLastRow: boolean;\r\n inFirstColumn: boolean;\r\n inLastColumn: boolean;\r\n}\r\n\r\nconst StyledCell = styled.td`\r\n padding: 0 ${SPACING.MEDIUM};\r\n vertical-align: middle;\r\n text-align: left;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n\r\n // border\r\n border-color: #cdd3de;\r\n border-style: solid;\r\n border-left-width: ${(props) => (props.inFirstColumn ? '1px' : '0')};\r\n border-right-width: ${(props) => (props.inLastColumn ? '1px' : '0')};\r\n border-bottom-width: 1px;\r\n border-top-width: ${(props) => (props.inFirstRow ? '1px' : '0')};\r\n border-top-left-radius: ${(props) => (props.inFirstRow && props.inFirstColumn ? '5px' : '0')};\r\n border-top-right-radius: ${(props) => (props.inFirstRow && props.inLastColumn ? '5px' : '0')};\r\n border-bottom-left-radius: ${(props) => (props.inLastRow && props.inFirstColumn ? '5px' : '0')};\r\n border-bottom-right-radius: ${(props) => (props.inLastRow && props.inLastColumn ? '5px' : '0')};\r\n`;\r\n\r\nconst StyledNonSortableHeaderCell = styled.div`\r\n display: flex;\r\n align-items: center;\r\n min-height: 1.4em;\r\n`;\r\n\r\nconst StyledSortableHeaderCell = styled.div`\r\n display: flex;\r\n column-gap: ${SPACING.XX_SMALL};\r\n align-items: center;\r\n cursor: pointer;\r\n user-select: none;\r\n\r\n &:hover {\r\n text-decoration: underline;\r\n text-underline-position: under;\r\n }\r\n`;\r\n\r\nconst StyledSortIcon = styled.div`\r\n align-self: flex-end;\r\n flex-shrink: 0;\r\n height: 1.4em;\r\n width: 1.4em;\r\n`;\r\n\r\nconst StyledHeaderCellText = styled.div`\r\n user-select: text;\r\n`;\r\n\r\nconst StyledLoadingSpinner = styled(LoadingSpinner)`\r\n display: flex;\r\n justify-content: center;\r\n`;\r\n\r\nconst DataTableCell = ({\r\n row,\r\n column,\r\n dataId,\r\n inFirstRow,\r\n inFirstColumn,\r\n inLastRow,\r\n inLastColumn,\r\n}: {\r\n row: DataTableRowDefinition;\r\n column: DataTableColumnDefinition;\r\n dataId?: string;\r\n inFirstRow: boolean;\r\n inFirstColumn: boolean;\r\n inLastRow: boolean;\r\n inLastColumn: boolean;\r\n}) => {\r\n return (\r\n \r\n {column.render ? column.render(row.data) : row.data[column.name] ?? ''}\r\n \r\n );\r\n};\r\n\r\nconst SortableHeaderCell = ({\r\n column,\r\n isCurrentSortColumn,\r\n sortDirection,\r\n changeSortHandler,\r\n}: {\r\n column: DataTableColumnDefinition;\r\n isCurrentSortColumn: boolean;\r\n sortDirection: SortDirection;\r\n changeSortHandler: (columnName: string) => void;\r\n}) => {\r\n return (\r\n changeSortHandler(column.name)}\r\n data-test-id={\r\n column.dataId\r\n ? `${column.dataId}-header-button-sort`\r\n : `${camelToKebab(column.header)}-header-button-sort`\r\n }\r\n >\r\n {!column.hideHeader && {column.header}}\r\n \r\n {isCurrentSortColumn && sortDirection === SortDirection.Ascending && (\r\n \r\n )}\r\n {isCurrentSortColumn && sortDirection === SortDirection.Descending && (\r\n \r\n )}\r\n {!isCurrentSortColumn && }\r\n \r\n \r\n );\r\n};\r\n\r\nexport const DataTable = React.forwardRef(\r\n (\r\n {\r\n columns = [],\r\n rows = [],\r\n defaultSortColumn,\r\n defaultSortDirection = SortDirection.Ascending,\r\n rowHeight = '80px',\r\n headerFontSize = '13px',\r\n dataFontSize = '14px',\r\n loading,\r\n dataId,\r\n ariaLabel,\r\n pinnedRows = [],\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [sortColumnName, setSortColumnName] = useState(defaultSortColumn);\r\n const [sortDirection, setSortDirection] = useState(defaultSortDirection);\r\n\r\n const sort = useCallback(() => {\r\n const rowsClone = cloneDeep(rows);\r\n\r\n if (!sortColumnName) {\r\n return rowsClone;\r\n }\r\n const sortColumn = columns.find((column) => column.name === sortColumnName);\r\n\r\n if (!sortColumn) {\r\n return rowsClone;\r\n }\r\n\r\n const multiplier = sortDirection === SortDirection.Descending ? -1 : 1;\r\n\r\n const defaultCompareFn = (a: any, b: any) => {\r\n const valueA = a[sortColumn.name];\r\n const valueB = b[sortColumn.name];\r\n\r\n if (typeof valueA === 'string' && typeof valueB === 'string') {\r\n return stringCompare(valueA, valueB);\r\n }\r\n\r\n return anyCompare(valueA, valueB);\r\n };\r\n\r\n const sortFn = (rowA: DataTableRowDefinition, rowB: DataTableRowDefinition) => {\r\n const result = sortColumn.compareFn\r\n ? sortColumn.compareFn(rowA.data, rowB.data)\r\n : defaultCompareFn(rowA.data, rowB.data);\r\n\r\n return result * multiplier;\r\n };\r\n\r\n // Calling the sort function on cloned rows, hence mutating the array\r\n rowsClone.sort(sortFn);\r\n\r\n if (pinnedRows) {\r\n const pinnedElements = rowsClone.filter((row) => pinnedRows.includes(row.data.id));\r\n const nonPinnedElements = rowsClone.filter((row) => !pinnedRows.includes(row.data.id));\r\n\r\n const pinnedSortedRows = [...pinnedElements, ...nonPinnedElements];\r\n\r\n return pinnedSortedRows;\r\n } else {\r\n return rowsClone;\r\n }\r\n }, [sortColumnName, sortDirection, rows, columns, pinnedRows]);\r\n\r\n const [sortedRows, setSortedRows] = useState(sort());\r\n\r\n const changeSort = (selectedColumnName: string) => {\r\n const newSortDirection =\r\n sortColumnName === selectedColumnName && sortDirection === SortDirection.Ascending\r\n ? SortDirection.Descending\r\n : SortDirection.Ascending;\r\n\r\n setSortColumnName(selectedColumnName);\r\n setSortDirection(newSortDirection);\r\n };\r\n\r\n useEffect(() => {\r\n setSortColumnName(defaultSortColumn);\r\n setSortDirection(defaultSortColumn ? defaultSortDirection ?? SortDirection.Ascending : null);\r\n }, [defaultSortColumn, defaultSortDirection]);\r\n\r\n useDeepCompareEffect(() => {\r\n const newRows = sort();\r\n setSortedRows(newRows);\r\n }, [columns, rows, sortColumnName, sortDirection, pinnedRows]);\r\n\r\n return (\r\n <>\r\n {loading ? (\r\n \r\n ) : (\r\n \r\n \r\n \r\n {columns.map((column) => (\r\n \r\n {column.sortable ? (\r\n \r\n ) : (\r\n !column.hideHeader && (\r\n \r\n {column.header}\r\n \r\n )\r\n )}\r\n \r\n ))}\r\n \r\n \r\n \r\n {sortedRows.map((row, rowIndex) => {\r\n return (\r\n \r\n {columns.map((column, columnIndex) => (\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\nDataTable.displayName = 'DataTable';\r\n","import * as React from 'react';\r\n\r\nimport SVGBase from '../svg-base/svg-base';\r\n\r\nexport interface TriangleDownProps {\r\n fill?: string;\r\n title?: string;\r\n height?: string;\r\n width?: string;\r\n viewBox?: string;\r\n}\r\n\r\nconst TriangleDown = ({ fill, title, height, width, ...rest }: TriangleDownProps) => (\r\n \r\n \r\n \r\n);\r\n\r\nexport default TriangleDown;\r\n","import TriangleDown from './triangle-down';\r\n\r\nexport * from './triangle-down';\r\nexport default TriangleDown;\r\n","import * as React from 'react';\r\nimport { useCallback, useEffect, useRef, useState } from 'react';\r\nimport { useImperativeHandle } from 'react';\r\n\r\nimport styled, { ThemeProvider } from 'styled-components';\r\n\r\nimport { useClickOutside } from '../../../ModernScripts/Spotlight/Hooks/useClickOutside';\r\nimport { camelToKebab } from '../../../Scripts/Spotlight/Components/CamelToKebab';\r\nimport { COLOR, FONT_SIZE, FONT_STACK, RADIUS, SHADOW, SPACING, THEME } from '../../packages/constants';\r\nimport { SortDown } from '../../packages/icons';\r\nimport TriangleDown from '../../packages/icons/triangle-down';\r\nimport { Button, ButtonAsText, ButtonGroup } from '../button';\r\nimport { CheckboxInput, CheckboxInputProps } from '../checkbox-input';\r\nimport { MultiSelectVariants } from '../multi-select/multi-select';\r\nimport { SearchFilter } from '../search-filter/search-filter';\r\n\r\nexport interface DataItem {\r\n name: string;\r\n id: string;\r\n selected: boolean;\r\n flagColour?: string;\r\n}\r\n\r\nexport interface Category {\r\n categoryName: string;\r\n options: DataItem[];\r\n}\r\n\r\ninterface StyledCheckboxProps extends CheckboxInputProps {\r\n hasMultipleCategories: boolean;\r\n hasModernVariant?: boolean;\r\n}\r\n\r\nexport interface MultiSelectInputButtonProps {\r\n dataId: string;\r\n onClick: React.MouseEventHandler;\r\n}\r\n\r\ntype triggerEl = ({ dataId, onClick }: MultiSelectInputButtonProps) => JSX.Element;\r\n\r\nexport interface MultiSelectInputProps {\r\n dataSet: Category[];\r\n dataId: string;\r\n handleApplyButton: (e?: Category[]) => void;\r\n handleCancelButton: (e?: DataItem[]) => void;\r\n disabled?: boolean;\r\n maxHeight?: string;\r\n maxWidth?: string;\r\n hasFilter?: boolean;\r\n trigger?: triggerEl;\r\n variant: MultiSelectVariants;\r\n}\r\n\r\ninterface DropDownValueProps {\r\n isDropdownOpen: boolean;\r\n disabled?: boolean;\r\n hasLegacyStyles: boolean;\r\n}\r\n\r\nconst DropDownValue = styled.button`\r\n border-radius: ${(props) =>\r\n props.hasLegacyStyles ? 0 : props.isDropdownOpen ? `${RADIUS.DEFAULT} ${RADIUS.DEFAULT} 0 0` : RADIUS.DEFAULT};\r\n border: 1px solid ${COLOR.MAIN.FORM_FIELD};\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n color: ${COLOR.PRIMARY.BLACK};\r\n padding: 6px;\r\n min-width: 120px;\r\n width: 100%;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n font-family: ${FONT_STACK};\r\n font-size: ${(props) => (props.hasLegacyStyles ? '13px' : FONT_SIZE.SMALL)};\r\n line-height: ${(props) => (props.hasLegacyStyles ? '18px' : FONT_SIZE.MEDIUM)};\r\n opacity: ${(props) => (props.disabled ? '0.6' : '1')};\r\n cursor: pointer;\r\n position: relative;\r\n`;\r\n\r\ninterface StyledDropdownProps {\r\n maxWidth?: string;\r\n ref: any;\r\n hasModernVariant?: boolean;\r\n width: string;\r\n}\r\n\r\nconst StyledDropdown = styled.div`\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n border: 1px solid ${COLOR.DROPDOWN.DROPDOWN_BORDER};\r\n border-radius: ${RADIUS.DEFAULT};\r\n box-shadow: ${SHADOW.DEFAULT};\r\n position: absolute;\r\n z-index: 100;\r\n margin-top: ${SPACING.X_SMALL};\r\n max-width: ${(props) => props.maxWidth ?? 'none'};\r\n width: ${(props) => props.width};\r\n`;\r\n\r\nconst StyledCheckbox = styled(CheckboxInput)`\r\n &&& {\r\n align-items: flex-start;\r\n overflow-wrap: anywhere;\r\n }\r\n\r\n span {\r\n margin-top: 1px;\r\n font-size: 13px;\r\n cursor: pointer;\r\n }\r\n\r\n input {\r\n cursor: pointer;\r\n }\r\n`;\r\n\r\nconst OptionCheckbox = styled(StyledCheckbox)`\r\n &&& {\r\n margin-left: ${(props) => (props.hasMultipleCategories ? SPACING.LARGE : 0)};\r\n margin-bottom: 0;\r\n }\r\n`;\r\n\r\nconst AllCheckbox = styled(StyledCheckbox)`\r\n &&& {\r\n margin-top: ${(props) => (props.hasModernVariant ? SPACING.SMALL : SPACING.LARGE)};\r\n margin-bottom: ${(props) =>\r\n props.hasModernVariant ? 0 : props.hasMultipleCategories ? SPACING.SMALL : SPACING.LARGE};\r\n }\r\n\r\n span {\r\n font-weight: ${(props) => (props.hasModernVariant ? 700 : 400)};\r\n }\r\n`;\r\n\r\nconst NotFound = styled.p`\r\n font-size: ${FONT_SIZE.SMALL};\r\n color: ${COLOR.MAIN.FORM_FIELD_DARK};\r\n padding-left: ${SPACING.X_LARGE};\r\n`;\r\n\r\nconst StyledButtonGroup = styled(ButtonGroup)`\r\n padding: ${SPACING.MEDIUM};\r\n background-color: ${COLOR.MAIN.BUTTON_GROUP_BG};\r\n border-top: 1px solid ${COLOR.MAIN.BUTTON_GROUP_BORDER};\r\n border-radius: 0 0 ${RADIUS.DEFAULT} ${RADIUS.DEFAULT};\r\n`;\r\n\r\ninterface CheckboxScrollAreaProps {\r\n maxHeight?: string;\r\n hasModernVariant?: boolean;\r\n}\r\n\r\nconst CheckboxScrollArea = styled.div`\r\n max-height: ${(props) => props.maxHeight};\r\n overflow: auto;\r\n padding: 0 ${(props) => (props.hasModernVariant ? SPACING.SMALL : SPACING.MEDIUM)} ${SPACING.MEDIUM};\r\n`;\r\n\r\nconst CheckboxWrapper = styled.ul``;\r\n\r\nconst StyledDownArrow = styled(SortDown)`\r\n padding: 2px;\r\n align-self: center;\r\n justify-self: flex-end;\r\n pointer-events: none;\r\n`;\r\n\r\ninterface StyledTriangleDownProps {\r\n dropdownOpenState?: boolean;\r\n}\r\n\r\nconst StyledTriangleDown = styled(TriangleDown)`\r\n height: 8px;\r\n width: 8px;\r\n fill: #888;\r\n transform: rotate(${(props) => (props.dropdownOpenState ? '180deg' : 0)})\r\n translateY(${(props) => (props.dropdownOpenState ? '2px' : 0)});\r\n`;\r\n\r\ninterface StyledListItemProps {\r\n flagColour?: string;\r\n hasModernVariant?: boolean;\r\n}\r\n\r\nconst StyledListItem = styled.li`\r\n padding-top: ${SPACING.X_SMALL};\r\n padding-bottom: ${(props) => (props.hasModernVariant ? SPACING.SMALL : SPACING.X_SMALL)};\r\n position: relative;\r\n\r\n ${(props) =>\r\n props.flagColour &&\r\n `&:before {\r\n content: '';\r\n position: absolute;\r\n top: 0px;\r\n bottom: 1px;\r\n left: -12px;\r\n width: 4px;\r\n background: ${props.flagColour};\r\n }`}\r\n`;\r\n\r\ninterface StyledSearchFilterProps {\r\n variant: MultiSelectVariants;\r\n}\r\n\r\nconst StyledSearchFilter = styled(SearchFilter)`\r\n margin: ${(props) => (props.variant === 'modern' ? '10px' : SPACING.X_SMALL)};\r\n`;\r\n\r\ninterface CheckboxProps {\r\n dataId: string;\r\n category: Category;\r\n handleAllCheckboxes: (e?: any) => void;\r\n handleCheckbox: (id: string, categoryName: string) => void;\r\n filterValue: string;\r\n hasMultipleCategories: boolean;\r\n variant: MultiSelectVariants;\r\n}\r\n\r\nconst checkCheckboxState = (category: Category) => {\r\n const parentCheckboxId = `checkbox-all-${camelToKebab(category.categoryName)}`;\r\n const parentCheckboxElement = document.getElementById(parentCheckboxId);\r\n const checkedValues: boolean[] = [];\r\n let count = 0;\r\n\r\n category.options.forEach((item: DataItem) => {\r\n checkedValues.push(item.selected);\r\n if (item.selected) {\r\n count += 1;\r\n }\r\n });\r\n\r\n let firstValue = false;\r\n if (parentCheckboxElement) {\r\n for (let i = 0; checkedValues.length > i; i += 1) {\r\n if (i === 0) {\r\n firstValue = checkedValues[0];\r\n } else {\r\n if (firstValue !== checkedValues[i]) {\r\n // @ts-ignore\r\n parentCheckboxElement.indeterminate = true;\r\n break;\r\n } else if (firstValue && firstValue === checkedValues[i]) {\r\n // @ts-ignore\r\n parentCheckboxElement.indeterminate = false;\r\n } else if (!firstValue && firstValue === checkedValues[i]) {\r\n // @ts-ignore\r\n parentCheckboxElement.indeterminate = false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (parentCheckboxElement) {\r\n // @ts-ignore\r\n parentCheckboxElement.checked = count === checkedValues.length;\r\n }\r\n};\r\n\r\nconst Checkboxes = ({\r\n dataId,\r\n category,\r\n handleAllCheckboxes,\r\n handleCheckbox,\r\n filterValue,\r\n hasMultipleCategories,\r\n variant,\r\n}: CheckboxProps) => {\r\n const filteredList = category.options.filter((item: DataItem) => {\r\n if (filterValue.startsWith(' ')) {\r\n return item.name;\r\n } else {\r\n return item.name.toLowerCase().includes(filterValue.toLowerCase());\r\n }\r\n });\r\n\r\n const hasModernVariant = variant === 'modern';\r\n\r\n useEffect(() => {\r\n checkCheckboxState(category);\r\n }, [category]);\r\n\r\n return (\r\n <>\r\n \r\n handleAllCheckboxes(e)}\r\n thinLabel\r\n inline\r\n hasModernVariant={hasModernVariant}\r\n />\r\n \r\n {filteredList.length > 0 ? (\r\n filteredList\r\n .sort((a: DataItem, b: DataItem) => a.name.trim().localeCompare(b.name.trim()))\r\n .map((item: DataItem) => (\r\n \r\n handleCheckbox(camelToKebab(item.name), category.categoryName)}\r\n checked={item.selected}\r\n hasMultipleCategories={hasMultipleCategories}\r\n thinLabel\r\n inline\r\n />\r\n \r\n ))\r\n ) : (\r\n
  • \r\n No results found.\r\n
  • \r\n )}\r\n \r\n );\r\n};\r\n\r\ninterface DropdownProps {\r\n data: Category[];\r\n dataId: string;\r\n setData: (data: Category[]) => void;\r\n handleApplyButton: () => void;\r\n handleCancelButton: () => void;\r\n hasFilter?: boolean;\r\n maxHeight?: string;\r\n maxWidth?: string;\r\n variant: MultiSelectVariants;\r\n width: string;\r\n}\r\n\r\nconst Dropdown: React.FC> = ({\r\n data,\r\n dataId,\r\n setData,\r\n handleApplyButton,\r\n handleCancelButton,\r\n hasFilter,\r\n maxHeight,\r\n maxWidth,\r\n variant,\r\n width,\r\n}) => {\r\n const [filterValue, setFilterValue] = React.useState('');\r\n const [isDirty, setDirty] = React.useState(false);\r\n\r\n const filterInputRef = useRef(null);\r\n const dropdownRef = useRef();\r\n\r\n useClickOutside(dropdownRef, () => {\r\n switch (variant) {\r\n case 'legacy':\r\n case 'normal':\r\n handleCancelButton();\r\n break;\r\n case 'modern':\r\n handleApplyButton();\r\n }\r\n });\r\n\r\n const handleFilterChange = (e: React.ChangeEvent) => {\r\n setFilterValue(e.target.value);\r\n };\r\n\r\n const handleClearButton = () => {\r\n setFilterValue('');\r\n // @ts-ignore\r\n filterInputRef.current.focus();\r\n };\r\n\r\n const handleCheckbox = (camelToKebabName: string, categoryName: string) => {\r\n const dataCopy = [...data];\r\n\r\n dataCopy.forEach((category: Category, categoryIndex: number) => {\r\n if (category.categoryName === categoryName) {\r\n dataCopy[categoryIndex].options.forEach((item) => {\r\n if (camelToKebab(item.name) === camelToKebabName) {\r\n item.selected = !item.selected;\r\n setData(dataCopy);\r\n setDirty(true);\r\n }\r\n });\r\n checkCheckboxState({ ...category });\r\n }\r\n });\r\n };\r\n\r\n const handleAllCheckboxes = (e: React.ChangeEvent, categoryIndex: number) => {\r\n const dataCopy = [...data];\r\n dataCopy[categoryIndex].options.forEach((item) => {\r\n item.selected = e.target.checked;\r\n });\r\n\r\n setData(dataCopy);\r\n setDirty(true);\r\n };\r\n\r\n useEffect(() => {\r\n function handleKeyListener(e: KeyboardEvent) {\r\n if (e.key === 'Escape') {\r\n if (variant === 'modern') {\r\n handleApplyButton();\r\n } // @ts-ignore\r\n else if (document.activeElement === filterInputRef.current && filterInputRef.current.value.length) {\r\n handleClearButton();\r\n } else {\r\n handleCancelButton();\r\n }\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', handleKeyListener);\r\n\r\n return function cleanupKeyListener() {\r\n document.removeEventListener('keydown', handleKeyListener);\r\n };\r\n }, [handleCancelButton, handleApplyButton, variant]);\r\n\r\n return (\r\n \r\n {hasFilter && (\r\n handleFilterChange(e)}\r\n handleClearButton={handleClearButton}\r\n searchTerm={filterValue}\r\n assistAccess={false}\r\n data-test-id={`${dataId}-multi-select__filter`}\r\n hasClearButton={variant !== 'modern'}\r\n hasSearchIcon={variant === 'modern'}\r\n variant={variant}\r\n />\r\n )}\r\n \r\n {data &&\r\n data.map((category: Category, index: number) => (\r\n \r\n handleAllCheckboxes(e, index)}\r\n handleCheckbox={handleCheckbox}\r\n filterValue={filterValue}\r\n hasMultipleCategories={data?.length > 1}\r\n variant={variant}\r\n />\r\n \r\n ))}\r\n \r\n {variant !== 'modern' && (\r\n \r\n \r\n handleCancelButton()}\r\n >\r\n Cancel\r\n \r\n \r\n handleApplyButton()}\r\n disabled={!isDirty}\r\n >\r\n Apply\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst defaultFilterString = 'No filter';\r\n\r\nexport const MultiSelectInput = React.forwardRef(\r\n (\r\n {\r\n dataSet,\r\n dataId,\r\n disabled,\r\n handleApplyButton,\r\n handleCancelButton,\r\n hasFilter = true,\r\n maxHeight = '240px',\r\n maxWidth,\r\n trigger,\r\n variant,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [data, setData] = useState(dataSet);\r\n const [dropdownOpenState, setDropDownOpenState] = useState(false);\r\n const [dropdownValue, setDropdownValue] = useState(defaultFilterString);\r\n const [containerWidth, setContainerWidth] = useState(0);\r\n const hasLegacyStyles = variant === 'legacy';\r\n\r\n const containerRef = useRef(null);\r\n useImperativeHandle(ref, () => containerRef.current);\r\n\r\n const handleDropdownToggle = () => {\r\n setDropDownOpenState(!dropdownOpenState);\r\n };\r\n\r\n const applyButton = () => {\r\n handleApplyButton(data);\r\n setDropDownOpenState(false);\r\n };\r\n\r\n const cancelButton = useCallback(() => {\r\n const temp = () => handleCancelButton();\r\n // @ts-ignore\r\n setData(temp);\r\n setDropDownOpenState(false);\r\n }, [handleCancelButton]);\r\n\r\n const Trigger = (props: MultiSelectInputButtonProps) => {\r\n if (!trigger) {\r\n return null;\r\n }\r\n\r\n return trigger(props);\r\n };\r\n\r\n useEffect(() => {\r\n setData(dataSet);\r\n }, [dataSet]);\r\n\r\n useEffect(() => {\r\n if (!data) {\r\n return;\r\n }\r\n\r\n const items = data.flatMap((category) => category.options);\r\n const totalItemCount = items.length;\r\n const selectedItemCount = items.filter((item) => item.selected).length;\r\n\r\n const buttonText =\r\n selectedItemCount === 0\r\n ? defaultFilterString\r\n : `${selectedItemCount} of ${totalItemCount} item${totalItemCount === 1 ? '' : 's'}`;\r\n\r\n setDropdownValue(buttonText);\r\n }, [data]);\r\n\r\n const updateContainerWidth = () => {\r\n const newWidth = containerRef?.current?.children[0].clientWidth;\r\n setContainerWidth(newWidth ?? 0);\r\n };\r\n\r\n useEffect(() => {\r\n updateContainerWidth();\r\n\r\n window.addEventListener('resize', updateContainerWidth);\r\n\r\n return () => {\r\n window.removeEventListener('resize', updateContainerWidth);\r\n };\r\n }, []);\r\n\r\n return (\r\n
    \r\n {trigger && (\r\n handleDropdownToggle()}\r\n />\r\n )}\r\n {!trigger && (\r\n \r\n {dropdownValue}{' '}\r\n {hasLegacyStyles ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n )}\r\n {dropdownOpenState && (\r\n \r\n )}\r\n
    \r\n );\r\n },\r\n);\r\nMultiSelectInput.displayName = 'MultiSelectInput';\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, FONT_STACK, SPACING } from '../../packages/constants';\r\nimport { MultiSelectInput } from '../multi-select-input';\r\n\r\nexport type MultiSelectVariants = 'legacy' | 'normal' | 'modern';\r\n\r\ninterface DataItem {\r\n name: string;\r\n id: string;\r\n selected: boolean;\r\n}\r\n\r\ninterface Category {\r\n categoryName: string;\r\n options: DataItem[];\r\n}\r\n\r\nexport interface MultiSelectProps {\r\n dataSet: Category[];\r\n dataId: string;\r\n handleApplyButton: (e?: Category[]) => void;\r\n handleCancelButton: (e?: DataItem[]) => void;\r\n label: string;\r\n disabled?: boolean;\r\n thinLabel?: boolean;\r\n maxHeight?: string;\r\n maxWidth?: string;\r\n hasFilter?: boolean;\r\n variant?: MultiSelectVariants;\r\n}\r\n\r\nconst StyledMultiSelect = styled.div``;\r\n\r\ninterface StyledLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n thinLabel?: boolean;\r\n hasLegacyStyles?: boolean;\r\n}\r\n\r\nconst StyledLabel = styled.label`\r\n padding-bottom: ${(props) => (props.hasLegacyStyles ? 0 : SPACING.XX_SMALL)};\r\n font-family: ${FONT_STACK};\r\n font-size: ${(props) => (props.hasLegacyStyles ? FONT_SIZE.X_SMALL : FONT_SIZE.SMALL)};\r\n font-weight: ${(props) => (props.thinLabel ? '400' : '700')};\r\n line-height: ${(props) => (props.hasLegacyStyles ? 'normal' : FONT_SIZE.MEDIUM)};\r\n margin-bottom: ${(props) => (props.hasLegacyStyles ? '8px' : 0)};\r\n display: block;\r\n color: ${(props) =>\r\n props.invalid ? COLOR.PRIMARY.RED : props.hasLegacyStyles ? COLOR.PRIMARY.BLACK : COLOR.MAIN.LABEL_TEXT};\r\n opacity: ${(props) => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nexport const MultiSelect = React.forwardRef(\r\n (\r\n {\r\n dataSet,\r\n dataId,\r\n label,\r\n disabled,\r\n handleApplyButton,\r\n handleCancelButton,\r\n hasFilter = true,\r\n maxHeight = '240px',\r\n maxWidth,\r\n thinLabel,\r\n variant = 'normal',\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const hasLegacyStyles = variant === 'legacy';\r\n\r\n return (\r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n );\r\n },\r\n);\r\nMultiSelect.displayName = 'MultiSelect';\r\n","import * as React from 'react';\r\nimport { useState, useEffect, useRef, useImperativeHandle } from 'react';\r\n\r\nimport dayjs from 'dayjs';\r\nimport { darken, lighten, transparentize } from 'polished';\r\nimport styled, { css } from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, FONT_STACK, RADIUS, SHADOW } from '../../packages/constants';\r\nimport { ChevronLeft, ChevronRight, SortDown } from '../../packages/icons';\r\nimport { ButtonAsText } from '../button';\r\nimport { Overlay } from '../modal';\r\n\r\n/**\r\n * Month Date Picker Calendar\r\n */\r\nexport interface MonthDatePickerCalendarProps {\r\n year?: number | null;\r\n monthIndex?: number | null;\r\n dispatch: any;\r\n dataId: string;\r\n mode: 'absolute' | 'fixed';\r\n left?: number;\r\n top?: number;\r\n}\r\n\r\ninterface StyledMonthDatePickerCalendarProps {\r\n mode: 'absolute' | 'fixed';\r\n left?: number;\r\n top?: number;\r\n}\r\n\r\nconst calendarHeight = 194;\r\nconst calendarPadding = 6;\r\nconst calendarMargin = 6;\r\n\r\nconst StyledMonthDatePickerCalendar = styled.div`\r\n ${(props) => props.mode && `position: ${props.mode};`}\r\n ${(props) => props.left && `left: ${props.left}px;`}\r\n ${(props) => props.top && `top: ${props.top}px;`}\r\n z-index: 100;\r\n box-sizing: border-box;\r\n margin-top: ${calendarMargin}px;\r\n margin-bottom: ${calendarMargin}px;\r\n border: 1px solid ${COLOR.DROPDOWN.DROPDOWN_BORDER};\r\n padding: ${calendarPadding}px;\r\n width: 280px;\r\n height: ${calendarHeight}px;\r\n border-radius: ${RADIUS.DEFAULT};\r\n background: #fff;\r\n box-shadow: ${SHADOW.DEFAULT};\r\n font-family: ${FONT_STACK};\r\n`;\r\n\r\nconst Cell = styled.li`\r\n box-sizing: border-box;\r\n display: inline-block;\r\n width: 25%;\r\n padding: 10px;\r\n border-radius: 100%;\r\n color: ${COLOR.DROPDOWN.DROPDOWN_OPTION_TEXT};\r\n`;\r\n\r\ninterface CellButtonProps {\r\n isSelected?: boolean;\r\n isGrey?: boolean;\r\n}\r\n\r\nconst CellButton = styled.button`\r\n background: none;\r\n border: none;\r\n display: block;\r\n margin: 0 auto;\r\n border-radius: 15px;\r\n padding: 6px 10px;\r\n cursor: pointer;\r\n font-family: ${FONT_STACK};\r\n ${(props) =>\r\n props.isGrey &&\r\n css`\r\n color: #b7c3d6;\r\n `};\r\n &:hover {\r\n background: ${COLOR.DROPDOWN.DROPDOWN_OPTION_HOVER};\r\n }\r\n ${(props) =>\r\n props.isSelected &&\r\n css`\r\n color: #fff;\r\n background: ${COLOR.DROPDOWN.DROPDOWN_OPTION_SELECTED};\r\n &:hover {\r\n background: ${COLOR.DROPDOWN.DROPDOWN_OPTION_SELECTED};\r\n }\r\n `};\r\n`;\r\n\r\nconst NavButton = styled.button`\r\n background: none;\r\n border: none;\r\n border-radius: 100%;\r\n height: 30px;\r\n width: 30px;\r\n display: inline-block;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n background: ${COLOR.DROPDOWN.DROPDOWN_OPTION_HOVER};\r\n }\r\n &:active {\r\n background: ${darken('0.1', COLOR.DROPDOWN.DROPDOWN_OPTION_HOVER)};\r\n }\r\n`;\r\n\r\nconst PrevButton = styled(NavButton)``;\r\n\r\nconst NextButton = styled(NavButton)``;\r\n\r\nconst StyledChevronLeft = styled(ChevronLeft)`\r\n margin: 0 auto;\r\n`;\r\n\r\nconst StyledChevronRight = styled(ChevronRight)`\r\n margin: 0 auto;\r\n`;\r\n\r\nconst YearButton = styled(ButtonAsText)`\r\n display: inline-block;\r\n margin: 0 auto;\r\n position: relative;\r\n top: 1px;\r\n align-self: center;\r\n font-weight: 400;\r\n cursor: pointer;\r\n`;\r\n\r\nconst YearRangeHeading = styled.span`\r\n margin: 0 auto;\r\n font-family: ${FONT_STACK};\r\n font-size: ${FONT_SIZE.SMALL};\r\n align-self: center;\r\n`;\r\n\r\nconst CalendarHeader = styled.div`\r\n display: flex;\r\n`;\r\n\r\nconst MonthsList = styled.ol`\r\n display: block;\r\n`;\r\n\r\nconst YearsList = styled(MonthsList)``;\r\n\r\nenum ViewModes {\r\n Month = 'MONTH',\r\n Year = 'YEAR',\r\n}\r\n\r\nconst Years = ({\r\n decadeStart,\r\n clickedYear,\r\n selectedYear,\r\n dataId,\r\n}: {\r\n decadeStart: number;\r\n clickedYear: any;\r\n selectedYear: number | null;\r\n dataId: string;\r\n}) => {\r\n /**\r\n * should be the decade for the year user has navigated to\r\n * e.g. 2020-2029, then have a year either side\r\n */\r\n const yearOptions = (() => {\r\n const arr = [];\r\n for (let i = -1; i < 11; i++) {\r\n arr.push(decadeStart + i);\r\n }\r\n return arr;\r\n })();\r\n const decadeEnd = decadeStart + 9;\r\n\r\n return (\r\n \r\n {yearOptions.map((item) => {\r\n const isSelected = typeof selectedYear === 'number' && item === selectedYear;\r\n return (\r\n \r\n clickedYear(item)}\r\n isGrey={item < decadeStart || item > decadeEnd}\r\n isSelected={isSelected}\r\n data-test-id={`${dataId}__years__button-year-${item}`}\r\n data-selected={isSelected}\r\n type=\"button\"\r\n >\r\n {item}\r\n \r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst Months = ({\r\n clickedMonth,\r\n selectedMonth,\r\n isSelectedYear,\r\n dataId,\r\n}: {\r\n clickedMonth: any;\r\n selectedMonth: number | null;\r\n isSelectedYear: boolean;\r\n dataId: string;\r\n}) => {\r\n const monthOptions = [];\r\n\r\n for (let i = 0; i < 12; i++) {\r\n monthOptions.push(dayjs().month(i).format('MMM'));\r\n }\r\n\r\n return (\r\n \r\n {monthOptions.map((monthName, i) => {\r\n const isSelected = typeof selectedMonth === 'number' && i === selectedMonth && isSelectedYear;\r\n return (\r\n \r\n clickedMonth(i)}\r\n isSelected={isSelected}\r\n data-test-id={`${dataId}__months__button-month-${i}`}\r\n data-selected={isSelected}\r\n type=\"button\"\r\n >\r\n {monthName}\r\n \r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst endash = '\\u2013';\r\n\r\nexport const MonthDatePickerCalendar = React.forwardRef(\r\n ({ year = null, monthIndex = null, dispatch, dataId, ...props }, ref) => {\r\n /**\r\n * The values\r\n */\r\n const [selectedYear, setSelectedYear] = useState(year);\r\n const [selectedMonth, setSelectedMonth] = useState(monthIndex);\r\n /**\r\n * Navigation\r\n */\r\n const [navYear, setNavYear] = useState(selectedYear || dayjs().year());\r\n const [navDecadeStart, setNavDecadeStart] = useState(Math.floor(navYear / 10) * 10);\r\n const [viewMode, setViewMode] = useState(ViewModes.Month);\r\n\r\n const clickedYear = (year: number) => {\r\n setNavYear(year);\r\n setNavDecadeStart(Math.floor(year / 10) * 10);\r\n setSelectedMonth(null); // clear the month when a year is chosen\r\n setViewMode(ViewModes.Month);\r\n };\r\n\r\n const clickedMonth = (monthIndex: number) => {\r\n setSelectedMonth(monthIndex);\r\n setSelectedYear(navYear);\r\n dispatch({ type: 'SELECTED_MONTH', data: { monthIndex, year: navYear } });\r\n };\r\n\r\n const clickedPrev = () => {\r\n const newYear = (() => {\r\n if (viewMode === ViewModes.Year) {\r\n return navYear - 10;\r\n }\r\n return navYear - 1;\r\n })();\r\n\r\n setNavDecadeStart(Math.floor(newYear / 10) * 10);\r\n setNavYear(newYear);\r\n };\r\n\r\n const clickedNext = () => {\r\n const newYear = (() => {\r\n if (viewMode === ViewModes.Year) {\r\n return navYear + 10;\r\n }\r\n return navYear + 1;\r\n })();\r\n\r\n setNavDecadeStart(Math.floor(newYear / 10) * 10);\r\n setNavYear(newYear);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {viewMode === ViewModes.Month && (\r\n setViewMode(ViewModes.Year)}\r\n size={FONT_SIZE.SMALL}\r\n type=\"button\"\r\n >\r\n {navYear}\r\n \r\n )}\r\n {viewMode === ViewModes.Year && (\r\n {`${navDecadeStart} ${endash} ${\r\n navDecadeStart + 9\r\n }`}\r\n )}\r\n \r\n \r\n \r\n \r\n {viewMode === ViewModes.Month && (\r\n \r\n )}\r\n {viewMode === ViewModes.Year && (\r\n \r\n )}\r\n \r\n );\r\n },\r\n);\r\nMonthDatePickerCalendar.displayName = 'MonthDatePickerCalendar';\r\n\r\n/**\r\n * Month Date Picker\r\n */\r\n\r\nexport interface MonthDatePickerProps {\r\n value?: string;\r\n dataId: string;\r\n onChange?: ({ year, monthIndex }: { year: number; monthIndex: number }) => void;\r\n /**\r\n * Is it disabled?\r\n */\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n id?: string;\r\n /**\r\n * placeholder text to display when there is no value\r\n */\r\n placeholder?: string;\r\n initialYearView?: number;\r\n className?: string;\r\n name?: string;\r\n position?: 'fixed' | 'absolute';\r\n ariaLabel?: string;\r\n}\r\ninterface MonthDatePickerState {\r\n year: number;\r\n monthIndex: number;\r\n isOpen: boolean;\r\n initialYearView?: number;\r\n left?: number;\r\n top?: number;\r\n}\r\n\r\ninterface DatePickerButton {\r\n isOpen: boolean;\r\n invalid?: boolean;\r\n}\r\n\r\nconst StyledDatePickerButton = styled.button`\r\n position: relative;\r\n z-index: ${(props) => (props.isOpen ? 100 : 1)};\r\n border: 1px solid;\r\n border-color: ${(props) => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.FORM_FIELD)};\r\n border-radius: ${RADIUS.FORM_FIELD};\r\n background-color: ${COLOR.PRIMARY.WHITE};\r\n color: ${COLOR.PRIMARY.BLACK};\r\n width: 140px;\r\n height: 30px;\r\n cursor: pointer;\r\n padding: 8px;\r\n min-width: 120px;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n\r\n :disabled {\r\n background-color: ${darken('0.1', COLOR.PRIMARY.WHITE)};\r\n color: ${transparentize('0.5', COLOR.PRIMARY.BLACK)};\r\n }\r\n`;\r\n\r\nconst StyledPlaceholderText = styled.span`\r\n color: ${lighten('0.2', COLOR.MAIN.FORM_FIELD_DARK)};\r\n`;\r\n\r\nconst StyledDatePickerWrapper = styled.div``;\r\n\r\nconst StyledOverlay = styled(Overlay)`\r\n background-color: transparent;\r\n z-index: 90;\r\n`;\r\n\r\nconst MonthDatePickerReducer = (state: MonthDatePickerState, action: any) => {\r\n switch (action.type) {\r\n case 'OPEN':\r\n return {\r\n ...state,\r\n left: action.data.left,\r\n top: action.data.top,\r\n isOpen: true,\r\n };\r\n case 'CLOSE':\r\n return {\r\n ...state,\r\n isOpen: false,\r\n };\r\n case 'SELECTED_MONTH':\r\n return {\r\n ...state,\r\n monthIndex: action.data.monthIndex,\r\n year: action.data.year,\r\n isOpen: false,\r\n };\r\n case 'UPDATE_DATE':\r\n return {\r\n ...state,\r\n monthIndex: action.data.monthIndex,\r\n year: action.data.year,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\ninterface UseEscapeListenerFn {\r\n onEsc: () => void;\r\n}\r\n\r\nconst useEscapeListener = ({ onEsc }: UseEscapeListenerFn) => {\r\n useEffect(() => {\r\n function handleKeyListener(e: KeyboardEvent) {\r\n if (e.key === 'Escape') {\r\n onEsc();\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', handleKeyListener);\r\n\r\n return function cleanupKeyListener() {\r\n document.removeEventListener('keydown', handleKeyListener);\r\n };\r\n }, [onEsc]);\r\n};\r\n\r\nexport const MonthDatePicker = React.forwardRef(\r\n (\r\n {\r\n value = '',\r\n dataId,\r\n name,\r\n onChange,\r\n placeholder = 'Select date',\r\n initialYearView,\r\n disabled,\r\n invalid,\r\n position = 'absolute',\r\n ariaLabel,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const [state, dispatch] = React.useReducer(MonthDatePickerReducer, {\r\n monthIndex: value ? dayjs(value).month() : undefined,\r\n year: value ? dayjs(value).year() : undefined,\r\n initialYearView: initialYearView,\r\n isOpen: false,\r\n left: undefined,\r\n top: undefined,\r\n });\r\n const { year, monthIndex } = state;\r\n\r\n const calendarRef = useRef(null);\r\n const buttonRef = useRef(null);\r\n useImperativeHandle(ref, () => buttonRef.current);\r\n\r\n const open = (left?: number, top?: number) => {\r\n dispatch({ type: 'OPEN', data: { left: left, top: top } });\r\n };\r\n\r\n const close = () => {\r\n buttonRef?.current?.focus();\r\n\r\n dispatch({ type: 'CLOSE' });\r\n };\r\n\r\n const onEsc = () => {\r\n close();\r\n };\r\n\r\n useEffect(() => {\r\n if (position === 'fixed') {\r\n window.addEventListener('resize', close);\r\n\r\n return function cleanupEventListeners() {\r\n window.removeEventListener('resize', close);\r\n };\r\n }\r\n });\r\n\r\n useEffect(() => {\r\n /* when the value prop changes, update the state by dispatching an action */\r\n // ensure there is a value and that the value has both a year and month, otherwise clear the dates\r\n const dateRegex = new RegExp(/^\\d*[-|/]\\d/);\r\n if (!value || !value.match(dateRegex)) {\r\n dispatch({ type: 'UPDATE_DATE', data: { year: undefined, monthIndex: undefined } });\r\n return;\r\n }\r\n const date = dayjs(value);\r\n const year = date.year();\r\n const month = date.month();\r\n dispatch({ type: 'UPDATE_DATE', data: { year: year, monthIndex: month } });\r\n }, [value]);\r\n\r\n useEffect(() => {\r\n if (typeof onChange === 'function') {\r\n onChange({ year: state.year, monthIndex: state.monthIndex });\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [state.year, state.monthIndex]);\r\n\r\n useEscapeListener({ onEsc });\r\n\r\n const getCalendarPosition = (): { left: number | undefined; top: number | undefined } => {\r\n let left: number | undefined;\r\n let top: number | undefined;\r\n\r\n // Only get position if the calendar is fixed\r\n if (position === 'fixed' && buttonRef?.current) {\r\n const buttonBounds = buttonRef.current.getBoundingClientRect();\r\n\r\n const calendarOuterHeight = calendarHeight + calendarPadding + calendarMargin;\r\n const calendarFitsBelow = buttonBounds.bottom + calendarOuterHeight < window.innerHeight;\r\n const calendarFitsAbove = buttonBounds.top - calendarOuterHeight > 0;\r\n\r\n // If calendar fits above but not below button, put it above.\r\n if (!calendarFitsBelow && calendarFitsAbove) {\r\n top = buttonBounds.top - calendarOuterHeight;\r\n }\r\n // By default, put the calendar below\r\n else {\r\n top = buttonBounds.bottom;\r\n }\r\n\r\n left = buttonBounds.left;\r\n }\r\n\r\n return {\r\n left: left,\r\n top: top,\r\n };\r\n };\r\n\r\n const toggle = () => {\r\n if (state.isOpen) {\r\n close();\r\n } else {\r\n const calendarPosition = getCalendarPosition();\r\n open(calendarPosition.left, calendarPosition.top);\r\n }\r\n };\r\n\r\n const buttonText = (() => {\r\n if (typeof monthIndex === 'number' && typeof year === 'number') {\r\n const monthName = dayjs().set('month', monthIndex).format('MMM');\r\n return `${monthName} ${endash} ${year}`;\r\n }\r\n return {placeholder};\r\n })();\r\n\r\n return (\r\n \r\n \r\n \r\n {buttonText} \r\n \r\n {state.isOpen && (\r\n <>\r\n dispatch({ type: 'CLOSE' })}\r\n data-test-id={`${dataId}__overlay`}\r\n />\r\n \r\n \r\n )}\r\n \r\n );\r\n },\r\n);\r\n\r\nMonthDatePicker.displayName = 'MonthDatePicker';\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { SPACING, FONT_SIZE, COLOR } from '../../packages/constants';\r\nimport { MonthDatePicker, MonthDatePickerProps } from '../month-date-picker';\r\n\r\nexport interface MonthDatePickerFieldProps extends MonthDatePickerProps {\r\n label: string;\r\n validationMessage?: string;\r\n thinLabel?: boolean;\r\n}\r\n\r\ninterface StyledTextLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n thinLabel?: boolean;\r\n}\r\n\r\ninterface StyledValidationMessageProps {\r\n invalid?: boolean;\r\n}\r\n\r\nconst StyledTextLabel = styled.label`\r\n display: inline-block;\r\n padding-bottom: ${SPACING.XX_SMALL};\r\n margin-right: ${SPACING.X_SMALL};\r\n font-size: ${FONT_SIZE.SMALL};\r\n line-height: ${FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nconst StyledValidationMessage = styled.div`\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n line-height: ${FONT_SIZE.SMALL};\r\n color: ${(props: StyledValidationMessageProps): string =>\r\n props.invalid ? COLOR.PRIMARY.RED : COLOR.PRIMARY.BLACK};\r\n padding-top: ${SPACING.SMALL};\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n`;\r\n\r\nexport const MonthDatePickerField = React.forwardRef(\r\n ({ disabled, invalid, label, validationMessage, thinLabel, ariaLabel, ...props }, ref) => {\r\n return (\r\n <>\r\n \r\n {label}\r\n \r\n \r\n {validationMessage && (\r\n {validationMessage}\r\n )}\r\n \r\n );\r\n },\r\n);\r\nMonthDatePickerField.displayName = 'MonthDatePickerField';\r\n","import React from 'react';\r\n\r\nimport { darken, transparentize } from 'polished';\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, RADIUS, SPACING } from '../../packages/constants';\r\n\r\nexport interface AutoCompleteTextInputProps {\r\n name: string;\r\n textOnChange: (value: string) => void;\r\n dropdownOnChange: (value: string, command: DropDownAction) => void;\r\n defaultItems?: string[];\r\n textValue?: string;\r\n defaultPlaceholder?: string;\r\n ariaLabel?: string;\r\n dataId?: string;\r\n fontSize?: number;\r\n lineHeight?: number;\r\n invalid?: boolean;\r\n disabled?: boolean;\r\n required?: boolean;\r\n}\r\n\r\nexport enum DropDownAction {\r\n Insert = 'INSERT',\r\n Remove = 'REMOVE',\r\n}\r\n\r\ninterface KeyboardEvent {\r\n key: string;\r\n}\r\n\r\ninterface TextBoxProps {\r\n invalid?: boolean;\r\n disabled?: boolean;\r\n name?: string;\r\n fontSize?: number;\r\n lineHeight?: number;\r\n}\r\n\r\nconst TextBox = styled.input`\r\n background-color: ${(props: TextBoxProps): string =>\r\n props.disabled ? darken('0.1', COLOR.PRIMARY.WHITE) : COLOR.PRIMARY.WHITE};\r\n color: ${(props: TextBoxProps): string =>\r\n props.disabled ? transparentize('0.5', COLOR.PRIMARY.BLACK) : COLOR.PRIMARY.BLACK};\r\n font-size: ${(props: TextBoxProps): string => (props.fontSize ? `${props.fontSize}px` : FONT_SIZE.SMALL)};\r\n line-height: ${(props: TextBoxProps): string => (props.lineHeight ? `${props.lineHeight}px` : FONT_SIZE.MEDIUM)};\r\n padding: ${SPACING.SMALL};\r\n border-width: 1px;\r\n border-style: solid;\r\n border-color: ${(props: TextBoxProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.FORM_FIELD)};\r\n border-radius: ${RADIUS.DEFAULT};\r\n\r\n &::placeholder {\r\n opacity: 0.65;\r\n }\r\n`;\r\n\r\nconst WrapperRef = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n\r\n button {\r\n padding: 7px 20px;\r\n margin: 0 auto auto 10px;\r\n }\r\n`;\r\n\r\nconst OptionWrapper = styled.div`\r\n position: relative;\r\n`;\r\n\r\nconst ControlWrapper = styled.div`\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n`;\r\n\r\nconst StyledOption = styled.span`\r\n font-size: ${(props: TextBoxProps): string => (props.fontSize ? `${props.fontSize}px` : FONT_SIZE.SMALL)};\r\n line-height: ${(props: TextBoxProps): string => (props.lineHeight ? `${props.lineHeight}px` : FONT_SIZE.MEDIUM)};\r\n background-color: ${(props: TextBoxProps): string =>\r\n props.disabled ? darken('0.1', COLOR.PRIMARY.WHITE) : COLOR.PRIMARY.WHITE};\r\n color: ${(props: TextBoxProps): string =>\r\n props.disabled ? transparentize('0.5', COLOR.PRIMARY.BLACK) : COLOR.PRIMARY.BLACK};\r\n padding: ${SPACING.SMALL};\r\n border-color: ${(props: TextBoxProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.FORM_FIELD)};\r\n border-radius: ${RADIUS.DEFAULT};\r\n border-left: 1px solid\r\n ${(props: TextBoxProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.FORM_FIELD)};\r\n border-right: 1px solid\r\n ${(props: TextBoxProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.FORM_FIELD)};\r\n\r\n &:last-of-type {\r\n border-bottom: 1px solid\r\n ${(props: TextBoxProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.FORM_FIELD)};\r\n }\r\n &:hover,\r\n &:focus {\r\n background-color: ${COLOR.DROPDOWN.DROPDOWN_OPTION_HOVER};\r\n outline: none;\r\n }\r\n`;\r\n\r\nexport const AutoCompleteTextInput = React.forwardRef(\r\n (\r\n {\r\n defaultItems = [],\r\n defaultPlaceholder = 'Please enter a value',\r\n ariaLabel = 'Autocomplete input',\r\n textValue = '',\r\n textOnChange,\r\n dropdownOnChange,\r\n dataId,\r\n disabled,\r\n invalid,\r\n name,\r\n required,\r\n fontSize,\r\n lineHeight,\r\n },\r\n ref,\r\n ) => {\r\n const [displayDropdownList, setDisplayDropdownList] = React.useState(false);\r\n const [placeholder, setPlaceholder] = React.useState(defaultPlaceholder);\r\n const [selectedIndex, setSelectedIndex] = React.useState(-1);\r\n const wrapperRef = React.useRef(null);\r\n const selectRef = React.useRef(null);\r\n\r\n const maxListLength = 2;\r\n const filteredList = defaultItems.filter((item: string) =>\r\n textValue ? item.toLowerCase().includes(textValue.toLowerCase()) : true,\r\n );\r\n const limitedFilteredList = filteredList.slice(0, 3);\r\n\r\n React.useEffect(() => {\r\n document.addEventListener('mousedown', hideList);\r\n\r\n return () => {\r\n document.removeEventListener('mousedown', hideList);\r\n };\r\n });\r\n\r\n React.useEffect(() => {\r\n if (!selectRef.current) return;\r\n\r\n selectRef.current.focus();\r\n }, [selectedIndex]);\r\n\r\n const removeWhiteSpace = (id: string) => {\r\n return id.trim();\r\n };\r\n\r\n const hideList = (e: { target: any }) => {\r\n const { current: wrap } = wrapperRef;\r\n if (wrap && !wrap.contains(e.target)) {\r\n setDisplayDropdownList(false);\r\n setPlaceholder(defaultPlaceholder);\r\n setSelectedIndex(-1);\r\n }\r\n };\r\n\r\n const search = (value: string) => {\r\n textOnChange(value);\r\n setDisplayDropdownList(true);\r\n };\r\n\r\n const selectNext = (e: any) => {\r\n e.preventDefault();\r\n const isLastOrUnselected =\r\n selectedIndex === limitedFilteredList.length - 1 ||\r\n selectedIndex === maxListLength ||\r\n selectedIndex === -1;\r\n const newIndex = isLastOrUnselected ? 0 : selectedIndex + 1;\r\n setSelectedIndex(newIndex);\r\n };\r\n\r\n const selectPrevious = (e: any) => {\r\n e.preventDefault();\r\n const isFirstOrUnselected = selectedIndex === 0 || selectedIndex === -1;\r\n const lastItemIndex = Math.min(limitedFilteredList.length - 1, maxListLength); // Not always showing all 3 items\r\n const newIndex = isFirstOrUnselected ? lastItemIndex : selectedIndex - 1;\r\n setSelectedIndex(newIndex);\r\n };\r\n\r\n const appendValue = (value: string) => {\r\n value = removeWhiteSpace(value);\r\n const getId = defaultItems.indexOf(value);\r\n if (getId !== -1) {\r\n // element exists, we need to remove it and move it to the start of the array\r\n defaultItems.splice(getId, 1);\r\n }\r\n if (value !== '' && value !== defaultPlaceholder) {\r\n dropdownOnChange(value, DropDownAction.Insert);\r\n }\r\n };\r\n\r\n const dropdownListKeyHandler = (event: any, item: string) => {\r\n const itemIndex = defaultItems.indexOf(item);\r\n\r\n if (event.shiftKey && event.key === 'Delete') {\r\n if (itemIndex !== -1) {\r\n dropdownOnChange(defaultItems[itemIndex], DropDownAction.Remove);\r\n setPlaceholder(limitedFilteredList[selectedIndex]);\r\n if (filteredList.length - 1 <= selectedIndex) {\r\n setSelectedIndex(selectedIndex - 1);\r\n }\r\n // If the array only one has item, and we just removed it\r\n if (defaultItems.length === 0 && itemIndex !== -1) {\r\n setPlaceholder(defaultPlaceholder);\r\n setSelectedIndex(-1); // List is empty\r\n }\r\n }\r\n }\r\n };\r\n\r\n const wrapperKeyHandler = (event: KeyboardEvent) => {\r\n switch (event.key) {\r\n case 'ArrowUp':\r\n selectPrevious(event);\r\n break;\r\n\r\n case 'ArrowDown':\r\n selectNext(event);\r\n break;\r\n\r\n case 'Enter':\r\n displayDropdownList\r\n ? selectRef.current\r\n ? selectValue(placeholder)\r\n : appendValue(textValue)\r\n : setDisplayDropdownList(true);\r\n displayDropdownList ? (placeholder == defaultPlaceholder ? setDisplayDropdownList(false) : '') : '';\r\n break;\r\n\r\n case 'Tab':\r\n displayDropdownList ? '' : setDisplayDropdownList(true);\r\n break;\r\n\r\n case 'Escape':\r\n displayDropdownList ? (setDisplayDropdownList(false), setPlaceholder(defaultPlaceholder)) : '';\r\n break;\r\n }\r\n };\r\n\r\n const selectValue = (value: string) => {\r\n if (value !== defaultPlaceholder) {\r\n textOnChange(removeWhiteSpace(value));\r\n }\r\n setDisplayDropdownList(false);\r\n setPlaceholder(defaultPlaceholder);\r\n appendValue(value);\r\n setSelectedIndex(-1);\r\n };\r\n\r\n return (\r\n \r\n \r\n setDisplayDropdownList(defaultItems.length !== 0 && !displayDropdownList)}\r\n onChange={(e: { target: { value: any } }) => search(e.target.value)}\r\n value={textValue}\r\n autoComplete={'off'}\r\n aria-label={ariaLabel}\r\n fontSize={fontSize}\r\n lineHeight={lineHeight}\r\n disabled={disabled}\r\n invalid={invalid}\r\n name={name}\r\n required={required}\r\n />\r\n \r\n \r\n {displayDropdownList\r\n ? limitedFilteredList.map((item: string, index: any) => (\r\n ''}\r\n key={index}\r\n data-index={index}\r\n onClick={() => {\r\n !disabled ? selectValue(item) : setPlaceholder(defaultPlaceholder);\r\n }}\r\n onMouseOver={() => {\r\n !disabled\r\n ? (setSelectedIndex(index), setPlaceholder(removeWhiteSpace(item)))\r\n : setPlaceholder(defaultPlaceholder);\r\n }}\r\n onMouseOut={() => {\r\n setPlaceholder(defaultPlaceholder);\r\n setSelectedIndex(-1);\r\n }}\r\n onKeyDown={(e: any) => dropdownListKeyHandler(e, item)}\r\n tabIndex={0}\r\n onFocus={() => {\r\n !disabled\r\n ? (setSelectedIndex(index), setPlaceholder(removeWhiteSpace(item)))\r\n : setPlaceholder(defaultPlaceholder);\r\n }}\r\n disabled={disabled}\r\n invalid={invalid}\r\n name={name}\r\n fontSize={fontSize}\r\n lineHeight={lineHeight}\r\n >\r\n {removeWhiteSpace(item)}\r\n \r\n ))\r\n : ''}\r\n \r\n \r\n \r\n \r\n );\r\n },\r\n);\r\n\r\nAutoCompleteTextInput.displayName = 'AutoCompleteTextInput';\r\n","import React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { COLOR, FONT_SIZE, Theme } from '../../packages/constants';\r\nimport { AutoCompleteTextInput, DropDownAction } from '../AutoCompleteTextInput';\r\nimport { Button } from '../button';\r\n\r\nexport interface AutoCompleteTextFieldProps {\r\n name: string;\r\n dropdownOnChange: (value: string, command: DropDownAction) => void;\r\n defaultItems?: string[];\r\n defaultPlaceholder?: string;\r\n ariaLabel?: string;\r\n buttonName?: string;\r\n dataId?: string;\r\n theme?: Theme;\r\n label?: string;\r\n thinLabel?: boolean;\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n required?: boolean;\r\n lineHeight?: number;\r\n fontSize?: number;\r\n disabledButtonHandler?: (value: string) => boolean;\r\n}\r\n\r\ninterface StyledTextLabelProps {\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n thinLabel?: boolean;\r\n lineHeight?: number;\r\n fontSize?: number;\r\n}\r\n\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n gap: 1rem;\r\n`;\r\n\r\nconst WrapperBtn = styled.div`\r\n display: block;\r\n`;\r\n\r\nconst StyledTextLabel = styled.span`\r\n display: block;\r\n font-size: ${(props: StyledTextLabelProps): string => (props.fontSize ? `${props.fontSize}px` : FONT_SIZE.SMALL)};\r\n line-height: ${(props: StyledTextLabelProps): string =>\r\n props.lineHeight ? `${props.lineHeight}px` : FONT_SIZE.MEDIUM};\r\n font-weight: ${(props: StyledTextLabelProps): string => (props.thinLabel ? '400' : '700')};\r\n color: ${(props: StyledTextLabelProps): string => (props.invalid ? COLOR.PRIMARY.RED : COLOR.MAIN.LABEL_TEXT)};\r\n opacity: ${(props: StyledTextLabelProps): string => (props.disabled ? '0.7' : '1')};\r\n`;\r\n\r\nexport const AutoCompleteTextField = ({\r\n dropdownOnChange,\r\n defaultItems = [],\r\n buttonName = 'Submit',\r\n defaultPlaceholder = 'Please enter a value',\r\n ariaLabel = 'Autocomplete input',\r\n label,\r\n dataId,\r\n theme,\r\n invalid,\r\n disabled,\r\n thinLabel,\r\n name,\r\n required = false,\r\n lineHeight,\r\n fontSize,\r\n disabledButtonHandler,\r\n}: AutoCompleteTextFieldProps) => {\r\n const [value, setValue] = React.useState('');\r\n\r\n return (\r\n \r\n {label ? (\r\n \r\n {label}\r\n \r\n ) : (\r\n ''\r\n )}\r\n \r\n \r\n dropdownOnChange(value, DropDownAction.Insert)}\r\n disabled={disabledButtonHandler ? disabledButtonHandler(value) : !value}\r\n size={`${fontSize}px`}\r\n theme={theme}\r\n >\r\n {buttonName}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nAutoCompleteTextField.displayName = 'AutoCompleteTextField';\r\n","import styled from 'styled-components';\r\n\r\nimport {\r\n NewReleaseAllProducts,\r\n NewReleaseDashboard,\r\n NewReleaseForecasting,\r\n NewReleaseMulti,\r\n NewReleaseReporting,\r\n} from '../../../../packages/icons';\r\n\r\nconst iconWidth = '18px';\r\n\r\nexport const StyledNewReleaseAllProducts = styled(NewReleaseAllProducts)`\r\n display: inline-block;\r\n height: ${iconWidth};\r\n width: ${iconWidth};\r\n`;\r\n\r\nexport const StyledNewReleaseDashboard = styled(NewReleaseDashboard)`\r\n display: inline-block;\r\n height: ${iconWidth};\r\n width: ${iconWidth};\r\n`;\r\n\r\nexport const StyledNewReleaseForecasting = styled(NewReleaseForecasting)`\r\n display: inline-block;\r\n height: ${iconWidth};\r\n width: ${iconWidth};\r\n`;\r\n\r\nexport const StyledNewReleaseMulti = styled(NewReleaseMulti)`\r\n display: inline-block;\r\n height: ${iconWidth};\r\n width: ${iconWidth};\r\n`;\r\n\r\nexport const StyledNewReleaseReporting = styled(NewReleaseReporting)`\r\n display: inline-block;\r\n height: ${iconWidth};\r\n width: ${iconWidth};\r\n`;\r\n","import * as React from 'react';\r\n\r\nimport dayjs from 'dayjs';\r\nimport utc from 'dayjs/plugin/utc';\r\nimport styled from 'styled-components';\r\n\r\nimport { FONT_SIZE, SPACING } from '../../../../packages/constants';\r\nimport { Text } from '../../../text';\r\nimport { ArticleData } from '../../release-notes';\r\nimport {\r\n StyledNewReleaseAllProducts,\r\n StyledNewReleaseDashboard,\r\n StyledNewReleaseForecasting,\r\n StyledNewReleaseMulti,\r\n StyledNewReleaseReporting,\r\n} from '../icons/icons';\r\n\r\ndayjs.extend(utc);\r\n\r\nexport interface ArticleProps {\r\n /**\r\n * The article data.\r\n */\r\n data: ArticleData;\r\n /**\r\n * Show videos and images\r\n */\r\n showMedia?: boolean;\r\n /**\r\n * Handles click event on video content.\r\n */\r\n handleOpenVideo: (itemId: string, itemURL: string) => void;\r\n}\r\n\r\nexport interface ProductNameProps {\r\n colour?: string;\r\n}\r\n\r\nconst productCategories = [\r\n {\r\n id: 'all-products',\r\n name: 'All Products',\r\n colour: '#435c84',\r\n icon: ,\r\n },\r\n {\r\n id: 'dashboard',\r\n name: 'Dashboard',\r\n colour: '#ffd943',\r\n icon: ,\r\n },\r\n {\r\n id: 'forecasting',\r\n name: 'Forecasting ',\r\n colour: '#40d98c',\r\n icon: ,\r\n },\r\n {\r\n id: 'multi',\r\n name: 'Multi',\r\n colour: 'hsla(285.0980392156863, 100%, 70%, 1)',\r\n icon: ,\r\n },\r\n {\r\n id: 'reporting',\r\n name: 'Reporting ',\r\n colour: '#40c5ff',\r\n icon: ,\r\n },\r\n];\r\n\r\nconst headerColour = '#8292ad';\r\nconst Header = styled.div`\r\n display: flex;\r\n align-items: center;\r\n border-top-left-radius: 4px;\r\n border-top-right-radius: 4px;\r\n margin-bottom: 10px;\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n line-height: ${FONT_SIZE.X_SMALL};\r\n letter-spacing: 0.6px;\r\n color: ${headerColour};\r\n`;\r\n\r\nconst ProductName = styled.div`\r\n margin-left: ${SPACING.SMALL};\r\n color: ${(props) => props.colour || '#435c84'};\r\n font-weight: 400;\r\n text-transform: uppercase;\r\n`;\r\n\r\nconst Divider = styled.div`\r\n width: 1px;\r\n height: 12px;\r\n margin-right: ${SPACING.MEDIUM};\r\n margin-left: ${SPACING.MEDIUM};\r\n background-color: ${headerColour};\r\n color: ${headerColour};\r\n`;\r\n\r\nconst spotlightBrandColor = '#04255b';\r\nconst Title = styled.div`\r\n white-space: nowrap;\r\n margin-bottom: 10px;\r\n font-size: ${FONT_SIZE.LARGE};\r\n font-weight: 500;\r\n line-height: 1.4;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n color: ${spotlightBrandColor};\r\n`;\r\n\r\nconst ThumbnailContainer = styled.div`\r\n max-width: 420px;\r\n height: auto;\r\n margin-bottom: 10px;\r\n`;\r\n\r\nconst StyledImage = styled.img`\r\n display: block;\r\n width: 100%;\r\n height: auto;\r\n`;\r\n\r\nconst ImageThumbnail = styled(StyledImage)`\r\n border-radius: 2px;\r\n`;\r\n\r\nconst VideoThumbnail = styled(StyledImage)`\r\n position: relative;\r\n`;\r\n\r\nconst VideoPlayContainer = styled.div`\r\n position: absolute;\r\n width: 56px;\r\n padding-right: 0;\r\n opacity: 0.6;\r\n`;\r\n\r\nconst VideoPlayImage = styled.img`\r\n border: 0;\r\n vertical-align: middle;\r\n display: inline-block;\r\n max-width: 100%;\r\n margin-top: 0;\r\n margin-bottom: 0;\r\n`;\r\n\r\nconst VideoButton = styled.button`\r\n display: flex;\r\n position: relative;\r\n overflow: hidden;\r\n width: 100%;\r\n height: 100%;\r\n max-width: none;\r\n margin-right: 20px;\r\n justify-content: center;\r\n align-items: center;\r\n border: none;\r\n padding: 0;\r\n cursor: pointer;\r\n`;\r\n\r\nconst LearnMoreLink = styled.a`\r\n text-transform: capitalize;\r\n display: inline-block;\r\n text-align: center;\r\n margin-top: ${SPACING.MEDIUM};\r\n font-size: ${FONT_SIZE.X_SMALL};\r\n font-weight: 500;\r\n letter-spacing: 0.6px;\r\n color: #00b1ff;\r\n`;\r\n\r\nexport const Article = ({ data, showMedia, handleOpenVideo }: ArticleProps) => {\r\n const defaultCategory = productCategories.find((category) => category.id === 'all-products');\r\n const product = productCategories.find((category) => category.id === data.product) || defaultCategory;\r\n\r\n const thumbnailData = data.videoThumbnails || data.thumbnailImage;\r\n\r\n const openVideo = (e: any) => {\r\n e.preventDefault();\r\n handleOpenVideo(data.videoLink?.id as string, data.videoLink?.url as string);\r\n };\r\n\r\n const video = showMedia && data.videoThumbnails && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n\r\n const image = showMedia && data.thumbnailImage && (\r\n \r\n );\r\n\r\n const thumbnail = video || image;\r\n\r\n return (\r\n
    \r\n
    \r\n {product?.icon}\r\n {`${product?.name}`} \r\n \r\n {`${dayjs.utc(data.releaseDate).format('DD MMMM YYYY')}`}\r\n
    \r\n {data.name}\r\n {thumbnailData && {thumbnail} }\r\n \r\n {data.postSummary}\r\n \r\n {data.learnMoreLink && (\r\n \r\n Learn More\r\n \r\n )}\r\n
    \r\n );\r\n};\r\n","import styled from 'styled-components';\r\n\r\nimport { NewReleaseNoData } from '../../../../packages/icons';\r\n\r\nexport const StyledNewReleaseNoData = styled(NewReleaseNoData)`\r\n display: block;\r\n width: 100%;\r\n height: auto;\r\n`;\r\n","import * as React from 'react';\r\n\r\nimport styled from 'styled-components';\r\n\r\nimport { FONT_SIZE, RADIUS, SPACING } from '../../packages/constants';\r\nimport { Article } from './atoms/article/article';\r\nimport { StyledNewReleaseNoData } from './atoms/images/images';\r\n\r\nexport interface ArticleData {\r\n releaseDate: string;\r\n isArchived: boolean;\r\n learnMoreLink?: string;\r\n isDraft: boolean;\r\n name: string;\r\n slug: string;\r\n videoLink?: MediaLink;\r\n videoThumbnails?: Thumbnail;\r\n thumbnailImage?: Thumbnail;\r\n productLabels: string;\r\n lastUpdated: string;\r\n createdOn: string;\r\n lastPublished: string;\r\n postSummary: string;\r\n id: string;\r\n product: string;\r\n cmsLocaleId: string;\r\n}\r\n\r\ninterface MediaLink {\r\n url: string;\r\n id: string;\r\n}\r\n\r\ninterface Thumbnail {\r\n fileId: string;\r\n url: string;\r\n alt: string;\r\n}\r\n\r\nexport interface ReleaseNotesProps {\r\n /**\r\n * List of articles to display in the release notes.\r\n */\r\n articles: ArticleData[];\r\n /**\r\n * URL to open in a new tab.\r\n */\r\n url?: string;\r\n /**\r\n * Label for the URL.\r\n */\r\n urlDisplayText?: string;\r\n /**\r\n * Number of articles to display.\r\n */\r\n displaySize?: number;\r\n /**\r\n * Show videos and images\r\n */\r\n showMedia?: boolean;\r\n /**\r\n * External function to dispatch actions to.\r\n */\r\n handleAction?: (action: Action) => Promise;\r\n}\r\n\r\ninterface Action {\r\n type: TType;\r\n payload?: TPayload;\r\n}\r\n\r\n/**\r\n * Actions dispatched to an external handler\r\n */\r\nexport enum ReleaseNotesExternalActions {\r\n OPEN_VIDEO = 'OPEN_VIDEO',\r\n}\r\n\r\nconst StyledReleaseNotes = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n`;\r\n\r\nconst ArticleContainer = styled.div`\r\n margin: 5px;\r\n padding: ${SPACING.LARGE};\r\n border-radius: ${RADIUS.DEFAULT};\r\n border-style: solid;\r\n border-width: 2px;\r\n box-sizing: border-box;\r\n width: 100%;\r\n background-color: #ffffff;\r\n border-color: transparent;\r\n box-shadow: 0 1px 5px rgba(4, 37, 91, 0.25);\r\n`;\r\n\r\nconst spotlightBrandColor = '#04255b';\r\nconst Link = styled.a`\r\n position: relative;\r\n text-decoration: none;\r\n text-transform: uppercase;\r\n display: inline-block;\r\n text-align: center;\r\n line-height: 2;\r\n margin-top: ${SPACING.XX_LARGE};\r\n font-size: ${FONT_SIZE.LARGE};\r\n font-weight: 500;\r\n padding: 0 1px;\r\n color: ${spotlightBrandColor};\r\n &::before,\r\n &::after {\r\n content: '';\r\n position: absolute;\r\n background-color: ${spotlightBrandColor};\r\n z-index: 1;\r\n height: 5%;\r\n width: 100%;\r\n left: 100%;\r\n bottom: 0;\r\n }\r\n &::before {\r\n width: 0%;\r\n left: 0;\r\n bottom: 0;\r\n }\r\n &::after {\r\n width: 100%;\r\n left: 0;\r\n bottom: 0;\r\n }\r\n`;\r\n\r\nconst NoNewReleasesImage = styled.div`\r\n max-width: 420px;\r\n height: auto;\r\n`;\r\n\r\nconst ReleaseNotes: React.FC> = ({\r\n displaySize,\r\n articles,\r\n url,\r\n urlDisplayText,\r\n showMedia,\r\n handleAction,\r\n ...props\r\n}) => {\r\n const activeArticles = articles.filter((a) => !a.isArchived && !a.isDraft);\r\n const itemsToDisplay = displaySize && displaySize < activeArticles.length ? activeArticles.slice(0, displaySize) : activeArticles;\r\n\r\n const handleOpenVideo = async (id: string, url: string) => {\r\n if (typeof handleAction !== 'function') {\r\n return;\r\n }\r\n\r\n await handleAction({\r\n type: ReleaseNotesExternalActions.OPEN_VIDEO,\r\n payload: {\r\n id: id,\r\n videoURL: url,\r\n },\r\n });\r\n };\r\n\r\n return (\r\n \r\n {itemsToDisplay.length > 0 ? (\r\n itemsToDisplay.map((article: ArticleData) => (\r\n \r\n
    \r\n \r\n ))\r\n ) : (\r\n \r\n \r\n \r\n )}\r\n {url && urlDisplayText && (\r\n \r\n {urlDisplayText}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport { ReleaseNotes };\r\n","import * as React from 'react';\r\n\r\nimport useMergedRef from '@react-hook/merged-ref';\r\nimport { Portal } from 'react-portal';\r\nimport styled from 'styled-components';\r\n\r\nimport { useClickOutside } from '../../../ModernScripts/Spotlight/Hooks/useClickOutside';\r\nimport { camelToKebab } from '../../../Scripts/Spotlight/Components/CamelToKebab';\r\nimport { COLOR } from '../../packages/constants';\r\nimport { SearchFilter } from '../search-filter/search-filter';\r\n\r\nexport interface Option {\r\n value: string;\r\n text: string;\r\n dataId?: string;\r\n flagColour?: string; // little highlight colour\r\n disabled?: boolean;\r\n icon?: React.ReactElement;\r\n}\r\n\r\ninterface ComponentWithDensityProps {\r\n density: Density;\r\n}\r\n\r\ninterface StyledOptionProps {\r\n interactionMode: InteractionModes;\r\n}\r\n\r\ninterface StyledOptionLabelInnerProps extends ComponentWithDensityProps {\r\n interactionMode: InteractionModes;\r\n flagColour?: string; // little highlight colour\r\n disable?: boolean;\r\n}\r\n\r\nexport interface OptionGroup {\r\n label: string;\r\n options: Option[];\r\n}\r\n\r\nexport interface Section {\r\n type: 'section';\r\n options: Array